:root{--bg:#0d0b08;--bg-elevated:#181411;--bg-soft:#1f1a15;--border:#2a241e;--border-strong:#3a322a;--text:#ece6dc;--text-muted:#a89888;--text-dim:#6e6258;--accent:#ee7c1f;--accent-hover:#ff8a2a;--accent-glow:#ee7c1f40;--cyan:#3ec5d5;--pink:#e8478a;--green:#5dd984}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{font-feature-settings:"cv11", "ss01";background:radial-gradient(ellipse 80% 60% at 90% 0%, #ee7c1f14, transparent 60%), radial-gradient(ellipse 70% 70% at 10% 100%, #3ec5d50d, transparent 65%), var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;background-attachment:fixed;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.app{max-width:900px;height:100dvh;padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right);padding-bottom:env(safe-area-inset-bottom);flex-direction:column;margin:0 auto;display:flex}header{padding:calc(1.25rem + env(safe-area-inset-top)) 1rem .9rem;border-bottom:1px solid var(--border);justify-content:space-between;align-items:flex-end;gap:1rem;display:flex}.brand{flex-direction:column;gap:.45rem;display:flex}.brand-mark{align-items:center;gap:.6rem;display:flex}.brand-logo{flex-shrink:0;width:36px;height:36px}.brand-sub{color:var(--text-dim);letter-spacing:0;text-transform:uppercase;margin-left:.45rem;font-size:.75rem;font-weight:400}.brand-pill{border:1px solid var(--border-strong);color:var(--text-muted);letter-spacing:.02em;background:#ffffff04;border-radius:999px;align-items:center;gap:.45rem;width:fit-content;padding:.2rem .65rem;font-size:.7rem;display:inline-flex}.pulse-dot{background:var(--green);border-radius:50%;width:6px;height:6px;animation:1.8s ease-in-out infinite brand-pulse;box-shadow:0 0 8px #5dd984b3}@keyframes brand-pulse{0%,to{opacity:1}50%{opacity:.5}}header h1{letter-spacing:-.02em;color:var(--text);align-items:baseline;font-size:1.4rem;font-weight:700;display:inline-flex}.brand-accent{color:var(--accent)}.header-controls{flex-flow:wrap;justify-content:flex-end;align-items:center;gap:.4rem;display:flex}.tz-select{color:var(--text-muted);align-items:center;gap:.4rem;font-size:.7rem;display:inline-flex}.tz-label{text-transform:uppercase;letter-spacing:.05em;color:var(--text-dim)}.tz-select select{background:var(--bg-soft);color:var(--text);border:1px solid var(--border-strong);cursor:pointer;border-radius:.3rem;padding:.25rem .5rem;font-family:inherit;font-size:.75rem;transition:border-color .15s}.tz-select select:focus,.tz-select select:hover{border-color:var(--accent);outline:none}.header-action{color:var(--text-muted);border:1px solid var(--border-strong);cursor:pointer;background:0 0;border-radius:.3rem;align-items:center;gap:.35rem;padding:.25rem .6rem;font-family:inherit;font-size:.72rem;transition:color .15s,border-color .15s;display:inline-flex}.header-action i{font-size:11px}.header-action:hover:not(:disabled){color:var(--text);border-color:var(--accent)}.header-action:disabled{opacity:.35;cursor:not-allowed}.backend{color:var(--text-dim);font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.7rem}.messages{flex-direction:column;flex:1;gap:.9rem;padding:1.25rem 1rem;display:flex;overflow-y:auto}.hint{color:var(--text-dim);text-align:center;padding:2rem 1rem;font-style:italic}.empty-state{flex-direction:column;align-items:center;gap:1.25rem;padding:3rem 1rem 2rem;animation:.35s both fade-up;display:flex}.empty-title{color:var(--text);letter-spacing:-.01em;font-size:1.1rem;font-weight:500}.suggestions{flex-wrap:wrap;justify-content:center;gap:.5rem;max-width:620px;display:flex}.suggestion-chip{background:var(--bg-soft);border:1px solid var(--border-strong);color:var(--text);cursor:pointer;border-radius:999px;padding:.55rem 1rem;font-family:inherit;font-size:.85rem;transition:background .15s,border-color .15s,color .15s,transform .1s}.suggestion-chip:hover:not(:disabled){border-color:var(--accent);color:var(--accent);background:#ee7c1f1f}.suggestion-chip:active:not(:disabled){transform:scale(.97)}.suggestion-chip:disabled{opacity:.4;cursor:not-allowed}.loading-shell{height:100dvh;color:var(--text-muted);justify-content:center;align-items:center;font-size:.9rem;display:flex}.login-page{justify-content:center;align-items:center;min-height:100dvh;padding:1.5rem;display:flex}.login-card{background:var(--bg-elevated);border:1px solid var(--border);border-radius:.7rem;flex-direction:column;gap:1.5rem;width:100%;max-width:380px;padding:2rem 1.75rem;animation:.35s both fade-up;display:flex;box-shadow:0 30px 80px #0006}.login-brand{flex-direction:column;align-items:center;gap:.35rem;display:flex}.login-logo{width:72px;height:72px;margin-bottom:.25rem}.login-brand h1{letter-spacing:-.03em;color:var(--text);font-size:2rem;font-weight:700}.login-sub{color:var(--green);padding-left:.85rem;font-size:.85rem;position:relative}.login-sub:before{content:"";background:var(--green);border-radius:50%;width:6px;height:6px;position:absolute;top:50%;left:0;transform:translateY(-50%);box-shadow:0 0 6px #5dd98499}.login-form{flex-direction:column;gap:.85rem;display:flex}.login-form label{flex-direction:column;gap:.3rem;display:flex}.login-form label>span{color:var(--text-muted);letter-spacing:.02em;font-size:.75rem}.login-form input{background:var(--bg-soft);border:1px solid var(--border-strong);color:var(--text);border-radius:.4rem;padding:.65rem .85rem;font-family:inherit;font-size:.95rem;transition:border-color .15s,box-shadow .15s}.login-form input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow);outline:none}.login-error{color:#f5a3c1;background:#e8478a14;border:1px solid #e8478a4d;border-radius:.35rem;padding:.5rem .7rem;font-size:.82rem}.login-notice{color:var(--accent);background:#ee7c1f14;border:1px solid #ee7c1f4d;border-radius:.35rem;padding:.5rem .7rem;font-size:.82rem}.login-submit{background:var(--accent);color:#1a0f06;cursor:pointer;border:none;border-radius:.4rem;margin-top:.4rem;padding:.7rem 1.2rem;font-family:inherit;font-size:.95rem;font-weight:600;transition:background .15s}.login-submit:hover:not(:disabled){background:var(--accent-hover)}.login-submit:disabled{opacity:.45;cursor:not-allowed}@keyframes fade-up{0%{opacity:0;transform:translateY(6px)}to{opacity:1}}.msg,.text-widget,.geocode-widget,.error-widget,.working-indicator,.widget-loading,.map-widget,.summary-widget,.trips-widget,.events-widget,.devices-widget{animation:.25s both fade-up}.msg{border-radius:.6rem;max-width:90%;padding:.85rem 1.1rem;line-height:1.55}.msg.user{color:var(--text);background:linear-gradient(135deg,#ee7c1f29,#ee7c1f0f);border:1px solid #ee7c1f4d;align-self:flex-end}.msg.assistant{background:var(--bg-elevated);border:1px solid var(--border);align-self:stretch;width:100%;max-width:100%}.role{text-transform:uppercase;letter-spacing:.08em;color:var(--text-dim);margin-bottom:.5rem;font-size:.65rem}.user-content{white-space:pre-wrap;word-break:break-word;color:var(--text)}.widget-loading{background:var(--bg-soft);border:1px solid var(--border);border-left:2px solid var(--accent);color:var(--text-muted);border-radius:.4rem;margin-top:.5rem;padding:.6rem .85rem;font-size:.8rem;font-style:italic}.text-widget{background:var(--bg-soft);border:1px solid var(--border);border-left:2px solid var(--accent);border-radius:.4rem;margin-top:.5rem;padding:.75rem .95rem;line-height:1.55}.text-label{color:var(--text-dim);text-transform:uppercase;letter-spacing:.06em;margin-bottom:.4rem;font-size:.65rem}.text-content{color:var(--text)}.text-content>:first-child{margin-top:0}.text-content>:last-child{margin-bottom:0}.text-content p{margin:.5rem 0;line-height:1.55}.text-content p:first-child{margin-top:0}.text-content p:last-child{margin-bottom:0}.text-content strong{color:var(--text);font-weight:600}.text-content em{color:var(--text-muted);font-style:italic}.text-content ul,.text-content ol{margin:.5rem 0;padding-left:1.25rem}.text-content li{margin:.2rem 0;line-height:1.5}.text-content li::marker{color:var(--accent)}.text-content a{color:var(--accent);text-underline-offset:2px;text-decoration:underline}.text-content a:hover{color:var(--accent-hover)}.text-content code{background:var(--bg);border:1px solid var(--border);color:#fbbf24;border-radius:.25rem;padding:.05rem .35rem;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.85em}.text-content pre{background:var(--bg);border:1px solid var(--border);border-radius:.35rem;margin:.6rem 0;padding:.6rem .75rem;overflow-x:auto}.text-content pre code{color:var(--text);background:0 0;border:none;padding:0}.text-content blockquote{border-left:2px solid var(--border-strong);color:var(--text-muted);margin:.5rem 0;padding-left:.75rem;font-style:italic}.text-content h1,.text-content h2,.text-content h3{color:var(--text);letter-spacing:-.01em;margin:.8rem 0 .4rem;font-weight:600}.text-content h1{font-size:1.15rem}.text-content h2{font-size:1.05rem}.text-content h3{font-size:.95rem}.text-content table{border-collapse:collapse;margin:.5rem 0;font-size:.85rem}.text-content th,.text-content td{border:1px solid var(--border);text-align:left;padding:.35rem .6rem}.text-content th{background:var(--bg);color:var(--text);font-weight:600}.text-content hr{border:none;border-top:1px solid var(--border);margin:.8rem 0}.geocode-widget{background:var(--bg-soft);border:1px solid var(--border);border-left:2px solid var(--cyan);border-radius:.4rem;margin:.5rem 0 .75rem;padding:.75rem .9rem}.geocode-label{color:var(--text-dim);text-transform:uppercase;letter-spacing:.06em;margin-bottom:.3rem;font-size:.65rem}.geocode-address{color:var(--text);font-size:.95rem}.working-indicator{background:var(--bg-soft);border:1px solid var(--border);border-left:2px solid var(--accent);color:var(--text-muted);border-radius:.4rem;align-items:center;gap:.5rem;margin-top:.5rem;padding:.45rem .85rem;font-size:.82rem;font-style:italic;display:inline-flex}.working-dot{background:var(--accent);width:7px;height:7px;box-shadow:0 0 6px var(--accent-glow);border-radius:50%;animation:1.1s ease-in-out infinite working-pulse}@keyframes working-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.3;transform:scale(.6)}}.steps{flex-direction:column;gap:.3rem;margin-bottom:.6rem;display:flex}.step{border:1px solid var(--border);background:#ffffff04;border-radius:.35rem;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.78rem;transition:border-color .2s}.step.running{border-color:var(--accent)}.step>summary{cursor:pointer;color:var(--text-muted);-webkit-user-select:none;user-select:none;align-items:center;gap:.55rem;padding:.4rem .65rem;list-style:none;display:flex}.step>summary::-webkit-details-marker{display:none}.step>summary::marker{content:""}.step .dot{background:var(--text-dim);border-radius:50%;flex-shrink:0;width:8px;height:8px}.step.running .dot{background:var(--accent);box-shadow:0 0 6px var(--accent-glow);animation:1.2s ease-in-out infinite step-pulse}.step.done .dot{background:var(--green)}@keyframes step-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(.7)}}.step .name{color:var(--text);flex:1}.step .status-text{color:var(--accent);font-size:.7rem;font-style:italic}.step[open]>summary{border-bottom:1px solid var(--border)}.step-body{padding:.55rem .65rem}.step-body .label{color:var(--text-dim);text-transform:uppercase;letter-spacing:.06em;margin:.6rem 0 .25rem;font-size:.65rem}.step-body .label:first-child{margin-top:0}.step-body pre{white-space:pre-wrap;word-break:break-word;color:var(--text-muted);background:var(--bg);border:1px solid var(--border);border-radius:.25rem;max-height:240px;padding:.45rem .55rem;font-size:.72rem;overflow:auto}.summary-widget{flex-direction:column;gap:.6rem;margin:.5rem 0 .75rem;display:flex}.summary-card{background:var(--bg-soft);border:1px solid var(--border);border-left:2px solid var(--accent);border-radius:.45rem;padding:.9rem 1rem}.summary-header{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.5rem;margin-bottom:.7rem;display:flex}.summary-device{color:var(--text);letter-spacing:-.01em;font-size:.95rem;font-weight:600}.summary-period{color:var(--text-muted);font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.72rem}.kpis{grid-template-columns:repeat(auto-fit,minmax(115px,1fr));gap:.55rem;display:grid}.kpi{background:var(--bg-elevated);border:1px solid var(--border);border-radius:.35rem;padding:.55rem .7rem}.kpi:first-child .kpi-value{color:var(--accent)}.kpi-value{color:var(--text);letter-spacing:-.02em;align-items:baseline;gap:.25rem;font-size:1.3rem;font-weight:600;line-height:1.1;display:flex}.kpi-unit{color:var(--text-muted);letter-spacing:0;font-size:.72rem;font-weight:400}.kpi-label{color:var(--text-dim);text-transform:uppercase;letter-spacing:.06em;margin-top:.3rem;font-size:.65rem}.devices-widget{flex-direction:column;gap:.5rem;margin:.5rem 0 .75rem;display:flex}.devices-header{color:var(--text-muted);padding:0 .2rem;font-size:.78rem}.devices-count{color:var(--text);font-weight:600}.device-card{background:var(--bg-soft);border:1px solid var(--border);border-left:2px solid var(--accent);border-radius:.4rem;flex-direction:column;gap:.35rem;padding:.7rem .9rem;display:flex}.device-card.is-disabled{opacity:.5}.device-offline{border-left-color:var(--pink)}.device-unknown{border-left-color:var(--text-dim)}.device-online{border-left-color:var(--green)}.device-row{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.6rem;display:flex}.device-title-row{align-items:center}.device-title{color:var(--text);letter-spacing:-.01em;align-items:center;gap:.55rem;font-size:.98rem;font-weight:600;display:inline-flex}.device-status-dot{background:var(--text-dim);border-radius:50%;width:8px;height:8px}.device-online .device-status-dot{background:var(--green);box-shadow:0 0 6px #5dd98480}.device-offline .device-status-dot{background:var(--pink)}.device-unknown .device-status-dot{background:var(--accent)}.device-status-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:.7rem}.device-online .device-status-label{color:var(--green)}.device-offline .device-status-label{color:var(--pink)}.device-unknown .device-status-label{color:var(--accent)}.device-meta{color:var(--text-muted);font-size:.82rem}.device-model{color:var(--text)}.device-contact{color:var(--text-muted)}.device-footer{color:var(--text-dim);font-size:.75rem}.device-last{font-variant-numeric:tabular-nums;font-family:ui-monospace,SF Mono,Menlo,monospace}.device-tags{flex-wrap:wrap;gap:.3rem;display:inline-flex}.device-tag{background:var(--bg-elevated);border:1px solid var(--border);color:var(--text-muted);text-transform:lowercase;border-radius:999px;padding:.1rem .5rem;font-size:.68rem}.tag-warning{color:#f5a3c1;background:#e8478a1a;border-color:#e8478a4d}.device-uid{color:var(--text-dim);font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.7rem}.geofence-events-widget,.geofences-widget,.route-widget,.chart-widget{flex-direction:column;gap:.6rem;margin:.5rem 0 .75rem;display:flex}.chart-kpi-row{grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:.5rem;display:grid}.chart-kpi{background:var(--bg-soft);border:1px solid var(--border);border-left:2px solid var(--accent);border-radius:.4rem;flex-direction:column;gap:.25rem;padding:.6rem .75rem;display:flex}.chart-kpi-value{color:var(--text);letter-spacing:-.02em;align-items:baseline;gap:.25rem;font-size:1.35rem;font-weight:700;line-height:1;display:inline-flex}.chart-kpi-unit{color:var(--text-muted);font-size:.7rem;font-weight:400}.chart-kpi-label{color:var(--text-dim);text-transform:uppercase;letter-spacing:.05em;font-size:.7rem}.chart-card{background:var(--bg-soft);border:1px solid var(--border);border-radius:.4rem;padding:.85rem .75rem .6rem}.chart-title{color:var(--text);margin-bottom:.5rem;padding-left:.25rem;font-size:.85rem;font-weight:600}.recharts-cartesian-axis-tick text{font-family:ui-monospace,SF Mono,Menlo,monospace}@media (width<=480px){.chart-kpi-value{font-size:1.15rem}.chart-card{padding:.7rem .4rem .5rem}}.legend-table{background:var(--bg-soft);border:1px solid var(--border);border-radius:.4rem;font-size:.82rem;overflow:hidden}.legend-header{background:var(--bg);color:var(--text-dim);text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--border);grid-template-columns:14px 1fr auto;gap:.55rem;padding:.45rem .7rem;font-size:.7rem;display:grid}.geofence-events-table .legend-header{grid-template-columns:14px 1fr 1fr 1fr auto}.legend-row{border-bottom:1px solid var(--border);grid-template-columns:14px 1fr auto;align-items:center;gap:.55rem;padding:.45rem .7rem;display:grid}.legend-row:last-child{border-bottom:none}.event-row-table{grid-template-columns:14px 1fr 1fr 1fr auto}.legend-color{border-radius:3px;justify-self:center;width:12px;height:12px}.legend-name{color:var(--text);font-weight:500}.legend-meta,.event-time-cell,.event-duration{color:var(--text-muted);font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.78rem}.event-device{color:var(--text);font-size:.8rem}.route-legend{background:var(--bg-soft);border:1px solid var(--border);border-radius:.4rem;overflow:hidden}.route-legend-row{border-bottom:1px solid var(--border);grid-template-columns:14px 1fr auto;align-items:center;gap:.55rem;padding:.5rem .75rem;display:grid}.route-legend-row:last-child{border-bottom:none}.route-legend-color{border-radius:2px;justify-self:center;width:14px;height:3px}.route-legend-name{color:var(--text);font-weight:500}.route-legend-meta{color:var(--text-muted);font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.78rem}@media (width<=480px){.geofence-events-table .legend-header,.event-row-table{grid-template-columns:14px 1fr 1fr auto}.geofence-events-table .event-time-cell,.geofence-events-table .legend-header>:nth-child(4){display:none}}.events-widget{flex-direction:column;gap:.4rem;margin:.5rem 0 .75rem;display:flex}.events-header{color:var(--text-muted);flex-wrap:wrap;align-items:center;gap:.4rem;padding:0 .2rem;font-size:.78rem;display:flex}.events-count{color:var(--text);font-weight:600}.events-device{color:var(--accent);letter-spacing:-.01em;margin-right:.25rem;font-weight:600}.events-device:after{content:"·";color:var(--text-dim);margin-left:.4rem;font-weight:400}.events-chip{letter-spacing:.01em;border-radius:999px;padding:.1rem .5rem;font-size:.7rem;font-weight:500}.events-chip-alarm{color:#f5a3c1;background:#e8478a1f;border:1px solid #e8478a59}.events-chip-geofence{color:var(--cyan);background:#3ec5d51a;border:1px solid #3ec5d54d}.events-list{background:var(--bg-soft);border:1px solid var(--border);border-radius:.4rem;flex-direction:column;max-height:320px;display:flex;overflow:hidden auto}.event-row{border-bottom:1px solid var(--border);grid-template-columns:14px 105px 1fr;align-items:center;gap:.55rem;padding:.4rem .75rem;font-size:.82rem;display:grid}.event-row:last-child{border-bottom:none}.event-dot{background:var(--text-dim);border-radius:50%;justify-self:center;width:8px;height:8px}.event-alarm .event-dot{background:var(--pink);box-shadow:0 0 6px #e8478a80}.event-geofence .event-dot{background:var(--cyan)}.event-ignition .event-dot{background:var(--accent)}.event-moving .event-dot{background:var(--green)}.event-stopped .event-dot{background:var(--text-dim)}.event-online .event-dot{background:var(--green)}.event-offline .event-dot{background:#6b3a2a}.event-time{color:var(--text-muted);font-variant-numeric:tabular-nums;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.75rem}.event-label{color:var(--text)}.event-alarm .event-label{color:#f5a3c1;font-weight:500}.events-list::-webkit-scrollbar{width:6px}.events-list::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:3px}.trips-table-widget{flex-direction:column;gap:.6rem;margin:.5rem 0 .75rem;display:flex}.trips-summary{color:var(--text-muted);flex-wrap:wrap;align-items:center;gap:.7rem;padding:0 .2rem;font-size:.8rem;display:flex}.trips-summary-device{color:var(--accent);letter-spacing:-.01em;font-weight:600}.trips-summary-device:after{content:"·";color:var(--text-dim);margin-left:.5rem;font-weight:400}.trips-summary-stat strong{color:var(--text)}.trips-summary-stat+.trips-summary-stat:before{content:"·";color:var(--text-dim);margin-right:.65rem}.trips-table-clean{background:var(--bg-soft);border:1px solid var(--border);border-radius:.4rem;font-size:.8rem;overflow:hidden}.trips-table-clean-header,.trips-table-clean-row{border-bottom:1px solid var(--border);grid-template-columns:32px 110px 110px 70px 80px 80px 80px 1fr;align-items:center;gap:.5rem;padding:.5rem .75rem;display:grid}:is(.trips-table-clean-header:has(>:nth-child(9)),.trips-table-clean-row:has(>:nth-child(9))){grid-template-columns:32px 110px 110px 70px 80px 80px 80px 130px 1fr}.trips-table-clean-header{background:var(--bg);color:var(--text-dim);text-transform:uppercase;letter-spacing:.05em;font-size:.68rem}.trips-table-clean-row{cursor:pointer;outline:none;transition:background .15s}.trips-table-clean-row:hover{background:#ffffff05}.trips-table-clean-row:focus-visible{background:#ee7c1f14}.trips-table-clean-row:last-child:not(.is-open){border-bottom:none}.trips-table-clean-row.is-open{background:#ee7c1f0f;border-bottom-color:#ee7c1f40}.trips-expand-btn{border:1px solid var(--border-strong);width:26px;height:26px;color:var(--text-muted);cursor:pointer;background:0 0;border-radius:50%;justify-content:center;align-items:center;padding:0;font-size:10px;transition:color .15s,border-color .15s,background .15s;display:inline-flex}.trips-expand-btn:hover{color:var(--accent);border-color:var(--accent);background:#ee7c1f1a}.trips-table-clean-row.is-open .trips-expand-btn{color:var(--accent);border-color:var(--accent);background:#ee7c1f1f}.trips-expand-panel{border-bottom:1px solid var(--border);background:#ee7c1f08;padding:.6rem .75rem .9rem}.trips-expand-panel:last-child{border-bottom:none}.trip-route-inline .map-widget{height:240px;margin:0}.trips-expand-status{color:var(--text-muted);align-items:center;gap:.5rem;padding:.4rem .5rem;font-size:.8rem;font-style:italic;display:inline-flex}.trips-expand-error{color:#f5a3c1;font-style:normal}.trips-loader-dot{background:var(--accent);border-radius:50%;width:7px;height:7px;animation:1.1s ease-in-out infinite working-pulse}.trips-cell-time{color:var(--text);font-variant-numeric:tabular-nums;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.76rem}.trips-cell-num{color:var(--text-muted);font-variant-numeric:tabular-nums;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.78rem}.trips-cell-accent{color:var(--accent);font-weight:600}.trips-cell-device{color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-size:.78rem;font-weight:500;overflow:hidden}.trips-cell-route{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;font-size:.78rem;overflow:hidden}.trips-cell-route .arrow{color:var(--text-dim)}@media (width<=720px){.trips-table-clean-header,.trips-table-clean-row,:is(.trips-table-clean-header:has(>:nth-child(9)),.trips-table-clean-row:has(>:nth-child(9))){grid-template-columns:32px 100px 1fr 70px 70px}.trips-table-clean-header>:nth-child(3),.trips-table-clean-header>:nth-child(6),.trips-table-clean-header>:nth-child(7),.trips-table-clean-header>:nth-child(8),.trips-table-clean-row>:nth-child(3),.trips-table-clean-row>:nth-child(6),.trips-table-clean-row>:nth-child(7),.trips-table-clean-row>:nth-child(8){display:none}.trip-route-inline .map-widget{height:200px}}.trips-map-widget{flex-direction:column;gap:.5rem;margin:.5rem 0 .75rem;display:flex}.trips-empty-map{background:var(--bg-soft);border:1px dashed var(--border-strong);color:var(--text-muted);text-align:center;border-radius:.4rem;padding:1.2rem;font-size:.85rem;font-style:italic}.trips-toolbar{color:var(--text-muted);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.5rem;padding:0 .2rem;font-size:.78rem;display:flex}.trips-toolbar-info strong{color:var(--text)}.trips-toolbar-actions{gap:.35rem;display:inline-flex}.trips-toggle-btn{border:1px solid var(--border-strong);color:var(--text-muted);cursor:pointer;background:0 0;border-radius:999px;padding:.2rem .6rem;font-family:inherit;font-size:.72rem;transition:color .15s,border-color .15s,background .15s}.trips-toggle-btn:hover:not(:disabled){color:var(--accent);border-color:var(--accent);background:#ee7c1f14}.trips-toggle-btn:disabled{opacity:.35;cursor:not-allowed}.trips-table{background:var(--bg-soft);border:1px solid var(--border);border-radius:.4rem;font-size:.78rem;overflow:hidden}.trips-table-header,.trips-table-row{border-bottom:1px solid var(--border);grid-template-columns:26px 14px 105px 60px 70px 70px 1fr;align-items:center;gap:.5rem;padding:.45rem .7rem;display:grid}.trips-table-header{background:var(--bg);color:var(--text-dim);text-transform:uppercase;letter-spacing:.05em;font-size:.65rem}.trips-table-row{cursor:pointer;transition:background .15s}.trips-table-row:hover{background:#ffffff05}.trips-table-row:last-child{border-bottom:none}.trips-table-row.is-hidden{opacity:.45}.trips-table-row input[type=checkbox]{accent-color:var(--accent);cursor:pointer;justify-self:center;width:16px;height:16px}.trips-color{border-radius:2px;justify-self:center;width:14px;height:4px}.trips-time{color:var(--text);font-variant-numeric:tabular-nums;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.75rem}.trips-meta{color:var(--text-muted);font-variant-numeric:tabular-nums;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.75rem}.trips-route{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;overflow:hidden}.trips-route .arrow{color:var(--text-dim);margin:0 .25rem}@media (width<=720px){.trips-table-header,.trips-table-row{grid-template-columns:24px 12px 1fr 60px 60px}.trips-table-header>:nth-child(6),.trips-table-header>:nth-child(7),.trips-table-row>:nth-child(6),.trips-table-row>:nth-child(7){display:none}}.trips-widget{flex-direction:column;gap:.45rem;margin:.5rem 0 .75rem;display:flex}.trips-header{color:var(--text-muted);justify-content:space-between;align-items:baseline;padding:0 .2rem;font-size:.78rem;display:flex}.trips-count{color:var(--text);font-weight:600}.trips-total{color:var(--accent);font-weight:500}.trip-card{background:var(--bg-soft);border:1px solid var(--border);border-left:2px solid var(--accent);border-radius:.4rem;flex-direction:column;gap:.4rem;padding:.65rem .85rem;display:flex}.trip-row{flex-wrap:wrap;align-items:baseline;gap:.6rem;display:flex}.trip-times{justify-content:space-between}.trip-time-range{color:var(--text);font-variant-numeric:tabular-nums;font-size:.85rem;font-weight:500}.trip-time-range .arrow,.trip-route .arrow{color:var(--text-dim);margin:0 .25rem}.trip-duration{color:var(--accent);background:#ee7c1f1a;border-radius:999px;padding:.15rem .5rem;font-size:.78rem;font-weight:600}.trip-kpis{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.78rem}.trip-kpi{align-items:baseline;gap:.25rem;display:inline-flex}.trip-kpi strong{color:var(--text);font-size:.9rem;font-weight:600}.trip-kpi:first-child strong{color:var(--accent)}.trip-unit{color:var(--text-dim);font-size:.7rem}.trip-route{color:var(--text-muted);flex-wrap:wrap;align-items:center;gap:.4rem;font-size:.75rem;display:flex}.trip-place{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.map-widget{border:1px solid var(--border);border-radius:.45rem;height:320px;margin:.5rem 0 .75rem;position:relative;overflow:hidden}.map-fullscreen-btn{z-index:1000;border:1.5px solid var(--accent);width:38px;height:38px;color:var(--accent);cursor:pointer;background:#0d0b08eb;border-radius:8px;justify-content:center;align-items:center;padding:0;font-size:15px;transition:background .15s,border-color .15s,color .15s,transform .1s;display:inline-flex;position:absolute;top:10px;right:10px;box-shadow:0 4px 12px #00000073}.map-fullscreen-btn:hover{background:var(--accent);color:#1a0f06;transform:scale(1.05)}.map-fullscreen-btn:active{transform:scale(.96)}::view-transition-old(map-fs){animation-duration:.32s;animation-timing-function:cubic-bezier(.4,0,.2,1)}::view-transition-new(map-fs){animation-duration:.32s;animation-timing-function:cubic-bezier(.4,0,.2,1)}.map-widget.is-fullscreen{z-index:9999;background:var(--bg);border:none;border-radius:0;width:100dvw;height:100dvh;margin:0;position:fixed;inset:0}.map-widget.is-fullscreen .map-fullscreen-btn{width:44px;height:44px;font-size:16px;top:16px;right:16px}:is(.app:has(.map-widget.is-fullscreen),.messages:has(.map-widget.is-fullscreen),.msg:has(.map-widget.is-fullscreen),.trips-expand-panel:has(.map-widget.is-fullscreen)){filter:none!important;-webkit-backdrop-filter:none!important;perspective:none!important;animation:none!important;transform:none!important}.map-widget .leaflet-container{background:var(--bg)}.map-widget .leaflet-popup-content-wrapper,.map-widget .leaflet-popup-tip{background:var(--bg-elevated);color:var(--text)}.map-widget .leaflet-control-attribution{color:var(--text-dim);background:#0d0b08b3}.map-widget .leaflet-control-attribution a{color:var(--accent)}.heatmap-legend{z-index:1000;border:1px solid var(--border-strong);color:var(--text-muted);background:#0d0b08d9;border-radius:999px;align-items:center;gap:.5rem;padding:.4rem .7rem;font-size:.7rem;display:inline-flex;position:absolute;bottom:12px;left:12px}.heatmap-legend-bar{background:linear-gradient(90deg,#3b82f6 0%,#3ec5d5 25%,#fbbf24 50%,#ee7c1f 75%,#e8478a 100%);border-radius:4px;width:100px;height:8px}.heatmap-legend-count{color:var(--text);font-family:ui-monospace,SF Mono,Menlo,monospace;font-weight:600}.error-widget{border:1px solid #e8478a4d;border-left:2px solid var(--pink);background:#e8478a0f;border-radius:.4rem;margin-top:.5rem;padding:.65rem .85rem}.error-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.6rem;display:flex}.error-title{color:#f5a3c1;align-items:center;gap:.5rem;font-size:.88rem;font-weight:500;display:inline-flex}.error-dot{background:var(--pink);border-radius:50%;width:8px;height:8px;box-shadow:0 0 6px #e8478a8c}.error-toggle{color:#f5a3c1;cursor:pointer;letter-spacing:.02em;background:0 0;border:1px solid #e8478a59;border-radius:999px;padding:.22rem .65rem;font-family:inherit;font-size:.7rem;transition:background .15s}.error-toggle:hover{background:#e8478a1f}.error-detail{background:var(--bg);border:1px solid var(--border);color:#fca5a5;white-space:pre-wrap;word-break:break-word;border-radius:.3rem;max-height:220px;margin-top:.6rem;padding:.6rem .7rem;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.74rem;line-height:1.45;overflow:auto}.input-row{border-top:1px solid var(--border);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#0d0b0899;align-items:center;gap:.55rem;padding:1rem;display:flex}.mic-button{color:#fff;cursor:pointer;touch-action:manipulation;-webkit-user-select:none;user-select:none;background:0 0;border:1.5px solid #ee7c1f;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:42px;height:42px;padding:0;transition:background .15s,border-color .15s,color .15s;display:inline-flex;position:relative}.mic-button i{pointer-events:none;font-size:18px;line-height:1}.mic-button:hover:not(:disabled){background:#ee7c1f2e}.mic-button.listening{color:#1a0f06;background:#ee7c1f;border-color:#ee7c1f;animation:1.4s ease-out infinite mic-pulse}.mic-button.listening i{color:#1a0f06}.mic-button:disabled{opacity:.5;cursor:not-allowed;border-color:var(--text-dim);color:var(--text-dim)}.mic-button.cooling{border-color:#ee7c1f40}.mic-cooldown-ring{pointer-events:none;width:46px;height:46px;position:absolute;inset:-2px;transform:rotate(-90deg)}.mic-cooldown-ring circle{fill:none;stroke:var(--accent);stroke-width:2.5px;stroke-dasharray:125.66;stroke-dashoffset:0;stroke-linecap:round;animation:1.8s linear forwards cooldown-drain}@keyframes cooldown-drain{to{stroke-dashoffset:125.66px}}.header-action.is-active{color:var(--accent);border-color:var(--accent);background:#ee7c1f14}@keyframes mic-pulse{0%{box-shadow:0 0 #ee7c1f8c}70%{box-shadow:0 0 0 12px #ee7c1f00}to{box-shadow:0 0 #ee7c1f00}}.mic-button:disabled{opacity:.35;cursor:not-allowed}.mic-error{color:#f5a3c1;background:#e8478a14;border:1px solid #e8478a4d;border-radius:.3rem;margin:.4rem 1rem .6rem;padding:.4rem .7rem;font-size:.78rem}.input-row input{background:var(--bg-soft);border:1px solid var(--border-strong);color:var(--text);border-radius:.4rem;flex:1;padding:.65rem .9rem;font-family:inherit;font-size:.95rem;transition:border-color .15s,box-shadow .15s}.input-row input::placeholder{color:var(--text-dim)}.input-row input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow);outline:none}.input-row button{background:var(--accent);color:#1a0f06;cursor:pointer;letter-spacing:.01em;border:none;border-radius:.4rem;padding:.65rem 1.4rem;font-family:inherit;font-size:.95rem;font-weight:600;transition:background .15s}.input-row button:hover:not(:disabled){background:var(--accent-hover)}.input-row button:disabled{opacity:.35;cursor:not-allowed}.messages::-webkit-scrollbar{width:8px}.messages::-webkit-scrollbar-track{background:0 0}.messages::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:4px}.messages::-webkit-scrollbar-thumb:hover{background:var(--text-dim)}@media (width<=900px){.backend{display:none}}@media (width<=720px){header{flex-direction:column;align-items:stretch;gap:.6rem;padding:.85rem .75rem}.header-controls{justify-content:flex-start;gap:.4rem}header h1{font-size:1.25rem}.messages{gap:.7rem;padding:.85rem .75rem}.msg.user{max-width:92%}.msg{padding:.7rem .85rem}.map-widget{height:280px}.event-row{grid-template-columns:12px 90px 1fr;padding:.4rem .6rem;font-size:.78rem}.event-time{font-size:.72rem}.input-row{padding:.75rem .65rem}}@media (width<=480px){header{gap:.5rem;padding:.7rem .6rem}.brand-pill{padding:.15rem .55rem;font-size:.65rem}header h1{font-size:1.1rem}.brand-sub{display:none}.brand-logo{width:30px;height:30px}.tz-select .tz-label{display:none}.tz-select select{max-width:140px;padding:.3rem .45rem;font-size:.72rem}.header-action{gap:0;padding:.35rem .5rem;font-size:0}.header-action i{font-size:13px}.messages{gap:.6rem;padding:.65rem .55rem}.msg{border-radius:.5rem;padding:.65rem .8rem}.msg.user{max-width:95%}.text-widget,.geocode-widget,.summary-card,.device-card,.trip-card{border-radius:.35rem;padding:.65rem .75rem}.map-widget{height:240px}.kpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:.45rem}.kpi{padding:.45rem .55rem}.kpi-value{font-size:1.1rem}.trip-row{gap:.45rem}.trip-time-range{font-size:.8rem}.trip-kpis{font-size:.74rem}.events-list{max-height:280px}.event-row{grid-template-columns:10px 78px 1fr;gap:.45rem;padding:.35rem .55rem;font-size:.75rem}.event-time{font-size:.7rem}.device-title{font-size:.92rem}.device-meta{font-size:.78rem}.device-footer{font-size:.7rem}.input-row{gap:.45rem;padding:.65rem .55rem}.input-row input{padding:.6rem .75rem;font-size:.95rem}.send-button{width:40px;height:40px}}header.compact{padding:calc(.65rem + env(safe-area-inset-top)) .85rem .65rem;flex-direction:row;align-items:center;gap:.55rem}header.compact .brand{flex-direction:row;flex:1;align-items:center;gap:0;min-width:0}header.compact .brand-pill,header.compact .brand-sub{display:none}header.compact .brand-mark{gap:.5rem;min-width:0}header.compact .brand-logo{width:30px;height:30px}header.compact h1{white-space:nowrap;text-overflow:ellipsis;font-size:1.1rem;overflow:hidden}.kebab-btn{background:var(--bg-soft);border:1px solid var(--border);width:40px;height:40px;color:var(--text);cursor:pointer;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;transition:background .15s,border-color .15s;display:inline-flex}.kebab-btn:hover,.kebab-btn:active{border-color:var(--accent);background:#ee7c1f14}.kebab-btn i{font-size:16px}.sheet-overlay{z-index:900;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#0000008c;align-items:flex-end;animation:.18s ease-out sheet-fade;display:flex;position:fixed;inset:0}@keyframes sheet-fade{0%{opacity:0}to{opacity:1}}.bottom-sheet{background:var(--bg-elevated);border-top:1px solid var(--border);width:100%;padding-bottom:env(safe-area-inset-bottom);border-top-left-radius:18px;border-top-right-radius:18px;animation:.22s ease-out sheet-rise;box-shadow:0 -16px 40px #00000080}@keyframes sheet-rise{0%{transform:translateY(100%)}to{transform:translateY(0)}}.sheet-handle{background:var(--border-strong);border-radius:2px;width:38px;height:4px;margin:.55rem auto .4rem}.sheet-content{flex-direction:column;gap:.35rem;padding:.5rem 1rem 1.1rem;display:flex}.sheet-user{color:var(--text-dim);text-align:center;border-bottom:1px solid var(--border);margin-bottom:.45rem;padding-bottom:.6rem;font-size:.78rem}.sheet-row,.sheet-action{background:var(--bg-soft);border:1px solid var(--border);color:var(--text);text-align:left;cursor:pointer;border-radius:12px;align-items:center;gap:.7rem;width:100%;padding:.75rem .85rem;font-size:.92rem;display:flex}.sheet-row i,.sheet-action i{color:var(--accent);text-align:center;flex-shrink:0;width:20px;font-size:16px}.sheet-row .sheet-label,.sheet-action span:not(.toggle-pill):not(.dot){flex:1}.sheet-row select{background:var(--bg-elevated);border:1px solid var(--border);color:var(--text);border-radius:8px;padding:.35rem .55rem;font-size:.85rem}.toggle-row.is-active i{color:var(--accent)}.toggle-pill{background:var(--bg-elevated);border:1px solid var(--border);border-radius:999px;flex-shrink:0;width:36px;height:20px;transition:background .15s,border-color .15s;position:relative}.toggle-pill .dot{background:var(--text-dim);border-radius:50%;width:14px;height:14px;transition:left .18s,background .18s;position:absolute;top:50%;left:2px;transform:translateY(-50%)}.toggle-pill.on{background:var(--accent);border-color:var(--accent)}.toggle-pill.on .dot{background:#1a0f06;left:18px}.sheet-action.danger i{color:#ec5f5f}.sheet-action:disabled{opacity:.45;cursor:not-allowed}.input-mode-picker{z-index:1000;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);padding:1.5rem;padding-bottom:calc(1.5rem + env(safe-area-inset-bottom));background:#0d0b08d9;justify-content:center;align-items:center;animation:.25s ease-out picker-fade;display:flex;position:fixed;inset:0}@keyframes picker-fade{0%{opacity:0}to{opacity:1}}.input-mode-picker .picker-card{background:var(--bg-elevated);border:1px solid var(--border);text-align:center;border-radius:18px;width:100%;max-width:360px;padding:1.5rem 1.25rem;box-shadow:0 24px 60px #0009}.input-mode-picker h2{color:var(--text);margin:0 0 .4rem;font-size:1.15rem}.input-mode-picker .picker-sub{color:var(--text-dim);margin:0 0 1.2rem;font-size:.85rem;line-height:1.4}.picker-options{grid-template-columns:1fr 1fr;gap:.75rem;display:grid}.picker-options button{background:var(--bg-soft);border:1.5px solid var(--border);color:var(--text);cursor:pointer;border-radius:12px;flex-direction:column;align-items:center;gap:.4rem;padding:1rem .5rem;transition:border-color .15s,background .15s,transform .1s;display:flex}.picker-options button:hover,.picker-options button:active{border-color:var(--accent);background:#ee7c1f14}.picker-options button:active{transform:scale(.97)}.picker-options button i{color:var(--accent);font-size:28px}.picker-options .picker-title{font-size:.95rem;font-weight:600}.picker-options .picker-hint{color:var(--text-dim);font-size:.7rem;line-height:1.3}.input-mode-toggle{background:var(--bg-soft);border:1px solid var(--border);border-radius:999px;flex-shrink:0;gap:1px;padding:2px;display:inline-flex}.input-mode-toggle button{color:var(--text-dim);cursor:pointer;background:0 0;border:none;border-radius:999px;align-items:center;gap:.28rem;padding:.3rem .55rem;font-size:.74rem;font-weight:500;transition:background .15s,color .15s;display:inline-flex}.input-mode-toggle button.active{background:var(--accent);color:#1a0f06}.input-mode-toggle button i{font-size:11px}@media (width<=380px){.input-mode-toggle button span{display:none}.input-mode-toggle button{padding:.32rem .45rem}.input-mode-toggle button i{font-size:13px}}.input-row.mobile-voice{padding:.9rem 1rem calc(1rem + env(safe-area-inset-bottom));flex-direction:column;align-items:center;gap:.5rem;position:relative}.mic-button.mic-big{border-width:2.5px;width:80px;height:80px;box-shadow:0 10px 26px #ee7c1f26}.mic-button.mic-big i{font-size:32px}.mic-button.mic-big.listening{animation:1.5s ease-out infinite mic-pulse-big;box-shadow:0 0 #ee7c1fb3}@keyframes mic-pulse-big{0%{box-shadow:0 0 #ee7c1f8c}70%{box-shadow:0 0 0 22px #ee7c1f00}to{box-shadow:0 0 #ee7c1f00}}.mic-cooldown-ring.big{pointer-events:none;width:calc(100% + 12px);height:calc(100% + 12px);position:absolute;inset:-6px}.mic-cooldown-ring.big circle{fill:none;stroke:var(--accent);stroke-width:2.5px;stroke-dasharray:289;transform-origin:50%;animation:1.8s linear forwards cooldown-spin;transform:rotate(-90deg)}@keyframes cooldown-spin{0%{stroke-dashoffset:0}to{stroke-dashoffset:289px}}.mic-big-label{color:var(--text-dim);letter-spacing:.02em;text-align:center;min-height:1.1em;font-size:.78rem}@media (hover:hover) and (pointer:fine){.input-mode-toggle,.input-mode-picker{display:none!important}}
