/* TYSU Typography Tokens — typography approved 2026-07-17; colour aliases migrated by DEC-017 / VAL-017 on 2026-07-20
   Production system: Instrument Sans 500/600 + Switzer 400/500/600 only.
   Canonical font binaries remain in TYSU_Typography_Final_4_Assets; do not duplicate. */

@font-face {
  font-family: "TYSU Instrument Sans";
  src: url("./TYSU_Typography_Final_4_Assets/fonts/Instrument_Sans/InstrumentSans-Medium.woff2") format("woff2");
  font-style: normal;
  font-weight: 500;
  font-display: swap;
}
@font-face {
  font-family: "TYSU Instrument Sans";
  src: url("./TYSU_Typography_Final_4_Assets/fonts/Instrument_Sans/InstrumentSans-SemiBold.woff2") format("woff2");
  font-style: normal;
  font-weight: 600;
  font-display: swap;
}
@font-face {
  font-family: "TYSU Switzer";
  src: url("./TYSU_Typography_Final_4_Assets/fonts/Switzer/Switzer-Regular.woff2") format("woff2");
  font-style: normal;
  font-weight: 400;
  font-display: swap;
}
@font-face {
  font-family: "TYSU Switzer";
  src: url("./TYSU_Typography_Final_4_Assets/fonts/Switzer/Switzer-Medium.woff2") format("woff2");
  font-style: normal;
  font-weight: 500;
  font-display: swap;
}
@font-face {
  font-family: "TYSU Switzer";
  src: url("./TYSU_Typography_Final_4_Assets/fonts/Switzer/Switzer-Semibold.woff2") format("woff2");
  font-style: normal;
  font-weight: 600;
  font-display: swap;
}

:root {
  --tysu-font-display: "TYSU Instrument Sans", sans-serif;
  --tysu-font-functional: "TYSU Switzer", sans-serif;

  /* Fluid display values stop growing at their maximum. */
  --tysu-display-xl: clamp(3rem, 5.25vw, 5rem);       /* 48–80 */
  --tysu-display-lg: clamp(2.5rem, 4.35vw, 4rem);     /* 40–64 */
  --tysu-heading-1: clamp(2.25rem, 3.5vw, 3.5rem);    /* 36–56 */
  --tysu-heading-2: clamp(1.875rem, 2.65vw, 2.625rem);/* 30–42 */
  --tysu-heading-3: clamp(1.5rem, 1.9vw, 2rem);       /* 24–32 */
  --tysu-heading-4: clamp(1.25rem, 1.35vw, 1.5rem);   /* 20–24 */
  --tysu-heading-5: 1.125rem;                         /* 18 */
  --tysu-heading-6: 1rem;                             /* 16 */

  --tysu-lead: clamp(1.125rem, 1.45vw, 1.375rem);     /* 18–22 */
  --tysu-body-lg: 1.125rem;                           /* 18 */
  --tysu-body: 1rem;                                  /* 16 */
  --tysu-body-sm: 0.875rem;                           /* 14 */
  --tysu-caption: 0.75rem;                            /* 12 */
  --tysu-ui: 0.875rem;                                /* 14 */
  --tysu-ui-sm: 0.75rem;                              /* 12 */

  /* Dense product scale: Switzer only. */
  --tysu-product-title: clamp(1.5rem, 2vw, 1.75rem);  /* 24–28 */
  --tysu-panel-title: 1rem;                           /* 16 */
  --tysu-product-text: 0.875rem;                      /* 14 */
  --tysu-product-compact: 0.75rem;                    /* 12 */
  --tysu-metric: clamp(1.75rem, 3vw, 2.5rem);         /* 28–40 */

  --tysu-leading-display: 0.96;
  --tysu-leading-heading: 1.08;
  --tysu-leading-subhead: 1.2;
  --tysu-leading-lead: 1.45;
  --tysu-leading-body: 1.6;
  --tysu-leading-small: 1.5;
  --tysu-leading-ui: 1.25;

  --tysu-tracking-display: -0.035em;
  --tysu-tracking-heading: -0.022em;
  --tysu-tracking-subhead: -0.012em;
  --tysu-tracking-body: 0;
  --tysu-tracking-ui: 0.005em;
  --tysu-tracking-caps: 0.08em;

  --tysu-copy-max: 68ch;
  --tysu-copy-narrow: 58ch;
  --tysu-copy-proposal: 70ch;
  --tysu-copy-absolute-max: 72ch;
  --tysu-heading-max: 18ch;

  --tysu-ivory: #eee9de;
  --tysu-paper: #faf8f5;
  --tysu-graphite: #161716;
  --tysu-ink: #1d1e1c;
  --tysu-muted: #565652;
  --tysu-rule: #cecac1;
  --tysu-dark-muted: #a6a39b;
  --tysu-utility-blue: #30465a; /* Atmospheric/technical utility only; never a CTA or visible brand accent. */
}

