/* ==========================================================================
   LAYOUT — arquitetura de slides
   O deck é um contêiner com scroll-snap; cada <section class="slide"> ocupa
   a tela inteira. O "chrome" (barra de progresso, cabeçalho, setas, índice)
   fica fixo, fora do fluxo de rolagem.
   ========================================================================== */

html, body { height: 100%; overscroll-behavior-y: none; }

body { background: var(--white); }

.deck {
  height: 100vh;
  height: 100svh;
  overflow-y: scroll;
  overflow-x: hidden;
  scroll-snap-type: y mandatory;
  scroll-behavior: smooth;
  scrollbar-width: none;        /* Firefox */
  -ms-overflow-style: none;     /* versões antigas de Edge */
}
.deck::-webkit-scrollbar { display: none; } /* Chrome, Safari, Edge novo */
.no-smooth .deck { scroll-behavior: auto; }

.slide {
  position: relative;
  min-height: 100vh;
  min-height: 100svh;
  width: 100%;
  scroll-snap-align: start;
  scroll-snap-stop: always;
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: calc(var(--chrome-h) + 28px) var(--pad-x) 64px;
  overflow: hidden;
}

/* Páginas 1 e 2 (abertura + capa): halo compartilhado, fixo — ocupa o lugar
   que .ambient-glow tinha em cada slide isoladamente. Ficando fixo, nunca
   "reinicia" na transição entre as duas, e ganha o movimento de parallax
   sozinho (ver parallax-bg.js). */
.opening-bg {
  position: fixed;
  top: 0; left: 0; right: 0; bottom: 0;
  width: 100%; height: 100%;
  z-index: 0;
  pointer-events: none;
  background-color: var(--dark-0);
  background-image:
    radial-gradient(75vmax circle at 24% 26%, rgba(15,76,117,.26) 0%, rgba(15,76,117,.1) 40%, transparent 78%);
  background-repeat: no-repeat;
  animation: openingBgDrift 34s ease-in-out infinite;
}
@keyframes openingBgDrift {
  0%, 100% { background-position: 0 0; }
  50%      { background-position: -1.2% .8%; }
}
@media (prefers-reduced-motion: reduce) {
  .opening-bg { animation: none; }
}

/* Reforço: enquanto a página 1 ou 2 está ativa, o body também fica escuro —
   se algo (zoom, DPI, barra do navegador) deixar uma frestinha sem cobertura
   do #openingBg, o que aparece por trás é o mesmo escuro, nunca o branco
   padrão do body. */
body.is-opening-pages { background: var(--dark-0); }

.slide--dark { background: var(--dark-0); color: var(--on-dark); }
.slide--light { background: var(--white); color: var(--gray-900); }
.slide--tint  { background: var(--gray-50); color: var(--gray-900); }

/* Páginas 1 e 2: sem cor própria — deixam ver o pano de fundo compartilhado
   (#openingBg, fixo, logo abaixo do <body>), pra não ter costura entre elas. */
.slide--seamless-bg { background: transparent; }

.slide__inner {
  width: 100%;
  max-width: var(--content-max);
  margin: 0 auto;
  position: relative;
  z-index: 2;
}
.slide__inner--narrow { max-width: var(--content-max-narrow); }

.slide__eyebrow { display: block; margin-bottom: 20px; }
.slide__title { margin-bottom: 20px; }
.slide__lead { max-width: 62ch; color: var(--gray-700); }

/* ---------- Entrada de seção (páginas 3+) ----------
   Todo filho direto de .slide__inner entra em cascata, na ordem em que já
   está no HTML, toda vez que a slide fica ativa — não só na primeira vez.
   Ver section-reveal.js. Discreto de propósito: pouco deslocamento, pouca
   duração — reforça a leitura, não vira o centro das atenções. Escondido só
   com JS confirmado (mesma regra de progressive enhancement do resto do
   site — ver animations.css R.8): sem JS, tudo nasce visível. */
