/* ==========================================================
   OBRAS E CAMPO (onda 2, 02/10/2026)
   Obras, planejamento, propostas e orçamento, medições, aditivos, diário de obra, equipamentos e estoque.
   Carregado depois de style.css. Só tokens do :root; os componentes da base (botões, selos, abas,
   tabelas, campos, avisos, janelas) não mudam de aparência aqui. Como usar: PADRAO-VISUAL.md, seção 6.
   ========================================================== */

/* ---------- Troca de obra no cabeçalho de documento ----------
   O cartão (.doc-header, cabecalhoDocumento de ui-padrao.js) fica no bloco "Base comum" de style.css. */
.lista-aviso a{color:var(--link);font-weight:600}
.trocar-obra{display:inline-flex;min-width:0}
.trocar-obra select{min-width:0;max-width:300px;margin:0}
@media(max-width:600px){
 .trocar-obra,.trocar-obra select{width:100%;max-width:none}
}

/* ---------- Janelas dos módulos (documento-ui.js: abrirJanelaModulo) ----------
   Larguras pela base (.janela-p/m/g). Cabeçalho e rodapé ficam à vista quando o corpo rola. */
.janela-modulo{max-height:calc(100vh - 32px);overflow:auto;overscroll-behavior:contain}
.janela-modulo>.modal-head{position:sticky;top:0;z-index:3;background:var(--surface)}
.janela-modulo>.form-actions,.janela-modulo>form>.form-actions{position:sticky;bottom:0;z-index:3;background:var(--surface-2)}
.janela-modulo .form-body>h3{margin:24px 0 12px}
.janela-modulo .form-body>:first-child{margin-top:0}
.janela-contexto{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px 20px;margin:0 0 20px;padding:12px 16px;border-radius:var(--r-md);background:var(--surface-2);font-size:var(--fs-14)}
.janela-contexto span{color:var(--muted)}
.janela-total{display:flex;justify-content:flex-end;align-items:baseline;gap:12px;margin:16px 0 0}
.janela-total small{color:var(--muted);font-size:var(--fs-13)}
/* Ação de perigo recolhida (cancelar boletim/aditivo), separada do fluxo principal. */
.zona-perigo{margin-top:24px;border:1px solid var(--perigo-bg);border-radius:var(--r-md);padding:0 16px}
.zona-perigo>summary{padding:12px 0;color:var(--perigo);font-weight:600;cursor:pointer}
.zona-perigo[open]{padding-bottom:16px}
.zona-perigo .field{margin-bottom:12px}

/* ---------- Detalhe da obra ---------- */
/* Topo de aba com contagem à esquerda e uma ação secundária à direita (Diários, Equipe). */
.aba-topo{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;margin:0 0 16px}
.aba-topo>p{margin:0}
/* Medições e aditivos na aba Contrato: atalhos com o resumo de cada um. */
.obra-atalhos{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}
.obra-atalho{display:flex;flex-direction:column;gap:4px;padding:16px;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);color:var(--ink);text-decoration:none}
.obra-atalho:hover{border-color:var(--line-strong);background:var(--surface-2)}
.obra-atalho strong{color:var(--link);font-size:var(--fs-14)}
.obra-atalho span{color:var(--muted);font-size:var(--fs-13)}
/* Mais ações: vínculos que impedem a exclusão. */
.lista-vinculos{list-style:none;margin:12px 0 0;padding:0;border:1px solid var(--line);border-radius:var(--r-md)}
.lista-vinculos li{display:flex;justify-content:space-between;gap:16px;padding:10px 16px;border-top:1px solid var(--line);font-size:var(--fs-14)}
.lista-vinculos li:first-child{border-top:0}
.lista-vinculos b{font-variant-numeric:tabular-nums}

