:root,[data-theme=light]{--bg: #f3f4f7;--bg-grad: radial-gradient(1200px 600px at 100% 0%, #e8eefc 0%, transparent 60%);--surface: #ffffff;--surface-2: #f4f5f8;--border: #e5e7eb;--text: #16181d;--text-muted: #6b7280;--accent: #3b82f6;--shadow: 0 1px 2px rgba(16, 24, 40, .06), 0 4px 16px rgba(16, 24, 40, .05);--chart-grid: #eceef1;--chart-cursor: rgba(59, 130, 246, .08);color-scheme:light}[data-theme=dark]{--bg: #0d0f13;--bg-grad: radial-gradient(1200px 600px at 100% 0%, #16203a 0%, transparent 60%);--surface: #15181e;--surface-2: #1d2128;--border: #282d36;--text: #e6e8ec;--text-muted: #8b919c;--accent: #60a5fa;--shadow: 0 1px 2px rgba(0, 0, 0, .4), 0 4px 20px rgba(0, 0, 0, .3);--chart-grid: #262b33;--chart-cursor: rgba(96, 165, 250, .1);color-scheme:dark}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{font-family:Segoe UI,Sarabun,system-ui,-apple-system,sans-serif;background:var(--bg);background-image:var(--bg-grad);background-attachment:fixed;color:var(--text);-webkit-font-smoothing:antialiased;transition:background-color .2s ease,color .2s ease}.app{display:flex;flex-direction:column;min-height:100%}.header{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px clamp(16px,3vw,32px);background:color-mix(in srgb,var(--surface) 86%,transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--border)}.brand{display:flex;align-items:center;gap:12px}.brand__logo{display:grid;place-items:center;width:42px;height:42px;border-radius:12px;color:#fff;background:linear-gradient(135deg,#3b82f6,#2563eb);box-shadow:0 4px 12px #3b82f659}.brand__title{font-size:1.18rem;font-weight:700;letter-spacing:-.01em}.brand__subtitle{font-size:.8rem;color:var(--text-muted)}.header__actions{display:flex;align-items:center;gap:8px}.header__updated{font-size:.78rem;color:var(--text-muted);white-space:nowrap}.icon-btn{display:grid;place-items:center;width:38px;height:38px;border-radius:10px;border:1px solid var(--border);background:var(--surface);color:var(--text);cursor:pointer;transition:background-color .15s ease,transform .1s ease,border-color .15s ease}.icon-btn:hover{background:var(--surface-2);border-color:var(--accent)}.icon-btn:active{transform:scale(.94)}.icon-btn:disabled{opacity:.6;cursor:default}.content{flex:1;width:100%;display:flex;flex-direction:column;gap:18px;padding:clamp(16px,2.4vw,28px)}.footer{padding:16px 28px 24px;text-align:center;font-size:.78rem;color:var(--text-muted)}.footer code{font-family:ui-monospace,Cascadia Code,monospace;background:var(--surface-2);padding:1px 6px;border-radius:5px}.filter-bar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:13px 18px;background:var(--surface);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow)}.filter-bar__label{display:flex;align-items:center;gap:8px;font-size:.9rem;font-weight:600;color:var(--text)}.filter-bar__range{display:flex;align-items:center;gap:10px}.filter-bar__sep{color:var(--text-muted)}.datefield{position:relative}.datefield__btn{display:flex;align-items:center;gap:8px;padding:9px 13px;font-size:.88rem;font-family:inherit;font-variant-numeric:tabular-nums;color:var(--text);background:var(--surface-2);border:1px solid var(--border);border-radius:9px;cursor:pointer;transition:border-color .15s ease}.datefield__btn:hover,.datefield__btn.is-open{border-color:var(--accent)}.datefield__pop{position:absolute;top:calc(100% + 6px);left:0;z-index:50}.datefield__pop--right{left:auto;right:0}.calendar{width:252px;padding:12px;background:var(--surface);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow)}.calendar__head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.calendar__title{font-size:.88rem;font-weight:700}.calendar__nav{width:28px;height:28px;display:grid;place-items:center;font-size:1.05rem;line-height:1;color:var(--text);background:var(--surface-2);border:1px solid var(--border);border-radius:7px;cursor:pointer;transition:border-color .15s ease}.calendar__nav:hover{border-color:var(--accent)}.calendar__grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}.calendar__dow{margin-bottom:4px}.calendar__dowcell{padding:4px 0;text-align:center;font-size:.7rem;color:var(--text-muted)}.calendar__day-empty{aspect-ratio:1}.calendar__day{aspect-ratio:1;display:grid;place-items:center;font-size:.8rem;font-family:inherit;color:var(--text);background:transparent;border:none;border-radius:7px;cursor:pointer;transition:background-color .12s ease}.calendar__day:hover{background:var(--surface-2)}.calendar__day.is-today{color:var(--accent);font-weight:700}.calendar__day.is-selected,.calendar__day.is-selected.is-today{color:#fff;font-weight:700;background:var(--accent)}.banner{padding:28px;text-align:center;border-radius:14px;background:var(--surface);border:1px solid var(--border);color:var(--text-muted)}.banner--error{color:#ef4444;border-color:color-mix(in srgb,#ef4444 40%,var(--border));background:color-mix(in srgb,#ef4444 8%,var(--surface))}.kpi-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:14px}.stat-card{display:flex;align-items:center;gap:14px;padding:16px 18px;background:var(--surface);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow);transition:transform .12s ease,border-color .15s ease}.stat-card:hover{transform:translateY(-2px);border-color:color-mix(in srgb,var(--accent) 40%,var(--border))}.stat-card__icon{display:grid;place-items:center;width:44px;height:44px;border-radius:11px;flex-shrink:0}.stat-card__body{display:flex;flex-direction:column;gap:2px;min-width:0}.stat-card__label{font-size:.78rem;color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stat-card__value{font-size:1.5rem;font-weight:700;letter-spacing:-.02em;line-height:1.15}.stat-card__unit{font-size:.82rem;font-weight:600;color:var(--text-muted);margin-left:4px}.stat-card__hint{font-size:.72rem;color:var(--text-muted)}.charts-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}.panel{display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border);border-radius:16px;box-shadow:var(--shadow);overflow:hidden}.panel--wide{grid-column:1 / -1}.panel__head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:16px 18px 6px}.panel__title{font-size:.98rem;font-weight:700}.panel__subtitle{font-size:.76rem;color:var(--text-muted)}.panel__body{padding:8px 14px 16px}.chart-box{width:100%;height:280px}.chart-empty{display:grid;place-items:center;height:220px;color:var(--text-muted);font-size:.85rem}.route-list{list-style:none;display:flex;flex-direction:column;gap:12px;padding:6px 4px}.route-item__head{display:flex;justify-content:space-between;gap:12px;margin-bottom:6px}.route-item__name{font-size:.86rem;font-weight:500}.route-item__count{font-size:.8rem;font-weight:600;color:var(--text-muted);white-space:nowrap}.route-item__track{height:8px;background:var(--surface-2);border-radius:99px;overflow:hidden}.route-item__fill{height:100%;border-radius:99px;transition:width .5s ease}.tooltip{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:8px 11px;box-shadow:var(--shadow);font-size:.8rem}.tooltip__title{font-weight:700;margin-bottom:5px}.tooltip__row{display:flex;align-items:center;gap:7px}.tooltip__row+.tooltip__row{margin-top:3px}.tooltip__dot{width:9px;height:9px;border-radius:3px;flex-shrink:0}.tooltip__name{color:var(--text-muted)}.tooltip__value{margin-left:auto;font-weight:700}.trips-table__toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:2px 2px 12px}.search-input{flex:1;max-width:320px;padding:9px 13px;font-size:.85rem;font-family:inherit;color:var(--text);background:var(--surface-2);border:1px solid var(--border);border-radius:9px;outline:none;transition:border-color .15s ease}.search-input:focus{border-color:var(--accent)}.trips-table__count{font-size:.78rem;color:var(--text-muted);white-space:nowrap}.trips-table__scroll{overflow-x:auto;border-radius:10px;border:1px solid var(--border)}.trips-table table{width:100%;border-collapse:collapse;font-size:.84rem;white-space:nowrap}.trips-table thead th{position:sticky;top:0;text-align:left;font-weight:600;font-size:.76rem;color:var(--text-muted);background:var(--surface-2);padding:11px 14px;border-bottom:1px solid var(--border)}.trips-table tbody td{padding:11px 14px;border-bottom:1px solid var(--border)}.trips-table tbody tr:last-child td{border-bottom:none}.trips-table tbody tr:hover td{background:var(--surface-2)}.trips-table .num{text-align:right;font-variant-numeric:tabular-nums}.trips-table__empty{text-align:center!important;color:var(--text-muted);padding:28px!important}.plate-tag{font-family:ui-monospace,Cascadia Code,monospace;font-weight:700;font-size:.8rem;padding:3px 8px;border-radius:6px;background:var(--surface-2);border:1px solid var(--border)}.route-cell{display:flex;align-items:center;gap:7px}.route-cell__arrow{color:var(--accent);font-weight:700}.status{font-size:.74rem;font-weight:600;padding:3px 9px;border-radius:99px}.status--done{color:#10b981;background:color-mix(in srgb,#10b981 14%,transparent)}.status--active{color:#f59e0b;background:color-mix(in srgb,#f59e0b 16%,transparent)}.spin{animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media (max-width: 1180px){.kpi-grid{grid-template-columns:repeat(3,1fr)}}@media (max-width: 920px) and (orientation: landscape){.kpi-grid{grid-template-columns:repeat(3,1fr)}.charts-grid{grid-template-columns:repeat(2,1fr)}.chart-box{height:240px}.stat-card__value{font-size:1.3rem}}@media (max-width: 760px) and (orientation: portrait){.kpi-grid{grid-template-columns:repeat(2,1fr)}.charts-grid{grid-template-columns:1fr}.panel--wide{grid-column:auto}.chart-box{height:250px}.brand__subtitle,.header__updated{display:none}.stat-card{padding:13px 14px;gap:11px}.stat-card__icon{width:38px;height:38px}.stat-card__value{font-size:1.25rem}.search-input{max-width:none}}@media (max-width: 380px){.kpi-grid{grid-template-columns:1fr}}@media (prefers-reduced-motion: reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important}}
