/* Bora — sistema visual. Referência completa em /DESIGN.md */

@font-face {
  font-family: 'Rigter';
  src: url('/fonts/rigter.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

:root {
  /* Cores — tiradas da paleta de referência e da foto do João */
  --navy:        #020925;  /* canvas da página, nunca em texto */
  --navy-alto:   #08123A;  /* superfície elevada: card, bloco de código */
  --navy-borda:  #16224F;  /* borda de 1px, régua, divisória */
  --azul:        #186CF0;  /* ação: o azul da foto. Preenchimento e borda, nunca texto pequeno */
  --azul-fundo:  #0052C0;  /* fim de degradê e estado pressionado. Só em fundo */
  --azul-claro:  #B0D7F8;  /* link em texto, marcador, palavra em destaque */
  --laranja:     #FE5102;  /* o único acento quente: chamada principal. Uma por tela */
  --laranja-alt: #FF7A29;  /* fim do degradê do botão laranja */
  --branco:      #F8F8F8;  /* título e texto corrido */
  --cinza:       #A9B6D4;  /* texto secundário, legenda, metadado */
  --cinza-fraco: #7182AB;  /* rótulo, estado desabilitado */

  /* Degradês — o João pediu, então eles são do sistema, não enfeite solto */
  --grad-destaque: linear-gradient(100deg, #E4F0FF 0%, #9CC8FA 42%, #2F82F5 78%, #186CF0 100%);
  --grad-superficie: linear-gradient(165deg, #0A1540 0%, #050D2E 55%, #020925 100%);
  --grad-laranja: linear-gradient(135deg, var(--laranja-alt) 0%, var(--laranja) 100%);
  --grad-azul: linear-gradient(135deg, var(--azul) 0%, var(--azul-fundo) 100%);

  /* Tipografia */
  --fonte-corpo:    'Figtree', ui-sans-serif, system-ui, sans-serif;
  --fonte-destaque: 'Rigter', ui-sans-serif, system-ui, sans-serif;
  --fonte-logo:     'Rigter', ui-sans-serif, system-ui, sans-serif;

  /* Espaçamento — escala 4 */
  --e1: 4px;  --e2: 8px;   --e3: 12px;  --e4: 16px;
  --e5: 24px; --e6: 32px;  --e7: 48px;  --e8: 64px;  --e9: 96px;

  --raio: 10px;
  --leitura: 68ch;
  --transicao: 160ms ease;
}

*, *::before, *::after { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }

body {
  margin: 0;
  background: var(--navy);
  color: var(--branco);
  font-family: var(--fonte-corpo);
  font-size: 18px;
  font-weight: 400;
  line-height: 1.7;
  letter-spacing: -0.005em;
  -webkit-font-smoothing: antialiased;
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
}

/* Destaque em pixel. Só aqui. Nunca em parágrafo. */
.destaque {
  font-family: var(--fonte-destaque);
  font-style: normal;
  font-weight: 600;
  color: var(--azul-claro);
  letter-spacing: 0.01em;
  /* Pixel é mais largo que a Manrope no mesmo corpo. Sem isso ele domina o título. */
  font-size: 0.82em;
  /* Pixel não tem curva: sem suavização ele fica limpo, do jeito que deve. */
  -webkit-font-smoothing: none;
  font-smooth: never;
}

/* Layout */
.faixa { width: 100%; padding-inline: var(--e5); }
.centro { max-width: 1040px; margin-inline: auto; }
.prosa { max-width: var(--leitura); margin-inline: auto; }

/* Cabeçalho */
.topo {
  border-bottom: 1px solid var(--navy-borda);
  position: sticky; top: 0; z-index: 10;
  background: color-mix(in srgb, var(--navy) 96%, transparent);
  backdrop-filter: blur(12px);
}
.topo .centro {
  display: flex; align-items: center; justify-content: space-between;
  gap: var(--e5); min-height: 64px;
}
.marca {
  display: inline-flex; align-items: center; gap: var(--e2);
  color: var(--branco); text-decoration: none;
  font-family: var(--fonte-logo);
  font-weight: 400; font-size: 29px; letter-spacing: -0.01em;
  line-height: 1;
}
.marca:hover { color: var(--azul-claro); }
.topo nav { display: flex; gap: var(--e5); align-items: center; }
.topo nav a { color: var(--cinza); text-decoration: none; font-size: 15px; font-weight: 500; }
.topo nav a:hover { color: var(--branco); }

/* Títulos */
h1, h2, h3 { font-weight: 800; letter-spacing: -0.03em; line-height: 1.12; margin: 0; }
h1 { font-size: clamp(38px, 6vw, 60px); }
h2 { font-size: clamp(26px, 3.4vw, 34px); letter-spacing: -0.025em; line-height: 1.2; }
h3 { font-size: 21px; letter-spacing: -0.02em; }

.prosa h2 { margin: var(--e8) 0 var(--e4); }
.prosa h3 { margin: var(--e6) 0 var(--e3); }
.prosa p { margin: 0 0 var(--e5); }
.prosa > p:first-of-type { font-size: 20px; color: var(--branco); }

a { color: var(--azul-claro); text-decoration: underline; text-underline-offset: 3px; text-decoration-thickness: 1px; }
a:hover { color: var(--branco); }

:focus-visible { outline: 2px solid var(--azul-claro); outline-offset: 3px; border-radius: 4px; }

strong { font-weight: 700; color: var(--branco); }
em { font-style: italic; }

/* Herói do índice */
.heroi {
  padding: var(--e9) 0 var(--e8);
  border-bottom: 1px solid var(--navy-borda);
  background: var(--grad-superficie);
}
.heroi h1 { max-width: 20ch; }
/* O pixel é largo: sem isso o título quebra no meio da expressão em destaque. */
h1 .destaque { white-space: nowrap; }
.heroi p { color: var(--cinza); font-size: 20px; max-width: 54ch; margin: var(--e5) 0 0; }

/* Lista de posts */
.posts { padding: var(--e8) 0 var(--e9); display: grid; gap: var(--e4); }
.post-card {
  display: block; text-decoration: none; color: inherit;
  border: 1px solid var(--navy-borda); border-radius: var(--raio);
  background: var(--navy-alto); padding: var(--e5);
  transition: border-color var(--transicao), transform var(--transicao);
}
.post-card:hover { border-color: var(--azul); transform: translateY(-2px); }
.post-card h2 { font-size: 24px; margin: 0 0 var(--e2); }
.post-card .ler {
  color: var(--laranja); font-weight: 700; font-size: 15px;
  display: inline-flex; align-items: center; gap: 6px;
}
.post-card:hover .ler { gap: 10px; }
.post-card .ler span { transition: transform var(--transicao); }
.post-card p { color: var(--cinza); margin: 0 0 var(--e3); font-size: 16px; }
.meta { color: var(--cinza-fraco); font-size: 14px; font-weight: 500; letter-spacing: 0; }
.meta span + span::before { content: "·"; margin: 0 var(--e2); }

.em-breve { border-style: dashed; opacity: .6; }
.em-breve:hover { transform: none; border-color: var(--navy-borda); }
.em-breve .meta { color: var(--cinza-fraco); }

/* Artigo */
.artigo { padding: var(--e8) 0 var(--e9); }
.artigo header { margin-bottom: var(--e7); }
.artigo header h1 { margin-bottom: var(--e4); }
.artigo header .meta { display: block; margin-bottom: var(--e4); }
.subtitulo { color: var(--cinza); font-size: 20px; margin: 0; }

figure { margin: var(--e7) 0; }
figure img {
  width: 100%; height: auto; display: block;
  border: 1px solid var(--navy-borda); border-radius: var(--raio);
}
figcaption { color: var(--cinza-fraco); font-size: 14px; margin-top: var(--e3); line-height: 1.5; }

/* Figura larga: estoura a coluna de leitura sem sair da página */
.larga {
  width: min(1040px, 100vw - (2 * var(--e5)));
  margin-left: 50%;
  transform: translateX(-50%);
}
@media (max-width: 640px) {
  .larga { width: min(1040px, 100vw - (2 * var(--e4))); }
}

blockquote {
  margin: var(--e5) 0; padding: var(--e4) var(--e5);
  border-left: 2px solid var(--azul); background: var(--navy-alto);
  border-radius: 0 var(--raio) var(--raio) 0;
}
blockquote p { margin: 0 0 var(--e2); }
blockquote p:last-child { margin: 0; }
/* Linha de token dentro de citação: monoespaçada, rolagem própria, sem caixa por linha. */
blockquote .linha-token {
  display: block; font-family: ui-monospace, 'SF Mono', Menlo, monospace;
  font-size: 14px; line-height: 1.6; color: var(--azul-claro);
  background: none; border: 0; padding: 0; margin: 0 0 var(--e2);
  white-space: pre; overflow-x: auto;
}
blockquote .linha-token:last-child { margin: 0; }

code {
  font-family: ui-monospace, 'SF Mono', Menlo, monospace;
  font-size: .86em; background: var(--navy-alto);
  border: 1px solid var(--navy-borda); border-radius: 5px;
  padding: 2px 6px; color: var(--azul-claro);
}
pre {
  background: var(--navy-alto); border: 1px solid var(--navy-borda);
  border-radius: var(--raio); padding: var(--e5);
  overflow-x: auto; margin: var(--e5) 0; line-height: 1.6;
}
pre code { background: none; border: 0; padding: 0; color: var(--branco); font-size: 14px; }

ol, ul { padding-left: var(--e5); margin: 0 0 var(--e5); }
li { margin-bottom: var(--e2); }
li::marker { color: var(--azul-claro); }

hr { border: 0; border-top: 1px solid var(--navy-borda); margin: var(--e8) 0; }

/* Bloco do prompt, com botão de copiar */
.prompt { margin: var(--e6) 0; border: 1px solid var(--navy-borda); border-radius: var(--raio); overflow: hidden; }
.prompt-topo {
  display: flex; align-items: center; justify-content: space-between; gap: var(--e4);
  padding: var(--e3) var(--e4); background: var(--navy-alto);
  border-bottom: 1px solid var(--navy-borda);
}
.prompt-topo span { color: var(--cinza); font-size: 14px; font-weight: 600; }
.prompt pre { margin: 0; border: 0; border-radius: 0; max-height: 520px; }
.botao-copiar {
  font: inherit; font-size: 14px; font-weight: 600;
  background: var(--grad-azul); color: #fff; border: 0;
  border-radius: 7px; padding: var(--e2) var(--e4); cursor: pointer;
  transition: opacity var(--transicao);
}
.botao-copiar:hover { opacity: .88; }

/* Chamada da comunidade */
.cta {
  margin: var(--e9) 0 0; padding: var(--e7) var(--e6);
  border: 1px solid var(--azul); border-radius: var(--raio);
  background: var(--grad-superficie);
  text-align: center;
}
.cta h2 { margin: 0 0 var(--e3); }
.cta p { color: var(--cinza); margin: 0 auto var(--e5); max-width: 48ch; }
.botao {
  display: inline-block; background: var(--grad-laranja); color: var(--navy);
  font-weight: 800; font-size: 17px; text-decoration: none;
  padding: var(--e3) var(--e6); border-radius: 8px;
  transition: filter var(--transicao), transform var(--transicao);
}
.botao:hover { filter: brightness(1.08); transform: translateY(-1px); color: var(--navy); }
.botao[aria-disabled="true"] { background: var(--navy-borda); color: var(--cinza-fraco); cursor: not-allowed; }
.cta .aviso { font-size: 14px; color: var(--cinza-fraco); margin: var(--e3) 0 0; }

/* Rodapé */
.rodape { border-top: 1px solid var(--navy-borda); padding: var(--e6) 0; margin-top: var(--e9); }
.rodape .centro { display: flex; flex-wrap: wrap; gap: var(--e4); justify-content: space-between; }
.rodape, .rodape a { color: var(--cinza-fraco); font-size: 14px; }

@media (max-width: 640px) {
  body { font-size: 17px; }
  h1 .destaque { white-space: normal; }
  .faixa { padding-inline: var(--e4); }
  .heroi { padding: var(--e7) 0 var(--e6); }
  .topo nav { gap: var(--e4); }
  .cta { padding: var(--e6) var(--e4); }
}
