/* GENERATED FILE — DO NOT EDIT.
 *
 * Copied from the brindola-site repo by scripts/sync-site.mjs: the site's
 * src/styles/tokens.css (itself generated from the app) and fonts.css.
 * Site commit: 30e17e50af612ac8d05f3f537ce8d889f0eda89a
 * Generated: 2026-09-10
 *
 * To change a token, change it in the app and re-run both syncs; to change a
 * face, change the site's fonts.css. The cloud's own rules are cloud.css.
 */

/* GENERATED FILE — DO NOT EDIT.
 *
 * Copied from the brindola-pos app repo by scripts/sync-tokens.mjs (docs/53 §10).
 * Source: app/src/globals.css
 * Source commit: 1bbd2bbf98e47fc2da2a74ee3dfb04d65b0bfa0c
 * Generated: 2026-09-10
 *
 * The app owns these tokens (docs/23). To change one, change it in the app
 * and re-run `npm run sync:tokens`. The app's `.dark` rule is re-emitted
 * twice: under prefers-color-scheme (unless the reader chose light) and under
 * data-theme="dark" — the session-scoped switcher of docs/53 §8.1.
 */

:root {
  --font-sans: "Manrope", "Firago", sans-serif;

  /* Brand colors — the product skin overrides these at startup (docs/09);
     venue-level overrides may layer on top later */
  --color-primary: oklch(55% 0.02 0);
  --color-secondary: oklch(35% 0.02 0);
  --color-primary-contrast: #ffffff;
  --color-brand-accent: var(--color-primary);

  /* Base font size (px) from store settings; used by html for rem scaling */
  --font-scale: 16;

  /* --- Sidebar (shadcn) --- */
  --color-sidebar: hsl(0 0% 98%);
  --color-sidebar-foreground: hsl(240 5.3% 26.1%);
  --color-sidebar-primary: hsl(240 5.9% 10%);
  --color-sidebar-primary-foreground: hsl(0 0% 98%);
  --color-sidebar-accent: hsl(240 4.8% 95.9%);
  --color-sidebar-accent-foreground: hsl(240 5.9% 10%);
  --color-sidebar-border: hsl(220 13% 91%);
  --color-sidebar-ring: hsl(217.2 91.2% 59.8%);

  /* --- App Background --- */
  /* Brindola cream (docs/63 §2.3) — the skin re-states it at startup; this
     is the value a skin without one, and the harness, paints. */
  /* bg-app: warm canvas behind all content */
  --color-app-bg: #f7f4ee;
  /* bg-base: used for input backgrounds and active nav items */
  --color-bg-base: #f7f4ee;

  /* --- Surfaces --- */
  /* bg-surface: cards, panels, page-level containers */
  --color-surface: #fcfaf6;  /* "paper" — a cream-white, so the card belongs to the page */
  /* bg-surface-muted: card/table headers, subtle section fills */
  --color-surface-muted: #efe9df;
  /* bg-surface-hover: row/item hover states */
  --color-surface-hover: #efe9df;
  /* bg-surface-subtle: badges, chips, dashed outlines */
  --color-surface-subtle: #efe9df;
  /* bg-surface-elevated: modals, dropdowns — sits above surface */
  --color-surface-elevated: #ffffff;

  /* --- Text --- */
  --color-fg: #2a2e2b;        /* Charcoal — 12.6:1 on cream */
  --color-fg-muted: #5f625e;  /* 5.6:1 on cream */
  --color-fg-subtle: #7f827e; /* 3.5:1 — body-lg and above only, never a caption */

  /* --- Borders --- */
  --color-border: #e4dacb;        /* sand-derived hairline */
  --color-border-strong: #d7c6b2; /* Warm Sand itself */

  /* --- Charts (docs/25) ---
     Categorical series slots, in FIXED assignment order — never cycled, and
     the ordering IS the colorblind-safety mechanism (validated adjacent-pair
     CVD ΔE ≥ 8 in both modes on our surfaces; re-run the dataviz validator
     before reordering or adding a slot). Slot 1 doubles as the single-series
     hue. Three light slots sit under 3:1 against white — legal only because
     every chart renders beside labeled rows (the relief rule).

     These live HERE, in a plain rule beside their `.dark` counterparts, and
     must never move back into `@theme`. Tailwind v4 emits a `@theme` variable
     only when a generated utility class references it, and nothing wears a
     `bg-chart-*` class — every use is `var(--color-chart-N)` built by string
     interpolation in `components/reports/chart-helpers.ts`, which the scanner
     cannot see. In `@theme` these five were silently dropped from the light
     build (the dark ones survived only because `.dark` is a plain rule), so
     every series, bar, dot and legend swatch on the Reports page fell back to
     black in light mode — typecheck-clean, lint-clean, and shipped
     (found 2026-08-08). Same failure family as the undefined-token-class
     bugs in docs/23. */
  --color-chart-1: #2a78d6;
  --color-chart-2: #eb6834;
  --color-chart-3: #1baf7a;
  --color-chart-4: #eda100;
  --color-chart-5: #e87ba4;
}