html {
  font-synthesis: none;
  text-rendering: optimizeLegibility;
  font-kerning: normal;
  font-optical-sizing: none;
}
*, *::before, *::after { font-synthesis: none; }
body {
  font-family: var(--tysu-font-functional);
  font-size: var(--tysu-body);
  font-weight: 400;
  line-height: var(--tysu-leading-body);
  letter-spacing: var(--tysu-tracking-body);
  color: var(--tysu-ink);
  background: var(--tysu-ivory);
}

.ty-display-xl,
.ty-display-lg,
.ty-h1,
.ty-h2,
.ty-h3,
.ty-h4,
.ty-h5,
.ty-h6 {
  font-family: var(--tysu-font-display);
  text-wrap: balance;
  max-width: var(--tysu-heading-max);
}
.ty-display-xl { font-size: var(--tysu-display-xl); font-weight: 600; line-height: var(--tysu-leading-display); letter-spacing: var(--tysu-tracking-display); }
.ty-display-lg { font-size: var(--tysu-display-lg); font-weight: 600; line-height: 0.98; letter-spacing: -0.032em; }
.ty-h1 { font-size: var(--tysu-heading-1); font-weight: 600; line-height: 1; letter-spacing: -0.03em; }
.ty-h2 { font-size: var(--tysu-heading-2); font-weight: 600; line-height: var(--tysu-leading-heading); letter-spacing: var(--tysu-tracking-heading); }
.ty-h3 { font-size: var(--tysu-heading-3); font-weight: 500; line-height: 1.12; letter-spacing: -0.018em; }
.ty-h4 { font-size: var(--tysu-heading-4); font-weight: 500; line-height: var(--tysu-leading-subhead); letter-spacing: var(--tysu-tracking-subhead); }
.ty-h5 { font-size: var(--tysu-heading-5); font-weight: 500; line-height: 1.25; letter-spacing: -0.008em; }
.ty-h6 { font-size: var(--tysu-heading-6); font-weight: 500; line-height: 1.3; letter-spacing: 0; }

.ty-lead { font-size: var(--tysu-lead); line-height: var(--tysu-leading-lead); max-width: var(--tysu-copy-narrow); }
.ty-body-lg { font-size: var(--tysu-body-lg); line-height: 1.58; max-width: var(--tysu-copy-max); }
.ty-body { font-size: var(--tysu-body); line-height: var(--tysu-leading-body); max-width: var(--tysu-copy-max); }
.ty-small { font-size: var(--tysu-body-sm); line-height: var(--tysu-leading-small); max-width: var(--tysu-copy-max); }
.ty-caption { font-size: var(--tysu-caption); line-height: 1.4; color: var(--tysu-muted); }
.ty-ui { font-size: var(--tysu-ui); font-weight: 500; line-height: var(--tysu-leading-ui); letter-spacing: var(--tysu-tracking-ui); }
.ty-label { font-size: var(--tysu-ui-sm); font-weight: 500; line-height: 1.2; letter-spacing: var(--tysu-tracking-caps); text-transform: uppercase; }
.ty-status-strong { font-family: var(--tysu-font-functional); font-weight: 600; }
.ty-data { font-family: var(--tysu-font-functional); font-weight: 600; font-variant-numeric: tabular-nums lining-nums; font-feature-settings: "tnum" 1, "lnum" 1; }
.ty-numeral { font-family: var(--tysu-font-functional); font-variant-numeric: tabular-nums lining-nums; font-feature-settings: "tnum" 1, "lnum" 1; }

