/* GENERATED FILE -- DO NOT EDIT.
   Source: benchmarking/shared-ui/tokens.css
   Regenerate: python3 benchmarking/scripts/sync_shared_ui.py */
/* ============================================================================
   SHARED UI TOKENS — Skynet + HotelLab
   ----------------------------------------------------------------------------
   CANONICAL SOURCE. Do not edit the copies at
   benchmarking/webapp/static/tokens.css or
   benchmarking/hotel-webapp/public/tokens.css — they are generated.

   After editing this file run:
       python3 benchmarking/scripts/sync_shared_ui.py
   Verify with:
       python3 benchmarking/scripts/sync_shared_ui.py --check

   Both apps load this before their own app.css, so every component in either
   product resolves the same token to the same value.
   ============================================================================ */

:root {
  /* --- Surfaces (dark, the default theme) ------------------------------- */
  --bg: #0b0b0e;
  --bg-elevated: rgba(255, 255, 255, 0.035);
  --surface: #17171b;
  --surface-2: #1e1e24;
  --surface-hover: #26262d;
  --hairline: rgba(255, 255, 255, 0.08);
  --hairline-strong: rgba(255, 255, 255, 0.14);

  /* --- Ink -------------------------------------------------------------- */
  --ink: #f0f0f2;
  --ink-soft: #96969e;
  /* Was #6c6c74 (3.43:1 on --surface, 3.19:1 on --surface-2) — below AA for
     the explanatory microcopy this token carries. #8e8e98 measures 5.51:1 and
     5.11:1 respectively. */
  --ink-faint: #8e8e98;

  /* --- Semantic colour -------------------------------------------------- */
  /* Solid tokens are used as TEXT as well as fills, so each theme needs a
     value that clears 4.5:1 against that theme's --surface. */
  /* Vivid iOS blue is kept for links and accent TEXT, where it measures 5.39:1
     on --bg and 4.90:1 on --surface. */
  --accent: #0a84ff;
  --accent-soft: rgba(10, 132, 255, 0.16);
  /* Button fills carry a white label and so need their own, stricter budget:
     white on #0a84ff is only 3.65:1, and the old #2b93ff hover made it worse at
     3.12:1. These are the lightest blues that keep the label at AA (4.74:1 and
     5.36:1) while still separating from the page behind them. */
  --accent-fill: #0d72d9;
  --accent-fill-hover: #1069cc;
  --success: #30d158;
  --success-soft: rgba(48, 209, 88, 0.14);
  --danger: #ff453a;
  --danger-soft: rgba(255, 69, 58, 0.14);
  /* Destructive buttons also carry a white label: white on #ff453a is 3.41:1 and
     the old #ff6259 hover was worse at 2.94:1. */
  --danger-fill: #d92d20;
  --danger-fill-hover: #c22217;
  --pending: #ff9f0a;
  --pending-soft: rgba(255, 159, 10, 0.14);
  --running: #0a84ff;
  --running-soft: rgba(10, 132, 255, 0.14);

  /* --- Typography ------------------------------------------------------- */
  --font-sans: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
  --font-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;

  /* Type scale. Replaces 37 ad-hoc sizes in Skynet and ~24 in HotelLab,
     including five indistinguishable steps between 0.72 and 0.78rem. */
  --text-2xs: 0.6875rem;  /* 11px — micro-caps, table eyebrows          */
  --text-xs: 0.75rem;     /* 12px — mono numerics, badges, notes        */
  --text-sm: 0.8125rem;   /* 13px — dense table cells, secondary labels */
  --text-md: 0.875rem;    /* 14px — default control and table text      */
  --text-base: 0.9375rem; /* 15px — body copy                           */
  --text-lg: 1.0625rem;   /* 17px — card headlines                      */
  --text-xl: 1.25rem;     /* 20px — section titles                      */
  --text-2xl: 1.5rem;     /* 24px — page titles                         */
  --text-3xl: 2rem;       /* 32px — metric readouts                     */

  /* Only weights present in the loaded Inter subset (400/500/600/700).
     650 and 800 were being requested and silently snapped to 700. */
  --weight-regular: 400;
  --weight-medium: 500;
  --weight-semibold: 600;
  --weight-bold: 700;

  /* --- Spacing (4px scale) ---------------------------------------------- */
  /* Replaces 37 distinct rem values in Skynet / ~29 in HotelLab, several of
     which resolved to fractional pixels (0.35rem = 5.6px, 0.28rem = 4.5px). */
  --space-1: 0.25rem;  /*  4px */
  --space-2: 0.5rem;   /*  8px */
  --space-3: 0.75rem;  /* 12px */
  --space-4: 1rem;     /* 16px */
  --space-5: 1.25rem;  /* 20px */
  --space-6: 1.5rem;   /* 24px */
  --space-8: 2rem;     /* 32px */
  --space-10: 2.5rem;  /* 40px */
  --space-12: 3rem;    /* 48px */

  /* --- Radius ----------------------------------------------------------- */
  --radius: 12px;
  --radius-sm: 8px;
  --radius-pill: 999px;

  /* --- Elevation -------------------------------------------------------- */
  /* Themed alpha rather than hardcoded black, so shadows stop reading as
     smudges on the light theme's white surfaces. */
  --shadow-alpha: 0.45;
  --shadow-1: 0 1px 2px rgba(0, 0, 0, calc(var(--shadow-alpha) * 0.4));
  --shadow-2: 0 8px 24px rgba(0, 0, 0, calc(var(--shadow-alpha) * 0.6));
  --shadow-3: 0 18px 44px rgba(0, 0, 0, calc(var(--shadow-alpha) * 0.75));
  --shadow-4: 0 24px 72px rgba(0, 0, 0, var(--shadow-alpha));

  /* --- Motion ----------------------------------------------------------- */
  --ease: cubic-bezier(0.2, 0.7, 0.2, 1);
  --dur-fast: 120ms;
  --dur: 180ms;
  --dur-slow: 280ms;

  /* --- Layering --------------------------------------------------------- */
  /* One ordered scale, replacing 13 raw numbers in Skynet (two unrelated
     surfaces both claimed 100) and 6 in HotelLab. */
  --z-base: 1;
  --z-raised: 10;
  --z-sticky: 20;
  --z-dropdown: 30;
  --z-scrim: 40;
  --z-drawer: 50;
  /* The drawer's hamburger is its only open AND close control, so it has to
     sit above the drawer and scrim to stay clickable. Deliberate, not an
     inversion. */
  --z-drawer-control: 55;
  --z-modal: 60;
  --z-toast: 70;

  /* --- Shell ------------------------------------------------------------ */
  --topbar-bg: rgba(11, 11, 14, 0.72);
  --page-gutter: clamp(1.25rem, 3vw, 4rem);
  --sidebar-width: 15.5rem;
}

