Spaces:
Running
Running
| :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; | |
| } | |
| } | |