body{margin:0;font-family:Arial,sans-serif;background:#0e1117;color:#e8edf6}.container{max-width:900px;margin:0 auto;padding:24px}.appHeaderRow{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:8px}.appHeaderRow h1{margin:0 0 8px}.userBar{display:flex;flex-direction:column;align-items:flex-end;gap:8px}.userBar button{margin-left:0}.userEmail{font-size:13px;color:#a9b3c7}.loginWrap{display:flex;align-items:center;justify-content:center;min-height:70vh}.loginCard{width:100%;max-width:420px}.loginCard h1{margin-top:0;font-size:1.35rem}.loginField{display:flex;flex-direction:column;gap:6px;margin:14px 0;font-size:14px;color:#c8d1e0}.loginField input{width:100%;box-sizing:border-box}.loginError{color:#f87171;font-size:14px;margin:0 0 8px}.loginSubmit{margin-left:0;margin-top:8px;width:100%}.firmwarePipelineRow{margin-bottom:16px;padding-bottom:16px;border-bottom:1px solid #2a3345}.pipelineBtn{margin-left:0;margin-bottom:8px;background:#1a2f4a;border-color:#3d5a80}.agentChat .hint{margin-top:0}.agentTtsRow{margin-bottom:10px;font-size:14px;color:#c8d1e0}.agentTtsRow select{min-width:200px}.agentModelRow{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}.agentModelRow label{display:flex;align-items:center;gap:8px;font-size:14px;color:#c8d1e0}.agentChatLog{min-height:120px;max-height:360px;overflow-y:auto;background:#0a0d12;border:1px solid #2a3345;border-radius:6px;padding:10px 12px;margin-bottom:10px;font-size:14px;line-height:1.45}.agentChatEmpty{margin:0;color:#7a869c;font-size:14px}.agentMsg{margin:0 0 10px;white-space:pre-wrap;word-break:break-word}.agentMsg:last-of-type{margin-bottom:0}.agentMsgUser strong{color:#93c5fd}.agentMsgAssistant strong{color:#a5b4fc}.agentChatForm{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.agentChatForm input{flex:1;min-width:180px}.pipelineHint{margin:0;max-width:100%}.sub{color:#a9b3c7}.apiHealthLine code{font-size:12px}.noDevicesHelp{font-size:14px;color:#c8d1e0;line-height:1.5}.noDevicesHelp ul{margin:10px 0 0;padding-left:1.25rem}.noDevicesHelp li{margin:8px 0}.noDevicesHelp code{font-size:12px;background:#0f1521;padding:1px 5px;border-radius:4px}.card{background:#171c26;border:1px solid #2a3345;border-radius:12px;padding:16px;margin:16px 0}input,select,button{padding:10px;border-radius:8px;border:1px solid #2f3a4f;background:#0f1521;color:#e8edf6}button{cursor:pointer;margin-left:8px}.deviceRow{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;border-top:1px solid #2a3345;padding:12px 0}.actions{display:flex;align-items:center}.wifiPanel{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.wifiPanel input{min-width:170px}.wifiProfileSelect{min-width:280px;flex:1 1 240px}.wifiListRow{margin-top:12px;padding-top:12px;border-top:1px solid #2a3345}.wifiSavedList{list-style:none;margin:12px 0 0;padding:0;font-size:14px}.wifiSavedList li{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:8px 10px;margin-top:6px;background:#0f1521;border:1px solid #2a3345;border-radius:8px}.muted{color:#7a8699;font-weight:400}button.secondary{background:#252d3d;border-color:#3d4a63}button.linkish{background:transparent;border:none;color:#6b9ef5;margin-left:0;padding:6px 10px}button.linkish:hover{text-decoration:underline}.hint code{font-size:12px;background:#0f1521;padding:2px 6px;border-radius:4px}.fwWarn{color:#fbbf24;font-size:14px;margin:8px 0}.firmwareToolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-end;margin-top:12px}.firmwareToolbar button{margin-left:0}.fwPortLabel{display:flex;flex-direction:column;gap:4px;font-size:13px;color:#a9b3c7}.fwPortLabel input{min-width:200px}.fwPortLabel .firmwarePortSelect{min-width:200px;width:100%;flex:0 0 auto}.firmwareLog{margin-top:12px;max-height:280px;overflow:auto;background:#0a0e14;border:1px solid #1e2736;border-radius:8px;padding:10px;font-family:Courier New,monospace;font-size:11px;line-height:1.45;white-space:pre-wrap;word-break:break-word;color:#c8d1e0}.checkLabel{display:flex;align-items:center;gap:6px;font-size:14px}.checkLabel input{min-width:auto}.hint{color:#a9b3c7;font-size:13px;margin:4px 0 12px}.wakeWordPanel{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.wakeWordPanel select{min-width:200px}.selfHostedPanel{margin:16px 0 12px;padding:12px 14px 14px;border:1px solid #2a3345;border-radius:8px;background:#0c1018}.selfHostedPanel legend{padding:0 8px;font-size:14px;font-weight:600;color:#c8d1e0}.selfHostedField{display:flex;flex-direction:column;align-items:flex-start;gap:4px;margin-bottom:10px;width:100%;max-width:42rem;box-sizing:border-box}.selfHostedField label{font-size:13px;color:#8b9bb5}.selfHostedFieldInline{flex-direction:row;flex-wrap:wrap;align-items:flex-start;gap:12px 20px}.selfHostedFieldInline>div{display:flex;flex-direction:column;gap:4px;flex:0 1 auto;align-items:flex-start;min-width:0;max-width:100%}.selfHostedInput,.selfHostedSelect{flex:0 0 auto;align-self:stretch;min-height:2.5rem;max-height:2.75rem;line-height:1.35;max-width:40rem;width:100%;box-sizing:border-box;padding:6px 10px;font-size:14px;color:#e2e8f0;background:#131820;border:1px solid #2a3345;border-radius:6px}.selfHostedSelect{min-width:min(18rem,100%);cursor:pointer;-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}.selfHostedInputShort{min-width:0;max-width:12rem;width:100%}.selfHostedCheck{display:flex;align-items:center;gap:6px;font-size:12px;color:#94a3b8;margin-top:4px;cursor:pointer}.selfHostedSaveRow{margin-top:4px;margin-bottom:8px;align-items:center}.soundPanel{display:flex;flex-direction:column;gap:12px}.soundPanel select{max-width:200px}.soundOptions{display:flex;gap:20px;flex-wrap:wrap}.volumeRow{display:flex;align-items:center;gap:12px}.volumeRow input[type=range]{flex:1;max-width:300px;accent-color:#4e9af5}.volumeRow span{min-width:40px;text-align:right;font-size:14px;color:#a9b3c7}.soundPanel button{align-self:flex-start;margin-left:0}.logSectionHeader{display:flex;flex-direction:column;align-items:stretch;gap:10px;margin-bottom:12px}.logSectionTopRow{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px}.logSectionHeader h2,.logSectionHint{margin:0}.logUplinkFullWidth{width:100%;min-width:0}.logUplinkFullWidth .uplinkScopeWrap{width:100%;max-width:100%}.logToolbar{display:flex;flex-wrap:wrap;align-items:center;gap:10px}.logTabList{display:flex;flex-wrap:wrap;align-items:stretch;gap:6px;margin-bottom:10px;padding-bottom:2px;border-bottom:1px solid #1e2736}.logTab{margin:0;padding:6px 10px;font-size:12px;line-height:1.2;color:#8b9ab5;background:#131820;border:1px solid #2a3345;border-radius:6px 6px 0 0;border-bottom:none;cursor:pointer;font-family:inherit;white-space:nowrap}.logTab:hover{color:#c8d1e0;background:#17202c;border-color:#3a4558}.logTabActive{color:#e8edf6;background:#0a0e14;border-color:#1e2736;box-shadow:inset 0 2px #60a5fa;position:relative;z-index:1;margin-bottom:-1px;padding-bottom:7px}.logCopyBtn{margin-left:0}.logCopyHint{font-size:13px;color:#4ade80}.logPanel{max-height:320px;overflow-y:auto;background:#0a0e14;border:1px solid #1e2736;border-radius:8px;padding:8px;font-family:Courier New,monospace;font-size:12px;line-height:1.6}.logPanelVoice{font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.45;padding:12px 10px 14px;max-height:380px}.voiceThread{display:flex;flex-direction:column;gap:10px;min-height:40px}.voiceRow{display:flex;width:100%}.voiceRow--user{justify-content:flex-start}.voiceRow--assistant{justify-content:flex-end}.voiceBubble{max-width:min(92%,32rem);border-radius:16px;padding:9px 12px 10px;box-sizing:border-box}.voiceBubble--user{background:#132337;border:1px solid #1e3a5f;color:#e3eaf4;border-bottom-left-radius:4px}.voiceBubble--user.voiceBubble--interim{opacity:.78;font-style:italic;border-style:dashed}.voiceBubble--assistant{background:#1e1630;border:1px solid #3b2d55;color:#f1e8ff;border-bottom-right-radius:4px}.voiceBubbleLabel{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:#8b9bb8;margin:0 0 4px}.voiceBubbleText{white-space:pre-wrap;word-break:break-word}.voiceBubbleCaptions{margin-top:8px;padding-top:6px;border-top:1px solid rgba(148,163,184,.15);display:flex;flex-direction:column;gap:3px}.voiceCaption{font-size:11px;line-height:1.35;color:#94a3b8}.voiceCaption--stt{color:#a8b3c4;font-size:10px;opacity:.9}.voiceThreadMeta{margin:0;text-align:center;font-size:11px;line-height:1.4;color:#5c6a82}.voiceThreadMetaTs,.voiceThreadFaultTs{color:#4a5568;font-family:Courier New,ui-monospace,monospace;font-size:10px}.voiceThreadFault{margin:0;text-align:center;font-size:10px;line-height:1.4;padding:2px 6px}.voiceThreadFault--error{color:#b45353}.voiceThreadFault--warn{color:#a3843d}.logEmpty{color:#566580;text-align:center;padding:24px}.logLine{display:flex;gap:8px;align-items:baseline;padding:2px 4px;border-radius:4px}.logLine:hover{background:#141a24}.logTs{color:#566580;flex-shrink:0}.logBadge{font-size:10px;font-weight:700;text-transform:uppercase;padding:1px 6px;border-radius:4px;flex-shrink:0}.badge-device{background:#1a3a2a;color:#4ade80}.badge-uplink{background:#1a2a28;color:#5eead4}.uplinkScopeWrap{margin:0 0 1rem;border:1px solid #1e293b;border-radius:8px;overflow:hidden;background:#0b0f14}.uplinkScopeHead{padding:6px 12px;font-size:12px;color:#94a3b8;background:#0f172a;border-bottom:1px solid #1e293b}.uplinkScopeCanvas{display:block;width:100%;vertical-align:middle}.uplinkScopeMeta{padding:6px 12px;font-size:12px;color:#94a3b8;border-top:1px solid #1e293b;line-height:1.4}.uplinkScopeMetaId{font-family:ui-monospace,monospace;color:#cbd5e1}.badge-esp32{background:#2a251a;color:#fbbf24}.badge-pipeline{background:#1a2a3a;color:#60a5fa}.badge-stt{background:#3a2a1a;color:#fbbf24}.badge-llm{background:#2a1a3a;color:#c084fc}.badge-tts{background:#1a3a3a;color:#2dd4bf}.badge-agentChat{background:#2a2038;color:#e9a8ff}.logMsg{color:#c8d1e0;word-break:break-word}.log-error .logMsg{color:#f87171}.log-warn .logMsg{color:#fbbf24}.status{color:#65d26e}
