/*
  RDOOne — Impressão do Planejamento da obra (ETAPA 34.12; reescrito na ETAPA 34.12.1 — correção
  estrutural)

  MUDANÇA DE ARQUITETURA (diagnóstico completo no plano da etapa): a versão anterior tentava imprimir a
  MESMA árvore de tela, só liberando overflow/zoom via CSS — insuficiente para o Gantt, que é um único
  <svg> monolítico dentro de um flex row com dois filhos altos, algo que nenhum navegador pagina de forma
  confiável (daí o cabeçalho vazando, as áreas vazias e as quebras inconsistentes relatadas). Agora a
  impressão é uma árvore de DOM PRÓPRIA e independente (TarefasImpressao.razor e seus dois filhos,
  TarefasTabelaImpressao/TarefasGanttImpressao — ver esses arquivos), paginada em C# ANTES de renderizar
  (não mais medida do DOM depois). Este arquivo faz só duas coisas: (a) esconde o chrome da aplicação e a
  tela normal do Planejamento (nada de interativo nunca aparece impresso) e (b) mostra a árvore de
  impressão, cujo próprio HTML/CSS interno já é o documento pronto — nenhuma medição/zoom/JS de geometria
  aqui, essa etapa moveu esse cálculo inteiro para C# (ver as constantes/métodos static em
  TarefasGanttImpressao.razor).

  Cabeçalho/rodapé nativo do navegador (o vazamento de "Painel de Conformidade..." reportado): NÃO é algo
  que CSS consiga esconder — é o cabeçalho/rodapé de impressão do PRÓPRIO navegador (data/título/página),
  fora do DOM da página, controlado por uma preferência do navegador ("Cabeçalhos e rodapés" no diálogo
  de impressão). TarefasSecao.razor.js corrige o CONTEÚDO que vazava (document.title) antes de chamar
  window.print() — a existência do próprio cabeçalho/rodapé nativo (se o usuário não desmarcar aquela
  opção) está fora do alcance de qualquer CSS/JS desta aplicação; disclosado no relatório final.

  Cabeçalho/rodapé PRÓPRIOS (item 2/3 do pedido de correção): reaproveita o bloco de identificação da obra
  já existente em ObraDetalhe.razor (Nome/Código/Status) — zero parâmetro/dado novo em TarefasSecao — só
  ganha position:fixed aqui para repetir em toda página, e duas linhas de texto (RDOOne/PLANEJAMENTO DA
  OBRA) que já existiam escondidas na tela. O rodapé "Gerado pela plataforma RDOOne" é um bloco novo e
  pequeno, também position:fixed. "Página X / Y" customizado não é possível de garantir só com CSS/JS sem
  back-end de PDF (a spec de "paged media" com contadores não é suportada por Chrome/Edge) — depende do
  rodapé nativo do navegador para o número de página (mesmo fallback já explicado acima, disclosado no
  relatório).
*/

