/*
  Folha única dos dezesseis sites.

  A identidade de cada ramo vem de três alavancas, nesta ordem de força:
    1. TOKENS   variáveis de cor/fonte/raio injetadas no <head> (tema.css)
    2. ARQUÉTIPO  classe `arq-*` no <body> — muda a ARQUITETURA: escala
       tipográfica, grade, tratamento de card, peso das réguas
    3. TEXTURA   classe `tex-*` — muda o fundo

  É por isso que a ótica e a academia não parecem o mesmo site pintado de outra
  cor: a academia usa título condensado gigante e blocos chapados; a ótica usa
  serifa editorial, régua fina e grade assimétrica. Mesma folha, arquiteturas
  diferentes.

  Nenhuma imagem externa, nenhuma fonte de ícone, nenhum framework: o site abre
  no celular do cliente final, muitas vezes em rede ruim.
*/

@property --gradient-angle {
  syntax: "<angle>";
  initial-value: 0deg;
  inherits: false;
}
@property --gradient-angle-offset {
  syntax: "<angle>";
  initial-value: 0deg;
  inherits: false;
}
@property --gradient-percent {
  syntax: "<percentage>";
  initial-value: 5%;
  inherits: false;
}
@property --gradient-shine {
  syntax: "<color>";
  initial-value: white;
  inherits: false;
}

/* ------------------------------------------------------------------ base */
*, *::before, *::after { box-sizing: border-box; }
* { margin: 0; }

html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation-duration: .001ms !important; transition-duration: .001ms !important; }
}

body {
  background: var(--fundo);
  color: var(--tinta);
  font-family: var(--fonte-texto);
  font-size: 1rem;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}

/* ⚠️ Tem de existir, e tem de vir cedo: `elemento.hidden = true` só apaga o que
   NÃO recebeu `display` de uma classe. `.produto`, `.ficha` e `.oferta` são
   `display:flex`, e regra de autor vence a folha do navegador — então o filtro
   por categoria marcava o card como escondido e ele continuava na tela, em seis
   dos dezesseis modelos. O mesmo detalhe já tinha mordido o carrinho do
   barbearia-rede; aqui ele estava calado porque o filtro "parecia" funcionar.
   `!important` é deliberado: `hidden` é uma afirmação sobre existência, e
   nenhuma regra de aparência deveria poder contradizê-la. */
[hidden] { display: none !important; }

img, svg, video { display: block; max-width: 100%; }
img { height: auto; }
a { color: inherit; text-decoration: none; }
button, input, textarea, select { font: inherit; color: inherit; }

h1, h2, h3 { font-family: var(--fonte-titulo); line-height: 1.08; font-weight: 700; }
h1 { font-size: clamp(2.3rem, 6vw, 4.2rem); letter-spacing: -.02em; }
h2 { font-size: clamp(1.6rem, 3.4vw, 2.6rem); letter-spacing: -.015em; }
h3 { font-size: 1.12rem; letter-spacing: -.01em; }

:focus-visible { outline: 3px solid var(--marca); outline-offset: 3px; border-radius: 3px; }

.pular {
  position: absolute; left: -9999px; top: 0; z-index: 99;
  background: var(--marca); color: var(--sobre-marca); padding: .7rem 1.1rem;
}
.pular:focus { left: 0; }

.fraco { color: var(--tinta-3); }
.pequeno { font-size: .88rem; }
.mono { font-variant-numeric: tabular-nums; }
.centro { text-align: center; }
.mt { margin-top: 2rem; }
.ok { color: var(--ok-forte); font-weight: 600; }   /* --ok media 4,28 no claro: abaixo de AA */
.vazio { color: var(--tinta-3); padding: 3rem 0; text-align: center; }
.rolagem { overflow-x: auto; }

/* --------------------------------------------------------------- layout */
.caixa { width: min(1200px, 100% - 2.5rem); margin-inline: auto; }
.caixa.estreita { width: min(760px, 100% - 2.5rem); }
.secao { padding: clamp(3.2rem, 7vw, 6rem) 0; }

.cabeca { margin-bottom: clamp(1.8rem, 3.5vw, 3rem); max-width: 62ch; }
.cabeca.centro { margin-inline: auto; text-align: center; }
.cabeca .linha { margin-top: .8rem; color: var(--tinta-2); font-size: 1.06rem; }

.grade-3 { display: grid; gap: 1.15rem; grid-template-columns: repeat(auto-fill, minmax(min(100%, 290px), 1fr)); }
.grade-4 { display: grid; gap: 1.15rem; grid-template-columns: repeat(auto-fill, minmax(min(100%, 235px), 1fr)); }

/* ------------------------------------------------------------ tipografia */
.chip {
  display: inline-flex; align-items: center; gap: .4rem;
  font-size: .74rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
  padding: .4rem .75rem; border-radius: var(--raio-pill);
  background: var(--fundo-3); color: var(--tinta-2); border: 1px solid var(--traco-2);
}
.chip-forte { background: var(--marca-suave); color: var(--sobre-marca-suave); border-color: transparent; }
.chip-fraco { background: transparent; border-color: var(--traco-2); font-size: .68rem; }
button.chip { cursor: pointer; }
.chip.ativo { background: var(--marca); color: var(--sobre-marca); border-color: transparent; }

.prosa p { margin-bottom: 1rem; color: var(--tinta-2); max-width: 68ch; }

/* ------------------------------------------------------------- botões */
.botao {
  display: inline-flex; align-items: center; justify-content: center; gap: .5rem;
  padding: .82rem 1.5rem; border-radius: var(--raio-p); border: 1.5px solid transparent;
  font-weight: 650; font-size: .95rem; cursor: pointer; text-align: center;
  transition: transform .16s ease, background .16s ease, border-color .16s ease;
}
.botao:hover { transform: translateY(-2px); }
.botao-cheio { background: var(--marca); color: var(--sobre-marca); }
.botao-cheio:hover { background: var(--marca-forte); color: var(--sobre-marca-forte); }
.botao-vazado { border-color: var(--traco); color: var(--tinta); }
.botao-vazado:hover { border-color: var(--marca); color: var(--marca); }
.botao-contraste { background: var(--fundo); color: var(--tinta); }
.botao-p { padding: .55rem 1rem; font-size: .86rem; }
.largo { width: 100%; }

/* ------------------------------------------------------------- shiny-cta */
.shiny-cta {
  --shiny-cta-bg: #18120e;
  --shiny-cta-bg-subtle: #241b15;
  --shiny-cta-fg: #ffffff;
  --shiny-cta-highlight: var(--marca);
  --shiny-cta-highlight-subtle: var(--realce);
  --animation: gradient-angle linear infinite;
  --duration: 3s;
  --shadow-size: 2px;
  --transition: 800ms cubic-bezier(0.25, 1, 0.5, 1);

  isolation: isolate;
  position: relative;
  overflow: hidden;
  cursor: pointer;
  outline-offset: 4px;
  font-family: inherit;
  font-weight: 700;
  border: 1px solid transparent;
  color: var(--shiny-cta-fg) !important;
  background: linear-gradient(var(--shiny-cta-bg), var(--shiny-cta-bg)) padding-box,
    conic-gradient(
      from calc(var(--gradient-angle) - var(--gradient-angle-offset)),
      transparent,
      var(--shiny-cta-highlight) var(--gradient-percent),
      var(--gradient-shine) calc(var(--gradient-percent) * 2),
      var(--shiny-cta-highlight) calc(var(--gradient-percent) * 3),
      transparent calc(var(--gradient-percent) * 4)
    ) border-box !important;
  box-shadow: inset 0 0 0 1px var(--shiny-cta-bg-subtle) !important;
  transition: var(--transition);
  transition-property: --gradient-angle-offset, --gradient-percent, --gradient-shine;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  text-decoration: none;
}

.shiny-cta::before,
.shiny-cta::after,
.shiny-cta span::before {
  content: "";
  pointer-events: none;
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  z-index: -1;
}

.shiny-cta:active {
  transform: translateY(1px);
}

.shiny-cta::before {
  --size: calc(100% - var(--shadow-size) * 3);
  --position: 2px;
  --space: calc(var(--position) * 2);
  width: var(--size);
  height: var(--size);
  background: radial-gradient(
    circle at var(--position) var(--position),
    white calc(var(--position) / 4),
    transparent 0
  ) padding-box;
  background-size: var(--space) var(--space);
  background-repeat: space;
  -webkit-mask-image: conic-gradient(
    from calc(var(--gradient-angle) + 45deg),
    black,
    transparent 10% 90%,
    black
  );
  mask-image: conic-gradient(
    from calc(var(--gradient-angle) + 45deg),
    black,
    transparent 10% 90%,
    black
  );
  border-radius: inherit;
  opacity: 0.4;
  z-index: -1;
}

.shiny-cta::after {
  --animation: shimmer linear infinite;
  width: 100%;
  aspect-ratio: 1;
  background: linear-gradient(
    -50deg,
    transparent,
    var(--shiny-cta-highlight),
    transparent
  );
  -webkit-mask-image: radial-gradient(circle at bottom, transparent 40%, black);
  mask-image: radial-gradient(circle at bottom, transparent 40%, black);
  opacity: 0.6;
}

.shiny-cta span {
  z-index: 1;
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
}

.shiny-cta span::before {
  --size: calc(100% + 1rem);
  width: var(--size);
  height: var(--size);
  box-shadow: inset 0 -1ex 2rem 4px var(--shiny-cta-highlight);
  opacity: 0;
  transition: opacity var(--transition);
  animation: calc(var(--duration) * 1.5) breathe linear infinite;
}

.shiny-cta,
.shiny-cta::before,
.shiny-cta::after {
  animation: var(--animation) var(--duration),
    var(--animation) calc(var(--duration) / 0.4) reverse paused;
  animation-composition: add;
}

.shiny-cta:hover, .shiny-cta:focus-visible {
  --gradient-percent: 20%;
  --gradient-angle-offset: 95deg;
  --gradient-shine: var(--shiny-cta-highlight-subtle);
}

.shiny-cta:hover,
.shiny-cta:hover::before,
.shiny-cta:hover::after,
.shiny-cta:focus-visible,
.shiny-cta:focus-visible::before,
.shiny-cta:focus-visible::after {
  animation-play-state: running;
}

.shiny-cta:hover span::before, .shiny-cta:focus-visible span::before {
  opacity: 1;
}

@keyframes gradient-angle {
  to { --gradient-angle: 360deg; }
}

@keyframes shimmer {
  to { transform: translate(-50%, -50%) rotate(360deg); }
}

@keyframes breathe {
  from, to { transform: translate(-50%, -50%) scale(1); }
  50% { transform: translate(-50%, -50%) scale(1.2); }
}

/* --------------------------------------------------------------- topo */
.faixa-demo {
  background: var(--realce); color: var(--sobre-realce);
  font-size: .82rem; padding: .5rem 1rem; text-align: center;
}
.faixa-demo strong { text-transform: uppercase; letter-spacing: .12em; margin-right: .5rem; }

.topo { position: sticky; top: 0; z-index: 40; background: color-mix(in srgb, var(--fundo) 88%, transparent);
        backdrop-filter: blur(12px); border-bottom: 1px solid var(--traco-2); }
.topo-int { display: flex; align-items: center; gap: 1.5rem; min-height: 72px; }
.marca-nome { font-family: var(--fonte-titulo); font-weight: 800; font-size: 1.15rem; line-height: 1.1; }
.marca-slogan { display: block; font-family: var(--fonte-texto); font-weight: 400;
                font-size: .72rem; color: var(--tinta-3); letter-spacing: .02em; }
.nav { display: flex; gap: 1.4rem; margin-left: auto; font-size: .95rem; }
.nav a { color: var(--tinta-2); }
.nav a:hover { color: var(--marca); }
.idiomas { display: inline-flex; align-items: center; gap: 2px; border: 1px solid color-mix(in srgb, var(--tinta) 15%, transparent); border-radius: var(--raio-pill); background: color-mix(in srgb, var(--fundo) 70%, transparent); backdrop-filter: blur(8px); padding: 2px; line-height: 1; }
.idiomas a { padding: .26rem .52rem; font-size: .68rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: color-mix(in srgb, var(--tinta) 55%, transparent); border-radius: var(--raio-pill); transition: all .2s ease; text-decoration: none; }
.idiomas a:hover { color: var(--tinta); }
.idiomas a.ativo { background: var(--tinta); color: var(--fundo); box-shadow: 0 1px 2px rgba(0,0,0,.08); }
.menu-botao { display: none; background: none; border: 1px solid var(--traco-2);
              border-radius: var(--raio-p); padding: .45rem; cursor: pointer; color: var(--tinta-2); }
/* Peças de barra que só existem no arquétipo `painel` (ver moldura.html). */
.marca-selo, .topo-busca { display: none; }

/* --------------------------------------------------------------- hero */
.hero { padding: clamp(3.5rem, 9vw, 7.5rem) 0; position: relative; overflow: hidden; }

/* Chuva de letras (ver chuva.js). O canvas fica ATRÁS do conteúdo e o conteúdo
   sobe para z-index 1 — sem isso o texto ficaria por baixo da animação. */
.chuva { position: absolute; inset: 0; z-index: 0; pointer-events: none; }
.hero-efeito .hero-int { position: relative; z-index: 1; }
/* A capa com chuva escurece um pouco no miolo: letra caindo atrás de texto
   grande atrapalha a leitura, e o título é o que precisa ser lido primeiro. */
.hero-efeito::after {
  content: ''; position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background: radial-gradient(80% 70% at 30% 50%,
    color-mix(in srgb, var(--fundo) 78%, transparent), transparent 70%);
}
@media (max-width: 700px) {
  /* No celular a capa é quase toda texto; a chuva vira ruído atrás dele. */
  .chuva { opacity: .45; }
}
/* Capa sem arte lateral não precisa do mesmo respiro embaixo: sem a coluna da
   direita para ocupar a altura, o vão abaixo dos botões somava com o topo da
   seção seguinte e virava um buraco de ~220px. */
.hero-tipografico, .hero-centro { padding-bottom: clamp(2rem, 4vw, 3.5rem); }
.hero-int { display: grid; gap: clamp(2rem, 5vw, 4rem); align-items: center; }
.hero-linha { margin-top: 1.15rem; font-size: clamp(1.02rem, 1.7vw, 1.22rem); color: var(--tinta-2); max-width: 54ch; }
.hero-acoes { display: flex; flex-wrap: wrap; gap: .8rem; margin-top: 2rem; }
.hero .chip { margin-bottom: 1.4rem; }

.numeros { display: flex; flex-wrap: wrap; gap: 2.4rem; margin-top: 3rem;
           padding-top: 1.8rem; border-top: 1px solid var(--traco-2); }
.numeros dt { font-size: .74rem; text-transform: uppercase; letter-spacing: .1em; color: var(--tinta-3); }
.numeros dd { font-family: var(--fonte-titulo); font-size: 1.9rem; font-weight: 800; margin-top: .2rem; }

/* Toda variante com arte ao lado precisa ENTRAR nesta lista e na consulta de
   mídia abaixo. A tabloide tinha a arte e não tinha a coluna: caía em 1fr e a
   peça, de proporção 1:1, ocupava a largura inteira embaixo do título. */
.hero-editorial .hero-int, .hero-ficha .hero-int, .hero-capa .hero-int,
.hero-tabloide .hero-int { grid-template-columns: 1fr; }
@media (min-width: 900px) {
  .hero-editorial .hero-int { grid-template-columns: 5fr 6fr; }
  .hero-ficha .hero-int { grid-template-columns: 3fr 2fr; }
  .hero-capa .hero-int { grid-template-columns: 3fr 2fr; }
  .hero-tabloide .hero-int { grid-template-columns: 7fr 4fr; }
}
/* No celular a arte decorativa sai: ela empurraria o conteúdo real para baixo
   da dobra sem acrescentar informação nenhuma. */
