:root{font-family:PingFang SC,Segoe UI,system-ui,-apple-system,BlinkMacSystemFont,Helvetica Neue,Arial,sans-serif;line-height:1.5;font-weight:400;color:#0f172a;background-color:#f4f6fb;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*,*:before,*:after{box-sizing:border-box}#root{min-height:100vh;height:100vh}:root{--primary: #2b5cff;--primary-dark: #1d40b5;--surface: #ffffff;--border: #e2e8f0;--text-muted: #64748b;--success: #0f9d58;--danger: #e11d48}body{margin:0;min-height:100vh;height:100vh;background-color:#f4f6fb}body.mobile-shell--locked{overflow:hidden;background-color:#f4f6fb}body.mobile-shell--locked #root{height:100%}.page-container{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:2rem 1rem;background:linear-gradient(180deg,#f4f6fb,#e7ecfb)}.page-container.mobile{align-items:flex-start;padding-top:3rem}.card{background:var(--surface);border-radius:24px;padding:2.5rem;width:min(560px,100%);box-shadow:0 20px 60px #0f172a14}.auth-card{display:flex;width:min(1100px,95vw);min-height:520px;background:var(--surface);border-radius:32px;overflow:hidden;box-shadow:0 25px 80px #0f172a1f}.auth-info{flex:0 0 70%;padding:3rem;background:radial-gradient(circle at top left,#2b5cff1f,#2b5cff00);border-right:1px solid var(--border);display:flex;flex-direction:column;justify-content:center}.auth-info h1{font-size:2.2rem;margin-bottom:1rem}.info-list{list-style:none;padding:0;margin:2rem 0 0;color:var(--text-muted);display:flex;flex-direction:column;gap:.75rem}.info-list li{display:flex;align-items:center;gap:.5rem}.info-list li:before{content:"";width:10px;height:10px;border-radius:50%;background:var(--primary)}.auth-panel{flex:0 0 30%;padding:2.5rem;display:flex;flex-direction:column;justify-content:center}.tab-switch{display:grid;grid-template-columns:repeat(2,1fr);background:#eef2ff;border-radius:999px;padding:6px;margin-bottom:1.5rem}.tab-switch button{background:transparent;border:none;border-radius:999px;color:#312e81;font-weight:600;height:40px}.tab-switch button.active{background:var(--surface);color:var(--primary);box-shadow:0 8px 20px #2b5cff33}.tab-body{flex:1;display:flex;flex-direction:column}.qr-tab .tips{margin-top:0}.tips.compact li{margin-bottom:.5rem}.muted.small{font-size:.85rem;margin-top:.75rem}.card h1{margin:0 0 .5rem;font-size:1.9rem}.subtitle{margin-top:0;color:var(--text-muted);font-size:1rem}.qr-wrapper{display:flex;justify-content:center;margin:2rem 0;padding:1.5rem;border:1px dashed var(--border);border-radius:16px;background:#f8fafc}.qr-wrapper.small{margin:.6rem 0;padding:.75rem}.placeholder{color:var(--text-muted)}.tips{list-style:disc;padding-left:1.5rem;color:var(--text-muted)}.error-banner,.success-banner{padding:.75rem 1rem;border-radius:12px;font-size:.95rem;margin-bottom:1rem}.error-banner{background:#e11d4814;color:var(--danger)}.success-banner{background:#0f9d5814;color:var(--success)}.form{display:flex;flex-direction:column;gap:1rem;margin-top:1.5rem}.form label{display:flex;flex-direction:column;gap:.25rem;font-weight:600}.form input{height:44px;border-radius:12px;border:1px solid var(--border);padding:0 1rem;font-size:1rem}button{border:none;border-radius:12px;height:48px;font-size:1rem;font-weight:600;cursor:pointer;background:var(--primary);color:#fff;transition:background .2s ease}button:disabled{opacity:.6;cursor:not-allowed}button:not(:disabled):hover{background:var(--primary-dark)}.ghost-button{background:transparent;color:#0f172a;border:1px solid var(--border)}.ghost-button:not(:disabled):hover{background:#f8fafc}.button-compact{height:34px;font-size:.82rem;padding:0 .8rem}.muted{color:var(--text-muted);font-size:.9rem;text-align:center}.vehicle-panel .muted.small{font-size:.72rem}.binding-info{background:#eef2ff;color:#312e81;padding:.75rem 1rem;border-radius:12px;font-weight:600}.chat-layout{display:flex;min-height:100vh;background:#f4f6fb;height:100vh;overflow:hidden}.vehicle-panel{width:var(--vehicle-panel-width, 320px);flex:0 0 var(--vehicle-panel-width, 320px);background:var(--surface);padding:1.1rem 1rem;display:flex;flex-direction:column;gap:.8rem;overflow-y:auto}.chat-layout__resizer{flex:0 0 12px;cursor:col-resize;position:relative;background:transparent;touch-action:none}.chat-layout__resizer:after{content:"";position:absolute;top:12%;bottom:12%;left:50%;width:2px;transform:translate(-50%);border-radius:999px;background:#64748b99;transition:background .2s ease}.chat-layout__resizer:hover:after,.chat-layout__resizer.is-active:after{background:#1d4ed8}.chat-layout.is-resizing{-webkit-user-select:none;user-select:none;cursor:col-resize}.vehicle-panel h2{margin:0;font-size:1rem}.vehicle-panel__header{display:flex;align-items:flex-start;justify-content:space-between;gap:.5rem}.vehicle-panel__search{display:flex;gap:.5rem}.vehicle-panel__search input{flex:1;height:34px;border-radius:12px;border:1px solid var(--border);padding:0 1rem;font-size:.82rem;background:#f8fafc}.vehicle-panel__search button{flex:0 0 auto}.vehicle-panel__stats{display:flex;gap:.35rem;width:100%}.vehicle-panel__stats--compact{flex-wrap:nowrap}.vehicle-stat-card{border:none;border-radius:10px;padding:.35rem;background:#f8fafc;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.1rem;min-height:48px;flex:1;min-width:0;text-align:center;cursor:pointer;transition:transform .12s ease,box-shadow .15s ease;font:inherit}.vehicle-stat-card:focus-visible{outline:2px solid #2563eb;outline-offset:2px}.vehicle-stat-total{background:linear-gradient(135deg,#312e81,#4338ca)}.vehicle-stat-total .vehicle-stat-label,.vehicle-stat-total .vehicle-stat-value{color:#fff}.vehicle-stat-driving{background:#22c55e2e}.vehicle-stat-parked{background:#fbbf2433}.vehicle-stat-offline{background:#94a3b84d}.vehicle-stat-expired{background:#f8717140}.vehicle-stat-label{font-size:.65rem;color:var(--text-muted)}.vehicle-stat-value{font-size:1rem;font-weight:700;color:#0f172a}.vehicle-stat-card.is-active{box-shadow:0 4px 12px #0f172a2e;transform:translateY(-2px)}.vehicle-panel__error{background:#e11d4814;color:var(--danger);padding:.75rem 1rem;border-radius:12px}.vehicle-panel__loading,.vehicle-panel__empty{color:var(--text-muted);font-size:.95rem;text-align:center;padding:1rem .5rem}.vehicle-tree{flex:1;overflow-y:auto;padding-right:.15rem;min-width:0}.vehicle-tree__root{border:1px solid var(--border);border-radius:12px;background:#fff;padding:.4rem}.vehicle-tree__group{margin-left:.75rem;border-left:1px dashed rgba(15,23,42,.2);padding-left:.4rem}.vehicle-tree__group-head{width:100%;border:none;background:transparent;display:flex;align-items:center;gap:.3rem;padding:.25rem .15rem;cursor:pointer;color:#0f172a;font-size:.82rem}.vehicle-tree__group-head.is-root{font-weight:700;cursor:default;padding:.25rem;font-size:.85rem}.vehicle-tree__group-head:not(.is-root):hover{background:#f8fafc;border-radius:8px}.vehicle-tree__toggle{width:16px;height:16px;border:1px solid var(--border);border-radius:4px;line-height:14px;text-align:center;font-weight:700;font-size:.65rem;color:#2563eb;flex-shrink:0}.vehicle-tree__icon{width:18px;height:18px;border-radius:4px;background:#e2e8f0;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;overflow:hidden}.vehicle-tree__icon--root{background:linear-gradient(135deg,#0ea5e9,#6366f1)}.vehicle-tree__icon--folder{background:#fcd34d;border:1px solid #f59e0b}.vehicle-tree__icon--car{background:#fff;border:1px solid #cbd5f5;border-radius:50%;box-shadow:0 2px 4px #0f172a14}.vehicle-tree__icon--expired{border-color:#dc2626}.vehicle-tree__icon-img{width:100%;height:100%;object-fit:contain}.vehicle-tree__group-name{flex:1;text-align:left;font-size:.82rem}.vehicle-tree__group-count{color:var(--text-muted);font-size:.75rem}.vehicle-tree__children{margin-top:.5rem;display:flex;flex-direction:column;gap:.35rem}.vehicle-tree__list{list-style:none;padding-left:1.3rem;margin:.2rem 0 .3rem;display:flex;flex-direction:column;gap:.25rem}.vehicle-tree__vehicle{position:relative;display:flex;align-items:center;gap:.35rem;padding-left:.4rem}.vehicle-tree__connector{position:absolute;left:0;top:0;bottom:0;width:1px;background:#0f172a26}.vehicle-tree__vehicle-body{flex:1;display:flex;justify-content:space-between;align-items:center;gap:.25rem;padding:.25rem .4rem;border-radius:10px;background:#fff;border:1px solid #e2e8f0}.vehicle-tree__vehicle-body.is-clickable{cursor:pointer;transition:border-color .2s ease,box-shadow .2s ease}.vehicle-tree__vehicle-body.is-clickable:hover{border-color:#94a3b8;box-shadow:0 4px 10px #0f172a1f}.vehicle-tree__vehicle-body.is-clickable:focus-visible{outline:2px solid #2563eb;outline-offset:2px}.vehicle-tree__vehicle-title{display:flex;flex-direction:column;gap:.05rem}.vehicle-tree__vehicle-headline{display:flex;align-items:baseline;gap:.4rem;flex-wrap:wrap}.vehicle-tree__vehicle-plate{font-weight:700;font-size:.9rem}.vehicle-tree__vehicle-name{font-size:.78rem;color:var(--text-muted)}.vehicle-tree__vehicle-speed{font-size:.72rem;color:#0f172a;font-weight:600}.vehicle-tree__vehicle-offline{font-size:.72rem;font-weight:600;color:#dc2626}.vehicle-tree__status{font-size:.7rem;padding:.12rem .4rem;border-radius:999px;background:#e2e8f0;color:#0f172a;white-space:nowrap}.vehicle-tree__status.state-danger{background:#f8717140;color:#b91c1c}.vehicle-tree__status.state-warning{background:#fbbf2459;color:#92400e}.vehicle-tree__status.state-success{background:#22c55e40;color:#15803d}.vehicle-tree__status.state-muted{background:#94a3b866;color:#1f2937}.binding-sidebar{width:260px;flex:0 0 260px;background:#fff;color:#0f172a;padding:1.4rem 1.3rem;display:flex;flex-direction:column;gap:1rem;overflow:hidden;font-size:.85rem;border-left:1px solid var(--border);box-shadow:inset 1px 0 #0f172a0a;height:100vh;position:sticky;top:0}.voice-binding-panel{border:1px solid var(--border);border-radius:16px;padding:1rem;display:flex;flex-direction:column;gap:.6rem;background:#f8fbff}.voice-binding-panel h3{margin:0;font-size:1rem;color:#0f172a}.voice-binding-panel button{width:100%;margin-top:.4rem;height:40px;font-size:.9rem}.binding-sidebar h2{margin:0;font-size:1.05rem;color:#0f172a}.binding-sidebar .muted{color:var(--text-muted)}.binding-sidebar .qr-wrapper{border-color:#c7d2fe;background:#f8fbff}.quick-messages{border:1px solid var(--border);border-radius:14px;padding:.65rem .75rem;display:flex;flex-direction:column;gap:.5rem;background:#fff;box-shadow:0 12px 30px #0f172a0d}.quick-messages__header h3{margin:0;font-size:.95rem;color:#0f172a}.quick-messages__form{display:flex;flex-direction:column;gap:.25rem}.quick-messages__form input{width:100%;border-radius:8px;border:1px solid var(--border);background:#f8fafc;color:#0f172a;height:32px;padding:0 .6rem;font-size:.8rem;line-height:1.2}.quick-messages__form button{width:100%;height:32px;border-radius:8px;background:var(--primary);border:none;color:#fff;font-weight:600;font-size:.82rem;cursor:pointer;box-shadow:0 6px 16px #2563eb33}.quick-messages__form button:disabled{opacity:.5;cursor:not-allowed;box-shadow:none}.quick-messages__list{display:flex;flex-direction:column;gap:.12rem;max-height:120px;overflow-y:auto}.quick-messages__item{display:flex;align-items:center;gap:.25rem;padding:.08rem .15rem;border-radius:8px;justify-content:center}.quick-messages__item:not(.is-modal)+.quick-messages__item:not(.is-modal){border-top:1px dashed rgba(148,163,184,.4);padding-top:.18rem}.quick-messages__item:hover,.quick-messages__item.is-selected,.quick-messages__item.is-modal{background:#edeff2}.quick-messages__use{border:none;background:transparent;color:#0f172a;padding:.1rem 0;border-radius:6px;text-align:center;font-size:.8rem;cursor:pointer;transition:color .2s ease;flex:1}.quick-messages__use:hover,.quick-messages__use:focus-visible{color:#1f2937;background:transparent;outline:none}.quick-messages__use,.quick-messages__use:hover,.quick-messages__use:focus-visible{background:transparent!important}.quick-messages__delete{width:22px;height:22px;border-radius:50%;border:none;background:linear-gradient(135deg,#fecaca,#fda4af);color:#a61b1b;font-size:.75rem;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;box-shadow:0 4px 10px #f871714d}.quick-messages__delete:hover{background:linear-gradient(135deg,#fca5a5,#f87171);color:#7f1d1d}.quick-messages__more{align-self:flex-end;border:none;background:transparent;color:#2563eb;font-size:.78rem;cursor:pointer;padding:.1rem .2rem}.quick-messages__more:hover{color:#1d4ed8}.quick-messages__modal{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;z-index:2000}.quick-messages__modal-backdrop{position:absolute;inset:0;background:#0f172a66;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.quick-messages__modal-content{position:relative;z-index:1;width:min(420px,92vw);max-height:70vh;border-radius:18px;background:#fff;border:1px solid var(--border);padding:1.1rem;display:flex;flex-direction:column;gap:.75rem;box-shadow:0 25px 80px #0f172a40}.quick-messages__modal-header{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.quick-messages__modal-header h4{margin:0;font-size:1rem;color:#0f172a}.quick-messages__modal-close{width:32px;height:32px;border-radius:50%;border:none;background:#f1f5f9;color:#475569;font-size:.9rem;cursor:pointer;box-shadow:0 6px 16px #0f172a1f}.quick-messages__modal-close:hover{background:#e2e8f0}.quick-messages__modal-body{overflow-y:auto;max-height:48vh;display:flex;flex-direction:column;gap:.2rem}.quick-messages__item.is-modal{padding:.2rem .3rem}.binding-sidebar__logout{margin-top:auto;width:100%;flex-shrink:0}.session-info{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.5rem}.session-info li{display:flex;flex-direction:column;gap:.15rem}.session-info__dual{flex-direction:row;justify-content:space-between;gap:1rem}.session-info__dual>div{flex:1;display:flex;flex-direction:column;gap:.1rem}.session-info strong{color:var(--text-muted);font-size:.78rem}.session-info .mono{font-family:JetBrains Mono,Fira Mono,monospace;font-size:.78rem;word-break:break-all;color:#0f172a}.link-button{background:#2563eb14;border:1px solid rgba(37,99,235,.2);color:#1d4ed8;height:40px;font-size:.9rem;border-radius:12px}.chat-panel{flex:1;display:flex;flex-direction:column;padding:1.5rem;min-height:0;min-width:0}.messages{flex:1;overflow-y:auto;background:var(--surface);border-radius:24px;padding:1.1rem;box-shadow:0 10px 40px #0f172a1f;display:flex;flex-direction:column;gap:.75rem}.preset-quick-messages{display:flex;flex-wrap:wrap;gap:.35rem;margin-top:.4rem;margin-bottom:0;padding:0}.preset-quick-messages__item{border:1px solid #e2e8f0;border-radius:999px;padding:.18rem .55rem;font-size:.78rem;background:#fff!important;color:#475569!important;cursor:pointer;transition:border-color .15s ease,transform .15s ease}.preset-quick-messages__item:hover{border-color:#94a3b8;background:#fff!important;color:#475569!important;transform:translateY(-1px)}.preset-quick-messages__item:active{background:#fff!important;color:#475569!important;transform:translateY(0)}.message{padding:.85rem 1rem;border-radius:18px;max-width:min(90%,680px);width:fit-content;display:flex;flex-direction:column;gap:.75rem;align-self:flex-start;border:1px solid rgba(15,23,42,.06)}.message.user{background:linear-gradient(135deg,#dbeafe,#c7d2fe);align-self:flex-end;border-bottom-right-radius:8px}.message.ai{background:#f1f5f9;border-bottom-left-radius:8px}.message.pending{opacity:.85}.message-content{font-size:1.05rem;line-height:1.3;display:flex;flex-direction:column;gap:.3rem}.markdown-body{word-wrap:break-word;overflow-wrap:anywhere;white-space:pre-wrap}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin:.2rem 0}.markdown-body p{margin:0 0 .15rem}.markdown-body ul,.markdown-body ol{margin:.15rem 0 .3rem;padding-left:1.5rem}.markdown-body table{width:100%;border-collapse:collapse;margin:.4rem 0;font-size:.92rem}.markdown-body th,.markdown-body td{border:1px solid rgba(15,23,42,.18);padding:.4rem .55rem;text-align:left}.messages.mobile .markdown-body table{border-collapse:collapse}.messages.mobile .markdown-body th,.messages.mobile .markdown-body td{border:1px solid rgba(15,23,42,.18)}.markdown-body th{background:#0f172a14;font-weight:600}.markdown-body code{background:#0f172a14;padding:.1rem .3rem;border-radius:4px;font-size:.85rem}.tool-run-card{border:1px solid var(--border);border-radius:12px;padding:.75rem 1rem;font-size:.85rem;background:#f8fafc;display:flex;flex-direction:column;gap:.5rem;transition:background .2s ease,border-color .2s ease,box-shadow .2s ease}.tool-run-card.compact{gap:0;padding:.6rem .9rem}.tool-run-card:hover{background:#f1f5f9;border-color:#0f172a2e;box-shadow:0 6px 20px #0f172a14}.tool-run-card.running{border-color:#fcd34d;background:#fefce8}.tool-run-card.completed{border-color:#86efac;background:#f0fdf4}.tool-run-card.failed{border-color:#fecdd3;background:#fff1f2}.tool-run-head{display:flex;justify-content:space-between;align-items:center;flex-wrap:nowrap;gap:.5rem;font-weight:600;border:none;background:transparent;color:inherit;padding:.25rem .35rem;cursor:pointer;width:100%;border-radius:8px;height:auto;transition:background .2s ease}.tool-run-head.readonly{cursor:default;padding:.1rem 0}.tool-run-head.readonly:hover{background:transparent}.tool-run-head .tool-name{flex:1;min-width:0;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tool-run-head:not(:disabled):hover{background:#0f172a0d}.tool-run-body{display:flex;flex-direction:column;gap:.5rem}.tool-section{margin-bottom:.5rem}.tool-section strong{display:block;margin-bottom:.25rem;color:var(--text-muted)}.tool-section pre{background:#0f172a0d;border-radius:8px;padding:.5rem;font-size:.8rem;white-space:pre-wrap;word-break:break-word;max-height:200px;overflow:auto}.tool-error{color:var(--danger);font-weight:600}.chat-input .input-actions{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}.chat-input .secondary{background:#e2e8f0;color:#0f172a}.chat-input .secondary:disabled{opacity:.5;cursor:not-allowed}.ai-thinking{display:flex;align-items:center;gap:.4rem;color:var(--text-muted);font-size:.9rem}.loading-spinner{width:14px;height:14px;border:2px solid rgba(15,23,42,.2);border-top-color:var(--primary);border-radius:50%;animation:spin 1s linear infinite}.loading-dots{display:flex;gap:.2rem}.loading-dots span{width:6px;height:6px;background:var(--primary);border-radius:50%;animation:bounce 1.2s ease-in-out infinite}.loading-dots span:nth-child(2){animation-delay:.2s}.loading-dots span:nth-child(3){animation-delay:.4s}.status-pill{display:inline-flex;align-items:center;gap:.35rem;font-size:.78rem;padding:.2rem .6rem;border-radius:999px;font-weight:600;flex-shrink:0}.status-pill .status-icon{width:10px;height:10px;border-radius:50%;position:relative}.status-pill .chevron{width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:6px solid currentColor;transition:transform .2s ease}.status-pill .chevron.open{transform:rotate(180deg)}.status-pill.running{color:#92400e;background:#fef3c7}.status-pill.running .status-icon{border:2px solid rgba(234,179,8,.4);border-top-color:#d97706;animation:spin .8s linear infinite}.status-pill.completed{color:#065f46;background:#d1fae5}.status-pill.completed .status-icon{background:#10b981;animation:pulse 1.2s ease-in-out}.status-pill.failed{color:#991b1b;background:#fee2e2}.status-pill.failed .status-icon{background:#dc2626;animation:pulse 1.2s ease-in-out}.tool-run-card.completed{animation:pop-in .4s ease}.tool-run-card.failed{animation:shake .4s ease}@keyframes spin{to{transform:rotate(360deg)}}@keyframes bounce{0%,80%,to{transform:scale(.6);opacity:.6}40%{transform:scale(1);opacity:1}}@keyframes pulse{0%{transform:scale(.8);opacity:.8}50%{transform:scale(1);opacity:1}to{transform:scale(.9);opacity:.9}}@keyframes pop-in{0%{transform:scale(.95);opacity:.5}to{transform:scale(1);opacity:1}}@keyframes shake{0%,to{transform:translate(0)}25%{transform:translate(-2px)}75%{transform:translate(2px)}}@keyframes voicePulse{0%{transform:scaleY(.4);opacity:.6}50%{transform:scaleY(1);opacity:1}to{transform:scaleY(.5);opacity:.75}}@keyframes voiceBubbleIn{0%{opacity:0;transform:translate(-50%,8px)}to{opacity:1;transform:translate(-50%)}}.chat-input{display:flex;gap:1rem;margin-top:.5rem;align-items:stretch;padding:.8rem 1rem;border-radius:20px;border:1px solid var(--border);background:#fff;box-shadow:0 12px 30px #0f172a14}.chat-input__field{flex:1;min-height:60px;display:flex;align-items:center}.chat-input input{flex:1;width:100%;border-radius:14px;border:none;background:#f8fafc;padding:.9rem 1.25rem;font-size:1rem;box-shadow:inset 0 0 0 1px #0f172a0d}.chat-input input:disabled{background:#e2e8f0;cursor:not-allowed}.chat-input button{border-radius:12px;border:none;padding:.85rem 1.5rem;font-weight:600;background:var(--primary);color:#fff;box-shadow:0 10px 20px #2b5cff4d}.chat-input button:disabled{opacity:.6;cursor:not-allowed}.chat-input__voice-btn{background:#e0e7ff;color:#312e81;box-shadow:0 8px 16px #2563eb2e;display:inline-flex;align-items:center;gap:.35rem;padding:0 1.1rem;height:46px}.chat-input__voice-btn .button-icon{display:inline-flex;align-items:center;justify-content:center;width:1rem;height:1rem}.chat-input__voice-btn.active{background:var(--primary);color:#fff}.chat-input__voice-btn:disabled{opacity:.4;cursor:not-allowed;box-shadow:none}.chat-input__voice-error{flex-basis:100%;font-size:.8rem;color:var(--danger);margin-top:.15rem}.chat-panel .error-banner{margin-bottom:1rem}.mobile-shell{min-height:var(--mobile-shell-height, 100vh);height:var(--mobile-shell-height, 100vh);max-height:var(--mobile-shell-height, 100vh);display:flex;flex-direction:column;background:#f4f6fb;overflow:hidden}.mobile-shell__body{flex:1;overflow:hidden;padding:1rem 1rem .75rem;display:flex;flex-direction:column;min-height:0;height:100%}.mobile-chat{display:flex;flex-direction:column;gap:1rem;flex:1;min-height:0;position:relative;height:100%;overflow:hidden}.mobile-chat__status{display:flex;justify-content:space-between;align-items:flex-start;gap:.5rem}.mobile-chat__status-actions{display:flex;align-items:center;gap:.5rem}.mobile-chat__action-btn{display:inline-flex;align-items:center;gap:.3rem;background:#e0e7ff;color:#312e81;height:34px;padding:0 .9rem;border-radius:999px;border:none;font-weight:600}.mobile-chat__action-btn.danger{background:#fee2e2;color:#b91c1c}.mobile-chat__identity{display:flex;flex-direction:column;gap:.15rem}.mobile-chat__badge{font-size:.75rem;padding:.2rem .6rem;border-radius:999px;background:#e2e8f0;color:#334155;white-space:nowrap}.mobile-chat .messages{flex:1;min-height:0;padding:1rem;padding-bottom:calc(6rem + env(safe-area-inset-bottom,0px));border-radius:18px;background:var(--surface);box-shadow:0 12px 32px #0f172a14;overflow-y:auto;-webkit-overflow-scrolling:touch}.mobile-chat__form{display:flex;flex-direction:column;gap:.75rem;margin-top:auto;position:sticky;bottom:0;background:#f4f6fb;padding:.35rem 0 .85rem;padding-bottom:calc(.85rem + env(safe-area-inset-bottom,0px));z-index:5;box-shadow:0 -10px 30px #0f172a14;border-top:1px solid rgba(148,163,184,.4)}.mobile-chat__input-row{display:flex;align-items:stretch;gap:.75rem;background:#f4f6fb}.mobile-chat__icon-btn{width:60px;height:60px;border-radius:18px;border:1px solid var(--border);background:#fff;color:#475569;display:inline-flex;align-items:center;justify-content:center}.mobile-chat__icon-btn:disabled{opacity:.35;cursor:not-allowed;box-shadow:none}.mobile-chat__icon-btn.is-voice{border:none;background:#e0e7ff;color:#312e81;box-shadow:0 8px 16px #2563eb2e}.mobile-chat__icon-btn.is-voice.active{background:var(--primary);color:#fff}.mobile-chat__icon-btn.is-send{background:var(--primary);color:#fff;border:none;box-shadow:0 10px 20px #2b5cff40}.mobile-chat__icon-btn.is-clear{background:#f1f5f9;color:#475569}.mobile-chat__input-wrapper{flex:1;background:#fff;border:1px solid var(--border);border-radius:8px;height:60px;min-height:60px;display:flex;align-items:center;padding:0 .85rem}.mobile-chat__input-wrapper textarea{border:none;resize:none;width:100%;height:100%;font-size:1.05rem;font-family:inherit;padding:0;background:transparent;appearance:none;-webkit-appearance:none;overflow-y:auto;color-scheme:light;scrollbar-width:none;-ms-overflow-style:none}.mobile-chat__input-wrapper textarea::-webkit-scrollbar{display:none}.mobile-chat__input-wrapper textarea:focus{outline:none}.mobile-chat__input-wrapper textarea:disabled{background:transparent;color:var(--text-muted)}.mobile-chat__input-wrapper textarea::placeholder{text-align:center;line-height:60px;background:transparent}.mobile-chat__voice-wrapper{flex:1;display:flex;align-items:stretch;height:60px}.mobile-chat__input-wrapper .inline-voice,.mobile-chat__voice-wrapper .inline-voice{width:100%;align-items:stretch;gap:0}.mobile-chat__voice-pad{width:100%;height:60px;border-radius:8px;background:linear-gradient(90deg,#818cf8,#6366f1);color:#fff;border:none;font-size:1.1rem;justify-content:center}.mobile-chat__voice-pad.recording{background:linear-gradient(90deg,#f97316,#f43f5e)}.mobile-chat__voice-pad .button-icon{margin-right:.35rem}.mobile-chat__action-btn .button-icon,.mobile-chat__icon-btn svg,.inline-voice__button .button-icon{display:inline-flex;align-items:center;justify-content:center;width:1.2rem;height:1.2rem}.mobile-chat__clear-fab{position:absolute;right:1rem;bottom:calc(8.5rem + env(safe-area-inset-bottom,0px));width:48px;height:48px;border-radius:50%;border:none;background:#0f172ad9;color:#fff;display:inline-flex;align-items:center;justify-content:center;box-shadow:0 12px 24px #0f172a4d}.mobile-chat__clear-fab:disabled{opacity:.35;cursor:not-allowed;box-shadow:none}.mobile-voice{flex:1;min-height:0;display:flex;flex-direction:column;gap:1rem;position:relative}.mobile-voice__panel{flex:1;min-height:0;width:100%;padding:1.5rem;display:flex;flex-direction:column;gap:.75rem}.mobile-voice__header{display:flex;justify-content:space-between;align-items:center;gap:.75rem;flex-wrap:wrap}.mobile-voice__ghost-btn{background:transparent;border:none;color:var(--primary);font-weight:600;display:inline-flex;align-items:center;gap:.35rem;padding:0;cursor:pointer}.mobile-voice__ghost-btn:disabled{opacity:.6;cursor:not-allowed}.mobile-voice__ghost-btn svg{width:1rem;height:1rem}.mobile-voice__status{display:inline-flex;align-items:center;gap:.6rem}.mobile-voice__mic-indicator{width:40px;height:40px;border-radius:14px;background:#fee2e2;color:#b91c1c;display:inline-flex;align-items:center;justify-content:center;box-shadow:inset 0 0 0 1px #b91c1c33}.mobile-voice__mic-indicator svg{width:1.1rem;height:1.1rem}.mobile-voice__mic-indicator.is-ready{background:#dcfce7;color:#166534;box-shadow:inset 0 0 0 1px #1665342e}.mobile-voice__status-text{font-size:.85rem;color:var(--text-muted);max-width:180px}.mobile-voice__intro h1{margin-bottom:.35rem;font-size:1.5rem}.mobile-voice__transcript-board{flex:1;min-height:0;margin-top:.5rem;border-radius:20px;border:1px dashed var(--border);background:#f8fafc;padding:1rem;display:flex;flex-direction:column;gap:.75rem;overflow-y:auto;-webkit-overflow-scrolling:touch}.mobile-voice__transcript{padding:.85rem 1rem;border-radius:16px;background:#fff;color:#0f172a;font-size:1rem;box-shadow:0 4px 16px #0f172a14}.mobile-voice__transcript--loading{color:var(--primary);background:#2b5cff14;box-shadow:none}.mobile-voice__transcript-placeholder{text-align:center;color:var(--text-muted);font-size:.95rem}.mobile-voice__footer{background:#fff;border-radius:24px;padding:1rem 1.2rem 1.25rem;box-shadow:0 18px 40px #0f172a26;display:flex;flex-direction:column;gap:.75rem}.mobile-voice__hint{color:var(--text-muted);font-size:.9rem}.mobile-voice__press-btn{border:none;border-radius:20px;min-height:70px;display:inline-flex;align-items:center;justify-content:center;font-size:1.1rem;font-weight:600;color:#fff;background:linear-gradient(120deg,#818cf8,#4f46e5);box-shadow:0 18px 35px #4f46e559;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;touch-action:none}.mobile-voice__press-btn.is-recording{background:linear-gradient(120deg,#fb7185,#f97316);box-shadow:0 20px 40px #f973164d}.mobile-voice__press-btn:disabled{opacity:.5;box-shadow:none}.mobile-voice__listening-indicator{position:absolute;left:50%;bottom:8.5rem;transform:translate(-50%);background:#0f172af2;color:#fff;padding:.6rem 1rem;border-radius:16px;box-shadow:0 14px 30px #0f172a59;display:inline-flex;align-items:center;gap:.6rem;font-size:.9rem;pointer-events:none;animation:voiceBubbleIn .2s ease;z-index:10}.inline-voice{display:flex;flex-direction:column;align-items:center;gap:.2rem;flex:0 0 auto;position:relative;width:100%}.inline-voice__button{background:#f8fafc;color:#0f172a;border:1px solid var(--border);box-shadow:none;padding:.85rem 1.25rem;height:auto;min-width:64px;min-height:60px;width:100%;display:inline-flex;align-items:center;justify-content:center;gap:.4rem;border-radius:18px;font-size:1.05rem;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;touch-action:none}.inline-voice__button.recording{background:#fee2e2;color:#b91c1c;border-color:#fecaca}.chat-input__voice-pad{border-radius:18px;background:linear-gradient(90deg,#818cf8,#6366f1);color:#fff;border:none;font-size:1.05rem;justify-content:center;box-shadow:0 10px 24px #6366f159}.chat-input__voice-pad.recording{background:linear-gradient(90deg,#f97316,#f43f5e);box-shadow:0 10px 24px #f43f5e4d}.inline-voice__button span{user-select:none;-webkit-user-select:none}.inline-voice__error{font-size:.75rem;color:var(--danger)}.inline-voice__visualizer{position:absolute;left:50%;bottom:calc(100% + 1.1rem);transform:translate(-50%);background:#0f172af2;color:#fff;padding:.65rem 1.1rem;border-radius:18px;box-shadow:0 14px 32px #0f172a4d;display:inline-flex;align-items:center;gap:.6rem;font-size:.85rem;animation:voiceBubbleIn .2s ease;pointer-events:none;z-index:2;min-width:180px;justify-content:center;white-space:nowrap}.voice-visualizer__wave{display:inline-flex;gap:.2rem}.voice-visualizer__bar{width:3px;height:16px;border-radius:999px;background:#c7d2fe;animation:voicePulse 1s ease-in-out infinite}.voice-visualizer__bar:nth-child(2){animation-delay:.1s}.voice-visualizer__bar:nth-child(3){animation-delay:.2s}.voice-visualizer__bar:nth-child(4){animation-delay:.3s}@media(max-width:900px){.chat-layout{flex-direction:column}.sidebar{width:100%;flex-direction:row;flex-wrap:wrap;gap:1rem}.auth-card{flex-direction:column}.auth-info,.auth-panel{width:100%;flex:0 0 auto}.auth-panel{padding:2rem}.auth-info{padding:2.5rem}}@media(max-width:640px){.auth-panel{padding:1.5rem}.auth-info{padding:2rem}.auth-card{width:100%;border-radius:0}}
