/* Owned fonts, self-hosted. Licences: check each foundry's web terms before deploy. */

@font-face { font-family: "Geist Pixel Grid"; src: url("fonts/GeistPixel-Grid.woff2") format("woff2"); font-weight: 400; font-display: swap; } /* OFL, Vercel */
@font-face { font-family: "Geist Pixel Square"; src: url("fonts/GeistPixel-Square.woff2") format("woff2"); font-weight: 400; font-display: swap; } /* OFL, Vercel */
@font-face { font-family: "Geist Serif"; src: url("fonts/GeistSerifVF.woff2") format("woff2"); font-weight: 100 900; font-display: swap; } /* OFL, Vercel */
@font-face { font-family: "Haffer"; src: url("fonts/HafferXH-Regular.woff2") format("woff2"); font-weight: 400; font-display: swap; }
@font-face { font-family: "Haffer"; src: url("fonts/HafferXH-Medium.woff2") format("woff2"); font-weight: 500; font-display: swap; }

/* Shared reset + entrance. Each version sets its own tokens. */
*, *::before, *::after { box-sizing: border-box; }
html, body { margin: 0; }
body { min-height: 100dvh; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; }
h1, p { margin: 0; }
h1 { text-wrap: balance; }
p { text-wrap: pretty; }
a { color: inherit; text-decoration: none; }
a:focus-visible { outline: 2px solid currentColor; outline-offset: 4px; border-radius: 2px; }

.in { opacity: 0; transform: translateY(6px); animation: in 600ms cubic-bezier(.2,.7,.2,1) forwards; }
.in:nth-child(2) { animation-delay: 80ms; }
.in:nth-child(3) { animation-delay: 160ms; }
@keyframes in { to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) {
  .in { transform: none; animation-name: fade; }
  @keyframes fade { to { opacity: 1; } }
}

@font-face { font-family: "Haffer"; src: url("fonts/HafferXH-SemiBold.woff2") format("woff2"); font-weight: 600; font-display: swap; }
@font-face { font-family: "Haffer SQ"; src: url("fonts/HafferSQXH-Bold.woff2") format("woff2"); font-weight: 700; font-display: swap; }
