/* Factify design tokens · generated from tokens.json (v2, pack 02.11.2026). */
/* Three themes: default (paper), [data-theme="ink"], [data-theme="red"]. Every token flips with the attribute. */

:root, [data-theme="light"] {
  color-scheme: light;
  --surface-page: #f5f2eb;
  --surface-section: #e8e8e5;
  --surface-raised: #ffffff;
  --surface-inverse: #151515;
  --text: #151515;
  --text-muted: #5f5f5b;
  --line: #d9d7d0;
  --line-strong: #8a8883;
  --seal: #a3121a;
  --seal-hover: #6e0a10;
  --on-seal: #ffffff;
  --red-surface: #a3121a;
  --logo-seal: #a3121a;
  --gold: #a39466;
  --gold-text: #6c6244;
  --gold-mark-small: #7a6c40;
  --gold-on-inverse: #cfc5a1;
  --grain: #151515;
  --grain-red: #a3121a;
  --focus: #151515;
  --brand-ink: #151515;
  --brand-paper: #f5f2eb;
  --brand-red: #a3121a;
  --brand-bone: #fbf3ea;
  --brand-oxblood: #6e0a10;
  --brand-gold: #a39466;
  --brand-gold-light: #cfc5a1;

  --font-display: "Redaction", "Times New Roman", Times, serif;
  --font-sans: "IBM Plex Sans", "Helvetica Neue", Arial, sans-serif;
  --font-grade10: "Redaction 10", "Redaction", "Times New Roman", serif;
  --font-grade20: "Redaction 20", "Redaction", "Times New Roman", serif;
  --font-grade35: "Redaction 35", "Redaction", "Times New Roman", serif;
  --font-grade50: "Redaction 50", "Redaction", "Times New Roman", serif;
  --font-grade70: "Redaction 70", "Redaction", "Times New Roman", serif;

  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-6: 24px;
  --space-8: 32px;
  --space-12: 48px;
  --space-16: 64px;
  --space-24: 96px;
  --space-32: 128px;
  --radius-0: 0;
  --radius-s: 2px;
  --radius-icon: 22%;
  --content-max: 1200px;
  --measure: 65ch;
  --gutter: 16px;

  --seal-tilt: 15;
  --seal-radius: 300;
  --seal-ring-inner: 250;
  --seal-disc: 200;
  --seal-pixel-rim: 50;
  --seal-min: 16px;
  --grain-70: 16;
  --grain-50: 10;
  --grain-35: 6.5;
  --grain-20: 4;
  --grain-10: 2.4;
  --grain-0: 1;
}

[data-theme="ink"] {
  color-scheme: dark;
  --surface-page: #151515;
  --surface-section: #1f1f1f;
  --surface-raised: #242423;
  --surface-inverse: #f5f2eb;
  --text: #edeae3;
  --text-muted: #a3a19b;
  --line: #2e2e2d;
  --line-strong: #6f6d68;
  --seal: #a3121a;
  --seal-hover: #bc1a22;
  --on-seal: #ffffff;
  --red-surface: #a3121a;
  --logo-seal: #cfc5a1;
  --gold: #cfc5a1;
  --gold-text: #cfc5a1;
  --gold-mark-small: #cfc5a1;
  --gold-on-inverse: #a39466;
  --grain: #cfc5a1;
  --grain-red: #a3121a;
  --focus: #edeae3;
  background: var(--surface-page); color: var(--text);
}

[data-theme="red"] {
  --surface-page: #a3121a;
  --surface-section: #a3121a;
  --surface-raised: #a3121a;
  --surface-inverse: #fbf3ea;
  --text: #fbf3ea;
  --text-muted: #f2e8e4;
  --line: rgba(251,243,234,0.3);
  --line-strong: rgba(251,243,234,0.6);
  --seal: #fbf3ea;
  --seal-hover: #f2e8e4;
  --on-seal: #a3121a;
  --red-surface: #a3121a;
  --logo-seal: #fbf3ea;
  --gold: #fbf3ea;
  --gold-text: #fbf3ea;
  --gold-mark-small: #fbf3ea;
  --gold-on-inverse: #a39466;
  --grain: #fbf3ea;
  --grain-red: #fbf3ea;
  --focus: #fbf3ea;
  background: var(--surface-page); color: var(--text);
}

/* Fonts. Redaction (display) and its grades are self-hosted from assets/fonts/; IBM Plex Sans from Google Fonts. */
@font-face{font-family:"Redaction";font-weight:400;font-style:normal;font-display:block;src:url("assets/fonts/Redaction-Regular.woff2") format("woff2")}
@font-face{font-family:"Redaction";font-weight:400;font-style:italic;font-display:block;src:url("assets/fonts/Redaction-Italic.woff2") format("woff2")}
@font-face{font-family:"Redaction 10";font-weight:400;font-display:block;src:url("assets/fonts/Redaction10-Regular.woff2") format("woff2")}
@font-face{font-family:"Redaction 20";font-weight:400;font-display:block;src:url("assets/fonts/Redaction20-Regular.woff2") format("woff2")}
@font-face{font-family:"Redaction 35";font-weight:400;font-display:block;src:url("assets/fonts/Redaction35-Regular.woff2") format("woff2")}
@font-face{font-family:"Redaction 50";font-weight:400;font-display:block;src:url("assets/fonts/Redaction50-Regular.woff2") format("woff2")}
@font-face{font-family:"Redaction 70";font-weight:400;font-display:block;src:url("assets/fonts/Redaction70-Regular.woff2") format("woff2")}