:root[data-theme="light"] {
  --topbar-bg: rgba(244, 244, 246, 0.78);
  --bg: #f4f4f6;
  --bg-elevated: rgba(0, 0, 0, 0.03);
  --surface: #ffffff;
  --surface-2: #f0f0f3;
  --surface-hover: #e4e4e9;
  --hairline: rgba(0, 0, 0, 0.09);
  --hairline-strong: rgba(0, 0, 0, 0.16);
  --ink: #16161a;
  --ink-soft: #6a6a72;
  /* Was #97979e — 2.90:1 on white. #6a6a73 is 5.35:1 on --surface and
     4.71:1 on --surface-2. */
  --ink-faint: #6a6a73;

  /* The four solid semantic tokens were previously left at their dark-mode
     values and then used as text on white, where they measured:
       --success #30d158  2.02:1
       --pending #ff9f0a  2.06:1
       --danger  #ff453a  3.41:1
       --accent  #0a84ff  3.65:1
     all failing AA. The replacements below hold the same hue identity and
     clear 4.5:1 on both --surface (#ffffff) and --surface-2 (#f0f0f3).
     Note the -soft tint hues are NOT reusable here: as solid text they only
     reach 3.40:1 (success) and 3.92:1 (pending). */
  --accent: #0b66c3;   /* 5.67:1 on white */
  --success: #137a37;  /* 5.43:1 on white, 4.77:1 on --surface-2 */
  --danger: #c22217;   /* 5.94:1 on white, 5.22:1 on --surface-2 */
  --pending: #8a5300;  /* 6.33:1 on white, 5.56:1 on --surface-2 */
  --running: #0b66c3;

  /* White-on-accent buttons were 3.65:1 at rest and dropped to 3.12:1 on
     hover. These fills keep the white label at 5.67:1 / 6.35:1. */
  --accent-fill: #0b66c3;
  --accent-fill-hover: #0a5fb4;

  --accent-soft: rgba(10, 132, 255, 0.1);
  --success-soft: rgba(30, 160, 70, 0.12);
  --danger-soft: rgba(217, 45, 32, 0.1);
  --pending-soft: rgba(191, 108, 0, 0.12);
  --running-soft: rgba(10, 132, 255, 0.1);

  /* Shadows must be far lighter on white or they read as dirt. */
  --shadow-alpha: 0.14;
}

@media (prefers-reduced-motion: reduce) {
  :root {
    --dur-fast: 1ms;
    --dur: 1ms;
    --dur-slow: 1ms;
  }
}
