/* ============================================================================
   cine-ui.css — Sistema visual do Cine Alameda (layout inspirado no CineLaser,
   cores e tipografia do brand book Estação das Artes).

   REGRA: nenhuma cor fixa aqui. Tudo sai dos tokens de includes/tema.php, para
   o painel Aparência continuar mandando e os modos claro/escuro funcionarem.
   Prefixo .cx- para não colidir com o CSS legado das páginas.
   ========================================================================= */

/* ─── Compatibilidade Safari ────────────────────────────────────────────
   Safari antigo (< 15) não entende `aspect-ratio`: sem isto os pôsteres
   colapsam para altura zero e a página "quebra". O truque do padding-top
   reserva a proporção e só é aplicado quando aspect-ratio NÃO existe.
   Também evitamos `inset` (Safari < 14.1) usando top/right/bottom/left. */
@supports not (aspect-ratio: 2 / 3) {
    .cx-card__poster,
    .cx-film__poster { height:0; padding-top:150%; }          /* 2:3 */
    .cx-card__img    { height:0; padding-top:56.25%; }        /* 16:9 */
    .cx-card__poster > img, .cx-card__poster > span,
    .cx-film__poster > img, .cx-film__poster > span,
    .cx-card__img > img,    .cx-card__img > span {
        position:absolute; top:0; left:0; width:100%; height:100%;
    }
}

/* Altura ocupada pelo menu flutuante (afastamento do topo + altura + borda).
   Usada para puxar a vitrine para trás dele. */
:root { --cx-header-h:78px; --cx-header-h-mob:66px; }

/* Menu aberto: a página congela onde está e só o painel rola.
   NÃO usar `position:fixed` no body aqui. Já foi assim e quebrava: o
   cabeçalho é `position:sticky` e, dentro de um body fixo, perde a referência
   de rolagem — o painel ia parar no topo do documento, fora da tela, e tudo
   parecia travado.
   `overflow:hidden` segura no desktop e no Android. No iOS ele não basta
   sozinho: quem realmente impede o arrasto é `touch-action:none`, e por isso
   o painel precisa reabilitar `pan-y` para continuar rolando por dentro. */
/* Trava da página com o menu aberto.
   Duas armadilhas já custaram caro aqui:
     1) `position:fixed` no body e `overflow:hidden` no html — os dois tiram do
        <html> o papel de caixa de rolagem, e sem ela o `position:sticky` do
        cabeçalho deixa de valer: a faixa volta ao topo do documento e leva o
        painel junto. NÃO usar nenhum dos dois.
     2) `touch-action` NÃO é herdado. Pô-lo no body só bloqueia o toque que
        começa no próprio body — arrastar a partir de um card continuava
        rolando a página.
   Por isso quem trava é o VÉU: ele cobre a viewport inteira, então todo toque
   fora do menu cai nele, e nele o arrasto está desligado. O cabeçalho e o
   painel ficam acima do véu (z-index maior) e seguem funcionando. */
html.cx-menu-aberto { overscroll-behavior:none; }
html.cx-menu-aberto .cx-nav {
    touch-action:pan-y;
    overscroll-behavior:contain;   /* o arrasto não vaza para a página atrás */
}

/* ─────────────────────────── Base de página ─────────────────────────── */
/* box-sizing:border-box é OBRIGATÓRIO aqui. O projeto não tem o reset global
   `*{box-sizing:border-box}`, então no padrão do CSS (content-box) o padding
   SOMA à largura: `width:100%` + `padding:0 24px` dava 100% + 48px e a página
   ficava mais larga que a tela em todo tamanho de janela.
   Ninguém via barra de rolagem porque o header aplica `html{overflow-x:clip}`,
   que esconde o sintoma — mas o conteúdo era cortado à direita e a margem
   daquele lado desaparecia. Medido: 798px de conteúdo numa tela de 750px.
   Mesma coisa vale para os containers institucionais logo abaixo. */
.cx-wrap { box-sizing:border-box; width:100%; max-width:1360px; margin:0 auto; padding:0 24px; }

/* Páginas institucionais: mesma margem lateral do resto do site em cada tela.
   Os containers antigos tinham padding fixo de 20px e ficavam apertados no
   celular — aqui eles passam a acompanhar o padrão. */
.container-institucional,
.container-sobre,
.container-atendimento,
.container-projetos,
.ev-wrap {
    box-sizing:border-box;   /* mesmo motivo do .cx-wrap acima */
    width:100%; margin:40px auto; padding:0 24px; min-height:60vh;
}
.container-institucional,
.container-atendimento { max-width:1000px; }
.container-sobre,
.container-projetos,
.ev-wrap { max-width:1200px; }
@media (max-width:900px){
    .container-institucional, .container-sobre, .container-atendimento,
    .container-projetos, .ev-wrap { margin:30px auto; padding:0 16px; }
}
@media (max-width:640px){
    .container-institucional, .container-sobre, .container-atendimento,
    .container-projetos, .ev-wrap { margin:22px auto; padding:0 14px; }
}

.cx-section { padding:48px 0; }
.cx-section--tight { padding:36px 0; }

/* Cabeçalho de seção: "#HOJENOSCINEMAS" + "FILMES EM CARTAZ" */
.cx-kicker {
    display:block; font-family:var(--fonte-titulo);
    font-size:13px; font-weight:600; letter-spacing:.18em; text-transform:uppercase;
    color:var(--texto-3); margin:0 0 6px;
}
.cx-title {
    font-family:var(--fonte-titulo); font-weight:700; text-transform:uppercase;
    font-size:clamp(1.9rem, 1.1rem + 2.6vw, 3.1rem); line-height:1.04;
    /* --titulo, não --texto: a identidade dá aos títulos o navy institucional
       enquanto o corpo do texto fica em chumbo. São dois papéis distintos. */
    letter-spacing:.01em; margin:0; color:var(--titulo);
}
.cx-title em { font-style:normal; color:var(--destaque-texto); }   /* 2ª palavra colorida */
.cx-head { margin-bottom:26px; }
.cx-head--center { text-align:center; }
.cx-head--center .cx-kicker { color:var(--texto-3); }

/* ─────────────────────────── Botões ─────────────────────────── */
.cx-btn {
    display:inline-flex; align-items:center; justify-content:center; gap:8px;
    height:44px; padding:0 22px; border:none; border-radius:var(--raio-total);
    font-family:var(--fonte-texto); font-size:14px; font-weight:700;
    text-decoration:none; cursor:pointer; white-space:nowrap;
    transition:transform var(--transicao), filter var(--transicao), background-color var(--transicao);
}
.cx-btn:hover { transform:translateY(-1px); filter:brightness(1.06); }
.cx-btn:active { transform:translateY(0); }
.cx-btn--primaria { background:var(--primaria); color:var(--primaria-txt); }
.cx-btn--destaque { background:var(--destaque-botao);  color:var(--destaque-botao-txt); }
.cx-btn--claro    { background:var(--superficie); color:var(--texto); border:1px solid var(--borda); }
.cx-btn--linha    { background:transparent; color:var(--texto); border:1.5px solid var(--borda-forte); }
.cx-btn--linha:hover { border-color:var(--primaria); color:var(--primaria-texto); }
.cx-btn--sm { height:36px; padding:0 16px; font-size:13px; }
.cx-btn__txt { display:inline; }

/* ─────────────────────────── Cabeçalho do site ─────────────────────────── */
/* Menu FLUTUANTE: cartão arredondado que "solta" da borda da página e
   acompanha a rolagem. Cor própria (--menu-fundo), independente do tema. */
.cx-header {
    position:sticky; top:var(--faixa-mt); z-index:900;
    /* Mesma margem e mesmo raio da vitrine (ver --faixa-* acima) */
    margin:var(--faixa-mt) var(--faixa-mx) 0; width:auto;
    /* Vidro. O fundo sólido anulava o backdrop-filter que já existia aqui —
       sem alfa não há o que desfocar atrás. A saturação alta evita que o
       desfoque lave a cor por trás.

       Usa --vidro-alfa-MENU, não o alfa geral: com os mesmos 38% das demais
       superfícies, o marinho da marca composto sobre a página clara resultava
       em #9599BA — um lavanda em que a cor escolhida no painel não se
       reconhecia, e sobre o qual o texto do menu media 1.16:1. O menu tem
       controle próprio na Aparência justamente por ser o único vidro que
       precisa preservar a identidade da cor. */
    background:rgba(var(--menu-fundo-rgb, 10,15,92), var(--vidro-alfa-menu, .82)); color:var(--menu-texto);
    border:1px solid var(--menu-borda); border-radius:var(--faixa-raio);
    box-shadow:var(--sombra-2);
    backdrop-filter:var(--vidro-menu-blur, blur(22px) saturate(180%));
    -webkit-backdrop-filter:var(--vidro-menu-blur, blur(22px) saturate(180%));
    transition:background var(--transicao);
}
/* Ao rolar, fecha um pouco mais para o conteúdo não competir com o menu. */
.cx-header.is-scrolled {
    /* Ao rolar fecha mais: soma 0.17 ao valor configurado, limitado a 1 —
       assim o ajuste do painel move os dois estados juntos, mantendo a
       diferença entre eles. */
    background:rgba(var(--menu-fundo-rgb, 10,15,92), calc(var(--vidro-alfa-menu, .82) + .12));
    /* Segue o desfoque do painel, so que um grau acima do repouso. Antes era
       blur(26px) saturate(200%) fixo: baixar o desfoque na Aparencia nao tinha
       efeito nenhum depois que a pagina rolava dois dedos. */
    backdrop-filter:var(--vidro-blur-forte, blur(26px) saturate(200%));
    -webkit-backdrop-filter:var(--vidro-blur-forte, blur(26px) saturate(200%));
}
/* Sem suporte a backdrop-filter, volta ao fundo sólido: melhor opaco que
   um menu semitransparente com o texto da página aparecendo por baixo. */
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
    .cx-header, .cx-header.is-scrolled { background:var(--menu-fundo); }
}
.cx-header__inner {
    display:flex; align-items:center; gap:22px;
    min-height:68px; padding:8px 22px;
    max-width:none; margin:0;
}
/* Dentro do menu tudo lê a cor do próprio menu, não a da página */
.cx-header .cx-nav__link            { color:var(--menu-texto); }
.cx-header .cx-nav__link:hover      { color:var(--menu-destaque); }
.cx-header .cx-nav__link.is-active  { color:var(--menu-destaque); }
.cx-header .cx-select select        { background:transparent; color:var(--menu-texto); border-color:var(--menu-borda); }
.cx-header .cx-select select option { background:var(--menu-fundo); color:var(--menu-texto); }
.cx-header .cx-select::after        { border-top-color:var(--menu-texto-2); }
.cx-header .cx-burger               { color:var(--menu-texto); border-color:var(--menu-borda); }
.cx-header .cx-nav                  { border-top-color:var(--menu-borda); }
.cx-header .cx-nav__drop            { background:var(--menu-fundo); border-color:var(--menu-borda); }
.cx-header .cx-nav__drop a          { color:var(--menu-texto); }
.cx-header .cx-brand__txt           { color:var(--menu-texto); }
/* A logo ganha uma área própria e fica centralizada dentro dela — assim não
   cola na borda do menu nem "encosta" na navegação. */
.cx-brand {
    display:flex; align-items:center; justify-content:center;
    flex-shrink:0; text-decoration:none;
    min-width:330px; padding:0 20px;
}
.cx-brand img { height:var(--logo-altura,48px); width:auto; max-width:100%; object-fit:contain; display:block; }
.cx-brand__txt {
    font-family:var(--fonte-titulo); font-weight:700; font-size:21px;
    text-transform:uppercase; color:var(--primaria-texto); letter-spacing:.02em;
}

/* Navegação central — espaçamento e peso iguais aos da referência */
.cx-nav { display:flex; align-items:center; gap:10px; margin:0 auto; }
.cx-nav__link {
    position:relative; display:inline-flex; align-items:center; gap:8px;
    padding:8px 12px; border-radius:var(--raio-p);
    font-size:15px; font-weight:700; color:var(--texto); text-decoration:none;
    transition:color var(--transicao); white-space:nowrap;
}
.cx-nav__link:hover { color:var(--menu-destaque); }
/* Item ativo: ponto colorido + texto colorido (como na referência) */
.cx-nav__link.is-active { color:var(--menu-destaque); }
.cx-nav__link.is-active::before {
    content:""; width:6px; height:6px; border-radius:50%;
    background:var(--destaque); flex-shrink:0;
}

