:root{color-scheme:dark;font-family:Avenir Next,PingFang SC,Microsoft YaHei,sans-serif;color:#eaf1ed;background:#10191c;--muted: #97aaa8;--accent: #b5e1ca;--line: rgba(205, 234, 224, .15)}*{box-sizing:border-box}[hidden]{display:none!important}body{margin:0;height:100vh;height:100dvh;overflow:hidden;background:radial-gradient(ellipse at 46% 38%,#304543 0,#1b2b2d 37%,#10191c 75%)}button,input{font:inherit}button{cursor:pointer;-webkit-tap-highlight-color:transparent}button:disabled{cursor:default;opacity:.38}button,input{outline:none}button:focus-visible,#transcript:focus-visible{outline:2px solid var(--accent);outline-offset:5px}button svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}#canvas{position:fixed;top:0;right:0;bottom:0;left:0;display:block;width:100%;height:100%}.vignette{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;background:linear-gradient(0deg,rgba(9,18,21,.86),transparent 32%,transparent 80%,rgba(9,18,21,.25))}.topbar{position:fixed;top:max(28px,env(safe-area-inset-top));left:40px;right:40px;display:flex;justify-content:space-between;align-items:center}.identity{display:flex;gap:12px;align-items:center;font-size:15px;letter-spacing:.12em}.identity-mark{color:var(--accent);font-size:32px;font-weight:300}.identity-caption{display:block;font-size:10px;margin-top:4px;letter-spacing:.2em;color:var(--muted)}.new-session{display:flex;gap:7px;align-items:center;color:#dae8e1;background:#0f1c1e4d;border:1px solid var(--line);padding:10px 16px;border-radius:30px;font-size:12px;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);transition:background .2s,border-color .2s}.new-session:hover:not(:disabled){border-color:#82a798;background:#709c8c26}.welcome{position:fixed;top:39%;left:7%;pointer-events:none;animation:arrive .8s both}.eyebrow{font-size:9px;letter-spacing:.23em;color:var(--accent)}h1{font-weight:400;font-size:clamp(28px,3vw,44px);letter-spacing:.05em;margin:20px 0}.welcome>p:last-child{font-size:13px;line-height:2;color:var(--muted);letter-spacing:.06em}.chat-hud{position:fixed;width:min(350px,30vw);right:40px;top:25%;bottom:186px;display:flex;flex-direction:column;padding:20px 20px 8px;border:1px solid var(--line);border-radius:20px;background:linear-gradient(140deg,#253a3a73,#0f1b1e45);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);box-shadow:0 12px 50px #00000014;animation:arrive .4s both}.hud-heading{display:flex;align-items:center;gap:12px;color:var(--muted);font-size:10px;letter-spacing:.14em;padding-bottom:15px}.hud-line{height:1px;flex:1;background:var(--line)}#turnCount{font-variant-numeric:tabular-nums}#transcript{overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#627a7466 transparent;min-height:0;flex:1;padding:0 4px 10px 0}.turn+.turn{margin-top:22px;padding-top:18px;border-top:1px solid var(--line)}.line{font-size:13px;line-height:1.9;word-break:break-word;white-space:pre-wrap}.line:before{display:block;font-size:9px;letter-spacing:.12em;margin-bottom:5px;color:var(--muted)}.line.user{color:#b4c8c0}.line.user:before{content:"你"}.line.assistant{margin-top:16px;color:#eff6f2}.line.assistant:before{content:"数字人";color:var(--accent)}.line:empty{display:none}.segment.generated{opacity:.55;transition:opacity .3s}.line.note{color:var(--muted);font-size:12px;margin:12px 0}.composer-dock{position:fixed;z-index:4;width:min(680px,calc(100% - 48px));left:50%;bottom:max(24px,env(safe-area-inset-bottom));transform:translate(-50%)}.status-row{display:flex;justify-content:center;align-items:center;gap:8px;margin:0 0 16px;font-size:11px;letter-spacing:.04em;color:var(--muted)}.status-light{width:5px;height:5px;background:var(--accent);border-radius:50%;box-shadow:0 0 10px #b5e1ca55}.status-row:has([data-tone=busy]) .status-light{animation:breathe 1.4s infinite}.status-row:has([data-tone=bad]) .status-light{background:#f3b0a6}.composer{display:flex;align-items:center;gap:10px;min-height:66px;padding:10px 12px 10px 24px;border:1px solid rgba(205,234,224,.24);border-radius:22px;background:#253638a3;backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);box-shadow:0 16px 44px #0003,inset 0 1px #ffffff06;transition:border-color .2s}.composer:focus-within{border-color:#b5e1ca77}.composer[data-voice-state]:not([data-voice-state=idle]){border-color:var(--accent);background:var(--voice-composer, rgba(37, 54, 56, .9))}#textInput{min-width:0;width:100%;border:0;color:#eff6f2;background:transparent;font-size:14px;padding:8px 0}#textInput::placeholder{color:#91a6a3;font-weight:300}#textInput:disabled{cursor:not-allowed;opacity:.55;-webkit-text-fill-color:currentColor}.icon-button{flex-shrink:0;width:40px;height:40px;border:0;border-radius:13px;display:grid;place-items:center;transition:background .2s,transform .2s}.icon-button:hover:not(:disabled){transform:translateY(-1px)}.mic-button{background:transparent;color:#b7cbc4}.mic-button:hover:not(:disabled){background:#c5f5df14}.stop-icon{display:none}.mic-button[aria-pressed=true]{background:#b5e1ca26;color:var(--accent)}.mic-button[aria-pressed=true] .mic-icon{display:none}.mic-button[aria-pressed=true] .stop-icon{display:block;fill:currentColor;stroke:none}.send-button{background:var(--accent);color:#18342a}.input-divider{height:20px;width:1px;background:var(--line)}.input-hint{margin:12px 0 0;text-align:center;color:#829693;font-size:10px;letter-spacing:.06em}.recording-panel{position:absolute;left:50%;bottom:calc(100% + 14px);width:min(360px,100%);transform:translate(-50%);padding:16px 20px 18px;border:1px solid var(--voice-line, #688e83);border-radius:22px;background:var(--voice-bg, #1b3031f5);color:var(--voice-text, #eaf1ed);box-shadow:0 18px 55px #0003,inset 0 1px #ffffff0a;backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);animation:recording-arrive .22s ease-out both}.recording-heading{display:flex;align-items:center;justify-content:space-between}.recording-eyebrow{display:flex;align-items:center;gap:7px;font-size:10px;letter-spacing:.12em;color:var(--voice-muted, #a6bdb6)}.recording-dot{width:6px;height:6px;border-radius:50%;background:#e68e81;box-shadow:0 0 0 4px #e68e8117;animation:breathe 1.6s ease-in-out infinite}.recording-cancel{display:grid;place-items:center;width:28px;height:28px;margin-right:-6px;border:0;border-radius:9px;background:transparent;color:var(--voice-muted, #a6bdb6)}.recording-cancel svg{width:16px;height:16px}.recording-cancel:hover:not(:disabled){background:var(--voice-tint, #b5e1ca14)}.recording-label{margin:5px 0 2px;font-size:18px;font-weight:500;letter-spacing:.04em}.recording-visual{display:flex;align-items:center;gap:18px;height:82px}.recording-mic{width:42px;height:42px;flex-shrink:0;display:grid;place-items:center;border-radius:50%;color:var(--voice-wave, #b5e1ca);background:var(--voice-tint, #b5e1ca14);box-shadow:0 0 0 6px var(--voice-halo, #b5e1ca08)}.recording-mic svg{width:21px;height:21px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.recording-wave{display:flex;align-items:center;justify-content:center;gap:4px;flex:1;height:48px;overflow:hidden;color:var(--voice-wave, #b5e1ca)}.recording-wave span{display:block;width:3px;flex-shrink:0;height:22px;border-radius:3px;background:currentColor;animation:recording-wave 1.1s ease-in-out infinite}.recording-wave span:nth-child(4n+1){height:13px;animation-delay:-.65s}.recording-wave span:nth-child(4n+2){height:30px;animation-delay:-.3s}.recording-wave span:nth-child(4n+3){height:43px;animation-delay:-.9s}.recording-wave span:nth-child(3n){animation-duration:.85s}.recording-time{min-width:39px;color:var(--voice-muted, #a6bdb6);font-size:12px;font-variant-numeric:tabular-nums;letter-spacing:.04em}.recording-footer{display:flex;align-items:center;justify-content:space-between;gap:10px;padding-top:12px;border-top:1px solid var(--voice-line, #688e833d)}.recording-footer p{margin:0;font-size:10px;line-height:1.7;color:var(--voice-muted, #a6bdb6)}.recording-stop{display:flex;align-items:center;justify-content:center;gap:6px;flex-shrink:0;min-height:32px;padding:7px 10px;border:0;border-radius:10px;color:var(--voice-text, #eaf1ed);background:var(--voice-tint, #b5e1ca14);font-size:11px}.recording-stop>span{width:7px;height:7px;border-radius:2px;background:#e68e81}.recording-stop:hover:not(:disabled){filter:brightness(1.1)}.recording-panel[data-state=starting] .recording-wave,.recording-panel[data-state=processing] .recording-wave{opacity:.45}.recording-panel[data-state=starting] .recording-wave span,.recording-panel[data-state=processing] .recording-wave span{height:8px;animation-duration:1.8s}@keyframes recording-arrive{0%{opacity:0;translate:0 10px}to{opacity:1;translate:0 0}}@keyframes recording-wave{0%,to{transform:scaleY(.25)}50%{transform:scaleY(1)}}#err{font-size:12px;color:#f3c0b8;background:#442d2dd9;border:1px solid #ebaca326;padding:10px 14px;border-radius:12px;margin-bottom:12px;line-height:1.6;max-height:100px;overflow:auto}#progress{margin:0 auto 16px;width:210px;text-align:center;font-size:11px;color:var(--muted)}.bar{display:block;height:2px;background:var(--line);margin-top:10px;overflow:hidden}#barFill{display:block;width:0;height:100%;background:var(--accent);transition:width .2s}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}@keyframes arrive{0%{opacity:0;translate:0 8px}to{opacity:1;translate:0 0}}@keyframes breathe{50%{opacity:.3}}@media (max-width: 760px){.topbar{left:22px;right:22px;top:max(20px,env(safe-area-inset-top))}.welcome{left:24px;top:auto;bottom:180px}.welcome h1{font-size:28px;margin:12px 0}.welcome .eyebrow{font-size:8px}.chat-hud{width:auto;left:20px;right:20px;top:auto;bottom:174px;max-height:32dvh;padding:14px 16px 4px;border-radius:16px;background:#1222247a}.hud-heading{padding-bottom:10px}.line{font-size:13px}.composer-dock{width:calc(100% - 32px);bottom:max(20px,env(safe-area-inset-bottom))}.composer{min-height:60px;padding-left:16px;gap:4px;border-radius:19px}#textInput{font-size:16px}#textInput::placeholder{font-size:13px}.status-row{margin-bottom:12px}}@media (max-height: 580px) and (min-width: 761px){.chat-hud{top:92px;bottom:150px}.composer-dock{bottom:16px}.welcome{top:26%}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation:none!important;transition:none!important}}
