/* =====================================================================
   CARTAO DE VISITA VIRTUAL: Rafael Mourao / Termaxis

   Paleta pedida pelo Igor: PRETO predominante, preto e branco na base,
   AZUL BEM ESCURO nos detalhes. O azul escuro e o da propria Termaxis
   (#0f3b5f, medido nos catalogos dela).

   Uma ressalva que vale escrita: azul bem escuro em cima de preto quase
   nao se enxerga. Entao o azul manda na ESTRUTURA (bordas, fundo de
   cartao, trilho do carrossel, aro do retrato) e o texto fica no branco
   e no cinza. Onde o texto precisa ser azul, ele sobe alguns tons,
   senao o contraste cai abaixo do legivel no celular na rua.

   Mobile-first de verdade: nao ha layout de desktop, so uma coluna que
   para de crescer aos 460px e se centraliza.
   ===================================================================== */

/* Poppins servida pela propria pasta (02/10/2026), os mesmos arquivos do
   site termaxis.com.br, sem Google Fonts (ver o comentario no index.html). */
@font-face { font-family: 'Poppins'; font-style: normal; font-weight: 400; font-display: swap; src: url(../fonts/poppins-400.woff2) format("woff2"); }
@font-face { font-family: 'Poppins'; font-style: normal; font-weight: 500; font-display: swap; src: url(../fonts/poppins-500.woff2) format("woff2"); }
@font-face { font-family: 'Poppins'; font-style: normal; font-weight: 600; font-display: swap; src: url(../fonts/poppins-600.woff2) format("woff2"); }
@font-face { font-family: 'Poppins'; font-style: normal; font-weight: 700; font-display: swap; src: url(../fonts/poppins-700.woff2) format("woff2"); }

:root {
  --preto:       #04060a;   /* fundo da pagina */
  --carvao:      #090d13;   /* fundo de secao */
  --azul-fundo:  #081726;   /* fundo de cartao, azul bem escuro */
  --azul-borda:  #13324c;   /* a borda/detalhe que o Igor pediu */
  --azul-forte:  #0f3b5f;   /* o azul da Termaxis, cheio */
  --azul-texto:  #74a9d6;   /* so onde o texto precisa ser azul */
  --branco:      #f3f6fa;
  --suave:       #96a2b1;
  --fraco:       #5e6b7a;
  --raio:        16px;
  --raio-g:      20px;
}

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  -webkit-tap-highlight-color: transparent;
}

html {
  overscroll-behavior-y: none;
  -webkit-text-size-adjust: 100%;
}

body {
  font-family: 'Poppins', system-ui, -apple-system, 'Segoe UI', sans-serif;
  background: var(--preto);
  color: var(--branco);
  -webkit-font-smoothing: antialiased;
  overscroll-behavior-y: none;
  /* `pan-x pan-y` deixa rolar nos dois sentidos (a pagina na vertical
     e o carrossel na horizontal) e tira o resto: pinca e zoom de
     duplo-toque. Antes estava `manipulation`, que matava so o
     duplo-toque. Trocado em 21/09/2026 com o pedido de nao dar zoom. */
  touch-action: pan-x pan-y;
  /* A pagina nasce apagada e acende quando o JS termina de montar, para
     ninguem ver a casca vazia por um quadro. */
  opacity: 0;
  transition: opacity .35s ease;
}
body.pronto { opacity: 1; }

.cartao-visita {
  width: 100%;
  max-width: 460px;
  margin: 0 auto;
  /* Blindagem leve, pedida em 21/09/2026 (ver o aviso no app.js): o
     texto nao se seleciona e o toque longo no iPhone nao abre a lupa de
     selecao nem a folha de compartilhar. Nao afeta leitor de tela. */
  -webkit-user-select: none;
  -moz-user-select: none;
  user-select: none;
  -webkit-touch-callout: none;
  -webkit-user-drag: none;
  /* env() sozinho nao serve: em navegador sem notch ele volta vazio e a
     declaracao inteira cai. O segundo argumento e o padrao. */
  padding:
    calc(34px + env(safe-area-inset-top, 0px))
    20px
    calc(30px + env(safe-area-inset-bottom, 0px));
}

/* ======================================================= TOPO/RETRATO */

.capa {
  position: relative;
  text-align: center;
  padding-bottom: 6px;
}

