/* ==========================================================================
   MeCusta — folha de estilo compartilhada
   Trocar a marca: busque por "MeCusta" no HTML. As cores ficam aqui embaixo.

   Fontes (Fraunces / Hanken Grotesk): carregadas via <link> no <head> do
   layout (src/layouts/Layout.astro), não mais por @import aqui — @import
   dentro do CSS cria uma cadeia de requisição extra (baixa o CSS, só depois
   descobre e baixa a fonte). Ver Layout.astro para o <link rel="preconnect">
   + <link rel="stylesheet"> equivalente.
   ========================================================================== */

:root {
  /* Paleta — confeitaria sem o clichê do creme + terracota.
     Cacau escuro como tinta, framboesa como destaque, verde para "dinheiro". */
  --paper:      #FBF7F2;
  --blush:      #F6E9E3;
  --blush-2:    #F1DDD4;
  --ink:        #2E2024;
  --ink-soft:   #6E5C60;
  --ink-faint:  #9C8B8F;
  --rasp:       #B5346A;
  --rasp-dark:  #8A2351;
  --rasp-bg:    #FBE7EE;
  --accent-hover: #8A2351;   /* fundo do botão no hover (separado do texto de link) */
  --green:      #2F6B4F;
  --green-dark: #245540;
  --green-bg:   #E5F0E9;
  --line:       #E7D8D0;
  --line-soft:  #F0E5DE;

  /* superfícies e apoio (variáveis para o modo escuro trocar) */
  --surface:    #ffffff;                 /* "branco" dos cartões */
  --on-accent:  #ffffff;                 /* texto sobre a framboesa */
  --header-bg:  rgba(251, 247, 242, 0.9);
  --shadow-1:   0 1px 0 var(--line-soft), 0 18px 40px -28px rgba(46, 32, 36, 0.25);
  --shadow-2:   0 18px 50px -34px rgba(46, 32, 36, 0.4);
  --seg-ing:    #C9A38F;
  --seg-emb:    #8FB8A2;
  --seg-extra:  #E08AAE;
  --teaser-end: #ffffff;                 /* fim do gradiente do card premium */

  --radius:   14px;
  --radius-sm: 9px;
  --maxw:     1080px;

  --font-display: 'Fraunces', Georgia, serif;
  --font-sans:    'Hanken Grotesk', system-ui, -apple-system, sans-serif;
}

/* ==========================================================================
   Modo escuro — não é inversão: fundo cacau quase-preto (não preto puro),
   texto creme (não branco puro), e os acentos clareados + dessaturados para
   saltarem no escuro sem "vibrar". As relações de cor são mantidas.
   ========================================================================== */
:root[data-theme="dark"] {
  --paper:      #181215;   /* fundo carvão-ameixa quente (não preto puro) */
  --blush:      #211A1E;   /* painel de resultado / superfícies suaves */
  --blush-2:    #2E2429;   /* linhas internas */
  --ink:        #ECE5E2;   /* texto principal (creme suave, não branco puro) */
  --ink-soft:   #B3A6AA;
  --ink-faint:  #82747A;
  --rasp:       #C94F80;   /* framboesa sólida e sóbria (botões e acentos) */
  --rasp-dark:  #E6A2C0;   /* texto de link/acento: rosa claro p/ ler no escuro */
  --rasp-bg:    #33202A;   /* chips/realces rosados escuros */
  --accent-hover: #B14472; /* hover dos botões: um tom mais fundo, texto claro legível */
  --green:      #4FAE82;   /* verde do "dinheiro", refinado */
  --green-dark: #63C79A;   /* preço/lucro em verde nítido (não neon) */
  --green-bg:   #1B3126;
  --line:       #34292E;
  --line-soft:  #292024;

  --surface:    #221B1F;   /* cartões: superfície escura elevada */
  --on-accent:  #FBEFF3;   /* texto claro sobre a framboesa */
  --header-bg:  rgba(24, 18, 21, 0.85);
  --shadow-1:   0 1px 0 rgba(255,255,255,0.02), 0 18px 40px -28px rgba(0, 0, 0, 0.6);
  --shadow-2:   0 18px 50px -34px rgba(0, 0, 0, 0.7);
  --seg-ing:    #C39A86;
  --seg-emb:    #6FB194;
  --seg-extra:  #D084A8;
  --teaser-end: #221B1F;
}

/* ==========================================================================
   Nicho: Salgaderia — mesma identidade (base quente + acento + verde-dinheiro),
   só o acento muda: framboesa -> páprica/terracota (apetitoso, caseiro).
   Aplica-se em qualquer página com data-nicho="salgaderia".
   ========================================================================== */
:root[data-nicho="salgaderia"] {
  --rasp:       #C05A2A;   /* páprica / terracota */
  --rasp-dark:  #9C4620;
  --rasp-bg:    #FBE8DD;
  --accent-hover: #9C4620;
}
:root[data-theme="dark"][data-nicho="salgaderia"] {
  --rasp:       #D9743E;   /* terracota clareada para o escuro */
  --rasp-dark:  #ECAF87;   /* texto de acento claro, legível no escuro */
  --rasp-bg:    #3A2417;
  --accent-hover: #C0602C;
}

/* Cor da salgaderia "fixa" (não trocada por data-nicho) — mesmos valores do
   bloco acima, só que disponível em qualquer página, mesmo quando ela não
   está inteira no nicho salgaderia. Usada pelo blog, que mistura artigos de
   confeitaria (usa --rasp normal) e salgaderia (usa --salgaderia-accent) na
   mesma página de listagem (ArticleCard.astro / CategoryBanner.astro). */
:root {
  --salgaderia-accent:    #C05A2A;
  --salgaderia-accent-dark: #9C4620;
  --salgaderia-accent-bg:   #FBE8DD;
}
:root[data-theme="dark"] {
  --salgaderia-accent:    #D9743E;
  --salgaderia-accent-dark: #ECAF87;
  --salgaderia-accent-bg:   #3A2417;
}

/* ==========================================================================
   FUNCIONALIDADE DESATIVADA  ·  Container mais largo para o artigo do blog
   Motivo:
     ArticleLayout.astro usava a prop `wide` do Layout (--maxw: 1240px em vez
     de 1080px) achando que o texto corrido, a calculadora e o gráfico de
     composição do custo precisavam de mais espaço. Na prática isso deixou o
     artigo mais largo que todas as outras páginas do site (blog index,
     confeitaria, salgaderia, premium), quebrando a uniformidade pedida.
   Como restaurar:
     1. Descomente o bloco `:root[data-wide="true"]` abaixo.
     2. Em src/layouts/ArticleLayout.astro, adicione de volta `wide` (sem
        valor) nas props passadas ao <Layout>.
   ==========================================================================
:root[data-wide="true"] {
  --maxw: 1240px;
}
   ========================================================================== */

/* transição suave ao trocar de tema */
body, .calc, .result, .price-hero, .stat, .fornada, .feature, .pricing,
.honesty-note, .upsell-note, .site-header, input, .theme-toggle, .adblock-note {
  transition: background-color .2s ease, border-color .2s ease, color .2s ease;
}

