:root {
  /* region 1) fontography — semantic family stacks */  --cem-fontography-reading-family: "Roboto", "Source Sans Pro", system-ui, -apple-system, "Segoe UI", "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif;
  --cem-fontography-ui-family: var(--cem-fontography-reading-family);
  --cem-fontography-script-family: ui-monospace, "SFMono-Regular", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", "Noto Sans Mono", monospace;
  --cem-fontography-initialism-family: "Barlow Semi Condensed", "Roboto Condensed", "Arial Narrow", var(--cem-fontography-ui-family);
  --cem-fontography-brand-family: "Fraunces", "Playfair Display", Georgia, "Times New Roman", serif;

        
  /* endregion fontography */

  /* region 2) thickness — 7-step weight scale */  --cem-thickness-xx-light: 100;
  --cem-thickness-x-light: 200;
  --cem-thickness-light: 300;
  --cem-thickness-normal: 400;
  --cem-thickness-bold: 700;
  --cem-thickness-x-bold: 800;
  --cem-thickness-xx-bold: 900;

        
  /* endregion thickness */

  /* region 3) size — 7-step rem-based size scale */  --cem-typography-size-xxs: 0.625rem;
  --cem-typography-size-xs: 0.75rem;
  --cem-typography-size-s: 0.875rem;
  --cem-typography-size-m: 1rem;
  --cem-typography-size-l: 1.5rem;
  --cem-typography-size-xl: 2.125rem;
  --cem-typography-size-xxl: 3rem;

        
  /* endregion size */

  /* region 4) line-height primitives */  --cem-typography-line-height-reading: 1.55;
  --cem-typography-line-height-ui: 1.2;
  --cem-typography-line-height-script: 1.4;
  --cem-typography-line-height-badge: 1;

        
  /* endregion line-height */

  /* region 5) letter-spacing primitives */  --cem-typography-letter-spacing-reading: normal;
  --cem-typography-letter-spacing-ui: 0.01em;
  --cem-typography-letter-spacing-caps: 0.08em;

        
  /* endregion letter-spacing */

  /* region 6) typography feature policies */  --cem-typography-feature-numeric-data: tabular-nums lining-nums;
  --cem-typography-feature-ligatures-script: none;
  --cem-typography-feature-optical-sizing: auto;

        
  /* endregion feature policies */

  /* region 7) reading ergonomics */  --cem-typography-reading-measure-max: 65ch;
  --cem-typography-reading-paragraph-gap: 0.75em;

        
  /* endregion reading ergonomics */

  /* region 8) voice — ink-thickness (drives font-weight) */  --cem-voice-whisper-ink-thickness: var(--cem-thickness-xx-light);
  --cem-voice-soft-ink-thickness: var(--cem-thickness-x-light);
  --cem-voice-gentle-ink-thickness: var(--cem-thickness-light);
  --cem-voice-regular-ink-thickness: var(--cem-thickness-normal);
  --cem-voice-firm-ink-thickness: var(--cem-thickness-bold);
  --cem-voice-strong-ink-thickness: var(--cem-thickness-x-bold);
  --cem-voice-loud-ink-thickness: var(--cem-thickness-xx-bold);

        
  /* endregion voice ink-thickness */

  /* region 9) voice — icon-stroke multipliers */  --cem-voice-whisper-icon-stroke-multiplier: 0.90;
  --cem-voice-soft-icon-stroke-multiplier: 0.95;
  --cem-voice-gentle-icon-stroke-multiplier: 1.00;
  --cem-voice-regular-icon-stroke-multiplier: 1.00;
  --cem-voice-firm-icon-stroke-multiplier: 1.10;
  --cem-voice-strong-icon-stroke-multiplier: 1.20;
  --cem-voice-loud-icon-stroke-multiplier: 1.30;

        
  /* endregion voice icon-stroke */

  /* region 10) voice — speech-volume (TTS adapter input, not screen-reader) */  --cem-voice-whisper-speech-volume: 0.65;
  --cem-voice-soft-speech-volume: 0.75;
  --cem-voice-gentle-speech-volume: 0.85;
  --cem-voice-regular-speech-volume: 1.00;
  --cem-voice-firm-speech-volume: 1.00;
  --cem-voice-strong-speech-volume: 1.00;
  --cem-voice-loud-speech-volume: 1.00;

        
  /* endregion voice speech-volume */

  /* region 11) voice — speech-rate */  --cem-voice-whisper-speech-rate: 1.00;
  --cem-voice-soft-speech-rate: 1.00;
  --cem-voice-gentle-speech-rate: 1.00;
  --cem-voice-regular-speech-rate: 1.00;
  --cem-voice-firm-speech-rate: 0.98;
  --cem-voice-strong-speech-rate: 0.96;
  --cem-voice-loud-speech-rate: 0.94;

        
  /* endregion voice speech-rate */

  /* region 12) voice — speech-pitch */  --cem-voice-whisper-speech-pitch: 0.95;
  --cem-voice-soft-speech-pitch: 0.98;
  --cem-voice-gentle-speech-pitch: 1.00;
  --cem-voice-regular-speech-pitch: 1.00;
  --cem-voice-firm-speech-pitch: 1.03;
  --cem-voice-strong-speech-pitch: 1.06;
  --cem-voice-loud-speech-pitch: 1.10;

        
  /* endregion voice speech-pitch */

  /* region 13) voice — ssml-emphasis */  --cem-voice-whisper-ssml-emphasis: reduced;
  --cem-voice-soft-ssml-emphasis: reduced;
  --cem-voice-gentle-ssml-emphasis: moderate;
  --cem-voice-regular-ssml-emphasis: moderate;
  --cem-voice-firm-ssml-emphasis: moderate;
  --cem-voice-strong-ssml-emphasis: strong;
  --cem-voice-loud-ssml-emphasis: strong;

        
  /* endregion voice ssml-emphasis */

  /* region 14) semantic role endpoints — 8 roles × ~9-10 properties each */  --cem-typography-reading-font-family: var(--cem-fontography-reading-family);
  --cem-typography-reading-font-size: var(--cem-typography-size-m);
  --cem-typography-reading-line-height: var(--cem-typography-line-height-reading);
  --cem-typography-reading-letter-spacing: var(--cem-typography-letter-spacing-reading);
  --cem-typography-reading-font-weight: var(--cem-voice-regular-ink-thickness);
  --cem-typography-reading-speech-volume: var(--cem-voice-regular-speech-volume);
  --cem-typography-reading-speech-rate: var(--cem-voice-regular-speech-rate);
  --cem-typography-reading-speech-pitch: var(--cem-voice-regular-speech-pitch);
  --cem-typography-reading-ssml-emphasis: var(--cem-voice-regular-ssml-emphasis);
  --cem-typography-heading-font-weight: var(--cem-voice-strong-ink-thickness);
  --cem-typography-ui-font-family: var(--cem-fontography-ui-family);
  --cem-typography-ui-font-size: var(--cem-typography-size-m);
  --cem-typography-ui-line-height: var(--cem-typography-line-height-ui);
  --cem-typography-ui-letter-spacing: var(--cem-typography-letter-spacing-ui);
  --cem-typography-ui-font-weight: var(--cem-voice-gentle-ink-thickness);
  --cem-typography-ui-speech-volume: var(--cem-voice-gentle-speech-volume);
  --cem-typography-ui-speech-rate: var(--cem-voice-gentle-speech-rate);
  --cem-typography-ui-speech-pitch: var(--cem-voice-gentle-speech-pitch);
  --cem-typography-ui-ssml-emphasis: var(--cem-voice-gentle-ssml-emphasis);
  --cem-typography-tag-font-family: var(--cem-fontography-ui-family);
  --cem-typography-tag-font-size: var(--cem-typography-size-s);
  --cem-typography-tag-line-height: var(--cem-typography-line-height-ui);
  --cem-typography-tag-letter-spacing: var(--cem-typography-letter-spacing-ui);
  --cem-typography-tag-font-weight: var(--cem-voice-firm-ink-thickness);
  --cem-typography-tag-speech-volume: var(--cem-voice-firm-speech-volume);
  --cem-typography-tag-speech-rate: var(--cem-voice-firm-speech-rate);
  --cem-typography-tag-speech-pitch: var(--cem-voice-firm-speech-pitch);
  --cem-typography-tag-ssml-emphasis: var(--cem-voice-firm-ssml-emphasis);
  --cem-typography-script-font-family: var(--cem-fontography-script-family);
  --cem-typography-script-font-size: var(--cem-typography-size-s);
  --cem-typography-script-line-height: var(--cem-typography-line-height-script);
  --cem-typography-script-letter-spacing: normal;
  --cem-typography-script-font-weight: var(--cem-voice-regular-ink-thickness);
  --cem-typography-script-font-variant-ligatures: var(--cem-typography-feature-ligatures-script);
  --cem-typography-script-speech-volume: var(--cem-voice-regular-speech-volume);
  --cem-typography-script-speech-rate: var(--cem-voice-gentle-speech-rate);
  --cem-typography-script-speech-pitch: var(--cem-voice-gentle-speech-pitch);
  --cem-typography-script-ssml-emphasis: var(--cem-voice-gentle-ssml-emphasis);
  --cem-typography-data-font-family: var(--cem-fontography-ui-family);
  --cem-typography-data-font-size: var(--cem-typography-size-m);
  --cem-typography-data-line-height: var(--cem-typography-line-height-ui);
  --cem-typography-data-letter-spacing: var(--cem-typography-letter-spacing-ui);
  --cem-typography-data-font-weight: var(--cem-voice-regular-ink-thickness);
  --cem-typography-data-font-variant-numeric: var(--cem-typography-feature-numeric-data);
  --cem-typography-data-speech-volume: var(--cem-voice-regular-speech-volume);
  --cem-typography-data-speech-rate: var(--cem-voice-firm-speech-rate);
  --cem-typography-data-speech-pitch: var(--cem-voice-regular-speech-pitch);
  --cem-typography-data-ssml-emphasis: var(--cem-voice-regular-ssml-emphasis);
  --cem-typography-initialism-font-family: var(--cem-fontography-initialism-family);
  --cem-typography-initialism-font-size: var(--cem-typography-size-s);
  --cem-typography-initialism-line-height: var(--cem-typography-line-height-badge);
  --cem-typography-initialism-letter-spacing: var(--cem-typography-letter-spacing-caps);
  --cem-typography-initialism-font-weight: var(--cem-voice-firm-ink-thickness);
  --cem-typography-initialism-text-transform: uppercase;
  --cem-typography-initialism-speech-volume: var(--cem-voice-firm-speech-volume);
  --cem-typography-initialism-speech-rate: var(--cem-voice-firm-speech-rate);
  --cem-typography-initialism-speech-pitch: var(--cem-voice-firm-speech-pitch);
  --cem-typography-initialism-ssml-emphasis: var(--cem-voice-firm-ssml-emphasis);
  --cem-typography-iconized-font-family: var(--cem-fontography-initialism-family);
  --cem-typography-iconized-font-size: calc(var(--cem-typography-size-m) * 2);
  --cem-typography-iconized-line-height: var(--cem-typography-line-height-badge);
  --cem-typography-iconized-letter-spacing: var(--cem-typography-letter-spacing-caps);
  --cem-typography-iconized-font-weight: var(--cem-voice-strong-ink-thickness);
  --cem-typography-iconized-text-transform: uppercase;
  --cem-typography-iconized-speech-volume: var(--cem-voice-strong-speech-volume);
  --cem-typography-iconized-speech-rate: var(--cem-voice-strong-speech-rate);
  --cem-typography-iconized-speech-pitch: var(--cem-voice-strong-speech-pitch);
  --cem-typography-iconized-ssml-emphasis: var(--cem-voice-strong-ssml-emphasis);
  --cem-typography-brand-font-family: var(--cem-fontography-brand-family);
  --cem-typography-brand-font-size: var(--cem-typography-size-xxl);
  --cem-typography-brand-line-height: 1.1;
  --cem-typography-brand-letter-spacing: normal;
  --cem-typography-brand-font-weight: var(--cem-voice-strong-ink-thickness);
  --cem-typography-brand-speech-volume: var(--cem-voice-strong-speech-volume);
  --cem-typography-brand-speech-rate: var(--cem-voice-strong-speech-rate);
  --cem-typography-brand-speech-pitch: var(--cem-voice-strong-speech-pitch);
  --cem-typography-brand-ssml-emphasis: var(--cem-voice-strong-ssml-emphasis);

        
  /* endregion semantic role endpoints */
}

