:root{--bg:#0f1115;--panel:#171a21;--panel-2:#1e222b;--border:#2a2f3a;--text:#e7e9ee;--muted:#9aa2b1;--accent:#6ea8fe;--bubble-user:#2b6cff;--bubble-bot:#232833;--danger:#ffb4a2}*{box-sizing:border-box}body,html{margin:0;padding:0;height:100%;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased}.app{max-width:760px;margin:0 auto;height:100dvh;display:flex;flex-direction:column;padding:0 16px}.topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 4px 12px;border-bottom:1px solid var(--border)}.topbar h1{font-size:16px;font-weight:600;margin:0}.topbar .sub{font-size:12px;color:var(--muted);margin-top:2px}.btn{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:8px 12px;font-size:13px;cursor:pointer;transition:background .15s,border-color .15s}.btn:hover{background:#262c38;border-color:#3a4150}.messages{flex:1 1;overflow-y:auto;padding:20px 4px;flex-direction:column;gap:14px}.messages,.row{display:flex}.row.user{justify-content:flex-end}.row.bot{justify-content:flex-start}.bubble{max-width:78%;padding:11px 14px;border-radius:16px;font-size:15px;line-height:1.5;white-space:pre-wrap;word-wrap:break-word}.row.user .bubble{background:var(--bubble-user);color:#fff;border-bottom-right-radius:5px}.row.bot .bubble{background:var(--bubble-bot);border:1px solid var(--border);border-bottom-left-radius:5px}.row.system{justify-content:center}.row.system .bubble{background:transparent;border:1px dashed #4a3a3a;color:var(--danger);font-size:13px;max-width:90%;text-align:center}.typing{display:inline-flex;gap:4px;align-items:center;height:10px}.typing span{width:6px;height:6px;border-radius:50%;background:var(--muted);animation:blink 1.2s ease-in-out infinite both}.typing span:nth-child(2){animation-delay:.2s}.typing span:nth-child(3){animation-delay:.4s}@keyframes blink{0%,80%,to{opacity:.25}40%{opacity:1}}.composer{display:flex;gap:10px;padding:12px 4px 18px;border-top:1px solid var(--border)}.composer textarea{flex:1 1;resize:none;background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:12px;padding:12px 14px;font-size:15px;font-family:inherit;line-height:1.4;max-height:160px;outline:none}.composer textarea:focus{border-color:var(--accent)}.composer .send{background:var(--bubble-user);border:none;color:#fff;border-radius:12px;padding:0 18px;font-size:15px;cursor:pointer;transition:opacity .15s}.composer .send:disabled{opacity:.4;cursor:not-allowed}.scorecard{background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:18px;margin:6px auto;width:100%}.scorecard h2{font-size:15px;margin:0 0 4px}.scorecard .comment{font-size:14px;color:var(--muted);line-height:1.5;margin:0 0 16px}.metric-group-title{font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:14px 0 8px}.metric{margin-bottom:10px}.metric .label{display:flex;justify-content:space-between;font-size:13px;margin-bottom:4px}.metric .label .val{color:var(--muted);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.bar{height:7px;background:var(--panel-2);overflow:hidden}.bar,.bar>i{border-radius:4px}.bar>i{display:block;height:100%;background:linear-gradient(90deg,#4b7bec,#6ea8fe)}.voice{max-width:760px;margin:0 auto;min-height:100dvh;display:flex;flex-direction:column;padding:0 16px}.voice-top{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 4px 12px;border-bottom:1px solid var(--border)}.voice-top h1{font-size:16px;font-weight:600;margin:0}.voice-top a{text-decoration:none}.voice-stage{display:flex;flex-direction:column;align-items:center;gap:14px;padding:28px 0 18px}.orb{width:132px;height:132px;border-radius:50%;display:grid;place-items:center;transition:transform .08s ease-out,box-shadow .3s ease;background:radial-gradient(circle at 50% 40%,#24304a,#171a21 70%);border:1px solid var(--border)}.orb-core{width:74px;height:74px;border-radius:50%;background:radial-gradient(circle at 50% 40%,#6ea8fe,#2b6cff 75%);box-shadow:0 0 24px rgba(46,108,255,.5);transition:transform .3s ease,opacity .3s ease}.orb.listening{box-shadow:0 0 40px rgba(46,108,255,.25)}.orb.speaking .orb-core{animation:pulse .9s ease-in-out infinite;background:radial-gradient(circle at 50% 40%,#7ee0a0,#22a06b 75%);box-shadow:0 0 28px rgba(34,160,107,.6)}.orb.processing .orb-core{animation:pulse 1.4s ease-in-out infinite;opacity:.7}.orb.ended .orb-core{background:radial-gradient(circle at 50% 40%,#9aa2b1,#5b6472 75%);box-shadow:none}.orb.speaking.locked{box-shadow:0 0 0 2px rgba(214,69,69,.6),0 0 34px rgba(214,69,69,.3)}.orb.speaking.locked .orb-core{background:radial-gradient(circle at 50% 40%,#ffb4a2,#d64545 75%);box-shadow:0 0 28px rgba(214,69,69,.6)}@keyframes pulse{0%,to{transform:scale(1)}50%{transform:scale(1.12)}}.voice-status{font-size:15px;color:var(--muted)}.meter{width:220px;height:6px;border-radius:4px;background:var(--panel-2);overflow:hidden}.meter-fill{height:100%;border-radius:4px;background:linear-gradient(90deg,#4b7bec,#6ea8fe);transition:width .08s ease-out,opacity .2s ease}.voice-error{color:var(--danger);font-size:13px;text-align:center;max-width:90%}.voice-subs{flex:1 1;overflow-y:auto;flex-direction:column;padding:10px 4px 18px;border-top:1px solid var(--border)}.sub,.voice-subs{display:flex;gap:10px}.sub{font-size:15px;line-height:1.5}.sub .who{flex:0 0 64px;color:var(--muted);font-size:12px;padding-top:2px;text-transform:uppercase;letter-spacing:.03em}.sub.user .what{color:#cfe0ff}.sub.bot .what{color:var(--text)}.sub.system .what{color:var(--danger);font-size:13px}.voice-controls{display:flex;flex-direction:column;align-items:center;gap:8px;padding:12px 0 22px;border-top:1px solid var(--border)}.mic-btn{border:none;border-radius:28px;padding:13px 30px;font-size:16px;font-weight:600;cursor:pointer;color:#fff;transition:transform .1s ease,opacity .15s ease}.mic-btn:active{transform:scale(.97)}.mic-btn.start{background:var(--bubble-user)}.mic-btn.stop{background:#d64545}.voice-controls .hint{font-size:12px;color:var(--muted)}