/* ==========================================================================
   Transição entre páginas (View Transitions API nativa do navegador)
   Objetivo: ao trocar de nicho pelo menu (Confeitaria <-> Salgaderia, e
   qualquer calculadora nova que entrar depois), a sensação deve ser de
   continuidade — o header não "pisca", a barra que marca a aba ativa desliza
   até a nova posição, o espaço de anúncio não some/pisca, e o resto da
   página faz um cross-fade rápido em vez de trocar de golpe.

   Como funciona: o navegador tira um "retrato" da página antiga e da nova
   e anima a diferença entre elas. Elementos com o mesmo view-transition-name
   nas duas páginas são casados e animados como se fossem o mesmo elemento
   (é assim que a barrinha ativa "desliza" de uma aba pra outra). Elementos
   sem nome entram no cross-fade geral da página (dá conta de textos/cores
   que mudam, como o acento framboesa -> terracota).

   100% progressivo: navegador sem suporte ignora a regra @view-transition e
   navega do jeito de sempre — nada quebra, não precisa de JS nem de fallback.
   É a MESMA API que o Astro usa por baixo do recurso de View Transitions
   (<ClientRouter />) — ao migrar, dá pra reaproveitar esses mesmos nomes
   quase sem alteração, só trocando @view-transition pelo componente do Astro.

   Regra para páginas novas (ex.: calculadora de pizza): use as mesmas
   classes .site-header / .nav a.nicho.active / .ad-slot--rect / .ad-slot--banner
   — a transição funciona automaticamente, sem precisar escrever nada aqui.
   ========================================================================== */
@view-transition {
  navigation: auto;
}

.site-header { view-transition-name: mc-header; }
.nav a.nicho.active::after,
.nav a.nav-blog.active::after { view-transition-name: mc-nav-underline; }
.ad-slot--rect { view-transition-name: mc-ad-rect; }
.ad-slot--banner { view-transition-name: mc-ad-banner; }

/* Curva de easing própria (em vez do "ease" padrão), mais lenta na saída e
   rápida na chegada — é o que faz a troca de página parecer uma transição
   desenhada, e não um corte brusco. Os grupos com nome (header, sublinhado
   do menu, anúncios) se movem rápido: eles normalmente não mudam de
   posição/tamanho entre páginas, então uma duração curta evita qualquer
   sensação de "atraso" neles enquanto o resto da página ainda cruza. */
::view-transition-group(*) {
  animation-duration: .32s;
  animation-timing-function: cubic-bezier(.22, 1, .36, 1);
}
::view-transition-group(mc-header),
::view-transition-group(mc-nav-underline),
::view-transition-group(mc-ad-rect),
::view-transition-group(mc-ad-banner) {
  animation-duration: .22s;
}

/* Conteúdo sem nome (a página toda, fora dos elementos compartilhados acima)
   troca com um cross-fade + leve deslocamento vertical, em vez do cross-fade
   plano padrão do navegador — sutil o bastante para não chamar atenção, mas
   suficiente para não parecer um "corte" entre uma página e outra. */
::view-transition-old(root) {
  animation: mc-page-out .22s cubic-bezier(.4, 0, 1, 1) both;
}
::view-transition-new(root) {
  animation: mc-page-in .32s cubic-bezier(.22, 1, .36, 1) both;
}
@keyframes mc-page-out {
  to { opacity: 0; transform: translateY(-6px); }
}
@keyframes mc-page-in {
  from { opacity: 0; transform: translateY(10px); }
}

* { box-sizing: border-box; margin: 0; padding: 0; }

html { scroll-behavior: smooth; }

body {
  font-family: var(--font-sans);
  background: var(--paper);
  color: var(--ink);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  font-feature-settings: "tnum" 0;
}

.wrap { width: 100%; max-width: var(--maxw); margin: 0 auto; padding: 0 22px; }

a { color: var(--rasp-dark); text-decoration: none; }
a:hover { text-decoration: underline; }

/* Foco visível padrão (teclado) para links/botões que não têm um estilo de
   foco próprio — acessibilidade sem mudar a aparência de quem já tem o seu
   (.info-tip, input, etc. continuam com o próprio :focus-visible, que é mais
   específico e não é afetado por esta regra genérica). */
a:focus-visible,
button:focus-visible,
summary:focus-visible {
  outline: 2px solid var(--rasp);
  outline-offset: 2px;
  border-radius: 4px;
}

/* ---- Header ------------------------------------------------------------- */
.site-header {
  border-bottom: 1px solid var(--line);
  background: var(--header-bg);
  backdrop-filter: blur(6px);
  position: sticky; top: 0; z-index: 50;
}
.site-header .wrap {
  display: flex; align-items: center; justify-content: space-between;
  height: 66px;
  gap: 10px;   /* espaço mínimo garantido entre logo e menu — sem isso, em
                  telas bem estreitas o space-between "zera" e o menu encosta
                  no logo (ver ajustes de celular mais abaixo). */
}
.brand {
  font-family: var(--font-display);
  font-weight: 600; font-size: 21px; color: var(--ink);
  display: flex; align-items: center; gap: 9px;
}
.brand:hover { text-decoration: none; }

/* ===========================================================================
   FUNCIONALIDADE SUBSTITUÍDA  ·  .dot como círculo sólido (cor --rasp)
   Motivo: trocado pelo logo de verdade (tigela), que já muda sozinho
   conforme tema e nicho — ver as regras de background-image logo abaixo.
   Como restaurar: descomente o bloco abaixo e remova as regras de
   background-image que vêm depois dele.
   ---------------------------------------------------------------------------
   .brand .dot {
     width: 10px; height: 10px; border-radius: 50%;
     background: var(--rasp); display: inline-block;
   }
   =========================================================================== */

/* Logo (tigela) no lugar do antigo ponto sólido — 4 imagens pré-normalizadas
   (mesmo canvas/enquadramento) em public/logo/: confeitaria/salgaderia ×
   claro/escuro. Troca automática por seletor composto em data-theme +
   data-nicho, sem JS — mesmo padrão já usado para as variáveis de cor do
   site (ver bloco "Nicho: Salgaderia" no topo deste arquivo). */
.brand .dot {
  width: 26px; height: 24px; display: inline-block;
  background-image: url('/logo/logo-confeitaria-light.png');
  background-size: contain; background-repeat: no-repeat; background-position: center;
}
:root[data-theme="dark"] .brand .dot {
  background-image: url('/logo/logo-confeitaria-dark.png');
}
:root[data-nicho="salgaderia"] .brand .dot {
  background-image: url('/logo/logo-salgaderia-light.png');
}
:root[data-theme="dark"][data-nicho="salgaderia"] .brand .dot {
  background-image: url('/logo/logo-salgaderia-dark.png');
}
.nav { display: flex; align-items: center; gap: 26px; }
.nav a { color: var(--ink-soft); font-weight: 500; font-size: 15px; transition: color .15s ease; }
.nav a:hover { color: var(--ink); text-decoration: none; }
.nav a.nicho, .nav a.nav-blog { position: relative; }
.nav a.nicho.active { color: var(--rasp-dark); font-weight: 600; }
/* Mesma barrinha embaixo da aba ativa, seja um nicho (Confeitaria/Salgaderia)
   ou o Blog — para os três terem a mesma sensação de "aba selecionada" e a
   barra deslizar suavemente entre qualquer um deles (view-transition-name
   mc-nav-underline, ver seção de transição de página mais acima). */
.nav a.nicho.active::after,
.nav a.nav-blog.active::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: -21px; height: 2px;
  background: var(--rasp); border-radius: 2px;
}
.nav a.nav-cta {
  background: var(--rasp); color: var(--on-accent); padding: 9px 16px;
  border-radius: 99px; font-size: 14px;
}
.nav a.nav-cta:hover { background: var(--accent-hover); }

/* Link "Blog" no header/footer — mesmo estilo base de .nav a, só com um
   espaçamento/divisor sutil para não parecer uma terceira aba de nicho. */
.nav a.nav-blog {
  margin-left: 6px; padding-left: 22px;
  border-left: 1px solid var(--line);
}
.nav a.nav-blog.active { color: var(--rasp-dark); font-weight: 600; }
@media (max-width: 600px) {
  .nav a.nav-blog { margin-left: 0; padding-left: 10px; }
}

