/* =========================================================================
   AKROS — Seção 2 · Pipeline ao vivo
   Herda a mesma paleta e tipografia. Até 07/10 era a seção 2 e subia por
   cima do hero; agora vem depois dos diferenciais e a cortina passou para
   as perdas (css/cortina.css, `.cortina__sobe`).
   ========================================================================= */

.pipeline{
  position:relative;z-index:5;overflow-x:clip;
  /* em duas colunas a secao encolheu e o hero aparecia por baixo dela */
  min-height:100svh;display:flex;flex-direction:column;justify-content:flex-start;
  padding:max(var(--nav-h),clamp(52px,6.6vh,112px)) var(--gutter) clamp(26px,3.4vh,62px);
  border-radius:calc(((1 - var(--p,1)) * 52px) * var(--r)) calc(((1 - var(--p,1)) * 52px) * var(--r)) 0 0;
  background:
    radial-gradient(120% 92% at 50% -12%, #FFFFFF 0%, rgba(255,255,255,0) 58%),
    radial-gradient(70% 60% at 88% 108%, rgba(10,128,226,.10) 0%, rgba(10,128,226,0) 62%),
    linear-gradient(180deg,#EFF6FB 0%,#DEEAF2 44%,#C7D8E5 100%);
  box-shadow:
    0 -30px 80px -30px rgba(12,34,58,calc(.55 * (1 - var(--p,1)))),
    inset 0 1px 0 rgba(255,255,255,.92);
  transform:scale(calc(.978 + .022 * var(--p,1)));
  transform-origin:50% 100%;
  will-change:transform;
}

/* Tela baixa: a secao tem de caber inteira, entao todo o ritmo encolhe
   junto. Medido a 984px de janela a secao pedia 1114px. */
@media (min-width:1181px) and (max-height:1040px){
  .pipeline{padding-top:max(var(--nav-h),clamp(36px,4vh,74px));padding-bottom:clamp(18px,2.2vh,46px)}
  .sechead{margin-bottom:clamp(10px,1.4vh,26px)}
  .sechead__sub{font-size:15.5px;line-height:1.42}
  .chapters{margin-bottom:clamp(9px,1.2vh,20px)}
  .stage{margin-bottom:clamp(10px,1.3vh,18px)}
}
@media (min-width:1181px) and (max-height:1040px){
  :root{--body-h:clamp(196px,22.5vh,272px);--slot-h:clamp(120px,13.8vh,168px)}
}

/* Janela BAIXA de verdade. Com escala do Windows em 125% um monitor de
   1920x1080 vira 1536x~700 de area CSS — e ai a secao pedia 790px para 700
   disponiveis. Medido por dentro: 409 eram do palco, e o palco nao cedia
   porque quem manda nele sao as COLUNAS, nao o token --body-h. Entao o
   aperto tem de descer ate o miolo do quadro. */
@media (min-width:1181px) and (max-height:820px){
  /* medido a 1536x700: o DEMO pedia 540px para 497 disponiveis. Quem
     impunha isso era o piso das colunas, nao o texto. */
  :root{--body-h:clamp(68px,10vh,240px);--slot-h:clamp(38px,5.6vh,150px)}
  .pipeline{padding-top:max(var(--nav-h),clamp(22px,2.8vh,60px));padding-bottom:clamp(12px,1.6vh,40px)}
  .sechead{margin-bottom:clamp(8px,1.1vh,20px)}
  .panel{padding:13px 15px}
  .panel__head{padding:0 4px 8px}
  .panel__body{gap:13px}
  .col__head{margin-bottom:7px}
  .slot{margin-bottom:7px}
  .ghost{padding:8px;margin-bottom:6px}
  .chapters{margin-bottom:clamp(7px,1vh,16px)}
  /* medido a 1536x700: a .feature pedia 666px para 652 disponiveis, e o
     excedente saia pelo rodape cortando a linha de numeros */
  .gains{gap:clamp(5px,.85vh,10px);margin-top:clamp(9px,1.4vh,18px)}
  .gains li{font-size:.86rem;line-height:1.34;padding-left:22px}
  .gains li::before{width:10px;height:10px}
  .sechead__sub{font-size:14.5px;line-height:1.4}
  .sechead__title{margin-bottom:11px}
  .feature__demo{margin-top:15px;margin-right:clamp(22px,2.6vw,44px)}
  .gains li{font-size:.83rem;line-height:1.32}
  .gains{gap:clamp(4px,.7vh,9px)}
  .stage{margin-bottom:clamp(8px,1vh,14px)}
  /* O piso duro e a coluna "Negociacao": 3 fantasmas de 71px, 296px que nao
     cedem por ajuste de campo. `zoom` encolhe o quadro inteiro RELAYOUTANDO
     (o texto continua nitido; `transform:scale` reamostraria o bitmap).
     A largura e compensada para o quadro continuar preenchendo a faixa. */
}

/* `min-height` da so um piso: com altura AUTOMATICA o flex:1 nao tem contra
   o que encolher e a secao cresce junto com o conteudo — era isso que fazia
   o quadro passar por baixo do menu. No layout de duas colunas a altura
   precisa ser DEFINIDA. */
@media (min-width:1181px){
  .pipeline{height:100svh;min-height:0}
  /* A linha do grid era AUTO: com o conteudo maior que a caixa ela crescia e
     o funil vazava por baixo do vidro. Com 1fr definido e min-height:0 em
     cada elo, quem cede e a pilha de cartoes — que ja sabe recortar. */
  .panel__body{grid-template-rows:minmax(0,1fr)}
  .phone-cell,.kanban,.col{min-height:0}
}

.pipeline__inner{position:relative;width:100%;max-width:var(--maxw);margin:0 auto}

/* ---------------- cabeçalho da seção ---------------- */
.sechead{max-width:760px;margin-bottom:clamp(18px,2.7vh,38px)}
.sechead__eyebrow{
  display:inline-flex;align-items:center;gap:9px;
  font-size:11.5px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;
  color:var(--accent-ink);margin-bottom:16px;
}
.sechead__eyebrow i{display:block;width:26px;height:1px;background:var(--accent)}
.sechead__title{
  font-size:min(clamp(1.9rem,3.5vw,3.3rem),5vh);line-height:1.04;letter-spacing:-.034em;
  font-weight:600;color:var(--ink);margin-bottom:16px;
}
.sechead__title em{
  font-family:var(--serif);font-style:italic;font-weight:500;
  letter-spacing:-.01em;
}
.sechead__sub{font-size:clamp(1rem,1.1vw,1.14rem);color:var(--body);max-width:56ch}
.sechead__sub b{color:var(--ink);font-weight:600}

/* =======================================================================
   BLOCO DE FUNCIONALIDADE — texto a esquerda, simulacao a direita.
   Nada aqui e especifico da A.R.I.A.: o proximo bloco reusa as mesmas
   classes, so troca o conteudo do HTML.
   ======================================================================= */
.feature{
  flex:1;min-height:0;
  display:grid;
  grid-template-columns:minmax(268px,28%) minmax(0,1fr);
  grid-template-rows:minmax(0,1fr) auto;
  gap:clamp(16px,2vh,30px) clamp(26px,3.2vw,64px);
  align-items:stretch;
}
/* O texto fica centrado; a simulacao ESTICA para ocupar toda a altura da
   secao. Sem repassar min-height:0 em cada elo a altura nao desce: o
   primeiro elo que esquecer volta a medir pelo conteudo. */
.feature__copy{min-width:0;min-height:0;align-self:center}
.feature__demo{min-width:0;position:relative;min-height:0;
  display:grid;grid-template-rows:minmax(0,1fr) auto;gap:clamp(8px,1.2vh,16px);
  /* A rotacao 3D joga as bordas para FORA da caixa de layout: o rotateY
     empurra a direita e o rotateX levanta o topo. Por isso o recuo da secao
     e a altura do menu, sozinhos, nao seguram — precisa desta folga extra.
     Medido: sem ela a borda direita ficava a 18px da barra de rolagem e o
     topo do quadro entrava 16px por baixo do menu. */
  margin-right:clamp(28px,3.2vw,60px);
  margin-top:clamp(16px,3.6vh,44px)}
.feature__demo .stage{min-height:0;display:flex}
.feature__demo .stage__wrap{flex:1;min-height:0;display:flex}
.feature__demo .panel{flex:1;min-height:0;display:flex;flex-direction:column}
.feature__demo .panel__body{flex:1;min-height:0}
.feature .signals{grid-column:1 / -1}
.feature .sechead{margin-bottom:0;max-width:none}

/* a vantagem da funcionalidade, em frases curtas */
.gains{list-style:none;display:grid;gap:clamp(8px,1.15vh,14px);margin-top:clamp(14px,2vh,24px)}
.gains li{
  position:relative;padding-left:25px;
  font-size:clamp(.9rem,.96vw,1.02rem);line-height:1.4;color:var(--body);
}
.gains li::before{
  content:"";position:absolute;left:0;top:.46em;width:12px;height:12px;border-radius:50%;
  background:radial-gradient(circle,var(--accent) 0 33%,rgba(10,128,226,.18) 35% 100%);
}
.gains b{color:var(--ink);font-weight:600}

/* ---------------- palco 3D ---------------- */
.stage{position:relative;perspective:1500px;perspective-origin:46% 46%;margin-bottom:clamp(10px,1.4vh,18px)}
/* o quadro passa da coluna e sangra na direita, como no desenho */
.feature__demo .stage{width:100%}
.stage__wrap{
  /* Os angulos moram em variaveis porque o parallax do mouse (pipeline.js)
     precisa MEXER neles sem reescrever o transform inteiro. Antes o JS
     escrevia o transform completo com angulos proprios e apagava estes. */
  --gy:-13.5deg; --gx:3.6deg; --gz:-1deg;
  /* A perspectiva nao e simetrica: ela empurra a metade DIREITA para fora e
     puxa a esquerda para dentro. Medido a 1536x700, a faixa ia de 495 a 1450
     e o quadro projetado de 535 a 1483 — 40px de sobra a esquerda e 33px POR
     FORA a direita, e por isso os capitulos de baixo nao batiam com ele.
     O translateX vem PRIMEIRO na lista (ou seja, aplicado no espaco do pai,
     depois da rotacao) e em % da PROPRIA largura, entao vale em qualquer
     janela sem numero cravado. */
  --gshift:-3.85%;
  transform:translateX(var(--gshift)) rotateY(var(--gy)) rotateX(var(--gx)) rotateZ(var(--gz));
  transform-style:preserve-3d;transition:transform .5s var(--ease);
  will-change:transform;
}

.panel{
  position:relative;
  background:linear-gradient(166deg,rgba(255,255,255,.94),rgba(255,255,255,.74));
  -webkit-backdrop-filter:blur(20px) saturate(150%);backdrop-filter:blur(20px) saturate(150%);
  border:1px solid rgba(255,255,255,.86);border-radius:calc(26px * var(--r));padding:clamp(14px,1.4vw,22px);
  box-shadow:
    0 60px 110px -40px rgba(18,46,76,.44),
    0 10px 30px -14px rgba(18,46,76,.2),
    inset 0 1px 0 rgba(255,255,255,.96);
  animation:panel-float 13s ease-in-out infinite;
}
@keyframes panel-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-12px)}}
.panel::after{
  content:"";position:absolute;inset:0;border-radius:calc(26px * var(--r));pointer-events:none;opacity:0;
  transition:opacity .45s var(--ease);
  background:radial-gradient(420px circle at var(--mx,50%) var(--my,50%), rgba(255,255,255,.7), transparent 70%);
}
.stage:hover .panel::after{opacity:1}