@media print {
    /* ---------- Chrome global da aplicação — nunca aparece impresso, em NENHUM estado (normal ou Tela
       Inteira) — CSS puro, não depende de TelaInteiraState (que só existe para cobrir a TELA). ---------- */
    .app-sidebar,
    .mud-appbar-fixed-top,
    #blazor-error-ui,
    .module-sidebar-col {
        display: none !important;
    }

    .mud-main-content {
        margin: 0 !important;
        padding-top: 0 !important;
    }

    .app-content-container {
        padding: 0 !important;
    }

    /* ---------- ETAPA 34.12.4.2 — causa raiz da discrepância entre páginas lógicas (.tg-imp-pagina,
       cada uma com break-after:page) e páginas físicas de verdade (23 lógicas viravam só ~10 físicas,
       com linhas de páginas diferentes concatenadas na mesma folha, e uma página final quase vazia
       sobrando no fim): o único ancestral de .tarefas-impressao que é flex/grid é ESTE MudGrid
       (confirmado por diagnóstico — .mud-grid-item/.module-content-col já é display:block, não precisa
       de regra própria). Um ancestral flex/grid, mesmo vários níveis acima, é o bastante para o Chromium
       não respeitar break-before/break-after/break-inside de forma confiável durante a impressão —
       limitação documentada de fragmentação CSS dentro de contexto flex/grid, não um bug deste app.
       Como .module-sidebar-col já está oculta acima, só sobra .module-content-col visível — trocar este
       MudGrid para display:block na impressão não muda a largura/posição de nada, só remove o contexto
       flex que impedia as quebras de página explícitas de funcionar. Escopado só ao MudGrid que contém
       a árvore de impressão (:has), nunca a todo .mud-grid do app. ---------- */
    .mud-grid:has(.tarefas-impressao) {
        display: block !important;
    }

    /* ---------- Toda a tela normal do Planejamento (toolbar, indicadores interativos, Tabela/Gantt
       editáveis, Tela Inteira) nunca aparece impressa — a impressão é inteiramente a árvore
       .tarefas-impressao (abaixo). Ver TarefasSecao.razor/ClasseContainerPlanejamento. ---------- */
    .tarefas-tela-normal {
        display: none !important;
    }

    /* ---------- Cabeçalho repetido em toda página: o bloco de identificação da obra (ObraDetalhe.razor)
       vira fixo no topo; as duas linhas de marca, escondidas na tela, aparecem aqui. @page reserva o
       espaço no topo de cada folha para este cabeçalho nunca sobrepor o conteúdo. ---------- */
    .tarefas-imprimir-cabecalho {
        display: flex !important;
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        background: #fff;
        padding-bottom: 6px;
        margin: 0 !important;
        border-bottom: 2px solid #0B2038;
    }

    .tarefas-imprimir-marca {
        display: block;
        font-size: 11px;
        font-weight: 700;
        letter-spacing: 1px;
        text-transform: uppercase;
        color: #0B2038;
    }

    .tarefas-imprimir-rotulo {
        display: block;
        font-size: 10px;
        text-transform: uppercase;
        letter-spacing: 0.5px;
        opacity: 0.7;
        margin-bottom: 2px;
    }

    /* ---------- Rodapé próprio, repete em toda página (position:fixed). "Página X/Y" fica a cargo do
       rodapé nativo do navegador — ver comentário no topo do arquivo. ---------- */
    .tarefas-imprimir-rodape {
        display: block !important;
        position: fixed;
        bottom: 0;
        left: 0;
        right: 0;
        text-align: center;
        font-size: 9px;
        opacity: 0.6;
        background: #fff;
    }

    /* ETAPA 34.12.3 — a margem @page NÃO é mais declarada aqui. Ela precisa mudar por impressão (tamanho
       de papel/orientação escolhidos no diálogo), então só existe UMA fonte de verdade: o <style> que
       TarefasSecao.razor.js injeta a cada impressão (função imprimir()) — inclusive a margem superior/
       inferior que reserva espaço para o cabeçalho/rodapé fixos acima. Uma segunda regra @page aqui
       (como havia antes) É SEMPRE SOBRESCRITA pela injetada por último no <head> — causa raiz real de a
       margem assimétrica pensada para o cabeçalho nunca ter tido efeito, e de TarefasGanttImpressao.razor
       calcular a paginação vertical com uma margem diferente da que a folha realmente usava. As margens
       usadas pelo JS têm que continuar batendo com MargemSuperiorMm/MargemInferiorMm/MargemMm em
       TarefasGanttImpressao.razor — mesmo princípio de AlturaLinha já ter que bater entre os dois
       arquivos do Gantt de tela. */
}

.tarefas-imprimir-marca,
.tarefas-imprimir-rotulo,
.tarefas-imprimir-rodape {
    display: none;
}

/* ---------- Árvore de impressão (TarefasImpressao + TarefasTabelaImpressao/TarefasGanttImpressao) —
   escondida na tela o tempo todo (nunca aparece nem por um instante entre confirmar o diálogo e o
   navegador efetivamente abrir a impressão), visível só em @media print. ---------- */
.tarefas-impressao {
    display: none;
}