/* ---- Menu de nichos (Confeitaria / Salgaderia / ...) ---------------------
   Componente reutilizável, pronto para qualquer quantidade de calculadoras.
   No PC as abas ficam lado a lado, como sempre (.nicho-nav e .nicho-nav-list
   usam display:contents — somem do layout, os <a> viram filhos diretos de
   .nav, zero mudança visual). No celular viram um botão único ("Confeitaria
   ⌄") que abre uma lista vertical sobreposta — assim o header não fica
   apertado, não importa se são 2 ou 6 calculadoras. Ver nicho-nav.js.
   Uso: <div class="nicho-nav" data-nicho-nav> com um
   [data-nicho-nav-toggle] e um [data-nicho-nav-list] dentro — mesmo HTML em
   toda página nova, nada de CSS/JS extra por página. */
.nicho-nav { display: contents; }
.nicho-nav-list { display: contents; }
.nicho-nav-toggle { display: none; }

/* botão de alternar tema (sol/lua) — discreto, sem borda */
.theme-toggle {
  width: 34px; height: 34px; flex-shrink: 0;
  border: none; background: transparent;
  color: var(--ink-faint); cursor: pointer; padding: 0;
  border-radius: 99px; display: grid; place-items: center;
  margin-right: 10px;   /* afasta do par Calculadora + "Quero a planilha" */
  transition: color .15s ease, background-color .15s ease;
}
.theme-toggle:hover { color: var(--ink); background: var(--blush); }
/* Ícones sol/lua empilhados na mesma célula do grid (em vez de display:none)
   para poder fazer um cross-fade com giro suave ao trocar de tema. */
.theme-toggle svg {
  grid-area: 1 / 1;
  width: 18px; height: 18px; display: block;
  opacity: 1; transform: rotate(0deg) scale(1);
  transition: opacity .2s ease, transform .35s cubic-bezier(.34, 1.56, .64, 1);
}
.theme-toggle .icon-sun { opacity: 0; transform: rotate(-90deg) scale(.4); }
:root[data-theme="dark"] .theme-toggle .icon-moon { opacity: 0; transform: rotate(90deg) scale(.4); }
:root[data-theme="dark"] .theme-toggle .icon-sun { opacity: 1; transform: rotate(0deg) scale(1); }

/* ---- Hero --------------------------------------------------------------- */
.hero { padding: 64px 0 30px; }
.hero .eyebrow {
  font-size: 13px; font-weight: 600; letter-spacing: 0.08em;
  text-transform: uppercase; color: var(--rasp-dark); margin-bottom: 18px;
}
.hero h1 {
  font-family: var(--font-display);
  font-weight: 500;
  font-size: clamp(34px, 6vw, 58px);
  line-height: 1.04;
  letter-spacing: -0.01em;
  max-width: 16ch;
  margin-bottom: 20px;
}
.hero h1 em { font-style: italic; color: var(--rasp-dark); }
.hero .lead {
  font-size: clamp(16px, 2.3vw, 19px); color: var(--ink-soft);
  max-width: 52ch; margin-bottom: 8px;
}

/* ---- Calculadora -------------------------------------------------------- */
.calc {
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 26px;
  margin: 28px 0;
  box-shadow: var(--shadow-1);
}
.calc-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 6px; }
.calc-head h2 {
  font-family: var(--font-display); font-weight: 600; font-size: 22px;
}
.calc-head .hint { font-size: 13px; color: var(--ink-faint); }
.calc-head-right { display: flex; align-items: center; gap: 12px; }
.btn-limpar {
  border: none; background: transparent; cursor: pointer;
  font-family: var(--font-sans); font-size: 13px; font-weight: 600;
  color: var(--ink-faint); padding: 4px 8px; border-radius: 7px;
  transition: color .12s ease, background-color .12s ease;
}
.btn-limpar:hover { color: var(--rasp); background: var(--rasp-bg); }

.calc-grid { display: grid; grid-template-columns: 1.15fr 1fr; gap: 26px; }
@media (max-width: 760px) { .calc-grid { grid-template-columns: 1fr; gap: 22px; } }

.field-label {
  display: block; position: relative; font-size: 13px; font-weight: 600; color: var(--ink);
  margin: 16px 0 7px;
}
.field-label .sub { font-weight: 400; color: var(--ink-faint); }

/* ---- Dica em ícone de informação (hover / foco / toque) ------------------
   Componente reutilizável: qualquer campo pode ganhar uma dica assim.
     <label class="field-label">Texto do campo
       <button type="button" class="info-tip" aria-label="Dica sobre X">
         <svg class="info-tip-icon" ...>...</svg>
         <span class="info-tip-bubble">Texto da dica aqui.</span>
       </button>
     </label>
   Funciona com mouse (:hover), teclado (:focus-visible) e toque em celular
   (tocar foca o botão; tocar fora desfoca e fecha) — sem precisar de JS.
   Cores usam --ink/--paper invertidos, então o contraste já sai certo nos
   dois temas de graça, sem overrides extras.
   A bolha é posicionada relativa ao .field-label (não ao ícone em si, que é
   pequeno demais) e limitada a 100% da largura do campo — assim nunca
   estoura a tela em celular, não importa onde o ícone caia no texto. */
.info-tip {
  display: inline-flex; align-items: center; justify-content: center;
  width: 18px; height: 18px; flex-shrink: 0;
  margin-left: 5px; vertical-align: middle;
  border: none; border-radius: 50%;
  background: var(--line-soft); color: var(--ink-faint);
  cursor: help; padding: 0;
}
.info-tip:hover, .info-tip:focus-visible {
  background: var(--rasp-bg); color: var(--rasp-dark); outline: none;
}
.info-tip-icon { width: 12px; height: 12px; display: block; pointer-events: none; }

.info-tip-bubble {
  position: absolute; left: 0; right: 0; bottom: calc(100% + 8px);
  margin: 0 auto;
  width: max-content; max-width: 100%;
  background: var(--ink); color: var(--paper);
  font-size: 12px; font-weight: 500; line-height: 1.5; text-align: left;
  padding: 10px 12px; border-radius: var(--radius-sm);
  box-shadow: var(--shadow-2);
  opacity: 0; visibility: hidden; pointer-events: none;
  transform: translateY(4px);
  transition: opacity .15s ease, transform .15s ease;
  z-index: 20;
}
.info-tip:hover .info-tip-bubble, .info-tip:focus-visible .info-tip-bubble {
  opacity: 1; visibility: visible; transform: translateY(0);
}

input[type="text"], input[type="number"] {
  width: 100%; height: 42px; padding: 0 12px;
  border: 1px solid var(--line); border-radius: var(--radius-sm);
  font-family: var(--font-sans); font-size: 16px; color: var(--ink);
  background: var(--paper);
  transition: border-color .12s, box-shadow .12s;
}
input:focus {
  outline: none; border-color: var(--rasp);
  box-shadow: 0 0 0 3px var(--rasp-bg); background: var(--surface);
}
input::placeholder { color: var(--ink-faint); }

/* ==========================================================================
   FUNCIONALIDADE DESATIVADA  ·  Setas (spinner) dos campos numéricos
   Motivo:
     As setinhas nativas de <input type="number"> ficam claras/destoantes no
     modo escuro e não há como estilizá-las de forma bonita e cross-browser.
     Como o usuário digita os valores, elas foram removidas (Chrome + Firefox).
     Isso também evita que a seta colida com o sufixo de unidade (%, min, un).
   Como restaurar (trazer as setas de volta):
     Comente ou remova este bloco inteiro.
   ========================================================================== */