.panel__head{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:2px 6px 14px}
.panel__label{display:flex;align-items:center;gap:10px;font-size:13.5px;color:var(--muted);letter-spacing:.02em}
.dot-live{
  width:7px;height:7px;border-radius:50%;background:var(--accent);
  box-shadow:0 0 0 3px rgba(10,128,226,.16);animation:blink 2.2s ease-in-out infinite;
}
@keyframes blink{0%,100%{opacity:1}50%{opacity:.28}}
.panel__total{text-align:right;position:relative}
.panel__total b{display:block;font-size:20px;font-weight:600;letter-spacing:-.026em;color:var(--ink);font-variant-numeric:tabular-nums}
.panel__total small{font-size:11.5px;color:var(--faint)}
.bump{
  position:absolute;right:0;top:-17px;font-size:12.5px;font-weight:700;color:var(--accent-lo);
  opacity:0;font-variant-numeric:tabular-nums;white-space:nowrap;
}
.bump.is-on{animation:bump 2.4s var(--ease) forwards}
@keyframes bump{
  0%{opacity:0;transform:translateY(8px)}18%{opacity:1;transform:translateY(-6px)}
  70%{opacity:1;transform:translateY(-11px)}100%{opacity:0;transform:translateY(-21px)}
}

/* 🩸 A coluna do celular vivia no PISO do clamp (186px): 15,5% de um painel
   de ~1160px da' 180, entao o aparelho ficava travado em 186 de largura
   enquanto sobravam 208px de altura sem uso na faixa. Com 186 o cabecalho
   quebrava "Mauricio José" em duas linhas e a bolha caia para quatro. O teto
   novo deixa o celular crescer ate' encostar na ALTURA — o limite honesto. */