/* Submenu */
.cx-nav__item { position:relative; }
/* Grupos cadastrados no painel aparecem também no desktop como submenu. */
.cx-nav__mais { display:block; }
.cx-nav__drop {
    position:absolute; top:calc(100% + 6px); left:0; min-width:230px;
    background:var(--superficie); border:1px solid var(--borda);
    border-radius:var(--raio-m); box-shadow:var(--sombra-2);
    padding:6px; list-style:none; margin:0;
    opacity:0; visibility:hidden; transform:translateY(8px);
    transition:all var(--transicao); z-index:20;
}
.cx-nav__item:hover .cx-nav__drop,
.cx-nav__item:focus-within .cx-nav__drop { opacity:1; visibility:visible; transform:translateY(0); }
.cx-nav__drop a {
    display:block; padding:10px 14px; border-radius:var(--raio-p);
    font-size:14px; font-weight:500; color:var(--texto); text-decoration:none;
}
.cx-nav__drop a:hover { background:rgba(var(--primaria-rgb, 0,181,200),.10); color:var(--primaria-texto); }

/* Extras dentro do menu: Clube + alternar claro/escuro.
   No desktop ficam no fim da barra de navegação; no celular, dentro do
   menu aberto pelo hambúrguer. */
.cx-nav__extras {
    display:flex; align-items:center; gap:12px; margin-left:8px;
    padding-left:14px; border-left:1px solid var(--menu-borda);
}

/* Ações à direita */
.cx-actions { display:flex; align-items:center; gap:10px; flex-shrink:0; margin-left:auto; }

.cx-icon-btn {
    display:inline-flex; align-items:center; justify-content:center;
    width:40px; height:40px; border-radius:var(--raio-total);
    border:1px solid var(--borda); background:transparent;
    color:var(--texto-2); font-size:15px; cursor:pointer;
    transition:all var(--transicao);
}
.cx-icon-btn:hover { color:var(--primaria-texto); border-color:var(--primaria); background:rgba(var(--primaria-rgb, 0,181,200),.10); }

/* Alternador de tema no cabeçalho: ícone limpo, sem moldura (igual à referência) */
.cx-header .cine-tema-btn {
    width:auto; height:auto; padding:6px 4px; margin:0;
    border:none !important; background:none !important;
    /* --menu-ouro, não --marca-mostarda: o botão fica sobre a faixa do menu,
       e o ouro puro sobre uma faixa clara mede ~1.9:1. O fallback antigo
       apontava para --mostarda, que nunca existiu em lugar nenhum. */
    color:var(--menu-ouro,var(--marca-mostarda)); font-size:20px; line-height:1; cursor:pointer;
}
.cx-header .cine-tema-btn:hover { filter:brightness(1.15); transform:none; }

/* Botões "Login" (claro) e "Clube" (destaque) */
.cx-login {
    display:inline-flex; align-items:center; justify-content:center;
    height:40px; padding:0 22px; border-radius:var(--raio-p);
    background:var(--superficie-inv); color:var(--texto-inv);
    font-size:15px; font-weight:600; text-decoration:none; white-space:nowrap;
    border:1px solid transparent; transition:filter var(--transicao), transform var(--transicao);
}
.cx-login:hover { filter:brightness(.94); transform:translateY(-1px); }

.cx-clube {
    display:inline-flex; flex-direction:column; align-items:center; justify-content:center;
    min-width:76px; height:40px; padding:0 14px; border-radius:var(--raio-p);
    background:var(--destaque-botao); color:var(--destaque-botao-txt); text-decoration:none;
    font-family:var(--fonte-titulo); font-weight:700; line-height:1;
    transition:filter var(--transicao), transform var(--transicao);
}
.cx-clube:hover { filter:brightness(1.08); transform:translateY(-1px); }
.cx-clube__t { font-size:17px; letter-spacing:.02em; text-transform:uppercase; }
.cx-clube__s { font-size:8px; letter-spacing:.08em; text-transform:uppercase; opacity:.92; margin-top:2px; }

/* Select da unidade (arredondado, seta desenhada — nunca background-image) */
.cx-select { position:relative; min-width:190px; }
.cx-select select {
    width:100%; height:42px; padding:0 38px 0 16px;
    border:1px solid var(--borda-forte); border-radius:var(--raio-m);
    background:var(--superficie); color:var(--texto);
    font-family:var(--fonte-texto); font-size:14px; font-weight:600;
    cursor:pointer; appearance:none; -webkit-appearance:none; -moz-appearance:none;
    text-overflow:ellipsis;
}
.cx-select select:focus { outline:none; border-color:var(--primaria); box-shadow:0 0 0 3px rgba(var(--primaria-rgb, 0,181,200),.18); }
.cx-select::after {
    content:""; position:absolute; right:16px; top:50%; margin-top:-2px;
    width:0; height:0; pointer-events:none;
    border-left:5px solid transparent; border-right:5px solid transparent;
    border-top:6px solid var(--texto-2);
}
.cx-select option { background:var(--superficie); color:var(--texto); }

/* Botão do menu (mobile) */
.cx-burger {
    display:none; width:42px; height:42px; border-radius:var(--raio-m);
    border:1px solid var(--borda); background:transparent;
    color:var(--texto); font-size:19px; cursor:pointer;
}

/* ══════════════ DESTAQUES — vitrine estilo streaming ══════════════
   DESKTOP: imagem preenchendo, degradê da esquerda/base e as informações
   sobrepostas à esquerda. CELULAR: imagem vertical e as informações
   centralizadas embaixo. O texto usa --sobre-midia (sempre claro) porque
   fica sobre o degradê escuro nos dois modos. */
/* Ocupa quase toda a largura do site (sem max-width), com margem lateral 3x a
   vertical. O cabeçalho flutua POR CIMA dela: a margem negativa puxa a vitrine
   para trás do menu, e o padding devolve o espaço para o conteúdo não subir. */
/* ── Faixa: cabeçalho e vitrine usam a MESMA margem e o MESMO raio ──────────
   Antes cada um tinha o seu valor, repetido em três breakpoints diferentes
   (900px, 960px, 640px), e eles foram divergindo: em telas médias o header
   ficava com 12px e a vitrine com 16px, e no celular a vitrine ia de ponta a
   ponta sem cantos. Com as variáveis, mudar aqui move os dois juntos. */
:root { --faixa-mx:24px; --faixa-mt:8px; --faixa-raio:26px; }
@media (max-width:960px){
    :root { --faixa-mx:12px; --faixa-mt:6px; --faixa-raio:18px; }
}

.cx-destaques {
    position:relative; margin:var(--faixa-mt) var(--faixa-mx) 0; width:auto;
    border-radius:var(--faixa-raio); overflow:hidden; background:var(--superficie-2);
    min-height:clamp(460px, 46vw, 660px);
}
/* A vitrine NÃO passa mais por trás do cabeçalho: fica logo abaixo dele, com
   o mesmo respiro que a faixa usa em volta (--faixa-mt). Antes havia uma
   margem negativa da altura do cabeçalho para ele flutuar sobre a arte.
   A classe continua no HTML só para não mexer em quem a referencia. */
.cx-destaques--sobheader { margin-top:var(--faixa-mt); }

/* Slides: só o ativo existe no layout — assim nunca empilham um sob o outro */
.cx-dest { display:none; }
.cx-dest.is-active {
    display:flex; align-items:flex-end;
    position:absolute; top:0; right:0; bottom:0; left:0;
    animation:cxDestEntra .5s ease;
}
@keyframes cxDestEntra { from{opacity:0} to{opacity:1} }

.cx-dest__bg {
    position:absolute; top:0; right:0; bottom:0; left:0; z-index:0;
    width:100%; height:100%; object-fit:cover; object-position:center 22%;
}
.cx-dest__bg--mob { display:none; }
/* Degradê: escurece a esquerda e a base para o texto ficar legível */
.cx-dest::after {
    content:""; position:absolute; top:0; right:0; bottom:0; left:0; z-index:1;
    background:
        linear-gradient(to right,  rgba(0,0,0,.94) 0%, rgba(0,0,0,.72) 26%, rgba(0,0,0,.20) 62%, transparent 88%),
        linear-gradient(to top,    rgba(0,0,0,.88) 0%, rgba(0,0,0,.30) 34%, transparent 66%),
        /* leve escurecida no topo: o menu flutua aqui e precisa de contraste */
        linear-gradient(to bottom, rgba(0,0,0,.45) 0%, transparent 22%);
}

.cx-dest__corpo {
    position:relative; z-index:2; padding:0 0 62px 46px;
    max-width:min(560px, 82%); color:var(--sobre-midia);
}
.cx-dest__logo {
    display:block; max-width:100%; max-height:150px; object-fit:contain;
    margin-bottom:14px; filter:drop-shadow(0 3px 14px rgba(0,0,0,.6));
}
.cx-dest__titulo {
    font-family:var(--fonte-titulo); font-weight:700; line-height:1.03;
    font-size:clamp(1.8rem, 1.1rem + 2.6vw, 3.1rem); margin:0 0 8px;
    color:var(--sobre-midia); text-transform:none;
}
.cx-dest__sub {
    font-size:14.5px; font-weight:700; color:var(--sobre-midia);
    margin:0 0 8px; letter-spacing:.01em;
}
/* Linha de informações (classificação · gêneros · ano · duração · nota) */
.cx-dest__meta { display:flex; align-items:center; gap:11px; flex-wrap:wrap; margin-bottom:10px; }
.cx-dest__class {
    display:inline-flex; align-items:center; justify-content:center;
    min-width:30px; padding:3px 8px; border-radius:4px;
    font-size:12px; font-weight:800; color:#fff; line-height:1.3;
}
.cx-dest__infos { font-size:14px; font-weight:600; color:var(--sobre-midia-2); }
.cx-dest__nota  {
    display:inline-flex; align-items:center; gap:5px;
    font-size:14px; font-weight:700; color:var(--sobre-midia);
}
.cx-dest__nota i { color:var(--aviso-texto); font-size:12px; }
.cx-dest__sinopse {
    font-size:15px; line-height:1.6; color:var(--sobre-midia-2);
    margin:0 0 20px; max-width:520px;
}

/* Botões: principal claro (como no exemplo) + secundário em contorno */
.cx-dest__acoes { display:flex; gap:10px; flex-wrap:wrap; align-items:center; }
.cx-dest__cta {
    display:inline-flex; align-items:center; justify-content:center; gap:9px;
    height:50px; padding:0 30px; border-radius:var(--raio-p);
    background:var(--sobre-midia); color:#0D0D0D;
    font-size:15.5px; font-weight:700; text-decoration:none; white-space:nowrap;
    transition:transform var(--transicao), filter var(--transicao);
}
.cx-dest__cta:hover { transform:translateY(-1px); filter:brightness(.93); }
.cx-dest__cta2 {
    display:inline-flex; align-items:center; justify-content:center;
    height:50px; padding:0 22px; border-radius:var(--raio-p);
    border:1.5px solid rgba(255,255,255,.55); background:rgba(255,255,255,.10);
    color:var(--sobre-midia); font-size:15px; font-weight:700;
    text-decoration:none; white-space:nowrap; transition:all var(--transicao);
}
.cx-dest__cta2:hover { background:rgba(255,255,255,.20); border-color:var(--sobre-midia); color:var(--sobre-midia); }

/* Navegação da vitrine: setas + pontinhos + contador (2/6) */
.cx-dest__nav {
    position:absolute; left:0; right:0; bottom:18px; z-index:5;
    display:flex; align-items:center; justify-content:center; gap:14px;
    padding:0 18px;
}
.cx-dest__seta {
    width:34px; height:34px; flex-shrink:0; border-radius:50%; cursor:pointer;
    border:1px solid rgba(255,255,255,.34); background:rgba(0,0,0,.42);
    color:var(--sobre-midia); font-size:13px; padding:0;
    display:inline-flex; align-items:center; justify-content:center;
    transition:background var(--transicao), border-color var(--transicao);
}
.cx-dest__seta:hover { background:rgba(0,0,0,.68); border-color:var(--sobre-midia); }
.cx-dest__dots { display:flex; gap:8px; align-items:center; flex-shrink:0; }
/* Dimensões travadas: sem isto o botão herda altura de outras regras e os
   pontinhos viram barras verticais. */
.cx-dest__dot {
    width:9px; height:9px; min-height:0; min-width:0; flex:0 0 9px;
    border-radius:50%; border:none; padding:0; margin:0; cursor:pointer;
    background:rgba(255,255,255,.42); transition:all var(--transicao);
    -webkit-appearance:none; appearance:none; line-height:0; font-size:0;
}
.cx-dest__dot.is-active { background:var(--sobre-midia); width:26px; flex-basis:26px; border-radius:5px; }
.cx-dest__conta {
    font-family:var(--fonte-titulo); font-size:13.5px; font-weight:700;
    color:var(--sobre-midia-2); letter-spacing:.04em; flex-shrink:0;
    text-shadow:0 1px 6px rgba(0,0,0,.6);
}
.cx-dest__conta strong { color:var(--sobre-midia); font-size:15px; }

@media (max-width:900px){
    .cx-destaques { min-height:clamp(420px, 62vw, 520px); }
    .cx-dest__corpo { padding:0 0 54px 30px; max-width:74%; }
    .cx-dest__logo { max-height:110px; }
}

