/* ============ PathView — UI laboratorial ============ */
:root{
  --cor-primaria:#0F172A; --cor-secundaria:#2563EB; --cor-acento:#16A34A;
  --bg:#f5f7fb; --surface:#ffffff; --linha:#e7ebf2; --linha-forte:#d8deea;
  --txt:#1b2436; --txt-suave:#64708a; --txt-dim:#94a0b8;
  --raio:14px; --raio-sm:9px; --sombra:0 1px 2px rgba(16,24,40,.04),0 6px 20px rgba(16,24,40,.06);
  --sombra-sm:0 1px 2px rgba(16,24,40,.06);
  --warn:#d97706; --info:#2563eb; --ok:#16a34a; --done:#0891b2; --erro:#dc2626;
}
*{box-sizing:border-box}
html,body{margin:0}
body{
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Inter,system-ui,sans-serif;
  color:var(--txt); background:var(--bg); font-size:14.5px; line-height:1.5;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
h1,h2,h3{margin:0;font-weight:650;letter-spacing:-.01em}

/* ---------- Shell ---------- */
.app{display:grid;grid-template-columns:246px 1fr;min-height:100vh}
.sidebar{
  background:var(--cor-primaria);color:#cdd6e8;display:flex;flex-direction:column;
  padding:20px 14px;position:sticky;top:0;height:100vh;
}
.marca{display:flex;align-items:center;gap:10px;padding:6px 8px 20px;min-height:40px}
.marca-icone{color:#fff;font-size:20px}
.marca-nome{color:#fff;font-weight:700;font-size:17px;letter-spacing:-.02em}
.marca-logo{max-height:34px;max-width:170px;filter:brightness(0) invert(1)}
.nav{display:flex;flex-direction:column;gap:2px;margin-top:6px}
.nav-item{display:flex;align-items:center;gap:11px;padding:10px 12px;border-radius:10px;
  color:#aab6cf;font-weight:500;transition:.15s}
.nav-item .ni-ico{width:20px;text-align:center;opacity:.9;font-size:15px}
.nav-item:hover{background:rgba(255,255,255,.06);color:#fff}
.nav-item.ativo{background:var(--cor-secundaria);color:#fff;box-shadow:0 4px 14px rgba(37,99,235,.35)}
.nav-sep{font-size:11px;text-transform:uppercase;letter-spacing:.09em;color:#5f6d8a;
  padding:16px 12px 6px}
.sidebar-rodape{margin-top:auto;padding:12px 10px 2px;border-top:1px solid rgba(255,255,255,.08)}
.powered{font-size:12px;color:#7d89a5}.powered strong{color:#c7d1e6}
.plataforma-marca{display:flex;align-items:center;gap:8px}
.plataforma-logo{max-height:22px;max-width:120px;filter:brightness(0) invert(1);opacity:.9}
.plataforma-nome{font-size:13px;font-weight:700;color:#c7d1e6;letter-spacing:-.01em}
.marca-svg{vertical-align:middle;flex:none}
.plataforma-marca-def{display:inline-flex;align-items:center;gap:7px;color:#c7d1e6}
.suporte-btn{margin-left:auto;width:22px;height:22px;border-radius:50%;border:1px solid rgba(255,255,255,.2);
  background:rgba(255,255,255,.06);color:#c7d1e6;font-size:12px;font-weight:700;cursor:pointer;display:grid;place-items:center;flex:none}
.suporte-btn:hover{background:var(--cor-secundaria);border-color:var(--cor-secundaria);color:#fff}
.app.sb-col .plataforma-nome,.app.sb-col .plataforma-logo,.app.sb-col .plataforma-marca-def{display:none}
.lm-logo-def{display:inline-flex;align-items:center;gap:8px}
.app.sb-col .plataforma-marca{justify-content:center}.app.sb-col .suporte-btn{margin:0}
.suporte-modal{position:fixed;inset:0;background:rgba(11,18,32,.6);backdrop-filter:blur(3px);display:none;place-items:center;z-index:80;padding:20px}
.suporte-modal.aberto{display:grid;animation:supFade .16s ease}
@keyframes supFade{from{opacity:0}to{opacity:1}}
.suporte-cartao{position:relative;background:var(--surface);border-radius:18px;overflow:hidden;
  box-shadow:0 30px 70px rgba(0,0,0,.35);max-width:380px;width:100%}
.suporte-x{position:absolute;top:12px;right:12px;width:28px;height:28px;border:none;border-radius:50%;
  background:rgba(255,255,255,.15);color:#fff;font-size:14px;cursor:pointer;display:grid;place-items:center;z-index:2}
.suporte-x:hover{background:rgba(255,255,255,.28)}
/* Modal de confirmação reutilizável (window.pvConfirm) */
.pv-modal{position:fixed;inset:0;background:rgba(11,18,32,.6);backdrop-filter:blur(3px);display:none;place-items:center;z-index:120;padding:20px}
.pv-modal.aberto{display:grid;animation:supFade .16s ease}
.pv-modal-cartao{background:var(--surface);border-radius:18px;max-width:440px;width:100%;
  padding:28px 26px 22px;box-shadow:0 30px 70px rgba(11,18,32,.4);text-align:center;
  animation:pvPop .18s cubic-bezier(.2,.9,.3,1.25)}
@keyframes pvPop{from{transform:translateY(10px) scale(.97);opacity:0}to{transform:none;opacity:1}}
.pv-modal-ico{width:58px;height:58px;margin:0 auto 15px;border-radius:50%;display:grid;place-items:center;
  font-size:27px;background:rgba(220,38,38,.11)}
.pv-modal-ico.pv-ico-ok{background:rgba(37,99,235,.11)}
.pv-modal-tit{margin:0 0 9px;font-size:19px;font-weight:750;color:var(--cor-primaria);letter-spacing:-.01em}
.pv-modal-txt{margin:0 0 22px;color:var(--txt-suave);font-size:14px;line-height:1.55}
.pv-modal-txt b{color:var(--cor-primaria)}
.pv-modal-acoes{display:flex;gap:10px;justify-content:center}
.pv-modal-acoes .btn{min-width:130px}
/* Modal de motivo da remoção de fragmento */
.frag-motivos{display:flex;flex-direction:column;gap:10px;margin:4px 0 20px;text-align:left}
.btn-motivo{display:block;width:100%;padding:12px 14px;border:1px solid var(--linha-forte);border-radius:12px;
  background:var(--surface);cursor:pointer;transition:.12s}
.btn-motivo:hover{border-color:var(--cor-secundaria);background:#f6f9ff}
.btn-motivo b{display:block;font-size:14.5px;color:var(--txt);margin-bottom:3px}
.btn-motivo small{display:block;font-size:12.5px;color:var(--txt-suave);line-height:1.45}
/* Editor de contorno */
.ce-topo h2{margin:0 0 4px}
.ce-topo p{max-width:70ch}
.ce-wrap{display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:18px;align-items:start;margin-top:12px}
@media(max-width:820px){.ce-wrap{grid-template-columns:1fr}}
.ce-palco{position:relative;background:#0b1220;border-radius:14px;overflow:hidden;border:1px solid var(--linha)}
#ceSvg{display:block;width:100%;height:min(70vh,640px);touch-action:none;cursor:crosshair;background:#0b1220}
.ce-ferramentas{position:absolute;top:10px;left:10px;z-index:2;display:flex;align-items:center;gap:6px;
  background:rgba(255,255,255,.94);padding:6px;border-radius:10px;box-shadow:0 4px 14px rgba(0,0,0,.22)}
.ce-ferramentas .fer{width:34px;height:34px;border:1px solid var(--linha);background:#fff;border-radius:8px;cursor:pointer;font-size:15px;line-height:1}
.ce-ferramentas .fer:hover{background:var(--bg)}
.ce-ferramentas .fer.ativa{background:var(--cor-secundaria);color:#fff;border-color:var(--cor-secundaria)}
/* toggle "ocultar contorno" — esconde linha + pontos + marcadores, mantendo o trabalho */
#ceSvg.sem-contorno #cePoli,
#ceSvg.sem-contorno #ceVertices,
#ceSvg.sem-contorno #ceArestas{display:none}
.ce-ferramentas .fer-sep{width:1px;height:22px;background:var(--linha);margin:0 2px}
#cePoli{fill:rgba(242,103,34,.18);stroke:#F26722;stroke-linejoin:round}
.ce-vert{fill:#fff;stroke:#2563EB;cursor:grab}
.ce-vert:hover{fill:#dbeafe}
.ce-add{cursor:copy}
.ce-add circle{fill:rgba(22,163,74,.92)}
.ce-add line{stroke:#fff}
.ce-painel{background:var(--surface);border:1px solid var(--linha);border-radius:14px;padding:16px}
.ce-painel h3{margin:0 0 10px;font-size:15px}
.ce-medidas{list-style:none;margin:0 0 12px;padding:0}
.ce-medidas li{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--linha);font-size:14px;color:var(--txt-suave)}
.ce-medidas li b{color:var(--txt);font-variant-numeric:tabular-nums}
.ce-nota{font-size:12px;margin:0 0 14px}
.ce-acoes{display:flex;flex-direction:column;gap:8px}
.ce-acoes .btn{width:100%}
.pv-modal-acoes .btn-perigo{background:var(--erro);border-color:var(--erro);color:#fff}
.pv-modal-acoes .btn-perigo:hover{filter:brightness(.92);background:var(--erro)}
@media(max-width:480px){.pv-modal-acoes{flex-direction:column-reverse}.pv-modal-acoes .btn{width:100%}}
.suporte-topo{background:linear-gradient(135deg,var(--cor-primaria),var(--cor-secundaria));
  padding:22px 22px 20px;display:flex;align-items:center;justify-content:space-between;gap:12px}
.suporte-brand{display:flex;align-items:center;gap:11px;min-width:0}
.suporte-logo{max-height:34px;max-width:170px;filter:brightness(0) invert(1)}
.suporte-icone{font-size:26px;color:#fff}
.suporte-nome{font-size:19px;font-weight:750;color:#fff;letter-spacing:-.02em}
.suporte-tag{font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;color:#fff;
  background:rgba(255,255,255,.16);padding:4px 10px;border-radius:20px;font-weight:700;flex:none}
.suporte-corpo{padding:20px 22px 18px}
.suporte-texto{margin:0 0 16px;font-size:14px;line-height:1.6;color:var(--txt)}
.suporte-cta{display:flex;align-items:center;justify-content:center;gap:9px;width:100%;box-sizing:border-box;
  padding:12px 14px;border-radius:11px;background:var(--cor-secundaria);color:#fff;font-weight:600;font-size:14px;text-decoration:none}
.suporte-cta:hover{filter:brightness(1.06)}
.suporte-rodape{padding:11px 22px;border-top:1px solid var(--linha);font-size:11.5px;color:var(--txt-dim);text-align:center}
.lm-rodape-txt{margin-top:8px}

.principal{display:flex;flex-direction:column;min-width:0}
.topbar{display:flex;align-items:center;justify-content:space-between;
  padding:16px 30px;background:var(--surface);border-bottom:1px solid var(--linha);
  position:sticky;top:0;z-index:20}
.tb-titulo{display:flex;align-items:baseline;gap:14px}
.tb-titulo h1{font-size:20px}
.tb-lab{font-size:12.5px;color:var(--txt-dim);background:var(--bg);padding:3px 10px;border-radius:20px}
.tb-user{display:flex;align-items:center;gap:12px}
.user-info{display:flex;flex-direction:column;align-items:flex-end;line-height:1.25}
.user-nome{font-weight:600;font-size:13.5px}
.user-role{font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--txt-dim)}
.role-superadmin{color:#a855f7}.role-admin{color:var(--cor-secundaria)}
.user-avatar{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;
  background:linear-gradient(135deg,var(--cor-secundaria),var(--cor-primaria));color:#fff;font-weight:700}
.btn-sair{width:36px;height:36px;border-radius:9px;display:grid;place-items:center;
  color:var(--txt-suave);border:1px solid var(--linha)}
.btn-sair:hover{color:var(--erro);border-color:#f3c6c6;background:#fef2f2}
.conteudo{padding:26px 30px;width:100%;min-width:0}

/* ---------- KPIs ---------- */
.grid-kpis{display:grid;grid-template-columns:repeat(6,1fr);gap:14px;margin-bottom:22px}
.kpi{background:var(--surface);border:1px solid var(--linha);border-radius:var(--raio);
  padding:16px;box-shadow:var(--sombra-sm);transition:.15s;position:relative;overflow:hidden}
.kpi::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--txt-dim)}
.kpi:hover{transform:translateY(-2px);box-shadow:var(--sombra)}
.kpi-ico{font-size:18px;opacity:.85}.kpi-n{font-size:30px;font-weight:750;letter-spacing:-.03em;margin-top:6px}
.kpi-rot{font-size:12.5px;color:var(--txt-suave)}
.kpi-total::before{background:var(--cor-secundaria)}
.kpi-badge-warn::before{background:var(--warn)}.kpi-badge-info::before{background:var(--info)}
.kpi-badge-ok::before{background:var(--ok)}.kpi-badge-done::before{background:var(--done)}
.kpi-info::before{background:var(--cor-acento)}

/* ---------- Blocos / tabelas ---------- */
.painel-bloco{background:var(--surface);border:1px solid var(--linha);border-radius:var(--raio);
  box-shadow:var(--sombra-sm);overflow:hidden;margin-bottom:20px}
.bloco-cabeca{display:flex;align-items:center;justify-content:space-between;
  padding:16px 20px;border-bottom:1px solid var(--linha)}
.bloco-cabeca h2{font-size:15.5px}
.link{color:var(--cor-secundaria);font-weight:600;font-size:13px}
.tabela{width:100%;border-collapse:collapse}
.tabela th{text-align:left;font-size:11.5px;text-transform:uppercase;letter-spacing:.05em;
  color:var(--txt-dim);padding:11px 20px;background:#fafbfd}
.tabela td{padding:13px 20px;border-top:1px solid var(--linha);font-size:14px}
.tabela tbody tr{cursor:pointer;transition:.12s}
.tabela tbody tr:hover{background:#f7f9fd}
.mono{font-family:ui-monospace,"SF Mono",Menlo,monospace;font-size:13px}
.dim{color:var(--txt-suave)}.seta{color:var(--txt-dim)}
.cel-acoes{white-space:nowrap;text-align:right}
.btn-apagar-caso{border:0;background:transparent;cursor:pointer;font-size:15px;line-height:1;padding:4px 6px;
  border-radius:7px;opacity:0;filter:grayscale(1);transition:.12s;vertical-align:middle}
.tabela tbody tr:hover .btn-apagar-caso{opacity:.55}
.btn-apagar-caso:hover{opacity:1;filter:none;background:rgba(220,38,38,.12)}
.btn-apagar-caso:disabled{opacity:.3;cursor:default}
.cel-acoes .seta{margin-left:4px}
/* Seleção múltipla + apagar em lote (só admin) */
.col-sel,.cel-sel{width:34px;text-align:center;padding-right:0!important}
.sel-caso,#selAll{width:16px;height:16px;cursor:pointer;accent-color:var(--erro);vertical-align:middle}
.tabela tbody tr:has(.sel-caso:checked){background:rgba(220,38,38,.06)}
.sel-bar{display:flex;align-items:center;gap:14px;margin:0 0 12px;padding:9px 14px;border-radius:12px;
  background:var(--bg);border:1px solid var(--linha-forte);flex-wrap:wrap}
.sel-info{color:var(--txt);font-size:14px}.sel-info b{font-size:15px}
.sel-todos{color:var(--cor-secundaria);font-weight:600;font-size:13px;text-decoration:underline;cursor:pointer}
.btn-sm{padding:7px 13px;font-size:13px}
.sel-bar .btn-perigo{background:var(--erro);border-color:var(--erro);color:#fff}
.sel-bar .btn-perigo:hover{filter:brightness(.92);background:var(--erro)}
.sel-limpar{margin-left:auto;background:none;border:none;color:var(--txt-suave);font-weight:600;
  font-size:13px;cursor:pointer;text-decoration:underline}
.sel-limpar:hover{color:var(--txt)}
/* Colunas que desaparecem em ecrãs estreitos (mantém Caso, Fragmentos, Estado, ações) */
.mono-ae{font-family:ui-monospace,Menlo,monospace;font-size:12.5px;letter-spacing:-.02em}
/* Ordenação por header */
.tabela th.th-sort{cursor:pointer;user-select:none;white-space:nowrap;transition:color .12s}
.tabela th.th-sort:hover{color:var(--txt)}
.tabela th.th-sort::after{content:"↕";margin-left:6px;font-size:10px;opacity:.4;font-weight:700}
.tabela th.th-sort.sort-asc::after{content:"↑";opacity:1;color:var(--cor-secundaria)}
.tabela th.th-sort.sort-desc::after{content:"↓";opacity:1;color:var(--cor-secundaria)}
@media(max-width:1180px){.tabela .col-recebido{display:none}}
@media(max-width:1040px){.tabela .col-equip{display:none}}
@media(max-width:880px){.tabela .col-origem{display:none}}
@media(max-width:760px){.tabela .col-modulo{display:none}}

/* ---------- Badges / tags / chips ---------- */
.badge{display:inline-block;padding:3px 10px;border-radius:20px;font-size:12px;font-weight:600}
.badge-warn{background:#fef3e7;color:var(--warn)}.badge-info{background:#eaf1fe;color:var(--info)}
.badge-ok{background:#e8f6ee;color:var(--ok)}.badge-done{background:#e5f6fb;color:var(--done)}
.badge-erro{background:#fdeaea;color:var(--erro)}
.tag{font-size:11px;font-weight:600;padding:2px 8px;border-radius:6px;border:1px solid var(--linha-forte);color:var(--txt-suave)}
.tag-dicom{color:var(--cor-secundaria);border-color:#c7d8fb;background:#f2f6ff}
.tag-manual{color:#7c3aed;border-color:#e0d3fb;background:#f8f4ff}
.chip{padding:6px 14px;border-radius:20px;font-size:13px;font-weight:500;color:var(--txt-suave);
  border:1px solid var(--linha);background:var(--surface)}
.chip-ativo{background:var(--cor-primaria);color:#fff;border-color:var(--cor-primaria)}
.pilula{background:var(--bg);color:var(--txt-suave);border-radius:20px;padding:1px 9px;font-size:12px;font-weight:600}

/* ---------- Botões ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;
  padding:9px 16px;border-radius:10px;font-weight:600;font-size:13.5px;cursor:pointer;
  border:1px solid var(--linha-forte);background:var(--surface);color:var(--txt);transition:.15s}
.btn:hover{border-color:var(--txt-dim)}
.btn-primario{background:var(--cor-secundaria);border-color:var(--cor-secundaria);color:#fff;
  box-shadow:0 3px 12px rgba(37,99,235,.28)}
.btn-primario:hover{filter:brightness(1.06);border-color:var(--cor-secundaria)}
.btn-secundario{background:var(--bg)}
.btn-bloco{width:100%}
.btn-mini{padding:6px 12px;font-size:12.5px;border-radius:8px}
.barra-acoes{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px;gap:14px}
.filtros{display:flex;gap:8px;flex-wrap:wrap}

/* ---------- Vazio / erro ---------- */
.vazio{padding:40px 24px;text-align:center;color:var(--txt-suave)}
.vazio-grande{padding:80px 24px}.erro-cod{font-size:56px;font-weight:800;color:var(--linha-forte)}
.alerta{padding:11px 14px;border-radius:10px;font-size:13.5px;margin-bottom:6px}
.alerta-erro{background:#fdeaea;color:#b42323;border:1px solid #f3c6c6}
.alerta-ok{background:#e8f6ee;color:#15803d;border:1px solid #bfe6cd}
.alerta-info{background:#eaf1fe;color:#1d4ed8;border:1px solid #c7d8fb}
.alerta-info a{font-weight:700;text-decoration:underline}

/* ---------- Importar ---------- */
.importar-wrap{display:grid;grid-template-columns:1fr 320px;gap:20px;align-items:start;max-width:960px}
.importar-card h2{font-size:19px;margin-bottom:6px}
.dropzone{display:block;margin:18px 0 8px;border:2px dashed var(--linha-forte);border-radius:14px;
  padding:34px;text-align:center;cursor:pointer;transition:.15s;background:#fafbfd}
.dropzone:hover,.dropzone.sobre{border-color:var(--cor-secundaria);background:#f2f7ff}
.dz-ico{font-size:34px}.dz-txt{margin-top:8px}.dz-sub{color:var(--txt-dim);font-size:12.5px;margin-top:4px}
.dz-preview{max-width:100%;max-height:340px;border-radius:10px}
.dz-ficheiro{margin-bottom:14px;font-size:12.5px}
.importar-passos h3{font-size:15px;margin-bottom:12px}
.passos{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:10px;color:var(--txt-suave);font-size:13.5px}
.passos b{color:var(--txt)}
@media(max-width:900px){.importar-wrap{grid-template-columns:1fr}}

/* ---------- Admin (utilizadores / definições) ---------- */
.admin-grid{display:grid;grid-template-columns:1fr 340px;gap:20px;align-items:start}
@media(max-width:1000px){.admin-grid{grid-template-columns:1fr}}
.form-vert{display:flex;flex-direction:column;gap:12px;padding:2px}
.form-vert label,.def-campo{display:flex;flex-direction:column;gap:5px;font-size:13px;font-weight:600;color:var(--txt-suave)}
.form-vert input,.form-vert select,.def-campo input,.def-campo select,.mini-select{
  padding:9px 11px;border:1px solid var(--linha-forte);border-radius:9px;font-size:14px;background:#fff;font-weight:400;color:var(--txt)}
.form-vert input:focus,.def-campo input:focus,.form-vert select:focus,.def-campo select:focus,.mini-select:focus{
  outline:none;border-color:var(--cor-secundaria);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.inline-form{display:inline}
.acoes-linha{display:flex;gap:6px;align-items:center}
.mini-select{padding:5px 8px;font-size:13px}
.btn-perigo{color:var(--erro);border-color:#f3c6c6}
.btn-perigo:hover{background:#fef2f2;border-color:#e79b9b}

.def-form{display:flex;flex-direction:column;gap:18px}
.def-campos{padding:14px 20px;display:grid;grid-template-columns:1fr 1fr;gap:14px 18px}
.def-campo{gap:4px}.def-rot{font-size:12.5px}
.def-chave{font-size:10.5px;color:var(--txt-dim);font-weight:400}
.def-acoes{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
@media(max-width:700px){.def-campos{grid-template-columns:1fr}}

.licenca-card p{margin:0 0 10px}
.lic-lista{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.lic-lista li{display:flex;align-items:center;gap:10px;font-size:13.5px;padding:8px 10px;border-radius:9px;border:1px solid var(--linha)}
.lic-dot{width:9px;height:9px;border-radius:50%;background:var(--txt-dim)}
.lic-on{background:#f0f7f5;border-color:#bfe0d9}.lic-on .lic-dot{background:var(--ok)}
.lic-off{opacity:.6}.lic-off .lic-dot{background:var(--erro)}
.lic-estado{margin-left:auto;font-size:11.5px;color:var(--txt-suave)}
.flash{margin-bottom:18px}

/* ---------- Módulos ---------- */
.tag-mod{font-size:11px;font-weight:700;padding:2px 9px;border-radius:6px;border:1px solid var(--linha-forte);
  background:#fff;color:var(--txt-suave);display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.tag-mod::before{content:"";width:7px;height:7px;border-radius:2px;background:var(--txt-dim)}
.mod-macro{color:#0e7c73;border-color:#bfe0d9;background:#f0f7f5}.mod-macro::before{background:#0e9f94}
.mod-cito{color:#7c3aed;border-color:#e0d3fb;background:#f8f4ff}.mod-cito::before{background:#7c3aed}
.mod-histo{color:#b45309;border-color:#f5d9a8;background:#fdf6e9}.mod-histo::before{background:#f59e0b}
.campo-modulo{display:flex;flex-direction:column;gap:5px;font-size:13px;font-weight:600;color:var(--txt-suave);margin:6px 0 4px}
.campo-modulo select{padding:10px 12px;border:1px solid var(--linha-forte);border-radius:10px;font-size:14px;background:#fff;font-weight:400;color:var(--txt)}
.modulos-lista{display:flex;flex-direction:column;gap:16px}
.modulo-card .bloco-cabeca h2{display:flex;align-items:center;gap:10px;font-size:16px}
.mod-cod{font-family:ui-monospace,monospace;font-size:12px;background:var(--cor-primaria);color:#fff;padding:2px 8px;border-radius:6px}
.modulo-off{opacity:.72}
.modulo-form{padding:0}
.modulo-form .def-acoes{padding:14px 20px;border-top:1px solid var(--linha);margin-top:14px}
.modulo-vazio{padding:22px}

/* transmissões */
.tx-lista{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:9px}
.tx-lista li{display:flex;align-items:center;gap:8px;font-size:12.5px;flex-wrap:wrap}
.tx-tipo{font-weight:600}
.tx-dest{color:var(--txt-suave);font-size:11px}
.tx-hora{margin-left:auto}

/* imagem arquivada (retenção) */
.arquivada{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;
  padding:56px 30px;gap:6px;background:#fafbfd;min-height:min(58vh,400px)}
.arq-ico{font-size:44px}
.arquivada h3{font-size:17px}
.arquivada p{color:var(--txt-suave);max-width:44ch;margin:2px 0 14px}

/* saúde do CT (master) */
.saude{display:flex;flex-direction:column;gap:5px}
.saude .def-rot{font-size:12px}
.barra{height:8px;border-radius:6px;background:var(--linha);overflow:hidden}
.barra>span{display:block;height:100%;background:var(--cor-secundaria);border-radius:6px;transition:width .3s}
.barra-alerta>span{background:var(--erro)}

/* ============ Login ============ */
.login-body{background:var(--cor-primaria)}
.login-split{display:grid;grid-template-columns:1.1fr 1fr;min-height:100vh}
.login-marca{background:linear-gradient(150deg,var(--cor-primaria),#1e2f52 70%,var(--cor-secundaria));
  color:#e7edf8;padding:56px 60px;display:flex;flex-direction:column;justify-content:space-between}
.lm-logo{font-size:22px;font-weight:800;letter-spacing:-.02em;color:#fff}
.lm-conteudo h2{font-size:34px;line-height:1.15;margin:80px 0 18px;color:#fff;max-width:12ch}
.lm-conteudo p{color:#aeb9d2;max-width:44ch;font-size:15px}
.lm-lista{list-style:none;padding:0;margin:28px 0 0;display:flex;flex-direction:column;gap:12px}
.lm-lista li{padding-left:26px;position:relative;color:#c9d3e8}
.lm-lista li::before{content:"✓";position:absolute;left:0;color:var(--cor-acento);font-weight:800}
.lm-modulos-rot{font-size:11px;text-transform:uppercase;letter-spacing:.1em;color:#8b98b8;margin:26px 0 2px}
.lm-modulos li{display:flex;align-items:center;gap:8px}
.lm-modulos li.mod-disp{color:#6b7896}
.lm-lista li.mod-disp::before{content:"○";color:#6b7896;font-weight:400}
.mod-tag{font-size:10px;text-transform:uppercase;letter-spacing:.06em;background:rgba(255,255,255,.08);
  color:#aeb9d2;padding:2px 8px;border-radius:20px;margin-left:auto}
.lm-rodape{color:#7f8db0;font-size:13px}
.login-form-lado{display:grid;place-items:center;background:var(--bg);padding:24px}
.login-card{background:var(--surface);border:1px solid var(--linha);border-radius:18px;
  box-shadow:var(--sombra);padding:38px 36px;width:min(400px,92vw)}
.login-card h1{font-size:26px}.login-card .sub{color:var(--txt-suave);margin:6px 0 22px}
.login-card label{display:block;font-size:13px;font-weight:600;color:var(--txt-suave);margin-bottom:14px}
.login-card input{width:100%;margin-top:6px;padding:11px 13px;border:1px solid var(--linha-forte);
  border-radius:10px;font-size:14.5px;background:#fff}
.login-card input:focus{outline:none;border-color:var(--cor-secundaria);box-shadow:0 0 0 3px rgba(37,99,235,.15)}
.ou{display:flex;align-items:center;text-align:center;color:var(--txt-dim);font-size:12px;margin:20px 0 14px}
.ou::before,.ou::after{content:"";flex:1;height:1px;background:var(--linha)}
.ou span{padding:0 12px}
.btn-webtekpc{display:flex;align-items:center;justify-content:center;gap:9px;width:100%;
  background:#F26722;color:#fff;font-weight:700;padding:11px;border-radius:10px;
  box-shadow:0 3px 12px rgba(242,103,34,.3)}
.btn-webtekpc:hover{filter:brightness(1.05)}
.nota-oidc{text-align:center;color:var(--txt-dim);font-size:12px;margin:12px 0 0}

/* ============ Rever caso ============ */
.voltar{color:var(--txt-suave);font-weight:600;font-size:13.5px;display:inline-block;margin-bottom:14px}
.voltar:hover{color:var(--cor-secundaria)}
.rever{display:grid;grid-template-columns:1fr 360px;gap:20px;align-items:start}
.rever-info{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:16px;margin-top:20px;align-items:start}
.rever-topo{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:14px}
.rever-acoes-topo{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
@media(max-width:1000px){.rever{grid-template-columns:1fr}}
.palco-wrap{background:var(--surface);border:1px solid var(--linha);border-radius:var(--raio);
  box-shadow:var(--sombra-sm);overflow:hidden}
.ferramentas{display:flex;align-items:center;gap:6px;padding:10px 12px;border-bottom:1px solid var(--linha);background:#fafbfd}
.fer{width:38px;height:36px;border-radius:9px;border:1px solid var(--linha);background:#fff;
  cursor:pointer;font-size:16px;color:var(--txt-suave);display:grid;place-items:center;transition:.12s}
.fer:hover{border-color:var(--txt-dim);color:var(--txt)}
.fer.ativa{background:var(--cor-secundaria);color:#fff;border-color:var(--cor-secundaria)}
.fer-sep{width:1px;height:24px;background:var(--linha);margin:0 4px}
.fer-medida{margin-left:auto;font-family:ui-monospace,monospace;font-size:13px;color:var(--cor-acento);font-weight:700}
.palco{position:relative;height:min(72vh,640px);overflow:hidden;background:
  linear-gradient(45deg,#eef1f6 25%,transparent 25%,transparent 75%,#eef1f6 75%),
  linear-gradient(45deg,#eef1f6 25%,#f6f8fb 25%,#f6f8fb 75%,#eef1f6 75%);
  background-size:22px 22px;background-position:0 0,11px 11px;cursor:grab}
.palco.arrastar{cursor:grabbing}
.palco-inner{position:absolute;left:0;top:0;transform-origin:0 0}
.palco-inner img{display:block;user-select:none;-webkit-user-drag:none}
#overlay{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none}
/* camadas vetoriais */
.ov-area{fill:rgba(14,159,148,.24);stroke:none}
.ov-contorno{fill:none;stroke:var(--cor-acento);stroke-width:2.5;stroke-linejoin:round}
.ov-contorno.destacado{stroke:var(--cor-secundaria);stroke-width:5}
.ov-perimetro{fill:none;stroke:#f59e0b;stroke-width:3;stroke-dasharray:3 3}
.ov-caixa{fill:none;stroke:var(--cor-secundaria);stroke-width:1.5;stroke-dasharray:7 5}
.ov-label{paint-order:stroke;stroke:#fff;stroke-width:3px;font-weight:700;font-size:15px;
  font-family:ui-monospace,Menlo,monospace}
.ov-l-med{fill:#1d4ed8}.ov-l-area{fill:#0e7c73}.ov-l-perim{fill:#b45309}
.ov-rotulo-bg{fill:var(--cor-secundaria);stroke:#fff;stroke-width:2}
.ov-rotulo-tx{fill:#fff;font-weight:800;font-size:14px;text-anchor:middle;dominant-baseline:central;stroke:none}
.ov-regua{stroke:var(--cor-acento);stroke-width:2;stroke-dasharray:6 4}
.ov-ponto{fill:var(--cor-acento)}
.ov-marca{fill:#f26722;stroke:#fff;stroke-width:2}
.ov-marca-load{fill:none;stroke:#f26722;stroke-width:3;animation:marcaPulse 1s ease-in-out infinite}
@keyframes marcaPulse{0%,100%{r:6;opacity:1}50%{r:12;opacity:.4}}
.ov-marca-erro{fill:none;stroke:#dc2626;stroke-width:3}
.palco.medindo{cursor:progress}
.frag-x{float:right;margin-left:8px;border:0;background:rgba(220,38,38,.12);color:#dc2626;cursor:pointer;
  font-size:13px;font-weight:700;line-height:1;padding:4px 8px;border-radius:6px;transition:.12s}
.frag-x:hover{background:#dc2626;color:#fff}
.fer[data-tool="marca"].ativa{background:#f26722;border-color:#f26722}

/* barra de camadas (toggles) */
.camadas{display:flex;flex-wrap:wrap;align-items:center;gap:7px;padding:9px 12px;
  border-bottom:1px solid var(--linha);background:#fff}
.camadas-rot{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--txt-dim);margin-right:4px}
.toggle{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;color:var(--txt-suave);
  border:1px solid var(--linha);border-radius:20px;padding:5px 12px;cursor:pointer;user-select:none;transition:.12s}
.toggle input{position:absolute;opacity:0;pointer-events:none}
.toggle .pt{width:9px;height:9px;border-radius:3px;opacity:.35;transition:.12s}
.toggle.on{background:#f0f7f5;border-color:#bfe0d9;color:var(--txt);font-weight:600}
.toggle.on .pt{opacity:1}

.rever-lado{display:flex;flex-direction:column;gap:16px}
.cartao{background:var(--surface);border:1px solid var(--linha);border-radius:var(--raio);
  box-shadow:var(--sombra-sm);padding:16px 18px}
.cartao-topo{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:14px}
.caso-id{font-size:17px;font-weight:700}
.meta-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px 14px}
.meta-grid>div{display:flex;flex-direction:column;gap:2px}
.meta-grid span{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--txt-dim)}
.meta-grid b{font-size:13px;font-weight:600}
.cartao-cabeca{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.cartao-cabeca h3{font-size:14.5px;display:flex;align-items:center;gap:8px}
.tabela-frag{width:100%;border-collapse:collapse;font-size:13.5px}
.tabela-frag th{text-align:left;font-size:11px;text-transform:uppercase;color:var(--txt-dim);padding:6px 8px}
.tabela-frag td{padding:9px 8px;border-top:1px solid var(--linha)}
.tabela-frag tbody tr{cursor:pointer}
.tabela-frag tbody tr:hover,.tabela-frag tr.destacado{background:#eff4fe}
.tabela-frag .frag-n{width:26px;color:#fff;text-align:center}
.tabela-frag td.frag-n{background:var(--cor-secundaria);border-radius:6px;font-weight:700;font-size:12px}
.tabela-frag tfoot td{border-top:2px solid var(--linha-forte);font-weight:700;color:var(--txt)}
.frag-corrigido td:first-child+td::after{content:" ✎";color:var(--warn)}
.relatorio{white-space:pre-wrap;font-family:ui-monospace,monospace;font-size:12px;line-height:1.55;
  color:var(--txt);background:#fafbfd;border:1px solid var(--linha);border-radius:10px;padding:12px;margin:0;max-height:230px;overflow:auto}
.acoes-caso{display:flex;flex-direction:column;gap:10px}

@media (max-width:1080px){
  .grid-kpis{grid-template-columns:repeat(3,1fr)}
  .rever{grid-template-columns:1fr}
  .login-split{grid-template-columns:1fr}.login-marca{display:none}
}

/* ── Casos: barra de filtros + progresso de processamento ── */
.casos-topo{padding:14px 20px;border-bottom:1px solid var(--linha)}
.casos-topo .filtros-casos{margin:0}
.filtros-casos .fc-importar{margin-left:auto}
.tabela-scroll{overflow-x:auto}
.filtros-casos{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0 0 14px}
.filtros-casos .fc-busca{position:relative;flex:1 1 220px;min-width:180px}
.filtros-casos .fc-busca input{width:100%;padding:9px 12px 9px 32px;border:1px solid var(--linha-forte);
  border-radius:var(--raio-sm);background:var(--surface);color:var(--txt);font-size:14px}
.filtros-casos .fc-busca::before{content:"🔍";position:absolute;left:10px;top:50%;transform:translateY(-50%);opacity:.5;font-size:13px}
.filtros-casos select,.filtros-casos input[type=number],.filtros-casos input[type=date]{
  padding:8px 10px;border:1px solid var(--linha-forte);border-radius:var(--raio-sm);
  background:var(--surface);color:var(--txt);font-size:13px}
.filtros-casos input[type=number]{width:74px}
.filtros-casos .fc-sep{color:var(--txt-dim);font-size:12px}
.filtros-casos .fc-limpar{background:none;border:1px solid var(--linha-forte);border-radius:var(--raio-sm);
  padding:8px 12px;color:var(--txt-suave);cursor:pointer;font-size:13px}
.filtros-casos .fc-limpar:hover{border-color:var(--txt-dim);color:var(--txt)}
.filtros-casos .fc-grupo{display:flex;align-items:center;gap:6px}

.badge-proc{background:#FEF3C7;color:#92400E}
.proc-bar{display:inline-block;width:70px;height:6px;border-radius:6px;background:rgba(148,163,184,.28);overflow:hidden;vertical-align:middle}
.proc-bar>i{display:block;height:100%;width:40%;border-radius:6px;background:linear-gradient(90deg,#0E9F94,#F59E0B);animation:procslide 1.15s ease-in-out infinite}
@keyframes procslide{0%{margin-left:-42%}100%{margin-left:102%}}
tr.caso-proc td.cel-frag{min-width:80px}
.caso-feito{animation:casoflash 1.1s ease-out}
@keyframes casoflash{0%{background:rgba(16,163,148,.18)}100%{background:transparent}}

/* ── Calibração (appliance): upload compacto + lista + lightbox ── */
.calib-upload{display:flex;gap:8px;align-items:center}
.calib-lista{display:flex;flex-direction:column}
.calib-linha{display:flex;gap:14px;align-items:center;padding:12px 20px;border-top:1px solid var(--linha)}
.calib-linha:first-child{border-top:none}
.calib-thumb{width:74px;height:56px;object-fit:cover;border-radius:8px;background:#0b1220;border:1px solid var(--linha);flex:none}
.calib-linha.clicavel{cursor:pointer;transition:background .12s,border-color .12s}
.calib-linha.clicavel:hover{background:var(--fundo-suave,rgba(99,102,241,.06));border-color:var(--cor-secundaria)}
.calib-linha.clicavel:hover .calib-thumb{border-color:var(--cor-secundaria)}
/* importar (dropzone) */
.dropzone{border:2px dashed var(--linha-forte);border-radius:14px;padding:28px 20px;text-align:center;background:var(--bg);transition:.15s}
.dropzone.sobre{border-color:var(--cor-secundaria);background:#eef4fe}
.dz-ico{font-size:30px}.dz-txt{margin-top:8px;font-size:14px}.dz-hint{margin-top:4px;font-size:12px;color:var(--txt-dim)}
.dz-lista{list-style:none;padding:0;margin:12px 0 0;display:flex;flex-wrap:wrap;gap:6px;justify-content:center}
.dz-lista li{font-size:12px;background:var(--surface);border:1px solid var(--linha);border-radius:20px;padding:4px 11px}
/* tabela de casos de calibração */
.calib-filtro{padding:8px 10px;border:1px solid var(--linha-forte);border-radius:8px;font:inherit;font-size:13px;background:var(--surface)}
.calib-td-img{display:flex;align-items:center;gap:10px}
.calib-thumb-s{width:52px;height:40px;object-fit:cover;border-radius:7px;border:1px solid var(--linha);background:#0b1220;flex:none}
.calib-fic{font-size:11px}
.calib-eq{display:inline-flex;align-items:center;gap:8px}
.calib-eq-foto{width:30px;height:30px;object-fit:cover;border-radius:6px;border:1px solid var(--linha);flex:none}
.calib-eq-ico{font-size:16px}
.calib-tab tr.clicavel{cursor:pointer}.calib-tab tr.clicavel:hover{background:#f7f9fd}
/* quadro do equipamento (detalhe) */
.equip-quadro{display:flex;align-items:center;gap:12px}
.equip-foto{width:56px;height:56px;object-fit:cover;border-radius:10px;border:1px solid var(--linha);flex:none}
.equip-foto-vazia{display:grid;place-items:center;font-size:24px;background:var(--bg);color:var(--txt-dim)}
.calib-meta{flex:1;min-width:0}
.calib-acts{flex:none}
@media(max-width:640px){.calib-linha{flex-wrap:wrap}.calib-acts{width:100%}.calib-acts form{min-width:0 !important;width:100%}}
.calib-lb{position:fixed;inset:0;z-index:200;background:rgba(6,10,18,.95);display:none;place-items:center;padding:24px}
.calib-lb.aberto{display:grid}
.calib-lb img{max-width:96vw;max-height:90vh;border-radius:8px}
.calib-lb button{position:fixed;top:16px;right:18px;width:40px;height:40px;border-radius:10px;border:1px solid rgba(255,255,255,.25);background:rgba(255,255,255,.08);color:#fff;font-size:18px;cursor:pointer}

/* ── Modal (ex.: novo utilizador) ── */
.modal-novo{position:fixed;inset:0;z-index:150;background:rgba(6,10,18,.5);display:none;place-items:center;padding:20px}
.modal-novo.aberto{display:grid}
.modal-cartao{background:var(--surface);border:1px solid var(--linha-forte);border-radius:16px;box-shadow:var(--sombra);padding:20px 22px;width:min(440px,94vw);max-height:90vh;overflow:auto}
.modal-cabeca{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.modal-x{width:34px;height:34px;border-radius:9px;border:1px solid var(--linha-forte);background:var(--surface);cursor:pointer;font-size:16px;color:var(--txt-suave)}
.modal-x:hover{border-color:var(--txt-dim);color:var(--txt)}

/* Ecrã inteiro do palco de revisão */
.palco:fullscreen,.palco:-webkit-full-screen{height:100vh;width:100vw;background:#0b1220}

/* Sidebar colapsável (mais ecrã disponível) */
.sb-toggle{width:38px;height:38px;border-radius:9px;border:1px solid var(--linha);background:var(--surface);
  color:var(--txt-suave);cursor:pointer;font-size:17px;display:grid;place-items:center;flex:none}
.sb-toggle:hover{border-color:var(--txt-dim);color:var(--txt)}
/* colapsado = rail só com ícones (não desaparece) */
.app.sb-col{grid-template-columns:66px 1fr}
.app.sb-col>.sidebar{padding:20px 8px}
.app.sb-col .marca{justify-content:center;padding:6px 0 16px}
.app.sb-col .marca-nome{display:none}
.app.sb-col .marca-logo{max-width:44px;max-height:28px}
.app.sb-col .nav-item{justify-content:center;gap:0;padding:11px 0;font-size:0}
.app.sb-col .nav-item .ni-ico{font-size:16px;width:auto}
.app.sb-col .nav-sep{height:1px;padding:0;margin:12px 10px;background:rgba(255,255,255,.08);overflow:hidden;text-indent:-999px}
.app.sb-col .sidebar-rodape{display:none}

/* Fase C — barra de cassete por caso (rever) */
.cassete-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 14px;padding:10px 14px;border:1px solid var(--linha,#e2e8f0);border-radius:12px;background:#f8fafc}
.cassete-bar .cassete-lbl{font-weight:600;font-size:13px}
.cassete-bar select{padding:8px 10px;border:1px solid var(--linha,#e2e8f0);border-radius:9px;font-size:13px;background:#fff;max-width:340px}
.cassete-bar .cassete-dica{font-size:11.5px;flex:1 1 220px;min-width:180px}