@media print {
    /* ETAPA 34.12.6 — causa raiz confirmada via medição real (Playwright + geração de PDF de verdade,
       não simulação): o cabeçalho fixo (.tarefas-imprimir-cabecalho) mede 59px de altura real, mas
       "position:fixed" NUNCA reserva espaço no fluxo normal do documento — o primeiro conteúdo de
       .tarefas-impressao (indicadores ou a própria tabela/Gantt) começava também em top:0, sobrepondo
       exatamente os 59px do cabeçalho (visível como "TRABALHO/CUSTOS/TAREFAS" atravessando o cabeçalho
       na 1ª página). O @page margin-top (28mm) resolve isso só na borda FÍSICA da folha entre páginas;
       não empurra o conteúdo em FLUXO NORMAL para baixo do cabeçalho fixo, que ocupa a MESMA área de
       conteúdo. 60px (arredondado de 59px medidos) é fixo porque o cabeçalho não muda de tamanho com
       papel/orientação (fontes em px). */
    .tarefas-impressao {
        display: block;
        padding-top: 60px;
    }

    .tg-imp-parte-titulo {
        font-size: 14px;
        font-weight: 700;
        margin: 4px 0 10px;
    }

    /* Item 9 do pedido de correção — "Tabela + Gantt" nunca sobrepõe: Parte 2 sempre começa numa folha
       nova. */
    .tg-imp-nova-parte {
        break-before: page;
    }

    /* ---------- Indicadores (item 11) — mesmos valores de ResumoCronograma, marcação própria e simples
       (HTML puro, não MudBlazor) só porque este bloco pertence à árvore de impressão, não à de tela. ---------- */
    .tg-imp-indicadores {
        display: flex;
        flex-wrap: wrap;
        gap: 10px;
        margin-bottom: 10px;
    }

    .tg-imp-indicadores > div {
        border: 1px solid var(--color-border, #E5E7EB);
        border-radius: 4px;
        padding: 4px 8px;
        min-width: 90px;
    }

    .tg-imp-indicador-rotulo {
        display: block;
        font-size: 9px;
        text-transform: uppercase;
        letter-spacing: 0.3px;
        opacity: 0.6;
    }

    .tg-imp-indicador-valor {
        display: block;
        font-size: 12px;
        font-weight: 600;
    }

    /* ---------- Tabela de impressão (item 4) — <thead> repete nativamente em toda página (técnica
       padrão, confiável, ao contrário do SVG monolítico do Gantt de tela que causava o bug original). ---------- */
    .tg-imp-tabela {
        width: 100%;
        border-collapse: collapse;
        font-size: 10px;
    }

    .tg-imp-tabela thead {
        display: table-header-group;
    }

    .tg-imp-tabela th,
    .tg-imp-tabela td {
        border: 1px solid var(--color-border, #E5E7EB);
        padding: 3px 6px;
        text-align: left;
    }

    .tg-imp-tabela tr {
        break-inside: avoid;
    }

    .tg-imp-linha-resumo td {
        font-weight: 700;
        background: var(--color-background, #F8FAFC);
    }

    /* ---------- Gantt de impressão (item 5/6) — cada .tg-imp-pagina é o conteúdo de UMA folha inteira,
       com fronteira EXPLÍCITA (break-after:page) decidida pela paginação em C#, nunca pelo navegador
       cortando um SVG atômico onde calhar (causa raiz do bug original). ---------- */
    /* break-inside:avoid — .tg-imp-corpo é display:flex (linha abaixo) e cada .tg-linha (reaproveitada
       de tarefas-gantt.css) também é flex; um item de flex/grid não fragmenta de forma confiável no
       Chromium (mesma limitação documentada acima para .mud-grid, aqui aplicada ao pai DIRETO do <svg>
       da timeline). Sem esta regra, se a página não couber por uma margem mínima (diferença de subpixel
       entre o pipeline de impressão real/"Salvar como PDF" e qualquer medição), o <svg> — atômico, não
       fragmentável — pula inteiro para a página seguinte enquanto as linhas do painel (que quebram
       normalmente, por serem blocos comuns) ficam para trás, produzindo o defeito relatado (painel numa
       folha, barras na seguinte). Com break-inside:avoid, se a página não couber, ela inteira move para a
       próxima folha — nunca fragmenta internamente painel/timeline de forma dessincronizada. */
    .tg-imp-pagina {
        break-after: page;
        break-inside: avoid;
    }

    /* ETAPA 34.12.4.3 — causa raiz da página final vazia: ":last-child" exige que o elemento seja
       LITERALMENTE o último filho do pai — mas o último filho de .tarefas-impressao é sempre o rodapé
       (.tarefas-imprimir-rodape, renderizado depois de <TarefasGanttImpressao> em TarefasImpressao.razor),
       nunca um .tg-imp-pagina. ":last-child" nunca correspondia a NADA, então TODA página (inclusive a
       última de verdade) ficava com "break-after:page", forçando uma página extra e vazia depois dela.
       ":has()" verifica "não existe nenhum .tg-imp-pagina IRMÃO POSTERIOR" — identifica a última página
       de verdade independente do que vem depois dela (rodapé ou qualquer outra coisa), então continua
       funcionando tanto para "Somente Gantt" quanto para "Tabela + Gantt". */
    .tg-imp-pagina:not(:has(~ .tg-imp-pagina)) {
        break-after: auto;
    }

    .tg-imp-subcabecalho {
        font-size: 11px;
        font-weight: 600;
        margin-bottom: 4px;
    }

    /* Painel de tarefas (esquerda) + timeline (direita) — mesma composição visual da tela (item 2 do
       pedido: "não confundir o painel esquerdo do Gantt com a Tabela"), largura do painel igual à da
       tela (LarguraPainelPx em TarefasGanttImpressao.razor) só por consistência visual. */
    .tg-imp-corpo {
        display: flex;
        align-items: flex-start;
    }

    .tg-imp-painel {
        width: 380px;
        min-width: 380px;
        border-right: 1px solid var(--color-border, #E5E7EB);
    }

    .tg-imp-painel-cabecalho {
        display: flex;
        font-size: 9px;
        font-weight: 700;
        text-transform: uppercase;
        border-bottom: 1px solid var(--color-border, #E5E7EB);
    }

    /* ETAPA 34.12.5 — causa raiz do Gantt impresso parecer "uma janela": este "overflow:hidden" era um
       resquício defensivo copiado do espírito do Gantt de TELA (que É uma janela de propósito, com
       scroll — ver .tg-timeline/.tg-timeline-scroll em tarefas-gantt.css), mesmo esta classe sendo
       exclusiva da impressão. A paginação em TarefasGanttImpressao.razor (LinhasPorPagina/DiasPorPagina)
       já garante, por cálculo, que o SVG de cada página cabe na largura/altura disponíveis — não existe
       necessidade nenhuma de recortar nada aqui; "escondendo o que não coubesse" só mascararia um erro de
       cálculo em vez de deixá-lo visível. Removido: a timeline agora cresce como um bloco de documento
       comum (mesmo princípio que já fazia TarefasTabelaImpressao funcionar), sem viewport interno. */
    .tg-imp-timeline {
        flex: 1 1 auto;
    }

    .tg-imp-timeline-cabecalho {
        position: relative;
        height: 22px;
        font-size: 10px;
    }

    /* ETAPA 34.12.5, itens 2/6 do pedido — declaração EXPLÍCITA (não muda nada de fato, já eram os
       valores padrão do CSS por nenhum destes seletores ter height/overflow restritivo antes) de que
       nenhum container da árvore de impressão do Gantt é uma janela: cresce com o conteúdo, sem cortar
       nada, deixando a paginação real (quebra entre folhas físicas) inteiramente a cargo do navegador —
       o mesmo princípio que já funciona para TarefasTabelaImpressao. */
    .tg-imp-pagina,
    .tg-imp-corpo,
    .tg-imp-painel,
    .tg-imp-timeline,
    svg.tg-timeline-corpo {
        height: auto !important;
        max-height: none !important;
        overflow: visible !important;
    }
}
