/* Fonts: local copies in theme/fonts/ (Google Fonts (SIL Open Font License)); latin and latin-ext subsets. */
@font-face { font-family: "Fraunces"; font-style: italic; font-weight: 300 700; font-display: swap; src: url("fonts/fraunces-italic-300-700-latin-ext.woff2") format("woff2"); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: "Fraunces"; font-style: italic; font-weight: 300 700; font-display: swap; src: url("fonts/fraunces-italic-300-700-latin.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: "Fraunces"; font-style: normal; font-weight: 300 700; font-display: swap; src: url("fonts/fraunces-normal-300-700-latin-ext.woff2") format("woff2"); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: "Fraunces"; font-style: normal; font-weight: 300 700; font-display: swap; src: url("fonts/fraunces-normal-300-700-latin.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: 400; font-display: swap; src: url("fonts/ibm-plex-mono-normal-400-latin-ext.woff2") format("woff2"); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: "IBM Plex Mono"; font-style: normal; font-weight: 400; font-display: swap; src: url("fonts/ibm-plex-mono-normal-400-latin.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/ibm-plex-mono-normal-500-latin-ext.woff2") format("woff2"); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: "IBM Plex Mono"; font-style: normal; font-weight: 500; font-display: swap; src: url("fonts/ibm-plex-mono-normal-500-latin.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; font-stretch: 100%; font-display: swap; src: url("fonts/instrument-sans-italic-400-700-latin-ext.woff2") format("woff2"); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: "Instrument Sans"; font-style: italic; font-weight: 400 700; font-stretch: 100%; font-display: swap; src: url("fonts/instrument-sans-italic-400-700-latin.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: normal; font-weight: 400 700; font-stretch: 100%; font-display: swap; src: url("fonts/instrument-sans-normal-400-700-latin-ext.woff2") format("woff2"); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: "Instrument Sans"; font-style: normal; font-weight: 400 700; font-stretch: 100%; font-display: swap; src: url("fonts/instrument-sans-normal-400-700-latin.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; }

/* ==========================================================================
   MAHER THEME — GENERATED FILE. Do not edit by hand.
   Source of truth: tokens/*.tokens.json (W3C DTCG 2025.10 format).
   To change a value: edit the JSON, then run  node scripts/build-tokens.mjs

   Blocks, in order:
     1. SHARED   shape, fonts, type scale, texture  (tokens/maher.base.tokens.json)
     2. LIGHT    data-theme="maher", also default  (tokens/maher.light.tokens.json)
     3. DARK     data-theme="maher-dark"           (tokens/maher.dark.tokens.json)
     4. AUTO     same dark values when no data-theme is set and the OS is dark
     5. DERIVED  formulas (inks, quiet text, type steps, shadows, grain) computed from
                 the tokens above. The formulas live in scripts/build-tokens.mjs; every
                 number a person would tune is a token in the JSON.
     6. PRINT    light values forced when printing, unless the root has .print-exact
   ========================================================================== */

/* 1. SHARED */
:root,
[data-theme] {
  --radius-selector: 0.25rem;
  --radius-field: 0.375rem;
  --radius-box: 0.5rem;
  --size-selector: 0.25rem;
  --size-field: 0.25rem;
  --border: 1px;
  --depth: 0;
  --font-display: "Fraunces", "Iowan Old Style", "Georgia", serif;
  --font-body: "Instrument Sans", system-ui, -apple-system, sans-serif;
  --font-mono: "IBM Plex Mono", ui-monospace, "Menlo", monospace;
  --type-base: 1rem;
  --type-ratio: 1.3;
  --type-scale: 1;
  --type-floor: 0.9375rem;
  --texture: 1;
  --texture-pitch: 28px;
  --stitch-inset: 7px;
  --text-muted-mix: 72;
  --text-subtle-mix: 64;
  --motion-quick: 120ms;
  --motion-settle: 220ms;
  --motion-room: 320ms;
  --motion-ease: cubic-bezier(0.2, 0, 0.2, 1);
  --font-display-settings: "SOFT" 30, "WONK" 0;
  --measure: 48ch;
  --flow-space: 1em;
  --font-display-expressive: "SOFT" 100, "WONK" 1;
}

/* 2. LIGHT */
:root,
:root:has(input.theme-controller[value="maher"]:checked),
[data-theme="maher"] {
  --color-base-100: oklch(0.975 0.008 85);
  --color-base-200: oklch(0.945 0.012 83);
  --color-base-300: oklch(0.895 0.018 82);
  --color-base-content: oklch(0.27 0.015 262);
  --color-primary: oklch(0.54 0.055 132);
  --color-primary-content: oklch(0.985 0.008 85);
  --color-secondary: oklch(0.5 0.03 255);
  --color-secondary-content: oklch(0.975 0.008 85);
  --color-band-secondary: oklch(0.5 0.03 255);
  --color-band-secondary-content: oklch(0.975 0.008 85);
  --color-accent: oklch(0.55 0.13 45);
  --color-accent-content: oklch(0.975 0.012 80);
  --color-neutral: oklch(0.26 0.02 265);
  --color-neutral-content: oklch(0.945 0.012 83);
  --color-info: oklch(0.54 0.05 245);
  --color-info-content: oklch(0.985 0.008 85);
  --color-success: oklch(0.52 0.1 145);
  --color-success-content: oklch(0.985 0.008 85);
  --color-warning: oklch(0.76 0.1 68);
  --color-warning-content: oklch(0.27 0.04 60);
  --color-error: oklch(0.53 0.13 30);
  --color-error-content: oklch(0.985 0.008 85);
  --color-leather: oklch(0.5 0.12 45);
  --color-leather-content: oklch(0.965 0.012 80);
  --color-camel: oklch(0.67 0.09 70);
  --color-wood: oklch(0.58 0.11 40);
  --color-nickel: oklch(0.75 0.006 250);
  --color-highlight: oklch(0.88 0.15 95);
  --color-seam: oklch(0.2 0.02 45);
  --ink-l: 0.42;
  --shadow-strength: 1;
  --color-scheme: light;
  --texture-blend: multiply;
  --photo-grade: saturate(.88) sepia(.06) contrast(1.03);
  --linen-strength: 0.8;
  --marker-strength: 70%;
}

/* 3. DARK */
:root:has(input.theme-controller[value="maher-dark"]:checked),
[data-theme="maher-dark"] {
  --color-base-100: oklch(0.22 0.012 55);
  --color-base-200: oklch(0.255 0.014 55);
  --color-base-300: oklch(0.31 0.016 60);
  --color-base-content: oklch(0.925 0.012 83);
  --color-primary: oklch(0.72 0.06 132);
  --color-primary-content: oklch(0.22 0.025 135);
  --color-secondary: oklch(0.68 0.035 255);
  --color-secondary-content: oklch(0.2 0.02 262);
  --color-band-secondary: oklch(0.36 0.035 255);
  --color-band-secondary-content: oklch(0.93 0.012 83);
  --color-accent: oklch(0.66 0.13 48);
  --color-accent-content: oklch(0.18 0.03 45);
  --color-neutral: oklch(0.18 0.028 262);
  --color-neutral-content: oklch(0.925 0.012 83);
  --color-info: oklch(0.72 0.055 245);
  --color-info-content: oklch(0.2 0.02 245);
  --color-success: oklch(0.68 0.11 145);
  --color-success-content: oklch(0.2 0.03 145);
  --color-warning: oklch(0.78 0.1 70);
  --color-warning-content: oklch(0.25 0.04 60);
  --color-error: oklch(0.65 0.13 30);
  --color-error-content: oklch(0.18 0.03 25);
  --color-leather: oklch(0.43 0.1 45);
  --color-leather-content: oklch(0.95 0.012 80);
  --color-camel: oklch(0.72 0.09 70);
  --color-wood: oklch(0.64 0.11 42);
  --color-nickel: oklch(0.62 0.008 250);
  --color-highlight: oklch(0.86 0.14 95);
  --color-seam: oklch(0.12 0.02 45);
  --ink-l: 0.82;
  --shadow-strength: 2.5;
  --color-scheme: dark;
  --texture-blend: normal;
  --photo-grade: saturate(.8) sepia(.06) brightness(.9);
  --linen-strength: 0.33;
  --marker-strength: 26%;
}

/* 4. AUTO DARK */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme]) {
    --color-base-100: oklch(0.22 0.012 55);
    --color-base-200: oklch(0.255 0.014 55);
    --color-base-300: oklch(0.31 0.016 60);
    --color-base-content: oklch(0.925 0.012 83);
    --color-primary: oklch(0.72 0.06 132);
    --color-primary-content: oklch(0.22 0.025 135);
    --color-secondary: oklch(0.68 0.035 255);
    --color-secondary-content: oklch(0.2 0.02 262);
    --color-band-secondary: oklch(0.36 0.035 255);
    --color-band-secondary-content: oklch(0.93 0.012 83);
    --color-accent: oklch(0.66 0.13 48);
    --color-accent-content: oklch(0.18 0.03 45);
    --color-neutral: oklch(0.18 0.028 262);
    --color-neutral-content: oklch(0.925 0.012 83);
    --color-info: oklch(0.72 0.055 245);
    --color-info-content: oklch(0.2 0.02 245);
    --color-success: oklch(0.68 0.11 145);
    --color-success-content: oklch(0.2 0.03 145);
    --color-warning: oklch(0.78 0.1 70);
    --color-warning-content: oklch(0.25 0.04 60);
    --color-error: oklch(0.65 0.13 30);
    --color-error-content: oklch(0.18 0.03 25);
    --color-leather: oklch(0.43 0.1 45);
    --color-leather-content: oklch(0.95 0.012 80);
    --color-camel: oklch(0.72 0.09 70);
    --color-wood: oklch(0.64 0.11 42);
    --color-nickel: oklch(0.62 0.008 250);
    --color-highlight: oklch(0.86 0.14 95);
    --color-seam: oklch(0.12 0.02 45);
    --ink-l: 0.82;
    --shadow-strength: 2.5;
    --color-scheme: dark;
    --texture-blend: normal;
    --photo-grade: saturate(.8) sepia(.06) brightness(.9);
    --linen-strength: 0.33;
    --marker-strength: 26%;
  }
}

/* 5. DERIVED */
:root,
[data-theme] {
  color-scheme: var(--color-scheme);

  /* daisyUI grain is on whenever the texture dial is above 0 */
  --noise: sign(var(--texture));

  /* Text-grade versions of fill colours: same hue and chroma, legible lightness */
  --color-primary-ink: oklch(from var(--color-primary) var(--ink-l) c h);
  --color-secondary-ink: oklch(from var(--color-secondary) var(--ink-l) c h);
  --color-accent-ink: oklch(from var(--color-accent) var(--ink-l) c h);
  --color-info-ink: oklch(from var(--color-info) var(--ink-l) c h);
  --color-success-ink: oklch(from var(--color-success) var(--ink-l) c h);
  --color-warning-ink: oklch(from var(--color-warning) var(--ink-l) c h);
  --color-error-ink: oklch(from var(--color-error) var(--ink-l) c h);

  /* Two levels of quiet text. Use these instead of opacity. */
  --color-muted: color-mix(in oklab, var(--color-base-content) calc(var(--text-muted-mix) * 1%), var(--color-base-100));
  --color-subtle: color-mix(in oklab, var(--color-base-content) calc(var(--text-subtle-mix) * 1%), var(--color-base-100));

  /* Type steps: base x ratio^n. Roles in kit.css pick a step and multiply by --type-scale. */
  --step--1: max(var(--type-floor), calc(var(--type-base) * pow(var(--type-ratio), -1)));
  --step-0: var(--type-base);
  --step-half: calc(var(--type-base) * pow(var(--type-ratio), 0.5));
  --step-1: calc(var(--type-base) * pow(var(--type-ratio), 1));
  --step-2: calc(var(--type-base) * pow(var(--type-ratio), 2));
  --step-3: calc(var(--type-base) * pow(var(--type-ratio), 3));
  --step-4: calc(var(--type-base) * pow(var(--type-ratio), 4));
  --step-5: calc(var(--type-base) * pow(var(--type-ratio), 5));
  --step-6: calc(var(--type-base) * pow(var(--type-ratio), 6));

  /* Motion: one easing, three durations (tokens in the base file) */
  --dur-quick: var(--motion-quick);
  --dur-settle: var(--motion-settle);
  --dur-room: var(--motion-room);
  --ease-tailored: var(--motion-ease);

  /* Charts: one focus colour against quiet context (UK Analysis Function, 2026) */
  --color-chart-focus: var(--color-primary);
  --color-chart-accent: var(--color-accent);
  --color-chart-context: color-mix(in oklab, var(--color-base-content) 30%, var(--color-base-100));
  --color-chart-grid: var(--color-base-300);
  --color-series-1: var(--color-primary);
  --color-series-2: var(--color-secondary);
  --color-series-3: var(--color-accent);
  --color-series-4: var(--color-chart-context);

  /* Elevation: surfaces are matte; only floating layers cast a shadow */
  --shadow-raised: 0 1px 2px color-mix(in oklab, var(--color-neutral) calc(14% * var(--shadow-strength)), transparent), 0 4px 14px color-mix(in oklab, var(--color-neutral) calc(8% * var(--shadow-strength)), transparent);
  --shadow-overlay: 0 2px 6px color-mix(in oklab, var(--color-neutral) calc(18% * var(--shadow-strength)), transparent), 0 18px 48px color-mix(in oklab, var(--color-neutral) calc(22% * var(--shadow-strength)), transparent);
}

/* 6. PRINT — paper is light. Dark mode prints with light values unless opted out. */
@media print {
  :root:not(.print-exact),
  :root:not(.print-exact) [data-theme] {
    --color-base-100: oklch(0.975 0.008 85);
    --color-base-200: oklch(0.945 0.012 83);
    --color-base-300: oklch(0.895 0.018 82);
    --color-base-content: oklch(0.27 0.015 262);
    --color-primary: oklch(0.54 0.055 132);
    --color-primary-content: oklch(0.985 0.008 85);
    --color-secondary: oklch(0.5 0.03 255);
    --color-secondary-content: oklch(0.975 0.008 85);
    --color-band-secondary: oklch(0.5 0.03 255);
    --color-band-secondary-content: oklch(0.975 0.008 85);
    --color-accent: oklch(0.55 0.13 45);
    --color-accent-content: oklch(0.975 0.012 80);
    --color-neutral: oklch(0.26 0.02 265);
    --color-neutral-content: oklch(0.945 0.012 83);
    --color-info: oklch(0.54 0.05 245);
    --color-info-content: oklch(0.985 0.008 85);
    --color-success: oklch(0.52 0.1 145);
    --color-success-content: oklch(0.985 0.008 85);
    --color-warning: oklch(0.76 0.1 68);
    --color-warning-content: oklch(0.27 0.04 60);
    --color-error: oklch(0.53 0.13 30);
    --color-error-content: oklch(0.985 0.008 85);
    --color-leather: oklch(0.5 0.12 45);
    --color-leather-content: oklch(0.965 0.012 80);
    --color-camel: oklch(0.67 0.09 70);
    --color-wood: oklch(0.58 0.11 40);
    --color-nickel: oklch(0.75 0.006 250);
    --color-highlight: oklch(0.88 0.15 95);
    --color-seam: oklch(0.2 0.02 45);
    --ink-l: 0.42;
    --shadow-strength: 1;
    --color-scheme: light;
    --texture-blend: multiply;
    --photo-grade: saturate(.88) sepia(.06) contrast(1.03);
    --linen-strength: 0.8;
    --marker-strength: 70%;
  }
}