/* ---------- Diário de obra ---------- */
.rdo-busca-efetivo{margin:0 0 8px}
.rdo-busca-efetivo input{width:100%;max-width:420px;margin:0}
/* Efetivo: grade fixa (caixa, nome e função, horas) com a linha inteira de 56 px, também no celular. */
.rdo-form .member-pick{display:grid;grid-template-columns:24px minmax(0,1fr) auto;align-items:center;gap:4px 12px;min-height:56px;margin:0;padding:4px 0;border-bottom:1px solid var(--line);font-size:var(--fs-14)}
.rdo-form .member-pick>input[type=checkbox]{width:22px;height:22px;min-height:0;margin:0;accent-color:var(--orange)}
.rdo-form .member-pick>label{display:flex;flex-direction:column;justify-content:center;min-width:0;min-height:48px;cursor:pointer;color:var(--ink);font-size:var(--fs-14);font-weight:600}
.rdo-form .member-pick>label small{color:var(--muted);font-size:var(--fs-12);font-weight:400}
.rdo-form .member-pick>label .tag{margin-left:6px}
.rdo-form .member-horas{display:flex;align-items:center;gap:6px;color:var(--muted)}
.rdo-form .member-horas input{width:76px;margin:0;text-align:right;font-variant-numeric:tabular-nums}
.rdo-form .crew-titulo{margin:20px 0 4px;padding:0;border:0;font-size:var(--fs-12)}
/* Seções dos formulários do grupo: só a barra laranja do .standard-form, sem a linha de baixo do .subhead. */
:is(.rdo-form,.obra-form,.equip-form,.proposta-form) .subhead{padding-bottom:0;border-bottom:0}
/* Quantidade executada por atividade: item repetível em caixa cinza (atividade, quantidade, remover). */
[data-rdo-medicoes]{margin-top:32px}
.rdo-quantidade{display:grid;grid-template-columns:minmax(0,1fr) 168px 44px;gap:12px;align-items:end;margin:0 0 12px;padding:16px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2)}
.rdo-quantidade input{text-align:right;font-variant-numeric:tabular-nums}
.rdo-quantidade .btn-icon{color:var(--perigo)}
@media(max-width:600px){
 .rdo-quantidade{grid-template-columns:minmax(0,1fr) 44px}
 .rdo-quantidade>label:first-child{grid-column:1/-1}
}
/* Fotos do dia no detalhe: galeria de miniaturas. */
.rdo-fotos .file-grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px}
.rdo-fotos .file-open{flex-direction:column;align-items:stretch;gap:8px;padding:8px}
.rdo-fotos .file-thumb{width:100%;height:120px;border-radius:var(--r-md)}
@media(max-width:600px){.rdo-fotos .file-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* ---------- Peças comuns das telas do grupo ---------- */
/* Ajuda recolhida ("Como o avanço é calculado"): explicação longa fora do caminho. */
.ajuda-recolhida{margin:8px 0 0;color:var(--muted);font-size:var(--fs-13)}
.ajuda-recolhida>summary{width:max-content;max-width:100%;cursor:pointer;color:var(--link);font-weight:600}
.ajuda-recolhida>p{max-width:80ch;margin:8px 0 0;line-height:1.5}
/* Métricas que se ajustam à quantidade de cartões (3 ou 4), sem coluna vazia. */
.metrics.metricas-obra{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}
.metrics.metricas-obra strong{font-size:var(--fs-22)}
/* Número do documento que abre a conferência: link, sem cara de botão. */
.text-button.link-documento{padding:0;min-height:0;font-weight:600;white-space:nowrap}
.linha-acoes{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}
.detail-grid.detail-grid--sem-linha{padding-top:0;border-bottom:0}
@media(max-width:850px){table.tabela-cartoes td.cartao-acao .linha-acoes{justify-content:stretch}table.tabela-cartoes td.cartao-acao .linha-acoes>*{flex:1 1 auto}}
/* Formulário dentro da janela: o rodapé é o da janela, sem a margem do formulário de página. */
.janela-modulo .standard-form>.form-actions{margin-top:0;border-radius:0 0 var(--r-lg) var(--r-lg)}
.janela-modulo table input{margin:0}
.med-itens .quantity-unit-field{max-width:220px;margin-left:auto}
.med-itens .quantity-unit-field input{text-align:right;font-variant-numeric:tabular-nums}
.med-itens tfoot th{text-align:left}
.med-itens td small{display:block;margin-top:4px;color:var(--muted);font-size:var(--fs-12)}
/* Itens do aditivo: caixa cinza por item, como os itens repetíveis do .standard-form. */
.aditivo-itens{margin:20px 0}
.med-itens tfoot :is(th,td){background:var(--surface-2)}
/* Botão com ícone e texto nas telas do grupo: o ícone fica ao lado do rótulo, com espaço. */
:is(.janela-modulo,.rdo-form,.aditivo-itens,.orcamento-editor,.doc-header) button:has(>.icone){display:inline-flex;align-items:center;justify-content:center;gap:8px}
/* Unidade na planilha e na montagem: etiqueta neutra (laranja é marca e ação). */
.orc-unidade-linha{background:var(--surface-3);border-color:var(--line);color:var(--ink-2);border-radius:var(--r-sm)}
.aditivo-itens h3{margin:24px 0 8px}
.aditivo-item{margin:0 0 12px;padding:16px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2)}
.aditivo-item-topo{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:0 0 12px}
.aditivo-item .form-grid{margin-top:12px}
.aditivo-total{margin:12px 0 0;text-align:right}
/* Aviso de erro vazio não aparece. */
#proposta-erro:empty,[data-status-error]:empty,[data-revision-message]:empty{display:none}
/* Módulo que põe o rodapé dentro do corpo (composição, exportação): o rodapé encosta nas bordas, como os outros. */
.janela-modulo .form-body>.form-actions:last-child{position:sticky;bottom:0;z-index:3;margin:24px -24px -24px;padding:16px 24px;background:var(--surface-2);border-radius:0 0 var(--r-lg) var(--r-lg)}
@media(max-width:600px){.janela-modulo .form-body>.form-actions:last-child{margin:20px -20px -20px;padding:16px 20px}}
/* "Mais ações" das etapas do orçamento e da montagem do planejamento: maisAcoes() ("Base comum" de style.css).
   A etapa recorta o conteúdo (cantos arredondados); com a lista aberta, deixa a lista sair do cartão. */
