:root{
  --navy:#0f1b2d; --navy-2:#18294a; --ink:#16202e; --muted:#5d6b80; --line:#e3e8ef; --bg:#f4f6f9; --card:#fff;
  --accent:#e8742c; --accent-2:#c95f1c; --ok:#14804a; --ok-bg:#e5f5ec; --warn:#a15c00; --warn-bg:#fff4dd;
  --err:#b42318; --err-bg:#fdecea; --blue:#1d5fd1; --blue-bg:#e8f0fd; --violet:#6b3fd6; --violet-bg:#efe9fd;
  --radius:12px; --shadow:0 1px 2px rgba(16,24,40,.06),0 1px 3px rgba(16,24,40,.08);
}
*{box-sizing:border-box}
html,body{margin:0}
body{font:15px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Inter,Arial,sans-serif;color:var(--ink);background:var(--bg)}
a{color:var(--blue);text-decoration:none}
a:hover{text-decoration:underline}
h1{font-size:22px;margin:0 0 4px} h2{font-size:17px;margin:0 0 12px} h3{font-size:15px;margin:0 0 8px}
.muted{color:var(--muted)} .small{font-size:13px} .mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.right{text-align:right} .nowrap{white-space:nowrap}

/* top bar */
.topbar{background:var(--navy);color:#fff;position:sticky;top:0;z-index:20}
.topbar .in{max-width:1240px;margin:0 auto;display:flex;align-items:center;gap:18px;padding:0 16px;height:56px}
.brand{font-weight:800;letter-spacing:.3px;color:#fff;display:flex;align-items:center;gap:8px;font-size:16px}
.brand .dot{width:26px;height:26px;border-radius:7px;background:var(--accent);display:grid;place-items:center;font-size:13px}
.topbar nav{display:flex;gap:4px;flex:1;overflow-x:auto}
.topbar nav a{color:#c9d3e3;padding:8px 12px;border-radius:8px;white-space:nowrap}
.topbar nav a.on,.topbar nav a:hover{background:var(--navy-2);color:#fff;text-decoration:none}
.topbar .who{color:#c9d3e3;font-size:13px;white-space:nowrap}
.topbar .who a{color:#fff;margin-left:8px}

.wrap{max-width:1240px;margin:0 auto;padding:20px 16px 60px}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px}
.card + .card{margin-top:16px}
.grid > .card + .card{margin-top:0}
.grid{display:grid;gap:16px}
.g2{grid-template-columns:1fr 1fr} .g3{grid-template-columns:repeat(3,1fr)}
.side{grid-template-columns:minmax(0,1fr) 340px}
@media(max-width:900px){.g2,.g3,.side{grid-template-columns:1fr}}

/* flash */
.flash{padding:12px 14px;border-radius:10px;margin-bottom:14px;font-weight:500}
.flash.ok{background:var(--ok-bg);color:var(--ok)} .flash.error{background:var(--err-bg);color:var(--err)}

/* buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid var(--line);background:#fff;color:var(--ink);
  padding:9px 14px;border-radius:9px;font:inherit;font-weight:600;cursor:pointer;text-decoration:none;white-space:nowrap}
.btn:hover{text-decoration:none;border-color:#c5cedb}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff} .btn.primary:hover{background:var(--accent-2)}
.btn.dark{background:var(--navy);border-color:var(--navy);color:#fff}
.btn.green{background:var(--ok);border-color:var(--ok);color:#fff}
.btn.danger{color:var(--err)} .btn.sm{padding:6px 10px;font-size:13px} .btn.block{width:100%}
.btn.xl{padding:16px 18px;font-size:17px;border-radius:12px}
.btn[disabled]{opacity:.5;pointer-events:none}

/* forms */
label{display:block;font-size:13px;font-weight:600;color:var(--muted);margin:0 0 4px}
input,select,textarea{width:100%;font:inherit;padding:9px 11px;border:1px solid #cfd7e3;border-radius:9px;background:#fff;color:var(--ink)}
textarea{min-height:70px;resize:vertical}
input:focus,select:focus,textarea:focus{outline:2px solid #f3c4a5;border-color:var(--accent)}
.field{margin-bottom:12px}
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.row > .grow{flex:1}

/* status pills */
.pill{display:inline-block;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:700;letter-spacing:.2px;white-space:nowrap}
.pill.new{background:var(--warn-bg);color:var(--warn)} .pill.assigned{background:var(--blue-bg);color:var(--blue)}
.pill.picked_up{background:var(--violet-bg);color:var(--violet)} .pill.delivered{background:var(--ok-bg);color:var(--ok)}
.pill.cancelled{background:#eceff3;color:var(--muted)} .pill.review{background:var(--err-bg);color:var(--err)}

/* tabs */
.tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px}
.tabs a{padding:8px 14px;border-radius:999px;background:#fff;border:1px solid var(--line);color:var(--ink);font-weight:600;font-size:14px}
.tabs a.on{background:var(--navy);color:#fff;border-color:var(--navy)} .tabs a:hover{text-decoration:none}
.tabs .n{opacity:.7;margin-left:4px;font-weight:500}

/* load table */
table{width:100%;border-collapse:collapse}
th{font-size:12px;text-transform:uppercase;letter-spacing:.4px;color:var(--muted);text-align:left;padding:10px 12px;border-bottom:1px solid var(--line);background:#fafbfc}
td{padding:12px;border-bottom:1px solid var(--line);vertical-align:top}
tr.click{cursor:pointer} tr.click:hover td{background:#fbfcfe}
.tablecard{padding:0;overflow:hidden} .tablecard .scroll{overflow-x:auto}
.lane{font-weight:600} .lane .arrow{color:var(--accent);margin:0 6px}
.docdots span{display:inline-block;font-size:11px;font-weight:700;padding:2px 6px;border-radius:5px;margin-right:3px;background:#eceff3;color:#98a2b3}
.docdots span.has{background:var(--ok-bg);color:var(--ok)}

/* load detail */
.kv{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:14px}
.kv div b{display:block;font-size:12px;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.3px}
.big-rate{font-size:28px;font-weight:800;color:var(--ok)}
.stop{border:1px solid var(--line);border-radius:10px;padding:14px;position:relative;background:#fff}
.stop + .stop{margin-top:12px}
.stop .tag{font-size:12px;font-weight:800;letter-spacing:.5px;text-transform:uppercase}
.stop.pickup .tag{color:var(--blue)} .stop.delivery .tag{color:var(--ok)}
.stop .name{font-size:16px;font-weight:700;margin:4px 0}
.stop .appt{background:#fff7f1;border:1px solid #f6d9c6;border-radius:8px;padding:8px 10px;margin-top:8px;font-weight:600}
.timeline{list-style:none;margin:0;padding:0}
.timeline li{padding:8px 0;border-bottom:1px dashed var(--line);font-size:14px}
.timeline li:last-child{border:0}
.doclist{list-style:none;margin:0;padding:0}
.doclist li{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--line)}
.doclist li:last-child{border:0}
.thumbs{display:flex;gap:8px;flex-wrap:wrap}
.thumbs a img{width:84px;height:84px;object-fit:cover;border-radius:8px;border:1px solid var(--line)}
details.raw summary{cursor:pointer;color:var(--muted);font-weight:600}
details.raw pre{white-space:pre-wrap;font-size:12px;background:#f7f8fa;padding:12px;border-radius:8px;max-height:420px;overflow:auto}

/* driver picker */
.driver-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px}
.driver-card{display:block;border:1px solid var(--line);border-radius:12px;padding:14px;background:#fff;color:var(--ink)}
.driver-card:hover{border-color:var(--accent);text-decoration:none;box-shadow:0 0 0 3px #fbe3d3}
.driver-card .nm{font-weight:700;font-size:16px}
.avatar{width:38px;height:38px;border-radius:50%;background:var(--navy);color:#fff;display:grid;place-items:center;font-weight:700;flex:none}

/* login */
.login{min-height:100vh;display:grid;place-items:center;padding:20px;background:linear-gradient(160deg,var(--navy),#22375e)}
.login .card{width:100%;max-width:380px;padding:28px}

/* driver app (phone) */
body.driver{background:#eef1f5}
.dwrap{max-width:560px;margin:0 auto;padding:14px 14px 90px}
.dtop{background:var(--navy);color:#fff;padding:14px 16px;position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between}
.dtop a{color:#c9d3e3;font-size:14px}
.dload{display:block;background:#fff;border-radius:14px;padding:16px;box-shadow:var(--shadow);color:var(--ink);margin-bottom:12px;border-left:5px solid var(--blue)}
.dload.picked_up{border-left-color:var(--violet)} .dload.delivered{border-left-color:var(--ok)}
.dload:hover{text-decoration:none}
.dload .num{font-weight:800;font-size:17px}
.dstop{display:flex;gap:12px;padding:10px 0}
.dstop .ic{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:13px;color:#fff;flex:none}
.dstop .ic.p{background:var(--blue)} .dstop .ic.d{background:var(--ok)}
.step{background:#fff;border-radius:14px;padding:16px;box-shadow:var(--shadow);margin-bottom:12px}
.step.done{opacity:.95;border:2px solid var(--ok-bg)}
.step.locked{opacity:.55}
.step h3{display:flex;align-items:center;gap:8px;font-size:16px}
.step .badge{width:26px;height:26px;border-radius:50%;background:var(--navy);color:#fff;display:grid;place-items:center;font-size:13px}
.step.done .badge{background:var(--ok)}
.preview{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0}
.preview img{width:76px;height:76px;object-fit:cover;border-radius:8px}
.installbar{position:fixed;left:12px;right:12px;bottom:12px;background:var(--navy);color:#fff;border-radius:14px;padding:12px 14px;display:none;align-items:center;gap:10px;box-shadow:0 8px 24px rgba(0,0,0,.25);z-index:50}
.installbar.show{display:flex}
.installbar .grow{flex:1;font-size:14px}

/* notifications */
.bell{background:var(--navy-2);color:#fff;border:0;border-radius:8px;padding:7px 11px;font:inherit;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap}
.bell[data-push-state=on]{background:#1d3b2c;color:#9be3b8}
.livealert{position:fixed;top:70px;right:16px;width:min(380px,calc(100vw - 32px));background:#fff;border:2px solid var(--accent);border-radius:14px;
  box-shadow:0 18px 50px rgba(15,27,45,.3);z-index:100;padding:16px;display:none;animation:pop .25s ease-out}
.livealert.show{display:block}
.livealert .ttl{font-weight:800;font-size:17px;margin-bottom:8px}
.livealert .items a{display:block;padding:10px;border-radius:9px;background:#fff7f1;color:var(--ink);margin-bottom:8px}
.livealert .items a:hover{text-decoration:none;background:#fdebdc}
@keyframes pop{from{transform:translateY(-10px);opacity:0}to{transform:none;opacity:1}}
.alertcard{background:var(--navy);color:#fff;border-radius:14px;padding:14px 16px;margin-bottom:12px;display:flex;gap:12px;align-items:center}
.alertcard .grow{flex:1;font-size:14px}