/* O brilho azul atras do retrato. Fica num ::before para nao entrar na
   arvore de acessibilidade e para nao empurrar nada do layout. */
.capa::before {
  content: '';
  position: absolute;
  top: -58px;
  left: 50%;
  width: 320px;
  height: 320px;
  transform: translateX(-50%);
  background: radial-gradient(circle,
    rgba(15, 59, 95, .55) 0%,
    rgba(15, 59, 95, .18) 42%,
    rgba(15, 59, 95, 0) 68%);
  pointer-events: none;
  z-index: 0;
}

.retrato {
  position: relative;
  z-index: 1;
  width: 132px;
  height: 132px;
  margin: 0 auto 18px;
  border-radius: 50%;
  overflow: hidden;
  background: var(--azul-fundo);
  /* dois aros: o de fora e o detalhe azul, o de dentro separa do fundo */
  box-shadow:
    0 0 0 1px rgba(255, 255, 255, .06),
    0 0 0 5px var(--azul-fundo),
    0 0 0 6px var(--azul-borda),
    0 14px 34px rgba(0, 0, 0, .7);
  display: grid;
  place-items: center;
}

/* A foto e FUNDO, nao <img>: ver o porque no montarTopo do app.js. */
.retrato-foto {
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
}

/* Enquanto a foto nao chega: o monograma. Nao pode parecer erro. */
.retrato-vazio {
  background:
    linear-gradient(160deg, #0d2135 0%, #061019 100%);
}
.retrato-vazio .mono {
  font-size: 40px;
  font-weight: 600;
  letter-spacing: .06em;
  color: var(--azul-texto);
  opacity: .92;
  /* o E da direita compensa o espacamento, senao o par sai torto */
  text-indent: .06em;
}

.nome {
  position: relative;
  z-index: 1;
  font-size: 26px;
  font-weight: 600;
  letter-spacing: -.01em;
  line-height: 1.2;
}

.cargo {
  position: relative;
  z-index: 1;
  margin-top: 7px;
  font-size: 13.5px;
  font-weight: 500;
  line-height: 1.45;
  color: var(--azul-texto);
}

.formacao {
  position: relative;
  z-index: 1;
  margin-top: 6px;
  font-size: 12.5px;
  line-height: 1.5;
  color: var(--suave);
}
.formacao .ponto { margin: 0 6px; color: var(--fraco); }
/* As cidades andam juntas: quebrava em "Macae," / "Sao Goncalo e Recreio/RJ"
   de 360 a 430px (revisao visual de 02/10/2026). */
.formacao .local { white-space: nowrap; }

/* Os selos embrulham centralizados: em 360px os dois nao cabem lado a
   lado, e empilhados no meio a quebra parece decisao, nao acidente. */
.selos {
  position: relative;
  z-index: 1;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 7px;
  margin-top: 15px;
}

.selo {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 7px 14px;
  border: 1px solid var(--azul-borda);
  border-radius: 999px;
  background: var(--azul-fundo);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: .02em;
  color: var(--suave);
}
.selo-pt {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: #3ea06f;            /* verde so aqui: e o "ativo" */
  box-shadow: 0 0 8px rgba(62, 160, 111, .8);
  flex: none;
}

/* ========================================================= CARROSSEL */

.atuacao { margin-top: 30px; }

.fita {
  display: flex;
  gap: 12px;
  overflow-x: auto;
  /* O encaixe e do navegador. O JS nunca escreve scrollLeft na mao:
     quando os dois disputam, o navegador reencaixa por cima e o
     carrossel anda sozinho para o lugar errado. */
  scroll-snap-type: x mandatory;
  /* o recuo dos lados deixa o primeiro e o ultimo cartao chegarem ao
     centro, e e o que cria a espiada no cartao seguinte */
  padding-inline: 11%;
  scroll-padding-inline: 11%;
  padding-block: 4px 2px;
  /* margem negativa para a fita sangrar ate a borda da tela, sem
     estourar a largura: o pai tem 20px de padding de cada lado */
  margin-inline: -20px;
  scrollbar-width: none;
  outline: none;
}
.fita::-webkit-scrollbar { display: none; }
.fita:focus-visible {
  outline: 2px solid var(--azul-texto);
  outline-offset: 3px;
  border-radius: var(--raio-g);
}

.cartao {
  flex: 0 0 78%;
  scroll-snap-align: center;
  min-height: 152px;
  padding: 18px 18px 20px;
  border: 1px solid var(--azul-borda);
  border-radius: var(--raio-g);
  background:
    linear-gradient(158deg, var(--azul-fundo) 0%, #05090f 100%);
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.etiqueta {
  align-self: flex-start;
  padding: 4px 9px;
  border-radius: 6px;
  background: rgba(15, 59, 95, .55);
  border: 1px solid rgba(116, 169, 214, .18);
  font-size: 9.5px;
  font-weight: 600;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--azul-texto);
}

.cartao-tit {
  font-size: 16.5px;
  font-weight: 600;
  line-height: 1.25;
  margin-top: 2px;
}

.cartao-txt {
  font-size: 12.8px;
  line-height: 1.62;
  color: var(--suave);
}

.pontos {
  display: flex;
  justify-content: center;
  gap: 7px;
  margin-top: 16px;
}
.ponto-b {
  width: 7px;
  height: 7px;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background: #1b2634;
  cursor: pointer;
  transition: width .28s ease, background .28s ease;
  /* a area de toque cresce sem a bolinha crescer: 7px e alvo pequeno
     demais para dedo, e o minimo confortavel e 24px */
  position: relative;
}
.ponto-b::after {
  content: '';
  position: absolute;
  inset: -9px;
}
.ponto-b.on {
  width: 22px;
  border-radius: 999px;
  background: var(--azul-texto);
}
.ponto-b:focus-visible {
  outline: 2px solid var(--azul-texto);
  outline-offset: 4px;
}

/* ============================================ SECOES (resumo e certs) */

.secao { margin-top: 34px; }

.secao-tit {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--fraco);
  margin-bottom: 14px;
}
.secao-tit::after {
  content: '';
  flex: 1;
  height: 1px;
  background: linear-gradient(90deg, var(--azul-borda), transparent);
}

.resumo-txt {
  font-size: 13.4px;
  line-height: 1.72;
  color: var(--suave);
}

/* O negrito do resumo sobe o texto para o branco. So o peso nao basta
   num paragrafo cinza: em tela de celular, no sol, 600 sobre --suave
   quase nao se distingue de 400. Quem separa e o contraste. */
.resumo-txt strong {
  font-weight: 600;
  color: var(--branco);
}

.certs { list-style: none; display: grid; gap: 8px; }

.cert {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 12px;
  padding: 13px 14px;
  border: 1px solid rgba(19, 50, 76, .75);
  border-radius: var(--raio);
  background: var(--carvao);
}

/* O registro do conselho nao e treinamento: e o que sustenta o resto.
   Ganha a borda azul cheia para ler primeiro. */
.cert-forte {
  border-color: var(--azul-forte);
  background: linear-gradient(145deg, var(--azul-fundo) 0%, var(--carvao) 100%);
}

.cert-cod {
  flex: none;
  min-width: 54px;
  padding: 5px 8px;
  border-radius: 7px;
  background: rgba(15, 59, 95, .45);
  border: 1px solid var(--azul-borda);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: .04em;
  text-align: center;
  color: var(--azul-texto);
}
.cert-forte .cert-cod {
  background: var(--azul-forte);
  border-color: #1d5c8f;
  color: #dbeaf7;
}

.cert-corpo { min-width: 0; }
.cert-tit {
  font-size: 12.6px;
  font-weight: 500;
  line-height: 1.35;
}
.cert-det {
  margin-top: 3px;
  font-size: 11px;
  line-height: 1.4;
  color: var(--fraco);
}

.cert-ano {
  flex: none;
  font-size: 11px;
  font-weight: 500;
  color: var(--fraco);
  font-variant-numeric: tabular-nums;
}

.certs-nota {
  margin-top: 11px;
  font-size: 10.6px;
  line-height: 1.5;
  color: var(--fraco);
  text-align: center;
}

/* ============================================================ BOTOES */

.botoes {
  margin-top: 34px;
  display: grid;
  gap: 10px;
}

.botao {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 13px;
  /* 62px de altura: alvo de toque folgado, acima dos 44px minimos */
  min-height: 62px;
  padding: 0 16px;
  border: 1px solid var(--azul-borda);
  border-radius: var(--raio);
  background: var(--carvao);
  color: var(--branco);
  text-decoration: none;
  transition: transform .18s ease, border-color .18s ease, background .18s ease;
}
.botao:active { transform: scale(.985); }

.botao-1 {
  border-color: var(--azul-forte);
  background: linear-gradient(140deg, #0d2c47 0%, #071420 100%);
}

.botao-ico {
  width: 38px;
  height: 38px;
  flex: none;
  display: grid;
  place-items: center;
  border-radius: 10px;
  background: rgba(15, 59, 95, .45);
  border: 1px solid var(--azul-borda);
  color: var(--azul-texto);
}
.botao-1 .botao-ico {
  background: var(--azul-forte);
  border-color: #1d5c8f;
  color: #e4f0fa;
}
.botao-ico svg { width: 20px; height: 20px; display: block; }

.botao-txt { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.botao-tit { font-size: 13.6px; font-weight: 600; line-height: 1.2; }
.botao-sub {
  font-size: 11.4px;
  color: var(--suave);
  line-height: 1.2;
  font-variant-numeric: tabular-nums;
}

.botao-seta { color: var(--fraco); display: grid; place-items: center; }
.botao-seta svg { width: 17px; height: 17px; display: block; }

/* ============================================================ RODAPE */

.rodape {
  margin-top: 30px;
  padding-top: 20px;
  border-top: 1px solid rgba(19, 50, 76, .55);
  text-align: center;
  font-size: 10.6px;
  letter-spacing: .04em;
  color: var(--fraco);
}

/* O slogan e a unica frase do rodape que existe para ser LIDA, entao
   ele nao herda o tamanho de letra miuda do bloco. */
.slogan {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  font-weight: 500;
  letter-spacing: .01em;
  color: var(--azul-texto);
}
/* O floco e 150x173, mais alto que largo: fixa-se a ALTURA e a largura
   segue pelo contain. Fica na cor da marca (#05beee), que nao e o azul
   da pagina, de proposito: logo de cliente nao se recolore. */
.slogan-ico {
  flex: none;
  width: 16px;
  height: 18px;
  background: center / contain no-repeat;
}

/* O espaco entre os dois fica na assinatura, nao no slogan: assim,
   quando a assinatura esta vazia (como agora), o slogan fecha a pagina
   sem um vao morto embaixo. */
.rodape-marca {
  margin-top: 10px;
  font-size: 10.6px;
  color: var(--fraco);
}

/* Link da politica de privacidade (02/10/2026): miudo, no fim, sem brigar
   com o slogan. Cor --suave e nao --fraco: texto pequeno precisa de 4,5:1. */
.rodape-priv {
  margin-top: 12px;
  font-size: 11px;
}
.rodape-priv a {
  color: var(--suave);
  text-decoration: underline;
  text-decoration-color: rgba(150, 162, 177, .4);
  text-underline-offset: 2px;
}

/* ================================================== TELA MAIOR/HOVER */

/* So entra em aparelho com ponteiro de verdade. No celular, `:hover`
   gruda depois do toque e o botao fica aceso sem motivo. */
@media (hover: hover) and (pointer: fine) {
  .botao:hover {
    border-color: #1d5c8f;
    background: #0c1a28;
  }
  .ponto-b:hover { background: #2b3a4c; }
  .ponto-b.on:hover { background: var(--azul-texto); }
}

/* A partir de 480px a coluna ja esta no teto de 460px. O unico ajuste
   e dar um pouco mais de ar no topo, porque em tela grande a coluna
   estreita centralizada fica alta demais colada no topo. */
@media (min-width: 480px) {
  .cartao-visita { padding-top: 48px; }
}

/* Tela curta e deitada: o retrato come a dobra toda. */
@media (max-height: 560px) {
  .retrato { width: 104px; height: 104px; margin-bottom: 14px; }
  .retrato-vazio .mono { font-size: 32px; }
  .nome { font-size: 23px; }
}

/* ================================================== MENOS MOVIMENTO */

/* A maquina do Igor pede `reduce` (animacoes do Windows desligadas),
   entao esta e a tela em que ELE vai olhar. Menos movimento nao e
   movimento nenhum: as transicoes encurtam, nao somem, senao o botao
   estala e parece defeito. O carrossel continua funcionando igual:
   o que muda e que o `scrollTo` do JS vai direto, sem deslizar. */
@media (prefers-reduced-motion: reduce) {
  body { transition-duration: .01s; }
  .botao, .ponto-b { transition-duration: .08s; }
  .botao:active { transform: none; }
}
