/* Conveyor Dashboard — tokens follow ENERGY-TWIN-BLUEPRINT §4.2 (glass HUD over a 3D diorama) */
:root{
  --glass:rgba(8,19,28,.80);--glass-solid:rgba(8,19,28,.92);--line-c:rgba(255,255,255,.09);--line-2:rgba(255,255,255,.16);
  --ink:#f0efec;--ink-2:#c3c2b7;--ink-3:#8f9aa0;--ink-4:#5f6b71;
  --accent:#46b96e;--line:#4fd1b5;--ai:#a78bfa;--order:#6fb3ff;
  --st-normal:#5db78a;--st-warn:#e5ae3a;--st-alarm:#e05b4c;--st-offline:#74838a;--st-maint:#5aa9d8;
  --soft-normal:rgba(93,183,138,.15);--soft-warn:rgba(229,174,58,.16);--soft-alarm:rgba(224,91,76,.16);--soft-off:rgba(116,131,138,.16);
  --sheet:#0a1219;--sheet-2:#0e1922;--sheet-3:#13212c;
  --sans:'IBM Plex Sans',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;
  --cond:'IBM Plex Sans Condensed','IBM Plex Sans',system-ui,sans-serif;
  --mono:'IBM Plex Mono',ui-monospace,Consolas,monospace;
  color-scheme:dark;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;overflow:hidden}
