/* CASA OXXY — casa.css
   Identidade: gradiente #e23791→#9b5de5→#42c9e8, verde ao vivo #5ce3a2,
   fundo radial escuro. Vanilla CSS, zero framework. Variáveis documentadas
   no CONTRATO.md para casa_demo.js / casa_wa.js reusarem o mesmo idioma visual. */

:root{
  --oxxy-magenta:#e23791;
  --oxxy-purple:#9b5de5;
  --oxxy-cyan:#42c9e8;
  --oxxy-green:#5ce3a2;
  --oxxy-grad:linear-gradient(135deg,var(--oxxy-magenta),var(--oxxy-purple),var(--oxxy-cyan));
  --oxxy-grad-text:linear-gradient(90deg,var(--oxxy-magenta),var(--oxxy-cyan));
  --oxxy-bg-solid:#0a0910;
  --oxxy-ink:#f4f2fb;
  --oxxy-ink-dim:#c7c2da;
  --oxxy-ink-faint:#8d87a6;
  --oxxy-panel:rgba(20,17,34,.68);
  --oxxy-panel-strong:rgba(14,12,24,.86);
  --oxxy-border:rgba(140,120,190,.35);
  --oxxy-border-soft:rgba(140,120,190,.18);
  --oxxy-radius-lg:22px;
  --oxxy-radius-md:14px;
  --oxxy-radius-sm:10px;
  --oxxy-focus:#8fe8ff;
  --oxxy-font:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  --oxxy-maxw:760px;
  --oxxy-composer-h:84px;
  --oxxy-dur:.5s;
  --oxxy-fs-mult:1;   /* LANE MOBILE-ENTRADA (27/08): multiplicador do controle A- A A+ */
}

/* ---------------- LANE PENDÊNCIAS (28/08) item 4: tema claro/escuro ----------------
   Ordem literal do Founder: "colocar botões de tela escura e clara, dando 2
   experiências... o default é preto... temos que vender o padrão OXXY de
   qualidade e mostrar que pensamos no conforto visual." Default = escuro
   (nenhuma mudança de comportamento pra quem não mexe). [data-tema="claro"]
   no <html> troca as MESMAS variáveis que todo o resto do CSS já usa — não
   duplica regra por regra, então qualquer painel/botão que já usa var()
   herda o tema automaticamente. Contraste alvo: AA (4.5:1 texto normal). */
:root[data-tema="claro"]{
  --oxxy-bg-solid:#f3f1fa;
  --oxxy-ink:#211c33;
  --oxxy-ink-dim:#4b4468;
  --oxxy-ink-faint:#736c8f;
  --oxxy-panel:rgba(255,255,255,.78);
  --oxxy-panel-strong:rgba(255,255,255,.94);
  --oxxy-border:rgba(90,70,150,.30);
  --oxxy-border-soft:rgba(90,70,150,.16);
  --oxxy-focus:#5b3fae;
}