@media (max-width:640px){
    /* Celular: MESMA leitura do desktop (imagem preenchendo, degradê e texto
       alinhado à esquerda na base) — só que num bloco mais alto, porque a tela
       é estreita e o conteúdo precisa de espaço.
       A margem e os cantos vêm de --faixa-*, iguais aos do cabeçalho. */
    .cx-destaques {
        min-height:0; aspect-ratio:4/5; max-height:76vh;
    }
    /* Havendo imagem vertical, ela substitui a horizontal no celular.
       Feito por classe no PHP (.cx-dest--temmob) em vez de :has(), que o
       Safari antigo não entende. */
    .cx-dest__bg--mob { display:block; }
    .cx-dest--temmob > .cx-dest__bg:not(.cx-dest__bg--mob) { display:none; }
    .cx-dest__bg { object-position:center top; }
    /* Degradê da base bem mais forte: no celular o texto ocupa metade do bloco
       e a arte costuma ser clara/movimentada — sem isto não dá para ler. */
    .cx-dest::after {
        background:
            linear-gradient(to top,    #000 0%, rgba(0,0,0,.96) 30%, rgba(0,0,0,.80) 46%, rgba(0,0,0,.30) 68%, transparent 88%),
            linear-gradient(to bottom, rgba(0,0,0,.50) 0%, transparent 18%);
    }
    /* O botão precisa TERMINAR acima da navegação (setas + pontinhos + 1/5),
       senão os dois se sobrepõem e os pontinhos aparecem atrás do botão.
       Navegação ocupa ~30px + 14px da base = 44px; deixamos 68px de folga. */
    .cx-dest__corpo {
        padding:0 18px 68px; max-width:100%; text-align:left; margin:0;
        min-width:0;
    }
    .cx-dest__logo { margin-left:0; margin-right:0; max-height:86px; max-width:74%; }
    .cx-dest__titulo { font-size:1.7rem; }
    .cx-dest__sub { font-size:13px; }
    .cx-dest__meta { justify-content:flex-start; gap:9px; margin-bottom:9px; }
    .cx-dest__infos { font-size:13px; }
    .cx-dest__sinopse {
        font-size:13.5px; line-height:1.55; margin:0 0 16px; max-width:none;
        display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orient:vertical; overflow:hidden;
    }
    /* flex-wrap + max-width: com título longo os botões quebram para a linha
       de baixo em vez de vazar para fora do bloco. */
    .cx-dest__acoes { justify-content:flex-start; gap:9px; flex-wrap:wrap; }
    .cx-dest__cta,
    .cx-dest__cta2  { max-width:100%; overflow:hidden; text-overflow:ellipsis; }
    .cx-dest__cta   { height:42px; padding:0 18px; font-size:14px; border-radius:var(--raio-p); }
    .cx-dest__cta2  { height:42px; padding:0 15px; font-size:13.5px; }
    /* Pontinhos à esquerda, acompanhando o texto */
    /* Navegação alinhada à esquerda, acompanhando o texto */
    .cx-dest__nav   { bottom:14px; justify-content:flex-start; gap:10px; padding:0 18px; }
    .cx-dest__seta  { width:30px; height:30px; font-size:12px; }
    .cx-dest__conta { font-size:12.5px; margin-left:auto; }
}

/* Banner da home: cantos arredondados + margem em volta (como na referência) */
/* Desktop: volta ao tamanho antigo (centralizado, com largura máxima) */
.banner-principal {
    border-radius:var(--raio-g); overflow:hidden;
    margin:26px auto 10px; max-width:1360px; width:calc(100% - 56px);
}
.banner-principal .item img { border-radius:var(--raio-g); }
/* Bolinhas do banner — mesma posição e cores de antes (canto superior esquerdo).
   Trocaram de nome ao sair do Owl Carousel: .owl-dots/.owl-dot → .bn-dots/.bn-dot. */
.banner-principal .bn-dots { position:absolute; left:20px; top:14px; z-index:2; display:flex; gap:7px; padding:0; margin:0; }
.banner-principal .bn-dot {
    width:9px; height:9px; min-height:0; flex:0 0 9px; padding:0; margin:0; border:0;
    /* font-size/line-height zerados: sem isso, a regra global que dá 16px a
       todo <button> no celular estica a bolinha e ela vira uma barrinha. */
    font-size:0; line-height:0; cursor:pointer;
    background:var(--sobre-midia-2); border-radius:50%;
    transition:background .25s ease, transform .25s ease;
}
.banner-principal .bn-dot.is-ativo { background:var(--sobre-midia); transform:scale(1.2); }
.banner-principal .bn-dot:hover { background:var(--sobre-midia); }
@media (max-width:900px){ .banner-principal { margin:18px auto 10px; width:calc(100% - 40px); } }
/* Celular: um pouco menor, acompanhando a margem dos cards */
@media (max-width:640px){ .banner-principal { margin:14px auto 8px; width:calc(100% - 28px); border-radius:var(--raio-m); } }

/* ─────────────────────────── Banner / carrossel ─────────────────────────── */
.cx-banner { position:relative; border-radius:var(--raio-g); overflow:hidden; background:var(--superficie-2); }
.cx-banner img { width:100%; height:auto; display:block; }
.cx-banner__dots { position:absolute; left:18px; top:14px; display:flex; gap:7px; z-index:2; }
.cx-banner__dot { width:9px; height:9px; border-radius:50%; background:var(--sobre-midia-2); border:none; cursor:pointer; padding:0; }
.cx-banner__dot.is-active { background:var(--sobre-midia); }
.cx-banner__nav {
    position:absolute; top:50%; transform:translateY(-50%); z-index:2;
    width:42px; height:42px; border-radius:var(--raio-total);
    background:var(--overlay); color:var(--sobre-midia);
    border:none; cursor:pointer; font-size:16px;
    display:flex; align-items:center; justify-content:center;
}
.cx-banner__nav--prev { left:14px; }
.cx-banner__nav--next { right:14px; }

/* ─────────────────────────── Trilho de pôsteres ─────────────────────────── */
.cx-rail-wrap { position:relative; }
.cx-rail {
    display:flex; gap:20px; overflow-x:auto; padding:4px 2px 10px;
    scroll-snap-type:x mandatory; scroll-behavior:smooth;
    scrollbar-width:none; -ms-overflow-style:none;
}
.cx-rail::-webkit-scrollbar { display:none; }

/* ── Pista de que o trilho continua ───────────────────────────────────────
   O trilho esconde a barra de rolagem e, abaixo de 900px, também esconde as
   setas. O resultado é um carrossel sem nenhuma pista de que existe mais
   filme à direita: no celular a pessoa vê a primeira leva e conclui que
   acabou. O calendário de datas logo abaixo já resolvia isso deixando uma
   barrinha visível de propósito; o trilho ficou sem equivalente.

   A esmaecida aparece só quando há para onde rolar — as classes vêm do JS no
   rodapé. Sem JS, nada aparece e o comportamento é o de hoje, então isto é
   acréscimo, não dependência.

   pointer-events:none porque a faixa fica por cima dos cards: sem isso ela
   engoliria o toque no último pôster visível. */
.cx-rail-wrap::before,
.cx-rail-wrap::after {
    content:""; position:absolute; top:0; bottom:10px;
    /* Proporcional ao card, não fixo: 52px sobre um pôster de 130px no celular
       cobria 40% dele e o primeiro filme parecia desbotado. O clamp mantém a
       pista perceptível no desktop sem comer o card na tela pequena. */
    width:clamp(20px, 7vw, 52px);
    pointer-events:none; opacity:0; transition:opacity var(--transicao);
    z-index:3;
}
.cx-rail-wrap::before {
    left:0;
    background:linear-gradient(to right, var(--fundo) 0%, transparent 100%);
}
.cx-rail-wrap::after {
    right:0;
    background:linear-gradient(to left, var(--fundo) 0%, transparent 100%);
}
.cx-rail-wrap.tem-mais-esq::before,
.cx-rail-wrap.tem-mais-dir::after { opacity:1; }

/* Sobre o degradê do rodapé a cor chapada não casa; ali a esmaecida sai. */
.cx-degrade .cx-rail-wrap::before,
.cx-degrade .cx-rail-wrap::after { display:none; }
.cx-rail__btn {
    position:absolute; top:-46px; width:34px; height:34px;
    border-radius:var(--raio-total); border:1px solid var(--borda);
    background:var(--superficie); color:var(--texto-2);
    cursor:pointer; display:inline-flex; align-items:center; justify-content:center;
    transition:all var(--transicao);
}
.cx-rail__btn:hover { color:var(--primaria-texto); border-color:var(--primaria); }
.cx-rail__btn--prev { right:44px; }
.cx-rail__btn--next { right:0; }

/* Card de pôster — 2:3 (formato de cartaz de cinema).
   Tamanho de exibição 200×300; peça as imagens em 400×600 (2x) para telas retina. */
.cx-card { flex:0 0 auto; width:200px; scroll-snap-align:start; text-decoration:none; display:block; }
.cx-card__poster {
    position:relative; aspect-ratio:2/3; border-radius:var(--raio-m);
    overflow:hidden; background:var(--superficie-2); display:block;
    box-shadow:var(--sombra-1);
}
.cx-card__poster img { width:100%; height:100%; object-fit:cover; display:block; transition:transform .35s ease; }
.cx-card:hover .cx-card__poster img { transform:scale(1.05); }

/* Card RETANGULAR (projetos, promoções, banners de conteúdo) — 16:9.
   Exibição 340×191; envie as imagens em 680×382 (2x). */
.cx-card--wide { width:340px; }
.cx-card__img {
    position:relative; display:block; aspect-ratio:16/9; border-radius:var(--raio-m);
    overflow:hidden; background:var(--superficie-2); box-shadow:var(--sombra-1);
}
.cx-card__img img { width:100%; height:100%; object-fit:cover; display:block; transition:transform .35s ease; }
.cx-card--wide:hover .cx-card__img img { transform:scale(1.04); }
.cx-card--wide .cx-card__nome { font-size:16px; }
.cx-card__selo {
    position:absolute; left:10px; top:10px; z-index:2;
    padding:5px 11px; border-radius:var(--raio-total);
    font-size:11px; font-weight:800; text-transform:uppercase; letter-spacing:.04em;
    background:var(--destaque-botao); color:var(--destaque-botao-txt);
}
.cx-card__nome {
    margin:12px 0 0; font-family:var(--fonte-titulo); font-weight:700;
    font-size:15px; line-height:1.25; text-transform:uppercase;
    text-align:center; color:var(--texto);

    /* `break-word` só parte a palavra quando ela sozinha não cabe na linha —
       e mesmo aí, `hyphens:auto` parte na sílaba (PERNAM-BUCANA) em vez de
       num ponto qualquer. O documento é lang="pt-BR", então a separação segue
       o português. A regra global do celular usa `overflow-wrap:anywhere` em
       todo h3, e era ela que produzia "MOSTRA PERNAMBUCAN A BAIXIO". */
    overflow-wrap:break-word;
    word-break:normal;
    hyphens:auto; -webkit-hyphens:auto;

    /* No máximo 3 linhas, com reticências: título de mostra ou festival é
       longo e empurrava o card inteiro para baixo, desalinhando o trilho. */
    display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orient:vertical;
    overflow:hidden;
}
.cx-card__data { margin:6px 0 0; text-align:center; font-size:13px; font-weight:600; color:var(--texto-2); }

/* ───────── Card do trilho "em cartaz": maior + verso que gira ─────────────
   O card em cartaz precisa pesar mais na página que o "em breve", por isso
   ganha largura extra no desktop. O giro é 3D com backface-visibility, e o
   `.cx-card__giro` existe só para receber o transform sem levar junto o
   título, que fica fora e sempre legível.
   No mobile nada disso vale: sem hover não há como girar (e o dedo tocaria o
   link), então o card segue igual aos demais — as regras abaixo estão todas
   dentro do @media de desktop. */
.cx-card__giro { display:block; position:relative; }
.cx-card__verso { display:none; }

@media (min-width: 1024px) {
    /* Maior que o "em breve" (200px), sem virar banner */
    .cx-rail--destaque .cx-card { width:272px; }
    .cx-rail--destaque .cx-card__nome { font-size:17px; margin-top:14px; }

    .cx-card--flip .cx-card__giro {
        transition:transform .6s cubic-bezier(.4,0,.2,1);
        -webkit-transform-style:preserve-3d;   /* Safari mais antigo */
        transform-style:preserve-3d;
    }
    .cx-card--flip:hover .cx-card__giro,
    .cx-card--flip:focus-visible .cx-card__giro { transform:rotateY(180deg); }

    .cx-card--flip .cx-card__frente,
    .cx-card--flip .cx-card__verso {
        -webkit-backface-visibility:hidden; backface-visibility:hidden;
    }
    .cx-card--flip .cx-card__frente { display:block; }

    /* O verso ocupa exatamente a área do pôster (2:3) */
    .cx-card--flip .cx-card__verso {
        display:flex; flex-direction:column; gap:10px;
        position:absolute; left:0; top:0; width:100%; height:100%;
        /* Sem border-box o padding SOMA ao 100% e o verso fica maior que o
           pôster, vazando do card ao girar. */
        box-sizing:border-box;
        transform:rotateY(180deg);
        border-radius:var(--raio-m); overflow:hidden;
        padding:20px 18px;
        background:var(--menu-fundo, var(--superficie-2));
        color:var(--sobre-midia, #fff);
        box-shadow:var(--sombra-1);
    }
    /* Sem zoom no pôster enquanto gira — as duas animações juntas embolam */
    .cx-card--flip:hover .cx-card__poster img { transform:none; }

    .cx-card__verso-nome {
        font-family:var(--fonte-titulo); font-weight:800; font-size:16px;
        line-height:1.2; text-transform:uppercase;
    }
    .cx-card__ficha { display:flex; flex-wrap:wrap; gap:6px; }
    .cx-card__tag {
        font-size:11px; font-weight:700; padding:3px 9px;
        border-radius:var(--raio-total);
        background:rgba(255,255,255,.16); color:inherit;
    }
    /* A sinopse é o que sobra: encolhe e corta com reticências em vez de
       estourar o card. -webkit-line-clamp funciona em todos os navegadores
       atuais; onde não funcionar, o overflow hidden já segura. */
    .cx-card__sinopse {
        flex:1 1 auto; min-height:0; overflow:hidden;
        font-size:13px; line-height:1.5; opacity:.92;
        display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:7;
    }
    .cx-card__cta {
        margin-top:auto; font-size:13px; font-weight:800;
        display:inline-flex; align-items:center; gap:8px;
        color:var(--primaria-texto);
    }
}

/* Quem pediu menos animação no sistema não recebe o giro */
@media (prefers-reduced-motion: reduce) {
    .cx-card--flip .cx-card__giro { transition:none; }
    .cx-card--flip:hover .cx-card__giro,
    .cx-card--flip:focus-visible .cx-card__giro { transform:none; }
}

/* ─────────────────────── Faixa "Em breve" (título + trilho) ─────────────── */
.cx-split { display:grid; grid-template-columns:minmax(240px,340px) 1fr; gap:40px; align-items:center; }
.cx-split__txt p { color:var(--texto-2); margin:12px 0 0; font-size:15px; line-height:1.6; }

/* ═══════════════════════════ BLOG ═══════════════════════════ */
/* Barra de busca + categorias */
.cx-blog-barra { display:flex; gap:16px; align-items:center; flex-wrap:wrap; margin-bottom:30px; }
.cx-blog-busca {
    position:relative; flex:1 1 280px; min-width:0; display:flex; align-items:center;
    padding:3px; border-radius:var(--raio-total);
    /* Usa --vidro-fundo como TODA superfície de vidro do site.
       Antes eram dois valores cravados à mão: rgba(255,255,255,.26) e um
       color-mix de 42%. Três problemas de uma vez — não seguiam o painel,
       eram brancos fixos (no modo escuro viravam um véu cinza sobre conteúdo
       escuro) e 26% fica muito abaixo do piso calculado, que é o alfa mínimo
       para o texto sobreviver sobre um fundo claro qualquer. */
    background:var(--vidro-fundo);
    border:1px solid var(--vidro-borda);
    box-shadow:var(--sombra-2);
}
/* Blur só onde há suporte. Sem o @supports, um navegador sem backdrop-filter
   ficava com a superfície translúcida e NENHUM desfoque — o pior dos mundos,
   com o conteúdo da página passando nítido por trás do texto. */
@supports ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
    .cx-blog-busca {
        -webkit-backdrop-filter:var(--vidro-blur);
        backdrop-filter:var(--vidro-blur);
    }
}
.cx-blog-busca i {
    position:absolute; left:20px; color:var(--texto-2); font-size:14px; pointer-events:none;
}
.cx-blog-busca input {
    width:100%; height:48px; padding:0 18px 0 42px;
    border:1px solid rgba(var(--primaria-rgb, 0,181,200),.20); border-radius:var(--raio-total);
    /* Campo dentro do vidro: sólido de propósito. Um input translúcido sobre
       um vidro translúcido soma duas camadas de transparência, e é onde o
       texto digitado fica pior de ler. */
    background:var(--superficie);
    color:var(--texto);
    font-family:var(--fonte-texto); font-size:14.5px;
}
.cx-blog-busca input:focus {
    outline:none; border-color:var(--primaria);
    box-shadow:0 0 0 3px rgba(var(--primaria-rgb, 0,181,200),.16), 0 10px 24px rgba(var(--primaria-rgb, 0,181,200),.10);
}
.cx-blog-cats { display:flex; gap:8px; flex-wrap:wrap; }
.cx-blog-cats .cx-filter { text-decoration:none; display:inline-flex; align-items:center; gap:7px; }
.cx-blog-qtd {
    font-size:11px; font-weight:800; padding:1px 7px; border-radius:var(--raio-total);
    background:rgba(var(--primaria-rgb, 0,181,200),.16); color:var(--primaria-texto);
}
.cx-filter.is-active .cx-blog-qtd { background:rgba(255,255,255,.24); color:inherit; }

/* Grade de artigos */
.cx-blog-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(310px,1fr)); gap:26px; }
.cx-blog-card {
    display:flex; flex-direction:column;
    background:var(--superficie); border:1px solid var(--borda);
    border-radius:var(--raio-g); overflow:hidden;
    transition:transform var(--transicao), border-color var(--transicao), box-shadow var(--transicao);
}
.cx-blog-card:hover { transform:translateY(-3px); border-color:var(--primaria); box-shadow:var(--sombra-2); }
.cx-blog-card__img {
    position:relative; display:block; aspect-ratio:16/9;
    background:var(--superficie-2); overflow:hidden;
}
.cx-blog-card__img img { width:100%; height:100%; object-fit:cover; display:block; transition:transform .4s ease; }
.cx-blog-card:hover .cx-blog-card__img img { transform:scale(1.05); }
.cx-blog-card__vazio {
    display:flex; width:100%; height:100%; align-items:center; justify-content:center;
    font-size:32px; color:var(--texto-3);
}
.cx-blog-card__cat {
    position:absolute; left:12px; top:12px; z-index:2;
    padding:5px 12px; border-radius:var(--raio-total);
    background:var(--destaque-botao); color:var(--destaque-botao-txt);
    font-size:11px; font-weight:800; text-transform:uppercase; letter-spacing:.04em;
}
.cx-blog-card__corpo { padding:20px 22px 22px; display:flex; flex-direction:column; flex:1; }
.cx-blog-card__titulo {
    font-family:var(--fonte-titulo); font-size:19px; font-weight:700; line-height:1.25;
    margin:0 0 10px; text-transform:none;
}
.cx-blog-card__titulo a { color:var(--texto); text-decoration:none; }
.cx-blog-card__titulo a:hover { color:var(--primaria-texto); }
.cx-blog-card__resumo {
    color:var(--texto-2); font-size:14.5px; line-height:1.65; margin:0 0 16px;
    display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orient:vertical; overflow:hidden;
}
.cx-blog-card__pe {
    display:flex; align-items:center; justify-content:space-between; gap:12px;
    margin-top:auto; padding-top:14px; border-top:1px solid var(--borda);
    font-size:13px; color:var(--texto-3);
}
.cx-blog-card__ler { color:var(--primaria-texto); font-weight:700; display:inline-flex; align-items:center; gap:6px; }

