:root { --bg: #0a0a0f; --glass: rgba(12, 12, 20, 0.72); --border: rgba(255, 255, 255, 0.12); --accent: #00d4ff; --accent-dim: rgba(0, 212, 255, 0.18); --text: #e8eaed; --muted: rgba(232, 234, 237, 0.6); --rec: #ff3b4e; --mono: 'SF Mono', ui-monospace, 'JetBrains Mono', Menlo, monospace; --sans: -apple-system, BlinkMacSystemFont, 'Inter', system-ui, sans-serif; color-scheme: dark; } * { box-sizing: border-box; -webkit-tap-highlight-color: transparent; } html, body { margin: 0; height: 100%; background: var(--bg); color: var(--text); font-family: var(--sans); overscroll-behavior: none; } [hidden] { display: none !important; } button { font: inherit; color: inherit; cursor: pointer; } .screen { min-height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 14px; padding: max(24px, env(safe-area-inset-top)) 24px max(24px, env(safe-area-inset-bottom)); text-align: center; } .logo { width: 64px; height: 64px; } h1 { margin: 0; font-family: var(--mono); font-size: 20px; letter-spacing: 0.18em; } .lede, .hint, .status { margin: 0; max-width: 34ch; color: var(--muted); font-size: 14px; line-height: 1.45; } .status:empty { display: none; } .status.error { color: #ff8a95; } #pair-form { display: flex; gap: 8px; } #code { width: 9.5ch; padding: 12px; border: 1px solid var(--border); border-radius: 10px; background: var(--glass); color: var(--text); font: 600 22px var(--mono); letter-spacing: 0.2em; text-align: center; text-transform: uppercase; } .primary { min-width: 220px; padding: 14px 20px; border: 1px solid var(--accent); border-radius: 10px; background: var(--accent-dim); font: 600 15px var(--mono); letter-spacing: 0.12em; } #pair-form .primary { min-width: 0; } .help { max-width: 36ch; color: var(--muted); font-size: 13px; text-align: left; } .help summary { cursor: pointer; text-align: center; } .help a { color: var(--accent); } /* Camera monitor: the desktop's render fills the screen. */ .camera { position: fixed; inset: 0; padding: 0; overflow: hidden; touch-action: none; user-select: none; -webkit-user-select: none; background: #000; } #monitor { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; background: #000; } .topbar, .bottombar { position: absolute; left: max(10px, env(safe-area-inset-left)); right: max(10px, env(safe-area-inset-right)); display: flex; align-items: center; gap: 8px; } .topbar { top: max(10px, env(safe-area-inset-top)); } .bottombar { bottom: max(12px, env(safe-area-inset-bottom)); justify-content: center; gap: 10px; } .spacer { flex: 1; } .chip { padding: 5px 9px; border: 1px solid var(--border); border-radius: 999px; background: var(--glass); font: 600 12px var(--mono); letter-spacing: 0.06em; } .chip.rec { border-color: var(--rec); color: var(--rec); } .dot { width: 10px; height: 10px; border-radius: 50%; background: #777; box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.4); } .dot.live { background: #3ddc84; } .dot.slow { background: #ffb020; } .toast { position: absolute; top: calc(max(10px, env(safe-area-inset-top)) + 40px); left: 50%; transform: translateX(-50%); margin: 0; padding: 7px 12px; border-radius: 10px; background: var(--glass); font-size: 13px; white-space: nowrap; } .tool { min-width: 64px; padding: 10px 10px; border: 1px solid var(--border); border-radius: 10px; background: var(--glass); font: 600 11px var(--mono); letter-spacing: 0.08em; } .tool[aria-pressed='true'], .tool[aria-expanded='true'] { border-color: var(--accent); background: var(--accent-dim); } .record { display: grid; place-items: center; width: 64px; height: 64px; border: 3px solid #fff; border-radius: 50%; background: rgba(0, 0, 0, 0.35); } .record-dot { width: 44px; height: 44px; border-radius: 50%; background: var(--rec); transition: border-radius 150ms, width 150ms, height 150ms; } .record[aria-pressed='true'] .record-dot { width: 24px; height: 24px; border-radius: 5px; } .sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); } /* Virtual sticks sit low on each side, under the thumbs. */ .stick { position: absolute; bottom: calc(max(12px, env(safe-area-inset-bottom)) + 84px); width: 128px; height: 128px; border: 1px solid var(--border); border-radius: 50%; background: rgba(12, 12, 20, 0.38); touch-action: none; } .stick.left { left: max(18px, env(safe-area-inset-left)); } .stick.right { right: max(18px, env(safe-area-inset-right)); } .stick span { position: absolute; bottom: -20px; left: 0; right: 0; color: var(--muted); font: 600 10px var(--mono); letter-spacing: 0.1em; text-align: center; } .knob { position: absolute; top: 50%; left: 50%; width: 52px; height: 52px; margin: -26px 0 0 -26px; border: 1px solid var(--accent); border-radius: 50%; background: var(--accent-dim); } .drawer { position: absolute; left: 50%; bottom: calc(max(12px, env(safe-area-inset-bottom)) + 84px); transform: translateX(-50%); width: min(360px, calc(100% - 24px)); max-height: 60%; overflow: auto; padding: 14px; border: 1px solid var(--border); border-radius: 16px; background: rgba(12, 12, 20, 0.9); display: flex; flex-direction: column; gap: 12px; font: 600 11px var(--mono); letter-spacing: 0.08em; z-index: 2; } .drawer label { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 6px; } .drawer input[type='range'] { width: 100%; accent-color: var(--accent); } .drawer output { color: var(--accent); } .presets { display: flex; gap: 6px; } .presets button { flex: 1; padding: 8px 2px; border: 1px solid var(--border); border-radius: 8px; background: transparent; font: 600 12px var(--mono); } .presets button.active { border-color: var(--accent); background: var(--accent-dim); } .presets small { display: block; margin-top: 2px; color: var(--muted); font-size: 8px; } .toggles { display: flex; flex-wrap: wrap; gap: 14px; } .toggles label { justify-content: flex-start; align-items: center; } .drawer .hint { font: 12px var(--sans); letter-spacing: 0; } #focus-ring { position: absolute; width: 64px; height: 64px; margin: -32px 0 0 -32px; border: 2px solid #ffd60a; border-radius: 6px; pointer-events: none; animation: focus 700ms ease-out forwards; } @keyframes focus { from { transform: scale(1.5); opacity: 1; } to { transform: scale(1); opacity: 0; } } @media (orientation: landscape) and (max-height: 500px) { .stick { width: 112px; height: 112px; bottom: calc(max(12px, env(safe-area-inset-bottom)) + 24px); } .bottombar { left: 160px; right: 160px; } }