/* Grade classes: transitions and one highlighted word only. */
.g0{font-family:var(--font-display)}.g10{font-family:var(--font-grade10)}.g20{font-family:var(--font-grade20)}
.g35{font-family:var(--font-grade35)}.g50{font-family:var(--font-grade50)}.g70{font-family:var(--font-grade70)}

/* Type styles */

.t-display-xl{font-family:var(--font-display);font-size:96px;line-height:0.98;font-weight:400;letter-spacing:-0.02em;text-wrap:balance} /* Hero headline. One per page. */
.t-display-l{font-family:var(--font-display);font-size:72px;line-height:1.0;font-weight:400;letter-spacing:-0.02em;text-wrap:balance} /* Section openers on marketing pages. */
.t-display-m{font-family:var(--font-display);font-size:56px;line-height:1.02;font-weight:400;letter-spacing:-0.015em;text-wrap:balance} /* Large section titles; hero on mobile. */
.t-heading-l{font-family:var(--font-display);font-size:40px;line-height:1.08;font-weight:400;letter-spacing:-0.01em;text-wrap:balance} /* Page and band titles. */
.t-heading-m{font-family:var(--font-display);font-size:30px;line-height:1.12;font-weight:400;text-wrap:balance} /* Card and panel titles. */
.t-heading-s{font-family:var(--font-display);font-size:22px;line-height:1.2;font-weight:400;text-wrap:balance} /* Small titles, list headers. */
.t-grade-10{font-family:var(--font-grade10);font-size:40px;line-height:1.1;font-weight:400;letter-spacing:-0.01em;text-wrap:balance} /* Signed off. Transitions and one highlighted word only. */
.t-grade-20{font-family:var(--font-grade20);font-size:40px;line-height:1.1;font-weight:400;letter-spacing:-0.01em;text-wrap:balance} /* Reviewed. Transitions and one highlighted word only. */
.t-grade-35{font-family:var(--font-grade35);font-size:40px;line-height:1.1;font-weight:400;letter-spacing:-0.01em;text-wrap:balance} /* In review. Transitions and one highlighted word only. */
.t-grade-50{font-family:var(--font-grade50);font-size:40px;line-height:1.1;font-weight:400;letter-spacing:-0.01em;text-wrap:balance} /* Agent draft. The usual grade for a highlighted word such as 'agents'. */
.t-grade-70{font-family:var(--font-grade70);font-size:40px;line-height:1.1;font-weight:400;letter-spacing:-0.01em;text-wrap:balance} /* Raw extraction. Start frame of a resolve transition. */
.t-body-l{font-family:var(--font-sans);font-size:18px;line-height:1.55;font-weight:400} /* Lead paragraphs under a headline. */
.t-body{font-family:var(--font-sans);font-size:16px;line-height:1.55;font-weight:400} /* Default body copy. Max 65 characters per line. */
.t-body-s{font-family:var(--font-sans);font-size:14px;line-height:1.5;font-weight:400} /* Captions, card body, helper text. */
.t-ui{font-family:var(--font-sans);font-size:15px;line-height:1.2;font-weight:500} /* Buttons, nav links, tabs. */
.t-label{font-family:var(--font-sans);font-size:12px;line-height:1.35;font-weight:600;letter-spacing:0.08em;text-transform:uppercase} /* Eyebrows, column heads, metadata. Always set in capitals. Replaces a mono face. */
.t-label-s{font-family:var(--font-sans);font-size:11px;line-height:1.35;font-weight:600;letter-spacing:0.1em;text-transform:uppercase} /* Small metadata and chart axes. Always set in capitals. */
.t-data{font-family:var(--font-sans);font-size:14px;line-height:1.4;font-weight:400;font-variant-numeric:tabular-nums} /* Numbers in tables and charts. Use tabular figures. */

/* Base */
*,*::before,*::after{box-sizing:border-box}
body{margin:0;background:var(--surface-page);color:var(--text);font:400 16px/1.55 var(--font-sans);-webkit-font-smoothing:antialiased}
h1,h2,h3,h4,p{margin:0}h1,h2,h3{font-weight:400;text-wrap:balance}
a{color:inherit}
:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.measure{max-width:var(--measure)}
.wrap{max-width:var(--content-max);margin-inline:auto;padding-inline:max(var(--gutter),env(safe-area-inset-left,0px))}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}}