/* Paginação */
.cx-blog-pag { display:flex; align-items:center; justify-content:center; gap:16px; margin-top:38px; flex-wrap:wrap; }
.cx-blog-pag__info { font-size:14px; font-weight:600; color:var(--texto-2); }

/* Estado vazio */
.cx-blog-vazio {
    text-align:center; padding:56px 20px; color:var(--texto-2);
    background:var(--superficie); border:1px dashed var(--borda-forte); border-radius:var(--raio-g);
}
.cx-blog-vazio i { font-size:34px; display:block; margin-bottom:14px; color:var(--texto-3); }
.cx-blog-vazio p { margin:0 0 16px; font-size:15.5px; }

/* Mais lidos */
.cx-blog-lidos {
    margin-top:44px; background:var(--superficie); border:1px solid var(--borda);
    border-radius:var(--raio-g); padding:24px 26px;
}
.cx-blog-lidos h2 {
    font-family:var(--fonte-titulo); font-size:16px; font-weight:700; text-transform:uppercase;
    letter-spacing:.06em; margin:0 0 14px; color:var(--texto);
    display:flex; align-items:center; gap:9px;
}
.cx-blog-lidos h2 i { color:var(--destaque-texto); }
.cx-blog-lidos ol { margin:0; padding-left:20px; }
.cx-blog-lidos li { margin-bottom:9px; }
.cx-blog-lidos a { color:var(--texto-2); text-decoration:none; font-size:14.5px; }
.cx-blog-lidos a:hover { color:var(--primaria-texto); }

/* ─── Post do blog ─── */
.cx-post { max-width:780px; margin:0 auto; }
.cx-post__capa {
    border-radius:var(--raio-g); overflow:hidden; margin-bottom:28px;
    aspect-ratio:16/9; background:var(--superficie-2);
}
.cx-post__capa img { width:100%; height:100%; object-fit:cover; display:block; }
.cx-post__meta {
    display:flex; align-items:center; gap:14px; flex-wrap:wrap;
    font-size:13.5px; color:var(--texto-3); margin-bottom:22px;
}
.cx-post__meta a { color:var(--primaria-texto); text-decoration:none; font-weight:600; }
.cx-post__corpo { font-size:17px; line-height:1.8; color:var(--texto); }
.cx-post__corpo h2 { font-size:26px; margin:36px 0 14px; }
.cx-post__corpo h3 { font-size:21px; margin:28px 0 12px; }
.cx-post__corpo p  { margin:0 0 20px; }
.cx-post__corpo img { border-radius:var(--raio-m); margin:22px 0; max-width:100%; height:auto; }
.cx-post__corpo blockquote {
    margin:26px 0; padding:16px 22px; border-left:4px solid var(--primaria);
    background:var(--superficie); border-radius:0 var(--raio-m) var(--raio-m) 0;
    color:var(--texto-2); font-style:italic;
}
.cx-post__corpo ul, .cx-post__corpo ol { margin:0 0 20px; padding-left:24px; }
.cx-post__corpo li { margin-bottom:8px; }
.cx-post__corpo a { color:var(--primaria-texto); }

@media (max-width:640px){
    .cx-blog-grid { grid-template-columns:1fr; gap:20px; }
    .cx-blog-card__corpo { padding:16px 18px 18px; }
    .cx-blog-card__titulo { font-size:17px; }
    .cx-blog-barra { gap:12px; margin-bottom:24px; }
    .cx-blog-lidos { padding:20px; }
    .cx-post__corpo { font-size:16px; }
    .cx-post__corpo h2 { font-size:22px; }
    .cx-post__corpo h3 { font-size:19px; }
}

/* ─────────────────── Em breve: grupos por gênero ─────────────────────── */
.cx-eb-grupo { margin-bottom:44px; }
.cx-eb-titulo {
    display:flex; align-items:center; gap:12px;
    font-family:var(--fonte-titulo); font-size:20px; font-weight:700;
    text-transform:uppercase; letter-spacing:.02em; color:var(--texto);
    margin:0 0 18px; padding-bottom:10px; border-bottom:1px solid var(--borda);
}
.cx-eb-qtd {
    font-family:var(--fonte-texto); font-size:12px; font-weight:700;
    padding:3px 10px; border-radius:var(--raio-total);
    background:rgba(var(--primaria-rgb, 0,181,200),.14); color:var(--primaria-texto);
}
/* Grade: quantos couberem, sem esticar o último card */
.cx-eb-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(180px,1fr)); gap:22px; }
.cx-eb-grid .cx-card { width:auto; }
@media (max-width:640px){
    .cx-eb-grupo { margin-bottom:32px; }
    .cx-eb-titulo { font-size:17px; }
    .cx-eb-grid { grid-template-columns:repeat(auto-fill,minmax(140px,1fr)); gap:14px; }
}

/* ─────────────────────── Programação: datas e filtros ─────────────────── */
.cx-progbar { display:flex; gap:16px; flex-wrap:wrap; align-items:flex-start; margin-bottom:8px; }

/* Abaixo de 900px empilha: calendário na LINHA INTEIRA em cima, filtros
   embaixo encostados à direita.
   Lado a lado eles nunca quebravam sozinhos — .cx-dates tem `flex:1` com
   `min-width:0`, então encolhia indefinidamente em vez de ir para a linha de
   baixo, e sobrava espaço para uns dois dias. */
@media (max-width:900px){
    .cx-progbar { flex-direction:column; gap:10px; }
    .cx-dates   { width:100%; flex:1 1 auto; }
    .cx-filters { align-self:flex-end; width:auto; }
}

/* Calendário: UMA linha só. Cabem 9 dias; havendo mais, rola na horizontal.
   nowrap + overflow-x é o que impede a quebra em duas linhas. */
