/* ==========================================================================
   Centro Educacional OMNI · Design System
   ========================================================================== */

:root {
  /* Cor: identidade OMNI */
  --color-primary: #F58634;
  --color-primary-vivid: #FF6A00;
  --color-primary-hover: #E06F1E;
  --color-primary-light: #FFF1E4;
  --color-primary-soft: #FFDDBC;
  --color-accent-blue: #1E3A5F;
  --color-accent-blue-light: #EAF0F6;

  --color-ink: #2C2A28;
  --color-ink-soft: #5B5650;
  --color-ink-faint: #8A847C;

  --color-white: #FFFFFF;
  --color-cream: #FBF9F6;
  --color-gray-50: #F6F4F1;
  --color-gray-100: #F1EDE8;
  --color-gray-200: #E7E1D9;
  --color-border: #E7E1D9;

  /* Tipografia */
  /* Familia trocada em 20/08/2026 a pedido: Schibsted Grotesk nos
     titulos e Hanken Grotesk no texto. As duas sao grotescas
     modernas e muito legiveis; a Schibsted foi desenhada para o
     grupo de midia noruegues Schibsted e quase ninguem usa. */
  --font-display: "Schibsted Grotesk", "Segoe UI", Arial, sans-serif;
  --font-body: "Hanken Grotesk", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;

  /* Espaçamento */
  --space-1: 0.5rem;
  --space-2: 0.75rem;
  --space-3: 1rem;
  --space-4: 1.5rem;
  --space-5: 2rem;
  --space-6: 3rem;
  --space-7: 4rem;
  --space-8: 6rem;

  /* ESCALA DE ESPACO — degrau de 4px, sem nada entre os degraus.
     4 · 8 · 12 · 16 · 24 · 32 · 48 · 64 · 96 */
  --space-0: 0.25rem;

  /* ESCALA DE TEXTO — sete degraus, e nada entre eles.
     O site tinha 39 tamanhos de fonte diferentes, quase todos variando
     dois centesimos de rem entre si: 0.84, 0.85, 0.86, 0.88. Ninguem le a
     diferenca, mas o olho percebe que cada bloco tem um tamanho proprio —
     e e isso que da a sensacao de peca solta. */
  --texto-mini: 0.6875rem;  /* 11px — SO para recado de painel, nunca para
                               conteudo. Abaixo de 12px o texto cansa a
                               leitura; aqui e aviso curto para quem publica,
                               lido uma vez e ignorado depois. */
  --texto-xs: 0.75rem;      /* 12px — legenda, etiqueta, prazo, credito */
  --texto-sm: 0.875rem;     /* 14px — apoio, menu, botao pequeno */
  --texto-base: 1rem;       /* 16px — corpo de texto */
  --texto-md: 1.125rem;     /* 18px — corpo destacado, abertura de secao */
  --texto-lg: 1.25rem;      /* 20px — subtitulo */
  --texto-xl: 1.5rem;       /* 24px — titulo de cartao */
  --texto-2xl: 1.75rem;     /* 28px — titulo menor de secao */

  /* ALTURA DE LINHA — a regra e inversa ao tamanho do texto: quanto
     maior a letra, mais curta a entrelinha. O site inteiro estava em
     1.65, inclusive em texto de 18px, e por isso o paragrafo parecia
     esparramado: 1.65 e medida de livro, para coluna estreita e letra
     pequena. Numa linha de 1160px, 1.55 ja e generoso. */
  --linha-curta: 1.15;   /* titulos */
  --linha-media: 1.38;   /* subtitulos e frases de abertura */
  --linha-longa: 1.55;   /* corpo de texto */

  /* TITULOS — tres degraus, fluidos entre celular e computador.
     O tamanho cresce com a tela, mas a PROPORCAO entre os tres nao muda:
     e isso que faz a hierarquia parecer a mesma no celular e no monitor.
     Havia oito curvas diferentes; ficaram estas tres. */
  --titulo-1: clamp(2.1rem, 4.4vw, 3.6rem);   /* h1 da pagina */
  --titulo-2: clamp(1.7rem, 3.2vw, 2.6rem);   /* h2 de secao */
  --titulo-3: clamp(1.25rem, 2vw, 1.5rem);    /* h3 de cartao */

  /* Raios e sombras */
  --radius-sm: 8px;
  --radius-md: 16px;
  --radius-lg: 28px;
  --radius-pill: 999px;

  --shadow-sm: 0 2px 10px rgba(44, 42, 40, 0.06);
  --shadow-md: 0 12px 32px rgba(44, 42, 40, 0.10);
  --shadow-lg: 0 24px 60px rgba(44, 42, 40, 0.16);
  --shadow-orange: 0 14px 30px rgba(245, 134, 52, 0.28);

  --container-max: 1240px;
  --header-h: 88px;
}

/* ---------- Reset ---------- */
*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body, h1, h2, h3, h4, p, figure, blockquote, dl, dd { margin: 0; }
ul, ol { margin: 0; padding: 0; list-style: none; }
img, picture, video { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; }
button { font: inherit; cursor: pointer; border: none; background: none; color: inherit; }
input, textarea, select { font: inherit; }
h1, h2, h3, h4 { font-family: var(--font-display); font-weight: 600; color: var(--color-ink); line-height: var(--linha-curta); }

/* O menu lateral vive fora da tela, a direita. O body ja esconde o
   estouro; o clip no html e a segunda tranca, para o Safari do iPhone,
   que as vezes ignora a primeira. clip nao cria area de rolagem. */
html { overflow-x: clip; }

body {
  font-family: var(--font-body);
  color: var(--color-ink);
  background: var(--color-white);
  line-height: var(--linha-longa);
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}

body.no-scroll { overflow: hidden; position: fixed; width: 100%; }

/* ---------- Layout helpers ---------- */
.container {
  max-width: var(--container-max);
  margin-inline: auto;
  padding-inline: clamp(1.25rem, 4vw, 2.5rem);
}

/* Escala de secao presa aos tokens 32 / 48 / 64 (space-5 / 6 / 7). */
.section { padding-block: clamp(var(--space-5), 4.5vw, var(--space-7)); }
.section-tight { padding-block: clamp(var(--space-4), 3vw, var(--space-5)); }
.page-hero + .section, .page-hero + .section-tight { padding-top: var(--space-6); }
.bg-cream { background: var(--color-cream); }
.bg-gray { background: var(--color-gray-50); }
.bg-ink { background: var(--color-ink); color: var(--color-white); }
.bg-ink h1, .bg-ink h2, .bg-ink h3 { color: var(--color-white); }
.bg-primary { background: var(--color-primary); color: var(--color-ink); }
.bg-primary h1, .bg-primary h2, .bg-primary h3 { color: var(--color-ink); }
.bg-primary .eyebrow { color: var(--color-ink); }
.bg-primary .lede { color: rgba(44,42,40,0.82); }

.grid { display: grid; gap: var(--space-5); }
.grid-2 { grid-template-columns: repeat(2, 1fr); }
.grid-3 { grid-template-columns: repeat(3, 1fr); }
.grid-4 { grid-template-columns: repeat(4, 1fr); }

@media (max-width: 980px) {
  .grid-3 { grid-template-columns: repeat(2, 1fr); }
  .grid-4 { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 640px) {
  .grid-2, .grid-3, .grid-4 { grid-template-columns: 1fr; }
}

/* Home: atalhos do Universo OMNI em 3 colunas em qualquer largura (inclusive
   no celular), deixando os cards menores. Só a home usa esta classe — o hub
   /comunicados segue com grid-4. minmax(0,1fr) mantém as 3 colunas IGUAIS
   (com 1fr puro, o texto longo de um card esticava a coluna dele). */
.uni-grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
@media (max-width: 640px) {
  .uni-grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-2); }
  /* Cards estreitos no celular: menos respiro e miniatura empilhada, para
     o texto não espremer ao lado de uma imagem minúscula. */
  .uni-grid-3 .uni-card { padding: var(--space-3) var(--space-2); }
  .uni-grid-3 .uni-post { flex-direction: column; align-items: flex-start; gap: 4px; }
  /* Reserva 2 linhas para o rotulo ("MES MAIS RECENTE" quebra em 2, "PERIODO
     ATUAL" em 1): assim as 3 miniaturas (ancoradas na base) alinham por cima
     e os valores de baixo ficam na mesma linha. */
  .uni-grid-3 .uni-post-data { min-height: 32px; }
  .uni-grid-3 .uni-post-thumb { width: 100%; height: auto; aspect-ratio: 1 / 1; }
  .uni-grid-3 .uni-post-img .uni-post-thumb { width: 100%; }
  /* Título e texto menores, e palavra longa (Extracurriculares) quebra em vez
     de vazar da coluna estreita. */
  .uni-grid-3 .uni-card h3 { font-size: 0.86rem; line-height: 1.15; overflow-wrap: break-word; hyphens: auto; }
  .uni-grid-3 .uni-card > p { font-size: 0.78rem; line-height: 1.3; }
  .uni-grid-3 .card-icon { width: 40px; height: 40px; }
  .uni-grid-3 .card-icon svg { width: 20px; height: 20px; }
}

.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  font-family: var(--font-body);
  font-weight: 700;
  font-size: var(--texto-sm);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--color-primary);
  margin-bottom: var(--space-2);
}

h1 { font-size: var(--titulo-1); }
h2 { font-size: var(--titulo-2); }
h3 { font-size: var(--titulo-3); }

.section-head { max-width: 100%; margin-bottom: var(--space-5); }
.section-head.center { margin-inline: auto; text-align: center; }
.section-head p { color: var(--color-ink-soft); font-size: var(--texto-md); margin-top: var(--space-3); }
.section-head h2 + .texto-colunas, .section-head h2 + p, .section-head h2 + .lede { margin-top: var(--space-4); }

.lede { font-size: var(--texto-md); color: var(--color-ink-soft); max-width: 62ch; }

/* VAO ENTRE PARAGRAFOS — um valor so. Antes variava entre 16px e 24px
   conforme o bloco, e o olho percebe a diferenca como "esta secao respira
   diferente da outra". */
main p + p, main .lede + p, main p + .lede { margin-top: var(--space-3); }

/* SUBTITULO DE SECAO — a linha logo abaixo do titulo.
   Fica na fonte dos titulos (Fraunces), como a frase do hero. O texto
   corrido continua em Inter: o que muda de fonte e a moldura do titulo,
   nao o corpo da pagina. */
/* Todos os paragrafos da abertura, e nao so o primeiro: quando a abertura
   tem duas frases, uma serifada e a outra nao, o bloco parece colado de
   dois lugares. */
.section-head .lede,
.section-head > p {
  font-family: var(--font-display);
  font-style: italic;
  font-weight: 500;
  line-height: var(--linha-media);
}

/* ---------- Buttons ---------- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-1);
  padding: var(--space-3) var(--space-5);
  border-radius: var(--radius-pill);
  font-weight: 600;
  font-size: var(--texto-base);
  transition: transform 0.2s ease, box-shadow 0.2s ease, background 0.2s ease, color 0.2s ease, border-color 0.2s ease;
  white-space: nowrap;
}
.btn-primary {
  background: var(--color-primary);
  color: var(--color-white);
  box-shadow: var(--shadow-orange);
}
.btn-primary:hover { background: var(--color-primary-hover); transform: translateY(-2px); box-shadow: 0 18px 36px rgba(245,134,52,0.34); }

.btn-outline {
  background: transparent;
  border: 1.5px solid var(--color-ink);
  color: var(--color-ink);
}
.btn-outline:hover { background: var(--color-ink); color: var(--color-white); transform: translateY(-2px); }

.btn-outline-white {
  background: transparent;
  border: 1.5px solid rgba(255,255,255,0.6);
  color: var(--color-white);
}
.btn-outline-white:hover { background: var(--color-white); color: var(--color-ink); transform: translateY(-2px); }

.btn-white {
  background: var(--color-white);
  color: var(--color-primary);
  box-shadow: var(--shadow-md);
}
.btn-white:hover { transform: translateY(-2px); box-shadow: var(--shadow-lg); }

.btn-sm { padding: var(--space-2) var(--space-4); font-size: var(--texto-sm); }
.btn-block { width: 100%; }

/* ---------- Utility bar ---------- */
.utility-bar {
  background: var(--color-primary);
  color: var(--color-white);
  font-size: var(--texto-sm);
  border-bottom: 1px solid var(--color-border);
}
.utility-bar .container {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-4);
  padding-block: var(--space-1);
}
.utility-links { display: flex; align-items: center; gap: var(--space-4); flex-wrap: wrap; }
.utility-links a { display: inline-flex; align-items: center; gap: var(--space-1); font-weight: 600; color: var(--color-ink-soft); transition: color 0.2s ease; }
.utility-links a:hover { color: var(--color-primary-hover); }
.utility-frase { font-weight: 600; margin: 0; }
@media (max-width: 700px) {
  .utility-bar .container { flex-direction: column; gap: var(--space-0); justify-content: center; text-align: center; }
  .utility-frase { font-size: var(--texto-xs); }
}
.utility-social { display: flex; align-items: center; gap: var(--space-3); }
.utility-social a { display: inline-flex; width: 30px; height: 30px; align-items: center; justify-content: center; border-radius: 50%; background: rgba(44,42,40,0.06); color: var(--color-ink-soft); transition: background 0.2s ease, color 0.2s ease; }
.utility-social a:hover { background: var(--color-primary); color: var(--color-white); }
.utility-social a.utility-portal-link { width: auto; height: auto; border-radius: 0; background: none; display: inline-flex; align-items: center; gap: var(--space-1); font-weight: 600; color: var(--color-white); transition: color 0.2s ease; }
.utility-portal-link svg { width: 15px; height: 15px; flex-shrink: 0; }
.utility-social a.utility-portal-link:hover { background: none; color: var(--color-ink); }
.utility-social svg { width: 15px; height: 15px; }

/* ---------- Header / Nav ---------- */
.site-header {
  position: sticky;
  top: 0;
  z-index: 100;
  background: rgba(255,255,255,0.96);
  backdrop-filter: blur(8px);
  border-bottom: 1px solid transparent;
  transition: box-shadow 0.25s ease, border-color 0.25s ease;
}
.site-header.scrolled { box-shadow: var(--shadow-sm); border-color: var(--color-border); }

.main-nav {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-block: var(--space-3);
  gap: var(--space-5);
}

.brand { display: flex; align-items: center; gap: var(--space-1); flex-shrink: 0; }
.brand img { height: 46px; width: auto; }

.nav-list { display: flex; align-items: center; gap: var(--space-5); }
.nav-list > li { position: relative; }
.nav-list > li > a {
  display: inline-flex;
  align-items: center;
  gap: var(--space-0);
  font-weight: 600;
  font-size: var(--texto-base);
  padding: var(--space-1) 0;
  color: var(--color-ink);
  position: relative;
}
.nav-list > li > a::after {
  content: "";
  position: absolute;
  left: 0; bottom: -2px;
  width: 0; height: 2px;
  background: var(--color-primary);
  transition: width 0.2s ease;
}
.nav-list > li > a:hover::after,
.nav-list > li.active > a::after { width: 100%; }
.nav-list > li.active > a { color: var(--color-primary); }

.nav-list .chevron { width: 10px; height: 10px; transition: transform 0.2s ease; }
.nav-list li.has-dropdown:hover .chevron { transform: rotate(180deg); }

.dropdown {
  position: absolute;
  top: calc(100% + 14px);
  left: 50%;
  transform: translateX(-50%) translateY(8px);
  min-width: 230px;
  background: var(--color-white);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-lg);
  padding: var(--space-1);
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.2s ease, transform 0.2s ease, visibility 0.2s;
}
/* So onde existe mouse. Num celular o toque aciona :hover, e esta regra
   ressuscitava o painel do computador dentro da gaveta. */
@media (hover: hover) and (pointer: fine) {
  .nav-list li.has-dropdown:hover .dropdown,
  .nav-list li.has-dropdown:focus-within .dropdown {
    opacity: 1;
    visibility: visible;
    transform: translateX(-50%) translateY(0);
  }
}
.dropdown a {
  display: block;
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-sm);
  font-weight: 600;
  font-size: var(--texto-base);
  color: var(--color-ink-soft);
}
.dropdown a:hover { background: var(--color-primary-light); color: var(--color-primary-hover); }
.dropdown.dropdown-grid { min-width: 480px; display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-0); }
@media (max-width: 1080px) {
  .dropdown.dropdown-grid { min-width: 0; grid-template-columns: 1fr; }
}

.nav-actions { display: flex; align-items: center; gap: var(--space-3); }
.btn-nav-mobile-only { display: none; }

.nav-toggle {
  display: none;
  flex-direction: column;
  gap: 5px;
  padding: var(--space-1);
}
.nav-toggle span { width: 26px; height: 2.5px; background: var(--color-ink); border-radius: 2px; transition: transform 0.25s ease, opacity 0.25s ease; }
.nav-toggle.open span:nth-child(1) { transform: translateY(7.5px) rotate(45deg); }
.nav-toggle.open span:nth-child(2) { opacity: 0; }
.nav-toggle.open span:nth-child(3) { transform: translateY(-7.5px) rotate(-45deg); }

@media (max-width: 1080px) {
  .nav-toggle { display: flex; }
  .nav-list {
    position: fixed;
    inset: 0 0 0 auto;
    width: min(360px, 86vw);
    height: 100vh;
    background: var(--color-gray-50);
    flex-direction: column;
    align-items: stretch;
    gap: 0;
    padding: 6.5rem var(--space-5) var(--space-5);
    transform: translateX(100%);
    transition: transform 0.3s ease;
    overflow-y: auto;
    box-shadow: var(--shadow-lg);
  }
  .nav-list.open { transform: translateX(0); }
  .nav-list > li { width: 100%; border-bottom: 1px solid rgba(44,42,40,0.08); }
  .nav-list > li > a { width: 100%; padding: var(--space-1) 0; font-size: var(--texto-sm); font-weight: 500; line-height: var(--linha-curta); justify-content: space-between; }
  /* O `space-between` acima existe para empurrar a setinha de "Séries" e
     "Comunicados" para a direita. Mas ele alcançava também os dois BOTÕES
     do fim do menu, que são `li > a` como qualquer item: o ícone ia para
     uma ponta e o texto para a outra, com um vão no meio.
     Aqui eles voltam ao que todo botão do site faz — ícone e texto
     juntos, centralizados, com o espaçamento de sempre. */
  .nav-list > li > a.btn {
    justify-content: center;
    gap: var(--space-1);
    padding: var(--space-2) var(--space-4);
    font-size: var(--texto-base);
    font-weight: 600;
  }
  .dropdown {
    position: static;
    transform: none;
    opacity: 1;
    visibility: visible;
    box-shadow: none;
    max-height: 0;
    overflow: hidden;
    padding: 0;
    transition: max-height 0.25s ease, padding 0.25s ease;
  }
  li.has-dropdown.open .dropdown { max-height: 640px; padding: var(--space-1) 0 var(--space-2); }
  .nav-list .chevron { transition: transform 0.2s ease; }
  li.has-dropdown.open .chevron { transform: rotate(180deg); }
  .nav-actions .btn-sm-desktop { display: none; }
  .btn-nav-mobile-only { display: block; }
  .nav-scrim {
    display: none;
    position: fixed; inset: 0; background: rgba(44,42,40,0.5); z-index: 90;
  }
  .nav-scrim.open { display: block; }
}

/* ---------- Hero ---------- */
.hero {
  position: relative;
  min-height: 92vh;
  display: flex;
  align-items: center;
  color: var(--color-white);
  overflow: hidden;
}
/* O hero e uma caixa flexivel, entao o container virava item flexivel e
   encolhia ate o tamanho do texto, saindo do alinhamento do resto do site.
   Com width:100% ele volta a valer os mesmos 1240px das outras secoes. */
