:root{color-scheme:dark;--bg:#0b1018;--panel:#172334;--stroke:#2d4055;--fg:#ecf3fc;--secondary:#b3c5da;--good:#4ee2ad;--warn:#ffd078;--bad:#ff808f;--muted:#8a9db0}*{box-sizing:border-box}html,body{margin:0;width:100%;min-height:100%;background:var(--bg);color:var(--fg);font:16px/1.35 system-ui,-apple-system,"Segoe UI",sans-serif}button,input,textarea,select{font:inherit}button{border-radius:10px;min-height:44px;padding:8px 16px;background:#245779;color:white;border:1px solid #438eb2;cursor:pointer}button:disabled{opacity:.5;cursor:wait}button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:3px solid #76c5f3;outline-offset:2px}.muted{color:var(--secondary)}.brand{font-size:28px;letter-spacing:.06em}.dashboard{height:100dvh;max-height:100dvh;display:grid;grid-template-rows:64px minmax(0,1.3fr) minmax(0,1fr) 98px;gap:11px;padding:8px 10px;overflow:hidden}.top{display:flex;justify-content:space-between;align-items:center;min-width:0;gap:8px}.top>div:first-child{display:flex;flex-direction:column}.top>div:first-child span{font-size:13px}.top-status{display:flex;align-items:center;gap:12px;font-weight:650}.state{border-radius:10px;padding:7px 13px;font-size:20px;border:1px solid currentColor}.state.nominal{color:var(--good)}.state.critical,.state.stale,.state.offline{color:var(--bad)}.state.warning{color:var(--warn)}.state.unavailable,.state.no_sample{color:var(--secondary)}#age{min-width:100px;text-align:right;font-size:16px}.gauges,.secondary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:11px;min-height:0}.tile{background:var(--panel);border:1px solid var(--stroke);border-radius:13px;min-width:0;overflow:hidden;padding:13px}.tile h2{font-size:19px;letter-spacing:.03em;line-height:1.15;margin:0 0 11px}.gauge{display:flex;flex-direction:column}.value{font-size:49px;line-height:1.1;font-weight:750;white-space:nowrap}.value small{font-size:24px;font-weight:550}.bar{margin-top:auto;height:11px;background:#2e4050;border-radius:10px;overflow:hidden}.bar i{display:block;height:100%;width:0;background:var(--good);transition:width .5s ease}.gauge p{font-size:15px;line-height:1.2;color:var(--secondary);margin:9px 0 0;max-height:40px;overflow:hidden}.compact{padding:12px}.compact h2{font-size:18px;margin-bottom:12px}.compact p{margin:0;white-space:pre-line;font-size:16px;line-height:1.55;max-height:105px;overflow:hidden}.bottom{border:1px solid var(--stroke);border-radius:13px;background:var(--panel);display:flex;align-items:center;justify-content:space-between;padding:10px 16px;gap:15px;overflow:hidden}.bottom>div:first-child{display:flex;flex-direction:column;gap:7px;min-width:0;flex:1}.bottom strong{font-size:17px}.bottom #event{font-size:16px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.bottom-side{min-width:280px;display:flex;flex-direction:column;font-size:14px;gap:2px;color:var(--secondary)}@media (prefers-reduced-motion:reduce){.bar i{transition:none}}
.mobile-header{padding:14px max(16px,env(safe-area-inset-left));display:flex;gap:10px;align-items:center;justify-content:space-between;border-bottom:1px solid var(--stroke)}.mobile-header strong{font-size:21px}.mobile-header span{font-size:14px}.mobile-root{max-width:1100px;margin:0 auto;padding:18px;padding-bottom:calc(16px + env(safe-area-inset-bottom))}.login-panel{max-width:460px;margin:28px auto;padding:24px;background:var(--panel);border:1px solid var(--stroke);border-radius:16px}.login-panel h1{font-size:28px;margin:0}.login-panel p{color:var(--secondary)}form label{display:block;font-size:16px;font-weight:600;margin:15px 0 5px}.login-panel input{width:100%;padding:13px;border:1px solid var(--stroke);border-radius:10px;background:var(--bg);color:var(--fg)}.login-panel button{margin-top:15px;width:100%}#login-error{color:var(--bad)}.owner-app{max-width:960px;margin:0 auto}.app-tabs{display:flex;gap:10px;margin-bottom:16px}.app-tabs button{flex:1;background:#1d3347}.app-tabs button.selected{background:#28658b}.chat-controls{display:flex;gap:8px}.chat-controls select{flex:1;min-width:0;border:1px solid var(--stroke);border-radius:8px;background:var(--panel);color:var(--fg);padding:6px}.chat-controls .danger{background:#683143;border-color:#945366}.messages{height:min(55dvh,600px);min-height:260px;margin:12px 0;overflow:auto;border:1px solid var(--stroke);border-radius:12px;background:var(--panel);padding:12px}.message{max-width:90%;margin:8px 0;padding:12px;border-radius:11px;background:#293c50;white-space:pre-wrap;overflow-wrap:anywhere}.message.user{margin-left:auto;background:#245576}.message .role{display:block;font-size:13px;color:var(--secondary);margin-bottom:5px}.chat-form{display:grid;grid-template-columns:1fr auto;gap:10px;align-items:end}.chat-form label{grid-column:1/-1;margin:0}.chat-form textarea{width:100%;border:1px solid var(--stroke);background:var(--panel);color:var(--fg);border-radius:10px;padding:12px;resize:vertical;min-height:65px}.chat-panel>p{font-size:13px}.health-summary{display:flex;justify-content:space-between;margin:16px 0;font-size:22px}.health-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.health-grid>div{display:flex;flex-direction:column;gap:9px;padding:16px;background:var(--panel);border:1px solid var(--stroke);border-radius:12px;min-height:100px}.health-grid strong{font-size:17px;color:var(--secondary)}.health-grid span{font-size:24px;overflow-wrap:anywhere}#remote-stamp{color:var(--secondary)}[hidden]{display:none!important}@media(max-width:650px){.mobile-header strong{font-size:17px}.mobile-header span{font-size:12px}.chat-controls button{padding:6px 10px}.health-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.health-grid span{font-size:20px}}@media(max-height:550px){.dashboard{grid-template-rows:55px minmax(0,1.3fr) minmax(0,1fr) 78px;gap:5px;padding:5px}.tile{padding:7px}.tile h2{font-size:15px;margin-bottom:5px}.value{font-size:35px}.compact p{font-size:13px}.bottom{padding:6px}}@media(max-width:850px){body[data-mode=kiosk] .tile h2{font-size:15px}body[data-mode=kiosk] .value{font-size:35px}body[data-mode=kiosk] .compact p{font-size:13px}}

/* v1.0.8 unified owner management, no kiosk layout changes. */
#menu-toggle{min-width:46px;padding:8px;font-size:21px}
.owner-app{position:relative;min-height:70dvh}
.owner-menu{position:absolute;z-index:10;left:0;top:0;width:min(300px,90vw);background:#132233;border:1px solid #42617b;border-radius:12px;box-shadow:0 12px 30px #000b;padding:12px;display:flex;flex-direction:column;gap:8px}
.owner-menu button{text-align:left;width:100%;background:#1b3549;min-height:48px}
.voice-panel,.voices-panel,.settings-panel{background:var(--panel);padding:18px;border:1px solid var(--stroke);border-radius:14px}
.voice-panel h1,.voices-panel h1,.settings-panel h1{margin:0 0 12px;font-size:24px}
.voice-panel audio{display:block;width:100%;max-width:520px;margin:20px 0}
.voices-panel input:not([type=checkbox]),.voices-panel textarea{display:block;width:100%;background:var(--bg);border:1px solid var(--stroke);border-radius:10px;color:var(--fg);padding:12px;margin:8px 0}
.voices-panel .consent{display:flex;align-items:center;gap:12px;margin:16px 0}
.voices-panel .consent input{width:22px;height:22px}
.voice-list{display:grid;gap:10px;margin-top:18px}
.voice-card{background:#1c3144;border:1px solid var(--stroke);border-radius:12px;padding:14px;overflow-wrap:anywhere}
.voice-card .actions{display:flex;gap:7px;flex-wrap:wrap;margin-top:12px}
.voice-card button{min-width:85px}
.voice-card button.danger{background:#663040;border-color:#a35c6b}
#voice-upload-status,#voice-state{min-height:25px;color:var(--secondary)}
@media(max-width:550px){.mobile-header{flex-wrap:wrap}.mobile-header strong{flex:1;white-space:nowrap}.mobile-header #mobile-status{font-size:11px}.voice-card .actions button{flex:1}}

/* Single owner composer and full read-only Core health projection. */
.chat-form{grid-template-columns:minmax(0,1fr) auto;align-items:end}
.chat-form textarea{grid-column:1;grid-row:2;min-width:0;min-height:96px;resize:vertical}
.chat-form button[type=submit]{grid-column:2;grid-row:2;min-width:78px}
.health-grid span{font-size:16px;white-space:pre-line;line-height:1.5}
.health-grid>div{min-width:0;min-height:118px}
@media(max-width:600px){.mobile-root{padding:12px}.messages{height:min(48dvh,440px);min-height:190px}.health-grid{grid-template-columns:1fr}.chat-form textarea{min-height:108px}}

/* v1.0.8 R3: local microphone metering; no captured samples sent to UI telemetry. */
#microphone-level{display:block;width:100%;max-width:520px;height:22px;margin:8px 0}
#mic-level-state{min-height:20px;margin-top:5px}

/* v1.0.8 one-conversation audio input, playback and opt-in web approval. */
#chat-voice-controls{margin-top:14px;padding:12px 14px;background:var(--panel)}
#chat-voice-controls h2{font-size:19px;margin:0 0 7px}
#chat-voice-controls audio{width:100%;max-width:550px;margin:12px 0}
.inline-option{display:inline-flex;gap:7px;align-items:center;margin-left:10px;font-size:14px}
.inline-option input{width:18px;height:18px}
#research-approval{margin:12px 0;padding:14px;border:1px solid var(--stroke);border-radius:12px;background:var(--panel)}
#research-approval p{margin:0 0 10px;overflow-wrap:anywhere}
#research-approval button{margin:0 8px 6px 0}
@media(max-width:550px){#record-toggle{width:100%;margin-bottom:6px}.inline-option{margin:4px 0 0}}

/* v1.1.1 single shared composer: no second speech or research interface. */
.chat-form{display:flex;flex-direction:column;gap:8px;align-items:stretch}
.chat-form>label{margin:0}.chat-form textarea{width:100%;grid-column:auto;grid-row:auto;min-height:84px}
.composer-actions{display:flex;gap:8px;justify-content:flex-end;align-items:center}
.composer-actions button[type=submit]{grid-column:auto;grid-row:auto;min-width:90px}
#record-toggle{min-width:51px;font-size:22px;padding:7px 12px}
#record-toggle.recording{background:#a43b4a;border-color:#ff808f;box-shadow:0 0 0 2px #a43b4a55}
.composer-options{display:flex;gap:12px;align-items:center;flex-wrap:wrap;justify-content:flex-start}
.composer-options .inline-option{margin-left:0;display:flex;align-items:center;gap:8px}
.microphone-choice{font-size:13px;display:flex;align-items:center;gap:6px;min-width:0;color:var(--secondary)}
.microphone-choice select{background:var(--panel);color:var(--fg);max-width:260px;min-width:130px;border:1px solid var(--stroke);border-radius:8px;min-height:38px}
.composer-status{font-size:13px;color:var(--secondary);margin:0;min-height:20px}
#capture-indicator{display:flex;align-items:center;gap:9px;font-size:12px;color:var(--secondary)}
#capture-indicator meter{width:145px;max-width:45vw;height:16px}
#speech-player:not([hidden]){max-width:100%;width:420px}
#stop-audio{min-height:35px;padding:5px 10px}
@media(max-width:550px){.microphone-choice{width:100%}.microphone-choice select{max-width:65vw}}
