/* Estrutura comum das três direções. Só usa tokens; cores, fontes, raios e movimento vêm de cada direção. */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--fundo);color:var(--texto);font:400 15px/1.5 var(--f-texto);overflow-x:hidden}
h1,h2,h3{font-family:var(--f-titulo);margin:0;line-height:1.15;font-weight:var(--peso-titulo,650)}
h1{font-size:clamp(22px,2.4vw,30px);letter-spacing:var(--tracking-titulo,-.01em)}
h2{font-size:16px}
p{margin:0}
a{color:inherit}
.num{font-variant-numeric:tabular-nums}
.trunc{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.ico{width:18px;height:18px;flex:none}
.ico.grande{width:34px;height:34px}
:focus-visible{outline:2.5px solid var(--foco);outline-offset:2px;border-radius:var(--r-p)}
.pular{position:absolute;left:-999px;top:8px;background:var(--superficie);padding:8px 12px;z-index:99}
.pular:focus{left:8px}

/* casca */
.casca{display:grid;grid-template-columns:var(--lateral-larg,232px) 1fr;min-height:100vh}
.lateral{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;gap:24px;padding:20px 14px;background:var(--lateral);color:var(--lateral-texto);border-right:1px solid var(--borda)}
.logo{display:flex;align-items:center;gap:10px;text-decoration:none;padding:4px 8px}
.logo-txt{display:flex;flex-direction:column;font:700 15px/1.1 var(--f-titulo)}
.logo-txt small{font:500 11px/1.4 var(--f-mono);letter-spacing:.12em;text-transform:uppercase;opacity:.75}
.nav{display:flex;flex-direction:column;gap:2px}
.nav a{display:flex;align-items:center;gap:12px;min-height:40px;padding:0 12px;border-radius:var(--r-m);text-decoration:none;font-weight:550;color:var(--lateral-texto-2);transition:background var(--t-rapido),color var(--t-rapido)}
.nav a:hover{background:var(--lateral-hover);color:var(--lateral-texto)}
.nav a[aria-current=page]{background:var(--lateral-ativo);color:var(--lateral-ativo-texto)}
.lateral-pe{margin-top:auto;padding:0 8px}
.dir-link{font-size:12.5px;color:var(--lateral-texto-2)}
main{padding:28px clamp(16px,3vw,40px) 110px;min-width:0;outline:none}
main.entra{animation:entra var(--t-entra) var(--ease) both}
@keyframes entra{from{opacity:0;transform:translateY(8px)}}

/* topo de tela */
.tela-topo{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:22px}
.tela-topo>div:first-child{min-width:0;max-width:100%}
.sobre{font:500 12px/1.4 var(--f-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--texto-2);margin-bottom:6px}
.acoes{display:flex;gap:8px;flex-wrap:wrap}
.sub{color:var(--texto-2);font-size:13px;margin-top:2px}

/* botões */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:0 16px;border-radius:var(--r-m);border:1px solid var(--borda-forte);background:var(--superficie);color:var(--texto);font:600 14px var(--f-texto);cursor:pointer;text-decoration:none;transition:background var(--t-rapido),transform var(--t-rapido),border-color var(--t-rapido)}
.btn:hover{background:var(--superficie-2)}
.btn:active{transform:scale(.98)}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn.primario{background:var(--acento);color:var(--acento-texto);border-color:var(--acento)}
.btn.primario:hover{background:var(--acento-hover)}
.btn.carregando{pointer-events:none;opacity:.7}
.btn-ico{display:inline-grid;place-items:center;width:40px;height:40px;border-radius:var(--r-m);border:1px solid var(--borda-forte);background:var(--superficie);color:var(--texto);cursor:pointer;transition:background var(--t-rapido),transform var(--t-rapido)}
.btn-ico:hover{background:var(--superficie-2)}
.btn-ico.mini{width:36px;height:36px}
.btn-ico:disabled{opacity:.35;cursor:not-allowed}
.link{display:inline-flex;align-items:center;gap:6px;font-weight:600;color:var(--acento-link);text-decoration:none;margin-top:14px}
.etiqueta{display:inline-block;font:500 11.5px/1 var(--f-mono);padding:5px 7px;border-radius:var(--r-p);background:var(--superficie-2);color:var(--texto-2);white-space:nowrap}

