:root{
  --bg:#f5f6f4;--surface:#fff;--surface-2:#f0f1ee;--line:#dfe1dc;--text:#1d211f;--muted:#636a66;
  --accent:#1f5f4a;--accent-soft:#e3efe9;--erro:#b3261e;--erro-soft:#fbe9e7;--pend:#9a5b00;--pend-soft:#fdf1dc;
  --alerta:#6b5d00;--alerta-soft:#f7f2d0;--ok:#2e6b3f;--ok-soft:#e5f2e8;--sel:#e9f1fb;--radius:8px;
  --mono:ui-monospace,"SFMono-Regular",Consolas,monospace;
}
@media (prefers-color-scheme:dark){:root{
  --bg:#141716;--surface:#1c201e;--surface-2:#232826;--line:#323835;--text:#e7eae8;--muted:#9aa29e;
  --accent:#7cc3a6;--accent-soft:#1f3a30;--erro:#ff8a80;--erro-soft:#3a1f1d;--pend:#ffb74d;--pend-soft:#3a2c14;
  --alerta:#e6d36a;--alerta-soft:#353014;--ok:#81c995;--ok-soft:#1d3324;--sel:#1e2c3d;}}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--text);font:14px/1.45 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif}
a{color:var(--accent)}
.topo{display:flex;align-items:center;gap:16px;padding:10px 20px;background:var(--surface);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5}
.topo .marca{font-weight:700;letter-spacing:.02em;color:var(--accent);text-decoration:none}
.topo .emp{color:var(--muted)}
.topo .dir{margin-left:auto;display:flex;gap:12px;align-items:center}
.btn-link{background:none;border:0;color:var(--accent);cursor:pointer;font:inherit;padding:0}
main{padding:16px 20px;max-width:1600px;margin:0 auto}
h1{font-size:20px;margin:0 0 4px}
h2{font-size:15px;margin:0 0 10px}
.sub{color:var(--muted);margin:0 0 14px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:14px}
.cab{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:12px}
.cab dl{display:grid;grid-template-columns:auto 1fr;gap:3px 10px;margin:0}
.cab dt{color:var(--muted)}
.cab dd{margin:0;overflow-wrap:anywhere}
.vazio{color:var(--pend);font-style:italic}
.botoes{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 12px}
.botao{display:flex;gap:6px;align-items:center;border:1px solid var(--line);background:var(--surface);border-radius:999px;padding:4px 10px 4px 4px;font-size:12.5px;color:var(--text)}
.botao b{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:50%;background:var(--accent);color:var(--surface);font-size:12px}
.botao.breve{opacity:.55}
.botao.breve b{background:var(--muted)}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-bottom:12px}
.kpi{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px}
.kpi span{display:block;color:var(--muted);font-size:12px}
.kpi strong{display:block;font-size:17px;font-variant-numeric:tabular-nums;white-space:nowrap}
.kpi small{color:var(--muted);font-variant-numeric:tabular-nums}
.kpi.destaque{border-color:var(--accent);background:var(--accent-soft)}
.grade{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(0,1fr);gap:12px;align-items:start}
.planilha{padding:0;overflow:hidden}
.planilha .filtro{display:flex;gap:8px;align-items:center;padding:10px 12px;border-bottom:1px solid var(--line)}
.planilha input[type=search]{flex:1;padding:6px 10px;border:1px solid var(--line);border-radius:6px;background:var(--surface-2);color:var(--text);font:inherit}
.rolagem{max-height:68vh;overflow:auto}
table{border-collapse:collapse;width:100%}
th,td{padding:5px 8px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
th{position:sticky;top:0;background:var(--surface-2);font-size:12px;color:var(--muted);font-weight:600;z-index:1}
td.n,th.n{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
td.cod{font-family:var(--mono);font-size:12.5px;white-space:nowrap}
td.desc{min-width:260px}
tr.etapa td{background:var(--surface-2);font-weight:600;font-size:12.5px}
tbody tr.serv{cursor:pointer}
tbody tr.serv:hover td{background:var(--sel)}
tbody tr.serv.ativo td{background:var(--sel);box-shadow:inset 0 0 0 0 transparent}
tbody tr.serv.ativo td:first-child{box-shadow:inset 3px 0 0 var(--accent)}
.st{display:inline-block;padding:1px 7px;border-radius:999px;font-size:11.5px;white-space:nowrap}
.st.ok{background:var(--ok-soft);color:var(--ok)}
.st.erro{background:var(--erro-soft);color:var(--erro)}
.st.pend{background:var(--pend-soft);color:var(--pend)}
.st.alerta{background:var(--alerta-soft);color:var(--alerta)}
.painel{position:sticky;top:64px;max-height:calc(100vh - 80px);overflow:auto}
.painel .tit{font-weight:600;margin-bottom:4px}
.painel .meta{color:var(--muted);font-size:12.5px;margin-bottom:10px}
.cats{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin:10px 0}
.cats div{background:var(--surface-2);border-radius:6px;padding:6px 8px}
.cats span{display:block;color:var(--muted);font-size:11.5px}
.cats b{font-variant-numeric:tabular-nums;font-size:13px}
.painel table td,.painel table th{font-size:12.5px}
tr.aux td{color:var(--muted);font-style:italic}
.form-qtd{display:flex;gap:6px;align-items:center;margin:8px 0}
.form-qtd input{width:140px;padding:5px 8px;border:1px solid var(--line);border-radius:6px;background:var(--surface-2);color:var(--text);font:inherit;text-align:right}
.prim{background:var(--accent);color:var(--surface);border:0;border-radius:6px;padding:6px 12px;font:inherit;cursor:pointer}
.alertas{margin-top:12px}
.alertas li{margin:4px 0}
.msgs{list-style:none;padding:0;margin:0 0 12px}
.msgs li{padding:8px 12px;border-radius:6px;margin-bottom:6px}
.msgs .success{background:var(--ok-soft);color:var(--ok)}
.msgs .error{background:var(--erro-soft);color:var(--erro)}
.login{max-width:360px;margin:12vh auto}
.login label{display:block;margin:10px 0 4px}
.login input{width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:6px;background:var(--surface-2);color:var(--text);font:inherit}
.lista td{padding:8px}
.nota{color:var(--muted);font-size:12px}
@media (max-width:1100px){.grade{grid-template-columns:1fr}.painel{position:static;max-height:none}.cab{grid-template-columns:1fr}}
@media (max-width:640px){main{padding:12px}.cats{grid-template-columns:repeat(2,1fr)}.topo .emp{display:none}td.desc{min-width:200px}}
a.botao{text-decoration:none}
a.botao:hover{border-color:var(--accent)}
.botao.ativo{border-color:var(--accent);background:var(--accent-soft);font-weight:600}
.voltar{display:inline-block;margin-bottom:6px;font-size:13px}
.filtros{display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding:10px 12px;border-bottom:1px solid var(--line)}
.chip{border:1px solid var(--line);border-radius:999px;padding:3px 10px;font-size:12.5px;text-decoration:none;color:var(--text);background:var(--surface)}
.chip.on{background:var(--accent);border-color:var(--accent);color:var(--surface)}
.filtros .sep{width:1px;height:18px;background:var(--line);margin:0 4px}
.filtros form{margin-left:auto}
td.menor{font-weight:700;color:var(--ok)}
.fonte{font-size:11px;color:var(--muted);display:block}
.classe{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:4px;font-size:11px;font-weight:700;background:var(--surface-2)}
.classe.A{background:var(--accent);color:var(--surface)}
.eq{font-size:12px;margin-top:3px}
.eq form{display:inline-flex;gap:4px;align-items:center;margin:2px 0}
.eq input{width:70px;padding:2px 5px;border:1px solid var(--line);border-radius:4px;background:var(--surface-2);color:var(--text);font:inherit;text-align:right}
.mini{border:1px solid var(--line);background:var(--surface);color:var(--text);border-radius:4px;padding:2px 7px;font:inherit;font-size:12px;cursor:pointer}
.mini.ok{border-color:var(--ok);color:var(--ok)}
.mini.nao{border-color:var(--erro);color:var(--erro)}
.cot{font-size:12px;line-height:1.3;min-width:110px}
.cot .forn{display:block;color:var(--muted);overflow-wrap:anywhere}
.cot .pr{font-variant-numeric:tabular-nums;font-weight:600}
.cot.inval{opacity:.5}
.cot.inval .pr{text-decoration:line-through;font-weight:400}
.cot.melhor .pr{color:var(--ok)}
.cot form{display:inline}
.form-grade{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:8px 12px;align-items:end}
.form-grade label{display:block;font-size:12px;color:var(--muted);margin-bottom:3px}
.form-grade input{width:100%;padding:6px 8px;border:1px solid var(--line);border-radius:6px;background:var(--surface-2);color:var(--text);font:inherit}
.form-grade .largo{grid-column:span 2}
details.card summary{cursor:pointer;font-weight:600}
.aviso{background:var(--alerta-soft);color:var(--alerta);padding:8px 12px;border-radius:6px;font-size:13px;margin:0 0 12px}
.form-edicao section.card{margin-bottom:12px}
.form-grade select,.form-grade textarea{width:100%;padding:6px 8px;border:1px solid var(--line);border-radius:6px;background:var(--surface-2);color:var(--text);font:inherit}
.form-grade .st{display:block;margin-top:3px;border-radius:4px}
.acoes-obra{display:flex;gap:10px;flex-wrap:wrap;margin:-6px 0 12px}
a.prim{color:var(--surface)}
.resultados{display:flex;flex-direction:column;gap:4px;max-height:260px;overflow:auto;margin-top:8px}
.resultado{text-align:left;border:1px solid var(--line);background:var(--surface);color:var(--text);border-radius:6px;padding:6px 10px;font:inherit;font-size:13px;cursor:pointer}
.resultado:hover{border-color:var(--accent);background:var(--sel)}
.tela-botoes{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px}
.tela-botoes .coluna{display:flex;flex-direction:column;gap:10px}
.bloco{display:flex;gap:14px;align-items:flex-start;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:14px 16px;text-decoration:none;color:var(--text);min-height:96px;transition:border-color .15s,box-shadow .15s}
a.bloco:hover{border-color:var(--accent);box-shadow:0 2px 10px rgba(0,0,0,.08)}
.bloco .letra{flex:none;display:grid;place-items:center;width:44px;height:44px;border-radius:10px;background:var(--accent);color:var(--surface);font-weight:800;font-size:20px}
.bloco.breve{opacity:.6}
.bloco.breve .letra{background:var(--muted)}
.bloco.destaque{border:2px solid var(--accent);background:var(--accent-soft)}
.bloco .corpo{display:flex;flex-direction:column;gap:2px;min-width:0}
.bloco .titulo{font-weight:700;font-size:16px}
.bloco .desc{color:var(--muted);font-size:12.5px}
.bloco .valor{font-size:18px;font-weight:700;font-variant-numeric:tabular-nums;margin-top:4px}
.bloco .info{color:var(--muted);font-size:12.5px}
.subs{display:flex;gap:8px;margin:-4px 0 0 58px;flex-wrap:wrap}
.sub-bloco{border:1px solid var(--line);border-radius:8px;padding:6px 10px;text-decoration:none;color:var(--text);background:var(--surface);font-size:13px}
.sub-bloco b{color:var(--accent);margin-right:4px}
.sub-bloco:hover{border-color:var(--accent)}
@media (max-width:800px){.tela-botoes{grid-template-columns:1fr}.subs{margin-left:0}}
table.crono input.pc{width:58px;padding:3px 4px;border:1px solid var(--line);border-radius:4px;background:var(--surface-2);color:var(--text);font:inherit;font-size:12.5px;text-align:right}
table.crono td,table.crono th{white-space:nowrap}
table.crono td.desc{white-space:normal;min-width:220px}
table.crono tfoot th{background:var(--surface-2);text-align:right;font-variant-numeric:tabular-nums}
table.crono tfoot th:first-child{text-align:left}
.destaque-linha th{color:var(--accent)}
.soma.ruim{color:var(--erro);font-weight:700}
.grafico{width:100%;height:auto;display:block}
.grafico .grade{stroke:var(--line);stroke-width:1}
.grafico .eixo{fill:var(--muted);font-size:11px}
.grafico .eixo-linha{stroke:var(--muted)}
.grafico .serie{fill:none;stroke-width:2.5}
.grafico .s-prev{stroke:var(--accent);fill:var(--accent)}
.grafico .s-of{stroke:#8a7cc7;fill:#8a7cc7;stroke-dasharray:6 4}
.grafico .s-real{stroke:#d9822b;fill:#d9822b}
.grafico .s-fis{stroke:#2b7bd9;fill:#2b7bd9}
.grafico polyline.serie{fill:none}
.legenda{display:flex;gap:14px;flex-wrap:wrap;font-size:12.5px;margin-bottom:6px}
.leg::before{content:"";display:inline-block;width:18px;height:3px;margin-right:6px;vertical-align:middle;background:currentColor}
.leg.s-prev{color:var(--accent)}.leg.s-of{color:#8a7cc7}.leg.s-real{color:#d9822b}.leg.s-fis{color:#2b7bd9}
.abc-grade{display:grid;grid-template-columns:repeat(auto-fit,minmax(360px,1fr));gap:12px}
.abc-resumo{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-bottom:10px}
.abc-c{background:var(--surface-2);border-radius:6px;padding:6px 8px;display:flex;flex-direction:column;font-size:12px}
.abc-c b{font-size:15px}.abc-c strong{font-variant-numeric:tabular-nums;font-size:13px}.abc-c small{color:var(--muted)}
.abc-c.A{border-left:3px solid var(--accent)}
.barra{height:4px;background:var(--surface-2);border-radius:2px;margin-top:3px}
.barra i{display:block;height:4px;background:var(--accent);border-radius:2px}
table.abc td{font-size:12.5px}

/* ---------- N · proposta (documento) */
.acoes { display: flex; gap: .6rem; flex-wrap: wrap; margin: 1rem 0; }
form.inline { display: inline; }
.selo { font-size: .8rem; background: var(--ok, #2e7d32); color: #fff; padding: .15rem .5rem; border-radius: 4px; vertical-align: middle; }
.doc { position: relative; background: #fff; color: #111; max-width: 820px; margin: 1rem auto 2rem; padding: 2.5rem 3rem;
       box-shadow: 0 1px 6px rgba(0,0,0,.15); font-size: 14px; line-height: 1.5; overflow: hidden; }
.doc h3 { font-size: 1rem; margin: 1.4rem 0 .4rem; border-bottom: 1px solid #ccc; padding-bottom: .2rem; color: #111; }
.doc-cab { display: flex; justify-content: space-between; gap: 1rem; border-bottom: 2px solid #111; padding-bottom: 1rem; }
.doc-empresa { font-size: 1.15rem; }
.doc-num { text-align: right; }
.doc-tab { width: 100%; border-collapse: collapse; margin: .4rem 0; }
.doc-tab th, .doc-tab td { border-bottom: 1px solid #ddd; padding: .25rem .4rem; text-align: left; color: #111; background: none; }
.doc-tab .n, .doc-tab td:first-child { text-align: right; white-space: nowrap; }
.doc-tab td:first-child { text-align: left; }
.doc-tab tfoot th { border-top: 2px solid #111; font-size: 1.05rem; }
.doc .pre { white-space: pre-line; }
.doc .extenso { background: #f4f4f4; padding: .5rem .7rem; }
.doc .nota { color: #555; font-size: .85rem; }
.doc-assin { margin-top: 3.5rem; text-align: center; }
.doc-assin .linha { width: 320px; margin: 0 auto .4rem; border-top: 1px solid #111; }
.doc .marca { position: absolute; top: 320px; left: 50%; transform: translate(-50%, -50%) rotate(-30deg); font-size: 7rem;
              font-weight: 800; color: rgba(200, 0, 0, .12); pointer-events: none; letter-spacing: .5rem; }
@media print {
  body { background: #fff !important; }
  header.topo, .nao-imprimir, .msgs { display: none !important; }
  main { padding: 0 !important; margin: 0 !important; max-width: none !important; }
  .doc { box-shadow: none; margin: 0; padding: 0; max-width: none; }
  .doc section { break-inside: avoid; }
  .doc .marca { position: fixed; top: 45%; }
  .doc-tab tr { break-inside: avoid; }
  @page { size: A4; margin: 18mm 16mm; }
}
