:root { color-scheme: dark; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; background: #07100f; color: #f7f1dd; font-synthesis: none; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; } * { box-sizing: border-box; } body { margin: 0; min-width: 320px; min-height: 100vh; background: linear-gradient(90deg, rgba(119, 167, 153, 0.08) 1px, transparent 1px), linear-gradient(0deg, rgba(119, 167, 153, 0.08) 1px, transparent 1px), radial-gradient(circle at 16% 18%, rgba(95, 196, 173, 0.16), transparent 32%), radial-gradient(circle at 78% 8%, rgba(212, 170, 93, 0.13), transparent 26%), #07100f; background-size: 64px 64px, 64px 64px, auto, auto; } button, textarea { font: inherit; } button { border: 0; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } .app-shell { width: min(1440px, 100%); min-height: 100vh; margin: 0 auto; padding: 20px; } .topbar { display: flex; align-items: center; justify-content: space-between; gap: 16px; min-height: 64px; padding: 0 2px 16px; } .brand { display: inline-flex; align-items: center; gap: 12px; font-size: 22px; font-weight: 780; } .brand-mark { display: inline-grid; width: 36px; height: 36px; place-items: center; border: 1px solid rgba(247, 241, 221, 0.22); border-radius: 8px; color: #f4c56f; background: rgba(247, 241, 221, 0.08); } .topbar-meta { display: flex; align-items: center; justify-content: flex-end; flex-wrap: wrap; gap: 8px; } .status-pill, .model-pill { display: inline-flex; align-items: center; gap: 7px; min-height: 34px; padding: 0 11px; border: 1px solid rgba(247, 241, 221, 0.16); border-radius: 8px; color: #d9e7dc; background: rgba(12, 30, 28, 0.72); font-size: 13px; font-weight: 700; } .status-pill.live, .status-pill.speaking { border-color: rgba(85, 218, 178, 0.5); color: #9af3cf; } .status-pill.muted, .status-pill.permission, .status-pill.reconnecting { border-color: rgba(244, 197, 111, 0.5); color: #f4c56f; } .status-pill.error { border-color: rgba(255, 118, 118, 0.52); color: #ffaaaa; } .studio-grid { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(360px, 0.8fr); gap: 18px; } .control-deck, .transcript-panel, .world-canvas { border: 1px solid rgba(247, 241, 221, 0.16); border-radius: 8px; background: rgba(8, 22, 20, 0.78); box-shadow: 0 28px 80px rgba(0, 0, 0, 0.22); backdrop-filter: blur(18px); } .control-deck { position: relative; display: grid; min-height: 600px; align-content: center; justify-items: center; overflow: hidden; padding: 42px; } .control-deck::before { position: absolute; inset: 20px; content: ""; border: 1px dashed rgba(247, 241, 221, 0.12); border-radius: 8px; pointer-events: none; } .microphone-orbit { position: relative; display: grid; width: min(360px, 72vw); aspect-ratio: 1; place-items: center; margin-bottom: 28px; } .orbit-ring { position: absolute; inset: 8%; border: 1px solid rgba(124, 226, 197, 0.28); border-radius: 999px; transition: transform 120ms ease, border-color 200ms ease, opacity 200ms ease; } .ring-one { box-shadow: inset 0 0 50px rgba(85, 218, 178, 0.1), 0 0 48px rgba(85, 218, 178, 0.06); } .ring-two { inset: 0; border-color: rgba(244, 197, 111, 0.18); } .microphone-orbit[data-state="speaking"] .ring-one, .microphone-orbit[data-state="live"] .ring-one { border-color: rgba(85, 218, 178, 0.68); } .microphone-orbit[data-state="muted"] .ring-one, .microphone-orbit[data-state="permission"] .ring-one { border-color: rgba(244, 197, 111, 0.56); } .microphone-orbit[data-state="error"] .ring-one { border-color: rgba(255, 118, 118, 0.68); } .mic-button { position: relative; z-index: 1; display: grid; width: 148px; height: 148px; place-items: center; border: 1px solid rgba(247, 241, 221, 0.22); border-radius: 999px; color: #09201d; background: linear-gradient(145deg, #f4c56f, #75dfbf); box-shadow: 0 20px 70px rgba(93, 230, 190, 0.28); cursor: pointer; transition: transform 180ms ease, opacity 180ms ease; } .mic-button:hover:not(:disabled) { transform: translateY(-2px); } .mic-button:disabled { cursor: wait; opacity: 0.72; } .state-copy { max-width: 650px; text-align: center; } .state-copy h1 { margin: 0; font-size: clamp(34px, 5vw, 72px); line-height: 0.95; letter-spacing: 0; } .state-copy p { width: min(560px, 100%); margin: 16px auto 0; color: #b8c9bf; font-size: 17px; line-height: 1.65; } .error-banner { display: grid; gap: 4px; width: min(620px, 100%); margin-top: 20px; padding: 12px 14px; border: 1px solid rgba(255, 118, 118, 0.36); border-radius: 8px; color: #ffd0d0; background: rgba(73, 18, 18, 0.48); } .control-row { display: flex; justify-content: center; flex-wrap: wrap; gap: 10px; margin-top: 28px; } .primary-action, .secondary-action, .icon-action { display: inline-flex; align-items: center; justify-content: center; gap: 9px; min-height: 42px; border-radius: 8px; font-size: 14px; font-weight: 800; cursor: pointer; transition: transform 160ms ease, opacity 160ms ease, background 160ms ease; } .primary-action { padding: 0 18px; color: #07100f; background: #f4c56f; } .secondary-action, .icon-action { border: 1px solid rgba(247, 241, 221, 0.18); color: #f7f1dd; background: rgba(247, 241, 221, 0.08); } .secondary-action { padding: 0 14px; } .icon-action { width: 42px; } .primary-action:hover:not(:disabled), .secondary-action:hover:not(:disabled), .icon-action:hover:not(:disabled) { transform: translateY(-1px); } .primary-action:disabled, .secondary-action:disabled, .icon-action:disabled { cursor: not-allowed; opacity: 0.48; } .meter-row { display: grid; grid-template-columns: repeat(2, minmax(0, 190px)); gap: 12px; width: min(420px, 100%); margin-top: 24px; } .level-meter { display: grid; gap: 8px; padding: 10px; border: 1px solid rgba(247, 241, 221, 0.12); border-radius: 8px; background: rgba(3, 12, 11, 0.42); } .level-meter span { display: inline-flex; align-items: center; gap: 7px; color: #c6d4ce; font-size: 12px; font-weight: 800; text-transform: uppercase; } .meter-track { height: 8px; overflow: hidden; border-radius: 999px; background: rgba(247, 241, 221, 0.09); } .meter-fill { height: 100%; border-radius: inherit; background: linear-gradient(90deg, #75dfbf, #f4c56f); transition: width 80ms linear; } .transcript-panel { display: grid; grid-template-rows: auto minmax(0, 1fr) auto; min-height: 600px; overflow: hidden; } .panel-heading, .canvas-heading { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 58px; padding: 0 18px; border-bottom: 1px solid rgba(247, 241, 221, 0.12); } .panel-heading > div, .canvas-heading > div { display: inline-flex; align-items: center; gap: 9px; } .panel-heading h2, .canvas-heading h2 { margin: 0; font-size: 15px; line-height: 1; } .panel-heading span, .canvas-heading span { color: #97aaa1; font-size: 12px; font-weight: 700; } .transcript-stream { display: flex; flex-direction: column; gap: 10px; overflow: auto; padding: 18px; } .turn { border: 1px solid rgba(247, 241, 221, 0.12); border-radius: 8px; padding: 12px; background: rgba(247, 241, 221, 0.06); } .turn.companion { border-color: rgba(85, 218, 178, 0.24); background: rgba(85, 218, 178, 0.08); } .turn.user { border-color: rgba(244, 197, 111, 0.22); background: rgba(244, 197, 111, 0.08); } .turn-meta { display: flex; justify-content: space-between; gap: 10px; color: #a9bbb2; font-size: 11px; font-weight: 800; text-transform: uppercase; } .turn p { margin: 8px 0 0; color: #f4f0df; font-size: 14px; line-height: 1.55; } .event-rail { display: flex; flex-wrap: wrap; gap: 8px; padding: 14px 18px; border-top: 1px solid rgba(247, 241, 221, 0.12); } .event-chip { min-height: 26px; padding: 6px 9px; border: 1px solid rgba(247, 241, 221, 0.12); border-radius: 7px; color: #c8d5cf; background: rgba(247, 241, 221, 0.06); font-size: 11px; font-weight: 800; } .event-chip.good { border-color: rgba(85, 218, 178, 0.32); color: #9af3cf; } .event-chip.warn { border-color: rgba(244, 197, 111, 0.34); color: #f4c56f; } .event-chip.bad { border-color: rgba(255, 118, 118, 0.38); color: #ffb8b8; } .world-canvas { margin-top: 18px; } .note-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; padding: 18px; } .world-note { display: grid; gap: 9px; } .world-note span { color: #f4c56f; font-size: 12px; font-weight: 900; text-transform: uppercase; } .world-note textarea { width: 100%; min-height: 132px; resize: vertical; border: 1px solid rgba(247, 241, 221, 0.14); border-radius: 8px; outline: none; padding: 12px; color: #f7f1dd; background: rgba(3, 12, 11, 0.44); font-size: 14px; line-height: 1.5; } .world-note textarea:focus { border-color: rgba(85, 218, 178, 0.52); box-shadow: 0 0 0 3px rgba(85, 218, 178, 0.12); } @media (max-width: 1020px) { .studio-grid { grid-template-columns: 1fr; } .transcript-panel { min-height: 460px; } .note-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (max-width: 680px) { .app-shell { padding: 14px; } .topbar { align-items: flex-start; flex-direction: column; } .topbar-meta { justify-content: flex-start; } .control-deck { min-height: 560px; padding: 28px 18px; } .state-copy h1 { font-size: 42px; } .state-copy p { font-size: 15px; } .meter-row, .note-grid { grid-template-columns: 1fr; } .panel-heading, .canvas-heading { align-items: flex-start; flex-direction: column; justify-content: center; padding: 12px 16px; } }