:root{--bg: #0a0a0f;--surface: #13131a;--surface-2: #1c1c26;--border: rgba(255, 255, 255, .08);--text: #e8e8f0;--text-muted: #888899;--accent: #7b84ff;--accent-dim: rgba(123, 132, 255, .15);--accent-hover: #9198ff;--warning: #f5a623;--danger: #e05a5a;--danger-dim: rgba(224, 90, 90, .15);--success: #48bb78;--radius: 16px;--radius-sm: 8px;--font: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", system-ui, sans-serif;--mono: "SF Mono", "Fira Code", "Cascadia Code", ui-monospace, monospace;--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);--safe-left: env(safe-area-inset-left, 0px);--safe-right: env(safe-area-inset-right, 0px)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body{height:100%;overflow:hidden;background:var(--bg);color:var(--text);font-family:var(--font);-webkit-font-smoothing:antialiased}button{font:inherit;cursor:pointer;border:none;background:none;color:inherit;-webkit-tap-highlight-color:transparent}input{font:inherit;border:none;outline:none;background:none;color:inherit}a{color:var(--accent)}svg{display:block}#app{display:flex;flex-direction:column;height:100%;height:100dvh;position:relative;overflow:hidden}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.hidden{display:none!important}.auth-screen{display:flex;align-items:center;justify-content:center;min-height:100%;padding:24px 20px;padding-top:calc(24px + var(--safe-top));padding-bottom:calc(24px + var(--safe-bottom))}.auth-card{width:100%;max-width:360px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:40px 32px;display:flex;flex-direction:column;align-items:center;gap:0}.auth-logo{width:56px;height:56px;margin-bottom:20px}.auth-logo svg{width:100%;height:100%}.auth-title{font-size:28px;font-weight:700;letter-spacing:-.5px;color:var(--text);margin-bottom:8px}.auth-subtitle{font-size:14px;color:var(--text-muted);text-align:center;margin-bottom:28px}.auth-form{width:100%;display:flex;flex-direction:column;gap:12px}.auth-input{width:100%;padding:14px 16px;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-size:16px;transition:border-color .15s}.auth-input:focus{border-color:var(--accent)}.auth-input--sm{font-size:14px;padding:10px 12px}.auth-submit{width:100%;padding:14px;border-radius:var(--radius-sm);font-size:16px;font-weight:600}.auth-gateway-section{margin-top:20px;width:100%;display:flex;flex-direction:column;gap:8px;align-items:center}.gateway-url-row{width:100%;display:flex;gap:8px;align-items:center}.gateway-url-row .auth-input{flex:1}.btn-primary{background:var(--accent);color:#fff;border-radius:var(--radius-sm);padding:12px 20px;font-weight:600;transition:background .15s,transform .1s}.btn-primary:active{transform:scale(.97);background:var(--accent-hover)}.btn-danger{background:var(--danger-dim);color:var(--danger);border:1px solid var(--danger);border-radius:var(--radius-sm);padding:12px 20px;font-weight:600;transition:background .15s,transform .1s}.btn-danger:active{transform:scale(.97);background:var(--danger);color:#fff}.btn-ghost{color:var(--text-muted);font-size:13px;padding:6px 10px;border-radius:var(--radius-sm);border:1px solid var(--border);transition:color .15s,border-color .15s}.btn-ghost:hover{color:var(--text);border-color:var(--text-muted)}.btn-sm{padding:6px 12px;font-size:13px}.btn-icon{width:40px;height:40px;display:flex;align-items:center;justify-content:center;border-radius:10px;color:var(--text-muted);transition:color .15s,background .15s;flex-shrink:0}.btn-icon svg{width:20px;height:20px}.btn-icon:hover{color:var(--text);background:var(--surface-2)}.btn-icon:active{background:var(--accent-dim);color:var(--accent)}.conversation-layout{display:flex;flex-direction:column;height:100%;overflow:hidden;position:relative}.status-bar{display:flex;align-items:center;justify-content:space-between;padding:12px 12px 8px;padding-top:calc(12px + var(--safe-top));background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0;gap:12px}.status-center{display:flex;align-items:center;gap:6px;flex:1;justify-content:center}.status-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.status-dot--on{background:var(--success);box-shadow:0 0 6px var(--success)}.status-dot--warn{background:var(--warning)}.status-dot--off{background:var(--text-muted)}.status-dot--err{background:var(--danger)}.status-label{font-size:13px;color:var(--text-muted);font-weight:500}.status-right{display:flex;align-items:center;gap:4px}.push-toggle--on{color:var(--accent)}.push-toggle--denied{font-size:18px;opacity:.4;cursor:not-allowed;padding:8px}.push-toggle svg{width:20px;height:20px}.push-toggle .spinner{animation:spin 1s linear infinite}.turn-list{flex:1;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;padding:16px 16px 8px;display:flex;flex-direction:column;gap:12px;scroll-behavior:smooth}.turn-list::-webkit-scrollbar{width:4px}.turn-list::-webkit-scrollbar-track{background:transparent}.turn-list::-webkit-scrollbar-thumb{background:var(--surface-2);border-radius:2px}.turn{display:flex;flex-direction:column;max-width:85%;animation:fadeUp .2s ease-out}.turn--user{align-self:flex-end;align-items:flex-end}.turn--jarvis{align-self:flex-start;align-items:flex-start}.turn--system{align-self:center;align-items:center;max-width:100%}.turn--live{opacity:.6}.turn__bubble{padding:10px 14px;border-radius:16px;font-size:15px;line-height:1.5;word-break:break-word}.turn--user .turn__bubble{background:var(--accent);color:#fff;border-bottom-right-radius:4px}.turn--jarvis .turn__bubble{background:var(--surface-2);border:1px solid var(--border);color:var(--text);border-bottom-left-radius:4px}.turn--system .turn__bubble{background:transparent;border:1px solid var(--danger);color:var(--danger);font-size:13px;border-radius:var(--radius-sm);padding:6px 12px}.turn__text{margin:0}.turn__text--live{font-style:italic}.turn__text--thinking{display:flex;align-items:center}.turn__time{font-size:11px;color:var(--text-muted);margin-top:3px;padding:0 2px}.turn__tool-indicator{display:flex;align-items:center;gap:6px;margin-bottom:6px;font-size:12px;color:var(--accent);opacity:.85}.tool-label{font-family:var(--mono);font-size:11px}.thinking-dots{display:inline-flex;gap:4px;padding:2px 0}.thinking-dots span{width:6px;height:6px;border-radius:50%;background:var(--text-muted);animation:blink 1.2s infinite}.thinking-dots span:nth-child(2){animation-delay:.2s}.thinking-dots span:nth-child(3){animation-delay:.4s}.tool-spinner{width:12px;height:12px;border:1.5px solid var(--accent-dim);border-top-color:var(--accent);border-radius:50%;animation:spin .7s linear infinite;flex-shrink:0}.empty-state{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:40px 20px;text-align:center}.empty-state__icon{width:64px;height:64px;opacity:.4}.empty-state__text{font-size:15px;color:var(--text-muted)}.input-area{flex-shrink:0;background:var(--surface);border-top:1px solid var(--border);padding:10px 12px;padding-bottom:calc(10px + var(--safe-bottom));display:flex;flex-direction:column;gap:8px}.input-row{display:flex;align-items:center;gap:8px}.mode-toggle{border-radius:10px}.mode-toggle--active{color:var(--accent);background:var(--accent-dim)}.text-input{flex:1;background:var(--surface-2);border:1px solid var(--border);border-radius:20px;padding:10px 16px;font-size:16px;color:var(--text);transition:border-color .15s}.text-input:focus{border-color:var(--accent)}.text-input::placeholder{color:var(--text-muted)}.send-btn{color:var(--accent)}.send-btn:hover{background:var(--accent-dim)}.ptt-row{display:flex;justify-content:center;padding:2px 0}.ptt-btn{display:flex;flex-direction:column;align-items:center;gap:4px;padding:16px 40px;background:var(--surface-2);border:1.5px solid var(--border);border-radius:28px;color:var(--text-muted);font-size:13px;font-weight:500;transition:background .12s,border-color .12s,color .12s,transform .1s;user-select:none;-webkit-user-select:none;touch-action:none}.ptt-btn:active,.ptt-btn--active{background:var(--accent-dim);border-color:var(--accent);color:var(--accent);transform:scale(.97)}.ptt-icon{width:22px;height:22px}.history-layout{display:flex;flex-direction:column;height:100%;overflow:hidden}.history-list{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:12px;display:flex;flex-direction:column;gap:6px}.history-empty{color:var(--text-muted);font-size:15px;text-align:center;padding:40px 20px}.history-item{display:flex;align-items:center;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden;transition:border-color .15s}.history-item:hover{border-color:var(--accent)}.history-item__load{flex:1;padding:14px 16px;text-align:left;display:flex;flex-direction:column;gap:3px}.history-item__title{font-size:14px;font-weight:500;color:var(--text);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.history-item__meta{font-size:12px;color:var(--text-muted)}.history-item__delete{padding:0 12px;align-self:stretch;border-left:1px solid var(--border);border-radius:0;width:auto;height:auto;color:var(--text-muted)}.history-item__delete:hover{color:var(--danger);background:var(--danger-dim)}.modal-backdrop{position:fixed;inset:0;background:#000000b3;backdrop-filter:blur(4px);display:flex;align-items:flex-end;justify-content:center;padding:20px;padding-bottom:calc(20px + var(--safe-bottom));z-index:100;animation:fadeIn .18s ease-out}.modal-card{width:100%;max-width:440px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:28px 24px;display:flex;flex-direction:column;gap:16px;animation:slideUp .22s ease-out}.modal-icon{width:36px;height:36px}.modal-icon svg{width:100%;height:100%}.modal-title{font-size:18px;font-weight:700;color:var(--text)}.modal-summary{font-size:14px;color:var(--text-muted);line-height:1.55;background:var(--surface-2);border-radius:var(--radius-sm);padding:12px 14px;border:1px solid var(--border)}.modal-actions{display:flex;gap:10px;justify-content:flex-end}.error-banner{background:var(--danger-dim);border-bottom:1px solid var(--danger);color:var(--danger);font-size:13px;padding:8px 16px;display:flex;align-items:center;justify-content:space-between;gap:8px}.error-banner__msg{flex:1}.error-banner__dismiss{font-size:18px;line-height:1;color:var(--danger);padding:0 4px;border-radius:4px}.error-banner--stale{flex-wrap:wrap;row-gap:6px}.error-banner__reload{font-size:12px;font-weight:600;color:var(--bg);background:var(--danger);border-radius:6px;padding:4px 10px;cursor:pointer;white-space:nowrap;flex-shrink:0}@keyframes fadeUp{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes blink{0%,80%,to{opacity:.25}40%{opacity:1}}@keyframes spin{to{transform:rotate(360deg)}}::-webkit-scrollbar{width:4px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--surface-2);border-radius:2px}@media (min-width: 600px){.conversation-layout,.history-layout{max-width:480px;margin:0 auto}}