input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button {
  -webkit-appearance: none; margin: 0;          /* Chrome, Edge, Safari */
}
input[type="number"] {
  -moz-appearance: textfield; appearance: textfield;   /* Firefox + padrão */
}

/* ---- Indicador de unidade fixo dentro do campo (R$, %, min, un) ----------
   Uso: envolver o <input> em
     <div class="field-unit" data-unit="R$" data-unit-pos="prefix"> ... </div>
   data-unit-pos = "prefix" (à esquerda, ex.: R$) ou "suffix" (à direita, ex.: %).
   Usa var(--ink-faint), então acompanha os temas claro e escuro. */
.field-unit { position: relative; display: block; }
.field-unit > input { width: 100%; }
.field-unit::before,
.field-unit::after {
  position: absolute; top: 50%; transform: translateY(-50%);
  font-family: var(--font-sans); font-size: 14px; font-weight: 600;
  color: var(--ink-faint); pointer-events: none;   /* não atrapalha o clique/foco */
}
.field-unit[data-unit-pos="prefix"]::before { content: attr(data-unit); left: 12px; }
.field-unit[data-unit-pos="prefix"] > input   { padding-left: 38px; }
.field-unit[data-unit-pos="suffix"]::after  { content: attr(data-unit); right: 12px; }
.field-unit[data-unit-pos="suffix"] > input  { padding-right: 44px; }

/* Cartão de ingrediente — 2x2, rótulos por extenso */
.ing-card {
  position: relative;
  display: grid;
  grid-template-columns: 1.3fr 1fr;
  gap: 12px 14px;
  padding: 16px 16px 16px;
  border: 1px solid var(--line);
  border-radius: var(--radius-sm);
  background: var(--paper);
  margin-bottom: 12px;
}
.ing-field { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.ing-field label {
  font-size: 12px; font-weight: 600; color: var(--ink-soft);
}
.ing-field input { height: 42px; font-size: 16px; }
.btn-del {
  position: absolute; top: 8px; right: 8px;
  width: 26px; height: 26px; border: none; background: transparent;
  color: var(--ink-faint); cursor: pointer; border-radius: 7px;
  font-size: 18px; line-height: 1; display: grid; place-items: center;
  transition: color .12s ease, background-color .12s ease;
}
.btn-del:hover { background: var(--blush); color: var(--rasp-dark); }
@media (max-width: 480px) {
  .ing-card { grid-template-columns: 1fr; gap: 10px; }
}

.btn-add {
  background: transparent; border: 1px dashed var(--line);
  color: var(--rasp-dark); font-family: var(--font-sans);
  font-weight: 600; font-size: 14px; padding: 9px 14px;
  border-radius: var(--radius-sm); cursor: pointer; margin-top: 4px;
  transition: border-color .12s ease, background-color .12s ease;
}
.btn-add:hover { border-color: var(--rasp); background: var(--rasp-bg); }

.two-col { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 16px; }
@media (max-width: 420px) { .two-col { grid-template-columns: 1fr; } }

/* ---- Painel de resultado ------------------------------------------------ */
.result {
  background: var(--blush);
  border-radius: var(--radius);
  padding: 22px;
  align-self: start;
  position: sticky; top: 84px;
}
@media (max-width: 760px) { .result { position: static; } }

.price-hero {
  background: var(--surface); border-radius: var(--radius);
  padding: 18px 20px; margin-bottom: 14px;
  border: 1px solid var(--line-soft);
}
.price-hero .price-label {
  display: block; font-size: 13px; font-weight: 600; color: var(--ink-soft);
}
.price-hero .price {
  display: block;
  font-family: var(--font-sans); font-weight: 700;
  font-size: 52px; line-height: 1.02; color: var(--green-dark);
  font-feature-settings: "tnum" 1; letter-spacing: -0.02em;
  margin: 4px 0 6px;
}
.price-hero .price-round {
  font-size: 13px; color: var(--ink-soft);
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  font-feature-settings: "tnum" 1;
}
.price-hero .price-round strong { color: var(--ink); font-weight: 700; }
.price-hero .price-round .mr {
  font-size: 11px; color: var(--rasp-dark); background: var(--rasp-bg);
  padding: 1px 8px; border-radius: 99px;
}

/* dois cartõezinhos: custo e lucro */
.stat-row { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 14px; }
.stat {
  background: var(--surface); border-radius: var(--radius-sm);
  border: 1px solid var(--line-soft); padding: 11px 13px;
}
.stat-k { display: block; font-size: 12px; color: var(--ink-soft); }
.stat-v {
  display: block; font-size: 20px; font-weight: 700; color: var(--ink);
  font-feature-settings: "tnum" 1; margin-top: 2px;
}
.stat--good { background: var(--green-bg); border-color: transparent; }
.stat--good .stat-v { color: var(--green-dark); }

/* resumo da fornada inteira */
.fornada {
  background: var(--surface); border-radius: var(--radius-sm);
  border: 1px solid var(--line-soft); padding: 12px 14px; margin-bottom: 14px;
}
.fornada-title { font-size: 12px; font-weight: 600; color: var(--rasp-dark); margin-bottom: 6px; }
.fornada-row {
  display: flex; justify-content: space-between; font-size: 14px;
  color: var(--ink-soft); padding: 3px 0; font-feature-settings: "tnum" 1;
}
.fornada-row strong { color: var(--ink); font-weight: 700; }
.fornada-row strong.green { color: var(--green-dark); }

.bd-block { margin-bottom: 6px; }
.bd-label { font-size: 12px; font-weight: 600; color: var(--ink-soft); margin-bottom: 8px; }
.upsell-note {
  font-size: 13px; color: var(--ink-soft); line-height: 1.5;
  border: 1px dashed var(--rasp); border-radius: var(--radius-sm);
  padding: 12px 14px; margin-top: 12px; background: var(--rasp-bg);
}
.upsell-note strong { color: var(--ink); font-weight: 600; }
.upsell-note a { font-weight: 600; }

.breakdown-bar {
  display: flex; height: 12px; border-radius: 99px; overflow: hidden;
  background: var(--line-soft); margin-bottom: 14px;
}
.breakdown-bar span {
  display: block; height: 100%;
  transition: width .35s cubic-bezier(.22, 1, .36, 1);
}
.seg-ing  { background: var(--seg-ing); }
.seg-mao  { background: var(--rasp); }
.seg-extra{ background: var(--seg-extra); }
.seg-emb  { background: var(--seg-emb); }

.bd-list { list-style: none; font-size: 14px; }
.bd-list li {
  display: flex; align-items: center; justify-content: space-between;
  padding: 7px 0; border-bottom: 1px solid var(--blush-2);
  font-feature-settings: "tnum" 1;
}
.bd-list li:last-child { border-bottom: none; }
.bd-list .key { display: flex; align-items: center; gap: 8px; color: var(--ink-soft); }
.bd-list .swatch { width: 10px; height: 10px; border-radius: 3px; flex-shrink: 0; }
.bd-list .val { font-weight: 600; color: var(--ink); }
.bd-list .flag {
  font-size: 11px; font-weight: 600; color: var(--rasp-dark);
  background: var(--rasp-bg); padding: 1px 7px; border-radius: 99px; margin-left: 7px;
}

.honesty-note {
  font-size: 13px; color: var(--ink-soft); line-height: 1.5;
  background: var(--surface); border-radius: var(--radius-sm);
  padding: 12px 14px; margin-top: 16px;
}
.honesty-note strong { color: var(--ink); font-weight: 600; }

.result-empty { color: var(--ink-faint); font-size: 14px; padding: 30px 0; text-align: center; }

/* ---- Microinterações do resultado da calculadora --------------------------
   O painel de resultado é montado uma única vez (ver mecusta-calc-utils.js,
   montarOuAtualizarResultado) — as chamadas seguintes só atualizam texto e
   largura da barra nos MESMOS elementos, em vez de recriar tudo a cada
   tecla. Isso é o que permite as transições abaixo: a entrada em cascata
   só acontece quando os blocos aparecem pela primeira vez (ou depois de
   "Limpar"), e a barra de composição anima de verdade entre um valor e
   outro (ver transition em .breakdown-bar span, acima). */
.price-hero, .stat-row, .fornada, .bd-block, .honesty-note {
  animation: mc-pop-in .3s cubic-bezier(.22, 1, .36, 1) both;
}
.stat-row { animation-delay: .04s; }
.fornada { animation-delay: .08s; }
.bd-block { animation-delay: .12s; }
.honesty-note { animation-delay: .16s; }
@keyframes mc-pop-in {
  from { opacity: 0; transform: translateY(6px) scale(.98); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}

/* ==========================================================================
   FUNCIONALIDADE SUBSTITUÍDA · pisca no número que mudou (.mc-flash)
   Motivo: trocado pelo efeito de "mostrador antigo" abaixo (.mc-digit), a
   pedido do usuário depois de ver o resultado do pisca-pisca.
   Como restaurar: descomente o bloco abaixo e, em mecusta-calc-utils.js,
   troque as chamadas de rolarNumero(...) de volta para uma função que faça
   el.textContent = novoTexto; el.classList.remove('mc-flash'); void
   el.offsetWidth; el.classList.add('mc-flash');
   ---------------------------------------------------------------------------
   .mc-flash { animation: mc-value-pop .35s ease; transform-origin: left center; }
   @keyframes mc-value-pop {
     0% { transform: scale(1); }
     35% { transform: scale(1.06); }
     100% { transform: scale(1); }
   }
   ========================================================================== */

/* Números "rolam" de um valor para o outro, como um mostrador/odômetro
   antigo, em vez de só trocar de texto — só o(s) dígito(s) que mudou vira(m)
   uma janelinha de 1 linha de altura com o dígito antigo e o novo
   empilhados; transladar essa janelinha um degrau faz o efeito. Dígitos
   iguais e os demais caracteres (R$, vírgula, %, texto) continuam texto
   puro, sem custo extra. Ver rolarNumero em mecusta-calc-utils.js. */
.mc-digit {
  display: inline-block;
  overflow: hidden;
  height: 1em;
  line-height: 1;
  vertical-align: bottom;
}
.mc-digit-track {
  display: block;
  transition: transform .45s cubic-bezier(.22, 1, .36, 1);
}
.mc-digit-track span {
  display: block;
  height: 1em;
  line-height: 1;
}

/* ==========================================================================
   Modo escuro — leve realce dos cartões/blocos de resultado
   Objetivo: dar um pouco mais de contraste e separação aos blocos da
   calculadora no escuro (preço, custo/lucro, fornada, honestidade), sem perder
   o visual discreto e sem tocar no modo claro nem na identidade das cores.
   Só entra com data-theme="dark".
   Como reverter: comente/remova este bloco inteiro.
   ========================================================================== */
:root[data-theme="dark"] .result {
  border: 1px solid rgba(255, 255, 255, 0.05);   /* delimita o painel no escuro */
}
:root[data-theme="dark"] .price-hero,
:root[data-theme="dark"] .stat,
:root[data-theme="dark"] .fornada {
  background: #2A2127;                            /* um passo acima do painel */
  border-color: rgba(255, 255, 255, 0.08);       /* borda hairline visível no escuro */
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.35);     /* leve elevação */
}
:root[data-theme="dark"] .honesty-note {
  background: #2A2127;
  border: 1px solid rgba(255, 255, 255, 0.08);   /* honesty-note não tinha borda; ganha uma sutil */
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.35);
}
:root[data-theme="dark"] .stat--good {
  background: var(--green-bg);                    /* preserva o verde do "lucro" */
  border-color: rgba(99, 199, 154, 0.28);        /* borda verde discreta p/ combinar */
}