.cx-dates {
    display:flex; gap:10px; flex-wrap:nowrap; flex:1; min-width:0;
    background:var(--superficie); border:1px solid var(--borda);
    border-radius:var(--raio-g); padding:14px;
    overflow-x:auto; scroll-behavior:smooth; scroll-snap-type:x proximity;
    -webkit-overflow-scrolling:touch; overscroll-behavior-x:contain;
    scrollbar-width:thin;
}
.cx-dates::-webkit-scrollbar { height:5px; }
.cx-dates::-webkit-scrollbar-thumb { background:var(--borda-forte); border-radius:3px; }
.cx-date {
    flex:0 0 auto; min-width:88px; padding:10px 12px; border-radius:var(--raio-m);
    background:var(--superficie-2); border:1px solid transparent;
    text-align:center; text-decoration:none; color:var(--texto);
    transition:all var(--transicao); cursor:pointer; scroll-snap-align:start;
}
.cx-date:hover { border-color:var(--primaria); }
.cx-date__m { display:block; font-size:11px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; color:var(--texto-2); }
.cx-date__d { display:block; font-family:var(--fonte-titulo); font-size:26px; font-weight:700; line-height:1.1; }
.cx-date__w { display:block; font-size:10px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:var(--texto-2); }
.cx-date.is-active { background:var(--destaque-botao); border-color:var(--destaque-botao); }
.cx-date.is-active .cx-date__m,
.cx-date.is-active .cx-date__d,
.cx-date.is-active .cx-date__w { color:var(--destaque-txt); }

.cx-filters {
    display:grid; grid-template-columns:repeat(2,minmax(72px,1fr)); gap:10px;
    background:var(--superficie); border:1px solid var(--borda);
    border-radius:var(--raio-g); padding:14px; flex-shrink:0;
}
.cx-filter {
    padding:9px 16px; border-radius:var(--raio-m);
    background:var(--superficie-2); border:1px solid transparent;
    font-size:13px; font-weight:700; color:var(--texto); text-align:center;
    cursor:pointer; transition:all var(--transicao); font-family:var(--fonte-texto);
}
.cx-filter:hover { border-color:var(--primaria); }
.cx-filter.is-active { background:var(--primaria); color:var(--primaria-txt); border-color:var(--primaria); }

/* ─────────────── Alvos de toque ───────────────────────────────────────────
   Em tela de toque não existe a precisão do ponteiro: o mínimo confortável é
   44px. `hover: none` identifica o APARELHO (celular/tablet) em vez de chutar
   pela largura — um notebook com janela estreita continua com os controles
   compactos, e um tablet largo ganha os alvos grandes.
   Medido antes: filtros com 42px e as setas do trilho com 34×34. */
@media (hover: none) {
    /* A rede de segurança do fim do arquivo também eleva estes alvos, mas ela é
       por LARGURA (≤640px) e por isso não pega tablet: num iPad de 768px, que é
       toque puro, os filtros voltavam a ~36px. Repetir aqui cobre o aparelho
       independentemente do tamanho da janela. */
    a.cx-btn, button.cx-btn, .cx-filter, .cx-date,
    .cx-icon-btn, .cx-burger, .cx-login,
    /* O alternador de tema faltava nas duas listas e media 28x32 — era o
       único alvo abaixo de 44px que sobrava no site inteiro. Ele não usa
       .cx-icon-btn porque é desenhado sem moldura. */
    .cine-tema-btn { min-height:44px; min-width:44px; }
    .cx-filter { display:flex; align-items:center; justify-content:center; }

    /* As setas do trilho não estão naquela lista e eram 34×34 */
    .cx-rail__btn {
        width:44px; height:44px;
        top:-56px;              /* mantém os mesmos 12px de folga acima do trilho */
    }
    .cx-rail__btn--prev { right:52px; }   /* 44 do botão + 8 de respiro */
}

/* ─────────────────────── Programação: linha do filme ─────────────────── */
/* Card do filme: pôster à esquerda, informações à direita e os HORÁRIOS
   ocupando a largura toda logo abaixo (igual à referência). */
.cx-film {
    display:grid; grid-template-columns:220px 1fr;
    gap:26px 34px; align-items:start;
    padding:30px 0; border-bottom:1px solid var(--borda);
}
/* Título e horários ocupam a largura toda do card */
.cx-film > .cx-film__nome,
.cx-film > .cx-times { grid-column:1 / -1; }
.cx-film > .cx-film__nome { margin-bottom:2px; }
.cx-film:last-child { border-bottom:none; }
.cx-film__poster { border-radius:var(--raio-m); overflow:hidden; aspect-ratio:2/3; background:var(--superficie-2); display:block; }
.cx-film__poster img { width:100%; height:100%; object-fit:cover; display:block; }
/* Dados do filme ao lado do pôster */
.cx-film__body { display:block; min-width:0; }
@media (min-width:1025px) {
    .cx-film {
        grid-template-columns:220px minmax(220px,300px) minmax(360px,1fr);
        gap:22px 30px;
    }
    .cx-film > .cx-film__poster { grid-column:1; grid-row:1 / 3; }
    .cx-film > .cx-film__nome { grid-column:2 / 4; grid-row:1; margin:0; align-self:end; }
    .cx-film > .cx-film__body { grid-column:2; grid-row:2; }
    .cx-film > .cx-times { grid-column:3; grid-row:2; align-self:start; }
}
.cx-film__nome {
    font-family:var(--fonte-titulo); font-weight:700; text-transform:uppercase;
    font-size:clamp(1.3rem,1rem + 1vw,1.75rem); line-height:1.1; margin:0 0 10px; color:var(--texto);
}
.cx-film__genero { font-weight:700; color:var(--texto-2); margin:0 0 14px; font-size:15px; }
.cx-film__meta { display:flex; gap:10px; align-items:center; flex-wrap:wrap; margin-bottom:18px; }
.cx-dur {
    padding:5px 12px; border-radius:var(--raio-p); border:1px solid var(--borda-forte);
    font-size:13px; font-weight:700; color:var(--texto);
}

/* Blocos de horário — quantas couberem, nunca mais estreitos que 210px.
 *
 * Antes o número de colunas era fixo e escolhido por media query: 2 por padrão
 * e 3 acima de 1200px de JANELA. O problema é que a janela não diz nada sobre
 * o espaço que estes cards têm: a partir de 1025px o .cx-times sai da largura
 * cheia e vai para a COLUNA 3 do .cx-film (veja `grid-column:3` mais acima),
 * uma faixa que pode ter 360px. Numa janela de 1200px+ a regra mandava abrir
 * 3 colunas dentro dessa faixa — cards de ~110px, com a sala quebrando em duas
 * linhas e as tags cortadas pelo overflow:hidden do card.
 *
 * auto-fill + minmax mede o container real, então serve os dois contextos com
 * uma regra só: 1 coluna na faixa estreita, 4 ou 5 na largura cheia, e nunca
 * abaixo do piso onde o card ainda comporta "SESSÃO ENCERRADA" em uma linha.
 * É também o que dispensa as media queries de celular que existiam para este
 * seletor — elas voltavam a fixar a contagem e reintroduziam o mesmo defeito. */
.cx-times {
    display:grid;
    grid-template-columns:repeat(auto-fill,minmax(210px,1fr));
    gap:14px;
}
.cx-time {
    display:flex; border-radius:var(--raio-m); overflow:hidden;
    background:var(--superficie-2); border:1px solid var(--borda);
    text-decoration:none; transition:transform var(--transicao), border-color var(--transicao);
}
/* O salto de hover só onde HÁ para onde ir. A sessão de bilheteria é uma <div>
   sem pointer-events:none, então ela levantava ao passar o mouse como se fosse
   clicável — e não é. Prender o efeito ao estado de venda desfaz a promessa. */
.cx-time--venda:hover { transform:translateY(-2px); border-color:var(--primaria); }

/* Coluna: hora em cima, tags no meio, selo colado embaixo. O `margin-top:auto`
   do selo é o que alinha os selos de cards vizinhos na mesma altura, em vez de
   cada um flutuar logo abaixo das suas tags. */
.cx-time__main {
    flex:1; min-width:0; padding:12px 14px;
    display:flex; flex-direction:column; gap:8px;
}

/* A HORA é o dado que a pessoa procura: ganha tamanho e peso próprios.
   Antes hora e sala dividiam a mesma linha, no mesmo corpo, separadas por um
   "|" literal — que além de competir com o horário, o leitor de tela anuncia
   como "barra vertical". */
.cx-time__hora {
    font-weight:700; font-size:19px; line-height:1; color:var(--texto);
    font-variant-numeric:tabular-nums;   /* 11:00 e 14:30 alinham entre cards */
}
.cx-time__sala {
    display:block; margin-top:-4px;
    font-size:12px; font-weight:600; color:var(--texto-2);
}
.cx-time__tags { display:flex; gap:6px; flex-wrap:wrap; }

/* Botão de tamanho fixo, centralizado — não uma lâmina de altura total.
   Como faixa cheia, ele esticava junto com o card: uma sessão com selo ("Venda
   na bilheteria") empurrava a altura e o vermelho crescia junto, virando o
   elemento mais pesado do card. O horário é que deve pesar mais. */
.cx-time__cta {
    flex-shrink:0; align-self:center;
    width:38px; height:38px; margin-right:12px;
    display:flex; align-items:center; justify-content:center;
    border-radius:12px;
    background:var(--borda); color:var(--texto-2); font-size:15px;
}
.cx-time--venda .cx-time__cta { background:var(--destaque); color:var(--destaque-txt); }

/* Sessão já iniciada: cinza, sem interação, horário riscado.
   A opacidade era .55 e derrubava "SESSÃO ENCERRADA" para 2.56:1 no tema claro
   — ilegível. O cinza do grayscale e o risco no horário já dizem "essa passou";
   não é preciso apagar o texto até o ponto de não se ler. */
.cx-time--passou {
    /* Sem grayscale no CARD INTEIRO. Ele apagava também o chip do ícone, e o
       símbolo de "encerrada" virava um vulto cinza sobre cinza — o estado
       existia e não se lia. Filtro no pai não dá para desfazer no filho, então
       a saída é aplicá-lo só onde ele comunica: nas tags coloridas, que é o que
       precisa perder força. O horário riscado, o selo e o ícone continuam
       nítidos, porque são eles que DIZEM o estado. */
    opacity:.82; cursor:default; pointer-events:none;
}
.cx-time--passou .cx-time__tags { filter:grayscale(1); opacity:.85; }
/* Chip próprio para o encerrado: contorno em vez de preenchimento, para não
   competir com o carrinho vermelho de quem ainda está à venda. */
.cx-time--passou .cx-time__cta {
    background:transparent;
    border:1.5px solid var(--borda-forte);
    color:var(--texto-2);
}
.cx-time--passou .cx-time__hora { text-decoration:line-through; }
/* Compensa a opacidade do card: com a cor secundária, sala e selo caíam para
   4.24:1. Subir a opacidade do card inteiro devolveria contraste mas também
   acenderia pôster, tags e ícone — o esmaecimento é justamente o que diz "essa
   já passou". Então escurece-se só o texto, e o card continua apagado. */
.cx-time--passou .cx-time__sala,
.cx-time--passou .cx-time__selo { color:var(--texto); }

/* Esgotado (vem da API). Ganha um traço vermelho apagado na borda e no ícone
   para não ficar igual ao "encerrado": os dois eram o mesmo cinza, e só o texto
   do selo dizia qual era qual. */
/* Sem opacidade no card inteiro. A borda vermelha, o ícone e o selo já dizem
   "esgotado"; o véu de .9 só somava um fator que comprimia o contraste de todo
   texto por baixo dele — e o sistema de tokens não tem como prever um véu
   aplicado depois, no componente. */
.cx-time--esgotado { cursor:not-allowed; pointer-events:none; }
.cx-time--esgotado { border-color:rgba(var(--destaque-rgb, 232,48,26),.35); }
.cx-time--esgotado .cx-time__cta { background:rgba(var(--destaque-rgb, 232,48,26),.14); color:var(--destaque-texto); }

/* --texto-2, não --texto-3: no tema claro os dois são a mesma cor, mas no
   escuro o -3 é mais apagado, e este selo carrega o motivo de a sessão não
   estar à venda. Informação que explica um bloqueio precisa ser lida. */
.cx-time__selo {
    display:block; margin-top:auto; font-size:10.5px; font-weight:800;
    letter-spacing:.06em; text-transform:uppercase; color:var(--texto-2);
}

/* Chips 2D / 3D / DUB / LEG */
.cx-tag {
    display:inline-flex; align-items:center; padding:3px 8px; border-radius:4px;
    font-size:10.5px; font-weight:800; letter-spacing:.04em; text-transform:uppercase;
    background:var(--superficie); color:var(--texto-2); border:1px solid var(--borda);
}
.cx-tag--fmt   { background:var(--primaria); color:var(--primaria-txt); border-color:transparent; }
.cx-tag--audio { background:var(--destaque-botao);  color:var(--destaque-botao-txt);  border-color:transparent; }

