/* EBOX · Anatomy of a Vial · fonte de verdade em specs/design.md */
:root{
  --fundo:#0a1036; --borda:#04061a;
  --tinta:#e9edfb; --fraco:#7b85b8; --acento:#e02a2e;
  --gutter:clamp(22px,5vw,96px);
  --mono:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
  --display:"Space Grotesk",system-ui,sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0}
html{background:var(--borda);color-scheme:dark}
body{background:radial-gradient(120% 90% at 62% 40%,var(--fundo) 0%,#070b28 48%,var(--borda) 100%);
     color:var(--tinta);font-family:var(--display);font-weight:400;
     -webkit-font-smoothing:antialiased;overflow-x:hidden;cursor:none}
@media (hover:none),(max-width:900px){ body{cursor:auto} }
::selection{background:var(--acento);color:#fff}

/* a cena fica fixa atras de tudo; quem rola e o texto */
#cena{position:fixed;inset:0;width:100%;height:100%;display:block;z-index:0}

/* grao de filme: e ele que tira a cara de render limpo */
.grao{position:fixed;inset:-50%;width:200%;height:200%;z-index:3;pointer-events:none;opacity:.07;
      mix-blend-mode:overlay;
      background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
      animation:grao 1.2s steps(8) infinite}
@keyframes grao{
  0%{transform:translate(0,0)} 25%{transform:translate(-3%,2%)} 50%{transform:translate(2%,-4%)}
  75%{transform:translate(-1%,4%)} 100%{transform:translate(3%,-1%)}
}

/* veu escuro atras do texto; no desktop fica quase invisivel */
.veu{position:fixed;inset:0;z-index:1;pointer-events:none;opacity:0;
     background:linear-gradient(to top,rgba(4,6,26,.92) 0%,rgba(4,6,26,.7) 34%,rgba(4,6,26,0) 62%);
     transition:opacity .5s}
.veu.ativo{opacity:1}

/* ---------- HUD ---------- */
.hud{position:fixed;inset:0;z-index:5;pointer-events:none;font-family:var(--mono);
     font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--fraco)}
.hud-canto{position:absolute;display:flex;flex-direction:column;gap:6px;line-height:1.3}
.topo-esq{left:var(--gutter);top:clamp(20px,2.6vw,34px)}
.topo-dir{right:var(--gutter);top:clamp(20px,2.6vw,34px);align-items:flex-end}
.base-esq{left:var(--gutter);bottom:clamp(20px,2.6vw,34px)}
.base-dir{right:var(--gutter);bottom:clamp(20px,2.6vw,34px);align-items:flex-end;transition:opacity .5s}
.base-dir.sumiu{opacity:0}
.base-dir .linha{display:block;width:1px;height:38px;background:var(--fraco);opacity:.7;transform-origin:top;
                 animation:rolar 1.8s ease-in-out infinite}
@keyframes rolar{0%{transform:scaleY(0);transform-origin:top} 45%{transform:scaleY(1);transform-origin:top}
                 55%{transform:scaleY(1);transform-origin:bottom} 100%{transform:scaleY(0);transform-origin:bottom}}
.hud .marca{color:var(--tinta);font-weight:500}
.hud .sub{opacity:.75}
#hud-indice{color:var(--tinta)}
#hud-lote{color:var(--tinta)}
.progresso{position:absolute;left:0;right:0;top:0;height:1px;background:rgba(123,133,184,.18)}
.progresso i{display:block;height:100%;width:0;background:var(--acento);transform-origin:left}

/* ---------- palco e texto ---------- */
.palco{position:relative;z-index:2;pointer-events:none}
.cena{min-height:100svh;display:flex;align-items:center;padding:0 var(--gutter);position:relative}
.cena.alta{min-height:180svh;align-items:flex-start;padding-top:38vh}
.cena.fim{align-items:center;justify-content:center;text-align:center}
.trecho{min-height:130svh}
.trecho.curto{min-height:70svh}
.presa{min-height:100svh}

.bloco{max-width:min(44vw,600px)}
.bloco.dir{margin-left:auto;text-align:right}
.bloco.topo{position:absolute;left:var(--gutter);top:clamp(70px,10vh,110px);max-width:none}
.bloco.centro{max-width:none;margin:0 auto}

.mono{font-family:var(--mono);font-size:clamp(11px,.85vw,13px);letter-spacing:.14em;text-transform:uppercase;
      color:var(--fraco);line-height:1.5}
.etiqueta{margin-bottom:clamp(18px,2vw,28px)}
.etiqueta::before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--acento);
                  margin-right:12px;vertical-align:1px}
.legenda{margin-top:clamp(18px,2.2vw,30px);color:var(--tinta);opacity:.8}
.legenda.fraca{margin-top:10px;opacity:.5}

.titulo{font-family:var(--display);font-weight:500;text-transform:uppercase;letter-spacing:-.02em;line-height:.92;
        font-size:clamp(52px,8.4vw,124px);color:var(--tinta)}