.orcamento-editor .orcamento-etapa:has(.mais-acoes[open]){overflow:visible}
.icone-cima{transform:rotate(180deg)}
.orc-icone-perigo{color:var(--perigo)}

/* ---------- Propostas e orçamento ---------- */
/* O grid do orçamento não estica além da tela: só a planilha rola, dentro do .table-wrap. */
.orc-draft,.proposal-budget-panel{grid-template-columns:minmax(0,1fr)}
.orc-draft>*,.proposal-budget-panel>*{min-width:0}
/* Abas da proposta no rodapé do cartão. */
.preserved-header>.proposal-content-tabs{margin:0;padding:0 8px;border:0;border-top:1px solid var(--line);border-radius:0;background:transparent}
.preserved-header .back-link{display:flex;width:max-content}
.doc-meta-proposta{color:var(--ink-2)}
/* Ações do item e da etapa: ícones de 36 px, sem borda. */
.orcamento-editor .orc-icone.btn-icon{width:32px;height:32px;min-height:32px;min-width:0;padding:0;border:0;font-size:inherit}
.orcamento-editor .orcamento-acoes-item{display:flex;flex-wrap:nowrap;gap:2px;justify-content:flex-end}
/* Larguras das colunas da planilha e da composição (antes inline). */
.orcamento-planilha .orc-col-un{width:70px}.orcamento-planilha .orc-col-qtd{width:110px}.orcamento-planilha .orc-col-custo{width:112px}.orcamento-planilha .orc-col-pct{width:85px}.orcamento-planilha .orc-col-preco{width:120px}.orcamento-planilha .orc-col-total{width:125px}.orcamento-planilha .orc-col-acoes{width:156px}
.orc-comp-table .comp-col-categoria{width:160px}.orc-comp-table .comp-col-un{width:90px}.orc-comp-table .comp-col-coef{width:155px}.orc-comp-table .comp-col-custo{width:150px}.orc-comp-table .comp-col-subtotal{width:135px}.orc-comp-table .comp-col-acoes{width:52px}
/* Etapas da revisão preservada: recuo por nível na variável --nivel. */
.revisao-etapa{margin-left:calc(var(--nivel,0)*16px)}
.proposta-form .proposta-cliente>.text-button{min-height:0;padding:4px 0}
.propostas-lista{min-width:0}

/* ---------- Estoque ---------- */
.estoque-origem{margin-top:20px;padding:4px 0;border-top:1px solid var(--line)}
.estoque-origem>summary{padding:12px 0;cursor:pointer;color:var(--link);font-weight:600;font-size:var(--fs-14)}
.estoque-origem .form-grid{margin-top:8px}
.estoque-deposito{display:flex;flex-wrap:wrap;align-items:flex-end;gap:8px;margin:0 0 16px}
.estoque-deposito .field{flex:1 1 320px;max-width:520px;margin:0}

/* Texto só para leitor de tela no cabeçalho de tabela larga: fica no fluxo (1 px), para não escapar
   da rolagem da tabela e alargar a página no celular (o .table-wrap não é posicionado). */
:is(.plan-table,.plan-build-table,.orcamento-planilha,.tabela-cartoes,.med-itens,.plan-entries,.revisoes-lista,.orc-comp-table) th>.sr-only{position:static;display:block;width:1px;height:1px;overflow:hidden}

/* ---------- Listas ---------- */
.lista-aviso{margin:0 0 20px}
.data-table td small{display:block;margin-top:2px;color:var(--muted);font-size:var(--fs-12);font-weight:400}
.data-table td .descricao{font-weight:600}