@media (max-width: 899px) { .hero-arte { display: none; } }
.hero-centro { text-align: center; }
.hero-centro .hero-int { justify-items: center; }
.hero-centro .hero-linha { margin-inline: auto; }
.hero-centro .hero-acoes, .hero-centro .numeros { justify-content: center; }

.hero-arte { position: relative; aspect-ratio: 4 / 3; border-radius: var(--raio);
             background: linear-gradient(140deg, var(--marca-suave), var(--fundo-3) 60%, var(--realce-suave));
             overflow: hidden; }
.hero-arte > span { position: absolute; border-radius: 50%; }
.hero-arte > span:nth-child(1) { inset: 12% auto auto 8%; width: 46%; aspect-ratio: 1;
  background: var(--marca); opacity: .85; }
.hero-arte > span:nth-child(2) { inset: auto 10% 14% auto; width: 34%; aspect-ratio: 1;
  background: var(--realce); opacity: .8; }
.hero-arte > span:nth-child(3) { inset: 46% auto auto 42%; width: 22%; aspect-ratio: 1;
  border: 2px solid var(--tinta); opacity: .35; background: none; }
.hero-arte-filme > span { display: none !important; }

/* A peça da capa muda por ARQUÉTIPO. O disco genérico servia para todos e por
   isso não servia para nenhum: repetido em cinco ramos, ele lia como enfeite de
   template, que é exatamente a impressão que este produto não pode dar. */

/* editorial (ótica, beleza) — dois aros e a ponte entre eles */
.arq-editorial .hero-arte { background: var(--fundo-2); border: 1px solid var(--traco-2);
  border-radius: 0; }
.arq-editorial .hero-arte span:nth-child(1) { inset: 18% auto auto 8%; width: 42%; aspect-ratio: 1;
  background: none; border: 2px solid var(--marca); opacity: 1; }
.arq-editorial .hero-arte span:nth-child(2) { inset: 18% 8% auto auto; width: 42%; aspect-ratio: 1;
  background: none; border: 2px solid var(--realce); opacity: 1; }
.arq-editorial .hero-arte span:nth-child(3) { inset: 39% auto auto 46%; width: 8%; height: 2px;
  background: var(--marca); border-radius: 0; opacity: 1; }

/* sereno (clínica, hotel, terapia) — arcos calmos, nada de círculo fechado */
.arq-sereno .hero-arte { background: var(--fundo-2); }
.arq-sereno .hero-arte span:nth-child(1) { inset: 20% auto 0 12%; width: 40%;
  background: var(--marca-suave); border-radius: 999px 999px 0 0; opacity: 1; }
.arq-sereno .hero-arte span:nth-child(2) { inset: 38% 14% 0 auto; width: 30%;
  background: var(--realce-suave); border-radius: 999px 999px 0 0; opacity: 1; }
.arq-sereno .hero-arte span:nth-child(3) { inset: auto 0 18% 0; width: 100%; height: 1px;
  background: var(--traco); border: none; border-radius: 0; opacity: 1; }

/* bloco (academia, escola) — retângulos empilhados, canto vivo */
.arq-bloco .hero-arte { background: var(--fundo-2); border-radius: var(--raio-p); }
.arq-bloco .hero-arte span { border-radius: 0; }
.arq-bloco .hero-arte span:nth-child(1) { inset: 10% auto auto 10%; width: 52%; height: 34%;
  background: var(--marca); opacity: 1; }
.arq-bloco .hero-arte span:nth-child(2) { inset: 38% 12% auto auto; width: 44%; height: 34%;
  background: var(--realce); opacity: 1; }
.arq-bloco .hero-arte span:nth-child(3) { inset: auto auto 12% 18%; width: 38%; height: 18%;
  background: none; border: 2px solid var(--tinta-3); opacity: .7; }

/* macio (odontologia, pet) — bolhas de tamanhos bem diferentes, sem contorno */
.arq-macio .hero-arte span:nth-child(3) { border: none; background: var(--fundo);
  opacity: .55; inset: 58% auto auto 20%; width: 16%; }

.cartao-ficha h3 { margin-bottom: .9rem; }
.cartao-ficha p { display: flex; gap: .55rem; align-items: flex-start; color: var(--tinta-2);
                  font-size: .95rem; margin-bottom: .5rem; }
.cartao-ficha .botao { margin-top: 1rem; }

/* -------------------------------------------------------------- faixa */
.faixa { border-block: 1px solid var(--traco-2); background: var(--fundo-2); }
.faixa-int { display: flex; align-items: center; gap: 1.5rem; padding: 1.1rem 0; flex-wrap: wrap; }
.faixa-rot { font-size: .72rem; text-transform: uppercase; letter-spacing: .14em; color: var(--tinta-3); }
.faixa ul { list-style: none; padding: 0; display: flex; flex-wrap: wrap; gap: 1.6rem; }
.faixa li { font-weight: 600; color: var(--tinta-2); font-size: .93rem; }

/* -------------------------------------------------------------- cartão */
.cartao {
  background: var(--fundo-2); border: 1px solid var(--traco-2);
  border-radius: var(--raio); padding: 1.4rem;
  transition: transform .2s ease, border-color .2s ease, box-shadow .2s ease;
}
a.cartao:hover { transform: translateY(-4px); border-color: var(--marca); }

.dst { display: flex; flex-direction: column; gap: .7rem; }
.dst-ic { display: inline-flex; width: 46px; height: 46px; align-items: center; justify-content: center;
          border-radius: var(--raio-p); background: var(--marca-suave); color: var(--sobre-marca-suave); }
.dst p { color: var(--tinta-2); font-size: .95rem; }

/* ----------------------------------------------------------- arte/foto */
.arte { aspect-ratio: 4 / 3; border-radius: var(--raio-p); overflow: hidden; background: var(--fundo-3); }
.arte-alta { aspect-ratio: 3 / 4; }
.arte img { width: 100%; height: 100%; object-fit: cover; }
/* Item sem foto NÃO ganha foto de banco de imagem: ganha peça geométrica da
   própria paleta. Ver o comentário no topo de secoes.html. */
.arte-vazia {
  display: grid; place-items: center; position: relative;
  background:
    radial-gradient(120% 110% at calc(18% + var(--n, 0) * 11%) 12%, var(--marca-suave), transparent 62%),
    linear-gradient(calc(120deg + var(--n, 0) * 24deg), var(--fundo-3), var(--fundo-4));
}
.arte-vazia::after {
  content: ''; position: absolute; inset: 0;
  background: repeating-linear-gradient(calc(45deg + var(--n, 0) * 18deg),
    transparent 0 9px, color-mix(in srgb, var(--tinta) 5%, transparent) 9px 10px);
}
.arte-marca { display: grid; place-items: center; z-index: 1;
              color: color-mix(in srgb, var(--tinta) 26%, transparent); }

/* ------------------------------------------------------------- produto */
.produto { padding: 0; overflow: hidden; display: flex; flex-direction: column; }
.produto .arte { border-radius: 0; }
.produto-txt { padding: 1.05rem 1.1rem 1.2rem; display: flex; flex-direction: column; gap: .45rem; flex: 1; }
.produto-txt p { font-size: .9rem; color: var(--tinta-3); }
.produto-fim { margin-top: auto; padding-top: .6rem; }

.preco { font-family: var(--fonte-titulo); font-size: 1.32rem; font-weight: 800; }
.preco-antes { text-decoration: line-through; color: var(--tinta-3); font-size: .85rem; margin-right: .4rem; }
.preco-un { color: var(--tinta-3); font-size: .8rem; }
.preco-vazio { color: var(--tinta-3); font-size: .92rem; font-style: italic; }

/* ------------------------------------------------------- lista/cardápio */
.lista-itens { list-style: none; padding: 0; }
.lista-itens li { display: flex; align-items: baseline; gap: .7rem; padding: 1rem 0;
                  border-bottom: 1px solid var(--traco-2); flex-wrap: wrap; }
.li-nome { font-family: var(--fonte-titulo); font-size: 1.08rem; font-weight: 700; }
.li-nome:hover { color: var(--marca); }
.li-resumo { color: var(--tinta-3); font-size: .9rem; }
.li-pontos { flex: 1; min-width: 2rem; border-bottom: 1px dotted var(--traco); transform: translateY(-.25rem); }
.li-preco { white-space: nowrap; }

/* ------------------------------------------------------------ tabloide */
.tabloide .oferta { background: var(--fundo-2); border: 1.5px solid var(--traco-2);
                    border-radius: var(--raio); overflow: hidden; display: flex; flex-direction: column;
                    transition: transform .18s ease, border-color .18s ease; }
.tabloide .oferta:hover { transform: translateY(-4px); border-color: var(--marca); }
.oferta-txt { padding: .9rem 1rem 1.1rem; display: flex; flex-direction: column; gap: .35rem; flex: 1; }
.oferta-cat { font-size: .68rem; text-transform: uppercase; letter-spacing: .1em; color: var(--tinta-3); }
.oferta h3 { font-size: 1rem; }
.etiqueta { margin-top: auto; padding-top: .7rem; }
.etiqueta .preco { font-size: 1.6rem; color: var(--marca); }

/* ---------------------------------------------------------------- ficha */
.ficha { display: flex; flex-direction: column; gap: .7rem; }
/* Ficha com foto: a imagem encosta na borda do card, e o conteúdo ganha o
   respiro de volta por dentro. Sem isto a foto flutuaria com a margem do card
   em volta, que é o visual de anexo, não de capa. */
.ficha-foto { padding: 0; overflow: hidden; gap: 0; }
.ficha-foto .arte { border-radius: 0; }
.ficha-foto > :not(.arte) { margin-inline: 1.4rem; }
.ficha-foto > h3 { margin-top: 1.1rem; }
.ficha-foto > :last-child { margin-bottom: 1.3rem; }
.ficha p { color: var(--tinta-3); font-size: .92rem; }
.atributos { display: grid; grid-template-columns: repeat(auto-fit, minmax(84px, 1fr)); gap: .7rem;
             padding: .8rem 0; border-top: 1px solid var(--traco-2); }
.atributos dt { font-size: .68rem; text-transform: uppercase; letter-spacing: .08em; color: var(--tinta-3); }
.atributos dd { font-weight: 650; font-size: .95rem; }
.atributos-larga { grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); margin: 1.4rem 0; }
.ficha-fim { margin-top: auto; }

/* -------------------------------------------------------------- mosaico */
.mosaico { display: grid; gap: .7rem; grid-template-columns: repeat(auto-fill, minmax(min(100%, 220px), 1fr)); }
.mos { position: relative; overflow: hidden; border-radius: var(--raio-p); }
.mos:nth-child(4n+1) { grid-row: span 2; }
.mos:nth-child(4n+1) .arte { aspect-ratio: 3 / 5; }
.mos .arte { transition: transform .5s ease; }
.mos:hover .arte { transform: scale(1.05); }
.mos-txt { position: absolute; inset: auto 0 0 0; padding: 2.2rem .9rem .8rem;
           background: linear-gradient(transparent, rgba(0,0,0,.75)); color: #fff;
           font-weight: 600; font-size: .92rem; }

/* --------------------------------------------------------------- passos */
.trilha { list-style: none; padding: 0; display: grid; gap: 1.15rem;
          grid-template-columns: repeat(auto-fit, minmax(min(100%, 230px), 1fr)); counter-reset: p; }
.trilha li { position: relative; padding-top: 2.6rem; border-top: 2px solid var(--traco-2); }
.trilha li::before { content: ''; position: absolute; top: -2px; left: 0; width: 34%; height: 2px; background: var(--marca); }
.trilha-n { font-family: var(--fonte-titulo); font-size: .82rem; font-weight: 800; color: var(--marca);
            letter-spacing: .1em; position: absolute; top: .9rem; }
.trilha h3 { margin-bottom: .4rem; }
.trilha p { color: var(--tinta-2); font-size: .94rem; }

/* -------------------------------------------------------------- pessoas */
.pessoa { text-align: center; }
.retrato { width: 96px; height: 96px; border-radius: 50%; object-fit: cover; margin: 0 auto .9rem; }
.retrato-vazio { display: grid; place-items: center; font-family: var(--fonte-titulo);
                 font-weight: 800; font-size: 1.6rem; color: var(--sobre-marca-suave);
                 background: linear-gradient(calc(140deg + var(--n, 0) * 40deg), var(--marca-suave), var(--realce-suave)); }
.pessoa-papel { color: var(--marca); font-weight: 650; font-size: .92rem; }
.pessoa p { color: var(--tinta-3); }

/* --------------------------------------------------------------- planos */
.plano { display: flex; flex-direction: column; gap: .8rem; }
.plano-destaque { border-color: var(--marca); border-width: 2px; background: var(--fundo-3); }
.plano-preco strong { font-family: var(--fonte-titulo); font-size: 2.3rem; font-weight: 800; }
.plano-preco span { color: var(--tinta-3); }
.inclui { list-style: none; padding: 0; display: grid; gap: .5rem; margin: .4rem 0 1rem; }
.inclui li { display: flex; gap: .5rem; align-items: flex-start; font-size: .93rem; color: var(--tinta-2); }
.inclui .ic { color: var(--marca); flex: none; margin-top: .18rem; }
.plano .botao { margin-top: auto; }

/* -------------------------------------------------------------- tabela */
.tabela { width: 100%; border-collapse: collapse; font-size: .94rem; min-width: 520px; }
.tabela th { text-align: left; font-size: .72rem; text-transform: uppercase; letter-spacing: .1em;
             color: var(--tinta-3); padding: .8rem .9rem; border-bottom: 2px solid var(--traco); }
.tabela td { padding: .85rem .9rem; border-bottom: 1px solid var(--traco-2); }
.tabela tbody tr:hover { background: var(--fundo-2); }

/* ---------------------------------------------------------- depoimentos */
.aspas blockquote { font-size: 1.02rem; color: var(--tinta-2); position: relative; padding-top: 1.6rem; }
.aspas blockquote::before { content: '”'; position: absolute; top: -.6rem; left: -.2rem;
  font-family: var(--fonte-titulo); font-size: 3.4rem; color: var(--marca); line-height: 1; }
.aspas figcaption { margin-top: 1rem; font-weight: 650; font-size: .92rem; }

/* ------------------------------------------------------------- sanfona */
.sanfona details { border-bottom: 1px solid var(--traco-2); }
.sanfona summary { display: flex; justify-content: space-between; align-items: center; gap: 1rem;
                   padding: 1.15rem 0; cursor: pointer; font-weight: 650; list-style: none; }
.sanfona summary::-webkit-details-marker { display: none; }
.sanfona summary .ic { color: var(--marca); transition: transform .2s ease; flex: none; }
.sanfona details[open] summary .ic { transform: rotate(180deg); }
.sanfona p { padding-bottom: 1.2rem; color: var(--tinta-2); max-width: 68ch; }

/* ------------------------------------------------------------ unidades */
.unidade p { display: flex; gap: .5rem; align-items: flex-start; color: var(--tinta-2);
             font-size: .93rem; margin-bottom: .45rem; }
.unidade .ic { flex: none; margin-top: .2rem; color: var(--marca); }
.unidade h3 { margin-bottom: .8rem; }
.unidade-acoes { display: flex; gap: .5rem; margin-top: 1rem; flex-wrap: wrap; }

