:root{--bg:#0f1115;--bg-elev:#171a21;--bg-msg-user:#232838;--bg-msg-assistant:#1b1f29;--fg:#e8eaf0;--fg-dim:#9aa3b2;--accent:#7c6cff;--accent-soft:#7c6cff29;--ok:#3ecf8e;--warn:#f5a623;--danger:#ef4444;--radius:14px;--font:system-ui, -apple-system, "Segoe UI", Roboto, "Noto Sans SC", "Noto Sans JP", "Noto Sans Arabic", sans-serif;--mono:ui-monospace, "Sarasa Mono SC", "JetBrains Mono", Menlo, monospace}@media (prefers-color-scheme:light){:root{--bg:#f5f6fa;--bg-elev:#fff;--bg-msg-user:#e6e2ff;--bg-msg-assistant:#fff;--fg:#1c2030;--fg-dim:#5b6472}}*{box-sizing:border-box}[hidden]{display:none!important}html,body{background:var(--bg);height:100%;color:var(--fg);font-family:var(--font);margin:0;padding:0}#app{flex-direction:column;max-width:760px;height:100dvh;margin:0 auto;display:flex}#topbar{background:var(--bg-elev);border-bottom:1px solid #8080a026;justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;display:flex}.brand{align-items:center;gap:10px;min-width:0;display:flex}.logo{color:var(--accent);font-size:1.6rem;line-height:1}#app-name{margin:0;font-size:1.05rem}.tagline{color:var(--fg-dim);margin:0;font-size:.72rem}.topbar-actions{align-items:center;gap:10px;display:flex}.status{background:var(--accent-soft);color:var(--fg-dim);white-space:nowrap;border-radius:999px;padding:4px 10px;font-size:.72rem}.status-online{color:var(--ok)}.status-offline{color:var(--warn)}.icon-btn{color:var(--fg);cursor:pointer;background:0 0;border:1px solid #8080a040;border-radius:10px;padding:6px 10px;font-size:1.05rem}.icon-btn:hover{background:var(--accent-soft)}#chat{flex-direction:column;flex:1;gap:10px;padding:16px;display:flex;overflow-y:auto}.msg{border-radius:var(--radius);white-space:pre-wrap;word-break:break-word;max-width:82%;padding:10px 14px;font-size:.95rem;line-height:1.45}.msg-user{background:var(--bg-msg-user);align-self:flex-end}.msg-assistant{background:var(--bg-msg-assistant);border:1px solid #8080a024;align-self:flex-start}.msg-welcome{border-inline-start:3px solid var(--accent)}.msg-tool{background:var(--bg-elev);border-radius:var(--radius);max-width:100%;font-family:var(--mono);border:1px solid #8080a02e;align-self:stretch;padding:10px 12px;font-size:.8rem}.tool-head{margin-bottom:6px;font-weight:600}.tool-ok .tool-head{color:var(--ok)}.tool-denied .tool-head{color:var(--warn)}.tool-failed .tool-head{color:var(--danger)}.tool-body{white-space:pre-wrap;color:var(--fg-dim);margin:0}#composer{padding:10px 12px calc(10px + env(safe-area-inset-bottom));background:var(--bg-elev);border-top:1px solid #8080a026;gap:8px;display:flex}#input{background:var(--bg);color:var(--fg);border:1px solid #8080a040;border-radius:999px;outline:none;flex:1;padding:12px 18px;font-size:.95rem}#input:focus{border-color:var(--accent)}#btn-send{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:999px;width:46px;height:46px;font-size:1.1rem}#btn-send:disabled{opacity:.5;cursor:wait}#btn-stop-gen{background:var(--danger);color:#fff;cursor:pointer;border:none;border-radius:999px;height:46px;padding:0 16px;font-size:.9rem;font-weight:600}#btn-stop-gen[hidden]{display:none}.msg-streaming .msg-text{color:var(--fg-dim)}.stream-cursor{vertical-align:text-bottom;background:currentColor;width:.5em;height:1em;margin-inline-start:2px;animation:1s steps(2,start) infinite geny-blink;display:inline-block}@keyframes geny-blink{to{visibility:hidden}}.llm-param{flex:40%;min-width:120px}.llm-param input{width:100%}#settings-drawer{background:var(--bg-elev);z-index:40;border-inline-start:1px solid #8080a033;flex-direction:column;width:min(380px,92vw);display:flex;position:fixed;top:0;bottom:0;box-shadow:-12px 0 32px #00000059}#settings-drawer:not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){right:0}#settings-drawer:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){right:0}#settings-drawer:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){left:0}#settings-drawer:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){left:0}.drawer-head{border-bottom:1px solid #8080a026;justify-content:space-between;align-items:center;padding:14px 16px;display:flex}.drawer-head h2{margin:0;font-size:1rem}.drawer-body{flex-direction:column;gap:14px;padding:16px;display:flex;overflow-y:auto}.drawer-body label{color:var(--fg-dim);flex-direction:column;gap:6px;font-size:.85rem;display:flex}.drawer-body select,.drawer-body input{background:var(--bg);color:var(--fg);border:1px solid #8080a040;border-radius:10px;padding:10px 12px;font-size:.9rem}.privacy-note{color:var(--fg-dim);border-inline-start:3px solid var(--ok);margin:0;padding-inline-start:10px;font-size:.78rem}.btn-primary{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:10px;padding:12px;font-size:.95rem}#confirm-dialog{border-radius:var(--radius);background:var(--bg-elev);color:var(--fg);border:none;min-width:min(340px,90vw);padding:20px}#confirm-dialog::backdrop{background:#0000008c}#confirm-dialog h2{margin-top:0;font-size:1rem}.confirm-actions{justify-content:flex-end;gap:10px;margin-top:16px;display:flex}.btn-danger{border:1px solid var(--danger);color:var(--danger);cursor:pointer;background:0 0;border-radius:10px;padding:10px 14px}@media (prefers-contrast:more){:root{--fg-dim:var(--fg)}}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.btn-mic{background:var(--bg);width:44px;height:44px;color:var(--fg-dim);cursor:pointer;border:1px solid #8080a040;border-radius:999px;flex:none;justify-content:center;align-items:center;display:inline-flex}.btn-mic:hover{border-color:var(--accent);color:var(--accent)}.btn-mic.recording{background:var(--danger);border-color:var(--danger);color:#fff;animation:1.4s ease-in-out infinite mic-pulse}@keyframes mic-pulse{0%,to{box-shadow:0 6px 24px #ef444473}50%{box-shadow:0 6px 40px #ef4444bf}}#voice-panel{background:var(--bg-elev);border-radius:var(--radius);border:1px solid #8080a02e;flex-direction:column;gap:8px;margin:0 12px 8px;padding:12px 14px;display:flex}.voice-status{color:var(--fg-dim);align-items:center;gap:8px;font-size:.9rem;display:flex}.voice-dot{background:var(--fg-dim);border-radius:50%;flex:none;width:10px;height:10px}.voice-dot.pulse{background:var(--danger);animation:1.2s ease-in-out infinite dot-pulse}@keyframes dot-pulse{0%,to{opacity:1}50%{opacity:.35}}.voice-level{background:#8080a033;border-radius:999px;height:6px;overflow:hidden}#voice-level-bar{background:linear-gradient(90deg, var(--accent), var(--ok));border-radius:999px;width:0%;height:100%;transition:width 90ms linear;display:block}#voice-transcript{min-height:1.4em;color:var(--fg);word-break:break-word;margin:0;font-size:.95rem}.voice-actions{justify-content:flex-end;gap:10px;display:flex}.msg-replay{opacity:.65;background:0 0;border:none;width:30px;height:30px;font-size:.85rem}.msg-replay:hover{opacity:1}.drawer-section{text-transform:uppercase;letter-spacing:.06em;color:var(--fg-dim);margin:6px 0 0;font-size:.85rem}.check-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.check-row small{width:100%}.btn-small{padding:8px 12px;font-size:.85rem}.model-status{color:var(--fg-dim);font-size:.85rem}.tools-count{color:var(--fg-dim);font-size:.8rem}.tools-catalog{flex-direction:column;gap:8px;display:flex}.tool-row{border:1px solid var(--border,#80808040);border-radius:10px;flex-direction:column;gap:3px;padding:8px 10px;display:flex}.tool-row-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.tool-name{font-size:.9rem}.tool-desc,.tool-params{color:var(--fg-dim);overflow-wrap:anywhere;font-size:.78rem}.tool-params:before{content:"⌗ ";opacity:.7}.tool-badge{white-space:nowrap;border:1px solid #0000;border-radius:999px;padding:2px 8px;font-size:.68rem;font-weight:600}.tool-badge.level-none{color:#2ea043;background:#2ea04326;border-color:#2ea04366}.tool-badge.level-simple{color:#388bfd;background:#388bfd26;border-color:#388bfd66}.tool-badge.level-explicit{color:#db9026;background:#db902626;border-color:#db902673}.tool-badge.level-authenticated{color:#da3633;background:#da363326;border-color:#da363373}.voice-screen{z-index:1000;padding:max(14px, env(safe-area-inset-top)) max(16px, env(safe-area-inset-right)) max(14px, env(safe-area-inset-bottom)) max(16px, env(safe-area-inset-left));background:var(--bg);color:var(--fg);flex-direction:column;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}.voice-screen:before{content:"";background:radial-gradient(60% 40% at 50% 42%, var(--accent-soft), transparent 70%);pointer-events:none;position:absolute;top:0;bottom:0;left:0;right:0}.voice-top{justify-content:space-between;align-items:center;gap:12px;display:flex}.voice-top__title{color:var(--fg-dim);font-size:1rem;font-weight:600}.voice-stage{flex-direction:column;flex:1;justify-content:center;align-items:center;gap:28px;min-height:0;display:flex}.voice-orb{--level:0;place-items:center;width:150px;height:150px;display:grid;position:relative}.voice-orb__core{background:radial-gradient(circle at 32% 28%, #b7aeff, var(--accent) 62%);width:96px;height:96px;transform:scale(calc(1 + var(--level) * .38));border-radius:50%;transition:transform .12s ease-out;box-shadow:0 0 34px #7c6cff8c}.voice-orb__ring{border:2px solid var(--accent-soft);opacity:0;border-radius:50%;width:96px;height:96px;position:absolute}.voice-orb[data-state=idle] .voice-orb__core{animation:4.2s ease-in-out infinite orb-breath}.voice-orb[data-state=listening] .voice-orb__ring{animation:1.9s ease-out infinite orb-ping}.voice-orb[data-state=listening] .voice-orb__ring:nth-child(2){animation-delay:.65s}.voice-orb[data-state=listening] .voice-orb__ring:nth-child(3){animation-delay:1.3s}.voice-orb[data-state=transcribing] .voice-orb__core,.voice-orb[data-state=thinking] .voice-orb__core{background:conic-gradient(from 0deg, var(--accent), #3ecf8e, var(--accent));animation:1.6s linear infinite orb-spin}.voice-orb[data-state=speaking] .voice-orb__ring{opacity:1;border-color:var(--accent);animation:1.1s ease-out infinite orb-ping}.voice-orb[data-state=speaking] .voice-orb__ring:nth-child(2){animation-delay:.36s}.voice-orb[data-state=speaking] .voice-orb__ring:nth-child(3){animation-delay:.72s}@keyframes orb-breath{0%,to{transform:scale(.94)}50%{transform:scale(1.05)}}@keyframes orb-ping{0%{opacity:.85;transform:scale(1)}to{opacity:0;transform:scale(2.05)}}@keyframes orb-spin{to{transform:scale(calc(1 + var(--level) * .38)) rotate(360deg)}}.voice-caption{text-align:center;max-width:34rem;min-height:2.6em;color:var(--fg);overflow-wrap:anywhere;margin:0;padding:0 12px;font-size:1.02rem;line-height:1.35}.voice-caption:empty:before{content:""}.voice-log{flex-direction:column;flex:0 auto;gap:8px;max-height:30vh;margin:0 4px;padding:0;list-style:none;display:flex;overflow-y:auto}.voice-log li{border-radius:var(--radius);overflow-wrap:anywhere;max-width:82%;padding:8px 12px;font-size:.92rem;line-height:1.35}.voice-log li[data-role=user]{background:var(--bg-msg-user);align-self:flex-end}.voice-log li[data-role=assistant]{background:var(--bg-msg-assistant);align-self:flex-start}.voice-controls{flex-direction:column;align-items:center;gap:14px;padding-bottom:6px;display:flex}.voice-chip{border:1px solid var(--accent-soft);background:var(--bg-elev);color:var(--fg);border-radius:999px;padding:8px 16px;font-size:.88rem}.voice-chip[aria-pressed=true]{border-color:var(--accent);color:var(--accent)}.voice-chip:disabled{opacity:.45}.voice-big-mic{background:var(--accent);color:#fff;border:none;border-radius:50%;place-items:center;width:84px;height:84px;display:grid;box-shadow:0 6px 24px #7c6cff73}.voice-big-mic.recording{background:var(--danger);animation:1.3s ease-in-out infinite mic-pulse;box-shadow:0 6px 24px #ef444473}.voice-big-mic:active{transform:scale(.96)}@media (prefers-reduced-motion:reduce){.voice-orb__core,.voice-orb__ring,.voice-big-mic.recording{animation:none!important}}