/* ---- Botões / CTA ------------------------------------------------------- */
.btn {
  display: inline-flex; align-items: center; gap: 8px; justify-content: center;
  background: var(--rasp); color: var(--on-accent); font-family: var(--font-sans);
  font-weight: 600; font-size: 16px; padding: 13px 24px;
  border: none; border-radius: 99px; cursor: pointer;
  transition: background .15s ease, transform .15s ease, box-shadow .15s ease;
}
.btn:hover { background: var(--accent-hover); text-decoration: none; transform: translateY(-1px); box-shadow: var(--shadow-1); }
.btn:active { transform: translateY(0) scale(0.99); }
.btn-ghost { background: transparent; color: var(--ink); border: 1px solid var(--line); }
.btn-ghost:hover { background: var(--blush); transform: translateY(-1px); box-shadow: none; }
.btn-block { display: flex; width: 100%; }

/* ---- Faixa premium (teaser na home) ------------------------------------- */
.premium-teaser { padding: 30px 0 70px; }
.teaser-card {
  border: 2px solid var(--rasp);
  border-radius: var(--radius);
  padding: 30px 32px;
  display: grid; grid-template-columns: 1fr auto; gap: 24px; align-items: center;
  background: linear-gradient(180deg, var(--rasp-bg), var(--teaser-end) 90%);
}
@media (max-width: 680px) { .teaser-card { grid-template-columns: 1fr; text-align: left; } }
.teaser-card h3 { font-family: var(--font-display); font-weight: 600; font-size: 24px; margin-bottom: 8px; }
.teaser-card p { color: var(--ink-soft); max-width: 46ch; }

/* ---- Seções genéricas --------------------------------------------------- */
.section { padding: 56px 0; }
.section h2 {
  font-family: var(--font-display); font-weight: 600;
  font-size: clamp(26px, 4vw, 36px); line-height: 1.1; margin-bottom: 14px;
  max-width: 20ch;
}
.section .section-lead { color: var(--ink-soft); font-size: 18px; max-width: 56ch; margin-bottom: 8px; }

.feature-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; margin-top: 34px; }
@media (max-width: 760px) { .feature-grid { grid-template-columns: 1fr; } }
.feature {
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius);
  padding: 22px;
  animation: mc-card-in .35s cubic-bezier(.22, 1, .36, 1) both;
}
.feature:nth-child(2) { animation-delay: .05s; }
.feature:nth-child(3) { animation-delay: .1s; }
.feature:nth-child(4) { animation-delay: .15s; }
.feature:nth-child(5) { animation-delay: .2s; }
.feature:nth-child(n+6) { animation-delay: .25s; }
.feature .num {
  font-family: var(--font-display); font-weight: 600; font-size: 15px;
  color: var(--rasp-dark); margin-bottom: 10px;
}
.feature h4 { font-size: 17px; font-weight: 600; margin-bottom: 6px; }
.feature p { font-size: 14px; color: var(--ink-soft); }

/* ---- Página premium ----------------------------------------------------- */
.pricing {
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius);
  padding: 34px; max-width: 460px; margin: 36px auto 0;
  box-shadow: var(--shadow-2);
}
.pricing .tag {
  display: inline-block; font-size: 12px; font-weight: 600;
  color: var(--rasp-dark); background: var(--rasp-bg);
  padding: 4px 11px; border-radius: 99px; margin-bottom: 16px;
}
.pricing .amount {
  font-family: var(--font-sans); font-weight: 700; font-size: 48px;
  color: var(--ink); font-feature-settings: "tnum" 1; line-height: 1;
}
.pricing .amount small { font-size: 18px; font-weight: 600; color: var(--ink-soft); }
.pricing .once { font-size: 14px; color: var(--ink-soft); margin: 6px 0 22px; }
.check-list { list-style: none; margin: 0 0 24px; }
.check-list li {
  display: flex; gap: 10px; align-items: flex-start; padding: 8px 0;
  font-size: 15px; color: var(--ink);
}
.check-list li::before {
  content: "✓"; color: var(--green); font-weight: 700; flex-shrink: 0;
}
.guarantee { text-align: center; font-size: 13px; color: var(--ink-faint); margin-top: 14px; }

