﻿:root{
  --navy:#111111;--navy2:#444444;--navy3:#fe5000;--navy4:#fe5000;
  --sky:#fff3ee;--sky2:#ffddd0;
  --bg:#F2F2F0;--bg2:#ffffff;--bg3:#e8e8e6;
  --border:#DDDDDD;--border2:#CCCCCC;
  --text:#111111;--text2:#444444;--text3:#888888;
  --ok:#1a6b3c;--ok-bg:#e8f5ee;--ok-bd:#b0d9c0;
  --warn:#92520a;--warn-bg:#fef5e7;--warn-bd:#f0c87a;
  --crit:#a81f1f;--crit-bg:#fdf0ee;--crit-bd:#f0b8b0;
  --r:4px;--r2:8px;--r3:8px;
  --sh:0 1px 3px rgba(0,0,0,.05),0 2px 8px rgba(0,0,0,.06);
  --sh2:0 4px 20px rgba(0,0,0,.09),0 2px 6px rgba(0,0,0,.05);
  --bg1:#e8e8e6;
  --fd:'Montserrat',sans-serif;--fb:'Montserrat',sans-serif;--fm:'DM Mono',monospace;
  --orange:#fe5000;
}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;overflow:hidden}
body{background:var(--bg);color:var(--text);font-family:var(--fb);-webkit-font-smoothing:antialiased}

.view{display:none;height:100vh;overflow:hidden}
.view.active{display:flex}
#vDash{flex-direction:row}

/* iPhone fix: cursor:pointer makes divs with onclick tappable on iOS Safari */
[onclick]{cursor:pointer}

/* Mobile: natural page scroll, no nested overflow */
@media(max-width:768px){
  html,body{height:auto;min-height:100%;overflow-x:hidden;overflow-y:auto}
  .view{height:auto;overflow:visible !important}
  .main,.log-main,.sp-wrap,.qly-main,.op-main{overflow:visible !important;height:auto}
  .scroll,.log-scroll,.sp-scroll,.qly-scroll,.op-scroll{overflow:visible !important;height:auto;flex:none}
}