/* cartões */
.cartao{background:var(--superficie);border:1px solid var(--borda);border-radius:var(--r-g);padding:20px;box-shadow:var(--sombra);min-width:0}
.cartao>h2{display:flex;align-items:center;gap:8px}
.cont{font:500 12px var(--f-mono);color:var(--texto-2);background:var(--superficie-2);border-radius:var(--r-p);padding:2px 7px}
.grade-2{display:grid;grid-template-columns:1.4fr 1fr;gap:16px;margin-top:16px}

/* painel */
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.kpi{background:var(--superficie);border:1px solid var(--borda);border-radius:var(--r-g);padding:16px 18px;box-shadow:var(--sombra)}
.kpi-rot{font-size:13px;color:var(--texto-2)}
.kpi-val{font:700 30px/1.2 var(--f-titulo);margin:6px 0 2px}
.kpi-sub{font-size:12.5px;color:var(--texto-2)}
.kpi.bom .kpi-sub{color:var(--ok)}
.kpi.alerta .kpi-sub{color:var(--defeito)}
.grafico-wrap{position:relative;margin-top:12px}
.grafico{width:100%;height:auto;max-height:260px;overflow:visible}
.grafico text{font:500 10px var(--f-mono);fill:var(--texto-2)}
.grafico rect{fill:var(--grafico);transition:fill var(--t-rapido),opacity var(--t-rapido);transform-origin:bottom;transform-box:fill-box;animation:cresce var(--t-entra) var(--ease) both;animation-delay:calc(var(--i)*50ms)}
.grafico rect.atual{fill:var(--acento)}
.grafico .barra{cursor:pointer;outline:none}
.grafico .barra:hover rect,.grafico .barra:focus rect{fill:var(--acento-hover)}
@keyframes cresce{from{transform:scaleY(0)}}
.dica{position:absolute;width:180px;padding:8px 10px;border-radius:var(--r-m);background:var(--texto);color:var(--fundo);font-size:12.5px;line-height:1.35;pointer-events:none;opacity:0;transform:translateY(4px);transition:opacity var(--t-rapido),transform var(--t-rapido)}
.dica.on{opacity:1;transform:none}
.lista-prox{list-style:none;padding:0;margin:12px 0 0;display:flex;flex-direction:column}
.lista-prox li{display:grid;grid-template-columns:48px 1fr auto;gap:10px;align-items:center;padding:10px 0;border-bottom:1px solid var(--borda)}
.lista-prox .data{font:600 13px var(--f-mono);color:var(--acento-link)}

/* quadro */
.kanban{display:grid;grid-template-columns:repeat(6,minmax(200px,1fr));gap:12px;overflow-x:auto;padding-bottom:8px}
.coluna{background:var(--coluna);border-radius:var(--r-g);padding:12px;min-height:60vh;transition:background var(--t-rapido),outline-color var(--t-rapido);outline:2px dashed transparent;outline-offset:-2px}
.coluna.alvo{outline-color:var(--acento);background:var(--superficie-2)}
.coluna h2{display:flex;justify-content:space-between;align-items:center;font-size:13.5px;margin-bottom:10px;padding:2px 4px}
.coluna-corpo{display:flex;flex-direction:column;gap:8px}
.card{background:var(--superficie);border:1px solid var(--borda);border-radius:var(--r-m);padding:12px;cursor:grab;box-shadow:var(--sombra);transition:transform var(--t-rapido),box-shadow var(--t-rapido)}
.card:hover{transform:translateY(-1px);box-shadow:var(--sombra-alta)}
.card.arrastando{opacity:.5}
.card h3{font-size:14px;margin:4px 0 8px}
.card-tipo{font:500 11px var(--f-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--acento-link)}
.card-meta{display:flex;justify-content:space-between;font-size:12.5px;color:var(--texto-2)}
.card-mover{display:flex;justify-content:flex-end;gap:6px;margin-top:8px}
.vazio-col{font-size:13px;color:var(--texto-2);text-align:center;padding:24px 8px;border:1px dashed var(--borda-forte);border-radius:var(--r-m)}