.js .js-reveal-content {
  opacity: 0;
  transform: translateY(12px);
  transition: opacity .5s var(--ease-out), transform .5s var(--ease-out);
}
.js .js-reveal-content.is-in {
  opacity: 1;
  transform: translateY(0);
}
@media (prefers-reduced-motion: reduce) {
  .js-reveal-content { opacity: 1 !important; transform: none !important; transition: none !important; }
}
.slide--dark .slide__lead { color: var(--on-dark-dim); }

/* ---------- Chrome fixo ---------- */
.chrome-top {
  position: fixed;
  inset: 0 0 auto 0;
  height: var(--chrome-h);
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 var(--pad-x-tight);
  z-index: 40;
  pointer-events: none;
}
.chrome-top > * { pointer-events: auto; }

.chrome-logo {
  display: flex;
  align-items: center;
  gap: 12px;
  font-weight: 700;
  font-size: 1.25rem;
  letter-spacing: -0.01em;
  color: var(--gray-900);
  transition: opacity var(--dur-fast) var(--ease-out);
}
.chrome-logo:hover { opacity: .7; }
.chrome-logo svg { color: var(--primary); flex-shrink: 0; }
.is-on-dark .chrome-logo { color: var(--white); }
.is-on-dark .chrome-logo svg { color: var(--white); }

/* Páginas 1 e 2 (abertura, antes da revelação da marca): logo do cabeçalho oculto */
.chrome-top.is-brand-hidden .chrome-logo {
  opacity: 0;
  pointer-events: none;
}

.chrome-top__right {
  display: flex;
  align-items: center;
  gap: 6px;
}

.chrome-counter {
  font-size: .75rem;
  font-variant-numeric: tabular-nums;
  letter-spacing: .04em;
  color: var(--gray-500);
  margin-right: 6px;
  white-space: nowrap;
}
.is-on-dark .chrome-counter { color: var(--on-dark-dim); }

.progress-bar {
  position: fixed;
  top: 0; left: 0; right: 0;
  height: 2px;
  z-index: 50;
  background: transparent;
}
.progress-bar__fill {
  height: 100%;
  width: 0%;
  background: var(--primary);
  opacity: .55;
  transition: width var(--dur-fast) linear;
}

.chrome-nav {
  position: fixed;
  right: var(--pad-x-tight);
  bottom: 28px;
  z-index: 40;
  display: flex;
  gap: 8px;
}

/* ---------- Grids & primitivos ---------- */
.split {
  display: grid;
  grid-template-columns: minmax(0, .95fr) minmax(0, 1.15fr);
  gap: clamp(32px, 5vw, 72px);
  align-items: center;
}
.split--reverse { grid-template-columns: minmax(0, 1.15fr) minmax(0, .95fr); }
.split--reverse > *:first-child { order: 2; }

.grid-2 { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; }
.grid-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
.grid-5 { display: grid; grid-template-columns: repeat(5, 1fr); gap: 16px; }

.stack { display: flex; flex-direction: column; }
.stack > * + * { margin-top: var(--gap, 16px); }

.row { display: flex; align-items: center; }
.row > * + * { margin-left: var(--gap, 12px); }

.center-text { text-align: center; margin-left: auto; margin-right: auto; }

/* ---------- Responsivo ---------- */
@media (max-width: 980px) {
  .split, .split--reverse { grid-template-columns: 1fr; }
  .split--reverse > *:first-child { order: 0; }
  .grid-3 { grid-template-columns: 1fr 1fr; }
  .grid-5 { grid-template-columns: repeat(5, 1fr); gap: 8px; }
}

@media (max-width: 640px) {
  :root { --chrome-h: 56px; }
  .slide { padding: calc(var(--chrome-h) + 20px) var(--pad-x) 96px; }
  .grid-2, .grid-3 { grid-template-columns: 1fr; }
  .chrome-nav { right: 16px; bottom: 18px; }
  .chrome-logo span { display: none; }
}
