/* ================================================================
   BASE.CSS
   Isto é o "alicerce" do site: fica carregado em toda tela e define
   o que TODO o resto usa (cores, fontes, fundo animado, tipografia
   dos títulos). Os outros arquivos CSS (botoes.css, campos.css...)
   dependem das variáveis definidas aqui — por isso base.css sempre
   precisa vir ANTES deles no <head> do index.html.
   ================================================================ */

/* ----------------------------------------------------------------
   VARIÁVEIS GLOBAIS (design tokens)
   Isto é uma "paleta central": em vez de escrever a cor #5CFF6E em
   30 lugares diferentes do CSS, você escreve var(--acid) em todos
   eles. Resultado prático: pra mudar o verde do site inteiro, você
   troca UMA linha aqui, não 30 linhas espalhadas.
   ---------------------------------------------------------------- */
:root{
  --bg:#050505;              /* preto de fundo do site inteiro */
  --acid:#5CFF6E;             /* verde neon — cor de destaque/ação (títulos em accent, botão do WhatsApp, foco, chip selecionado) */
  --acid-dim:#173a1c;         /* mesmo verde só que escurecido — usado como fundo de chip/opção já selecionada */
  --blood:#ff2b3d;            /* vermelho — avisos, erros e o "eyebrow" (etiqueta) de cada etapa numerada do formulário */
  --bone:#eee9dc;             /* "branco" quente — cor do texto principal */

  /* --line e --line-soft controlam a cor de TODAS as bordas e
     divisórias do site: campos, chips, cards, caixas, botão voltar,
     modal, calendário. Hoje estão em cinza (#757575) — se algum dia
     aparecerem em outra cor "gritante" sem querer, é aqui que se
     conserta, de uma vez só pra tudo. */
  --line:#757575;             /* borda "normal" (não selecionada) de quase tudo */
  --line-soft:#757575;        /* versão usada em linhas divisórias internas (ex: separador dentro da caixa de investimento) */

  --muted:rgba(238, 220, 220, 0.76); /* texto secundário — o "bone" com opacidade, cria hierarquia visual sem precisar de outra cor */
  --gut:22px;                 /* "calha" — respiro lateral padrão da página (margem esquerda/direita) */

  /* Observação: existia aqui uma variável --muted2 (#73ff00, verde
     forte) que não é usada em nenhum lugar do CSS. Foi removida
     nesta reorganização porque uma variável "morta" só confunde
     quem for mexer no código depois. Se você criar um novo elemento
     que precise de um tom secundário diferente do --muted, é aqui
     que se define uma nova variável — assim ela nasce já documentada
     e usada em algum lugar. */
}

/* ----------------------------------------------------------------
   RESET BÁSICO
   Cada navegador aplica um estilo padrão diferente pra coisas como
   margem de <body> ou tamanho de fonte de <button>. Isto zera essas
   diferenças pra você controlar 100% do visual a partir do seu CSS,
   em vez de "herdar" comportamento que muda de navegador pra navegador.
   ---------------------------------------------------------------- */
*{box-sizing:border-box;margin:0;padding:0;}
/* box-sizing:border-box = quando você define width:100px num elemento
   com padding e borda, o resultado final continua sendo 100px (padding
   e borda "cabem dentro"). Sem isso, o elemento ficaria maior que 100px
   de verdade — é o comportamento que mais gera bug de layout, por isso
   fica no topo do reset. */

html{-webkit-text-size-adjust:100%;}
/* evita que o Safari mobile aumente a fonte sozinho quando o usuário
   gira o celular de retrato pra paisagem */

html,body{background:var(--bg);color:var(--bone);overflow-x:hidden;}
/* overflow-x:hidden impede que apareça uma barra de rolagem horizontal
   se algum elemento vazar da largura da tela por acidente (ex: uma
   sombra ou animação que ultrapasse a borda) */

