/* © 2026 Created with ♥ by Alex Munteanu | alexmunteanu.com */

/*
 * Self-hosted brand faces.
 *
 * No font CDN, and no @import of any kind. A third-party font request from a private client
 * gallery leaks a referrer naming the studio's review site to a company that has no
 * business knowing it, and it puts a second origin into a page whose whole security posture
 * is 'self'. Every byte below is served from the same host as the page.
 *
 * Two families, both SIL OFL 1.1:
 *   Schibsted Grotesk  names - wordmark, client headers, clip titles, buttons, prose
 *                      400 prose, 500 titles and buttons, 700 wordmark and headers
 *   DM Mono            codes - durations, counts, frame indices, status. 400 only
 *
 * SWITZER CANNOT SHIP AND IS NOT HERE. It was an early candidate for the interface face.
 * The ITF Free Font License grants Web use in its grant clause, but clause 02 of the same
 * document separately forbids uploading the files to a public server and forbids font
 * serving without the foundry's written consent, and a hosted gallery does exactly both. Do
 * not add it back without that consent in writing.
 *
 * Every face declared here has a file on disk, and no weight is declared without one. A
 * declared face with no file costs a 404 on every page load; a declared weight with no file
 * is worse, because the browser synthesises it by smearing an outline it does have and the
 * page then renders in a face nobody drew.
 *
 * DM MONO IS A .ttf, NOT A .woff2, AND THAT IS DELIBERATE. Its upstream builds static .ttf
 * and nothing else. The only woff2 in existence is the pair of per-subset files the font
 * CDN generates, and neither carries Romanian: the latin-ext subset stops at U+0100 and so
 * has no â Â î Î, and the latin subset has no ș ț Ș Ț ă. The complete character set exists
 * in one artifact only, and it is the .ttf. Anything that enumerates the shipped fonts by
 * file extension has to account for both.
 *
 * ROMANIAN IS LOAD-BEARING COPY, not a locale option. Every face here carries U+0218 U+0219
 * U+021A U+021B (comma-below, not the U+015F / U+0163 cedilla lookalikes) together with
 * U+0102 U+0103 U+00C2 U+00E2 U+00CE U+00EE, measured from the cmap of the file on disk.
 *
 * The files come from tools/fetch-fonts.mjs, which pins each one to an exact byte count and
 * SHA-256 and refuses to write anything that fails. Run it by hand; nothing in the build or
 * in publish calls it.
 *
 * Licences travel with the fonts, in shared/fonts/ beside them: SchibstedGrotesk-OFL.txt
 * and DMMono-OFL.txt. The OFL requires that file to accompany the fonts wherever they are
 * redistributed, and publishing the site redistributes them.
 *
 * The family stacks are custom properties in tokens.css, never literals in a rule.
 *
 * font-display: swap everywhere. A client waiting on a font before seeing a frame is the
 * wrong trade for a gallery.
 */

@font-face {
  font-family: "Schibsted Grotesk";
  src: url("fonts/SchibstedGrotesk-Regular.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Schibsted Grotesk";
  src: url("fonts/SchibstedGrotesk-Medium.woff2") format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Schibsted Grotesk";
  src: url("fonts/SchibstedGrotesk-Bold.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "DM Mono";
  src: url("fonts/DMMono-Regular.ttf") format("truetype");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
