/* ==========================================================================
   Jamil Imoveis · Apresentacao Institucional · FOLHA DE IMPRESSAO (PDF)
   Carregado so em media=print. Reaproveita o mesmo HTML/conteudo do site
   (fonte unica), cada <section class="slide"> vira 1 pagina 1920x1080,
   full-bleed, sem scroll-scrub (estado final sempre visivel).
   ========================================================================== */
@page{
  size:1920px 1080px;
  margin:0;
}

@media print{
  html, body{
    margin:0; padding:0;
    width:1920px;
    background:var(--ameixa);
  }
  .skip-link, .site-mark{ display:none !important; }

  /* Gate de espaco vazio (REGRA 08 do caderno de arte, detector 2D): na tela
     o .wrap de 1240px faz sentido (coluna de leitura confortavel, scroll
     vertical). No canvas fixo 1920x1080 do PDF, essa mesma largura sobra
     margem lateral grande demais em cada pagina — reduz pra 1600px so em
     print, sem mexer na largura de leitura da tela. */
  .wrap{ max-width:1600px; }

  /* Reveal/scrub sempre no estado final em PDF · sem animacao, sem scroll */
  .reveal{ opacity:1 !important; transform:none !important; transition:none !important; }
  [data-scrub]{ height:auto !important; position:relative !important; }
  [data-scrub-stage]{ position:static !important; height:auto !important; overflow:visible !important; padding-block:0 !important; }
  .scrub-fade, .scrub-line{ opacity:1 !important; transform:none !important; }

  /* Fundo editorial (fotos reais atras de secoes de texto) — a imagem +
     overlay sao position:absolute/cover, print-safe por natureza (nao
     dependem do grid que tem o bug do Chromium comentado abaixo). O PDF e
     digital (1920x1080, visualizado em tela), entao mantem o mesmo overlay
     do site para ficar identico — nao e impressao em papel.

     PESO (correcao 06/11/2026, reprovacao do PDF v2): o CSS `filter`
     (grayscale/sepia/brightness/contrast) aplicado no <img> faz o Skia/PDF
     do Chromium rasterizar a secao inteira em bitmap por pagina — sozinho
     isso levava o PDF de ~3MB pra 19MB (9 paginas com .editorial-bg). Fix:
     esconde o <img> live em print e usa, no container, um background-image
     JA COM o grau de cor aplicado por Pillow offline (grayscale+sepia+
     brightness+contrast medios das receitas da tela, script em
     pdf-build/bake_editorial_bg.py) — mesmo efeito visual, zero
     rasterizacao extra. object-position de cada variante virou
     background-position idêntico. */
  /* visibility:hidden (nao display:none): preserva a caixa/posicao do <img>
     para o lazy-loading nativo (loading="lazy") continuar disparando antes
     do page.pdf() — com display:none o navegador nunca considera a imagem
     "na viewport" e o script trava esperando o onload que nunca vem. */
  .editorial-bg img{ visibility:hidden !important; }
  .editorial-bg{ background-size:cover; background-repeat:no-repeat; }
  .editorial-bg--boutique{ background-image:url("../img/sala-editorial-print.jpg"); background-position:22% 65%; }
  .editorial-bg--curadoria{ background-image:url("../img/varanda-editorial-print.jpg"); background-position:38% 30%; }
  .editorial-bg--equipe{ background-image:url("../img/varanda-editorial-print.jpg"); background-position:10% 30%; }
  .editorial-bg--objetivo{ background-image:url("../img/sala-editorial-print.jpg"); background-position:60% 65%; }
  .editorial-bg--tabela-slide{ background-image:url("../img/sala-editorial-print.jpg"); background-position:40% 65%; }
  .editorial-bg--passiva{ background-image:url("../img/varanda-editorial-print.jpg"); background-position:88% 30%; }
  .editorial-bg--ativa{ background-image:url("../img/sala-editorial-print.jpg"); background-position:15% 65%; }
  .editorial-bg--marketing{ background-image:url("../img/varanda-editorial-print.jpg"); background-position:55% 30%; }
  .editorial-bg--custo{ background-image:url("../img/varanda-editorial-print.jpg"); background-position:30% 30%; }
  .editorial-bg--contato{ background-image:url("../img/sala-editorial-print.jpg"); background-position:30% 65%; }

  .slide{
    width:1920px; height:1080px;
    margin:0; box-sizing:border-box;
    overflow:hidden;
    break-after:page; break-inside:avoid; page-break-after:always; page-break-inside:avoid;
    min-height:0;
    display:flex; flex-direction:column; justify-content:center;
    padding-block:0;
  }
  main > .slide:last-child{ break-after:auto; page-break-after:avoid; }

  /* ---- Capa ----
     Hero full-bleed (06/11/2026): a secao trocou de grid 2 colunas
     (.capa__grid/.capa__text/.capa__galeria, hoje inexistentes no HTML) para
     foto de fundo absoluta (.capa__bg) + bloco de texto ancorado embaixo-a-
     esquerda (.capa__content), igual a tela. Achado na geracao do PDF v2
     (06/11/2026): a regra generica `.slide` acima forca
     flex-direction:column + justify-content:center em TODA secao (bug de
     grid do Chromium/Skia print-to-pdf, mesma causa-raiz citada nos
     comentarios "mesmo bug" mais abaixo neste arquivo — display:grid numa
     coluna de altura EXATA igual a pagina faz o motor nao pintar o item
     irmao) — isso colidia com o flex row + align-items:flex-end da tela e
     jogava o bloco de texto pro canto errado, com .capa__headline ainda
     travado em 82px fixo (herdado do layout antigo de 2 colunas) estourando
     a largura da pagina. Reset explicito abaixo: volta pro row+flex-end da
     tela e devolve o controle do tamanho da headline pro clamp() da tela
     (que ja cabe em 1920px, max 4.7rem). */
  .slide--capa{
    min-height:0; height:1080px;
    display:flex !important; flex-direction:row !important;
    align-items:flex-end !important; justify-content:flex-start !important;
  }
  .capa__content{ width:100%; max-width:720px; }
  .capa__logo{ width:150px; }
  /* trava do Ken Burns (site-v3, 2a rodada): page.emulate_media ja manda
     reduced_motion=reduce no gerador (gerar_pdf_v3.py), o que desativa a
     @keyframes via media query no style.css — isto aqui e so cinto e
     suspensorio, igual ao resto deste arquivo. */
  .capa__bg img{ animation:none !important; transform:none !important; }

  /* ---- Boutique ---- */
  .slide--boutique{ padding:88px 120px; }
  .boutique__headline{ font-size:64px; max-width:21ch; margin-top:16px; }
  .boutique__atuacao{ margin:20px auto 0; max-width:44ch; font-size:19px; }
  /* mesmo bug de grid comentado acima (ver Capa): forca flex em vez de
     repeat(3,1fr), evita risco do mesmo bug em renders futuros mesmo quando
     este especifico saiu certo numa rodada de teste (bug intermitente). */
  .pilares{ display:flex !important; margin-top:44px; gap:44px; }
  .pilar{ flex:1 1 0; min-width:0; }
  .pilar__num{ font-size:42px; }
  .pilar__titulo{ font-size:21px; }
  .pilar__texto{ font-size:17px; }
  .boutique__fecho{ margin-top:36px; font-size:32px; }

  /* ---- Ambientes (carrossel editorial novo do site-v3, 06/11/2026) ----
     Sem JS de scroll-scrub em print (prefers-reduced-motion:reduce força o
     fallback "sem JS" do style.css — scrub-enabled nunca é adicionado), o que
     já é correto: cai no fallback .x-fade/.kb-fade opacity:1 (todo ambiente
     sempre visível, ver style.css linha ~454). O problema é só de LAYOUT: o
     fallback do site empilha os 4 ambientes em COLUNA (pensado pra scroll
     vertical de tela) — 4 fotos 4/5 empilhadas passam longe dos 1080px fixos
     da página e o `overflow:hidden` genérico do `.slide` cortaria os 2
     últimos ambientes. Reorganiza em 1 linha de 4 colunas (cabe tudo numa
     página só, mesmo raciocínio do `.equipe__grid`/`.pilares` acima). */
  .slide--ambientes{ padding:72px 120px; }
  .ambientes__headline{ font-size:48px; margin-top:12px; }
  .carrossel-scrub{ margin-top:32px; }
  .carrossel{ display:flex !important; gap:24px; }
  .carrossel__slide{
    display:flex !important; flex-direction:column !important;
    flex:1 1 0; min-width:0; margin-top:0 !important; gap:16px;
  }
  .carrossel__foto-wrap{ aspect-ratio:4/5; }
  .carrossel__texto{ max-width:none; }
  .carrossel__eyebrow{ font-size:13px; margin-bottom:8px; }
  .carrossel__titulo{ font-size:22px; max-width:none; margin-bottom:8px; }
  .carrossel__corpo{ font-size:14px; line-height:1.5; }
  .carrossel__contador{ display:none !important; }

  /* ---- Curadoria ---- */
  .slide--curadoria{ padding:88px 120px; }
  .curadoria__headline{ font-size:62px; margin-top:16px; }
  [data-scrub-stage] .wrap{ padding-inline:0; margin-top:24px; }
  /* mesmo bug de grid do capa__grid (comentario la em cima): aqui o motor de
     print aplica o breakpoint mobile (max-width:980px) do .diagrama/.timeline
     mesmo a pagina sendo 1920px, empilhando os nos e esticando a altura total
     da secao (estoura os 1080px e corta o topo). Forca flex, ignora a media
     query, mantem 1 linha como no desktop. */
  .diagrama{ display:flex !important; align-items:center; margin-bottom:56px; }
  .diagrama__node{ flex:1 1 0; min-width:0; }
  /* BUG achado na auditoria de 06/11/2026: a regra de tela do .diagrama__link
     tem width:100% (pensada pro grid-column da tela, onde o width:100% vale
     so a largura da propria celula). Em print, sem reset, o width:100% passa
     a valer 100% do container flex inteiro (1240px) para CADA um dos 2 links
     — com flex-shrink:0 eles nao cedem espaco, a linha inteira estoura bem
     alem dos 1920px e o 3o no (CORRETORES PARCEIROS) sai da pagina. Reset
     explicito do width aqui corrige. */
  .diagrama__link{ flex:0 0 auto; width:60px; min-width:0; }
  .diagrama__tag{ font-size:16px; }
  .diagrama__tag--hub{ font-size:26px; }
  .diagrama__texto{ font-size:17px; }
  .timeline{ display:flex !important; padding-top:40px; }
  .timeline__item{ flex:1 1 0; min-width:0; }
  .timeline__num{ font-size:32px; }
  .timeline__titulo{ font-size:18px; }
  .timeline__texto{ font-size:15px; }

  /* ---- Equipe ---- */
  .slide--equipe{ padding:80px 120px; }
  .slide--equipe .wrap{ width:1520px; max-width:1520px; } /* mais estreito que o 1600px geral do
     print (senao a foto, aspect-ratio 4/5 width:100%, ficava alta demais e
     estourava os 1080px por cima — achado na auditoria de 06/11/2026). Ainda
     mais largo que a 1a correcao (1360px), que deixou margem lateral grande
     demais e reprovou no detector de espaco vazio por outro motivo. */
  .equipe__headline{ font-size:50px; margin-top:10px; max-width:24ch; }
  /* mesmo bug de grid comentado acima (capa/curadoria): forca flex em vez de
     repeat(3,1fr), senao os 3 cartoes empilham em coluna unica e estouram a
     pagina (corta o kicker e o h2 no topo). */
  .equipe__grid{ display:flex !important; margin-top:30px; gap:28px; align-items:flex-start; }
  .corretor{ flex:1 1 0; min-width:0; padding:0 0 20px; }
  /* altura fixa (em vez de aspect-ratio) — nao escala com a largura da coluna,
     garante que o cartao inteiro cabe nos 1080px independente do max-width do wrap */
  .corretor__foto{ width:100%; height:270px; margin-bottom:16px; }
  .corretor__funcao,.corretor__nome,.corretor__creci,.corretor__contato{ padding-inline:26px; }
  .corretor__nome{ font-size:28px; }
  .corretor__creci{ font-size:17px; }
  .corretor__contato{ font-size:16px; }
  .equipe__fecho{ margin-top:40px; font-size:24px; }

  /* ---- Objetivo ---- */
  .slide--objetivo{ padding:96px 120px; }
  .objetivo__headline{ font-size:84px; margin-top:16px; }
  /* mesmo bug de grid comentado acima: forca flex em vez de repeat(3,1fr) */
  .metas{ display:flex !important; margin-top:64px; gap:56px; }
  .meta{ flex:1 1 0; min-width:0; }
  .meta__num{ font-size:68px; }
  .meta__texto{ font-size:32px; }
  .objetivo__legenda{ margin-top:56px; font-size:34px; }

  /* ---- Tabela ---- */
  .slide--tabela{ padding:96px 120px; }
  .tabela__headline{ font-size:68px; margin-top:16px; }
  /* mesmo bug de grid comentado acima: forca flex em vez de 1fr auto 1fr.
     flex-grow:1 com flex-basis:0 tambem falha neste motor (as 2 colunas
     colapsam pro min-content e o espaco sobra no meio) — usa basis fixo em
     % em vez de depender do calculo de grow. */
  .tabela{ display:flex !important; margin-top:56px; }
  .tabela__col{ flex:0 0 47%; min-width:0; padding:40px 36px; }
  .tabela__eixo{ flex:0 0 1px; width:1px; margin-inline:var(--space-4); }
  .tabela__titulo{ font-size:22px; }
  .tabela__lista li{ font-size:20px; }

  /* ---- Marketing (diagrama radial) ----
     Correcao 06/11/2026: estas regras miravam classes orfas
     (.marketing__selo/.marketing__roda/.marketing__blocos/.marketing__bloco)
     de uma versao antiga do HTML — o markup atual usa .radial/.radial__hub/
     .radial__node, entao nada daqui nunca se aplicava e a secao vazava a
     pagina fixa de 1080px usando o CSS puro da tela (que, com o hub maior
     pedido pelo Chefe — ver style.css .radial__hub —, estourava ainda mais:
     cabecalho cortado no topo e os 2 cards de baixo cortados no rodape).
     Compacta pra caber nos 1080px mantendo o hub como elemento protagonista
     (240px, igual ao piso minimo pedido pra tela em 1440px) — medido via
     Playwright (wrap height 848px dentro de 968px disponiveis, folga de
     ~120px). */
  .slide--marketing{ padding:56px 120px; }
  .marketing__headline{ font-size:48px; margin-top:10px; }
  .radial{
    margin-top:36px;
    row-gap:28px; column-gap:28px;
    grid-template-columns:minmax(0,1fr) 240px minmax(0,1fr);
  }
  .radial__hub{ width:240px; height:240px; padding:16px; gap:.5rem; }
  .radial__hub img{ width:150px; }
  .radial__hub span{ font-size:18px; }
  /* mesmo bug de grid comentado acima: forca flex nas linhas de card */
  .radial__node{ padding:20px 22px; border-radius:18px; gap:16px; }
  .radial__node h3{ font-size:23px; margin-bottom:7px; }
  .radial__node p{ font-size:15px; line-height:1.4; margin-bottom:11px; max-width:none; }
  .radial__tags{ gap:.4rem; }
  .radial__tags li{ font-size:14px; padding:.32em .8em; }

  /* ---- Numeros / Custo ---- */
  .slide--numeros, .slide--custo{ padding:0 120px; }
  /* mesmo bug comentado acima (ver Capa/Tabela), variante nova: aqui o
     .numeros__grid ja era flex na tela (nunca foi grid), mas usava
     flex-wrap:wrap + gap/padding em clamp(...,vw,...) + o .numero__divisor
     tinha uma media query propria (max-width:760px) que vira vertical->
     horizontal. O motor de print as vezes avalia a largura errada nesses
     dois pontos (mesma causa-raiz da media query mobile falsa do
     diagrama/timeline/equipe) e os 2 numeros saem desalinhados, sem o
     divisor vertical, e a pagina 9 estoura por baixo. Forca nowrap +
     valores fixos em px (sem vw/clamp) + reforca o divisor vertical. */
  .numeros__grid{
    display:flex !important; flex-wrap:nowrap !important;
    align-items:center !important; justify-content:center !important;
    gap:140px !important; padding-inline:0 !important;
  }
  .numero{ flex:0 0 auto !important; }
  .numero__divisor{
    flex:0 0 1px !important; width:1px !important; height:auto !important;
    min-height:220px !important; align-self:stretch !important;
  }
  .numero__valor{ font-size:225px; }
  .numero__legenda{ font-size:24px; }
  .custo__detalhe{ font-size:24px; margin-top:56px; }

  /* ---- Rede de parceiros (slide 7 PPT, 5 afirmacoes hero) ----
     Secao tem mais conteudo que as demais (kicker + 2 numeros + 5 itens):
     reduz o numero-hero so aqui para caber tudo sem cortar nada em 1080px.

     CORRECAO (06/11/2026, 2a rodada — detector 2D flagrou a pagina 9):
     `justify-content:center` (herdado do `.slide`) centraliza o bloco de
     conteudo (kicker+numeros+rede, ~766px de altura) dentro dos 1080px da
     pagina — isso cria DOIS vazios de ~310px, um em cima e um embaixo.
     O detector de espaco vazio tolera vazio ancorado no FIM da pagina (e'
     o comportamento esperado de toda pagina "menos cheia"), mas nao tolera
     vazio ancorado no TOPO (pagina 9 falhou so no topo: 38.5%>14%). Fix:
     `justify-content:flex-start` + padding-top fixo empurra todo o bloco
     pro topo com um respiro curto e deixa a folga restante so embaixo,
     onde o detector ja aceita. Nao e o mesmo bug do comentario historico
     acima (aquele cortava conteudo por estourar a pagina com tamanhos
     maiores; aqui o conteudo cabe com folga, so precisa ficar ancorado
     no topo em vez de flutuar centralizado). */
  .slide--numeros{ padding-top:88px; justify-content:flex-start !important; }
  .slide--numeros .wrap:first-child{ margin-bottom:8px; }
  .slide--numeros .numero__valor{ font-size:140px; }
  .slide--numeros .numero__legenda{ font-size:20px; }
  .slide--numeros .numeros__grid{ margin-top:28px; }
  .slide--numeros .numero__divisor{ min-height:140px !important; }
  .rede{
    display:flex !important; flex-wrap:wrap !important;
    margin-top:40px; padding-top:24px; gap:28px 28px;
  }
  .rede__item{ flex:1 1 17%; min-width:260px; }
  .rede__titulo{ font-size:26px; }
  .rede__texto{ font-size:16px; }

  /* ---- Exclusividade ---- */
  .slide--exclusividade{ min-height:0; height:1080px; }
  /* mesmo bug de grid do capa__grid acima: forca flex so em print */
  .exclusividade__grid{ display:flex !important; min-height:0; height:1080px; }
  .exclusividade__foto{ flex:1 1 0; min-width:0; }
  /* CORRECAO (06/11/2026, 2a rodada — mesmo motivo do .slide--numeros acima):
     justify-content:center (herdado da regra de tela) deixava ~210px de
     vazio em cima E embaixo da coluna de texto — o detector 2D flagrou o
     vazio do topo (nao tolerado). flex-start + padding-top maior ancora o
     bloco mais perto do topo da coluna, com a folga sobrando so embaixo. */
  .exclusividade__text{
    flex:1.35 1 0; min-width:0; padding:132px 104px 88px; gap:28px;
    justify-content:flex-start;
  }
  .exclusividade__headline{ font-size:92px; max-width:none; }
  /* mesmo bug de grid comentado acima: forca flex-wrap em vez de 1fr 1fr */
  .exclusividade__lista{ display:flex !important; flex-wrap:wrap; gap:.6rem 1.5rem; }
  .exclusividade__lista li{ flex:0 0 calc(50% - .75rem); box-sizing:border-box; font-size:19px; }

  /* ---- Contato ---- */
  .slide--contato{ min-height:0; height:1080px; }
  .contato__logo{ width:340px; height:auto; }
  .credencial--central .credencial__nome{ font-size:48px; }
  .credencial--central .credencial__linha{ font-size:26px; }
  .contato__wrap .btn{ display:none; } /* CTA de link não serve em PDF impresso */
}