*,*::before,*::after{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;
  font-family:var(--oxxy-font);
  color:var(--oxxy-ink);
  background:
    radial-gradient(1000px 700px at 50% -10%,#141225,var(--oxxy-bg-solid) 60%,#070509);
  background-attachment:fixed;
  -webkit-font-smoothing:antialiased;
  min-height:100%;
  transition:background-color .4s ease,color .4s ease;
}
html[data-tema="claro"] body{
  background:
    radial-gradient(1000px 700px at 50% -10%,#ffffff,var(--oxxy-bg-solid) 60%,#e7e3f2);
}
h1,h2,h3,p,figure{margin:0}
button{font-family:inherit}
img,svg{display:block;max-width:100%}
a{color:var(--oxxy-cyan)}
a:hover{color:var(--oxxy-ink)}

.sr-only{
  position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0,0,0,0);white-space:nowrap;border:0;
}
.skip-link{
  position:absolute;left:8px;top:-60px;z-index:100;
  background:var(--oxxy-ink);color:#150f22;padding:10px 16px;border-radius:999px;
  font-weight:600;font-size:14px;transition:top .2s ease;
}
.skip-link:focus{top:8px}

/* foco visível — obrigatório em todo controle interativo */
:focus{outline:none}
:focus-visible{
  outline:3px solid var(--oxxy-focus);
  outline-offset:3px;
  border-radius:8px;
}

/* ---------------- layout raiz ---------------- */
.casa-root{
  min-height:100vh;
  min-height:100dvh;
  display:flex;
  flex-direction:column;
  /* FIX-R2 P1-3: --oxxy-composer-h é só a ESTIMATIVA inicial (84px/56px);
     --oxxy-composer-real-h (medida ao vivo por medirComposerReal() em
     casa_core.js, via ResizeObserver) é maior quando o texto legal/crédito
     da trilha quebra linha — usa a real com fallback pra estimativa, mesmo
     padrão já usado no CTA flutuante. */
  padding-bottom:calc(var(--oxxy-composer-real-h, var(--oxxy-composer-h)) + env(safe-area-inset-bottom) + 14px);
}

.casa-topbar{
  position:sticky;top:0;z-index:20;
  display:flex;align-items:center;justify-content:space-between;
  padding:14px 18px calc(14px + env(safe-area-inset-top)) calc(18px + env(safe-area-inset-left));
  padding-top:calc(14px + env(safe-area-inset-top));
  gap:12px;
  /* P0-2 (28/08): era um gradiente que ficava transparente na metade de
     baixo — como a barra é sticky, todo o resto da página passava a
     "vazar" por trás dos botões não-pressionados ao rolar (achado ao
     vivo: "Financeiro"/"HOJE (DADOS SINTÉTICOS)" aparecendo colados nos
     botões A-/Tela cheia). Agora é opaca+blur o tempo todo. */
  background:rgba(9,7,15,.90);
  backdrop-filter:blur(10px);
  -webkit-backdrop-filter:blur(10px);
}
html[data-tema="claro"] .casa-topbar{background:rgba(255,255,255,.90)}
.casa-brand{
  font-weight:800;font-size:15px;letter-spacing:2.5px;
  background:var(--oxxy-grad-text);-webkit-background-clip:text;background-clip:text;color:transparent;
}
/* LANE AUDITORIA-TOTAL (28/08): logo oficial (anel gradiente + enxame dispersando
   + "xxy" vazado) substitui o texto "OXXY" da marca-d'água anterior no topbar.
   PNG otimizado (350KB -> ~5-14KB) via sips, servido em 1x/2x (srcset).
   P0-A2 (28/08): estava 22px de altura — ordem literal do Founder: "logo está
   desproporcional, muito pequeno". Original é 865x354 (2,44:1); subimos pra
   34px de altura (proporção mantida via width:auto + atributos width/height
   do <img>, ~83px de largura) — dá presença sem estourar a topbar nem
   atropelar os controles ao lado (ver .casa-topbar align-items:center). */
.casa-brand-logo{height:56px;width:auto;display:block}
/* HC pediu 3x: "logo da OXXY tá muito pequeno". 34px -> 56px no desktop.
   A marca e o ativo mais caro da pagina; ela manda, os controles acompanham. */
@media (max-width:900px){ .casa-brand-logo{height:46px} }
@media (max-width:480px){ .casa-brand-logo{height:40px} }
.casa-idiomas{display:flex;gap:6px}
.casa-idioma-btn{
  position:relative;
  background:transparent;border:1px solid var(--oxxy-border-soft);color:var(--oxxy-ink-dim);
  border-radius:999px;padding:6px 11px;font-size:12px;font-weight:700;letter-spacing:.5px;
  cursor:pointer;transition:background .2s,color .2s,border-color .2s;
}
.casa-idioma-btn:hover{border-color:var(--oxxy-border)}
/* FIX-R2 P1-7 (gauntlet 2ª rodada): "alegaram 44px" — mas o min-height:44px
   só existia dentro de @media(max-width:768px); numa viewport que o
   gauntlet consegue medir (desktop, ou qualquer largura >768px), o alvo de
   verdade era o tamanho visual mesmo (29-34px): Voz OXXY/Mapa/Tela cheia
   (.casa-topbar-btn), PT/EN/ES (.casa-idioma-btn) e A-/A/A+ (.casa-tamanho-
   btn). Em vez de inflar o botão visualmente em QUALQUER tela (mudaria o
   design compacto do topbar), expande só a ÁREA DE TOQUE via pseudo-
   elemento invisível — clique/toque em qualquer ponto dentro de 44×44px
   centrado no botão conta, sem alterar 1px do visual. Vale em TODA largura
   de tela (não só mobile), porque toque não é exclusividade de celular
   (notebook touchscreen, tablet em paisagem >768px, etc.). */
.casa-idioma-btn::after,.casa-topbar-btn::after,.casa-tamanho-btn::after{
  content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  width:max(44px,100%);height:44px;
}
.casa-idioma-btn[aria-pressed="true"]{
  background:var(--oxxy-grad);color:#0d0a16;border-color:transparent;
}
/* LANE PENDÊNCIAS (28/08) item 2: bandeiras SVG autorais substituem o emoji
   nativo (🇧🇷🇺🇸🇪🇸) — o Founder reclamou que emoji "é nada profissional" e
   pediu ícones "premium deluxe". Cantos arredondados (rx no próprio SVG),
   brilho diagonal + traço interno sutil (profundidade), sombra própria por
   estado. Mantém o grupo de botões (não <select>) pra não perder foco/
   aria-pressed já plugados em casa_core.js. */
.casa-idioma-btn{display:inline-flex;align-items:center;gap:6px;line-height:1}
.casa-idioma-bandeira{display:inline-flex;filter:drop-shadow(0 1px 1.5px rgba(0,0,0,.35))}
.casa-bandeira-svg{display:block;width:20px;height:14px;border-radius:3px;transition:transform .15s ease,filter .15s ease}
.casa-idioma-btn:hover .casa-bandeira-svg{transform:translateY(-1px)}
.casa-idioma-btn:hover .casa-idioma-bandeira{filter:drop-shadow(0 2px 3px rgba(0,0,0,.45))}
.casa-idioma-btn[aria-pressed="true"] .casa-idioma-bandeira{filter:drop-shadow(0 1px 2px rgba(0,0,0,.5))}
.casa-idioma-btn[aria-pressed="true"] .casa-bandeira-svg{transform:translateY(-0.5px) scale(1.04)}

/* LANE EXPERIÊNCIA (28/08) — ordem do Founder: "no primeiro encontro o botão
   ao vivo está se destacando demais, quer ganhar muito a cena". Era 132px,
   opacidade total, mesmo peso visual do slogan/orbe — virou selo discreto:
   menor, um pouco translúcido, brilho do pulso reduzido (ver casa.html, os
   valores de fill-opacity do halo verde foram cortados quase pela metade). */
.casa-selo-wrap{display:flex;justify-content:center;margin:0 0 10px;opacity:.68;transition:opacity .25s ease}
.casa-selo-wrap:hover,.casa-selo-wrap:focus-within{opacity:.92}
.casa-selo-wrap svg{width:76px;height:auto}

/* ---------------- palco central ---------------- */
.casa-stage{
  flex:1;
  width:100%;
  max-width:980px;
  margin:0 auto;
  padding:6px 18px 18px;
  display:flex;
  flex-direction:column;
  align-content:start;
}

/* grid interno do capítulo 02 · Intenção (chips + cartão de setor) — escopo
   local, não mais no .casa-stage inteiro, porque agora o stage empilha
   capítulos. LANE REBUILD (27/08): antes era o cap01 (conversa+setor);
   agora a conversa fica sozinha no cap-01 e este grid vive no cap-02. */
.casa-cap02-grid{
  display:grid;
  grid-template-columns:1fr;
  gap:22px;
  max-width:900px;margin:0 auto;
  transition:grid-template-columns var(--oxxy-dur) ease;
}
@media (min-width:860px){
  .casa-root[data-fase="setor"] .casa-cap02-grid{
    grid-template-columns:minmax(260px,360px) 1fr;
    align-items:start;
  }
  .casa-root[data-fase="setor"] .casa-cap02-grid .casa-chips-area{grid-column:1;grid-row:1;justify-content:flex-start;align-content:flex-start}
  .casa-root[data-fase="setor"] .casa-cap02-grid .casa-setor-area{grid-column:2;grid-row:1;align-self:start}
}

.casa-coluna-conversa{
  display:flex;flex-direction:column;align-items:center;gap:10px;
  max-width:var(--oxxy-maxw);margin:0 auto;width:100%;
}

.casa-hero-texto{
  text-align:center;max-width:520px;margin:0 auto;
}
.casa-slogan{
  font-size:clamp(19px,3.6vw,26px);
  font-weight:700;line-height:1.32;letter-spacing:-.2px;
  margin:0 0 4px;
}
.casa-slogan em{
  font-style:normal;
  background:var(--oxxy-grad-text);-webkit-background-clip:text;background-clip:text;color:transparent;
}

/* ---------------- orb ---------------- */
.casa-orb-area{
  position:relative;
  width:min(46vw,190px);
  aspect-ratio:1/1;
  margin:2px auto 0;
  transition:width var(--oxxy-dur) ease;
  cursor:pointer;   /* LANE AO-VIVO (28/08): clicável — alterna a escuta/voz junto com o botão "Silêncio" */
}
.casa-root[data-fase="setor"] .casa-orb-area{width:min(34vw,130px)}
#casa-orb-canvas{width:100%;height:100%;display:block}

.casa-unlock-btn{
  position:absolute;left:50%;bottom:-6px;transform:translate(-50%,100%);
  display:inline-flex;align-items:center;gap:8px;white-space:nowrap;
  background:var(--oxxy-panel-strong);border:1px solid var(--oxxy-border);
  color:var(--oxxy-ink);border-radius:999px;padding:9px 18px;font-size:13px;font-weight:600;
  cursor:pointer;backdrop-filter:blur(6px);
  box-shadow:0 0 0 0 rgba(155,93,229,.5);
  animation:casa-pulso 2.4s ease-in-out infinite;
}
.casa-unlock-btn[hidden]{display:none}
@keyframes casa-pulso{
  0%,100%{box-shadow:0 0 0 0 rgba(155,93,229,.38)}
  50%{box-shadow:0 0 0 9px rgba(155,93,229,0)}
}

/* ---------------- legenda (fala do Orbi, sempre visível) ---------------- */
.casa-legenda-area{
  min-height:52px;
  max-width:var(--oxxy-maxw);
  text-align:center;
  font-size:16px;line-height:1.5;color:var(--oxxy-ink);
  padding:0 6px;
}
.casa-legenda-area .casa-estado-tag{
  display:inline-block;font-size:11px;font-weight:700;letter-spacing:1px;
  color:var(--oxxy-ink-faint);text-transform:uppercase;margin-bottom:4px;
}
.casa-linha-visitante{color:var(--oxxy-ink-faint);font-size:13px}

/* ---------------- chips de setor ---------------- */
.casa-chips-area{
  display:flex;flex-wrap:wrap;gap:9px;justify-content:center;max-width:var(--oxxy-maxw);
}
.casa-chip{
  display:inline-flex;align-items:center;gap:7px;
  background:var(--oxxy-panel);border:1px solid var(--oxxy-border-soft);
  color:var(--oxxy-ink-dim);border-radius:999px;padding:8px 14px 8px 10px;
  font-size:13px;font-weight:600;cursor:pointer;transition:border-color .2s,color .2s,transform .15s;
}
.casa-chip svg{width:18px;height:18px}
.casa-chip:hover{border-color:var(--oxxy-border);color:var(--oxxy-ink)}
.casa-chip[aria-pressed="true"]{
  border-color:transparent;color:#0d0a16;
  background:var(--oxxy-grad);
}
.casa-chip[aria-pressed="true"] svg *{stroke:#0d0a16}

/* ---------------- LANE EXPERIÊNCIA (28/08): ramos extras + botão "+" ----------------
   Ordem do Founder: cards fixos (os 6 acima, já com cena gerada) + alguns
   sorteados a cada carregamento (variedade) + "+" pra digitar um ramo que
   não está na lista — personaliza a conversa e registra pedido (sem PII)
   pra rodada futura de criação automática de vertical. */
.casa-chips-extra{display:contents}
.casa-chip-extra{border-style:dashed}
.casa-chip-mais{border-style:dashed;color:var(--oxxy-ink-dim)}
.casa-chip-mais[aria-expanded="true"]{border-color:var(--oxxy-cyan);color:var(--oxxy-ink)}
.casa-chip-mais-form{
  display:flex;gap:8px;flex-wrap:wrap;max-width:var(--oxxy-maxw);margin:10px auto 0;
}
.casa-chip-mais-form[hidden]{display:none}
.casa-chip-mais-form input{
  flex:1 1 200px;background:rgba(0,0,0,.28);border:1px solid var(--oxxy-border-soft);
  color:var(--oxxy-ink);border-radius:var(--oxxy-radius-sm);padding:10px 13px;font-size:14px;
}
.casa-chip-mais-form input::placeholder{color:var(--oxxy-ink-faint)}
.casa-chip-mais-form button{
  flex:none;background:var(--oxxy-grad);color:#0d0a16;border:none;border-radius:var(--oxxy-radius-sm);
  padding:10px 16px;font-weight:700;font-size:13.5px;cursor:pointer;
}
.casa-chip-mais-form button:disabled{opacity:.55;cursor:default}
.casa-chip-mais-msg{
  max-width:var(--oxxy-maxw);margin:8px auto 0;text-align:center;font-size:12.5px;
  color:var(--oxxy-green);line-height:1.5;
}
.casa-chip-mais-msg[hidden]{display:none}
.casa-chip-mais-msg.casa-chip-mais-msg-erro{color:var(--oxxy-ink-faint)}
@media (min-width:860px){
  .casa-root[data-fase="setor"] .casa-cap02-grid .casa-chip-mais-form,
  .casa-root[data-fase="setor"] .casa-cap02-grid .casa-chip-mais-msg{grid-column:1}
}

/* ---------------- painel de setor (produto reage à conversa) ---------------- */
.casa-setor-area,.casa-demo-slot,.casa-provaviva,.casa-lead-area{
  width:100%;max-width:var(--oxxy-maxw);margin:0 auto;
}
.casa-setor-card{
  background:var(--oxxy-panel);border:1px solid var(--oxxy-border-soft);
  border-radius:var(--oxxy-radius-lg);padding:20px 22px;
  display:flex;gap:16px;align-items:flex-start;
  animation:casa-entra var(--oxxy-dur) ease both;
}
.casa-setor-card .casa-setor-ico{
  flex:none;width:44px;height:44px;border-radius:12px;
  background:rgba(255,255,255,.04);display:flex;align-items:center;justify-content:center;
}
.casa-setor-card .casa-setor-ico svg{width:26px;height:26px}
.casa-setor-card h2{font-size:16px;margin-bottom:6px;color:var(--oxxy-ink)}
.casa-setor-card p{font-size:14px;color:var(--oxxy-ink-dim);line-height:1.5;margin-bottom:10px}
.casa-setor-card ul{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:6px}
.casa-setor-card li{
  font-size:13.5px;color:var(--oxxy-ink);display:flex;gap:8px;align-items:flex-start;
}
.casa-setor-card li::before{
  content:"";flex:none;width:7px;height:7px;border-radius:50%;margin-top:6px;
  background:var(--oxxy-green);
}

@keyframes casa-entra{
  from{opacity:0;transform:translateY(8px)}
  to{opacity:1;transform:translateY(0)}
}

/* slot reservado — LANE CASA-B renderiza aqui (ver CONTRATO.md) */
.casa-demo-slot:empty{display:none}
.casa-demo-slot{
  border-radius:var(--oxxy-radius-lg);
  min-height:0;
}

/* slot reservado — LANE CASA-C (secretária/WhatsApp) renderiza aqui.
   Vazio some sozinho; z-index livre até 39 (composer usa 30, fica por cima
   do conteúdo de página mas abaixo de qualquer modal que a CASA-C decida
   abrir). Ver CONTRATO.md §5. */
.casa-wa-slot:empty{display:none}
.casa-wa-slot{max-width:var(--oxxy-maxw);margin:0 auto;width:100%}

/* ---------------- prova ao vivo ---------------- */
.casa-provaviva{
  background:var(--oxxy-panel);border:1px solid var(--oxxy-border-soft);
  border-radius:var(--oxxy-radius-lg);padding:16px 18px;
}
.casa-prova-btn{
  width:100%;display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap;
  background:transparent;border:1px dashed var(--oxxy-border);color:var(--oxxy-ink);
  border-radius:var(--oxxy-radius-md);padding:13px 16px;font-size:13.5px;font-weight:600;
  cursor:pointer;transition:border-color .2s,background .2s;
}
.casa-prova-btn:hover{background:rgba(255,255,255,.03);border-color:var(--oxxy-border)}
.casa-selo-mini{
  display:inline-flex;align-items:center;gap:5px;
  font-size:10.5px;font-weight:800;letter-spacing:1.2px;color:var(--oxxy-green);
  border:1px solid rgba(92,227,162,.4);border-radius:999px;padding:3px 9px 3px 7px;
}
.casa-selo-mini::before{
  content:"";width:6px;height:6px;border-radius:50%;background:var(--oxxy-green);
  box-shadow:0 0 0 3px rgba(92,227,162,.25);
}
#casa-prova-resultado{margin-top:12px;font-size:13.5px;color:var(--oxxy-ink-dim);line-height:1.5}
#casa-prova-resultado .casa-fonte,#casa-prova-resultado2 .casa-fonte{color:var(--oxxy-ink-faint);font-size:12px;display:block;margin-top:6px}
#casa-prova-resultado2{margin-top:12px;font-size:13.5px;color:var(--oxxy-ink-dim);line-height:1.5}

/* ---------------- captura honesta de contato ---------------- */
.casa-lead-area{
  background:var(--oxxy-panel);border:1px solid var(--oxxy-border-soft);
  border-radius:var(--oxxy-radius-lg);padding:18px 20px;
  animation:casa-entra var(--oxxy-dur) ease both;
}
.casa-lead-area[hidden]{display:none}
.casa-lead-area p{font-size:13.5px;color:var(--oxxy-ink-dim);margin-bottom:12px;line-height:1.5}
.casa-lead-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 10px}
.casa-lead-campo{display:grid;gap:6px;min-width:0}
.casa-lead-campo-largo{grid-column:1/-1}
.casa-lead-campo>label{font-size:12px;color:var(--oxxy-ink-dim);margin:2px 0 0}
.casa-lead-form input,.casa-lead-form select{
  flex:1 1 180px;background:rgba(0,0,0,.28);border:1px solid var(--oxxy-border-soft);
  color:var(--oxxy-ink);border-radius:var(--oxxy-radius-sm);padding:11px 13px;font-size:14px;
}
.casa-lead-form input::placeholder{color:var(--oxxy-ink-faint)}
.casa-lead-termos{grid-column:1/-1;display:flex;align-items:flex-start;gap:9px;color:var(--oxxy-ink-dim);font-size:12px;line-height:1.45}
.casa-lead-termos input{flex:0 0 auto;width:18px;height:18px;padding:0;margin-top:1px;accent-color:var(--oxxy-cyan)}
.casa-lead-botoes{display:flex;gap:8px;grid-column:1/-1}
.casa-lead-enviar{
  background:var(--oxxy-grad);color:#0d0a16;border:none;border-radius:var(--oxxy-radius-sm);
  padding:11px 18px;font-weight:700;font-size:13.5px;cursor:pointer;
}
.casa-lead-dispensar{
  background:transparent;color:var(--oxxy-ink-faint);border:1px solid var(--oxxy-border-soft);
  border-radius:var(--oxxy-radius-sm);padding:11px 16px;font-size:13.5px;cursor:pointer;
}
.casa-lead-ok{color:var(--oxxy-green);font-size:13.5px;font-weight:600}

/* ---------------- composer fixo ---------------- */
.casa-composer{
  position:fixed;left:0;right:0;bottom:0;z-index:30;
  padding:12px 16px calc(12px + env(safe-area-inset-bottom));
  background:linear-gradient(to top,#070509 55%,transparent);
}
html[data-tema="claro"] .casa-composer{background:linear-gradient(to top,#fdfcff 60%,transparent)}

/* ---------------- LANE PENDÊNCIAS (28/08) item 7: confirmar contato falado ----------------
   FIX (28/08, achado no teste em browser): a animação genérica `casa-entra` seta
   `transform:translateY(...)` nos seus próprios keyframes, e isso SUBSTITUI por
   inteiro o `transform:translateX(-50%)` estático daqui (CSS não compõe
   transform de propriedade + keyframe — quem "ganha" é o keyframe). Resultado
   visto ao vivo: o cartão colapsava pra left:0 sem centralizar. Keyframes
   dedicados abaixo mantêm o translateX(-50%) em toda a animação. */
@keyframes casa-contato-entra{
  from{opacity:0;transform:translate(-50%,8px)}
  to{opacity:1;transform:translate(-50%,0)}
}
.casa-contato-confirma{
  position:fixed;left:50%;transform:translate(-50%,0);z-index:26;
  bottom:calc(var(--oxxy-composer-real-h, var(--oxxy-composer-h)) + env(safe-area-inset-bottom) + 12px);
  width:min(420px,92vw);
  background:var(--oxxy-panel-strong);border:1px solid var(--oxxy-border);
  border-radius:var(--oxxy-radius-md);padding:14px 16px;
  box-shadow:0 14px 34px rgba(0,0,0,.35);
  animation:casa-contato-entra .3s ease both;
}
.casa-contato-confirma[hidden]{display:none}
.casa-contato-confirma-titulo{margin:0 0 8px;font-size:13px;font-weight:700;color:var(--oxxy-ink)}
.casa-contato-confirma-valor{
  width:100%;background:var(--oxxy-panel);border:1px solid var(--oxxy-border-soft);
  border-radius:var(--oxxy-radius-sm);padding:9px 12px;color:var(--oxxy-ink);
  font-size:14px;font-family:inherit;margin-bottom:10px;
}
.casa-contato-confirma-valor:focus{outline:2px solid var(--oxxy-focus);outline-offset:1px}
.casa-contato-confirma-botoes{display:flex;gap:8px}
.casa-contato-confirma-certo{
  flex:1;background:var(--oxxy-grad);color:#0d0a16;border:none;border-radius:999px;
  padding:9px 14px;font-weight:700;font-size:13px;cursor:pointer;
}
.casa-contato-confirma-corrigir{
  background:transparent;border:1px solid var(--oxxy-border-soft);color:var(--oxxy-ink-dim);
  border-radius:999px;padding:9px 14px;font-size:13px;cursor:pointer;
}
/* LANE PENDÊNCIAS (28/08) item 5: "apagar meus dados" — discreto, mesmo nível
   visual do crédito/legal ao redor, mas com alvo de toque de verdade (44px). */
.casa-apagar-dados-btn{
  display:block;margin:6px auto 0;background:transparent;border:none;cursor:pointer;
  color:var(--oxxy-ink-faint);font-size:11px;text-decoration:underline;
  text-underline-offset:2px;padding:8px 10px;font-family:inherit;
}
.casa-apagar-dados-btn:hover{color:var(--oxxy-ink-dim)}
.casa-form{
  max-width:var(--oxxy-maxw);margin:0 auto;
  display:flex;align-items:center;gap:8px;
  background:var(--oxxy-panel-strong);border:1px solid var(--oxxy-border);
  border-radius:999px;padding:6px 6px 6px 8px;
  backdrop-filter:blur(10px);
}
.casa-mic-btn{
  flex:none;width:40px;height:40px;border-radius:50%;
  background:rgba(255,255,255,.05);border:1px solid var(--oxxy-border-soft);
  color:var(--oxxy-ink);font-size:16px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  transition:background .2s,border-color .2s;
}
.casa-mic-btn[aria-pressed="true"]{
  background:var(--oxxy-green);border-color:transparent;color:#0a0910;
}
.casa-mic-btn[hidden]{display:none}
.casa-input{
  flex:1;background:transparent;border:none;color:var(--oxxy-ink);font-size:15px;
  padding:9px 4px;min-width:0;
}
.casa-input:focus{outline:none}
.casa-input::placeholder{color:var(--oxxy-ink-faint)}
.casa-send-btn{
  flex:none;background:var(--oxxy-grad);color:#0d0a16;border:none;border-radius:999px;
  padding:10px 18px;font-weight:700;font-size:13.5px;cursor:pointer;
}
.casa-send-btn:disabled{opacity:.5;cursor:default}
.casa-legal{
  max-width:var(--oxxy-maxw);margin:8px auto 0;text-align:center;
  font-size:11px;color:var(--oxxy-ink-faint);
}
.casa-legal a{color:var(--oxxy-ink-faint);text-decoration:underline}

/* ---------------- LANE CONVERSÃO (28/08): CTA flutuante de peso crescente ----------------
   Sempre alcançável, nunca em cima do composer (fica ACIMA dele, com a folga de
   --oxxy-composer-h). Some no capítulo 01 (atualizaCtaFlutuante só revela depois
   da 1ª resposta). Peso 0..3 controla tamanho/cor/brilho — nunca pop-up, nunca
   bloqueia clique em nada atrás (largura própria, canto direito). */
.casa-cta-flutuante{
  position:fixed;right:14px;z-index:25;
  /* achado ao vivo (28/08): --oxxy-composer-h é uma ESTIMATIVA (84px/56px) —
     o composer real pode ficar bem mais alto (texto legal quebrando linha,
     crédito da trilha, etc.; já documentado na nota da LANE MOBILE-ENTRADA).
     Medido ao vivo em 375×812: composer real com 143px, CTA calculado com
     84px ficava POR BAIXO do composer. --oxxy-composer-real-h (JS, via
     ResizeObserver em casa_core.js) usa a altura de verdade quando disponível;
     a variável estática continua como fallback antes do 1º layout. */
  bottom:calc(var(--oxxy-composer-real-h, var(--oxxy-composer-h)) + env(safe-area-inset-bottom) + 14px);
  transition:bottom .25s ease;
}
.casa-cta-flutuante[hidden]{display:none!important}
.casa-cta-flutuante-btn{
  display:inline-flex;align-items:center;gap:7px;cursor:pointer;
  border-radius:999px;font-weight:700;white-space:nowrap;
  background:var(--oxxy-panel-strong);color:var(--oxxy-ink-dim);
  border:1px solid var(--oxxy-border-soft);backdrop-filter:blur(10px);
  padding:8px 14px;font-size:12px;opacity:.72;
  transition:opacity .3s,background .3s,color .3s,border-color .3s,padding .3s,font-size .3s,transform .2s;
}
.casa-cta-flutuante-btn:hover,.casa-cta-flutuante-btn:focus-visible{opacity:1;transform:translateY(-1px)}
.casa-cta-flutuante-ico svg{display:block}
/* peso 1: já apareceu valor (1 módulo/turno) — mais legível, ainda discreto */
.casa-cta-flutuante[data-peso="1"] .casa-cta-flutuante-btn{opacity:.86;border-color:var(--oxxy-border);color:var(--oxxy-ink)}
/* peso 2: já viu tour+secretária (ou 4 turnos) — ganha cor da marca */
.casa-cta-flutuante[data-peso="2"] .casa-cta-flutuante-btn{
  opacity:1;padding:9px 16px;font-size:12.5px;
  background:rgba(226,55,145,.14);border-color:rgba(226,55,145,.5);color:var(--oxxy-ink);
}
/* peso 3: setor identificado + engajado — o mais presente, com leve pulso na entrada */
.casa-cta-flutuante[data-peso="3"] .casa-cta-flutuante-btn{
  opacity:1;padding:11px 19px;font-size:13.5px;background:var(--oxxy-grad);color:#0d0a16;border-color:transparent;
  box-shadow:0 10px 30px rgba(226,55,145,.28);
}
.casa-cta-flutuante[data-peso="3"] .casa-cta-flutuante-ico svg path{stroke:#0d0a16}
@keyframes casa-cta-aceso{0%{transform:scale(1)}30%{transform:scale(1.08)}100%{transform:scale(1)}}
.casa-cta-flutuante-aceso .casa-cta-flutuante-btn{animation:casa-cta-aceso .5s ease}
@media (prefers-reduced-motion:reduce){.casa-cta-flutuante-aceso .casa-cta-flutuante-btn{animation:none}}
/* ---------------- LANE RECONSTRUÇÃO (28/08): botão fixo de WhatsApp (suporte/ajuda) ----------------
   Pedido do Founder: "botão fixo, discreto, com logo do WhatsApp... abre o WhatsApp com o
   número oficial continuando daqui de onde ele estava". Canto INFERIOR-ESQUERDO (o CTA
   flutuante já ocupa o direito — §2 do CONTRATO pede exatamente essa separação), acima do
   composer (mesma folga --oxxy-composer-real-h), z-index 25 — abaixo do composer (30), nunca
   disputa toque com ele. Só existe no DOM se casa_wa_fab.js decidir renderizar (número
   configurado); se não, a regra fica sem alvo, inofensiva. */
.casa-wa-fab{
  position:fixed;left:14px;z-index:25;
  bottom:calc(var(--oxxy-composer-real-h, var(--oxxy-composer-h)) + env(safe-area-inset-bottom) + 14px);
  display:inline-flex;align-items:center;gap:7px;cursor:pointer;
  border-radius:999px;font-weight:700;white-space:nowrap;font-size:12px;
  background:var(--oxxy-panel-strong);color:var(--oxxy-ink-dim);
  border:1px solid var(--oxxy-border-soft);backdrop-filter:blur(10px);
  padding:9px 14px 9px 11px;opacity:.72;
  transition:opacity .3s,transform .2s,bottom .25s ease;
}
.casa-wa-fab:hover,.casa-wa-fab:focus-visible{opacity:1;transform:translateY(-1px)}
.casa-wa-fab svg{display:block;flex:none}
@media (max-width:640px){
  .casa-wa-fab{left:10px;bottom:calc(var(--oxxy-composer-real-h, var(--oxxy-composer-h)) + env(safe-area-inset-bottom) + 10px);padding:8px 12px 8px 10px;font-size:11.5px}
  /* alvo de toque ≥44px sem inflar o visual — mesmo truque do topbar (pseudo-elemento) */
  .casa-wa-fab{position:fixed}
  .casa-wa-fab::after{content:"";position:absolute;inset:-6px}
}

@media (max-width:640px){
  .casa-cta-flutuante{right:10px;bottom:calc(var(--oxxy-composer-real-h, var(--oxxy-composer-h)) + env(safe-area-inset-bottom) + 10px)}
  .casa-cta-flutuante-btn{padding:7px 12px;font-size:11.5px}
  .casa-cta-flutuante[data-peso="2"] .casa-cta-flutuante-btn{padding:8px 14px;font-size:12px}
  .casa-cta-flutuante[data-peso="3"] .casa-cta-flutuante-btn{padding:9px 16px;font-size:12.5px}
}

/* LANE ABERTURA (28/08): crédito discreto da trilha (Lyria) — classe própria
   (não reaproveita .casa-legal) de propósito: essa some no mobile
   (display:none lá embaixo), e o crédito deve continuar visível lá também. */
.casa-creditos-trilha{
  max-width:var(--oxxy-maxw);margin:3px auto 0;text-align:center;
  font-size:10px;color:var(--oxxy-ink-faint);opacity:.7;
}

/* ---------------- prefers-reduced-motion: obrigatório, não é enfeite ---------------- */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.01ms!important;
    animation-iteration-count:1!important;
    transition-duration:.01ms!important;
    scroll-behavior:auto!important;
  }
  .casa-unlock-btn{animation:none}
}

@media (max-width:480px){
  .casa-slogan{font-size:18px}
  .casa-stage{padding:4px 14px 14px;gap:16px}
}

/* ================================================================
   LANE MESCLA (27/08) — capítulos numerados, mapa, silêncio elevado,
   tour do celular real, secretária encenada, cartão compartilhável,
   modo cinema. Reusa as variáveis do :root acima; nada duplicado.
   ================================================================ */

/* ---------------- topbar: ações extras ---------------- */
.casa-topbar-acoes{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.casa-topbar-btn{
  position:relative;
  display:inline-flex;align-items:center;gap:6px;
  background:transparent;border:1px solid var(--oxxy-border-soft);color:var(--oxxy-ink-dim);
  border-radius:999px;padding:6px 13px;font-size:12px;font-weight:700;letter-spacing:.4px;
  cursor:pointer;transition:border-color .2s,color .2s,background .2s;
}
.casa-topbar-btn:hover{border-color:var(--oxxy-border);color:var(--oxxy-ink)}
.casa-topbar-btn[aria-pressed="true"],.casa-topbar-btn[aria-expanded="true"]{
  background:var(--oxxy-panel-strong);color:var(--oxxy-ink);border-color:var(--oxxy-border)
}
.casa-topbar-btn-ico{opacity:.85;display:inline-flex;align-items:center}
/* P0-4 (28/08): ícone do botão Silêncio reage ao estado de verdade — ondas
   quando o som está ligado, traço em X quando está em silêncio — em vez de
   um glifo estático (era ◉, um emoji-símbolo genérico, sem relação com a
   ação do botão). */
.casa-ico-mudo{display:none}
[data-silencio="on"] .casa-ico-onda{display:none}
[data-silencio="on"] .casa-ico-mudo{display:inline}

/* LANE PENDÊNCIAS (28/08) item 4: ícone do tema — lua = "escuro ativo" (default),
   sol = "claro ativo". Troca pelo [data-tema] do <html>, mesmo padrão dos
   outros ícones de estado (som/música). */
.casa-ico-tema-sol{display:none}
html[data-tema="claro"] .casa-ico-tema-lua{display:none}
html[data-tema="claro"] .casa-ico-tema-sol{display:inline}

/* ---------------- ticker de honestidade ---------------- */
.casa-ticker{
  max-width:980px;margin:0 auto;padding:0 18px 8px;
  font-size:10.5px;letter-spacing:.6px;text-transform:uppercase;
  color:var(--oxxy-ink-faint);text-align:center;
}

/* ---------------- navegação lateral de capítulos ---------------- */
.casa-capnav{
  position:fixed;left:16px;top:50%;transform:translateY(-50%);z-index:15;
  display:flex;flex-direction:column;gap:14px;
}
.casa-capnav-dot{
  width:9px;height:9px;border-radius:50%;padding:0;
  background:var(--oxxy-border);border:none;cursor:pointer;
  position:relative;transition:background .2s,transform .2s;
}
.casa-capnav-dot:hover{transform:scale(1.35)}
.casa-capnav-dot[aria-current="true"]{background:var(--oxxy-cyan);transform:scale(1.4)}
.casa-capnav-dot.casa-capnav-pulso{animation:casa-dot-pulso 1.6s ease-in-out 3}
@keyframes casa-dot-pulso{
  0%,100%{box-shadow:0 0 0 0 rgba(92,227,162,.55)}
  50%{box-shadow:0 0 0 7px rgba(92,227,162,0)}
}
@media (max-width:1099px){.casa-capnav{display:none}}

/* ---------------- capítulos: cabeçalho editorial ---------------- */
.casa-cap{
  max-width:820px;margin:0 auto;width:100%;
  padding:76px 18px 8px;
  scroll-margin-top:96px;
}
.casa-cap-full{max-width:1080px}
#cap-01{padding-top:8px}
#cap-01 .casa-cap-eyebrow{margin-bottom:8px}
#cap-01 .casa-voz-banner-texto{display:none}
@media (min-height:760px){#cap-01 .casa-voz-banner-texto{display:block}}
.casa-cap + .casa-cap{border-top:1px solid var(--oxxy-border-soft)}
.casa-cap-eyebrow{
  display:flex;align-items:center;gap:10px;justify-content:center;
  font-size:11.5px;font-weight:800;letter-spacing:2px;text-transform:uppercase;
  color:var(--oxxy-ink-faint);margin-bottom:18px;
}
.casa-cap-num{
  display:inline-flex;align-items:center;justify-content:center;
  width:22px;height:22px;border-radius:50%;border:1px solid var(--oxxy-border);
  font-size:10px;color:var(--oxxy-ink-dim);
}
.casa-cap-titulo{
  font-size:clamp(24px,4.4vw,38px);font-weight:700;line-height:1.22;text-align:center;
  margin:0 auto 14px;max-width:640px;
}
.casa-cap-titulo em{
  font-style:normal;background:var(--oxxy-grad-text);-webkit-background-clip:text;background-clip:text;color:transparent;
}
.casa-cap-sub{
  text-align:center;max-width:560px;margin:0 auto 34px;color:var(--oxxy-ink-dim);
  font-size:15px;line-height:1.6;
}

/* ---------------- modo cinema ---------------- */
.casa-cinema-btn{
  margin:4px auto 0;display:flex;align-items:center;gap:8px;justify-content:center;
  background:transparent;border:1px dashed var(--oxxy-border);color:var(--oxxy-ink-dim);
  border-radius:999px;padding:10px 18px;font-size:12.5px;font-weight:600;cursor:pointer;
  transition:border-color .2s,color .2s,background .2s;
}
.casa-cinema-btn:hover{border-color:var(--oxxy-border);color:var(--oxxy-ink);background:rgba(255,255,255,.03)}
.casa-cinema-btn[aria-pressed="true"]{border-style:solid;border-color:var(--oxxy-magenta);color:var(--oxxy-ink)}

/* ---------------- mapa (modal) ---------------- */
.casa-mapa-overlay{
  position:fixed;inset:0;z-index:60;background:rgba(6,5,10,.72);backdrop-filter:blur(3px);
}
.casa-mapa-overlay[hidden]{display:none}
.casa-mapa-modal{
  position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);z-index:61;
  width:min(680px,94vw);max-height:88vh;overflow:auto;
  background:var(--oxxy-panel-strong);border:1px solid var(--oxxy-border);
  border-radius:var(--oxxy-radius-lg);padding:30px 26px 26px;
}
.casa-mapa-modal[hidden]{display:none}
.casa-mapa-fechar{
  position:absolute;right:16px;top:16px;width:32px;height:32px;border-radius:50%;
  background:rgba(255,255,255,.06);border:1px solid var(--oxxy-border-soft);color:var(--oxxy-ink);
  cursor:pointer;font-size:14px;
  display:flex;align-items:center;justify-content:center;
}
.casa-mapa-kicker{font-size:11px;font-weight:800;letter-spacing:2px;color:var(--oxxy-magenta);margin-bottom:8px}
.casa-mapa-modal h2{font-size:22px;font-weight:700;margin-bottom:10px}
.casa-mapa-legenda{font-size:13.5px;color:var(--oxxy-ink-dim);line-height:1.5;margin-bottom:14px;min-height:1.5em}

/* ---------------- P0-A3: mapa vivo (grafo estilo Obsidian) ---------------- */
.casa-mapa-alt-toggle{
  background:transparent;border:1px solid var(--oxxy-border-soft);color:var(--oxxy-ink-dim);
  border-radius:999px;padding:7px 14px;font-size:12px;font-weight:700;cursor:pointer;
  margin-bottom:12px;transition:border-color .2s,color .2s;
}
.casa-mapa-alt-toggle:hover{border-color:var(--oxxy-border);color:var(--oxxy-ink)}
.casa-mapa-grafo-wrap{
  position:relative;height:min(320px,46vh);min-height:220px;
  background:rgba(0,0,0,.22);border:1px solid var(--oxxy-border-soft);border-radius:var(--oxxy-radius-md);
  overflow:hidden;touch-action:none;
}
html[data-tema="claro"] .casa-mapa-grafo-wrap{background:rgba(0,0,0,.05)}
.casa-mapa-grafo-wrap[hidden]{display:none}
#casa-mapa-canvas{display:block;cursor:pointer}
.casa-mapa-grafo-dica{
  position:absolute;left:0;right:0;bottom:0;margin:0;padding:8px 12px;
  font-size:12px;color:var(--oxxy-ink-dim);background:linear-gradient(0deg,rgba(6,5,10,.75),transparent);
  pointer-events:none;
}
html[data-tema="claro"] .casa-mapa-grafo-dica{background:linear-gradient(0deg,rgba(255,255,255,.82),transparent)}
/* lista acessível (equivalente por teclado) — fica fora de vista até o
   Founder/visitante tocar em "Ver como lista"; nunca fica display:none
   junto com o toggle, então Tab + leitor de tela sempre alcançam. */
.casa-mapa-lista{list-style:none;margin:14px 0 0;padding:0;display:flex;flex-direction:column;gap:6px}
.casa-mapa-lista[hidden]{display:none}
.casa-mapa-litem{
  width:100%;display:flex;align-items:center;gap:10px;text-align:left;
  background:rgba(255,255,255,.03);border:1px solid var(--oxxy-border-soft);border-radius:var(--oxxy-radius-md);
  padding:10px 14px;color:var(--oxxy-ink-dim);font-size:13.5px;font-weight:600;cursor:pointer;
  transition:border-color .2s,background .2s,color .2s;
}
.casa-mapa-litem:hover,.casa-mapa-litem:focus-visible{border-color:var(--oxxy-border);background:rgba(255,255,255,.06)}
.casa-mapa-litem-sub{margin-left:22px}
.casa-mapa-litem-sub .casa-mapa-litem{font-size:12.5px;padding:8px 12px}
.casa-mapa-litem-visto{color:var(--oxxy-ink)}
.casa-mapa-litem-visto .casa-mapa-litem-nome{background:var(--oxxy-grad-text);-webkit-background-clip:text;background-clip:text;color:transparent}
.casa-mapa-litem-nome{flex:1}
.casa-mapa-litem-status{font-size:11px;color:var(--oxxy-ink-dim);white-space:nowrap}
.casa-mapa-n{font-size:11px;color:var(--oxxy-cyan);font-weight:800;letter-spacing:1px}
@media (prefers-reduced-motion: reduce){
  .casa-mapa-grafo-wrap{touch-action:auto}
}

/* ---------------- prova: grade de 3 ---------------- */
.casa-prova-grid{
  margin-top:16px;display:grid;grid-template-columns:1fr 1fr;gap:14px;
}
@media (max-width:640px){.casa-prova-grid{grid-template-columns:1fr}}
.casa-prova-tile{
  background:var(--oxxy-panel);border:1px solid var(--oxxy-border-soft);
  border-radius:var(--oxxy-radius-lg);padding:16px 18px;
}
.casa-prova-tile p{font-size:13.5px;color:var(--oxxy-ink-dim);line-height:1.5;margin:10px 0 0}
.casa-selo-mini-cyan{color:var(--oxxy-cyan);border-color:rgba(66,201,232,.4)}
.casa-selo-mini-cyan::before{background:var(--oxxy-cyan);box-shadow:0 0 0 3px rgba(66,201,232,.25)}
#casa-prova-latencia-txt strong{color:var(--oxxy-green)}

/* ---------------- capítulo 05: Sua OXXY ---------------- */
.casa-suaoxxy-vazio{
  text-align:center;color:var(--oxxy-ink-faint);font-size:14px;max-width:480px;margin:0 auto;
  padding:34px 18px;border:1px dashed var(--oxxy-border-soft);border-radius:var(--oxxy-radius-lg);
}
.casa-suaoxxy-card{
  display:grid;grid-template-columns:1fr;gap:0;
  background:var(--oxxy-panel);border:1px solid var(--oxxy-border-soft);border-radius:var(--oxxy-radius-lg);
  overflow:hidden;animation:casa-entra var(--oxxy-dur) ease both;
}
@media (min-width:760px){.casa-suaoxxy-card{grid-template-columns:1fr 1fr}}
.casa-suaoxxy-cena{
  position:relative;min-height:200px;background:
    radial-gradient(600px 400px at 30% 0%,rgba(155,93,229,.25),transparent 60%),
    linear-gradient(160deg,#171325,#0b0912);
  display:flex;align-items:center;justify-content:center;
}
.casa-suaoxxy-cena img,.casa-suaoxxy-cena video{width:100%;height:100%;object-fit:cover;position:absolute;inset:0}
.casa-suaoxxy-cena-fallback{position:relative;z-index:1;width:74px;height:74px;opacity:.55}
.casa-suaoxxy-corpo{padding:26px 26px 28px}
.casa-suaoxxy-corpo h3{font-size:19px;margin-bottom:10px}
.casa-suaoxxy-corpo p{font-size:14px;color:var(--oxxy-ink-dim);line-height:1.55;margin-bottom:14px}
.casa-suaoxxy-corpo ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.casa-suaoxxy-corpo li{font-size:13.5px;color:var(--oxxy-ink);display:flex;gap:8px}
.casa-suaoxxy-corpo li::before{content:"";flex:none;width:7px;height:7px;border-radius:50%;margin-top:6px;background:var(--oxxy-green)}

/* ---------------- capítulo 06: cartão compartilhável ---------------- */
.casa-cartao-area{text-align:center;margin-bottom:30px}
.casa-cartao-intro{max-width:460px;margin:0 auto 16px;color:var(--oxxy-ink-dim);font-size:14px;line-height:1.55}
.casa-cartao-btn{
  background:var(--oxxy-grad);color:#0d0a16;border:none;border-radius:999px;
  padding:13px 24px;font-weight:700;font-size:14px;cursor:pointer;
}
#casa-cartao-resultado{margin-top:20px}
.casa-cartao-canvas-wrap{display:flex;flex-direction:column;align-items:center;gap:12px}
.casa-cartao-canvas-wrap canvas{
  width:min(360px,90vw);height:auto;border-radius:18px;border:1px solid var(--oxxy-border);
  box-shadow:0 18px 50px rgba(0,0,0,.45);
}
.casa-cartao-baixar{
  display:inline-flex;align-items:center;gap:8px;background:transparent;color:var(--oxxy-ink);
  border:1px solid var(--oxxy-border);border-radius:999px;padding:9px 18px;font-size:13px;font-weight:600;
  text-decoration:none;cursor:pointer;
}
.casa-cartao-baixar:hover{border-color:var(--oxxy-cyan);color:var(--oxxy-cyan)}

/* ---------------- LANE CONVERSÃO (28/08): golpe final — resumo pra levar ---------------- */
.casa-resumo-conversa{
  max-width:420px;margin:22px auto 0;text-align:left;padding:18px 20px;
  background:var(--oxxy-panel);border:1px solid var(--oxxy-border-soft);border-radius:var(--oxxy-radius-lg);
}
.casa-resumo-kicker{font-size:10.5px;font-weight:800;letter-spacing:1.4px;color:var(--oxxy-cyan);margin-bottom:8px}
.casa-resumo-linha{font-size:14.5px;color:var(--oxxy-ink);margin-bottom:10px}
.casa-resumo-lista{list-style:none;margin:0 0 16px;padding:0;display:flex;flex-direction:column;gap:6px}
.casa-resumo-lista li{font-size:13px;color:var(--oxxy-ink-dim);display:flex;gap:8px;line-height:1.4}
.casa-resumo-lista li::before{content:"✓";flex:none;color:var(--oxxy-green);font-weight:700}
.casa-resumo-cta{
  width:100%;background:var(--oxxy-grad);color:#0d0a16;border:none;border-radius:999px;
  padding:12px 18px;font-weight:800;font-size:13.5px;cursor:pointer;
}

/* ---------------- LANE CONVERSÃO (28/08): segundo minuto — susto bom (cap. 02) ---------------- */
.casa-susto-card{
  max-width:460px;margin:22px auto 0;text-align:center;padding:18px 22px;
  background:linear-gradient(160deg,rgba(226,55,145,.12),rgba(66,201,232,.08));
  border:1px solid var(--oxxy-border);border-radius:var(--oxxy-radius-lg);
  animation:casa-entra .4s ease both;
}
@media (prefers-reduced-motion:reduce){.casa-susto-card{animation:none}}
.casa-susto-titulo{font-size:15px;font-weight:700;color:var(--oxxy-ink);margin-bottom:6px}
.casa-susto-sub{font-size:12.5px;color:var(--oxxy-ink-faint);margin-bottom:14px}
.casa-susto-btn{
  background:var(--oxxy-grad);color:#0d0a16;border:none;border-radius:999px;
  padding:11px 20px;font-weight:700;font-size:13px;cursor:pointer;
}
.casa-susto-btn:disabled{opacity:.6;cursor:default}
.casa-susto-card.casa-susto-enviado .casa-susto-btn{opacity:.6}
/* FIX-R2 P1-1: painel do resultado mora DENTRO do próprio cartão que o
   visitante já está olhando — nunca em .casa-legenda-area (que fica lá no
   capítulo 01 e já rolou pra fora da tela quando o visitante chega aqui). */
.casa-susto-resultado{
  margin-top:14px;padding:14px 16px;text-align:left;font-size:13.5px;line-height:1.5;
  color:var(--oxxy-ink);background:rgba(255,255,255,.05);border:1px solid var(--oxxy-border);
  border-radius:var(--oxxy-radius-md,12px);white-space:pre-line;
}
.casa-susto-resultado.casa-susto-gerando{color:var(--oxxy-ink-faint);font-style:italic}

/* ================================================================
   CAPÍTULO 03 — O SISTEMA (celular real via iframe /mobile/ same-origin
   + computador em maquete fiel, trilho de módulos compartilhado, legenda
   narrada). Gerado por casa_tour.js dentro de #casa-demo-slot. LANE
   REBUILD (27/08): dois dispositivos por alternância (ver brief). */
/* LANE RECONSTRUÇÃO (28/08) — RECONSTRUÇÃO mobile-first do capítulo: o
   Founder testou e reprovou (retrocesso real) a versão anterior — "o
   aparelho fica cortado atrás do composer, na primeira tela do capítulo
   você não vê o celular". A causa não era só o tamanho do aparelho: o
   BLOCO DE CABEÇALHO (selo+kicker+título+subtítulo+3 cards) empurrava o
   demo pra muito longe da dobra. Fix de duas frentes: (1) os 3 cards
   "três inteligências" saíram de ANTES pra DEPOIS do demo no HTML (são
   reforço, não pré-requisito — ver casa.html); (2) o cabeçalho que resta
   ANTES do demo fica bem mais compacto no mobile (abaixo). */
@media (max-width:680px){
  .casa-cap03-head{margin-bottom:6px}
  #cap-03.casa-cap{padding-top:18px}
  #cap-03 .casa-cap-eyebrow{margin-bottom:4px}
  #cap-03 .casa-trint-kicker{font-size:10px;margin-bottom:3px}
  #cap-03 .casa-cap-titulo{font-size:clamp(18px,5.4vw,22px);margin-bottom:4px;line-height:1.15}
  /* achado ao vivo (28/08): o orçamento vertical do capítulo é apertado
     (topbar+cabeçalho+composer somam mais da metade dos 844px de um
     celular comum) — o subtítulo explicativo vira redundante assim que os
     controles (toggle Celular/Computador, trilho de módulos) já estão
     visíveis logo abaixo; escondido só no mobile pra devolver ~60px pro
     aparelho, que é quem o Founder pediu pra proteger. Continua no DOM
     (a11y/leitor de tela) e volta a aparecer ≥681px. */
  /* visualmente escondido, MAS ainda lido por leitor de tela — mesma
     técnica de .sr-only (nunca display:none em texto informativo). */
  #cap-03 .casa-cap-sub{
    position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
    clip:rect(0,0,0,0);white-space:nowrap;border:0;
  }
}
.casa-tour-wrap{
  max-width:1080px;margin:0 auto;display:grid;grid-template-columns:minmax(0,1fr);gap:34px;align-items:start;
  position:relative;   /* LANE CONVERSÃO (28/08): âncora do fio SVG que liga o clique ao orbe */
}
@media (min-width:900px){.casa-tour-wrap{grid-template-columns:280px minmax(0,1fr)}}
/* P0-2 (28/08): min-width:0 é obrigatório aqui — sem isso, item de grid
   herda min-width:auto (= o maior conteúdo interno) e o trilho de
   módulos/maquete conseguia estourar a coluna e vazar da tela (achado
   ao vivo: 397px de conteúdo dentro de 390px de viewport). */
.casa-tour-trilho-col{display:flex;flex-direction:column;gap:14px;order:2;min-width:0}
@media (min-width:900px){.casa-tour-trilho-col{order:1}}
.casa-tour-trilho{display:flex;flex-direction:column;gap:8px}
.casa-tour-nao-achou{font-size:12px;color:var(--oxxy-ink-faint);line-height:1.5;padding:2px 4px}
.casa-tour-chip{
  display:flex;align-items:center;gap:12px;text-align:left;width:100%;
  background:var(--oxxy-panel);border:1px solid var(--oxxy-border-soft);border-radius:var(--oxxy-radius-md);
  padding:12px 14px;cursor:pointer;color:var(--oxxy-ink);transition:border-color .2s,background .2s,transform .15s;
}
.casa-tour-chip:hover{border-color:var(--oxxy-border);transform:translateX(2px)}
.casa-tour-chip[aria-pressed="true"]{border-color:transparent;background:var(--oxxy-grad);color:#0d0a16}
.casa-tour-chip[aria-pressed="true"] svg *{stroke:#0d0a16}
.casa-tour-chip svg{width:26px;height:26px;flex:none}
.casa-tour-chip-txt{display:flex;flex-direction:column;gap:1px}
.casa-tour-chip-nome{font-size:13.5px;font-weight:700}
.casa-tour-chip-tag{font-size:10.5px;color:var(--oxxy-ink-faint)}
.casa-tour-chip[aria-pressed="true"] .casa-tour-chip-tag{color:#3c3151}

.casa-tour-devices{order:1;display:flex;flex-direction:column;align-items:center;gap:16px;min-width:0}
@media (min-width:900px){.casa-tour-devices{order:2}}
/* ---------------- LANE EXPERIÊNCIA (28/08): presença do Orbi no tour ----------------
   Ordem do Founder: o Orbi tem que ficar visível e vivo enquanto o tour roda, "tipo
   fica só a voz, falta a presença". Mini enxame no FLUXO normal (nunca position:fixed/
   absolute) ancorado acima do trilho de dispositivos — nunca tapa celular/computador,
   só ocupa espaço vertical, inclusive no mobile (achado anterior: orb tampando dado). */
/* LANE RECONSTRUÇÃO (28/08): reconstrução mobile-first do capítulo — o orbe e o
   toggle de dispositivo viraram UMA linha só (.casa-tour-controls-row) em vez de
   duas linhas empilhadas. Isto sozinho devolve ~90px de altura pro aparelho, que
   é quem realmente precisa desse espaço (ordem do Founder: "o aparelho é o
   protagonista, tem que caber inteiro"). O orbe nunca tapa o aparelho — está
   sempre ACIMA dele, fora da moldura, nunca position:fixed/absolute. */
.casa-tour-controls-row{display:flex;align-items:center;justify-content:center;gap:14px;flex-wrap:wrap;width:100%}
.casa-tour-orb-slot{display:flex;justify-content:center;flex:none}
.casa-tour-orb{display:flex;flex-direction:column;align-items:center;gap:4px}
.casa-tour-orb-canvas{width:60px;height:60px;display:block}
.casa-tour-orb-tag{font-size:9px;font-weight:800;letter-spacing:1.6px;color:var(--oxxy-ink-faint);text-transform:uppercase}
@media (min-width:900px){.casa-tour-orb-canvas{width:84px;height:84px}}
/* mobile: orbe vira selo pequeno ao lado do toggle — presença mantida, sem
   custar altura de tela (achado: 60px de canvas + rótulo "ORBI" empilhados
   sozinhos custavam ~90px verticais que faziam falta ao aparelho). */
@media (max-width:899px){
  .casa-tour-orb-canvas{width:34px;height:34px}
  .casa-tour-orb-tag{display:none}
  .casa-tour-orb{gap:0}
  .casa-tour-device-btn{padding:7px 13px;font-size:12.5px}
}
.casa-tour-device-toggle{display:flex;gap:8px;background:var(--oxxy-panel);border:1px solid var(--oxxy-border-soft);border-radius:999px;padding:4px}
.casa-tour-device-btn{
  background:transparent;border:none;color:var(--oxxy-ink-dim);border-radius:999px;
  padding:8px 16px;font-size:13px;font-weight:700;cursor:pointer;transition:background .2s,color .2s;
  display:inline-flex;align-items:center;gap:7px;
}
.casa-tour-device-btn[aria-pressed="true"]{background:var(--oxxy-grad);color:#0d0a16}
.casa-tour-fone-col{display:flex;flex-direction:column;align-items:center;gap:16px}
.casa-tour-fone-col[hidden],.casa-tour-desk-col[hidden]{display:none!important}
.casa-tour-fone{
  position:relative;width:min(300px,100%);aspect-ratio:375/812;border-radius:38px;
  background:#050409;border:6px solid #1a1626;box-shadow:0 30px 70px rgba(0,0,0,.55),0 0 0 1px rgba(140,120,190,.18);
  overflow:hidden;
}
.casa-tour-fone::before{
  content:"";position:absolute;left:50%;top:10px;transform:translateX(-50%);
  width:60px;height:8px;border-radius:6px;background:#0a0812;z-index:2;
}
/* LANE RECONSTRUÇÃO (28/08) — achado ao vivo: o /mobile/demo/ real por trás
   tem seus próprios elementos posicionados (barra de navegação inferior,
   um botão flutuante do Orbi do PRÓPRIO produto) calculados pra um celular
   de verdade (~375×812). Quando a MOLDURA fica menor que isso (qualquer
   viewport curto: celular pequeno, paisagem, A+ ativo), o iframe encolhia
   JUNTO — o app por trás enxergava um "celular" mais baixo do que o normal
   e os próprios elementos internos dele coincidiam/sobrepunham (achado do
   Founder: "orbe rosa por cima da barra de navegação do app"). Fix
   estrutural: o iframe SEMPRE roda no tamanho nativo 375×812 (exatamente
   como um celular de verdade — nenhum elemento interno do app jamais
   precisa se adaptar a um "celular" menor que isso), e é a CAMADA
   (.casa-tour-fone-scaler) que encolhe visualmente via transform:scale,
   nunca o layout do app. A escala é medida ao vivo pelo ResizeObserver de
   #casa-tour-fone em casa_tour.js (--casa-tour-fone-scale) — funciona em
   qualquer moldura, não só na regra de mobile abaixo. */
.casa-tour-fone-scaler{
  position:absolute;top:0;left:0;width:375px;height:812px;
  transform:scale(var(--casa-tour-fone-scale,1));transform-origin:top left;
}
.casa-tour-fone-scaler iframe{position:absolute;inset:0;width:100%;height:100%;border:0;background:#0a0910}
.casa-tour-fone-cta{
  position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;
  background:radial-gradient(220px 220px at 50% 40%,rgba(155,93,229,.28),transparent 70%),#0b0912;
  padding:0 22px;text-align:center;
}
.casa-tour-fone-cta button{
  background:var(--oxxy-grad);color:#0d0a16;border:none;border-radius:999px;
  padding:11px 18px;font-weight:700;font-size:12.5px;cursor:pointer;
  display:inline-flex;align-items:center;gap:8px;
}
.casa-tour-fone-cta p{font-size:11.5px;color:var(--oxxy-ink-dim);line-height:1.5}
/* LANE CONVERSÃO (28/08): legenda agora mora DENTRO de .casa-tour-trilho-col
   (ver casa_tour.js render()), logo abaixo do próprio trilho — antes vivia
   dentro de .casa-tour-devices, embaixo do celular/notebook, ~800px longe de
   quem clicava no topo do trilho num laptop (achado real, medido: chip em
   y=571, legenda em y=1266). Agora nasce no mesmo campo de visão do clique,
   em qualquer largura de tela (mobile empilha tudo na ordem do DOM). */
.casa-tour-legenda{
  min-height:40px;text-align:left;font-size:13.5px;color:var(--oxxy-ink-dim);line-height:1.5;
  background:var(--oxxy-panel);border:1px solid var(--oxxy-border-soft);border-radius:var(--oxxy-radius-md);
  padding:10px 14px;transition:border-color .3s,background .3s;
}
.casa-tour-legenda strong{color:var(--oxxy-ink);font-weight:600}
/* achado ao vivo (28/08, medido): mesmo dentro de .casa-tour-trilho-col, um
   trilho de 7 chips é alto o bastante pra empurrar a legenda pra fora da
   dobra quando o clique é no 1º chip do topo. position:sticky garante que
   ela SEMPRE fica visível (logo abaixo da topbar sticky, que já usa o mesmo
   padrão) enquanto o trilho ainda está na tela — só ≥900px, onde as duas
   colunas existem lado a lado; no mobile tudo empilha perto o bastante. */
@media (min-width:900px){.casa-tour-legenda{position:sticky;top:76px;z-index:2}}
.casa-tour-legenda-flash{border-color:var(--oxxy-cyan);background:rgba(66,201,232,.1)}
@keyframes casa-tour-legenda-flash-kf{0%{border-color:var(--oxxy-cyan);background:rgba(66,201,232,.16)}100%{border-color:var(--oxxy-border-soft);background:var(--oxxy-panel)}}
.casa-tour-legenda.casa-tour-legenda-flash{animation:casa-tour-legenda-flash-kf 1.1s ease both}
@media (prefers-reduced-motion:reduce){.casa-tour-legenda.casa-tour-legenda-flash{animation:none}}
.casa-tour-nota,.casa-tour-nota-desktop{font-size:11px;color:var(--oxxy-ink-faint);text-align:center;max-width:340px}

/* ---------------- LANE CONVERSÃO (28/08): pulso no card clicado + fio até o orbe ----------------
   Reforça a causalidade "cliquei → o Orbi reagiu": o card acende na hora, e uma
   linha rápida liga ele ao mini-orbe (que já muda de cor/estado no mesmo instante,
   síncrono, via casa:estado-changed). Nunca via <a href>, nunca bloqueia clique
   (pointer-events:none no SVG). */
@keyframes casa-pulso-clique-kf{
  0%{box-shadow:0 0 0 0 rgba(226,55,145,.55)}
  100%{box-shadow:0 0 0 14px rgba(226,55,145,0)}
}
.casa-pulso-clique{animation:casa-pulso-clique-kf .7s ease-out}
@media (prefers-reduced-motion:reduce){.casa-pulso-clique{animation:none}}
.casa-tour-fio-svg{
  position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:5;overflow:visible;
  opacity:0;transition:opacity .25s ease;
}
.casa-tour-fio-svg.casa-tour-fio-ativo{opacity:1}
.casa-tour-fio-linha{
  stroke:#9b5de5;stroke-width:1.6;stroke-dasharray:5 4;stroke-linecap:round;
  animation:casa-tour-fio-fluxo .6s linear infinite;
}
.casa-tour-fio-ponto{fill:#e23791}
@keyframes casa-tour-fio-fluxo{to{stroke-dashoffset:-18}}
@media (min-width:900px){.casa-tour-fio-svg{display:block}}
@media (max-width:899px){.casa-tour-fio-svg{display:none}}   /* mobile empilha em coluna única — fio cruzado não ajuda, só a legenda próxima já resolve */

/* ---------------- LANE EXPERIÊNCIA (28/08): paisagem no mobile pro demo do computador
   ---------------- Fullscreen API real (.casa-tour-fs) + fallback CSS pra navegador sem
   suporte, ex. iOS Safari (.casa-tour-fs-fallback) — nunca força rotação, só reage a ela. */
#casa-demo-slot.casa-tour-fs{
  display:flex;align-items:center;justify-content:center;padding:18px;
  background:var(--oxxy-bg-solid);
}
#casa-demo-slot.casa-tour-fs-fallback{
  position:fixed;inset:0;z-index:70;overflow:auto;max-width:none;
  display:flex;align-items:center;justify-content:center;padding:18px;
  background:var(--oxxy-bg-solid);animation:casa-entra .3s ease both;
}
#casa-demo-slot.casa-tour-fs .casa-tour-wrap,
#casa-demo-slot.casa-tour-fs-fallback .casa-tour-wrap{max-width:100%}
#casa-demo-slot.casa-tour-fs .casa-desk-laptop,
#casa-demo-slot.casa-tour-fs-fallback .casa-desk-laptop{width:min(760px,92vw)}
@media (prefers-reduced-motion:reduce){
  #casa-demo-slot.casa-tour-fs-fallback{animation:none}
}

/* ---------------- computador: moldura de notebook + maquete fiel ---------------- */
.casa-desk-laptop{width:min(560px,100%);display:flex;flex-direction:column;align-items:center}
.casa-desk-screen{
  width:100%;aspect-ratio:16/10;border-radius:16px 16px 4px 4px;
  background:#050409;border:7px solid #1a1626;box-shadow:0 30px 70px rgba(0,0,0,.55),0 0 0 1px rgba(140,120,190,.18);
  overflow:hidden;display:flex;flex-direction:column;
}
.casa-desk-base{
  width:min(620px,94vw);height:14px;margin-top:-1px;
  background:linear-gradient(#231d34,#150f22);border-radius:0 0 10px 10px;
  box-shadow:0 10px 18px rgba(0,0,0,.4);
}
.casa-desk-topbar{
  flex:none;display:flex;align-items:center;gap:6px;padding:9px 12px;
  background:#0e0c18;border-bottom:1px solid rgba(140,120,190,.18);
}
.casa-desk-dot{width:8px;height:8px;border-radius:50%;background:rgba(255,255,255,.14)}
.casa-desk-brand{
  margin-left:8px;font-size:11px;font-weight:800;letter-spacing:1.5px;
  background:var(--oxxy-grad-text);-webkit-background-clip:text;background-clip:text;color:transparent;
}
.casa-desk-body{flex:1;display:flex;min-height:0}
.casa-desk-nav{
  flex:none;width:76px;display:flex;flex-direction:column;gap:2px;padding:8px 6px;
  background:#0b0912;border-right:1px solid rgba(140,120,190,.14);overflow-y:auto;
}
.casa-desk-nav-item{
  display:flex;flex-direction:column;align-items:center;gap:3px;background:transparent;border:none;
  border-radius:8px;padding:6px 2px;cursor:pointer;color:var(--oxxy-ink-faint);
}
.casa-desk-nav-item svg{width:16px;height:16px}
.casa-desk-nav-item span{font-size:8px;font-weight:700;line-height:1.15;text-align:center}
.casa-desk-nav-item[aria-pressed="true"]{background:rgba(255,255,255,.06);color:var(--oxxy-ink)}
.casa-desk-nav-item[aria-pressed="true"] svg *{stroke:var(--oxxy-cyan)}
.casa-desk-main{flex:1;padding:14px 16px;overflow-y:auto;min-width:0}
.casa-desk-tela{animation:casa-entra .3s ease both}
.casa-desk-tela-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:10px}
.casa-desk-tela-head h4{font-size:13px;color:var(--oxxy-ink);font-weight:700}
.casa-desk-tela-tag{font-size:9px;color:var(--oxxy-ink-faint);text-transform:uppercase;letter-spacing:.5px}
.casa-desk-kpis{display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap}
.casa-desk-kpi{
  background:rgba(255,255,255,.035);border:1px solid var(--oxxy-border-soft);border-radius:10px;
  padding:8px 12px;display:flex;flex-direction:column;gap:2px;flex:1 1 100px;
}
.casa-desk-kpi-v{font-size:15px;font-weight:800;color:var(--oxxy-ink)}
.casa-desk-kpi-l{font-size:9.5px;color:var(--oxxy-ink-faint)}
.casa-desk-chart{display:flex;align-items:flex-end;gap:5px;height:64px;padding:0 2px}
.casa-desk-chart span{flex:1;background:var(--oxxy-grad);border-radius:3px 3px 0 0;min-height:6%;opacity:.85}

/* ================================================================
   CAPÍTULO 04 — CONTINUIDADE: recapitulação "já viu / falta" + a
   secretária (simulação de conversa estilo mensageiro, voz feminina
   distinta do Orbi). Gerado por casa_secretaria.js dentro de
   #casa-wa-slot. Paleta OXXY própria — não clona marca/UI de terceiros. */
.casa-continuidade-txt{
  max-width:640px;margin:0 auto 24px;text-align:center;font-size:13.5px;color:var(--oxxy-ink-dim);
  line-height:1.55;padding:12px 18px;border:1px dashed var(--oxxy-border-soft);border-radius:var(--oxxy-radius-md);
}
.casa-continuidade-txt:empty{display:none}
.casa-sec-wrap{max-width:640px;margin:0 auto;display:flex;flex-direction:column;align-items:center;gap:18px}
.casa-sec-play{
  display:flex;align-items:center;gap:10px;background:var(--oxxy-grad);color:#0d0a16;border:none;
  border-radius:999px;padding:12px 22px;font-weight:700;font-size:14px;cursor:pointer;
}
.casa-sec-fone{
  width:100%;max-width:400px;background:var(--oxxy-panel-strong);border:1px solid var(--oxxy-border);
  border-radius:var(--oxxy-radius-lg);overflow:hidden;
}
.casa-sec-head{
  display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--oxxy-border-soft);
}
.casa-sec-avatar{
  width:34px;height:34px;border-radius:50%;background:var(--oxxy-grad);
  display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:800;color:#0d0a16;flex:none;
}
.casa-sec-head-txt{display:flex;flex-direction:column}
.casa-sec-head-txt strong{font-size:13.5px}
.casa-sec-head-txt span{font-size:11px;color:var(--oxxy-green)}
.casa-sec-corpo{padding:16px;display:flex;flex-direction:column;gap:10px;min-height:220px;justify-content:flex-end}
.casa-sec-bolha{
  max-width:80%;padding:9px 13px;border-radius:14px;font-size:13.5px;line-height:1.45;
  opacity:0;transform:translateY(6px);animation:casa-bolha-entra .35s ease forwards;
}
@keyframes casa-bolha-entra{to{opacity:1;transform:translateY(0)}}
.casa-sec-bolha-cliente{align-self:flex-start;background:rgba(255,255,255,.06);color:var(--oxxy-ink);border-bottom-left-radius:4px}
.casa-sec-bolha-secretaria{align-self:flex-end;background:linear-gradient(135deg,rgba(226,55,145,.28),rgba(66,201,232,.22));color:var(--oxxy-ink);border-bottom-right-radius:4px}
.casa-sec-digitando{align-self:flex-end;display:flex;gap:4px;padding:9px 13px}
.casa-sec-digitando span{width:5px;height:5px;border-radius:50%;background:var(--oxxy-ink-faint);animation:casa-pt-bounce 1s infinite}
.casa-sec-digitando span:nth-child(2){animation-delay:.15s}
.casa-sec-digitando span:nth-child(3){animation-delay:.3s}
@keyframes casa-pt-bounce{0%,60%,100%{transform:translateY(0);opacity:.5}30%{transform:translateY(-4px);opacity:1}}
.casa-sec-efeito{
  width:100%;max-width:400px;background:var(--oxxy-panel);border:1px solid var(--oxxy-border-soft);
  border-radius:var(--oxxy-radius-md);padding:12px 16px;font-size:12.5px;color:var(--oxxy-ink-dim);
  display:flex;align-items:center;gap:8px;opacity:0;transition:opacity .4s ease;
}
.casa-sec-efeito.casa-sec-efeito-on{opacity:1}
.casa-sec-efeito strong{color:var(--oxxy-green)}
.casa-sec-honestidade{font-size:11px;color:var(--oxxy-ink-faint);text-align:center;max-width:400px}

/* ---------------- LANE EXPERIÊNCIA (28/08): modo de espera (inatividade ≥2min) ----------------
   Visual contemplativo: textos secundários esmaecem, o essencial (slogan/legenda/orbe) fica.
   O enxame em si fica mais calmo via JS (casa_core.js lê esta classe no loop de render). */
html.casa-modo-espera .casa-ticker,
html.casa-modo-espera .casa-cap-sub,
html.casa-modo-espera .casa-legal,
html.casa-modo-espera .casa-creditos-trilha,
html.casa-modo-espera .casa-voz-aviso,
html.casa-modo-espera .casa-cap-eyebrow{
  opacity:.4;transition:opacity 2.4s ease;
}

/* ---------------- silêncio elevado: o site inteiro respira mais devagar ---------------- */
[data-silencio="on"] .casa-legenda-area{font-size:18px;transition:font-size .3s ease}
[data-silencio="on"] .casa-ticker{opacity:.55}
[data-silencio="on"] .casa-unlock-btn{animation:none}

/* ---------------- responsivo (capítulos) ---------------- */
@media (max-width:480px){
  .casa-cap{padding:52px 16px 4px}
  .casa-cap-titulo{margin-bottom:10px}
  .casa-cap-sub{margin-bottom:24px}
  .casa-topbar{flex-wrap:wrap;row-gap:8px}
  /* LANE RECONSTRUÇÃO (28/08) — achado ao vivo: scroll-margin-top:96px
     (regra base) supõe uma topbar de 1 linha; abaixo de 480px ela quebra
     em 2 linhas de botões (~150px medidos). Ao rolar programaticamente
     pro capítulo (scrollIntoView, Mapa, Tab), o topo do capítulo — o
     próprio rótulo "03 O SISTEMA" — ficava escondido atrás da topbar
     sticky. 168px cobre as 2 linhas + folga. */
  .casa-cap{scroll-margin-top:168px}
}

/* ================================================================
   LANE REBUILD (27/08) — brief definitivo do Founder: filme de
   abertura, nome do visitante, banner de voz/microfone, Intenção,
   três inteligências, computador em maquete, credenciais, sob
   medida, transição-varredura entre capítulos, rastro do cursor,
   tipografia reagindo à voz. Reusa as variáveis do :root; nada
   duplicado. Ver CONTRATO.md.
   ================================================================ */

/* ---------------- filme de abertura: camada de fundo fixa e sutil ---------------- */
.casa-hero-video-bg{
  position:fixed;inset:0;z-index:-1;width:100%;height:100%;object-fit:cover;
  opacity:0;filter:blur(.5px) saturate(1.15);pointer-events:none;
  transition:opacity 1.1s ease;
}
/* P0-3 (28/08): a camada "ativa" do par de vídeos crossfade (ver casa_core.js heroVideo) */
.casa-hero-video-bg.casa-hero-video-ativo{opacity:.20}
/* item 4: tema claro pede menos "vídeo escuro por cima" — senão o clima vira
   penumbra em vez de luz do dia. Mais discreto, mesma lógica. */
html[data-tema="claro"] .casa-hero-video-bg.casa-hero-video-ativo{opacity:.10;filter:blur(.5px) saturate(1.05) brightness(1.35)}

/* ---------------- LANE PENDÊNCIAS item 1: fundo por setor (crossfade) ----------------
   Atrás do vídeo (que fica a -1), por isso -2 — some por baixo da camada semi-transparente
   do vídeo/gradiente do body. Duas <picture> alternando opacidade, mesmo padrão do vídeo. */
.casa-setor-bg{position:fixed;inset:0;z-index:-2;overflow:hidden;pointer-events:none}
.casa-setor-bg-layer{
  position:absolute;inset:0;display:block;opacity:0;
  transition:opacity 1.4s ease;
}
.casa-setor-bg-layer.casa-setor-bg-ativa{opacity:.5}
.casa-setor-bg-layer img{
  width:100%;height:100%;object-fit:cover;object-position:center 35%;
  filter:saturate(1.08) brightness(.85) blur(.3px);
}
@media (prefers-reduced-motion: reduce){
  .casa-setor-bg-layer{transition:opacity .01s linear}
}
/* item 4: no tema claro a cena de fundo fica mais clara e menos dominante —
   o objetivo é "conforto visual", não escurecer a leitura numa página clara. */
html[data-tema="claro"] .casa-setor-bg-layer.casa-setor-bg-ativa{opacity:.24}
html[data-tema="claro"] .casa-setor-bg-layer img{filter:saturate(.95) brightness(1.12) blur(.3px)}

/* ---------------- nome do visitante, ao lado da marca ---------------- */
.casa-topbar-brand-wrap{display:flex;align-items:center;gap:10px}
.casa-nome-tag{
  font-size:11.5px;font-weight:700;color:var(--oxxy-ink-dim);
  background:var(--oxxy-panel);border:1px solid var(--oxxy-border-soft);border-radius:999px;
  padding:4px 11px;animation:casa-entra .4s ease both;
}
.casa-nome-tag[hidden]{display:none}

/* ---------------- banner de consentimento de voz/microfone (capítulo 01) ---------------- */
.casa-voz-banner{
  max-width:var(--oxxy-maxw);width:100%;margin:0 auto;
  background:var(--oxxy-panel-strong);border:1px solid var(--oxxy-border);border-radius:var(--oxxy-radius-lg);
  padding:11px 18px;text-align:center;backdrop-filter:blur(8px);
  transition:opacity .3s ease,transform .3s ease;
}
.casa-voz-banner[hidden]{display:none}
.casa-voz-banner.casa-voz-banner-fechado{opacity:0;transform:translateY(-6px)}
.casa-voz-banner-titulo{font-size:14.5px;font-weight:700;color:var(--oxxy-ink);margin-bottom:4px}
.casa-voz-banner-texto{font-size:12.5px;color:var(--oxxy-ink-dim);line-height:1.5;margin-bottom:12px}
.casa-voz-banner-botoes{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
.casa-voz-banner-btn{
  border-radius:999px;padding:10px 18px;font-size:13px;font-weight:700;cursor:pointer;
  border:1px solid var(--oxxy-border);background:transparent;color:var(--oxxy-ink-dim);transition:border-color .2s,color .2s;
}
.casa-voz-banner-btn:hover{border-color:var(--oxxy-cyan);color:var(--oxxy-ink)}
.casa-voz-banner-btn-principal{background:var(--oxxy-grad);color:#0d0a16;border-color:transparent}
.casa-voz-banner-btn-principal:hover{color:#0d0a16;opacity:.92}

/* ---------------- aviso de voz indisponível (fallback honesto) ---------------- */
.casa-voz-aviso{
  max-width:var(--oxxy-maxw);margin:6px auto 0;text-align:center;font-size:12px;
  color:var(--oxxy-ink-faint);border-top:1px dashed var(--oxxy-border-soft);padding-top:6px;
}
.casa-voz-aviso[hidden]{display:none}

/* ---------------- capítulo 02 · Intenção: pills nome/ramo/contexto ---------------- */
.casa-int-pills{
  display:flex;gap:10px;justify-content:center;flex-wrap:wrap;max-width:640px;margin:0 auto 10px;
}
.casa-int-pill{
  display:flex;flex-direction:column;gap:3px;align-items:center;min-width:120px;
  background:var(--oxxy-panel);border:1px solid var(--oxxy-border-soft);border-radius:var(--oxxy-radius-md);
  padding:10px 16px;transition:border-color .3s,background .3s;
}
.casa-int-pill-rotulo{font-size:10px;font-weight:800;letter-spacing:1px;text-transform:uppercase;color:var(--oxxy-ink-faint)}
.casa-int-pill-valor{font-size:14px;font-weight:700;color:var(--oxxy-ink-faint)}
.casa-int-pill-cheio{border-color:rgba(92,227,162,.5)!important;background:rgba(92,227,162,.06)!important}
.casa-int-pill-cheio .casa-int-pill-valor{color:var(--oxxy-green)}
.casa-int-ajuda{text-align:center;font-size:12.5px;color:var(--oxxy-ink-faint);max-width:480px;margin:0 auto 30px}

/* ---------------- capítulo 03 · "Um sistema. Três inteligências." ---------------- */
.casa-trint-kicker{
  text-align:center;font-size:11px;font-weight:800;letter-spacing:2px;
  background:var(--oxxy-grad-text);-webkit-background-clip:text;background-clip:text;color:transparent;
  margin-bottom:10px;
}
.casa-trint-grid{
  display:grid;grid-template-columns:1fr;gap:12px;max-width:900px;margin:0 auto 8px;
}
@media (min-width:720px){.casa-trint-grid{grid-template-columns:repeat(3,1fr)}}
.casa-trint-card{
  background:var(--oxxy-panel);border:1px solid var(--oxxy-border-soft);border-radius:var(--oxxy-radius-md);
  padding:16px 18px;display:flex;flex-direction:column;gap:6px;text-align:left;
}
.casa-trint-card-nome{font-size:13.5px;font-weight:800;color:var(--oxxy-ink)}
.casa-trint-card-txt{font-size:12.5px;color:var(--oxxy-ink-dim);line-height:1.5}
.casa-trint-sub{text-align:center;font-size:12px;color:var(--oxxy-ink-faint);margin-bottom:30px}

/* ---------------- capítulo 06 · credenciais institucionais ---------------- */
.casa-credenciais{
  max-width:640px;margin:0 auto 26px;background:var(--oxxy-panel);border:1px solid var(--oxxy-border-soft);
  border-radius:var(--oxxy-radius-lg);padding:22px 26px;
}
.casa-credenciais-kicker{font-size:10.5px;font-weight:800;letter-spacing:1.6px;color:var(--oxxy-magenta);margin-bottom:8px}
.casa-credenciais h3{font-size:16px;font-weight:700;margin-bottom:14px;color:var(--oxxy-ink)}
.casa-credenciais-lista{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:9px}
.casa-credenciais-lista li{
  font-size:13px;color:var(--oxxy-ink-dim);line-height:1.5;display:flex;gap:9px;padding-left:0;
}
.casa-credenciais-lista li::before{content:"";flex:none;width:6px;height:6px;border-radius:50%;margin-top:6px;background:var(--oxxy-cyan)}

/* ---------------- capítulo 06 · personalização / white-label ---------------- */
.casa-personalizacao{
  max-width:640px;margin:0 auto 30px;text-align:center;padding:18px 22px;
  border:1px dashed var(--oxxy-border-soft);border-radius:var(--oxxy-radius-lg);
}
.casa-personalizacao-kicker{font-size:10.5px;font-weight:800;letter-spacing:1.6px;color:var(--oxxy-cyan);margin-bottom:6px}
.casa-personalizacao h3{font-size:15px;font-weight:700;margin-bottom:8px;color:var(--oxxy-ink)}
.casa-personalizacao p{font-size:12.5px;color:var(--oxxy-ink-dim);line-height:1.55}

/* ---------------- capítulo 06 · aviso de teste grátis (padrão de mercado) ---------------- */
.casa-lead-disclaimer{font-size:11px;color:var(--oxxy-ink-faint);text-align:center;margin-top:10px;line-height:1.5}

/* ---------------- transição-varredura entre capítulos (scroll, sem parallax) ---------------- */
.casa-cap{position:relative}
/* FIX-R2 P1-5 (gauntlet 2ª rodada): flash branco de 3-8s reproduzido 2x em
   saltos longos pelo Mapa (ex.: cap-01 → cap-06). Suspeito mais provável:
   este ::before cobria `inset:0` — a ALTURA INTEIRA do capítulo (alguns
   passam de 2-3x a altura da viewport, ex. cap-03 com o tour/iframe) — um
   gradiente animado (transform+opacity) numa camada absoluta desse
   tamanho é caro pra compor, e o salto do Mapa dispara scroll+animação ao
   mesmo tempo. Corta a altura pintada pro tamanho da viewport (é um efeito
   decorativo de entrada — ninguém vê a parte que já nasce fora da tela) e
   isola a camada com will-change/contain pra não forçar repaint do resto
   da página. Não elimina 100% a causa se for outra (ver relatório), mas
   reduz o custo de composição em capítulos longos por várias vezes. */
.casa-cap::before{
  content:"";position:absolute;top:0;left:0;right:0;height:100vh;pointer-events:none;z-index:0;
  background:linear-gradient(100deg,transparent 30%,rgba(226,55,145,.10) 45%,rgba(155,93,229,.14) 50%,rgba(66,201,232,.10) 55%,transparent 70%);
  transform:translateX(-120%);opacity:0;
  contain:paint;
}
.casa-cap.casa-cap-sweep::before{animation:casa-sweep 1.1s ease-out;will-change:transform,opacity}
.casa-cap > *{position:relative;z-index:1}
@keyframes casa-sweep{
  0%{transform:translateX(-120%);opacity:0}
  18%{opacity:1}
  100%{transform:translateX(120%);opacity:0}
}

/* ---------------- rastro sutil do cursor (desktop only) ---------------- */
/* LANE RECONSTRUÇÃO (28/08): achado do Founder — parado sobre um título
   (ex.: "O SISTEMA"), o ponto líder do rastro (mix-blend-mode:screen, cor
   clara sobre traço fino de letra) conseguia "apagar" visualmente um
   caractere, lendo como "O S▮STEMA" num screenshot. Reduzido de 9px/50% pra
   6px/28% — o rastro continua visível em movimento (o efeito é a ESTEIRA
   dos 7 pontos, não um ponto único parado), mas não tem mais peso óptico
   pra substituir uma letra quando pausa em cima do texto. */
.casa-cursor-trail{
  position:fixed;top:0;left:0;width:6px;height:6px;border-radius:50%;
  background:var(--oxxy-grad);pointer-events:none;z-index:90;mix-blend-mode:screen;
}
@media (max-width:900px){.casa-cursor-trail{display:none}}

/* ---------------- tipografia reagindo ao estado de fala do Orbi ---------------- */
#casa-legenda-txt{transition:font-weight .35s ease,color .35s ease}
[data-estado="speaking"] #casa-legenda-txt{font-weight:800;animation:casa-legenda-respira 1.7s ease-in-out infinite}
[data-estado="listening"] #casa-legenda-txt{font-weight:700;color:var(--oxxy-green)}
[data-estado="thinking"] #casa-legenda-txt{font-weight:500;opacity:.7}
@keyframes casa-legenda-respira{0%,100%{font-weight:700}50%{font-weight:850}}

/* ---------------- prefers-reduced-motion (novos elementos) ---------------- */
@media (prefers-reduced-motion:reduce){
  .casa-sec-bolha{animation:none;opacity:1;transform:none}
  .casa-capnav-dot.casa-capnav-pulso{animation:none}
  .casa-cinema-btn{transition:none}
  .casa-cap::before,.casa-cap.casa-cap-sweep::before{animation:none!important;opacity:0!important}
  .casa-cursor-trail{display:none}
  [data-estado="speaking"] #casa-legenda-txt{animation:none;font-weight:700}
  .casa-nome-tag{animation:none}
}

/* ================================================================
   LANE MOBILE-ENTRADA (27/08) — problema #1 do Founder: "a maioria vê
   pelo celular, e um amigo abriu o site e não teve experiência nenhuma
   porque não clicou em nada". O gesto (clique/toque/tecla) já destravava
   tudo (ver casa_core.js tentaDestravarAudio) — o que faltava era o
   convite ser óbvio demais pra ignorar, o site caber de verdade no
   celular, e controles de acessibilidade visíveis. Reusa as variáveis do
   :root; nada duplicado. Ver CONTRATO.md e o relatório da lane.
   ================================================================ */

/* ---------------- convite: o palco inteiro é o botão, não um canto ---------------- */
.casa-voz-banner-hero{
  box-shadow:0 0 0 0 rgba(155,93,229,.4);
  animation:casa-banner-respira 2.6s ease-in-out infinite;
}
@keyframes casa-banner-respira{
  0%,100%{box-shadow:0 0 0 0 rgba(155,93,229,.32),0 0 0 0 rgba(226,55,145,0)}
  50%{box-shadow:0 0 22px 4px rgba(155,93,229,.22),0 0 0 8px rgba(226,55,145,.06)}
}
.casa-voz-banner-hero .casa-voz-banner-btn-principal{
  animation:casa-pulso 2s ease-in-out infinite;
  font-size:calc(14.5px * var(--oxxy-fs-mult));
  padding:13px 22px;
}
/* depois de ~4s sem nenhum gesto (JS adiciona a classe): convite mais
   urgente, sem virar irritante — mais rápido, não mais alto. */
.casa-voz-banner-urgente{animation-duration:1.5s}
.casa-voz-banner-urgente .casa-voz-banner-btn-principal{animation-duration:1.1s}
.casa-orb-area-urgente #casa-orb-canvas{animation:casa-orb-respira 1.6s ease-in-out infinite}
@keyframes casa-orb-respira{0%,100%{filter:brightness(1)}50%{filter:brightness(1.22)}}
/* botão secundário ("Prefiro só texto"): existe, mas não compete visualmente
   com o convite principal — vira link discreto, não um 2º botão do mesmo peso. */
.casa-voz-banner-secundario{
  background:transparent;border:none;color:var(--oxxy-ink-faint);
  text-decoration:underline;text-underline-offset:3px;padding:12px 10px;
  min-height:44px;
}
.casa-voz-banner-secundario:hover{color:var(--oxxy-ink-dim);border-color:transparent}

/* ---------------- acessibilidade: tamanho de texto (A- A A+) ---------------- */
.casa-tamanho{display:flex;gap:4px;align-items:center}
.casa-tamanho-btn{
  position:relative;
  background:transparent;border:1px solid var(--oxxy-border-soft);color:var(--oxxy-ink-dim);
  border-radius:999px;min-width:34px;min-height:34px;padding:6px 10px;font-size:12px;font-weight:800;
  cursor:pointer;transition:background .2s,color .2s,border-color .2s;
  display:inline-flex;align-items:center;justify-content:center;
}
.casa-tamanho-btn:hover{border-color:var(--oxxy-border);color:var(--oxxy-ink)}
.casa-tamanho-btn[aria-pressed="true"]{background:var(--oxxy-grad);color:#0d0a16;border-color:transparent}

/* ---------------- tamanho de texto aplicado (nunca quebra layout: só o
   multiplicador muda, o clamp()/wrap continua garantindo que cabe) ---------------- */
.casa-slogan{font-size:calc(clamp(19px,3.6vw,26px) * var(--oxxy-fs-mult))}
.casa-legenda-area{font-size:calc(16px * var(--oxxy-fs-mult))}
.casa-cap-titulo{font-size:calc(clamp(24px,4.4vw,38px) * var(--oxxy-fs-mult))}
.casa-cap-sub{font-size:calc(15px * var(--oxxy-fs-mult))}
.casa-chip{font-size:calc(13px * var(--oxxy-fs-mult))}
.casa-int-pill-valor{font-size:calc(14px * var(--oxxy-fs-mult))}
.casa-int-ajuda{font-size:calc(12.5px * var(--oxxy-fs-mult))}
.casa-trint-card-nome{font-size:calc(13.5px * var(--oxxy-fs-mult))}
.casa-trint-card-txt{font-size:calc(12.5px * var(--oxxy-fs-mult))}
.casa-credenciais-lista li{font-size:calc(13px * var(--oxxy-fs-mult))}
.casa-suaoxxy-corpo p{font-size:calc(14px * var(--oxxy-fs-mult))}
.casa-suaoxxy-corpo li{font-size:calc(13.5px * var(--oxxy-fs-mult))}
.casa-tour-legenda{font-size:calc(13.5px * var(--oxxy-fs-mult))}
.casa-sec-bolha{font-size:calc(13.5px * var(--oxxy-fs-mult))}
.casa-lead-form input{font-size:calc(14px * var(--oxxy-fs-mult))}
.casa-input{font-size:calc(15px * var(--oxxy-fs-mult))}
.casa-send-btn{font-size:calc(13.5px * var(--oxxy-fs-mult))}
.casa-prova-btn{font-size:calc(13.5px * var(--oxxy-fs-mult))}
#casa-prova-resultado,#casa-prova-resultado2{font-size:calc(13.5px * var(--oxxy-fs-mult))}
.casa-personalizacao p{font-size:calc(12.5px * var(--oxxy-fs-mult))}
.casa-cartao-intro{font-size:calc(14px * var(--oxxy-fs-mult))}
.casa-legal{font-size:calc(11px * var(--oxxy-fs-mult))}
.casa-creditos-trilha{font-size:calc(10px * var(--oxxy-fs-mult))}

/* ---------------- iOS Safari: input com font-size<16px força zoom ao focar;
   nunca deixe o campo de conversa/lead abaixo de 16px no celular. ---------------- */
@media (max-width:768px){
  .casa-input{font-size:max(16px,calc(15px * var(--oxxy-fs-mult)))}
  .casa-lead-form{grid-template-columns:1fr}
  .casa-lead-campo-largo{grid-column:auto}
  .casa-lead-form input,.casa-lead-form select{font-size:max(16px,calc(14px * var(--oxxy-fs-mult)))}
}

/* ---------------- alvos de toque ≥44px no celular (achado do gauntlet:
   idioma/topbar/mic/fechar mapa nasceram pensados pra mouse) ---------------- */
@media (max-width:768px){
  .casa-idioma-btn,.casa-topbar-btn,.casa-tamanho-btn{min-height:44px}
  .casa-idioma-btn,.casa-topbar-btn{display:inline-flex;align-items:center;justify-content:center;padding:10px 14px}
  .casa-tamanho-btn{min-width:44px}
  .casa-mic-btn{width:44px;height:44px}
  .casa-mapa-fechar{width:44px;height:44px}
  .casa-chip{min-height:44px;padding:10px 16px 10px 12px}
  .casa-tour-device-btn{min-height:44px;padding:11px 16px}
  .casa-desk-nav-item{min-height:44px;justify-content:center}
  .casa-tour-fone-cta button{min-height:44px}
  .casa-sec-play{min-height:44px}
  .casa-lead-enviar,.casa-lead-dispensar{min-height:44px}
  .casa-cartao-btn{min-height:44px}
  .casa-send-btn{min-height:40px}
  .casa-chip-mais-form input,.casa-chip-mais-form button{min-height:44px}
  .casa-chip-mais-form input{font-size:16px}
  /* P0-A3: mapa vivo em 390px — grafo mais baixo (o modal já é 88vh) e
     lista com alvo de toque generoso. */
  .casa-mapa-grafo-wrap{height:min(240px,38vh);min-height:190px}
  .casa-mapa-litem{min-height:44px}
}

/* ---------------- rolagem dupla é proibida: quando o dedo está sobre o
   demo (celular/computador simulado), ele rola SÓ o demo, nunca a página
   junto. overscroll-behavior:contain trava o scroll-chaining pro pai. ---------------- */
.casa-tour-fone,.casa-tour-fone-scaler iframe{overscroll-behavior:contain;touch-action:pan-y}
.casa-desk-main,.casa-desk-nav{overscroll-behavior:contain}

/* ---------------- desktop: o celular tem que caber inteiro na tela junto
   com o contexto ao lado — ordem literal do Founder: "não pode ter que
   rolar a página pra ver o aparelho todo". Base passa a ser a ALTURA, não
   a largura; aspect-ratio resolve a largura sozinho. ---------------- */
@media (min-width:900px){
  .casa-tour-fone{
    /* LANE RECONSTRUÇÃO (28/08): achado ao vivo — em janela desktop CURTA
       (ex.: 1600×701, comum em laptop com barra de endereço+favoritos), o
       58vh fixo não considerava o composer: o aparelho descia 205px por
       trás dele. --casa-tour-fone-h agora é calculado em QUALQUER largura
       por ajustarAlturaFone() (casa_tour.js) — o min(58vh,580px) fica só
       de fallback pro instante antes do JS rodar. */
    height:var(--casa-tour-fone-h, min(58vh,580px));
    width:auto;
    max-width:80vw;
  }
}

/* ---------------- mobile: repensar o "celular dentro de celular" ----------------
   LANE RECONSTRUÇÃO (28/08) — achado real medido: a regra anterior fixava
   LARGURA (width:min(420px,100%)) E ALTURA (max-height:70vh) ao mesmo tempo,
   competindo com o aspect-ratio:9/19.5 do bloco base. Quando 70vh implicava
   uma altura menor do que a proporção pedia pra aquela largura, o navegador
   ESPREMIA o retângulo (achado: 330×591 medido, deveria ser 330×715 na
   proporção 9/19.5) — o /mobile/demo/ real por trás não foi feito pra caber
   num retângulo mais baixo/largo do que um celular de verdade, e a própria
   UI dele (barra de navegação inferior, banner do topo) ficava com elementos
   se sobrepondo (achado ao vivo do Founder: "orbe rosa por cima da barra de
   navegação", texto "vazando" da moldura). Fix: no mobile, o aparelho manda
   pela ALTURA disponível de verdade (--casa-tour-fone-h, medida ao vivo por
   ajustarAlturaFone() em casa_tour.js = 100dvh menos topbar menos composer
   menos cabeçalho do capítulo menos a linha de controles), width:auto deixa
   o aspect-ratio:9/19.5 calcular a largura sozinho — nunca mais espremido. */
@media (max-width:899px){
  .casa-tour-fone{
    height:var(--casa-tour-fone-h, min(52dvh,480px));
    width:auto;
    max-width:92vw;
    min-width:90px;
    border-width:5px;
    border-radius:30px;
  }
  .casa-desk-laptop{width:100%}
}

/* ---------------- achado real do gauntlet: em telas curtas, qualquer
   elemento no fim de um capítulo pode ficar escondido atrás do composer
   fixo quando o navegador rola por âncora/foco (scrollIntoView, Tab,
   clique no mapa/capnav) — o padding-bottom do .casa-root só reserva
   espaço no fim da PÁGINA INTEIRA (depois do capítulo 06), não no fim de
   cada capítulo. scroll-margin-bottom ensina o navegador a nunca parar
   de rolar bem em cima da barra fixa, capítulo por capítulo. ---------------- */
/* FIX-R2 P1-3 (gauntlet 2ª rodada): mesmo com os +48px de folga, o
   revisor mediu 94px escondidos atrás do composer no cap. 01 e 77px no
   tour ("Não achou seu módulo aqui?") — a var usada aqui (--oxxy-composer-h)
   é só a ESTIMATIVA estática (84px/56px); o composer de verdade cresce
   mais que isso quando o texto legal/crédito da trilha quebra em 2 linhas.
   Troca pra --oxxy-composer-real-h (medida ao vivo por medirComposerReal()
   em casa_core.js, mesma fonte que já corrigiu o CTA flutuante), com
   fallback pra estimativa só pro instante antes da 1ª medição. */
.casa-cap{scroll-margin-bottom:calc(var(--oxxy-composer-real-h, var(--oxxy-composer-h)) + env(safe-area-inset-bottom) + 48px)}
.casa-cinema-btn,.casa-voz-banner,#casa-legenda,.casa-lead-area,#casa-prova-tile-latencia,.casa-susto-card,.casa-tour-nao-achou,.casa-tour-nota,.casa-tour-nota-desktop{
  scroll-margin-bottom:calc(var(--oxxy-composer-real-h, var(--oxxy-composer-h)) + env(safe-area-inset-bottom) + 48px);
}
/* elementos que costumam ser o ÚLTIMO item visível de um capítulo (o
   revisor mediu exatamente estes dois escondidos: a legenda/cinema do
   cap. 01 com 94px cortados, e "Não achou seu módulo aqui?" do tour com
   77px) ganham a mesma folga como margin-bottom REAL — scroll-margin só
   ajuda quando o navegador rola por âncora (scrollIntoView/Tab); um
   scroll manual lento também precisa do espaço físico existir na página.
   FIX-R2 (achado ao vivo, 2ª rodada de verificação): a lista abaixo tinha
   só #casa-cinema-btn e .casa-tour-nao-achou — #casa-legenda (a própria
   legenda citada no comentário acima) tinha ficado de fora, e no A+
   (fonte maior = caixa mais alta) ela voltava a ficar 27px atrás do
   composer. Corrigido: entra na mesma regra. */
.casa-tour-nao-achou,#casa-cinema-btn,#casa-legenda{
  margin-bottom:calc(var(--oxxy-composer-real-h, var(--oxxy-composer-h)) + env(safe-area-inset-bottom) + 24px);
}

/* ---------------- viewports curtos (celular deitado, ex.: ~548×320) — o
   capítulo 01 tinha altura suficiente sobrando em retrato, mas em paisagem
   curta a legenda podia ficar espremida contra o composer fixo; compacta
   o topo pra sobrar espaço real, sem esconder nada atrás da barra fixa. ---------------- */
@media (max-height:420px) and (orientation:landscape){
  .casa-ticker{display:none}
  .casa-cap-eyebrow{margin-bottom:6px}
  .casa-selo-wrap{margin:0 0 2px}
  .casa-orb-area{width:min(22vw,96px);margin-top:0}
  .casa-legenda-area{min-height:0;font-size:calc(13.5px * var(--oxxy-fs-mult))}
  .casa-cap{padding-top:6px}
  /* o composer some com o texto legal e encolhe o padding, pra ficar de
     verdade do tamanho de --oxxy-composer-h (medido: sem isto, o composer
     real ficava ~35px maior que a variável, e a folga da margem não
     bastava sozinha). */
  :root{--oxxy-composer-h:56px}
  .casa-composer{padding:8px 14px calc(8px + env(safe-area-inset-bottom))}
  .casa-legal{display:none}
}

/* ---------------- prefers-reduced-motion: novas animações desta lane ---------------- */
@media (prefers-reduced-motion:reduce){
  .casa-voz-banner-hero{animation:none;box-shadow:none}
  .casa-voz-banner-hero .casa-voz-banner-btn-principal{animation:none}
  .casa-orb-area-urgente #casa-orb-canvas{animation:none}
}


/* Public pricing, visible before registration. */
.casa-price-nav,.casa-price-login{font-size:13px;font-weight:700;text-decoration:none;padding:9px 11px;border-radius:999px;white-space:nowrap;min-height:36px;display:inline-flex;align-items:center}
.casa-price-nav{color:var(--oxxy-ink);border:1px solid var(--oxxy-border);background:var(--oxxy-panel)}
.casa-prices{max-width:1050px;width:100%;margin:40px auto;padding:36px 24px;scroll-margin-top:160px;position:relative}
.casa-prices-kicker{font-size:11px;font-weight:700;letter-spacing:.14em;color:var(--oxxy-cyan);margin-bottom:12px}
.casa-prices h2{font-size:clamp(26px,4vw,38px);line-height:1.2;letter-spacing:-.03em;max-width:700px}
.casa-prices-intro{font-size:16px;line-height:1.6;color:var(--oxxy-ink-dim);margin:16px 0 26px}
.casa-prices-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
.casa-price-card{border:1px solid var(--oxxy-border);border-radius:20px;padding:24px;background:var(--oxxy-panel-strong);display:flex;flex-direction:column;gap:18px;min-width:0}
.casa-price-card h3{font-size:13px;letter-spacing:.12em}
.casa-price-card .casa-price-amount{font-size:36px;font-weight:800;line-height:1.15;color:var(--oxxy-ink)}
.casa-price-amount span{font-size:14px;font-weight:400;color:var(--oxxy-ink-dim);margin-left:5px}
.casa-price-card p{font-size:14px;line-height:1.6;color:var(--oxxy-ink-dim)}
.casa-price-choose{margin-top:auto;display:block;text-align:center;padding:13px 10px;border-radius:12px;background:linear-gradient(105deg,#dc3b96,#ac73e5,#40c5e5);font-size:14px;font-weight:800;color:#100b1a;text-decoration:none}
.casa-price-choose:hover{color:#100b1a;filter:brightness(1.08)}
.casa-prices-note,.casa-prices-integration{font-size:13px;line-height:1.6;margin-top:18px;color:var(--oxxy-ink-dim)}
.casa-prices-integration{padding:14px 16px;border:1px solid var(--oxxy-border);border-radius:12px;background:var(--oxxy-panel)}
.casa-lead-area .casa-price-selected{color:var(--oxxy-ink);font-weight:700;padding:14px;border:1px solid var(--oxxy-border);border-radius:12px;line-height:1.6}
#casa-lead-area{scroll-margin-top:175px}
/* Intrinsic sizing must not widen the page before scripts initialize. */
.casa-root,.casa-stage,.casa-topbar-acoes,.casa-tour-wrap,.casa-tour-devices{min-width:0;max-width:100%}
@media(max-width:640px){
  .casa-prices{padding:28px 16px;scroll-margin-top:180px}
  .casa-prices-grid{grid-template-columns:minmax(0,1fr)}
  .casa-price-card{padding:22px}
  .casa-topbar-acoes{gap:4px;justify-content:flex-start}
  .casa-price-nav,.casa-price-login{font-size:12px;padding:9px}
}

/* Casa demo 07/09: largura legível e estável; nenhuma altura residual por scroll. */
#casa-demo-slot{width:100%;max-width:1080px}
#casa-demo-slot .casa-tour-fone-col{width:100%;min-width:0}
#casa-demo-slot .casa-tour-fone{width:min(375px,100%);height:auto;aspect-ratio:375/812;max-width:100%;min-width:0}
#casa-demo-slot .casa-tour-desk-col{width:100%;min-width:0}
#casa-demo-slot .casa-desk-laptop{width:100%;max-width:100%}
#casa-demo-slot .casa-desk-screen{aspect-ratio:auto;min-height:580px;width:100%}
#casa-demo-slot .casa-desk-base{width:96%;max-width:100%}
#casa-demo-slot .casa-desk-body{display:block;min-width:0}
#casa-demo-slot .casa-tour-nota-desktop{max-width:100%}
#casa-demo-slot .casa-tour-controls-row{flex-wrap:nowrap;gap:8px}
#casa-demo-slot .casa-tour-device-toggle{min-width:0}
#casa-demo-slot .casa-tour-device-btn{min-height:44px}
#casa-demo-slot #casa-tour-ampliar{flex:none;width:44px;justify-content:center;padding:8px}
#casa-demo-slot:is(.casa-tour-fs,.casa-tour-fs-fallback) .casa-tour-fone{width:min(375px,100%)}
.casa-demo-workspace{padding:20px;color:var(--oxxy-ink);font-size:14px;line-height:1.5;min-width:0;background:var(--oxxy-bg,#0d0b15)}
.casa-demo-banner{margin:0 0 18px;padding:8px 12px;border:1px solid #766497;border-radius:8px;color:#e9dfff;background:#211a33;font-size:12px}
.casa-demo-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.casa-demo-heading h3{margin:0;font-size:24px;font-weight:700}
.casa-demo-description{margin:12px 0 20px;color:var(--oxxy-ink-dim);font-size:13px}
.casa-demo-workspace button{font:inherit;cursor:pointer;border:1px solid var(--oxxy-border,#766497);border-radius:8px;color:var(--oxxy-ink);background:var(--oxxy-panel,#20192e);padding:9px 12px;min-height:44px}
.casa-demo-workspace button:hover{border-color:var(--oxxy-cyan,#42c9e8)}
.casa-demo-workspace :is(button,input):focus-visible{outline:2px solid #5bddf7;outline-offset:3px}
.casa-demo-workspace button:disabled{opacity:.55;cursor:default}
.casa-demo-kpis{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-bottom:20px}
.casa-demo-kpis>div{border:1px solid var(--oxxy-border-soft,#392f4d);background:var(--oxxy-panel,#181321);border-radius:12px;padding:14px;min-width:0}
.casa-demo-kpis span{display:block;color:var(--oxxy-ink-dim);font-size:12px}
.casa-demo-kpis strong{display:block;font-size:clamp(16px,1.6vw,22px);overflow-wrap:anywhere;margin-top:5px}
.casa-demo-toolbar{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;margin:12px 0 16px}
.casa-demo-toolbar label{flex:1;min-width:140px;font-size:12px;color:var(--oxxy-ink-dim)}
.casa-demo-toolbar input{display:block;width:100%;box-sizing:border-box;min-height:44px;background:var(--oxxy-panel,#181321);border:1px solid var(--oxxy-border,#766497);border-radius:8px;font:inherit;font-size:16px;color:var(--oxxy-ink);padding:8px 10px;margin-top:5px}
.casa-demo-workspace [data-demo-add],.casa-demo-workspace [data-demo-complete]{background:var(--oxxy-grad);color:#120b1f;font-weight:700}
.casa-demo-rows{display:flex;flex-direction:column;gap:8px}
.casa-demo-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px;border:1px solid var(--oxxy-border-soft,#392f4d);border-radius:10px}
.casa-demo-row>div{min-width:0}
.casa-demo-row strong{display:block;font-weight:600;overflow-wrap:anywhere}
.casa-demo-row span{display:block;color:var(--oxxy-ink-dim);font-size:12px;margin-top:3px}
.casa-demo-row button{flex:none;font-size:12px}
.casa-demo-detail{border:1px solid var(--oxxy-cyan,#42c9e8);border-radius:10px;padding:16px;margin-top:16px;background:var(--oxxy-panel,#181321)}
.casa-demo-detail[hidden]{display:none}
.casa-demo-detail h4{font-size:16px;margin:0 0 8px}
.casa-demo-detail>div{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px}
.casa-demo-message{color:var(--oxxy-cyan,#72daec);font-size:12px;margin-top:12px;min-height:18px}
@media(min-width:900px){#casa-demo-slot .casa-tour-wrap{grid-template-columns:220px minmax(0,1fr);gap:24px}}
@media(max-width:899px){
 #casa-demo-slot .casa-tour-wrap{gap:24px}
 #casa-demo-slot .casa-tour-controls-row{gap:5px}
 #casa-demo-slot .casa-tour-orb-canvas{width:24px;height:24px}
 #casa-demo-slot .casa-tour-orb-tag{display:none}
 #casa-demo-slot .casa-tour-device-toggle{flex:1;padding:3px;gap:2px}
 #casa-demo-slot .casa-tour-device-btn[data-device]{flex:1;justify-content:center;padding:8px 5px;font-size:12px;gap:4px}
 #casa-demo-slot .casa-desk-screen{border-width:4px;min-height:620px}
 .casa-demo-workspace{padding:12px}
 .casa-demo-heading h3{font-size:21px}
 .casa-demo-kpis{gap:6px}
 .casa-demo-kpis>div{padding:9px}
 .casa-demo-kpis strong{font-size:16px}
 .casa-demo-kpis span{font-size:11px}
}
#casa-demo-slot:is(.casa-tour-fs,.casa-tour-fs-fallback){display:block;max-width:none;padding:16px;box-sizing:border-box;overflow:auto}
#casa-demo-slot.casa-tour-fs-fallback{z-index:10000}
#casa-demo-slot:is(.casa-tour-fs,.casa-tour-fs-fallback) .casa-tour-wrap{width:100%;max-width:1200px}
#casa-demo-slot:is(.casa-tour-fs,.casa-tour-fs-fallback) .casa-tour-controls-row{position:sticky;top:0;z-index:5;background:var(--oxxy-bg-solid);padding-block:6px}

@media(max-width:899px){
 .casa-demo-kpis{grid-template-columns:1.5fr 1fr 1fr}
 .casa-demo-kpis strong{font-size:14px;white-space:nowrap;overflow-wrap:normal}
}

/* While reading the demo, passive floating controls leave the hit-test
   and tab order. The existing chat remains available through navigation. */
body.casa-demo-active :is(.casa-wa-fab,.casa-cta-flutuante,.oxxy-chatoculto-dica):not(:focus-within){visibility:hidden!important;pointer-events:none!important}
body.casa-demo-active:not(.casa-demo-chat-open) .casa-composer,
body.casa-demo-chat-closed .casa-composer{transform:translateY(calc(100% + 16px))!important;visibility:hidden!important;pointer-events:none!important}
body.casa-demo-chat-open .casa-composer{transform:none!important;visibility:visible!important;pointer-events:auto!important;max-height:var(--casa-demo-chat-max-height,70dvh);overflow:auto;bottom:var(--casa-demo-keyboard-gap,0px);background:var(--oxxy-bg-solid);border-top:1px solid var(--oxxy-border)}
#casa-demo-conversar{min-height:44px;white-space:nowrap}
#casa-demo-voltar{display:block;min-height:44px;margin:0 auto 10px}
#casa-demo-voltar[hidden]{display:none!important}
/* The universal reduced-motion duration otherwise animates inherited
   visibility for one frame, so the newly opened field rejects focus. */
body:is(.casa-demo-active,.casa-demo-chat-open,.casa-demo-chat-closed) .casa-composer,
body:is(.casa-demo-active,.casa-demo-chat-open,.casa-demo-chat-closed) .casa-composer *{transition:none!important}

/* A animação lateral dos capítulos não pode ampliar o viewport Mobile
   nem deslocar o destino de rolagem do cadastro quando ela termina. */
@media (max-width:899px){
  .casa-cap{overflow-x:clip}
}
