/* =====================================================================
   Central Calibradora · Operação Integral — sistema visual Terrasweet
   (paleta escura preto/cinzento/castanho; Fraunces + Inter)
   ===================================================================== */
:root{
  --black:#0f0d0c; --coal:#161311; --slate:#1f1b18; --stone:#2a2521; --stone2:#332d28;
  --ash:#6b625b; --smoke:#a39a92; --bone:#efe9e2; --bone2:#d9d2c9;
  --umber:#8a5a3c; --sienna:#b8784e; --clay:#d9a677; --sand:#e8c9a0;
  --ok:#b8784e; --warn:#d9a677; --bad:#c2533f; --idle:#6b625b; --info:#8fa3b1;
  --hair:rgba(239,233,226,.09); --hair2:rgba(239,233,226,.16);
  --prod:#d9a677; --box:#efe9e2; --pal:#b8784e; --truck:#a39a92; --water:#8fa3b1;
  --navw:236px; --topw:62px;
  --r:12px; --r2:8px;
  --ff:"Inter",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif; --fd:"Fraunces",Georgia,serif;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{margin:0;background:var(--black);color:var(--bone);font:15px/1.5 var(--ff);min-height:100vh}
a{color:var(--clay);text-decoration:none} a:hover{text-decoration:underline}
h1,h2,h3,h4{font-family:var(--fd);font-weight:500;letter-spacing:-.01em;margin:0 0 .4em;line-height:1.15}
h1{font-size:2rem} h2{font-size:1.45rem} h3{font-size:1.15rem} h4{font-size:1rem;font-family:var(--ff);font-weight:600;color:var(--bone2)}
p{margin:.4em 0 .8em} small,.small{font-size:.84rem;color:var(--smoke)}
code,.mono{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:.86em}
button{font:inherit}
.eyebrow{font-size:.68rem;letter-spacing:.14em;text-transform:uppercase;color:var(--clay);font-weight:600}
.muted{color:var(--smoke)} .dim{color:var(--ash)}
.num{font-family:var(--fd);font-variant-numeric:tabular-nums;font-weight:500}
.hidden{display:none!important}

/* ---------- layout ---------- */
.app{display:grid;grid-template-columns:var(--navw) minmax(0,1fr);min-height:100vh}
nav.side{position:sticky;top:0;height:100vh;overflow:auto;background:var(--coal);border-right:1px solid var(--hair);display:flex;flex-direction:column;padding:16px 12px 12px}
.brand{padding:4px 8px 14px;border-bottom:1px solid var(--hair);margin-bottom:10px}
.brand .t{font-family:var(--fd);font-size:1.25rem;line-height:1.1;color:var(--bone)}
.brand .s{font-size:.72rem;color:var(--smoke);margin-top:4px;letter-spacing:.06em;text-transform:uppercase}
.brand .mark{display:inline-block;width:30px;height:30px;border-radius:7px;background:linear-gradient(135deg,var(--umber),var(--clay));color:#1a120c;font:700 .9rem/30px var(--fd);text-align:center;margin-bottom:8px}
.navcap{font-size:.66rem;letter-spacing:.14em;text-transform:uppercase;color:var(--ash);padding:12px 10px 4px}
nav.side a.item{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:var(--r2);color:var(--bone2);font-size:.92rem}
nav.side a.item:hover{background:var(--slate);text-decoration:none}
nav.side a.item.active{background:var(--slate);color:var(--bone);box-shadow:inset 3px 0 0 var(--clay)}
nav.side a.item .ic{width:18px;height:18px;flex:none;opacity:.8}
nav.side a.item.active .ic{opacity:1}
.navfoot{margin-top:auto;padding:10px 8px 0;border-top:1px solid var(--hair);font-size:.78rem;color:var(--smoke)}
.navfoot .dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--ash);margin-right:6px;vertical-align:middle}
.navfoot .dot.ok{background:var(--sienna);box-shadow:0 0 0 3px rgba(184,120,78,.2)} .navfoot .dot.warn{background:var(--clay)} .navfoot .dot.bad{background:var(--bad)}
.shell{min-width:0;display:flex;flex-direction:column;min-height:100vh}
header.top{position:sticky;top:0;z-index:30;height:var(--topw);display:flex;align-items:center;gap:12px;padding:0 20px;background:rgba(15,13,12,.85);backdrop-filter:blur(10px);border-bottom:1px solid var(--hair)}
header.top .crumb{font-size:.9rem;color:var(--smoke);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
header.top .crumb b{color:var(--bone);font-weight:600}
header.top .sp{flex:1}
header.top .clock{font-family:var(--fd);font-size:1.1rem;color:var(--bone2);letter-spacing:.02em;font-variant-numeric:tabular-nums}
.btn{display:inline-flex;align-items:center;gap:6px;padding:7px 12px;border:1px solid var(--hair2);background:var(--slate);color:var(--bone);border-radius:var(--r2);cursor:pointer;font-size:.86rem;line-height:1.2;white-space:nowrap}
.btn:hover{border-color:var(--sienna)} .btn.primary{background:var(--umber);border-color:var(--umber);color:#fff} .btn.ghost{background:transparent}
.btn:disabled{opacity:.5;cursor:default}
.btn.sm{padding:4px 9px;font-size:.78rem}
.seg{display:inline-flex;border:1px solid var(--hair2);border-radius:var(--r2);overflow:hidden}
.seg button{padding:6px 11px;background:transparent;border:0;color:var(--smoke);cursor:pointer;font-size:.82rem;border-right:1px solid var(--hair)}
.seg button:last-child{border-right:0} .seg button.on{background:var(--stone);color:var(--bone)}
.menu-btn{display:none}
main{padding:22px clamp(16px,2.6vw,36px) 60px;max-width:1700px;width:100%;min-width:0}
footer.foot{padding:14px 24px 26px;border-top:1px solid var(--hair);color:var(--ash);font-size:.78rem;display:flex;gap:16px;flex-wrap:wrap}
.ph{display:flex;align-items:flex-end;gap:18px;flex-wrap:wrap;margin-bottom:18px}
.ph h1{margin:0} .ph .sub{color:var(--smoke);margin:4px 0 0;font-size:.95rem}
.ph .tools{margin-left:auto;display:flex;gap:8px;align-items:center;flex-wrap:wrap}

/* ---------- cartões, grelhas ---------- */
.grid{display:grid;gap:14px}
.g2{grid-template-columns:repeat(2,minmax(0,1fr))} .g3{grid-template-columns:repeat(3,minmax(0,1fr))} .g4{grid-template-columns:repeat(4,minmax(0,1fr))}
.g5{grid-template-columns:repeat(5,minmax(0,1fr))} .g6{grid-template-columns:repeat(6,minmax(0,1fr))}
.gauto{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.card{background:var(--coal);border:1px solid var(--hair);border-radius:var(--r);padding:16px 18px;min-width:0}
.card.flat{background:transparent} .card.tight{padding:12px 14px}
.card h3{display:flex;align-items:baseline;gap:10px;margin-bottom:10px} .card h3 .sub{font-family:var(--ff);font-size:.78rem;color:var(--smoke);font-weight:400}
.card .foot{margin-top:10px;font-size:.78rem;color:var(--ash)}
.kpi{background:var(--coal);border:1px solid var(--hair);border-radius:var(--r);padding:14px 16px 12px;min-width:0;position:relative;overflow:hidden}
.kpi .l{font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;color:var(--smoke);display:flex;justify-content:space-between;gap:8px}
.kpi .v{font-family:var(--fd);font-size:2.1rem;line-height:1.05;margin:8px 0 4px;color:var(--bone);font-variant-numeric:tabular-nums;font-weight:500}
.kpi .v small{font-size:1rem;color:var(--smoke);margin-left:4px;font-family:var(--ff)}
.kpi .n{font-size:.8rem;color:var(--smoke)} .kpi .n b{color:var(--bone2);font-weight:600}
.kpi.acc{border-color:rgba(217,166,119,.35);background:linear-gradient(180deg,rgba(138,90,60,.18),transparent 60%),var(--coal)}
.kpi.bad .v{color:var(--bad)}
.state{display:inline-flex;align-items:center;gap:6px;padding:2px 9px;border-radius:999px;font-size:.72rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;border:1px solid}
.state::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}
.state.ok{color:var(--sienna);border-color:rgba(184,120,78,.5)} .state.ok::before{animation:pulse 1.6s ease-in-out infinite}
.state.warn{color:var(--clay);border-color:rgba(217,166,119,.5)} .state.bad{color:var(--bad);border-color:rgba(194,83,63,.5)}
.state.idle{color:var(--smoke);border-color:var(--hair2)} .state.info{color:var(--info);border-color:rgba(143,163,177,.5)}
@keyframes pulse{50%{opacity:.35}}
.pill{display:inline-block;padding:1px 8px;border-radius:999px;font-size:.74rem;border:1px solid var(--hair2);color:var(--smoke);vertical-align:middle}
.pill.ok{color:var(--sienna);border-color:rgba(184,120,78,.5)} .pill.warn{color:var(--clay);border-color:rgba(217,166,119,.5)} .pill.bad{color:var(--bad);border-color:rgba(194,83,63,.5)}
.tag{display:inline-block;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:.76rem;background:var(--slate);border:1px solid var(--hair);padding:1px 7px;border-radius:5px;color:var(--bone2)}
.note{border-left:3px solid var(--sienna);background:var(--coal);padding:10px 14px;border-radius:0 var(--r2) var(--r2) 0;margin:12px 0;font-size:.9rem}
.note.warn{border-left-color:var(--clay)} .note.bad{border-left-color:var(--bad)} .note.info{border-left-color:var(--info)}
.banner{display:none;align-items:center;gap:10px;padding:9px 14px;border-radius:var(--r2);background:var(--stone);border:1px solid var(--hair2);margin:0 0 14px;font-size:.88rem}
.banner.show{display:flex} .banner.bad{border-color:rgba(194,83,63,.6)} .banner.warn{border-color:rgba(217,166,119,.5)}
.tbl{width:100%;border-collapse:collapse;font-size:.86rem}
.tbl th,.tbl td{padding:7px 9px;border-bottom:1px solid var(--hair);text-align:left;vertical-align:top}
.tbl th{font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:var(--smoke);font-weight:600;background:var(--slate);position:sticky;top:0}
.tbl td.r,.tbl th.r{text-align:right;font-variant-numeric:tabular-nums} .tbl tr:hover td{background:rgba(239,233,226,.03)}
.tbl td.mono{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:.8rem;white-space:nowrap}
.tbl.nw td,.tbl.nw th{white-space:nowrap} .tbl td.wrap{white-space:normal}
.twrap{overflow:auto;border:1px solid var(--hair);border-radius:var(--r2);max-height:420px}
.twrap.tall{max-height:640px}
.empty{padding:18px;color:var(--ash);text-align:center;font-size:.86rem;border:1px dashed var(--hair2);border-radius:var(--r2)}
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap} .row.between{justify-content:space-between}
.kv{display:grid;grid-template-columns:minmax(120px,40%) 1fr;gap:4px 12px;font-size:.88rem} .kv b{color:var(--smoke);font-weight:500}
.barlist{display:grid;gap:6px} .barlist .bl{display:grid;grid-template-columns:minmax(80px,30%) 1fr auto;gap:10px;align-items:center;font-size:.84rem}
.barlist .bar{height:10px;background:var(--stone);border-radius:5px;overflow:hidden} .barlist .bar i{display:block;height:100%;background:var(--sienna);border-radius:5px}
.barlist .bar i.c2{background:var(--clay)} .barlist .bar i.c3{background:var(--smoke)}
.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:.78rem;color:var(--smoke);margin-top:8px}
.legend i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:5px;vertical-align:middle}
/* objectivos e cumprimento */
.objwrap{background:var(--coal);border:1px solid var(--hair);border-radius:var(--r);padding:14px 18px 16px;min-width:0}
.objgrid{grid-template-columns:repeat(6,minmax(0,1fr))} @media (max-width:1380px){.objgrid{grid-template-columns:repeat(3,minmax(0,1fr))}} @media (max-width:640px){.objgrid{grid-template-columns:minmax(0,1fr)}}
.obj{display:block;background:var(--slate);border:1px solid var(--hair);border-left:3px solid var(--idle);border-radius:var(--r2);padding:10px 12px 10px;text-decoration:none;color:inherit;min-width:0}
.obj:hover{border-color:var(--hair2);border-left-color:inherit}
.obj.ok{border-left-color:var(--sienna)} .obj.warn{border-left-color:var(--clay)} .obj.bad{border-left-color:var(--bad)} .obj.na{border-left-color:var(--ash)}
.obj .ot b{display:block;font-size:.84rem;color:var(--bone)} .obj .ot span{display:block;font-size:.72rem;color:var(--smoke);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.obj .ov{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin:6px 0 4px} .obj .ov b{font-family:var(--fd);font-size:1.9rem;line-height:1;font-weight:500;color:var(--bone);font-variant-numeric:tabular-nums}
.obj.bad .ov b{color:var(--bad)} .obj.warn .ov b{color:var(--clay)} .obj.na .ov b{color:var(--smoke)}
.chip{display:inline-block;padding:1px 7px;border-radius:999px;font-size:.7rem;border:1px solid var(--hair2);color:var(--smoke);white-space:nowrap}
.chip.ok{color:var(--sienna);border-color:rgba(184,120,78,.5)} .chip.warn{color:var(--clay);border-color:rgba(217,166,119,.5)} .chip.bad{color:var(--bad);border-color:rgba(194,83,63,.5)}
.obar{position:relative;height:8px;background:var(--stone);border-radius:4px;margin:6px 0 8px;overflow:visible}
.obar i{display:block;height:100%;background:var(--sienna);border-radius:4px;transition:width .6s ease} .obj.warn .obar i,.objbloco.warn .obar i{background:var(--clay)} .obj.bad .obar i,.objbloco.bad .obar i{background:var(--bad)}
.obar em{position:absolute;top:-4px;bottom:-4px;width:2px;background:var(--bone);opacity:.85;border-radius:1px}
.obj .ol{font-size:.8rem;color:var(--bone2);line-height:1.35} .obj .ol.small{color:var(--smoke);font-size:.76rem;margin-top:2px}
.objbloco{border-left:3px solid var(--idle)} .objbloco.ok{border-left-color:var(--sienna)} .objbloco.warn{border-left-color:var(--clay)} .objbloco.bad{border-left-color:var(--bad)}
.objhead{display:grid;grid-template-columns:auto 1fr;gap:6px 22px;align-items:center;margin:8px 0 12px}
.objhead .big{font-family:var(--fd);font-size:3.2rem;line-height:1;font-weight:500;color:var(--bone);font-variant-numeric:tabular-nums} .objhead .big small{display:block;font-family:var(--ff);font-size:.72rem;color:var(--smoke);letter-spacing:.08em;text-transform:uppercase;margin-top:4px}
.objbloco.bad .objhead .big{color:var(--bad)} .objbloco.warn .objhead .big{color:var(--clay)} .objbloco.na .objhead .big{color:var(--smoke)}
.objhead .objtxt{min-width:0;font-size:.9rem} .objhead .objtxt .small{margin-top:3px}
.chart .line.plan{stroke:var(--bone);opacity:.75} .chart .line.real{stroke:var(--sienna);stroke-width:2.4} .chart .area.real{fill:rgba(184,120,78,.16)}
@media (max-width:640px){.objhead{grid-template-columns:minmax(0,1fr)} .objhead .big{font-size:2.4rem}}
input.search,select.sel,input.inp,textarea.inp{padding:8px 11px;border:1px solid var(--hair2);border-radius:var(--r2);background:var(--slate);color:var(--bone);font:inherit;font-size:.88rem;min-width:0}
textarea.inp{width:100%;min-height:80px;resize:vertical}
input.search{width:min(420px,100%)}
.chips{display:flex;gap:6px;flex-wrap:wrap} .chip{padding:3px 10px;border-radius:999px;border:1px solid var(--hair2);background:transparent;color:var(--smoke);cursor:pointer;font-size:.78rem} .chip.on{background:var(--stone);color:var(--bone);border-color:var(--sienna)}
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--hair);margin-bottom:14px;overflow:auto}
.tabs button{padding:8px 12px;background:transparent;border:0;border-bottom:2px solid transparent;color:var(--smoke);cursor:pointer;font-size:.88rem;white-space:nowrap}
.tabs button.on{color:var(--bone);border-bottom-color:var(--clay)}