/* region dark theme — lighter ink to compensate for perceived boldness on dark backgrounds */
.cem-theme-dark, [data-theme="cem-theme-dark"],
.cem-theme-contrast-dark, [data-theme="cem-theme-contrast-dark"] {
  --cem-voice-whisper-ink-thickness: 100;
  --cem-voice-soft-ink-thickness: 180;
  --cem-voice-gentle-ink-thickness: 280;
  --cem-voice-regular-ink-thickness: 350;
  --cem-voice-firm-ink-thickness: 650;
  --cem-voice-strong-ink-thickness: 750;
  --cem-voice-loud-ink-thickness: 850;
  --cem-typography-heading-font-weight: var(--cem-voice-strong-ink-thickness);
}
/* endregion dark theme */

/* region contrast theme — stronger ink for visibility (overrides dark for shared rows) */
.cem-theme-contrast-light, [data-theme="cem-theme-contrast-light"],
.cem-theme-contrast-dark, [data-theme="cem-theme-contrast-dark"] {
  --cem-voice-gentle-ink-thickness: 400;
  --cem-voice-regular-ink-thickness: 500;
  --cem-voice-firm-ink-thickness: 750;
  --cem-voice-strong-ink-thickness: 850;
  --cem-typography-heading-font-weight: var(--cem-voice-strong-ink-thickness);
}
/* endregion contrast theme */
