/*
 * Base: reset, tipografia e utilitarios.
 * Nenhuma cor literal aqui — tudo sai dos tokens.
 */

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

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

@media (prefers-reduced-motion: reduce) {
	html {
		scroll-behavior: auto;
	}
}

body {
	margin: 0;
	background: var(--fb-fundo);
	color: var(--fb-texto);
	font-family: var(--fb-fonte-corpo);
	font-size: var(--fb-txt-md);
	line-height: var(--fb-altura-corpo);
	-webkit-font-smoothing: antialiased;
	text-rendering: optimizeLegibility;
}

h1,
h2,
h3,
h4 {
	margin: 0 0 var(--fb-esp-3);
	font-family: var(--fb-fonte-titulo);
	font-weight: var(--fb-peso-medio);
	line-height: var(--fb-altura-titulo);
	color: var(--fb-roxo-escuro);
	text-wrap: balance;
}

h1 { font-size: var(--fb-txt-2xl); }
h2 { font-size: var(--fb-txt-xl); }
h3 { font-size: var(--fb-txt-lg); }
h4 { font-size: var(--fb-txt-md); }

p {
	margin: 0 0 var(--fb-esp-4);
	text-wrap: pretty;
}

p:last-child {
	margin-bottom: 0;
}

a {
	color: var(--fb-roxo-escuro);
	text-decoration-thickness: 1px;
	text-underline-offset: 0.22em;
	transition: color var(--fb-transicao);
}

a:hover {
	color: var(--fb-acao-hover);
}

img,
svg,
video {
	max-width: 100%;
	height: auto;
	display: block;
}

ul,
ol {
	padding-left: 1.2em;
}

button,
input,
select,
textarea {
	font: inherit;
	color: inherit;
}

button {
	cursor: pointer;
}

/*
 * Anel de foco visivel e consistente. Usa :focus-visible para nao aparecer em
 * clique de mouse, mas sempre aparecer na navegacao por teclado.
 */
:focus-visible {
	outline: 2px solid var(--fb-foco);
	outline-offset: 2px;
	border-radius: var(--fb-raio-sm);
}

::selection {
	background: var(--fb-lavanda);
	color: var(--fb-roxo-profundo);
}

/* --- Layout utilitario ------------------------------------------------- */

.fb-site {
	display: flex;
	flex-direction: column;
	min-height: 100dvh;
}

.fb-conteudo {
	flex: 1 0 auto;
}

.fb-conteudo:focus {
	outline: none;
}

.fb-container {
	width: 100%;
	max-width: var(--fb-largura);
	margin-inline: auto;
	padding-inline: var(--fb-respiro);
}

.fb-container--estreito {
	max-width: var(--fb-largura-estreita);
}

.fb-secao {
	padding-block: var(--fb-secao);
}

.fb-grade {
	display: grid;
	gap: var(--fb-esp-5);
	grid-template-columns: repeat(var(--fb-colunas, 4), minmax(0, 1fr));
}

.fb-grade--2 { --fb-colunas: 2; }
.fb-grade--3 { --fb-colunas: 3; }
.fb-grade--4 { --fb-colunas: 4; }
.fb-grade--5 { --fb-colunas: 5; }

@media (max-width: 1024px) {
	.fb-grade--4,
	.fb-grade--5 { --fb-colunas: 3; }
}

@media (max-width: 782px) {
	.fb-grade--3,
	.fb-grade--4,
	.fb-grade--5 { --fb-colunas: 2; }
}

@media (max-width: 480px) {
	.fb-grade { --fb-colunas: 2; gap: var(--fb-esp-3); }
	.fb-grade--2 { --fb-colunas: 1; }
}

/* --- Acessibilidade ----------------------------------------------------- */

/*
 * Esconde visualmente mas mantem para leitores de tela. Nao usa display:none
 * nem visibility:hidden, que removem o elemento da arvore de acessibilidade.
 */
.fb-oculto-visual {
	position: absolute !important;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
	border: 0;
}

.fb-pular {
	position: absolute;
	top: 0;
	left: var(--fb-esp-4);
	z-index: 999;
	padding: var(--fb-esp-3) var(--fb-esp-4);
	background: var(--fb-acao);
	color: var(--fb-acao-texto);
	border-radius: 0 0 var(--fb-raio) var(--fb-raio);
	text-decoration: none;
	transform: translateY(-110%);
	transition: transform var(--fb-transicao);
}

.fb-pular:focus {
	transform: translateY(0);
	color: var(--fb-acao-texto);
}

/* --- Aviso visivel so para quem edita ----------------------------------- */

.fb-aviso-editor {
	padding: var(--fb-esp-4) var(--fb-esp-5);
	margin-block: var(--fb-esp-4);
	border: 1px dashed var(--fb-borda-forte);
	border-radius: var(--fb-raio);
	background: var(--fb-lavanda-clara);
	color: var(--fb-roxo-escuro);
	font-size: var(--fb-txt-sm);
}

.fb-icone {
	flex: none;
}