/* Atalhos no fim da programação (Valores, Meia Entrada, Preços) */
.cx-prog-atalhos {
    display:flex; gap:12px; flex-wrap:wrap; justify-content:center;
    margin:28px auto 0; max-width:720px;
}
.cx-prog-atalhos .cx-btn { flex:1 1 220px; }
@media (max-width:640px){
    .cx-prog-atalhos { gap:10px; margin-top:22px; }
    .cx-prog-atalhos .cx-btn { flex:1 1 100%; }
}

/* Aviso de rodapé da programação */
.cx-note {
    display:flex; align-items:center; justify-content:center; gap:10px;
    margin:34px auto 0; max-width:520px; padding:12px 20px;
    border-radius:var(--raio-total); background:rgba(var(--primaria-rgb, 0,181,200),.12);
    border:1px solid rgba(var(--primaria-rgb, 0,181,200),.28);
    color:var(--texto); font-size:14px; font-weight:600;
}
.cx-note i { color:var(--primaria-texto); }

/* ─────────────────────────── Dúvidas (acordeão) ─────────────────────── */
.cx-faq__item {
    background:var(--superficie); border:1px solid var(--borda);
    border-radius:var(--raio-m); margin-bottom:12px; overflow:hidden;
}
.cx-faq__q {
    display:flex; align-items:center; justify-content:space-between; gap:16px;
    padding:18px 22px; cursor:pointer; list-style:none;
    font-family:var(--fonte-titulo); font-size:17px; font-weight:700;
    color:var(--texto); transition:color var(--transicao);
}
.cx-faq__q::-webkit-details-marker { display:none; }
.cx-faq__q:hover { color:var(--destaque-texto); }
.cx-faq__q i { font-size:13px; color:var(--texto-2); transition:transform var(--transicao); flex-shrink:0; }
.cx-faq__item[open] .cx-faq__q { color:var(--destaque-texto); }
.cx-faq__item[open] .cx-faq__q i { transform:rotate(180deg); color:var(--destaque-texto); }
.cx-faq__a {
    padding:0 22px 20px; color:var(--texto-2);
    font-size:15px; line-height:1.75; border-top:1px solid var(--borda); padding-top:16px;
}

/* ─────────────────────────── Faixa do app ─────────────────────────── */
.cx-appbar { background:var(--superficie); border-top:1px solid var(--borda); border-bottom:1px solid var(--borda); padding:16px 0; }
.cx-appbar__inner { display:flex; align-items:center; justify-content:center; gap:26px; flex-wrap:wrap; }
.cx-appbar__txt .cx-kicker { margin-bottom:2px; }
.cx-appbar__txt strong {
    font-family:var(--fonte-titulo); font-size:22px; font-weight:700;
    text-transform:uppercase; color:var(--destaque-texto);
}
/* Selos das lojas: exibidos a 52px de altura (proporção ~3.4:1 → 177×52).
   Envie os PNGs em 354×104 (2x) para ficarem nítidos. */
.cx-appbar__lojas { display:flex; gap:14px; flex-wrap:wrap; align-items:center; }
.cx-appbar__lojas img { height:52px; width:auto; display:block; }

/* ─────────────────────────── Rodapé ─────────────────────────── */
/* Degradê que SOBE do fim da página: forte embaixo, escurecendo para cima
   até sumir no fundo. Fica atrás do conteúdo, sem atrapalhar a leitura. */
.cx-footer {
    position:relative; isolation:isolate;
    background:var(--rodape-fundo); color:var(--rodape-texto); margin-top:36px;
}
.cx-footer::before {
    content:""; position:absolute; top:0; right:0; bottom:0; left:0; z-index:-1; pointer-events:none;
    /* Subida mais discreta. Em .80 na base o degradê deixava de ser degradê e
       virava uma faixa vermelha chapada atrás do copyright — que ali media
       3.79:1, abaixo do mínimo. O vermelho é "chamada de ação e urgência" no
       brandbook; uma tarja dele no pé de toda página não é nem uma coisa nem
       outra, e ainda competia com o botão de compra.

       Em .45 o gesto continua (calor subindo do rodapé, Navy + Vermelho da
       identidade) e o texto volta a ter folga. */
    background:linear-gradient(
        to top,
        rgba(var(--rodape-degrade-rgb, 232,48,26), .45) 0%,
        rgba(var(--rodape-degrade-rgb, 232,48,26), .30) 28%,
        rgba(var(--rodape-degrade-rgb, 232,48,26), .16) 55%,
        rgba(var(--rodape-degrade-rgb, 232,48,26), .06) 78%,
        transparent 100%
    );
}
/* A mesma subida começa já na última seção antes do rodapé, como na referência:
   sobe por 80% da altura da seção, cada vez mais forte perto da base. */
.cx-degrade { position:relative; isolation:isolate; }
.cx-degrade::before {
    content:""; position:absolute; left:0; right:0; bottom:0; height:80%;
    z-index:-1; pointer-events:none;
    background:linear-gradient(
        to top,
        rgba(var(--rodape-degrade-rgb, 232,48,26), .55) 0%,
        rgba(var(--rodape-degrade-rgb, 232,48,26), .34) 30%,
        rgba(var(--rodape-degrade-rgb, 232,48,26), .16) 60%,
        transparent 100%
    );
}
.cx-footer__grid {
    display:grid; grid-template-columns:minmax(260px,1.4fr) repeat(3,minmax(140px,1fr));
    gap:32px; padding:38px 0 26px;
}
/* Logo do rodapé: 52px de altura. Envie em 2x (ex.: 400×104) para retina. */
.cx-footer__logo { height:52px; width:auto; max-width:230px; object-fit:contain; margin-bottom:18px; display:block; }
.cx-footer__end { font-size:14px; line-height:1.7; opacity:.82; margin:0 0 16px; }
.cx-footer__social { display:flex; gap:14px; }
.cx-footer__social a { color:var(--rodape-texto); opacity:.8; font-size:19px; text-decoration:none; transition:opacity var(--transicao), color var(--transicao); }
.cx-footer__social a:hover { opacity:1; color:var(--rodape-link); }
.cx-footer__col h4 {
    font-family:var(--fonte-titulo); font-size:13px; font-weight:700;
    letter-spacing:.12em; text-transform:uppercase; margin:0 0 16px; color:var(--rodape-texto);
}
.cx-footer__col ul { list-style:none; padding:0; margin:0; }
.cx-footer__col li { margin-bottom:11px; }
.cx-footer__col a { color:var(--rodape-texto); opacity:.78; text-decoration:none; font-size:14px; transition:opacity var(--transicao), color var(--transicao); }
.cx-footer__col a:hover { opacity:1; color:var(--rodape-link); }
.cx-footer__bottom {
    border-top:1px solid rgba(128,128,128,.25); padding:18px 0 22px;
    text-align:center; font-size:13px; opacity:.72; line-height:1.7;
}

/* ─────────────────────────── Herói sobre imagem ─────────────────────── */
.cx-hero { position:relative; min-height:460px; display:flex; align-items:center; background-size:cover; background-position:center; }
.cx-hero::after { content:""; position:absolute; top:0; right:0; bottom:0; left:0; background:linear-gradient(90deg, var(--overlay) 0%, var(--overlay) 45%, transparent 100%); }
.cx-hero__inner { position:relative; z-index:1; }
/* Sobre imagem o texto é SEMPRE claro — nos dois modos */
.cx-hero__inner, .cx-hero__inner h1, .cx-hero__inner p { color:var(--sobre-midia); }
.cx-hero__inner p { color:var(--sobre-midia-2); }

/* ─────────────────────────── Responsivo ─────────────────────────── */
@media (max-width:1100px) {
    .cx-nav { gap:0; }
    .cx-nav__link { padding:9px 10px; font-size:14px; }
    .cx-select { min-width:150px; }
    /* Área da logo menor aqui, senão sobra pouco espaço para a navegação */
    .cx-brand { min-width:200px; padding:0 8px; }
}

/* O cabeçalho NÃO precisa mais de regra própria para o celular: abaixo de
   900px o tema.php já troca o valor de --vidro-alfa-menu, e as regras do topo
   deste arquivo seguem junto. Repetir aqui com --vidro-alfa-mob era o que
   fazia o menu ficar com uma opacidade no desktop e outra, desencontrada, no
   celular quando só um dos dois controles era mexido. */