@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    /* --- Sidebar --- */
    --color-sidebar: #1a1d1b;
    --color-sidebar-foreground: #b3b0a8;
    --color-sidebar-primary: var(--color-primary);
    --color-sidebar-primary-foreground: #2a2e2b;
    --color-sidebar-accent: #353a37;
    --color-sidebar-accent-foreground: #f7f4ee;
    --color-sidebar-border: #3f4441;
    --color-sidebar-ring: var(--color-primary);

    /* --- App Background --- */
    --color-app-bg: #1f2220;   /* charcoal, one step down */
    --color-bg-base: #2a2e2b;  /* Matches surface for input/nav consistency */

    /* --- Surfaces --- */
    --color-surface: #2a2e2b;          /* Cards, panels — charcoal itself */
    --color-surface-muted: #262927;    /* Card headers — darker than card */
    --color-surface-hover: #353a37;    /* Hover state */
    --color-surface-subtle: #303432;   /* Badge / chip backgrounds */
    --color-surface-elevated: #353a37; /* Modals, dropdowns */

    /* --- Text --- */
    --color-fg: #f7f4ee;        /* cream — 12.6:1 on the card */
    --color-fg-muted: #b3b0a8;  /* 6.4:1 */
    --color-fg-subtle: #8c8a84; /* 4.0:1 — the same rung limits as in light */

    /* --- Borders --- */
    --color-border: #3f4441;        /* Subtle divider */
    --color-border-strong: #545955; /* Visible border */

    /* --- Charts (docs/25) --- the same hues stepped for the dark surface,
       validated as their own set — never an automatic flip of the light steps. */
    --color-chart-1: #3987e5;
    --color-chart-2: #d95926;
    --color-chart-3: #199e70;
    --color-chart-4: #c98500;
    --color-chart-5: #d55181;

    /* --- Status roles --- */
    /* Fills stay in the -500 range (readable as bold text on charcoal);
       surfaces drop to -950 so tinted badges read as background, not as
       another card. The --ob-* delivery-board bridge below is a near-match
       kept separate for now — reconciling the two is Phase 7 work. */
    --color-status-ok: #9aa88b;
    --color-status-ok-fg: #a3b094;
    --color-status-ok-surface: #2b3128;
    --color-status-ok-border: #4c5744;

    --color-status-warn: #f59e0b;
    --color-status-warn-fg: #fbbf24;
    --color-status-warn-surface: #451a03;
    --color-status-warn-border: #78350f;

    --color-status-danger: #ef4444;
    --color-status-danger-fg: #f87171;
    --color-status-danger-surface: #450a0a;
    --color-status-danger-border: #7f1d1d;
    --color-destructive: var(--color-status-danger);

    --color-status-info: #3b82f6;
    --color-status-info-fg: #60a5fa;
    --color-status-info-surface: #172554;
    --color-status-info-border: #1e3a8a;

    --color-status-neutral: #8c8a84;
    --color-status-neutral-fg: #b3b0a8;
    --color-status-neutral-surface: #303432;
    --color-status-neutral-border: #545955;

    /* Allergen hues, lifted for a dark surface — same identities, enough
       lightness to stay legible at chip size. */
    --color-allergen-gluten: #fbbf24;
    --color-allergen-crustacean: #fb923c;
    --color-allergen-egg: #fde047;
    --color-allergen-fish: #38bdf8;
    --color-allergen-peanut: #d97706;
    --color-allergen-soy: #a3e635;
    --color-allergen-milk: #7dd3fc;
    --color-allergen-nut: #f97316;
    --color-allergen-celery: #4ade80;
    --color-allergen-mustard: #facc15;
    --color-allergen-sesame: #e0b080;
    --color-allergen-sulphite: #c084fc;
    --color-allergen-lupin: #d8b4fe;
    --color-allergen-mollusc: #2dd4bf;
  }
}

