{"version":3,"file":"menu.mjs","sources":["../../src/debug/menu.ts"],"sourcesContent":["/**\n * The logo's menu: host status, network simulation, auth token, panel position,\n * and the session-hide switch.\n *\n * A corner-anchored dropdown on a wide screen; on a phone it takes over the room\n * drawer's box (see `applyMenuPosition` in core.ts), which is why the two never\n * appear together. The logo itself is built by `panel.ts`; this module owns what\n * happens when you press it — tap toggles the drawer, long press opens the menu.\n */\nimport { copyIcon, eyeSlashIcon, keyIcon, networkIcon, settingsIcon, sizedIcon } from \"./icons.ts\";\nimport { authInstances, getBorderColor, getDebugRoot, hidePanelsForSession, isCompactRevealed, latencyRamp, preferences, roomDebugInfo, savePreferences, setCompactMenuOpen, setCompactRevealed } from \"./core.ts\";\nimport { horizontalEdge, verticalEdge } from \"./geometry.ts\";\nimport { isCompact, reflow } from \"./layout.ts\";\nimport { applySegmentedState, bindSegmentedHover } from \"./tokens.ts\";\n\n\n// Long enough not to fire on a hurried tap, short enough not to feel stuck.\nconst LONG_PRESS_MS = 450;\n// Movement beyond this cancels the press — a finger is never perfectly still.\nconst PRESS_SLOP = 10;\n\n\nexport function createMenu(logoContainer: HTMLElement) {\n    var menu = document.createElement('div');\n    menu.id = 'debug-menu';\n    menu.className = 'cds-surface cds-scroll';\n    menu.style.position = 'fixed';\n    // Geometry (corner, min-width, border-radius, max-height, overflow) is owned by\n    // applyMenuPosition — it differs between the dropdown and the compact sheet.\n    // border-box so its 1px border doesn't push it 2px wider than the drawer it\n    // replaces, whose max-width it shares.\n    menu.style.boxSizing = 'border-box';\n    menu.style.backgroundColor = 'rgba(18, 18, 20, 0.97)';\n    menu.style.color = '#fff';\n    menu.style.padding = '0 0 4px 0';\n    menu.style.border = '1px solid rgba(255, 255, 255, 0.08)';\n    menu.style.fontFamily = 'system-ui, -apple-system, sans-serif';\n    menu.style.fontSize = '12px';\n    menu.style.zIndex = '1001';\n    menu.style.boxShadow = '0 8px 28px rgba(0, 0, 0, 0.55)';\n    menu.style.display = 'none';\n\n    // A single faint hairline disappears on the near-black menu. Pairing a light rule\n    // with a dark one below engraves a groove, which reads at a glance without\n    // shouting. 0.16 also brings the menu in line with the panels' 0.15 rules.\n    function makeDivider() {\n        var d = document.createElement('div');\n        d.style.cssText = 'height:1px;flex-shrink:0;background:rgba(255,255,255,0.16);' +\n            'box-shadow:0 1px 0 rgba(0,0,0,0.4)';\n        return d;\n    }\n\n    // Shared section header: a small leading icon + an uppercase, muted label.\n    // Used by every group so they all read the same way.\n    function makeSectionHeader(iconSvg, text) {\n        var h = document.createElement('div');\n        h.style.cssText = 'display:flex;align-items:center;gap:6px;font-size:10px;font-weight:600;' +\n            'letter-spacing:0.6px;text-transform:uppercase;color:#8a8a8a;margin-bottom:8px';\n        h.innerHTML = sizedIcon(iconSvg, 12) + '<span>' + text + '</span>';\n        return h;\n    }\n\n    // Host title bar: a connection status dot + the server host.\n    var hostContainer = document.createElement('div');\n    hostContainer.style.cssText = 'display:flex;align-items:center;gap:8px;padding:9px 12px;cursor:default;' +\n        'background:rgba(255,255,255,0.04);border-bottom:1px solid rgba(255,255,255,0.16);' +\n        'border-top-left-radius:8px;border-top-right-radius:8px';\n\n    var hostDot = document.createElement('span');\n    hostDot.style.cssText = 'flex-shrink:0;width:7px;height:7px;border-radius:50%;background:#666;' +\n        'box-shadow:0 0 0 3px rgba(255,255,255,0.04)';\n\n    var hostValue = document.createElement('div');\n    hostValue.id = 'debug-menu-host';\n    hostValue.style.cssText = 'flex:1;min-width:0;font-size:11px;color:#eee;font-family:monospace;' +\n        'white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:500';\n\n    // Function to update host display (text + green/grey status dot)\n    function updateHostDisplay() {\n        var hostText = 'N/A';\n        var connected = roomDebugInfo.size > 0;\n        if (connected) {\n            // Get host from first room\n            var firstRoom = roomDebugInfo.values().next().value;\n            if (firstRoom && firstRoom.host) {\n                hostText = firstRoom.host;\n            }\n        }\n        hostValue.textContent = hostText;\n        hostDot.style.background = connected ? '#22c55e' : '#666';\n    }\n\n    // Update host display initially\n    updateHostDisplay();\n\n    hostContainer.appendChild(hostDot);\n    hostContainer.appendChild(hostValue);\n    menu.appendChild(hostContainer);\n\n    // Simulate latency option\n    var latencyContainer = document.createElement('div');\n    latencyContainer.style.padding = '8px 12px';\n    latencyContainer.style.cursor = 'default';\n\n    var latencyLabel = document.createElement('div');\n    latencyLabel.style.marginBottom = '8px';\n    latencyLabel.style.display = 'flex';\n    latencyLabel.style.alignItems = 'center';\n    latencyLabel.style.justifyContent = 'space-between';\n    var latencyValueSpan = document.createElement('span');\n    latencyValueSpan.id = 'latency-value';\n    latencyValueSpan.style.color = '#888';\n    latencyValueSpan.style.fontSize = '11px';\n    latencyValueSpan.textContent = preferences.latencySimulation.delay + 'ms';\n\n    var latencyTextSpan = document.createElement('span');\n    latencyTextSpan.textContent = 'Latency (RTT)';\n    latencyTextSpan.style.cssText = 'font-size:11px;color:#ccc';\n\n    latencyLabel.appendChild(latencyTextSpan);\n    latencyLabel.appendChild(latencyValueSpan);\n\n    var latencySlider = document.createElement('input');\n    latencySlider.type = 'range';\n    latencySlider.min = '0';\n    latencySlider.max = preferences.maxLatency.toString();\n    latencySlider.value = preferences.latencySimulation.delay.toString();\n    // No inline `height` — .cds-range owns it so the coarse-pointer rule can grow it.\n    latencySlider.className = 'cds-range';\n    latencySlider.style.border = 'none';\n    latencySlider.style.width = '100%';\n    latencySlider.style.padding = '0';\n    latencySlider.style.margin = '0';\n    latencySlider.style.outline = 'none';\n    latencySlider.style.cursor = 'pointer';\n    latencySlider.style.webkitAppearance = 'none';\n    latencySlider.style.appearance = 'none';\n    latencySlider.style.background = 'transparent';\n    latencySlider.id = 'latency-slider';\n\n    function getSliderColor(value) {\n        var c = latencyRamp(value, preferences.maxLatency);\n        return 'rgb(' + c.r + ', ' + c.g + ', ' + c.b + ')';\n    }\n\n    // Build the green→yellow→red fill for a track. Only the `background` is\n    // dynamic — track/thumb geometry lives in the base sheet (styles.ts), so the\n    // coarse-pointer override isn't clobbered when this sheet is re-appended.\n    function trackGradient(value) {\n        var color = getSliderColor(value);\n        var valuePercent = (value / preferences.maxLatency) * 100;\n        var yellowColor = getSliderColor(preferences.maxLatency / 2);\n        return (value <= preferences.maxLatency / 2)\n            ? `linear-gradient(to right, #00c800 0%, ${yellowColor} ${valuePercent}%, #333 ${valuePercent}%, #333 100%)`\n            : `linear-gradient(to right, #00c800 0%, ${yellowColor} 50%, ${color} ${valuePercent}%, #333 ${valuePercent}%, #333 100%)`;\n    }\n\n    function paintTrack(sliderId, gradient) {\n        var root = getDebugRoot();\n        var styleId = sliderId + '-style';\n        var existingStyle = root.getElementById(styleId);\n        if (existingStyle) { existingStyle.remove(); }\n        var style = document.createElement('style');\n        style.id = styleId;\n        style.textContent = `\n            #${sliderId}::-webkit-slider-runnable-track { background: ${gradient}; }\n            #${sliderId}::-moz-range-track { background: ${gradient}; }\n        `;\n        root.appendChild(style);\n    }\n\n    function updateSliderColor(value) {\n        paintTrack('latency-slider', trackGradient(value));\n    }\n\n    // Initialize slider color\n    updateSliderColor(parseInt(latencySlider.value));\n\n    // Function to update container border color\n    function refreshLogoRing() {\n        var container = getDebugRoot().getElementById('debug-logo-container');\n        if (container) {\n            // Update to normal state (hover handlers will update on hover)\n            container.style.borderColor = getBorderColor(preferences.latencySimulation.delay, 0.7);\n        }\n    }\n\n    // Update latency value display\n    latencySlider.addEventListener('input', function() {\n        var value = parseInt(latencySlider.value);\n        latencyValueSpan.textContent = value + 'ms';\n        preferences.latencySimulation.delay = value;\n        preferences.latencySimulation.enabled = value > 0 || preferences.latencySimulation.jitter > 0;\n        updateSliderColor(value);\n        refreshLogoRing();\n        savePreferences();\n        syncPresetButtons(); // a manual drag → \"Custom\" (no preset highlighted)\n    });\n\n    latencyContainer.appendChild(latencyLabel);\n    latencyContainer.appendChild(latencySlider);\n    menu.appendChild(latencyContainer);\n\n    // Simulate jitter option — mirrors the latency slider; applied as ±jitter around\n    // the latency per message (order-preserving). Reuses the in-scope getSliderColor.\n    var jitterContainer = document.createElement('div');\n    jitterContainer.style.padding = '8px 12px 12px';\n    jitterContainer.style.cursor = 'default';\n    var jitterLabel = document.createElement('div');\n    jitterLabel.style.cssText = 'margin-bottom:8px;display:flex;align-items:center;justify-content:space-between';\n    var jitterValueSpan = document.createElement('span');\n    jitterValueSpan.id = 'jitter-value';\n    jitterValueSpan.style.cssText = 'color:#888;font-size:11px';\n    jitterValueSpan.textContent = preferences.latencySimulation.jitter + 'ms';\n    var jitterTextSpan = document.createElement('span');\n    jitterTextSpan.textContent = 'Jitter';\n    jitterTextSpan.style.cssText = 'font-size:11px;color:#ccc';\n    jitterLabel.appendChild(jitterTextSpan);\n    jitterLabel.appendChild(jitterValueSpan);\n\n    var jitterSlider = document.createElement('input');\n    jitterSlider.type = 'range';\n    jitterSlider.min = '0';\n    jitterSlider.max = preferences.maxLatency.toString();\n    jitterSlider.value = preferences.latencySimulation.jitter.toString();\n    jitterSlider.id = 'jitter-slider';\n    jitterSlider.className = 'cds-range';\n    jitterSlider.style.cssText = 'border:none;width:100%;padding:0;margin:0;outline:none;cursor:pointer;-webkit-appearance:none;appearance:none;background:transparent';\n\n    function updateJitterColor(value) {\n        paintTrack('jitter-slider', trackGradient(value));\n    }\n    updateJitterColor(parseInt(jitterSlider.value));\n\n    jitterSlider.addEventListener('input', function() {\n        var value = parseInt(jitterSlider.value);\n        jitterValueSpan.textContent = value + 'ms';\n        preferences.latencySimulation.jitter = value;\n        preferences.latencySimulation.enabled = preferences.latencySimulation.delay > 0 || value > 0;\n        updateJitterColor(value);\n        savePreferences();\n        syncPresetButtons(); // a manual drag → \"Custom\" (no preset highlighted)\n    });\n\n    jitterContainer.appendChild(jitterLabel);\n    jitterContainer.appendChild(jitterSlider);\n    menu.appendChild(jitterContainer);\n\n    // Network presets — one tap sets both sliders. The active preset is derived\n    // by matching the saved delay/jitter (no extra persisted state), so it stays\n    // in sync with manual drags and the __net() console API.\n    var NET_PRESETS = [\n        { label: 'Off',   title: 'No simulated latency',                   delay: 0,   jitter: 0  },\n        { label: 'Low',   title: 'Low latency · 60ms, no jitter',          delay: 60,  jitter: 0  },\n        { label: 'Med',   title: 'Medium latency + jitter · 150ms ± 30ms', delay: 150, jitter: 30 },\n        { label: 'Large', title: 'Large latency + jitter · 300ms ± 60ms',  delay: 300, jitter: 60 },\n    ];\n\n    // Reflect a chosen (delay, jitter) onto BOTH sliders + their gradients/labels,\n    // persist, and re-highlight. Preset-click path only — slider handlers move one.\n    function applyLatencySim(delay, jitter) {\n        preferences.latencySimulation.delay = delay;\n        preferences.latencySimulation.jitter = jitter;\n        preferences.latencySimulation.enabled = delay > 0 || jitter > 0;\n        latencySlider.value = delay.toString();\n        jitterSlider.value = jitter.toString();\n        latencyValueSpan.textContent = delay + 'ms';\n        jitterValueSpan.textContent = jitter + 'ms';\n        updateSliderColor(delay);\n        updateJitterColor(jitter);\n        refreshLogoRing();\n        savePreferences();\n        syncPresetButtons();\n    }\n\n    function activePresetIndex() {\n        var d = preferences.latencySimulation.delay;\n        var j = preferences.latencySimulation.jitter;\n        for (var i = 0; i < NET_PRESETS.length; i++) {\n            if (NET_PRESETS[i].delay === d && NET_PRESETS[i].jitter === j) return i;\n        }\n        return -1; // custom\n    }\n\n    var presetButtons = [];\n    function syncPresetButtons() {\n        var active = activePresetIndex();\n        for (var i = 0; i < presetButtons.length; i++) {\n            applySegmentedState(presetButtons[i], i === active);\n        }\n    }\n\n    var presetContainer = document.createElement('div');\n    presetContainer.style.padding = '12px 12px 0';\n    presetContainer.style.cursor = 'default';\n    var presetLabel = makeSectionHeader(networkIcon, 'Network simulation');\n    var presetRow = document.createElement('div');\n    presetRow.style.cssText = 'display:flex;gap:4px';\n    NET_PRESETS.forEach(function(preset) {\n        var btn = document.createElement('button');\n        btn.type = 'button';\n        btn.className = 'cds-hit';\n        btn.textContent = preset.label;\n        btn.title = preset.title;\n        btn.style.cssText = 'flex:1;padding:4px 6px;border:1px solid;border-radius:4px;' +\n            'cursor:pointer;font-size:10px;font-family:inherit;transition:background 0.2s,border-color 0.2s';\n        applySegmentedState(btn, false);\n        bindSegmentedHover(btn);\n        btn.addEventListener('click', function(e) {\n            e.stopPropagation();\n            applyLatencySim(preset.delay, preset.jitter);\n        });\n        presetButtons.push(btn);\n        presetRow.appendChild(btn);\n    });\n    presetContainer.appendChild(presetLabel);\n    presetContainer.appendChild(presetRow);\n    menu.insertBefore(presetContainer, latencyContainer); // above the latency slider\n    syncPresetButtons(); // highlight the saved preset on first open\n\n    menu.appendChild(makeDivider()); // network → auth\n\n    // Auth token section — preview + copy the current token, or clear a stale one\n    // that fails onAuth when switching between projects on the same origin.\n    var authSection = document.createElement('div');\n    authSection.style.padding = '12px';\n    authSection.style.cursor = 'default';\n\n    var authLabel = makeSectionHeader(keyIcon, 'Auth token');\n\n    // Empty state (no token present)\n    var authEmpty = document.createElement('div');\n    authEmpty.textContent = 'None';\n    authEmpty.style.cssText = 'color:#666;font-size:11px;font-style:italic';\n\n    // Token preview + copy row\n    var tokenRow = document.createElement('div');\n    tokenRow.style.cssText = 'display:flex;gap:4px;align-items:center;margin-bottom:6px';\n\n    var tokenPreview = document.createElement('div');\n    tokenPreview.style.cssText = 'flex:1;min-width:0;font-family:monospace;font-size:10px;color:#ddd;' +\n        'background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.12);border-radius:4px;' +\n        'padding:4px 6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer';\n\n    var copyBtn = document.createElement('button');\n    copyBtn.type = 'button';\n    copyBtn.className = 'cds-hit';\n    copyBtn.title = 'Copy token';\n    copyBtn.style.cssText = 'flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;' +\n        'width:26px;height:26px;padding:0;border:1px solid rgba(255,255,255,0.2);border-radius:4px;' +\n        'background:rgba(255,255,255,0.05);color:#fff;cursor:pointer;transition:background 0.2s,border-color 0.2s';\n    var copyBtnIcon = sizedIcon(copyIcon, 13);\n    copyBtn.innerHTML = copyBtnIcon;\n\n    tokenRow.appendChild(tokenPreview);\n    tokenRow.appendChild(copyBtn);\n\n    // Clear button (red)\n    var clearBtn = document.createElement('button');\n    clearBtn.type = 'button';\n    clearBtn.className = 'cds-hit';\n    clearBtn.textContent = 'Clear token';\n    clearBtn.style.cssText = 'width:100%;padding:5px 8px;border:1px solid rgba(239,68,68,0.5);border-radius:4px;' +\n        'background:rgba(239,68,68,0.2);color:#ef4444;font-size:11px;font-family:inherit;cursor:pointer;' +\n        'transition:background 0.2s,border-color 0.2s';\n\n    authSection.appendChild(authLabel);\n    authSection.appendChild(authEmpty);\n    authSection.appendChild(tokenRow);\n    authSection.appendChild(clearBtn);\n\n    // Current token = first live client's in-memory token, else the persisted one\n    // (present in storage but not yet loaded into an Auth instance).\n    var currentToken: string | null = null;\n    function getAuthToken() {\n        var t: string | null = null;\n        authInstances.forEach(function(a) { if (!t && a.token) { t = a.token; } });\n        if (t) { return t; }\n        try { return localStorage.getItem('colyseus-auth-token'); } catch (e) { return null; }\n    }\n    // Middle-truncate so both ends stay legible; full value lives in the title.\n    function truncateToken(t) {\n        return (t.length > 22) ? (t.slice(0, 12) + '…' + t.slice(-8)) : t;\n    }\n\n    // Reflect presence on (re)open: show preview/copy/clear, or the \"None\" line.\n    function syncAuthOption() {\n        var token = getAuthToken();\n        currentToken = token;\n        var present = !!token;\n        authEmpty.style.display = present ? 'none' : 'block';\n        tokenRow.style.display = present ? 'flex' : 'none';\n        clearBtn.style.display = present ? 'block' : 'none';\n        if (token) {\n            tokenPreview.textContent = truncateToken(token);\n            tokenPreview.title = token; // full token on hover\n        }\n    }\n    syncAuthOption();\n\n    // Copy the full token to the clipboard, flashing a green check on the button.\n    var copyResetTimer: any = null;\n    function flashCopied() {\n        copyBtn.innerHTML = '<span style=\"display:inline-flex;align-items:center;justify-content:center;width:13px;height:13px;color:#22c55e;font-size:12px;\">✓</span>';\n        copyBtn.style.borderColor = 'rgba(34,197,94,0.6)';\n        if (copyResetTimer) { clearTimeout(copyResetTimer); }\n        copyResetTimer = setTimeout(function() {\n            copyBtn.innerHTML = copyBtnIcon;\n            copyBtn.style.borderColor = 'rgba(255,255,255,0.2)';\n        }, 1000);\n    }\n    function copyToken() {\n        if (!currentToken) { return; }\n        try {\n            var p = navigator.clipboard && navigator.clipboard.writeText(currentToken);\n            if (p && p.then) { p.then(flashCopied, flashCopied); } else { flashCopied(); }\n        } catch (e) { flashCopied(); }\n    }\n    copyBtn.addEventListener('mouseenter', function() { copyBtn.style.background = 'rgba(255,255,255,0.15)'; });\n    copyBtn.addEventListener('mouseleave', function() { copyBtn.style.background = 'rgba(255,255,255,0.05)'; });\n    copyBtn.addEventListener('click', function(e) { e.stopPropagation(); copyToken(); });\n    tokenPreview.addEventListener('click', function(e) { e.stopPropagation(); copyToken(); });\n\n    clearBtn.addEventListener('mouseenter', function() {\n        clearBtn.style.background = 'rgba(239,68,68,0.35)';\n        clearBtn.style.borderColor = 'rgba(239,68,68,0.7)';\n    });\n    clearBtn.addEventListener('mouseleave', function() {\n        clearBtn.style.background = 'rgba(239,68,68,0.2)';\n        clearBtn.style.borderColor = 'rgba(239,68,68,0.5)';\n    });\n    clearBtn.addEventListener('click', function(e) {\n        e.stopPropagation();\n        // Live instances: signOut() nulls the in-memory token + removes storage (real key).\n        authInstances.forEach(function(a) { if (a.token) { void a.signOut(); } });\n        try { localStorage.removeItem('colyseus-auth-token'); } catch (e) {} // default-key fallback\n        syncAuthOption();\n    });\n\n    // Auth sits below the network group (after its divider), with its own divider\n    // separating it from the position picker.\n    menu.appendChild(authSection);\n    menu.appendChild(makeDivider()); // auth → position/visibility\n\n\n    // Panel position and visibility ride side by side: two short controls that would\n    // each waste a full-width row of a 226px menu.\n    var prefsSection = document.createElement('div');\n    prefsSection.style.cssText = 'display:flex;align-items:stretch;gap:8px;padding:12px;cursor:default';\n\n    // Left — a 2×2 grid standing in for the screen, the dot marking the corner.\n    // Four corners on four buttons; a dropdown would say less in more space.\n    var POSITIONS = [\n        { value: 'top-left',     label: 'Top left' },\n        { value: 'top-right',    label: 'Top right' },\n        { value: 'bottom-left',  label: 'Bottom left' },\n        { value: 'bottom-right', label: 'Bottom right' },\n    ];\n\n    var positionColumn = document.createElement('div');\n    positionColumn.style.cssText = 'flex:1;min-width:0;display:flex;flex-direction:column';\n    positionColumn.appendChild(makeSectionHeader(settingsIcon, 'Position'));\n\n    var positionGrid = document.createElement('div');\n    // The 32px floor lives on the row, not on the button: an inline min-height there\n    // would outrank .cds-hit and quietly cost the cells their 44px coarse target.\n    positionGrid.style.cssText = 'flex:1;display:grid;grid-template-columns:1fr 1fr;' +\n        'grid-auto-rows:minmax(32px, 1fr);gap:4px';\n\n    var positionButtons = [];\n    function syncPositionButtons() {\n        for (var i = 0; i < positionButtons.length; i++) {\n            applySegmentedState(positionButtons[i], positionButtons[i].dataset.value === preferences.panelPosition.position);\n        }\n    }\n\n    POSITIONS.forEach(function(pos) {\n        var btn = document.createElement('button');\n        btn.type = 'button';\n        btn.className = 'cds-hit';\n        btn.dataset.value = pos.value;\n        btn.title = pos.label;\n        btn.setAttribute('aria-label', pos.label);\n        btn.style.cssText = 'position:relative;padding:0;border:1px solid;border-radius:4px;' +\n            'cursor:pointer;transition:background 0.2s,border-color 0.2s';\n\n        // currentColor, so the marker dims and brightens with the button's state.\n        var dot = document.createElement('span');\n        dot.style.cssText = 'position:absolute;width:10px;height:6px;border-radius:2px;' +\n            'background:currentColor;' + verticalEdge(pos.value) + ':6px;' + horizontalEdge(pos.value) + ':6px';\n        btn.appendChild(dot);\n\n        applySegmentedState(btn, false);\n        bindSegmentedHover(btn);\n        btn.addEventListener('click', function(e) {\n            e.stopPropagation();\n            preferences.panelPosition.position = pos.value;\n            savePreferences();\n            reflow(); // logo, menu, drawer and Predict all anchor off this\n            syncPositionButtons();\n        });\n        positionButtons.push(btn);\n        positionGrid.appendChild(btn);\n    });\n    positionColumn.appendChild(positionGrid);\n    syncPositionButtons();\n\n    // Right — get the overlay out of the way for the rest of the page's life.\n    var visibilityColumn = document.createElement('div');\n    visibilityColumn.style.cssText = 'flex:1;min-width:0;display:flex;flex-direction:column';\n    visibilityColumn.appendChild(makeSectionHeader(eyeSlashIcon, 'Visibility'));\n\n    var hideBtn = document.createElement('button');\n    hideBtn.type = 'button';\n    hideBtn.className = 'cds-hit';\n    hideBtn.title = 'Hide the dev tools until you reload the page';\n    hideBtn.style.cssText = 'flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;' +\n        'gap:6px;padding:6px 8px;border:1px solid rgba(255,255,255,0.2);border-radius:4px;' +\n        'background:rgba(255,255,255,0.05);color:#fff;font-size:10px;line-height:1.3;text-align:center;' +\n        'font-family:inherit;cursor:pointer;transition:background 0.2s,border-color 0.2s';\n    hideBtn.innerHTML = sizedIcon(eyeSlashIcon, 14) + '<span>Hide for this session</span>';\n    hideBtn.addEventListener('mouseenter', function() {\n        hideBtn.style.background = 'rgba(255, 255, 255, 0.15)';\n        hideBtn.style.borderColor = 'rgba(255, 255, 255, 0.3)';\n    });\n    hideBtn.addEventListener('mouseleave', function() {\n        hideBtn.style.background = 'rgba(255, 255, 255, 0.05)';\n        hideBtn.style.borderColor = 'rgba(255, 255, 255, 0.2)';\n    });\n    hideBtn.addEventListener('click', function(e) {\n        e.stopPropagation();\n        setMenuVisible(false); // clears the host-poll interval before everything goes\n        hidePanelsForSession();\n    });\n    visibilityColumn.appendChild(hideBtn);\n\n    prefsSection.appendChild(positionColumn);\n    prefsSection.appendChild(visibilityColumn);\n    menu.appendChild(prefsSection);\n\n    // Footer — the only place that says how to remove the overlay for good.\n    var disableHint = document.createElement('div');\n    disableHint.style.cssText = 'padding:0 12px 12px;font-size:10px;line-height:1.4;color:#666';\n    disableHint.innerHTML = 'Remove <code style=\"background:rgba(255,255,255,0.08);padding:1px 4px;' +\n        'border-radius:3px;font-family:monospace;\">debug.js</code> from your HTML to disable this UI.';\n    menu.appendChild(disableHint);\n\n    getDebugRoot().appendChild(menu);\n\n    // Toggle menu on logo click\n    var menuVisible = false;\n    var hostUpdateInterval = null;\n\n    function setMenuVisible(visible) {\n        menuVisible = visible;\n        menu.style.display = visible ? 'block' : 'none';\n        // Compact: the menu lands in the drawer's box, so the drawer stands down.\n        // The reveal state survives, and the drawer comes back when the menu closes.\n        setCompactMenuOpen(visible);\n\n        if (visible) {\n            updateHostDisplay();\n            syncAuthOption(); // refresh enabled/greyed state on each open\n            // Update host every second while menu is visible\n            hostUpdateInterval = setInterval(updateHostDisplay, 1000);\n        } else if (hostUpdateInterval) {\n            clearInterval(hostUpdateInterval);\n            hostUpdateInterval = null;\n        }\n    }\n\n    // Two gestures on one target, compact only:\n    //   tap        → show/hide the room panels + Predict overlay\n    //   long press → open the network-simulation / preferences sheet\n    // Desktop keeps the single click-opens-the-menu behaviour.\n    var pressTimer: any = null;\n    var longPressFired = false;\n    var pressOrigin = { x: 0, y: 0 };\n\n    function pressed(down) {\n        // A tap should feel like a button, and the cue doubles as long-press feedback.\n        logoContainer.style.transform = down ? 'scale(0.92)' : '';\n    }\n\n    function cancelPress() {\n        if (pressTimer) { clearTimeout(pressTimer); pressTimer = null; }\n        pressed(false);\n    }\n\n    logoContainer.addEventListener('pointerdown', function(e: PointerEvent) {\n        if (!isCompact() || pressTimer) { return; }\n        longPressFired = false;\n        pressOrigin = { x: e.clientX, y: e.clientY };\n        pressed(true);\n        pressTimer = setTimeout(function() {\n            pressTimer = null;\n            longPressFired = true; // swallows the `click` that follows the release\n            pressed(false);\n            setMenuVisible(true);\n        }, LONG_PRESS_MS);\n    });\n\n    // A press that turns into a drag was never a long press.\n    logoContainer.addEventListener('pointermove', function(e: PointerEvent) {\n        if (!pressTimer) { return; }\n        if (Math.abs(e.clientX - pressOrigin.x) > PRESS_SLOP || Math.abs(e.clientY - pressOrigin.y) > PRESS_SLOP) {\n            cancelPress();\n        }\n    });\n    logoContainer.addEventListener('pointerup', cancelPress);\n    logoContainer.addEventListener('pointerleave', cancelPress);\n    logoContainer.addEventListener('pointercancel', function() {\n        cancelPress();\n        longPressFired = false;\n    });\n\n    // Long press on touch otherwise raises the selection callout / context menu.\n    logoContainer.addEventListener('contextmenu', function(e) { e.preventDefault(); });\n\n    logoContainer.addEventListener('click', function(e) {\n        e.stopPropagation();\n\n        if (!isCompact()) { setMenuVisible(!menuVisible); return; }\n        if (longPressFired) { longPressFired = false; return; } // the press already opened the menu\n        if (menuVisible) { setMenuVisible(false); return; }     // tap dismisses the sheet first\n\n        setCompactRevealed(!isCompactRevealed());\n    });\n\n    // Close menu when clicking outside.\n    // Because menu/logo live inside a shadow root, event.target is retargeted\n    // to the shadow host for document-level listeners, so we walk the composed\n    // path to see whether the real click target was inside the menu or logo.\n    document.addEventListener('click', function(e) {\n        var path = typeof e.composedPath === 'function' ? e.composedPath() : [e.target as EventTarget];\n        var clickedInsideMenu = path.indexOf(menu) !== -1;\n        var clickedInsideLogo = path.indexOf(logoContainer) !== -1;\n        if (menuVisible && !clickedInsideMenu && !clickedInsideLogo) {\n            setMenuVisible(false);\n        }\n    });\n}\n"],"names":[],"mappings":"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"}