(function(){ const TIMING = { NAV_COOLDOWN_MS: 300, VIEW_FADE_OUT_MS: 150, VIEW_FADE_IN_MS: 200, VIEW_FADE_DELAY_MS: 50, AUTO_REFRESH_MS: 30000, PRIMARY_NODE_REFRESH_MS: 10000, LOAD_GUARD_MS: 10000, UDP_DISCOVERY_INTERVAL_MS: 5000, WEBSOCKET_PING_INTERVAL_MS: 30000, FRAME_UPDATE_INTERVAL_MS: 50 }; const SELECTORS = { NAV_TAB: '.nav-tab', VIEW_CONTENT: '.view-content', MATRIX_CANVAS: '.matrix-canvas', PRESET_SELECT: '.preset-select', NODE_LIST: '.node-list', CONTROL_PANEL: '.control-panel' }; const CLASSES = { NODE_CONNECTED: 'node-connected', NODE_DISCONNECTED: 'node-disconnected', NODE_SELECTED: 'node-selected', PRESET_ACTIVE: 'preset-active', STREAMING_ACTIVE: 'streaming-active' }; const DEFAULTS = { MATRIX_WIDTH: 16, MATRIX_HEIGHT: 16, UDP_PORT: 4210, WEBSOCKET_PORT: 8080, BROADCAST_ADDRESS: '255.255.255.255' }; const MESSAGES = { NODE_DISCOVERED: 'node:discovered', NODE_LOST: 'node:lost', STREAM_START: 'stream:start', STREAM_STOP: 'stream:stop', STREAM_UPDATE: 'stream:update', PRESET_CHANGED: 'preset:changed', MATRIX_UPDATED: 'matrix:updated' }; window.CONSTANTS = window.CONSTANTS || { TIMING, SELECTORS, CLASSES, DEFAULTS, MESSAGES }; })();