body{font-family:var(--sans);color:var(--ink);background:radial-gradient(120% 90% at 50% 0%,#14242f 0%,#0a141b 55%,#05090d 100%);-webkit-font-smoothing:antialiased;font-size:13px}
button,input,textarea,select{font:inherit;color:inherit}
button{cursor:pointer}
:focus-visible{outline:2px solid var(--line);outline-offset:2px}
.num,.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
.eyebrow{font-family:var(--cond);font-size:11px;font-weight:600;letter-spacing:.15em;text-transform:uppercase;color:var(--ink-3)}
.muted{color:var(--ink-3)}
.hidden{display:none!important}

/* ── 3D canvas + warp ── */
#scene{position:fixed;inset:0;width:100vw;height:100vh;display:block;transition:filter .15s}
#warpCv{position:fixed;inset:0;pointer-events:none;z-index:40}
#flash{position:fixed;inset:0;pointer-events:none;z-index:41;opacity:0}

/* ── top bar ── */
.topbar{position:fixed;top:14px;left:14px;right:14px;height:44px;display:flex;align-items:center;justify-content:space-between;z-index:20;pointer-events:none}
.topbar>*{pointer-events:auto}
.brand{display:flex;align-items:center;gap:10px;background:var(--glass);border:1px solid var(--line-c);border-radius:12px;padding:6px 14px 6px 8px;backdrop-filter:blur(14px)}
.brand-mark{width:30px;height:30px;border-radius:8px;background:linear-gradient(135deg,#4fd1b5,#2a8f7a);display:flex;align-items:center;justify-content:center;color:#062019}
.brand-t{font-weight:600;font-size:14px;white-space:nowrap}
.brand-s{font-size:11px;color:var(--ink-3);white-space:nowrap}
.views{display:flex;gap:2px;background:var(--glass);border:1px solid var(--line-c);border-radius:12px;padding:4px;backdrop-filter:blur(14px)}
.views button{border:0;background:transparent;color:var(--ink-2);padding:7px 14px;border-radius:8px;font-size:12.5px;font-weight:500}
.views button:hover{color:var(--ink);background:rgba(255,255,255,.05)}
.views button.on{background:var(--accent);color:#04140a;font-weight:600}
.tright{display:flex;gap:8px;align-items:center}
.bell{position:relative;display:flex;align-items:center;gap:8px;background:var(--glass);border:1px solid var(--line-c);border-radius:12px;padding:8px 12px;backdrop-filter:blur(14px);color:var(--ink-2)}
.bell .cnt{font-family:var(--mono);font-weight:600;min-width:20px;text-align:center;border-radius:10px;padding:1px 6px;background:var(--soft-off);color:var(--ink-3)}
.bell.alert{border-color:var(--st-warn);color:var(--ink)}
.bell.alert .cnt{background:var(--st-warn);color:#1a1102}
.bell.alert svg{animation:ring 1.6s ease-in-out infinite;color:var(--st-warn)}
@keyframes ring{0%,60%,100%{transform:rotate(0)}10%{transform:rotate(14deg)}20%{transform:rotate(-12deg)}30%{transform:rotate(8deg)}40%{transform:rotate(-5deg)}}
.userbtn{background:var(--glass);border:1px solid var(--line-c);border-radius:12px;padding:8px 12px;backdrop-filter:blur(14px);color:var(--ink-2);display:flex;gap:8px;align-items:center}
/* signed-in identity (top right on every screen) */
.whobox{display:flex;align-items:center;gap:6px;background:var(--glass);border:1px solid var(--line-c);border-radius:14px;padding:4px 4px 4px 6px;backdrop-filter:blur(14px)}
.who{display:flex;align-items:center;gap:9px;padding:2px 6px 2px 2px;min-width:0}
.av{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:12.5px;letter-spacing:.02em;flex-shrink:0;background:rgba(116,131,138,.25);color:var(--ink);border:1px solid rgba(255,255,255,.18)}
.av.sup{background:linear-gradient(135deg,#4fd1b5,#2a8f7a);color:#062019;border-color:transparent}
.who-n{font-size:13px;font-weight:600;line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px}
.who-r{font-size:11px;color:var(--ink-3);line-height:1.2;white-space:nowrap;margin-top:1px}
.who-r b{font-weight:600;color:var(--st-normal)}
.who.compact .who-r{display:none}
.who.compact .av{width:28px;height:28px;font-size:11.5px}
.iconbtn{width:34px;height:34px;border-radius:10px;border:1px solid var(--line-c);background:transparent;color:var(--ink-3);display:flex;align-items:center;justify-content:center}
.iconbtn:hover{color:var(--ink);border-color:var(--line-2)}
.signout{display:flex;align-items:center;gap:7px;height:34px;padding:0 12px;border-radius:10px;border:1px solid rgba(224,91,76,.35);background:rgba(224,91,76,.08);color:#f2b8b0;font-size:12.5px;font-weight:500}
.signout:hover{background:rgba(224,91,76,.18);border-color:var(--st-alarm);color:#fff}
.signout.sm{width:34px;padding:0;justify-content:center}
.fac-chips .who{background:var(--glass-solid);border:1px solid var(--line-c);border-radius:11px;padding:4px 10px 4px 4px}
.sh-who{margin-left:auto}.sh-who .who{border:1px solid var(--line-c);border-radius:11px;padding:4px 10px 4px 4px}
.sh-who + .sh-x{margin-left:0}
.menu{position:absolute;top:52px;right:0;min-width:240px;background:var(--glass-solid);border:1px solid var(--line-2);border-radius:12px;padding:6px;z-index:60}
.menu button,.menu .mi{display:flex;width:100%;text-align:left;border:0;background:none;padding:9px 10px;border-radius:8px;color:var(--ink-2);gap:8px;align-items:center}
.menu button:hover{background:rgba(255,255,255,.06);color:var(--ink)}
.menu .mi{color:var(--ink-3);font-size:12px}

/* ── glass panels (overview only; no blur over moving 3D in the facility page — §9) ── */
.panel{position:fixed;top:70px;bottom:52px;width:340px;background:var(--glass);border:1px solid var(--line-c);border-radius:14px;backdrop-filter:blur(14px);z-index:15;display:flex;flex-direction:column;overflow:hidden;transition:transform .35s cubic-bezier(.3,.7,.2,1),opacity .3s}
.panel.left{left:14px}.panel.right{right:14px}
.panel.folded{bottom:auto}
.panel.folded .pbody{display:none}
.phead{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px 14px 10px;border-bottom:1px solid var(--line-c)}
.phead .eyebrow{color:var(--ink-2)}
.fold{width:26px;height:26px;border-radius:7px;border:1px solid var(--line-c);background:transparent;color:var(--ink-3);display:flex;align-items:center;justify-content:center}
.fold svg{transition:transform .2s}
.panel.folded .fold svg{transform:rotate(180deg)}
.pbody{overflow-y:auto;padding:12px 14px 16px;flex:1}
.pbody::-webkit-scrollbar{width:6px}.pbody::-webkit-scrollbar-thumb{background:rgba(255,255,255,.1);border-radius:3px}
.sec{margin-top:16px}
.sec:first-child{margin-top:0}
.sec-h{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px}

.chipst{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;padding:3px 9px;border-radius:20px;background:var(--soft-off);color:var(--ink-2);white-space:nowrap}
.chipst i{width:7px;height:7px;border-radius:50%;background:var(--st-offline);font-style:normal}
.chipst.run{background:var(--soft-normal)}.chipst.run i{background:var(--st-normal);box-shadow:0 0 0 3px rgba(93,183,138,.25)}
.chipst.warn{background:var(--soft-warn)}.chipst.warn i{background:var(--st-warn)}
.chipst.alarm{background:var(--soft-alarm)}.chipst.alarm i{background:var(--st-alarm)}

.truck{background:linear-gradient(160deg,rgba(79,209,181,.12),rgba(79,209,181,.02) 60%);border:1px solid rgba(79,209,181,.22);border-radius:12px;padding:12px}
.truck.idle{background:rgba(255,255,255,.025);border-color:var(--line-c)}
.truck-top{display:flex;justify-content:space-between;gap:8px;align-items:flex-start}
.truck-o{font-family:var(--mono);font-size:15px;font-weight:600}
.truck-p{font-size:12px;color:var(--ink-3);margin-top:2px}
.truck-sku{font-size:12px;color:var(--ink-2);margin-top:8px;line-height:1.4}
.bigcount{display:flex;align-items:baseline;gap:6px;margin-top:10px}
.bigcount b{font-family:var(--mono);font-size:34px;font-weight:600;letter-spacing:-1px;text-shadow:0 0 18px rgba(79,209,181,.35)}
.bigcount span{font-family:var(--mono);color:var(--ink-3);font-size:14px}
.prog{height:6px;border-radius:3px;background:rgba(255,255,255,.07);margin-top:8px;overflow:hidden}
.prog>i{display:block;height:100%;width:0;background:var(--line);border-radius:3px;transition:width .6s}
.prog.over>i{background:var(--st-warn)}
.airow{margin-top:10px;font-size:12px;padding:7px 9px;border-radius:8px;background:rgba(0,0,0,.25);font-family:var(--mono);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.kgrid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.k{background:rgba(255,255,255,.03);border:1px solid var(--line-c);border-radius:10px;padding:9px 10px;min-width:0}
.k .eyebrow{font-size:10px;letter-spacing:.12em}
.kv{font-family:var(--mono);font-size:22px;font-weight:600;margin-top:4px;line-height:1.1}
.ks{font-size:11px;color:var(--ink-3);margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.k.rule{border-left:3px solid var(--line)}
.k.warnk{border-color:rgba(229,174,58,.45);background:rgba(229,174,58,.07)}
.k.warnk .kv{color:var(--st-warn)}

.mini-chart{height:92px;position:relative}
.mini-chart svg{display:block}

/* review queue + recent list */
.rq{display:flex;flex-direction:column;gap:8px}
.rv{border:1px solid rgba(229,174,58,.35);background:linear-gradient(160deg,rgba(229,174,58,.12),rgba(229,174,58,.03));border-radius:11px;padding:10px 11px;text-align:left;width:100%;color:var(--ink);transition:border-color .15s,transform .15s}
.rv:hover{border-color:var(--st-warn);transform:translateY(-1px)}
.rv-top{display:flex;justify-content:space-between;gap:8px;align-items:baseline}
.rv-o{font-family:var(--mono);font-weight:600;font-size:13.5px}
.rv-t{font-size:11px;color:var(--ink-3);white-space:nowrap}
.rv-p{font-size:12px;color:var(--ink-2);margin-top:2px}
.rv-r{font-size:12px;color:var(--st-warn);margin-top:6px;line-height:1.35}
.rv-go{display:flex;justify-content:flex-end;margin-top:6px;font-size:11.5px;font-weight:600;color:var(--st-warn)}
.empty-s{font-size:12px;color:var(--ink-3);padding:12px;border:1px dashed var(--line-c);border-radius:10px;text-align:center;line-height:1.5}
.rl{display:flex;flex-direction:column}
.rl button{display:grid;grid-template-columns:44px 1fr auto;gap:8px;align-items:center;border:0;background:none;padding:7px 4px;border-bottom:1px solid var(--line-c);text-align:left;color:var(--ink-2)}
.rl button:hover{background:rgba(255,255,255,.03)}
.rl .t{font-family:var(--mono);color:var(--ink-3);font-size:11.5px}
.rl .o{font-family:var(--mono);font-size:12px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rl .o small{display:block;font-family:var(--sans);color:var(--ink-3);font-size:11px}

.badge{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;font-weight:700;letter-spacing:.06em;padding:2px 8px;border-radius:20px;white-space:nowrap}
.badge::before{font-size:9px}
.b-pass{background:var(--soft-normal);color:var(--st-normal)}.b-pass::before{content:'●'}
.b-fail{background:var(--soft-alarm);color:var(--st-alarm)}.b-fail::before{content:'◆'}
.b-review{background:var(--soft-warn);color:var(--st-warn)}.b-review::before{content:'▲'}
.b-other{background:var(--soft-off);color:var(--ink-3)}.b-other::before{content:'○'}

/* ── corner nav, dock, footer ── */
.nav{position:fixed;left:368px;bottom:52px;display:flex;gap:6px;z-index:15}
.nav button,.nav .lay{width:36px;height:36px;border-radius:10px;border:1px solid var(--line-c);background:var(--glass);color:var(--ink-2);display:flex;align-items:center;justify-content:center;backdrop-filter:blur(14px)}
.nav button:hover{color:var(--ink);border-color:var(--line-2)}
.layers{position:absolute;bottom:44px;left:0;background:var(--glass-solid);border:1px solid var(--line-2);border-radius:12px;padding:10px 12px;min-width:200px}
.layers label{display:flex;align-items:center;gap:8px;padding:5px 0;font-size:12.5px;color:var(--ink-2);cursor:pointer}
.layers input{accent-color:var(--accent)}
.dock{position:fixed;left:50%;bottom:52px;transform:translateX(-50%);z-index:15;display:flex;gap:8px}
.dock button{display:flex;align-items:center;gap:8px;background:var(--glass);border:1px solid var(--line-2);border-radius:12px;padding:10px 16px;color:var(--ink);font-weight:500;backdrop-filter:blur(14px)}
.dock button:hover{border-color:var(--line)}
.foot{position:fixed;left:14px;right:14px;bottom:12px;height:28px;display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:11.5px;color:var(--ink-3);z-index:15;pointer-events:none}
.foot>*{pointer-events:auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.foot .warn::before{content:'▲ ';color:var(--st-warn)}
.foot .data b{color:var(--ink-2);font-weight:500}
.foot .data.lost b{color:var(--st-alarm)}

/* ── 3D pins ── */
#pins{position:fixed;inset:0;pointer-events:none;z-index:12}
.pin{position:absolute;left:0;top:0;transform:translate(-50%,-100%);pointer-events:auto;display:flex;flex-direction:column;align-items:center;will-change:transform}
.pin-card{display:flex;gap:9px;align-items:center;background:var(--glass-solid);border:1px solid var(--line-2);border-radius:11px;padding:7px 11px 7px 8px;white-space:nowrap;cursor:pointer;transition:border-color .2s,transform .2s}
.pin-card:hover,.pin.hot .pin-card{border-color:var(--line);transform:translateY(-2px)}
.pin-ic{width:26px;height:26px;border-radius:7px;display:flex;align-items:center;justify-content:center;background:rgba(79,209,181,.18);color:var(--line)}
.pin-n{font-size:12.5px;font-weight:600}
.pin-s{font-size:11px;color:var(--ink-3);margin-top:1px}
.pin-s b{font-family:var(--mono);color:var(--ink-2);font-weight:500}
.pin-more{font-size:11px;color:var(--line);margin-top:2px;display:none}
.pin.hot .pin-more{display:block}
.pin-stem{width:2px;height:28px;background:linear-gradient(var(--line-2),rgba(255,255,255,0))}
.pin.truckpin .pin-card{cursor:default;padding:5px 10px}
.pin.truckpin .pin-ic{background:rgba(111,179,255,.16);color:var(--order)}
.pin.alarm .pin-ic{background:rgba(229,174,58,.2);color:var(--st-warn)}

/* ── facility page (HUD over the line close-up) ── */
#fac{position:fixed;inset:0;z-index:30;pointer-events:none;clip-path:circle(0% at 50% 50%)}
#fac.open{clip-path:circle(150% at 50% 50%);transition:clip-path .75s cubic-bezier(.4,0,.2,1)}
#fac.closing{clip-path:circle(0% at 50% 50%);transition:clip-path .5s ease-in}
#fac>*{pointer-events:auto}
.fac-top{position:absolute;top:14px;left:14px;right:14px;display:flex;align-items:center;gap:12px}
.ret{display:flex;align-items:center;gap:8px;background:var(--glass-solid);border:1px solid var(--line-2);border-radius:11px;padding:9px 14px;color:var(--ink)}
.ret:hover{border-color:var(--line)}
.fac-title{display:flex;align-items:center;gap:10px}
.fac-title .pin-ic{width:34px;height:34px;border-radius:9px}
.fac-title h1{font-size:18px;font-weight:600}
.fac-title p{font-size:12px;color:var(--ink-3)}
.fac-chips{margin-left:auto;display:flex;gap:8px;align-items:center}
.hud{position:absolute;top:72px;bottom:80px;width:320px;background:var(--glass-solid);border:1px solid var(--line-c);border-radius:14px;overflow:hidden;display:flex;flex-direction:column;animation:slidein .5s cubic-bezier(.3,.7,.2,1) both}
.hud::before{content:'';position:absolute;inset:0;border-radius:14px;padding:1px;background:linear-gradient(160deg,rgba(79,209,181,.5),transparent 40%);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none}
.hud.l{left:14px}.hud.r{right:14px;animation-name:slideinr}
@keyframes slidein{from{transform:translateX(-30px);opacity:0}}
@keyframes slideinr{from{transform:translateX(30px);opacity:0}}
.hud .pbody{padding:14px}
.kpi{position:relative;padding:4px 0 12px 14px;margin-bottom:10px;border-bottom:1px solid var(--line-c)}
.kpi::before{content:'';position:absolute;left:0;top:6px;bottom:14px;width:3px;border-radius:2px;background:var(--line);box-shadow:0 0 10px var(--line)}
.kpi.order::before{background:var(--order);box-shadow:0 0 10px var(--order)}
.kpi.ai::before{background:var(--ai);box-shadow:0 0 10px var(--ai)}
.kpi.warn::before{background:var(--st-warn);box-shadow:0 0 10px var(--st-warn)}
.kpi-v{font-family:var(--mono);font-size:27px;font-weight:600;margin-top:3px;text-shadow:0 0 16px rgba(255,255,255,.12);line-height:1.15}
.kpi-v small{font-size:14px;color:var(--ink-3);font-weight:500}
.kpi-s{font-size:12px;color:var(--ink-3);margin-top:3px;line-height:1.4}
.photo{border-radius:10px;overflow:hidden;border:1px solid var(--line-c);background:#000;cursor:zoom-in;position:relative}
.photo img{display:block;width:100%;aspect-ratio:16/9;object-fit:cover}
.photo .pcap{position:absolute;left:8px;bottom:8px;max-width:calc(100% - 16px);font-size:11.5px;font-weight:600;background:rgba(0,0,0,.7);padding:3px 8px;border-radius:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
table.lt{width:100%;border-collapse:collapse;font-size:12px}
table.lt th{text-align:left;font-family:var(--cond);font-weight:600;font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);padding:5px 6px;border-bottom:1px solid var(--line-c)}
table.lt td{padding:6px;border-bottom:1px solid var(--line-c)}
table.lt td:last-child,table.lt th:last-child{text-align:right;font-family:var(--mono)}
.fac-dock{position:absolute;left:50%;bottom:22px;transform:translateX(-50%);display:flex;gap:8px}
.fac-dock button{display:flex;align-items:center;gap:8px;background:var(--glass-solid);border:1px solid var(--line-2);border-radius:12px;padding:10px 16px;color:var(--ink)}
.fac-dock button:hover{border-color:var(--line)}

/* ── history sheet ── */
#sheet{position:fixed;inset:0;z-index:50;background:var(--sheet);display:flex;flex-direction:column;opacity:0;transform:translateY(16px);transition:opacity .25s,transform .3s cubic-bezier(.3,.7,.2,1);pointer-events:none}
#sheet.open{opacity:1;transform:none;pointer-events:auto}
.sh-top{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:12px 22px;border-bottom:1px solid var(--line-c);background:var(--sheet-2)}
.sh-top h2{font-size:16px;font-weight:600;margin-right:6px}
.seg{display:inline-flex;background:rgba(255,255,255,.04);border:1px solid var(--line-c);border-radius:10px;padding:3px;gap:2px}
.seg button{border:0;background:transparent;color:var(--ink-3);padding:6px 13px;border-radius:7px;font-size:12.5px;font-weight:500;white-space:nowrap}
.seg button:hover{color:var(--ink)}
.seg button.on{background:var(--accent);color:#04140a;font-weight:600}
.seg.sm button{padding:4px 10px;font-size:11.5px}
.fd{background:rgba(255,255,255,.04);border:1px solid var(--line-c);border-radius:9px;padding:6px 10px;font-size:12.5px}
.period{color:var(--ink-2);font-weight:500}
.sh-x{margin-left:auto;display:flex;align-items:center;gap:6px;border:1px solid var(--line-2);background:transparent;border-radius:10px;padding:7px 12px;color:var(--ink-2)}
.sh-x:hover{color:var(--ink);border-color:var(--line)}
.sh-body{flex:1;overflow-y:auto;padding:16px 22px 40px}
.sh-in{max-width:1500px;margin:0 auto}
.card{background:var(--sheet-2);border:1px solid var(--line-c);border-radius:14px}
.kpis{display:grid;grid-template-columns:1.25fr 1fr 1fr 1fr 1fr;gap:12px;margin-bottom:12px}
.kc{padding:14px 16px;display:flex;flex-direction:column;min-height:150px;min-width:0}
.kc .eyebrow{display:flex;align-items:center;gap:6px}
.kc .kv{font-size:30px;margin-top:8px}
.kc .kv small{font-size:13px;color:var(--ink-3);font-family:var(--sans);font-weight:500;margin-left:4px}
.kc .ks{font-size:12px;color:var(--ink-2);white-space:normal;line-height:1.45;margin-top:6px}
.kc .kf{margin-top:auto;padding-top:8px;font-size:11.5px;color:var(--ink-3)}
.kc.warnk{border-color:rgba(229,174,58,.4)}
.kc.warnk .kv{color:var(--st-warn)}
.pill{font-size:11px;font-weight:700;padding:2px 9px;border-radius:20px;margin-left:8px;vertical-align:middle;font-family:var(--sans)}
.pill.good{background:var(--soft-normal);color:var(--st-normal)}.pill.watch{background:var(--soft-warn);color:var(--st-warn)}
.pill.bad{background:var(--soft-alarm);color:var(--st-alarm)}.pill.none{background:var(--soft-off);color:var(--ink-3)}
.bullet{position:relative;height:16px;margin-top:12px}
.bullet .bands{position:absolute;inset:0;border-radius:4px}
.bullet .fill{position:absolute;left:0;top:5px;height:6px;border-radius:3px;width:0;transition:width .7s}
.bullet .tgt{position:absolute;top:-3px;bottom:-3px;width:2px;margin-left:-1px;background:var(--ink);border-radius:1px}
.bullet-l{position:relative;height:14px;margin-top:3px;font-size:10.5px;color:var(--ink-3)}
.bullet-l span{position:absolute;right:10%;white-space:nowrap;margin-right:-1px}
.delta.good{color:var(--st-normal);font-weight:600}.delta.bad{color:var(--st-alarm);font-weight:600}
.row2{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:12px;margin-bottom:12px}
.cpanel{padding:14px 16px 10px;min-width:0}
.cp-h{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;flex-wrap:wrap;margin-bottom:6px}
.cp-t{font-size:14px;font-weight:600}
.cp-s{font-size:11.5px;color:var(--ink-3);margin-top:2px}
.legend{display:flex;gap:12px;font-size:11.5px;color:var(--ink-2);align-items:center}
.legend span{display:inline-flex;align-items:center;gap:5px}
.legend i{width:10px;height:10px;border-radius:3px;display:inline-block}
.chart{position:relative;width:100%;min-height:220px}
.chart svg{display:block}
.hit{fill:transparent}
.hit:hover{fill:rgba(255,255,255,.04)}
.chart-empty{height:220px;display:flex;align-items:center;justify-content:center;color:var(--ink-4);font-size:12.5px;text-align:center}
.tip{position:absolute;pointer-events:none;background:#16242f;border:1px solid var(--line-2);border-radius:9px;padding:8px 11px;font-size:12px;line-height:1.5;white-space:nowrap;z-index:5;color:var(--ink-2)}
.tip b{color:var(--ink)}
.dnote{font-size:12px;color:var(--ink-2);padding:2px 2px 4px}
.tcard{overflow:hidden}
.t-head{padding:14px 16px 12px;display:flex;justify-content:space-between;align-items:flex-end;gap:12px;flex-wrap:wrap;border-bottom:1px solid var(--line-c)}
.tools{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.search input{width:230px;background:rgba(255,255,255,.04);border:1px solid var(--line-c);border-radius:9px;padding:7px 10px;font-size:12.5px}
.search input:focus{outline:none;border-color:var(--line)}
.chips{display:flex;gap:6px;flex-wrap:wrap}
.chip{border:1px solid var(--line-c);background:rgba(255,255,255,.03);color:var(--ink-3);padding:5px 11px;border-radius:20px;font-size:12px;font-weight:500;white-space:nowrap}
.chip b{margin-left:5px;color:var(--ink-2);font-family:var(--mono);font-weight:500}
.chip.on{background:rgba(70,185,110,.14);border-color:var(--accent);color:var(--ink)}
.btn{border:1px solid var(--line-c);background:rgba(255,255,255,.04);color:var(--ink-2);padding:6px 12px;border-radius:9px;font-size:12px;font-weight:500;display:inline-flex;align-items:center;gap:6px}
.btn:hover{border-color:var(--line-2);color:var(--ink)}
.owrap{overflow-x:auto}
table.ot{width:100%;min-width:1060px;border-collapse:collapse;font-size:12.5px;table-layout:fixed}
table.ot th{background:var(--sheet-3);padding:9px 10px;text-align:left;color:var(--ink-3);font-family:var(--cond);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;font-weight:600;border-bottom:1px solid var(--line-c);white-space:nowrap}
table.ot td{padding:9px 10px;border-bottom:1px solid var(--line-c);vertical-align:middle;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
table.ot .r{text-align:right}table.ot .c{text-align:center}
table.ot col.c-ico{width:30px}table.ot col.c-time{width:62px}table.ot col.c-order{width:116px}table.ot col.c-plate{width:90px}
table.ot col.c-num{width:80px}table.ot col.c-diff{width:96px}table.ot col.c-res{width:132px}
tr.day td{background:var(--sheet-3);padding:7px 12px;font-size:12px}
tr.day b{color:var(--ink)}
tr.day span{color:var(--ink-3);margin-left:10px}
tr.or{cursor:pointer}
tr.or:hover{background:rgba(255,255,255,.025)}
tr.or td:first-child{box-shadow:inset 3px 0 0 transparent}
tr.or.r-pass td:first-child{box-shadow:inset 3px 0 0 var(--st-normal)}
tr.or.r-fail td:first-child{box-shadow:inset 3px 0 0 var(--st-alarm)}
tr.or.r-review td:first-child{box-shadow:inset 3px 0 0 var(--st-warn)}
tr.or.exp{background:rgba(79,209,181,.06)}
.chev{display:inline-block;color:var(--ink-4);transition:transform .2s}
tr.or.exp .chev{transform:rotate(90deg);color:var(--line)}
.t-o{font-family:var(--mono);font-weight:600;color:var(--order)}
.brk{display:block;font-size:10.5px;color:var(--st-warn)}
.dchip{display:inline-block;min-width:52px;padding:2px 8px;border-radius:6px;font-size:11.5px;font-weight:600;font-family:var(--mono)}
.d0{background:var(--soft-normal);color:var(--st-normal)}.d1{background:var(--soft-warn);color:var(--st-warn)}.d3{background:var(--soft-alarm);color:var(--st-alarm)}
.ic-ok{color:var(--st-normal);margin-left:5px;font-weight:700}.ic-warn{color:var(--st-warn);margin-left:5px;font-weight:700}
.by{display:block;font-size:10px;color:var(--ink-3);margin-top:2px}
.tag-no{display:inline-block;padding:2px 8px;border-radius:6px;font-size:11px;font-weight:600;background:var(--soft-off);color:var(--ink-2)}
tr.dr>td{padding:0!important;border-bottom:none;white-space:normal;overflow:visible}
.dp{display:none;padding:14px 16px 6px;background:rgba(0,0,0,.18);border-bottom:1px solid var(--line-c)}
.dp.open{display:block}
.dp-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;margin-bottom:12px}
.box{background:var(--sheet-2);border:1px solid var(--line-c);border-top:3px solid var(--bx,var(--st-offline));border-radius:12px;overflow:hidden;min-width:0}
.box-h{padding:9px 12px;border-bottom:1px solid var(--line-c);display:flex;align-items:center;gap:8px}
.box-h b{color:var(--bx);font-size:13px}
.box-h small{color:var(--ink-3);font-size:11px;margin-left:4px}
.box-h .badge{margin-left:auto}
.box-b{padding:6px 12px 10px}
.bx-order{--bx:var(--order)}.bx-ai{--bx:var(--ai)}.bx-pass{--bx:var(--st-normal)}.bx-fail{--bx:var(--st-alarm)}.bx-review{--bx:var(--st-warn)}
.dr-row{display:flex;justify-content:space-between;gap:10px;padding:6px 0;border-bottom:1px solid var(--line-c);font-size:12.5px}
.dr-row:last-child{border-bottom:none}
.dr-row>span:first-child{color:var(--ink-3)}
.dr-row>span:last-child{text-align:right}
.note{font-size:12px;color:var(--ink-2);background:rgba(255,255,255,.04);border-radius:8px;padding:8px 10px;margin-top:8px;line-height:1.45}
.note.warn{background:var(--soft-warn);color:var(--ink)}
table.mini{width:100%;border-collapse:collapse;font-size:12px}
table.mini th{padding:5px 6px;text-align:left;color:var(--ink-3);font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:600;border-bottom:1px solid var(--line-c)}
table.mini td{padding:6px;border-bottom:1px solid var(--line-c)}
table.mini th:last-child,table.mini td:last-child{text-align:right}
table.mini tr.tot td{font-weight:600;border-bottom:none}
.imgs{display:flex;gap:22px;flex-wrap:wrap}
.ig-l{font-family:var(--cond);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;font-weight:600;margin-bottom:6px}
.ig-r{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:12px}
.thw{display:flex;flex-direction:column;align-items:center;gap:3px;width:86px}
.th{width:86px;height:62px;object-fit:cover;border-radius:7px;border:2px solid var(--line-c);cursor:zoom-in;background:#000}
.th.ok-t{border-color:rgba(93,183,138,.7)}.th.fail-t{border-color:rgba(224,91,76,.7)}
.cap{font-size:10.5px;font-weight:600;max-width:86px;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cap.c-ok{color:var(--st-normal)}.cap.c-no{color:var(--ink-3)}.cap.c-off{color:var(--st-warn)}
.hint{width:100%;font-size:11.5px;color:var(--ink-3);margin:-4px 0 4px}
.t-foot{padding:10px 16px;font-size:11.5px;color:var(--ink-3)}
.empty{padding:40px 20px;text-align:center;color:var(--ink-4);font-size:13px;line-height:1.8}
.spin{display:inline-block;width:15px;height:15px;border:2px solid var(--line-2);border-top-color:var(--line);border-radius:50%;animation:spin .7s linear infinite;vertical-align:middle;margin-right:6px}
@keyframes spin{to{transform:rotate(360deg)}}

/* ── review modal ── */
.modal{position:fixed;inset:0;z-index:70;background:rgba(2,6,9,.72);display:flex;align-items:center;justify-content:center;padding:20px}
.mdl{width:min(920px,100%);max-height:calc(100vh - 40px);overflow-y:auto;background:var(--sheet-2);border:1px solid rgba(229,174,58,.45);border-radius:16px;box-shadow:0 30px 80px rgba(0,0,0,.6)}
.mdl-h{display:flex;align-items:flex-start;gap:12px;padding:16px 18px;border-bottom:1px solid var(--line-c);background:linear-gradient(160deg,rgba(229,174,58,.14),transparent 70%)}
.mdl-h h3{font-size:17px;font-weight:600}
.mdl-h p{font-size:12.5px;color:var(--ink-2);margin-top:3px}
.mdl-x{margin-left:auto;border:1px solid var(--line-2);background:none;border-radius:9px;width:34px;height:34px;color:var(--ink-2);font-size:18px}
.mdl-b{padding:14px 18px}
.why{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}
.why div{background:var(--soft-warn);border:1px solid rgba(229,174,58,.35);border-radius:9px;padding:9px 12px;font-size:13.5px;color:var(--ink)}
.why div::before{content:'▲ ';color:var(--st-warn)}
.mgrid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin-bottom:12px}
.mstat{background:rgba(255,255,255,.03);border:1px solid var(--line-c);border-radius:10px;padding:10px 12px}
.mstat .kv{font-size:24px}
.mdl textarea{width:100%;min-height:62px;background:rgba(255,255,255,.04);border:1px solid var(--line-c);border-radius:10px;padding:9px 11px;font-size:13px;resize:vertical}
.mdl textarea:focus{outline:none;border-color:var(--line)}
.mdl-f{display:flex;gap:10px;padding:14px 18px 18px;border-top:1px solid var(--line-c);align-items:center;flex-wrap:wrap;position:sticky;bottom:0;background:var(--sheet-2);border-radius:0 0 16px 16px}
.mdl-f .who{font-size:12px;color:var(--ink-3);margin-right:auto}
.dec{min-width:150px;padding:14px 18px;border-radius:12px;font-size:16px;font-weight:700;letter-spacing:.04em;border:2px solid}
.dec.pass{background:rgba(93,183,138,.12);border-color:var(--st-normal);color:var(--st-normal)}
.dec.fail{background:rgba(224,91,76,.12);border-color:var(--st-alarm);color:var(--st-alarm)}
.dec.arm.pass{background:var(--st-normal);color:#04140a}
.dec.arm.fail{background:var(--st-alarm);color:#1a0402}
.dec:disabled{opacity:.5;cursor:not-allowed}
.ro{font-size:12.5px;color:var(--ink-3);padding:6px 0}

.lb{position:fixed;inset:0;background:rgba(0,0,0,.92);z-index:90;display:flex;align-items:center;justify-content:center}
.lb img{max-width:94vw;max-height:88vh;border-radius:8px}
.lb-cap{position:absolute;bottom:24px;left:50%;transform:translateX(-50%);background:rgba(0,0,0,.75);padding:7px 14px;border-radius:8px;font-size:14px;font-weight:600;white-space:nowrap}
.lb-cap:empty{display:none}
.lb-x{position:absolute;top:18px;right:22px;width:42px;height:42px;border-radius:50%;border:1px solid #444;background:rgba(0,0,0,.6);color:#fff;font-size:24px}

.toast{position:fixed;top:72px;left:50%;transform:translateX(-50%);z-index:95;background:var(--glass-solid);border:1px solid var(--line-2);border-radius:30px;padding:10px 18px;font-size:13px;display:flex;gap:10px;align-items:center;box-shadow:0 10px 30px rgba(0,0,0,.4);animation:tin .3s ease-out}
.toast.warn{border-color:var(--st-warn)}.toast.warn::before{content:'▲';color:var(--st-warn)}
.toast.ok::before{content:'●';color:var(--st-normal)}.toast.err::before{content:'◆';color:var(--st-alarm)}
.toast button{border:1px solid var(--st-warn);background:none;color:var(--st-warn);border-radius:20px;padding:3px 10px;font-size:12px;font-weight:600}
@keyframes tin{from{opacity:0;transform:translate(-50%,-8px)}}
.fatal{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;z-index:5;color:var(--ink-3);text-align:center;padding:30px;line-height:1.6}

@media (max-width:1180px){.kpis{grid-template-columns:1fr 1fr 1fr}.row2{grid-template-columns:1fr}.dp-grid{grid-template-columns:1fr 1fr}.panel{width:300px}.nav{left:328px}}
@media (max-width:1100px){.who-r{display:none}.signout span{display:none}.signout{width:34px;padding:0;justify-content:center}}
@media (max-width:760px){.who-n{max-width:90px}
  .panel.left{display:none}.panel.right{top:auto;bottom:0;left:0;right:0;width:auto;max-height:46vh;border-radius:14px 14px 0 0}
  .nav{left:14px;bottom:calc(46vh + 10px)}.dock{bottom:calc(46vh + 10px);left:auto;right:14px;transform:none}
  .foot{display:none}.views button{padding:6px 8px;font-size:11.5px}.brand-s,.brand-t{display:none}
  .kpis{grid-template-columns:1fr 1fr}.dp-grid,.mgrid{grid-template-columns:1fr}.sh-top,.sh-body{padding-left:16px;padding-right:16px}
  .hud{position:static;width:auto;margin:10px 14px}#fac{overflow-y:auto}.fac-top{position:static;padding:14px 14px 0;flex-wrap:wrap}.fac-dock{position:static;transform:none;justify-content:center;padding:10px}
}
body.clean .topbar,body.clean .panel,body.clean .nav,body.clean .dock,body.clean .foot,body.clean #pins,body.clean .toast{display:none!important}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ═══ v2 (2026-11-05): warehouse ↔ line views, alert bar, History pop-up card ═══ */
.tleft{display:flex;align-items:center;gap:8px;min-width:0}
.tleft .ret{background:var(--glass);border:1px solid var(--line-2);border-radius:12px;padding:9px 14px;color:var(--ink);display:flex;align-items:center;gap:7px;backdrop-filter:blur(14px)}
.tleft .ret:hover{border-color:var(--line)}
/* alert bar — top centre */
.alertwrap{position:absolute;left:50%;top:0;transform:translateX(-50%);pointer-events:auto}
.alertpill{display:flex;align-items:center;gap:10px;height:44px;padding:0 16px;border-radius:22px;background:var(--glass);border:1px solid var(--line-c);backdrop-filter:blur(14px);color:var(--ink-2);font-size:13px;font-weight:500;white-space:nowrap}
.alertpill i{width:9px;height:9px;border-radius:50%;background:var(--st-normal);box-shadow:0 0 0 4px rgba(93,183,138,.18)}
.alertpill .chev2{color:var(--ink-3);transition:transform .2s}
.alertpill[aria-expanded=true] .chev2{transform:rotate(180deg)}
.alertpill.alert{border-color:var(--st-warn);color:var(--ink);background:linear-gradient(90deg,rgba(229,174,58,.24),rgba(8,19,28,.86) 70%)}
.alertpill.alert i{background:var(--st-warn);box-shadow:0 0 0 0 rgba(229,174,58,.6);animation:apulse 1.6s infinite}
@keyframes apulse{0%{box-shadow:0 0 0 0 rgba(229,174,58,.6)}70%{box-shadow:0 0 0 10px rgba(229,174,58,0)}100%{box-shadow:0 0 0 0 rgba(229,174,58,0)}}
.alertdrop{position:absolute;top:52px;left:50%;transform:translateX(-50%);width:min(420px,calc(100vw - 28px));max-height:min(70vh,560px);overflow-y:auto;background:var(--glass-solid);border:1px solid var(--line-2);border-radius:14px;padding:10px;display:flex;flex-direction:column;gap:8px;box-shadow:0 24px 60px rgba(0,0,0,.5);z-index:60}
.ad-foot{display:flex;justify-content:center;padding-top:4px}
.hbtn{display:flex;align-items:center;gap:8px;height:44px;padding:0 14px;background:var(--glass);border:1px solid var(--line-c);border-radius:12px;backdrop-filter:blur(14px);color:var(--ink);font-weight:500}
.hbtn:hover{border-color:var(--line)}
.ltag{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:18px;padding:0 5px;border-radius:5px;background:rgba(79,209,181,.14);color:var(--line);font-family:var(--mono);font-size:10.5px;font-weight:600;vertical-align:1px}
/* loading-lines list (warehouse view, left) */
.llist{display:flex;flex-direction:column;gap:6px}
.lrow{display:grid;grid-template-columns:34px 1fr auto;gap:10px;align-items:center;width:100%;text-align:left;padding:9px 10px;border-radius:11px;border:1px solid rgba(79,209,181,.3);background:linear-gradient(160deg,rgba(79,209,181,.1),rgba(79,209,181,.02));color:var(--ink)}
button.lrow:hover{border-color:var(--line);transform:translateY(-1px)}
.lrow.off{border:1px dashed var(--line-c);background:transparent;color:var(--ink-4);padding:6px 10px}
.lnum{width:32px;height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-weight:600;font-size:12px;background:rgba(116,131,138,.12);color:var(--ink-4)}
.lnum.on{background:var(--line);color:#062019}
.lmain{display:flex;flex-direction:column;gap:4px;min-width:0}
.lmain b{font-weight:600;font-size:13px}
.lmain small{font-size:11.5px;color:var(--ink-3);display:flex;gap:6px;align-items:center;flex-wrap:wrap;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lrow.off .lmain b{color:var(--ink-3);font-weight:500}
.lrow.off .lmain small{color:var(--ink-4)}
.lgo{font-size:12px;color:var(--line);font-weight:600;white-space:nowrap}
.rvdot{color:var(--st-warn);font-weight:600}
.prog.thin{height:4px;margin-top:2px}
.btn.wide{width:100%;justify-content:center;margin-top:10px;padding:9px 12px}
.eq{display:flex;justify-content:space-between;gap:10px;padding:6px 0;border-bottom:1px solid var(--line-c);font-size:12.5px}
.eq span{color:var(--ink-3)}.eq b{font-weight:500;text-align:right}
.rl button{grid-template-columns:44px 1fr auto}
/* pins: installed line = button, others grey */
button.pin-card{font:inherit;color:inherit;text-align:left;cursor:pointer}
.pin-n,.pin-s{display:block}
.pin .pin-more{display:none}
.pin:hover .pin-more{display:block}
.pin.off .pin-card{cursor:default;background:rgba(8,19,28,.6);border-style:dashed;border-color:rgba(255,255,255,.12);padding:4px 9px}
.pin.off .pin-n{font-family:var(--mono);font-size:11px;color:var(--ink-4);font-weight:500}
.pin.off .pin-stem{opacity:.4;height:18px}
/* view transitions: panels slide out during the warp, back in after */
.panel{transition:transform .45s cubic-bezier(.3,.7,.2,1),opacity .35s}
body.warping .panel.left{transform:translateX(-40px);opacity:0;pointer-events:none}
body.warping .panel.right{transform:translateX(40px);opacity:0;pointer-events:none}
body.warping #pins{opacity:0}
body.mode-line .panel{background:var(--glass-solid);backdrop-filter:none}   /* no blur over the moving 3D inside (§9) */
/* History & Reports — one pop-up card */
.hpop{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:26px;background:rgba(3,7,10,.6);backdrop-filter:blur(5px);opacity:0;pointer-events:none;transition:opacity .25s}
.hpop.open{opacity:1;pointer-events:auto}
.hcard{width:min(1480px,100%);height:min(940px,100%);display:flex;flex-direction:column;background:var(--sheet);border:1px solid var(--line-2);border-radius:20px;overflow:hidden;box-shadow:0 40px 120px rgba(0,0,0,.6);transform:translateY(16px) scale(.985);transition:transform .3s cubic-bezier(.3,.7,.2,1)}
.hpop.open .hcard{transform:none}
.hcard .sh-top{border-radius:20px 20px 0 0}
table.ot col.c-line{width:52px}
@media (max-width:1100px){.hbtn span{display:none}.hbtn{width:44px;padding:0;justify-content:center}.alertpill{max-width:44vw;overflow:hidden}}
@media (max-width:760px){.alertwrap{position:static;transform:none}.alertpill span{display:none}.alertpill{padding:0 14px}.brand{display:none}.hpop{padding:0}.hcard{height:100%;border-radius:0}}