/* ---------- gráficos SVG ---------- */
svg.chart{width:100%;height:auto;display:block;font-family:var(--ff)}
.chart .ax{stroke:var(--hair2);stroke-width:1} .chart .grid{stroke:var(--hair);stroke-width:1}
.chart .lbl{fill:var(--smoke);font-size:11px} .chart .lbl.b{fill:var(--bone2);font-weight:600}
.chart .bar{fill:var(--sienna)} .chart .bar.c2{fill:var(--clay)} .chart .bar.c3{fill:var(--smoke)} .chart .bar.c4{fill:var(--umber)} .chart .bar.c5{fill:var(--sand)} .chart .bar.zero{fill:var(--stone)}
.chart .line{fill:none;stroke:var(--clay);stroke-width:2} .chart .area{fill:rgba(217,166,119,.12)}
.chart .ref{stroke:var(--bad);stroke-dasharray:4 4;stroke-width:1}
.chart .band{fill:rgba(184,120,78,.14)}

/* ---------- planta viva ---------- */
.plant{background:radial-gradient(1200px 600px at 50% 0%,rgba(138,90,60,.12),transparent 60%),var(--coal);border:1px solid var(--hair);border-radius:var(--r);padding:10px 10px 6px;position:relative;overflow:hidden}
.plant svg{width:100%;height:auto;display:block;font-family:var(--ff)}
.plant .ctl{position:absolute;top:10px;right:12px;display:flex;gap:6px;z-index:2}
.pl-bld{fill:#1a1614;stroke:var(--hair2);stroke-width:1.5}
.pl-area{fill:#211c19;stroke:rgba(239,233,226,.12);stroke-width:1} .pl-area.cal{fill:#262019} .pl-area.exp{fill:#241e1a} .pl-area.doc{fill:#191513;stroke-dasharray:4 3}
.pl-area.hot{stroke:var(--clay);stroke-width:1.5}
.pl-zone{fill:none;stroke:rgba(239,233,226,.07);stroke-dasharray:3 3}
.pl-wall{stroke:rgba(239,233,226,.35);stroke-width:2;stroke-linecap:round} .pl-door{stroke:var(--sienna);stroke-width:2;stroke-dasharray:3 3}
.pl-name{fill:var(--bone2);font-size:14px;font-weight:600;letter-spacing:.04em;text-transform:uppercase} .pl-name.dim{fill:var(--ash)}
.pl-sub{fill:var(--smoke);font-size:11px} .pl-kpi{fill:var(--bone);font-family:var(--fd);font-size:17px}
.pl-kpi.sm{font-size:13px}
.pl-badge{fill:#161311;stroke:var(--hair2)} .pl-badge.on{stroke:var(--sienna)} .pl-badge.off{stroke:var(--hair)}
.pl-btxt{fill:var(--bone);font-size:12px;font-weight:600} .pl-btxt.dim{fill:var(--smoke);font-weight:400;font-size:11px}
.pl-path{fill:none;stroke:rgba(239,233,226,.1);stroke-width:4;stroke-linecap:round;stroke-linejoin:round}
.pl-path.on{stroke:rgba(217,166,119,.35)} .pl-path.box.on{stroke:rgba(239,233,226,.3)}
.pl-dot{fill:var(--prod);opacity:.95} .pl-box{fill:var(--box)} .pl-pal{fill:var(--pal);stroke:#1a120c;stroke-width:.6} .pl-truck{fill:var(--truck)} .pl-bb{fill:#8a5a3c;stroke:var(--clay);stroke-width:.8}
.pl-line{stroke:var(--sienna);stroke-width:3;stroke-linecap:round} .pl-mesa{stroke:rgba(217,166,119,.6);stroke-width:2.5} .pl-mach{fill:#3a2f27;stroke:var(--clay);stroke-width:1}
.pl-out{fill:#2a2521;stroke:var(--hair2);stroke-width:1} .pl-out.on{fill:var(--sienna);stroke:var(--clay)}
.pl-fill{fill:rgba(184,120,78,.35)} .pl-fillbg{fill:rgba(239,233,226,.06)}
.pl-pile{fill:#5a4536;stroke:#8a5a3c;stroke-width:.8} .pl-field{fill:#2a2a20;stroke:#4a4a30}
.pl-lamp{fill:var(--ash)} .pl-lamp.on{fill:var(--clay);filter:drop-shadow(0 0 4px var(--clay))} .pl-lamp.bad{fill:var(--bad)}
.pl-hit{fill:transparent;cursor:pointer}
.pl-hit:hover + .pl-area,.pl-hit:hover{outline:none}
.pl-leg{display:flex;gap:14px;flex-wrap:wrap;padding:6px 6px 2px;font-size:.76rem;color:var(--smoke)}
.pl-leg i{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:5px;vertical-align:middle}
.timeline{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:8px 6px 2px;font-size:.84rem}
.timeline input[type=range]{flex:1;min-width:160px;accent-color:var(--clay)}
.timeline .tl-lbl{font-family:var(--fd);font-size:1.05rem;color:var(--bone);min-width:150px}
@keyframes spin{to{transform:rotate(360deg)}} .spin{animation:spin 1.4s linear infinite;transform-box:fill-box;transform-origin:center}
@keyframes blink{50%{opacity:.3}} .blink{animation:blink 1.1s steps(2,start) infinite}
@keyframes dash{to{stroke-dashoffset:-24}} .flowing{stroke-dasharray:6 6;animation:dash 1.1s linear infinite}

/* ---------- linha da calibradora (vista calibradora) ---------- */
.linebox{background:var(--coal);border:1px solid var(--hair);border-radius:var(--r);padding:10px}
.linebox svg{width:100%;height:auto;display:block;font-family:var(--ff)}
.ln-lbl{fill:var(--smoke);font-size:11px} .ln-lbl.b{fill:var(--bone);font-weight:600;font-size:12px} .ln-num{fill:var(--bone);font-family:var(--fd);font-size:15px}
.ln-mach{fill:#2a2521;stroke:var(--sienna);stroke-width:1.2} .ln-conv{fill:#3a332d} .ln-cae{fill:#30271f;stroke:var(--clay);stroke-width:1.4}
.ln-cup{fill:#4a3b2f;stroke:var(--sand);stroke-width:.8} .ln-out{fill:#2a2521;stroke:var(--hair2)} .ln-out.on{fill:var(--sienna)}
.ln-bar{fill:var(--sienna)} .ln-bar.bg{fill:var(--stone)} .ln-mesa{fill:#231e1a;stroke:var(--hair2)} .ln-bal{fill:var(--ash)} .ln-bal.on{fill:var(--sienna)} .ln-bal.bad{fill:var(--bad)} .ln-bal.wt{fill:var(--clay)}
@keyframes cups{to{transform:translateX(26px)}} .ln-run{animation:cups .7s linear infinite}
.gauge{display:flex;gap:16px;align-items:center}
.gauge svg{width:150px;height:auto} .gauge .gtxt{fill:var(--bone);font-family:var(--fd);font-size:30px} .gauge .gsub{fill:var(--smoke);font-size:11px}
.gauge .garc{fill:none;stroke:var(--stone);stroke-width:12;stroke-linecap:round} .gauge .gband{fill:none;stroke:rgba(184,120,78,.35);stroke-width:12} .gauge .gval{fill:none;stroke:var(--clay);stroke-width:12;stroke-linecap:round}

/* ---------- posições dos armazéns ---------- */
.posgrid{display:grid;gap:2px;grid-template-columns:repeat(81,1fr)} .posgrid i{display:block;aspect-ratio:1;background:var(--stone);border-radius:1px}
.poswrap{overflow:auto} .poswrap svg{width:100%;height:auto;display:block}
.pos-cell{stroke:var(--black);stroke-width:.4} .pos-lbl{fill:var(--smoke);font-size:9px} .pos-zone{fill:none;stroke:rgba(239,233,226,.25);stroke-dasharray:3 2} .pos-ztxt{fill:var(--smoke);font-size:11px;font-weight:600;letter-spacing:.06em}

/* ---------- processos (motor de cenas) ---------- */
.proc{scroll-margin-top:70px}
.proc .pcode{font-family:ui-monospace,Menlo,Consolas,monospace;font-weight:700;color:#1a120c;background:var(--clay);padding:3px 10px;border-radius:7px;font-size:.95rem}
.phead{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:0 0 14px}
.phead .hc{background:var(--coal);border:1px solid var(--hair);border-radius:var(--r);padding:12px 14px}
.phead .hc b{display:block;color:var(--smoke);font-size:.7rem;text-transform:uppercase;letter-spacing:.08em;margin-bottom:6px}
.phead .hc ul{margin:0;padding-left:1.1em;font-size:.86rem}
.epi span{display:inline-block;background:var(--slate);border:1px solid var(--hair);border-radius:999px;padding:2px 10px;font-size:.8rem;margin:2px 4px 2px 0}
.player{background:#fbfbf9;border:1px solid var(--hair);border-radius:var(--r);padding:8px;margin:10px 0;color:#1b2330}
.ctl{display:flex;align-items:center;gap:8px;padding:4px 6px 8px;flex-wrap:wrap}
.ctl .btn{color:#1b2330;background:#fff;border-color:#c9d1da} .ctl .btn.primary{color:#fff;background:var(--umber);border-color:var(--umber)}
.ctl .ptitle{font-weight:700;color:#1b2330;margin-left:6px}
.ctl .pbar{flex:1;min-width:80px;height:6px;background:#e3e8ee;border-radius:3px;overflow:hidden;position:relative}
.ctl .pbar i{position:absolute;left:0;top:0;bottom:0;width:0;background:var(--sienna);border-radius:3px}
@keyframes pbar{from{width:0}to{width:100%}}
svg.scene{width:100%;height:auto;display:block;background:#fbfbf9;border-radius:8px;font-family:system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif}
.steps{list-style:none;padding:0;margin:12px 0 6px;display:grid;gap:7px}
.steps .step{display:grid;grid-template-columns:38px 1fr;gap:10px;align-items:start;background:var(--coal);border:1px solid var(--hair);border-radius:var(--r2);padding:10px 12px;cursor:pointer}
.steps .step:hover{border-color:var(--sienna)} .steps .step.cur{border-color:var(--clay);background:var(--slate)}
.steps .n{width:34px;height:34px;border-radius:50%;background:var(--umber);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700}
.steps .sb > b{display:block;font-size:.98rem;margin-bottom:2px} .steps .sd{font-size:.9rem;color:var(--bone2)} .steps .sd b{display:inline;color:var(--bone)}
.steps .sw{margin-top:6px;background:rgba(217,166,119,.12);border-left:3px solid var(--clay);padding:4px 10px;border-radius:0 6px 6px 0;font-weight:600;font-size:.86rem}
.g{transition:transform .9s ease,opacity .6s ease}
/* classes das cenas (fundo claro, cores fixas) */
.ground{fill:#8d99a6} .conv{fill:#4a5563} .conv2{fill:#6b7785} .convl{stroke:#c3cbd4;stroke-width:1.6;stroke-dasharray:6 8;animation:dash 1.2s linear infinite}
.mach{fill:#cfd8e3;stroke:#1b2330;stroke-width:1} .machl{fill:#e9eef4;stroke:#5b6778;stroke-width:1.3}
.fence{fill:none;stroke:#b3261e;stroke-width:2;stroke-dasharray:7 4} .barrier{stroke:#f2c200;stroke-width:3;stroke-dasharray:4 4}
.door{fill:#eef3f1;stroke:#2e9e63;stroke-width:1.5;stroke-dasharray:4 3} .rul{fill:#9aa6b2;stroke:#1b2330;stroke-width:.8} .roller{fill:#fff;stroke:#1b2330;stroke-width:.8}
.chain{fill:#7c8794;stroke:#1b2330;stroke-width:.8} .disp{fill:#1b2330} .dispg{fill:#1f6b45} .lbd{font:700 12px ui-monospace,Menlo,Consolas,monospace;fill:#8ff0b0}
.sillaf{fill:#b9c3cf;stroke:#1b2330;stroke-width:1} .palb{fill:#fff;stroke:#1d5fa8;stroke-width:1.6} .palv{stroke:#1d5fa8;stroke-width:.8;opacity:.45}
.prodf{fill:#c98a4b} .prodc{fill:#b86a2b} .prodb{fill:#6d4c2a} .badp{fill:#4b2e1a;stroke:#b3261e;stroke-width:2.5}
.tagf{fill:#f2c200;stroke:#1b2330;stroke-width:.8} .lbt{font-size:8px;font-weight:700;fill:#1b2330}
.boxf{fill:#d9b27c;stroke:#8a5a2b;stroke-width:1} .boxe{fill:#f1dfc0;stroke:#8a5a2b;stroke-width:1} .boxl{stroke:#8a5a2b;stroke-width:.8;fill:none}
.fk{fill:#f2c200;stroke:#1b2330;stroke-width:1} .fkc{fill:#fff6c2;stroke:#1b2330;stroke-width:1} .wheel{fill:#2b3440} .mast{fill:#5b6778} .fork{fill:#2b3440}
.skin{fill:#e8b89a;stroke:#1b2330;stroke-width:.8} .body{stroke:#1b2330;stroke-width:1} .vest{stroke:#9aa6b2;stroke-width:2.5;fill:none} .legs{fill:#2b3440}
.lb{font-size:12px;fill:#1b2330} .lbw{font-size:12px;font-weight:700;fill:#1b2330} .lbm{font-size:13px;font-weight:700;fill:#1b2330}
.lbs{font-size:11px;fill:#1b2330} .lbs2{font-size:9px;fill:#1b2330} .lbb{font-size:9px;font-weight:700;fill:#fff} .lbb2{font-size:7.5px;font-weight:700;fill:#fff} .lbt2{font-size:15px;font-weight:700;fill:#0b6e4f}
.arr{stroke:#b86a2b;stroke-width:2.5;fill:none} .hmib{fill:#2b3440} .hmis{fill:#dbe9ff;stroke:#1b2330;stroke-width:.8}
.btn-g{fill:#2e9e63} .btn-b{fill:#1d5fa8} .btn-o{fill:#e08a1e} .estop{fill:#d41f1f;stroke:#f2c200;stroke-width:3} .estopbig{fill:#d41f1f;stroke:#f2c200;stroke-width:8} .estopbase{fill:#f2c200;stroke:#1b2330;stroke-width:1}
.rearme{fill:#2e9e63;stroke:#1b2330;stroke-width:1.5} .scr{fill:#fff;stroke:#5b6778;stroke-width:1.2} .scrt{fill:#dbe4ee} .scrp{fill:#f1f3f6;stroke:#d9dee6} .scrsel{fill:#1d5fa8;opacity:.18} .btnp{fill:#1d5fa8} .btnp2{fill:#0b6e4f}
.lonaf{fill:none;stroke:#8a5a2b;stroke-width:7;stroke-linecap:round;opacity:.6} .stb{fill:#e9eef4;stroke:#5b6778;stroke-width:1.3} .lamp{fill:#9aa6b2;stroke:#1b2330;stroke-width:.6}
.st.on .stb{fill:#d8efe4;stroke:#0b6e4f} .st.on .lamp{fill:#2e9e63} .st.off .stb{fill:#eceff2;stroke:#9aa6b2;stroke-dasharray:4 3} .st.off .lamp{fill:#d41f1f}
.hl{filter:drop-shadow(0 0 5px #ffb703) drop-shadow(0 0 2px #ffb703)}
.spin .brush{animation:spin .9s linear infinite} [data-g="brushes"].spin{animation:none}
[data-g="cups"].run{animation:cupsrun .8s linear infinite} @keyframes cupsrun{to{transform:translateX(44px)}}
[data-g="bxs"].run{animation:boxrun 2s linear infinite} @keyframes boxrun{to{transform:translateX(60px)}}
.brushc{fill:#fff;stroke:#e08a1e;stroke-width:3} .brushs{stroke:#e08a1e;stroke-width:2} .hood{fill:none;stroke:#5b6778;stroke-width:2} .fan{fill:#fff;stroke:#1b2330;stroke-width:1} .fanb{stroke:#1b2330;stroke-width:2}
.panel{fill:#eef3f1;stroke:#5b6778;stroke-width:1.2} .lampw{fill:#fff;stroke:#1b2330;stroke-width:1} .lampr{fill:#e9c4c1;stroke:#b3261e;stroke-width:1} .lampr.blink{fill:#d41f1f} .lampg{fill:#cfe8da;stroke:#0b6e4f;stroke-width:1} .lampg.on{fill:#2e9e63}
.selc{fill:#2b3440} .selk{fill:#fff} .roll{stroke:#9aa6b2;stroke-width:1.5} .lane{stroke:#0b6e4f;stroke-width:2;fill:none} .cae{fill:#d8efe4;stroke:#0b6e4f;stroke-width:1.2}
.cup{fill:#fff;stroke:#1b2330;stroke-width:1} .em{fill:#e08a1e} .outb{fill:#fff;stroke:#5b6778;stroke-width:1} .mesaU{fill:none;stroke:#4a5563;stroke-width:14;stroke-linecap:round}
.cajas{fill:#f6d58a;stroke:#b86a2b;stroke-width:1} .ramp{stroke:#5b6778;stroke-width:4;stroke-linecap:round} .ramp2{stroke:#2f6fd1;stroke-width:4;fill:none;stroke-linecap:round}
.balb{fill:#fff;stroke:#1d5fa8;stroke-width:1.2} .plat{fill:#5b6778} .pedal{fill:#2b3440} .pallet{fill:#c9a66b;stroke:#8a5a2b;stroke-width:1} .palletl{stroke:#8a5a2b;stroke-width:1}
.aereo2{fill:#2f6fd1;opacity:.8} .incl{fill:#b9c3cf;stroke:#1b2330;stroke-width:1} .handp{fill:none;stroke:#e8b89a;stroke-width:10;stroke-linecap:round}
.sirenf{fill:#e08a1e;stroke:#1b2330;stroke-width:.8} .broomh{stroke:#8a5a2b;stroke-width:4;stroke-linecap:round} .broomb{fill:#e0b04a;stroke:#8a5a2b;stroke-width:1}
.co-box{fill:#1b2330;opacity:.92} .co-txt{fill:#fff;font-size:16px;font-weight:700}
[data-g="scr-body"] text{font-size:14px} [data-g="scr-body"] .lbw{font-size:15px} [data-g="scr-body"] .lbb{font-size:12px}
[data-g="siva-body"] text{font-size:12.5px} [data-g="siva-body"] .lbw{font-size:13.5px}

/* ---------- desenhos da instalação (papel claro, classes do manual de desenhos) ---------- */
.paper{background:#fbfbf9;border:1px solid var(--hair);border-radius:var(--r);padding:8px;color:#1b2330}
.paper .legend{color:#5b6778}
svg.plansvg{width:100%;height:auto;display:block;font-family:system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif}
.paper .tm{font-size:11px;fill:#1b2330} .paper .tn{font-size:13px;font-weight:700;fill:#1b2330} .paper .tpp{font-size:9.5px;fill:#1b2330} .paper .tzone{font-size:13px;font-weight:700;fill:#1b2330} .paper .tdim{font-size:9px;fill:#5b6778} .paper .tbub{font-size:9px;font-weight:700;fill:#fff} .paper .tbubr{font-size:9px;font-weight:700;fill:#fff} .paper .tsm{font-size:9px;fill:#5b6778}
.paper .axis{stroke:#5b6778;stroke-width:.8;stroke-dasharray:8 4} .paper .mach{fill:#cfd8e3;stroke:#1b2330;stroke-width:1} .paper .cae{fill:#d8efe4;stroke:#0b6e4f;stroke-width:1.2}
.paper .rul{fill:#9aa6b2;stroke:#1b2330;stroke-width:.8} .paper .chain{fill:#7c8794;stroke:#1b2330;stroke-width:.8} .paper .silla{fill:#b9c3cf;stroke:#1b2330;stroke-width:1} .paper .pal{fill:#fff;stroke:#1d5fa8;stroke-width:1.4}
.paper .belt{fill:#4a5563;stroke:none} .paper .belt2{fill:#6b7785} .paper .cajas{fill:#b86a2b;opacity:.85} .paper .curve{fill:none;stroke:#4a5563;stroke-width:12} .paper .curve2{fill:none;stroke:#9aa6b2;stroke-width:12} .paper .curve3{fill:none;stroke:#9aa6b2;stroke-width:14}
.paper .em{fill:#e08a1e} .paper .bal{fill:#fff;stroke:#1d5fa8;stroke-width:1} .paper .bin{fill:#fff;stroke:#1d5fa8;stroke-width:1.4;stroke-dasharray:3 2} .paper .box2{fill:#fff;stroke:#b86a2b;stroke-width:1}
.paper .brush{stroke:#e08a1e;stroke-width:2} .paper .brushc{fill:none;stroke:#e08a1e;stroke-width:2} .paper .lane{stroke:#0b6e4f;stroke-width:1.4;fill:none} .paper .op{fill:#1d5fa8}
.paper .bub{fill:#0b6e4f} .paper .bubr{fill:#b3261e} .paper .aereo{fill:none;stroke:#2f6fd1;stroke-width:3;stroke-dasharray:8 6} .paper .aereo2{fill:#2f6fd1;opacity:.8} .paper .altillo{stroke:#2f6fd1;stroke-width:1;stroke-dasharray:4 3}
.paper .arrow{stroke:#b86a2b;stroke-width:3;fill:none;marker-end:url(#fa)} .paper .arrow2{stroke:#b86a2b;stroke-width:3;fill:none} .paper .arrw{stroke:#b86a2b;stroke-width:2;fill:none}
.paper .ground{stroke:#1b2330;stroke-width:2;fill:#8d99a6} .paper .leg{stroke:#5b6778;stroke-width:1} .paper .leg2{fill:#9aa6b2} .paper .fence{stroke:#b3261e;stroke-width:2;fill:none} .paper .post{fill:#b3261e}
.paper .door{fill:none;stroke:#2e9e63;stroke-width:1.2;stroke-dasharray:3 2} .paper .barrier{fill:#f2c200} .paper .encl{fill:#fff;stroke:#1b2330;stroke-width:1.4} .paper .railzone{fill:none;stroke:#d9dee6;stroke-dasharray:3 3}
.paper .dim{stroke:#5b6778;stroke-width:.8} .paper .dimg{opacity:.9} .paper .flow{stroke:#b86a2b;stroke-width:2;fill:none} .paper .flowc{stroke:#1d5fa8;stroke-width:1.5;fill:none;stroke-dasharray:5 4} .paper .flowp{stroke:#b86a2b;stroke-width:2.5;fill:none;stroke-dasharray:6 5;animation:dash 1.2s linear infinite}
.paper .bld{fill:#f4f6f8;stroke:#1b2330;stroke-width:1.5} .paper .zone{stroke:#5b6778;stroke-width:1} .paper .gate{fill:#2e9e63} .paper .lineaxis{stroke:#0b6e4f;stroke-width:1;stroke-dasharray:6 4}
.paper .hit{fill:transparent;cursor:pointer} .paper .node{fill:#fff;stroke:#1b2330;stroke-width:1.2} .paper .node2{fill:#eef3f1;stroke:#5b6778} .paper .ecat{stroke:#1d5fa8;stroke-width:2;stroke-dasharray:2 3;fill:none} .paper .plc1{fill:#dbe9ff;stroke:#1b2330}
.paper .hmi{fill:#2b3440} .paper .hmib{fill:#2b3440} .paper .hmibez{fill:#1b2330} .paper .hmibtn{fill:#2e9e63} .paper .hmiscr{fill:#dbe9ff} .paper .estop{fill:#d41f1f;stroke:#f2c200;stroke-width:2} .paper .rearme{fill:#2e9e63;stroke:#1b2330} .paper .sel{fill:#2b3440} .paper .sym{fill:none;stroke:#1b2330;stroke-width:1.3}
.paper .lona{fill:none;stroke:#8a5a2b;stroke-width:5;stroke-linecap:round} .paper .carro{fill:#b9c3cf;stroke:#1b2330} .paper .brazo{fill:#9aa6b2;stroke:#1b2330} .paper .w1{stroke:#1b2330;stroke-width:1.3;fill:none} .paper .prod{fill:#b86a2b}

/* ---------- modal ---------- */
.modal{position:fixed;inset:0;background:rgba(0,0,0,.6);display:none;align-items:flex-start;justify-content:center;padding:40px 16px;z-index:60;overflow:auto}
.modal.show{display:flex} .modal .box{background:var(--coal);border:1px solid var(--hair2);border-radius:var(--r);max-width:900px;width:100%;padding:18px 22px;position:relative}
.modal .x{position:absolute;top:10px;right:12px}
.modal .box.wide{max-width:1200px}
.docframe{width:100%;height:78vh;border:0;background:#fff;border-radius:var(--r2)}

/* ---------- responsivo ---------- */
@media (max-width:1300px){ .g6{grid-template-columns:repeat(3,minmax(0,1fr))} .g5{grid-template-columns:repeat(3,minmax(0,1fr))} .g4{grid-template-columns:repeat(2,minmax(0,1fr))} }
@media (max-width:1000px){ .app{grid-template-columns:minmax(0,1fr)} nav.side{position:fixed;left:0;top:0;width:min(84vw,300px);transform:translateX(-105%);transition:transform .25s;z-index:50;box-shadow:0 10px 40px rgba(0,0,0,.5)} nav.side.open{transform:none} .menu-btn{display:inline-flex} .g3{grid-template-columns:repeat(2,minmax(0,1fr))} .phead{grid-template-columns:repeat(2,minmax(0,1fr))} main{padding:14px 14px 50px} header.top{padding:0 12px} header.top .clock{display:none} }
@media (max-width:640px){ .g2,.g3,.g4,.g5,.g6{grid-template-columns:minmax(0,1fr)} .phead{grid-template-columns:minmax(0,1fr)} .kpi .v{font-size:1.7rem} h1{font-size:1.5rem} .ph .tools{margin-left:0} }
@media print{ nav.side,header.top,.plant .ctl,.btn{display:none!important} .app{display:block} body{background:#fff;color:#000} .card,.kpi{break-inside:avoid;border-color:#999} }
/* legendas dos desenhos reutilizados */
.paper .leg{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:.8rem;color:#5b6778;padding:8px 6px 2px}
.paper .leg i{display:inline-block;width:12px;height:12px;border-radius:2px;margin-right:5px;vertical-align:middle}
.paper .legend{font-size:.82rem;color:#5b6778;padding:6px 6px 2px}