/* vistoria */
.prumo{display:flex;align-items:center;gap:14px;margin-bottom:16px}
.prumo-tubo{position:relative;width:200px;height:18px;border-radius:999px;background:var(--superficie-2);border:1px solid var(--borda-forte);overflow:hidden}
.prumo-tubo::before,.prumo-tubo::after{content:"";position:absolute;top:2px;bottom:2px;width:1px;background:var(--borda-forte);left:46%}
.prumo-tubo::after{left:54%}
.prumo-bolha{position:absolute;top:2px;bottom:2px;width:30px;border-radius:999px;background:var(--bolha);left:calc(var(--p)*(100% - 34px) + 2px);transition:left var(--t-entra) var(--ease)}
.vistoria-grade{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);gap:16px;align-items:start}
.planta{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-flow:dense;gap:var(--planta-gap,6px);margin-top:14px;padding:var(--planta-gap,6px);background:var(--planta-fundo);border-radius:var(--r-m)}
.comodo{grid-column:span min(var(--area),2);grid-row:span calc(1 + (var(--area) > 2));min-height:84px;display:flex;flex-direction:column;align-items:flex-start;justify-content:space-between;gap:6px;padding:10px;text-align:left;border:1.5px solid var(--comodo-borda);border-radius:var(--r-p);background:var(--comodo);color:var(--texto);cursor:pointer;font:inherit;min-width:0;transition:background var(--t-rapido),border-color var(--t-rapido),transform var(--t-rapido)}
.comodo:hover{background:var(--superficie-2)}
.comodo.ativo{border-color:var(--acento);background:var(--comodo-ativo);box-shadow:inset 0 0 0 1px var(--acento)}
.comodo:not(.feito){border-style:dashed}
.comodo-nome{font-weight:650;font-size:13.5px;max-width:100%}
.comodo-n{font-size:12px;color:var(--texto-2)}
.marcas{display:flex;flex-wrap:wrap;gap:3px}
.marca{display:block;width:14px;height:6px;background:var(--marca);border-radius:1px;transform:rotate(var(--marca-rot,-8deg))}
.marca:nth-child(even){transform:rotate(calc(var(--marca-rot,-8deg) * -1))}
.itens{list-style:none;padding:0;margin:12px 0 0;display:flex;flex-direction:column;gap:8px}
.item{display:grid;grid-template-columns:64px 1fr auto;gap:12px;align-items:center;padding:8px;border-radius:var(--r-m);border:1px solid var(--borda);animation:entra var(--t-entra) var(--ease) both}
.foto-ph{position:relative;width:64px;height:52px;border-radius:var(--r-p);background:var(--foto);display:grid;place-items:center;color:var(--texto-2)}
.foto-ph span{position:absolute;left:4px;bottom:3px;font:600 10.5px var(--f-mono);color:var(--texto)}
.item-el{font:500 11.5px var(--f-mono);letter-spacing:.05em;text-transform:uppercase;color:var(--texto-2)}
.item-desc{font-size:14px}
.sit{display:grid;place-items:center;width:30px;height:30px;border-radius:var(--r-p);font:700 13px var(--f-mono)}
.sit-X{background:var(--defeito-fundo);color:var(--defeito)}
.sit-O{background:var(--ok-fundo);color:var(--ok)}
.vazio{display:flex;gap:14px;align-items:center;padding:18px;border:1px dashed var(--borda-forte);border-radius:var(--r-m);color:var(--texto-2);font-size:13.5px}
.lancar{margin-top:16px;padding-top:16px;border-top:1px solid var(--borda)}
.lancar-topo{display:flex;gap:8px;margin-bottom:10px}
.lancar-topo .btn{flex:1}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.chip{min-height:36px;padding:0 12px;border-radius:var(--r-chip);border:1px solid var(--borda-forte);background:var(--superficie);color:var(--texto);font:500 13.5px var(--f-texto);cursor:pointer;transition:background var(--t-rapido),border-color var(--t-rapido)}
.chip:hover{border-color:var(--acento);background:var(--superficie-2)}