/* ─ SIDEBAR ─ */
.sb-logo{padding:0 0 0;border-bottom:1px solid var(--border)}
/* Orange top stripe */
.sb-logo::before{content:'';display:block;height:3px;background:var(--orange)}
.sb-logo-inner{padding:20px 20px 18px}
.sb-brand{font-family:'Montserrat',sans-serif;font-weight:700;font-size:18px;letter-spacing:5px;text-transform:uppercase;color:var(--orange);line-height:1}
.sb-tagline{font-family:'Montserrat',sans-serif;font-weight:400;font-size:8px;letter-spacing:2.5px;text-transform:uppercase;color:var(--text3);margin-top:5px}
.sb-rule{display:none}
.sb-nav{padding:16px 12px 4px}
.sb-navlbl{font-size:8px;font-weight:600;color:var(--border2);text-transform:uppercase;letter-spacing:2px;padding:0 8px 10px}
.nav-a{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:0;margin-bottom:1px;font-size:10px;font-weight:500;letter-spacing:1px;text-transform:uppercase;color:var(--text3);cursor:pointer;transition:all .13s;text-decoration:none;border-left:2px solid transparent;font-family:'Montserrat',sans-serif}
.admin-only-nav{display:none}/* shown only after admin login */
body.not-authed .view{display:none!important}
body.not-authed aside{display:none!important}
.nav-a:hover{color:var(--text);background:var(--bg3);border-left-color:var(--border2)}
.nav-a.on{color:var(--orange);background:rgba(254,80,0,.06);border-left:2px solid var(--orange)}
.ni{width:13px;height:13px;flex-shrink:0;opacity:.4;transition:opacity .13s}.nav-a:hover .ni{opacity:.7}.nav-a.on .ni{opacity:1;color:var(--orange)}
.wip-tag{margin-left:auto;display:inline-flex;align-items:center;gap:3px;font-size:7px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;padding:1px 5px;border-radius:3px;background:rgba(245,158,11,.1);color:#b45309;border:1px solid rgba(245,158,11,.25);flex-shrink:0;line-height:1.6}
.wip-badge{display:inline-flex;align-items:center;gap:4px;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;padding:2px 7px;border-radius:4px;background:rgba(245,158,11,.1);color:#b45309;border:1px solid rgba(245,158,11,.25);vertical-align:middle;margin-left:8px;flex-shrink:0;line-height:1.5}

.net-group{padding:0 12px 4px}
.net-hdr{display:flex;align-items:center;justify-content:space-between;padding:14px 8px 6px}
.net-name{font-size:8px;font-weight:600;color:var(--border2);text-transform:uppercase;letter-spacing:2px}
.net-badge{font-size:8px;padding:1px 6px;border-radius:2px;background:var(--bg3);color:var(--text3);letter-spacing:.5px;font-family:var(--fm);border:1px solid var(--border)}
.sb-site{display:flex;align-items:center;justify-content:space-between;padding:6px 10px;border-radius:0;cursor:pointer;transition:all .12s;margin-bottom:1px;border-left:2px solid transparent}
.sb-site:hover{background:var(--bg3);border-left-color:var(--border2)}
.sb-site.on{background:rgba(254,80,0,.06);border-left-color:var(--orange)}
.sb-sn{font-size:11px;font-weight:400;letter-spacing:.3px;color:var(--text3);transition:color .12s}.sb-site:hover .sb-sn{color:var(--text)}.sb-site.on .sb-sn{color:var(--orange)}
.pip{width:6px;height:6px;border-radius:50%;flex-shrink:0}
.p-ok{background:#22c55e;box-shadow:0 0 4px rgba(34,197,94,.35)}
.p-warn{background:#f59e0b;box-shadow:0 0 4px rgba(245,158,11,.35)}
.p-crit{background:#ef4444;box-shadow:0 0 5px rgba(239,68,68,.5);animation:pc 1.3s infinite}
@keyframes pc{0%,100%{opacity:1}50%{opacity:.28}}
.net-separator{height:1px;background:var(--border);margin:4px 12px}

.sb-foot{margin-top:auto;padding:14px 20px;border-top:1px solid var(--border);font-size:9px;font-weight:500;letter-spacing:.8px;text-transform:uppercase;color:var(--text3)}
.sync{display:flex;align-items:center;gap:7px}
.s-dot{width:5px;height:5px;border-radius:50%;background:var(--orange);animation:bk 2.5s infinite}
@keyframes bk{0%,100%{opacity:1}50%{opacity:.2}}

/* ─ MAIN ─ */
.main{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}
.topbar{background:var(--bg2);border-bottom:1.5px solid var(--border2);box-shadow:0 1px 3px rgba(0,0,0,.04);height:52px;padding:0 24px;display:flex;align-items:center;justify-content:space-between;flex-shrink:0;z-index:50;position:relative}
.tb-title{font-size:12px;font-weight:600;letter-spacing:.3px}
.tb-sub{font-size:9px;color:var(--text3);margin-top:2px;text-transform:uppercase;letter-spacing:.8px}
.tb-r{display:flex;align-items:center;gap:8px}
.gh-update-info{display:flex;flex-direction:column;align-items:flex-end;gap:1px;padding:0 12px}
.gh-update-label{font-size:9px;color:var(--text3);text-transform:uppercase;letter-spacing:.6px;font-weight:600}
.gh-update-time{font-size:11px;color:var(--text2);font-weight:500;font-family:var(--fm)}
.tdv{width:1px;height:18px;background:var(--border);margin:0 2px}
.btn{background:var(--bg2);border:1px solid var(--border2);color:var(--text);font-family:var(--fb);font-size:11px;font-weight:500;padding:6px 13px;border-radius:var(--r2);cursor:pointer;outline:none;transition:all .15s ease;text-transform:uppercase;letter-spacing:.5px}
.btn:hover{border-color:var(--navy3)}
.btn:active{transform:translateY(1px);opacity:.9}
.btn-navy{background:var(--orange);color:#fff;border-color:var(--orange);box-shadow:0 1px 4px rgba(254,80,0,.2)}.btn-navy:hover{background:#d94400;border-color:#d94400;box-shadow:0 2px 8px rgba(254,80,0,.3)}.btn-navy:active{transform:translateY(1px);box-shadow:none}
select{background:var(--bg2);border:1px solid var(--border2);color:var(--text2);font-family:var(--fb);font-size:11px;padding:6px 26px 6px 11px;border-radius:var(--r2);cursor:pointer;outline:none;-webkit-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%238a9bb4' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 9px center}

.scroll{flex:1;overflow-y:auto;padding:24px 28px 60px}
::-webkit-scrollbar{width:5px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border2);border-radius:3px}

/* ─ GLOBE KPI STRIP ─ */
.globe-kpi-strip{position:absolute;top:0;left:0;bottom:0;width:160px;display:flex;flex-direction:column;justify-content:center;gap:0;background:rgba(255,255,255,.94);backdrop-filter:blur(10px);border-right:1.5px solid var(--border2);padding:16px 0;z-index:10;pointer-events:none}
.globe-kpi{padding:14px 18px;flex:1;display:flex;flex-direction:column;justify-content:center}
.globe-kpi+.globe-kpi{border-top:1px solid var(--border)}
.globe-kpi-l{font-size:9px;font-weight:500;text-transform:uppercase;letter-spacing:1px;color:var(--text3);margin-bottom:6px}
.globe-kpi-v{font-family:var(--fd);font-size:32px;font-weight:700;line-height:1;margin-bottom:4px}
.globe-kpi-v.ok{color:var(--ok)}.globe-kpi-v.crit{color:var(--crit)}.globe-kpi-v.warn{color:var(--warn)}
.globe-kpi-s{font-size:9px;color:var(--text3);line-height:1.4;margin-bottom:8px}
.globe-kpi-bar{height:2px;background:var(--border);border-radius:1px;overflow:hidden}
.globe-kfill{height:100%;border-radius:1px;transition:width .6s ease}

/* ─ GLOBE + INCIDENTS ROW ─ */
.dash-globe-row{display:flex;gap:16px;margin-bottom:18px;align-items:stretch}
/* Incidents widget */
.dash-inc-widget{width:260px;flex-shrink:0;background:#fff;border:1.5px solid var(--border2);border-radius:var(--r3);box-shadow:var(--sh);display:flex;flex-direction:column;overflow:hidden}
.dash-inc-hdr{padding:11px 16px;border-bottom:1.5px solid var(--border2);display:flex;align-items:center;justify-content:space-between;flex-shrink:0}
.dash-inc-ttl{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.8px;color:var(--text)}
.dash-inc-all{background:none;border:none;font-size:10px;font-weight:500;color:var(--orange);cursor:pointer;font-family:var(--fb);padding:0;letter-spacing:.3px}
.dash-inc-all:hover{text-decoration:underline}
.dash-inc-list{flex:1;display:flex;flex-direction:column;overflow-y:auto;max-height:420px;scrollbar-width:thin;scrollbar-color:var(--border2) transparent}
.dash-inc-list::-webkit-scrollbar{width:4px}.dash-inc-list::-webkit-scrollbar-track{background:transparent}.dash-inc-list::-webkit-scrollbar-thumb{background:var(--border2);border-radius:2px}
.dash-inc-sep{padding:5px 14px 4px;font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.8px;color:var(--text3);background:var(--bg);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:1}
.dash-inc-empty{padding:24px 16px;font-size:12px;color:var(--text3);font-style:italic;text-align:center}
.dash-inc-item{display:flex;gap:0;border-bottom:1px solid var(--border);transition:background .12s;cursor:pointer}
.dash-inc-item:last-child{border-bottom:none}
.dash-inc-item:hover{background:var(--bg3)}
.dash-inc-item.resolved{opacity:.45}
.dash-inc-item.resolved .dash-inc-site,.dash-inc-item.resolved .dash-inc-desc{color:var(--text3)}
.dash-inc-bar{width:3px;flex-shrink:0;border-radius:0}
.dash-inc-bar.crit{background:var(--crit)}.dash-inc-bar.warn{background:var(--warn)}.dash-inc-bar.ok{background:var(--ok)}
.dash-inc-body{flex:1;padding:11px 14px;min-width:0}
.dash-inc-site{font-size:11px;font-weight:600;color:var(--text);margin-bottom:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dash-inc-desc{font-size:11px;color:var(--text2);line-height:1.4;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.dash-inc-foot{display:flex;align-items:center;justify-content:space-between;margin-top:5px;gap:6px}
.dash-inc-date{font-size:9px;color:var(--text3);font-family:var(--fm)}
.dash-inc-status{font-size:8px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;padding:1px 6px;border-radius:3px}
.dash-inc-status.open{background:var(--crit-bg);color:var(--crit);border:1px solid var(--crit-bd)}
.dash-inc-status.monitoring{background:var(--warn-bg);color:var(--warn);border:1px solid var(--warn-bd)}
.dash-inc-status.resolved{background:var(--ok-bg);color:var(--ok);border:1px solid var(--ok-bd)}
@media(max-width:768px){.dash-globe-row{flex-direction:column}.dash-inc-widget{width:auto}}

/* ─ GLOBE ─ */
.globe-card{background:#fff;border:1.5px solid var(--border2);border-radius:var(--r3);overflow:hidden;margin-bottom:18px;box-shadow:var(--sh);position:relative}
.globe-hd{padding:11px 18px;border-bottom:1.5px solid var(--border2);display:flex;align-items:center;justify-content:space-between;background:#fff}
.globe-ttl{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.8px;color:var(--text)}
.globe-leg{display:flex;gap:14px;align-items:center}
.gl-it{display:flex;align-items:center;gap:5px;font-size:10px;color:var(--text3);text-transform:uppercase;letter-spacing:.4px}
.gl-dot{width:6px;height:6px;border-radius:50%}
.globe-hint{font-size:10px;color:var(--text3);font-style:italic}
#gc{height:420px;position:relative;cursor:grab;background:#F6F5F2;border-radius:0 0 var(--r3) var(--r3)}
#gc:active{cursor:grabbing}
#globe-svg{width:100%;height:100%;display:block}
@keyframes pulse-ring{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:.1;transform:scale(1.6)}}
.pin-pulse{transform-origin:center;animation:pulse-ring 1.4s ease-in-out infinite}
#gtt{position:absolute;pointer-events:none;background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r2);padding:11px 14px 11px 14px;font-size:11px;color:var(--text);opacity:0;transition:opacity .18s;z-index:20;min-width:165px;max-width:210px;box-shadow:var(--sh2)}
#gtt.show{opacity:1}
#gtt.pinned{pointer-events:auto}
#gtt-close{display:none;position:absolute;top:6px;right:8px;background:none;border:none;color:var(--text3);font-size:15px;cursor:pointer;padding:0;line-height:1;font-family:var(--fb)}
#gtt-close:hover{color:var(--text)}
#gtt.pinned #gtt-close{display:block}
.gtt-name{font-weight:600;font-size:13px;margin-bottom:2px;padding-right:16px}
.gtt-reg{font-size:10px;color:var(--text3);text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px}
.gtt-time{font-size:10px;color:var(--text3);font-family:var(--fm);margin-top:5px}
.gtt-act{display:none;font-size:9px;color:var(--text3);margin-top:6px;text-transform:uppercase;letter-spacing:.5px;background:none;border:none;padding:0;cursor:pointer;font-family:var(--fb)}
.gtt-act:hover{color:var(--orange)}
#gtt.pinned .gtt-act{display:block}
.gtt-badge{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:2px;font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.4px}


/* ─ NETWORK SECTIONS ─ */
.net-section{margin-bottom:20px}
.net-section-hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:11px;padding-bottom:10px;border-bottom:1px solid var(--border)}
.net-section-title{display:flex;align-items:center;gap:10px}
.net-label{font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.8px}
.net-tag{font-size:10px;padding:4px 10px;border-radius:4px;font-weight:600;text-transform:uppercase;letter-spacing:.5px}
.net-tag.big400{background:var(--sky);color:#a03200;border:1px solid var(--sky2)}
.net-tag.big250{background:#fef3c7;color:#92520a;border:1px solid #fde68a}
.net-tag.big1500{background:#f0f4ff;color:#3730a3;border:1px solid #c7d2fe}
.net-tag.china{background:#fff5f5;color:#991b1b;border:1px solid #fecaca}
.net-count{font-size:11px;color:var(--text3)}

/* ─ SITES GRID ─ */
.sites-grid{display:grid;gap:11px}
.sites-grid.g3{grid-template-columns:repeat(3,1fr)}
.sites-grid.g4{grid-template-columns:repeat(4,1fr)}
.sites-grid.g6{grid-template-columns:repeat(6,1fr);gap:8px}
.sites-grid.g8{grid-template-columns:repeat(8,1fr);gap:8px}
.g6 .sc-hd,.g8 .sc-hd{flex-direction:column;gap:5px;padding:8px 10px}
.g6 .sc-hd>div:last-child,.g8 .sc-hd>div:last-child{flex-direction:row;align-items:center;justify-content:space-between;text-align:left}
.g6 .sc-name,.g8 .sc-name{font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.g6 .sc-tz,.g8 .sc-tz{font-size:10px}
.g6 .sc-inc-hint,.g8 .sc-inc-hint{margin-top:2px}

.sc{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);box-shadow:var(--sh);overflow:hidden;cursor:pointer;transition:box-shadow .18s,border-color .18s,transform .18s;border-left:3px solid transparent;touch-action:manipulation;-webkit-tap-highlight-color:rgba(10,22,40,.05)}
.sc:hover{box-shadow:0 4px 20px rgba(0,0,0,.1);border-color:var(--orange);border-left-color:var(--orange);transform:translateY(-2px)}
.sc.ok-c{border-left-color:var(--ok-bd)}
.sc.warn-c{border-left-color:var(--warn);border-color:var(--warn-bd)}
.sc.crit-c{border-left-color:var(--crit);border-color:var(--crit-bd)}
.sc-hd{padding:10px 12px;display:flex;align-items:flex-start;justify-content:space-between;gap:8px}
.sc-name{font-size:12px;font-weight:600}
.sc-reg{font-size:9px;color:var(--text3);margin-top:1px;text-transform:uppercase;letter-spacing:.4px}
.sc-tz{font-size:11px;color:var(--text2);font-family:var(--fm);font-weight:500;letter-spacing:.02em}
.sc-inc-hint{font-size:8px;color:var(--crit);font-weight:700;text-transform:uppercase;letter-spacing:.5px;margin-top:4px}
.badge{display:inline-flex;align-items:center;gap:3px;padding:3px 7px;border-radius:4px;font-size:9px;font-weight:500;text-transform:uppercase;letter-spacing:.4px;flex-shrink:0;white-space:nowrap}
.b-ok{background:var(--ok-bg);color:var(--ok);border:1px solid var(--ok-bd)}
.b-warn{background:var(--warn-bg);color:var(--warn);border:1px solid var(--warn-bd)}
.b-crit{background:var(--crit-bg);color:var(--crit);border:1px solid var(--crit-bd)}
.b-dot{width:4px;height:4px;border-radius:50%;background:currentColor}
.sc-body{padding:9px 13px;min-height:50px}
.irow{display:flex;align-items:flex-start;gap:6px;margin-bottom:6px}
.irow:last-child{margin-bottom:0}
.tt{font-size:8px;font-weight:500;text-transform:uppercase;letter-spacing:.3px;padding:2px 5px;border-radius:2px;flex-shrink:0;margin-top:1px;white-space:nowrap}
.tt-eq{background:#eef1f6;color:#4a5568;border:1px solid var(--border2)}
.tt-wq{background:var(--sky);color:var(--navy3);border:1px solid var(--sky2)}
.tt-su{background:#f0f4ff;color:#3730a3;border:1px solid #c7d2fe}
.tt-st{background:#f0fdf4;color:#166534;border:1px solid #bbf7d0}
.tt-sa{background:var(--crit-bg);color:var(--crit);border:1px solid var(--crit-bd)}
.tt-it{background:#faf5ff;color:#7e22ce;border:1px solid #e9d5ff}
.i-desc{font-size:11px;color:var(--text2);line-height:1.45}
.i-meta{font-size:9px;color:var(--text3);margin-top:2px}
.no-iss{font-size:11px;color:var(--text3);font-style:italic;padding:2px 0}
.sc-past{padding:7px 13px 9px;border-top:1px solid var(--border);opacity:.5}
.sc-past-hdr{font-size:8px;font-weight:600;text-transform:uppercase;letter-spacing:.6px;color:var(--text3);margin-bottom:5px}
.sc-past-row{opacity:.8}
.sc-past-tt{background:var(--bg3)!important;color:var(--text3)!important;border:1px solid var(--border)!important}
.sc-past-desc{font-size:11px;color:var(--text3);line-height:1.4}
.sc-past-meta{font-size:9px;color:var(--text3);margin-top:1px;opacity:.7}

/* ─ MACHINE STATUS VIEW ─ */
.mst-section{margin-bottom:24px}
.mst-section-hdr{display:flex;align-items:center;gap:10px;margin-bottom:12px;padding-bottom:10px;border-bottom:1px solid var(--border)}
.mst-section-title{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.8px;color:var(--text)}
.mst-section-count{font-size:10px;color:var(--text3)}
.mst-wrap{display:flex;flex-direction:column;gap:11px}
.mst-card{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);box-shadow:var(--sh);display:flex;overflow:hidden;transition:box-shadow .15s}
.mst-card:hover{box-shadow:0 4px 20px rgba(10,22,40,.1)}
.mst-card.s-active{border-left:3px solid var(--navy4)}
.mst-card.s-done{border-left:3px solid #22c55e}
.mst-card.s-stock{border-left:3px solid var(--border2);opacity:.75}
.mst-info{width:196px;flex-shrink:0;padding:16px 18px;border-right:1px solid var(--border);display:flex;flex-direction:column;justify-content:center;gap:3px}
.mst-model-tag{display:inline-flex;align-items:center;padding:2px 7px;border-radius:3px;font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.9px;margin-bottom:5px;width:fit-content}
.mst-model-tag.big400{background:var(--sky);color:var(--navy3);border:1px solid var(--sky2)}
.mst-model-tag.big1500{background:#f0f4ff;color:#3730a3;border:1px solid #c7d2fe}
.mst-mid{font-family:var(--fm);font-size:13px;font-weight:500;color:var(--text)}
.mst-serial{font-size:9px;color:var(--text3);font-family:var(--fm);letter-spacing:.3px}
.mst-dest{font-size:14px;font-weight:600;color:var(--text);margin-top:8px;display:flex;align-items:center;gap:5px;font-family:var(--fd);letter-spacing:.2px}
.mst-dest-arrow{color:var(--text3);font-size:11px}
.mst-dest-none{font-size:13px;color:var(--text3);font-style:italic;margin-top:8px}
.mst-body{flex:1;padding:16px 26px;display:flex;flex-direction:column;gap:10px;justify-content:center;min-width:0}
.mst-timeline{display:flex;align-items:flex-start}
.mst-step{display:flex;flex-direction:column;align-items:center;flex-shrink:0;position:relative;min-width:0;flex:1;max-width:80px}
.mst-dot{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:box-shadow .2s}
.mst-dot.done{background:#22c55e;border:2px solid #22c55e}
.mst-dot.active{background:var(--navy);border:2px solid var(--navy);box-shadow:0 0 0 4px rgba(254,80,0,.18)}
.mst-dot.pending{background:var(--bg3);border:2px solid var(--border2)}
.mst-slbl{font-size:8px;text-transform:uppercase;letter-spacing:.3px;margin-top:6px;white-space:normal;text-align:center;line-height:1.3;word-break:break-word;max-width:72px}
.mst-slbl.done{color:#22c55e;font-weight:600}
.mst-slbl.active{color:var(--navy);font-weight:700}
.mst-slbl.pending{color:var(--text3)}
.mst-line{flex:1;height:2px;margin-top:12px;min-width:8px;flex-shrink:1}
.mst-line.done{background:#22c55e}
.mst-line.pending{background:repeating-linear-gradient(90deg,var(--border2) 0,var(--border2) 4px,transparent 4px,transparent 9px)}
.mst-note{font-size:10px;color:var(--text3);display:flex;align-items:center;gap:7px;padding-top:2px}
.mst-sp{display:inline-flex;align-items:center;padding:2px 8px;border-radius:20px;font-size:9px;font-weight:500;text-transform:uppercase;letter-spacing:.4px;flex-shrink:0}
.mst-sp.active{background:rgba(254,80,0,.1);color:var(--navy4);border:1px solid rgba(254,80,0,.25)}
.mst-sp.done{background:rgba(34,197,94,.1);color:#15803d;border:1px solid rgba(34,197,94,.25)}
.mst-sp.stock{background:var(--bg3);color:var(--text3);border:1px solid var(--border2)}
/* drag-and-drop */
.mst-dot.active{cursor:grab}
.mst-dot.active:active{cursor:grabbing}
.mst-step.mst-drop-hover{background:rgba(254,80,0,.06);border-radius:8px}
.mst-step.mst-drop-hover .mst-dot{transform:scale(1.18);box-shadow:0 0 0 5px rgba(254,80,0,.22)!important;transition:transform .12s,box-shadow .12s}
.mst-step.mst-drop-hover .mst-slbl{color:var(--navy4)!important;font-weight:700!important}
.mst-card.mst-dragging{opacity:.55;box-shadow:0 6px 28px rgba(10,22,40,.18)}
.mst-rev-badge{position:absolute;top:0;right:0;background:var(--navy);color:#fff;font-family:var(--fd);font-size:13px;font-weight:600;letter-spacing:.5px;padding:6px 10px;border-radius:0 0 0 var(--r2);min-width:44px;text-align:center;z-index:1}
/* pack checkboxes */
.mst-packs{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}
.mst-pack-lbl{display:flex;align-items:center;gap:5px;cursor:pointer;padding:4px 8px;border-radius:var(--r);border:1px solid var(--border2);background:var(--bg3);font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text3);transition:all .13s;user-select:none}
.mst-pack-lbl input{width:13px;height:13px;cursor:pointer;accent-color:var(--navy);flex-shrink:0}
.mst-pack-lbl.checked{background:var(--sky);color:var(--navy3);border-color:var(--sky2)}
.mst-pack-lbl:hover{border-color:var(--navy3);color:var(--text)}

/* ─ UNDER CONSTRUCTION ─ */
.constr-section{margin-bottom:20px}
.constr-type-group{margin-bottom:18px}
.constr-type-hdr{display:flex;align-items:center;gap:8px;margin-bottom:9px;padding-bottom:7px;border-bottom:1px solid var(--border)}
.constr-type-lbl{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;color:var(--text2)}
.constr-type-count{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.4px;padding:2px 8px;border-radius:3px;background:rgba(245,158,11,.08);color:#92400e;border:1px solid rgba(245,158,11,.2)}
.constr-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:11px}
.cc{background:var(--bg2);border:1px solid var(--border);border-radius:var(--r3);box-shadow:var(--sh);overflow:hidden;border-left:3px solid #f59e0b;transition:box-shadow .15s,transform .15s}
.cc:hover{box-shadow:0 4px 20px rgba(10,22,40,.1);transform:translateY(-1px)}
.cc.building{border-left-color:#3b82f6}
.cc-hd{padding:11px 13px 9px;border-bottom:1px solid var(--border);display:flex;align-items:flex-start;justify-content:space-between;gap:6px}
.cc-name{font-size:12px;font-weight:500}
.cc-reg{font-size:9px;color:var(--text3);margin-top:2px;text-transform:uppercase;letter-spacing:.4px}
.cc-phase{display:inline-flex;align-items:center;gap:4px;padding:3px 7px;border-radius:2px;font-size:9px;font-weight:500;text-transform:uppercase;letter-spacing:.4px;flex-shrink:0;white-space:nowrap}
.phase-planning{background:rgba(245,158,11,.12);color:#b45309;border:1px solid rgba(245,158,11,.3)}
.phase-building{background:rgba(59,130,246,.12);color:#1d4ed8;border:1px solid rgba(59,130,246,.3)}
.cc-body{padding:10px 13px 12px}
.cc-progress-lbl{display:flex;justify-content:space-between;font-size:9px;color:var(--text3);margin-bottom:5px;text-transform:uppercase;letter-spacing:.5px}
.cc-bar{height:4px;background:var(--bg3);border-radius:2px;overflow:hidden}
.cc-fill{height:100%;border-radius:2px;transition:width .6s ease}
.fill-planning{background:linear-gradient(90deg,#f59e0b,#fbbf24)}
.fill-building{background:linear-gradient(90deg,#3b82f6,#60a5fa)}
.cc-est{font-size:10px;color:var(--text3);margin-top:7px}
.cc-est span{color:var(--text2);font-weight:500}
.tbl{width:100%;border-collapse:collapse}
.tbl th{font-size:9px;font-weight:500;text-transform:uppercase;letter-spacing:.8px;color:var(--text3);padding:9px 14px;border-bottom:1px solid var(--border);text-align:left}
.tbl td{padding:10px 14px;font-size:11px;border-bottom:1px solid var(--border);color:var(--text2);vertical-align:middle}
.tbl tr:last-child td{border-bottom:none}
.tbl tbody tr:hover td{background:var(--bg3)}
.td-b{color:var(--text);font-weight:500}

/* ─ SITE CARD MODAL ─ */
.sc-log-bar-sev.ok{background:var(--ok)}.sc-log-bar-sev.warn{background:var(--warn)}
/* ─ REPORT VIEW ─ */
#vReport{flex-direction:column}
.rpt-wrap{flex:1;overflow-y:auto;background:var(--bg)}
.rpt-hdr{background:var(--navy);display:flex;align-items:stretch;flex-shrink:0}
.rpt-hl{padding:20px 30px;flex:1}
.rpt-brand{font-weight:500;font-size:11px;letter-spacing:3px;text-transform:uppercase;color:rgba(255,255,255,.6)}
.rpt-sn{font-family:var(--fd);font-size:22px;font-weight:700;color:#fff;margin-top:3px}
.rpt-loc{font-size:11px;color:rgba(255,255,255,.28);margin-top:4px;font-family:var(--fm)}
.rpt-hr{padding:20px 28px;display:flex;align-items:center;border-left:1px solid rgba(255,255,255,.07)}
.rpt-back{font-size:11px;color:rgba(255,255,255,.38);cursor:pointer;border:1px solid rgba(255,255,255,.12);padding:8px 17px;border-radius:var(--r2);transition:all .13s;font-family:var(--fb);text-transform:uppercase;letter-spacing:.5px;background:none;white-space:nowrap}
.rpt-back:hover{color:#fff;border-color:rgba(255,255,255,.35)}
.rpt-body{max-width:680px;width:100%;margin:0 auto;padding:28px 24px 60px}
.rlbl{font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.9px;color:var(--text3);margin-bottom:10px}

/* ─ INCIDENT LOG VIEW ─ */
#vLog{flex-direction:row}
.log-main{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}
.log-scroll{flex:1;overflow-y:auto;padding:22px 26px 40px}
.log-stats{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-bottom:20px}
.ls{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);padding:14px 16px;box-shadow:var(--sh);transition:box-shadow .15s;cursor:default}
.ls:hover{box-shadow:var(--sh2)}
.ls-n{font-size:9px;font-weight:500;text-transform:uppercase;letter-spacing:1px;color:var(--text3);margin-bottom:6px}
.ls-v{font-family:var(--fd);font-size:28px;font-weight:600;line-height:1;color:var(--navy)}
.ls-v.crit{color:var(--crit)}.ls-v.warn{color:var(--warn)}.ls-v.ok{color:var(--ok)}
.ls-s{font-size:10px;color:var(--text3);margin-top:3px}
.log-filters{display:flex;align-items:center;gap:8px;margin-bottom:16px;flex-wrap:wrap}
.lf-label{font-size:10px;color:var(--text3);font-weight:500;text-transform:uppercase;letter-spacing:.5px;margin-right:2px}
.lf-pill{font-size:10px;padding:4px 11px;border-radius:20px;border:1px solid var(--border2);color:var(--text3);cursor:pointer;transition:all .15s ease;background:var(--bg2)}
.lf-pill:hover{border-color:var(--navy3);color:var(--text)}
.lf-pill.on{background:var(--orange);color:#fff;border-color:var(--orange)}
.lf-pill.crit-f.on{background:var(--crit);border-color:var(--crit);color:#fff}
.lf-pill.warn-f.on{background:var(--warn);border-color:var(--warn);color:#fff}
.lf-pill.ok-f.on{background:var(--ok);border-color:var(--ok);color:#fff}
.lf-sep{width:1px;height:18px;background:var(--border);margin:0 2px}
.log-search{position:relative;flex:1;min-width:180px;max-width:280px}
.log-search input{width:100%;background:var(--bg2);border:1px solid var(--border2);color:var(--text);font-family:var(--fb);font-size:12px;padding:7px 12px 7px 32px;border-radius:var(--r2);outline:none;transition:border-color .13s}
.log-search input:focus{border-color:var(--navy3)}
.log-search-ico{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--text3);pointer-events:none;font-size:13px}
.log-table-wrap{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);box-shadow:var(--sh);overflow-x:auto;overflow-y:visible;-webkit-overflow-scrolling:touch}
.log-tbl-hd{padding:13px 16px;border-bottom:1px solid var(--border);display:flex;flex-direction:column;gap:10px}
.log-filter-groups{display:flex;flex-direction:column;gap:7px}
.log-filter-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.log-filter-row .lf-label{flex-shrink:0;min-width:56px}
.lf-pills{display:flex;gap:5px;flex-wrap:wrap;align-items:center}
.log-search-row{display:flex;align-items:center;gap:10px}
.log-search-row .log-search{flex:1}
.log-count{font-size:11px;color:var(--text3)}
.ltbl{width:100%;border-collapse:collapse;min-width:720px}
.ltbl th{font-size:9px;font-weight:500;text-transform:uppercase;letter-spacing:.9px;color:var(--text3);padding:10px 16px;border-bottom:1px solid var(--border);text-align:left;cursor:pointer;white-space:nowrap;user-select:none;background:var(--bg2);position:sticky;top:0;z-index:2}
.ltbl th:hover{color:var(--text2)}
.ltbl th.sorted{color:var(--orange)}
.ltbl .sort-arr{opacity:.25;margin-left:3px;font-size:9px}.ltbl th.sorted .sort-arr{opacity:1}
.ltbl td{padding:11px 16px;font-size:12px;border-bottom:1px solid var(--border);color:var(--text2);vertical-align:middle}
.ltbl tr:last-child td{border-bottom:none}
.ltbl tbody tr{cursor:pointer;transition:background .1s}
.ltbl tbody tr:hover td{background:var(--bg3)}
.ltbl tbody tr.row-open td{background:var(--sky)}
.td-site{font-weight:500;color:var(--text)}
.td-mono{font-family:var(--fm);font-size:11px;white-space:nowrap;color:var(--text3)}

/* resolved rows */
.tr-resolved td{opacity:.48;color:var(--text3)}
.tr-resolved:hover td{opacity:.7;background:var(--bg3)}
.tr-resolved .td-site{color:var(--text3);font-weight:400}
.log-divider-row td{padding:0;border:none;background:transparent}
.log-divider{display:flex;align-items:center;gap:10px;padding:14px 16px 8px;border-top:1px solid var(--border)}
.log-divider-lbl{font-size:9px;font-weight:500;text-transform:uppercase;letter-spacing:1.2px;color:var(--text3);white-space:nowrap}
.log-divider-line{flex:1;height:1px;background:var(--border)}
.log-divider-count{font-size:9px;color:var(--text3);background:var(--bg3);border:1px solid var(--border);padding:1px 7px;border-radius:10px;white-space:nowrap}
.detail-row>td{padding:0;border-bottom:1px solid var(--border2)!important;background:var(--sky)!important}
.detail-box{padding:16px 20px 18px;display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;border-top:1px solid var(--border2)}
.df-label{font-size:9px;font-weight:500;text-transform:uppercase;letter-spacing:.8px;color:var(--text3);margin-bottom:4px}
.df-val{font-size:12px;color:var(--text);line-height:1.5}
.detail-tl{grid-column:1/-1;border-top:1px solid var(--border2);padding-top:12px;margin-top:2px}
.detail-tl-title{font-size:9px;font-weight:500;text-transform:uppercase;letter-spacing:.8px;color:var(--text3);margin-bottom:8px}
.tl-row{display:flex;gap:10px;align-items:flex-start;padding:5px 0;border-bottom:1px solid var(--border)}
.tl-row:last-child{border-bottom:none}
.tl-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;margin-top:3px}
.tl-time{font-size:10px;color:var(--text3);font-family:var(--fm);white-space:nowrap;min-width:100px}
.tl-text{font-size:11px;color:var(--text2)}
.detail-act-row{display:flex;gap:8px;margin-top:12px;grid-column:1/-1}

/* STATUS SELECTOR */
.ssel{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:24px}
.so{border:2px solid var(--border2);border-radius:var(--r3);padding:16px 15px;cursor:pointer;text-align:center;transition:all .15s;background:var(--bg2)}
.so:hover{box-shadow:var(--sh)}
.so.s-ok{border-color:var(--ok);background:var(--ok-bg)}
.so.s-warn{border-color:var(--warn);background:var(--warn-bg)}
.so.s-crit{border-color:var(--crit);background:var(--crit-bg)}
.so-ico{font-size:20px;margin-bottom:7px;display:block}
.so-lbl{font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.7px}
.c-ok{color:var(--ok)}.c-warn{color:var(--warn)}.c-crit{color:var(--crit)}
.so-desc{font-size:10px;color:var(--text3);margin-top:5px;line-height:1.55;text-align:left}
.fcard{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);box-shadow:var(--sh);padding:20px;margin-bottom:12px}
.fcard-ttl{font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.9px;margin-bottom:14px}
.field{margin-bottom:13px}.field:last-child{margin-bottom:0}
label{display:block;font-size:9px;font-weight:500;text-transform:uppercase;letter-spacing:.9px;color:var(--text3);margin-bottom:5px}
input[type=text],input[type=number],input[type=date],input[type=email],textarea,select,.fsel{width:100%;background:var(--bg);border:1px solid var(--border2);color:var(--text);font-family:var(--fb);font-size:13px;padding:9px 13px;border-radius:var(--r2);outline:none;transition:border-color .13s;-webkit-appearance:none;appearance:none}
input:focus,textarea:focus,select:focus,.fsel:focus{border-color:var(--navy3);background:var(--bg2);box-shadow:0 0 0 3px rgba(254,80,0,.09);outline:none}
select{background-image:url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%238a9bb4' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 11px center;padding-right:30px;cursor:pointer}
.prd-shift-btn{padding:6px 12px;font-size:11px;font-weight:600;border:1px solid var(--border);border-radius:5px;background:var(--bg);color:var(--text3);cursor:pointer;font-family:var(--fb);transition:all .15s;letter-spacing:.5px;text-transform:uppercase}
.prd-shift-btn:hover{border-color:var(--navy3);color:var(--navy3)}.prd-shift-btn:active{transform:translateY(1px)}.prd-shift-btn.prd-shift-sel{background:var(--orange);color:#fff;border-color:var(--orange);box-shadow:0 2px 8px rgba(254,80,0,.2)}
textarea{min-height:86px;resize:vertical;line-height:1.6}
.fsel{background-image:url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%238a9bb4' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 11px center;padding-right:30px;cursor:pointer}
.g2{display:grid;grid-template-columns:1fr 1fr;gap:11px}
.tg{display:grid;grid-template-columns:repeat(3,1fr);gap:7px}
.to{border:1px solid var(--border2);border-radius:var(--r2);padding:9px 10px;cursor:pointer;transition:all .13s;background:var(--bg);display:flex;align-items:center;gap:7px}
.to:hover{border-color:var(--navy3)}.to.sel{border-color:var(--navy3);background:var(--sky)}
.to-ico{font-size:14px;flex-shrink:0}
.to-lbl{font-size:11px;font-weight:500;color:var(--text2)}.to.sel .to-lbl{color:var(--navy)}
.inc{border:1px solid var(--border);border-radius:var(--r2);padding:11px 13px;margin-bottom:7px;background:var(--bg);display:flex;gap:9px;align-items:flex-start}
.inc:last-child{margin-bottom:0}
.inc-bar{width:3px;border-radius:2px;align-self:stretch;flex-shrink:0}
.inc-bar.ok{background:var(--ok)}.inc-bar.warn{background:var(--warn)}.inc-bar.crit{background:var(--crit)}
.inc-tags{display:flex;gap:5px;margin-bottom:5px;flex-wrap:wrap}
.inc-d{font-size:12px;color:var(--text2);line-height:1.45}
.inc-m{font-size:10px;color:var(--text3);margin-top:3px}
.sub-row{display:flex;justify-content:flex-end;gap:9px;margin-top:20px}
.btn-lg{padding:11px 24px;font-size:12px}
/* ─ PRODUCTIVITY DRAWER ─ */
#prd-drawer-overlay{position:fixed;inset:0;background:rgba(10,22,40,.5);backdrop-filter:blur(3px);z-index:200;opacity:0;pointer-events:none;transition:opacity .25s}
#prd-drawer-overlay.open{opacity:1;pointer-events:auto}
#prd-drawer{position:fixed;top:0;right:0;width:500px;max-width:100vw;height:100vh;background:var(--bg);z-index:201;display:flex;flex-direction:column;box-shadow:-6px 0 40px rgba(10,22,40,.2);transform:translateX(100%);transition:transform .28s cubic-bezier(.4,0,.2,1)}
#prd-drawer.open{transform:translateX(0)}
.prd-drawer-hdr{background:var(--navy);padding:20px 24px;display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-shrink:0}
.prd-drawer-body{flex:1;overflow-y:auto;padding:20px 24px 48px}
.prd-drawer-close{background:none;border:1px solid rgba(255,255,255,.15);color:rgba(255,255,255,.5);width:32px;height:32px;border-radius:50%;cursor:pointer;font-size:14px;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .13s;line-height:1}
.prd-drawer-close:hover{background:rgba(255,255,255,.1);color:#fff;border-color:rgba(255,255,255,.35)}
.toast{position:fixed;bottom:22px;right:22px;background:var(--navy);color:#fff;padding:13px 18px;border-radius:var(--r2);font-size:12px;box-shadow:0 8px 32px rgba(10,22,40,.25);transform:translateY(80px);opacity:0;transition:all .3s;z-index:9999;pointer-events:none}
.toast.show{transform:translateY(0);opacity:1;pointer-events:all}
/* ─ CONSTRUCTION NAV ARROWS ─ */
.cs-nav-arrow{position:absolute;top:50%;transform:translateY(-50%);z-index:20;background:var(--bg2);border:1px solid var(--border);border-radius:var(--r2);box-shadow:var(--sh2);width:88px;min-height:100px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;cursor:pointer;color:var(--text3);transition:color .15s,background .15s,box-shadow .15s,opacity .15s;padding:12px 6px;text-align:center}
.cs-nav-arrow:hover{background:var(--bg3);color:var(--text);box-shadow:0 4px 20px rgba(10,22,40,.18)}
.cs-nav-arrow:hover .cs-nav-name{color:var(--text)}
.cs-nav-dir{font-size:8px;font-weight:700;text-transform:uppercase;letter-spacing:.7px;color:var(--text3);line-height:1}
.cs-nav-name{font-size:9px;font-weight:500;color:var(--text2);line-height:1.35;word-break:break-word;padding:0 4px;max-width:80px}
.cs-nav-prev{left:max(4px,calc(50% - 608px))}
.cs-nav-next{right:max(4px,calc(50% - 608px))}
.cs-nav-arrow.hidden{opacity:0;pointer-events:none}
@media(max-width:768px){.cs-nav-arrow{width:36px;min-height:64px;top:auto;bottom:24px;transform:none;padding:8px 4px}.cs-nav-dir,.cs-nav-name{display:none}.cs-nav-prev{left:8px}.cs-nav-next{right:8px}}

/* ─ SITE PAGE ─ */
#vSite{flex-direction:row}
.sp-wrap{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}
.sp-scroll{flex:1;overflow-y:auto;padding:24px 28px 60px}
.sp-hero{background:var(--navy);border-radius:var(--r3);padding:28px 30px 24px;margin-bottom:20px;position:relative;overflow:hidden}
.sp-hero::before{content:'';position:absolute;inset:0;background:linear-gradient(135deg,rgba(254,80,0,.25) 0%,transparent 60%);pointer-events:none}
.sp-hero-brand{font-size:9px;font-weight:500;letter-spacing:2.5px;text-transform:uppercase;color:rgba(255,255,255,.35);margin-bottom:6px}
.sp-hero-name{font-family:var(--fd);font-size:32px;font-weight:700;color:#fff;line-height:1}
.sp-hero-meta{display:flex;align-items:center;gap:12px;margin-top:10px;flex-wrap:wrap}
.sp-hero-reg{font-size:11px;color:rgba(255,255,255,.4);font-family:var(--fm)}
.sp-hero-tz{font-size:11px;color:rgba(255,255,255,.3);font-family:var(--fm);padding-left:12px;border-left:1px solid rgba(255,255,255,.12)}
.sp-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;margin-bottom:20px}
.sp-card{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);box-shadow:var(--sh);padding:18px 20px}
/* Org chart */
.org-wrap{display:flex;flex-direction:column;align-items:center;gap:0}
.org-node{background:var(--bg);border:1px solid var(--border2);border-radius:var(--r3);padding:16px 24px;min-width:220px;max-width:280px;width:100%;cursor:pointer;transition:border-color .15s,box-shadow .15s;text-align:center;user-select:none}
.org-node:hover{border-color:var(--navy3);box-shadow:0 2px 10px rgba(0,0,0,.08)}
.org-node.org-open{border-color:var(--navy3);background:var(--sky)}
.org-avatar{width:40px;height:40px;border-radius:50%;background:var(--navy);color:#fff;font-size:13px;font-weight:700;display:flex;align-items:center;justify-content:center;margin:0 auto 10px;font-family:var(--fb)}
.org-role-lbl{font-size:9px;font-weight:500;text-transform:uppercase;letter-spacing:.9px;color:var(--text3);margin-bottom:4px}
.org-name-lbl{font-size:14px;font-weight:600;color:var(--text)}
.org-detail{display:none;flex-direction:column;gap:5px;margin-top:10px;padding-top:10px;border-top:1px solid var(--border)}
.org-node.org-open .org-detail{display:flex}
.org-detail a{font-size:12px;color:var(--navy2);text-decoration:none}
.org-detail a:hover{text-decoration:underline}
.org-line{width:1px;height:28px;background:var(--border2);margin:0 auto}
/* ── ACADEMY ─────────────────────── */
.acad-hero{background:linear-gradient(135deg,var(--navy) 0%,#2a2a2a 100%);padding:32px 32px 28px;color:#fff;border-radius:var(--r3);margin-bottom:24px;position:relative;overflow:hidden}
.acad-hero::before{content:'';position:absolute;right:-40px;top:-40px;width:200px;height:200px;border-radius:50%;background:rgba(255,255,255,.04);pointer-events:none}
.acad-hero::after{content:'';position:absolute;right:60px;bottom:-60px;width:150px;height:150px;border-radius:50%;background:rgba(255,255,255,.03);pointer-events:none}
.acad-hero-title{font-family:var(--fd);font-size:26px;font-weight:700;letter-spacing:.5px;margin-bottom:4px}
.acad-hero-sub{font-size:11px;color:rgba(255,255,255,.5);letter-spacing:2px;text-transform:uppercase;margin-bottom:22px}
.acad-progress-wrap{background:rgba(255,255,255,.12);border-radius:20px;height:6px;width:100%;max-width:320px;margin-bottom:8px;overflow:hidden}
.acad-progress-bar{height:100%;border-radius:20px;background:linear-gradient(90deg,#34d399,#10b981);transition:width .5s ease}
.acad-progress-lbl{font-size:11px;color:rgba(255,255,255,.55)}
.acad-toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:20px}
.acad-search{flex:1;min-width:180px;background:var(--bg2);border:1px solid var(--border2);color:var(--text);font-family:var(--fb);font-size:12px;padding:8px 14px;border-radius:var(--r2);outline:none;transition:border-color .13s;width:auto}
.acad-search:focus{border-color:var(--navy3)}
.acad-cats{display:flex;gap:6px;flex-wrap:wrap}
.acad-cat{padding:5px 13px;font-size:11px;font-weight:500;border:1px solid var(--border2);border-radius:20px;cursor:pointer;background:var(--bg2);color:var(--text2);transition:all .13s;font-family:var(--fb)}
.acad-cat:hover{border-color:var(--navy3);color:var(--navy)}.acad-cat.on{background:var(--orange);color:#fff;border-color:var(--orange)}
.acad-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:40px}
.acad-card{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);overflow:hidden;transition:border-color .15s,box-shadow .15s,transform .15s}
.acad-card:hover{border-color:var(--navy3);box-shadow:0 4px 16px rgba(0,0,0,.09);transform:translateY(-2px)}
.acad-card.done{border-color:rgba(16,185,129,.4)}
.acad-card-head{padding:18px 18px 12px;display:flex;align-items:flex-start;gap:13px;cursor:pointer}
.acad-icon{width:40px;height:40px;border-radius:var(--r2);display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0}
.acad-meta{flex:1;min-width:0}
.acad-cat-badge{font-size:9px;font-weight:500;text-transform:uppercase;letter-spacing:.8px;margin-bottom:4px}
.acad-title{font-size:13px;font-weight:600;color:var(--text);line-height:1.3;margin-bottom:7px}
.acad-badges{display:flex;gap:5px;align-items:center;flex-wrap:wrap}
.acad-dur{font-size:10px;color:var(--text3)}
.acad-lvl{font-size:9px;font-weight:500;padding:2px 7px;border-radius:10px;text-transform:uppercase;letter-spacing:.4px}
.acad-lvl.beginner{background:rgba(16,185,129,.12);color:#059669}
.acad-lvl.intermediate{background:rgba(245,158,11,.12);color:#d97706}
.acad-lvl.advanced{background:rgba(220,38,38,.1);color:#dc2626}
.acad-desc{font-size:11px;color:var(--text3);padding:0 18px 12px;line-height:1.5;cursor:pointer}
.acad-prog-mini{height:3px;background:var(--border);margin:0 18px 12px;border-radius:3px;overflow:hidden;cursor:pointer}
.acad-prog-mini-bar{height:100%;background:var(--ok);border-radius:3px;transition:width .3s}
.acad-expand-btn{width:100%;padding:10px 18px;background:none;border:none;border-top:1px solid var(--border);font-size:11px;font-weight:500;color:var(--text3);cursor:pointer;display:flex;align-items:center;justify-content:space-between;font-family:var(--fb);transition:background .13s}
.acad-expand-btn:hover{background:var(--bg);color:var(--navy)}
.acad-body{display:none;border-top:1px solid var(--border);padding:18px}
.acad-card.open .acad-body{display:block}
.acad-card.open .acad-expand-btn{color:var(--navy)}
.acad-card.open .acad-chevron{transform:rotate(180deg)}
.acad-chevron{transition:transform .2s;display:inline-block}
.acad-steps{display:flex;flex-direction:column;gap:8px;margin-bottom:14px}
.acad-step{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border-radius:var(--r2);background:var(--bg);border:1px solid var(--border);transition:background .13s}
.acad-step.done{background:rgba(16,185,129,.05);border-color:rgba(16,185,129,.2)}
.acad-step-check{width:18px;height:18px;border-radius:4px;border:1.5px solid var(--border2);flex-shrink:0;margin-top:2px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .13s;background:var(--bg2)}
.acad-step.done .acad-step-check{background:var(--ok);border-color:var(--ok)}
.acad-step-content{flex:1}
.acad-step-title{font-size:12px;font-weight:600;color:var(--text);margin-bottom:3px}
.acad-step-detail{font-size:11px;color:var(--text2);line-height:1.5}
.acad-step-tip{font-size:10px;color:var(--navy2);margin-top:5px;padding:5px 8px;background:var(--sky);border-radius:4px;line-height:1.4}
.acad-tip-box{background:rgba(59,130,246,.07);border:1px solid rgba(59,130,246,.2);border-radius:var(--r2);padding:10px 14px;font-size:11px;color:#2563eb;line-height:1.5;margin-bottom:12px}
.acad-warn-box{background:rgba(245,158,11,.07);border:1px solid rgba(245,158,11,.25);border-radius:var(--r2);padding:10px 14px;font-size:11px;color:#d97706;line-height:1.5;margin-bottom:12px}
.acad-empty{text-align:center;padding:48px;color:var(--text3);font-size:13px;grid-column:1/-1}
@media(max-width:900px){.acad-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){.acad-grid{grid-template-columns:1fr}.acad-hero{padding:20px 16px}.acad-hero-title{font-size:22px}}
.sp-card-ttl{font-size:9px;font-weight:500;text-transform:uppercase;letter-spacing:1.1px;color:var(--text3);margin-bottom:14px;display:flex;align-items:center;gap:7px}
.sp-card-ttl-ico{font-size:13px}
.sp-field{margin-bottom:11px}
.sp-field:last-child{margin-bottom:0}
.sp-field-lbl{font-size:9px;color:var(--text3);text-transform:uppercase;letter-spacing:.6px;margin-bottom:3px}
.sp-field-val{font-size:12px;color:var(--text);font-weight:500;line-height:1.4}
.sp-field-link{color:var(--navy3);text-decoration:none;font-size:12px;font-weight:500}
.sp-field-link:hover{text-decoration:underline}
.sp-top-row{display:flex;gap:20px;margin-bottom:20px;align-items:flex-start}
.sp-top-info{flex:1;min-width:0}
.sp-top-cam{flex:0 0 300px;width:300px}
.sp-two-col{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:24px;align-items:start}
.sp-section{margin-bottom:20px}
.sp-section-hdr{font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.9px;color:var(--text3);margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}
.sp-inc-entry{background:var(--bg2);border:1px solid var(--border);border-radius:var(--r2);padding:13px 15px;margin-bottom:8px;display:flex;gap:11px;align-items:flex-start;transition:background .12s}
.sp-inc-entry:hover{background:var(--bg3)}
.sp-inc-entry:last-child{margin-bottom:0}
.sp-inc-entry.resolved{opacity:.5}
.sp-inc-bar{width:3px;border-radius:2px;align-self:stretch;flex-shrink:0}
.sp-inc-bar.ok{background:var(--ok)}.sp-inc-bar.warn{background:var(--warn)}.sp-inc-bar.crit{background:var(--crit)}
.sp-inc-main{flex:1;min-width:0}
.sp-inc-tags{display:flex;gap:5px;margin-bottom:5px;flex-wrap:wrap;align-items:center}
.sp-inc-desc{font-size:12px;color:var(--text);line-height:1.45;margin-bottom:4px}
.sp-inc-meta{font-size:10px;color:var(--text3)}
.sp-empty{padding:24px 0;text-align:center;font-size:12px;color:var(--text3);font-style:italic}
.sp-machine-row{background:var(--bg2);border:1px solid var(--border);border-radius:var(--r2);padding:14px 16px;display:flex;align-items:center;gap:14px}
.sp-machine-ico{width:36px;height:36px;border-radius:var(--r2);background:var(--bg3);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0}
.sp-machine-info{flex:1}
.sp-machine-name{font-size:13px;font-weight:500;color:var(--text)}
.sp-machine-serial{font-size:10px;color:var(--text3);font-family:var(--fm);margin-top:2px}
.sp-machine-rev{display:flex;align-items:center;gap:8px;margin-top:6px}

/* ─ QUALITY VIEW ─ */
#vQuality{flex-direction:row}
.qly-main{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}
.qly-scroll{flex:1;overflow-y:auto;padding:22px 26px 40px}
.qly-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:22px}
.qly-sum{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);padding:14px 16px;box-shadow:var(--sh);transition:box-shadow .15s;cursor:default}
.qly-sum:hover{box-shadow:var(--sh2)}
.qly-sum-n{font-size:9px;font-weight:500;text-transform:uppercase;letter-spacing:1px;color:var(--text3);margin-bottom:6px}
.qly-sum-v{font-family:var(--fd);font-size:28px;font-weight:600;line-height:1;color:var(--navy)}
.qly-sum-v.ok{color:var(--ok)}.qly-sum-v.warn{color:var(--warn)}.qly-sum-v.crit{color:var(--crit)}
.qly-sum-s{font-size:10px;color:var(--text3);margin-top:3px}
.qly-filters{display:flex;gap:8px;margin-bottom:18px;flex-wrap:wrap;align-items:center}
.qly-section{margin-bottom:24px}
.qly-section-hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid var(--border)}
.qly-section-title{display:flex;align-items:center;gap:8px;font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.8px}
.qly-tbl-wrap{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);box-shadow:var(--sh);overflow-x:auto;-webkit-overflow-scrolling:touch}
.qly-tbl{width:100%;border-collapse:collapse;min-width:480px}
.qly-tbl th{font-size:9px;font-weight:500;text-transform:uppercase;letter-spacing:.9px;color:var(--text3);padding:10px 14px;border-bottom:1px solid var(--border);text-align:left;background:var(--bg2);white-space:nowrap}
.qly-tbl td{padding:11px 14px;font-size:12px;border-bottom:1px solid var(--border);color:var(--text2);vertical-align:middle}
.qly-tbl tr:last-child td{border-bottom:none}
.qly-tbl tbody tr:hover td{background:var(--bg3)}
.qly-site{font-weight:500;color:var(--text);font-size:12px}
.qly-badge{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:2px;font-size:9px;font-weight:500;text-transform:uppercase;letter-spacing:.4px}
.qly-pass{background:var(--ok-bg);color:var(--ok);border:1px solid var(--ok-bd)}
.qly-fail{background:var(--crit-bg);color:var(--crit);border:1px solid var(--crit-bd)}
.qly-near{background:var(--warn-bg);color:var(--warn);border:1px solid var(--warn-bd)}
.qly-pend{background:var(--bg3);color:var(--text3);border:1px solid var(--border)}
.qly-sum-v--date{font-size:16px !important;padding-top:4px}
.qly-search{font-size:12px;padding:4px 10px;border:1px solid var(--border);border-radius:var(--r);background:var(--bg);color:var(--text);font-family:var(--fb);width:200px;outline:none}
.qly-search:focus{border-color:var(--orange)}
.qly-report-row{display:flex;align-items:center;gap:12px;padding:12px 14px;background:var(--bg2);border:1px solid var(--border);border-radius:var(--r2);margin-bottom:6px;transition:box-shadow .13s}
.qly-report-row:hover{box-shadow:var(--sh)}
.qly-report-info{flex:1;min-width:0}
.qly-report-name{font-size:12px;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.qly-report-meta{font-size:10px;color:var(--text3);margin-top:2px;font-family:var(--fm)}
.qly-report-ref{font-size:10px;color:var(--text2);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* ── Quality v2: tabs, stats, calendar, compliance, table ── */
.qly-tab-bar{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:16px}
.qly-tab{padding:5px 14px;border-radius:20px;border:1.5px solid var(--border2);background:var(--bg2);font-size:11px;font-weight:600;cursor:pointer;color:var(--text3);transition:all .13s;font-family:var(--fb);letter-spacing:.3px}
.qly-tab:hover{border-color:var(--text3);color:var(--text)}
.qly-tab.on{background:var(--navy);border-color:var(--navy);color:#fff}
.qly-tab-count{font-size:9px;opacity:.65;margin-left:4px}
.qly-tab-net-label{display:flex;align-items:center;font-size:9px;font-weight:700;letter-spacing:.8px;color:var(--text3);opacity:.6;padding:0 6px 0 2px;align-self:center;white-space:nowrap}
.qly-tab-net-label:not(:first-child){margin-left:8px}

.qly-stats-row{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:22px}
.qly-stat{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);padding:14px 18px;min-width:90px;text-align:center;box-shadow:var(--sh)}
.qly-stat.ok  {border-top:3px solid var(--ok)}
.qly-stat.warn{border-top:3px solid var(--warn)}
.qly-stat.crit{border-top:3px solid var(--crit)}
.qly-stat-v{font-family:var(--fd);font-size:26px;font-weight:600;line-height:1;color:var(--text)}
.qly-stat.ok   .qly-stat-v{color:var(--ok)}
.qly-stat.warn .qly-stat-v{color:var(--warn)}
.qly-stat.crit .qly-stat-v{color:var(--crit)}
.qly-stat-l{font-size:9px;text-transform:uppercase;letter-spacing:.7px;color:var(--text3);margin-top:5px}

.qly-sec-hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--border)}

.qly-cal-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:28px}
.qly-cal-card{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);padding:14px;box-shadow:var(--sh)}
.qly-cal-month-title{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.8px;color:var(--text);margin-bottom:10px;text-align:center}
.qly-cal-dow{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;margin-bottom:3px}
.qly-cal-dow span{text-align:center;font-size:9px;font-weight:700;color:var(--text3);text-transform:uppercase;padding:2px 0}
.qly-cal-days{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.qly-cal-day{border-radius:var(--r);min-height:32px;padding:3px 2px;display:flex;flex-direction:column;align-items:center;font-size:11px;font-weight:600;color:var(--text);position:relative}
.qly-cal-empty{background:transparent!important}
.qly-cal-today{outline:2px solid var(--orange);outline-offset:-2px}
.qly-cal-day-nd {background:var(--ok-bg);color:var(--ok);cursor:pointer}
.qly-cal-day-loq{background:var(--warn-bg);color:var(--warn);cursor:pointer}
.qly-cal-day-det{background:var(--crit-bg);color:var(--crit);cursor:pointer}
.qly-cal-day-nd:hover {background:#c5e8d0}
.qly-cal-day-loq:hover{background:#f7e0a0}
.qly-cal-day-det:hover{background:#f5c5c0}
.qly-cal-dnum{line-height:1;margin-top:2px}
.qly-cal-dots{display:flex;gap:2px;margin-top:3px;flex-wrap:wrap;justify-content:center}
.qly-cal-dot{width:4px;height:4px;border-radius:50%}
.qly-cal-dot-nd {background:var(--ok)}
.qly-cal-dot-loq{background:var(--warn)}
.qly-cal-dot-det{background:var(--crit)}
.qly-cal-day[data-tip]:hover::after{content:attr(data-tip);position:absolute;bottom:110%;left:50%;transform:translateX(-50%);background:var(--navy);color:#fff;font-size:10px;font-weight:400;padding:4px 8px;border-radius:var(--r);white-space:pre;z-index:20;pointer-events:none;min-width:90px;text-align:left;box-shadow:var(--sh2)}

.qly-limits-grid{margin-bottom:28px}
.qly-limits-card{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);box-shadow:var(--sh);overflow:hidden}
.qly-limits-tbl{width:100%;border-collapse:collapse}
.qly-limits-tbl th{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text3);padding:8px 14px;border-bottom:1px solid var(--border);text-align:left;background:var(--bg3)}
.qly-limits-tbl td{padding:8px 14px;border-bottom:1px solid var(--border);vertical-align:middle}
.qly-limits-tbl tr:last-child td{border-bottom:none}
.qly-limits-tbl tr:hover td{background:var(--bg3)}

/* Summary table — group rows */
.qly-summary-tbl{min-width:580px}
.qly-grp-row{cursor:pointer;background:var(--bg3)!important}
.qly-grp-row:hover td{background:var(--bg3)!important;filter:brightness(.97)}
.qly-grp-row.open .qly-grp-toggle{transform:rotate(90deg)}
.qly-grp-inner{display:flex;align-items:center;gap:8px;padding:2px 0}
.qly-grp-toggle{font-size:9px;color:var(--text3);transition:transform .18s;display:inline-block;width:10px;flex-shrink:0}
.qly-grp-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}
.qly-grp-dot-nd {background:var(--ok)}
.qly-grp-dot-loq{background:var(--warn)}
.qly-grp-dot-det{background:var(--crit)}
.qly-grp-name{font-size:12px;font-weight:600;color:var(--text);flex-shrink:0;max-width:240px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.qly-grp-chips{display:flex;gap:4px;flex-wrap:wrap;margin-left:2px}
.qly-grp-chip{font-size:10px;color:var(--text3);background:var(--bg2);border:1px solid var(--border);padding:1px 6px;border-radius:2px;white-space:nowrap}
.qly-grp-params{display:flex;gap:3px;flex-wrap:wrap;margin-left:2px}
.qly-grp-param{font-size:9px;font-weight:600;padding:1px 6px;border-radius:2px;white-space:nowrap}
.qly-grp-param-loq{background:var(--warn-bg);color:var(--warn)}
.qly-grp-param-det{background:var(--crit-bg);color:var(--crit)}
.qly-grp-link{margin-left:auto;font-size:11px;color:var(--orange);cursor:pointer;white-space:nowrap;flex-shrink:0}
.qly-grp-link:hover{text-decoration:underline}
.qly-sample-row td{background:var(--bg2)}
.qly-row-loq td{background:var(--warn-bg)!important}
.qly-row-det td{background:var(--crit-bg)!important}

/* Result value badges */
.qly-badge-nd {background:var(--ok-bg);color:var(--ok);border:1px solid var(--ok-bd)}
.qly-badge-loq{background:var(--warn-bg);color:var(--warn);border:1px solid var(--warn-bd)}
.qly-badge-det{background:var(--crit-bg);color:var(--crit);border:1px solid var(--crit-bd)}

/* Preview modal */
.qly-modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:600;display:flex;align-items:center;justify-content:center;padding:20px;backdrop-filter:blur(2px)}
.qly-modal{background:var(--bg2);border-radius:var(--r3);width:100%;max-width:720px;max-height:88vh;display:flex;flex-direction:column;box-shadow:var(--sh2);overflow:hidden}
.qly-modal-hdr{padding:14px 18px;display:flex;align-items:center;gap:10px;border-bottom:1px solid var(--border);flex-shrink:0}
.qly-modal-site{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;padding:2px 8px;border-radius:2px;background:var(--bg3);color:var(--text2);white-space:nowrap}
.qly-modal-title{font-size:13px;font-weight:600;color:var(--text);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:var(--fm)}
.qly-modal-close{background:none;border:none;font-size:20px;color:var(--text3);cursor:pointer;line-height:1;padding:0 2px}
.qly-modal-close:hover{color:var(--text)}
.qly-modal-meta{display:flex;gap:20px;flex-wrap:wrap;padding:10px 18px;background:var(--bg3);border-bottom:1px solid var(--border);flex-shrink:0}
.qly-modal-meta-item{display:flex;flex-direction:column;gap:2px}
.qly-modal-meta-lbl{font-size:9px;text-transform:uppercase;letter-spacing:.5px;color:var(--text3)}
.qly-modal-meta-val{font-size:12px;font-weight:600;color:var(--text)}
.qly-modal-body{overflow-y:auto;padding:14px 18px;flex:1}
.qly-modal-footer{padding:12px 18px;border-top:1px solid var(--border);display:flex;gap:8px;justify-content:flex-end;flex-shrink:0}

/* ══════════════════════════════════
   MOBILE RESPONSIVE
══════════════════════════════════ */
.mob-toggle{display:none;align-items:center;justify-content:center;width:36px;height:36px;border-radius:var(--r2);border:1px solid var(--border2);background:var(--bg2);cursor:pointer;flex-shrink:0;z-index:50}
.mob-toggle svg{width:16px;height:16px;color:var(--text)}




/* Mobile stats bar — hidden on desktop */
.mob-stats{display:none}

@media(max-width:768px){
  /* Mobile stats bar */
  .mob-stats{display:flex;align-items:stretch;background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);margin-bottom:6px;overflow:hidden;box-shadow:var(--sh)}
  .mob-stat{flex:1;padding:10px 8px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:3px}
  .mob-stat.ok-c{border-top:3px solid var(--ok)}
  .mob-stat.warn-c{border-top:3px solid var(--warn)}
  .mob-stat.crit-c{border-top:3px solid var(--crit)}
  .mob-stat-v{font-family:var(--fd);font-size:22px;font-weight:600;line-height:1}
  .mob-stat-v.ok{color:var(--ok)}.mob-stat-v.warn{color:var(--warn)}.mob-stat-v.crit{color:var(--crit)}
  .mob-stat-l{font-size:8px;font-weight:500;text-transform:uppercase;letter-spacing:.7px;color:var(--text3)}
  .mob-stat-div{width:1px;background:var(--border);margin:6px 0}

  /* ── SHARED MOBILE SIDEBAR ── */
  #mob-sidebar .nav-a{min-height:44px;touch-action:manipulation}
  #mob-sidebar .sb-site{min-height:40px;touch-action:manipulation}
  #mob-sidebar .sb-logo{padding-top:56px;position:relative}

  /* ── VIEWS ── */
  .view.active{flex-direction:column}
  #vDash,#vLog,#vMachines,#vSite,#vQuality,#vOperator{flex-direction:column}

  /* ── BURGER & CLOSE ── */
  .mob-toggle{display:flex !important}
  .sb-close-btn{display:flex !important}

  /* ── TOPBAR ── */
  .topbar{padding:0 12px;height:48px;gap:8px}
  .mob-toggle{flex-shrink:0}
  .topbar > div:not(.tb-r){flex:1;text-align:center;padding:0 8px}
  .tb-r{flex-shrink:0;gap:6px}
  .tb-r .btn{font-size:10px;padding:5px 8px;letter-spacing:.3px}
  .tb-r .tdv{display:none}
  .tb-user-info{display:none !important}
  .tb-title{font-size:12px}
  .tb-sub{font-size:9px}
  .gh-update-info{display:none}
  .qr-upload-row{flex-direction:column}
  .qr-dropzone{width:100%}
  .qr-pdf-preview-container{width:100%;min-height:300px}
  .qr-structure-preview{width:100%;min-height:300px}

  /* ── GLOBE ── */
  #gc{height:260px}
  .globe-kpi-strip{display:none}
  .globe-hd{flex-direction:column;align-items:flex-start;padding:9px 12px;gap:6px}
  .globe-leg{flex-wrap:wrap;gap:6px}
  .globe-hint{display:none}
  #map-constr-btn{min-height:36px;padding:6px 12px;touch-action:manipulation;-webkit-tap-highlight-color:rgba(255,255,255,.1)}

  /* ── DASHBOARD GRIDS ── */
  .kpi-row{grid-template-columns:1fr 1fr;gap:8px;margin-bottom:12px}
  .kpi{padding:12px 14px}
  .kpi-v{font-size:32px}
  .sites-grid.g3,.sites-grid.g4{grid-template-columns:1fr}
  .sites-grid.g6,.sites-grid.g8{grid-template-columns:repeat(2,1fr)}
  .constr-grid{grid-template-columns:1fr 1fr;gap:8px}
  .sc{border-left-width:3px}
  .sc-hd{padding:10px 12px 8px}
  .sc-body{padding:8px 12px}
  .sc-prod{padding:8px 12px}
  .net-section-hdr{flex-wrap:wrap;gap:6px}

  /* ── SCROLL AREAS ── */
  .scroll{padding:12px 12px 80px}
  .log-scroll{padding:12px 12px 80px}
  .qly-scroll{padding:12px 12px 80px}
  .sp-scroll{padding:12px 12px 80px}
  .op-scroll{padding:12px 12px 80px}

  /* ── INCIDENT LOG ── */
  .log-stats{grid-template-columns:1fr 1fr;gap:8px;margin-bottom:14px}
  .ls{padding:10px 12px}
  .ls-v{font-size:24px}
  .lf-pill{font-size:9px;padding:3px 9px;min-height:30px}
  .log-table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
  .ltbl{min-width:700px}
  .detail-box{grid-template-columns:1fr 1fr;gap:10px;padding:12px 14px}

  /* ── MACHINE VERSIONS ── */
  .mv-tbl-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
  .mv-tbl{min-width:520px}
  .mv-hdr{flex-direction:column;align-items:flex-start;gap:8px}
  .mv-summary{flex-wrap:wrap}

  /* ── SITE PAGE ── */
  .sp-top-row{flex-direction:column}
  .sp-top-cam{width:100%;flex:none}
  .sp-two-col{grid-template-columns:1fr}
  .sp-inc-grid{grid-template-columns:1fr !important}
  .sp-grid{grid-template-columns:1fr;gap:12px}
  .sp-grid .sp-card[style*="span 2"],.sp-grid .sp-card[style*="span 3"]{grid-column:span 1}
  .sp-card{padding:14px}
  .sp-machine-grid{grid-template-columns:1fr 1fr !important}
  .sp-machine-grid .sp-field-full{grid-column:span 2 !important}
  .sp-contact-grid{grid-template-columns:1fr !important}
  #sp-topbar-title{font-size:20px !important}
  .sp-section-hdr{font-size:9px}
  .sp-inc-entry{flex-wrap:wrap;gap:8px}
  .prod-kpi-row{grid-template-columns:1fr 1fr}
  .prod-card{padding:14px}
  .prod-kpi{padding:12px 14px}
  .prod-kpi-v{font-size:22px}
  .prod-days{height:44px !important}

  /* ── SITE CARD PANEL ── */
        
  /* ── OPERATOR VIEW ── */
  .op-grid{grid-template-columns:1fr;gap:10px}
  .op-site{padding:14px 16px}
  .op-site-name{font-size:18px}
  .op-kpi-row{gap:6px}
  .op-site-wide{padding:16px}
  .op-info-grid{grid-template-columns:repeat(2,1fr)}
  .op-inc-count{display:none}
  .op-action-btn.op-action-open{margin-left:0}
  .op-widgets-row{grid-template-columns:1fr}

  /* ── QUALITY ── */
  .qly-filters{gap:5px;margin-bottom:12px;flex-wrap:wrap}
  .qly-tbl-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
  .qly-tbl{min-width:480px}
  .qly-stats-row{gap:6px}
  .qly-stat{padding:10px 12px;min-width:70px}
  .qly-stat-v{font-size:22px}
  .qly-cal-grid{grid-template-columns:1fr;gap:10px}
  .qly-limits-tbl th,.qly-limits-tbl td{padding:6px 10px}
  .qly-modal{max-width:100%;max-height:95vh}
  .qly-modal-meta{gap:12px}

  /* ── REPORT FORM ── */
  .ssel{grid-template-columns:1fr}
  .rpt-body{padding:16px 12px 80px}
  .rpt-hdr{flex-direction:column}
  .rpt-hr{border-left:none;border-top:1px solid rgba(255,255,255,.07);padding:12px 20px}
  .fcard{padding:14px}
  .tg{grid-template-columns:1fr 1fr}
  .g2{grid-template-columns:1fr}
  .so-desc{font-size:10px}

  /* ── MINI LOG ON DASHBOARD ── */
  .tbl{min-width:500px}
  .sec{overflow-x:auto;-webkit-overflow-scrolling:touch}

  /* ── PRODUCTIVITY ── */
  .prod-card{padding:14px}
  .prod-total{font-size:28px}
  .prod-days{height:32px}

  /* ── ORDER PLANNING: own scroll container on mobile ── */
  #vOrders{height:100vh !important;overflow:hidden !important}
  #vOrders .op-main{height:100% !important;overflow:hidden !important;display:flex !important;flex-direction:column !important}
  #vOrders .op-scroll{overflow-y:auto !important;-webkit-overflow-scrolling:touch !important;flex:1 !important;height:auto !important;min-height:0 !important}
}

@media(max-width:480px){
  .kpi-row{grid-template-columns:1fr 1fr}
  .qly-summary{grid-template-columns:1fr 1fr}
  .constr-grid{grid-template-columns:1fr}
  #gc{height:220px}
  .tb-title{font-size:11px}
  .log-stats{grid-template-columns:1fr 1fr}
  .ssel{grid-template-columns:1fr}
  .detail-box{grid-template-columns:1fr}
}

/* ─ PRODUCTIVITY ─ */
.prod-card{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);box-shadow:var(--sh);padding:20px}
.prod-kpi-row{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--border);border:1px solid var(--border);border-radius:var(--r2);overflow:hidden;margin-bottom:18px}
.prod-kpi{background:var(--bg2);padding:14px 16px;display:flex;flex-direction:column;gap:4px}
.prod-kpi-l{font-size:8px;font-weight:500;text-transform:uppercase;letter-spacing:1px;color:var(--text3)}
.prod-kpi-v{font-family:var(--fd);font-size:24px;font-weight:600;line-height:1;color:var(--text)}
.prod-kpi-v.warn{color:var(--warn)}.prod-kpi-v.crit{color:var(--crit)}
.prod-kpi-s{font-size:9px;color:var(--text3);line-height:1.3}
.prod-chart-lbl{font-size:8px;font-weight:500;text-transform:uppercase;letter-spacing:1px;color:var(--text3);margin-bottom:8px}
.prod-days{display:flex;align-items:flex-end;gap:4px}
.prod-day{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px}
.prod-day-bar{width:100%;border-radius:2px 2px 0 0;min-height:2px}
.prod-day-lbl{font-size:8px;color:var(--text3);font-family:var(--fm)}
/* Site card mini productivity */
.sc-view-btn{padding:8px 13px;border-top:1px solid var(--border);font-size:10px;font-weight:500;color:var(--navy3);text-transform:uppercase;letter-spacing:.5px;background:var(--bg3);cursor:pointer;touch-action:manipulation;display:none;width:100%;text-align:left;border-left:none;border-right:none;border-bottom:none;font-family:var(--fb)}
.sc-view-btn:hover{background:var(--sky)}
@media(max-width:768px){.sc-view-btn{display:block}}
.sc-prod{padding:9px 13px;border-top:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;background:var(--bg3)}
.sc-prod-v{font-family:var(--fd);font-size:17px;font-weight:600;color:var(--text)}
.sc-prod-l{font-size:9px;color:var(--text3);text-transform:uppercase;letter-spacing:.5px;margin-top:1px}
.sc-prod-bar{width:60px;height:4px;background:var(--border2);border-radius:2px;overflow:hidden;margin-top:3px}
.sc-prod-fill{height:100%;border-radius:2px}
/* Site page responsive grids */
.sp-machine-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:0 24px;align-items:start}
.sp-machine-grid .sp-field-full{grid-column:span 4}
.sp-contact-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 24px}

/* ─ PRODUCTIVITY TOTAL WIDGET ─ */
.pv-total-wrap{margin-bottom:32px}
.pv-total-grand{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);padding:20px 24px;box-shadow:var(--sh);border-left:4px solid var(--navy3)}
.pv-total-lbl{font-size:8px;font-weight:500;text-transform:uppercase;letter-spacing:1px;color:var(--text3);margin-bottom:8px}
.pv-total-grand-v{font-family:var(--fd);font-size:42px;font-weight:700;line-height:1;margin-bottom:2px}
.pv-total-sub{font-size:10px;color:var(--text3)}
.pv-total-bar{height:4px;background:var(--bg3);border-radius:2px;overflow:hidden}
.pv-total-fill{height:100%;border-radius:2px;transition:width .5s ease}
@media(max-width:768px){
  .pv-total-grand{padding:14px 16px}
  .pv-total-grand-v{font-size:36px}
}

/* ─ SIDEBAR (shared — desktop fixed left, mobile slide-over) ─ */
#mob-sidebar{
  position:fixed;top:0;left:0;width:214px;height:100vh;
  background:#fff;display:flex;flex-direction:column;
  overflow-y:auto;z-index:99;border-right:1.5px solid var(--border2)
}
/* Push all views right of the sidebar on desktop */
.view{margin-left:214px}
@media(max-width:768px){
  #mob-sidebar{
    left:-270px;width:260px;z-index:99999;
    box-shadow:4px 0 24px rgba(0,0,0,.12);
    transition:left .22s ease
  }
  #mob-sidebar.mob-open{left:0}
  .view{margin-left:0 !important}
}
/* ─ USERS VIEW ─ */
.usr-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:20px}
.usr-stat{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);padding:14px 16px;box-shadow:var(--sh)}
.usr-stat-l{font-size:8px;font-weight:500;text-transform:uppercase;letter-spacing:1px;color:var(--text3);margin-bottom:6px}
.usr-stat-v{font-family:var(--fd);font-size:28px;font-weight:600;line-height:1;color:var(--text)}
.usr-tbl-wrap{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);box-shadow:var(--sh);overflow-x:auto;-webkit-overflow-scrolling:touch}
.usr-tbl{width:100%;border-collapse:collapse;min-width:540px}
.usr-tbl th{font-size:9px;font-weight:500;text-transform:uppercase;letter-spacing:.9px;color:var(--text3);padding:10px 16px;border-bottom:1px solid var(--border);text-align:left;background:var(--bg2);white-space:nowrap}
.usr-tbl td{padding:12px 16px;font-size:12px;border-bottom:1px solid var(--border);color:var(--text2);vertical-align:middle}
.usr-tbl tr:last-child td{border-bottom:none}
.usr-tbl tbody tr:hover td{background:var(--bg3)}
.usr-name{font-weight:500;color:var(--text);font-size:13px}
.usr-email{font-size:11px;color:var(--text3);margin-top:1px;font-family:var(--fm)}
.usr-badge{display:inline-flex;align-items:center;gap:3px;padding:2px 8px;border-radius:2px;font-size:9px;font-weight:500;text-transform:uppercase;letter-spacing:.4px}
.usr-active{background:var(--ok-bg);color:var(--ok);border:1px solid var(--ok-bd)}
.usr-inactive{background:var(--bg3);color:var(--text3);border:1px solid var(--border)}
.usr-pending{background:var(--warn-bg);color:var(--warn);border:1px solid var(--warn-bd)}
.usr-role-tag{font-size:10px;padding:2px 8px;border-radius:2px;font-weight:500;text-transform:uppercase;letter-spacing:.4px}
.usr-role-superadmin{background:#fff7ed;color:#b45309;border:1px solid #fed7aa}
.usr-role-admin{background:#f0f4ff;color:#3730a3;border:1px solid #c7d2fe}
.usr-role-manager{background:var(--sky);color:var(--navy3);border:1px solid var(--sky2)}
.usr-role-operator{background:var(--bg3);color:var(--text3);border:1px solid var(--border2)}
.usr-role-viewer{background:var(--bg3);color:var(--text3);border:1px solid var(--border2)}
.usr-act-btn{background:none;border:1px solid var(--border2);border-radius:var(--r);padding:4px 9px;font-size:10px;font-family:var(--fb);color:var(--text3);cursor:pointer;font-weight:500;text-transform:uppercase;letter-spacing:.4px;touch-action:manipulation}
.usr-act-btn:hover{border-color:var(--navy3);color:var(--navy)}
.usr-act-btn.del:hover{border-color:var(--crit);color:var(--crit)}
.usr-search{position:relative;min-width:160px}
.usr-search input{width:100%;padding:6px 10px 6px 30px;border:1px solid var(--border2);border-radius:var(--r2);background:var(--bg2);font-family:var(--fb);font-size:11px;color:var(--text);outline:none}
.usr-search-ico{position:absolute;left:9px;top:50%;transform:translateY(-50%);color:var(--text3);font-size:13px;pointer-events:none}
@media(max-width:768px){.usr-stats{grid-template-columns:1fr 1fr;gap:8px}}

/* ─ MINUTES MODAL ─ */
#min-modal{animation:fu .15s ease both}
#min-modal input,#min-modal textarea,#min-modal select{width:100%}

.pv-section{margin-bottom:32px}
.pv-section-hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;padding-bottom:10px;border-bottom:1px solid var(--border)}
.pv-section-title{display:flex;align-items:center;gap:10px}
.pv-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.6px;color:var(--text);}
.pv-net-divider{display:flex;align-items:center;justify-content:space-between;margin:48px 0 28px;padding:16px 20px;background:transparent;border:none;border-left:3px solid var(--navy3);padding-left:18px;border-radius:0}
.pv-net-divider--all{margin-top:0;border-left-color:var(--text3)}
.pv-net-title{font-size:16px;font-weight:700;color:var(--text);letter-spacing:0}
.pv-summary-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:18px}
.pv-sum{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);padding:14px 16px;box-shadow:var(--sh);transition:box-shadow .15s;cursor:default}
.pv-sum:hover{box-shadow:var(--sh2)}
.pv-sum-l{font-size:8px;font-weight:500;text-transform:uppercase;letter-spacing:1px;color:var(--text3);margin-bottom:6px}
.pv-sum-v{font-family:var(--fd);font-size:30px;font-weight:600;line-height:1;color:var(--text);margin-bottom:3px}
.pv-sum-v.ok{color:var(--ok)}.pv-sum-v.warn{color:var(--warn)}.pv-sum-v.crit{color:var(--crit)}
.pv-sum-s{font-size:9px;color:var(--text3)}
.pv-bar-table{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);box-shadow:var(--sh);overflow:hidden;margin-bottom:18px}
.pv-bar-row{display:grid;grid-template-columns:110px 1fr 80px;gap:12px;align-items:center;padding:10px 16px;border-bottom:1px solid var(--border)}
.pv-bar-row:last-child{border-bottom:none}
.pv-bar-row:hover{background:var(--bg3)}
.pv-site-name{font-size:12px;font-weight:500;color:var(--text);cursor:pointer}
.pv-site-name:hover{color:var(--navy4);text-decoration:underline}
.pv-bar-outer{height:20px;background:var(--bg3);border-radius:3px;overflow:hidden;position:relative}
.pv-bar-inner{height:100%;border-radius:3px;transition:width .5s ease;display:flex;align-items:center;padding-left:7px}
.pv-bar-val{font-size:10px;font-weight:500;color:#fff;white-space:nowrap;font-family:var(--fm)}
.pv-bar-pct{font-size:11px;font-weight:600;text-align:right;font-family:var(--fd)}
.pv-sparkline-wrap{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);box-shadow:var(--sh);overflow:hidden}
.pv-sparkline-hdr{padding:10px 16px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}
.pv-sparkline-ttl{font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.6px;color:var(--text3)}
.pv-sparkline-grid{display:grid;gap:0}
.pv-spark-row{display:grid;grid-template-columns:110px 1fr;gap:0;border-bottom:1px solid var(--border)}
.pv-spark-row:last-child{border-bottom:none}
.pv-folder-widget{position:relative;margin-bottom:40px}
.pv-folder-tab{display:inline-flex;align-items:center;gap:12px;background:var(--bg2);border:1px solid var(--border);border-bottom:none;border-radius:8px 8px 0 0;padding:11px 20px 12px;position:relative;bottom:-1px;z-index:1;box-shadow:0 1px 2px rgba(0,0,0,.03)}
.pv-folder-body{background:var(--bg2);border:1px solid var(--border);border-radius:0 var(--r2) var(--r2) var(--r2);position:relative;box-shadow:0 4px 20px rgba(0,0,0,.08)}
.pv-spark-name{padding:10px 16px;font-size:12px;font-weight:500;color:var(--text);display:flex;align-items:center;border-right:1px solid var(--border);cursor:pointer}
.pv-spark-name:hover{color:var(--navy4)}
.pv-spark-chart{padding:8px 12px 8px 0;display:flex;align-items:flex-end}
@media(max-width:768px){
  .pv-summary-grid{grid-template-columns:1fr 1fr;gap:8px}
  .pv-sum-v{font-size:26px}
  .pv-bar-row{grid-template-columns:80px 1fr 56px;gap:8px;padding:8px 12px}
  .pv-spark-name{padding:8px 10px;font-size:11px;min-width:70px}
  .prd-shift-btn{padding:5px 10px;font-size:10px}
  .pv-net-title{font-size:16px}
}
.mv-hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;padding-bottom:10px;border-bottom:1px solid var(--border)}
.mv-title{display:flex;align-items:center;gap:10px}
.mv-label{font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:.8px}
.mv-count{font-size:11px;color:var(--text3)}
.mv-tbl-wrap{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);box-shadow:var(--sh);overflow-x:auto;-webkit-overflow-scrolling:touch}
.mv-tbl{width:100%;border-collapse:collapse;min-width:520px}
.mv-tbl th{font-size:9px;font-weight:500;text-transform:uppercase;letter-spacing:.9px;color:var(--text3);padding:10px 16px;border-bottom:1px solid var(--border);text-align:left;background:var(--bg2);white-space:nowrap}
.mv-tbl td{padding:12px 16px;font-size:12px;border-bottom:1px solid var(--border);color:var(--text2);vertical-align:middle}
.mv-tbl tr:last-child td{border-bottom:none}
.mv-tbl tbody tr{transition:background .1s;cursor:default}
.mv-tbl tbody tr:hover td{background:var(--bg3)}
.mv-site{font-weight:500;color:var(--text);font-size:13px}
.mv-region{font-size:10px;color:var(--text3);margin-top:1px}
.mv-rev{font-family:var(--fm);font-size:12px;font-weight:500;color:var(--navy)}
.mv-rev-badge{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:var(--r);font-size:10px;font-weight:500;font-family:var(--fm)}
.mv-rev-latest{background:var(--ok-bg);color:var(--ok);border:1px solid var(--ok-bd)}
.mv-rev-behind{background:var(--warn-bg);color:var(--warn);border:1px solid var(--warn-bd)}
.mv-rev-old{background:var(--crit-bg);color:var(--crit);border:1px solid var(--crit-bd)}
.mv-serial{font-family:var(--fm);font-size:11px;color:var(--text3)}
.mv-date{font-size:11px;color:var(--text3)}
.mv-summary{display:flex;gap:10px;align-items:center}
.mv-sum-chip{font-size:10px;padding:3px 9px;border-radius:20px;font-weight:500}

/* ─ CAMERAS ─ */
.cam-net-section{margin-bottom:24px}
.cam-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.cam-card{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);overflow:hidden;box-shadow:var(--sh)}
.cam-video-wrap{position:relative;aspect-ratio:16/9;background:#0a0f1a;overflow:hidden}
.cam-video{width:100%;height:100%;object-fit:cover;display:block}
.cam-cover{position:absolute;inset:0;background:rgba(8,14,26,.88);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;transition:opacity .3s;z-index:2}
.cam-cover.hidden{opacity:0;pointer-events:none}
.cam-cover-lbl{font-size:9px;color:rgba(255,255,255,.4);letter-spacing:1px;text-transform:uppercase}
.cam-connect-btn{background:var(--orange);color:#fff;border:none;border-radius:var(--r2);padding:8px 20px;font-size:11px;font-weight:600;font-family:var(--fb);cursor:pointer;letter-spacing:.4px;touch-action:manipulation}
.cam-connect-btn:active{opacity:.85}
.cam-site-overlay{position:absolute;bottom:0;left:0;right:0;padding:20px 10px 8px;background:linear-gradient(transparent,rgba(0,0,0,.65));z-index:1;display:flex;align-items:flex-end;justify-content:space-between}
.cam-site-name{font-size:11px;font-weight:700;color:#fff;letter-spacing:.3px}
.cam-site-reg{font-size:9px;color:rgba(255,255,255,.55);margin-top:1px}
.cam-live-pill{display:none;align-items:center;gap:4px;background:rgba(22,163,74,.85);border-radius:3px;padding:2px 7px;flex-shrink:0}
.cam-live-pill.show{display:flex}
.cam-live-dot{width:5px;height:5px;border-radius:50%;background:#fff;animation:cam-pulse 1.4s ease-in-out infinite}
@keyframes cam-pulse{0%,100%{opacity:1}50%{opacity:.35}}
.cam-live-txt{font-size:8px;font-weight:700;color:#fff;letter-spacing:.8px;text-transform:uppercase}
.cam-foot{padding:8px 12px;display:flex;align-items:center;justify-content:space-between;gap:8px;border-top:1px solid var(--border)}
.cam-foot-info{min-width:0}
.cam-foot-name{font-size:11px;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cam-foot-note{font-size:9px;color:var(--text3);margin-top:1px}
.cam-foot-actions{display:flex;align-items:center;gap:6px;flex-shrink:0}
.cam-fs-btn{background:none;border:1px solid var(--border2);border-radius:var(--r);width:26px;height:26px;cursor:pointer;font-size:13px;display:flex;align-items:center;justify-content:center;color:var(--text3);transition:all .13s;font-family:sans-serif}
.cam-fs-btn:hover{border-color:var(--navy3);color:var(--navy);background:var(--bg3)}
@media(max-width:1100px){.cam-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:768px){.cam-grid{grid-template-columns:1fr}}

/* ─ MODE TOGGLE ─ */
.mode-toggle{display:flex;background:var(--bg3);border:1px solid var(--border);border-radius:999px;padding:4px;gap:3px;margin-top:14px}
.mode-btn{flex:1;font-size:8px;font-weight:700;text-transform:uppercase;letter-spacing:1.5px;padding:8px 6px;border-radius:999px;cursor:pointer;border:none;background:none;font-family:var(--fb);color:var(--text3);transition:all .15s;text-align:center;touch-action:manipulation;-webkit-tap-highlight-color:transparent;display:flex;align-items:center;justify-content:center;min-height:36px;text-decoration:none}
.mode-btn.active{background:var(--orange);color:#fff;box-shadow:0 2px 8px rgba(254,80,0,.3)}

/* ─ OPERATOR VIEW ─ */
#vOperator{flex-direction:row}
.op-main{flex:1;display:flex;flex-direction:column;overflow:hidden}
.op-scroll{flex:1;overflow-y:auto;padding:20px 24px 40px}
.op-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:20px}
.op-site{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);box-shadow:var(--sh);padding:18px 20px;cursor:pointer;transition:box-shadow .18s,border-color .18s,transform .18s;border-left:4px solid transparent}
.op-site:hover{box-shadow:0 4px 20px rgba(0,0,0,.1);border-color:var(--orange);border-left-color:var(--orange);transform:translateY(-2px)}
.op-site.ok-c{border-left-color:var(--ok-bd)}
.op-site.warn-c{border-left-color:var(--warn);border-color:var(--warn-bd)}
.op-site.crit-c{border-left-color:var(--crit);border-color:var(--crit-bd)}
.op-site-top{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:12px}
.op-site-name{font-family:var(--fd);font-size:18px;font-weight:600;color:var(--text)}
.op-site-reg{font-size:10px;color:var(--text3);margin-top:2px}
.op-site-time{font-family:var(--fm);font-size:18px;color:var(--text);text-align:right}
.op-site-tz{font-size:9px;color:var(--text3);text-align:right;margin-top:2px}
.op-kpi-row{display:flex;gap:10px;margin-top:10px}
.op-kpi{flex:1;background:var(--bg3);border-radius:var(--r2);padding:8px 10px;text-align:center}
.op-kpi-v{font-family:var(--fd);font-size:22px;font-weight:600;line-height:1}
.op-kpi-v.ok{color:var(--ok)}.op-kpi-v.warn{color:var(--warn)}.op-kpi-v.crit{color:var(--crit)}
.op-kpi-l{font-size:9px;color:var(--text3);text-transform:uppercase;letter-spacing:.5px;margin-top:3px}
.op-report-btn{width:100%;margin-top:12px;padding:9px;font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.5px;background:var(--orange);color:#fff;border:none;border-radius:var(--r2);cursor:pointer;font-family:var(--fb);transition:background .13s}
.op-report-btn:hover{background:#d94400}
.op-report-btn.warn-btn{background:var(--warn);color:#fff}
.op-report-btn.crit-btn{background:var(--crit);color:#fff}
.op-section-lbl{font-size:9px;font-weight:500;text-transform:uppercase;letter-spacing:1.2px;color:var(--text3);margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid var(--border)}

/* ── Wide site cards (site-manager My Sites view) ── */
.op-cards-list{display:flex;flex-direction:column;gap:16px}
.op-site-wide{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);box-shadow:var(--sh);padding:22px 24px;cursor:pointer;transition:box-shadow .18s,border-color .18s,transform .18s;border-left:5px solid transparent}
.op-site-wide:hover{box-shadow:0 4px 24px rgba(0,0,0,.1);transform:translateY(-2px)}
.op-site-wide.ok-c{border-left-color:var(--ok-bd)}
.op-site-wide.warn-c{border-left-color:var(--warn);border-color:var(--warn-bd)}
.op-site-wide.crit-c{border-left-color:var(--crit);border-color:var(--crit-bd)}
.op-wide-header{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:14px}
.op-wide-title-block{flex:1;min-width:0}
.op-wide-meta{font-size:11px;color:var(--text3);margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.op-wide-clock-block{text-align:right;flex-shrink:0;padding-left:20px}
.op-wide-status-row{display:flex;align-items:center;gap:12px;padding:12px 0;border-top:1px solid var(--border);border-bottom:1px solid var(--border);margin-bottom:14px;flex-wrap:wrap}
.op-wide-kpis{display:flex;gap:8px}
.op-wide-kpi{display:flex;align-items:center;gap:5px;background:var(--bg3);border-radius:var(--r1);padding:4px 10px}
.op-wide-kpi-v{font-family:var(--fd);font-size:16px;font-weight:700;line-height:1}
.op-wide-kpi-v.ok{color:var(--ok)}.op-wide-kpi-v.warn{color:var(--warn)}.op-wide-kpi-v.crit{color:var(--crit)}
.op-wide-kpi-l{font-size:9px;color:var(--text3);text-transform:uppercase;letter-spacing:.4px}
.op-inc-count{font-size:10px;color:var(--text3);margin-left:auto}
.op-info-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px 20px;margin-bottom:16px}
.op-info-item{min-width:0}
.op-info-lbl{font-size:9px;text-transform:uppercase;letter-spacing:.6px;color:var(--text3);margin-bottom:2px}
.op-info-val{font-size:12px;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.op-actions{display:flex;gap:8px;flex-wrap:wrap;border-top:1px solid var(--border);padding-top:14px}
.op-action-btn{padding:8px 14px;font-size:11px;font-weight:600;border:1.5px solid var(--border2);background:var(--bg3);color:var(--text2);border-radius:var(--r2);cursor:pointer;font-family:var(--fb);letter-spacing:.2px;transition:all .13s;white-space:nowrap}
.op-action-btn:hover{border-color:var(--text3);color:var(--text)}
.op-action-btn.op-action-warn{background:var(--warn-bg);border-color:var(--warn-bd);color:var(--warn)}
.op-action-btn.op-action-crit{background:var(--crit-bg);border-color:var(--crit-bd);color:var(--crit)}
.op-action-btn.op-action-navy{background:var(--navy);border-color:var(--navy);color:#fff}
.op-action-btn.op-action-navy:hover{background:#1a2d4a}
.op-action-btn.op-action-open{background:var(--orange);border-color:var(--orange);color:#fff;margin-left:auto}
.op-action-btn.op-action-open:hover{background:#d94400}

/* ── Site card widgets row — 2×2 grid on desktop ── */
.op-widgets-row{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:14px}
.op-widget{background:var(--bg3);border:1px solid var(--border);border-radius:var(--r2);padding:12px 14px;display:flex;flex-direction:column;min-width:0}
.op-widget-hdr{display:flex;align-items:center;gap:6px;margin-bottom:9px;flex-wrap:nowrap}
.op-widget-title{font-size:9px;text-transform:uppercase;letter-spacing:.7px;color:var(--text3);font-weight:600;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.op-widget-kpi-inline{font-size:11px;font-weight:700;color:var(--text);font-family:var(--fm);white-space:nowrap;flex-shrink:0}
.op-widget-btn{padding:3px 9px;font-size:10px;font-weight:600;background:var(--navy);color:#fff;border:none;border-radius:var(--r1);cursor:pointer;font-family:var(--fb);white-space:nowrap;flex-shrink:0;transition:background .13s}
.op-widget-btn:hover{background:#1a2d4a}
.op-widget-empty{font-size:11px;color:var(--text3);padding:8px 0 4px;text-align:center}
/* Quality widget */
.op-widget-quality-body{display:flex;align-items:center;gap:10px;margin-bottom:6px}
.op-widget-quality-meta{display:flex;flex-direction:column;gap:2px}
.op-widget-quality-lab{font-size:11px;font-weight:600;color:var(--text)}
.op-widget-quality-date{font-size:10px;color:var(--text3)}
.op-widget-quality-ref{font-size:9px;color:var(--text3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Prod chart */
.op-widget-prod>div{border-radius:var(--r1)}
/* Week bar chart */
.op-week-bars{display:flex;gap:3px;align-items:flex-end;flex:1}
.op-week-bar-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px}
.op-week-bar-wrap{height:52px;display:flex;align-items:flex-end;width:100%;justify-content:center}
.op-week-bar{width:100%;max-width:26px;border-radius:3px 3px 0 0;min-height:0;transition:height .2s}
.op-week-bar-lbl{font-size:7.5px;text-transform:uppercase;letter-spacing:.2px;text-align:center}
/* Incident widget */
.op-inc-row{display:flex;align-items:flex-start;gap:8px;padding:5px 0;border-bottom:1px solid var(--border)}
.op-inc-row:last-child{border-bottom:none}
.op-inc-sev-bar{width:3px;border-radius:2px;min-height:28px;align-self:stretch;flex-shrink:0}
.op-inc-sev-bar.crit{background:var(--crit)}.op-inc-sev-bar.warn{background:var(--warn)}.op-inc-sev-bar.ok{background:var(--ok)}
.op-inc-info{min-width:0}
.op-inc-type{font-size:11px;font-weight:600;color:var(--text);line-height:1.3}
.op-inc-desc{font-size:10px;color:var(--text3);line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

@keyframes fu{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}
@keyframes spin{to{transform:rotate(360deg)}}

/* ─ CHART INFO ICON ─ */
.chart-info{position:relative;display:inline-flex;align-items:center;margin-left:6px;vertical-align:middle}
.chart-info-icon{width:14px;height:14px;border-radius:50%;background:var(--bg3);border:1px solid var(--border);color:var(--text3);font-size:9px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;cursor:default;line-height:1;font-style:normal;transition:background .13s,color .13s}
.chart-info-icon:hover{background:var(--navy);color:#fff;border-color:var(--navy)}
.chart-info-tip{position:absolute;left:50%;bottom:calc(100% + 6px);transform:translateX(-50%);background:var(--navy);color:#fff;font-size:10.5px;font-family:var(--fb);font-weight:400;line-height:1.5;padding:7px 11px;border-radius:var(--r2);box-shadow:0 4px 16px rgba(10,22,40,.22);pointer-events:none;opacity:0;transition:opacity .15s;z-index:9999;width:max-content;max-width:300px;text-align:left}
.chart-info:hover .chart-info-tip{opacity:1}
.chart-info-tip::after{content:'';position:absolute;top:100%;left:50%;transform:translateX(-50%);border:5px solid transparent;border-top-color:var(--navy)}

/* ══════════════════════════════════
   MOBILE OVERLAY & SIDEBAR BACKDROP
══════════════════════════════════ */
#mob-overlay{
  display:block;position:fixed;inset:0;
  background:rgba(0,0,0,.38);
  z-index:99997;
  opacity:0;visibility:hidden;pointer-events:none;
  -webkit-tap-highlight-color:transparent;
  transition:opacity .22s ease,visibility .22s ease
}
#mob-overlay.show{opacity:1;visibility:visible;pointer-events:auto}

/* ══════════════════════════════════
   MOBILE IMPROVEMENTS — ALL VIEWS
══════════════════════════════════ */
@media(max-width:768px){

  /* ── Missing view flex-direction:column ── */
  #vConstruction,#vObjectives,#vProductivity,#vMachineStatus,#vAcademy,#vUsers,#vReport{
    flex-direction:column
  }

  /* ── Scroll padding for all main content areas ── */
  #mst-scroll,#objectives-scroll,#productivity-scroll,
  #users-scroll,#academy-content,#cs-content{
    padding:12px 12px 80px
  }
  /* ensure parent containers for these views allow scroll */
  #vObjectives .main,#vProductivity .main,#vMachineStatus .main,
  #vAcademy .main,#vUsers .main{
    overflow:visible;height:auto
  }

  /* ── Construction topbar title ── */
  #cs-topbar-title{font-size:20px !important}

  /* ── Site hero responsive ── */
  .sp-hero{padding:16px 16px 14px}
  .sp-hero-name{font-size:24px}
  .sp-hero-brand{font-size:8px}

  /* ── Machine Status cards: stack vertically ── */
  .mst-card{flex-direction:column}
  .mst-info{
    width:100%;border-right:none;
    border-bottom:1px solid var(--border);
    padding:12px 14px;
    flex-direction:row;align-items:center;
    flex-wrap:wrap;gap:8px
  }
  .mst-dest,.mst-dest-none{margin-top:0}
  .mst-body{padding:12px 14px}
  .mst-rev-badge{border-radius:0 var(--r2) 0 var(--r2)}

  /* ── Machine Status timeline: horizontal scroll ── */
  .mst-timeline{overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:6px}
  .mst-step{min-width:56px;flex-shrink:0}

  /* ── Globe header improvements ── */
  .globe-hd{padding:8px 10px;gap:5px}
  .globe-leg{gap:5px;flex-wrap:wrap}
  #map-big250-btn,#map-constr-btn{padding:5px 8px;min-height:34px;touch-action:manipulation}
  #map-constr-btn span:nth-child(2){display:none}

  /* ── Log stats: wrap to 3 cols on mid-mobile ── */
  .log-stats{grid-template-columns:repeat(3,1fr)}

  /* ── Users stats ── */
  .usr-stats{grid-template-columns:1fr 1fr}

  /* ── Productivity pv-bar-table: allow horizontal scroll ── */
  .pv-bar-table{overflow-x:auto;-webkit-overflow-scrolling:touch}
  .pv-bar-table > .pv-bar-row{min-width:280px}

  /* ── Modals (key date, minutes) full-width on mobile ── */
  #kd-modal > div,#min-modal > div{
    max-width:100% !important;
    margin:0 !important;
    border-radius:var(--r3) var(--r3) 0 0 !important;
    position:fixed;bottom:0;left:0;right:0;
    max-height:92vh
  }
  #kd-modal,#min-modal{padding:0 !important;align-items:flex-end !important}

  /* ── Topbar right side: clip overflow ── */
  .tb-r{max-width:50%;overflow:hidden}
  .tb-r .btn{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:120px}

  /* ── Construction detail page ── */
  .cs-info-bar{flex-wrap:wrap;gap:10px 20px}
  .cs-info-div{display:none}
  .cs-main-row{flex-direction:column}
  .cs-stage-card{flex:none !important;width:100% !important;position:static !important;top:auto !important}
  .cs-tl-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:4px}

  /* ── Chart row header: label + period buttons → stack on mobile ── */
  .chart-row-hdr{flex-wrap:wrap;gap:8px}
  .chart-row-hdr>div{flex-shrink:0}
  .prd-shift-btn{padding:5px 9px;font-size:10px;min-height:32px}

  /* ── Site KPI 5-col grid → 2-col on mobile ── */
  .site-kpi-grid{grid-template-columns:repeat(2,1fr) !important}
  .site-kpi-grid>div{border-right:none !important;border-bottom:1px solid var(--border)}
  .site-kpi-grid>div:last-child{border-bottom:none}
  .site-kpi-grid>div:nth-child(odd){border-right:1px solid var(--border) !important}

  /* ── Stop time / Split of production: stack on mobile ── */
  .pv-chart-row{flex-direction:column}
  .pv-chart-col{border-right:none !important;border-bottom:1px solid var(--border);padding:14px 14px 16px !important}
  .pv-chart-col:last-child{border-bottom:none}

  /* ── Productivity drawer full width ── */
  #prd-drawer{width:100vw}
}

@media(max-width:480px){
  /* Log stats → 2 cols at very small sizes */
  .log-stats{grid-template-columns:1fr 1fr}
  /* Constr grid → 1 col */
  .constr-grid{grid-template-columns:1fr}
  /* Globe even smaller */
  #gc{height:200px}
  /* Topbar title clamp */
  .tb-title{font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:160px}
  /* Sidebar slightly narrower */
  #mob-sidebar{width:240px}
}

/* ─ SANDBOX ─ */
.sbw-proto-note{font-size:10px;color:var(--text3);background:var(--bg3);border:1px dashed var(--border2);border-radius:var(--r2);padding:6px 12px;margin-bottom:20px;display:inline-flex;align-items:center;gap:6px}
.sbw-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:16px}
.sbw-grid-2{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;margin-bottom:16px}
.sbw-card{background:var(--bg2);border:1.5px solid var(--border2);border-radius:var(--r3);box-shadow:var(--sh);padding:20px;overflow:hidden}
.sbw-card-ttl{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.9px;color:var(--text2);margin-bottom:4px}
.sbw-card-sub{font-size:11px;color:var(--text3);margin-bottom:18px}
/* Widget 1 — Network Health Gauges */
.sbw-gauges{display:flex;justify-content:space-around;align-items:center;padding:8px 0}
.sbw-gauge-lbl{text-align:center;margin-top:8px}
.sbw-gauge-net{font-size:11px;font-weight:700;color:var(--text)}
.sbw-gauge-sub{font-size:9px;color:var(--text3);margin-top:2px}
/* Widget 2 — Incident breakdown */
.sbw-bar-row{display:flex;align-items:center;gap:10px;margin-bottom:9px}
.sbw-bar-lbl{font-size:10px;color:var(--text2);width:90px;flex-shrink:0;text-align:right}
.sbw-bar-track{flex:1;height:8px;background:var(--bg3);border-radius:4px;overflow:hidden}
.sbw-bar-fill{height:100%;border-radius:4px;transition:width .8s cubic-bezier(.4,0,.2,1)}
.sbw-bar-val{font-size:10px;color:var(--text3);font-family:var(--fm);width:22px;flex-shrink:0}
/* Widget 3 — Production sparkline */
.sbw-spark-row{display:flex;align-items:flex-end;gap:3px;height:60px;margin-bottom:10px}
.sbw-spark-bar{flex:1;border-radius:2px 2px 0 0;transition:height .6s ease;min-width:0}
.sbw-spark-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.sbw-stat-box{background:var(--bg3);border-radius:var(--r2);padding:8px 10px}
.sbw-stat-val{font-size:16px;font-weight:700;font-family:var(--fm);color:var(--text)}
.sbw-stat-lbl{font-size:8px;text-transform:uppercase;letter-spacing:.7px;color:var(--text3);margin-top:2px}
/* Widget 4 — Bottle mix */
.sbw-donut-wrap{display:flex;align-items:center;gap:20px}
.sbw-donut-legend{flex:1;display:flex;flex-direction:column;gap:7px;min-width:0}
.sbw-legend-row{display:flex;align-items:center;gap:7px;font-size:10px;color:var(--text2)}
.sbw-legend-dot{width:9px;height:9px;border-radius:2px;flex-shrink:0}
/* Widget 5 — Site clock matrix */
.sbw-clocks{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:8px}
.sbw-clock{background:var(--bg3);border:1px solid var(--border);border-radius:var(--r2);padding:9px 10px;text-align:center}
.sbw-clock-time{font-size:17px;font-weight:700;font-family:var(--fm);color:var(--text);letter-spacing:1px}
.sbw-clock-city{font-size:9px;text-transform:uppercase;letter-spacing:.7px;color:var(--text3);margin-top:3px}
.sbw-clock-dot{display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:3px;vertical-align:middle;position:relative;top:-1px}
/* Widget 0 — star-wheel bottling line animation */
.sbw-anim-card{padding-bottom:10px}
@keyframes sbxa-belt{to{stroke-dashoffset:-20}}
@keyframes sbxa-nozzle{0%,100%{transform:translateY(0)}35%,65%{transform:translateY(10px)}}
@keyframes sbxa-drop{0%,20%,100%{opacity:0;transform:translateY(0)}40%,70%{opacity:1}90%{opacity:0;transform:translateY(14px)}}
@keyframes sbxa-cap{0%,100%{transform:translateY(0)}45%,60%{transform:translateY(10px)}}
/* Linear conveyor belt animations — 3 s cycle */
@keyframes sbx-in{0%{transform:translateX(0);opacity:0}8%{opacity:1}80%{opacity:1}100%{transform:translateX(140px);opacity:0}}
@keyframes sbx-out{0%{transform:translateX(0);opacity:0}12%{opacity:1}85%{opacity:1}100%{transform:translateX(130px);opacity:0}}
@keyframes sbx-mid{0%,5%{transform:translateX(0);opacity:0}15%{opacity:1}80%{opacity:1}100%{transform:translateX(80px);opacity:0}}
/* Liquid rising inside bottle at fill station */
@keyframes sbx-liquid{0%,8%{transform:translateY(38px)}45%,65%{transform:translateY(0)}90%,100%{transform:translateY(38px)}}
/* Cap pressing down onto neck at cap station */
@keyframes sbx-cap-press{0%,40%{transform:translateY(-4px)}55%,70%{transform:translateY(0)}90%,100%{transform:translateY(-4px)}}
/* Widget 6–15 divider */
.sbw-divider{border:none;border-top:1.5px dashed var(--border2);margin:4px 0 20px;opacity:.6}
/* Widget 7 — OEE */
.sbw-oee-row{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.sbw-oee-lbl{font-size:10px;font-weight:600;color:var(--text2);width:46px;flex-shrink:0}
.sbw-oee-segs{flex:1;display:flex;flex-direction:column;gap:3px}
.sbw-oee-seg{display:flex;align-items:center;gap:5px}
.sbw-oee-tag{font-size:9px;font-weight:700;width:10px;flex-shrink:0}
.sbw-oee-track{flex:1;height:5px;background:var(--bg3);border-radius:3px;overflow:hidden}
.sbw-oee-fill{height:100%;border-radius:3px;transition:width .8s ease}
.sbw-oee-pct{font-size:9px;color:var(--text3);font-family:var(--fm);width:28px;text-align:right;flex-shrink:0}
.sbw-oee-total{font-size:15px;font-weight:700;font-family:var(--fm);width:38px;text-align:right;flex-shrink:0}
/* Widget 11 — Uptime ranking */
.sbw-rank-row{display:flex;align-items:center;gap:8px;margin-bottom:9px}
.sbw-rank-n{font-size:9px;color:var(--text3);font-family:var(--fm);width:12px;flex-shrink:0}
.sbw-rank-name{font-size:10px;color:var(--text2);width:76px;flex-shrink:0}
.sbw-rank-track{flex:1;height:6px;background:var(--bg3);border-radius:3px;overflow:hidden}
.sbw-rank-fill{height:100%;border-radius:3px;transition:width .8s ease}
.sbw-rank-pct{font-size:10px;font-family:var(--fm);font-weight:600;width:38px;text-align:right;flex-shrink:0}
.sbw-rank-arrow{font-size:13px;width:14px;flex-shrink:0}
/* Widget 12 — Pipeline */
.sbw-pipe-step{border:2px solid var(--ok);border-radius:var(--r2);padding:8px 10px;text-align:center;min-width:54px;background:var(--bg3)}
.sbw-pipe-arrow{font-size:18px;color:var(--border2);padding:0 2px;flex-shrink:0}
/* Widget 13 — Alert feed */
.sbw-alert-list{display:flex;flex-direction:column;gap:7px}
.sbw-alert-row{display:flex;align-items:baseline;gap:8px}
.sbw-alert-badge{font-size:8px;font-weight:700;color:#fff;padding:2px 5px;border-radius:3px;flex-shrink:0;letter-spacing:.5px}
.sbw-alert-msg{font-size:10px;color:var(--text2);flex:1}
.sbw-alert-time{font-size:9px;color:var(--text3);flex-shrink:0;white-space:nowrap}
/* Widget 14 — Heatmap */
.sbw-heat-wrap{display:flex;gap:4px}
.sbw-heat-dlabels{display:flex;flex-direction:column;gap:4px;padding-bottom:18px;padding-top:2px}
.sbw-heat-dlbl{font-size:8px;color:var(--text3);height:18px;display:flex;align-items:center;justify-content:center;width:14px}
.sbw-heat-cols{display:flex;gap:4px}
.sbw-heat-col{display:flex;flex-direction:column;gap:4px}
.sbw-heat-cell{width:18px;height:18px;border-radius:3px;cursor:default}
.sbw-heat-wlbl{font-size:7px;color:var(--text3);text-align:center;margin-top:2px}
/* Widget 15 — Energy */
.sbw-energy-row{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.sbw-energy-name{font-size:10px;color:var(--text2);width:76px;flex-shrink:0}
.sbw-energy-track{flex:1;height:8px;background:var(--bg3);border-radius:4px;overflow:visible;position:relative}
.sbw-energy-fill{height:100%;border-radius:4px;transition:width .8s ease}
.sbw-energy-target{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--text3);border-radius:1px;opacity:.7}
.sbw-energy-val{font-size:11px;font-family:var(--fm);font-weight:600;width:32px;text-align:right;flex-shrink:0}
/* Widget 16 — Shift coverage */
.sbw-shift-table{width:100%;border-collapse:collapse;font-size:10px}
.sbw-shift-table th{font-size:9px;font-weight:600;color:var(--text3);text-transform:uppercase;letter-spacing:.6px;padding:4px 8px;text-align:center;border-bottom:1px solid var(--border)}
.sbw-shift-table th:first-child{text-align:left}
.sbw-shift-table td{padding:5px 8px;border-bottom:1px solid var(--border);text-align:center;color:var(--text2)}
.sbw-shift-table td:first-child{text-align:left;font-weight:500;color:var(--text)}
.sbw-shift-badge{font-size:8px;font-weight:600;padding:2px 6px;border-radius:3px;letter-spacing:.3px}
/* Widget 17 — Cert matrix */
.sbw-cert-table{width:100%;border-collapse:collapse;font-size:9px}
.sbw-cert-table th{font-size:8px;font-weight:600;color:var(--text3);padding:4px 6px;text-align:center;border-bottom:1px solid var(--border)}
.sbw-cert-table td{padding:5px 6px;border-bottom:1px solid var(--border);text-align:center}
.sbw-cert-op{text-align:left!important;color:var(--text2);font-weight:500;white-space:nowrap;font-size:9px}
.sbw-cert-cell{vertical-align:middle}
.sbw-cert-ok{color:var(--ok);font-size:12px;font-weight:700}
.sbw-cert-no{color:var(--border2);font-size:12px}
/* Widget 19 — Training rings */
.sbw-train-grid{display:flex;justify-content:space-around;padding:4px 0}
/* Widget 21 — Gantt */
.sbw-gantt{display:flex;flex-direction:column;gap:8px}
.sbw-gantt-row{display:flex;align-items:center;gap:10px}
.sbw-gantt-lbl{font-size:9px;color:var(--text2);width:130px;flex-shrink:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sbw-gantt-track{flex:1;height:22px;background:var(--bg3);border-radius:4px;position:relative;overflow:hidden}
.sbw-gantt-bar{position:absolute;top:0;bottom:0;border-radius:4px;display:flex;align-items:center;padding-left:6px;transition:width .8s ease}
.sbw-gantt-tag{font-size:8px;font-weight:600;color:#fff;white-space:nowrap}
.sbw-gantt-axis{display:flex;justify-content:space-between;font-size:8px;color:var(--text3);padding:0 0 0 140px;margin-top:2px}

/* ── ORDER PLANNING ──────────────────────────────────────────────── */
.ord-toolbar{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 12px;flex-wrap:wrap;gap:10px}
.ord-site-tabs{display:flex;gap:6px;flex-wrap:wrap}
.ord-site-tab{padding:6px 14px;border:1px solid var(--border);border-radius:20px;font-size:11px;font-weight:600;cursor:pointer;background:var(--bg2);color:var(--text2);transition:all .15s;font-family:var(--fb)}
.ord-site-tab.active{background:var(--orange);color:#fff;border-color:var(--orange)}
.ord-nav-bar{display:flex;align-items:center;gap:8px;padding:8px 20px 10px}
.ord-nav-btn{width:32px;height:32px;border:1px solid var(--border2);border-radius:var(--r);background:var(--bg2);color:var(--text2);cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .12s}
.ord-nav-btn:hover{border-color:var(--orange);color:var(--orange);background:rgba(254,80,0,.04)}
.ord-nav-today{padding:5px 12px;border:1px solid var(--border2);border-radius:var(--r);background:var(--bg2);color:var(--text2);font-size:11px;font-weight:600;cursor:pointer;font-family:var(--fb);transition:all .12s;flex-shrink:0}
.ord-nav-today:hover,.ord-nav-today.active{border-color:var(--orange);color:var(--orange);background:rgba(254,80,0,.06)}
.ord-nav-period{font-size:11px;color:var(--text3);font-family:var(--fm);flex:1;text-align:center}
.ord-layout{display:flex;gap:20px;align-items:flex-start;padding-bottom:32px}
.ord-layout-main{flex:1;min-width:0}
.ord-layout-side{flex:1;min-width:0;padding-right:20px}
.ord-summary{background:var(--bg2);border:1px solid var(--border);border-radius:var(--r2);padding:16px;box-shadow:var(--sh);position:sticky;top:16px}
.ord-summary-ttl{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:1px;color:var(--text3);padding-bottom:10px;border-bottom:1px solid var(--border);margin-bottom:14px}
.ord-summary-kpi{background:var(--bg);border-radius:var(--r);padding:10px 12px;margin-bottom:14px}
.ord-summary-bars{display:flex;gap:2px;border-bottom:1px solid var(--border);padding-bottom:10px;margin-bottom:14px;align-items:flex-end}
.ord-summary-row{display:flex;align-items:center;justify-content:space-between;padding:5px 0;border-bottom:1px solid var(--border)}
.ord-summary-row:last-child{border-bottom:none}
.ord-summary-lbl{font-size:11px;color:var(--text2)}
.ord-summary-val{font-size:11px;font-weight:600;font-family:var(--fm);color:var(--text)}
.ord-summary-slbl{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.9px;color:var(--text3);margin:12px 0 7px}
.ord-cal-outer{padding:0 20px 0}
.ord-cal-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--border);border-radius:var(--r2);background:var(--bg2);box-shadow:var(--sh)}
.ord-cal{display:flex;min-width:max-content;align-items:flex-start}
.ord-day{width:156px;border-right:1px solid var(--border);display:flex;flex-direction:column;flex-shrink:0}
.ord-day:last-child{border-right:none}
.ord-day-hdr{padding:10px 12px 8px;border-bottom:1px solid var(--border);text-align:center;background:var(--bg3)}
.ord-day.is-today .ord-day-hdr{background:var(--orange)}
.ord-day.is-past .ord-day-hdr{opacity:.65}
.ord-day-name{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.9px;color:var(--text3)}
.ord-day.is-today .ord-day-name{color:rgba(255,255,255,.8)}
.ord-day-num{font-size:24px;font-weight:700;color:var(--text);line-height:1.1;margin-top:2px}
.ord-day.is-today .ord-day-num{color:#fff}
.ord-day-month{font-size:9px;color:var(--text3);text-transform:uppercase;letter-spacing:.5px;margin-top:1px}
.ord-day.is-today .ord-day-month{color:rgba(255,255,255,.65)}
.ord-day-body{padding:8px;min-height:72px;display:flex;flex-direction:column;gap:6px;transition:background .12s}
.ord-day.drag-over .ord-day-body{background:rgba(254,80,0,.07);outline:2px dashed rgba(254,80,0,.4);outline-offset:-4px;border-radius:var(--r)}
.ord-card{background:white;border:1px solid var(--border);border-left:3px solid var(--orange);border-radius:var(--r);padding:9px 10px;cursor:grab;user-select:none;transition:box-shadow .15s,opacity .15s;-webkit-tap-highlight-color:transparent}
.ord-card:hover{box-shadow:var(--sh);border-left-color:var(--orange)}
.ord-card:active{cursor:grabbing}
.ord-card.dragging{opacity:.3;box-shadow:none}
.ord-card.is-done{border-left-color:var(--ok);opacity:.7}
.ord-card-total{font-size:13px;font-weight:700;color:var(--text);font-family:var(--fm)}
.ord-card-chips{display:flex;flex-wrap:wrap;gap:3px;margin-top:4px}
.ord-card-chip{font-size:8px;background:var(--bg3);border-radius:3px;padding:2px 5px;color:var(--text2);font-family:var(--fm)}
.ord-card-notes{font-size:10px;color:var(--text3);margin-top:4px;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ord-card-foot{display:flex;align-items:center;justify-content:space-between;margin-top:6px}
.ord-card-badge{font-size:8px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;padding:2px 6px;border-radius:3px}
.ord-card-badge.s-planned{background:#e8f0fe;color:#1a56db}
.ord-card-badge.s-acknowledged{background:var(--ok-bg);color:var(--ok)}
.ord-card-badge.s-done{background:var(--bg3);color:var(--text3)}
.ord-add-btn{width:100%;padding:8px;border:1.5px dashed var(--border2);border-radius:var(--r);background:transparent;color:var(--text3);font-size:11px;cursor:pointer;text-align:center;transition:all .15s;font-family:var(--fb);margin-top:2px}
.ord-add-btn:hover{border-color:var(--orange);color:var(--orange);background:rgba(254,80,0,.03)}

/* Order Modal */
.ord-modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:300;display:flex;align-items:flex-end;justify-content:center}
@media(min-width:640px){.ord-modal-overlay{align-items:center;padding:20px}}
.ord-modal{background:var(--bg2);border-radius:var(--r3) var(--r3) 0 0;max-width:500px;width:100%;max-height:92vh;overflow-y:auto;box-shadow:0 -4px 40px rgba(0,0,0,.2);display:flex;flex-direction:column}
@media(min-width:640px){.ord-modal{border-radius:var(--r3);max-height:88vh}}
.ord-modal-hdr{padding:18px 20px 14px;border-bottom:1px solid var(--border);display:flex;align-items:flex-start;justify-content:space-between;flex-shrink:0;background:var(--bg2);position:sticky;top:0;z-index:1}
.ord-modal-title{font-size:14px;font-weight:700;color:var(--text)}
.ord-modal-sub{font-size:11px;color:var(--text3);margin-top:2px}
.ord-modal-close{width:28px;height:28px;border:none;background:var(--bg3);border-radius:50%;cursor:pointer;font-size:13px;display:flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--text2);line-height:1}
.ord-modal-body{padding:16px 20px;flex:1}
.ord-modal-foot{padding:14px 20px;border-top:1px solid var(--border);display:flex;gap:8px;flex-shrink:0;background:var(--bg2);position:sticky;bottom:0}
.ord-modal-foot .btn{flex:1;padding:11px;font-size:12px;justify-content:center}
.ord-modal-foot .btn-navy{flex:2}
.ord-field{margin-bottom:12px}
.ord-field:last-child{margin-bottom:0}
.ord-field label{display:block;font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.9px;color:var(--text3);margin-bottom:5px}
.ord-field input,.ord-field textarea,.ord-field select{width:100%;background:var(--bg);border:1px solid var(--border2);color:var(--text);font-family:var(--fb);font-size:13px;padding:9px 11px;border-radius:var(--r2);outline:none;transition:border-color .13s;-webkit-appearance:none;appearance:none}
.ord-field input:focus,.ord-field textarea:focus,.ord-field select:focus{border-color:var(--orange);box-shadow:0 0 0 3px rgba(254,80,0,.09)}
.ord-field textarea{min-height:70px;resize:vertical;line-height:1.5}
.ord-g2{display:grid;grid-template-columns:1fr 1fr;gap:0 12px}
.ord-section-lbl{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:1px;color:var(--text3);margin-bottom:10px;padding-bottom:5px;border-bottom:1px solid var(--border)}
.ord-total-row{background:var(--bg);border-radius:var(--r);padding:10px 14px;display:flex;align-items:center;justify-content:space-between;margin:10px 0 14px}
.ord-total-lbl{font-size:10px;color:var(--text3);text-transform:uppercase;letter-spacing:.7px}
.ord-total-val{font-size:20px;font-weight:700;color:var(--orange);font-family:var(--fm)}
.ord-del-btn{background:none;border:none;color:var(--crit);font-size:11px;cursor:pointer;padding:4px 0;text-decoration:underline;font-family:var(--fb)}
.ord-hint{font-size:10px;color:var(--text3);text-align:center;margin-top:8px}
/* Order planning — mobile agenda view */
.ord-agenda{padding:12px 16px 32px;display:flex;flex-direction:column;gap:10px}
.ord-agenda-day{border:1px solid var(--border);border-radius:var(--r2);background:var(--bg2);overflow:hidden}
.ord-agenda-day.is-today{border-color:var(--orange);box-shadow:0 0 0 1px var(--orange)}
.ord-agenda-day.is-past{opacity:.72}
.ord-agenda-hdr{display:flex;align-items:center;justify-content:space-between;padding:9px 13px;background:var(--bg3);border-bottom:1px solid var(--border)}
.ord-agenda-day.is-today .ord-agenda-hdr{background:var(--orange)}
.ord-agenda-date{display:flex;flex-direction:column;gap:1px}
.ord-agenda-dayname{font-size:11px;font-weight:700;color:var(--text);text-transform:uppercase;letter-spacing:.7px}
.ord-agenda-day.is-today .ord-agenda-dayname{color:#fff}
.ord-agenda-daynum{font-size:10px;color:var(--text3)}
.ord-agenda-day.is-today .ord-agenda-daynum{color:rgba(255,255,255,.75)}
.ord-agenda-count{font-size:9px;font-weight:600;color:var(--text3);background:var(--bg2);padding:2px 8px;border-radius:10px}
.ord-agenda-day.is-today .ord-agenda-count{background:rgba(255,255,255,.25);color:#fff}
.ord-agenda-body{padding:10px;display:flex;flex-direction:column;gap:6px}
/* Widget 23 — Maintenance */
.sbw-maint-row{display:flex;align-items:center;gap:12px;padding:7px 0;border-bottom:1px solid var(--border)}
.sbw-maint-row:last-child{border-bottom:none}
.sbw-maint-days{font-size:15px;font-weight:700;font-family:var(--fm);width:30px;flex-shrink:0;text-align:center}
.sbw-maint-task{font-size:10px;color:var(--text2);flex:1}
/* Widget B — carbonation bubble animation */
@keyframes sbxb-rise{0%{transform:translateY(0) scale(1);opacity:.75}85%{opacity:.5}100%{transform:translateY(-92px) scale(1.4);opacity:0}}
@media(max-width:900px){.sbw-grid{grid-template-columns:1fr 1fr}}
@media(max-width:600px){.sbw-grid,.sbw-grid-2{grid-template-columns:1fr}}

/* ─ QUALITY REPORTS ─ */
.qr-upload-row{display:flex;flex-wrap:wrap;gap:24px;margin-bottom:24px}
.qr-dropzone{background:var(--bg2);border:2px dashed var(--border2);border-radius:var(--r3);width:100%;aspect-ratio:auto;min-height:140px;flex-shrink:0;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;transition:border-color .18s,background .18s,transform .15s,box-shadow .18s;text-align:center;user-select:none;gap:10px;padding:20px}
.qr-dropzone:hover{border-color:var(--orange);background:rgba(254,80,0,.04);transform:translateY(-2px);box-shadow:0 6px 24px rgba(254,80,0,.1)}
.qr-dropzone.drag-over{border-color:var(--orange);border-style:solid;background:rgba(254,80,0,.07);transform:scale(1.03);box-shadow:0 8px 32px rgba(254,80,0,.15)}
.qr-drop-icon{position:relative;display:flex;align-items:center;justify-content:center;color:var(--text3);transition:color .18s}.qr-dropzone:hover .qr-drop-icon,.qr-dropzone.drag-over .qr-drop-icon{color:var(--orange)}
.qr-drop-plus{position:absolute;bottom:-4px;right:-10px;width:18px;height:18px;border-radius:50%;background:var(--orange);color:#fff;font-size:13px;font-weight:700;line-height:18px;text-align:center}
.qr-drop-title{font-size:12px;font-weight:600;color:var(--text);letter-spacing:.1px}
.qr-drop-sub{font-size:10px;color:var(--text3)}
.qr-drop-hint{font-size:9px;color:var(--border2);text-transform:uppercase;letter-spacing:.8px;font-family:var(--fm)}
.qr-status{font-size:12px;padding:10px 14px;border-radius:var(--r2);margin-bottom:16px}
.qr-status.uploading{background:var(--bg3);color:var(--text2)}
.qr-status.success{background:var(--ok-bg);color:var(--ok);border:1px solid var(--ok-bd)}
.qr-status.error{background:var(--crit-bg);color:var(--crit);border:1px solid var(--crit-bd)}
.qr-list-hdr{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:1.5px;color:var(--text3);margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid var(--border)}
.qr-row{display:flex;align-items:center;gap:14px;padding:12px 14px;background:var(--bg2);border:1px solid var(--border);border-radius:var(--r2);margin-bottom:6px;transition:box-shadow .13s}
.qr-row:hover{box-shadow:var(--sh)}
.qr-pdf-icon{flex-shrink:0;color:var(--crit);opacity:.7}
.qr-row-info{flex:1;min-width:0}
.qr-row-name{font-size:12px;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.qr-row-meta{font-size:10px;color:var(--text3);margin-top:2px;font-family:var(--fm)}
.qr-row-actions{display:flex;gap:6px;flex-shrink:0}
.qr-del-btn{color:var(--crit)!important;border-color:var(--crit-bd)!important}
.qr-del-btn:hover{background:var(--crit-bg)!important}
.qr-empty,.qr-loading{font-size:12px;color:var(--text3);padding:24px 0;text-align:center}
/* parser identification status */
#qr-parser-banner{flex-shrink:0;background:var(--bg3);border-bottom:2px solid var(--border2)}
.qr-parser-status{padding:8px 16px;display:flex;flex-direction:column;gap:5px}
.qr-parser-row{display:flex;align-items:center;gap:8px;font-size:11px}
.qr-parser-label{color:var(--text3);min-width:160px}
.qr-parser-label::after{content:' →'}
.qr-parser-divider{display:flex;align-items:center;gap:8px;padding:6px 16px 0;font-size:9px;font-weight:600;letter-spacing:1px;text-transform:uppercase;color:var(--text3)}
.qr-parser-divider::before,.qr-parser-divider::after{content:'';flex:1;height:1px;background:var(--border)}
.qr-results-header{padding:8px 16px;font-size:11px;font-weight:600;color:var(--text);background:var(--bg2);border-bottom:1px solid var(--border);letter-spacing:.1px}
.qr-parser-value{font-weight:600;font-family:var(--fm);font-size:11px}
.qr-parser-value.ok{color:var(--ok)}
.qr-parser-value.warn{color:var(--warn)}
.qr-parser-dots{color:var(--text3);font-size:11px;animation:qr-blink 1s infinite}
@keyframes qr-blink{0%,100%{opacity:1}50%{opacity:.3}}
.qr-upload-footer{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 14px;background:var(--bg3);border-top:1px solid var(--border);flex-shrink:0}
.qr-upload-footer-file{display:flex;align-items:center;gap:8px;min-width:0;flex:1}
.qr-upload-fname{font-size:11px;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:160px}
.qr-upload-footer-actions{display:flex;gap:8px;flex-shrink:0}
.qr-upload-footer-site{display:flex;align-items:center;gap:8px;flex-shrink:0}
.qr-site-label{font-size:11px;color:var(--text3);white-space:nowrap}
.qr-site-select{font-size:12px;padding:4px 8px;border:1px solid var(--border);border-radius:var(--r);background:var(--bg);color:var(--text);font-family:var(--fb);min-width:140px;cursor:pointer}
.qr-row-pills{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}
.qr-sample-pill{font-size:10px;font-family:var(--fm);color:var(--text3);background:var(--bg3);border:1px solid var(--border);border-radius:var(--r);padding:1px 6px}
.qr-badge{font-size:9px;font-weight:600;padding:2px 7px;border-radius:3px;letter-spacing:.3px;text-transform:none}
.qr-badge-ok{background:var(--ok-bg);color:var(--ok);border:1px solid var(--ok-bd)}
.qr-badge-warn{background:var(--warn-bg);color:var(--warn);border:1px solid var(--warn-bd)}
.qr-date-input{width:100%;padding:8px 10px;border:1.5px solid var(--border2);border-radius:var(--r2);font-size:12px;font-family:var(--fb);color:var(--text);background:var(--bg);outline:none;transition:border-color .13s}
.qr-date-input:focus{border-color:var(--orange)}
.qr-confirm-actions{display:flex;justify-content:flex-end;gap:8px;padding-top:4px;border-top:1px solid var(--border)}
.qr-samples-preview{border:1px solid var(--border);border-radius:var(--r2);overflow:hidden;max-height:300px;overflow-y:auto}
.qr-samples-ttl{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:1.2px;color:var(--text3);padding:8px 12px;background:var(--bg3);border-bottom:1px solid var(--border)}
.qr-sample{border-bottom:1px solid var(--border)}
.qr-sample:last-child{border-bottom:none}
.qr-sample-hd{display:flex;align-items:center;gap:8px;padding:7px 12px;background:var(--bg)}
.qr-sample-ref{font-size:11px;font-weight:600;color:var(--text)}
.qr-sample-date{font-size:10px;font-family:var(--fm);color:var(--text3)}
.qr-sample-num{font-size:9px;color:var(--border2);margin-left:auto;font-family:var(--fm)}
.qr-sample-table{width:100%;border-collapse:collapse}
.qr-sample-table tr{border-top:1px solid var(--border)}
.qr-sp{font-size:10px;color:var(--text2);padding:5px 12px;width:60%}
.qr-sv{font-size:10px;font-weight:600;font-family:var(--fm);padding:5px 8px;text-align:right}
.qr-sv-ok{color:var(--ok)}.qr-sv-fail{color:var(--crit)}
.qr-su{font-size:9px;color:var(--text3);padding:5px 12px 5px 4px}
/* pdf preview panel */
.qr-pdf-preview-container{width:calc(50% - 12px);flex-shrink:0;background:var(--bg2);border:1px solid var(--border);border-radius:var(--r3);overflow:hidden;display:flex;flex-direction:column;min-height:450px}
.qr-pdf-label{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:1.5px;color:var(--text3);padding:10px 14px;background:var(--bg3);border-bottom:1px solid var(--border)}
.qr-pdf-canvas-wrapper{flex:1;display:flex;align-items:center;justify-content:center;padding:10px;min-height:300px;overflow:auto}
#qr-pdf-preview{max-width:100%;max-height:100%;border-radius:var(--r2);background:white;box-shadow:0 1px 2px rgba(0,0,0,.1)}
.qr-pdf-controls{display:flex;align-items:center;justify-content:center;gap:12px;padding:8px 14px;background:var(--bg3);border-top:1px solid var(--border);flex-shrink:0}
.qr-pdf-nav-btn{background:var(--bg2);border:1px solid var(--border2);color:var(--text);padding:5px 10px;border-radius:4px;font-size:11px;cursor:pointer;transition:all .13s;font-family:var(--fb)}
.qr-pdf-nav-btn:hover:not(:disabled){border-color:var(--orange);color:var(--orange)}
.qr-pdf-nav-btn:disabled{opacity:.5;cursor:not-allowed}
.qr-pdf-page-info{font-size:11px;color:var(--text2);min-width:100px;text-align:center;font-family:var(--fm)}
/* landscape PDF: stack preview above extracted data panel */
.qr-upload-row.qr-landscape-pdf .qr-pdf-preview-container{width:100%}
.qr-upload-row.qr-landscape-pdf .qr-structure-preview{width:100%}
/* structure preview panel */
.qr-structure-preview{width:calc(50% - 12px);min-width:0;background:var(--bg2);border:1px solid var(--border);border-radius:var(--r3);overflow:hidden;display:flex;flex-direction:column;min-height:450px}
.qr-sp-hdr{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:1.5px;color:var(--text3);padding:10px 14px;background:var(--bg3);border-bottom:1px solid var(--border)}
.qr-sp-block{padding:10px 14px;display:flex;flex-direction:column;gap:5px}
.qr-sp-meta-row{display:flex;align-items:center;justify-content:space-between;gap:8px}
.qr-sp-key{font-size:10px;color:var(--text3)}
.qr-sp-val-eg{font-size:10px;font-family:var(--fm);color:var(--text2);background:var(--bg3);padding:1px 6px;border-radius:3px}
.qr-sp-divider{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:1px;color:var(--border2);padding:6px 14px;background:var(--bg3);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
.qr-sp-param-row{display:flex;align-items:center;gap:8px}
.qr-sp-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}.qr-sp-dot.ok{background:var(--ok)}.qr-sp-dot.fail{background:var(--crit)}
.qr-sp-pname{font-size:10px;color:var(--text2);flex:1}
.qr-sp-pval{font-size:10px;font-weight:600;font-family:var(--fm);color:var(--ok);min-width:20px;text-align:right}
.qr-sp-punit{font-size:9px;color:var(--text3);min-width:70px;text-align:right}
.qr-sp-footer{font-size:9px;color:var(--border2);padding:7px 14px;border-top:1px solid var(--border);font-style:italic}
/* extracted sample cards */
.qr-ext-card{border-bottom:1px solid var(--border)}
.qr-ext-card:last-child{border-bottom:none}
.qr-ext-hd{display:flex;align-items:center;gap:10px;padding:8px 14px 2px;background:var(--bg)}
.qr-ext-ref{font-size:11px;font-weight:700;color:var(--text)}
.qr-ext-date{font-size:10px;font-family:var(--fm);color:var(--orange)}
.qr-ext-sub{font-size:9px;color:var(--text3);font-family:var(--fm);padding:0 14px 6px}
.qr-ext-table{width:100%;border-collapse:collapse}
.qr-ext-table tr{border-top:1px solid var(--border)}
.qr-ext-param{font-size:10px;color:var(--text2);padding:5px 10px;display:flex;align-items:center;gap:6px}
.qr-ext-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0;display:inline-block}
.qr-ext-dot.ok{background:var(--ok)}.qr-ext-dot.fail{background:var(--crit)}
.qr-ext-val{font-size:10px;font-weight:700;font-family:var(--fm);padding:5px 8px;text-align:right;white-space:nowrap}
.qr-ext-val.ok{color:var(--ok)}.qr-ext-val.fail{color:var(--crit)}
.qr-ext-num{font-size:9px;font-weight:400;color:var(--text3);font-family:var(--fm)}
.qr-ext-unit{font-size:9px;color:var(--text3);padding:5px 14px 5px 4px;white-space:nowrap}
/* enhanced sample display */
.qr-ext-table thead{background:var(--bg3)}
.qr-ext-table th{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text3);padding:6px 10px;text-align:left;border-bottom:1px solid var(--border)}
.qr-ext-table th:nth-child(n+2){text-align:right}
.qr-ext-table td{padding:6px 10px}
/* integrated dropzone in right panel */
.qr-sp-dropzone{background:var(--bg3);border:2px dashed var(--border2);border-radius:var(--r2);padding:20px 14px;margin:10px 14px;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;transition:border-color .18s,background .18s,transform .15s;text-align:center;user-select:none;gap:8px;min-height:140px;flex-shrink:0}
.qr-sp-dropzone:hover{border-color:var(--orange);background:rgba(254,80,0,.05);transform:translateY(-1px)}
.qr-sp-dropzone.drag-over{border-color:var(--orange);border-style:solid;background:rgba(254,80,0,.08);transform:scale(1.01);box-shadow:inset 0 0 8px rgba(254,80,0,.1)}
.qr-sp-dropzone .qr-drop-icon{color:var(--text3);transition:color .18s}
.qr-sp-dropzone:hover .qr-drop-icon,.qr-sp-dropzone.drag-over .qr-drop-icon{color:var(--orange)}
.qr-sp-dropzone .qr-drop-title{font-size:11px}
.qr-sp-dropzone .qr-drop-sub{font-size:10px;color:var(--text3)}
.qr-ext-meta{display:flex;align-items:center;gap:8px;padding:4px 14px;font-size:9px;color:var(--text3);background:var(--bg3);border-top:1px solid var(--border)}
.qr-ext-meta-item{display:flex;align-items:center;gap:4px}
.qr-ext-meta-item strong{color:var(--text2)}
.qr-ext-meta{display:flex;gap:16px;padding:4px 14px;font-size:9px;color:var(--text3);background:var(--bg3);border-bottom:1px solid var(--border)}
.qr-ext-meta-item{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.qr-ext-meta-item strong{color:var(--text2);font-weight:600}
.qr-ext-method{font-size:9px;color:var(--text3);white-space:nowrap;padding:5px 10px;text-align:right}
.qr-ext-th-param{width:45%;text-align:left}
.qr-ext-th-val{width:20%;text-align:right}
.qr-ext-th-unit{width:15%;text-align:right}
.qr-ext-th-method{width:20%;text-align:right}
@media(max-width:600px){.qr-upload-row{flex-direction:column}.qr-dropzone{width:100%;aspect-ratio:auto;padding:32px 20px}.qr-pdf-preview-container{width:100%;height:280px}.qr-structure-preview{width:100%}}
