:root{--navy:#0f1e36;--navy2:#16294a;--slate:#64748b;--ink:#0f172a;--muted:#64748b;--line:#e2e8f0;--bg:#f5f7fb;--card:#fff;
--accent:#2563eb;--accent-d:#1d4ed8;--accent-soft:#eff4ff;--ok:#16a34a;--warn:#d97706;--bad:#dc2626;--r:12px;
--sh:0 1px 2px rgba(15,23,42,.06),0 1px 3px rgba(15,23,42,.08);--sh2:0 10px 30px rgba(15,23,42,.12)}
*{box-sizing:border-box}html,body{margin:0}
body{font-family:Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;background:var(--bg);color:var(--ink);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}
a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}
h1{font-size:22px;margin:0;font-weight:700;letter-spacing:-.02em}h2{font-size:16px;margin:0 0 12px;font-weight:650}h3{font-size:12px;margin:0 0 10px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;font-weight:600}
.ic{vertical-align:-3px;flex-shrink:0}
/* shell */
.shell{display:flex;min-height:100vh}
.sidebar{width:236px;background:var(--navy);color:#cbd5e1;display:flex;flex-direction:column;position:fixed;inset:0 auto 0 0;z-index:20}
.brand{display:flex;align-items:center;gap:10px;padding:20px 20px 18px;color:#fff;font-weight:700;font-size:16px;letter-spacing:-.01em}
.logo{width:32px;height:32px;border-radius:9px;background:linear-gradient(135deg,var(--accent),#60a5fa);display:grid;place-items:center;color:#fff}
.nav{padding:8px 12px;display:flex;flex-direction:column;gap:2px;flex:1}
.nav .sec{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:#64748b;padding:14px 10px 6px}
.nav a{display:flex;align-items:center;gap:11px;padding:9px 11px;border-radius:8px;color:#cbd5e1;font-weight:500}
.nav a:hover{background:var(--navy2);color:#fff;text-decoration:none}.nav a.on{background:var(--accent);color:#fff}
.sidefoot{padding:14px 20px;border-top:1px solid #1e335a;font-size:12px;color:#94a3b8}
.main{margin-left:236px;flex:1;min-width:0}
.topbar{height:64px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 28px;position:sticky;top:0;z-index:10}
.topbar .who{display:flex;align-items:center;gap:12px;color:var(--muted)}
.avatar{width:32px;height:32px;border-radius:50%;background:var(--accent-soft);color:var(--accent);display:grid;place-items:center;font-weight:700;font-size:13px}
.content{padding:28px;max-width:1320px}
.topnav{background:var(--navy);color:#fff;height:64px;display:flex;align-items:center;padding:0 28px;gap:28px;position:sticky;top:0;z-index:10}
.topnav .brand{padding:0}.topnav nav{display:flex;gap:4px;flex:1}.topnav nav a{color:#cbd5e1;padding:8px 14px;border-radius:8px;display:flex;gap:8px;align-items:center;font-weight:500}
.topnav nav a.on,.topnav nav a:hover{background:var(--navy2);color:#fff;text-decoration:none}.topnav .who{color:#cbd5e1;display:flex;align-items:center;gap:12px}.topnav .who a{color:#cbd5e1}
.content.narrow{max-width:1180px;margin:0 auto}
.pagehead{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:22px;flex-wrap:wrap}.pagehead p{margin:4px 0 0;color:var(--muted)}
/* cards */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh);padding:20px;margin-bottom:20px}
.card.flush{padding:0;overflow:hidden}.card .cardhead{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid var(--line)}
.card .cardhead h2{margin:0}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:20px}.grid3{display:grid;grid-template-columns:2fr 1fr;gap:20px}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:16px;margin-bottom:22px}
.kpi{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:18px;box-shadow:var(--sh);display:flex;gap:14px;align-items:flex-start}
.kpi .kic{width:40px;height:40px;border-radius:10px;display:grid;place-items:center;background:var(--accent-soft);color:var(--accent)}
.kpi .kic.g{background:#ecfdf5;color:var(--ok)}.kpi .kic.o{background:#fff7ed;color:var(--warn)}.kpi .kic.r{background:#fef2f2;color:var(--bad)}.kpi .kic.s{background:#f1f5f9;color:var(--slate)}
.kpi small{color:var(--muted);font-weight:500;display:block}.kpi b{font-size:24px;letter-spacing:-.02em;display:block;line-height:1.2}
/* tables */
table{width:100%;border-collapse:collapse}th{font-size:11.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:600;text-align:left;padding:11px 16px;background:#f8fafc;border-bottom:1px solid var(--line)}
td{padding:12px 16px;border-bottom:1px solid #f1f5f9;vertical-align:top}tr:last-child td{border-bottom:0}tbody tr:hover td{background:#fafbff}
td small,.sub{color:var(--muted);font-size:12.5px;display:block}.num{text-align:right;font-variant-numeric:tabular-nums}.mono{font-variant-numeric:tabular-nums;font-weight:600}
.tablewrap{overflow-x:auto}
/* pills */
.pill{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:600;white-space:nowrap;background:#f1f5f9;color:#334155}
.pill::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.8}
.pill.new{background:#eff6ff;color:#1d4ed8}.pill.scheduled{background:#f5f3ff;color:#6d28d9}.pill.dispatched{background:#fffbeb;color:#b45309}
.pill.accepted{background:#ecfeff;color:#0e7490}.pill.picked-up,.pill.in-transit{background:#eef2ff;color:#4338ca}.pill.delivered,.pill.paid{background:#ecfdf5;color:#15803d}
.pill.cancelled,.pill.void{background:#f1f5f9;color:#64748b}.pill.draft{background:#f8fafc;color:#475569;border:1px dashed #cbd5e1}.pill.sent{background:#eff6ff;color:#1d4ed8}
.pill.partially-paid{background:#fffbeb;color:#b45309}.pill.overdue{background:#fef2f2;color:#b91c1c}
/* forms */
label{display:block;font-size:12.5px;font-weight:550;color:#334155;margin:12px 0 6px}label.req::after{content:" *";color:var(--bad)}
input,select,textarea{width:100%;padding:9px 12px;border:1px solid #cbd5e1;border-radius:8px;font:inherit;background:#fff;color:var(--ink);transition:border .15s,box-shadow .15s}
input:focus,select:focus,textarea:focus{outline:0;border-color:var(--accent);box-shadow:0 0 0 3px rgba(37,99,235,.15)}
input[type=checkbox]{width:16px;height:16px;accent-color:var(--accent);vertical-align:-3px;margin:0 6px 0 0}
.check{display:flex;align-items:center;font-weight:500;margin:6px 0}
.row{display:grid;grid-template-columns:repeat(3,1fr);gap:0 16px}.row4{display:grid;grid-template-columns:repeat(4,1fr);gap:0 16px}.row2{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
.span2{grid-column:span 2}.span3{grid-column:1/-1}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:9px 16px;border-radius:8px;font:inherit;font-weight:600;border:1px solid transparent;cursor:pointer;background:var(--accent);color:#fff;white-space:nowrap;text-decoration:none!important;transition:background .15s}
.btn:hover{background:var(--accent-d)}.btn.ghost{background:#fff;color:#334155;border-color:#cbd5e1}.btn.ghost:hover{background:#f8fafc}
.btn.danger{background:#fff;color:var(--bad);border-color:#fecaca}.btn.danger:hover{background:#fef2f2}.btn.ok{background:var(--ok)}.btn.sm{padding:6px 11px;font-size:13px}
.btn.dark{background:var(--navy)}.btn:disabled{opacity:.5;cursor:not-allowed}
.toolbar{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap;margin-bottom:16px}.toolbar label{margin-top:0}.toolbar>div{min-width:170px}
.searchbox{position:relative}.searchbox .ic{position:absolute;left:11px;top:11px;color:#94a3b8}.searchbox input{padding-left:36px;width:300px}
.alert{padding:12px 16px;border-radius:10px;margin-bottom:16px;border:1px solid}.alert.err{background:#fef2f2;border-color:#fecaca;color:#991b1b}.alert.info{background:var(--accent-soft);border-color:#bfdbfe;color:#1e3a8a}
/* empty */
.empty{text-align:center;padding:48px 20px;color:var(--muted)}.empty .eic{width:56px;height:56px;border-radius:16px;background:#f1f5f9;display:grid;place-items:center;margin:0 auto 12px;color:#94a3b8}.empty b{display:block;color:var(--ink);font-size:15px;margin-bottom:4px}
/* address blocks */
.addr{display:flex;gap:12px}.addr .dot{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;flex-shrink:0}.addr .dot.p{background:#eff6ff;color:var(--accent)}.addr .dot.d{background:#ecfdf5;color:var(--ok)}
.kv{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:14px}.kv div small{display:block;color:var(--muted);font-size:12px}.kv div b{font-weight:600}
/* timeline */
.tl{list-style:none;margin:0;padding:0;position:relative}.tl li{position:relative;padding:0 0 18px 30px}.tl li:last-child{padding-bottom:0}
.tl li::before{content:"";position:absolute;left:8px;top:20px;bottom:0;width:2px;background:var(--line)}.tl li:last-child::before{display:none}
.tl .dot{position:absolute;left:0;top:2px;width:18px;height:18px;border-radius:50%;background:#fff;border:3px solid var(--accent)}
.tl li.delivered .dot{border-color:var(--ok);background:var(--ok)}.tl li.declined .dot,.tl li.cancelled .dot{border-color:var(--bad)}.tl li.invoiced .dot{border-color:#7c3aed}
.tl b{display:block}.tl small{color:var(--muted)}
/* board */
.board{display:grid;grid-template-columns:repeat(5,minmax(230px,1fr));gap:14px;overflow-x:auto;align-items:start}
.col{background:#eef2f7;border-radius:var(--r);padding:12px;min-height:200px}.col h2{display:flex;justify-content:space-between;font-size:13px;margin:2px 4px 12px;text-transform:uppercase;letter-spacing:.05em;color:#334155}
.col h2 span{background:#fff;border-radius:999px;padding:0 9px;font-size:12px;color:var(--muted)}
.ticket{background:#fff;border:1px solid var(--line);border-radius:10px;padding:12px;margin-bottom:10px;box-shadow:var(--sh)}.ticket .t1{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}
.ticket .route{font-size:12.5px;color:#334155;margin:6px 0}.ticket .meta{display:flex;gap:10px;font-size:12px;color:var(--muted);flex-wrap:wrap}
.ticket form{display:flex;gap:6px;margin-top:10px}.ticket select{padding:6px 8px;font-size:12.5px}
.col .none{font-size:12.5px;color:#94a3b8;text-align:center;padding:24px 0}
/* toasts */
.toasts{position:fixed;right:20px;bottom:20px;display:flex;flex-direction:column;gap:10px;z-index:100}
.toast{background:var(--navy);color:#fff;padding:12px 16px;border-radius:10px;box-shadow:var(--sh2);display:flex;gap:10px;align-items:center;min-width:260px;animation:tin .25s ease;transition:opacity .4s,transform .4s}
.toast.error{background:#991b1b}.toast.hide{opacity:0;transform:translateY(10px)}@keyframes tin{from{opacity:0;transform:translateY(10px)}}
/* login */
.loginwrap{min-height:100vh;display:grid;grid-template-columns:1.1fr 1fr}
.loginart{background:radial-gradient(circle at 20% 20%,#1e3a8a 0,transparent 45%),linear-gradient(160deg,var(--navy),#0b1427);color:#fff;padding:56px;display:flex;flex-direction:column;justify-content:space-between}
.loginart h1{font-size:38px;line-height:1.15;max-width:460px;margin:24px 0 14px}.loginart p{color:#94a3b8;max-width:420px;font-size:15px}
.feat{display:flex;flex-direction:column;gap:12px;color:#cbd5e1}.feat div{display:flex;gap:10px;align-items:center}
.loginbox{display:grid;place-items:center;padding:40px;background:#fff}.loginbox form{width:100%;max-width:360px}
/* outbox */
.mailgrid{display:grid;grid-template-columns:400px 1fr;gap:20px}.maillist a{display:block;padding:12px 16px;border-bottom:1px solid #f1f5f9;color:inherit}
.maillist a:hover{background:#fafbff;text-decoration:none}.maillist a.on{background:var(--accent-soft);border-left:3px solid var(--accent)}
.maillist .subj{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tag{font-size:11px;padding:2px 8px;border-radius:6px;background:#f1f5f9;color:#475569;font-weight:600}
iframe.preview{width:100%;height:640px;border:1px solid var(--line);border-radius:10px;background:#fff}
.banner{background:#fffbeb;border:1px solid #fde68a;color:#92400e;padding:10px 14px;border-radius:10px;margin-bottom:16px;display:flex;gap:10px;align-items:center}
.aging td.num{font-weight:600}.aging .hot{color:var(--bad)}
/* driver mobile */
body.role-driver{background:#eef2f7}
.mobile{max-width:520px;margin:0 auto;min-height:100vh;background:var(--bg);padding-bottom:120px}
.mtop{background:var(--navy);color:#fff;padding:16px 18px;display:flex;justify-content:space-between;align-items:center;position:sticky;top:0;z-index:10}
.mtop a{color:#cbd5e1;display:flex;align-items:center;gap:6px}.mtop .brand{padding:0;font-size:15px}
.mcontent{padding:16px}.mcard{background:#fff;border-radius:16px;padding:16px;margin-bottom:12px;box-shadow:var(--sh);border:1px solid var(--line);display:block;color:inherit}
a.mcard:hover{text-decoration:none;border-color:var(--accent)}
.steps{display:flex;justify-content:space-between;position:relative;margin:4px 6px 18px}.steps::before{content:"";position:absolute;left:12px;right:12px;top:13px;height:3px;background:#dbe3ee}
.steps .bar{position:absolute;left:12px;top:13px;height:3px;background:var(--accent)}
.steps div{position:relative;z-index:1;text-align:center;font-size:11px;color:var(--muted);width:25%}.steps i{display:grid;place-items:center;width:28px;height:28px;margin:0 auto 4px;border-radius:50%;background:#dbe3ee;color:#fff;font-style:normal;font-weight:700;font-size:12px}
.steps .done i{background:var(--accent)}.steps .cur i{background:#fff;border:3px solid var(--accent);color:var(--accent)}.steps .done,.steps .cur{color:var(--ink);font-weight:600}
.actionbar{position:fixed;left:0;right:0;bottom:0;background:#fff;border-top:1px solid var(--line);padding:12px 16px calc(12px + env(safe-area-inset-bottom));box-shadow:0 -6px 20px rgba(15,23,42,.08);z-index:30}
.actionbar .inner{max-width:488px;margin:0 auto;display:flex;gap:10px}.actionbar .btn{flex:1;padding:16px;font-size:16px;border-radius:12px}
.big input,.big textarea{padding:13px 14px;font-size:16px;border-radius:10px}
.sigpad{width:100%;height:170px;border:2px dashed #cbd5e1;border-radius:12px;background:#fff;touch-action:none;display:block}
.photo{display:flex;align-items:center;justify-content:center;gap:10px;border:2px dashed #cbd5e1;border-radius:12px;padding:18px;color:var(--muted);background:#fff;cursor:pointer;font-weight:600}
.photo input{display:none}.bigtap{display:flex;gap:12px;align-items:center;padding:14px;border-radius:12px;background:#f8fafc;margin-top:8px;color:inherit}
.thumb{max-width:100%;border-radius:10px;border:1px solid var(--line)}.sigimg{max-width:280px;background:#fff;border:1px solid var(--line);border-radius:8px}
@media(max-width:1000px){.sidebar{display:none}.main{margin-left:0}.grid2,.grid3,.mailgrid{grid-template-columns:1fr}.loginwrap{grid-template-columns:1fr}.loginart{display:none}.board{grid-template-columns:repeat(5,260px)}}
@media(max-width:640px){.row,.row4,.row2{grid-template-columns:1fr}.content{padding:16px}.topnav{padding:0 14px;gap:10px;overflow-x:auto}.topnav .who span{display:none}.searchbox input{width:100%}}
@media print{.sidebar,.topbar,.topnav,.noprint,.toasts{display:none!important}.main{margin:0}.content{padding:0}body{background:#fff}}
.pill.ticket{background:#f5f3ff;color:#6d28d9;margin-left:4px}.kpi .kic.t{background:#f5f3ff;color:#7c3aed}
.ticket.billing{border-left:4px solid #7c3aed;background:linear-gradient(90deg,#faf8ff,#fff)}.mcard.billing{border-left:5px solid #7c3aed}
.ticketcard .cardhead{background:linear-gradient(90deg,#f5f3ff,#fff)}.daygrid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.day{border:1px solid var(--line);border-radius:8px;padding:6px 8px;font-size:12px;min-height:54px;background:#fff}.day.off{background:#f8fafc;color:#94a3b8}
.day.skip{background:#fef2f2;border-color:#fecaca}.day.has{border-color:#c4b5fd;background:#faf8ff}.day b{display:block;font-size:11px;color:var(--muted);text-transform:uppercase}
.chips{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}.chip{display:inline-flex;align-items:center;gap:6px;padding:4px 11px;border-radius:999px;border:1px solid var(--line);background:#fff;color:#334155;font-size:12.5px;font-weight:600;text-decoration:none!important;white-space:nowrap}
.chip i{width:9px;height:9px;border-radius:50%;background:var(--c,#94a3b8)}.chip.on{background:var(--c,var(--navy));color:#fff;border-color:transparent}.chip.on i{background:#fff}
.drivercards{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;margin-bottom:12px}.dcard{display:block;color:inherit;border-top:4px solid var(--c);transition:transform .15s,box-shadow .15s}.dcard:hover{text-decoration:none;transform:translateY(-2px);box-shadow:var(--sh2)}
.bigavatar{width:48px;height:48px;border-radius:50%;color:#fff;display:grid;place-items:center;font-weight:700;font-size:16px;flex-shrink:0}
.status{font-size:12px;font-weight:700;padding:3px 10px;border-radius:999px;background:#f1f5f9;color:#64748b}.status.on{background:#dcfce7;color:#15803d}
.dstats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:14px}.dstats div{background:#f8fafc;border-radius:10px;padding:8px;text-align:center}.dstats b{font-size:20px;display:block}.dstats small{color:var(--muted);font-size:11.5px}
.mapgrid{display:grid;grid-template-columns:1fr 340px;gap:20px}.pin{width:34px;height:34px;border-radius:50%;border:3px solid #fff;color:#fff;display:grid;place-items:center;font-weight:800;box-shadow:0 2px 8px rgba(0,0,0,.35)}
.drv .on{color:#15803d;font-weight:700}.drv .stale{color:#d97706;font-weight:700}
.locbar{display:flex;gap:12px;align-items:center;background:#fff;border:1px solid var(--line);border-radius:14px;padding:12px 14px;margin-bottom:14px;box-shadow:var(--sh)}.locbar small{display:block}
.locdot{width:12px;height:12px;border-radius:50%;background:#cbd5e1;flex-shrink:0}.locbar.live .locdot{background:#16a34a;box-shadow:0 0 0 0 rgba(22,163,74,.6);animation:pulse 1.8s infinite}.locbar.off{opacity:.8}
@keyframes pulse{70%{box-shadow:0 0 0 10px rgba(22,163,74,0)}100%{box-shadow:0 0 0 0 rgba(22,163,74,0)}}
@media(max-width:1000px){.mapgrid{grid-template-columns:1fr}}
/* compliance + accounting */
.pill.expired,.pill.error,.pill.blocked{background:#fef2f2;color:#b91c1c}.pill.expiring,.pill.pending,.pill.warn{background:#fffbeb;color:#b45309}
.pill.ok,.pill.synced,.pill.approved,.pill.current{background:#ecfdf5;color:#15803d}.pill.missing,.pill.skipped{background:#f1f5f9;color:#64748b}
tr.expired td{background:#fef2f2;color:#991b1b}tr.expired td b,tr.expired td a{color:#991b1b}tr.expiring td{background:#fffbeb}
.alert.warn{background:#fffbeb;border-color:#fde68a;color:#92400e}.alert.ok{background:#ecfdf5;border-color:#a7f3d0;color:#065f46}
.redtxt{color:#b91c1c;font-weight:700}.ambertxt{color:#b45309;font-weight:600}.greentxt{color:#15803d;font-weight:600}
.formgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px 16px}.formgrid h3{grid-column:1/-1;margin:14px 0 0;font-size:14px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.audit td{font-size:12.5px;vertical-align:top}.audit .old{color:#b91c1c;text-decoration:line-through}.audit .new{color:#15803d}
.neg{color:#b91c1c}.pos{color:#15803d}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.statusdot{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:6px}.statusdot.on{background:#16a34a}.statusdot.off{background:#94a3b8}
pre.json{background:#0f172a;color:#e2e8f0;padding:10px;border-radius:8px;font-size:11.5px;max-height:240px;overflow:auto;white-space:pre-wrap}
/* on-time + history */
.history .hist td{vertical-align:top;font-size:13px}.history .old{color:#b91c1c;text-decoration:line-through}.history .new{color:#15803d;font-weight:600}
.history .tag{background:#eef2ff;color:#3730a3;border-radius:6px;padding:1px 6px;font-size:11px}.history tr.k-change-request td{background:#fffbeb}
.nowrap{white-space:nowrap}.ok{color:#15803d}.late{color:#b91c1c}.otchart{width:100%;height:auto}
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:16px}.kpi{background:#fff;border:1px solid var(--line);border-radius:12px;padding:16px}
.kpi small{color:#64748b;display:block}.kpi b{font-size:28px}.pct-good{color:#15803d}.pct-mid{color:#b45309}.pct-bad{color:#b91c1c}
@media(max-width:800px){.kpis{grid-template-columns:repeat(2,1fr)}}
/* stops / check-in */
.flow{display:flex;gap:4px;overflow-x:auto}.fstep{flex:1;min-width:64px;text-align:center;font-size:11px;color:#64748b}.fstep .fdot{display:inline-flex;width:24px;height:24px;border-radius:50%;background:#e5e7eb;align-items:center;justify-content:center;font-weight:700;color:#475569}
.fstep.done .fdot{background:#16a34a;color:#fff}.fstep.cur .fdot{background:#2563eb;color:#fff;box-shadow:0 0 0 4px #bfdbfe}.fstep small{display:block;margin-top:4px;line-height:1.15}.fstep em{display:block;font-style:normal;color:#0f172a;font-weight:600}
.big-checkin{width:100%;font-size:18px;padding:16px;justify-content:center}
.gfbanner{position:fixed;left:0;right:0;bottom:0;z-index:999;background:#1d4ed8;color:#fff;padding:16px 16px calc(16px + env(safe-area-inset-bottom));box-shadow:0 -8px 30px rgba(0,0,0,.25);animation:gfpulse 1.6s ease-in-out infinite}
.gfbanner .gfinner{max-width:560px;margin:0 auto;display:flex;flex-direction:column;gap:8px}.gfbanner b{font-size:20px}.gfbanner .btn{background:#fff;color:#1d4ed8}.gfbanner a{color:#dbeafe;text-align:center}
@keyframes gfpulse{50%{background:#2563eb}}
.stoprow{border:1px solid var(--line);border-left:4px solid #2563eb;border-radius:10px;padding:12px;margin-bottom:10px}.stoprow.drop{border-left-color:#16a34a}
.stophead{display:flex;gap:10px;align-items:center;margin-bottom:8px;flex-wrap:wrap}.stophead .stype{width:auto}.stopbtns{margin-left:auto;display:flex;gap:4px}.stopfrom select{width:auto}
.accs{display:flex;flex-wrap:wrap;gap:8px 16px}.acc{display:flex;gap:6px;align-items:center;font-weight:400}.quotebox{margin-top:14px;padding:14px;border-radius:10px;background:#f1f5f9;border:1px solid var(--line)}

.locpick{position:relative;margin:6px 0 8px;display:flex;gap:10px;align-items:center;flex-wrap:wrap}.locsearch{flex:1;min-width:240px}
.locbadge{font-size:12px;color:#555}.locbadge.ok{color:#0a7a3d;font-weight:600}
.locres{position:absolute;top:100%;left:0;right:0;background:#fff;border:1px solid #ddd;border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.12);z-index:30;max-height:260px;overflow:auto}
.locitem{padding:8px 12px;cursor:pointer;display:flex;flex-direction:column}.locitem:hover{background:#f3f6fb}
.dfilters{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 12px}.dfilters select{width:auto}
.dsplit{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(320px,1fr);gap:14px;align-items:start}.dleft{overflow:auto;max-height:calc(100vh - 210px)}
.dright{position:sticky;top:12px}#dmap{height:calc(100vh - 330px);min-height:320px;border-radius:12px 12px 0 0}.dinfo{padding:10px 14px;min-height:80px}
.dtable td,.dtable th{padding:7px 8px;font-size:13px;white-space:nowrap}.dtable tr.sel td{background:#eef4ff}.dtable tr[data-id]{cursor:pointer}
.urg{display:inline-block;padding:3px 8px;border-radius:999px;font-weight:700;font-size:12px}.urg.red{background:#fee2e2;color:#b91c1c}.urg.amber{background:#fef3c7;color:#b45309}.urg.green{background:#dcfce7;color:#15803d}
.picklist{display:flex;gap:8px;flex-wrap:wrap;white-space:normal}.pick{border:1px solid #e5e7eb;border-radius:10px;padding:8px 10px;min-width:190px;background:#fff}.pick.blocked{opacity:.6}
.dtoast{position:fixed;right:20px;bottom:20px;padding:12px 16px;border-radius:10px;color:#fff;z-index:9999;box-shadow:0 8px 24px rgba(0,0,0,.2)}.dtoast.ok{background:#15803d}.dtoast.err{background:#b91c1c}
.badge{background:#dc2626;color:#fff;border-radius:999px;padding:0 7px;font-size:11px;margin-left:4px}
@media(max-width:1000px){.dsplit{grid-template-columns:1fr}.dright{position:static}}
.pickwrap{position:sticky;left:0;max-width:calc(62vw - 260px)}.dtable td:nth-child(3),.dtable td:nth-child(4),.dtable td:nth-child(7){white-space:normal;min-width:90px}
.pickwrap{max-width:none;position:static}.dtable td{white-space:normal!important}.picklist .pick{flex:1 1 200px;max-width:260px}
.asgback{position:fixed;inset:0;background:rgba(15,23,42,.45);z-index:9000;display:flex;align-items:flex-start;justify-content:center;padding:6vh 12px}
.asgbox{background:#fff;border-radius:14px;width:min(560px,100%);max-height:84vh;display:flex;flex-direction:column;box-shadow:0 20px 60px rgba(0,0,0,.3)}
.asghead{display:flex;justify-content:space-between;padding:14px 18px;border-bottom:1px solid #e5e7eb}.asgx{text-decoration:none;color:#64748b}
.asgbody{padding:12px 18px;overflow:auto}.asgrow{display:flex;gap:10px;align-items:center;padding:10px 0;border-bottom:1px solid #f1f5f9}
.asgrow.off{opacity:.5;filter:grayscale(1)}.asgav{font-weight:700;font-size:12px;color:#b45309}.asgav.now{color:#15803d}.asgwhy{color:#b91c1c;font-weight:600}
.btn.assign{padding:4px 10px;font-size:12px}
.astate{display:inline-block;margin-left:6px;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:700;white-space:nowrap}.astate.amber{background:#fef3c7;color:#b45309}.astate.green{background:#dcfce7;color:#15803d}
.pendbanner{position:sticky;top:0;z-index:50;display:block;background:#f59e0b;color:#fff;font-weight:800;padding:14px 16px;border-radius:12px;margin:0 0 12px;text-decoration:none;animation:pulse 1.2s ease-in-out infinite}
@keyframes pulse{0%,100%{box-shadow:0 0 0 0 rgba(245,158,11,.7)}50%{box-shadow:0 0 0 12px rgba(245,158,11,0)}}
.badge.amber{background:#f59e0b}
.badge.green{background:#16a34a}.badge.gray{background:#64748b}.badge.red{background:#dc2626}

.mtop .mback{color:inherit;text-decoration:none;font-weight:600;margin-right:8px;white-space:nowrap}
.mbottom{position:fixed;left:0;right:0;bottom:0;display:flex;background:#fff;border-top:1px solid #e5e7eb;z-index:50;padding-bottom:env(safe-area-inset-bottom)}
.mbottom a{flex:1;text-align:center;padding:8px 0 6px;color:#64748b;text-decoration:none;font-size:20px;position:relative;line-height:1}
.mbottom a span{display:block;font-size:11px;margin-top:3px}.mbottom a.on{color:#2563eb}
.mbottom a .badge{position:absolute;top:2px;left:55%;font-size:10px;padding:1px 6px}
.mobile .mcontent{padding-bottom:84px}
.upnext{border:2px solid #2563eb;box-shadow:0 4px 16px rgba(37,99,235,.15)}
.btn.ok{color:#fff}
.zipdd{position:absolute;z-index:3000;background:#fff;border:1px solid #cbd5e1;border-radius:8px;box-shadow:0 8px 24px rgba(15,23,42,.15);max-height:280px;overflow:auto;font-size:14px}
.zipopt{padding:9px 12px;cursor:pointer;display:flex;justify-content:space-between;gap:12px}.zipopt span{color:#64748b;font-variant-numeric:tabular-nums}
.zipopt.on,.zipopt:hover{background:#eff6ff}
@media (max-width:700px){.zipopt{padding:13px 12px;font-size:15px}}

/* sidebar: own scroll, full viewport height */
.sidebar{height:100vh;max-height:100vh;overflow-y:auto;overscroll-behavior:contain;display:flex;flex-direction:column;flex-shrink:0}
.sidebar .nav{flex:1 0 auto}.sidebar .sidefoot{flex-shrink:0}
.navgrp{display:flex;flex-direction:column}.navgrp>summary{cursor:pointer;list-style:none;display:flex;justify-content:space-between;align-items:center;user-select:none}
.navgrp>summary::-webkit-details-marker{display:none}.navgrp>summary::after{content:"▸";font-size:11px;transition:transform .15s}.navgrp[open]>summary::after{transform:rotate(90deg)}
.navgrp>summary:hover{color:#cbd5e1}.navgrp>a{display:flex}.navgrp:not([open])>a{display:none}
.sidebar::-webkit-scrollbar{width:8px}.sidebar::-webkit-scrollbar-thumb{background:#334155;border-radius:4px}

.dnobadge{margin-left:8px;background:#2563eb;color:#fff;border-radius:999px;padding:2px 9px;font-size:13px;font-weight:800;letter-spacing:.02em}.dno{font-family:ui-monospace,monospace;font-weight:800;color:#1e3a8a;background:#eff6ff;border:1px solid #bfdbfe;border-radius:6px;padding:1px 7px;font-size:13px}

.pill.tmpl{background:#ecfeff;color:#0e7490;margin-left:4px}

/* dense lists */
.dense-wrap{max-height:calc(100vh - 150px);overflow:auto}
table.dense{font-size:13px;border-collapse:collapse;width:100%}
table.dense th{position:sticky;top:0;z-index:2;background:#f8fafc;padding:6px 8px;font-size:11px;white-space:nowrap}
table.dense td{padding:4px 8px;height:24px;line-height:1.25;vertical-align:middle;border-top:1px solid var(--line)}
table.dense tbody tr:nth-child(even){background:#f8fafc}table.dense tbody tr:hover{background:#eef2ff}
table.dense td small{display:inline;margin-left:4px}
table.dense .nw{white-space:nowrap}table.dense .ell{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
table.dense .pill{font-size:11px;padding:1px 7px;line-height:16px}
.chip{display:inline-block;font-size:10px;line-height:14px;padding:0 5px;border-radius:4px;margin-left:5px;font-weight:600;vertical-align:1px}
.chip.tk{background:#f5f3ff;color:#6d28d9}.chip.tp{background:#ecfeff;color:#0e7490}.chip.iv{background:#ecfdf5;color:#047857}
.aicon{font-size:11px;margin-left:4px;white-space:nowrap}.aicon.amber{color:#b45309}.aicon.green{color:#047857}
.iconlink{color:#2563eb;vertical-align:-2px}
.toolbar.compact{display:flex;gap:8px;align-items:center;flex-wrap:nowrap;margin:0 0 10px}.toolbar.compact label{display:none}
.toolbar.compact input,.toolbar.compact select{height:32px;padding:4px 8px;font-size:13px}.toolbar.compact .btn{height:32px;padding:4px 12px;font-size:13px}
.toolbar.compact .searchbox{flex:1;min-width:200px}.pager{display:flex;gap:8px;align-items:center;justify-content:flex-end;padding:8px 12px;font-size:13px}
.pagehead.compact{margin-bottom:8px}.pagehead.compact h1{font-size:20px;margin:0}
.nav a.navcta{background:#2563eb;color:#fff!important;font-weight:600;border-radius:8px;margin:4px 8px 8px;justify-content:center}.nav a.navcta:hover{background:#1d4ed8}
.toolbar.compact .searchbox{position:relative;flex:0 0 280px;min-width:0}.toolbar.compact .searchbox input{width:100%;padding-left:30px}.toolbar.compact .searchbox svg{position:absolute;left:9px;top:8px}
.toolbar.compact select{max-width:170px}.pagehead.compact p{display:none}
table.dense td{padding:2px 8px;height:20px}table.dense th{padding:4px 8px}.dense-wrap{max-height:calc(100vh - 140px)}
a.kpi.kpilink{text-decoration:none;color:inherit;cursor:pointer;transition:box-shadow .15s,transform .15s,border-color .15s}a.kpi.kpilink:hover{border-color:#93c5fd;box-shadow:0 4px 14px rgba(37,99,235,.15);transform:translateY(-1px)}
th.sortable a{color:inherit;text-decoration:none;white-space:nowrap}th.sortable .sarr{margin-left:3px;font-size:9px;opacity:.35}th.sorted .sarr{opacity:1;color:#2563eb}th.sortable a:hover{color:#2563eb}
/* dispatch console */
.con{display:flex;flex-direction:column;gap:6px;margin:-8px -8px 0}
.conbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.conbar h1{font-size:19px;margin:0 8px 0 0}.conbar .grow{flex:1}
.conbar select,.confilters select,.confilters input{height:30px;font-size:13px;padding:3px 8px}.conbar .btn.sm{height:30px}
.confilters{display:flex;gap:8px;align-items:center}.confilters .searchbox{position:relative;flex:0 1 420px}.confilters .searchbox input{width:100%;padding-left:28px}.confilters .searchbox svg{position:absolute;left:8px;top:8px}
.tog{display:flex;gap:4px;align-items:center;font-size:12.5px;font-weight:500;white-space:nowrap}
.schip{border:1px solid var(--line);background:#fff;border-radius:999px;font-size:12px;padding:2px 10px;cursor:pointer}.schip b{margin-left:3px}
.schip.unassigned b{color:#b45309}.schip.awaiting b{color:#c2410c}.schip.accepted b{color:#0e7490}.schip.transit b{color:#2563eb}.schip.delivered b{color:#047857}.schip.on{background:#1e293b;color:#fff;border-color:#1e293b}.schip.on b{color:#fff}
.panes{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:10px;background:#fff;overflow:hidden;height:calc(100vh - 150px)}
.ptop{overflow:auto;min-height:120px}.pbot{overflow:auto;flex:1;min-height:100px}
.splitter{height:7px;background:#f1f5f9;border-top:1px solid var(--line);border-bottom:1px solid var(--line);cursor:row-resize;display:flex;justify-content:center;align-items:center}.splitter span{width:40px;height:3px;border-radius:2px;background:#cbd5e1}.splitter:hover{background:#e0e7ff}
.pbothead{display:flex;gap:14px;align-items:center;padding:5px 10px;position:sticky;top:0;background:#fff;z-index:3;border-bottom:1px solid var(--line);font-size:13px}
.ctbl td.ell{max-width:220px}.ctbl tbody tr[data-id]{cursor:pointer}.ctbl tr.rlate td:first-child{box-shadow:inset 3px 0 #dc2626}
.ctbl .late{color:#b91c1c;font-weight:700;background:#fee2e2;border-radius:4px;padding:0 4px}.ctbl .soon{color:#b45309;font-weight:600;background:#fef3c7;border-radius:4px;padding:0 4px}
.ctbl select.asg{height:22px;font-size:11.5px;padding:0 4px;max-width:120px;margin-left:4px}
.ctbl tr.dragging{opacity:.45}.ctbl tr.drow{cursor:pointer}.ctbl tr.drow.dropok td{background:#dbeafe!important;outline:1px dashed #2563eb}
.ctbl tr.sub2 td{background:#f8fafc;font-size:12px;padding-left:12px}.ctbl td.exp{color:#64748b;width:18px}
.dst{font-size:11px;font-weight:600;padding:1px 7px;border-radius:999px}.dst.available{background:#dcfce7;color:#166534}.dst.onload{background:#dbeafe;color:#1e40af}.dst.off{background:#f1f5f9;color:#64748b}
.colmenu,.msel{position:relative}.colpop,.mselpop{position:absolute;right:0;top:34px;z-index:50;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 30px rgba(15,23,42,.15);width:240px;max-height:420px;overflow:auto;padding:6px}
.mselpop{left:0;right:auto}.mselpop label{display:flex;gap:6px;font-size:13px;font-weight:500;padding:3px 6px}.mselbtn{height:30px;border:1px solid var(--line);border-radius:8px;background:#fff;font-size:13px;padding:0 10px;min-width:150px;text-align:left}
.colhead{display:flex;justify-content:space-between;align-items:center;padding:4px 6px}.colhead small{color:#94a3b8}
.colpop ul{list-style:none;margin:0;padding:0}.colpop li{display:flex;gap:6px;align-items:center;padding:3px 6px;border-radius:6px;font-size:13px}.colpop li:hover{background:#f1f5f9}.colpop li label{display:flex;gap:6px;font-weight:500;margin:0;flex:1}.grip{cursor:grab;color:#94a3b8;font-size:11px}
.colfoot{border-top:1px solid var(--line);margin-top:6px;padding-top:6px;display:flex;justify-content:flex-end}
.mapdrawer{position:fixed;right:16px;top:70px;width:420px;height:360px;z-index:60;border:1px solid var(--line);border-radius:12px;overflow:hidden;box-shadow:0 10px 30px rgba(15,23,42,.2);background:#fff}.mapdrawer #cmap{width:100%;height:100%}
.ctoast{position:fixed;bottom:18px;right:18px;z-index:99;padding:10px 14px;border-radius:8px;color:#fff;font-size:13px;box-shadow:0 6px 20px rgba(0,0,0,.2)}.ctoast.ok{background:#047857}.ctoast.err{background:#b91c1c}
.con select,.con input:not([type=checkbox]){width:auto}.con .confilters .searchbox{flex:1 1 380px}.con .confilters .searchbox input{width:100%}
.con .conbar select{max-width:180px}.con .confilters select{max-width:170px}.con .colpop{left:0;right:auto}
.ctbl td.ell{max-width:190px}.ctbl{table-layout:auto}
.ctbl .cc{max-width:170px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.repgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:14px}.repcat h2{font-size:15px;margin:0 0 8px}.repcat ul{list-style:none;margin:0;padding:0}
.repcat li{padding:5px 0;border-top:1px solid var(--line);font-size:13.5px;display:flex;flex-wrap:wrap;align-items:center;gap:6px}.repcat li a{font-weight:600}.repcat .rdesc{flex-basis:100%;color:#64748b;font-size:12px}
.info{display:inline-flex;width:15px;height:15px;border-radius:50%;background:#e2e8f0;color:#475569;font-size:10px;font-weight:700;justify-content:center;align-items:center;cursor:help}
.favs{display:flex;flex-wrap:wrap;gap:8px}.fav{border:1px solid var(--line);border-radius:999px;padding:3px 6px 3px 12px;font-size:13px;background:#f8fafc;display:inline-flex;gap:6px;align-items:center}.fav .x{border:0;background:none;cursor:pointer;color:#94a3b8;font-size:15px}
.rtable td.up,.rtable th .up{color:#047857}.rtable td.down{color:#b91c1c}.rtable tfoot th{position:sticky;bottom:0;background:#eef2ff;font-size:12.5px;padding:5px 8px;border-top:2px solid #c7d2fe}
.rtable td.cc2{max-width:260px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.spark{vertical-align:middle}
.rtable td.heat{background:color-mix(in srgb,#2563eb var(--h),#fff)}.hbar{display:grid;grid-template-columns:220px 1fr 110px;gap:8px;align-items:center;font-size:12.5px;padding:2px 0}.hbar .hl{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hbar .hb{background:#f1f5f9;border-radius:4px;height:12px}.hbar .hb i{display:block;height:100%;background:#3b82f6;border-radius:4px}.hbar b{text-align:right}
.favbox{position:relative}.favbox summary{list-style:none}.rfilters{flex-wrap:wrap}.rfilters .msel{position:relative}
.vicon{background:none;border:0}.sicon b{display:flex;width:20px;height:20px;border-radius:50% 50% 50% 0;transform:rotate(-45deg);justify-content:center;align-items:center;color:#fff;font:800 10px system-ui;box-shadow:0 1px 3px rgba(0,0,0,.4);border:1.5px solid #fff}.sicon b.sp{background:#0f766e}.sicon b.sd{background:#be123c}
.vlegend{display:flex;gap:12px;flex-wrap:wrap;font-size:12px;color:#475569;padding:6px 10px;background:#fff;border-radius:8px;box-shadow:0 1px 4px rgba(0,0,0,.15)}.vlegend i{display:inline-block;width:11px;height:11px;border-radius:3px;margin-right:4px;vertical-align:-1px}
.fitbtn{background:#fff;border:1px solid #cbd5e1;border-radius:6px;padding:5px 10px;font:600 12px system-ui;cursor:pointer;box-shadow:0 1px 4px rgba(0,0,0,.15)}.fitbtn:hover{background:#eff6ff}
.vavatar{width:44px;height:34px;flex:0 0 44px}

.dsplit2{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(320px,1fr);gap:10px;align-items:start}.dright2{position:sticky;top:8px;overflow:hidden}.dright2 #cmap{height:calc(100vh - 200px);min-height:320px}
.dleft2 .panes{height:calc(100vh - 150px)}@media(max-width:1100px){.dsplit2{grid-template-columns:1fr}.dright2{position:static}}
.recgo{height:20px!important;padding:0 7px!important;font-size:11.5px!important}.recwhy{font-size:11.5px;color:#475569;margin-left:4px}
.ctbl .cc.k-rec{max-width:340px}
.qt{display:flex;gap:3px;margin-top:3px;flex-wrap:wrap}.qt button{font-size:11px;padding:1px 6px;border:1px solid #cbd5e1;background:#f8fafc;border-radius:5px;cursor:pointer}.qt button[data-q=asap]{background:#2563eb;color:#fff;border-color:#2563eb}
.qt input{font-size:11px;padding:1px 5px!important;height:20px!important;width:86px!important}.qt input.bad{border-color:#dc2626!important}
.oinfo .row{gap:8px}.stoprow .row{gap:8px 10px}

.recs{display:inline-flex;gap:3px;white-space:nowrap;overflow:hidden;max-width:100%}.recgo{font-size:11.5px;line-height:18px;height:20px;padding:0 6px;border-radius:10px;border:1px solid #cbd5e1;background:#f8fafc;color:#334155;cursor:pointer;white-space:nowrap}
.recgo.r1{background:#2563eb;color:#fff;border-color:#2563eb;font-weight:600}.recgo:hover{filter:brightness(.95)}
.dwellhint{display:block;font-size:11.5px;color:#475569;margin-top:3px}.dwellhint.slow{color:#b45309;font-weight:600}
.rectip{position:fixed;z-index:9999;max-width:430px;background:#0f172a;color:#e2e8f0;font-size:12px;line-height:1.45;padding:9px 11px;border-radius:8px;white-space:pre-wrap;box-shadow:0 8px 24px rgba(0,0,0,.25);pointer-events:none}
.qtl{font-size:11px;color:#64748b;align-self:center;margin-left:4px}
.hourshint{font-size:11.5px;color:#475569;margin-top:2px}.hourshint .hwarn{color:#b91c1c;font-weight:600}.hourshint a{font-size:11.5px;margin-left:6px}
/* ---- express order entry ---- */
.xph{margin-bottom:8px}.xph h1{font-size:20px;margin:0}.xbtns{display:flex;gap:6px;align-items:center}
form.express .card{padding:10px 12px;margin-bottom:8px}
form.express .frow{display:flex;align-items:center;gap:8px;min-height:30px;margin:0 0 3px}
form.express .frow>label{flex:0 0 92px;margin:0;font-size:12px;color:#475569;text-align:right;white-space:nowrap}
form.express .frow .fin{flex:1;display:flex;gap:4px;align-items:center;min-width:0}
form.express .fin input,form.express .fin select,form.express .fin textarea{height:28px;padding:3px 7px;font-size:13px;min-width:0;flex:1}
form.express .fin textarea{resize:none;line-height:1.4;overflow:hidden}
form.express .w12{flex:0 0 46px!important}form.express .w20{flex:0 0 70px!important}form.express .w25{flex:0 0 80px!important}form.express .w30{flex:0 0 64px!important}form.express .w40{flex:0 0 120px!important}
form.express input.ro{background:#f1f5f9;color:#334155}
.xtoprow{display:grid;grid-template-columns:2fr 1fr 2fr;gap:4px 14px}
.xhead{display:flex;align-items:center;gap:10px;margin-bottom:6px}.xhead .grow,.stophead .grow,.xsubmit .grow{flex:1}
#stoplist.two{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px}
#stoplist.two .stoprow{border:1px solid #e2e8f0;border-radius:8px;padding:6px 8px;margin:0}
#stoplist.two .stoprow.pickup{border-top:3px solid #2563eb}#stoplist.two .stoprow.drop{border-top:3px solid #16a34a}
#stoplist.two .stype,#stoplist.two .stopbtns,#stoplist.two .stopfrom{display:none!important}
#stoplist.multi .xsw{display:none}
#stoplist.multi .stoprow{border:1px solid #e2e8f0;border-radius:8px;padding:6px 8px;margin-bottom:6px}
#stoplist.multi .frows{display:grid;grid-template-columns:1fr 1fr;gap:0 12px}
.stophead{display:flex;align-items:center;gap:8px;margin-bottom:4px}.stophead .stopno{font-size:13px}
.sideacts{display:flex;gap:10px}.sideacts .lnk{background:none;border:0;padding:0;color:#2563eb;font-size:12px;cursor:pointer}
form.express .locpick{display:flex;gap:6px;align-items:center;margin-bottom:4px;position:relative}form.express .locsearch{height:28px;font-size:13px;flex:1}
form.express .locbadge{font-size:11px;white-space:nowrap}
form.express .wrow .fin{flex-wrap:nowrap}form.express .qt{padding:2px 6px;font-size:11px}
.xship .xcols{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:0 18px}
.iconbtn{flex:0 0 28px;height:28px;border:1px solid #cbd5e1;background:#fff;border-radius:6px;cursor:pointer;font-size:12px}
.ntft{border-collapse:collapse;font-size:12px}.ntft th{font-weight:500;color:#64748b;padding:0 6px;font-size:11px}.ntft td{padding:1px 6px;text-align:center}.ntft td:first-child{text-align:left;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.frow.ntf{align-items:flex-start}.frow.ntf .fin{flex-direction:column;align-items:flex-start}
.xacc summary{font-size:12px;color:#2563eb;cursor:pointer;margin-left:100px}
.xsubmit{position:sticky;bottom:0;z-index:5;display:flex;align-items:center;gap:12px;background:#fff;border:1px solid #e2e8f0;border-radius:10px;padding:8px 12px;box-shadow:0 -4px 12px rgba(15,23,42,.06)}
.xsubmit .quotebox{margin:0;padding:0;border:0;background:none;display:flex;gap:8px;align-items:baseline}
.recentwrap{position:relative}.recentpop{position:absolute;right:0;top:34px;z-index:50;width:440px;max-height:420px;overflow:auto;background:#fff;border:1px solid #e2e8f0;border-radius:10px;box-shadow:0 10px 30px rgba(15,23,42,.15);padding:6px}
.recentpop.floatpop{position:absolute}.rpi{display:flex;gap:8px;align-items:center;justify-content:space-between;padding:6px;border-bottom:1px solid #f1f5f9;font-size:13px}.rpi:last-child{border:0}
@media(max-width:860px){#stoplist.two,.xship .xcols,.xtoprow,#stoplist.multi .frows{grid-template-columns:1fr}form.express .frow>label{flex-basis:80px}}

.tplx .frow{display:flex;align-items:center;gap:8px;min-height:30px;margin:0 0 3px}.tplx .frow>label{flex:0 0 92px;margin:0;font-size:12px;color:#475569;text-align:right}.tplx .fin{flex:1;display:flex;gap:4px}.tplx .fin input,.tplx .fin select,.tplx .fin textarea{height:28px;padding:3px 7px;font-size:13px;flex:1;min-width:0}.tplx .w12{flex:0 0 46px}.tplx .w20{flex:0 0 70px}.tplx .w40{flex:0 0 120px}.tplx #stoplist.two .stoprow{border:1px solid #e2e8f0;border-radius:8px;padding:6px 8px}.tplx .lnk{background:none;border:0;color:#2563eb;font-size:12px;cursor:pointer}

.xhead [hidden]{display:none!important}
form.express .frow{min-height:28px;margin-bottom:2px}form.express .card{padding:8px 12px;margin-bottom:6px}
form.express .wrow .fin>input[type=datetime-local]{flex:0 0 178px}
form.express .fin .qt{display:flex;flex:1;gap:2px;align-items:center;margin:0;flex-wrap:nowrap;min-width:0}
form.express .fin .qt button{padding:1px 5px;font-size:11px;height:22px}form.express .fin .qt input{flex:0 0 72px;height:22px;font-size:11px;padding:1px 4px}
form.express .qt:has([data-q=asap]) [data-q=today],form.express .qt:has([data-q=asap]) [data-q=tmrw]{display:none}
form.express .fin .qt button{white-space:nowrap}form.express .qtl{white-space:nowrap}
form.express .qtl{font-size:10px;margin:0 1px}
.xph{margin:-8px 0 6px}form.express .xhead{margin-bottom:4px}

.stoprow.drop .pickonly{display:none!important}
form.express .qtl{display:none}
.xtop{padding:4px 12px!important}
form.express .frow{margin-bottom:1px}
form.express .wrow .fin{overflow:hidden}form.express .qt:has([data-q=asap]) input{flex:0 0 54px!important}form.express .wrow .fin>input[type=datetime-local]{flex:0 0 168px}
.dmapcard{padding:10px 12px}.dmap{display:grid;grid-template-columns:200px minmax(0,1.3fr) minmax(0,1fr);gap:10px;height:300px}
#dmmap{border-radius:8px;border:1px solid #e2e8f0;height:300px}
.dmlist{overflow:auto;display:flex;flex-direction:column;gap:2px}.dmrow{display:grid;grid-template-columns:30px 1fr;text-align:left;background:#fff;border:1px solid transparent;border-radius:6px;padding:3px 6px;cursor:pointer;font-size:13px}
.dmrow small{grid-column:2;color:#64748b;font-size:11px}.dmrow .dmsw{grid-row:span 2;display:flex;align-items:center}.dmrow.on{border-color:#2563eb;background:#eff6ff}.dmrow.offline{opacity:.6}
.dmorders{overflow:auto;font-size:13px}.dmhead{margin-bottom:6px}.dmtbl td,.dmtbl th{padding:3px 6px;font-size:12px}.dmtbl .ell{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.empty-sm{color:#64748b;padding:18px;text-align:center;border:1px dashed #cbd5e1;border-radius:8px}
@media(max-width:900px){.dmap{grid-template-columns:1fr;height:auto}#dmmap{height:260px}}

.dmsw i{display:block;width:12px;height:12px;border-radius:50%}.dmorders .nowrap{white-space:nowrap}.dmtbl .ell{max-width:150px}.dmap{grid-template-columns:190px minmax(0,1.1fr) minmax(0,1.2fr)}

.leaflet-marker-icon.vsel{filter:drop-shadow(0 0 0 #2563eb) drop-shadow(0 0 4px #2563eb) drop-shadow(0 0 3px #2563eb);z-index:3000!important}

.dmap{grid-template-columns:180px minmax(0,1fr) minmax(0,1.45fr)}
.dmtbl{width:100%;table-layout:fixed}.dmtbl th,.dmtbl td{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dmtbl th:nth-child(1){width:84px}.dmtbl th.num,.dmtbl td.num{width:66px;text-align:right}.dmtbl .ell{max-width:none}
.dmtbl td .pill{font-size:10px;padding:1px 6px}.dmap{grid-template-columns:170px minmax(0,.9fr) minmax(0,1.6fr)}

/* dashboard map v2: bigger map, driver list with orders expanded beneath the selected driver */
.dmap{grid-template-columns:minmax(330px,400px) minmax(0,1fr)!important;height:480px!important}#dmmap{height:480px!important}
.dmlist{font-size:14.5px;gap:4px;padding-right:4px}.dmitem{border:1px solid #e2e8f0;border-radius:8px;background:#fff}.dmitem.on{border-color:#2563eb;box-shadow:0 0 0 1px #2563eb inset}
.dmrow{grid-template-columns:22px 1fr 18px!important;width:100%;font-size:14.5px!important;padding:9px 10px!important;border:0!important;background:none!important}
.dmrow small{grid-column:2/4!important;font-size:12.5px!important;margin-top:2px}.dmrow .dmsw{grid-row:span 1!important}.dmrow b{font-weight:600}.dmcar{color:#64748b;text-align:right}
.dmords{border-top:1px solid #e2e8f0;padding:4px 8px 8px 30px;display:flex;flex-direction:column;gap:4px;background:#f8fafc;border-radius:0 0 8px 8px}
.dmord{display:block;padding:7px 8px;border-radius:6px;color:inherit;text-decoration:none;line-height:1.45}.dmord:hover{background:#eef2ff}
.dmo1{display:flex;gap:8px;align-items:center;font-size:14.5px}.dmo1 .mono{color:#1d4ed8}.dmo1 .pill{font-size:12px}.dmamt{margin-left:auto;font-weight:600}
.dmo2{font-size:13.5px;color:#334155;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dmo3{font-size:12.5px;color:#64748b}.dmhint{padding:8px 4px}
@media(max-width:900px){.dmap{grid-template-columns:1fr!important;height:auto!important}#dmmap{height:340px!important}}
/* LaneLink brand lockup */
.brandtile{display:inline-grid;place-items:center;background:#fff;border-radius:8px;flex:none}.brandtile img{width:84%;height:84%}
.wm{font-weight:800;letter-spacing:-.02em;font-size:18px}.wl{color:#fff}.wk{color:#3b82f6}
.pill.warn{background:#fff7ed;color:#c2410c}.pill.src-lane{background:#ecfdf5;color:#047857}.pill.src-formula{background:#eff6ff;color:#1d4ed8}.pill.src-quote{background:#fef2f2;color:#b91c1c}
.setuph{font-size:13px;text-transform:uppercase;letter-spacing:.04em;color:#64748b;margin:14px 0 6px;border-top:1px solid var(--line);padding-top:10px}.setuprow{display:grid;grid-template-columns:110px 1fr;gap:8px;align-items:center;margin:4px 0}.chips{display:flex;flex-wrap:wrap;gap:4px 16px}
.md{display:grid;grid-template-columns:300px 1fr;gap:12px;align-items:start}.mdlist{padding:0}.mdtools{display:flex;gap:6px;padding:8px;border-bottom:1px solid var(--line)}.mdtools input{flex:1;padding:6px 8px}
#stlist{list-style:none;margin:0;padding:0;max-height:calc(100vh - 190px);overflow:auto}#stlist a{display:flex;flex-direction:column;gap:2px;padding:7px 10px;border-bottom:1px solid var(--line);color:inherit;text-decoration:none;font-size:14px}
#stlist a:hover{background:#f8fafc}#stlist a.on{background:#eff6ff;box-shadow:inset 3px 0 0 #2563eb}#stlist .nm{font-weight:600}#stlist .meta{display:flex;gap:6px;align-items:center;font-size:12px;color:#64748b}#stlist .pill{padding:1px 7px;font-size:11px}
.pill.ok{background:#ecfdf5;color:#047857}.mddetail{padding:12px 16px}.mdhead{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px}.mdhead h2{margin:0}
.kv{display:grid;grid-template-columns:120px 1fr;gap:6px 10px;align-items:center}.kv>label{font-size:13px;color:#475569;margin:0}.kv input,.kv select{padding:6px 8px}.mdbtns{display:flex;gap:6px;margin-top:12px;border-top:1px solid var(--line);padding-top:10px}
@media(max-width:800px){.md{grid-template-columns:1fr}}
.invlines td{vertical-align:top;font-size:13px;padding:7px 8px}.invlines small{display:block;color:#64748b;font-size:11.5px}.invlines .pd{display:inline-block;min-width:34px;font-size:10px;font-weight:700;color:#475569}.invlines .chl{display:flex;justify-content:space-between;gap:8px}
.typepick{display:grid;gap:6px;margin:4px 0}.typepick label{align-items:flex-start;gap:8px}
.typepick label{display:flex!important;flex-direction:row!important}.typepick input[type=radio]{width:auto!important;margin:3px 0 0;flex:none}
@media(max-width:1000px){.sidebar{display:none}}
.pgrade{display:inline-block;font-size:11.5px;font-weight:800;border-radius:99px;padding:3px 8px;white-space:nowrap;flex:none}.pgrade small{font-weight:600}.pgrade.gA{background:#dcfce7;color:#166534}.pgrade.gB{background:#ecfccb;color:#3f6212}.pgrade.gC{background:#fef3c7;color:#92400e}.pgrade.gD{background:#ffedd5;color:#9a3412}.pgrade.gF{background:#fee2e2;color:#991b1b}.pgrade.none{background:#f1f5f9;color:#64748b}
/* ---- UX polish (Steve 10/15 task D): denser layout, no horizontal overflow, consistent next-step strip ---- */
.content{padding:20px 24px}.pagehead{margin-bottom:14px}.pagehead h1{margin:2px 0 0}.pagehead>div:last-child{flex-wrap:wrap}
.card{padding:16px;margin-bottom:14px}.card h2,.card h3{margin-top:0}.grid2,.grid3{gap:14px}.grid2>*,.grid3>*,.row>*,.row2>*,.row4>*{min-width:0}
th{padding:8px 12px}td{padding:8px 12px}table.dense td,table.dense th{padding:5px 8px}
.kpis{gap:12px}.kv{row-gap:10px}
.nextsteps{display:flex;align-items:center;gap:6px;flex-wrap:wrap;background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:8px 12px;margin-bottom:14px;font-size:13px}
.nextsteps .ns{color:var(--muted);padding:3px 9px;border-radius:999px;background:#f1f5f9;font-weight:600}.nextsteps .ns.done{color:#15803d;background:#dcfce7}.nextsteps .ns.cur{color:#fff;background:#2563eb}
.nextsteps .nsarrow{color:#cbd5e1}.nextsteps .nsgo{margin-left:auto;display:flex;gap:6px;flex-wrap:wrap}
img,canvas,video,iframe{max-width:100%}
@media(max-width:640px){.content{padding:10px}.card{padding:12px;margin-bottom:10px}.pagehead h1{font-size:20px}.pagehead>div:last-child .btn{padding:7px 10px;font-size:13px}
 .card>table,.card>div>table{display:block;overflow-x:auto}.nextsteps .nsgo{margin-left:0;width:100%}.mcard{padding:12px 14px}}
.menubtn{display:none;border:1px solid var(--line);background:#fff;border-radius:8px;font-size:18px;line-height:1;padding:6px 9px;cursor:pointer}.navscrim{display:none}
@media(max-width:1000px){.menubtn{display:inline-block}body.navopen .sidebar{display:flex!important;z-index:200;width:260px;box-shadow:0 0 40px rgba(0,0,0,.35)}
 body.navopen .navscrim{display:block;position:fixed;inset:0;background:rgba(15,23,42,.45);z-index:150}.topbar .who span{display:none}.topbar{padding:0 12px}}
.kpi{padding:14px}.kpi>div{min-width:0}
@media(max-width:640px){.card{overflow-x:auto}.pagehead form,.pagehead>div:last-child{display:flex;flex-wrap:wrap;gap:6px;max-width:100%}.pagehead form input{width:100%!important;max-width:100%}
 .kpis{grid-template-columns:1fr 1fr;gap:8px}.kpi{padding:10px;gap:8px}.kpi .kic{display:none}.kpi b{font-size:18px;word-break:break-word}
 .toolbar{flex-wrap:wrap}.toolbar select,.toolbar input{max-width:100%}}
@media(max-width:640px){.toolbar,.toolbar.compact{flex-wrap:wrap!important}.toolbar>*{max-width:100%}.toolbar .searchbox,.toolbar>div{flex:1 1 100%}}
/* driver bottom nav is always present: keep check-in action bar above it (it was covered on phones) */
body:has(.mbottom) .actionbar{bottom:calc(52px + env(safe-area-inset-bottom));padding-bottom:12px}
body:has(.mbottom) main{padding-bottom:150px}