/* laudo */
.aviso{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border-radius:var(--r-m);background:var(--ok-fundo);color:var(--texto);margin-bottom:16px;font-size:14px}
.aviso .ico{color:var(--ok);margin-top:2px}
.folha{overflow-wrap:anywhere;max-width:820px;margin:0 auto;background:#fff;color:#1b1b1b;padding:48px 56px;border-radius:var(--r-p);box-shadow:var(--sombra-alta);font:400 12.5px/1.5 var(--f-laudo,var(--f-texto))}
.folha-cab{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;border-bottom:2px solid #1b1b1b;padding-bottom:8px;font-size:11px}
.marca-emp{font-weight:800;letter-spacing:.08em}
.folha-tit{font-size:24px;margin-top:28px;text-transform:uppercase;letter-spacing:.02em}
.folha-sub{color:#555;margin-bottom:18px}
.folha-dados{display:grid;grid-template-columns:1fr 1fr;gap:8px 24px;margin:0 0 18px}
.folha-dados dt{font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:#666}
.folha-dados dd{margin:0;font-weight:600}
.resultado{padding:10px 12px;font-weight:700;border-left:4px solid}
.resultado.reprovado{background:#fbeceb;border-color:#a3261b;color:#7d1d14}
.resultado.aprovado{background:#e8f4ea;border-color:#22703a;color:#1a5a2e}
.folha h3{font-size:14px;margin:22px 0 8px;text-transform:uppercase;letter-spacing:.04em}
.tab{width:100%;border-collapse:collapse}
.tab th,.tab td{border:1px solid #cfcfcf;padding:5px 7px;text-align:left;vertical-align:top}
.tab thead th{white-space:nowrap;background:#f0f0f0;font-size:11px;text-transform:uppercase;letter-spacing:.04em}
.tab .c{text-align:center;font-weight:700;width:34px}
.tab tbody th{background:#fafafa;font-weight:650}
.leg{font-size:11px;color:#555;margin-bottom:6px}
.assin{margin-top:36px;text-align:center}
.cartao .tab th,.cartao .tab td{border-color:var(--borda)}
.cartao .tab thead th{background:var(--superficie-2);color:var(--texto-2)}
.tab-wrap{overflow-x:auto;padding:0}
.tab.cat td,.tab.cat th{padding:10px 12px;border-left:0;border-right:0}
.tab.cat .campo{font-style:italic;color:var(--texto-2);white-space:nowrap}
.busca{display:flex;align-items:center;gap:10px;max-width:460px;min-height:44px;padding:0 14px;margin-bottom:14px;border:1px solid var(--borda-forte);border-radius:var(--r-m);background:var(--superficie)}
.busca:focus-within{outline:2.5px solid var(--foco);outline-offset:2px}
.busca input{flex:1;border:0;background:none;color:var(--texto);font:inherit;outline:none;min-width:0}

/* flutuantes, tour, modal, toast */
.flutuantes{position:fixed;right:20px;bottom:20px;display:flex;flex-direction:column;gap:10px;z-index:40}
.flut{width:48px;height:48px;border-radius:var(--r-flut);box-shadow:var(--sombra-alta)}
.flut .ico{width:22px;height:22px}
.flut.destaque{background:var(--acento);color:var(--acento-texto);border-color:var(--acento)}
.flut.destaque:hover{background:var(--acento-hover)}
.tour-veu{position:fixed;inset:0;z-index:60}
.tour-foco{position:fixed;z-index:61;border-radius:var(--r-g);box-shadow:0 0 0 9999px var(--veu);outline:2px solid var(--acento);pointer-events:none;transition:all var(--t-entra) var(--ease)}
.tour-balao{position:fixed;z-index:62;background:var(--superficie);color:var(--texto);border:1px solid var(--borda);border-radius:var(--r-g);padding:18px;box-shadow:var(--sombra-alta);transition:top var(--t-entra) var(--ease),left var(--t-entra) var(--ease)}
.tour-n{font:500 11.5px var(--f-mono);color:var(--acento-link);margin-bottom:4px}
.tour-balao h2{margin-bottom:6px;padding-right:36px}
.tour-x{color:var(--texto-2);font-size:14px}
.tour-acoes{display:flex;justify-content:flex-end;gap:8px;margin-top:14px}
.tour-sair{position:absolute;top:10px;right:10px;border:0}
.modal-veu{position:fixed;inset:0;background:var(--veu);z-index:70;animation:fade var(--t-entra) both}
.modal{position:fixed;z-index:71;left:50%;top:50%;transform:translate(-50%,-50%);width:min(520px,calc(100vw - 32px));max-height:calc(100vh - 32px);overflow:auto;background:var(--superficie);border:1px solid var(--borda);border-radius:var(--r-g);padding:20px;box-shadow:var(--sombra-alta);display:flex;flex-direction:column;gap:12px;animation:sobe var(--t-entra) var(--ease) both}
.modal header{display:flex;justify-content:space-between;align-items:center}
.modal h2{display:flex;gap:10px;align-items:center;font-size:18px}
.modal h2 .ico{color:var(--acento-link)}
.modal footer{display:flex;justify-content:flex-end;gap:8px}
@keyframes fade{from{opacity:0}}
@keyframes sobe{from{opacity:0;transform:translate(-50%,-46%)}}
.tipos{display:flex;gap:6px;border:0;padding:0;margin:0;flex-wrap:wrap}
.tipos input{position:absolute;opacity:0}
.tipos span{display:inline-flex;align-items:center;min-height:36px;padding:0 12px;border:1px solid var(--borda-forte);border-radius:var(--r-chip);cursor:pointer;font-size:13.5px;font-weight:550}
.tipos input:checked+span{background:var(--acento);color:var(--acento-texto);border-color:var(--acento)}
.tipos input:focus-visible+span{outline:2.5px solid var(--foco);outline-offset:2px}
.campo-f{display:flex;flex-direction:column;gap:6px;font-size:13.5px;font-weight:600}
.campo-f textarea,.campo-f input{font:400 15px var(--f-texto);color:var(--texto);background:var(--fundo);border:1px solid var(--borda-forte);border-radius:var(--r-m);padding:10px 12px;resize:vertical}
.campo-f input{min-height:42px}
.erro{color:var(--defeito);font-size:13.5px}
.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);z-index:80;display:flex;gap:8px;align-items:center;background:var(--texto);color:var(--fundo);padding:12px 16px;border-radius:var(--r-m);box-shadow:var(--sombra-alta);font-size:14px;font-weight:550;animation:toast var(--t-entra) var(--ease) both;max-width:calc(100vw - 32px)}
.toast.sai{opacity:0;transform:translate(-50%,8px);transition:all var(--t-sai) ease-in}
@keyframes toast{from{opacity:0;transform:translate(-50%,10px)}}

/* responsivo */
@media (max-width:1180px){.kpis{grid-template-columns:repeat(2,1fr)}}
@media (max-width:1024px){.grade-2,.vistoria-grade{grid-template-columns:1fr}}
@media (max-width:760px){
  .casca{grid-template-columns:1fr}
  .lateral{position:fixed;top:auto;bottom:0;left:0;right:0;height:auto;flex-direction:row;padding:6px;gap:0;z-index:50;border-right:0;border-top:1px solid var(--borda)}
  .logo,.lateral-pe{display:none}
  .nav{flex-direction:row;flex:1;justify-content:space-around}
  .nav a{flex-direction:column;gap:2px;min-height:52px;padding:6px 4px;font-size:11px;flex:1;justify-content:center}
  main{padding:20px 16px 150px}
  .flutuantes{bottom:84px;right:14px}
  .kanban{grid-template-columns:repeat(6,82vw);scroll-snap-type:x mandatory}
  .coluna{scroll-snap-align:start;min-height:auto}
  .folha{padding:24px 18px}
  .folha-dados{grid-template-columns:1fr}
  .prumo-tubo{width:120px}
  .planta{grid-template-columns:repeat(2,1fr)}
  .comodo{grid-column:span 1;grid-row:span 1}
  .kpi-val{font-size:24px}
}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:1ms!important;animation-delay:0ms!important;transition-duration:1ms!important}}
@media print{
  .lateral,.flutuantes,.nao-imprime,.toast{display:none!important}
  .casca{display:block}main{padding:0}body{background:#fff}
  .folha{box-shadow:none;padding:0;max-width:none}
}
.logo-sinal{width:34px;height:32px;flex:none}
.lg-a{fill:var(--logo-a)}.lg-b{fill:var(--logo-b)}