/* Dense product and dashboard roles — Switzer throughout. */
.ty-product,
.ty-dashboard { font-family: var(--tysu-font-functional); font-size: var(--tysu-product-text); line-height: 1.45; }
.ty-product-title { font-family: var(--tysu-font-functional); font-size: var(--tysu-product-title); font-weight: 600; line-height: 1.2; letter-spacing: -0.012em; }
.ty-panel-title { font-family: var(--tysu-font-functional); font-size: var(--tysu-panel-title); font-weight: 600; line-height: 1.25; }
.ty-product-compact { font-family: var(--tysu-font-functional); font-size: var(--tysu-product-compact); line-height: 1.35; }
.ty-metric { font-family: var(--tysu-font-functional); font-size: var(--tysu-metric); font-weight: 600; line-height: 1.05; letter-spacing: -0.02em; font-variant-numeric: tabular-nums lining-nums; }

/* Proposal roles keep the brand/functional division intact. */
.ty-proposal-cover,
.ty-proposal-section { font-family: var(--tysu-font-display); font-weight: 600; text-wrap: balance; }
.ty-proposal-subhead { font-family: var(--tysu-font-display); font-weight: 500; }
.ty-proposal-copy { font-family: var(--tysu-font-functional); font-weight: 400; line-height: 1.58; max-width: var(--tysu-copy-proposal); }
.ty-proposal-furniture { font-family: var(--tysu-font-functional); font-weight: 500; }

/* Theme classes change colour, never family mapping or weights. */
.ty-theme-light { color: var(--tysu-ink); background: var(--tysu-ivory); }
.ty-theme-dark { color: var(--tysu-ivory); background: var(--tysu-graphite); }
.ty-theme-light .ty-muted { color: var(--tysu-muted); }
.ty-theme-dark .ty-muted { color: var(--tysu-dark-muted); }

a, button, input, select, textarea, table, code, kbd, samp { font-family: var(--tysu-font-functional); }
button, .button { font-weight: 500; font-style: normal; }
strong, b { font-weight: 600; }
em, i { font-style: normal; } /* Italics are not approved. Use structure or 600 emphasis. */
p { text-align: left; text-wrap: pretty; }

.ty-copy > p + p { margin-top: 1em; }
.ty-meta { font-size: var(--tysu-caption); font-weight: 500; letter-spacing: 0.06em; text-transform: uppercase; }

table { width: 100%; border-collapse: collapse; font-size: var(--tysu-body-sm); font-variant-numeric: tabular-nums lining-nums; font-feature-settings: "tnum" 1, "lnum" 1; }
th { font-weight: 600; text-align: left; }
td { font-weight: 400; text-align: left; }
th[scope="col"].numeric, td.numeric { text-align: right; }

@media (max-width: 720px) {
  :root {
    --tysu-display-xl: clamp(2.5rem, 12vw, 3.5rem);  /* 40–56 */
    --tysu-display-lg: clamp(2.25rem, 10vw, 3rem);   /* 36–48 */
    --tysu-heading-1: clamp(2rem, 8.5vw, 2.625rem);  /* 32–42 */
    --tysu-heading-2: clamp(1.75rem, 7vw, 2.125rem); /* 28–34 */
    --tysu-heading-3: clamp(1.375rem, 5.4vw, 1.625rem); /* 22–26 */
    --tysu-heading-4: 1.25rem;
    --tysu-heading-max: 20ch;
    --tysu-copy-max: 100%;
    --tysu-copy-narrow: 100%;
    --tysu-copy-proposal: 100%;
    --tysu-body-lg: clamp(1.0625rem, 4.5vw, 1.125rem); /* 17–18 */
    --tysu-lead: clamp(1.125rem, 5vw, 1.25rem);        /* 18–20 */
  }
  .ty-display-xl, .ty-display-lg { line-height: 1; letter-spacing: -0.03em; }
  .ty-h1, .ty-h2 { line-height: 1.06; }
}

@media print {
  @page { size: A4; margin: 14mm 13mm 15mm; }
  html, body { background: #faf8f5; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  a { color: inherit; text-decoration: none; }
  .no-print { display: none !important; }
  .page-break { break-before: page; }
  .avoid-break, table, pre, blockquote { break-inside: avoid; }
}