.hero > .container { width: 100%; }
.hero-media { position: absolute; inset: 0; z-index: 0; }
.hero-media img { width: 100%; height: 100%; object-fit: cover; }
.hero-media::after {
  content: "";
  position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(28,24,20,0.55) 0%, rgba(28,24,20,0.42) 45%, rgba(28,24,20,0.78) 100%);
}
.hero-content { position: relative; z-index: 1; max-width: 760px; }
/* No celular o bloco de texto centralizado cobria o letreiro OMNI da
   fachada. O texto desce para a parte de baixo da foto (o asfalto, que
   nao tem nada a mostrar) e o letreiro fica a vista. */
@media (max-width: 860px) {
  .hero { align-items: flex-end; }
  .hero > .container { padding-bottom: var(--space-7); }
  /* A foto e 21:9 recortada numa tela em pe: sobram 1366px de largura
     fora da tela, e o recorte central deixava o letreiro OMNI de fora.
     O letreiro esta entre 35% e 45% da largura da foto; enquadrar em
     38% o coloca no meio da tela, com respiro dos dois lados. */
  /* SO a home: `.hero-media` tambem existe nas paginas internas, e sem
     o `.hero` na frente este recorte ia para todas elas — foi o que
     aconteceu, e as fotos internas ficaram enquadradas em 38% no
     celular sem ninguem pedir. `.page-hero` nao casa com `.hero`. */
  .hero .hero-media img { object-position: 38% center; }
}
.hero-content h1, .hero-content h2 { color: var(--color-white); }
.hero-kicker {
  font-family: var(--font-display);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(1.05rem, 1.9vw, 1.4rem); /* frase de abertura do hero */
  color: var(--color-primary-soft);
  margin-bottom: var(--space-1);
  /* Em tela larga a frase fica INTEIRA numa linha (pedido de 20/08).
     Sao 44 caracteres — o 34ch antigo cortava depois de "realmente".
     No celular ela quebra normalmente, sem nowrap. */
  max-width: none;
}
@media (min-width: 861px) {
  .hero-kicker { white-space: nowrap; }
}
.hero-title-display {
  text-transform: uppercase;
  letter-spacing: 0.015em;
  font-weight: 700;
  line-height: var(--linha-curta);
  font-size: var(--titulo-1);
  text-shadow: 0 2px 24px rgba(0,0,0,0.25);
}
/* O titulo quebra em tres linhas fixas — "ALTA PERFORMANCE" e a mais
   larga. No piso do clamp (2.1rem) ela mede 353px e nao cabe nos 327px
   de um iPhone: viraria uma quarta linha. Aqui o tamanho acompanha a
   tela para a linha caber inteira. */
@media (max-width: 560px) {
  .hero-title-display { font-size: clamp(1.4rem, 8vw, 2.1rem); }
}
.hero-content .eyebrow { color: var(--color-primary-soft); }
.hero-content p.lede { color: rgba(255,255,255,0.88); }
/* o subtitulo grande usa o mesmo tom ocre do "A formacao para o que a vida realmente pede." */
.hero-content p.lede.hero-sub-grande { color: var(--color-primary-soft); }
.hero-actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-top: var(--space-5); }

.page-hero {
  position: relative;
  min-height: 46vh;
  display: flex;
  align-items: flex-end;
  color: var(--color-white);
  overflow: hidden;
}
.page-hero .container { padding-bottom: var(--space-6); }
.page-hero h1 { color: var(--color-white); }
.breadcrumb { position: relative; z-index: 1; font-size: var(--texto-sm); color: rgba(255,255,255,0.75); margin-top: var(--space-3); }
.breadcrumb a:hover { color: var(--color-primary-soft); }

/* ---------- Cards ---------- */
.card {
  background: var(--color-white);
  border-radius: var(--radius-md);
  padding: var(--space-5);
  box-shadow: var(--shadow-sm);
  border: 1px solid var(--color-border);
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.card:hover { transform: translateY(-6px); box-shadow: var(--shadow-md); }

.card-icon {
  width: 58px; height: 58px;
  border-radius: var(--radius-sm);
  background: var(--color-primary-light);
  display: flex; align-items: center; justify-content: center;
  margin-bottom: var(--space-4);
}
.card-icon svg { width: 28px; height: 28px; color: var(--color-primary); }
.card h3 { margin-bottom: var(--space-2); }
.card p { color: var(--color-ink-soft); font-size: var(--texto-base); }

.card-photo {
  border-radius: var(--radius-md);
  overflow: hidden;
  position: relative;
  box-shadow: var(--shadow-sm);
}
.card-photo img { width: 100%; height: 100%; object-fit: cover; aspect-ratio: 4/5; transition: transform 0.5s ease; }
.card-photo:hover img { transform: scale(1.06); }
.card-photo figcaption {
  position: absolute; left: 0; right: 0; bottom: 0;
  padding: var(--space-4);
  background: linear-gradient(0deg, rgba(20,17,14,0.82), transparent);
  color: var(--color-white);
  font-weight: 600;
}

picture { display: contents; }
picture source { display: none; }

.diff-card { overflow: hidden; padding: 0; }
.diff-card .diff-media { aspect-ratio: 16/11; overflow: hidden; }
.diff-card .diff-media img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.5s ease; }
.diff-card:hover .diff-media img { transform: scale(1.06); }
.diff-card { display: flex; flex-direction: column; }
.diff-card .diff-body {
  padding: var(--space-4) var(--space-4) var(--space-5);
  display: flex;
  flex-direction: column;
  flex: 1;
}
/* o botao desce ate a base do card: os "Saiba mais" ficam na mesma linha */
.diff-card .diff-body .btn { margin-top: auto; align-self: flex-start; }
.diff-card .diff-body p { margin-bottom: var(--space-4); }

/* ---------- Pillars / stats ---------- */
.pillars { counter-reset: pillar; }
.pillar {
  display: flex;
  gap: var(--space-4);
  padding-block: var(--space-4);
  border-top: 1px solid var(--color-border);
}
.pillar:last-child { border-bottom: 1px solid var(--color-border); }
.pillar-num {
  font-family: var(--font-display);
  font-size: var(--texto-2xl);
  color: var(--color-primary);
  flex-shrink: 0;
  width: 3ch;
}
.pillar h3 { margin-bottom: var(--space-0); }
.pillar p { color: var(--color-ink-soft); }

.stat-row { display: flex; flex-wrap: wrap; gap: var(--space-7); }
.stat-item { min-width: 140px; }
.stat-num { font-family: var(--font-display); font-size: clamp(2.2rem, 4vw, 3.2rem); color: var(--color-primary); line-height: 1; }
.stat-label { color: var(--color-ink-soft); margin-top: var(--space-1); font-size: var(--texto-base); }

/* ---------- Tag / chip list (destaques) ---------- */
.chip-list { display: flex; flex-wrap: wrap; gap: var(--space-2); }
.chip {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  padding: var(--space-1) var(--space-3);
  border-radius: var(--radius-pill);
  background: var(--color-white);
  border: 1px solid var(--color-border);
  font-weight: 600;
  font-size: var(--texto-sm);
  box-shadow: var(--shadow-sm);
}
.chip svg { width: 16px; height: 16px; color: var(--color-primary); }
.bg-ink .chip, .bg-primary .chip { background: rgba(255,255,255,0.1); border-color: rgba(255,255,255,0.2); color: var(--color-white); }
.bg-ink .chip svg, .bg-primary .chip svg { color: var(--color-primary-soft); }

/* ---------- Split / feature section ---------- */
.split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-7);
  align-items: center;
}
.split.reverse .split-media { order: 2; }
.split-media { border-radius: var(--radius-lg); overflow: hidden; box-shadow: var(--shadow-md); }
.split-media img,
.split-media video { width: 100%; height: 100%; object-fit: cover; aspect-ratio: 4/3; display: block; }
@media (max-width: 900px) {
  .split { grid-template-columns: 1fr; gap: var(--space-5); }
  .split.reverse .split-media { order: 0; }
}

/* ---------- CTA banner ---------- */
.cta-banner {
  border-radius: var(--radius-lg);
  background: linear-gradient(120deg, var(--color-primary) 0%, #FF9E4D 100%);
  color: var(--color-white);
  padding: clamp(2.2rem, 5vw, 3.5rem);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-5);
  flex-wrap: wrap;
  box-shadow: var(--shadow-orange);
}
.cta-banner h2, .cta-banner h3 { color: var(--color-white); margin-bottom: var(--space-1); }
.cta-banner p { color: rgba(255,255,255,0.9); }
.cta-banner .btn-white:hover { color: var(--color-primary-hover); }
.cta-actions { display: flex; gap: var(--space-3); flex-wrap: wrap; }

.cta-inline {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-4);
  flex-wrap: wrap;
  padding: var(--space-4) var(--space-5);
  border-radius: var(--radius-md);
  background: var(--color-primary-light);
  border: 1px solid var(--color-primary-soft);
}
.cta-inline p { font-weight: 600; color: var(--color-ink); margin: 0; }

/* ---------- Gallery ---------- */
.gallery { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--space-3); }
.gallery a { border-radius: var(--radius-sm); overflow: hidden; aspect-ratio: 1/1; box-shadow: var(--shadow-sm); }
.gallery img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.4s ease; }
.gallery a:hover img { transform: scale(1.08); }
@media (max-width: 900px) { .gallery { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 600px) { .gallery { grid-template-columns: repeat(2, 1fr); } }

/* ---------- Prazo de validade das publicações ---------- */
/* Vencida: some para quem visita, mas a equipe continua vendo, marcada.
   Escondemos com body:not(.is-admin) em vez de .pub-vencida sozinho porque
   componentes como .info-card e .album trazem o próprio display; na mesma
   especificidade venceria quem viesse depois no arquivo. */
body:not(.is-admin) .pub-vencida { display: none !important; }
body.is-admin .pub-vencida {
  opacity: 0.55;
  outline: 2px dashed var(--color-ink-faint);
  outline-offset: 6px;
  position: relative;
}
body.is-admin .pub-vencida::after {
  content: "Vencida, fora do ar";
  position: absolute;
  top: 8px;
  right: 8px;
  background: var(--color-ink);
  color: var(--color-white);
  font-size: var(--texto-xs);
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  padding: var(--space-0) var(--space-2);
  border-radius: var(--radius-pill);
  z-index: 2;
}

.pub-selo {
  display: none;
  align-items: center;
  gap: var(--space-0);
  margin-top: var(--space-1);
  padding: var(--space-0) var(--space-2);
  border-radius: var(--radius-pill);
  background: var(--color-gray-100);
  color: var(--color-ink-faint);
  font-size: var(--texto-xs);
  font-weight: 600;
  letter-spacing: 0.02em;
  width: fit-content;
}
body.is-admin .pub-selo { display: inline-flex; }
.pub-selo.urgente { background: var(--color-primary-light); color: var(--color-primary-hover); }

.pub-vazio {
  border: 1px dashed var(--color-border);
  border-radius: var(--radius-md);
  padding: var(--space-6) var(--space-5);
  text-align: center;
  color: var(--color-ink-faint);
  font-size: var(--texto-base);
}

/* Estado vazio com botão: o visitante não vê nada; só a equipe logada
   (body.com-equipe) enxerga o botão de adicionar. */
.pub-vazio-add { display: none; justify-content: center; padding: var(--space-5) 0; }
body.com-equipe .pub-vazio-add { display: flex; }

/* Hub Informativos: um tópico SEM conteúdo (Avisos, Atividades) some para o
   visitante. O script do hub revela o card (tira esta classe) quando um
   editor com permissão de comunicados está logado, mostrando o selo abaixo. */
.uni-topico-vazio { display: none !important; }
.uni-add-selo {
  display: none;
  align-self: flex-start;
  margin-top: var(--space-2);
  background: var(--color-primary);
  color: #fff;
  font-weight: 600;
  font-size: 0.82rem;
  padding: 6px 14px;
  border-radius: 999px;
}

.pub-vencidos {
  display: none;
  background: var(--color-gray-50);
  border: 1px solid var(--color-border);
  border-left: 3px solid var(--color-ink-faint);
  border-radius: var(--radius-md);
  padding: var(--space-4) var(--space-5);
  margin: 0 auto var(--space-5);
  max-width: var(--container-max);
  width: calc(100% - 2 * clamp(1.25rem, 4vw, 2.5rem));
}
body.is-admin .pub-vencidos { display: block; }
.pub-vencidos-titulo { font-weight: 700; color: var(--color-ink); margin-bottom: var(--space-0); }
.pub-vencidos-nota { font-size: var(--texto-sm); color: var(--color-ink-soft); margin-bottom: var(--space-2); }
.pub-vencidos ul { list-style: none; padding: 0; }
.pub-vencidos li {
  font-size: var(--texto-sm);
  color: var(--color-ink-soft);
  padding: var(--space-1) 0;
  border-top: 1px solid var(--color-border);
}

/* ---------- Galeria: foto com ações (curtir, compartilhar, baixar) ---------- */
.gallery .foto {
  position: relative;
  margin: 0;
  border-radius: var(--radius-sm);
  overflow: hidden;
  aspect-ratio: 1/1;
  box-shadow: var(--shadow-sm);
}
.gallery .foto > a { display: block; width: 100%; height: 100%; border-radius: 0; box-shadow: none; aspect-ratio: auto; }
.gallery .foto img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.4s ease; }
.gallery .foto:hover img { transform: scale(1.08); }

.foto-acoes {
  position: absolute;
  inset-inline: 0;
  bottom: 0;
  display: flex;
  justify-content: flex-end;
  gap: var(--space-0);
  padding: var(--space-1);
  background: linear-gradient(to top, rgba(0,0,0,0.55), rgba(0,0,0,0));
  opacity: 0;
  transition: opacity 0.25s ease;
}
.gallery .foto:hover .foto-acoes,
.gallery .foto:focus-within .foto-acoes { opacity: 1; }
.foto-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 30px;
  height: 30px;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background: rgba(255,255,255,0.92);
  color: var(--color-ink);
  cursor: pointer;
  transition: background 0.2s ease, color 0.2s ease, transform 0.2s ease;
}
.foto-btn svg { width: 15px; height: 15px; fill: none; }
.foto-btn:hover { background: var(--color-white); transform: translateY(-2px); }
.foto-curtir svg { fill: none; stroke: var(--color-ink); stroke-width: 1.8; }
.foto-curtir.ativo { background: var(--color-primary); color: var(--color-white); }
.foto-curtir.ativo svg { fill: var(--color-white); stroke: var(--color-white); }
/* a curtida fica sempre visível quando ativa, para o visitante reconhecer o que já curtiu */
.gallery .foto .foto-curtir.ativo { opacity: 1; }
.gallery .foto:has(.foto-curtir.ativo) .foto-acoes { opacity: 1; }

/* ---------- Galeria: cabeçalho e ações de álbum ---------- */
.album-head { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--space-3); flex-wrap: wrap; }
.album-acoes { display: flex; gap: var(--space-1); flex-wrap: wrap; align-items: center; }
.album-btn {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  padding: var(--space-1) var(--space-3);
  border-radius: var(--radius-pill);
  border: 1px solid rgba(44,42,40,0.16);
  background: transparent;
  color: var(--color-ink-soft);
  font: inherit;
  font-size: var(--texto-sm);
  font-weight: 600;
  cursor: pointer;
  transition: border-color 0.2s ease, color 0.2s ease, background 0.2s ease;
}
.album-btn svg { width: 14px; height: 14px; flex-shrink: 0; }
.album-btn:hover { border-color: var(--color-primary); color: var(--color-primary); background: rgba(245,134,52,0.06); }
.album-vazio {
  border: 1px dashed var(--color-border);
  border-radius: var(--radius-md);
  padding: var(--space-5);
  text-align: center;
  color: var(--color-ink-faint);
  font-size: var(--texto-base);
}

/* ---------- Galeria: modo de edição do álbum ---------- */
.album-rascunho {
  background: var(--color-primary-light);
  border-left: 3px solid var(--color-primary);
  border-radius: var(--radius-sm);
  padding: var(--space-3) var(--space-3);
  margin-bottom: var(--space-3);
  font-size: var(--texto-sm);
  color: var(--color-ink-soft);
}
.album-rascunho-acoes { display: flex; gap: var(--space-1); flex-wrap: wrap; margin-top: var(--space-2); }
.foto-editar {
  position: absolute;
  inset-inline: 0;
  top: 0;
  display: flex;
  justify-content: center;
  gap: var(--space-0);
  padding: var(--space-1);
  background: rgba(0,0,0,0.6);
}
.foto-editar button {
  width: 26px;
  height: 26px;
  border: 0;
  border-radius: 50%;
  background: var(--color-white);
  color: var(--color-ink);
  font-size: var(--texto-sm);
  line-height: 1;
  cursor: pointer;
}
.foto-editar button:hover { background: var(--color-primary); color: var(--color-white); }
.album.editando .foto { outline: 2px dashed var(--color-primary); outline-offset: 2px; }

/* ---------- Galeria: aviso flutuante ---------- */
.galeria-aviso {
  position: fixed;
  left: 50%;
  bottom: 24px;
  transform: translate(-50%, 12px);
  max-width: min(92vw, 460px);
  background: var(--color-ink);
  color: var(--color-white);
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-pill);
  font-size: var(--texto-sm);
  box-shadow: var(--shadow-md);
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.25s ease, transform 0.25s ease;
  z-index: 999;
  text-align: center;
}
.galeria-aviso.show { opacity: 1; transform: translate(-50%, 0); }

@media (max-width: 600px) {
  .foto-acoes { opacity: 1; background: linear-gradient(to top, rgba(0,0,0,0.6), rgba(0,0,0,0)); }
  .album-head { flex-direction: column; }
}

/* ---------- Galeria: administração ---------- */
.admin-bar { display: flex; justify-content: center; margin-bottom: var(--space-5); }
.admin-bar button { background: none; border: none; font: inherit; font-size: var(--texto-sm); color: var(--color-ink-soft); text-decoration: underline; cursor: pointer; padding: var(--space-0); }
.admin-logout-btn { display: none; }
body.is-admin .admin-login-btn { display: none; }
body.is-admin .admin-logout-btn { display: inline; }
.admin-only { display: none; }
body.is-admin .admin-only { display: flex; }
.gallery-actions { justify-content: center; }
.gallery-add-btn {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  padding: var(--space-1) var(--space-3);
  border-radius: var(--radius-pill);
  border: 1px solid rgba(44,42,40,0.16);
  background: transparent;
  color: var(--color-ink-soft);
  font-size: var(--texto-sm);
  font-weight: 600;
  cursor: pointer;
  transition: border-color 0.2s ease, color 0.2s ease, background 0.2s ease;
}
.gallery-add-btn svg { width: 14px; height: 14px; }
.gallery-add-btn:hover { border-color: var(--color-primary); color: var(--color-primary); background: rgba(245,134,52,0.06); }