@media (max-width:960px) {
    /* Ordem no celular: [☰]  ·  LOGO no centro  ·  [Clube]
       O seletor de unidade e o Login não aparecem: é um cinema só e a compra
       acontece na Venda Bem. */
    /* Celular: LOGO à esquerda · ☰ na ponta direita.
       O `order` funciona porque o botão é filho direto do cabeçalho. */
    .cx-burger {
        display:inline-flex; align-items:center; justify-content:center;
        order:3; margin-left:auto; flex-shrink:0;
    }
    /* Continua flutuante no celular, com a mesma margem da vitrine */
    .cx-header { width:auto; }

    /* ── TRAVA DA PÁGINA COM O MENU ABERTO ──────────────────────────────────
       `overflow:hidden` é o único jeito que trava de verdade (cancelar
       touchmove/wheel deixava passar em vários casos). O efeito colateral
       conhecido é matar o `position:sticky` do cabeçalho, que voltava para o
       topo do documento levando o painel junto.
       A solução é tirar o cabeçalho do sticky e FIXÁ-LO na mesma posição em
       que ele já estava: top/left/right idênticos aos valores da regra acima.
       Como o sticky prende a faixa exatamente em top:6px, o resultado visual é
       o mesmo — a faixa não se move um pixel ao abrir o menu, e o painel, que
       é filho absoluto dela, acompanha. */
    html.cx-menu-aberto,
    html.cx-menu-aberto body { overflow:hidden; }

    html.cx-menu-aberto .cx-header {
        position:fixed;
        top:var(--faixa-mt); left:var(--faixa-mx); right:var(--faixa-mx); margin:0;
    }
    /* `position:fixed` tira o cabeçalho do FLUXO: os pixels que ele ocupava
       somem e tudo abaixo sobe — a vitrine, que já sobe por margem negativa,
       ia parar acima do topo da tela ao abrir o menu.
       Este padding devolve exatamente o espaço que ele deixou: altura da faixa
       + a margem de cima. Com a página travada, ninguém vê o padding; só o
       layout para de pular. */
    html.cx-menu-aberto body {
        padding-top:calc(var(--cx-header-h, 62px) + var(--faixa-mt));
    }
    .cx-header__inner {
        display:flex; flex-wrap:wrap; align-items:center;
        gap:8px; min-height:58px; padding:8px 12px;
    }
    /* No celular a área fixa da logo não cabe: volta ao tamanho natural */
    .cx-brand   { order:1; justify-content:flex-start; min-width:0; padding:0; }
    .cx-brand img { max-width:100%; }
    .cx-actions { order:2; margin-left:0; }
    .cx-actions .cx-select,
    .cx-actions .cx-login { display:none; }
    /* O menu ocupa a linha inteira, abaixo da faixa do logo.
       Ele rola por dentro (overscroll-behavior:contain impede que o "arrasto"
       vaze e acabe rolando a página atrás dele). */
    .cx-nav {
        /* Painel FLUTUANTE, não item do grid.
           Antes era `grid-column:1/-1; order:4`, ou seja, ele fazia parte do
           fluxo do cabeçalho: ao abrir, a faixa crescia e empurrava a página
           inteira para baixo. Em absoluto ele passa por CIMA do conteúdo e
           nada atrás se mexe. O ancoramento funciona porque .cx-header é
           sticky, e sticky já cria bloco de contenção para filho absoluto. */
        /* Acompanha a largura da faixa do cabeçalho, de ponta a ponta. */
        /* Colada ao cabeçalho (top:100%, sem folga) e com a MESMA borda e o
           MESMO vidro dele: as duas peças leem como uma faixa só que cresceu,
           não como um cartão separado pousado por baixo. O canto de cima fica
           reto e só o de baixo arredonda, continuando o desenho da faixa. */
        position:absolute; top:100%; left:0; right:0;
        width:auto; margin:0; display:none; z-index:40;
        flex-direction:column; align-items:stretch; gap:2px;
        padding:10px 12px 12px;
        border:1px solid var(--menu-borda); border-top:0;
        border-radius:0 0 var(--faixa-raio) var(--faixa-raio);
        background:rgba(var(--menu-fundo-rgb, 10,15,92), var(--vidro-alfa-menu, .45));
        box-shadow:var(--sombra-2);
        /* No Safari do iPhone, 100vh é a altura COM a barra de endereço
           recolhida — maior que a área realmente visível. O menu ficava mais
           alto que a tela e os últimos itens não apareciam. `dvh` mede a altura
           real; a linha com `vh` fica antes como reserva para navegador antigo. */
        max-height:calc(100vh - 140px);
        max-height:calc(100dvh - 140px);
        overflow-y:auto; -webkit-overflow-scrolling:touch;
        overscroll-behavior:contain;
    }
    @supports ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
        .cx-nav {
            /* EXATAMENTE o alfa da faixa, sem acréscimo. Havia um +.08 aqui
               para a gaveta "fechar mais", e com o alfa alto de antes isso a
               deixava praticamente sólida — o desfoque existia e não aparecia.
               Igualando os dois, a gaveta é a mesma superfície de vidro que o
               cabeçalho, só mais alta. */
            background:rgba(var(--menu-fundo-rgb, 10,15,92), var(--vidro-alfa-menu, .45));
            -webkit-backdrop-filter:var(--vidro-blur, blur(22px) saturate(180%));
            backdrop-filter:var(--vidro-blur, blur(22px) saturate(180%));
        }
    }
    /* Curto de propósito: o menu tem de responder ao toque, não se apresentar. */
    .cx-nav.is-open { display:flex; animation:cxNavEntra .14s cubic-bezier(.22,.61,.36,1); }

    /* ── Véu atrás da gaveta ──────────────────────────────────────────────
       Sem ele o menu é um cartão flutuando sobre o pôster: o olho continua
       lendo o herói em volta e por baixo, e os dois competem. O véu apaga a
       página e deixa uma coisa só em foco.

       Fica no BODY, não no cabeçalho. Tentei primeiro em .cx-header::after e
       ele saiu com 349×60px em vez da tela inteira: o cabeçalho tem
       backdrop-filter, e um elemento com filtro vira bloco de contenção para
       descendentes `position:fixed` — o inset:0 passa a valer contra a caixa
       dele, não contra a viewport. O body não tem filtro nenhum, então ali o
       fixed volta a significar "a tela".

       z-index 30: acima do conteúdo da página e abaixo do cabeçalho (900), que
       precisa continuar visível e clicável para fechar o menu.

       Onde :has() não existe, o menu apenas fica sem véu — nada quebra. */
    /* Enquanto a gaveta está aberta, o cabeçalho para de arredondar embaixo:
       é ali que a gaveta encosta, e o canto curvo abriria uma fresta entre as
       duas peças. */
    .cx-header:has(.cx-nav.is-open) {
        border-bottom-left-radius:0; border-bottom-right-radius:0;
    }

    body:has(.cx-nav.is-open)::before {
        content:""; position:fixed; inset:0; z-index:30;
        background:rgba(0,0,0,.55);
        -webkit-backdrop-filter:blur(3px); backdrop-filter:blur(3px);
        animation:cxVeuEntra .16s ease-out;
        pointer-events:none;
    }
    @keyframes cxVeuEntra { from { opacity:0; } to { opacity:1; } }
    /* Barra de rolagem discreta, na cor do menu */
    .cx-nav::-webkit-scrollbar { width:6px; }
    .cx-nav::-webkit-scrollbar-thumb { background:var(--menu-borda); border-radius:3px; }

    /* Alvo de toque de 48px (mínimo recomendado para o dedo), separador sutil
       entre itens e realce ao tocar — sem isso a lista vira um bloco de texto
       em que é fácil errar o item. */
    .cx-nav__link {
        width:100%; min-height:48px; padding:12px 14px;
        border-radius:var(--raio-m); font-size:15.5px;
    }
    .cx-nav__item + .cx-nav__item { border-top:1px solid var(--menu-borda); }
    .cx-nav__link:active { background:rgba(var(--primaria-rgb, 0,181,200),.16); }
    /* A página atual fica evidente na lista */
    .cx-nav__link.is-active { background:rgba(var(--primaria-rgb, 0,181,200),.12); }
    .cx-nav__mais { display:block; }
    /* Ingressos, Clube e tema no rodapé do menu aberto.
       Ingressos e Clube dividem a linha; a lua fica na ponta. */
    .cx-nav__extras {
        margin:10px 0 4px; padding:16px 0 0;
        border-left:none; border-top:1px solid var(--menu-borda);
        flex-wrap:nowrap; gap:10px; width:100%; align-items:stretch;
    }
    .cx-nav__extras .cx-clube { flex:1 1 0; min-width:0; }
    .cx-nav__extras .cine-tema-btn {
        flex:0 0 44px; display:flex; align-items:center; justify-content:center;
        border:1px solid var(--menu-borda) !important; border-radius:var(--raio-p);
    }
    .cx-nav__drop {
        position:static; opacity:1; visibility:visible; transform:none;
        box-shadow:none; border:none; background:transparent;
        padding:0 0 0 16px; display:none;
    }
    .cx-nav__item.is-open .cx-nav__drop { display:block; }
    .cx-brand img { height:var(--logo-altura-mobile,40px); }

    .cx-split { grid-template-columns:1fr; gap:22px; }
    .cx-film { grid-template-columns:150px 1fr; gap:20px; }

    /* Rodapé: bloco da marca em cima (centralizado) e as 3 colunas embaixo */
    .cx-footer__grid { grid-template-columns:repeat(3,1fr); gap:26px 18px; }
    .cx-footer__marca { grid-column:1 / -1; text-align:center; }
    .cx-footer__logo  { margin-left:auto; margin-right:auto; }
    .cx-footer__social { justify-content:center; }
}

@media (max-width:640px) {
    .cx-wrap { padding:0 16px; }
    .cx-section { padding:38px 0; }
    .cx-header__inner { padding:8px 16px; }
    .cx-actions { gap:7px; }
    /* No celular o botão de ingressos vira só o ícone, para caber com o seletor */
    .cx-btn__txt { display:none; }
    .cx-actions .cx-btn { padding:0 14px; }
    .cx-select { min-width:0; flex:1; }
    .cx-card { width:145px; }
    .cx-rail { gap:14px; }
    /* Celular (igual à referência): TÍTULO centralizado ocupando a linha,
       depois PÔSTER à esquerda + dados à direita, e os HORÁRIOS abaixo. */
    .cx-film { grid-template-columns:132px 1fr; gap:14px 16px; padding:22px 0; }
    .cx-film__nome { text-align:center; font-size:1.15rem; margin-bottom:6px; }
    .cx-film__poster { max-width:none; }
    .cx-film__genero { font-size:14px; margin-bottom:10px; }
    .cx-film__meta { gap:8px; margin-bottom:14px; }
    .cx-film__body .cx-btn { width:100%; }
    /* Calendário compacto: cabem ~5 dias e o resto entra por arraste.
       A barrinha embaixo fica visível de propósito, indicando que rola. */
    .cx-dates, .cx-filters { padding:8px; }
    .cx-dates { gap:6px; scrollbar-width:auto; border-radius:var(--raio-m); }
    .cx-dates::-webkit-scrollbar { height:5px; }
    .cx-date {
        min-width:calc((100% - 24px) / 5); padding:7px 4px;
        border-radius:var(--raio-p);
    }
    .cx-date__m { font-size:9px; letter-spacing:.02em; }
    .cx-date__d { font-size:19px; line-height:1.05; }
    .cx-date__w { font-size:8.5px; letter-spacing:.01em; }
    .cx-card--wide { width:280px; }

    /* Rodapé no celular: tudo centralizado, colunas empilhadas e legíveis */
    .cx-footer__grid { grid-template-columns:1fr; gap:30px; padding:36px 0 26px; text-align:center; }
    .cx-footer__col h4 { margin-bottom:12px; }
    .cx-footer__col li { margin-bottom:9px; }
    .cx-footer__end { max-width:340px; margin-left:auto; margin-right:auto; }
    .cx-appbar__inner { gap:16px; }
    .cx-appbar__txt { text-align:center; width:100%; }
    .cx-appbar__lojas { height:auto; justify-content:center; }
    .cx-appbar__lojas img { height:44px; }
}

@media (max-width:400px) {
    .cx-card { width:132px; }
}

/* ══════════════════ REDE DE SEGURANÇA PARA O CELULAR ══════════════════
   Fica no FIM do arquivo de propósito: media query não soma especificidade,
   então ela precisa vir depois das regras base para valer.

   Resolve no atacado o que apareceria página a página: conteúdo vazando
   para o lado, grade rígida que não cabe, imagem/vídeo maior que a tela,
   texto colado na borda e botão pequeno demais para o dedo.
   Só entra em telas pequenas — o desktop segue igual. */
@media (max-width:640px) {

    /* 1) Nada mais largo que a tela. Um único elemento vazando cria a barra
          horizontal que faz a página inteira "tremer" ao rolar. */
    img, video, iframe, embed, object, canvas, svg,
    pre, code, table, blockquote { max-width:100%; }
    img, video { height:auto; }

    /* 2) Tabela e código rolam por dentro, sem empurrar a página */
    table { display:block; overflow-x:auto; -webkit-overflow-scrolling:touch; }
    pre   { overflow-x:auto; }

    /* 3) Grade rígida de 3+ colunas não cabe: vira 1 coluna.
          (grades com minmax/auto-fill já se ajustam sozinhas) */
    [class*="grid"] { grid-template-columns:1fr; }

    /* Exceções: onde 2 colunas ainda funcionam bem no celular */
    .cx-eb-grid      { grid-template-columns:repeat(auto-fill,minmax(140px,1fr)); }
    .post-rel-grid   { grid-template-columns:1fr 1fr; }
    /* .cx-times não precisa de exceção: não casa com [class*="grid"] e o
       auto-fill dele já resolve a largura do celular sozinho. */

    /* 4) Palavra ou link comprido quebra em vez de esticar a página.
       `anywhere` parte em QUALQUER letra — ótimo para uma URL gigante, péssimo
       para título ("MOSTRA PERNAMBUCAN A BAIXIO"). Os títulos de card ficam de
       fora e usam break-word + hyphens (ver .cx-card__nome). */
    body, p, li, h1, h2, h3, h4, td, dd, dt, figcaption {
        overflow-wrap:anywhere;
    }
    .cx-card__nome, .cx-dest__titulo, .evh__titulo, .bsc-item__tit {
        overflow-wrap:break-word;
        word-break:normal;
        hyphens:auto; -webkit-hyphens:auto;
    }

    /* 5) Alvo de toque confortável — 44px é a recomendação, e era isso que este
       bloco dizia querer; o valor estava em 42 e ficava 2px curto em todos eles. */
    a.cx-btn, button.cx-btn, .cx-filter, .cx-date,
    .cx-icon-btn, .cx-burger, .cx-login,
    /* O alternador de tema faltava nas duas listas e media 28x32 — era o
       único alvo abaixo de 44px que sobrava no site inteiro. Ele não usa
       .cx-icon-btn porque é desenhado sem moldura. */
    .cine-tema-btn { min-height:44px; min-width:44px; }
    /* O texto precisa continuar centrado quando a altura mínima estica o botão */
    .cx-filter { display:flex; align-items:center; justify-content:center; }

    /* 6) Formulário sem zoom ao focar: o iOS amplia se a fonte for < 16px */
    input, select, textarea { font-size:16px; max-width:100%; }

    /* 7) Respiro padrão nas laterais */
    .cx-wrap    { padding:0 14px; }
    .cx-section { padding:32px 0; }
}

/* Telas bem estreitas (iPhone SE e similares) */
@media (max-width:380px) {
    .post-rel-grid { grid-template-columns:1fr; }
    .cx-wrap       { padding:0 12px; }
    .cx-eb-grid    { grid-template-columns:repeat(auto-fill,minmax(120px,1fr)); }
}

/* ═════════════ COMPATIBILIDADE: gap em flexbox ═════════════
   Safari abaixo de 14.1 ignora `gap` quando o contêiner é flex — os itens
   ficam colados uns nos outros. Este bloco só entra nesse caso e devolve o
   espaçamento por margem nos pontos onde a falta dele é visível.
   Navegador atual nunca vê estas regras. */
@supports not (row-gap: 1px) {
    .cx-nav > * + *,
    .cx-actions > * + *,
    .cx-dest__acoes > * + *,
    .cx-dest__meta > * + *,
    .cx-dest__nav > * + *,
    .cx-film__meta > * + *,
    .cx-time__tags > * + *,
    .cx-blog-cats > * + *,
    .cx-footer__social > * + *,
    .cx-appbar__lojas > * + * { margin-left:10px; }

    .cx-rail > * + *,
    .cx-dates > * + * { margin-left:14px; }

    .cx-head > * + *,
    .cx-dest__corpo > * + * { margin-top:8px; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   VIDRO E OURO
   Adicionado a partir da referência do site atual (cinealameda.com.br):
   --dourado #E8B04B e a faixa de menu com blur(22px) saturate(180%).
   Os tokens vêm de includes/tema.php, então mudar lá reflete em tudo.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── Cards translúcidos ─────────────────────────────────────────────────────
   Só onde há algo atrás para desfocar (seções sobre imagem/degradê). Card sobre
   fundo chapado com vidro vira só um cinza sujo — nesse caso o sólido é melhor. */
.cx-card__poster,
.cx-banner,
.evd-box,
.evd-info {
    background:var(--vidro-fundo);
    border:1px solid var(--vidro-borda);
}
@supports ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
    .evd-box, .evd-info {
        -webkit-backdrop-filter:var(--vidro-blur);
        backdrop-filter:var(--vidro-blur);
    }
}

/* O menu suspenso ganha o mesmo tratamento da faixa: é filho dela visualmente. */
.cx-nav__drop {
    background:var(--vidro-fundo);
    border-color:var(--vidro-borda);
}
@supports ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
    .cx-nav__drop {
        -webkit-backdrop-filter:var(--vidro-blur);
        backdrop-filter:var(--vidro-blur);
    }
}

