:root{--bg: oklch(98% .008 85);--bg-sunken: oklch(96% .012 85);--surface: oklch(100% 0 0);--surface-2: oklch(97% .01 85);--line: oklch(90% .012 85);--line-strong: oklch(82% .018 85);--ink: oklch(22% .02 250);--ink-2: oklch(40% .02 250);--ink-3: oklch(58% .015 250);--ink-4: oklch(72% .01 250);--go: oklch(62% .14 150);--go-soft: oklch(93% .05 150);--action: oklch(68% .16 55);--action-soft: oklch(94% .06 70);--warn: oklch(78% .14 85);--warn-soft: oklch(95% .06 85);--issue: oklch(62% .18 25);--issue-soft: oklch(94% .05 25);--info: oklch(62% .12 240);--info-soft: oklch(94% .04 240);--van-tint: oklch(94% .06 70);--van-ink: oklch(45% .14 55);--ctr-tint: oklch(93% .05 240);--ctr-ink: oklch(40% .14 245);--radius: 10px;--radius-sm: 6px;--radius-lg: 14px;--shadow-1: 0 1px 0 oklch(85% .02 85 / .6), 0 2px 6px -2px oklch(30% .02 85 / .08);--shadow-2: 0 4px 14px -4px oklch(30% .02 85 / .14), 0 2px 4px -2px oklch(30% .02 85 / .08);--shadow-pop: 0 20px 40px -12px oklch(25% .04 85 / .24), 0 8px 16px -8px oklch(25% .04 85 / .16);--font-ui: "Inter", system-ui, -apple-system, Segoe UI, sans-serif;--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:var(--font-ui);color:var(--ink);background:var(--bg);font-size:14px;line-height:1.4;-webkit-font-smoothing:antialiased;font-feature-settings:"cv11","ss01"}button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}input,select,textarea{font:inherit;color:inherit}::selection{background:var(--action-soft)}.app{display:grid;grid-template-columns:232px 1fr;grid-template-rows:56px 1fr;height:100vh;background:var(--bg)}.topbar{grid-column:1 / -1;display:flex;align-items:center;gap:16px;padding:0 18px;background:var(--surface);border-bottom:1px solid var(--line);z-index:5}.brand{display:flex;align-items:center;gap:10px;font-weight:700;letter-spacing:-.01em;width:214px}.brand-mark{width:28px;height:28px;border-radius:8px;background:linear-gradient(135deg,var(--action) 0%,oklch(70% .16 35) 100%);display:grid;place-items:center;color:#fff;font-family:var(--font-mono);font-weight:700;font-size:13px;box-shadow:inset 0 -2px 4px #00000026,0 2px 6px -2px #6f360080;box-shadow:inset 0 -2px 4px #00000026,0 2px 6px -2px oklch(40% .14 55 / .5)}.brand-name{font-size:15px}.brand-tag{font-size:11px;color:var(--ink-3);font-weight:500;letter-spacing:.02em}.mode-switch{display:inline-flex;background:var(--bg-sunken);border:1px solid var(--line);border-radius:999px;padding:3px;gap:2px}.mode-switch button{padding:6px 14px 6px 10px;border-radius:999px;color:var(--ink-2);font-weight:600;font-size:12.5px;display:inline-flex;align-items:center;gap:7px;transition:all .15s}.mode-switch button .dot{width:8px;height:8px;border-radius:999px;background:var(--ink-4)}.mode-switch button.active{background:var(--surface);color:var(--ink);box-shadow:var(--shadow-1)}.mode-switch button[data-mode=van].active .dot{background:var(--van-ink)}.mode-switch button[data-mode=ctr].active .dot{background:var(--ctr-ink)}.topbar-search{flex:1;max-width:480px;display:flex;align-items:center;gap:8px;background:var(--bg-sunken);border:1px solid var(--line);border-radius:8px;padding:7px 12px;color:var(--ink-3)}.topbar-search input{border:0;outline:0;background:transparent;flex:1;color:var(--ink)}.topbar-search kbd{font-family:var(--font-mono);font-size:11px;background:var(--surface);border:1px solid var(--line);border-radius:4px;padding:1px 5px}.topbar-actions{display:flex;align-items:center;gap:8px;margin-left:auto}.icon-btn{width:34px;height:34px;display:grid;place-items:center;border-radius:8px;color:var(--ink-2);position:relative}.icon-btn:hover{background:var(--bg-sunken);color:var(--ink)}.icon-btn .badge{position:absolute;top:6px;right:6px;width:7px;height:7px;border-radius:999px;background:var(--issue);box-shadow:0 0 0 2px var(--surface)}.avatar{width:30px;height:30px;border-radius:999px;background:linear-gradient(135deg,#00b4bb,#10b3bf,#1eb1c2 12.5%,#30aec9 25%,#46a7d5 50%,#6397ee);background:linear-gradient(135deg,color(xyz 0.253 0.363 0.531),#10b3bf,#1eb1c2 12.5%,#30aec9 25%,#46a7d5 50%,#6397ee);color:#fff;display:grid;place-items:center;font-weight:700;font-size:11px;letter-spacing:.02em}.sidebar{background:var(--surface);border-right:1px solid var(--line);padding:14px 10px;overflow-y:auto;display:flex;flex-direction:column;gap:2px}.nav-section{padding:12px 10px 6px;font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;font-weight:600;color:var(--ink-4)}.nav-item{display:flex;align-items:center;gap:10px;padding:7px 10px;border-radius:7px;color:var(--ink-2);font-weight:500;font-size:13.5px;width:100%;text-align:left;position:relative}.nav-item:hover{background:var(--bg-sunken);color:var(--ink)}.nav-item.active{background:var(--action-soft);color:#673200;color:oklch(38% .14 55)}.nav-item.active svg{color:var(--action)}.nav-item svg{color:var(--ink-3);flex-shrink:0}.nav-item .count{margin-left:auto;font-family:var(--font-mono);font-size:11px;color:var(--ink-3);background:var(--bg-sunken);padding:1px 6px;border-radius:999px}.nav-item.active .count{background:#fff;color:var(--action)}.sidebar-footer{margin-top:auto;padding:10px;border-top:1px solid var(--line);font-size:11.5px;color:var(--ink-3);display:flex;align-items:center;gap:8px}.status-dot{width:8px;height:8px;border-radius:999px;background:var(--go);box-shadow:0 0 0 3px var(--go-soft)}.main{overflow:hidden;display:flex;flex-direction:column}.page-head{display:flex;align-items:center;gap:14px;padding:14px 20px;border-bottom:1px solid var(--line);background:var(--surface)}.page-title{font-size:18px;font-weight:700;letter-spacing:-.01em;margin:0}.page-sub{font-size:12.5px;color:var(--ink-3)}.btn{display:inline-flex;align-items:center;gap:6px;padding:7px 12px;border-radius:7px;font-weight:600;font-size:13px;border:1px solid var(--line);background:var(--surface);color:var(--ink);transition:all .12s}.btn:hover{border-color:var(--line-strong);background:var(--bg-sunken)}.btn-primary{background:var(--action);border-color:transparent;color:#fff;box-shadow:0 1px #ac5700,0 4px 10px -4px #974c0080;box-shadow:0 1px oklch(55% .18 55),0 4px 10px -4px oklch(50% .18 55 / .5)}.btn-primary:hover{background:#d36d00;background:oklch(64% .17 55);border-color:transparent}.btn-ghost{border-color:transparent}.btn-ghost:hover{background:var(--bg-sunken)}.btn-sm{padding:5px 9px;font-size:12px}.dispatch-wrap{flex:1;display:grid;grid-template-columns:320px 1fr;gap:0;overflow:hidden}.board-panel{display:flex;flex-direction:column;overflow:hidden;background:var(--surface);border-right:1px solid var(--line)}.panel-head{padding:12px 16px;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:8px}.panel-title-row{display:flex;align-items:center;gap:8px}.panel-title{font-size:13px;font-weight:700;letter-spacing:-.005em}.panel-count{font-family:var(--font-mono);font-size:11px;color:var(--ink-3);background:var(--bg-sunken);padding:1px 7px;border-radius:999px}.panel-tabs{display:flex;gap:4px}.panel-tab{padding:4px 10px;border-radius:6px;font-size:12px;font-weight:500;color:var(--ink-3)}.panel-tab:hover{background:var(--bg-sunken);color:var(--ink)}.panel-tab.active{background:var(--bg-sunken);color:var(--ink);font-weight:600}.load-list{flex:1;overflow-y:auto;padding:10px;display:flex;flex-direction:column;gap:8px}.load-card{padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);cursor:grab;display:flex;flex-direction:column;gap:8px;transition:border-color .15s,box-shadow .15s,transform .05s}.load-card:hover{border-color:var(--line-strong);box-shadow:var(--shadow-1)}.load-card:active{cursor:grabbing;transform:scale(.98)}.load-card.dragging{opacity:.35}.load-card-head{display:flex;align-items:center;gap:8px}.load-id{font-family:var(--font-mono);font-size:11.5px;font-weight:600;color:var(--ink-2)}.load-prio{margin-left:auto;font-size:10.5px;font-weight:600;padding:1px 6px;border-radius:4px;text-transform:uppercase;letter-spacing:.04em}.load-prio.hot{background:var(--issue-soft);color:#a20519}.load-prio.reg{background:var(--bg-sunken);color:var(--ink-3)}.load-route{display:grid;grid-template-columns:14px 1fr;gap:0 10px;font-size:12.5px}.route-rail{position:relative;width:14px;height:100%;display:flex;flex-direction:column;align-items:center}.route-rail:before{content:"";position:absolute;top:8px;bottom:8px;left:50%;transform:translate(-50%);border-left:1.5px dashed var(--line-strong)}.route-rail .pin{width:10px;height:10px;border-radius:999px;background:var(--surface);border:2px solid var(--action);z-index:1}.route-rail .pin.end{border-color:var(--go);background:var(--go)}.route-stop{display:flex;flex-direction:column;gap:1px;padding:1px 0}.route-stop .city{font-weight:600;font-size:12.5px;color:var(--ink)}.route-stop .time{font-family:var(--font-mono);font-size:11px;color:var(--ink-3)}.route-sep{height:10px}.load-meta{display:flex;align-items:center;gap:10px;padding-top:8px;border-top:1px dashed var(--line);font-size:11.5px;color:var(--ink-3)}.load-meta .rate{font-family:var(--font-mono);font-weight:600;color:var(--ink)}.load-meta .mi{color:var(--ink-3)}.load-meta .eq-badge{margin-left:auto;font-size:10px;font-weight:600;padding:1px 6px;border-radius:4px;text-transform:uppercase;letter-spacing:.04em}.eq-badge.van{background:var(--van-tint);color:var(--van-ink)}.eq-badge.ctr{background:var(--ctr-tint);color:var(--ctr-ink)}.board-main{display:flex;flex-direction:column;overflow:hidden;background:var(--bg-sunken)}.board-toolbar{display:flex;align-items:center;gap:10px;padding:10px 16px;background:var(--surface);border-bottom:1px solid var(--line);font-size:12.5px}.chip-group{display:inline-flex;background:var(--bg-sunken);border:1px solid var(--line);border-radius:7px;padding:2px}.chip{padding:4px 10px;border-radius:5px;font-size:12px;color:var(--ink-2);font-weight:500}.chip.active{background:var(--surface);color:var(--ink);font-weight:600;box-shadow:var(--shadow-1)}.filter-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border:1px solid var(--line);border-radius:999px;font-size:12px;color:var(--ink-2);background:var(--surface)}.filter-chip .x{color:var(--ink-4);margin-left:2px}.timeline-scroll{flex:1;overflow:auto}.timeline{min-width:1600px;display:grid;grid-template-columns:220px 1fr}.timeline-header{position:sticky;top:0;z-index:3;display:contents}.timeline-header .th-driver,.timeline-header .th-hours{background:var(--surface);border-bottom:1px solid var(--line);padding:8px 12px;font-size:11px;font-weight:600;color:var(--ink-3);text-transform:uppercase;letter-spacing:.06em;position:sticky;top:0}.timeline-header .th-driver{border-right:1px solid var(--line)}.timeline-header .th-hours{display:grid;grid-template-columns:repeat(24,1fr);padding:0}.hour-cell{padding:8px 6px;font-family:var(--font-mono);font-size:10.5px;color:var(--ink-3);border-right:1px solid var(--line);text-align:left}.hour-cell.now{color:var(--action);font-weight:700}.swimlane-row{display:contents}.swimlane-row .driver-cell{padding:10px 12px;border-bottom:1px solid var(--line);border-right:1px solid var(--line);background:var(--surface);display:flex;align-items:center;gap:10px;position:sticky;left:0;z-index:2;min-height:72px}.driver-av{width:32px;height:32px;border-radius:999px;background:linear-gradient(135deg,var(--av-a, oklch(70% .12 180)),var(--av-b, oklch(68% .14 240)));color:#fff;font-weight:700;font-size:11px;display:grid;place-items:center;flex-shrink:0}.driver-info{display:flex;flex-direction:column;gap:1px;flex:1;min-width:0}.driver-name{font-size:12.5px;font-weight:600;letter-spacing:-.005em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.driver-meta{font-size:11px;color:var(--ink-3);display:flex;align-items:center;gap:6px}.driver-meta .hos{font-family:var(--font-mono)}.driver-hos-bar{height:3px;border-radius:2px;background:var(--bg-sunken);overflow:hidden;margin-top:4px}.driver-hos-fill{height:100%;background:var(--go)}.driver-hos-fill.warn{background:var(--warn)}.driver-hos-fill.issue{background:var(--issue)}.lane{position:relative;border-bottom:1px solid var(--line);background:repeating-linear-gradient(to right,transparent 0,transparent calc(100%/24 - 1px),var(--line) calc(100%/24 - 1px),var(--line) calc(100%/24));min-height:72px}.lane.drop-target{background:var(--go-soft);box-shadow:inset 0 0 0 2px var(--go)}.now-line{position:absolute;top:0;bottom:0;width:0;border-left:1.5px solid var(--action);z-index:1;pointer-events:none}.now-line:before{content:"";position:absolute;top:-4px;left:-5px;width:10px;height:10px;border-radius:999px;background:var(--action)}.assignment{position:absolute;top:10px;height:52px;border-radius:8px;padding:6px 10px;background:var(--surface);border:1px solid var(--line-strong);box-shadow:var(--shadow-1);cursor:grab;display:flex;flex-direction:column;gap:2px;overflow:hidden;font-size:11.5px}.assignment:active{cursor:grabbing}.assignment.status-transit{background:#d9fdff;background:oklch(97% .04 200);border-color:#6cbec2}.assignment.status-pickup{background:var(--action-soft);border-color:#efa464}.assignment.status-delivered{background:var(--go-soft);border-color:#73c385}.assignment.status-at-risk{background:var(--warn-soft);border-color:#e0af3b}.assignment .a-id{font-family:var(--font-mono);font-size:10.5px;font-weight:600;color:var(--ink-2)}.assignment .a-route{font-size:11.5px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.assignment .a-meta{font-size:10.5px;color:var(--ink-3);display:flex;gap:6px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f171f73;z-index:50;display:grid;place-items:center;animation:fade .15s ease;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}@keyframes fade{0%{opacity:0}to{opacity:1}}.modal{background:var(--surface);border-radius:14px;width:720px;max-width:92vw;max-height:88vh;box-shadow:var(--shadow-pop);display:flex;flex-direction:column;overflow:hidden;animation:pop .18s cubic-bezier(.2,.9,.3,1.2)}@keyframes pop{0%{transform:scale(.96) translateY(8px);opacity:0}to{transform:scale(1) translateY(0);opacity:1}}.modal-head{padding:16px 20px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:12px}.modal-title{font-size:16px;font-weight:700;margin:0}.modal-sub{font-size:12px;color:var(--ink-3)}.modal-body{padding:20px;overflow-y:auto;display:flex;flex-direction:column;gap:18px}.modal-foot{padding:14px 20px;border-top:1px solid var(--line);display:flex;align-items:center;gap:10px;background:var(--bg-sunken)}.field{display:flex;flex-direction:column;gap:5px}.field label{font-size:11.5px;font-weight:600;color:var(--ink-2);text-transform:uppercase;letter-spacing:.04em}.field input,.field select,.field textarea{padding:8px 10px;border:1px solid var(--line);border-radius:7px;background:var(--surface);outline:none;transition:border-color .12s,box-shadow .12s;font-size:13px}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--action);box-shadow:0 0 0 3px var(--action-soft)}.row-2{display:grid;grid-template-columns:1fr 1fr;gap:12px}.row-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px}.stop-card{border:1px solid var(--line);border-radius:10px;padding:12px;background:var(--bg-sunken);display:flex;flex-direction:column;gap:10px}.stop-head{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:700;color:var(--ink-2)}.stop-dot{width:16px;height:16px;border-radius:999px;border:2px solid var(--action);background:#fff;display:grid;place-items:center;font-family:var(--font-mono);font-size:9px;color:var(--action);font-weight:700}.stop-dot.drop{border-color:var(--go);color:var(--go)}.seg{display:inline-flex;background:var(--bg-sunken);border:1px solid var(--line);border-radius:7px;padding:2px;gap:2px}.seg button{padding:5px 11px;border-radius:5px;font-size:12px;font-weight:500;color:var(--ink-2)}.seg button.active{background:var(--surface);color:var(--ink);font-weight:600;box-shadow:var(--shadow-1)}.drawer{position:absolute;top:0;right:0;bottom:0;width:380px;background:var(--surface);border-left:1px solid var(--line);box-shadow:var(--shadow-pop);z-index:20;display:flex;flex-direction:column;animation:slide .2s ease}@keyframes slide{0%{transform:translate(20px);opacity:0}to{transform:translate(0);opacity:1}}.tweaks{position:fixed;bottom:16px;right:16px;width:280px;background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-pop);z-index:40;overflow:hidden;font-size:13px}.tweaks-head{padding:12px 14px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:8px;font-weight:700}.tweaks-body{padding:12px 14px;display:flex;flex-direction:column;gap:12px}.tweaks-body .field label{font-size:10.5px}.badge{display:inline-flex;align-items:center;gap:4px;padding:2px 7px;border-radius:999px;font-size:11px;font-weight:600}.badge.go{background:var(--go-soft);color:#005121;color:oklch(38% .14 150)}.badge.warn{background:var(--warn-soft);color:#734c00;color:oklch(45% .14 75)}.badge.issue{background:var(--issue-soft);color:#940015;color:oklch(42% .18 25)}.badge.info{background:var(--info-soft);color:#004d74;color:oklch(40% .14 240)}.badge.neutral{background:var(--bg-sunken);color:var(--ink-2)}.kpi-strip{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);border-bottom:1px solid var(--line)}.kpi{background:var(--surface);padding:10px 14px;display:flex;flex-direction:column;gap:2px}.kpi-label{font-size:10.5px;color:var(--ink-3);text-transform:uppercase;letter-spacing:.05em;font-weight:600}.kpi-val{font-family:var(--font-mono);font-size:18px;font-weight:600;letter-spacing:-.01em}.kpi-delta{font-size:11px;font-weight:500}.kpi-delta.up{color:#00672d;color:oklch(45% .14 150)}.kpi-delta.down{color:#ac1922}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#d4d0c8;border-radius:10px;border:2px solid var(--bg)}::-webkit-scrollbar-thumb:hover{background:#bdb7ab}.stub{flex:1;display:grid;place-items:center;padding:40px}.stub-inner{max-width:520px;text-align:center;display:flex;flex-direction:column;gap:10px;align-items:center}.stub-icon{width:56px;height:56px;border-radius:14px;background:var(--action-soft);color:var(--action);display:grid;place-items:center}.stub h2{margin:0;font-size:17px;letter-spacing:-.01em}.stub p{margin:0;color:var(--ink-3);font-size:13.5px;max-width:380px}