/* ---------- Footer ---------- */
.site-footer { background: #221D19; color: rgba(255,255,255,0.78); }
.footer-top { padding-block: var(--space-8); display: grid; grid-template-columns: 1.3fr 0.9fr 0.9fr 0.9fr 1fr; gap: var(--space-5); }
.footer-brand img { height: 44px; margin-bottom: var(--space-4); }
.footer-brand p { color: rgba(255,255,255,0.6); font-size: var(--texto-base); max-width: 32ch; }
.footer-col h4 { color: var(--color-white); font-family: var(--font-body); font-size: var(--texto-sm); letter-spacing: 0.08em; text-transform: uppercase; margin-bottom: var(--space-4); }
.footer-col li { margin-bottom: var(--space-2); }
.footer-top > div:last-child li { margin-bottom: var(--space-0); }
.footer-top > div:last-child .footer-escola { margin-bottom: var(--space-2); }
.footer-col a { font-size: var(--texto-base); transition: color 0.2s ease; }
.footer-col a:hover { color: var(--color-primary); }
.footer-social { display: flex; gap: var(--space-2); }
.footer-social a { width: 36px; height: 36px; border-radius: 50%; background: rgba(255,255,255,0.08); display: flex; align-items: center; justify-content: center; transition: background 0.2s ease; }
.footer-social a:hover { background: var(--color-primary); }
.footer-social svg { width: 16px; height: 16px; }
.footer-bottom { border-top: 1px solid rgba(255,255,255,0.1); padding-block: var(--space-4); display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: var(--space-2); font-size: var(--texto-sm); color: rgba(255,255,255,0.55); }
.footer-bottom a:hover { color: var(--color-primary); }
.footer-admin { display: inline-flex; align-items: center; gap: 0.35em; }
.footer-admin a { display: inline-flex; align-items: center; gap: 0.35em; }
.footer-admin .footer-sair {
  background: none; border: 0; padding: 0; cursor: pointer;
  color: var(--color-primary); font: inherit; text-decoration: underline;
}

/* O MESMO MOVIMENTO DAS FOTOS DA HOME nas composicoes de foto das
   paginas de conteudo: a foto grande dos splits (Series, Essencia,
   Metodologia, Diferenciais, Resultados), a fileira de miniaturas e as
   fotos da linha do tempo. Cartao levanta, imagem aproxima de leve. */
@media (hover: hover) and (pointer: fine) {
  .split-media { transition: transform 0.3s ease, box-shadow 0.3s ease; }
  .split-media:hover { transform: translateY(-6px); box-shadow: var(--shadow-lg); }
  .split-media img, .split-media video { transition: transform 0.5s ease; }
  .split-media:hover img, .split-media:hover video { transform: scale(1.06); }

  /* A miniatura cresce DENTRO da moldura: o picture segura o estouro,
     senao a foto ampliada cobriria as vizinhas. */
  .split-thumbs picture {
    display: block;
    overflow: hidden;
    border-radius: var(--radius-sm);
    transition: transform 0.3s ease, box-shadow 0.3s ease;
  }
  .split-thumbs picture:hover { transform: translateY(-4px); box-shadow: var(--shadow-md); }
  .split-thumbs img { transition: transform 0.5s ease; }
  .split-thumbs picture:hover img { transform: scale(1.08); }

  .lt-foto { overflow: hidden; transition: transform 0.3s ease, box-shadow 0.3s ease; }
  .lt-foto:hover { transform: translateY(-4px); box-shadow: var(--shadow-md); }
  .lt-foto img { transition: transform 0.5s ease; }
  .lt-foto:hover img { transform: scale(1.06); }

  /* A grade .gallery ja aproximava a foto; ganha tambem a levantada. */
  .gallery a { transition: transform 0.3s ease, box-shadow 0.3s ease; }
  .gallery a:hover { transform: translateY(-4px); box-shadow: var(--shadow-md); }

  /* As quatro fotos de "Familia e escola": a foto e solta na grade, sem
     moldura por volta, entao o levantar e o aproximar vao na propria
     imagem — o crescimento cabe no respiro entre elas. */
  .family-gallery img { transition: transform 0.3s ease, box-shadow 0.3s ease; }
  .family-gallery img:hover { transform: translateY(-6px) scale(1.03); box-shadow: var(--shadow-md); }
}

/* O MESMO MOVIMENTO DAS FOTOS DA HOME nas paginas de fotos e
   publicacoes: cartao levanta, imagem aproxima de leve. So onde ha
   mouse de verdade — no toque, transformacao nenhuma. */
@media (hover: hover) and (pointer: fine) {
  .universo-evento.fechado { transition: transform 0.3s ease, box-shadow 0.3s ease; }
  .universo-evento.fechado:hover { transform: translateY(-6px); box-shadow: var(--shadow-md); }
  .universo-capa img { transition: transform 0.5s ease; }
  .universo-evento.fechado:hover .universo-capa img { transform: scale(1.06); }
  .universo-foto img { transition: transform 0.4s ease; }
  .universo-foto:hover img { transform: scale(1.04); }
}

/* "Funcao na escola" com mais presenca no formulario de acesso: e a
   informacao que orienta a permissao da conta. */
/* Mais especifico que o rotulo generico do painel, senao o 600 dele
   engole o 700 daqui. */
.field label.funcao-destaque {
  font-weight: 700;
  color: var(--color-white);
  font-size: var(--texto-base);
}
.funcao-destaque + .universo-dica { display: block; margin-bottom: var(--space-1); }

/* A ARTE DAS SERIES e uma so, com os dois quadros: "1º ao 5º" na
   esquerda e "6º ao 9º" na direita. Cada pagina enquadra o seu lado —
   recorte central cortaria os dois textos pela metade. */
/* A foto do topo das Series Iniciais e panoramica (4,5:1). Em tela
   larga cabe quase tudo; na tela em pe a janela mostra so um quinto da
   largura, e o recorte central cortava a menina da esquerda. 42% pega
   os dois rostos. */
@media (max-width: 860px) {
  .hero-iniciais-leitura { object-position: 42% center; }
}

/* No recorte central a cabeca da aluna encostava no topo da faixa.
   Subindo o enquadramento para 30% o rosto desce para o meio do quadro,
   com os olhos a vista, e a mao com o lapis continua aparecendo. */
.hero-calendario { object-position: center 30%; }

/* Enquadramento puxado para a direita: usado na foto do teatro, onde
   os personagens estao no lado direito do quadro. */
.foto-direita { object-position: 65% center; }

/* Campo de senha com o olho de "mostrar". */
.campo-senha { position: relative; display: block; }
.campo-senha input { width: 100%; padding-right: 2.6rem; }
.campo-senha .ver-senha {
  position: absolute;
  right: 0.6rem;
  top: 50%;
  transform: translateY(-50%);
  background: none;
  border: 0;
  padding: 0;
  cursor: pointer;
  color: var(--color-ink-faint);
  line-height: 0;
}
.campo-senha .ver-senha:hover,
.campo-senha .ver-senha.ativo { color: var(--color-primary); }

/* "Veja mais em Universo OMNI" no pe das grades de fotos: quem gostou
   do que viu tem para onde ir, em vez de a grade terminar no vazio. */
.ver-universo { margin-top: var(--space-4); text-align: right; }
.ver-universo a {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  font-size: var(--texto-sm);
  font-weight: 600;
  color: var(--color-primary);
  border-bottom: 1px solid currentColor;
  padding-bottom: 2px;
}
@media (max-width: 560px) { .ver-universo { text-align: center; } }

/* Aviso pequeno no card de topico sem nada publicado. */
.card-sem-conteudo {
  margin-top: var(--space-2);
  font-size: var(--texto-xs);
  font-style: italic;
  color: var(--color-ink-faint);
}

/* As tres contas da escola como atalho no painel de entrada. */
.universo-contas-titulo {
  font-size: var(--texto-xs);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: rgba(255,255,255,0.45);
  margin-bottom: var(--space-2);
}
.universo-contas-prontas {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  margin-bottom: var(--space-4);
}
.universo-contas-prontas button {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 2px;
  width: 100%;
  padding: var(--space-2) var(--space-3);
  background: rgba(255,255,255,0.06);
  border: 1px solid rgba(255,255,255,0.14);
  border-radius: var(--radius-sm);
  color: var(--color-white);
  cursor: pointer;
  text-align: left;
  font: inherit;
  transition: border-color 0.2s ease, background 0.2s ease;
}
.universo-contas-prontas button:hover {
  border-color: var(--color-primary);
  background: rgba(255,255,255,0.1);
}
.universo-contas-prontas strong { font-size: var(--texto-sm); }
.universo-contas-prontas span { font-size: var(--texto-xs); color: rgba(255,255,255,0.55); }

/* O Sair dentro do selo de identificacao da galeria. */
.universo-selo-sair {
  margin-left: var(--space-2);
  background: none;
  border: 0;
  padding: 0;
  cursor: pointer;
  color: var(--color-primary);
  font: inherit;
  font-size: var(--texto-xs);
  text-decoration: underline;
}

/* Assinatura do album: o rodape bem pequeno de quem publicou. */
.universo-autoria {
  margin-top: var(--space-2);
  font-size: var(--texto-mini);
  color: rgba(255,255,255,0.4);
  text-align: right;
}

@media (max-width: 900px) {
  .footer-top { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 560px) {
  .footer-top { grid-template-columns: 1fr; }
}

/* ---------- Forms ---------- */
.form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); }
.form-grid .full { grid-column: 1 / -1; }
.field { display: flex; flex-direction: column; gap: var(--space-1); }
.field label { font-weight: 600; font-size: var(--texto-sm); }
.field input, .field select, .field textarea {
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-sm);
  border: 1.5px solid var(--color-border);
  background: var(--color-white);
  transition: border-color 0.2s ease, box-shadow 0.2s ease;
}
.field input:focus, .field select:focus, .field textarea:focus {
  outline: none;
  border-color: var(--color-primary);
  box-shadow: 0 0 0 4px var(--color-primary-light);
}
.field textarea { resize: vertical; min-height: 130px; }
@media (max-width: 640px) { .form-grid { grid-template-columns: 1fr; } }

.form-note { font-size: var(--texto-sm); color: var(--color-ink-faint); margin-top: var(--space-3); }
.form-success {
  display: none;
  align-items: center;
  gap: var(--space-1);
  background: #F0F8F1;
  border: 1px solid #CDEBD1;
  color: #2A6B33;
  padding: var(--space-3) var(--space-4);
  border-radius: var(--radius-sm);
  font-weight: 600;
  margin-bottom: var(--space-4);
}
.form-success.show { display: flex; }

.contact-info-card { background: var(--color-ink); color: var(--color-white); border-radius: var(--radius-lg); padding: var(--space-6); }
.contact-info-card h3 { color: var(--color-white); }
.contact-line { display: flex; gap: var(--space-3); padding-block: var(--space-3); border-top: 1px solid rgba(255,255,255,0.12); }
.contact-line:first-of-type { border-top: none; }
.contact-line svg { width: 20px; height: 20px; color: var(--color-primary); flex-shrink: 0; margin-top: 2px; }
.contact-line strong { display: block; font-size: var(--texto-sm); color: rgba(255,255,255,0.55); font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: var(--space-0); }
.contact-line a:hover { color: var(--color-primary); }

.map-frame { border-radius: var(--radius-lg); overflow: hidden; box-shadow: var(--shadow-md); border: 0; width: 100%; aspect-ratio: 16/9; }

/* ---------- Reveal on scroll ---------- */
/* O CONTEUDO NUNCA DEPENDE DE SCRIPT PARA EXISTIR.
   Por padrao .reveal e visivel. So quando o JS confirma que esta vivo
   (classe js-anima no <html>, posta no proprio <head>) e que os blocos
   comecam escondidos para entrar animados. Se o JS falhar, o celular for
   antigo ou a conexao cair, a pagina aparece inteira — sem animacao, que
   e enfeite, e nao condicao. */
.reveal { opacity: 1; transform: none; }
html.js-anima .reveal { opacity: 0; transform: translateY(24px); transition: opacity 0.7s ease, transform 0.7s ease; }
html.js-anima .reveal.in-view { opacity: 1; transform: translateY(0); }
@media (prefers-reduced-motion: reduce) {
  html.js-anima .reveal { opacity: 1; transform: none; transition: none; }
}

/* MOVIMENTO NO CELULAR — sem mouse, sem hover.
   No toque o :hover gruda e ja nos custou botoes de dois cliques, entao
   os efeitos de mouse ficam desligados la. O celular ganha os dele:
   1) a foto entra com um zoom leve ao aparecer na tela (acompanha o
      reveal, que ja funciona em qualquer dispositivo);
   2) ao tocar, o cartao responde com uma pressao sutil — escala para
      DENTRO, nunca desloca o alvo de debaixo do dedo. */
@media (hover: none) {
  /* Gatilho POR FOTO (js/main.js marca .foto-na-tela quando ela chega
     na tela), e nao do bloco: numa fileira de 4 ou 7, cada uma se
     assenta na sua vez. */
  html.js-anima img.foto-anima {
    transform: scale(1.07);
    transition: transform 1.1s cubic-bezier(0.22, 0.61, 0.36, 1);
  }
  html.js-anima img.foto-anima.foto-na-tela { transform: scale(1); }
  /* molduras que precisam segurar o zoom da entrada */
  .lt-foto, .split-thumbs picture { overflow: hidden; }
  .split-thumbs picture { display: block; border-radius: var(--radius-sm); }

  .card, .diff-card, .split-media, .gallery a, .reel-card,
  .universo-evento.fechado, .universo-foto, .lt-foto,
  .family-gallery img, .split-thumbs picture {
    transition: transform 0.15s ease;
  }
  .card:active, .diff-card:active, .split-media:active, .gallery a:active, .reel-card:active,
  .universo-evento.fechado:active, .universo-foto:active, .lt-foto:active,
  .family-gallery img:active, .split-thumbs picture:active {
    transform: scale(0.98);
  }
}
@media (hover: none) and (prefers-reduced-motion: reduce) {
  html.js-anima img.foto-anima { transform: none; transition: none; }
}

/* ---------- Back to top ---------- */
/* O canto inferior direito e da Nina (nina/motor/nina.css usa right/bottom 22px).
   O voltar-ao-topo convive com a Nina indo para a esquerda, acima do WhatsApp. */
.back-to-top {
  position: fixed;
  left: var(--space-4);
  bottom: calc(var(--space-4) + 62px);
  width: 48px; height: 48px;
  border-radius: 50%;
  background: var(--color-ink);
  color: var(--color-white);
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: var(--shadow-md);
  opacity: 0;
  visibility: hidden;
  transform: translateY(10px);
  transition: opacity 0.25s ease, transform 0.25s ease, visibility 0.25s, background 0.2s ease;
  z-index: 80;
}
.back-to-top.show { opacity: 1; visibility: visible; transform: translateY(0); }
.back-to-top:hover { background: var(--color-primary); }
.back-to-top svg { width: 18px; height: 18px; }

/* ---------- Whatsapp float ---------- */
.whatsapp-float {
  position: fixed;
  left: var(--space-4);
  bottom: var(--space-4);
  display: flex;
  align-items: center;
  gap: var(--space-1);
  background: #25D366;
  color: var(--color-white);
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-pill);
  box-shadow: 0 12px 28px rgba(37,211,102,0.35);
  font-weight: 700;
  font-size: var(--texto-sm);
  z-index: 80;
  transition: transform 0.2s ease;
}
.whatsapp-float:hover { transform: translateY(-3px); }
.whatsapp-float svg { width: 20px; height: 20px; }
@media (max-width: 640px) { .whatsapp-float span { display: none; } .whatsapp-float { padding: var(--space-2); } }

/* ---------- Misc ---------- */
.divider { height: 1px; background: var(--color-border); }
.text-center { text-align: center; }
.mt-5 { margin-top: var(--space-5); }
.mt-6 { margin-top: var(--space-6); }
.mb-0 { margin-bottom: 0; }
.badge-anniv {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  background: var(--color-white);
  border: 1px solid var(--color-primary-soft);
  color: var(--color-primary-hover);
  padding: var(--space-1) var(--space-3);
  border-radius: var(--radius-pill);
  font-weight: 700;
  font-size: var(--texto-sm);
  box-shadow: var(--shadow-sm);
}

::selection { background: var(--color-primary); color: var(--color-white); }

/* ---------- Arquivos por mês (listas semanais, plantão) ---------- */
.mes-lista { display: flex; flex-direction: column; gap: var(--space-3); }
.mes-bloco {
  background: var(--color-white);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-sm);
  overflow: hidden;
}
.mes-bloco > summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  padding: 1.1rem var(--space-5);
  cursor: pointer;
  list-style: none;
  transition: background 0.2s ease;
}
.mes-bloco > summary::-webkit-details-marker { display: none; }
.mes-bloco > summary:hover { background: var(--color-cream); }
.mes-bloco > summary h3 { font-family: var(--font-display); font-size: var(--texto-lg); margin: 0; }
.mes-meta { display: flex; align-items: center; gap: var(--space-3); color: var(--color-ink-faint); font-size: var(--texto-sm); }
.mes-meta svg { width: 18px; height: 18px; transition: transform 0.25s ease; flex-shrink: 0; }
.mes-bloco[open] > summary { border-bottom: 1px solid var(--color-border); background: var(--color-cream); }
.mes-bloco[open] .mes-meta svg { transform: rotate(180deg); }
.mes-corpo { padding: var(--space-4) var(--space-5) var(--space-5); }
.mes-nota {
  background: var(--color-primary-light);
  border-left: 3px solid var(--color-primary);
  border-radius: var(--radius-sm);
  padding: var(--space-2) var(--space-3);
  font-size: var(--texto-sm);
  color: var(--color-ink-soft);
  margin-bottom: var(--space-4);
}
.arq-data {
  font-family: var(--font-body);
  font-size: var(--texto-sm);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--color-primary);
  font-weight: 700;
  padding-bottom: var(--space-1);
  border-bottom: 1px solid var(--color-border);
  margin-bottom: var(--space-3);
}
.arq-data + .arq-disc { margin-top: 0; }
.arq-disc { font-size: var(--texto-base); font-weight: 700; color: var(--color-ink); margin: var(--space-3) 0 0.7rem; }
.arq-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: var(--space-2); margin-bottom: var(--space-4); }
.arq-item {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  padding: var(--space-2) var(--space-3);
  background: var(--color-cream);
}
.arq-item strong { display: block; font-size: var(--texto-sm); color: var(--color-ink); margin-bottom: var(--space-1); }
.arq-item span { display: block; font-size: var(--texto-xs); color: var(--color-ink-faint); margin-bottom: var(--space-1); }
.arq-acoes { display: flex; flex-wrap: wrap; gap: var(--space-1); }
.arq-link {
  display: inline-flex;
  align-items: center;
  gap: var(--space-0);
  padding: var(--space-1) var(--space-2);
  border-radius: var(--radius-pill);
  font-size: var(--texto-xs);
  font-weight: 600;
  background: var(--color-primary);
  color: var(--color-white);
  transition: background 0.2s ease, transform 0.2s ease;
}
.arq-link svg { width: 13px; height: 13px; flex-shrink: 0; }
.arq-link:hover { background: var(--color-primary-hover); transform: translateY(-1px); }
.arq-link.is-gabarito { background: transparent; color: var(--color-ink-soft); border: 1px solid var(--color-border); }
.arq-link.is-gabarito:hover { background: var(--color-white); color: var(--color-primary); border-color: var(--color-primary); }
.arq-vazio { font-size: var(--texto-sm); color: var(--color-ink-faint); font-style: italic; margin-bottom: var(--space-3); }

/* ---------- Páginas de texto legal ---------- */
.legal-texto { max-width: 74ch; }
.legal-texto .lede { margin-bottom: var(--space-1); }
.legal-data { font-size: var(--texto-sm); color: var(--color-ink-faint); margin-bottom: var(--space-5); }
.legal-texto h2 {
  font-family: var(--font-display);
  font-size: var(--texto-xl);
  margin-top: var(--space-6);
  margin-bottom: var(--space-3);
  padding-bottom: var(--space-1);
  border-bottom: 1px solid var(--color-border);
}
.legal-texto p { color: var(--color-ink-soft); font-size: var(--texto-base); line-height: var(--linha-longa); margin-bottom: var(--space-3); }
.legal-texto a { color: var(--color-primary); font-weight: 600; }
.legal-texto a:hover { text-decoration: underline; }
.legal-texto strong { color: var(--color-ink); }
.legal-texto em { color: var(--color-primary-hover); font-style: normal; font-weight: 600; background: var(--color-primary-light); padding: 0.05em 0.35em; border-radius: 4px; }