.titulo .linha{display:block;overflow:hidden;padding-bottom:.06em;margin-bottom:-.06em}
.titulo .linha>span{display:block;transform:translateY(112%)}
.titulo em{font-style:normal;color:var(--acento)}

/* texto entra por linhas: o js anima, o css so deixa pronto */
[data-texto] .etiqueta,[data-texto] .legenda,[data-texto] .acoes,[data-texto] .selo{opacity:0;transform:translateY(22px)}

/* ---------- legendas presas ao frasco (cena 03) ---------- */
.legendas{list-style:none;position:absolute;inset:0;pointer-events:none}
.chamada{position:absolute;left:0;top:0;opacity:0;width:max-content;
         display:grid;grid-template-columns:auto auto;column-gap:14px;row-gap:2px;align-items:baseline}
.chamada .ponto{position:absolute;width:7px;height:7px;border-radius:50%;background:var(--tinta);
                box-shadow:0 0 0 4px rgba(233,237,251,.12),0 0 18px rgba(223,232,255,.7)}
.chamada .fio{position:absolute;overflow:visible;left:0;top:0;width:1px;height:1px}
.chamada .fio line{stroke:rgba(233,237,251,.55);stroke-width:1}
.chamada .n{color:var(--acento);grid-row:1/3}
.chamada .t{color:var(--tinta)}
.chamada .d{grid-column:2}
.chamada.visivel{opacity:1}

/* ---------- botoes da cena 05 ---------- */
.acoes{display:flex;gap:10px;margin-top:clamp(22px,2.6vw,36px);pointer-events:auto}
.botao{appearance:none;background:transparent;border:1px solid rgba(233,237,251,.35);color:var(--tinta);
       padding:12px 20px;border-radius:999px;cursor:none;transition:border-color .2s,background .2s,color .2s}
.botao:hover{border-color:var(--tinta);background:rgba(233,237,251,.08)}
.botao:focus-visible{outline:1px solid var(--acento);outline-offset:3px}
.botao.fraco{border-color:transparent;color:var(--fraco)}
@media (hover:none),(max-width:900px){ .botao{cursor:pointer} }

/* ---------- fim ---------- */
.selo{margin-top:clamp(34px,4vw,56px);display:inline-flex;align-items:center;gap:12px;
      font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--fraco)}
.selo img{height:22px;width:auto;opacity:.85;filter:brightness(0) invert(1)}   /* o logo e escuro; aqui vira branco */

/* ---------- carga ---------- */
.carga{position:fixed;inset:0;z-index:9;display:grid;place-items:center;background:var(--borda);
       transition:opacity .9s ease,visibility 0s .9s}
.carga.foi{opacity:0;visibility:hidden;pointer-events:none}
.carga-miolo{display:grid;place-items:center;gap:14px;position:relative}
.anel-carga{width:150px;height:150px;transform:rotate(-90deg)}
.anel-carga circle{fill:none;stroke:rgba(123,133,184,.22);stroke-width:1}
.anel-carga #anel-traco{stroke:var(--tinta);stroke-dasharray:339.3;stroke-dashoffset:339.3;transition:stroke-dashoffset .35s ease}
.carga .num{position:absolute;top:50%;left:50%;transform:translate(-50%,-56%);
            font-size:38px;font-weight:400;letter-spacing:-.03em}
.carga .num::after{content:"%";font-size:.5em;margin-left:2px;color:var(--fraco)}
.carga .sub{margin-top:150px;font-size:10px}

/* ---------- cursor proprio (so desktop com mouse) ---------- */
.cursor{position:fixed;left:0;top:0;width:14px;height:14px;border-radius:50%;border:1px solid var(--tinta);
        z-index:20;pointer-events:none;transform:translate(-50%,-50%);opacity:0;
        transition:width .25s,height .25s,opacity .3s,border-color .25s}
.cursor.viva{opacity:.9}
.cursor.grande{width:40px;height:40px;border-color:var(--acento)}
.cursor.pegando{width:52px;height:52px;border-style:dashed}
@media (hover:none),(max-width:900px){ .cursor{display:none} }

/* ---------- celular: a mesma jornada, em pe ---------- */
@media (max-width:900px){
  .cena{align-items:flex-end;padding-bottom:clamp(88px,15vh,140px)}
  .cena.alta{min-height:160svh;align-items:flex-end;padding-top:0}
  .bloco,.bloco.dir{max-width:none;width:100%;text-align:left;margin-left:0}
  .titulo{font-size:clamp(44px,13vw,68px)}
  .bloco.topo{top:clamp(64px,9vh,90px)}
  /* legendas viram lista no pe da tela */
  .legendas{position:absolute;inset:auto var(--gutter) clamp(88px,15vh,140px) var(--gutter);display:grid;gap:14px}
  .chamada{position:relative;width:auto;grid-template-columns:auto 1fr;justify-content:start}
  .chamada .ponto,.chamada .fio{display:none}
  .hud .sub{display:none}
  .base-dir{display:none}
}
@media (prefers-reduced-motion:reduce){
  .grao{animation:none}
  .base-dir .linha{animation:none}
}