.panel__body{display:grid;grid-template-columns:clamp(244px,26%,330px) minmax(0,1fr);gap:clamp(12px,1.1vw,20px);align-items:stretch}

/* ---------------- celular / WhatsApp ---------------- */
/* `container-type:size` existe aqui por um motivo so': dar ao celular as
   unidades cqw/cqh da PROPRIA faixa dele, para ele obedecer as duas
   restricoes ao mesmo tempo. */
.phone-cell{position:relative;min-height:var(--body-h,300px);container-type:size}
.phone{
  /* 🩸 Com `inset:0` o aparelho esticava ate' 3,47:1 — uma tira, nao um
     iPhone (19,5:9 = 2,167). Nao da' para resolver com `aspect-ratio` +
     `max-height`: um dos dois sempre vence e a proporcao quebra. Com `min()`
     nas duas medidas, quem aperta primeiro manda, e a forma nunca cede. */
  /* 2,167 e' o iPhone 15 Pro; o SE e' 1,78. Os dois sao iPhone, e o valor
     do meio da' mais largura para o texto sem sair da familia. */
  --ar:1.95;
  position:absolute;left:50%;top:50%;
  width:min(100cqw, calc(100cqh / var(--ar)));
  height:min(100cqh, calc(100cqw * var(--ar)));
  transform:translate(-50%,-50%);
  /* overflow visivel: os botoes laterais saem da moldura; quem recorta e' a tela */
  display:flex;flex-direction:column;overflow:visible;min-height:0;
  /* moldura FINA e UNIFORME nos quatro lados, como a de titanio do aparelho:
     era 9/8/10 e a diferenca aparecia assim que os cantos ficaram redondos */
  border:0;border-radius:calc(21px * var(--r-fone));padding:7px;
  /* 09/10: o mesmo aparelho de #converse (converse.css .tel), grafite */
  background:linear-gradient(158deg,#3B414B 0%,#1E2229 58%,#15181E 100%);
  box-shadow:
    0 60px 90px -36px rgba(0,0,0,.9),
    0 14px 30px -14px rgba(0,0,0,.6),
    inset 0 1px 0 rgba(255,255,255,.22),
    inset 0 0 0 1px rgba(255,255,255,.08);
  /* O celular NAO flutua por conta propria: quem flutua e o painel inteiro.
     Com dois embalos independentes ele nunca ficava na mesma linha das
     colunas ao lado — media-se ate 19px de desencontro no topo e na base. */
}
/* a ilha, na proporcao da de .tel (6 x 1,7) */
.phone::before{
  content:"";position:absolute;z-index:6;top:11px;left:50%;transform:translateX(-50%);
  width:27%;aspect-ratio:3.5;border-radius:calc(99px * var(--r-fone));
  background:#000;box-shadow:inset 0 0 0 1px rgba(255,255,255,.05);
}
/* a barra de gesto do rodape */
.phone::after{
  content:"";position:absolute;z-index:6;bottom:10px;left:50%;transform:translateX(-50%);
  width:32%;height:3px;border-radius:calc(99px * var(--r-fone));background:rgba(233,237,239,.6);
}
/* os botoes fisicos: silencio, volume (2) e o de ligar, nas alturas de .tel */
.phone__bt{position:absolute;width:2px;border-radius:1px;background:linear-gradient(90deg,#3A3F48,#1E2228)}
.phone__bt--m{left:-2px;top:16%;height:3.3%}
.phone__bt--vu{left:-2px;top:21.7%;height:6.5%}
.phone__bt--vd{left:-2px;top:29.6%;height:6.5%}
.phone__bt--p{right:-2px;top:24.3%;height:10%;background:linear-gradient(270deg,#3A3F48,#1E2228)}
/* raio concentrico: o da tela e' o do corpo menos a moldura, senao o vao
   entre os dois engorda nos cantos e o aparelho parece um estojo */
.phone__screen{position:relative;flex:1;min-height:0;display:flex;flex-direction:column;background:#0B141A;color:#E9EDEF;border-radius:calc(14px * var(--r-fone));overflow:hidden}

/* barra de status e cabecalho do WhatsApp escuro (as cores de .tel__status/.tel__top) */
.wa-st,.wa-head{background:#1F2C34;flex:none}
.wa-st{display:flex;align-items:center;justify-content:space-between;height:26px;padding:4px 14px 0 17px}
.wa-st__hora{font-size:9.5px;font-weight:600;letter-spacing:.01em}
.wa-st__sinais{display:inline-flex;align-items:center;gap:3px}
.wa-st__sinais svg{height:6.5px;width:auto;display:block}
.wa-head{display:flex;align-items:center;gap:5px;padding:2px 8px 7px 4px;border-bottom:1px solid rgba(255,255,255,.06)}
.wa-head__volta{flex:none;width:13px;height:13px;color:#AEBAC1}
.wa-head__av{
  width:26px;height:26px;border-radius:50%;flex:none;
  background:linear-gradient(140deg,#5C7C9C,#2E4763);
  display:grid;place-items:center;
  font-size:10px;font-weight:700;letter-spacing:.03em;color:#fff;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.14);
}
.wa-head__quem{flex:1;min-width:0;line-height:1.2}
.wa-head b{display:block;font-size:11.5px;font-weight:600;color:#E9EDEF;letter-spacing:.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wa-head small{display:block;font-size:9px;color:#8696A0}
.wa-head__acoes{flex:none;display:inline-flex;align-items:center;gap:7px;color:#AEBAC1}
.wa-head__acoes svg{width:13px;height:13px}
.wa-head__acoes .wa-head__mais{width:9px;margin-left:-2px}

/* a conversa: o papel de parede pontilhado do WhatsApp escuro; o que sobe
   some em degrade sob o cabecalho em vez de aparecer cortado */
.thread{
  flex:1;overflow:hidden;padding:9px 11px 8px;display:flex;flex-direction:column;gap:3px;
  min-height:0;scroll-behavior:smooth;overscroll-behavior:contain;
  background:#0B141A radial-gradient(rgba(255,255,255,.045) 1px,transparent 1.3px) 0 0/13px 13px;
  -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 16px);
          mask-image:linear-gradient(to bottom,transparent 0,#000 16px);
}
/* Num aplicativo de mensagem a conversa encosta no PE' da tela e sobe. Feito
   com margem, e nao com `justify-content:flex-end`, porque num contentor
   rolavel o segundo empurra o topo para fora do alcance. O primeiro filho
   e' a pilula «Hoje»; o reinicio do pipeline.js so' tira os `.msg`. */
.thread > :first-child{margin-top:auto}
.wa-dia{
  align-self:center;flex:none;margin:0 0 4px;padding:3px 7px;border-radius:5px;
  background:#182229;color:#8696A0;font-size:8px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;
}
.msg{
  position:relative;max-width:84%;flex:none;font-size:11.5px;line-height:1.38;padding:5px 8px;border-radius:7px;color:#E9EDEF;
  animation:pop .45s var(--ease-pop) both;
}
@keyframes pop{from{opacity:0;transform:translateY(9px) scale(.94)}to{opacity:1;transform:none}}
/* troca de quem fala: um respiro maior, como no aplicativo */
.msg--in + .msg--out,.msg--out + .msg--in{margin-top:3px}
.msg--in{align-self:flex-start;background:#202C33;border-top-left-radius:2px}
.msg--out{align-self:flex-end;background:#005C4B;border-top-right-radius:2px}
/* o rabicho da primeira bolha de cada um */
.msg--in::before{content:"";position:absolute;top:0;left:-5px;width:0;height:0;border-top:6px solid #202C33;border-left:6px solid transparent}
.msg--out::before,.typing::before{content:"";position:absolute;top:0;right:-5px;width:0;height:0;border-top:6px solid #005C4B;border-right:6px solid transparent}
.msg--in + .msg--in{border-top-left-radius:7px}
.msg--out + .msg--out{border-top-right-radius:7px}
.msg--in + .msg--in::before,.msg--out + .msg--out::before{display:none}
.msg__who{display:flex;align-items:center;gap:3px;font-size:9px;color:#7CC4FF;margin-bottom:1px;letter-spacing:.02em;font-weight:600;line-height:1.2}
.msg__who svg{width:9px;height:9px;color:#C4B5FD}
.msg__meta{float:right;margin:5px 0 0 7px;display:inline-flex;align-items:center;gap:2px;font-size:8px;line-height:1;color:#8696A0}
.msg--out .msg__meta{color:rgba(233,237,239,.62)}
.msg__meta svg{width:11px;height:11px;color:#53BDEB}
.msg--doc{display:flex;align-items:center;gap:8px;padding:7px 8px}
.msg--doc .fi{width:24px;height:24px;border-radius:5px;background:rgba(0,0,0,.2);display:grid;place-items:center;flex:none;color:#F15C6D}
.msg--doc b{display:block;font-size:10.5px;font-weight:600;color:#E9EDEF}
.msg--doc small{font-size:9.5px;color:rgba(233,237,239,.62)}
.typing{
  position:relative;align-self:flex-end;background:#005C4B;border-radius:7px;border-top-right-radius:2px;
  padding:8px 10px;display:none;animation:pop .35s var(--ease-pop) both;
}
.msg--out + .typing{border-top-right-radius:7px}
.msg--out + .typing::before{display:none}
.typing.is-on{display:flex;gap:3px}
.typing i{width:4px;height:4px;border-radius:50%;background:rgba(233,237,239,.75);opacity:.6;animation:type 1.2s infinite}
.typing i:nth-child(2){animation-delay:.18s}
.typing i:nth-child(3){animation-delay:.36s}

/* o compositor do WhatsApp (as cores de .tel__comp); a folga de baixo e' da barra de gesto */
.wa-comp{display:flex;align-items:center;gap:4px;flex:none;padding:5px 6px 17px 5px;background:#1F2C34;border-top:1px solid rgba(255,255,255,.06);color:#8696A0}
.wa-comp > svg{flex:none;width:15px;height:15px;color:#AEBAC1}
.wa-comp__campo{flex:1;min-width:0;display:flex;align-items:center;gap:5px;height:26px;padding:0 7px;border-radius:13px;background:#2A3942}
.wa-comp__campo svg{flex:none;width:12px;height:12px}
.wa-comp__campo span{flex:1;min-width:0;font-size:10px;white-space:nowrap;overflow:hidden}
.wa-comp__mic{flex:none;width:26px;height:26px;border-radius:50%;background:#00A884;color:#0B141A;display:grid;place-items:center}
.wa-comp__mic svg{width:12px;height:12px}
/* Aparelho estreito: em tela baixa (1366x768, 1280x720, 1536x700) a altura
   prende o celular em 145-180px de largura e o nome virava «Mau...». Sai
   primeiro o que o WhatsApp tambem esconde: as acoes do cabecalho e os
   icones do campo. A faixa e' o container da celula (.phone-cell). */
@container (max-height:340px){
  .wa-head__acoes svg:not(:nth-child(2)){display:none}
  .wa-comp__campo svg:not(:first-child){display:none}
}
@container (max-height:290px){
  .wa-head__acoes,.wa-comp > svg{display:none}
}
@keyframes type{0%,60%,100%{opacity:.25;transform:translateY(0)}30%{opacity:1;transform:translateY(-3px)}}

/* ---------------- funil ---------------- */
.kanban{position:relative;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
.col{
  background:rgba(226,236,245,.44);border:1px solid rgba(10,31,69,.05);border-radius:calc(16px * var(--r));
  box-shadow:inset 0 1px 3px rgba(18,46,76,.07);
  padding:12px;min-height:var(--body-h,300px);
  display:flex;flex-direction:column;
}
.col__head{
  flex:none;
  display:flex;align-items:center;justify-content:space-between;gap:6px;margin-bottom:12px;
  font-size:12.5px;color:var(--muted);white-space:nowrap;overflow:hidden;
}
/* A pilha de cartoes tem altura DEFINIDA e recorta o que passa. Antes a
   coluna Negociacao pedia 369px numa caixa de 328 e vazava 16px por baixo
   do vidro do painel. Um funil de verdade tem mais cartao do que cabe na
   tela: o degrade no pe diz "tem mais abaixo" em vez de deixar um cartao
   cortado no meio, que le como defeito. */
.col__list{position:relative;flex:1;min-height:0;overflow:hidden}
.col__list::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:38px;pointer-events:none;
  background:linear-gradient(to top,#E8EFF6 14%,rgba(232,239,246,0));
}
.count{
  background:rgba(10,31,69,.06);border-radius:calc(7px * var(--r));padding:1px 8px;font-size:11.5px;
  color:var(--faint);font-variant-numeric:tabular-nums;
}
/* A placa tracejada e o LUGAR do cartao, entao ela so existe na coluna para
   onde ele esta indo e abre exatamente com a altura DELE (--slot-h vem do JS,
   medido no proprio cartao). Antes as quatro colunas carregavam uma placa
   fixa de 41px enquanto o cartao tinha 232px: ele caia por cima dos
   fantasmas e nenhuma coluna tinha o mesmo ritmo da vizinha. */
.slot{
  height:0;margin-bottom:0;opacity:0;overflow:hidden;
  border:1px dashed rgba(10,31,69,0);border-radius:calc(13px * var(--r));
  transition:height .42s var(--ease),margin-bottom .42s var(--ease),opacity .3s ease,
             border-color .45s,background .45s,box-shadow .45s;
}
.slot.is-open{
  height:var(--slot-h,190px);margin-bottom:11px;opacity:1;
  border-color:rgba(10,31,69,.12);
}
.slot.is-armed{
  border-color:rgba(10,128,226,.55);background:rgba(10,128,226,.055);
  box-shadow:inset 0 0 28px rgba(10,128,226,.09);
}

.ghost{background:#fff;border:1px solid rgba(10,31,69,.075);border-radius:calc(13px * var(--r));padding:11px;margin-bottom:9px;box-shadow:0 2px 6px -3px rgba(18,46,76,.12)}
.ghost__row{height:6px;border-radius:calc(4px * var(--r));background:rgba(10,31,69,.13);margin-bottom:6px}
.ghost__row.s{width:52%}.ghost__row.m{width:76%}.ghost__row.l{width:92%}
.ghost__foot{display:flex;align-items:center;gap:7px;margin-top:9px}
.avatar{width:18px;height:18px;border-radius:50%;background:linear-gradient(140deg,#BFD2E2,#93AABF);flex:none}
.ghost .tag{font-size:10.5px;white-space:nowrap;color:var(--faint);border:1px solid var(--line-soft);border-radius:calc(6px * var(--r));padding:1px 6px}
.ghost .money{margin-left:auto;font-size:10.5px;font-weight:600;color:var(--faint);font-variant-numeric:tabular-nums}

/* ---------------- cartão vivo ---------------- */
.live{
  position:absolute;top:0;left:0;width:210px;z-index:5;
  background:#fff;border:1px solid rgba(10,31,69,.11);border-radius:calc(13px * var(--r));padding:12px;
  box-shadow:0 18px 38px -14px rgba(18,46,76,.38);
  opacity:0;will-change:transform,opacity;
}
.live::before{
  content:"";position:absolute;inset:-1px;border-radius:calc(14px * var(--r));padding:1px;pointer-events:none;
  background:conic-gradient(from var(--beam),transparent 0 66%,var(--accent) 84%,transparent 100%);
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  mask-composite:exclude;opacity:0;transition:opacity .4s;
}
.live.is-working::before{opacity:1;animation:beam 2.6s linear infinite}
@keyframes beam{to{--beam:360deg}}
.live.is-moving{
  box-shadow:0 30px 60px -14px rgba(18,46,76,.46),0 0 44px rgba(10,128,226,.18);
  border-color:rgba(10,128,226,.42);
}
.live__top{display:flex;align-items:center;gap:9px;margin-bottom:9px}
.live__ch{
  width:20px;height:20px;border-radius:calc(7px * var(--r));flex:none;display:grid;place-items:center;
  background:linear-gradient(140deg,var(--accent-hi),var(--accent-lo));
  box-shadow:0 4px 10px -4px rgba(10,86,200,.7);
}
.live__who{min-width:0;overflow:hidden}
.live__name,.live__src{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.live__name{font-size:13px;font-weight:600;color:var(--ink);letter-spacing:-.012em}
.live__src{font-size:10.5px;color:var(--faint);line-height:1.3}

.field{display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--muted);height:18px;margin-bottom:4px;overflow:hidden;white-space:nowrap}
.field .k{color:var(--faint);flex:none}
.field .v{
  min-width:0;overflow:hidden;text-overflow:ellipsis;color:var(--ink);
  opacity:0;transform:translateY(6px);filter:blur(4px);
  transition:opacity .45s var(--ease),transform .45s var(--ease),filter .45s var(--ease);
}
.field .v.is-in{opacity:1;transform:none;filter:blur(0)}
.field .bar{height:6px;border-radius:calc(4px * var(--r));background:rgba(10,31,69,.08);flex:1;position:relative;overflow:hidden}
.field .bar::after{
  content:"";position:absolute;inset:0;transform:translateX(-100%);
  background:linear-gradient(90deg,transparent,rgba(10,128,226,.32),transparent);
  animation:shimmer 1.4s infinite;
}
.field .bar.is-done{display:none}
@keyframes shimmer{100%{transform:translateX(100%)}}

.scorewrap{
  display:flex;align-items:center;gap:10px;margin-top:10px;
  opacity:0;transform:translateY(6px);
  transition:opacity .4s var(--ease),transform .4s var(--ease);
}
.scorewrap.is-in{opacity:1;transform:none}
.ring{
  width:30px;height:30px;border-radius:50%;flex:none;position:relative;
  background:conic-gradient(var(--accent) calc(var(--score,0) * 1%), rgba(10,31,69,.11) 0);
}
.ring::after{content:"";position:absolute;inset:3px;border-radius:50%;background:#fff}
.ring b{
  position:absolute;inset:0;display:grid;place-items:center;z-index:1;
  font-size:10.5px;font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;
}
.scorewrap span{font-size:11px;color:var(--faint);line-height:1.3;min-width:0;overflow:hidden}

.agent{
  display:flex;align-items:center;gap:8px;margin-top:9px;padding-top:9px;
  border-top:1px solid var(--line-soft);
  font-size:11.5px;color:var(--accent-ink);font-weight:500;
  opacity:0;transition:opacity .35s;white-space:nowrap;overflow:hidden;
}
.agent.is-in{opacity:1}
.agent__dots{display:inline-flex;gap:3px;flex:none}
.agent__dots i{width:4px;height:4px;border-radius:50%;background:var(--accent);animation:type 1.2s infinite}
.agent__dots i:nth-child(2){animation-delay:.18s}
.agent__dots i:nth-child(3){animation-delay:.36s}
.agent__check{width:12px;height:12px;flex:none;display:none}
.agent.is-done .agent__dots{display:none}
.agent.is-done .agent__check{display:block}
.agent span{overflow:hidden;text-overflow:ellipsis}

/* ancorado no proprio funil, logo acima da coluna Novo, na faixa vazia do
   cabecalho do painel — e nao mais num left: em pixel cravado */
.incoming{
  position:absolute;left:0;top:-52px;z-index:6;
  display:flex;align-items:center;gap:9px;
  background:rgba(255,255,255,.97);border:1px solid rgba(10,31,69,.09);border-radius:calc(100px * var(--r));
  padding:9px 16px 9px 10px;font-size:12.5px;color:var(--ink);white-space:nowrap;
  box-shadow:0 16px 32px -12px rgba(18,46,76,.4);opacity:0;pointer-events:none;
}
.incoming.is-fly{animation:fly 2.1s var(--ease) forwards}
@keyframes fly{
  0%{opacity:0;transform:translate(-160px,160px) scale(.86)}
  26%{opacity:1;transform:translate(-100px,100px) scale(1)}
  64%{opacity:1;transform:translate(-30px,18px) scale(1)}
  100%{opacity:0;transform:translate(4px,-2px) scale(.8)}
}

.toast{
  position:absolute;left:0;bottom:0;z-index:7;
  display:flex;align-items:center;gap:12px;
  background:rgba(255,255,255,.98);border:1px solid rgba(10,31,69,.1);border-radius:calc(15px * var(--r));padding:12px 16px;
  box-shadow:0 24px 48px -16px rgba(18,46,76,.42);
  opacity:0;transform:translateY(14px) scale(.96);
  transition:opacity .45s var(--ease),transform .5s var(--ease-pop);
}
.toast.is-in{opacity:1;transform:none}
/* o aviso de fechamento e o unico verde da tela: e o unico momento em que
   dinheiro entrou de verdade */
.live.is-won{border-color:rgba(21,155,82,.55);box-shadow:0 18px 40px -18px rgba(21,155,82,.45)}
.toast.is-won .toast__ic{background:linear-gradient(140deg,#42DC86,#159B52);box-shadow:0 6px 14px -6px rgba(21,155,82,.8)}
.toast__ic{
  width:28px;height:28px;border-radius:calc(9px * var(--r));flex:none;display:grid;place-items:center;color:#fff;
  background:linear-gradient(140deg,var(--accent-hi),var(--accent-lo));
  box-shadow:0 6px 14px -6px rgba(10,86,200,.8);
}
.toast b{display:block;font-size:13px;font-weight:600;color:var(--ink);letter-spacing:-.012em}
.toast small{font-size:11.5px;color:var(--faint)}

/* ---------------- capítulos ---------------- */
/* a trilha de progresso tem exatamente a largura do quadro que ela descreve */
.chapters{display:flex;gap:9px;max-width:820px;margin-bottom:clamp(14px,2.1vh,28px)}
.feature__demo .chapters{max-width:none}
.chapter{flex:1;text-align:left;color:var(--faint);transition:color .3s}
.chapter[aria-current="true"]{color:var(--ink)}
.chapter:hover{color:var(--muted)}
.chapter__track{display:block;height:2px;border-radius:calc(2px * var(--r));background:rgba(10,31,69,.12);overflow:hidden;margin-bottom:10px}
.chapter__fill{display:block;height:100%;width:0;border-radius:calc(2px * var(--r));background:linear-gradient(90deg,var(--accent-lo),var(--accent-hi))}
.chapter span{display:block;font-size:12.5px}

/* ---------------- indicadores ---------------- */
.signals{
  display:flex;gap:clamp(20px,3vw,48px);flex-wrap:wrap;align-items:baseline;
  border-top:1px solid var(--line-soft);padding-top:clamp(18px,2.6vh,30px);
}
.signal{display:flex;align-items:baseline;gap:10px}
.signal b{font-size:clamp(1.4rem,2vw,1.75rem);font-weight:600;color:var(--ink);letter-spacing:-.032em;font-variant-numeric:tabular-nums}
.signal span{font-size:13.5px;color:var(--faint);max-width:24ch}
.signals__src{margin-left:auto;font-size:12.5px;color:rgba(10,31,69,.34)}

@media (prefers-reduced-motion:reduce){
  .pipeline{margin-top:0;transform:none;border-radius:0;box-shadow:none}
}

/* ---------------- responsivo ---------------- */
@media (max-width:1180px){
  .feature{grid-template-columns:1fr}
  .feature__demo .stage{width:100%}
  .pipeline{margin-top:0;border-radius:0;transform:none;box-shadow:none}
  .stage{perspective:none}
  .stage__wrap{transform:none!important}
  .panel{animation:none}
  /* era `196px` cravado: a faixa tinha 866px de altura e o aparelho ficava
     presto em 196 de largura, com 441px sobrando. */
  .panel__body{grid-template-columns:clamp(244px,30%,320px) minmax(0,1fr);gap:14px}
  .signals__src{margin-left:0;width:100%}
}
@media (max-width:880px){
  .panel{padding:12px;border-radius:calc(20px * var(--r))}
  .panel__body{grid-template-columns:1fr;gap:16px}
  /* A altura cravada em 310px deixava o aparelho com 143px de largura numa
     faixa de 300 — proporcao certa, tamanho de miniatura. Aqui embaixo a
     secao rola, entao a faixa pode ser ALTA e o celular enche a largura. */
  .phone-cell{max-width:266px;width:100%;margin:0 auto;height:clamp(390px,58vh,576px);min-height:0}
  .phone{border-radius:calc(23px * var(--r-fone))}
  .phone__screen{border-radius:calc(16px * var(--r-fone))}
  /* Quatro fases nao cabem na largura de um celular. Esconder a ultima
     mandava o cartao para o canto do quadro ao chegar em Negociacao, entao
     o funil ROLA na horizontal, como um kanban de verdade, e o JS traz a
     coluna ativa para a vista a cada troca de fase. */
  .kanban{
    gap:8px;grid-template-columns:repeat(4,minmax(148px,1fr));
    overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none;
  }
  .kanban::-webkit-scrollbar{display:none}
  .col{padding:9px;min-height:264px;border-radius:calc(13px * var(--r))}
  .col__head{font-size:11px}
  .count{display:none}
  .live{padding:10px}
  .live__src{display:none}
  .field{font-size:10.5px;height:16px}
  .scorewrap span{display:none}
  .toast{padding:10px 13px}
  .toast small{display:none}
  .incoming{display:none}
  .chapter span{font-size:11.5px}
}
@media (max-width:520px){
  .live{padding:9px}
  .live__name{font-size:11.5px}
  .field{font-size:9.8px;gap:5px}
  .field .k{display:none}
  .agent{font-size:10px}
  .col{padding:7px}
}

/* =======================================================================
   Faixa baixa: o cromo do cabeçalho do celular
   🩸 Estas regras VIVIAM no bloco de `max-height:820px` la' em cima e nunca
   valeram: media query nao soma especificidade, entao `.wa-head b` declarado
   depois, no corpo do arquivo, ganhava do override. Medido a 1536x700: a
   fonte continuava 12,5px e sobravam 49px para um nome que pede 78.
   Com a faixa baixa o celular fica preso pela ALTURA e nao pode alargar —
   quem cede e' o cromo: o icone do canal sai e o avatar encolhe.
   ======================================================================= */
@media (min-width:1181px) and (max-height:820px){
  .wa-head{gap:4px;padding:1px 6px 6px 3px}
  .wa-head__av{width:22px;height:22px;font-size:9px}
  .wa-head__acoes{gap:6px}
  .wa-head__acoes svg{width:12px;height:12px}
  .wa-head b{font-size:11px}
  .wa-head small{font-size:8.5px}
  .thread .msg{font-size:11px}
}

@media (min-width:1181px) and (max-height:820px){
  /* Faixa baixa: a altura e' que prende o aparelho, entao a proporcao mais
     larga da familia (iPhone SE, 1,78) e' o que devolve pixels ao texto. */
  .phone{--ar:1.78}
}

/* ---------------- o título em cima, centrado (19/10) ----------------
   Pedido do dono: «coloque o título centralizado e em cima dos textos e
   animações». O cabeçalho (rótulo + título) saiu da coluna da esquerda e
   atravessa as duas; o texto de apoio e os passos ficam embaixo dele, à
   esquerda, e a simulação à direita. Vale para os dois blocos .feature
   (#pipeline e #estudio). O fio antes do rótulo sai: centrado, ele ficava
   pendurado só de um lado (como no #vendas). */
.feature > .sechead{grid-column:1 / -1;justify-self:center;text-align:center;max-width:100%;margin:0}
/* numa linha só sempre que couber: cada linha a mais do título sai da altura
   da simulação (a seção tem a altura da tela); quando quebra, quebra ao meio */
.feature > .sechead .sechead__title{text-wrap:balance}
.feature > .sechead .sechead__eyebrow{justify-content:center}
.feature > .sechead .sechead__eyebrow i{display:none}
.feature > .sechead .sechead__title{margin-bottom:0}
/* A seção cresce a altura do cabeçalho (--cab, medido pelo js/cabecalho.js):
   o texto, a simulação e os números continuam com a altura da tela, como
   antes, e a simulação não encolhe. Sem JS, --cab é 0 e ela cede. */
@media (min-width:1181px){
  .feature{grid-template-rows:auto minmax(0,1fr) auto}
  #pipeline,#estudio{height:calc(100svh + var(--cab,0px))}
}