:root[data-theme="dark"] {
  /* --- Sidebar --- */
  --color-sidebar: #1a1d1b;
  --color-sidebar-foreground: #b3b0a8;
  --color-sidebar-primary: var(--color-primary);
  --color-sidebar-primary-foreground: #2a2e2b;
  --color-sidebar-accent: #353a37;
  --color-sidebar-accent-foreground: #f7f4ee;
  --color-sidebar-border: #3f4441;
  --color-sidebar-ring: var(--color-primary);

  /* --- App Background --- */
  --color-app-bg: #1f2220;   /* charcoal, one step down */
  --color-bg-base: #2a2e2b;  /* Matches surface for input/nav consistency */

  /* --- Surfaces --- */
  --color-surface: #2a2e2b;          /* Cards, panels — charcoal itself */
  --color-surface-muted: #262927;    /* Card headers — darker than card */
  --color-surface-hover: #353a37;    /* Hover state */
  --color-surface-subtle: #303432;   /* Badge / chip backgrounds */
  --color-surface-elevated: #353a37; /* Modals, dropdowns */

  /* --- Text --- */
  --color-fg: #f7f4ee;        /* cream — 12.6:1 on the card */
  --color-fg-muted: #b3b0a8;  /* 6.4:1 */
  --color-fg-subtle: #8c8a84; /* 4.0:1 — the same rung limits as in light */

  /* --- Borders --- */
  --color-border: #3f4441;        /* Subtle divider */
  --color-border-strong: #545955; /* Visible border */

  /* --- Charts (docs/25) --- the same hues stepped for the dark surface,
     validated as their own set — never an automatic flip of the light steps. */
  --color-chart-1: #3987e5;
  --color-chart-2: #d95926;
  --color-chart-3: #199e70;
  --color-chart-4: #c98500;
  --color-chart-5: #d55181;

  /* --- Status roles --- */
  /* Fills stay in the -500 range (readable as bold text on charcoal);
     surfaces drop to -950 so tinted badges read as background, not as
     another card. The --ob-* delivery-board bridge below is a near-match
     kept separate for now — reconciling the two is Phase 7 work. */
  --color-status-ok: #9aa88b;
  --color-status-ok-fg: #a3b094;
  --color-status-ok-surface: #2b3128;
  --color-status-ok-border: #4c5744;

  --color-status-warn: #f59e0b;
  --color-status-warn-fg: #fbbf24;
  --color-status-warn-surface: #451a03;
  --color-status-warn-border: #78350f;

  --color-status-danger: #ef4444;
  --color-status-danger-fg: #f87171;
  --color-status-danger-surface: #450a0a;
  --color-status-danger-border: #7f1d1d;
  --color-destructive: var(--color-status-danger);

  --color-status-info: #3b82f6;
  --color-status-info-fg: #60a5fa;
  --color-status-info-surface: #172554;
  --color-status-info-border: #1e3a8a;

  --color-status-neutral: #8c8a84;
  --color-status-neutral-fg: #b3b0a8;
  --color-status-neutral-surface: #303432;
  --color-status-neutral-border: #545955;

  /* Allergen hues, lifted for a dark surface — same identities, enough
     lightness to stay legible at chip size. */
  --color-allergen-gluten: #fbbf24;
  --color-allergen-crustacean: #fb923c;
  --color-allergen-egg: #fde047;
  --color-allergen-fish: #38bdf8;
  --color-allergen-peanut: #d97706;
  --color-allergen-soy: #a3e635;
  --color-allergen-milk: #7dd3fc;
  --color-allergen-nut: #f97316;
  --color-allergen-celery: #4ade80;
  --color-allergen-mustard: #facc15;
  --color-allergen-sesame: #e0b080;
  --color-allergen-sulphite: #c084fc;
  --color-allergen-lupin: #d8b4fe;
  --color-allergen-mollusc: #2dd4bf;
}