body{
  font-family:'JetBrains Mono',ui-monospace,monospace;
  /* fonte monoespaçada = todo caractere tem a mesma largura, dá o clima
     "sistema/técnico" que combina com o tom do estúdio. Se quiser trocar
     a fonte do corpo do texto (não dos títulos grandes), é aqui. */
  min-height:100vh;min-height:100dvh;
  /* declarar as duas não é redundância por engano: 100vh é a "altura da
     viewport" clássica, que em celulares conta a barra de endereço do
     navegador como se estivesse sempre visível. 100dvh ("dynamic vh") é
     a altura REAL disponível, que se ajusta quando essa barra some ao
     rolar. Navegadores antigos que não conhecem dvh simplesmente ignoram
     essa segunda linha e ficam só com a primeira — por isso as duas juntas
     é a forma seguro de usar essa técnica. */
  -webkit-font-smoothing:antialiased; /* suaviza o desenho das letras no Safari/Chrome (Mac/iOS) */
}

::selection{background:var(--acid);color:#050505;}
/* quando alguém seleciona um texto com o dedo ou o mouse, o fundo da
   seleção fica verde neon em vez do azul padrão do navegador */

button,input,textarea{font:inherit;color:inherit;}
/* por padrão do navegador, esses três elementos NÃO herdam a fonte nem
   a cor do resto da página (é um comportamento antigo do HTML). Essa
   linha força a herança, senão todo botão e campo apareceria com a
   fonte "do sistema", destoando do resto do site. */

:focus-visible{outline:2px solid var(--acid);outline-offset:3px;}
/* contorno verde que aparece em volta de um elemento quando alguém
   navega pelo site usando o teclado (Tab). É acessibilidade: sem isso,
   quem não usa mouse fica sem saber onde está "focado" na página. */

/* ----------------------------------------------------------------
   CAMADAS DE FUNDO
   O fundo do site não é uma imagem só — são 4 camadas empilhadas com
   z-index (a propriedade que decide "o que fica na frente de quê"),
   da mais funda pra mais rasa:

     z-index 0  → #dotCanvas   (onde o JS desenha as "caveiras respirando")
     z-index 1  → .noise       (textura de grão, tipo filme analógico)
     z-index 1  → .vignette    (escurece as BORDAS da tela)
     z-index 1  → .scrim       (escurece a tela INTEIRA de forma parelha)
     z-index 2  → #app          (todo o conteúdo real: textos, botões, campos)

   As três do meio (noise/vignette/scrim) dividem o mesmo z-index (1)
   porque a ordem entre elas é decidida pela ordem no HTML, não pelo
   z-index — quem vem depois no HTML fica visualmente por cima das
   outras com o mesmo z-index.
   ---------------------------------------------------------------- */

#dotCanvas{position:fixed;inset:0;z-index:0;display:block;background:var(--bg);}
/* position:fixed + inset:0 = "gruda" o elemento nos 4 cantos da tela
   (top:0, right:0, bottom:0, left:0) e ele NÃO rola com o scroll da
   página — fica sempre cobrindo a tela toda, mesmo se o conteúdo
   crescer e a página passar a ter barra de rolagem. */

.noise{
  position:fixed;inset:0;z-index:1;pointer-events:none;opacity:0.04;
  /* pointer-events:none = cliques "atravessam" essa camada e chegam
     no que está por baixo — se não tivesse isso, essa camada (que é
     só decoração) bloquearia cliques nos botões reais da página. */
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  /* essa URL enorme é um SVG "embutido" direto no CSS (data URI) que
     gera ruído aleatório via <feTurbulence> — não é um arquivo de
     imagem separado, é gerado matematicamente pelo próprio navegador.
     Vantagem: não precisa hospedar um arquivo .png de textura. */
  mix-blend-mode:overlay; /* mistura essa textura com o que está embaixo, em vez de simplesmente cobrir por cima */
}

.vignette{
  position:fixed;inset:0;z-index:1;pointer-events:none;
  background:radial-gradient(ellipse at 50% 45%, transparent 30%, rgba(0,0,0,0.82) 100%);
  /* radial-gradient a partir do centro (50% 45%): fica transparente
     até 30% do raio e depois escurece progressivamente até quase preto
     nas bordas. É o efeito clássico de vinheta de câmera/cinema. Pra
     deixar a vinheta mais forte/fraca, mexa no 0.82 (opacidade máxima)
     ou no 30% (a partir de onde ela começa a escurecer). */
}

.scrim{position:fixed;inset:0;z-index:1;pointer-events:none;background:rgba(5, 5, 5, 0.61);}
/* diferente da vignette (que só escurece as bordas), o scrim escurece
   a tela INTEIRA igualmente. Ele existe pra garantir que o texto continue
   legível mesmo se, num certo instante da animação, um ponto bem
   brilhante do fundo passar exatamente atrás de uma palavra — sem essa
   camada, a legibilidade do texto oscilaria junto com a animação. */

/* ----------------------------------------------------------------
   ESTRUTURA GERAL DA PÁGINA (#app)
   ---------------------------------------------------------------- */
#app{
  position:relative;z-index:2; /* acima das 4 camadas de fundo (0 e 1) */
  min-height:100vh;min-height:100dvh;
  display:flex;flex-direction:column; /* empilha topbar → barra de progresso → "palco" (stage) verticalmente, um embaixo do outro */
}