/* ------------------------------------------------------------- contato */
.contato { background: var(--fundo-2); border-top: 1px solid var(--traco-2); }
.contato-int { display: grid; gap: 2.5rem; }
@media (min-width: 900px) { .contato-int { grid-template-columns: 1fr 1fr; align-items: start; } }
.contato-dados p { display: flex; gap: .6rem; align-items: flex-start; margin-bottom: .7rem; color: var(--tinta-2); }
.contato-dados .ic { flex: none; margin-top: .2rem; color: var(--marca); }
.formulario { display: grid; gap: .9rem; background: var(--fundo); }
.formulario label { display: grid; gap: .35rem; font-size: .85rem; font-weight: 600; color: var(--tinta-2); }
.formulario input, .formulario textarea {
  background: var(--fundo-2); border: 1px solid var(--traco-2); border-radius: var(--raio-p);
  padding: .75rem .85rem; font-weight: 400; color: var(--tinta);
}
.formulario input:focus, .formulario textarea:focus { border-color: var(--marca); outline: none; }

/* ------------------------------------------------------------- chamada */
.chamada { background: var(--marca); color: var(--sobre-marca); padding: clamp(2.6rem, 5vw, 4rem) 0; }
.chamada-int { display: flex; align-items: center; justify-content: space-between; gap: 2rem; flex-wrap: wrap; }
.chamada h2 { max-width: 22ch; }
.chamada p { margin-top: .6rem; opacity: .85; }

/* -------------------------------------------------------------- rodapé */
.rodape { background: var(--fundo-2); border-top: 1px solid var(--traco-2); padding-top: 3rem; }
.rodape-int { display: grid; gap: 2rem; padding-bottom: 2.4rem;
              grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr)); }
.rodape-nome { font-family: var(--fonte-titulo); font-weight: 800; font-size: 1.15rem; }
.rodape-col { display: grid; gap: .5rem; align-content: start; font-size: .92rem; color: var(--tinta-2); }
.rodape-col p { display: flex; gap: .5rem; align-items: flex-start; }
.rodape-col .ic { flex: none; margin-top: .2rem; color: var(--marca); }
.rodape-col a:hover { color: var(--marca); }
.rodape-fim { display: flex; justify-content: space-between; gap: 1rem; flex-wrap: wrap;
              padding: 1.1rem 0; border-top: 1px solid var(--traco-2); font-size: .82rem; color: var(--tinta-3); }

.zap-flutua { position: fixed; right: 1.1rem; bottom: 1.1rem; z-index: 45;
              width: 54px; height: 54px; border-radius: 50%; display: grid; place-items: center;
              background: var(--marca); color: var(--sobre-marca); box-shadow: 0 8px 24px rgba(0,0,0,.22); }

/* --------------------------------------------------------- outras telas */
.topo-pagina { padding-bottom: 0; }
.topo-pagina h1 { margin: .8rem 0 1.6rem; }
.barra-busca { display: flex; gap: .6rem; flex-wrap: wrap; margin-bottom: 1.2rem; }
.busca { flex: 1; min-width: 220px; display: flex; align-items: center; gap: .6rem;
         background: var(--fundo-2); border: 1px solid var(--traco-2); border-radius: var(--raio-p); padding: 0 .9rem; }
.busca input { border: none; background: none; padding: .75rem 0; width: 100%; outline: none; }
.busca .ic { color: var(--tinta-3); flex: none; }
.filtros { display: flex; gap: .5rem; flex-wrap: wrap; margin-bottom: 1.6rem; }
.migalhas { font-size: .85rem; color: var(--tinta-3); margin-bottom: 1.6rem; }
.migalhas a:hover { color: var(--marca); }
.item-int { display: grid; gap: clamp(1.6rem, 4vw, 3.5rem); }
@media (min-width: 900px) { .item-int { grid-template-columns: 5fr 6fr; align-items: start; } }
.item-preco { margin: 1.2rem 0; }
.item-preco .preco { font-size: 2.2rem; }
.item-acoes { display: flex; gap: .7rem; flex-wrap: wrap; margin-top: 1.6rem; }

/* ============================================================ ARQUÉTIPOS */
/* Cada bloco abaixo muda a ARQUITETURA, não só a cor. */

/* tabloide — mercado: denso, preço gritando, borda grossa */
.arq-tabloide h1 { font-weight: 800; letter-spacing: -.035em; }
.arq-tabloide .cartao, .arq-tabloide .oferta { border-width: 2px; }
.arq-tabloide .etiqueta .preco { font-size: 1.85rem; }
.arq-tabloide .chip-forte { transform: rotate(-1.5deg); }
.arq-tabloide .grade-4 { gap: .8rem; }
/* A capa do mercado ganha uma pilha de etiquetas em vez do disco genérico —
   sem isso sobrava um vão morto do lado direito do título. */
.arq-tabloide .hero-arte { aspect-ratio: 1; background: none; }
.arq-tabloide .hero-arte span { border-radius: var(--raio); inset: auto; position: absolute; }
.arq-tabloide .hero-arte span:nth-child(1) { top: 6%; left: 8%; width: 62%; height: 30%;
  background: var(--marca); transform: rotate(-3deg); }
.arq-tabloide .hero-arte span:nth-child(2) { top: 38%; left: 22%; width: 62%; height: 30%;
  background: var(--marca-suave); transform: rotate(2deg); }
.arq-tabloide .hero-arte span:nth-child(3) { top: 70%; left: 10%; width: 54%; height: 24%;
  background: none; border: 2px dashed var(--traco); transform: rotate(-1deg); }

/* sereno — clínica, hotel, terapia: ar, linha longa, régua fina */
.arq-sereno { line-height: 1.72; }
.arq-sereno .secao { padding: clamp(4rem, 9vw, 8rem) 0; }
.arq-sereno h1, .arq-sereno h2 { font-weight: 500; letter-spacing: -.01em; }
.arq-sereno .cartao { border-radius: var(--raio); box-shadow: 0 1px 2px color-mix(in srgb, var(--tinta) 5%, transparent); }
.arq-sereno .cabeca .linha { font-size: 1.12rem; }

/* editorial — ótica, beleza: serifa, grade assimétrica, régua de revista */
.arq-editorial h1 { letter-spacing: -.03em; }
.arq-editorial .cabeca { border-top: 1px solid var(--tinta); padding-top: 1.2rem; }
.arq-editorial .cartao { border-radius: var(--raio-p); background: transparent; border-color: var(--traco-2); }
.arq-editorial .produto .arte { aspect-ratio: 1; }
.arq-editorial .chip { border-radius: 0; letter-spacing: .18em; }

/* macio — odontologia, pet: redondo, sombra suave, nada de canto vivo */
.arq-macio .cartao { border-radius: calc(var(--raio) * 1.6); border-color: transparent;
  box-shadow: 0 6px 20px color-mix(in srgb, var(--tinta) 8%, transparent); }
.arq-macio .arte { border-radius: calc(var(--raio) * 1.3); }
.arq-macio .botao { border-radius: var(--raio-pill); }
.arq-macio h1, .arq-macio h2 { letter-spacing: -.02em; }

/* brasa — restaurante: escuro, cardápio pontilhado, serifa grande */
.arq-brasa .lista-itens li { padding: 1.15rem 0; }
.arq-brasa .li-nome { font-size: 1.2rem; }
.arq-brasa .cabeca { text-align: center; margin-inline: auto; }
.arq-brasa .hero { text-align: center; }
.arq-brasa .hero-acoes, .arq-brasa .numeros { justify-content: center; }
.arq-brasa .hero-linha { margin-inline: auto; }

/* oficina — automotivo, construtora: condensado, caixa alta, faixa de risco */
.arq-oficina h1, .arq-oficina h2, .arq-oficina h3 { text-transform: uppercase; letter-spacing: 0; }
.arq-oficina .cartao { border-radius: 2px; }
.arq-oficina .botao { border-radius: 2px; text-transform: uppercase; letter-spacing: .06em; font-size: .85rem; }
.arq-oficina .cabeca { border-left: 5px solid var(--marca); padding-left: 1.1rem; }
.arq-oficina .chip { border-radius: 2px; }

/* papel — advocacia: off-white, serifa, medida curta, numeração romana */
.arq-papel .caixa { width: min(1080px, 100% - 2.5rem); }
.arq-papel h1 { font-weight: 500; }
.arq-papel .cartao { background: transparent; border: none; border-top: 2px solid var(--tinta); border-radius: 0; padding-inline: 0; }
.arq-papel .prosa p, .arq-papel .cabeca .linha { max-width: 58ch; }
.arq-papel .botao { border-radius: 0; }
.arq-papel .trilha li { border-top-width: 1px; }

/* bloco — academia, escola: blocos chapados, número grande, tabela de verdade */
.arq-bloco h1 { text-transform: uppercase; letter-spacing: -.01em; line-height: .95; }
.arq-bloco .cartao { border-radius: var(--raio-p); }
.arq-bloco .numeros dd { font-size: 2.6rem; }
.arq-bloco .cabeca h2 { text-transform: uppercase; }
.arq-bloco .chip { border-radius: 2px; }

/* mosaico — fotografia: a imagem é a interface, cromo mínimo */
.arq-mosaico .secao { padding: clamp(2.4rem, 5vw, 4rem) 0; }
.arq-mosaico .cabeca h2 { font-size: clamp(1.2rem, 2vw, 1.6rem); font-weight: 500; }
.arq-mosaico .chip { background: none; border: none; padding-inline: 0; }
.arq-mosaico .filtros { gap: 1.4rem; }
/* Sem fundo, o chip ativo herdava `--sobre-marca` (escuro) sobre fundo escuro e
   sumia: o filtro selecionado ficava invisível justamente por estar selecionado.
   Aqui a seleção é marcada por cor + régua, não por preenchimento. */
.arq-mosaico .chip.ativo { background: none; color: var(--tinta); border-bottom: 2px solid var(--marca); border-radius: 0; }
.arq-mosaico .cartao { background: none; border: none; padding: 0; }