/* ---------- Rotina Diária: texto corrido dentro do acordeão ---------- */
.rotina-texto { max-width: 74ch; }
.rotina-texto p { color: var(--color-ink-soft); font-size: var(--texto-base); line-height: var(--linha-longa); margin-bottom: var(--space-2); }
.rotina-texto p:last-child { margin-bottom: 0; }
.rotina-texto strong { color: var(--color-ink); font-weight: 700; }
.mes-bloco .mes-meta { text-transform: none; }

/* ---------- Informativos com imagem ---------- */
.info-card { padding: 0; overflow: hidden; display: flex; flex-direction: column; }
.info-thumb { aspect-ratio: 4 / 3; overflow: hidden; background: var(--color-gray-100); }
.info-thumb img { width: 100%; height: 100%; object-fit: cover; object-position: top center; transition: transform 0.4s ease; }
.info-card:hover .info-thumb img { transform: scale(1.05); }
.info-corpo { padding: var(--space-4); display: flex; flex-direction: column; gap: var(--space-1); flex: 1; }
.info-corpo h3 { font-size: var(--texto-md); }
.info-data { color: var(--color-primary); font-weight: 700; font-size: var(--texto-xs); letter-spacing: 0.06em; text-transform: uppercase; }
.info-ver { margin-top: auto; padding-top: var(--space-1); font-size: var(--texto-sm); font-weight: 600; color: var(--color-ink-faint); }
.info-card:hover .info-ver { color: var(--color-primary); }

@media (max-width: 600px) {
  .mes-bloco > summary { padding: 0.9rem var(--space-4); }
  .mes-corpo { padding: var(--space-3) var(--space-4) var(--space-4); }
  .arq-grid { grid-template-columns: 1fr; }
}

@media (max-width: 900px) {
  .footer-top .footer-brand { grid-column: 1 / -1; }
}

/* Cadeado do Portal do Professor, no rodape ao lado do nome da escola.
   Sem texto, como no site atual: quem precisa sabe o que e. */
.footer-cadeado {
  display: inline-flex;
  align-items: center;
  margin-left: var(--space-1);
  vertical-align: -3px;
  color: rgba(255,255,255,0.5);
  transition: color 0.2s ease, transform 0.2s ease;
}
.footer-cadeado svg { width: 14px; height: 14px; }
.footer-cadeado:hover { color: var(--color-primary); transform: translateY(-1px); }
.footer-cadeado:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 3px; border-radius: 3px; }
/* ---------- Rodape: escola, cadeado do Portal do Professor e enderecos ---------- */
.footer-escola {
  display: flex;
  align-items: center;
  color: var(--color-white);
  font-weight: 600;
  font-size: var(--texto-base);
  margin-bottom: var(--space-3);
}
.footer-enderecos { margin-top: var(--space-1); }
.footer-enderecos li {
  margin-bottom: var(--space-0);
  font-size: var(--texto-sm);
  line-height: var(--linha-curta);
  color: rgba(255,255,255,0.78);
}
/* o rotulo explica qual portao e, que e a duvida real de quem chega */
.footer-enderecos li span {
  display: block;
  font-size: var(--texto-xs);
  color: rgba(255,255,255,0.5);
  margin-bottom: var(--space-0);
}
.footer-enderecos li.footer-cidade { color: rgba(255,255,255,0.6); font-size: var(--texto-sm); }

/* Botao de mapa, igual ao da landing */
.btn-mapa {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  margin: var(--space-0) 0 var(--space-0);
  padding: var(--space-1) var(--space-3);
  border-radius: var(--radius-pill);
  background: var(--color-primary);
  color: var(--color-white);
  font-weight: 700;
  font-size: var(--texto-sm);
  box-shadow: 0 8px 20px rgba(245,134,52,0.32);
  transition: transform 0.2s ease, box-shadow 0.2s ease, background 0.2s ease;
}
.btn-mapa:hover { background: var(--color-primary-hover); color: var(--color-white); transform: translateY(-2px); box-shadow: 0 12px 26px rgba(245,134,52,0.45); }
.btn-mapa svg { width: 17px; height: 17px; flex-shrink: 0; }

/* Enderecos na pagina de Contato */
.contato-endereco { display: block; margin-top: var(--space-1); }
.contato-endereco em {
  display: block;
  font-style: normal;
  font-size: var(--texto-sm);
  color: var(--color-ink-faint);
  margin-bottom: var(--space-0);
}
.contato-cidade { display: block; margin-top: var(--space-2); color: var(--color-ink-faint); font-size: var(--texto-sm); }
/* ---------- Junção entre seções ----------
   Cada .section traz respiro em cima e embaixo. Quando duas se encostam e o
   fundo muda de cor, a soma dos dois faz sentido: marca a troca. Quando o
   fundo é o mesmo, a soma vira só um buraco no meio da página. Nesse caso a
   de baixo abre mão do respiro de cima e sobra o espaçamento de uma só. */
.section:not([class*="bg-"]) + .section:not([class*="bg-"]) {
  padding-top: clamp(0.5rem, 1vw, 1rem);
}

/* ---------- CTA final da home ----------
   Fecha a página sozinho, sem outro bloco laranja logo acima. Por isso pede
   menos volume que o .cta-banner comum: respiro interno menor, texto em
   coluna estreita e o botão perto da frase, em vez de solto no fim de um
   bloco alto. */
.cta-banner.cta-final {
  flex-direction: column;
  text-align: center;
  padding: clamp(2rem, 3.4vw, 2.9rem) clamp(1.5rem, 4vw, 3rem);
  gap: var(--space-4);
}
.cta-banner.cta-final h2 {
  font-size: var(--titulo-2);
  /* largura solta: o titulo vai ate perto da borda e o box perde altura */
  max-width: 100%;
  margin-inline: auto;
  margin-bottom: var(--space-1);
  text-wrap: balance;
}
.cta-banner.cta-final p {
  max-width: 100%;
  margin-inline: auto;
  font-size: var(--texto-base);
  line-height: var(--linha-media);
  text-wrap: pretty;
}
.cta-banner.cta-final .cta-actions { justify-content: center; }
/* Cabecalho de secao sem trava de largura: o texto vai ate a margem do site */
.section-head.largo { max-width: 100%; }
.section-head.largo p,
.section-head.largo .lede { max-width: 100%; margin-inline: auto; text-wrap: pretty; }

/* ---------- Bloco de serie, vindo da landing page ---------- */
.series-badge {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  padding: var(--space-1) var(--space-3);
  margin-right: var(--space-3);
  margin-bottom: var(--space-2);
  border-radius: var(--radius-pill);
  font-weight: 700;
  font-size: var(--texto-sm);
  background: var(--color-primary-light);
  color: var(--color-primary-hover);
}
.series-chip-list { display: flex; flex-wrap: wrap; gap: var(--space-2); margin-top: var(--space-5); }
.series-chip {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  padding: var(--space-1) var(--space-3);
  border-radius: var(--radius-pill);
  font-weight: 600;
  font-size: var(--texto-sm);
  background: var(--color-white);
  border: 1px solid var(--color-border);
  box-shadow: var(--shadow-sm);
}
.series-chip svg { width: 16px; height: 16px; color: var(--color-primary); flex-shrink: 0; }

/* Foto grande com a tira de miniaturas embaixo */
.split-media-group { display: flex; flex-direction: column; gap: var(--space-3); }
.split-thumbs { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--space-1); }
.split-thumbs img {
  width: 100%;
  aspect-ratio: 1/1;
  object-fit: cover;
  border-radius: var(--radius-sm);
  box-shadow: var(--shadow-sm);
}
@media (max-width: 560px) { .split-thumbs { gap: var(--space-1); } }

/* TEXTO DE ABERTURA — um bloco so, ate a margem do conteudo.
   Antes ele quebrava em duas colunas no computador. Duas colunas obrigam
   o olho a subir de volta no meio da tela, e num texto de cinco linhas
   isso nao compensa: parece que a pagina tem dois pedacos soltos. */
.texto-abertura { max-width: 100%; }
.texto-abertura > h2 { margin-bottom: var(--space-3); }
.texto-abertura > .lede,
.texto-abertura > p { max-width: 100%; }

/* ---------- Bloco escuro das Series Finais, vindo da landing page ---------- */
.series-block { padding-block: clamp(var(--space-5), 4.5vw, var(--space-7)); position: relative; }
.series-block.finais { background: var(--color-ink); color: var(--color-white); }
.series-block.finais h2, .series-block.finais h3 { color: var(--color-white); }
.series-block.finais .lede { color: rgba(255,255,255,0.85); }
.series-block.finais .series-badge { background: var(--color-primary-vivid); color: var(--color-white); }
.series-block.finais .series-chip {
  background: rgba(255,255,255,0.08);
  border-color: rgba(255,255,255,0.18);
  color: var(--color-white);
}
.series-block.finais .series-chip svg { color: var(--color-primary-vivid); }
.chip-group-label {
  flex-basis: 100%;
  font-family: var(--font-display);
  font-weight: 600;
  font-size: var(--texto-base);
  letter-spacing: 0.01em;
  color: var(--color-primary-soft);
  margin-top: var(--space-1);
}
.chip-subtitle {
  font-family: var(--font-display);
  font-style: italic;
  font-weight: 500;
  font-size: var(--texto-md);
  color: var(--color-primary-soft);
  margin: var(--space-4) 0 0;
}

/* Secao que termina logo antes de outra com fundo proprio: a troca de fundo
   ja separa os assuntos, entao o vao de baixo pode ser bem menor. */
.pb-curto { padding-bottom: var(--space-5); }

/* ---------- Galeria de Nossa Historia, vinda da landing page ---------- */
.historia-gallery {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
  max-width: 78%;
  margin-inline: auto;
}
.historia-photo { margin: 0; }
.historia-photo img {
  width: 100%;
  aspect-ratio: 4/3;
  object-fit: cover;
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-md);
  display: block;
}
.historia-photo figcaption {
  margin-top: var(--space-1);
  font-size: var(--texto-sm);
  color: var(--color-ink-soft);
  text-align: center;
}

/* ---------- Linha do tempo dos 20 anos ---------- */
.linha-tempo {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--space-4) var(--space-4);
}
.lt-item { margin: 0; }
.lt-foto {
  border-radius: var(--radius-md);
  overflow: hidden;
  box-shadow: var(--shadow-sm);
  aspect-ratio: 4/3;
}
.lt-foto img { width: 100%; height: 100%; object-fit: cover; display: block; }
.lt-item figcaption {
  margin-top: var(--space-1);
  font-size: var(--texto-sm);
  line-height: var(--linha-media);
  color: var(--color-ink-soft);
}
/* o ano e a ancora da leitura: fica sempre na frente da legenda */
.lt-ano {
  display: block;
  font-family: var(--font-display);
  font-weight: 700;
  font-size: var(--texto-md);
  color: var(--color-primary);
  margin-bottom: var(--space-0);
}
/* ano sem foto no acervo: o espaco continua reservado, so que vazio */
.lt-vazio .lt-foto {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--space-3);
  text-align: center;
  background: var(--color-cream);
  border: 1px dashed var(--color-border);
  box-shadow: none;
}
.lt-vazio .lt-foto span { font-size: var(--texto-xs); color: var(--color-ink-faint); }
.lt-vazio .lt-ano { color: var(--color-ink-faint); }