/* ---- Página do desenvolvedor (estilo "linktree") -------------------------
   src/pages/desenvolvedor.astro — acessível pelo crédito no rodapé. Cartão
   centralizado com nome + lista de contatos, cada um com ícone da rede.
   Para adicionar um contato novo, ver o array CONTATOS na própria página —
   nada aqui precisa mudar. */
.dev-links { padding: 72px 0; text-align: center; }
.dev-card {
  max-width: 420px; margin: 0 auto;
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius);
  padding: 40px 32px; box-shadow: var(--shadow-2);
}
.dev-avatar {
  display: inline-flex; align-items: center; justify-content: center;
  width: 72px; height: 72px; border-radius: 50%;
  background: var(--rasp-bg); color: var(--rasp-dark);
  font-family: var(--font-display); font-weight: 600; font-size: 24px;
  margin-bottom: 18px;
}
.dev-card h1 {
  font-family: var(--font-display); font-weight: 600; font-size: 26px; margin-bottom: 4px;
}
.dev-role { color: var(--ink-soft); font-size: 15px; margin-bottom: 28px; }
.dev-link-list { list-style: none; display: grid; gap: 12px; }
.dev-link {
  display: flex; align-items: center; gap: 12px;
  padding: 14px 18px; border: 1px solid var(--line); border-radius: var(--radius-sm);
  background: var(--paper); color: var(--ink); font-weight: 600; font-size: 15px;
  transition: border-color .15s ease, background-color .15s ease, transform .15s ease;
  animation: mc-card-in .35s cubic-bezier(.22, 1, .36, 1) both;
}
.dev-link-list li:nth-child(2) .dev-link { animation-delay: .05s; }
.dev-link-list li:nth-child(3) .dev-link { animation-delay: .1s; }
.dev-link-list li:nth-child(n+4) .dev-link { animation-delay: .15s; }
.dev-link:hover {
  border-color: var(--rasp); background: var(--rasp-bg);
  text-decoration: none; transform: translateY(-1px);
}
.dev-link-icon {
  width: 22px; height: 22px; flex-shrink: 0; display: grid; place-items: center;
  color: var(--rasp-dark);
}
.dev-link-icon svg { width: 100%; height: 100%; }

/* ---- Página "em breve" (nichos a caminho) ------------------------------- */
.soon { padding: 72px 0 44px; text-align: center; }
.soon-badge {
  display: inline-flex; align-items: center; gap: 8px;
  font-size: 13px; font-weight: 600; color: var(--rasp-dark);
  background: var(--rasp-bg); padding: 6px 14px; border-radius: 99px; margin-bottom: 22px;
}
.soon h1 {
  font-family: var(--font-display); font-weight: 500;
  font-size: clamp(32px, 6vw, 52px); line-height: 1.05;
  letter-spacing: -0.01em; max-width: 18ch; margin: 0 auto 18px;
}
.soon h1 em { font-style: italic; color: var(--rasp-dark); }
.soon .lead { color: var(--ink-soft); font-size: 18px; max-width: 52ch; margin: 0 auto 30px; }
.soon-list {
  list-style: none; max-width: 460px; margin: 0 auto 32px; text-align: left;
  display: grid; gap: 10px;
}
.soon-list li {
  display: flex; gap: 10px; align-items: flex-start; color: var(--ink);
  background: var(--surface); border: 1px solid var(--line-soft);
  border-radius: var(--radius-sm); padding: 12px 14px; font-size: 15px;
}
.soon-list li::before { content: "→"; color: var(--rasp); font-weight: 700; flex-shrink: 0; }

/* ---- Footer ------------------------------------------------------------- */
.site-footer {
  border-top: 1px solid var(--line); padding: 36px 0; margin-top: 20px;
  font-size: 14px; color: var(--ink-soft);
}
.site-footer .wrap { display: flex; justify-content: space-between; gap: 20px; flex-wrap: wrap; }
.site-footer .foot-links { display: flex; gap: 18px; flex-wrap: wrap; }
.site-footer a { color: var(--ink-soft); }

/* ---- Espaços de anúncio (preparação AdSense) ----------------------------
   Componente reutilizável: qualquer página só precisa de
   <div class="ad-slot ad-slot--rect|--banner" data-anuncio data-anuncio-tipo="...">
   + <script src="anuncios.js">. Ver anuncios.js para o conteúdo injetado e
   o passo a passo de ativação do AdSense de verdade.
   ========================================================================== */
.hero-split {
  display: grid; grid-template-columns: 1fr 300px; gap: 40px; align-items: center;
}
@media (max-width: 900px) {
  .hero-split { grid-template-columns: 1fr; }
  /* Nessa largura o anúncio deixa de ficar "ao lado" do texto e passaria a
     sobrar solto embaixo dele — em vez disso, essas telas ganham a faixa de
     anúncio no topo da página (.mobile-top-ad, mais abaixo). */
  .hero-split .ad-slot { display: none; }
}

.ad-slot {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 4px; text-align: center;
  border: 1px dashed var(--line); border-radius: var(--radius-sm);
  background: var(--blush); color: var(--ink-faint);
  font-family: var(--font-sans); font-size: 12px; font-weight: 600;
}
.ad-slot-label { font-size: 12px; }
.ad-slot-dim { font-size: 11px; color: var(--ink-faint); opacity: .8; }

.ad-slot--rect { width: 100%; max-width: 300px; aspect-ratio: 300 / 250; }
.ad-slot--banner { width: 100%; min-height: 90px; padding: 8px; }
/* 160x600 (Wide Skyscraper) em vez do 300x600 (Half Page): a coluna lateral
   do artigo (.article-aside) fica ao lado da calculadora, e com 300px de
   anúncio + a largura padrão do site (--maxw: 1080px, ver [data-wide] em
   style.css) a calculadora ficava espremida. 160px é medida padrão IAB,
   então continua compatível com o AdSense de verdade quando for ativado. */
.ad-slot--vertical { width: 100%; max-width: 160px; aspect-ratio: 160 / 600; }

/* Faixa de anúncio no topo — só no celular (Header.astro/Layout.astro). No
   desktop/tablet a home já tem o retângulo ao lado do texto (.hero-split);
   no celular esse retângulo some (ver .hero-split .ad-slot acima) e esta
   faixa entra no lugar, formando o mesmo "sanduíche" da faixa do rodapé
   (que já existe em todas as páginas, ver Footer.astro). */
.mobile-top-ad { display: none; }
@media (max-width: 600px) {
  .mobile-top-ad { display: block; padding-top: 12px; }
}

/* Aviso de bloqueador de anúncios — pequeno, dispensável, sem travar nada.
   Montado inteiramente por aviso-adblock.js (nenhum HTML por página).
   Fixo na parte de baixo da tela (como um banner de cookies), pra aparecer
   na hora sem precisar rolar até o fim da página. */