/* cabeçalho fixo no topo: "GRIMME / TATTOO / STUDIO" à esquerda e
   "cidade / estilo" à direita */
.topbar{
  width:100%;max-width:var(--max-w, 650px);margin:0 auto;
  display:flex;justify-content:space-between;align-items:flex-start;gap:2px;
  padding:calc(16px + env(safe-area-inset-top)) var(--gut) 12px;
  /* env(safe-area-inset-top) empurra o conteúdo pra baixo do "notch"
     (câmera/sensor) de celulares com tela cheia, senão o texto ficaria
     escondido atrás do hardware físico do aparelho. */
  font-size:9.5px;letter-spacing:0.2em;line-height:1.6;text-align:center;
}
.topbar .brand{text-align:left;color:var(--acid);font-weight:700;}
.topbar .meta{text-align:right;color:var(--muted);}

/* ---- "palco": a área central onde cada tela da jornada aparece ---- */
.stage{
  flex:1; /* ocupa todo o espaço vertical que sobrar entre o topbar e o fim da tela */
  display:flex;align-items:center; /* centraliza o conteúdo verticalmente dentro do espaço disponível */
  padding:26px var(--gut) 150px;
  /* o padding-bottom de 150px é de propósito bem maior que os outros:
     é o espaço reservado pra o conteúdo nunca ficar escondido atrás da
     barra fixa de botões (.cta-bar), que fica flutuando por cima no
     fim da tela. Se um dia a barra de botões ficar mais alta (ex: você
     adicionar um terceiro botão que quebra linha), esse valor pode
     precisar aumentar também. */
}
.screen{display:none;width:100%;max-width:560px;margin:0 auto;}
/* cada "tela" da jornada (intro, voce, peca, ideia...) fica escondida
   por padrão — é o JavaScript (jornada.js) que decide qual delas mostra,
   adicionando a classe .active nela */
.screen.active{display:block;animation:enter .45s cubic-bezier(.2,.7,.2,1) both;}
@keyframes enter{from{opacity:0;transform:translateY(14px);}to{opacity:1;transform:none;}}
/* a tela entra subindo 14px de baixo pra cima, com fade de opacidade.
   Pra trocar a "sensação" da transição (mais rápida, sem subir, etc.),
   mexa na duração (.45s), na curva (cubic-bezier) ou nos valores do
   @keyframes. */

/* ----------------------------------------------------------------
   TIPOGRAFIA COMUM A TODAS AS TELAS
   (etiqueta "eyebrow", título grande, texto de apoio, dica pequena)
   ---------------------------------------------------------------- */
.eyebrow{
  /* a etiqueta pequena acima de cada título, tipo "02 · A PEÇA" */
  display:inline-block;font-weight: bold;;font-size:13px;letter-spacing:0.22em;color:var(--acid);
  margin-bottom:8px;text-shadow:0 1px 10px rgba(0, 0, 0, 0.9);
  /* o text-shadow escuro por trás do texto garante contraste mesmo
     quando o fundo animado passa uma parte clara exatamente atrás */
}
.eyebrow.blood{color:var(--blood);} /* variante vermelha — usada nas etapas "obrigatórias" do formulário, pra sinalizar urgência/atenção */

