:root{--bg:#FBF7F5;--paper:#fff;--blush:#F4E6E3;--fg:#3F3235;--mute:#6F6064;--line:rgba(74,59,62,.09);--rose:#B76E79;--rose-ink:#A35D69;--rose2:#9E5A65;--ok:#5E8B6E;--warn:#C08A3E;--ease:cubic-bezier(.23,1,.32,1);--r:16px;--sh:0 1px 2px rgba(63,50,53,.04),0 4px 16px rgba(63,50,53,.06)}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
body{background:var(--bg);color:var(--fg);font:400 15px/1.5 Inter,system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;min-height:100dvh;padding-bottom:calc(104px + env(safe-area-inset-bottom))}
button,input,select,textarea{font:inherit;color:inherit}
a{color:var(--rose2)}
.top{position:sticky;top:0;z-index:20;background:rgba(251,247,245,.85);backdrop-filter:saturate(1.6) blur(14px);-webkit-backdrop-filter:saturate(1.6) blur(14px);border-bottom:1px solid var(--line);padding:calc(10px + env(safe-area-inset-top)) 16px 10px;display:flex;align-items:center;gap:10px}
.top h1{font:600 17px/1.2 Inter,system-ui;letter-spacing:-.01em;flex:1}
.top .logo{width:28px;height:28px;border-radius:8px;background:var(--rose-ink);display:grid;place-items:center;color:#fff;font-weight:700;font-size:14px}
.wrap{max-width:720px;margin:0 auto;padding:14px 16px}
.tabs{position:fixed;bottom:0;left:0;right:0;z-index:30;display:flex;justify-content:space-around;background:rgba(255,255,255,.9);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-top:1px solid var(--line);padding:6px 6px calc(6px + env(safe-area-inset-bottom))}
.tabs a{flex:1;text-align:center;text-decoration:none;color:var(--mute);font-size:11px;font-weight:500;padding:6px 0;border-radius:12px;transition:color .2s var(--ease)}
.tabs a svg{display:block;margin:0 auto 2px;width:22px;height:22px}
.tabs a.on{color:var(--rose2)}
.card{background:var(--paper);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh);padding:14px;margin-bottom:10px}
.row{display:flex;align-items:center;gap:10px}.grow{flex:1;min-width:0}
.muted{color:var(--mute);font-size:13px}.small{font-size:12px}
.t{font-weight:600;letter-spacing:-.01em}.ell{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pill{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:500;padding:3px 9px;border-radius:999px;background:var(--blush);color:#87475A;white-space:nowrap}
.pill.ok{background:#E7F0EA;color:#3F6B4E}.pill.warn{background:#F5E1DA;color:#86402C}.pill.gray{background:#F1EDEC;color:var(--mute)}
.pill i{width:6px;height:6px;border-radius:50%;background:currentColor;font-style:normal}
.demo{font-size:10px;font-weight:700;letter-spacing:.06em;color:#5E5250;background:#EEE6E4;padding:2px 6px;border-radius:6px}
.btn{appearance:none;border:0;border-radius:14px;background:var(--rose-ink);color:#fff;font-weight:600;padding:12px 16px;min-height:46px;cursor:pointer;transition:transform .16s var(--ease),background .2s var(--ease),opacity .2s;display:inline-flex;align-items:center;justify-content:center;gap:8px;text-decoration:none}
.btn:active{transform:scale(.97)}.btn:hover{background:var(--rose2)}
.btn.ghost{background:var(--paper);color:var(--fg);border:1px solid var(--line)}.btn.ghost:hover{background:var(--blush)}
.btn.big{width:100%;min-height:64px;font-size:18px;border-radius:18px}
.btn.sm{min-height:44px;padding:9px 14px;font-size:13px;border-radius:11px}
.btn[disabled]{opacity:.5;pointer-events:none}
.field{display:block;margin-bottom:12px}.field span{display:block;font-size:12px;font-weight:500;color:var(--mute);margin-bottom:5px}
input,select,textarea{width:100%;background:var(--paper);border:1px solid rgba(74,59,62,.15);border-radius:12px;padding:12px;min-height:46px;outline:none;transition:border-color .2s,box-shadow .2s}
input:focus,select:focus,textarea:focus{border-color:var(--rose);box-shadow:0 0 0 4px rgba(183,110,121,.14)}
.search{position:relative}.search input{padding-left:38px}.search svg{position:absolute;left:12px;top:13px;width:18px;color:var(--mute)}
.chips{display:flex;gap:6px;overflow-x:auto;padding:10px 0 4px;scrollbar-width:none;margin:0 -16px;padding-left:16px;padding-right:16px}.chips::-webkit-scrollbar{display:none}
.chip{flex:none;border:1px solid var(--line);background:var(--paper);border-radius:999px;padding:7px 12px;font-size:13px;font-weight:500;cursor:pointer;transition:all .2s var(--ease)}
.chip.on{background:var(--fg);color:#fff;border-color:var(--fg)}
.order{display:block;text-decoration:none;color:inherit;transition:transform .16s var(--ease)}.order:active{transform:scale(.985)}
.h2{font:600 13px/1 Inter;text-transform:uppercase;letter-spacing:.07em;color:var(--mute);margin:18px 2px 10px}
.tl{position:relative;padding-left:22px}.tl li{list-style:none;position:relative;padding:0 0 14px}
.tl li:before{content:"";position:absolute;left:-17px;top:5px;width:10px;height:10px;border-radius:50%;background:#E6DCDA}
.tl li:after{content:"";position:absolute;left:-13px;top:17px;bottom:-3px;width:2px;background:#EFE7E5}.tl li:last-child:after{display:none}
.tl li.done:before{background:var(--rose)}.tl li.cur:before{box-shadow:0 0 0 4px rgba(183,110,121,.2)}
.photos{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.photos figure{position:relative;aspect-ratio:1;border-radius:12px;overflow:hidden;background:var(--blush)}
.photos img{width:100%;height:100%;object-fit:cover}.photos figcaption{position:absolute;left:6px;bottom:6px;font-size:10px;font-weight:600;background:rgba(255,255,255,.9);padding:2px 6px;border-radius:6px}
.kv{display:grid;grid-template-columns:auto 1fr;gap:6px 14px;font-size:14px}.kv dt{color:var(--mute)}.kv dd{text-align:right;font-variant-numeric:tabular-nums}
.total{border-top:1px dashed var(--line);margin-top:8px;padding-top:8px;font-weight:600}
.stop{display:flex;gap:10px;align-items:center;touch-action:pan-y;user-select:none;transition:transform .2s var(--ease),box-shadow .2s}
.stop.drag{box-shadow:0 12px 32px rgba(63,50,53,.18);transform:scale(1.02);z-index:5;position:relative;transition:none}
.handle{cursor:grab;touch-action:none;color:var(--mute);padding:8px 2px}.seq{width:28px;height:28px;border-radius:50%;background:var(--blush);color:var(--rose2);display:grid;place-items:center;font-weight:700;font-size:13px;flex:none}
.stop.done .seq{background:#E7F0EA;color:var(--ok)}
.town{font:600 15px/1 Inter;margin:16px 2px 8px;display:flex;justify-content:space-between}
.cam{position:relative;aspect-ratio:3/4;border-radius:22px;overflow:hidden;background:linear-gradient(160deg,#F4E6E3,#EAD3D0);display:grid;place-items:center;text-align:center;margin-bottom:12px;border:1.5px dashed rgba(183,110,121,.4)}
.cam img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.cam .lbl{color:var(--rose2);font-weight:600}
.cam svg{width:48px;height:48px;color:var(--rose);margin-bottom:8px}
.stepper{display:flex;align-items:center;gap:8px}.stepper button{width:56px;height:56px;border-radius:16px;border:1px solid var(--line);background:var(--paper);font-size:24px;cursor:pointer}.stepper button:active{transform:scale(.94)}.stepper input{text-align:center;font-size:24px;font-weight:600;height:56px}
.sheet-bg{position:fixed;inset:0;background:rgba(40,30,32,.35);z-index:50;opacity:0;transition:opacity .25s var(--ease)}.sheet-bg.in{opacity:1}
.sheet{position:fixed;left:0;right:0;bottom:0;z-index:51;background:var(--paper);border-radius:24px 24px 0 0;padding:10px 16px calc(20px + env(safe-area-inset-bottom));max-height:90dvh;overflow:auto;transform:translateY(100%);transition:transform .32s var(--ease);max-width:720px;margin:0 auto}
.sheet.in{transform:none}.sheet:before{content:"";display:block;width:36px;height:5px;border-radius:3px;background:#E6DCDA;margin:0 auto 12px}
.toast{position:fixed;left:50%;bottom:calc(96px + env(safe-area-inset-bottom));transform:translate(-50%,20px);background:var(--fg);color:#fff;padding:10px 16px;border-radius:12px;font-size:14px;opacity:0;transition:all .3s var(--ease);z-index:60;pointer-events:none}
.toast.in{opacity:1;transform:translate(-50%,0)}
.empty{text-align:center;padding:48px 16px;color:var(--mute)}
.login{max-width:380px;margin:12vh auto 0;padding:0 20px;text-align:center}.login h2{font:400 32px/1.1 Fraunces,Georgia,serif;letter-spacing:-.02em;margin:18px 0 8px}
.fade{animation:fade .35s var(--ease) both}@keyframes fade{from{opacity:0;transform:translateY(6px)}}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.bar{height:6px;border-radius:3px;background:#F1EDEC;overflow:hidden}.bar b{display:block;height:100%;background:var(--rose);border-radius:3px}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
.lstep{background:#fff;border:1px solid var(--line,#eee);border-radius:18px;margin-bottom:10px;overflow:hidden;transition:border-color .2s}
.lstep.ok{border-color:#d9e8de}
.lhead{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:12px;width:100%;padding:16px;cursor:pointer;-webkit-tap-highlight-color:transparent}
.lhead:active{transform:scale(.99)}
.ln{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;font-weight:600;background:#f6eaea;color:var(--rose,#c48b8f);flex:none}
.lstep.ok .ln{background:#E7F0EA;color:var(--ok,#2f7a4b)}
.lbody{display:grid;grid-template-rows:0fr;transition:grid-template-rows .3s cubic-bezier(.32,.72,0,1)}
.lbody>*{min-height:0}
.lstep .lbody{padding:0 16px}
.lstep:not(.open) .lbody{height:0;overflow:hidden;padding-bottom:0}
.lstep.open .lbody{display:block;padding-bottom:16px;animation:fadeIn .25s ease}
@keyframes fadeIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
.cam.sm{aspect-ratio:auto;min-height:130px;margin-bottom:8px;padding:14px}
.cam.sm svg{width:36px;height:36px}
.cam.has .lbl,.cam.has .small,.cam.has svg{opacity:0}
.cam video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.bignum{font-size:24px!important;font-weight:600;height:56px}
.seg{display:flex;gap:6px;flex-wrap:wrap}
.seg button{flex:1;min-height:48px;border-radius:12px;border:1px solid var(--line,#e8dede);background:#fff;font:inherit;font-weight:500}
.seg button.on{background:var(--fg,#2b2326);color:#fff;border-color:transparent}
.thumbs{display:flex;gap:6px;overflow-x:auto;margin-bottom:8px}
.thumbs img,.thumbs video{width:72px;height:72px;object-fit:cover;border-radius:10px;flex:none}
.prog{height:6px;border-radius:3px;background:#f3e9e9;margin-top:12px;overflow:hidden}
.prog b{display:block;height:100%;background:var(--rose,#c48b8f);transition:width .4s cubic-bezier(.32,.72,0,1)}
.warnt{color:#9A4A2E;font-weight:500}
.photos video{width:100%;aspect-ratio:1;object-fit:cover;border-radius:12px;background:#000}
.tlm{margin-top:6px}
.chip{min-height:44px}
@media(min-width:900px){body{padding-left:208px;padding-bottom:24px}.tabs{top:0;bottom:0;right:auto;width:208px;flex-direction:column;justify-content:flex-start;gap:4px;padding:76px 12px 16px;border-top:0;border-right:1px solid var(--line);background:rgba(255,255,255,.75)}.tabs a{flex:none;display:flex;align-items:center;gap:12px;text-align:left;font-size:15px;padding:10px 14px;min-height:44px}.tabs a svg{margin:0}.tabs a.on{background:var(--blush)}.toast{bottom:32px;margin-left:104px}}
.tabs.one{display:none}body:has(.tabs.one){padding-bottom:24px}
/* Order Entry timeline */
.tlfeed{margin:0 -16px;background:#F4F5F6;padding-bottom:90px}
.tldiv{display:flex;align-items:center;justify-content:center;gap:10px;padding:9px 12px;background:#ECEEF0;color:#6B6F73;font-size:12.5px;border-top:1px solid #E1E4E7;border-bottom:1px solid #E1E4E7}.tldiv i{width:1px;height:14px;background:#C9CDD1}
.tlcard{background:#fff;padding:14px 16px;border-bottom:1px solid #E1E4E7}
.tlh{display:flex;align-items:center;justify-content:space-between;gap:8px}.tlh b{font-size:15px}.tlbig{font-size:18px!important}
.tltot{background:#E3F6FD;border:1px solid #5DCBF4;border-radius:10px;padding:4px 10px;font-size:14px}.tltot b{color:#0B57A8}
.tlrow{display:flex;gap:10px;flex-wrap:wrap;margin-top:10px}
.tlth{position:relative;width:76px;margin:0;text-align:center}.tlth img,.tlth video{width:76px;height:76px;object-fit:cover;border-radius:10px;display:block;background:#ddd}.tlth figcaption{font-size:11px;font-weight:600;margin-top:4px}
.tlnb{height:76px;border-radius:10px;background:#F4F5F6;border:1px dashed #C9CDD1}
.tlw{position:absolute;left:4px;right:4px;top:4px;font-style:normal;font-size:11.5px;font-weight:700;background:#000;color:#F9DF4A;border-radius:6px;padding:2px 0}
.tlnb .tlw{top:24px}
.tlm2{display:flex;align-items:center;gap:12px;border:1px solid #E1E4E7;border-radius:14px;padding:8px;margin-top:8px}.tlm2 .grow{display:flex;flex-direction:column}
.tlmi{position:relative;width:52px;height:52px;border-radius:10px;background:#E3F6FD;overflow:hidden;flex:none}.tlmi img{width:100%;height:100%;object-fit:cover}.tlmi i{position:absolute;right:3px;top:3px;font-style:normal;font-size:11px;font-weight:700;background:#000;color:#fff;border-radius:6px;padding:0 5px}
.tlc{font-weight:700}.tlok{font-size:12px;font-weight:700;color:#137333;border:1.5px solid #1E9E4A;background:#E3F7E8;border-radius:10px;padding:5px 8px;white-space:nowrap}
.tlfab{position:fixed;right:18px;bottom:calc(84px + env(safe-area-inset-bottom));z-index:25;background:#000;color:#fff;border:0;border-radius:999px;padding:14px 22px;font:700 16px Inter,system-ui,sans-serif;box-shadow:0 10px 24px -8px rgba(0,0,0,.45)}.tlfab b{color:#F9DF4A;margin-left:6px}
/* ===== World-class admin pass (Oct 16): NoLaundry palette, type, states, a11y ===== */
:root{--bg:#F6F8F9;--paper:#fff;--blush:#E3F6FD;--fg:#111;--mute:#4A4A4A;--line:#D7DCE0;--rose:#111;--rose-ink:#000;--rose2:#000;--ok:#137333;--warn:#8A5A00;--y:#F9DF4A;--sky:#5DCBF4;--sky2:#E3F6FD;--sel:#FFF8D1;--sh:0 1px 2px rgba(0,0,0,.04),0 6px 18px -8px rgba(0,0,0,.12);--r:14px}
body{background:var(--bg);color:var(--fg)}
a{color:#0B57A8}
.top{background:rgba(255,255,255,.9);border-bottom:1px solid var(--line)}
.top h1,.h2,.login h2,.t.tlbig,.tlbig{font-family:Archivo,Inter,system-ui,sans-serif;font-weight:900;letter-spacing:-.01em}
.top h1{font-size:19px;text-transform:none}
.h2{font-size:17px;margin:22px 2px 10px;color:#000}
.login h2{font-size:34px;line-height:1.05}
.muted{color:var(--mute)}
.btn{background:#000;color:#fff;border-radius:12px;min-height:48px;font-weight:700}
.btn:hover{background:#222}
.btn.ghost{background:#fff;color:#000;border:1.5px solid var(--line)}.btn.ghost:hover{background:var(--sky2);border-color:var(--sky)}
.btn.big{background:var(--y);color:#000;border:2px solid #000;font-family:Archivo,Inter,sans-serif;font-weight:900;letter-spacing:.01em;box-shadow:0 3px 0 #000}
.btn.big:hover{background:#FFE866}.btn.big:active{transform:translateY(2px);box-shadow:0 1px 0 #000}
.btn.ghost.big{background:#fff;box-shadow:none;border:1.5px solid var(--line);font-family:Inter,system-ui,sans-serif;font-weight:600}
.btn.sm{min-height:44px;padding:8px 14px}
.btn[disabled]{opacity:.5;cursor:not-allowed}
.pill{background:var(--sky2);color:#0B57A8;font-weight:600}
.pill.ok{background:#E3F7E8;color:#137333}.pill.warn{background:var(--sel);color:#6B4E00;border:1px solid #EAD27A}.pill.gray{background:#EEF0F2;color:#4A4A4A}
.pill.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.02em}
.demo{background:#000;color:var(--y)}
.card{border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh)}
a.card{transition:transform .15s var(--ease),box-shadow .15s}a.card:hover{box-shadow:0 2px 4px rgba(0,0,0,.06),0 12px 28px -10px rgba(0,0,0,.2)}
.card.tagged{border-left-width:8px!important;border-left-color:var(--tag)!important}
.tabs{background:rgba(255,255,255,.95);border-top:1px solid var(--line)}
.tabs a{color:#4A4A4A;font-weight:600;min-height:52px}
.tabs a.on{color:#000}.tabs a.on svg{background:var(--y);border-radius:10px;box-shadow:0 0 0 4px var(--y)}
.search{background:#fff;border:1.5px solid var(--line);border-radius:14px}
.search:focus-within{border-color:#000;box-shadow:0 0 0 3px var(--sky)}
input,select,textarea{border-color:var(--line)!important}
input:focus,select:focus,textarea:focus{outline:none;border-color:#000!important;box-shadow:0 0 0 3px var(--sky)}
.chips{display:flex;gap:8px;overflow-x:auto;padding:4px 2px 8px;scrollbar-width:none}.chips::-webkit-scrollbar{display:none}
.chip{flex:none;min-height:44px;padding:0 14px;border-radius:999px;border:1.5px solid var(--line);background:#fff;color:#111;font-weight:600;font-size:14px;cursor:pointer;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.chip.on{background:var(--sel);border-color:#000;color:#000}
.chip.sm{min-height:40px;font-size:13px;padding:0 12px}
.chip .cc{font-variant-numeric:tabular-nums;color:#4A4A4A;font-weight:700}
.dot{width:12px;height:12px;border-radius:50%;display:inline-block;box-shadow:inset 0 0 0 1.5px rgba(0,0,0,.2)}
:focus-visible{outline:3px solid #0B57A8!important;outline-offset:2px;border-radius:10px}
.skip{position:absolute;left:8px;top:-60px;z-index:100;background:#000;color:#fff;padding:10px 14px;border-radius:10px;font-weight:700}.skip:focus{top:8px}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.mockbar{background:var(--y);color:#000;text-align:center;font-weight:800;font-size:12px;letter-spacing:.04em;padding:6px;text-transform:uppercase;border-bottom:2px solid #000}
/* loading skeleton */
.sk{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:16px;margin-bottom:10px;display:grid;gap:9px}
.sk i{display:block;height:12px;border-radius:6px;background:linear-gradient(90deg,#EEF0F2 25%,#F7F8F9 50%,#EEF0F2 75%);background-size:200% 100%;animation:shim 1.2s linear infinite}
.sk i:first-child{height:16px}
@keyframes shim{to{background-position:-200% 0}}
/* empty + error states */
.state{text-align:center;padding:40px 20px;background:#fff;border:1.5px dashed var(--line);border-radius:18px;display:grid;justify-items:center;gap:8px;margin:8px 0}
.state b{font-family:Archivo,Inter,sans-serif;font-weight:900;font-size:18px}
.state p{max-width:340px}
.state-ic{width:52px;height:52px;border-radius:50%;display:grid;place-items:center;background:var(--sky2);color:#0B57A8;font-weight:900;font-size:22px;border:2px solid var(--sky)}
.state.err{border-style:solid;border-color:#F3B4AE;background:#FFF7F6}.state.err .state-ic{background:#FDE7E5;color:#A50E0E;border-color:#D93025}
.state .btn{margin-top:6px}
/* Today KPIs */
.kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:12px 0 4px}
.kpi-d{grid-column:1/-1;font-size:13px;font-weight:600;color:#4A4A4A}
.kpi{display:grid;gap:2px;padding:12px;border-radius:14px;background:#fff;border:1.5px solid var(--line);text-decoration:none;color:#000;min-height:72px}
.kpi b{font:900 28px/1 Archivo,Inter,sans-serif}.kpi span{font-size:12px;font-weight:600;color:#4A4A4A}
.kpi.k0{background:var(--y);border-color:#000}.kpi.k1{background:var(--sky2);border-color:var(--sky)}.kpi.k2{background:#fff}
.cnt{min-width:28px;height:24px;padding:0 8px;border-radius:999px;background:#000;color:#fff;font-size:12px;font-weight:700;display:inline-grid;place-items:center}
.lane{scroll-margin-top:70px}
/* capture / pickup steps */
.cam{background:linear-gradient(160deg,#E3F6FD,#FFFFFF);border:2px dashed var(--sky);border-radius:18px}.cam .lbl{color:#000;font-weight:700}.cam svg{color:#0B57A8}
.stepper button{border:1.5px solid var(--line);font-weight:700}.stepper button:hover{background:var(--sky2)}
.seg button{border:1.5px solid var(--line)}.seg button.on{background:var(--sel);color:#000;border-color:#000}
.seq{background:var(--sky2);color:#000}
.ln{background:var(--sky2);color:#000}.lstep{border:1px solid var(--line)}.lstep.open{border-color:#000}
.prog{background:#EEF0F2}.prog b,.bar b{background:var(--sky)}
.sheet:before{background:var(--line)}
.sheet-bg{background:rgba(0,0,0,.4)}
.toast{background:#000}
.tldiv{background:#EEF0F2;color:#4A4A4A}
/* desktop */
@media(min-width:900px){
 .wrap{max-width:1080px;padding:20px 28px}
 .tabs{background:#fff;padding-top:84px}.tabs a.on{background:var(--sel);box-shadow:inset 3px 0 0 #000}.tabs a.on svg{background:none;box-shadow:none}
 #list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}#list .card{margin:0}#list .state{grid-column:1/-1}
 .lane{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 12px}.lane .h2{grid-column:1/-1}
 .kpis{grid-template-columns:auto repeat(3,minmax(0,180px));align-items:stretch}.kpi-d{grid-column:auto;align-self:center;font:900 22px Archivo,Inter,sans-serif;color:#000;margin-right:12px}
 .sheet{border-radius:24px;bottom:24px}
}
@media(min-width:1100px){
 .od{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(320px,1fr);gap:24px;align-items:start}
 .od-side{position:sticky;top:76px}
 .od .tlfeed{margin:0;border-radius:16px;overflow:hidden;border:1px solid var(--line);padding-bottom:0}
 .od .tlfab{position:static;width:100%;margin:22px 0 0;border-radius:12px}
}
html.is-mock .top{top:0}
@media (prefers-reduced-motion:reduce){.sk i{animation:none}}
.boot{max-width:720px;margin:0 auto;padding:72px 16px}
/* ===== Admin pass 2 (Oct 16): logo, routes, settings, action bar, toasts, shortcuts ===== */
.top{background:#fff;-webkit-backdrop-filter:none;backdrop-filter:none;min-height:calc(56px + env(safe-area-inset-top))}
.top .logo{width:32px;height:32px;border-radius:9px;background:none;flex:none;display:block}
.top h1{font-size:20px}
.empty{background:#fff;border:1.5px dashed var(--line);border-radius:18px;padding:36px 20px;color:var(--mute);font-weight:500}
/* toasts */
.toast{display:flex;align-items:center;gap:10px;font-weight:600;max-width:calc(100vw - 32px);box-shadow:0 12px 30px -10px rgba(0,0,0,.45);border-radius:14px;padding:12px 16px}
.toast .ti{width:22px;height:22px;border-radius:50%;background:var(--y);color:#000;display:grid;place-items:center;font-size:13px;font-weight:900;flex:none}
.toast.err{background:#A50E0E}.toast.err .ti{background:#fff;color:#A50E0E}
/* tabs: 44px+ targets and safe area */
.tabs{background:#fff;padding:6px 6px calc(6px + env(safe-area-inset-bottom))}
.tabs a{min-height:56px;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:12px}
.tabs a span{line-height:1.1;margin-top:4px}
.kbd-hint{display:none}
kbd{display:inline-grid;place-items:center;min-width:24px;height:24px;padding:0 6px;border-radius:6px;border:1.5px solid #000;border-bottom-width:3px;background:#fff;font:700 12px ui-monospace,SFMono-Regular,Menlo,monospace;color:#000}
.keys{display:grid;grid-template-columns:auto 1fr;gap:10px 18px;align-items:center}.keys dd{font-weight:600}
/* sticky action bar (pickup/delivery): solid, never translucent */
.actbar{position:sticky;bottom:calc(68px + env(safe-area-inset-bottom));z-index:15;margin:16px -16px 0;padding:10px 16px 12px;background:#fff;border-top:1.5px solid var(--line);box-shadow:0 -8px 20px -14px rgba(0,0,0,.35);display:grid;gap:8px}
.actbar #hint{text-align:center;font-weight:600;color:#4A4A4A}
.actbar .btn.big{min-height:60px}
body[data-view="stops"] .actbar{bottom:calc(68px + env(safe-area-inset-bottom))}
body:has(.tabs.one) .actbar{bottom:0;padding-bottom:calc(12px + env(safe-area-inset-bottom))}
.cam{margin-bottom:16px}
/* maps */
.mapbox{border-radius:16px;overflow:hidden;border:1px solid var(--line);background:var(--sky2);position:relative;z-index:0}
.mapph{height:100%;min-height:inherit;display:grid;place-content:center;justify-items:center;gap:4px;text-align:center;padding:16px;color:#0B57A8;background:repeating-linear-gradient(45deg,#E3F6FD 0 14px,#EDF9FE 14px 28px)}
.mapph b{color:#000;font-size:14px}.mapph span{font-size:12.5px;color:#4A4A4A;max-width:240px}
/* routes */
.rhead{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:space-between}
.dnav{display:flex;align-items:center;gap:6px;flex:1;min-width:0}
.dpick{flex:1;min-width:0;max-width:220px}.dpick input{min-height:44px;font-weight:600}
.btn.ic{width:44px;padding:0;font-size:22px;line-height:1}
.rday{margin-top:16px}
.rk{grid-template-columns:repeat(4,1fr)}.rk .kpi{min-height:64px;padding:10px}.rk .kpi b{font-size:24px}
.rt{padding:16px;margin-bottom:14px}
.rt-h{display:flex;gap:10px;align-items:flex-start}
.rt-n{font:900 18px/1.2 Archivo,Inter,sans-serif;margin:0}
.rt-stats{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:1px;background:var(--line);border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:12px 0}
.rt-stats>div{background:#F9FAFB;padding:8px 6px;text-align:center;display:grid;gap:1px}.rt-stats b{font:800 15px/1.2 Inter,sans-serif;font-variant-numeric:tabular-nums;white-space:nowrap}.rt-stats span{font-size:11px;font-weight:600;color:#4A4A4A;text-transform:uppercase;letter-spacing:.04em}
.rt-asg .field{margin-bottom:8px}.rt-asg select{min-height:44px}
.stops{list-style:none;margin:6px 0 0;padding:0;display:grid;gap:6px;counter-reset:s}
.stop{background:#fff;border:1.5px solid var(--line);border-radius:12px;padding:6px 8px 6px 2px;min-height:64px}
.stop .handle{all:unset;box-sizing:border-box;width:32px;min-height:44px;display:grid;place-items:center;color:#4A4A4A;cursor:grab;touch-action:none;border-radius:8px}.stop .handle:focus-visible{outline:3px solid #0B57A8}
.stop .seq{width:30px;height:30px;font-size:13px;font-weight:800;background:#000;color:#fff}
.stop.st-done .seq{background:#E3F7E8;color:#137333}.stop.st-failed .seq{background:#FDE7E5;color:#A50E0E}.stop.st-on_the_way .seq,.stop.st-arrived .seq{background:var(--y);color:#000;box-shadow:0 0 0 2px #000}
.stop.st-done{background:#FAFBFB}.stop.st-done .t{color:#4A4A4A}
.sl{display:grid;gap:1px;text-decoration:none;color:inherit;min-width:0;padding:4px 0}
.sl .t{font-size:15px}.sst{font-weight:700}
.kd{font-weight:700}.kd.up{color:#0B57A8}.kd.dn{color:#137333}
.eta{display:grid;text-align:right;flex:none;min-width:62px}.eta b{font:800 15px/1.1 Inter;font-variant-numeric:tabular-nums}.eta span{font-size:10.5px;font-weight:700;color:#4A4A4A;letter-spacing:.06em}
.stop .go{min-width:48px;padding:0 10px}
.rt-act{gap:8px;flex-wrap:wrap;margin-top:10px}.rt-act .btn{flex:1 1 auto}
.rt-map{margin-top:12px}.rt-map .mapbox{height:220px}
.rt-note{margin-top:10px}
.state.sm{padding:20px}
.unr .urow{gap:10px;padding:12px}.usel{width:auto;max-width:48%;min-height:44px;font-size:14px;font-weight:600}
/* settings */
.set-nav{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;margin:0 -16px;padding:2px 16px 6px;position:sticky;top:calc(57px + env(safe-area-inset-top));z-index:10;background:var(--bg)}
.set-nav::-webkit-scrollbar{display:none}
.set-nav a{flex:none;min-height:44px;display:inline-flex;align-items:center;padding:0 14px;border-radius:999px;border:1.5px solid var(--line);background:#fff;color:#000;text-decoration:none;font-weight:600;font-size:14px}
.set-nav a:hover{border-color:#000}
.set-s{scroll-margin-top:130px}.set-s .h2{margin-bottom:2px}.set-d{margin:0 2px 10px}
.set-c{padding:4px 16px}
.sub{font:800 12px/1 Inter;text-transform:uppercase;letter-spacing:.07em;color:#4A4A4A;padding:16px 0 4px}.sub~.sub{border-top:1px solid var(--line);margin-top:6px}
.srow{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid #EEF0F2;min-height:64px}.srow:last-child{border-bottom:0}
.srow .sl{flex:1;min-width:0;padding:0}.srow .sl b{font-weight:600;font-size:15px}.srow .sl small{display:block;font-size:12.5px;color:#4A4A4A;line-height:1.35;margin-top:2px}
.si{display:flex;align-items:center;flex:none;width:150px;border:1.5px solid var(--line);border-radius:12px;background:#fff;overflow:hidden}
.si.wide{width:min(260px,50%)}
.si:focus-within{border-color:#000;box-shadow:0 0 0 3px var(--sky)}
.si input{border:0!important;box-shadow:none!important;min-height:44px;padding:10px;text-align:right;font-weight:600;font-variant-numeric:tabular-nums;width:100%;min-width:0}
.si.wide input{text-align:left}
.si .pre,.si .suf{color:#4A4A4A;font-weight:600;font-size:13px;padding:0 10px;white-space:nowrap}.si .pre{padding-right:0}.si .suf{padding-left:0}
.si:has(input[aria-invalid]){border-color:#D93025;box-shadow:0 0 0 3px #FDE7E5}
.si:has(input:disabled){background:#F4F5F6}
.savebar{position:sticky;bottom:calc(68px + env(safe-area-inset-bottom));z-index:15;display:flex;align-items:center;gap:8px;margin:18px -16px 0;padding:10px 16px;background:#fff;border-top:1.5px solid var(--line);font-weight:600;color:#4A4A4A}
.savebar.dirty{background:var(--sel);border-top-color:#000;color:#000}
@media(max-width:420px){.si{width:128px}.si.wide{width:100%}.srow:has(.si.wide){flex-wrap:wrap}.rt-stats{grid-template-columns:repeat(3,1fr)}.rt-stats>div:nth-child(n+4){display:none}.rk{grid-template-columns:repeat(2,1fr)}}
@media(min-width:900px){
 .actbar,.savebar{bottom:0;margin-left:0;margin-right:0;border-radius:14px 14px 0 0;border:1.5px solid var(--line);border-bottom:0}
 .tabs a{flex-direction:row;font-size:15px}.tabs a span{margin:0}
 .kbd-hint{display:flex;align-items:center;justify-content:space-between;margin-top:auto;min-height:44px;border:1.5px solid var(--line);border-radius:12px;background:#fff;padding:0 12px;font:600 13px Inter,sans-serif;color:#4A4A4A;cursor:pointer}
 .kbd-hint:hover{border-color:#000;color:#000}
 .rt-body{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(280px,1fr);gap:16px;align-items:start}
 .rt-map{margin-top:6px;position:sticky;top:76px}.rt-map .mapbox{height:340px}
 .set{display:grid;grid-template-columns:200px minmax(0,1fr);gap:28px;align-items:start}
 .set-nav{flex-direction:column;position:sticky;top:84px;margin:22px 0 0;padding:0;background:none}.set-nav a{border-radius:10px;border-color:transparent;background:none}.set-nav a:hover{background:#fff;border-color:var(--line)}
 .set-main{max-width:720px}
 .si{width:180px}
}
/* pass 2b: fixed solid bars + padding so content is never covered */
.actbar,.savebar{position:fixed;left:0;right:0;margin:0;bottom:calc(68px + env(safe-area-inset-bottom));border-radius:0}
body:has(.actbar),body:has(.savebar){padding-bottom:calc(68px + 140px + env(safe-area-inset-bottom))}
body:has(.tabs.one) .actbar{bottom:0}
body:has(.tabs.one):has(.actbar){padding-bottom:calc(150px + env(safe-area-inset-bottom))}
@media(max-width:480px){.stop .go{display:none}.stop{padding-right:10px}}
@media(min-width:900px){.actbar,.savebar{left:208px;bottom:0;border-radius:0;border-left:0;border-right:0;padding-left:max(28px,calc((100vw - 208px - 1080px)/2 + 28px));padding-right:max(28px,calc((100vw - 208px - 1080px)/2 + 28px))}
 .actbar{grid-template-columns:1fr minmax(260px,360px);align-items:center}.actbar #hint{text-align:left}
 body:has(.actbar),body:has(.savebar){padding-bottom:120px}
}
/* ===== Pass 3 (Oct 16): hub, emails, referrals, requests, laundromats, palette, next action, motion, dark ===== */
.top h1{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sync{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:0 10px;border-radius:999px;font:600 12px Inter,sans-serif;color:#4A4A4A;cursor:pointer;white-space:nowrap}
.sync i{width:8px;height:8px;border-radius:50%;background:#1E9E4A;box-shadow:0 0 0 3px rgba(30,158,74,.18)}
.sync.stale i{background:#E8A317;box-shadow:0 0 0 3px rgba(232,163,23,.2)}.sync.off i{background:#D93025}.sync:hover{background:var(--sky2)}
.sync:focus-visible{outline:3px solid #0B57A8}
.cmdk{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:8px;min-height:44px;min-width:44px;justify-content:center;padding:0 10px;border:1.5px solid var(--line);border-radius:12px;background:#fff;color:#4A4A4A;font:600 13px Inter,sans-serif;cursor:pointer}
.cmdk svg{width:18px;height:18px}.cmdk:hover{border-color:#000;color:#000}.cmdk:focus-visible{outline:3px solid #0B57A8}
.cmdk span,.cmdk kbd{display:none}
@media(max-width:420px){.sync span{display:none}.sync{padding:0 12px}}
@media(min-width:900px){.cmdk{min-width:260px;justify-content:flex-start}.cmdk span{display:inline;flex:1}.cmdk kbd{display:inline-grid;border-width:1px;border-bottom-width:2px;height:22px;font-size:11px}}
.back{display:inline-flex;align-items:center;min-height:44px;color:#4A4A4A;text-decoration:none;font-weight:600;margin:-6px 0 4px}
.back:hover{color:#000}
/* hub */
.hub{display:grid;gap:10px}.hubi{display:flex;align-items:center;gap:12px;text-decoration:none;color:inherit;min-height:72px;margin:0}
.hubi b{display:block;font-size:16px}.hubi small{display:block;color:#4A4A4A;font-size:13px}.hubi .chev{font-size:22px;color:#4A4A4A}
@media(min-width:900px){.hub{grid-template-columns:repeat(3,minmax(0,1fr))}}
/* emails */
.banner{display:grid;gap:4px;padding:14px 16px;border-radius:14px;background:var(--sel);border:1.5px solid #EAD27A;margin-bottom:12px}.banner span{font-size:13.5px;color:#3A3A3A}
.elist{display:grid;gap:10px}.erow{margin:0}.erow.open{border-color:#000}
.eic{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;font-size:18px;flex:none;background:var(--sky2);color:#0B57A8}.eic.marketing{background:var(--sel);color:#6B4E00}
.sw{position:relative;display:inline-flex;min-width:56px;min-height:44px;align-items:center;cursor:pointer;flex:none}
.sw input{position:absolute;opacity:0;inset:0;margin:0;cursor:pointer;min-height:0}
.sw span{width:52px;height:30px;border-radius:999px;background:#C9CDD1;position:relative;transition:background .2s var(--ease)}
.sw span:after{content:"";position:absolute;top:3px;left:3px;width:24px;height:24px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.3);transition:transform .2s var(--ease)}
.sw input:checked+span{background:#000}.sw input:checked+span:after{transform:translateX(22px);background:var(--y)}
.sw input:focus-visible+span{outline:3px solid #0B57A8;outline-offset:2px}.sw input:disabled+span{opacity:.5}
.pvf{width:100%;height:640px;border:1px solid var(--line);border-radius:12px;margin-top:10px;background:#fff}
@media(min-width:900px){.elist{grid-template-columns:repeat(2,minmax(0,1fr))}.erow.open{grid-column:1/-1}}
/* referrals + requests */
.av{width:36px;height:36px;border-radius:50%;display:grid;place-items:center;font:800 13px Inter;background:var(--y);color:#000;flex:none;border:1.5px solid #000}.av.b{background:var(--sky2);border-color:var(--sky)}
.arrow{color:#4A4A4A;font-weight:700}
.rref .t{font-size:15px}
.flag{margin-top:10px;padding:8px 10px;border-radius:10px;background:var(--sel);border:1px solid #EAD27A;font-size:13px;font-weight:600;color:#6B4E00}
.rqi{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;font-weight:900;flex:none;background:var(--sky2);color:#0B57A8}
.rqi.k-cancel{background:#FDE7E5;color:#A50E0E}.rqi.k-pause{background:var(--sel);color:#6B4E00}.rqi.k-resume{background:#E3F7E8;color:#137333}
.q{margin:8px 0;padding:8px 12px;border-left:3px solid var(--sky);background:#F7FBFD;border-radius:0 10px 10px 0;font-size:14px}
.rq.done{opacity:.85}.rq-act{gap:8px;margin-top:10px;justify-content:flex-end;flex-wrap:wrap}
.rq.leaving{opacity:.4;transform:scale(.98);transition:all .25s var(--ease)}
@media(min-width:900px){#rqrows{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}#rqrows .card{margin:0}#rqrows .state{grid-column:1/-1}}
/* laundromats */
.lhead2{gap:8px;margin-bottom:12px}.lhead2 .scanb{flex:1}.lhead2 .btn.ghost{min-height:64px}
.scanb{display:flex;gap:10px;align-items:center;justify-content:center}.scanb svg{width:26px;height:26px}
.facs{display:grid;gap:12px;margin-top:12px}.fac{margin:0}.fac.off{opacity:.75}
.load{margin-top:12px;display:grid;gap:6px}.load .bar{height:10px;border-radius:6px;background:#EEF0F2}.load .bar b{border-radius:6px}
.load.lo .bar b{background:#1E9E4A}.load.mid .bar b{background:#E8A317}.load.hi .bar b{background:#D93025}
.rt-stats.fs{grid-template-columns:repeat(4,minmax(0,1fr))}
.fac-c{gap:8px;flex-wrap:wrap;padding-top:10px;border-top:1px solid #EEF0F2}
.kpi b small{font-size:13px;font-weight:700}
@media(min-width:900px){.facs{grid-template-columns:repeat(2,minmax(0,1fr))}.facs .state{grid-column:1/-1}.near-g{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:16px;align-items:start}.near-g .mapbox{height:440px!important;position:sticky;top:84px}}
@media(max-width:420px){.rt-stats.fs{grid-template-columns:repeat(2,1fr)}.rt-stats.fs>div:nth-child(n+3){display:grid}}
.near-g{display:grid;gap:12px}
.llist{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.lrow{display:flex;align-items:center;gap:10px;background:#fff;border:1.5px solid var(--line);border-radius:12px;padding:8px 10px;min-height:60px}
.lrow b{font-size:14.5px}.lrow.k-partner{border-color:#000}
.lpin{display:inline-block;flex:none;vertical-align:middle;border-radius:50%}
.lpin.partner{width:16px;height:16px;background:var(--y);border:2px solid #000}
.lpin.nearby,.lpin.draft{width:12px;height:12px;background:#fff;border:2.5px solid #0B57A8}
.mpin{display:grid;place-items:center;border-radius:50%;font:900 11px Inter}
.mpin.pt{width:26px;height:26px;background:var(--y);border:2.5px solid #000;color:#000;box-shadow:0 3px 8px rgba(0,0,0,.35)}
.mpin.nb{width:16px;height:16px;background:#fff;border:3px solid #0B57A8;box-shadow:0 2px 5px rgba(0,0,0,.3)}
.mpin.st{width:28px;height:28px;background:#000;color:var(--y);border:2.5px solid #fff;box-shadow:0 3px 8px rgba(0,0,0,.4);font-size:13px}
.rl{margin-top:10px;border:1px solid var(--line);border-radius:12px;padding:0 10px;background:#FAFBFB}
.rl summary{min-height:44px;display:flex;align-items:center;font-weight:700;font-size:14px;cursor:pointer}.rl[open]{padding-bottom:10px}
/* laundromat check-in: scan-first + big targets */
.scanfirst{margin:12px 0;padding:14px;border-radius:16px;border:2px dashed var(--sky);background:var(--sky2);display:grid;gap:8px;text-align:center}
.scanfirst .btn{width:100%}.scanfirst.ok{border:2px solid #1E9E4A;background:#E3F7E8}.scanfirst.ok .btn{background:#E3F7E8;border-color:#137333;color:#137333;box-shadow:none}
.scanfirst.bad{border:2px solid #D93025;background:#FDE7E5}
.lhead{min-height:72px;padding:16px 18px}.ln{width:40px;height:40px;font-size:16px;font-weight:800}
.lstep .t{font-size:17px}.lstep .btn{min-height:56px}.lstep .btn.big{min-height:64px}
.seg button{min-height:56px;font-size:16px}
/* next action */
.next{position:relative;display:grid;gap:6px;padding:18px;margin:4px 0 12px;border-radius:18px;background:#000;color:#fff;overflow:hidden}
.next:after{content:"";position:absolute;right:-40px;top:-40px;width:160px;height:160px;border-radius:50%;background:var(--y);opacity:.14}
.next .eyebrow{font:800 11px Inter;letter-spacing:.12em;text-transform:uppercase;color:var(--y)}
.next b{font:900 22px/1.15 Archivo,Inter,sans-serif}.next p{color:#D7DCE0;font-size:14px;max-width:560px}
.next .btn.big{width:auto;min-height:52px;padding:0 22px;font-size:16px}.next .btn.ghost{background:transparent;color:#fff;border-color:#4A4A4A}.next .btn.ghost:hover{background:#1a1a1a}
.next.done{background:#E3F7E8;color:#000}.next.done .eyebrow{color:#137333}.next.done p{color:#3A3A3A}.next.done:after{display:none}
/* palette */
.pal-bg{position:fixed;inset:0;z-index:80;background:rgba(0,0,0,.45);display:flex;justify-content:center;align-items:flex-start;padding:12vh 12px 12px;opacity:0;transition:opacity .15s var(--ease)}
.pal-bg.in{opacity:1}.pal-bg.in .pal{transform:none;opacity:1}
.pal{width:min(640px,100%);max-height:70vh;display:flex;flex-direction:column;background:#fff;border-radius:18px;box-shadow:0 30px 80px -20px rgba(0,0,0,.5);overflow:hidden;transform:translateY(-8px) scale(.98);opacity:0;transition:all .18s var(--ease)}
.pal-in{display:flex;align-items:center;gap:10px;padding:6px 14px;border-bottom:1.5px solid var(--line)}.pal-in svg{width:20px;flex:none;color:#4A4A4A}
.pal-in input{border:0!important;box-shadow:none!important;font-size:17px;min-height:52px;padding:0}
.pal ul{list-style:none;margin:0;padding:6px;overflow:auto;flex:1}
.pal-g{font:800 11px Inter;letter-spacing:.08em;text-transform:uppercase;color:#4A4A4A;padding:10px 10px 4px}
.pal-i{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:10px;min-height:48px;cursor:pointer}.pal-i b{display:block;font-weight:600;font-size:14.5px}.pal-i small{display:block;color:#4A4A4A;font-size:12.5px}
.pal-i.on{background:var(--sel);box-shadow:inset 3px 0 0 #000}
.pal-empty{padding:24px;text-align:center;color:#4A4A4A}
.pal-f{display:flex;gap:16px;padding:8px 14px;border-top:1px solid var(--line);font-size:12px;color:#4A4A4A}.pal-f kbd{height:20px;min-width:20px;font-size:11px;border-width:1px;border-bottom-width:2px;margin-right:2px}
@media(max-width:600px){.pal-bg{padding:8px}.pal{max-height:calc(100dvh - 16px)}.pal-f{display:none}}
/* motion: subtle, and off for reduced motion (global rule above) */
.fade>*{animation:rise .32s var(--ease) both}.fade>*:nth-child(2){animation-delay:.03s}.fade>*:nth-child(3){animation-delay:.06s}.fade>*:nth-child(n+4){animation-delay:.09s}
@keyframes rise{from{opacity:0;transform:translateY(4px)}}
.fade{animation:none}
main.cached{opacity:.7;transition:opacity .2s}
.card,.kpi,.chip,.btn,.lrow{transition:transform .15s var(--ease),box-shadow .15s var(--ease),border-color .15s,background .15s}
@media (hover:hover){.hubi:hover,.lrow:hover{border-color:#000}}
/* no layout shift: reserve space for async blocks */
.mapbox{contain:strict}.rt-map .mapbox{min-height:220px}#lanes{min-height:420px}
/* ===== Dark mode (follows the system) ===== */
@media (prefers-color-scheme:dark){
 :root{--bg:#0E1013;--paper:#171A1F;--fg:#F2F4F5;--mute:#B5BCC4;--line:#2C323A;--blush:#1C2733;--sky2:#14283A;--sel:#3A3210;--sh:0 1px 2px rgba(0,0,0,.4),0 6px 18px -8px rgba(0,0,0,.6);color-scheme:dark}
 body{background:var(--bg);color:var(--fg)}
 .top,.tabs,.card,.kpi.k2,.sk,.state,.search,.chip,.cmdk,.si,.lrow,.stop,.btn.ghost,.savebar,.actbar,.sheet,.pal,.set-nav a,.lstep,.tlcard,.kbd-hint,input,select,textarea,.pvf{background:var(--paper)!important;color:var(--fg);border-color:var(--line)!important}
 .muted,.small.muted,.srow .sl small,.hubi small,.pal-i small,.pal-g,.rt-stats span,.eta span,.kpi span,.chip .cc,.back,.sync,.tabs a,.lrow .muted,.kd,.q{color:var(--mute)!important}
 .h2,.top h1,.t,.kpi,.kpi b,.tabs a.on,.btn.ghost,.chip,.hubi,.srow .sl b,.rt-n,.eta b,.rt-stats b,.lrow b,.pal-i b,.state b,a.card{color:var(--fg)!important}
 a{color:#8AB4F8}
 .btn{background:var(--y);color:#000}.btn:hover{background:#FFE866}.btn.big{border-color:var(--y)}
 .kpi.k0{background:var(--y)!important;color:#000}.kpi.k0 b,.kpi.k0 span{color:#000!important}.kpi.k1{background:var(--sky2)!important;border-color:#1E5A85!important}
 .chip.on,.pal-i.on,.tabs a.on{background:var(--sel)!important;border-color:var(--y)!important}.pal-i.on{box-shadow:inset 3px 0 0 var(--y)}
 .tabs a.on svg{background:var(--y);color:#000;box-shadow:0 0 0 4px var(--y)}
 .rt-stats{background:var(--line);border-color:var(--line)}.rt-stats>div{background:#1B1F25}
 .stop .seq{background:#F2F4F5;color:#000}.stop.st-done{background:#13171B!important}
 .pill{background:#14283A;color:#8AB4F8}.pill.ok{background:#0F2A1A;color:#81C995}.pill.warn{background:#3A3210;color:#FDD663;border-color:#5C4D12}.pill.gray{background:#23272E;color:var(--mute)}
 .banner,.flag{background:#2A2410;border-color:#5C4D12;color:var(--fg)}.banner span{color:var(--mute)}
 .eic,.rqi,.av.b,.state-ic{background:#14283A;color:#8AB4F8;border-color:#1E5A85}
 .mockbar{color:#000}.next{background:#000;border:1px solid var(--line)}.next.done{background:#0F2A1A;color:var(--fg)}
 .scanfirst{background:#14283A;border-color:#1E5A85}.scanfirst.ok{background:#0F2A1A}.scanfirst.bad{background:#3A1412}
 .state.err{background:#2A1412!important;border-color:#5C2420!important}
 .sk i{background:linear-gradient(90deg,#22272E 25%,#2C323A 50%,#22272E 75%);background-size:200% 100%}
 .rl,.q,.tlfeed,.tldiv{background:#13171B!important;border-color:var(--line)}
 .load .bar,.bar,.prog{background:#2C323A}
 .toast{background:#F2F4F5;color:#000}.toast.err{background:#A50E0E;color:#fff}
 kbd{background:#23272E;color:var(--fg);border-color:#4A515A}
 .sw span{background:#4A515A}
 .mapbox{border-color:var(--line);filter:brightness(.85) contrast(1.05)}
 .cam{background:linear-gradient(160deg,#14283A,#171A1F)!important}
 .lpin.nearby,.mpin.nb{background:#171A1F}
 .demo{background:var(--y);color:#000}
 .card.tagged{border-color:var(--tag)!important}
 img.logo{filter:none}
}

.wgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:12px}.wgrid>div{border:1.5px solid var(--line,#E3E6EA);border-radius:12px;padding:10px;text-align:center}.wgrid small{display:block;color:var(--muted,#667);font-size:12px}.wgrid b{font:700 20px/1.2 Inter,sans-serif}.wgrid.hot .ov{border-color:#C9822B;background:#FBF4E7}.earn{margin-top:12px}

@media (prefers-color-scheme:dark){.kpi-d{color:#E8EAED!important}}

/* Dispatch */
.disp{display:grid;grid-template-columns:1fr;gap:12px}
.disp-map{position:relative;height:46vh;min-height:300px;border-radius:18px;overflow:hidden;border:1px solid var(--line,#E3E6EA)}
.disp-legend{position:absolute;left:10px;bottom:10px;z-index:500;background:rgba(255,255,255,.94);border-radius:12px;padding:6px 10px;display:flex;flex-wrap:wrap;gap:4px 12px;font-size:12px;font-weight:600;box-shadow:0 2px 10px rgba(0,0,0,.12)}
.disp-legend i{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:5px;vertical-align:-1px}.disp-legend i.pro{background:#111;outline:2px solid #fff}
.dk{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.dkp{border:1.5px solid var(--line,#E3E6EA);background:#fff;border-radius:14px;padding:10px 8px;text-align:left;min-height:64px;cursor:pointer;border-top:4px solid var(--c);transition:transform .12s}
.dkp:active{transform:scale(.97)}.dkp b{display:block;font:900 24px/1 Archivo,Inter,sans-serif}.dkp span{font-size:12px;font-weight:600;color:#4A4A4A}.dkp.on{background:#111;color:#fff;border-color:#111;border-top-color:var(--c)}.dkp.on span{color:#ddd}
.dpros{display:grid;gap:6px}.dpro{display:flex;gap:10px;align-items:center;padding:10px 12px;border:1px solid var(--line,#E3E6EA);border-radius:14px;background:#fff}
.dpro .av{width:36px;height:36px;border-radius:50%;background:#111;color:#fff;display:grid;place-items:center;font-weight:800;flex:none}
.dboard{display:grid;gap:12px;margin-top:14px}
.dcol-h{display:flex;align-items:center;gap:8px;font-weight:800;font-size:14px;margin-bottom:8px}.dcol-h i{width:10px;height:10px;border-radius:50%}.dcol-h .muted{margin-left:auto;font-weight:600}
.dq{background:#fff;border:1px solid var(--line,#E3E6EA);border-left:4px solid var(--c);border-radius:14px;padding:10px 12px;margin-bottom:8px}
.dq.hl{animation:dqhl 1.2s ease}@keyframes dqhl{0%{box-shadow:0 0 0 0 var(--c)}30%{box-shadow:0 0 0 4px var(--c)}100%{box-shadow:0 0 0 0 transparent}}
.dq-as{flex:1;min-height:44px;border:1.5px solid var(--line,#E3E6EA);border-radius:12px;padding:0 10px;font:600 14px Inter,sans-serif;background:#fff;min-width:0}
.dq .btn.sm{min-height:44px}.dq-empty{padding:10px 2px}
.dpin{width:30px;height:30px;border-radius:50%;background:var(--c);color:#fff;border:3px solid #fff;display:grid;place-items:center;font:800 11px Inter,sans-serif;box-shadow:0 2px 6px rgba(0,0,0,.35)}
.dpro-pin{width:36px;height:36px;border-radius:50%;background:#111;color:#fff;border:3px solid #fff;display:grid;place-items:center;font-weight:800;box-shadow:0 0 0 6px rgba(17,17,17,.15),0 2px 8px rgba(0,0,0,.4)}
@media (min-width:1024px){.disp{grid-template-columns:minmax(0,1.35fr) minmax(380px,1fr);align-items:start}.disp-map{position:sticky;top:76px;height:calc(100vh - 110px)}.disp-side{max-height:none}}@media (min-width:1600px){.dboard{grid-template-columns:1fr 1fr}}
@media (prefers-color-scheme:dark){.dkp,.dpro,.dq,.dq-as{background:#16191C;color:#E8EAED;border-color:#2C3136}.dkp span{color:#A4ABB3}.disp-legend{background:rgba(22,25,28,.94);color:#E8EAED}}
@media (prefers-reduced-motion:reduce){.dq.hl{animation:none}}
/* Live ops command center */
body.ops-on .content,body.ops-on main{padding:0!important;max-width:none!important}
.ops{position:relative;height:calc(100vh - 60px);height:calc(100dvh - 60px);overflow:hidden;background:var(--bg)}
.ops-map{position:absolute;inset:0;z-index:0}
.ops-top{position:absolute;top:12px;left:12px;right:12px;z-index:500;pointer-events:none}
.ops-top>*{pointer-events:auto}
.okpis{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;max-width:760px}
.okpi{background:var(--paper);border:1px solid var(--line);border-radius:14px;padding:10px 12px;box-shadow:var(--sh)}
.okpi b{display:block;font-size:22px;line-height:1.1;letter-spacing:-.02em}.okpi b small{font-size:13px;color:var(--mute)}
.okpi span{font-size:11.5px;color:var(--mute);font-weight:600}
.samp{font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;background:var(--sel,#FFF8D1);color:var(--fg);padding:1px 5px;border-radius:5px;margin-left:2px;white-space:nowrap}
.ochips{display:flex;gap:6px;margin-top:8px;overflow-x:auto;scrollbar-width:none;padding-bottom:2px}
.ochip{flex:none;display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:0 12px;border-radius:999px;border:1px solid var(--line);background:var(--paper);color:var(--fg);font:600 13px Inter,sans-serif;box-shadow:var(--sh);cursor:pointer;text-decoration:none}
.ochip i{font-style:normal;font-size:11px;background:var(--bg);border-radius:999px;padding:1px 7px}
.ochip.on{background:var(--fg);color:var(--paper);border-color:var(--fg)}.ochip.on i{background:rgba(255,255,255,.2);color:inherit}
.ops-feed{position:absolute;z-index:500;background:var(--paper);border:1px solid var(--line);box-shadow:0 10px 40px -10px rgba(0,0,0,.35);display:flex;flex-direction:column;overflow:hidden}
.ofh{display:flex;justify-content:space-between;align-items:baseline;padding:14px 14px 8px}
.oalerts{display:grid;gap:6px;padding:0 10px 8px}
.oal{display:flex;align-items:center;gap:8px;text-align:left;border:0;border-radius:10px;padding:8px 10px;font:600 12.5px Inter,sans-serif;background:#FDECEA;color:#A50E0E;cursor:pointer}
.oal i{width:8px;height:8px;border-radius:50%;background:currentColor;flex:none;animation:opulse 1.4s infinite}
.oal.warn{background:#FEF3D6;color:#7A4E00}
@keyframes opulse{50%{opacity:.3}}
.olist{overflow-y:auto;flex:1;padding:0 6px 8px}
.orow{display:flex;gap:10px;align-items:center;width:100%;text-align:left;border:0;background:none;color:var(--fg);padding:10px 8px;border-radius:12px;cursor:pointer;font:inherit;border-bottom:1px solid var(--line)}
.orow:hover,.orow.sel{background:var(--bg)}
.orow .grow{min-width:0;display:flex;flex-direction:column;gap:1px}.orow b{font-size:14px}.orow small{color:var(--mute);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.orow .ost{color:var(--fg)}.lt{color:#D93025}
.odot{width:10px;height:10px;border-radius:50%;background:var(--c);flex:none;box-shadow:0 0 0 4px color-mix(in srgb,var(--c) 20%,transparent)}
.oeta{font-weight:800;font-size:18px;text-align:right;line-height:1}.oeta small{display:block;font-size:10px;color:var(--mute);font-weight:600}
.ops-sheet{position:absolute;z-index:600;background:var(--paper);border:1px solid var(--line);box-shadow:0 10px 40px -8px rgba(0,0,0,.4);padding:16px;overflow-y:auto}
.osh-h{position:relative;padding-right:40px}.osh-h h3{margin:8px 0 2px;font-size:20px}
.ox{position:absolute;top:-4px;right:-4px;width:40px;height:40px;border-radius:50%;border:0;background:var(--bg);color:var(--fg);font-size:16px;cursor:pointer}
.otl{display:flex;list-style:none;padding:0;margin:14px 0;gap:4px}
.otl li{flex:1;font-size:11px;font-weight:600;color:var(--mute);border-top:4px solid var(--line);padding-top:6px}.otl li.done{color:var(--fg);border-color:var(--fg)}
.ometa{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.ometa>div{background:var(--bg);border-radius:12px;padding:10px}.ometa small{display:block;font-size:11px;color:var(--mute);font-weight:600}.ometa b{font-size:16px}.ometa a{color:inherit}
.oact{margin-top:14px;display:grid;gap:10px}
.oasn{display:grid;gap:4px;font-size:12px;font-weight:600;color:var(--mute)}
.oasn select{min-height:44px;border-radius:12px;border:1.5px solid var(--line);background:var(--paper);color:var(--fg);padding:0 10px;font:600 14px Inter,sans-serif}
.obtns{display:flex;flex-wrap:wrap;gap:6px}.obtns .btn{min-height:40px}.flagged{background:#FEF3D6!important;color:#7A4E00!important}
.opro{width:38px;height:38px;border-radius:50%;background:var(--c);color:#fff;border:3px solid #fff;display:grid;place-items:center;font:800 14px Inter,sans-serif;box-shadow:0 2px 8px rgba(0,0,0,.4);filter:grayscale(.8);opacity:.6}
.opro.on{filter:none;opacity:1;box-shadow:0 0 0 5px color-mix(in srgb,var(--c) 30%,transparent),0 2px 8px rgba(0,0,0,.4)}
.opro.big{width:52px;height:52px;font-size:20px}
.ojob{width:28px;height:28px;border-radius:9px;background:var(--c);color:#fff;border:2px solid #fff;display:grid;place-items:center;font:800 13px Inter,sans-serif;box-shadow:0 2px 6px rgba(0,0,0,.35);transition:transform .15s}
.ojob.dim{opacity:.3}.ojob.sel{transform:scale(1.35);z-index:9}
.ojob.late{animation:olate 1.2s infinite}@keyframes olate{50%{box-shadow:0 0 0 8px rgba(217,48,37,.25),0 2px 6px rgba(0,0,0,.35)}}
@media (min-width:901px){.ops{height:100vh;height:100dvh}.ops-feed{top:12px;right:12px;bottom:12px;width:380px;border-radius:18px}.ops-top{right:404px}.ops-sheet{top:150px;left:12px;width:380px;max-height:calc(100% - 162px);border-radius:18px}}
@media (max-width:900px){.okpis{grid-template-columns:repeat(5,minmax(96px,1fr));overflow-x:auto;scrollbar-width:none}.okpi{padding:8px 10px}.okpi b{font-size:18px}
.ops{height:calc(100dvh - 120px)}.ops-feed{left:0;right:0;bottom:0;height:42%;border-radius:20px 20px 0 0}.ops-feed:before{content:'';display:block;width:40px;height:5px;border-radius:3px;background:var(--line);margin:8px auto 0}
.ops-sheet{left:0;right:0;bottom:0;max-height:78%;border-radius:20px 20px 0 0;padding-bottom:calc(16px + env(safe-area-inset-bottom))}}
@media (prefers-color-scheme:dark){.oal{background:#3A1512;color:#FFB4AB}.oal.warn{background:#3A2C0A;color:#FFD88A}.opro,.ojob{border-color:#171A1F}.flagged{background:#3A2C0A!important;color:#FFD88A!important}}
.ops-tiles{filter:saturate(.35) contrast(.95) brightness(1.04)}@media (prefers-color-scheme:dark){.ops-tiles{filter:invert(1) hue-rotate(180deg) brightness(.85) contrast(.9) saturate(.3)}}
/* ===== Notifications settings + log ===== */
.ntc{display:inline-flex;align-items:center;gap:6px;font-size:14px;cursor:pointer;white-space:nowrap}.ntc input{width:18px;height:18px;accent-color:#111}
.ntgrid{display:grid;gap:0;border-top:1px solid #EEF0F2;border-bottom:1px solid #EEF0F2}.ntrow{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid #EEF0F2;flex-wrap:wrap}.ntrow:last-child{border-bottom:0}.ntrow .sl{flex:1 1 220px}.ntchs{display:flex;gap:14px}
.ntbtns{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}.ntpv{width:100%;height:60vh;border:1px solid #EEF0F2;border-radius:12px;background:#FBF7F5}
.ntsh{max-height:75vh;overflow:auto}.ntlog{display:flex;gap:12px;padding:12px 14px;border-bottom:1px solid #EEF0F2}.ntlog:last-child{border-bottom:0}.pill.bad{background:#FCE8E6;color:#A50E0E}
/* Molly's Suds per-bag upgrade: scent + bag reminder for the Laundry Pro */
.mollysb{display:flex;flex-direction:column;gap:2px;background:#EEF5E3;border:1.5px solid #2F5D3F;color:#1E3B2A;border-radius:12px;padding:10px 12px;margin:0 0 12px}
.mollysb b{font-size:16px}
.detl{margin-top:6px;font-size:13px;color:var(--mute)}.detl b{color:var(--fg)}.detl.mo b{color:#2F5D3F}
.pill.bad{background:#FDE7E4;color:#9B2C1F;border:1px solid #F1B9B0}