.adblock-note {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 60;
  display: flex; align-items: center; justify-content: center; gap: 16px;
  flex-wrap: wrap; text-align: center;
  background: var(--blush); border-top: 1px solid var(--line);
  box-shadow: 0 -6px 20px rgba(0, 0, 0, 0.12);
  color: var(--ink-soft); font-size: 13px; line-height: 1.5;
  padding: 12px 22px;
}
.adblock-note-text {
  display: flex; flex-direction: column; gap: 2px;
  min-width: 0; max-width: 100%; overflow-x: auto;
}
.adblock-note-text p { margin: 0; white-space: nowrap; }
.adblock-note-fechar {
  border: none; background: transparent; color: var(--ink-faint);
  font-size: 20px; line-height: 1; cursor: pointer; padding: 2px 8px;
  border-radius: 7px; flex-shrink: 0;
}
.adblock-note-fechar:hover { background: var(--line-soft); color: var(--ink); }

/* três campos lado a lado (ex.: gás / energia / outros; embalagem / rendimento / margem) */
.three-col { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-top: 16px; }
@media (max-width: 620px) { .three-col { grid-template-columns: 1fr 1fr; } }
@media (max-width: 420px) { .three-col { grid-template-columns: 1fr; } }

/* ---- Blog: página de artigo (ArticleLayout.astro) ------------------------
   Tipografia do corpo do artigo (conteúdo MDX solto, sem classes próprias) +
   cabeçalho do artigo (título/data). */
.article-page { padding: 8px 0 64px; }
.article-page h1 {
  font-family: var(--font-display); font-weight: 500;
  font-size: clamp(30px, 5vw, 44px); line-height: 1.1; letter-spacing: -0.01em;
  max-width: 22ch; margin-bottom: 10px;
}
.article-meta { font-size: 13px; color: var(--ink-faint); margin-bottom: 30px; }

/* Cabeçalho do artigo (breadcrumb + eyebrow + título + data) ao lado de um
   anúncio retangular — mesmo espírito do .hero-split das outras páginas.
   Só aparece fora do modo mobile (celular continua com o título sozinho,
   sem nenhuma mudança). */
.article-header {
  display: grid;
  grid-template-columns: 1fr 300px;
  gap: 40px;
  align-items: start;
}
.article-header-text { min-width: 0; }
@media (max-width: 600px) {
  .article-header { display: block; }
  .article-header .ad-slot { display: none; }
}

/* ---- Coluna de anúncio lateral (compartilhada) ---------------------------
   .split-aside é a coluna estreita e fixa (sticky) de anúncio vertical usada
   ao lado tanto do artigo do blog (.article-layout) quanto da calculadora
   nas páginas de confeitaria/salgaderia (.calc-layout). Só aparece em telas
   largas o bastante (ver breakpoint abaixo); em notebooks e telas menores
   ela some e o conteúdo ao lado usa a largura toda, sem deixar vão vazio. */
.split-aside { display: none; }
@media (min-width: 1180px) {
  .split-aside {
    display: block;
    position: sticky;
    top: 84px;
  }
}

/* ---- Blog: layout do artigo (conteúdo + coluna de anúncio) ---------------
   O container do artigo (.article-body) e todo o conteúdo dentro dele —
   parágrafos, listas, títulos, calculadora, FAQ — usam a largura toda da
   coluna de conteúdo. Um limite de leitura em "ch" só nos parágrafos (como
   havia antes) deixava o texto bem mais estreito que a calculadora/FAQ
   logo abaixo, com uma sobra vazia à direita que parecia um parágrafo
   indentado — por isso não existe mais: a coluna inteira já tem uma largura
   pensada para leitura confortável (ver .article-layout). O gap de 56px
   (maior que os outros grids de conteúdo+anúncio do site) evita que o texto
   corrido pareça colado no anúncio, já que aqui é parágrafo puro, sem o
   respiro de um card como o da calculadora. */
.article-layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 56px;
  align-items: start;
  max-width: 920px;
  margin: 0 auto;
}

@media (min-width: 1180px) {
  .article-layout {
    grid-template-columns: minmax(0, 1fr) 160px;
    max-width: none;
    margin: 0;
  }
}

/* ---- Confeitaria/salgaderia: calculadora + coluna de anúncio -------------
   Mesma ideia do .article-layout (calculadora ao lado do .split-aside), mas
   sem o limite de leitura em 920px abaixo do breakpoint: a calculadora é uma
   ferramenta, não texto corrido, então usa a largura toda do .wrap até a
   coluna de anúncio aparecer. */
.calc-layout { display: block; }
@media (min-width: 1180px) {
  .calc-layout {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 160px;
    gap: 56px;
    align-items: start;
  }
}

.article-body { max-width: none; }
.article-body h2 {
  font-family: var(--font-display); font-weight: 600;
  font-size: clamp(22px, 3vw, 28px); margin: 40px 0 14px; line-height: 1.2;
}
.article-body h3 {
  font-family: var(--font-display); font-weight: 600; font-size: 19px; margin: 28px 0 10px;
}
.article-body p { margin-bottom: 16px; color: var(--ink-soft); font-size: 16px; line-height: 1.7; }
.article-body ul, .article-body ol { margin: 0 0 16px 22px; color: var(--ink-soft); font-size: 16px; line-height: 1.7; }
.article-body li { margin-bottom: 6px; }
.article-body strong { color: var(--ink); font-weight: 600; }
.article-body a { font-weight: 600; }
.article-body blockquote {
  border-left: 3px solid var(--rasp); padding: 4px 18px; margin: 20px 0;
  color: var(--ink-soft); font-style: italic;
}
.article-body .faq { margin-top: 36px; }
.article-body .calc { margin-top: 8px; }
.article-body .calc-intro {
  font-size: 14px; color: var(--ink-faint); margin: 40px 0 -6px;
}

/* Anúncio retangular intercalado no meio do artigo (InArticleAd.astro) —
   centralizado dentro da coluna de conteúdo, com espaço de sobra em cima e
   embaixo para separar bem do texto vizinho. Mesmo componente/tamanho do
   retângulo do hero (300x250); só a posição/margem muda. */
.in-article-ad {
  display: flex; justify-content: center;
  margin: 40px 0;
}

/* ---- Blog: breadcrumb ----------------------------------------------------
   Componente Breadcrumb.astro + BreadcrumbSchema.astro (mesma lista de dado). */
.breadcrumb { font-size: 13px; color: var(--ink-faint); margin: 22px 0 6px; }
.breadcrumb ol {
  list-style: none; display: flex; flex-wrap: wrap; gap: 6px; padding: 0; margin: 0;
}
.breadcrumb li { display: flex; align-items: center; gap: 6px; }
.breadcrumb a { color: var(--ink-soft); }
.breadcrumb a:hover { color: var(--ink); }
.breadcrumb [aria-current="page"] { color: var(--ink); font-weight: 600; }
.breadcrumb-sep { color: var(--ink-faint); }

/* ---- Blog: FAQ (acordeão nativo, sem JS) ---------------------------------
   Componente Faq.astro (visual) + FaqSchema.astro (JSON-LD), mesma lista de
   dado — usado nos artigos e reaproveitável em qualquer página futura. */
.faq { margin: 40px 0; }
.faq h2 {
  font-family: var(--font-display); font-weight: 600;
  font-size: clamp(22px, 3vw, 28px); margin-bottom: 16px;
}
.faq-list { display: grid; gap: 10px; }
.faq-item {
  background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--radius-sm); padding: 4px 18px;
}
.faq-item summary {
  cursor: pointer; padding: 14px 0; font-weight: 600; color: var(--ink);
  list-style: none; display: flex; justify-content: space-between;
  align-items: center; gap: 12px;
}
.faq-item summary::-webkit-details-marker { display: none; }
.faq-item summary::after {
  content: "+"; font-size: 20px; line-height: 1; color: var(--rasp-dark);
  flex-shrink: 0; transition: transform .15s ease;
}
.faq-item[open] summary::after { transform: rotate(45deg); }
.faq-item p { padding: 0 0 16px; color: var(--ink-soft); font-size: 15px; line-height: 1.6; }
/* Resposta entra com um fade leve ao abrir o acordeão — <details> nativo não
   anima altura sozinho, então o toque de suavidade fica por conta do texto. */
