/**
 * Local Font Files for CSP Compliance
 *
 * ARCHITECTURE: Self-hosted Google Fonts to satisfy CSP style-src 'self' policy
 * WHY: Eliminates external dependency on fonts.googleapis.com and fonts.gstatic.com
 * TRADEOFF: ~80KB additional assets vs strict CSP compliance and offline capability
 * NOTE: Downloaded 2025-11-07 from Google Fonts CDN (variable fonts)
 * UPDATE: 2026-02-06 — Added Outfit + DM Sans for Phosphor Theatre v2.1
 * UPDATE: 2026-07-02 — Added IBM Plex Sans + Mono for Course Tapestry §4a (turn-6)
 */

/* Space Grotesk - Display/Headline Font */
/* Supports weights: 300 (Light), 400 (Regular), 500 (Medium), 600 (SemiBold), 700 (Bold) */
@font-face {
  font-family: 'Space Grotesk';
  font-style: normal;
  font-weight: 300 700;  /* Variable font weight range */
  font-display: swap;
  src: url('../fonts/SpaceGrotesk.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* Source Sans 3 - Body/UI Font */
/* Supports weights: 300 (Light), 400 (Regular), 500 (Medium), 600 (SemiBold), 700 (Bold) */
@font-face {
  font-family: 'Source Sans 3';
  font-style: normal;
  font-weight: 300 700;  /* Variable font weight range */
  font-display: swap;
  src: url('../fonts/SourceSans3.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* Inter - Primary UI Font */
/* Supports weights: 300 (Light), 400 (Regular), 500 (Medium), 600 (SemiBold), 700 (Bold) */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 300 700;  /* Variable font weight range */
  font-display: swap;
  src: url('../fonts/Inter.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* Outfit - Display/Heading Font (Phosphor Theatre v2.1) */
/* Supports weights: 200 (ExtraLight) through 600 (SemiBold) */
@font-face {
  font-family: 'Outfit';
  font-style: normal;
  font-weight: 200 600;  /* Variable font weight range */
  font-display: swap;
  src: url('../fonts/Outfit.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* DM Sans - Body/UI Font (Phosphor Theatre v2.1) */
/* Supports weights: 300 (Light), 400 (Regular), 500 (Medium) */
@font-face {
  font-family: 'DM Sans';
  font-style: normal;
  font-weight: 300 500;  /* Variable font weight range */
  font-display: swap;
  src: url('../fonts/DMSans.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'DM Sans';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url('../fonts/DMSans-Italic.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* JetBrains Mono - Monospace/Code Font */
/* Supports weights: 400 (Regular), 500 (Medium) */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 400 500;  /* Variable font weight range */
  font-display: swap;
  src: url('../fonts/JetBrainsMono.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* Playfair Display - Display/Serif Heading Font (Dark Roast typography) */
/* Supports weights: 400 (Regular) through 900 (Black) */
@font-face {
  font-family: 'Playfair Display';
  font-style: normal;
  font-weight: 400 900;  /* Variable font weight range */
  font-display: swap;
  src: url('../fonts/PlayfairDisplay.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Playfair Display';
  font-style: italic;
  font-weight: 400 900;  /* Variable font weight range */
  font-display: swap;
  src: url('../fonts/PlayfairDisplay-Italic.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* Instrument Sans - Heading/UI Sans Font (Dark Roast typography) */
/* Supports weights: 400 (Regular) through 700 (Bold) */
@font-face {
  font-family: 'Instrument Sans';
  font-style: normal;
  font-weight: 400 700;  /* Variable font weight range */
  font-display: swap;
  src: url('../fonts/InstrumentSans.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Instrument Sans';
  font-style: italic;
  font-weight: 400 700;  /* Variable font weight range */
  font-display: swap;
  src: url('../fonts/InstrumentSans-Italic.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* IBM Plex Sans - Course Tapestry §4a names/numerals (two-voice type system) */
/* Variable font: weights 400 (Regular) through 700 (Bold) */
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 400 700;  /* Variable font weight range */
  font-display: swap;
  src: url('../fonts/IBMPlexSans.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* IBM Plex Mono - Course Tapestry §4a metadata voice */
/* Static weights: 400 (Regular), 500 (Medium), 600 (SemiBold) */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('../fonts/IBMPlexMono-Regular.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('../fonts/IBMPlexMono-Medium.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('../fonts/IBMPlexMono-SemiBold.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