@media (max-width: 900px) { .linha-tempo { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 620px) { .linha-tempo { grid-template-columns: repeat(2, 1fr); gap: var(--space-3); } }

/* ---------- Convite final de pagina, vindo da landing ---------- */
.cta-full {
  position: relative;
  min-height: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  color: var(--color-white);
  overflow: hidden;
}
.cta-full-media { position: absolute; inset: 0; z-index: 0; }
.cta-full-media img { width: 100%; height: 100%; object-fit: cover; }
.cta-full-media::after { content: ""; position: absolute; inset: 0; background: rgba(20,17,14,0.62); }
.cta-full-content {
  position: relative;
  z-index: 1;
  max-width: 720px;
  margin-inline: auto;
  padding-block: clamp(var(--space-6), 5vw, var(--space-8));
}
.cta-full-content h2 { color: var(--color-white); }
.cta-full-content p { color: rgba(255,255,255,0.9); margin-top: var(--space-4); font-size: var(--texto-md); }
.cta-full-actions { display: flex; justify-content: center; margin-top: var(--space-5); }

/* ---------- Split com a foto presa ao topo do titulo e ao fim do texto ---------- */
@media (min-width: 901px) {
  .split-alinhado { align-items: stretch; }
  .split-alinhado .split-media img,
  .split-alinhado .split-media video { height: 100%; aspect-ratio: auto; }
}

/* ---------- Subtitulo do hero em duas linhas, alinhado ao "alta" do titulo ---------- */
.hero-content .hero-sub-grande {
  /* Mesma fonte, mesmo tamanho e mesmo peso da frase que abre o hero.
     As duas emolduram o titulo — se uma for serifada e a outra nao, o
     titulo fica entre dois mundos e a moldura se desfaz. */
  max-width: none;
  font-family: var(--font-display);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(1.05rem, 1.9vw, 1.4rem);
  line-height: var(--linha-media);

}
/* em tela estreita a quebra fixa atrapalha: o texto volta a fluir sozinho */
@media (max-width: 700px) {
  /* Sem tamanho proprio no celular: a frase de baixo segue a mesma curva
     da de cima, senao a dupla se desalinha justamente na tela menor. */
}

/* ---------- Instagram no menu: um so icone, alinhado e animado ---------- */
.nav-insta { display: flex; align-items: center; }
.nav-list > li.nav-insta > a,
.nav-insta a {
  display: inline-flex;
  width: 40px;
  height: 40px;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  /* degrade oficial do Instagram */
  background: radial-gradient(circle at 30% 110%, #FDF497 0%, #FDF497 5%, #FD5949 45%, #D6249F 60%, #285AEB 90%);
  color: var(--color-white);
  transition: filter 0.2s ease, transform 0.2s ease;
  animation: insta-acena 4.5s ease-in-out infinite;
}
.nav-insta a:hover { filter: brightness(1.12); animation-play-state: paused; }
@keyframes insta-acena {
  0%, 76%, 100% { transform: scale(1) rotate(0); }
  80% { transform: scale(1.18) rotate(-10deg); }
  84% { transform: scale(1.18) rotate(10deg); }
  88% { transform: scale(1.12) rotate(-6deg); }
  92% { transform: scale(1) rotate(0); }
}
@media (prefers-reduced-motion: reduce) { .nav-insta a { animation: none; } }
@media (max-width: 900px) { .nav-insta { justify-content: center; margin-top: var(--space-2); } }

/* ---------- Rodape: titulos em ocre, listas compactas, seta nos topicos ---------- */
.footer-col h4 { color: var(--color-primary-soft); }
.footer-col li { margin-bottom: var(--space-0); }
.footer-col h4 { margin-bottom: var(--space-3); }
.footer-col ul a::before {
  content: "› ";
  color: var(--color-primary);
  font-weight: 700;
  margin-right: var(--space-1);
}
/* o e-mail e comprido: a seta quebrava sozinha para a linha de cima */
.footer-col ul a[href^="mailto:"]::before { content: none; }
.footer-col ul a[href*="google.com/maps"]::before { content: none; }

/* ---------- Botao de remover foto, so no modo administrador ---------- */
.foto-remover {
  display: none;
  position: absolute;
  top: 8px;
  right: 8px;
  width: 30px;
  height: 30px;
  border: 0;
  border-radius: 50%;
  background: rgba(200, 30, 30, 0.92);
  color: #fff;
  font-size: var(--texto-lg);
  line-height: 1;
  cursor: pointer;
  z-index: 3;
  box-shadow: var(--shadow-sm);
}
.foto-remover:hover { background: #a51212; }
body.is-admin .gallery figure { position: relative; }
body.is-admin .foto-remover { display: inline-flex; align-items: center; justify-content: center; }

/* ---------- Familia e escola, vindo da landing page ---------- */
/* identico ao da landing */
/* Um bloco so, ate a margem do conteudo. Duas colunas num texto de tres
   linhas nao ajudam a leitura: obrigam o olho a voltar ao meio da tela. */
.family-copy { margin-bottom: var(--space-6); }
.family-copy p { max-width: 100%; }
.family-copy p + p { margin-top: var(--space-3); }
.family-gallery { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--space-4); }
.family-gallery img { width: 100%; aspect-ratio: 3/4; object-fit: cover; border-radius: var(--radius-md); box-shadow: var(--shadow-sm); }
@media (max-width: 760px) { .family-gallery { grid-template-columns: repeat(2, 1fr); } }

/* ---------- Edicao de album: apagar album e sem controles duplicados ---------- */
.album-apagar {
  background: #B42318;
  color: var(--color-white);
  border: 0;
}
.album-apagar:hover { background: #8E1A12; color: var(--color-white); }
/* durante a edicao os controles por foto ja tem o X proprio */
.album.editando .foto-remover { display: none !important; }

/* ---------- Box de criar album, so no modo administrador ---------- */
.album-novo-box {
  align-items: center;
  justify-content: space-between;
  gap: var(--space-4);
  flex-wrap: wrap;
  margin-top: var(--space-5);
  padding: clamp(1.5rem, 3vw, 2.2rem);
  border-radius: var(--radius-lg);
  background: linear-gradient(120deg, var(--color-primary) 0%, #FF9E4D 100%);
  color: var(--color-white);
  box-shadow: var(--shadow-orange);
}
.album-novo-box h3 { color: var(--color-white); margin-bottom: var(--space-0); }
.album-novo-box p { color: rgba(255,255,255,0.9); max-width: 52ch; }

/* ---------- Vizinhos de mesmo fundo: um respiro so, nunca dois ---------- */
.section:not([class*="bg-"]):has(+ .section:not([class*="bg-"])),
.section:not([class*="bg-"]):has(+ .section-tight:not([class*="bg-"])),
.section-tight:not([class*="bg-"]):has(+ .section:not([class*="bg-"])),
[class*="bg-cream"]:has(+ [class*="bg-cream"]) {
  padding-bottom: clamp(1.8rem, 3vw, 2.6rem);
}
.section:not([class*="bg-"]) + .section-tight:not([class*="bg-"]),
.section-tight:not([class*="bg-"]) + .section:not([class*="bg-"]),
.section-tight:not([class*="bg-"]) + .section-tight:not([class*="bg-"]),
[class*="bg-cream"] + [class*="bg-cream"] {
  padding-top: clamp(0.5rem, 1vw, 1rem);
}

/* ===================================================================

   UNIVERSO OMNI — galeria de momentos da escola

   Sanfona: o título É o botão. Fechada, ocupa pouco e convida; aberta,

   revela os eventos publicados pela equipe.

   O fundo escuro repete o tratamento das Séries Finais e serve a dois

   propósitos: separa "Parceria" (branco) de "Nossa História" (creme),

   que ficariam colados, e dá a sensação de entrar em outro lugar.

   =================================================================== */

.universo { background: var(--color-ink); color: rgba(255,255,255,0.8); }

.universo h2, .universo h3, .universo h4 { color: var(--color-white); }



/* --- O título-botão --- */

.universo-toggle {

  display: block; width: 100%; text-align: center;

  padding: clamp(1.75rem, 4vw, 2.75rem) var(--space-4);

  border-radius: var(--radius-lg);

  border: 1px solid rgba(255,255,255,0.14);

  background: rgba(255,255,255,0.04);

  transition: background 0.3s ease, border-color 0.3s ease, transform 0.3s ease;

}

.universo-toggle:hover {

  background: rgba(255,255,255,0.07);

  border-color: rgba(255,255,255,0.3);

  transform: translateY(-3px);

}

.universo-toggle .eyebrow { color: var(--color-primary-vivid); justify-content: center; }

.universo-toggle h2 { margin-bottom: var(--space-3); }

.universo-sub { color: rgba(255,255,255,0.62); max-width: 54ch; margin-inline: auto; font-size: var(--texto-base); }

.universo-cue {

  display: inline-flex; align-items: center; gap: var(--space-1); margin-top: var(--space-4);

  padding: var(--space-1) var(--space-4); border-radius: var(--radius-pill);

  background: var(--color-primary-vivid); color: var(--color-white);

  font-weight: 700; font-size: var(--texto-sm);

  box-shadow: 0 12px 28px rgba(255,106,0,0.35);

}

.universo-cue svg { width: 18px; height: 18px; transition: transform 0.35s ease; }

.universo-toggle[aria-expanded="true"] .universo-cue svg { transform: rotate(180deg); }



/* --- Área do administrador ---

   Discreta de propósito: é porta de serviço, não chamada para o visitante.

   Fica abaixo do cartão, com peso visual de rodapé. */

.universo-admin {

  display: flex; justify-content: center; align-items: center; gap: var(--space-1);

  margin-top: var(--space-4);

}

.universo-admin button {

  display: inline-flex; align-items: center; gap: var(--space-1);

  padding: var(--space-1) var(--space-3); border-radius: var(--radius-pill);

  color: rgba(255,255,255,0.42); font-size: var(--texto-sm); font-weight: 600;

  transition: color 0.2s ease, background 0.2s ease;

}

.universo-admin button:hover { color: rgba(255,255,255,0.85); background: rgba(255,255,255,0.06); }

.universo-admin svg { width: 14px; height: 14px; }



/* --- O painel que abre --- */

.universo-painel[hidden] { display: none; }

.universo-painel {

  margin-top: var(--space-6);

  animation: universo-abrir 0.5s cubic-bezier(0.22, 0.61, 0.36, 1) both;

}

@keyframes universo-abrir {

  from { opacity: 0; transform: translateY(-14px); }

  to   { opacity: 1; transform: translateY(0); }

}

@media (prefers-reduced-motion: reduce) { .universo-painel { animation: none; } }



.universo-barra {

  display: flex; align-items: center; justify-content: space-between;

  gap: var(--space-4); flex-wrap: wrap;

  padding-bottom: var(--space-4); margin-bottom: var(--space-5);

  border-bottom: 1px solid rgba(255,255,255,0.12);

}

.universo-contagem { color: rgba(255,255,255,0.55); font-size: var(--texto-base); margin: 0; }

.universo-barra .btn { padding: var(--space-2) var(--space-4); font-size: var(--texto-base); }



/* --- Cartão de evento --- */

.universo-evento {

  background: rgba(255,255,255,0.045);

  border: 1px solid rgba(255,255,255,0.12);

  border-radius: var(--radius-md);

  padding: clamp(1.25rem, 3vw, 2rem);

  margin-bottom: var(--space-5);

}

.universo-evento-topo { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--space-3); }

.universo-data {

  display: inline-flex; align-items: center; gap: var(--space-1); flex-shrink: 0;

  padding: var(--space-0) var(--space-3); border-radius: var(--radius-pill);

  background: var(--color-primary-vivid); color: var(--color-white);

  font-weight: 700; font-size: var(--texto-xs); letter-spacing: 0.02em;

}

.universo-data svg { width: 14px; height: 14px; }

.universo-evento h3 { margin: var(--space-3) 0 var(--space-2); }

.universo-texto { color: rgba(255,255,255,0.72); max-width: 72ch; font-size: var(--texto-base); }

.universo-acoes { display: flex; gap: var(--space-1); flex-shrink: 0; }

.universo-acao {

  width: 34px; height: 34px; border-radius: 50%;

  display: inline-flex; align-items: center; justify-content: center;

  background: rgba(255,255,255,0.08); color: rgba(255,255,255,0.75);

  transition: background 0.2s ease, color 0.2s ease;

}

.universo-acao:hover { background: rgba(255,255,255,0.18); color: var(--color-white); }

.universo-acao.perigo:hover { background: #C0392B; color: var(--color-white); }

.universo-acao svg { width: 16px; height: 16px; }

.universo-acao { position: relative; }



/* Confirmação do "Link copiado", no computador — no celular quem responde

   é a bandeja do próprio sistema. */

.universo-aviso {

  position: absolute; bottom: calc(100% + 8px); left: 50%; transform: translateX(-50%);

  padding: var(--space-0) var(--space-2); border-radius: var(--radius-pill);

  background: var(--color-primary); color: var(--color-white);

  font-size: var(--texto-xs); font-weight: 700; white-space: nowrap; pointer-events: none;

  box-shadow: 0 8px 18px rgba(245,134,52,0.35);

  animation: universo-fade 0.2s ease both;

}



/* Mosaico: coluna de largura fixa, altura livre. É isso que mantém o

   padrão único de tamanho e compressão deixando a proporção de cada

   foto intacta — retrato, paisagem e quadrada convivem sem corte. */

.universo-fotos { columns: 3; column-gap: var(--space-3); margin-top: var(--space-4); }

@media (max-width: 900px) { .universo-fotos { columns: 2; } }



.universo-foto {

  break-inside: avoid; position: relative; margin: 0 0 var(--space-3);

  border-radius: var(--radius-sm); overflow: hidden;

  box-shadow: var(--shadow-md); background: rgba(255,255,255,0.06);

}

.universo-foto-abrir { display: block; width: 100%; cursor: zoom-in; }

.universo-foto img { width: 100%; height: auto; display: block; transition: transform 0.5s ease; }

.universo-foto:hover img { transform: scale(1.05); }



/* Coração e download sobre a foto.

   No computador aparecem ao passar o mouse; no celular ficam sempre

   visíveis, porque lá não existe "passar o mouse" — e é no celular que o

   pai vai usar. O degradê atrás garante contraste sobre foto clara. */

.universo-foto-acoes {

  position: absolute; right: 0; bottom: 0; left: 0; z-index: 2;

  display: flex; justify-content: flex-end; align-items: center; gap: var(--space-1);

  padding: var(--space-5) var(--space-2) var(--space-2);

  background: linear-gradient(0deg, rgba(20,17,14,0.6) 0%, transparent 100%);

  opacity: 0; transition: opacity 0.25s ease;

  pointer-events: none;

}

.universo-foto:hover .universo-foto-acoes,

.universo-foto:focus-within .universo-foto-acoes { opacity: 1; }

.universo-foto-acoes > * { pointer-events: auto; }



.universo-coracao, .universo-baixar-foto {

  display: inline-flex; align-items: center; justify-content: center; gap: var(--space-0);

  min-width: 38px; height: 38px; padding: 0 var(--space-2); border-radius: var(--radius-pill);

  background: rgba(255,255,255,0.92); color: var(--color-ink);

  box-shadow: 0 4px 14px rgba(20,17,14,0.3);

  transition: transform 0.2s ease, background 0.2s ease, color 0.2s ease;

}

.universo-coracao:hover, .universo-baixar-foto:hover { transform: scale(1.1); background: #fff; }

.universo-coracao svg, .universo-baixar-foto svg { width: 19px; height: 19px; flex-shrink: 0; }



/* Vazio, o coração é só contorno. Curtido, enche de vermelho. */

.universo-coracao svg { fill: none; transition: fill 0.25s ease; }

.universo-coracao.curtida { color: #E0245E; }

.universo-coracao.curtida svg { fill: #E0245E; }

.universo-conta { font-size: var(--texto-sm); font-weight: 700; }



.universo-coracao.pulsa svg { animation: universo-bater 0.45s ease; }

@keyframes universo-bater {

  0% { transform: scale(1); }

  40% { transform: scale(1.35); }

  70% { transform: scale(0.92); }

  100% { transform: scale(1); }

}

@media (prefers-reduced-motion: reduce) {

  .universo-coracao.pulsa svg { animation: none; }

}



/* Celular e tablet: sempre à vista, e um pouco maiores. */

@media (hover: none), (max-width: 760px) {

  .universo-foto-acoes { opacity: 1; }

  .universo-coracao, .universo-baixar-foto { min-width: 42px; height: 42px; }

  .universo-coracao svg, .universo-baixar-foto svg { width: 21px; height: 21px; }

}



/* -----------------------------------------------------------------

   A FOLHA DE CONTATO



   Álbum de 100 fotos em coluna livre viraria uma rolagem de dez mil

   pixels, e no celular uma foto por tela viraria 100 telas. A miniatura

   pequena resolve os dois: a pessoa vê o álbum inteiro de uma vez, toca

   na que interessa e a partir dali passa foto a foto.



   Quem manda aqui é o TAMANHO DO ÁLBUM, não o da tela. Até 12 fotos

   continua a coluna livre, com retrato, paisagem e quadrada convivendo

   sem corte — seis fotos viradas selo seriam seis selos perdidos numa

   faixa. Acima disso, folha de contato.



   O corte quadrado existe só na miniatura: a foto aberta continua

   inteira, na proporção original.



   No celular são quatro por linha (--omni-mosaico); no computador a

   miniatura tem largura mínima e o número de colunas sai da tela.

   ----------------------------------------------------------------- */

.universo-fotos.universo-mosaico {

  columns: auto;

  display: grid;

  grid-template-columns: repeat(auto-fill, minmax(var(--omni-mosaico-min, 130px), 1fr));

  gap: 4px;

}

.universo-mosaico .universo-foto {

  margin: 0;

  aspect-ratio: 1;

  border-radius: 4px;

  box-shadow: none;

}

.universo-mosaico .universo-foto-abrir { height: 100%; }

.universo-mosaico .universo-foto img { height: 100%; object-fit: cover; }



/* Coração e baixar somem da miniatura. Não é falta de espaço: é que os

   dois botões lado a lado ocupariam a largura do quadro inteiro. Ambos

   continuam na foto aberta, a um clique. O que fica é a marca de já

   curtida — um ponto, porque o coração não se lê nesse tamanho. */

.universo-mosaico .universo-foto-acoes { display: none; }

.universo-mosaico .universo-foto:has(.universo-coracao.curtida)::after {

  content: "";

  position: absolute; right: 5px; bottom: 5px;

  width: 8px; height: 8px; border-radius: 50%;

  background: #E0245E;

  box-shadow: 0 0 0 1.5px rgba(255,255,255,0.9);

}



@media (max-width: 520px) {

  /* Álbum pequeno no celular: uma foto por linha, como sempre foi. */

  .universo-fotos { columns: 1; }

  .universo-fotos.universo-mosaico {

    grid-template-columns: repeat(var(--omni-mosaico, 4), 1fr);

    gap: 3px;

  }

  .universo-mosaico .universo-foto { border-radius: 3px; }

  .universo-mosaico .universo-foto:has(.universo-coracao.curtida)::after {

    right: 4px; bottom: 4px; width: 7px; height: 7px;

  }

}



/* --- Estado vazio --- */

.universo-vazio {

  text-align: center; padding: clamp(2rem, 6vw, 4rem) var(--space-4);

  border: 1px dashed rgba(255,255,255,0.2); border-radius: var(--radius-md);

  color: rgba(255,255,255,0.55);

}

.universo-vazio svg { width: 44px; height: 44px; color: rgba(255,255,255,0.28); margin-bottom: var(--space-3); }

.universo-vazio strong { display: block; color: var(--color-white); font-family: var(--font-display); font-size: var(--texto-lg); margin-bottom: var(--space-1); }



/* --- Lixeira (só para a equipe) --- */

.universo-lixeira { margin-top: var(--space-6); padding-top: var(--space-5); border-top: 1px solid rgba(255,255,255,0.12); }

.universo-lixeira h4 { font-size: var(--texto-sm); letter-spacing: 0.08em; text-transform: uppercase; margin-bottom: var(--space-2); }

.universo-lixeira-nota { color: rgba(255,255,255,0.45); font-size: var(--texto-sm); margin-bottom: var(--space-4); }

/* Barra de lote da lixeira: marcar todas, contador e as duas acoes. */
.universo-lixeira-barra {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-3);
  padding: var(--space-2) 0;
  border-bottom: 1px solid rgba(255,255,255,0.12);
  margin-bottom: var(--space-2);
}
.universo-lixeira-marca {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  cursor: pointer;
  color: rgba(255,255,255,0.75);
  font-size: var(--texto-sm);
}
.universo-lixeira-marca input {
  width: 16px; height: 16px;
  accent-color: var(--color-primary);
  cursor: pointer;
}
.universo-lixeira-item .universo-lixeira-marca { margin-right: var(--space-2); }
.universo-lixeira-contagem { color: rgba(255,255,255,0.55); font-size: var(--texto-sm); min-width: 6ch; }
.universo-lixeira-lote { width: auto; padding: 0 var(--space-2); font-size: var(--texto-xs); }
.universo-lixeira-lote:disabled { opacity: 0.35; cursor: default; }

.com-lixeira-barra {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-3);
  padding: var(--space-2) 0;
  border-bottom: 1px solid var(--color-border);
  margin-bottom: var(--space-2);
}
.com-lixeira-barra label,
.com-lixeira-marca {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  cursor: pointer;
  font-size: var(--texto-sm);
}
.com-lixeira-barra input,
.com-lixeira-marca input {
  width: 16px; height: 16px;
  accent-color: var(--color-primary);
  cursor: pointer;
}
.com-lixeira-marca { margin-right: var(--space-2); }
.com-lixeira-barra [data-com-conta] { color: var(--color-ink-faint); font-size: var(--texto-sm); min-width: 6ch; }
.com-lixeira-barra button:disabled { opacity: 0.4; cursor: default; }

.universo-lixeira-item {

  display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); flex-wrap: wrap;

  padding: var(--space-2) var(--space-3); margin-bottom: var(--space-1);

  background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.1);

  border-radius: var(--radius-sm); font-size: var(--texto-base);

}

.universo-lixeira-item span { color: rgba(255,255,255,0.6); }

.universo-lixeira-item strong { color: var(--color-white); font-weight: 600; }



/* Miniaturas do álbum na lixeira.



   Existem para reconhecer o que se vai apagar: "apagar de vez" não tem

   volta, e título sozinho não distingue um rascunho de um evento real.

   A faixa ocupa a linha inteira (flex-basis 100%) para não brigar com o

   título e os botões, que dividem a linha de cima. */

.universo-lixeira-tiras {

  flex-basis: 100%; display: flex; flex-wrap: wrap; gap: var(--space-0);

  margin-top: var(--space-2);

}

.universo-lixeira-tiras img {

  width: 46px; height: 46px; object-fit: cover;

  border-radius: 6px; opacity: 0.65;

}

.universo-lixeira-mais {

  display: inline-flex; align-items: center; justify-content: center;

  min-width: 46px; height: 46px; padding: 0 var(--space-1);

  border-radius: 6px; background: rgba(255,255,255,0.07);

  font-size: var(--texto-sm); font-weight: 600;

}



/* --- Selo de quem pode publicar --- */

.universo-equipe {

  display: inline-flex; align-items: center; gap: var(--space-1);

  padding: var(--space-0) var(--space-2); border-radius: var(--radius-pill);

  background: rgba(255,255,255,0.08); color: rgba(255,255,255,0.7);

  font-size: var(--texto-xs); font-weight: 600;

}

.universo-equipe svg { width: 13px; height: 13px; color: var(--color-primary-vivid); }



/* ===================================================================

   MODAL DE PUBLICAÇÃO

   Fundo claro de propósito: é área de trabalho, não de vitrine. Reusa

   os campos de .field para não criar um segundo padrão de formulário.

   =================================================================== */

.universo-modal {

  position: fixed; inset: 0; z-index: 200;

  display: flex; align-items: center; justify-content: center;

  padding: var(--space-4);

  background: rgba(20,17,14,0.72); backdrop-filter: blur(6px);

  animation: universo-fade 0.25s ease both;

}

.universo-modal[hidden] { display: none; }

@keyframes universo-fade { from { opacity: 0; } to { opacity: 1; } }

.universo-modal-card {

  background: var(--color-white); color: var(--color-ink);

  border-radius: var(--radius-lg); box-shadow: var(--shadow-lg);

  width: min(680px, 100%); max-height: 90vh; overflow-y: auto;

  padding: clamp(1.5rem, 4vw, 2.5rem);

}



/* -----------------------------------------------------------------

   AS BARRAS DE ROLAGEM DO MODAL



   A horizontal era um defeito, não uma escolha. `1fr` parece dizer

   "metade cada", mas o mínimo de uma coluna de grade é o min-content do

   que está dentro — e um <input> sem `size` mede ~252px por conta

   própria. Duas colunas de 252 mais o intervalo davam 63px a mais do que

   cabia, e o cartão passava a rolar de lado. `minmax(0, 1fr)` autoriza a

   coluna a encolher; `min-width: 0` autoriza o campo a acompanhar.



   A vertical continua, porque o formulário é mais alto que a tela e

   esconder rolagem que existe é pior do que mostrá-la — some o conteúdo

   sem dizer que sumiu. Fica fina e discreta.

   ----------------------------------------------------------------- */

/* Escrito como min-width de proposito: sem isso esta linha vinha depois
   do `@media (max-width: 640px)` la em cima e vencia por ordem, mantendo
   duas colunas num celular de 390px. O formulario ficava 60px mais largo
   que a tela e o lado direito dos campos era cortado. */
@media (min-width: 641px) {
  .form-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

.form-grid > * { min-width: 0; }



/* Esta regra vem depois da que empilha os campos no celular, então

   precisa repetir o empilhamento — senão Nome e Sobrenome voltam a

   dividir 375px de tela e sobram 128px para cada um. */

@media (max-width: 640px) {

  .form-grid { grid-template-columns: minmax(0, 1fr); }

}

.universo-form .field input,

.universo-form .field textarea,

.universo-form .field select,

.universo-painel-acesso .field input,

.universo-painel-acesso .field textarea,

.universo-painel-acesso .field select {

  width: 100%;

  min-width: 0;

}

.universo-modal-card {

  overflow-x: hidden;

  scrollbar-width: thin;

  scrollbar-color: rgba(44,42,40,0.28) transparent;

}

.universo-modal-card::-webkit-scrollbar { width: 8px; }

.universo-modal-card::-webkit-scrollbar-track { background: transparent; }

.universo-modal-card::-webkit-scrollbar-thumb {

  background: rgba(44,42,40,0.22);

  border-radius: 999px;

}

.universo-modal-card::-webkit-scrollbar-thumb:hover { background: rgba(44,42,40,0.38); }



.universo-modal-topo { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--space-3); margin-bottom: var(--space-5); }

.universo-modal-topo h3 { margin-bottom: var(--space-0); }

.universo-modal-topo p { color: var(--color-ink-soft); font-size: var(--texto-base); margin: 0; }

.universo-fechar {

  width: 38px; height: 38px; border-radius: 50%; flex-shrink: 0;

  display: inline-flex; align-items: center; justify-content: center;

  background: var(--color-gray-50); color: var(--color-ink-soft);

  transition: background 0.2s ease, color 0.2s ease;

}

.universo-fechar:hover { background: var(--color-border); color: var(--color-ink); }

.universo-fechar svg { width: 18px; height: 18px; }



/* --- Modal de acesso (entrar / solicitar cadastro) --- */

.universo-abas { display: flex; gap: var(--space-1); background: var(--color-gray-50); padding: var(--space-0); border-radius: var(--radius-pill); margin-bottom: var(--space-5); }

.universo-aba {

  flex: 1; padding: var(--space-1) var(--space-3); border-radius: var(--radius-pill);

  font-weight: 700; font-size: var(--texto-sm); color: var(--color-ink-soft); text-align: center;

  transition: background 0.2s ease, color 0.2s ease, box-shadow 0.2s ease;

}

.universo-aba.ativa { background: var(--color-white); color: var(--color-ink); box-shadow: var(--shadow-sm); }

.universo-painel-acesso[hidden] { display: none; }



.universo-recado {

  display: flex; gap: var(--space-2); align-items: flex-start;

  padding: var(--space-3) var(--space-4); border-radius: var(--radius-sm);

  background: var(--color-primary-light); border: 1px solid var(--color-primary-soft);

  color: #8A4A12; font-size: var(--texto-sm); line-height: var(--linha-media); margin-bottom: var(--space-4);

}

.universo-recado svg { width: 17px; height: 17px; flex-shrink: 0; margin-top: 2px; }

.universo-recado strong { display: block; }



.universo-sucesso {

  text-align: center; padding: var(--space-5) var(--space-3);

}

.universo-sucesso svg { width: 52px; height: 52px; color: #2A6B33; margin-bottom: var(--space-3); }

.universo-sucesso h4 { font-family: var(--font-display); font-size: var(--texto-lg); margin-bottom: var(--space-2); }

.universo-sucesso p { color: var(--color-ink-soft); font-size: var(--texto-base); max-width: 44ch; margin-inline: auto; }



/* --- Lista de cadastros esperando aprovação ---

   Uma linha por pessoa: quem é à esquerda, o que fazer à direita. No

   celular a linha quebra e os botões descem inteiros, porque decidir

   sobre o acesso de alguém não é lugar para alvo apertado. */

.universo-cadastro {

  display: flex; align-items: center; justify-content: space-between;

  gap: var(--space-3); flex-wrap: wrap;

  padding: var(--space-3) 0;

  border-bottom: 1px solid var(--color-line, rgba(44,42,40,0.12));

}

.universo-cadastro:last-child { border-bottom: 0; }

.universo-cadastro strong { display: block; font-size: var(--texto-base); }

.universo-cadastro span { font-size: var(--texto-sm); color: var(--color-ink-faint); }

.universo-cadastro-acoes { display: flex; gap: var(--space-1); align-items: center; }

.universo-cadastro-acoes .btn { padding: var(--space-1) var(--space-3); font-size: var(--texto-sm); }

.universo-marca {

  font-size: var(--texto-xs); font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em;

  padding: var(--space-0) var(--space-2); border-radius: var(--radius-pill, 999px);

  background: rgba(44,42,40,0.08); color: var(--color-ink-faint);

}

.universo-marca.liberado { background: rgba(42,107,51,0.12); color: #2A6B33; }

@media (max-width: 520px) {

  .universo-cadastro { flex-direction: column; align-items: stretch; }

  .universo-cadastro-acoes .btn { flex: 1; }

}



.universo-esqueci { display: block; text-align: right; font-size: var(--texto-sm); font-weight: 600; color: var(--color-primary-hover); margin-top: -0.5rem; margin-bottom: var(--space-4); }

.universo-esqueci:hover { text-decoration: underline; }

.universo-dica { font-size: var(--texto-sm); color: var(--color-ink-faint); margin-top: var(--space-0); }



.universo-form .field { margin-bottom: var(--space-4); }

.universo-contador { font-size: var(--texto-sm); color: var(--color-ink-faint); text-align: right; }

.universo-contador.cheio { color: #C0392B; font-weight: 700; }



/* Área de arrastar as fotos */

.universo-drop {

  border: 2px dashed var(--color-border); border-radius: var(--radius-md);

  background: var(--color-cream); padding: var(--space-5) var(--space-4);

  text-align: center; cursor: pointer;

  transition: border-color 0.2s ease, background 0.2s ease;

}

.universo-drop:hover, .universo-drop.sobre { border-color: var(--color-primary); background: var(--color-primary-light); }

.universo-drop svg { width: 34px; height: 34px; color: var(--color-primary); margin-bottom: var(--space-2); }

.universo-drop strong { display: block; font-size: var(--texto-base); }

.universo-drop span { font-size: var(--texto-sm); color: var(--color-ink-faint); }

.universo-drop input[type="file"] { display: none; }



.universo-previa { display: grid; grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); gap: var(--space-1); margin-top: var(--space-4); }

.universo-previa:empty { display: none; }

.universo-previa-item { position: relative; border-radius: var(--radius-sm); overflow: hidden; aspect-ratio: 1/1; background: var(--color-gray-50); }

.universo-previa-item img { width: 100%; height: 100%; object-fit: cover; }

.universo-previa-item.processando::after {

  content: ""; position: absolute; inset: 0;

  background: rgba(255,255,255,0.75) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23F58634' stroke-width='2.5' stroke-linecap='round'%3E%3Cpath d='M12 3a9 9 0 1 0 9 9'/%3E%3C/svg%3E") center / 24px no-repeat;

  animation: universo-girar 0.9s linear infinite;

}

@keyframes universo-girar { to { transform: rotate(360deg); } }

.universo-previa-remover {

  position: absolute; top: 5px; right: 5px; width: 24px; height: 24px; border-radius: 50%;

  display: flex; align-items: center; justify-content: center;

  background: rgba(20,17,14,0.72); color: #fff;

}

.universo-previa-remover svg { width: 12px; height: 12px; }

.universo-previa-peso {

  position: absolute; left: 0; right: 0; bottom: 0; padding: 2px 5px;

  background: rgba(20,17,14,0.72); color: #fff; font-size: var(--texto-xs); text-align: center;

}



/* Progresso do lote. Trinta fotos levam alguns segundos para virar WebP —

   sem barra, a tela parece travada e o usuário clica de novo. */

.universo-progresso { margin-top: var(--space-4); }

.universo-progresso[hidden] { display: none; }

.universo-progresso-texto { font-size: var(--texto-sm); font-weight: 600; color: var(--color-ink-soft); margin-bottom: var(--space-1); }

.universo-progresso-barra { height: 8px; border-radius: var(--radius-pill); background: var(--color-gray-50); overflow: hidden; }

.universo-progresso-trilho { height: 100%; width: 0; border-radius: var(--radius-pill); background: var(--color-primary); transition: width 0.25s ease; }

.universo-resumo { font-size: var(--texto-sm); color: var(--color-ink-soft); font-weight: 600; margin-top: var(--space-3); }

.universo-resumo:empty { display: none; }



.universo-form-rodape { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); flex-wrap: wrap; margin-top: var(--space-5); }

.universo-validade { font-size: var(--texto-sm); color: var(--color-ink-faint); display: flex; align-items: center; gap: var(--space-1); }

.universo-validade svg { width: 15px; height: 15px; flex-shrink: 0; }

.universo-erro { color: #C0392B; font-weight: 600; font-size: var(--texto-sm); margin-top: var(--space-3); }

.universo-erro:empty { display: none; }



/* ===================================================================

   LIGHTBOX

   =================================================================== */

.universo-lightbox {

  position: fixed; inset: 0; z-index: 210;

  display: flex; align-items: center; justify-content: center;

  background: rgba(12,10,8,0.94);

  animation: universo-fade 0.25s ease both;

}

.universo-lightbox[hidden] { display: none; }

.universo-lightbox img { max-width: 92vw; max-height: 84vh; width: auto; border-radius: var(--radius-sm); box-shadow: var(--shadow-lg); }

.universo-lightbox-legenda { position: absolute; left: 0; right: 0; bottom: 1.5rem; text-align: center; color: rgba(255,255,255,0.75); font-size: var(--texto-sm); padding-inline: var(--space-3); }

.universo-lightbox-nav {

  position: absolute; top: 50%; transform: translateY(-50%);

  width: 50px; height: 50px; border-radius: 50%;

  display: flex; align-items: center; justify-content: center;

  /* Laranja da marca, e nao o cinza translucido de antes: sobre a foto
     o cinza sumia em imagem clara e a pessoa nao achava como avancar. */

  background: var(--color-primary, #F58634); color: #fff;

  border: 0;

  box-shadow: 0 2px 12px rgba(0,0,0,0.35);

  transition: background 0.2s ease, transform 0.15s ease;

}

.universo-lightbox-nav:hover { background: #d9701f; }

.universo-lightbox-nav:active { transform: translateY(-50%) scale(0.94); }

/* O foco precisa aparecer SOBRE o laranja: um anel branco, nao a cor
   padrao do navegador, que se perde no proprio botao. */

.universo-lightbox-nav:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }

.universo-lightbox-nav svg { width: 22px; height: 22px; }

.universo-lightbox-nav.anterior { left: 1.25rem; }

.universo-lightbox-nav.proxima { right: 1.25rem; }

/* Os três botões dividem o topo direito, na ordem em que se usa:

   curtir, baixar, fechar. Fechar fica na ponta, onde o polegar já procura. */

.universo-lightbox .universo-fechar { position: absolute; top: 1.25rem; right: 1.25rem; background: rgba(255,255,255,0.12); color: #fff; }

.universo-lightbox .universo-fechar:hover { background: rgba(255,255,255,0.25); color: #fff; }

.universo-lightbox .universo-baixar { right: 4.5rem; }

.universo-lightbox .universo-curtir-cheia { right: 7.75rem; gap: var(--space-0); width: auto; min-width: 38px; padding-inline: var(--space-1); border-radius: var(--radius-pill); }

.universo-lightbox .universo-curtir-cheia svg { fill: none; transition: fill 0.25s ease; }

.universo-lightbox .universo-curtir-cheia.curtida { background: #E0245E; color: #fff; }

.universo-lightbox .universo-curtir-cheia.curtida svg { fill: #fff; }

.universo-lightbox .universo-curtir-cheia.curtida:hover { background: #C81E52; }

.universo-lightbox .universo-conta:empty { display: none; }

@media (max-width: 560px) {

  .universo-lightbox-nav { width: 40px; height: 40px; }

  .universo-lightbox-nav.anterior { left: 0.5rem; }

  .universo-lightbox-nav.proxima { right: 0.5rem; }

  /* Tela estreita: os três botões se aproximam para caberem na linha. */

  .universo-lightbox .universo-fechar { top: 0.75rem; right: 0.75rem; width: 36px; height: 36px; }

  .universo-lightbox .universo-baixar { right: 3.6rem; }

  .universo-lightbox .universo-curtir-cheia { right: 6.5rem; height: 36px; }

  .universo-lightbox .universo-fechar svg { width: 16px; height: 16px; }

}


/* -------------------------------------------------------------------
   CARTÃO FECHADO — a lista de álbuns do ano

   Um ano letivo dá umas duas dúzias de álbuns. Abertos todos de uma vez
   seriam milhares de miniaturas numa página só, e o celular desiste
   antes de terminar de rolar. Fechado, cada álbum custa uma capa.

   A grade é livre: quantos álbuns houver, sem espaço reservado para os
   que ainda não existem. auto-fill com minmax faz isso sozinho — com
   três álbuns são três cartões, não uma grade de doze com nove buracos.
   ------------------------------------------------------------------- */
.universo-evento.fechado { padding: 0; background: none; border: none; }

.universo-eventos:has(.universo-evento.fechado) { display: block; }

.universo-capa {
  display: flex; align-items: center; gap: var(--space-3); width: 100%;
  padding: var(--space-2); text-align: left; cursor: pointer;
  background: rgba(255,255,255,0.03);
  border: 1px solid rgba(255,255,255,0.1);
  border-radius: var(--radius-sm);
  color: inherit; font: inherit;
  transition: background 0.18s ease, border-color 0.18s ease;
}
.universo-capa:hover, .universo-capa:focus-visible {
  background: rgba(255,255,255,0.07);
  border-color: rgba(255,255,255,0.22);
}
.universo-capa img {
  width: 68px; height: 68px; flex: none;
  object-fit: cover; border-radius: 8px;
}
.universo-capa-vazia {
  width: 68px; height: 68px; flex: none;
  display: grid; place-items: center; border-radius: 8px;
  background: rgba(255,255,255,0.06); opacity: 0.5;
}
.universo-capa-vazia svg { width: 24px; height: 24px; }
.universo-capa-texto { display: flex; flex-direction: column; gap: var(--space-0); min-width: 0; }
.universo-capa-texto strong {
  color: var(--color-white, #FFFFFF); font-weight: 600; font-size: var(--texto-base);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.universo-capa-linha { color: rgba(255,255,255,0.55); font-size: var(--texto-sm); }

/* Botão secundário DENTRO do painel escuro.

   O .btn-outline da landing foi desenhado para as seções claras: texto e
   borda em --color-ink, que é justamente a cor do fundo aqui. Usado no
   Universo ele fica invisível — existe, tem tamanho, responde ao clique,
   e ninguém enxerga. Aconteceu em 13/08 com o "Entrar para publicar". */
.universo-secundario {
  background: transparent;
  border: 1px solid rgba(255,255,255,0.3);
  color: rgba(255,255,255,0.85);
}
.universo-secundario:hover {
  background: rgba(255,255,255,0.1);
  border-color: rgba(255,255,255,0.55);
  color: #FFFFFF;
}

/* Aviso de senha de fábrica, na barra da galeria. */
.universo-aviso-senha {
  display: inline-flex; align-items: center;
  padding: var(--space-0) var(--space-2); border-radius: var(--radius-pill, 999px);
  background: rgba(255,180,60,0.16); color: #FFC46B;
  font-size: var(--texto-xs); font-weight: 600;
}

/* ---------- Comunicados: visor na propria pagina + controles da equipe ---------- */
.com-visor {
  position: fixed;
  inset: 0;
  z-index: 1000;
  background: rgba(20,17,14,0.9);
  display: flex;
  flex-direction: column;
}
/* O atributo hidden vale display:none, mas vem da folha do navegador e
   perde para o display:flex acima — foi por isso que o botao Fechar
   parecia nao funcionar: o visor era escondido e continuava na tela. */
.com-visor[hidden] { display: none; }
.com-visor-barra {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  padding: 0.7rem clamp(1rem, 3vw, 2rem);
  color: var(--color-white);
}
.com-visor-titulo { font-weight: 700; font-size: var(--texto-base); }
.com-visor-acoes { display: flex; gap: var(--space-1); }
.com-visor-corpo { flex: 1; min-height: 0; display: flex; align-items: center; justify-content: center; padding: 0 var(--space-3) var(--space-3); }
.com-visor-iframe { width: min(1100px, 100%); height: 100%; border: 0; border-radius: var(--radius-sm); background: #fff; }
.com-visor-img { max-width: 100%; max-height: 100%; border-radius: var(--radius-sm); }

.com-barra { padding: var(--space-1) 0; }
.com-barra .container { display: flex; justify-content: flex-end; align-items: center; gap: var(--space-3); flex-wrap: wrap; }
.com-barra .universo-equipe { display: inline-flex; align-items: center; gap: var(--space-1); font-size: var(--texto-sm); color: var(--color-ink-soft); }
.com-barra-logado { display: inline-flex; align-items: center; gap: var(--space-3); flex-wrap: wrap; }
.com-barra .universo-secundario { color: var(--color-ink-faint); }

.com-remover {
  position: absolute;
  top: 8px;
  right: 8px;
  width: 28px;
  height: 28px;
  border: 0;
  border-radius: 50%;
  background: rgba(200,30,30,0.92);
  color: #fff;
  font-size: var(--texto-md);
  line-height: 1;
  cursor: pointer;
  z-index: 3;
}
.com-remover:hover { background: #a51212; }
.com-rascunho { outline: 2px dashed var(--color-primary); outline-offset: 2px; }

/* ---------- Coluna de texto: uma medida so para o site inteiro ----------
   Largura total do container, com teto de 78ch para a linha nao cansar.
   Substitui os max-width:820px soltos que paravam no meio da pagina. */
.texto-largo { max-width: 100%; }
.texto-largo p { max-width: none; }
.texto-largo .lede { max-width: none; }

/* ---------- Secoes vizinhas de fundos diferentes: a cor ja separa ---------- */
main > .section + .section,
main > .section + .section-tight,
main > .section-tight + .section,
main > .section + .series-block,
main > .series-block + .section,
main > .section + .cta-full,
main > .section-tight + .cta-full {
  padding-top: clamp(var(--space-4), 3vw, var(--space-6));
}

/* ---------- A secao antes do convite final encosta nele: a foto ja separa ---------- */
main > .section:has(+ .cta-full),
main > .section-tight:has(+ .cta-full),
main > .series-block:has(+ .cta-full) {
  padding-bottom: clamp(var(--space-4), 3vw, var(--space-6));
}
.cta-full-content { padding-block: clamp(var(--space-6), 4.5vw, var(--space-7)); }

/* ---------- par completo: quem vem antes tambem encurta ----------
   Resultado: entre duas secoes vizinhas o vao total fica em ~86px no
   desktop (43+43), um so passo de respiro, seja qual for o fundo. */
main > .section:has(+ .section),
main > .section:has(+ .section-tight),
main > .section-tight:has(+ .section),
main > .section:has(+ .series-block),
main > .series-block:has(+ .section) {
  padding-bottom: clamp(var(--space-4), 3vw, var(--space-6));
}
main > .section-tight:has(+ .series-block) {
  padding-bottom: clamp(var(--space-4), 3vw, var(--space-6));
}
main > .section-tight + .series-block {
  padding-top: clamp(var(--space-4), 3vw, var(--space-6));
}

/* ---------- Rodape enxuto: marca, contato numa linha, redes ---------- */
.footer-linha {
  padding-block: var(--space-6);
  display: flex;
  align-items: center;      /* marca centralizada na linha do texto */
  justify-content: flex-start;
  gap: var(--space-5);
  flex-wrap: wrap;
}
.footer-marca img { height: 40px; display: block; }
.footer-contato {
  flex: 1 1 0;
  min-width: 0;
  display: flex;
  align-items: center;
  justify-content: flex-start;
  flex-wrap: wrap;
  gap: 0.4rem var(--space-3);
  font-size: var(--texto-sm);
  color: rgba(255,255,255,0.78);
  line-height: var(--linha-curta);
}
.footer-linha { align-items: center; }
.footer-marca, .footer-social { flex: 0 0 auto; }
.footer-contato .footer-escola { margin: 0; font-size: var(--texto-base); }
.footer-contato a { color: rgba(255,255,255,0.85); transition: color 0.2s ease; }
.footer-contato a:hover { color: var(--color-primary); }
.footer-contato .btn-mapa { margin: 0; padding: var(--space-1) var(--space-3); font-size: var(--texto-sm); }
@media (max-width: 900px) {
  .footer-linha { flex-direction: column; align-items: flex-start; }
}

/* ---------- galeria: abertura encosta na sanfona ---------- */
main > .section:has(+ .universo) { padding-bottom: var(--space-5); }
.universo { padding-top: var(--space-6); }

/* ---------- Texto de abertura dentro do box escuro da galeria ---------- */
.universo-sub-titulo {
  font-family: var(--font-display);
  font-size: var(--texto-lg);
  font-weight: 600;
  color: var(--color-white);
  margin-top: var(--space-3);
}
.universo-toggle .universo-sub.universo-sub-texto {
  max-width: none;
  width: 100%;
  margin-inline: auto;
  text-align: left;
  margin-top: var(--space-3);
}
.universo-sub-texto p { break-inside: avoid; margin-bottom: var(--space-3); color: rgba(255,255,255,0.82); font-size: var(--texto-base); line-height: var(--linha-media); }
.universo-sub-texto p:last-child { margin-bottom: 0; }
/* duas colunas SO no computador; tablet e celular leem em coluna unica */
@media (min-width: 1024px) {
  /* um bloco so, como no resto do site */
}
@media (max-width: 1023px) { .universo-sub-texto { text-align: center; } }
/* o hero interno encosta direto na sanfona */
.page-hero + .universo { padding-top: var(--space-6); }

/* ---------- Cabecalho da galeria: nao e mais botao ---------- */
.universo-cabecalho { cursor: default; }
.universo-cabecalho:hover { background: rgba(255,255,255,0.04); border-color: rgba(255,255,255,0.14); transform: none; }

/* ---------- Lixeira de fotos: miniatura ao lado do nome do album ---------- */
.universo-lixeira-thumb {
  width: 34px; height: 34px; object-fit: cover;
  border-radius: var(--radius-sm); margin-right: var(--space-1);
  vertical-align: middle;
}
.universo-lixeira-item span { display: inline-flex; align-items: center; }

/* ---------- Album fixo (Dia a dia): gestao dentro do proprio album ---------- */
.universo-fixo-barra {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  flex-wrap: wrap;
  margin: var(--space-4) 0 var(--space-3);
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-md);
  background: rgba(255,255,255,0.06);
  border: 1px dashed rgba(255,255,255,0.18);
}
.universo-fixo-prazo { font-size: var(--texto-sm); color: rgba(255,255,255,0.75); }
.universo-fixo-prazo select {
  margin-left: var(--space-1);
  padding: var(--space-0) var(--space-1);
  border-radius: var(--radius-sm);
  border: 1px solid rgba(255,255,255,0.2);
  background: rgba(0,0,0,0.25);
  color: var(--color-white);
  font: inherit;
}
.universo-fixo-progresso { font-size: var(--texto-sm); color: var(--color-primary-soft); }

/* Descartar a foto ali mesmo, sem abrir formulario */
.universo-foto-descartar {
  position: absolute;
  top: 6px;
  right: 6px;
  width: 26px;
  height: 26px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 0;
  border-radius: 50%;
  background: rgba(180,35,24,0.92);
  color: #fff;
  cursor: pointer;
  z-index: 3;
}
.universo-foto-descartar:hover { background: #8E1A12; }
.universo-foto-descartar svg { width: 13px; height: 13px; }

/* Quando esta foto sai do ar */
.universo-foto-prazo {
  position: absolute;
  left: 6px;
  bottom: 6px;
  padding: var(--space-0) var(--space-1);
  border-radius: var(--radius-pill);
  background: rgba(20,17,14,0.78);
  color: rgba(255,255,255,0.9);
  font-size: var(--texto-xs);
  font-weight: 600;
  z-index: 3;
}
.universo-foto { position: relative; }

/* =====================================================================
   TOPO NO CELULAR — modelo da landing: uma linha so
   Antes: barra laranja (64px) + cabecalho (79px) = 143px de moldura
   antes de o hero comecar. Num celular isso e um quinto da tela gasto
   sem conteudo. Aqui a barra laranja vira uma faixa fina de uma linha e
   o cabecalho encolhe, deixando logo, Instagram, botao e menu na mesma
   fileira, como na landing.
   ===================================================================== */
@media (max-width: 760px) {
  /* 1) A barra laranja perde a frase e fica so com o Portal do Aluno. */
  .utility-bar { padding-block: var(--space-0); }
  .utility-bar .container { flex-direction: row; justify-content: center; gap: 0; }
  .utility-frase { display: none; }
  .utility-portal-link { font-size: var(--texto-xs); }

  /* 2) O cabecalho encolhe e a logo cede o minimo. */
  .site-header { padding-block: var(--space-1); }
  .main-nav { gap: var(--space-2); }
  .brand img { height: 30px; }

  /* 3) Instagram e "Agende uma visita" sobem para a linha do topo.
        Eles moram na lista do menu, que no celular vira gaveta; aqui
        saem da gaveta e viram irmaos da logo. */
  .nav-actions { gap: var(--space-1); }
  .nav-actions .btn-sm-desktop {
    display: inline-flex;
    padding: 5px 10px;
    font-size: 0.68rem;
  }
  .nav-actions .btn-sm-desktop svg { display: none; }
  .nav-topo-insta {
    display: inline-flex;
    /* afasta o Instagram do botao: ele sobe para o centro-esquerda,
       o botao e o menu continuam ancorados a direita (imagem 1). */
    margin-right: 40px;
    width: 30px; height: 30px;
    align-items: center; justify-content: center;
    border-radius: 8px;
    background: radial-gradient(circle at 30% 110%, #FDF497 0%, #FDF497 5%, #FD5949 45%, #D6249F 60%, #285AEB 90%);
    color: #fff;
  }
  .nav-topo-insta svg { width: 16px; height: 16px; }
  /* o Instagram que vive dentro da gaveta some, para nao duplicar */
  .nav-list .nav-insta { display: none; }
}
/* Fora do celular o atalho do topo nao existe: o Instagram fica no menu.
   Escrito como min-width de proposito: um `display:none` solto viria depois
   do bloco do celular no arquivo e venceria por ordem, escondendo o icone
   justamente onde ele deve aparecer. */
@media (min-width: 761px) {
  .nav-topo-insta { display: none; }
}

/* =====================================================================
   SUBMENU DENTRO DA GAVETA (celular) — blindagem
   O submenu de Comunicados nasceu como painel flutuante de 480px para o
   computador. Na gaveta de 323px do celular, se qualquer uma das regras
   de reset nao pegar (aconteceu no Safari do iPhone), ele volta a ser
   painel e vaza para fora da tela, cortando as palavras.
   Aqui a regra e explicita, com peso maior, e nao depende de heranca:
   dentro da gaveta o submenu e uma lista simples, da largura da gaveta.
   ===================================================================== */
@media (max-width: 1080px) {
  .nav-list .dropdown,
  .nav-list .dropdown.dropdown-grid {
    position: static;
    display: block;
    width: 100%;
    min-width: 0;
    max-width: 100%;
    transform: none;
    box-shadow: none;
    border: 0;
    border-radius: 0;
    background: transparent;
    inset: auto;
  }
  .nav-list .dropdown a {
    display: block;
    width: 100%;
    padding: var(--space-1) 0 var(--space-1) var(--space-3);
    font-size: var(--texto-sm);
    white-space: normal;
  }
}

/* ---------- Lixeira dos Comunicados (so para a equipe) ---------- */
.com-lixeira {
  margin-block: var(--space-4);
  padding: var(--space-4);
  border: 1px dashed var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-cream);
}
.com-lixeira h4 { margin-bottom: var(--space-0); font-size: var(--texto-base); }
.com-lixeira > p { font-size: var(--texto-sm); color: var(--color-ink-soft); margin-bottom: var(--space-3); }
.com-lixeira-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  flex-wrap: wrap;
  padding: var(--space-1) 0;
  border-top: 1px solid var(--color-border);
  font-size: var(--texto-sm);
}
.com-apagar { background: #B42318; color: #fff; border: 0; }
.com-apagar:hover { background: #8E1A12; color: #fff; }

/* Selo de PDF no card de publicacao nova (nao da para desenhar PDF em img) */
.com-thumb-pdf {
  display: flex; align-items: center; justify-content: center;
  background: var(--color-cream);
  border-bottom: 1px solid var(--color-border);
  min-height: 150px;
}
.com-thumb-pdf span {
  font-family: var(--font-display); font-weight: 700; font-size: var(--texto-xl);
  color: var(--color-primary); letter-spacing: 0.08em;
}
.com-rascunho .info-thumb img { width: 100%; height: 100%; object-fit: cover; }

/* =====================================================================
   LARGURA UNICA DO CONTEUDO
   O texto de abertura de cada secao herdava um teto de 62ch (~676px) do
   .lede, enquanto os cards logo abaixo ocupavam os 1160px do container.
   Dava a impressao de dois alinhamentos diferentes na mesma secao.
   Aqui o texto do cabecalho acompanha a largura do conteudo, como o
   resto do site. O teto do .lede continua valendo fora dos cabecalhos.
   ===================================================================== */
.section-head p,
.section-head .lede,
.texto-largo p,
.texto-largo .lede {
  max-width: 100%;
}

/* ---------- Assinatura da direcao, no pe do hero ----------
   Discreta de proposito: e assinatura, nao chamada. Fica abaixo do
   subtitulo, separada por um fio fino, no mesmo ocre do olho do hero. */
.hero-direcao {
  /* Texto corrido, nao caixa flexivel: aqui o proprio espaco entre as
     palavras resolve, e o rotulo nunca se descola dos nomes.
     width: fit-content faz o fio acima medir o tamanho dos nomes, e nao a
     largura toda do bloco — senao ele atravessava a foto sem motivo. */
  width: fit-content;
  max-width: 100%;
  margin-top: var(--space-4);
  padding-top: var(--space-3);
  border-top: 1px solid rgba(255,255,255,0.22);
  max-width: none;
  font-size: var(--texto-base);
  color: rgba(255,255,255,0.9);
}
.hero-direcao b { font-weight: 500; white-space: nowrap; }
.hero-direcao-rotulo {
  margin-right: var(--space-1);
  font-family: var(--font-body);
  font-size: var(--texto-xs);
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--color-primary-soft);
}
.hero-direcao i {
  font-style: normal;
  margin: 0 var(--space-1);
  color: rgba(255,255,255,0.45);
}
@media (max-width: 620px) {
  .hero-direcao { font-size: var(--texto-sm); gap: var(--space-0) var(--space-1); }
}

/* ---------- Assinatura da direcao em fundo claro (Nossa Historia) ----------
   Mesma composicao do hero, com as cores invertidas para fundo claro. */
.assinatura-direcao {
  width: fit-content;
  max-width: 100%;
  margin-top: var(--space-4);
  padding-top: var(--space-3);
  border-top: 1px solid var(--color-border);
  font-size: var(--texto-base);
  color: var(--color-ink-soft);
}
.assinatura-direcao b { font-weight: 500; white-space: nowrap; color: var(--color-ink); }
.assinatura-direcao i { font-style: normal; margin: 0 var(--space-1); color: var(--color-ink-faint); }
.assinatura-direcao-rotulo {
  margin-right: var(--space-1);
  font-family: var(--font-body);
  font-size: var(--texto-xs);
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--color-primary);
}

/* =====================================================================
   TOQUE: BOTAO QUE FOGE DO DEDO
   No iPhone, o primeiro toque num link com :hover aplica o hover antes
   do clique. Como o hover levantava o botao 2px, ele saia debaixo do
   dedo e o toque se perdia — por isso era preciso tocar duas vezes.
   Em aparelho sem mouse o hover nao serve para nada: aqui ele para de
   mover as coisas. Cor e sombra continuam, so o deslocamento sai.
   ===================================================================== */
@media (hover: none) {
  .btn-primary:hover,
  .btn-outline:hover,
  .btn-outline-white:hover,
  .btn-white:hover,
  .btn-mapa:hover,
  .card:hover,
  .foto-btn:hover,
  .whatsapp-float:hover,
  .arq-link:hover,
  .footer-cadeado:hover,
  .universo-coracao:hover,
  .universo-baixar-foto:hover,
  .universo-cabecalho:hover {
    transform: none;
  }
}

/* =====================================================================
   TOPO NO CELULAR — segundo ajuste, medindo contra a landing
   A moldura antes do hero somava 127px (48 da faixa laranja + 79 do
   cabecalho). Na landing a mesma coisa cabe em ~62px. O que sobrava
   era o respiro de 16px que o .container aplica em cima e embaixo,
   pensado para o computador. No celular ele vira tela perdida.
   ===================================================================== */
@media (max-width: 760px) {
  .utility-bar .container { padding-block: 0; }
  .main-nav.container { padding-block: var(--space-1); }
  .site-header { padding-block: var(--space-0); }
}

/* =====================================================================
   CARTAO "FALE COM A GENTE" NO CELULAR
   O cartao tinha 48px de folga de cada lado. Numa tela de 390px sobravam
   254px uteis, e o endereco de e-mail (secretaria@omnieducacional.com.br)
   precisa de 277px inteiricos — nao existe onde quebrar. O cartao
   empurrava a coluna toda para 409px e o lado direito era cortado.
   Aqui a folga cede, e o e-mail ganha permissao de quebrar se ainda
   assim faltar espaco: melhor um endereco em duas linhas do que meio
   endereco.
   ===================================================================== */
@media (max-width: 760px) {
  .contact-info-card { padding: var(--space-4); }
  .contact-line a { overflow-wrap: anywhere; }
}

/* =====================================================================
   SUBMENU NO CELULAR — a causa real do painel branco
   O submenu do computador abre no `:hover` da linha do menu:

     .nav-list li.has-dropdown:hover .dropdown { transform: translateX(-50%) ... }

   Essa regra pesa mais (0,4,1) do que o reset do celular (0,1,0). No
   iPhone o toque TAMBEM aciona o :hover — e o :focus-within, quando o
   dedo encosta num link de dentro. Resultado: no exato momento em que a
   pessoa toca "Comunicados", o submenu volta a ser o painel do
   computador, deslocado meia largura para a esquerda, branco e com as
   palavras cortadas pela borda da gaveta. Era isso, e nao o cache.

   A correcao tem duas camadas, de proposito:
   1) as regras de hover so existem onde ha mouse de verdade;
   2) mesmo que 1 falhe em algum navegador, dentro da gaveta o hover e
      o focus-within sao neutralizados por regras de peso igual escritas
      depois — que por isso vencem.
   ===================================================================== */
@media (max-width: 1080px) {
  /* neutraliza o painel do computador quando o dedo encosta */
  .nav-list li.has-dropdown:hover .dropdown,
  .nav-list li.has-dropdown:focus-within .dropdown {
    position: static;
    transform: none;
    max-height: 0;
    padding: 0;
    background: transparent;
    box-shadow: none;
    border-radius: 0;
    width: 100%;
    min-width: 0;
    inset: auto;
  }
  /* e devolve a sanfona: quem manda aqui e a classe .open, posta pelo
     JS no toque — nao o hover. Escrito depois para vencer por ordem. */
  .nav-list li.has-dropdown.open .dropdown,
  .nav-list li.has-dropdown.open:hover .dropdown,
  .nav-list li.has-dropdown.open:focus-within .dropdown {
    max-height: 640px;
    padding: var(--space-1) 0 var(--space-2);
  }
}

/* =====================================================================
   UM SO PADRAO DE BOTAO
   O laranja cheio deixa de ser o botao comum e passa a marcar uma coisa
   so: "Agende uma visita". Todo o resto — inclusive os pequenos de baixar
   arquivo e o "Ver no mapa" — usa o contorno do "Saiba mais". Assim o
   laranja volta a significar alguma coisa: onde ele aparece, e a acao
   que a escola quer que a familia tome.
   ===================================================================== */

/* Baixar/abrir arquivo, nos Comunicados. Fundo claro: contorno escuro. */
.arq-link {
  background: transparent;
  border: 1.5px solid var(--color-ink);
  color: var(--color-ink);
  transition: background 0.2s ease, color 0.2s ease, transform 0.2s ease;
}
.arq-link:hover { background: var(--color-ink); color: var(--color-white); }

/* "Ver no mapa" fica verde, o mesmo verde do "Fale conosco". Ele mora
   sempre em fundo escuro (rodape e cartao de contato), e verde e a unica
   cor do site que nao disputa com o laranja do "Agende uma visita" —
   sinaliza "ir para fora do site" sem competir com a acao principal. */
.btn-mapa {
  background: #25D366;
  border: 0;
  color: var(--color-white);
  box-shadow: none;
}
.btn-mapa:hover {
  background: #1EB456;
  color: var(--color-white);
  box-shadow: none;
}

/* =====================================================================
   O QUE ESTA MARCADO COMO ESCONDIDO FICA ESCONDIDO
   O atributo `hidden` do HTML vale `display: none` — mas por uma regra
   fraca, que qualquer `.classe { display: flex }` do nosso CSS derruba.
   Foi assim que os controles da equipe (+ Adicionar publicacao, Adicionar
   evento, a barra do visor) apareceram para quem so estava visitando o
   site: o JS marcava `hidden`, e o CSS mandava mostrar assim mesmo.
   Uma linha resolve para todos, inclusive os que forem criados amanha.
   ===================================================================== */
[hidden] { display: none !important; }

/* =====================================================================
   ESTRELA DE CAPA (so para a equipe)
   Fica no canto oposto ao X de descartar, para nao haver engano entre
   "esta e a foto de abertura" e "some com esta foto". Apagada enquanto
   nao e a capa; cheia e laranja quando e.
   ===================================================================== */
.universo-foto-capa {
  position: absolute;
  top: 6px;
  left: 6px;
  width: 26px;
  height: 26px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 0;
  border-radius: 50%;
  background: rgba(20,17,14,0.6);
  color: rgba(255,255,255,0.9);
  cursor: pointer;
  z-index: 3;
}
.universo-foto-capa svg { width: 14px; height: 14px; fill: none; }
.universo-foto-capa:hover { background: rgba(20,17,14,0.85); }
.universo-foto-capa.e-capa {
  background: var(--color-primary);
  color: #fff;
}
.universo-foto-capa.e-capa svg { fill: currentColor; }

/* =====================================================================
   PROXIMA PAGINA
   Quem chega ao fim de uma pagina nao deveria precisar voltar ao menu
   para continuar. A sequencia e a mesma da leitura: Home, Series
   Iniciais, Series Finais, Resultados, Comunicados, Universo OMNI.
   ===================================================================== */
.proxima { padding-block: var(--space-5) var(--space-2); }
.proxima .container { display: flex; justify-content: center; }

/* ---------- Contas: minha conta, escopo e avisos ---------- */
.universo-conta-titulo {
  margin: var(--space-4) 0 var(--space-3);
  font-family: var(--font-body);
  font-size: var(--texto-sm);
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--color-ink-faint);
}
.universo-conta-titulo:first-child { margin-top: 0; }
#painelConta form + .universo-conta-titulo {
  padding-top: var(--space-4);
  border-top: 1px solid var(--color-border);
}
/* Onde a conta publica, na propria linha dela */
.universo-onde {
  display: flex;
  align-items: center;
  gap: var(--space-1);
  flex-wrap: wrap;
  margin-top: var(--space-0);
  font-size: var(--texto-sm);
  color: var(--color-ink-soft);
}
.universo-onde select {
  padding: var(--space-0) var(--space-1);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  font-size: var(--texto-sm);
  background: var(--color-white);
}
/* Senha provisoria vencida: o ponto no botao Minha conta */
.btn.universo-alerta { border-color: var(--color-primary); color: var(--color-primary); }
/* Entrou com conta de outro modulo */
.com-barra-outro { color: var(--color-ink-soft); font-size: var(--texto-sm); }
.com-barra-outro .com-sair-outro {
  background: none; border: 0; padding: 0 0 0 var(--space-1);
  color: var(--color-primary); font-weight: 600; cursor: pointer;
  font-size: var(--texto-sm); text-decoration: underline;
}

/* A dica da capa fica na barra de gestao, em linha propria */
.universo-fixo-dica {
  flex-basis: 100%;
  font-size: var(--texto-xs);
  color: var(--color-ink-faint);
}

/* =====================================================================
   A FOTO EM DESTAQUE DENTRO DO ALBUM
   A ultima postagem (ou a que a equipe marcar com a estrela) abre o
   album ocupando quatro lugares. Numa folha de contato de 150 fotos, a
   novidade precisa de tamanho para ser vista — e o pai que entra pela
   primeira vez ganha uma imagem grande antes das miniaturas.
   ===================================================================== */
/* Album grande (mosaico): dois por dois, no canto de cima. */
.universo-mosaico .universo-foto.destaque {
  grid-column: span 2;
  grid-row: span 2;
  aspect-ratio: 1;
}
/* Album pequeno (colunas): a coluna nao comporta um bloco 2x2, entao o
   destaque atravessa as colunas e fica em cima, largura inteira. */
.universo-fotos:not(.universo-mosaico) .universo-foto.destaque {
  column-span: all;
  -webkit-column-span: all;
  margin-bottom: var(--space-4);
}
.universo-fotos:not(.universo-mosaico) .universo-foto.destaque img {
  width: 100%;
  max-height: 62vh;
  object-fit: cover;
}

/* =====================================================================
   FOTOS EDITÁVEIS numa grade comum (.gallery)
   Mesma linguagem do Universo OMNI: barra laranja de gestão, X para
   descartar e etiqueta de prazo em cada foto. Nada disso existe para
   quem só visita o site.
   ===================================================================== */
.fotos-barra {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  flex-wrap: wrap;
  margin-bottom: var(--space-4);
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-md);
  background: var(--color-primary-light);
  font-size: var(--texto-sm);
}
.fotos-barra[hidden] { display: none; }
.fotos-prazo { color: var(--color-ink-soft); }
.fotos-barra select {
  padding: var(--space-0) var(--space-1);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  background: var(--color-white);
  font-size: var(--texto-sm);
}
.fotos-progresso, .fotos-aviso { color: var(--color-ink-soft); font-size: var(--texto-mini); }
.fotos-restaurar {
  background: none; border: 0; padding: 0 0 0 var(--space-0);
  color: var(--color-primary); font-weight: 600; cursor: pointer;
  text-decoration: underline; font-size: var(--texto-xs);
}
.gallery a { position: relative; }
.gallery a[hidden] { display: none; }
.foto-descartar {
  position: absolute;
  top: var(--space-0); right: var(--space-0);
  width: 26px; height: 26px;
  display: inline-flex; align-items: center; justify-content: center;
  border: 0; border-radius: 50%;
  background: rgba(180,35,24,0.92); color: #fff;
  font-size: var(--texto-base); line-height: 1;
  cursor: pointer; z-index: 3;
}
.foto-descartar:hover { background: #8E1A12; }
.foto-prazo {
  position: absolute;
  left: var(--space-0); bottom: var(--space-0);
  padding: 0 var(--space-1);
  border-radius: var(--radius-pill);
  background: rgba(20,17,14,0.78);
  color: rgba(255,255,255,0.9);
  font-size: var(--texto-xs); font-weight: 600;
  z-index: 3;
}

/* ---------- Trocar a foto do topo (só para a equipe) ---------- */
.topo-trocar {
  position: absolute;
  right: var(--space-3);
  bottom: var(--space-3);
  z-index: 4;
  display: flex;
  align-items: center;
  gap: var(--space-1);
  flex-wrap: wrap;
}
.topo-trocar .btn { box-shadow: var(--shadow-md); }
.topo-trocar .btn-outline {
  background: rgba(255,255,255,0.92);
  border-color: rgba(255,255,255,0.92);
}
.topo-progresso {
  padding: var(--space-0) var(--space-1);
  border-radius: var(--radius-pill);
  background: rgba(20,17,14,0.78);
  color: #fff;
  font-size: var(--texto-mini);
}
/* NAO mexer no posicionamento da .hero-media: ela e `position: absolute`
   e preenche o hero por tras do texto. Trocar para `relative` a joga no
   fluxo, e a foto passa a ocupar meia tela com o titulo branco por cima
   do branco. Foi o que aconteceu. O botao se ancora no proprio hero,
   que ja e `relative`. */

/* A dica de formato, embaixo do botão de trocar a foto do topo */
.topo-trocar { flex-direction: column; align-items: flex-end; }
.topo-trocar > .btn + .btn { margin-top: var(--space-0); }
.topo-dica {
  max-width: 30ch;
  padding: var(--space-0) var(--space-1);
  border-radius: var(--radius-sm);
  background: rgba(20,17,14,0.72);
  color: rgba(255,255,255,0.92);
  font-size: var(--texto-mini);
  line-height: var(--linha-media);
  text-align: right;
}
.fotos-dica { flex-basis: 100%; font-size: var(--texto-mini); color: var(--color-ink-faint); }

/* =====================================================================
   BORRAR TRECHO DA FOTO (só para a equipe, na hora de publicar)
   ===================================================================== */
.borrar-fundo {
  position: fixed; inset: 0; z-index: 2147483001;
  display: flex; align-items: center; justify-content: center;
  padding: var(--space-3);
  background: rgba(20,17,14,0.78);
}
.borrar-caixa {
  width: min(940px, 96vw);
  max-height: 94vh;
  overflow: auto;
  padding: var(--space-4);
  border-radius: var(--radius-md);
  background: var(--color-white);
  box-shadow: var(--shadow-lg);
}
.borrar-topo { margin-bottom: var(--space-3); }
.borrar-topo strong { display: block; font-family: var(--font-display); font-size: var(--texto-lg); }
.borrar-topo span { font-size: var(--texto-sm); color: var(--color-ink-soft); }
.borrar-palco {
  display: flex; justify-content: center;
  background: var(--color-cream);
  border-radius: var(--radius-sm);
  padding: var(--space-2);
}
.borrar-tela { max-width: 100%; height: auto; cursor: crosshair; touch-action: none; border-radius: 4px; }
.borrar-acoes {
  display: flex; align-items: center; gap: var(--space-2);
  flex-wrap: wrap; justify-content: flex-end;
  margin-top: var(--space-3);
}
.borrar-conta { margin-right: auto; font-size: var(--texto-xs); color: var(--color-ink-faint); }

/* Botão "Borrar" na prévia do envio, ao lado do X */
.universo-previa-borrar {
  position: absolute;
  left: var(--space-0); top: var(--space-0);
  padding: 0 var(--space-1);
  border: 0; border-radius: var(--radius-pill);
  background: rgba(20,17,14,0.78); color: #fff;
  font-size: var(--texto-mini); font-weight: 600;
  cursor: pointer; z-index: 3;
}
.universo-previa-borrar:hover { background: var(--color-primary); }

/* ================= ACONTECE NO OMNI — faixa de Reels =================
   A referencia e a faixa de videos do ameraucanabrasil.com.br, que o
   Pedro fez e aprovou: 7 cards lado a lado, proporcao 4:5, play no
   centro, selo do Instagram no canto, legenda dentro do card.
   Diferenca pedida: no celular NAO vira carrossel cortado — os 7
   continuam todos visiveis, alinhados em fileiras. */
.reels-cabeca {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: var(--space-4);
  margin-bottom: var(--space-5);
}
.reels-ver-todos {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  font-size: var(--texto-sm);
  font-weight: 600;
  color: var(--color-primary);
  white-space: nowrap;
  border-bottom: 1px solid currentColor;
  padding-bottom: 2px;
}
.reels-strip {
  display: flex;
  gap: var(--space-2);
}
.reel-card {
  position: relative;
  display: block;
  flex: 1 1 0;
  min-width: 0;
  aspect-ratio: 4 / 5;
  border-radius: var(--radius-md);
  overflow: hidden;
  background: var(--color-cream);
}
.reel-card img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
/* meia sombra de baixo, para a legenda ler sobre qualquer foto */
.reel-card::after {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 55%;
  background: linear-gradient(to top, rgba(20,17,14,0.66), rgba(20,17,14,0));
  pointer-events: none;
}
.reel-selo {
  position: absolute;
  top: var(--space-2);
  right: var(--space-2);
  width: 18px; height: 18px;
  color: var(--color-white);
  opacity: 0.9;
  filter: drop-shadow(0 1px 4px rgba(0,0,0,0.4));
  z-index: 1;
}
.reel-play {
  position: absolute;
  top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  width: 42px; height: 42px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: rgba(20,17,14,0.45);
  backdrop-filter: blur(2px);
  color: var(--color-white);
  transition: transform 0.25s ease;
  z-index: 1;
}
.reel-play svg { width: 20px; height: 20px; margin-left: 2px; }
.reel-legenda {
  position: absolute;
  left: var(--space-2); right: var(--space-2); bottom: var(--space-2);
  z-index: 1;
  color: var(--color-white);
  font-size: var(--texto-xs);
  font-weight: 600;
  line-height: var(--linha-media);
  text-align: center;
  text-shadow: 0 1px 6px rgba(0,0,0,0.45);
}
@media (hover: hover) and (pointer: fine) {
  .reel-card { transition: transform 0.25s ease, box-shadow 0.25s ease; }
  .reel-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-md); }
  .reel-card:hover .reel-play { transform: translate(-50%, -50%) scale(1.1); }
}
@media (max-width: 860px) {
  .reels-cabeca { flex-direction: column; align-items: flex-start; gap: var(--space-3); }
  /* A MESMA fileira do computador, travada: os 7 lado a lado, cada um
     com 1/7 da largura, sem quebrar linha e sem carrossel. O card fica
     pequeno de proposito — e uma faixa de miniaturas; quem toca assiste
     no Instagram. Legenda e selo nao cabem nesse tamanho e saem. */
  .reels-strip { flex-wrap: nowrap; gap: var(--space-2); }
  /* No celular so os 4 mais recentes: cabem maiores numa fileira so. */
  .reel-card:nth-child(n+5) { display: none; }
  .reel-legenda { display: none; }
  .reel-selo { display: none; }
  .reel-play { width: 22px; height: 22px; }
  .reel-play svg { width: 11px; height: 11px; margin-left: 1px; }
  .reel-card::after { height: 0; }
}

}

/* ---------- Trocar a foto de um card ou bloco (só para a equipe) ---------- */
/* A caixa da foto precisa ser o ancestral posicionado; sem isto o botão
   escaparia para o canto da página. `.split-media` e `.diff-media` já têm
   `overflow: hidden`, então o botão fica contido na moldura da foto. */
.split-media, .diff-media { position: relative; }
.slot-trocar {
  position: absolute;
  right: var(--space-1);
  bottom: var(--space-1);
  z-index: 3;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: var(--space-0);
}
.slot-trocar .btn { box-shadow: var(--shadow-md); white-space: nowrap; }
.slot-trocar .btn-outline {
  background: rgba(255,255,255,0.94);
  border-color: rgba(255,255,255,0.94);
}
.slot-recado {
  padding: var(--space-0) var(--space-1);
  border-radius: var(--radius-pill);
  background: rgba(20,17,14,0.78);
  color: #fff;
  font-size: var(--texto-mini);
}
/* O efeito de aproximar a foto no mouse não pode arrastar o botão junto,
   senão ele foge de quem tenta clicar. */
.split-media:hover .slot-trocar,
.diff-media:hover .slot-trocar { transform: none; }
.slot-dica {
  padding: 2px var(--space-1);
  border-radius: var(--radius-sm);
  background: rgba(20,17,14,0.72);
  color: #fff;
  font-size: var(--texto-mini);
  white-space: nowrap;
}

/* ---------- Cadastros: criar e remover conta ---------- */
/* O formulario de criar fica ACIMA da lista: e o que a pessoa vem
   fazer quando abre esta tela com alguem novo para entrar. */
.universo-nova-conta {
  border: 1px solid var(--color-line);
  border-radius: 12px;
  padding: var(--space-3);
  margin-bottom: var(--space-3);
  background: var(--color-surface-2, rgba(20,17,14,0.02));
}
.universo-nova-conta h4 {
  margin: 0 0 var(--space-2);
  font-size: var(--texto-base);
  font-weight: 600;
}
.universo-nova-conta .field { margin-bottom: var(--space-2); }
.universo-nova-conta .btn { margin-top: var(--space-1); }

/* Remover fica em texto, e nao em botao cheio: e a acao mais grave
   desta tela e nao deve competir em peso com Aprovar. */
.universo-remover-conta {
  border: 0;
  background: none;
  font: inherit;
  font-size: var(--texto-sm);
  color: rgba(20,17,14,0.45);
  text-decoration: underline;
  cursor: pointer;
  padding: 0 var(--space-1);
}
.universo-remover-conta:hover { color: #b3261e; }
.universo-remover-conta:focus-visible { outline: 2px solid #b3261e; outline-offset: 2px; }

/* ---------- avisos soltos (sem botão a que se prender) ---------- */
.universo-avisos {
  position: fixed;
  left: 50%; bottom: var(--space-4);
  transform: translateX(-50%);
  z-index: 400;
  display: flex; flex-direction: column; gap: var(--space-1);
  pointer-events: none;
  max-width: min(92vw, 460px);
}
.universo-avisos p {
  margin: 0;
  padding: 12px 18px;
  border-radius: 10px;
  background: rgba(20,17,14,0.92);
  color: #fff;
  font-size: var(--texto-sm);
  line-height: 1.45;
  box-shadow: 0 8px 28px rgba(0,0,0,0.25);
  animation: universo-aviso-entra .22s ease both;
}
.universo-avisos p.saindo { opacity: 0; transition: opacity .35s ease; }
@keyframes universo-aviso-entra { from { opacity: 0; transform: translateY(8px); } }
@media (prefers-reduced-motion: reduce) {
  .universo-avisos p { animation: none; }
}

/* =====================================================================
   UNIVERSO OMNI na home — atalhos para as seções da família
   Reusa o .card do site; só acrescenta o comportamento de link.
   ===================================================================== */
.uni-card {
  display: flex;
  flex-direction: column;
  text-decoration: none;
  color: inherit;
  transition: transform 0.2s cubic-bezier(0.22,0.61,0.36,1), box-shadow 0.2s ease, border-color 0.2s ease;
}
.uni-card h3 { color: var(--color-ink); margin: var(--space-2) 0 var(--space-1); }
.uni-card p { color: var(--color-ink-soft); margin: 0; }
.uni-card .card-icon { color: var(--color-primary); }
.uni-card:hover {
  transform: translateY(-4px);
  box-shadow: var(--shadow-md);
  border-color: var(--color-primary-soft);
}
.uni-card::after {
  content: "";
  margin-top: auto;
  padding-top: var(--space-2);
}
@media (prefers-reduced-motion: reduce) {
  .uni-card { transition: none; }
  .uni-card:hover { transform: none; }
}

/* =====================================================================
   Sanfona do Universo OMNI (pagina comunicados)
   Faixa full-width, SEM quadros: icone + titulo correndo, linha fina
   entre os topicos, abre/fecha no clique (efeito sanfona).
   ===================================================================== */
.uni-sanfona { gap: 0; }
.uni-sanfona .mes-bloco {
  background: transparent;
  border: 0;
  border-bottom: 1px solid var(--color-border);
  border-radius: 0;
  box-shadow: none;
  overflow: visible;
}
.uni-sanfona .mes-bloco:first-child { border-top: 1px solid var(--color-border); }
.uni-sanfona .mes-bloco > summary { padding: var(--space-4) var(--space-2); }
.uni-sanfona .mes-bloco > summary:hover { background: transparent; }
.uni-sanfona .mes-bloco > summary:hover .uni-ico { background: var(--color-primary); color: #fff; }
.uni-sanfona .mes-bloco[open] > summary { background: transparent; border-bottom: 0; }
.uni-sanfona .mes-bloco[open] .uni-ico { background: var(--color-primary); color: #fff; }

.uni-cab { display: flex; align-items: center; gap: var(--space-3); min-width: 0; }
.uni-ico {
  display: inline-flex; align-items: center; justify-content: center;
  width: 46px; height: 46px; flex-shrink: 0;
  border-radius: var(--radius-sm);
  background: var(--color-primary-light);
  color: var(--color-primary);
  transition: background 0.2s ease, color 0.2s ease;
}
.uni-ico svg { width: 23px; height: 23px; }
.uni-sanfona .mes-bloco > summary h3 { color: var(--color-ink); }

.uni-sanfona .mes-corpo {
  padding: 0 var(--space-2) var(--space-4);
  padding-left: calc(46px + var(--space-3) + var(--space-2));
}
.uni-previa { margin: 0 0 var(--space-3); padding-left: 1.1rem; color: var(--color-ink-soft); }
.uni-previa li { margin: 0.2rem 0; }
.ver-mais { margin-top: var(--space-1); }

@media (max-width: 640px) {
  .uni-ico { width: 40px; height: 40px; }
  .uni-ico svg { width: 20px; height: 20px; }
  .uni-sanfona .mes-corpo { padding-left: var(--space-2); }
}

/* Conteúdo real injetado dentro da sanfona do Universo OMNI */
.sanfona-conteudo > section { padding: var(--space-3) 0; background: transparent !important; }
.sanfona-conteudo > section:first-child { padding-top: 0; }
.sanfona-conteudo .container { padding-left: 0; padding-right: 0; }
.sanfona-conteudo .section-head { text-align: left; }
.sanfona-carregando { color: var(--color-ink-faint); font-style: italic; }

/* ESTADO VAZIO das páginas sem publicação */
.vazio-estado { max-width: 640px; margin: 0 auto; text-align: center; padding: var(--space-4) 0; }
.vazio-icone { width: 64px; height: 64px; margin: 0 auto var(--space-3); display: flex; align-items: center; justify-content: center; border-radius: 50%; background: var(--color-primary-light); color: var(--color-primary); }
.vazio-icone svg { width: 30px; height: 30px; }
.vazio-estado h2 { margin: 0 0 var(--space-2); }
.vazio-estado > p { color: var(--color-ink-soft); margin: 0 auto; max-width: 52ch; }
.vazio-dica { margin-top: var(--space-3) !important; font-size: var(--texto-sm); }
.vazio-dica a { color: var(--color-primary); font-weight: 600; }
.vazio-acoes { display: flex; gap: var(--space-2); justify-content: center; flex-wrap: wrap; margin-top: var(--space-4); }

/* Botão Voltar nas páginas internas do Universo OMNI */
.voltar-universo { padding: var(--space-4) 0 0; }

/* Home — miniatura do último post em cada card do Universo OMNI */
.uni-card-post::after { content: none; }
.uni-post { margin-top: auto; padding-top: var(--space-2); border-top: 1px solid var(--color-border); display: flex; gap: var(--space-2); align-items: center; }
.uni-post-thumb { width: 54px; height: 54px; flex-shrink: 0; border-radius: var(--radius-sm); overflow: hidden; background: var(--color-cream); border: 1px solid var(--color-border); }
.uni-post-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.uni-post-info { min-width: 0; }
.uni-post-data { margin: 0; font-size: 0.7rem; font-weight: 700; letter-spacing: 0.03em; text-transform: uppercase; color: var(--color-primary); }
.uni-post-titulo { margin: 2px 0 0; font-size: var(--texto-sm); font-weight: 600; color: var(--color-ink); line-height: 1.25; }
.uni-ultimo.uni-vazio { margin-top: auto; padding-top: var(--space-2); border-top: 1px dashed var(--color-border); color: var(--color-ink-faint); font-style: italic; font-size: var(--texto-sm); }

/* miniaturas: texto mais discreto */
.uni-post-thumb { width: 44px; height: 44px; }
.uni-post-data { font-size: 0.62rem; font-weight: 600; letter-spacing: 0.02em; color: var(--color-ink-faint); }
.uni-post-titulo { font-size: 0.8rem; font-weight: 500; color: var(--color-ink-soft); }

/* miniaturas: especificidade acima de .card p (senão o texto não fica discreto) */
.uni-card .uni-post-data { font-size: 0.62rem; font-weight: 600; letter-spacing: 0.02em; text-transform: uppercase; color: var(--color-ink-faint); margin: 0; }
.uni-card .uni-post-titulo { font-size: 0.8rem; font-weight: 500; color: var(--color-ink-soft); margin: 2px 0 0; line-height: 1.25; }

/* miniaturas: imagem grande com o texto a direita (dobro do tamanho antigo) */
.uni-post { flex-direction: row; align-items: center; gap: var(--space-2); }
.uni-post-img { align-items: center; }
.uni-post-thumb { width: 104px; height: 104px; }
.uni-post-info { flex: 1 1 auto; min-width: 0; }

/* no celular a miniatura ganha metade do card, texto na outra metade */
@media (max-width: 640px) {
  .uni-post-thumb { width: 46%; height: auto; aspect-ratio: 1 / 1; }
  .uni-post-img .uni-post-thumb { width: 58%; }  /* sozinha (Informativos), pode ser maior */
}