.faq-item[open] p { animation: mc-fade-in-sm .2s ease; }
@keyframes mc-fade-in-sm {
  from { opacity: 0; transform: translateY(-4px); }
  to { opacity: 1; transform: translateY(0); }
}

/* ---- Blog: cartão de artigo + banner de categoria ------------------------
   ArticleCard.astro / CategoryBanner.astro. Cada categoria usa sua própria
   cor de destaque: confeitaria usa --rasp (padrão do site); salgaderia usa
   --salgaderia-accent (fixo, ver bloco de variáveis no topo do arquivo),
   porque a listagem do blog mistura as duas categorias na mesma página. */
.article-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
@media (max-width: 900px) { .article-grid { grid-template-columns: 1fr 1fr; } }
@media (max-width: 620px) { .article-grid { grid-template-columns: 1fr; } }

.article-card {
  display: flex; flex-direction: column; gap: 8px;
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius);
  padding: 22px; color: var(--ink); transition: transform .12s ease, box-shadow .12s ease;
  animation: mc-card-in .35s cubic-bezier(.22, 1, .36, 1) both;
}
.article-card:hover { text-decoration: none; transform: translateY(-2px); box-shadow: var(--shadow-1); }
/* Leve cascata ao carregar a listagem — cada cartão entra um instante depois
   do anterior, em vez de todos aparecerem de uma vez. */
.article-card:nth-child(2) { animation-delay: .04s; }
.article-card:nth-child(3) { animation-delay: .08s; }
.article-card:nth-child(4) { animation-delay: .12s; }
.article-card:nth-child(5) { animation-delay: .16s; }
.article-card:nth-child(n+6) { animation-delay: .2s; }
@keyframes mc-card-in {
  from { opacity: 0; transform: translateY(10px); }
  to { opacity: 1; transform: translateY(0); }
}
.article-card-tag {
  display: inline-block; align-self: flex-start; font-size: 12px; font-weight: 600;
  padding: 3px 10px; border-radius: 99px; color: var(--rasp-dark); background: var(--rasp-bg);
}
.article-card--salgaderia .article-card-tag {
  color: var(--salgaderia-accent-dark); background: var(--salgaderia-accent-bg);
}
.article-card h3 { font-family: var(--font-display); font-weight: 600; font-size: 19px; }
.article-card p { color: var(--ink-soft); font-size: 14px; flex-grow: 1; }
.article-card-cta { font-size: 14px; font-weight: 600; color: var(--rasp-dark); }
.article-card--salgaderia .article-card-cta { color: var(--salgaderia-accent-dark); }

.category-banner {
  display: flex; align-items: baseline; justify-content: space-between; gap: 12px;
  flex-wrap: wrap; margin: 44px 0 20px; padding-bottom: 10px;
  border-bottom: 2px solid var(--rasp);
}
.category-banner--salgaderia { border-bottom-color: var(--salgaderia-accent); }
.category-banner h2 { font-family: var(--font-display); font-weight: 600; font-size: clamp(22px, 3vw, 28px); }
.category-banner-count { font-size: 13px; color: var(--ink-faint); }

/* ---- Utilidades --------------------------------------------------------- */
.center { text-align: center; }
.mt-s { margin-top: 14px; }
.sr-only {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0,0,0,0); border: 0;
}

/* ---- Ajustes gerais para celular (valem em todas as páginas) ------------ */
@media (max-width: 600px) {
  .wrap { padding: 0 16px; }
  .nav { gap: 8px; }
  .nav a { font-size: 14px; }
  .theme-toggle { margin-right: 2px; }
  .brand { font-size: 19px; }
  .nav a.nicho.active::after,
  .nav a.nav-blog.active::after { bottom: -20px; }

  /* menu de nichos vira um botão + lista sobreposta (ver regra completa acima) */
  .nicho-nav { display: block; position: relative; }
  .nicho-nav-list { display: flex; }
  .nicho-nav-toggle {
    display: flex; align-items: center; gap: 5px;
    background: transparent; border: 1px solid var(--line); border-radius: 99px;
    padding: 6px 10px; font-family: var(--font-sans); font-weight: 600; font-size: 13px;
    color: var(--rasp-dark); cursor: pointer;
    transition: background-color .12s ease;
  }
  .nicho-nav-toggle:hover { background: var(--blush); }
  .nicho-nav-chevron { transition: transform .15s ease; flex-shrink: 0; }
  .nicho-nav-toggle[aria-expanded="true"] .nicho-nav-chevron { transform: rotate(180deg); }

  .nicho-nav-list {
    flex-direction: column; gap: 2px;
    position: absolute; top: calc(100% + 8px); right: 0; min-width: 168px;
    background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius-sm);
    box-shadow: var(--shadow-2); padding: 6px;
    opacity: 0; visibility: hidden; transform: translateY(-6px);
    transition: opacity .15s ease, transform .15s ease;
    z-index: 55;
  }
  .nicho-nav-list.is-open { opacity: 1; visibility: visible; transform: translateY(0); }
  .nicho-nav-list a.nicho {
    padding: 9px 12px; border-radius: 7px; font-size: 14px;
  }
  .nicho-nav-list a.nicho:hover { background: var(--blush); text-decoration: none; }
  .nicho-nav-list a.nicho.active { background: var(--rasp-bg); color: var(--rasp-dark); }
  .nicho-nav-list a.nicho.active::after { display: none; }   /* sublinhado não faz sentido numa lista vertical */
  .hero { padding: 40px 0 20px; }
  .section { padding: 40px 0; }
  /* .article-page tem a mesma especificidade de .section (uma classe cada) e
     vem ANTES dela no arquivo — sem esta linha, a regra acima "vence" no
     celular e some com o padding-top pequeno do artigo (8px), abrindo um
     vão vazio enorme entre a faixa de anúncio do topo e o título/breadcrumb. */
  .article-page { padding: 8px 0 40px; }
  .calc { padding: 18px 15px; margin: 22px 0; }
  .calc-head h2 { font-size: 20px; }
  .calc-head .hint { font-size: 12px; }
  .result { padding: 16px; }
  .price-hero { padding: 16px; }
  .price-hero .price { font-size: 44px; }
  .premium-teaser { padding: 24px 0 48px; }
  .teaser-card { padding: 22px 20px; gap: 16px; }
  .pricing { padding: 24px 20px; }
  .stat-v { font-size: 18px; }
  .hero-split { gap: 22px; }
  .adblock-note { padding: 10px 16px; gap: 10px; font-size: 12px; }
  .adblock-note-fechar { font-size: 18px; }
}
/* o texto do aviso de adblock só cabe numa linha por parágrafo a partir de
   ~900px de largura (medido: precisa de ~790px só de texto); abaixo disso,
   deixa quebrar normalmente em vez de cortar/rolar escondido */
@media (max-width: 900px) {
  .adblock-note-text { overflow-x: visible; }
  .adblock-note-text p { white-space: normal; }
}
@media (max-width: 360px) {
  .stat-row { grid-template-columns: 1fr; }   /* telas bem estreitas: empilha custo/lucro */
}

@media (prefers-reduced-motion: reduce) {
  * { scroll-behavior: auto !important; transition: none !important; animation: none !important; }
  @view-transition { navigation: none; }   /* desliga a transição entre páginas */
}
