/* Gestão de Obras · web — mesma linguagem visual do desktop (App.xaml) */
:root{--primary:#4A5159;--primary-dark:#343A40;--accent:#E8A33D;--bg:#F4F6F9;--surface:#fff;--border:#D9DEE6;--text:#1E2733;--muted:#6B7685;--ok:#2E7D4F;--danger:#C0392B;--sidebar:#E9ECF1;--botao:#DCE1E8;--botao-hover:#C7CED8;--selecao:#FFF1D6}
*{box-sizing:border-box}html{font-size:14px}body{margin:0;font-family:"Segoe UI",Arial,sans-serif;color:var(--text);background:var(--bg)}
a{color:var(--primary)}button{font-family:inherit;font-size:inherit}
input,select,textarea{font-family:inherit;font-size:13px;padding:6px 8px;border:1px solid var(--border);border-radius:6px;background:#fff;color:var(--text);width:100%;max-width:100%}
input:focus,select:focus,textarea:focus{outline:2px solid #B9C4D3;outline-offset:0;border-color:#9AA7B8}
input[type=checkbox],input[type=radio]{width:auto;margin:0 4px 0 0}label{font-size:13px}
.muted{color:var(--muted)}.pequeno{font-size:11px}.direita,.n{text-align:right}.negrito{font-weight:600}.ok{color:var(--ok)}.perigo{color:var(--danger)}
.link{background:none;border:0;color:var(--primary);cursor:pointer;padding:4px 6px;text-decoration:none}.link:hover{text-decoration:underline}

/* ---- casca: barra lateral + topo ---- */
.shell{display:flex;min-height:100vh}
.side{width:230px;background:var(--sidebar);border-right:1px solid var(--border);display:flex;flex-direction:column;padding:12px 8px;flex:none}
.brand{display:flex;gap:10px;align-items:center;padding:6px 8px 14px}.brand .logo{font-size:26px}.brand b{font-size:15px}.brand small{display:block;color:var(--muted);font-size:11px}
.side nav{display:flex;flex-direction:column;gap:1px;overflow:auto}
.side nav a{padding:7px 10px;border-radius:6px;text-decoration:none;color:var(--text);display:flex;align-items:center;gap:8px;font-size:13.5px}
.side nav a .ico{width:18px;text-align:center;color:var(--muted)}.side nav a:hover{background:#fff}.side nav a.active{background:var(--accent);color:#fff;font-weight:600}.side nav a.active .ico{color:#fff}
.side nav .sub a{padding:5px 10px 5px 34px;font-size:12.5px}.side nav .sub a::before{content:"•";margin-right:6px;color:var(--muted)}
.side .rodape{margin-top:auto;color:var(--muted);font-size:11px;padding:8px}
main{flex:1;display:flex;flex-direction:column;min-width:0}
.topo{height:52px;background:#fff;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:12px;padding:0 18px}
.topo .empresa{margin-right:auto;font-weight:600;color:var(--primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.topo .ico-btn{background:none;border:0;font-size:18px;cursor:pointer;color:var(--primary);padding:4px 6px;text-decoration:none}.topo .user{font-size:13px}
.topo .hamb{display:none}
.conteudo{padding:18px 22px}
h1{font-size:22px;margin:0 0 12px;color:var(--primary);font-weight:600}h2{font-size:15px;color:var(--primary);margin:16px 0 8px}
.vazio{min-height:100vh}

/* ---- página / abas ---- */
.pagina-topo{display:flex;align-items:center;gap:12px}.pagina-acoes{margin-left:auto;display:flex;gap:6px}
.abas{display:flex;gap:2px;border-bottom:1px solid var(--border);margin-bottom:12px;overflow-x:auto}
.aba{background:#E6EAF0;border:1px solid var(--border);border-bottom:0;border-radius:6px 6px 0 0;padding:7px 14px;cursor:pointer;color:var(--text);white-space:nowrap}
.aba.ativa{background:#fff;font-weight:600;color:var(--primary);position:relative;top:1px}

/* ---- cartões, botões, campos ---- */
.card,.cartao{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:14px;margin-bottom:12px}
.linha{display:flex;gap:8px;flex-wrap:wrap;align-items:flex-end}.linha>*{flex:1 1 140px;min-width:0}
.campo{display:flex;flex-direction:column}.campo .dica{color:var(--muted);font-size:11px;margin-top:2px}
.rotulo-mini{display:block;font-size:11px;color:var(--muted);margin:6px 0 2px}
.secao{font-weight:600;color:var(--primary);margin:12px 0 2px;font-size:13px;text-transform:uppercase;letter-spacing:.2px}
.botao-primario,.botao-secundario,.botao-perigo{border-radius:6px;padding:7px 12px;cursor:pointer;font-weight:600;text-decoration:none;display:inline-flex;align-items:center;gap:6px;line-height:1.2;white-space:nowrap}
.botao-primario{background:var(--primary);color:#fff;border:1px solid var(--primary)}.botao-primario:hover{background:var(--primary-dark)}.botao-primario.largo{width:100%;justify-content:center}
.botao-secundario{background:var(--botao);color:var(--text);border:1px solid var(--botao)}.botao-secundario:hover{background:var(--botao-hover)}
.botao-perigo{background:#F8D7D3;color:var(--danger);border:1px solid #F1B9B2}.botao-perigo:hover{background:#F1B9B2}
button:disabled{opacity:.5;cursor:default}
.barra{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:8px}.barra .sep{width:1px;height:22px;background:var(--border);margin:0 4px}
.mensagem{font-size:12px;padding:6px 10px;border-radius:6px;margin:8px 0;background:#EEF2F7;color:var(--muted)}.mensagem.ok{background:#D9F2D0;color:var(--ok)}.mensagem.erro{background:#F8D7D3;color:var(--danger)}.mensagem.aviso{background:#FFF1D6;color:#8A5A00}
.erro{color:var(--danger);font-size:12px}
.kpis{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:10px}
.kpi{background:#fff;border:1px solid var(--border);border-radius:8px;padding:10px 12px}.kpi small{display:block;color:var(--muted);font-size:11px}.kpi b{font-size:20px;color:var(--primary)}.kpi-detalhe{display:block;font-size:11px;color:var(--muted)}

/* ---- filtros com alça ---- */
.modulo{display:flex;gap:0;align-items:stretch}.modulo>.principal{flex:1;min-width:0}
.filtros-wrap{display:flex;align-items:stretch;flex:none}
.filtros{margin:0 0 0 0;display:flex;flex-direction:column}.filtros-corpo{flex:1}.filtros-rodape{display:flex;justify-content:flex-end;gap:6px;margin-top:8px}
.filtros .radio{display:block;font-size:13px;margin:2px 0}
.alca-filtros{width:22px;margin:0 8px 0 0;border:0;background:var(--bg);cursor:pointer;color:var(--primary);padding:0}
.alca-filtros span{display:block;writing-mode:vertical-rl;transform:rotate(180deg);font-size:9px;font-weight:600;letter-spacing:.5px;white-space:nowrap}
.alca-filtros:hover{background:#E6EAF0}

/* ---- grade ---- */
.grade-wrap{overflow:auto;border:1px solid var(--border);border-radius:6px;background:#fff}
table.grade{border-collapse:separate;border-spacing:0;width:100%;font-size:13px}
table.grade th{position:sticky;top:0;background:#F1F3F6;color:var(--text);text-align:left;padding:7px 8px;font-weight:600;border-bottom:1px solid var(--border);white-space:nowrap;z-index:1}
table.grade td{padding:6px 8px;border-bottom:1px solid #EEF1F5;white-space:nowrap;max-width:360px;overflow:hidden;text-overflow:ellipsis}
table.grade tbody tr:hover{background:#F7F9FC}table.grade tbody tr.selecionada{background:var(--selecao)}table.grade tbody tr{cursor:default}
table.grade tr.vazio td{color:var(--muted);text-align:center;padding:22px}table.grade.compacta td,table.grade.compacta th{padding:4px 6px;font-size:12px}
table.grade tfoot td{font-weight:600;background:#F7F9FC}
table.grade th.n,table.grade td.n{text-align:right}
table{border-collapse:collapse;width:100%;font-size:13px}table th{text-align:left;padding:6px 8px;background:#F1F3F6;border-bottom:1px solid var(--border)}table td{padding:6px 8px;border-bottom:1px solid #EEF1F5}
.filtros-inline,.filtros{font-size:13px}.filtros-inline{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:10px}

/* ---- diálogo ---- */
.dialogo-fundo{position:fixed;inset:0;background:rgba(30,39,51,.35);display:flex;align-items:center;justify-content:center;z-index:50;outline:none}
.dialogo{background:#fff;border-radius:8px;border:1px solid var(--border);box-shadow:0 8px 28px rgba(0,0,0,.25);display:flex;flex-direction:column;max-height:94vh}
.dialogo-topo{display:flex;align-items:center;justify-content:space-between;padding:14px 18px 6px}.dialogo-titulo{font-size:16px;font-weight:600}
.dialogo-corpo{padding:6px 18px;overflow:auto}.dialogo-rodape{display:flex;justify-content:flex-end;gap:6px;padding:12px 18px 16px;border-top:1px solid var(--border);margin-top:6px}

/* ---- login ---- */
.login-fundo{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--bg)}
.cartao.login{width:380px;max-width:92vw;padding:28px}.cartao.login input{width:100%;margin-bottom:10px}.cartao.login .marca{display:flex;gap:10px;align-items:center;margin-bottom:18px}.cartao.login .marca .logo{font-size:28px}.cartao.login .marca small{display:block;color:var(--muted);font-size:11px}
.lembrar{display:flex;gap:6px;align-items:center;font-size:12px;color:var(--muted);margin:4px 0 12px}

/* ---- erro do blazor ---- */
#blazor-error-ui{display:none;position:fixed;bottom:0;left:0;right:0;background:#FFF1D6;color:#8A5A00;padding:10px 20px;z-index:100;font-size:13px}#blazor-error-ui .dismiss{float:right;cursor:pointer}
.reconnect-modal,#components-reconnect-modal{font-size:13px}

/* ---- celular / telas estreitas ---- */
@media (max-width:900px){
  .side{position:fixed;left:-240px;top:0;bottom:0;z-index:40;transition:left .2s}body.menu-aberto .side{left:0;box-shadow:4px 0 16px rgba(0,0,0,.2)}
  .topo .hamb{display:inline-block}.conteudo{padding:12px}
  .filtros-wrap{flex-direction:column}.alca-filtros{width:100%;height:22px;margin:0 0 8px}.alca-filtros span{writing-mode:horizontal-tb;transform:none}
  .modulo{flex-direction:column}.filtros{width:100%!important}
  .kpi b{font-size:17px}h1{font-size:19px}
}
@media print{.side,.topo,.alca-filtros,.filtros-wrap,.pagina-acoes,.barra{display:none!important}.conteudo{padding:0}.card,.cartao{border:0;padding:0}}

/* Alertas de obra (Início) */
.alertas-cab{display:flex;justify-content:space-between;align-items:center;gap:8px}
.alerta{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--border);border-left:5px solid var(--muted);border-radius:6px;padding:8px 10px;margin-bottom:6px;background:#fff}
.alerta-icone{font-size:18px;line-height:1}.alerta-texto{flex:1;min-width:0}.alerta-texto small{display:block}

/* Câmeras */
.cam-foto img{max-width:100%;max-height:75vh}
.cam-live{width:100%;aspect-ratio:16/9;border:0;background:#000}
.cam-galeria{display:flex;flex-wrap:wrap;gap:8px}.cam-galeria a{display:flex;flex-direction:column;align-items:center;gap:2px;text-decoration:none}.cam-galeria img{border-radius:4px;border:1px solid var(--border);height:auto}
.cam-antes-depois{position:relative;overflow:hidden;max-width:960px}.cam-antes-depois img{display:block;width:100%;height:auto}.cam-antes-depois img.topo-img{position:absolute;top:0;left:0;height:100%}
.cam-legenda{display:flex;justify-content:space-between;gap:8px;max-width:960px}
/* ---- Fase 1: editores, galeria, mensagens ---- */
.abas-internas{margin:4px 0 10px}.abas-internas .aba:disabled{opacity:.45;cursor:default}
.editor-rodape{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.editor-rodape .espaco{flex:1}
.editor-cab{color:var(--muted);font-size:11px;margin:-6px 0 8px}
.menu-flutuante{position:relative;display:inline-block}.menu-flutuante .itens{position:absolute;bottom:100%;left:0;background:#fff;border:1px solid var(--border);border-radius:6px;box-shadow:0 4px 14px rgba(0,0,0,.12);min-width:220px;z-index:30;padding:4px}
.menu-flutuante .itens button{display:block;width:100%;text-align:left;background:none;border:0;padding:7px 10px;cursor:pointer;border-radius:4px}.menu-flutuante .itens button:hover{background:#F0F3F7}
.colunas{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px}
.lista-check{display:flex;flex-direction:column;gap:2px}.lista-check label{display:flex;align-items:center;gap:6px;font-size:13px}.lista-check .fora-padrao{color:var(--danger)}
.msg-lista{display:flex;flex-direction:column;gap:6px}
.msg{border:1px solid var(--border);border-left:4px solid var(--primary);border-radius:6px;padding:8px 10px;background:#fff}.msg .cab{display:flex;gap:8px;align-items:center;font-size:11px;color:var(--muted);margin-bottom:4px;flex-wrap:wrap}.msg .cab b{color:var(--text)}.msg .texto{white-space:pre-wrap}.msg.cliente{border-left-color:var(--ok)}
.galeria{display:flex;flex-wrap:wrap;gap:10px}
.pasta,.miniatura{border:1px solid var(--border);border-radius:8px;background:#fff;padding:8px;width:170px;display:flex;flex-direction:column;gap:4px;font-size:12px}
.pasta{cursor:pointer}.pasta:hover{background:#F7F9FC}.pasta .ico{font-size:30px;color:var(--accent)}.pasta b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.miniatura img{width:100%;height:110px;object-fit:cover;border-radius:4px;background:#EEF2F7}.miniatura .arq{height:110px;display:flex;align-items:center;justify-content:center;font-size:34px;background:#EEF2F7;border-radius:4px}
.miniatura .nome{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.miniatura input{font-size:11px;padding:3px 6px}
.acoes-mini{display:flex;gap:2px;justify-content:flex-end}.acoes-mini .link{padding:2px 4px;font-size:13px}
.caminho{display:flex;gap:8px;align-items:center;margin-bottom:8px;font-weight:600;color:var(--primary)}
.estrelas{color:var(--accent);letter-spacing:1px}
.contador{font-size:11px;color:var(--muted);text-align:right}
.tag{display:inline-block;padding:1px 8px;border-radius:10px;background:#EEF2F7;color:var(--muted);font-size:11px}.tag.ok{background:#D9F2D0;color:var(--ok)}.tag.danger{background:#F8D7D3;color:var(--danger)}
.dias-exp{display:flex;gap:10px;flex-wrap:wrap}
textarea{min-height:80px;resize:vertical}
@media (max-width:768px){.colunas{grid-template-columns:1fr}.pasta,.miniatura{width:calc(50% - 5px)}}

.texto-contrato{white-space:pre-wrap;font-family:Georgia,"Times New Roman",serif;font-size:13px;line-height:1.55;background:#fff;border:1px solid var(--border);border-radius:6px;padding:16px 20px;max-height:520px;overflow:auto}
.grafico-evf{display:flex;align-items:flex-start;gap:2px;height:96px;padding:4px 0;border-bottom:1px solid var(--border);overflow-x:auto}.barra-evf{display:flex;flex-direction:column;align-items:center;flex:1 0 8px;min-width:8px}.barra-evf .haste{width:100%;background:var(--ok);border-radius:2px 2px 0 0}.barra-evf.neg .haste{background:var(--danger)}.barra-evf span{font-size:9px;color:var(--muted);height:12px}.kpi-evf td:first-child{font-weight:600}
.valores{display:grid;grid-template-columns:300px 1fr;gap:12px}.arvore-fases .no-fase{display:flex;justify-content:space-between;gap:8px;width:100%;text-align:left;background:#fff;border:1px solid var(--border);border-radius:6px;padding:6px 8px;margin-bottom:4px;cursor:pointer;font-size:12px}.arvore-fases .no-fase.sub{margin-left:14px;width:calc(100% - 14px)}.arvore-fases .no-fase.sel{border-color:var(--primary);background:#EEF2F7}.arvore-fases .no-fase b{white-space:nowrap}.cartao-servico{border:1px solid var(--border);border-radius:8px;padding:8px 10px;margin-bottom:8px;background:#fff}.faixa-abc{display:inline-block;min-width:22px;text-align:center;color:#fff;font-weight:700;border-radius:4px;padding:1px 6px}.arvore-base details{margin:4px 0}.arvore-base summary{cursor:pointer;padding:3px 0}.item-base{display:block;margin-left:24px}.lista-simples{margin:4px 0 0 18px;padding:0}@media (max-width:900px){.valores{grid-template-columns:1fr}}

/* Fase 2c — acompanhamento do orçamento: Gantt, grades de períodos e modo compras */
.grade-cronograma td,.grade-periodos td{vertical-align:middle}
.grade-cronograma input[type=date]{width:140px}
.gantt-cab{text-align:left}.gantt-meses{display:flex;gap:16px;font-size:11px;color:var(--muted);white-space:nowrap}
.gantt-cel{padding:2px 8px!important;max-width:none!important}
.gantt{position:relative;height:18px;background:#F4F6F9;border-radius:3px;overflow:hidden;min-width:60px}
.gantt-barra{position:absolute;top:3px;height:12px;border-radius:3px;background:#5B8DEF}
.gantt-barra.gantt-fase{background:#E8972E}
.grade-periodos input[type=number]{width:96px;text-align:right}
.grade-periodos tr.concluir th{font-weight:normal;font-size:11px;position:sticky;top:30px}
table.grade tr.f td{font-weight:600;background:#F7F8FA}
.grade-periodos td:first-child,.grade-periodos th:first-child{min-width:260px;white-space:normal}
.grade-periodos tr.concluir label.radio{font-size:11px;white-space:nowrap}

/* Fase 3a — Financeiro: legenda da grade de documentos e menus suspensos da barra */
table.grade tr.divergente td{color:#C0392B}
table.grade tr.previsao td{font-weight:600}
table.grade tr.pre-lancado td{color:#E8972E}
.menu-ancora{position:relative;display:inline-block}
.menu-ancora .menu-flutuante{position:absolute;top:100%;left:0;z-index:30;min-width:200px;background:#fff;border:1px solid var(--border);border-radius:6px;box-shadow:0 6px 18px rgba(0,0,0,.12);padding:6px;display:flex;flex-direction:column;align-items:stretch}
.menu-ancora .menu-flutuante .link{text-align:left;padding:6px 8px}
.grade-parcelas input[type=number]{width:96px;text-align:right}.grade-parcelas select{min-width:120px}.grade-parcelas td{white-space:nowrap}
