#root{min-height:100vh}:root{--accent:#16db65;--accent-hover:#12c059;--accent-muted:#16db651f;--accent-soft:#16db6514;--text:#0f172a;--text-secondary:#475569;--muted:#64748b;--surface:#fff;--surface-elevated:#f8fafc;--border:#e2e8f0;--danger:#dc2626;--danger-soft:#dc26261a;--warning:#d97706}*{box-sizing:border-box}body{background:var(--surface);color:var(--text);min-height:100vh;margin:0;font-family:Inter,system-ui,sans-serif}.app{max-width:640px;margin:0 auto;padding:1.5rem}.card{background:var(--surface);border:1px solid var(--border);border-radius:1.25rem;padding:1.75rem;box-shadow:0 4px 24px #0f172a0f}h1{text-align:center;color:var(--text);margin:0 0 .25rem;font-size:1.5rem;font-weight:700}.subtitle{text-align:center;color:var(--muted);margin-bottom:1.25rem;font-size:.875rem}.status{color:var(--text-secondary);justify-content:center;align-items:center;gap:.5rem;margin-bottom:1rem;font-size:.875rem;display:flex}.status-dot{background:var(--muted);border-radius:50%;width:8px;height:8px}.status.connecting .status-dot{background:var(--warning);animation:1.2s ease-in-out infinite pulse}.status.connected .status-dot{background:var(--accent)}.status.error .status-dot{background:var(--danger)}@keyframes pulse{50%{opacity:.35}}.row{flex-wrap:wrap;align-items:center;gap:.5rem;margin-bottom:1rem;display:flex}.row label{color:var(--text-secondary);min-width:5rem;font-size:.8rem}select{border:1px solid var(--border);background:var(--surface);min-width:10rem;color:var(--text);border-radius:.5rem;flex:1;padding:.5rem .75rem;font-size:.875rem}select:disabled{opacity:.5}.controls{flex-wrap:wrap;gap:.5rem;margin-bottom:1rem;display:flex}.btn{cursor:pointer;border:none;border-radius:.5rem;align-items:center;gap:.35rem;padding:.6rem 1rem;font-family:inherit;font-size:.875rem;font-weight:600;display:inline-flex}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-primary{background:var(--accent);color:#fff}.btn-primary:hover:not(:disabled){background:var(--accent-hover)}.btn-secondary{background:var(--surface-elevated);color:var(--text);border:1px solid var(--border)}.btn-mute{background:var(--accent-muted);color:#0a5c32}.btn-mute.muted{background:var(--danger-soft);color:var(--danger)}.tabs{border-bottom:1px solid var(--border);gap:.25rem;margin-bottom:.75rem;display:flex}.tab{color:var(--muted);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-1px;padding:.5rem .85rem;font-family:inherit;font-size:.8rem;font-weight:500}.tab.active{color:var(--text);border-bottom-color:var(--accent)}.panel{min-height:220px;max-height:360px;display:none;overflow:auto}.panel.active{display:block}.logs{font-family:ui-monospace,monospace;font-size:.75rem;line-height:1.5}.log-line{color:var(--muted);margin-bottom:.35rem}.log-line.warn{color:var(--warning)}.log-line.err{color:var(--danger)}.log-line.ok{color:#0a5c32}.transcription{flex-direction:column;gap:.65rem;display:flex}.transcription-empty{text-align:center;color:var(--muted);padding:2rem 1rem;font-size:.85rem}.transcription-message{border:1px solid var(--border);background:var(--surface-elevated);border-radius:.65rem;padding:.65rem .75rem}.transcription-message.user{border-left:3px solid var(--text-secondary)}.transcription-message.assistant{border-left:3px solid var(--accent)}.transcription-message.partial{opacity:.85}.message-header{text-transform:uppercase;letter-spacing:.04em;justify-content:space-between;align-items:baseline;margin-bottom:.35rem;font-size:.7rem;display:flex}.message-role{font-weight:600}.message-role.user{color:var(--text-secondary)}.message-role.assistant{color:#0a5c32}.message-time{color:var(--muted);text-transform:none;font-weight:400}.message-content{white-space:pre-wrap;word-break:break-word;color:var(--text);font-size:.9rem;line-height:1.45}.hint{color:var(--muted);margin-top:.75rem;font-size:.75rem;line-height:1.4}.hint code{background:var(--surface-elevated);border:1px solid var(--border);border-radius:.25rem;padding:.1rem .35rem;font-size:.7rem}.toggle-row{color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:.5rem;margin-bottom:1rem;font-size:.85rem;display:flex}.toggle-row input{width:1rem;height:1rem;accent-color:var(--accent)}.voice-stage{border:1px solid var(--border);background:var(--surface-elevated);border-radius:1rem;margin-bottom:1rem;padding:1rem 1.25rem 1.25rem}.voice-stage--focus{min-height:140px}.voice-stage--live{background:var(--accent-soft);border-color:#16db6573}.voice-stage-header{justify-content:space-between;align-items:center;margin-bottom:.75rem;display:flex}.voice-stage-title{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-size:.75rem;font-weight:600}.voice-stage-status{color:var(--muted);font-size:.8rem;font-weight:500}.voice-stage-status.speaking{color:#0a5c32;font-weight:600}.voice-visualizer{justify-content:center;align-items:flex-end;gap:6px;height:72px;display:flex}.voice-bar{background:linear-gradient(180deg, #4ae88a, var(--accent));opacity:.35;transform-origin:bottom;border-radius:4px;width:8px;height:14px}.voice-stage--live .voice-bar{opacity:.55}.voice-visualizer--idle .voice-bar{animation:2.4s ease-in-out infinite voice-idle}.voice-visualizer--idle .voice-bar:first-child{animation-delay:0s}.voice-visualizer--idle .voice-bar:nth-child(2){animation-delay:.15s}.voice-visualizer--idle .voice-bar:nth-child(3){animation-delay:.3s}.voice-visualizer--idle .voice-bar:nth-child(4){animation-delay:.45s}.voice-visualizer--idle .voice-bar:nth-child(5){animation-delay:.3s}.voice-visualizer--idle .voice-bar:nth-child(6){animation-delay:.15s}.voice-visualizer--idle .voice-bar:nth-child(7){animation-delay:0s}.voice-visualizer--speaking .voice-bar{animation:.75s ease-in-out infinite voice-speak}.voice-visualizer--speaking .voice-bar:first-child{animation-delay:0s}.voice-visualizer--speaking .voice-bar:nth-child(2){animation-delay:80ms}.voice-visualizer--speaking .voice-bar:nth-child(3){animation-delay:.16s}.voice-visualizer--speaking .voice-bar:nth-child(4){animation-delay:.24s}.voice-visualizer--speaking .voice-bar:nth-child(5){animation-delay:.16s}.voice-visualizer--speaking .voice-bar:nth-child(6){animation-delay:80ms}.voice-visualizer--speaking .voice-bar:nth-child(7){animation-delay:0s}@keyframes voice-speak{0%,to{opacity:.5;height:14px}50%{opacity:1;height:52px}}@keyframes voice-idle{0%,to{opacity:.35;height:12px}50%{opacity:.55;height:22px}}@media (prefers-reduced-motion:reduce){.voice-visualizer--idle .voice-bar,.voice-visualizer--speaking .voice-bar{animation:none}.voice-visualizer--speaking .voice-bar{opacity:.9;height:40px}}