.arq-mosaico .hero-editorial {
  position: relative;
}
.arq-mosaico .hero-arte-filme {
  position: relative;
  overflow: hidden;
  border-radius: var(--raio);
  border: 1px solid rgba(255, 255, 255, 0.12);
  aspect-ratio: 4 / 5;
  box-shadow: 0 20px 50px rgba(0, 0, 0, 0.7);
  background: #000000;
}
.arq-mosaico .hero-arte-filme video {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* Galeria com contato de filme fotográfico */
.arq-mosaico .mosaico {
  counter-reset: fotos;
  gap: 1.25rem;
}
.arq-mosaico .mos {
  border: 1px solid rgba(255, 255, 255, 0.1);
  background: #0d0d0f;
  transition: transform 0.4s cubic-bezier(0.16, 1, 0.3, 1), border-color 0.3s ease, box-shadow 0.4s ease;
}
.arq-mosaico .mos:hover {
  border-color: rgba(255, 255, 255, 0.35);
  transform: translateY(-4px);
  box-shadow: 0 16px 36px rgba(0, 0, 0, 0.6);
}
.arq-mosaico .mos::before {
  content: counter(fotos, decimal-leading-zero);
  counter-increment: fotos;
  position: absolute;
  top: 12px;
  left: 12px;
  z-index: 3;
  font-family: ui-monospace, SFMono-Regular, monospace;
  font-size: 0.68rem;
  letter-spacing: 0.1em;
  color: rgba(255, 255, 255, 0.9);
  background: rgba(0, 0, 0, 0.7);
  backdrop-filter: blur(4px);
  padding: 2px 7px;
  border-radius: 2px;
  border: 1px solid rgba(255, 255, 255, 0.2);
}
.arq-mosaico .mos-txt {
  font-family: ui-monospace, SFMono-Regular, monospace;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  font-size: 0.85rem;
  padding: 2.8rem 1.1rem 1rem;
}

/* papel — advocacia: nada de bolha colorida na capa. O escritório recebe uma
   moldura sóbria com régua, que é o que a direção de arte pedia (contenção). */
.arq-papel .hero-arte { background: var(--fundo-2); border: 1px solid var(--traco-2);
  border-radius: 0; aspect-ratio: 5 / 4; }
.arq-papel .hero-arte span:nth-child(1) { inset: auto auto 22% 12%; width: 76%; height: 1px;
  background: var(--tinta); opacity: .5; border-radius: 0; }
.arq-papel .hero-arte span:nth-child(2) { inset: auto auto 16% 12%; width: 42%; height: 1px;
  background: var(--marca); opacity: .9; border-radius: 0; }
.arq-papel .hero-arte span:nth-child(3) { inset: 16% auto auto 12%; width: 34%; aspect-ratio: 1;
  border: 1px solid var(--traco); background: none; border-radius: 0; }

/* ficha — imobiliária: dado seco em fileira, foto alta, filtro em barra */
.arq-ficha .produto .arte { aspect-ratio: 4 / 3; }
.arq-ficha .atributos { border-top: none; border-bottom: 1px solid var(--traco-2); }
.arq-ficha .preco { font-size: 1.5rem; }
.arq-ficha .cartao { border-radius: var(--raio-p); }

/* painel — barbearia lida como QUADRO DE BORDO -------------------------------

   A referência é uma tela de sistema, não uma página de venda: moldura branca
   arredondada sobre cinza, navegação em pílula, fichas de número no topo e
   painéis lado a lado. O que muda aqui não é a cor — é a leitura: em diagonal,
   por blocos, como quem confere o dia; não de cima para baixo, como quem lê um
   argumento.

   A moldura contínua sai de três margens iguais (topo, main, rodapé) sem
   markup nenhum a mais: envolver tudo numa <div> obrigaria a mexer na moldura
   dos outros dezesseis modelos, e este arquétipo não vale uma regressão nos
   outros quinze.
*/
.arq-painel {
  --moldura: rgba(255, 255, 255, 0.08);
  --sombra: 0 8px 30px rgba(0, 0, 0, 0.5),
            0 1px 3px rgba(0, 0, 0, 0.3);
  --raio: 16px;
  --raio-p: 10px;
  background: var(--fundo);
  font-size: .875rem;
  line-height: 1.5;
}
.arq-painel .topo {
  margin: 12px 12px 0; border: 1px solid var(--moldura); border-bottom: none;
  border-radius: 22px 22px 0 0; background: rgba(17, 12, 9, 0.92); backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
}
.arq-painel main { margin: 0 12px; background: var(--fundo-2);
                   border-inline: 1px solid var(--moldura); }
.arq-painel .rodape {
  margin: 0 12px 12px; background: rgba(17, 12, 9, 0.95);
  border: 1px solid var(--moldura); border-radius: 0 0 22px 22px;
  padding-top: 2.2rem;
}
.arq-painel .contato { background: var(--fundo-2); }

/* Navegação em pílula */
.arq-painel .topo-int { min-height: 60px; gap: .75rem; }
.arq-painel .nav { margin-left: 1.2rem; margin-right: auto; gap: .35rem; font-size: .86rem; }
.arq-painel .nav a { padding: .45rem 1rem; border-radius: var(--raio-pill); font-weight: 600; color: rgba(255,255,255,0.75); transition: all .2s ease; text-decoration: none; }
.arq-painel .nav a:hover { background: rgba(255,255,255,0.08); color: #fff; }
.arq-painel .nav a[aria-current='page'] { background: rgba(184, 116, 72, 0.25); color: #fff; border: 1px solid rgba(184, 116, 72, 0.4); box-shadow: 0 2px 10px rgba(184, 116, 72, 0.25); }

.arq-painel .marca-nome { display: flex; align-items: center; gap: .7rem; font-size: 1rem; letter-spacing: -.01em; color: #fff; text-decoration: none; }
.arq-painel .marca-selo { display: grid; place-items: center; width: 36px; height: 36px; flex: none;
  border-radius: 10px; color: #fff;
  background: linear-gradient(145deg, #b87448, #8f5228);
  box-shadow: 0 2px 12px rgba(184, 116, 72, 0.45); border: 1px solid rgba(255,255,255,0.18); }
.arq-painel .marca-slogan { text-transform: uppercase; letter-spacing: .14em; font-size: .56rem; font-weight: 700; margin-top: 1px; color: var(--realce); }

.arq-painel .topo-busca { display: flex; align-items: center; gap: .45rem; flex: 0 1 230px;
  padding: .38rem .75rem; border: 1px solid var(--moldura); border-radius: var(--raio-pill);
  background: rgba(255,255,255,0.04); color: rgba(255,255,255,0.6); transition: all .2s ease; }
.arq-painel .topo-busca input { border: none; background: none; outline: none; width: 100%; font-size: .8rem; color: #fff; }
.arq-painel .topo-busca:focus-within { border-color: var(--marca); background: rgba(255,255,255,0.08); box-shadow: 0 0 12px rgba(184, 116, 72, 0.25); }

.arq-painel .topo-acoes { gap: .65rem; }
.arq-painel .idiomas { border-radius: var(--raio-pill); background: rgba(255,255,255,0.06); border: 1px solid var(--moldura); padding: 2px; }
.arq-painel .idiomas a { border-radius: var(--raio-pill); font-size: .68rem; padding: .28rem .55rem; color: rgba(255,255,255,0.65); text-decoration: none; }
.arq-painel .idiomas a.ativo { background: var(--marca); color: #fff; box-shadow: 0 1px 4px rgba(0,0,0,0.3); }
.arq-painel .botao { border-radius: var(--raio-pill); font-weight: 650; }
.arq-painel .botao-p { padding: .55rem 1.25rem; font-size: .84rem; }
.arq-painel .botao-cheio { background: linear-gradient(135deg, #b87448, #8f5228); color: #fff; border: 1px solid rgba(255,255,255,0.2); box-shadow: 0 4px 16px rgba(184, 116, 72, 0.4); }
.arq-painel .botao-cheio:hover { transform: translateY(-2px); box-shadow: 0 8px 24px rgba(184, 116, 72, 0.6); background: linear-gradient(135deg, #c78356, #9e5d32); }

/* Cartões: Dark Glassmorphism com borda fina e reflexo sutil */
.arq-painel .cartao {
  background: rgba(26, 19, 15, 0.82);
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: var(--raio);
  box-shadow: 0 8px 28px rgba(0, 0, 0, 0.45);
}
.arq-painel a.cartao:hover {
  transform: translateY(-3px);
  border-color: rgba(214, 178, 102, 0.4);
  box-shadow: 0 14px 36px rgba(0, 0, 0, 0.6), 0 0 16px rgba(184, 116, 72, 0.2);
}
.arq-painel .secao { padding: clamp(1.6rem, 3vw, 2.6rem) 0; }
.arq-painel h1 { font-size: clamp(2.2rem, 4.2vw, 3.6rem); letter-spacing: -.02em; line-height: 1.1; font-family: var(--fonte-titulo); }
.arq-painel h2 { font-size: clamp(1.3rem, 2vw, 1.7rem); letter-spacing: -.02em; font-family: var(--fonte-titulo); }
.arq-painel h3 { font-size: 1.05rem; font-family: var(--fonte-titulo); letter-spacing: -.01em; }
.arq-painel .cabeca { margin-bottom: 1.2rem; }
.arq-painel .cabeca .linha { font-size: .92rem; color: rgba(255,255,255,0.7); }
.arq-painel .chip { border-radius: var(--raio-pill); font-size: .64rem; padding: .32rem .62rem; }
.arq-painel .caixa { width: min(1320px, 100% - 2rem); }

/* ---------- Capa do Painel: The Groomsman Collective (Imersiva com foto) ---------- */
.hero-painel {
  position: relative;
  min-height: 560px;
  padding: 4.8rem 0 3.6rem;
  display: flex;
  flex-direction: column;
  justify-content: center;
  border-radius: 20px 20px 0 0;
  overflow: hidden;
  background: #110c09;
}
.hero-painel-bg {
  position: absolute;
  inset: 0;
  background-size: cover;
  background-position: center right;
  z-index: 1;
  opacity: 0.96;
  transition: transform 1.2s cubic-bezier(0.25, 1, 0.5, 1);
}
.hero-painel:hover .hero-painel-bg {
  transform: scale(1.02);
}
.hero-painel-overlay {
  position: absolute;
  inset: 0;
  z-index: 2;
  background: linear-gradient(
    to right,
    rgba(17, 12, 9, 0.97) 0%,
    rgba(17, 12, 9, 0.90) 44%,
    rgba(17, 12, 9, 0.48) 75%,
    rgba(17, 12, 9, 0.18) 100%
  );
}
.hero-painel .painel-cabeca {
  position: relative;
  z-index: 3;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 2.5rem;
  flex-wrap: wrap;
}
.painel-titulo {
  flex: 1 1 32rem;
  max-width: 44rem;
}
.painel-titulo h1 {
  font-family: var(--fonte-titulo);
  font-size: clamp(2.6rem, 5.2vw, 4.2rem);
  font-weight: 700;
  line-height: 1.05;
  letter-spacing: -0.02em;
  color: #ffffff;
  text-shadow: 0 4px 30px rgba(0, 0, 0, 0.85);
  margin-bottom: 1rem;
}
.painel-titulo .estado {
  font-size: 1.12rem;
  color: rgba(255, 255, 255, 0.84);
  line-height: 1.55;
  margin-bottom: 2rem;
  max-width: 34rem;
  text-shadow: 0 2px 10px rgba(0, 0, 0, 0.6);
}

/* Badge Hexagonal The Groomsman Collective */
.groomsman-badge {
  display: inline-flex;
  align-items: center;
  gap: 0.85rem;
  margin-bottom: 1.5rem;
  padding: 0.45rem 1.25rem 0.45rem 0.65rem;
  background: rgba(22, 16, 12, 0.85);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  border: 1px solid rgba(214, 178, 102, 0.35);
  border-radius: 9999px;
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5), 0 0 15px rgba(184, 116, 72, 0.15);
}
.groomsman-hexagon {
  filter: drop-shadow(0 2px 6px rgba(0, 0, 0, 0.6));
}
.groomsman-badge-txt {
  display: flex;
  flex-direction: column;
  line-height: 1.05;
}
.groomsman-badge-txt .badge-mini {
  font-size: 0.58rem;
  font-weight: 700;
  color: var(--realce);
  letter-spacing: 0.14em;
}
.groomsman-badge-txt .badge-main {
  font-size: 0.92rem;
  font-weight: 800;
  color: #ffffff;
  letter-spacing: 0.16em;
  margin: 2px 0 1px;
}
.groomsman-badge-txt .badge-sub {
  font-size: 0.54rem;
  font-weight: 600;
  color: var(--marca);
  letter-spacing: 0.22em;
}

/* Botões do Hero: Pill Primário com Efeito Shiny e Contorno */
.hero-painel-botoes {
  display: flex;
  align-items: center;
  gap: 1.1rem;
  flex-wrap: wrap;
}
.hero-btn-pill.shiny-cta {
  --shiny-cta-bg: #854923;
  --shiny-cta-bg-subtle: #b87448;
  --shiny-cta-fg: #ffffff;
  --shiny-cta-highlight: #f0a87b;
  --shiny-cta-highlight-subtle: #d6b266;
  padding: 0.9rem 2.3rem !important;
  font-size: 1rem !important;
  font-weight: 700 !important;
  border-radius: 9999px !important;
  color: #ffffff !important;
  box-shadow: 0 8px 25px -4px rgba(184, 116, 72, 0.5), inset 0 1px 2px rgba(255, 255, 255, 0.3) !important;
  text-decoration: none !important;
  transition: transform 0.2s ease, box-shadow 0.2s ease !important;
}
.hero-btn-pill.shiny-cta:hover {
  transform: translateY(-2px);
  box-shadow: 0 14px 34px -4px rgba(184, 116, 72, 0.75), inset 0 1px 2px rgba(255, 255, 255, 0.45) !important;
}
.hero-btn-pill-outline {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  padding: 0.9rem 2.3rem !important;
  font-size: 1rem !important;
  font-weight: 650 !important;
  border-radius: 9999px !important;
  background: rgba(18, 13, 10, 0.55) !important;
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  color: #ffffff !important;
  border: 1.5px solid rgba(255, 255, 255, 0.85) !important;
  text-decoration: none !important;
  transition: all 0.25s ease !important;
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.35) !important;
}
.hero-btn-pill-outline:hover {
  background: rgba(255, 255, 255, 0.15) !important;
  border-color: #ffffff !important;
  transform: translateY(-2px);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5), 0 0 15px rgba(255, 255, 255, 0.2) !important;
}

.equipe-fichas { display: flex; gap: .6rem; flex-wrap: wrap; position: relative; z-index: 3; }
.ficha-pessoa { display: flex; align-items: center; gap: .45rem; padding: .38rem .75rem .38rem .45rem;
  background: rgba(28, 22, 18, 0.85); border: 1px solid rgba(255,255,255,0.09); border-radius: var(--raio-pill);
  box-shadow: 0 4px 15px rgba(0,0,0,0.3); backdrop-filter: blur(10px); }
.fp-txt { display: grid; line-height: 1.2; }
.fp-txt strong { font-size: .8rem; color: #fff; }
.fp-txt span { font-size: .68rem; color: var(--realce); }
.ficha-pessoa .avatar { width: 28px; height: 28px; font-size: .64rem; }

/* Iniciais em disco: cliente e barbeiro de demonstração NÃO ganham rosto de
   banco de imagem. Foto de gente inventada num painel é a mentira mais fácil
   de acreditar da página inteira. */
.avatar { width: 34px; height: 34px; border-radius: 50%; flex: none; display: grid;
  place-items: center; font-size: .74rem; font-weight: 700; letter-spacing: .01em;
  color: var(--sobre-marca-suave); object-fit: cover;
  background: linear-gradient(calc(145deg + var(--n, 0) * 32deg), var(--marca-suave), var(--realce-suave)); }
.avatar-p { width: 26px; height: 26px; font-size: .62rem; }

/* ---------------------------- fichas de número --------------------------- */
.indicadores { display: grid; gap: .6rem; margin-top: 1rem;
               grid-template-columns: repeat(auto-fit, minmax(min(100%, 150px), 1fr)); }
.ind { padding: .7rem .8rem; display: grid; gap: .22rem; }
.ind-ic { color: var(--tinta-3); }
.ind-linha { display: flex; align-items: baseline; justify-content: space-between; gap: .4rem; }
.ind-linha strong { font-family: var(--fonte-titulo); font-size: 1.45rem; font-weight: 800;
                    letter-spacing: -.03em; line-height: 1; }
.ind-rot { font-size: .74rem; color: var(--tinta-3); }

/* Selo de estado. Seis tons, todos derivados do tema: o mesmo componente serve
   "em andamento" (apoio), "aguardando" (âmbar) e "vencido" (vermelho) sem que
   nenhum deles seja um hexadecimal escrito à mão. */
.selo { font-size: .66rem; font-weight: 700; padding: .2rem .5rem; border-radius: var(--raio-pill);
        white-space: nowrap; letter-spacing: .01em; }
/* Texto no degrau FORTE, fundo no degrau comum a 14%: medido em 5,3–6,0 de
   contraste. Com o degrau comum nos dois lados dava 3,6–4,3, abaixo de AA — e
   um selo de 11px em negrito não se qualifica como "texto grande". */
.selo-marca   { background: color-mix(in srgb, var(--marca) 14%, transparent);  color: var(--marca-forte); }
.selo-realce  { background: color-mix(in srgb, var(--realce) 14%, transparent); color: var(--realce-forte); }
.selo-aviso   { background: color-mix(in srgb, var(--aviso) 14%, transparent);  color: var(--aviso-forte); }
.selo-ok      { background: color-mix(in srgb, var(--ok) 14%, transparent);     color: var(--ok-forte); }
.selo-alerta  { background: color-mix(in srgb, var(--alerta) 14%, transparent); color: var(--alerta-forte); }
.selo-neutro  { background: var(--fundo-3); color: var(--tinta-2); }

/* ------------------------------ grade de painéis ------------------------- */
.quadros { display: grid; gap: .7rem; grid-template-columns: repeat(var(--cols, 3), minmax(0, 1fr)); }
.q-largo { grid-column: span 2; }
.q-alto { grid-row: span 2; }
.quadro { padding: 0; display: flex; flex-direction: column; overflow: hidden; }
.quadro-cab { display: flex; align-items: flex-start; justify-content: space-between; gap: .8rem;
              padding: .8rem .9rem .5rem; }
.quadro-cab h3 { font-size: .92rem; }
.quadro-sub { font-size: .72rem; color: var(--tinta-3); margin-top: .1rem; }
.quadro-acao { font-size: .74rem; font-weight: 650; color: var(--marca); white-space: nowrap; }
.quadro-acao:hover { text-decoration: underline; }
.quadro-corpo { padding: 0 .9rem .8rem; flex: 1; }

.segmentado { display: flex; gap: 2px; padding: 3px; background: var(--fundo-3);
              border-radius: var(--raio-pill); flex: none; }
.seg { border: none; background: none; cursor: pointer; padding: .26rem .62rem;
       border-radius: var(--raio-pill); font-size: .72rem; font-weight: 600; color: var(--tinta-3); }
.seg.ativo { background: var(--fundo); color: var(--tinta); box-shadow: var(--sombra); }

/* --------------------------------- agenda -------------------------------- */
.agenda, .fila, .avisos { list-style: none; padding: 0; display: grid; gap: .1rem; }
.agenda-linha { display: flex; align-items: center; gap: .6rem; padding: .38rem .45rem;
                border-radius: var(--raio-p); transition: background .15s ease; }
.agenda-linha:hover { background: var(--fundo-2); }
/* A linha de agora é a única com preenchimento e régua: num painel, "onde eu
   estou" precisa ser achado sem procurar. */
.agenda-linha.agora { background: var(--fundo-2); box-shadow: inset 2px 0 0 var(--realce); }
.agenda-hora { font-size: .72rem; color: var(--tinta-3); width: 2.9rem; flex: none; }
.agenda-txt { display: grid; line-height: 1.25; min-width: 0; flex: 1; }
.agenda-txt strong { font-size: .82rem; }
.agenda-txt span { font-size: .71rem; color: var(--tinta-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.agenda-quem { display: flex; align-items: center; gap: .4rem; font-size: .74rem; color: var(--tinta-2);
               padding-left: .7rem; border-left: 1px solid var(--moldura); flex: none; }
.vazio-filtro { font-size: .8rem; color: var(--tinta-3); padding: 1rem .5rem; }
/* Quadrado arredondado na agenda, disco na fila e na equipe: é a distinção da
   referência entre "um item da lista" e "uma pessoa". */
.agenda-linha .avatar { width: 28px; height: 28px; border-radius: 9px; font-size: .64rem; }

/* ---------------------------------- fila --------------------------------- */
.fila li { display: flex; align-items: center; gap: .5rem; padding: .38rem .45rem;
           border-radius: var(--raio-p); }
.fila li:hover { background: var(--fundo-2); }
.fila-n { font-size: .72rem; color: var(--tinta-3); width: 1.1rem; flex: none; }
.fila-txt { display: grid; line-height: 1.25; flex: 1; min-width: 0; }
/* Uma linha por campo, cortando com reticências. Na coluna de 1/3 o nome
   "Marcos A." quebrava em duas linhas e a fila virava um bloco de texto — numa
   fila, o que importa é varrer a coluna de cima a baixo, e linha de altura
   irregular impede exatamente isso. */
.fila-txt strong, .fila-txt span, .aviso-txt span {
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* O NOME do item pode ocupar duas linhas; o resto, não. Cortar nome com
   reticências ("Pomada mod…") é pior do que uma segunda linha: a fila precisa
   de altura regular para ser varrida, mas um painel de três itens não — e nome
   pela metade não identifica coisa nenhuma. */
.aviso-txt strong { display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical;
                    overflow: hidden; }
.fila-txt strong { font-size: .82rem; }
.fila-txt span { font-size: .71rem; color: var(--tinta-3); }
/* A espera cede espaço ANTES do nome: saber que "Marcos A." está na fila vale
   mais do que saber que ele espera há 8 minutos, e era o nome que estava
   sendo cortado. `min-width: 0` é o que destrava o encolhimento de um item
   flex com texto. */
.fila-espera { font-size: .7rem; color: var(--tinta-3); font-style: italic; white-space: nowrap;
               overflow: hidden; text-overflow: ellipsis; flex: 0 1 auto; min-width: 0; }
.fila-txt { flex: 3 1 0; }
.fila li .avatar, .avisos li .avatar { width: 28px; height: 28px; font-size: .64rem; }

/* ------------------------------ barra do mix ----------------------------- */
.mix-total { display: flex; align-items: baseline; gap: .45rem; margin-bottom: .9rem; }
.mix-total strong { font-family: var(--fonte-titulo); font-size: 1.65rem; font-weight: 800; letter-spacing: -.03em; }
.mix-total span { font-size: .76rem; color: var(--tinta-3); }
.barra { display: flex; gap: 2px; height: 11px; border-radius: var(--raio-pill); overflow: hidden;
         background: var(--fundo-3); }
.barra-fatia { height: 100%; }
.legenda { list-style: none; padding: 0; display: flex; flex-wrap: wrap; gap: .5rem 1.1rem; margin-top: .9rem; }
.legenda li { display: flex; align-items: center; gap: .35rem; font-size: .72rem; color: var(--tinta-2); }
.legenda i { width: 8px; height: 8px; border-radius: 50%; flex: none; }
.legenda em { font-style: italic; font-weight: 700; color: var(--tinta); }

/* -------------------------------- gráfico -------------------------------- */
.mov { display: flex; align-items: center; justify-content: space-between; gap: 1rem;
       flex-wrap: wrap; margin-bottom: .6rem; }
.mov-resumo { margin: 0; }
.serie { margin: 0; }
/* Classe, e não o atributo `hidden`: `display:flex` de uma classe vence a folha
   do navegador e o quadro sairia com as três séries empilhadas. */
.serie:not(.ativa) { display: none; }
.grafico { width: 100%; height: auto; overflow: visible; }
.g-regua { stroke: var(--moldura); stroke-width: 1; stroke-dasharray: 3 5; }
.g-rot { fill: var(--tinta-3); font-size: 15px; font-family: var(--fonte-texto); }
.g-rot-x { text-anchor: middle; }
.g-area { fill: color-mix(in srgb, var(--realce) 17%, transparent); stroke: none; }
.g-linha { fill: none; stroke: var(--realce); stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round; }
.g-pico { fill: var(--fundo); stroke: var(--realce); stroke-width: 2.5; }

/* ------------------------------ painel de avisos ------------------------- */
.avisos li { display: flex; align-items: center; gap: .5rem; padding: .38rem .45rem;
             border-radius: var(--raio-p); }
.avisos li:hover { background: var(--fundo-2); }
.aviso-ic { width: 28px; height: 28px; flex: none; display: grid; place-items: center;
            border-radius: 9px; background: var(--fundo-3); color: var(--tinta-2); }
.aviso-txt { display: grid; line-height: 1.3; flex: 1; min-width: 0; }
.aviso-txt strong { font-size: .8rem; line-height: 1.2; }
.aviso-txt span { font-size: .7rem; color: var(--tinta-3); line-height: 1.25; }
.aviso-marca { font-size: .69rem; font-weight: 700; font-style: italic; white-space: nowrap; }
.tom-alerta { color: var(--alerta-forte); }
.tom-aviso { color: var(--aviso-forte); }
.tom-ok { color: var(--ok-forte); }
.tom-realce { color: var(--realce-forte); }
.tom-marca { color: var(--marca-forte); }
.tom-neutro { color: var(--tinta-2); }

/* Ajustes refinados de Dark Luxury para arq-painel */
.arq-painel .indicadores { position: relative; z-index: 3; margin-top: 2rem; }
.arq-painel .ind {
  background: rgba(24, 18, 14, 0.82);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border: 1px solid rgba(255, 255, 255, 0.09);
  border-radius: 14px;
  box-shadow: 0 4px 18px rgba(0, 0, 0, 0.35);
  padding: 0.85rem 1rem;
  transition: transform 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
}
.arq-painel .ind:hover {
  transform: translateY(-3px);
  border-color: rgba(214, 178, 102, 0.35);
  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5), 0 0 14px rgba(184, 116, 72, 0.18);
}
.arq-painel .ind-ic { color: var(--realce); }
.arq-painel .ind-linha strong { color: #ffffff; font-size: 1.65rem; }
.arq-painel .ind-rot { color: rgba(255, 255, 255, 0.65); }

.arq-painel .quadro {
  background: rgba(26, 19, 15, 0.85);
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 16px;
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.45);
}
.arq-painel .quadro-cab { border-bottom: 1px solid rgba(255, 255, 255, 0.05); }
.arq-painel .quadro-cab h3 { color: #ffffff; font-size: 1.05rem; font-family: var(--fonte-titulo); }
.arq-painel .quadro-sub { color: rgba(255, 255, 255, 0.6); }
.arq-painel .quadro-acao { color: var(--realce); text-decoration: none; transition: color 0.2s ease; }
.arq-painel .quadro-acao:hover { color: #ffffff; text-shadow: 0 0 8px rgba(214, 178, 102, 0.6); }
.arq-painel .segmentado { background: rgba(0, 0, 0, 0.4); border: 1px solid rgba(255, 255, 255, 0.07); }
.arq-painel .seg { color: rgba(255, 255, 255, 0.6); }
.arq-painel .seg.ativo { background: linear-gradient(135deg, #b87448, #8f5228); color: #ffffff; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4); }
.arq-painel .agenda-linha { border-radius: 10px; transition: background 0.15s ease; }
.arq-painel .agenda-linha:hover { background: rgba(255, 255, 255, 0.05); }
.arq-painel .agenda-linha.agora { background: rgba(184, 116, 72, 0.16); border: 1px solid rgba(184, 116, 72, 0.35); box-shadow: inset 3px 0 0 var(--realce), 0 2px 12px rgba(184, 116, 72, 0.15); }
.arq-painel .agenda-hora { color: var(--realce); font-weight: 600; }
.arq-painel .agenda-txt strong { color: #ffffff; }
.arq-painel .agenda-txt span { color: rgba(255, 255, 255, 0.6); }
.arq-painel .agenda-quem { border-left: 1px solid rgba(255, 255, 255, 0.08); color: rgba(255, 255, 255, 0.7); }
.arq-painel .fila li:hover { background: rgba(255, 255, 255, 0.05); }
.arq-painel .fila-n { color: var(--realce); font-weight: 700; }
.arq-painel .fila-txt strong { color: #ffffff; }
.arq-painel .fila-txt span { color: rgba(255, 255, 255, 0.6); }

.arq-painel .chamada {
  background: linear-gradient(135deg, #1c1511 0%, #2a1c14 100%);
  color: #ffffff;
  border-block: 1px solid rgba(255, 255, 255, 0.08);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05);
}
.arq-painel .chamada h2 { font-family: var(--fonte-titulo); color: #ffffff; }
.arq-painel .chamada .botao { border-radius: var(--raio-pill); }

/* A referência é uma tela de 1024 com o painel largo em 2/3 e a coluna da
   direita em 1/3 — então a quebra para duas colunas só pode acontecer ABAIXO
   disso. Quebrando em 1100 o modelo aparecia empilhado justamente na largura em
   que ele foi desenhado, que é a largura de um notebook comum. */
@media (max-width: 950px) {
  .quadros { --cols: 2 !important; }
  .q-alto { grid-row: auto; }
}
@media (max-width: 700px) {
  .quadros { --cols: 1 !important; }
  .q-largo { grid-column: auto; }
  .arq-painel .topo, .arq-painel main, .arq-painel .rodape { margin-inline: 0; border-radius: 0; border-inline: none; }
  .arq-painel .topo-busca { display: none; }
  .arq-painel .nav { margin-left: 0; }
  /* ⚠️ Em `flex-direction: column` a base flexível passa a ser ALTURA: o
     `flex: 1 1 26rem` que segura o título ao lado das fichas no desktop abria
     364px de vazio no celular. A base volta a ser automática aqui. */
  .painel-cabeca { flex-direction: column; }
  .painel-titulo { flex: 0 0 auto; }
  .equipe-fichas { width: 100%; }
  .agenda-quem { display: none; }   /* a linha já diz cliente, serviço e estado */
  .agenda-hora { width: 2.7rem; }
}

/* cinema — a barbearia como FILME -------------------------------------------

   Referência: white-desert.com. A tese da direção é que a página não descreve
   o lugar, ela te põe dentro dele: mídia sangrando na tela inteira, cromo
   reduzido a botões de contorno fino, uma palavra gigante condensada cortada
   pela borda, e — entre uma cena e outra — páginas brancas com uma frase
   enorme em serifa e muito silêncio em volta.

   O que muda aqui não é cor: é RITMO. Cena escura, respiro branco, cena
   escura. Os outros dezessete modelos entregam informação em blocos seguidos;
   este alterna cheio e vazio, e o vazio é metade do trabalho — encurtar os
   espaços "para caber mais" desmonta o modelo inteiro.
*/
.arq-cinema {
  --regua: color-mix(in srgb, var(--tinta) 12%, transparent);
  line-height: 1.5;
}
.arq-cinema .caixa { width: min(1360px, 100% - 3rem); }
.arq-cinema h1, .arq-cinema h2 { font-weight: 400; letter-spacing: -.005em; }
.arq-cinema h3 { font-family: var(--fonte-titulo); font-weight: 400; }

/* Cromo: retângulo de contorno fino, nunca preenchido. Na referência todo
   botão é uma moldura translúcida — é o que deixa a mídia ser o assunto. */
/* A barra flutua POR CIMA da mídia, mas continua no fluxo: `position:absolute`
   fazia ela encavalar na faixa de demonstração (as duas em y=0), porque a
   posição estática de um elemento absoluto com `left` e `right` definidos não é
   confiável quando há outro elemento absoluto no meio. Margem negativa resolve
   sem depender disso — e a faixa, quando existe, empurra tudo naturalmente. */
.arq-cinema .topo { background: transparent; border-bottom: none; backdrop-filter: none;
                    position: relative; z-index: 30; margin-bottom: -76px; }
.arq-cinema .topo-int { min-height: 76px; }
.arq-cinema .marca-nome { font-family: var(--fonte-display); text-transform: uppercase;
                          letter-spacing: .22em; font-size: .95rem; font-weight: 500; }
.arq-cinema .marca-slogan { display: none; }   /* a capa já diz do que se trata */
.arq-cinema .nav { gap: 0; }
.arq-cinema .nav a { padding: .6rem 1.1rem; font-size: .8rem; border: 1px solid var(--moldura-cinema, currentColor);
                     border-right-width: 0; }
.arq-cinema .nav a:last-child { border-right-width: 1px; }
.arq-cinema .botao { border-radius: 0; border-width: 1px; font-weight: 500;
                     letter-spacing: .02em; text-transform: none; }
.arq-cinema .idiomas { border-radius: 0; }

/* Sobre mídia escura, o cromo inteiro fica branco e translúcido. */
.arq-cinema .hero-cinema ~ * { --sobre-midia: initial; }
.cinema-claro .topo a, .cinema-claro .topo button { color: #fff; }
.cinema-claro .nav a, .cinema-claro .idiomas { border-color: rgba(255,255,255,.45); }
.cinema-claro .nav a:hover { background: rgba(255,255,255,.14); }
.cinema-claro .idiomas a.ativo { background: #fff; color: var(--tinta); }
.cinema-claro .botao-cheio { background: rgba(255,255,255,.14); color: #fff;
                             border-color: rgba(255,255,255,.45); box-shadow: none; }
.cinema-claro .botao-cheio:hover { background: #fff; color: var(--tinta); }

/* ------------------------------- a capa ---------------------------------- */
.hero-cinema { position: relative; min-height: 100svh; padding: 0; overflow: hidden;
               display: flex; flex-direction: column; justify-content: flex-end;
               color: #fff; isolation: isolate; }
.cena-midia { position: absolute; inset: 0; z-index: -2; overflow: hidden; background: var(--fundo-4); }
.cena-midia img, .cena-midia video { width: 100%; height: 100%; object-fit: cover; }
/* A deriva lenta é a "animação" da capa quando não há filme: 28s de escala e
   translação quase imperceptíveis. Não é enfeite — é o que diferencia uma foto
   parada de um plano de cinema. Some inteira em prefers-reduced-motion. */
.cena-midia img { animation: deriva 28s ease-in-out infinite alternate; transform-origin: 54% 46%; }
@keyframes deriva {
  from { transform: scale(1.06) translate3d(0, 0, 0); }
  to   { transform: scale(1.14) translate3d(-1.4%, -1.2%, 0); }
}
/* Véu: o texto branco precisa de piso de contraste sobre foto que não se
   controla. Dois gradientes em vez de um preto chapado — o chapado apaga a
   imagem, que é justamente o conteúdo. */
.hero-cinema::after {
  content: ''; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background: linear-gradient(to bottom, rgba(10,14,22,.46) 0%, rgba(10,14,22,.12) 34%,
                                          rgba(10,14,22,.30) 62%, rgba(10,14,22,.72) 100%);
}
.cinema-int { position: relative; display: flex; align-items: flex-end;
              justify-content: space-between; gap: 2rem; padding-bottom: 1rem; flex-wrap: wrap; }
.cinema-linha { font-family: var(--fonte-titulo); font-style: italic; font-size: 1.05rem;
                line-height: 1.45; max-width: 22ch; text-wrap: balance; }
.cinema-filme { display: inline-flex; align-items: center; gap: .9rem; padding: .85rem 1.3rem;
                border: 1px solid rgba(255,255,255,.45); font-size: .85rem; letter-spacing: .02em; }
.cinema-filme:hover { background: rgba(255,255,255,.14); }
.cinema-filme .ic { flex: none; }

/* A palavra gigante, cortada pela borda de baixo. `clamp` com vw domina: ela
   tem de crescer com a tela, senão deixa de ser um plano e vira um título. */
.cinema-palavra { font-family: var(--fonte-display); text-transform: uppercase;
  font-weight: 500; font-size: clamp(3.5rem, 17.5vw, 17rem); line-height: .78;
  letter-spacing: -.015em; margin: 0 auto -.14em; width: min(1360px, 100% - 3rem);
  color: #fff; white-space: nowrap; overflow: hidden; text-overflow: clip; }
.hero-cinema .numeros { border-top-color: rgba(255,255,255,.3); }
.hero-cinema .numeros dt { color: rgba(255,255,255,.72); }

/* --------------------------- respiro editorial --------------------------- */
/* A página branca entre duas cenas. O tamanho do vazio é o desenho. */
.manifesto { padding: clamp(5rem, 15vh, 11rem) 0; }
.manifesto-rot { display: flex; align-items: center; gap: .9rem; margin-bottom: 2.2rem;
                 font-family: var(--fonte-titulo); font-style: italic; font-size: .95rem;
                 color: var(--tinta-2); }
/* A régua fininha que acompanha o rótulo — na referência é um traço desenhado
   à mão; aqui é uma linha com um laço, em SVG inline no gabarito. */
.manifesto-rot svg { flex: none; opacity: .55; }
.manifesto p { font-family: var(--fonte-titulo); text-transform: uppercase;
  font-size: clamp(1.45rem, 3.5vw, 2.9rem); line-height: 1.16; letter-spacing: -.01em;
  color: var(--tinta); max-width: 20ch; font-weight: 400; margin-bottom: .6em; }
.manifesto p:last-child { margin-bottom: 0; }
@media (min-width: 900px) {
  .manifesto-int { display: grid; grid-template-columns: 3fr 9fr; gap: 0; }
  .manifesto p { max-width: 24ch; }
}

/* ------------------------------ cena com ficha --------------------------- */
/* Banda de mídia inteira com uma ficha encaixada por cima, deslocada. É o
   componente que a referência usa para cada acampamento — aqui, para cada
   serviço de assinatura. */
.cena { position: relative; min-height: clamp(26rem, 62vh, 40rem); display: grid;
        align-items: center; overflow: hidden; isolation: isolate; }
.cena { background: var(--tinta); }
.cena::after { content: ''; position: absolute; inset: 0; z-index: -1;
               background: linear-gradient(90deg, rgba(10,14,22,.42), rgba(10,14,22,.06) 55%); }
.cena-ficha { position: relative; width: min(46rem, 100%); margin-left: auto; margin-right: 0;
              background: color-mix(in srgb, var(--fundo) 88%, transparent);
              backdrop-filter: blur(6px); padding: 2.6rem clamp(1.4rem, 3vw, 3rem) 0;
              text-align: center; }
.cena-ficha h3 { font-size: clamp(1.7rem, 3.4vw, 2.7rem); text-transform: uppercase;
                 letter-spacing: .04em; line-height: 1.1; }
.cena-ficha p { margin: .9rem auto 0; max-width: 46ch; color: var(--tinta-2); font-size: .95rem; }
.cena-arte { margin: 1.8rem calc(clamp(1.4rem, 3vw, 3rem) * -1) 0; position: relative; }
/* Escurece só a faixa de baixo da foto, atrás da coda. Sombra de texto não
   basta: a coda caía sobre a parte clara da imagem e sumia — e ela é justamente
   o dado que decide a compra (duração e ferramenta). */
.cena-arte::after { content: ''; position: absolute; inset: auto 0 0 0; height: 55%;
  background: linear-gradient(transparent, rgba(10,14,22,.82)); pointer-events: none; }
.cena-arte img { width: 100%; aspect-ratio: 16 / 9; object-fit: cover; }
/* A coda técnica: o dado seco entre colchetes, na fonte de display. Na
   referência são as coordenadas do acampamento; aqui é duração e ferramenta —
   a informação que decide a compra, dita sem adjetivo. */
.cena-coda { position: absolute; left: 0; right: 0; bottom: 1.1rem; color: #fff; z-index: 1;
             font-family: var(--fonte-display); font-size: .72rem; letter-spacing: .22em;
             text-transform: uppercase; text-shadow: 0 1px 8px rgba(10,14,22,.6); }

/* ------------------------ lista editorial de serviços -------------------- */
.arq-cinema .lista-itens li { padding: 1.5rem 0; border-color: var(--regua); align-items: baseline; }
.arq-cinema .li-nome { font-family: var(--fonte-titulo); font-size: clamp(1.1rem, 2vw, 1.5rem);
                       font-weight: 400; text-transform: uppercase; letter-spacing: .02em; }
.arq-cinema .li-resumo { font-size: .86rem; }
.arq-cinema .li-pontos { border-bottom-style: solid; border-color: var(--regua); }
.arq-cinema .preco { font-family: var(--fonte-display); font-weight: 400; letter-spacing: .04em; }
.arq-cinema .cabeca { max-width: none; }
.arq-cinema .cabeca h2 { font-size: clamp(1.5rem, 3vw, 2.4rem); text-transform: uppercase;
                         letter-spacing: .03em; }
.arq-cinema .chip { border-radius: 0; border-color: var(--regua); background: none;
                    font-family: var(--fonte-display); letter-spacing: .2em; }
.arq-cinema .cartao { border-radius: 0; border-color: var(--regua); background: none; }
.arq-cinema .secao { padding: clamp(3.5rem, 9vw, 7rem) 0; }
.arq-cinema .retrato { border-radius: 0; width: 100%; height: auto; aspect-ratio: 3 / 4; }
.arq-cinema .pessoa { text-align: left; }
.arq-cinema .pessoa-papel { color: var(--realce); font-family: var(--fonte-display);
                            font-size: .72rem; letter-spacing: .2em; text-transform: uppercase; }
.arq-cinema .aspas blockquote { font-family: var(--fonte-titulo); font-size: 1.15rem; }
.arq-cinema .chamada { background: var(--tinta); color: var(--fundo); }
.arq-cinema .chamada h2 { font-size: clamp(1.6rem, 3.4vw, 2.6rem); }
.arq-cinema .rodape { background: var(--fundo); border-top: 1px solid var(--regua); }

@media (max-width: 860px) {
  .arq-cinema .topo { position: static; background: var(--fundo); }
  .cinema-claro .topo a, .cinema-claro .topo button { color: var(--tinta); }
  .cinema-claro .nav a, .cinema-claro .idiomas { border-color: var(--regua); }
  .hero-cinema { min-height: 86svh; }
  .cinema-int { flex-direction: column; align-items: flex-start; }
  .cena-ficha { margin-inline: auto; }
  .cena { min-height: 0; padding: 3rem 0; }
}

/* Filme no lugar da peça geométrica (ver secoes.html). Herda o raio e a
   proporção do arquétipo — no `papel` fica quadro reto, no `macio` arredondado. */
.hero-arte-filme { background: var(--fundo-3); }
.hero-arte-filme video { width: 100%; height: 100%; object-fit: cover; display: block; }

/* ------------------------------------------- vida na peça da capa */
/*
  Sete das dezoito capas tinham a peça geométrica ocupando meia tela sem dizer
  nada — o `classica` era o pior caso, um retângulo cinza que o olho lê como
  imagem quebrada. A peça existe de propósito (item sem foto NÃO ganha foto de
  banco de imagem, ver o topo de secoes.html); o que faltava era ela estar viva.

  ⚠️ Cada arquétipo ganha um movimento PRÓPRIO, e isso não é capricho: se as
  dezoito capas passassem a ter a mesma animação, o hub perderia exatamente o
  que ele vende, que é cara diferente por modelo. Aros respiram, arcos sobem e
  descem, blocos deslizam, etiquetas balançam, réguas se desenham.

  Todas são lentas (9-16s), de amplitude pequena e em `alternate` — movimento
  que se nota pelo canto do olho e não disputa com o texto. A regra global no
  topo desta folha zera tudo em `prefers-reduced-motion`.
*/

/* editorial (premium, unissex) — os dois aros respiram fora de fase e a ponte
   entre eles pulsa: é uma armação de óculos, e armação não gira. */
.arq-editorial .hero-arte span:nth-child(1) { animation: aro-respira 11s ease-in-out infinite alternate; }
.arq-editorial .hero-arte span:nth-child(2) { animation: aro-respira 11s ease-in-out infinite alternate-reverse; }
.arq-editorial .hero-arte span:nth-child(3) { animation: ponte 11s ease-in-out infinite alternate; }
@keyframes aro-respira { from { transform: scale(1); }   to { transform: scale(1.05); } }
@keyframes ponte       { from { opacity: .45; width: 6%; } to { opacity: 1; width: 10%; } }

/* sereno (lounge, calma) — os arcos sobem e descem devagar, como respiração.
   É o arquétipo do "sem pressa": o movimento tinha de ser o mais lento de todos. */
.arq-sereno .hero-arte span:nth-child(1) { animation: mare 16s ease-in-out infinite alternate; }
.arq-sereno .hero-arte span:nth-child(2) { animation: mare 16s ease-in-out infinite alternate-reverse; }
@keyframes mare { from { transform: translateY(3%); } to { transform: translateY(-4%); } }

/* bloco (escola) — os retângulos deslizam em tempos diferentes, como peças
   sendo encaixadas. */
.arq-bloco .hero-arte span:nth-child(1) { animation: encaixa 9s ease-in-out infinite alternate; }
.arq-bloco .hero-arte span:nth-child(2) { animation: encaixa 9s ease-in-out .9s infinite alternate-reverse; }
.arq-bloco .hero-arte span:nth-child(3) { animation: encaixa 9s ease-in-out 1.8s infinite alternate; }
@keyframes encaixa { from { transform: translate(0, 0); } to { transform: translate(3%, -2.5%); } }

/* tabloide (combos) — as etiquetas balançam de leve, penduradas. */
.arq-tabloide .hero-arte span:nth-child(1) { animation: pendura 10s ease-in-out infinite alternate; }
.arq-tabloide .hero-arte span:nth-child(2) { animation: pendura 10s ease-in-out 1.2s infinite alternate-reverse; }
.arq-tabloide .hero-arte span:nth-child(3) { animation: pendura 10s ease-in-out 2.4s infinite alternate; }
@keyframes pendura { from { transform: rotate(-3deg); } to { transform: rotate(1.5deg); } }

/* papel (classica) — a régua se desenha da esquerda para a direita e o quadro
   vazio ganha um fio de luz. Contenção é a direção deste arquétipo: aqui o
   movimento é o menor da folha. */
.arq-papel .hero-arte span:nth-child(1) { animation: regua 13s ease-in-out infinite alternate; }
.arq-papel .hero-arte span:nth-child(2) { animation: regua 13s ease-in-out 1.5s infinite alternate; }
.arq-papel .hero-arte span:nth-child(3) { animation: aro-respira 13s ease-in-out infinite alternate; }
@keyframes regua { from { width: 18%; opacity: .35; } to { width: 76%; opacity: .9; } }

/* macio (familia, bairro) — as bolhas flutuam. Estes dois já tinham gradiente
   quente e não estavam vazios, mas a peça parada no meio denunciava. */
.arq-macio .hero-arte span:nth-child(1) { animation: flutua 12s ease-in-out infinite alternate; }
.arq-macio .hero-arte span:nth-child(2) { animation: flutua 12s ease-in-out 2s infinite alternate-reverse; }
.arq-macio .hero-arte span:nth-child(3) { animation: flutua 12s ease-in-out 4s infinite alternate; }
@keyframes flutua { from { transform: translate(0, 0) scale(1); } to { transform: translate(-3%, -4%) scale(1.06); } }

/* ============================================================== TEXTURAS */
/* Fundo por ramo. Tudo em gradiente CSS: zero requisição, zero imagem. */
body[class*='tex-'] { background-attachment: fixed; }

.tex-encarte { background-image:
  repeating-linear-gradient(90deg, transparent 0 78px, color-mix(in srgb, var(--tinta) 4%, transparent) 78px 79px); }
.tex-ondas { background-image:
  radial-gradient(120% 60% at 50% -10%, var(--marca-suave), transparent 70%); }
.tex-lentes { background-image:
  radial-gradient(circle at 82% 12%, color-mix(in srgb, var(--marca) 12%, transparent) 0 1px, transparent 1px),
  radial-gradient(circle at 82% 12%, transparent 118px, color-mix(in srgb, var(--tinta) 6%, transparent) 118px 119px, transparent 120px); }
.tex-bolhas { background-image:
  radial-gradient(circle at 12% 8%, var(--marca-suave), transparent 34%),
  radial-gradient(circle at 92% 32%, var(--realce-suave), transparent 30%); }
.tex-brasa { background-image:
  radial-gradient(90% 55% at 50% 0%, color-mix(in srgb, var(--marca) 22%, transparent), transparent 68%); }
.tex-fita { background-image:
  repeating-linear-gradient(-45deg, transparent 0 22px, color-mix(in srgb, var(--tinta) 3%, transparent) 22px 44px); }
.tex-papel { background-image:
  repeating-linear-gradient(0deg, transparent 0 31px, color-mix(in srgb, var(--tinta) 3%, transparent) 31px 32px); }
.tex-planta { background-image:
  linear-gradient(color-mix(in srgb, var(--tinta) 4%, transparent) 1px, transparent 1px),
  linear-gradient(90deg, color-mix(in srgb, var(--tinta) 4%, transparent) 1px, transparent 1px);
  background-size: 46px 46px, 46px 46px; }
.tex-risco { background-image:
  repeating-linear-gradient(135deg, transparent 0 18px, color-mix(in srgb, var(--marca) 6%, transparent) 18px 36px); }
.tex-pontos { background-image:
  radial-gradient(color-mix(in srgb, var(--tinta) 8%, transparent) 1px, transparent 1px);
  background-size: 22px 22px; }
.tex-petala { background-image:
  radial-gradient(80% 50% at 100% 0%, var(--marca-suave), transparent 60%),
  radial-gradient(60% 40% at 0% 100%, var(--realce-suave), transparent 60%); }
.tex-folha { background-image:
  radial-gradient(70% 45% at 8% 4%, var(--marca-suave), transparent 62%); }
.tex-filme { background-image:
  radial-gradient(130% 90% at 50% 50%, transparent 40%, rgba(0,0,0,.55) 100%); }
.tex-nenhuma { background-image: none; }
/* Régua de colunas: as linhas verticais finíssimas que atravessam a página
   inteira na referência, inclusive por cima da mídia. É o que dá a sensação de
   projeto editorial em vez de site montado em blocos. */
.tex-colunas { background-image:
  repeating-linear-gradient(90deg, transparent 0 calc(100% / 6 - 1px),
    color-mix(in srgb, var(--tinta) 16%, transparent) calc(100% / 6 - 1px), transparent calc(100% / 6)); }

/* Aparecer ao rolar. Só entra depois que o JS marca — sem JS, tudo visível. */
.js .revelar { opacity: 0; transform: translateY(18px); transition: opacity .6s ease, transform .6s ease; }
.js .revelar.dentro { opacity: 1; transform: none; }

/* ------------------------------------------------------------ responsivo */
@media (max-width: 860px) {
  .nav { position: fixed; inset: 0 0 auto; top: 72px; flex-direction: column; gap: 0;
         background: var(--fundo); border-bottom: 1px solid var(--traco-2);
         padding: .5rem 1.25rem 1.25rem; display: none; }
  .nav.aberto { display: flex; }
  .nav a { padding: .85rem 0; border-bottom: 1px solid var(--traco-2); }
  .menu-botao { display: grid; place-items: center; }
  .topo-acoes .botao { display: none; }
  .numeros { gap: 1.5rem; }
  .chamada-int { flex-direction: column; align-items: flex-start; }
}

/* ------------------------------------------------------------ hero respiro */
/*
  A capa de quem vende TEMPO (ver a macro `hero_respiro` em secoes.html).

  Toda medida aqui é o contrário da capa padrão, e de propósito: onde a padrão
  aperta, esta afasta; onde a padrão engorda o título, esta afina. Se um dia
  alguém "corrigir" isto para ficar igual às outras, o modelo volta a ser mais
  um retângulo de texto com uma foto do lado.
*/
.hero-respiro { padding: clamp(5rem, 16vh, 11rem) 0 0; overflow: hidden; }
.hero-respiro .hero-int { grid-template-columns: 1fr; gap: 0; }

/* Recuado da margem: o texto não encosta na borda esquerda como um cabeçalho —
   ele fica no meio de um campo de ar, que é o assunto do modelo. */
.hero-respiro .hero-texto { max-width: 36ch; margin-left: clamp(0rem, 9vw, 11rem); }

/* Peso 400 e corpo médio. A capa padrão usa peso 700/800 num corpo enorme;
   aqui a casa fala baixo — é a diferença entre "SEM PRESSA" e sem pressa. */
/* Medida MUITO curta no título, de propósito — e é uma restrição do desenho,
   não um número mágico: esta capa foi feita para título de frases curtas ("Uma
   cadeira. Um cliente. Sem pressa."), e a coluna estreita faz cada frase cair
   na sua linha, virando três afirmações empilhadas. Com a medida do parágrafo
   ela quebrava em "Um cliente. Sem / pressa." e o ritmo — que é o argumento do
   modelo — ia embora.
   ⚠️ Quem for usar `respiro` noutro modelo: título longo aqui vira torre magra.
   Capa que promete calma não comporta manchete de noventa caracteres; se o
   texto for longo, o modelo pede outra variante, não uma medida maior. */
.hero-respiro h1 { font-size: clamp(1.8rem, 3.1vw, 2.85rem); font-weight: 400;
                   line-height: 1.24; letter-spacing: -.008em; max-width: 11ch;
                   text-wrap: pretty; }
.hero-respiro .hero-linha { max-width: 40ch; margin-top: 1.5rem; }
.hero-respiro .hero-acoes { margin-top: 2.6rem; }

/* O horizonte: sangra de ponta a ponta e fecha a tela. Baixo e largo — faixa,
   não bloco. Continua no celular (é a atmosfera do modelo, não enfeite de
   desktop), ao contrário de `.hero-arte`, que some abaixo de 900px. */
.hero-horizonte { margin-top: clamp(3.5rem, 9vh, 7rem);
                  height: clamp(200px, 32vh, 360px); }
.hero-horizonte video { width: 100%; height: 100%; object-fit: cover; display: block; }

/* ------------------------------------------------------ hero cartão gravado */
/* `classica`. A única capa do conjunto com BORDA — é isso que a separa das
   outras à primeira vista. Medida curta e tudo centrado: cartão, não página. */
.hero-cartao { padding: clamp(3rem, 7vw, 5.5rem) 0; }
.cartao-gravado { max-width: 62ch; margin-inline: auto; text-align: center;
                  border: 1px solid var(--marca); border-radius: var(--raio);
                  padding: clamp(1.6rem, 3.5vw, 2.8rem); background: var(--fundo); }
/* A gravura: faixa larga e BAIXA (21:9). Foto em 4:3 dentro de um cartão vira
   "foto com legenda"; deitada, vira ornamento gravado, que é o que se quer. */
.cartao-gravura { aspect-ratio: 21 / 9; overflow: hidden; border-radius: var(--raio-p);
                  margin-bottom: clamp(1.4rem, 3vw, 2.2rem); background: var(--fundo-3); }
.cartao-gravura video { width: 100%; height: 100%; object-fit: cover; display: block; }
.hero-cartao h1 { font-size: clamp(1.7rem, 3.1vw, 2.5rem); line-height: 1.16;
                  padding-bottom: clamp(1rem, 2vw, 1.4rem);
                  border-bottom: 1px solid var(--traco-2); }
.hero-cartao .hero-linha { margin-inline: auto; max-width: 48ch; }
.hero-cartao .hero-acoes { justify-content: center; }

/* ------------------------------------------------------------- hero sala */
/* `lounge`. A mídia é a tela; o texto desce para o canto de baixo. */
.hero-sala { position: relative; min-height: clamp(460px, 76vh, 760px);
             display: flex; align-items: flex-end; padding: 0 0 clamp(2.5rem, 6vh, 4.5rem);
             overflow: hidden; }
.sala-midia { position: absolute; inset: 0; }
.sala-midia video { width: 100%; height: 100%; object-fit: cover; display: block; }
/* O véu. Sem ele o texto some num quadro claro do filme — e quadro claro é
   justamente o que uma sala com janela produz. */
.sala-midia::after { content: ''; position: absolute; inset: 0;
  background: linear-gradient(to top, rgba(12,14,13,.82) 0%, rgba(12,14,13,.5) 34%, rgba(12,14,13,.12) 68%); }
.sala-texto { position: relative; z-index: 1; max-width: 46ch; }
/* Branco fixo, NÃO do tema: sobre vídeo a cor do tema não garante contraste. */
.hero-sala h1, .hero-sala .hero-linha { color: #fff; }
.hero-sala h1 { font-size: clamp(2rem, 4.2vw, 3.4rem); line-height: 1.1; }
.hero-sala .hero-linha { color: rgba(255,255,255,.88); }
.hero-sala .botao-vazado { border-color: rgba(255,255,255,.62); color: #fff; }
.hero-sala .botao-vazado:hover { background: rgba(255,255,255,.14); }

/* --------------------------------------------------------- hero revista */
/* `premium`. Manchete na largura inteira; embaixo, coluna estreita de entrada
   ao lado de mídia que sangra até a borda da JANELA. */
.hero-revista { padding: clamp(3rem, 7vw, 6rem) 0 0; overflow: hidden; }
.hero-revista h1 { font-size: clamp(2.4rem, 6.4vw, 5.4rem); line-height: 1.02;
                   letter-spacing: -.02em; max-width: 20ch; }
.revista-corpo { display: grid; gap: clamp(1.8rem, 4vw, 3rem);
                 margin-top: clamp(2rem, 4vw, 3.2rem); align-items: end; }
.revista-entrada { padding-bottom: clamp(1rem, 3vw, 2.4rem); }
.hero-revista .hero-linha { max-width: 30ch; }
.revista-midia { aspect-ratio: 16 / 10; overflow: hidden; background: var(--fundo-3); }
.revista-midia video { width: 100%; height: 100%; object-fit: cover; display: block; }
@media (min-width: 900px) {
  .revista-corpo { grid-template-columns: minmax(0, 30ch) 1fr; }
  /* O sangramento: leva a mídia da coluna até a borda da janela. */
  .revista-midia { margin-right: calc(50% - 50vw); aspect-ratio: 21 / 10; }
}

/* -------------------------------------------------------- hero contraste */
/* `unissex`. Declaração no alto à esquerda, resposta embaixo à direita, vazio
   no meio — a diagonal É a composição. */
.hero-contraste { padding: clamp(3rem, 7vw, 5.5rem) 0 clamp(2.5rem, 5vw, 4rem); }
.hero-contraste h1 { font-size: clamp(2.1rem, 4.6vw, 3.7rem); font-weight: 300;
                     line-height: 1.12; letter-spacing: .012em; max-width: 17ch; }
/* O vazio do meio é medido, não sobra: é ele que faz a frase respirar como
   declaração em vez de manchete de anúncio. */
.contraste-pe { margin-top: clamp(3.5rem, 11vh, 8rem); display: flex; justify-content: flex-end; }
.contraste-pe > * { text-align: left; }
.hero-contraste .hero-linha { max-width: 42ch; margin-top: 0; }
@media (max-width: 860px) { .contraste-pe { justify-content: flex-start; } }

/* ----------------------------------------------------------- hero portas */
/* `escola`. Duas ofertas, duas portas, um fio entre elas. */
.hero-portas { padding: clamp(3rem, 7vw, 5.5rem) 0; }
.hero-portas h1 { font-size: clamp(2.1rem, 5.2vw, 4rem); line-height: 1.04;
                  letter-spacing: -.02em; max-width: 19ch; }
.hero-portas .hero-linha { max-width: 62ch; }
.portas { display: grid; gap: clamp(1.4rem, 3vw, 2.4rem);
          margin-top: clamp(2.2rem, 5vw, 3.4rem);
          border-top: 1px solid var(--traco-2); padding-top: clamp(1.6rem, 3.5vw, 2.6rem); }
@media (min-width: 820px) {
  .portas { grid-template-columns: 1fr 1fr; }
  /* O fio entre as portas: é ele que diz que são DUAS coisas, não dois botões
     da mesma coisa. */
  .porta-escola { border-left: 1px solid var(--traco-2);
                  padding-left: clamp(1.4rem, 3vw, 2.4rem); }
}
.porta .numeros { margin-top: 1.5rem; }

/* ------------------------------------------------------------ hero único */
/* `cuidado`. Campo alto, uma ação só, e os dados numa faixa fina no pé. */
.hero-unico { padding: clamp(4rem, 12vh, 8rem) 0 0; }
.hero-unico h1 { font-size: clamp(2rem, 4.4vw, 3.5rem); font-weight: 400;
                 line-height: 1.14; max-width: 21ch; }
.hero-unico .hero-linha { max-width: 50ch; }
/* Ação única e GRANDE: o modelo se define pelo botão de agendar ser o único
   ponto de cor da tela — então ele tem o tamanho de quem é o único. */
.hero-unico .hero-acoes { margin-top: clamp(2rem, 4vw, 2.8rem); }
.hero-unico .hero-acoes .botao { padding: .95rem 1.9rem; font-size: 1.04rem; }

/* ------------------------------------------------------- hero diretório */
/* `rede`. O corpo da capa é o índice das lojas — resposta imediata a "quais
   são", antes do endereço completo que vem na seção de unidades. */
.hero-diretorio { padding: clamp(3rem, 7vw, 5rem) 0; }
.hero-diretorio h1 { font-size: clamp(2rem, 4.6vw, 3.6rem); line-height: 1.06;
                     letter-spacing: -.018em; max-width: 18ch; }
.hero-diretorio .hero-linha { max-width: 58ch; }
.diretorio { list-style: none; margin: clamp(2.4rem, 5vw, 3.6rem) 0 0; padding: 0;
             display: grid; gap: 1px; background: var(--traco-2);
             border-block: 1px solid var(--traco-2); }
/* Fundo no `gap` + fundo em cada item = fios de 1px entre as lojas sem
   `border` por item (que somaria e daria fio duplo nas junções). */
.diretorio li { background: var(--fundo); }
.diretorio a { display: block; padding: .95rem 1rem; }
.diretorio a:hover { background: var(--fundo-2); }
.diretorio strong { display: block; font-size: 1rem; letter-spacing: -.01em; }
.diretorio span { display: block; margin-top: .15rem; font-size: .84rem; color: var(--tinta-2); }
@media (min-width: 760px) {
  .diretorio { grid-auto-flow: column; grid-auto-columns: 1fr; }
}

/* ---------------------------------------------------------- hero oferta */
/* `combos`. A etiqueta de preço no lugar onde havia três retângulos. */
.hero-oferta { padding: clamp(3rem, 7vw, 5rem) 0; }
.hero-oferta-int { align-items: center; }
@media (min-width: 900px) { .hero-oferta-int { grid-template-columns: 1fr auto; } }
.hero-oferta h1 { font-size: clamp(2.1rem, 5vw, 3.9rem); line-height: 1.04; letter-spacing: -.022em; }
.etiqueta-preco { display: grid; justify-items: center; gap: .25rem; text-align: center;
                  padding: clamp(1.6rem, 3.5vw, 2.4rem) clamp(2rem, 4.5vw, 3.2rem);
                  border-radius: var(--raio); background: var(--marca); color: var(--marca-tinta);
                  box-shadow: 0 12px 30px rgba(16,18,26,.14); }
.etiqueta-nome { font-size: .84rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
                 opacity: .88; }
.etiqueta-antes { font-size: 1rem; opacity: .72; text-decoration: line-through; }
/* O "número gordo" que o modelo promete e não tinha. */
.etiqueta-valor { font-size: clamp(2.4rem, 5.4vw, 3.6rem); font-weight: 800;
                  line-height: 1; letter-spacing: -.03em; font-variant-numeric: tabular-nums; }

/* ------------------------------------------------------------- ARQ-BRAND */
/* Inspirado em brand.squarespace.com: rigor editorial suíço, fundo escuro,
   bordas hairline (1px), indexação mono ( 01 ), tipografia em caixa alta e
   precisão arquitetônica. */
.arq-brand {
  --regua-brand: rgba(255, 255, 255, 0.12);
  --regua-suave: rgba(255, 255, 255, 0.06);
  letter-spacing: -0.01em;
}
.arq-brand .caixa { width: min(1280px, 100% - 3.5rem); }

/* Tipografia */
.arq-brand h1, .arq-brand h2 {
  text-transform: uppercase;
  letter-spacing: -0.025em;
  font-weight: 500;
}
.arq-brand .chip, .arq-brand .saudacao, .arq-brand .rotulo, .arq-brand .trilha-n {
  font-family: ui-monospace, SFMono-Regular, "JetBrains Mono", Menlo, monospace;
  font-size: 0.78rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

/* Header / Topo */
.arq-brand .topo {
  border-bottom: 1px solid var(--regua-brand);
  background: rgba(18, 20, 24, 0.85);
  backdrop-filter: blur(12px);
}
.arq-brand .marca-nome {
  font-family: var(--fonte-titulo);
  text-transform: uppercase;
  letter-spacing: 0.12em;
  font-weight: 600;
  font-size: 0.95rem;
}
.arq-brand .nav a {
  font-size: 0.82rem;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

.arq-brand .idiomas {
  border-radius: 2px;
  border: 1px solid var(--regua-brand);
  background: rgba(255, 255, 255, 0.03);
  padding: 2px;
}
.arq-brand .idiomas a {
  border-radius: 2px;
  font-family: ui-monospace, SFMono-Regular, monospace;
  font-size: 0.66rem;
  letter-spacing: 0.08em;
  color: rgba(255, 255, 255, 0.5);
}
.arq-brand .idiomas a:hover {
  color: #ffffff;
}
.arq-brand .idiomas a.ativo {
  background: #ffffff;
  color: #121418;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
}

/* Botões */
.arq-brand .botao {
  border-radius: 2px;
  font-family: ui-monospace, SFMono-Regular, monospace;
  font-size: 0.8rem;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  padding: 0.75rem 1.4rem;
  transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
}
.arq-brand .botao-cheio {
  background: #ffffff;
  color: #0b0d10;
  border: 1px solid #ffffff;
}
.arq-brand .botao-cheio:hover {
  background: transparent;
  color: #ffffff;
}
.arq-brand .botao-vazado {
  border: 1px solid var(--regua-brand);
  color: #ffffff;
}
.arq-brand .botao-vazado:hover {
  background: rgba(255, 255, 255, 0.08);
  border-color: rgba(255, 255, 255, 0.3);
}

/* Hero Editorial Brand */
.arq-brand .hero-editorial {
  padding: clamp(4rem, 8vw, 7rem) 0;
  border-bottom: 1px solid var(--regua-brand);
}
.arq-brand .hero-editorial .hero-int {
  gap: clamp(2rem, 5vw, 4rem);
  align-items: center;
}
.arq-brand .hero-editorial h1 {
  font-size: clamp(2.4rem, 5.5vw, 4.4rem);
  line-height: 0.96;
}
.arq-brand .hero-editorial .hero-linha {
  font-size: clamp(1.05rem, 1.6vw, 1.25rem);
  color: var(--tinta-2);
  line-height: 1.5;
  max-width: 52ch;
  margin: 1.5rem 0 2rem;
}
.arq-brand .hero-editorial .chip-forte {
  background: transparent;
  border: 1px solid var(--regua-brand);
  color: var(--tinta);
  padding: 0.35rem 0.75rem;
  border-radius: 2px;
  display: inline-block;
  margin-bottom: 1.5rem;
}

/* Moldura técnica da arte da capa (Squarespace Frame Mask) */
.arq-brand .hero-editorial .hero-arte {
  border-radius: 2px;
  border: 1px solid var(--regua-brand);
  background: radial-gradient(circle at 50% 50%, rgba(255, 255, 255, 0.05) 0%, transparent 70%),
              linear-gradient(to bottom, #16181d, #0e1014);
  aspect-ratio: 4 / 3;
  position: relative;
  overflow: hidden;
  box-shadow: 0 20px 40px rgba(0, 0, 0, 0.4);
}
.arq-brand .hero-editorial .hero-arte::before {
  content: '+';
  position: absolute;
  top: 12px;
  left: 12px;
  font-family: ui-monospace, monospace;
  font-size: 14px;
  color: var(--regua-brand);
  z-index: 2;
}
.arq-brand .hero-editorial .hero-arte::after {
  content: '+';
  position: absolute;
  bottom: 12px;
  right: 12px;
  font-family: ui-monospace, monospace;
  font-size: 14px;
  color: var(--regua-brand);
  z-index: 2;
}
.arq-brand .hero-editorial .hero-arte span:nth-child(1) {
  inset: 12% auto auto 12%;
  width: 50%;
  height: 50%;
  border: 1px solid var(--regua-brand);
  border-radius: 2px;
  background: rgba(255, 255, 255, 0.02);
}
.arq-brand .hero-editorial .hero-arte span:nth-child(2) {
  inset: auto 14% 14% auto;
  width: 44%;
  height: 44%;
  border: 1px dashed rgba(255, 255, 255, 0.2);
  border-radius: 2px;
}
.arq-brand .hero-editorial .hero-arte span:nth-child(3) {
  inset: 48% 0 auto 0;
  width: 100%;
  height: 1px;
  background: var(--regua-brand);
  border: none;
}

/* Seções e Grade */
.arq-brand .secao {
  padding: clamp(4rem, 8vw, 6.5rem) 0;
  border-bottom: 1px solid var(--regua-brand);
}
.arq-brand .cabeca h2 {
  font-size: clamp(1.6rem, 3.2vw, 2.6rem);
}
.arq-brand .cartao {
  background: #14161a;
  border: 1px solid var(--regua-brand);
  border-radius: 2px;
  padding: 1.8rem;
  transition: border-color 0.2s ease;
}
.arq-brand .cartao:hover {
  border-color: rgba(255, 255, 255, 0.35);
}

/* Passos com numeração em destaque */
.arq-brand .trilha {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 1.5rem;
}
.arq-brand .trilha li {
  border: 1px solid var(--regua-brand);
  padding: 2rem;
  background: #121418;
  border-radius: 2px;
}
.arq-brand .trilha-n {
  color: #ffffff;
  border-bottom: 1px solid var(--regua-brand);
  padding-bottom: 0.5rem;
  margin-bottom: 1rem;
  display: block;
}

/* Fichas de Serviço (Itens) */
.arq-brand .lista-itens li {
  border-bottom: 1px solid var(--regua-brand);
  padding: 1.4rem 0;
}
.arq-brand .li-nome {
  text-transform: uppercase;
  font-family: var(--fonte-titulo);
  font-size: 1.15rem;
  letter-spacing: 0.02em;
}
.arq-brand .preco {
  font-family: ui-monospace, monospace;
  font-size: 1.1rem;
  color: #ffffff;
}

/* Rodapé e Faixa */
.arq-brand .faixa {
  border-bottom: 1px solid var(--regua-brand);
  background: #0e1013;
}
.arq-brand .rodape {
  border-top: 1px solid var(--regua-brand);
  background: #090a0c;
}

/* Hero com Filme e Efeito Frame Mask Squarespace */
.arq-brand .hero-editorial .hero-arte-filme {
  position: relative;
  border-radius: 2px;
  border: 1px solid var(--regua-brand);
  background: #090a0d;
  aspect-ratio: 16 / 10;
  overflow: hidden;
  box-shadow: 0 24px 60px rgba(0, 0, 0, 0.75);
  transition: border-color 0.3s ease;
}
.arq-brand .hero-editorial .hero-arte-filme:hover {
  border-color: rgba(255, 255, 255, 0.4);
}
.arq-brand .hero-editorial .hero-arte-filme video {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  filter: contrast(1.08) brightness(0.92);
  transition: transform 0.6s cubic-bezier(0.16, 1, 0.3, 1);
}
.arq-brand .hero-editorial .hero-arte-filme:hover video {
  transform: scale(1.03);
}

/* Retículas técnicas nos cantos */
.arq-brand .hero-editorial .hero-arte-filme::before {
  content: '+';
  position: absolute;
  top: 14px;
  left: 14px;
  font-family: ui-monospace, monospace;
  font-size: 14px;
  color: rgba(255, 255, 255, 0.75);
  z-index: 5;
  pointer-events: none;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.8);
}
.arq-brand .hero-editorial .hero-arte-filme::after {
  content: '+';
  position: absolute;
  bottom: 50px;
  right: 14px;
  font-family: ui-monospace, monospace;
  font-size: 14px;
  color: rgba(255, 255, 255, 0.75);
  z-index: 5;
  pointer-events: none;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.8);
}

/* Barra de Interface sobre o vídeo da capa (Squarespace Motion UI) */
.arq-brand .brand-ui {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  padding: 0.75rem 1.2rem;
  background: linear-gradient(to top, rgba(12, 14, 18, 0.95) 0%, rgba(12, 14, 18, 0.6) 70%, transparent 100%);
  display: flex;
  align-items: center;
  justify-content: space-between;
  border-top: 1px solid var(--regua-brand);
  z-index: 6;
  font-family: ui-monospace, SFMono-Regular, "JetBrains Mono", monospace;
  font-size: 0.74rem;
  letter-spacing: 0.08em;
  color: rgba(255, 255, 255, 0.88);
}
.arq-brand .brand-status {
  display: flex;
  align-items: center;
  gap: 0.5rem;
}
.arq-brand .brand-ponto {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: #79d28d;
  box-shadow: 0 0 8px #79d28d;
  animation: pulso-brand 2s infinite ease-in-out;
}
@keyframes pulso-brand {
  0%, 100% { opacity: 1; transform: scale(1); }
  50% { opacity: 0.35; transform: scale(0.8); }
}
.arq-brand .brand-controles {
  display: flex;
  gap: 0.35rem;
}
.arq-brand .brand-btn {
  background: rgba(255, 255, 255, 0.06);
  border: 1px solid var(--regua-brand);
  color: #fff;
  padding: 0.2rem 0.6rem;
  border-radius: 2px;
  cursor: pointer;
  font-size: 0.72rem;
  transition: all 0.15s ease;
}
.arq-brand .brand-btn:hover {
  background: #ffffff;
  color: #0c0e14;
}

/* Galeria de Fotos de Cortes */
.arq-brand .mosaico {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: 1.2rem;
}
.arq-brand .mos {
  border: 1px solid var(--regua-brand);
  border-radius: 2px;
  overflow: hidden;
  background: #14161a;
  transition: border-color 0.25s ease, transform 0.25s ease;
  display: block;
  text-decoration: none;
}
.arq-brand .mos:hover {
  border-color: rgba(255, 255, 255, 0.45);
  transform: translateY(-3px);
}
.arq-brand .mos .arte {
  aspect-ratio: 4 / 3;
  overflow: hidden;
  position: relative;
  background: #0d0f12;
}
.arq-brand .mos .arte img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  filter: grayscale(25%) contrast(1.05);
  transition: transform 0.5s cubic-bezier(0.16, 1, 0.3, 1), filter 0.5s ease;
}
.arq-brand .mos:hover .arte img {
  transform: scale(1.06);
  filter: grayscale(0%) contrast(1.12);
}
.arq-brand .mos-txt {
  padding: 0.9rem 1.1rem;
  font-family: var(--fonte-titulo);
  text-transform: uppercase;
  font-size: 0.92rem;
  letter-spacing: 0.04em;
  display: block;
  border-top: 1px solid var(--regua-brand);
  color: #e9edf5;
}

/* Efeito Spotlight / Glow nos Cartões */
.arq-brand .cartao {
  position: relative;
  overflow: hidden;
}
.arq-brand .cartao::before {
  content: '';
  position: absolute;
  inset: -1px;
  border-radius: 2px;
  background: radial-gradient(350px circle at 50% 0%, rgba(255, 255, 255, 0.06), transparent 70%);
  opacity: 0.6;
  transition: opacity 0.3s ease;
  pointer-events: none;
}
.arq-brand .cartao:hover::before {
  opacity: 1;
  background: radial-gradient(350px circle at 50% 0%, rgba(255, 255, 255, 0.12), transparent 70%);
}

/* ------------------------------------------------------------- movimento */
/*
  A capa fica escondida ENQUANTO o movimento está autorizado e ainda não
  começou — ver `movimento.js`. Sem isto, a página pinta a capa e o primeiro
  quadro da animação a apaga: o visitante vê o conteúdo aparecer e sumir.

  A classe `mov` entra inline no <head> (antes desta folha) e é removida pelo
  `movimento.js` assim que os estados iniciais estão prontos — ou logo de cara,
  se o GSAP não carregar, ou por prazo de segurança de 2,5s. Em nenhum caminho
  a capa fica presa: é a mesma disciplina do `.js .revelar`, que existe aqui
  desde sempre justamente porque esconder-e-contar-com-o-script é como uma
  página fica em branco quando o script falha.
*/
.mov .hero { opacity: 0; }

/* Com GSAP no comando, a transição CSS do revelar sairia brigando com a
   timeline pelo mesmo `opacity`/`transform`. Quem anima é um só. */
.mov .revelar { transition: none; }

/* ═══════════════════════════════════ AGENDAR ═══════════════════════════════
   A tela de marcar horário. Um passo de cada vez, porque cada escolha muda a
   seguinte: os dias com vaga dependem da duração do serviço, e os horários
   dependem do dia e de quem atende.

   O passo que ainda não chegou fica `hidden` — não desbotado. Opção visível e
   inerte faz o visitante clicar e achar que a página travou.
   ========================================================================= */

.agendar .ag-passos { display: grid; gap: 1.6rem; max-width: 760px; }
.ag-rot {
  display: flex; align-items: center; gap: .6rem;
  margin: 0 0 .7rem; font-weight: 650; font-size: .98rem; color: var(--tinta);
}
.ag-rot b {
  width: 26px; height: 26px; flex: none; border-radius: 50%;
  display: grid; place-items: center; background: var(--marca);
  color: var(--sobre-marca); font-size: .8rem; font-weight: 700;
}

.ag-opcoes { display: grid; gap: .6rem; grid-template-columns: repeat(auto-fill, minmax(min(100%, 210px), 1fr)); }
.ag-opcao {
  display: block; text-align: left; cursor: pointer;
  padding: .8rem .95rem; border-radius: var(--raio-p);
  border: 1.5px solid var(--traco); background: transparent; color: inherit;
  transition: border-color .16s ease, transform .16s ease, background .16s ease;
}
.ag-opcao:hover { border-color: var(--marca); transform: translateY(-2px); }
.ag-opcao strong { display: block; font-size: .95rem; font-weight: 650; }
.ag-opcao span { display: block; margin-top: .15rem; font-size: .82rem; opacity: .72; }
.ag-opcao.escolhido { border-color: var(--marca); background: var(--marca); color: var(--sobre-marca); }
.ag-opcao.escolhido span { opacity: .85; }
.ag-dia strong { font-variant-numeric: tabular-nums; }

/* Os horários são muitos e curtos: cabem numa fita, e fita lê mais rápido que
   grade quando o olho procura "tem alguma coisa depois das 15h?". */
.ag-horas { display: flex; flex-wrap: wrap; gap: .45rem; }
.ag-hora {
  cursor: pointer; padding: .5rem .8rem; border-radius: 999px;
  border: 1.5px solid var(--traco); background: transparent; color: inherit;
  font-variant-numeric: tabular-nums; font-size: .9rem; font-weight: 600;
  transition: border-color .16s ease, background .16s ease;
}
.ag-hora:hover { border-color: var(--marca); }
.ag-hora.escolhido { background: var(--marca); color: var(--sobre-marca); border-color: var(--marca); }

.ag-resumo { margin: 0 0 .8rem; font-weight: 650; color: var(--marca); }
.ag-form { display: grid; gap: .8rem; max-width: 460px; }
.ag-form label { display: grid; gap: .3rem; font-size: .88rem; font-weight: 600; }
.ag-form input, .ag-form textarea {
  padding: .7rem .85rem; border-radius: var(--raio-p);
  border: 1.5px solid var(--traco); background: transparent; color: inherit;
  font: inherit; font-weight: 400;
}
.ag-form input:focus, .ag-form textarea:focus { outline: 2px solid var(--marca); outline-offset: 1px; }

.ag-vazio, .ag-aviso { margin: .4rem 0 0; font-size: .9rem; opacity: .8; }
.ag-aviso { color: var(--marca); font-weight: 600; }

.ag-pronto {
  padding: 1.4rem 1.5rem; border-radius: var(--raio);
  border: 2px solid var(--marca); display: grid; gap: .4rem;
}
.ag-pronto-tit { margin: 0; font-weight: 700; font-size: 1.1rem; }
.ag-codigo {
  margin: 0; font-size: 2rem; font-weight: 800; letter-spacing: .18em;
  color: var(--marca); font-variant-numeric: tabular-nums;
}
.ag-detalhe { margin: 0; font-size: .95rem; }
.ag-dica { margin: .2rem 0 0; font-size: .85rem; opacity: .75; }

/* ═══════════════════════════ NO CELULAR ════════════════════════════════════
   O motor já nasceu fluido — a grade de itens, a equipe e os painéis empilham
   sozinhos, e nenhum dos modelos rola para o lado. O que faltava era o que só
   aparece com o DEDO na tela, não com o ponteiro.
   ========================================================================= */

/* A barra do topo é `sticky`, então todo link de âncora (#contato, #agendar,
   #unidades) parava com o título da seção ESCONDIDO atrás dela. Vale nas duas
   telas, mas no telefone é pior: a barra ocupa proporcionalmente mais altura.
   Uma folga a mais do que a barra tem, para o título não encostar nela. */
.secao[id],
section[id],
#conteudo {
  scroll-margin-top: 88px;
}

@media (max-width: 720px) {
  /* Área de toque: só ÁREA. O texto continua do mesmo tamanho e no mesmo
     lugar; o que cresce é a região que responde ao dedo. 44px é a medida que
     Apple e Google recomendam, e o par EN/PT tinha 27. */
  .idiomas a,
  .nav a,
  .marca-nome,
  .quadro-acao,
  .li-nome {
    display: inline-flex;
    align-items: center;
    min-height: 44px;
  }
  .idiomas a { padding-inline: .8rem; }

  /* Os filtros de painel (Tudo/A seguir/Feitos, Semana/Mês/Ano) e os chips de
     categoria são pílulas pequenas coladas umas nas outras — o erro de toque
     cai na vizinha. */
  .seg, .chip { min-height: 40px; padding-inline: 1rem; }

  /* Os links do rodapé ficam empilhados e a 24px de altura: no telefone o
     rodapé é onde se procura "Contato", e cada linha precisa do próprio alvo. */
  .rodape-col a {
    display: inline-flex;
    align-items: center;
    min-height: 44px;
  }

  /* O balão de conversa fica sobre o conteúdo no rodapé de qualquer página.
     Ele é o principal caminho de contato destes sites e por isso continua
     flutuando, mas encolhe e sobe um pouco, para não cobrir a última linha. */
  .zap-flutua { width: 52px; height: 52px; bottom: 16px; right: 16px; }
}