/* ── Ouro envelhecido ───────────────────────────────────────────────────────
   Uso pontual: selo, preço, botão secundário. Nunca em bloco grande — o
   contraste do #E8B04B com branco é baixo demais para texto corrido. */
.cx-btn--ouro {
    background:var(--ouro); color:var(--ouro-txt);
    border:1px solid transparent; font-weight:800;
}
.cx-btn--ouro:hover { filter:brightness(1.07); }

.cx-btn--ouro-vazado {
    background:var(--ouro-suave); color:var(--ouro-texto);
    border:1px solid var(--ouro-borda); font-weight:800;
}
.cx-btn--ouro-vazado:hover { background:var(--ouro); color:var(--ouro-txt); }

.cx-selo--ouro {
    display:inline-block; padding:4px 11px; border-radius:var(--raio-total);
    background:var(--ouro-suave); color:var(--ouro-texto);
    border:1px solid var(--ouro-borda);
    font-size:11.5px; font-weight:800; letter-spacing:.4px; text-transform:uppercase;
}
.texto-ouro { color:var(--ouro-texto); }

/* Preço de ingresso e a etiqueta de pré-venda passam a usar o ouro: são as
   duas informações que o visitante procura primeiro. */
.evd-ing__preco { color:var(--ouro-texto); }
/* NÃO pintar as tags de status aqui. Cor e texto de Estreia / Pré-Venda /
   Em Cartaz / Em Breve são administrados em Aparência → "Tags dos pôsteres",
   e o valor escolhido lá é aplicado direto no elemento. Uma regra de cor neste
   arquivo venceria a configuração e o painel pareceria não funcionar. */

/* ═══════════════════════════════════════════════════════════════════════════
   BUSCA — a lupa abre um painel de vidro ABAIXO do cabeçalho
   Antes o campo se esticava dentro da própria faixa, disputando espaço com o
   menu. Agora ele desce como painel de largura total, com os resultados
   dentro. Mesmo comportamento no desktop e no celular.
   ═══════════════════════════════════════════════════════════════════════════ */
/* `static` de propósito: assim o painel se ancora em .cx-header (que é
   sticky) e não neste contêiner, que é pequeno e fica no meio da barra. */
.cx-busca { position:static; display:flex; align-items:center; }

.cx-busca__lupa {
    display:inline-flex; align-items:center; justify-content:center;
    width:38px; height:38px; padding:0; flex-shrink:0;
    border-radius:var(--raio-total); border:1px solid var(--menu-borda);
    background:transparent; color:var(--menu-texto);
    font-size:15px; cursor:pointer; transition:all var(--transicao);
}
.cx-busca__lupa:hover {
    color:var(--primaria-texto); border-color:var(--primaria);
    background:rgba(var(--primaria-rgb, 0,181,200),.10);
}
.cx-busca.is-aberta .cx-busca__lupa { color:var(--primaria-texto); border-color:var(--primaria); }

/* Painel */
.cx-busca__caixa {
    position:absolute; top:calc(100% + 8px); left:0; right:0; z-index:45;
    display:none; padding:12px;
    border:1px solid var(--vidro-borda); border-radius:var(--faixa-raio);
    background:var(--vidro-fundo); box-shadow:var(--sombra-2);
}
@supports ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
    .cx-busca__caixa {
        -webkit-backdrop-filter:var(--vidro-menu-blur, blur(22px) saturate(180%));
        backdrop-filter:var(--vidro-menu-blur, blur(22px) saturate(180%));
    }
}
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
    /* Sem desfoque, um painel translúcido sobre o conteúdo fica ilegível */
    .cx-busca__caixa { background:var(--menu-fundo); }
}
.cx-busca.is-aberta .cx-busca__caixa {
    display:block;
    animation:cxBuscaEntra .16s cubic-bezier(.22,.61,.36,1);
}
@keyframes cxBuscaEntra {
    from { opacity:0; transform:translateY(-8px); }
    to   { opacity:1; transform:translateY(0); }
}
@media (prefers-reduced-motion: reduce){ .cx-busca.is-aberta .cx-busca__caixa { animation:none; } }

.cx-busca__campo {
    width:100%; height:46px; padding:0 44px 0 16px;
    border-radius:var(--raio-total); border:1px solid var(--menu-borda);
    background:rgba(var(--menu-fundo-rgb, 10,15,92), .55); color:var(--menu-texto);
    /* 16px evita o zoom automático do iOS ao focar o campo */
    font-family:inherit; font-size:16px; outline:none;
}
.cx-busca__campo::placeholder { color:var(--menu-texto-2); }
/* public-dark.css força borda, fundo e anel em TODO input:focus com
   !important — sem anular aqui, aparece uma caixa dentro do campo. */
.cx-busca__campo:focus {
    border-color:var(--primaria) !important;
    background:rgba(var(--menu-fundo-rgb, 10,15,92), .55) !important;
    background-color:rgba(var(--menu-fundo-rgb, 10,15,92), .55) !important;
    box-shadow:none !important;
    outline:none !important;
}
.cx-busca__campo::-webkit-search-cancel-button,
.cx-busca__campo::-webkit-search-decoration,
.cx-busca__campo::-webkit-search-results-button,
.cx-busca__campo::-webkit-search-results-decoration { -webkit-appearance:none; display:none; }

.cx-busca__fechar {
    position:absolute; right:24px; top:24px;
    width:30px; height:30px; padding:0; border:0; border-radius:var(--raio-total);
    background:transparent; color:var(--menu-texto-2); cursor:pointer; font-size:14px;
}
.cx-busca__fechar:hover { color:var(--menu-texto); }

/* Resultados: dentro do painel, logo abaixo do campo */
.cx-busca__lista {
    display:none; margin-top:10px; padding:0;
    /* dvh: no iOS o 100vh conta com a barra de endereço recolhida, e o painel
       rolável ficava mais alto que a área visível. O vh fica antes como reserva
       para navegador sem dvh. */
    max-height:min(420px, 52vh);
    max-height:min(420px, 52dvh); overflow-y:auto;
    background:transparent; border:0; box-shadow:none;
}
.cx-busca__lista.is-visivel { display:block; }

.cx-busca__item {
    display:flex; align-items:center; gap:12px; padding:8px;
    border-radius:var(--raio-p); text-decoration:none; color:var(--menu-texto);
}
.cx-busca__item:hover, .cx-busca__item.is-focado { background:rgba(var(--primaria-rgb, 0,181,200),.14); }
.cx-busca__item img {
    width:42px; height:60px; object-fit:cover; border-radius:4px; flex-shrink:0;
    background:var(--superficie-2);
}
.cx-busca__item-txt { min-width:0; }
.cx-busca__item-tit {
    font-size:13.5px; font-weight:700; line-height:1.3;
    display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;
}
.cx-busca__item-rot { font-size:11px; color:var(--menu-texto-2); margin-top:3px; }
.cx-busca__vazio { padding:22px 12px; font-size:13.5px; color:var(--menu-texto-2); text-align:center; }

@media (max-width:768px){
    .cx-busca__lupa { width:34px; height:34px; font-size:14px; }
    .cx-busca__caixa { padding:10px; }
    .cx-busca__campo { height:44px; }
    .cx-busca__fechar { right:22px; top:22px; }
    .cx-busca__lista { max-height:min(340px, 46vh); max-height:min(340px, 46dvh); }
}

/* Rodapé da lista do menu: leva para a página completa de resultados */
.cx-busca__todos {
    display:flex; align-items:center; justify-content:center; gap:8px;
    margin-top:6px; padding:11px 10px;
    border-top:1px solid var(--menu-borda);
    color:var(--primaria-texto); font-size:13px; font-weight:800; text-decoration:none;
}
.cx-busca__todos:hover { gap:12px; }
.cx-busca__vazio .cx-busca__todos { border-top:0; margin-top:12px; }

/* Setas dos trilhos: só no desktop.
   No celular o dedo arrasta o trilho direto (overflow-x + scroll-snap), e os
   botões ocupariam espaço competindo com o conteúdo. No desktop não existe
   esse gesto — sem eles, navegar uma lista longa vira caçada pela barra de
   rolagem, que é o que ficou ruim ao removê-los de tudo. */
@media (max-width:900px){
    .cx-rail__btn { display:none; }
}

/* Sessão bloqueada para venda online (status B da Venda Bem): ainda TEM
   ingresso, só não pela internet. Por isso não usa o cinza apagado de
   esgotado — usa o ouro, que sinaliza atenção sem parecer indisponível. */
.cx-time--bilheteria { opacity:1; cursor:default; border-color:var(--ouro-borda); }
.cx-time--bilheteria .cx-time__cta { background:var(--ouro-suave); color:var(--ouro-texto); }
/* O selo NÃO é dourado. --ouro (#E8B04B) sobre a superfície branca do tema
   claro dá 1.95:1 — o aviso de que só há venda na bilheteria era o texto menos
   legível do card. A borda dourada e o ícone já marcam o estado; o selo fica
   com a cor de texto normal, que funciona nos dois temas sem repetir aqui a
   lógica de claro/escuro (o tema vem de data-tema OU de prefers-color-scheme,
   e duplicar essa condição no CSS de componente é fonte certa de divergência). */

/* Logo por tema: as duas versões vão no HTML e só uma aparece por vez.
   ATENÇÃO à especificidade — `.cx-brand img { display:block }` (0,1,1) vence
   uma regra de classe simples (0,1,0), e era por isso que as DUAS logos
   apareciam lado a lado. Por isso todas as regras abaixo incluem `.cx-brand`.
   Sem logo clara cadastrada, a escura vale nos dois modos, como antes. */
.cx-brand .cx-brand__logo--claro { display:none; }
:root[data-tema="claro"] .cx-brand .cx-brand__logo--escuro { display:none; }
:root[data-tema="claro"] .cx-brand .cx-brand__logo--claro  { display:block; }
@media (prefers-color-scheme: light){
    :root:not([data-tema]) .cx-brand .cx-brand__logo--escuro { display:none; }
    :root:not([data-tema]) .cx-brand .cx-brand__logo--claro  { display:block; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   PÁGINAS DE CONTEÚDO — institucionais e blog
   Mesma estrutura da página de dúvidas: o <main> usa `cx-wrap cx-section`,
   que dá a largura e o ritmo vertical do site inteiro, e o TEXTO é limitado
   por dentro. Esticar o parágrafo até 1360px daria linhas longas demais para
   leitura confortável — por isso a limitação fica no conteúdo, não na página.
   ═══════════════════════════════════════════════════════════════════════════ */
.cx-conteudo { max-width:900px; }
.cx-conteudo p { line-height:1.75; margin:0 0 16px; color:var(--texto-2); }
.cx-conteudo h2 { font-size:clamp(19px,2.2vw,24px); margin:34px 0 12px; color:var(--texto); }
.cx-conteudo h3 { font-size:17px; margin:24px 0 10px; color:var(--texto); }
.cx-conteudo ul, .cx-conteudo ol { margin:0 0 16px 20px; }
.cx-conteudo li { line-height:1.7; margin-bottom:8px; color:var(--texto-2); }
.cx-conteudo a { color:var(--link); }   /* link tem cor própria: petróleo no claro, ciano no escuro */
.cx-conteudo img { max-width:100%; height:auto; border-radius:var(--raio-m); }

/* Migalhas de pão: presentes nas institucionais e no blog, ausentes em dúvidas.
   Mantidas (ajudam o visitante e o Google) porém discretas, para não competir
   com o título logo abaixo. */
.cx-bc { display:flex; gap:8px; flex-wrap:wrap; align-items:center;
         list-style:none; margin:0 0 18px; padding:0;
         font-size:13px; color:var(--texto-3, var(--texto-2)); }
.cx-bc a { color:var(--texto-2); text-decoration:none; }
.cx-bc a:hover { color:var(--primaria-texto); }
.cx-bc li + li::before { content:"/"; margin-right:8px; opacity:.5; }

/* Conteúdo das páginas de texto limitado a 900px SEM mexer na estrutura de
   cada arquivo — as cinco institucionais têm marcação interna diferente, e
   reescrever todas para inserir um contêiner seria muito risco por pouco
   ganho. O cabeçalho (.cx-head) fica de fora: título e kicker acompanham a
   largura da página, como na de dúvidas. */
.cx-pagina > *:not(.cx-head) { max-width:900px; }
.cx-pagina p  { line-height:1.75; color:var(--texto-2); }
.cx-pagina li { line-height:1.7; color:var(--texto-2); }
.cx-pagina h2 { font-size:clamp(19px,2.2vw,24px); margin:34px 0 12px; }
.cx-pagina h3 { font-size:17px; margin:24px 0 10px; }