/* Manrope leads, FiraGO is the companion (docs/63 §4.1; before 2026-09-10
 * FiraGO was the single face). The files under
 * public/fonts/ are per-script subsets cut from the app's own woff2 by
 * scripts/subset-fonts.mjs — the unicode-range below MUST match the ranges in
 * that script, so a page in one script never fetches another's glyphs
 * (docs/53 §8.2).
 *
 * font-display: swap on every face (docs/53 §9.1).
 * Three weights: 400 for text, 600 for headings, 700 for the display-scale
 * hero headline only (docs/53 §8.1).
 */

/* --- Manrope (docs/63 §4, 2026-09-10): leads the stack for Latin, Cyrillic
 * and Greek. The files are @fontsource/manrope 5.3.0's own subsets (OFL),
 * ranged so a Georgian or Arabic character falls through to the FiraGO
 * companions below; scripts/subset-fonts.mjs cuts only FiraGO and does not
 * touch these. Same three weights. --- */
@font-face {
  font-family: "Manrope";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/fonts/manrope-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: "Manrope";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("/fonts/manrope-600-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: "Manrope";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("/fonts/manrope-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: "Manrope";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/fonts/manrope-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: "Manrope";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("/fonts/manrope-600-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: "Manrope";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("/fonts/manrope-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: "Manrope";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/fonts/manrope-400-cyrillic.woff2") format("woff2");
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: "Manrope";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("/fonts/manrope-600-cyrillic.woff2") format("woff2");
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: "Manrope";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("/fonts/manrope-700-cyrillic.woff2") format("woff2");
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: "Manrope";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/fonts/manrope-400-greek.woff2") format("woff2");
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
@font-face {
  font-family: "Manrope";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("/fonts/manrope-600-greek.woff2") format("woff2");
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
@font-face {
  font-family: "Manrope";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("/fonts/manrope-700-greek.woff2") format("woff2");
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}

/* --- Latin (FiraGO, the fallback behind Manrope's ranges) --- */
@font-face {
  font-family: "FiraGO";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/fonts/firago-400-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0100-017F, U+0131, U+2000-206F, U+2074,
    U+20A0-20BF, U+2122, U+2190-2199, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "FiraGO";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("/fonts/firago-600-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0100-017F, U+0131, U+2000-206F, U+2074,
    U+20A0-20BF, U+2122, U+2190-2199, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "FiraGO";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("/fonts/firago-700-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0100-017F, U+0131, U+2000-206F, U+2074,
    U+20A0-20BF, U+2122, U+2190-2199, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* --- Georgian --- */
@font-face {
  font-family: "FiraGO";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/fonts/firago-400-georgian.woff2") format("woff2");
  unicode-range: U+10A0-10FF, U+1C90-1CBF, U+2D00-2D2F;
}
@font-face {
  font-family: "FiraGO";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("/fonts/firago-600-georgian.woff2") format("woff2");
  unicode-range: U+10A0-10FF, U+1C90-1CBF, U+2D00-2D2F;
}

@font-face {
  font-family: "FiraGO";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("/fonts/firago-700-georgian.woff2") format("woff2");
  unicode-range: U+10A0-10FF, U+1C90-1CBF, U+2D00-2D2F;
}

/* --- Arabic --- */
@font-face {
  font-family: "FiraGO";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/fonts/firago-400-arabic.woff2") format("woff2");
  unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF,
    U+FE70-FEFF;
}

@font-face {
  font-family: "FiraGO";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("/fonts/firago-600-arabic.woff2") format("woff2");
  unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF,
    U+FE70-FEFF;
}

@font-face {
  font-family: "FiraGO";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("/fonts/firago-700-arabic.woff2") format("woff2");
  unicode-range: U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF,
    U+FE70-FEFF;
}

/* --- Greek (the Cyprus page, 2026-09-08) --- */
@font-face {
  font-family: "FiraGO";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/fonts/firago-400-greek.woff2") format("woff2");
  unicode-range: U+0370-03FF, U+1F00-1FFF;
}

@font-face {
  font-family: "FiraGO";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("/fonts/firago-600-greek.woff2") format("woff2");
  unicode-range: U+0370-03FF, U+1F00-1FFF;
}

@font-face {
  font-family: "FiraGO";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("/fonts/firago-700-greek.woff2") format("woff2");
  unicode-range: U+0370-03FF, U+1F00-1FFF;
}

/* The Hebrew face joins with its writer (docs/53 §11) — a line in
 * scripts/subset-fonts.mjs and three rules here. */