h1.title,h2.title{
  font-family:'Anton',Impact,sans-serif;font-weight:400;
  /* Anton é uma fonte condensada e pesada — dá o visual de "cartaz",
     bem diferente da fonte mono usada no resto do texto */
  letter-spacing:0.01em;line-height:0.94;text-transform:uppercase;
  /* line-height:0.94 (menor que 1!) faz as linhas ficarem coladas
     verticalmente quando o título quebra em várias linhas — é o que
     dá aquele visual "empilhado" tipo cartaz de show */
  font-size:clamp(38px,11vw,62px);
  /* clamp(mínimo, preferido, máximo): o tamanho da fonte nunca fica
     menor que 38px nem maior que 62px, e no meio disso acompanha a
     largura da tela (11% da viewport). Isso substitui ter que escrever
     um monte de @media queries só pra ajustar tamanho de fonte. */
  text-shadow:0 2px 22px rgba(0,0,0,0.85);
}
h2.title{font-size:clamp(30px,8.6vw,48px);} /* os h2 (a maioria das telas) são um pouco menores que o h1 da intro */
.accent{color:var(--acid);} /* palavra/trecho em destaque verde dentro de um título ou texto */

.sub{
  margin-top:16px;font-size:14px;line-height:1.65;color:var(--muted);
  max-width:44ch;
  /* max-width em "ch" = largura baseada no tamanho do caractere "0"
     da fonte atual. Isso limita quantos caracteres cabem por linha,
     o que facilita a leitura (linhas muito longas cansam o olho) —
     e continua funcionando bem mesmo se a fonte mudar de tamanho. */
  text-shadow:0 1px 12px rgba(0,0,0,0.9);
}
.sub b{color:rgb(222, 255, 145);font-weight:600;} /* palavras em <b> dentro do texto de apoio ficam mais claras, sem gritar tanto quanto o .accent verde */
.hint{margin-top:10px;font-size:12px;line-height:1.65;letter-spacing:0.02em;color:#c6c9b6;}
.hint,.field label,.sub{
  background:rgba(5,5,5,.88);
  box-shadow:0 0 12px 5px rgba(5,5,5,.65);
  text-shadow:0 1px 2px #000;
}
.screen.active .title{animation:title-arrive .48s cubic-bezier(.2,.7,.2,1) both;}
@keyframes title-arrive{
  0%{opacity:0;transform:translateY(8px);}
  55%{opacity:1;transform:translateX(-1px);text-shadow:1px 0 var(--acid);}
  70%{transform:translateX(1px);}
  100%{opacity:1;transform:none;text-shadow:0 2px 22px rgba(0,0,0,.85);}
}
/* dica pequena e discreta, normalmente logo abaixo de um campo */

.sr-only{
  /* esconde um elemento visualmente mas mantém ele legível pra leitor
     de tela — diferente de display:none, que esconde de todo mundo,
     inclusive de quem usa tecnologia assistiva */
  position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap;border:0;
}

/* ----------------------------------------------------------------
   RESPONSIVIDADE — telas maiores (tablet/desktop)
   ---------------------------------------------------------------- */
@media (min-width:720px){
  :root{--gut:40px;} /* em telas largas, aumenta a margem lateral (mais respiro) */
  .intro-grid{display:grid;grid-template-columns:1.15fr 1fr;gap:34px;align-items:center;}
  /* na intro, o texto e a foto passam a ficar lado a lado em vez de empilhados */
  .intro-photo{margin-top:0;aspect-ratio:4/5;}
  .stage{padding-bottom:140px;} /* um pouco menos de espaço reservado embaixo, já que telas maiores têm mais espaço sobrando */
}

/* ----------------------------------------------------------------
   ACESSIBILIDADE — respeita quem ativou "reduzir movimento" no sistema
   ---------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce){
  *{animation-duration:0.01ms !important;animation-iteration-count:1 !important;transition-duration:0.01ms !important;}
  /* zera (quase) todas as animações e transições do site pra quem tem
     sensibilidade a movimento ou enjoo. O !important aqui é proposital:
     garante que essa regra vença qualquer duração definida em outro
     lugar do CSS, sem precisar caçar cada animação uma por uma. */
}
