/* UI Labs / A2UI are DESIGN-SURFACE stylesheets and are not imported here: their files live in
   the Design project, not this app, and postcss-import failed on both, which aborted the CSS task
   and (because build chains css -> js) starved the JS build too. This app renders no labs or a2ui
   markup, so the rules had nothing to style. Same deliberate divergence as Scripts/layout.js —
   enodia.web imports them too and equally does not ship them. */

/* ONE CSS PIPELINE (tq-8177, R4). This file is compiled by THIS app's gulp (Tailwind 3), the only writer
   of wwwroot/css. Canonical Reinly.Design SOURCE is imported IN PLACE through the DS path below, never
   copied and never taken from a generated wwwroot; app-only css (reinly/ pages, flows, layouts) stays
   here. Every DS file imported here is plain CSS (no @apply / @tailwind / @theme / @utility / @config /
   theme()), so the DS's own Tailwind 4 build and this Tailwind 3 build emit the same rules; the DS test
   Reinly.Design/tests/app-imported-plain-css.test.mjs (npm test there) enforces that for every DS file this app
   imports, transitively. */

/* Canonical foundation (Reinly.Design/Assets/css/base): self-hosted webfonts + colour palette. */
/* ── Self-hosted web fonts — Bug #5337 ────────────────────────────────────────
   ETHOS self-contained-assets: NO external CDN font fetch. Fonts are vendored
   from @fontsource into Assets/fonts/webfonts (gulp deps -> wwwroot/fonts,
   served at /fonts/webfonts). The Labs shell layouts (_LayoutLabs, _LabsStage,
   _LayoutDocs) previously <link>ed fonts.googleapis.com — those links are
   removed; these @font-face rules replace them. Inter + Manrope are variable
   (one file spans all weights); Space Mono ships fixed 400/700.
   tq-8218 (REINLY-DS R8): + Lora, Roboto (variable), Martel Sans 900 and Oooh Baby 400, the rest of the Google
   families the Reinly app layouts load, so the app drops fonts.googleapis.com too. (The one third-party CDN
   display font the login layouts also requested was never applied and was removed: tq-8350.)
   latin-ext faces are declared after the latin faces so they win only for their
   codepoints (browser downloads latin-ext solely when an extended glyph is used). */

/* Inter (variable) */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('/fonts/webfonts/inter-latin-wght-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('/fonts/webfonts/inter-latin-ext-wght-normal.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: 'Inter';
  font-style: italic;
  font-weight: 100 900;
  font-display: swap;
  src: url('/fonts/webfonts/inter-latin-wght-italic.woff2') format('woff2');
}

/* Manrope (variable) */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 200 800;
  font-display: swap;
  src: url('/fonts/webfonts/manrope-latin-wght-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 200 800;
  font-display: swap;
  src: url('/fonts/webfonts/manrope-latin-ext-wght-normal.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;
}

/* Space Mono (fixed 400/700, roman + italic) */
@font-face {
  font-family: 'Space Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/webfonts/space-mono-latin-400-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Space Mono';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/fonts/webfonts/space-mono-latin-700-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Space Mono';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/webfonts/space-mono-latin-400-italic.woff2') format('woff2');
}
@font-face {
  font-family: 'Space Mono';
  font-style: italic;
  font-weight: 700;
  font-display: swap;
  src: url('/fonts/webfonts/space-mono-latin-700-italic.woff2') format('woff2');
}

/* Lora (variable, 400-700; the layouts request 400 / 500 / 600 / 700, normal only) */
@font-face {
  font-family: 'Lora';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('/fonts/webfonts/lora-latin-wght-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Lora';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('/fonts/webfonts/lora-latin-ext-wght-normal.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;
}

/* Martel Sans (fixed 900: the only weight the layouts request) */
@font-face {
  font-family: 'Martel Sans';
  font-style: normal;
  font-weight: 900;
  font-display: swap;
  src: url('/fonts/webfonts/martel-sans-latin-900-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Martel Sans';
  font-style: normal;
  font-weight: 900;
  font-display: swap;
  src: url('/fonts/webfonts/martel-sans-latin-ext-900-normal.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;
}

/* Roboto (variable, 100-900, normal + italic: the dashboard / login layouts request 100-900 in both styles) */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('/fonts/webfonts/roboto-latin-wght-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('/fonts/webfonts/roboto-latin-ext-wght-normal.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: 'Roboto';
  font-style: italic;
  font-weight: 100 900;
  font-display: swap;
  src: url('/fonts/webfonts/roboto-latin-wght-italic.woff2') format('woff2');
}
@font-face {
  font-family: 'Roboto';
  font-style: italic;
  font-weight: 100 900;
  font-display: swap;
  src: url('/fonts/webfonts/roboto-latin-ext-wght-italic.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;
}

/* Oooh Baby (fixed 400; the dashboard layout) */
@font-face {
  font-family: 'Oooh Baby';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/webfonts/oooh-baby-latin-400-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Oooh Baby';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/webfonts/oooh-baby-latin-ext-400-normal.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;
}
:root {
  /* White and Black */
  --color-white: oklch(100% 0 0);
  --color-black: oklch(0% 0 0);
  --color-transparent: oklch(100% 0 0 / 0);
  /* Red */
  --color-red-50: oklch(97.1% 0.013 17.38);
  --color-red-100: oklch(93.6% 0.032 17.717);
  --color-red-200: oklch(88.5% 0.062 18.334);
  --color-red-300: oklch(70.4% 0.191 22.216);
  --color-red-400: oklch(70.4% 0.191 22.216);
  --color-red-500: oklch(63.7% 0.237 25.331);
  --color-red-600: oklch(57.7% 0.245 27.325);
  --color-red-700: oklch(50.5% 0.213 27.518);
  --color-red-800: oklch(44.4% 0.177 26.899);
  --color-red-900: oklch(39.6% 0.141 25.723);
  --color-red-950: oklch(25.8% 0.092 26.042);
  /* --color-red-50 */
  --color-red-50-100: oklch(97.1% 0.013 17.38 / 1);
  --color-red-50-90: oklch(97.1% 0.013 17.38 / 0.9);
  --color-red-50-80: oklch(97.1% 0.013 17.38 / 0.8);
  --color-red-50-70: oklch(97.1% 0.013 17.38 / 0.7);
  --color-red-50-60: oklch(97.1% 0.013 17.38 / 0.6);
  --color-red-50-50: oklch(97.1% 0.013 17.38 / 0.5);
  --color-red-50-40: oklch(97.1% 0.013 17.38 / 0.4);
  --color-red-50-30: oklch(97.1% 0.013 17.38 / 0.3);
  --color-red-50-20: oklch(97.1% 0.013 17.38 / 0.2);
  --color-red-50-10: oklch(97.1% 0.013 17.38 / 0.1);
  --color-red-50-5: oklch(97.1% 0.013 17.38 / 0.05);
  /* --color-red-100 */
  --color-red-100-100: oklch(93.6% 0.032 17.717 / 1);
  --color-red-100-90: oklch(93.6% 0.032 17.717 / 0.9);
  --color-red-100-80: oklch(93.6% 0.032 17.717 / 0.8);
  --color-red-100-70: oklch(93.6% 0.032 17.717 / 0.7);
  --color-red-100-60: oklch(93.6% 0.032 17.717 / 0.6);
  --color-red-100-50: oklch(93.6% 0.032 17.717 / 0.5);
  --color-red-100-40: oklch(93.6% 0.032 17.717 / 0.4);
  --color-red-100-30: oklch(93.6% 0.032 17.717 / 0.3);
  --color-red-100-20: oklch(93.6% 0.032 17.717 / 0.2);
  --color-red-100-10: oklch(93.6% 0.032 17.717 / 0.1);
  --color-red-100-5: oklch(93.6% 0.032 17.717 / 0.05);
  /* --color-red-200 */
  --color-red-200-100: oklch(88.5% 0.062 18.334 / 1);
  --color-red-200-90: oklch(88.5% 0.062 18.334 / 0.9);
  --color-red-200-80: oklch(88.5% 0.062 18.334 / 0.8);
  --color-red-200-70: oklch(88.5% 0.062 18.334 / 0.7);
  --color-red-200-60: oklch(88.5% 0.062 18.334 / 0.6);
  --color-red-200-50: oklch(88.5% 0.062 18.334 / 0.5);
  --color-red-200-40: oklch(88.5% 0.062 18.334 / 0.4);
  --color-red-200-30: oklch(88.5% 0.062 18.334 / 0.3);
  --color-red-200-20: oklch(88.5% 0.062 18.334 / 0.2);
  --color-red-200-10: oklch(88.5% 0.062 18.334 / 0.1);
  --color-red-200-5: oklch(88.5% 0.062 18.334 / 0.05);
  /* --color-red-300 */
  --color-red-300-100: oklch(70.4% 0.191 22.216 / 1);
  --color-red-300-90: oklch(70.4% 0.191 22.216 / 0.9);
  --color-red-300-80: oklch(70.4% 0.191 22.216 / 0.8);
  --color-red-300-70: oklch(70.4% 0.191 22.216 / 0.7);
  --color-red-300-60: oklch(70.4% 0.191 22.216 / 0.6);
  --color-red-300-50: oklch(70.4% 0.191 22.216 / 0.5);
  --color-red-300-40: oklch(70.4% 0.191 22.216 / 0.4);
  --color-red-300-30: oklch(70.4% 0.191 22.216 / 0.3);
  --color-red-300-20: oklch(70.4% 0.191 22.216 / 0.2);
  --color-red-300-10: oklch(70.4% 0.191 22.216 / 0.1);
  --color-red-300-5: oklch(70.4% 0.191 22.216 / 0.05);
  /* --color-red-400 */
  --color-red-400-100: oklch(70.4% 0.191 22.216 / 1);
  --color-red-400-90: oklch(70.4% 0.191 22.216 / 0.9);
  --color-red-400-80: oklch(70.4% 0.191 22.216 / 0.8);
  --color-red-400-70: oklch(70.4% 0.191 22.216 / 0.7);
  --color-red-400-60: oklch(70.4% 0.191 22.216 / 0.6);
  --color-red-400-50: oklch(70.4% 0.191 22.216 / 0.5);
  --color-red-400-40: oklch(70.4% 0.191 22.216 / 0.4);
  --color-red-400-30: oklch(70.4% 0.191 22.216 / 0.3);
  --color-red-400-20: oklch(70.4% 0.191 22.216 / 0.2);
  --color-red-400-10: oklch(70.4% 0.191 22.216 / 0.1);
  --color-red-400-5: oklch(70.4% 0.191 22.216 / 0.05);
  /* --color-red-500 */
  --color-red-500-100: oklch(63.7% 0.237 25.331 / 1);
  --color-red-500-90: oklch(63.7% 0.237 25.331 / 0.9);
  --color-red-500-80: oklch(63.7% 0.237 25.331 / 0.8);
  --color-red-500-70: oklch(63.7% 0.237 25.331 / 0.7);
  --color-red-500-60: oklch(63.7% 0.237 25.331 / 0.6);
  --color-red-500-50: oklch(63.7% 0.237 25.331 / 0.5);
  --color-red-500-40: oklch(63.7% 0.237 25.331 / 0.4);
  --color-red-500-34: oklch(63.7% 0.237 25.331 / 0.34);
  --color-red-500-30: oklch(63.7% 0.237 25.331 / 0.3);
  --color-red-500-26: oklch(63.7% 0.237 25.331 / 0.26);
  --color-red-500-24: oklch(63.7% 0.237 25.331 / 0.24);
  --color-red-500-20: oklch(63.7% 0.237 25.331 / 0.2);
  --color-red-500-18: oklch(63.7% 0.237 25.331 / 0.18);
  --color-red-500-16: oklch(63.7% 0.237 25.331 / 0.16);
  --color-red-500-12: oklch(63.7% 0.237 25.331 / 0.12);
  --color-red-500-10: oklch(63.7% 0.237 25.331 / 0.1);
  --color-red-500-5: oklch(63.7% 0.237 25.331 / 0.05);
  /* --color-red-600 */
  --color-red-600-100: oklch(57.7% 0.245 27.325 / 1);
  --color-red-600-90: oklch(57.7% 0.245 27.325 / 0.9);
  --color-red-600-80: oklch(57.7% 0.245 27.325 / 0.8);
  --color-red-600-70: oklch(57.7% 0.245 27.325 / 0.7);
  --color-red-600-60: oklch(57.7% 0.245 27.325 / 0.6);
  --color-red-600-50: oklch(57.7% 0.245 27.325 / 0.5);
  --color-red-600-40: oklch(57.7% 0.245 27.325 / 0.4);
  --color-red-600-30: oklch(57.7% 0.245 27.325 / 0.3);
  --color-red-600-20: oklch(57.7% 0.245 27.325 / 0.2);
  --color-red-600-10: oklch(57.7% 0.245 27.325 / 0.1);
  --color-red-600-5: oklch(57.7% 0.245 27.325 / 0.05);
  /* --color-red-700 */
  --color-red-700-100: oklch(50.5% 0.213 27.518 / 1);
  --color-red-700-90: oklch(50.5% 0.213 27.518 / 0.9);
  --color-red-700-80: oklch(50.5% 0.213 27.518 / 0.8);
  --color-red-700-70: oklch(50.5% 0.213 27.518 / 0.7);
  --color-red-700-60: oklch(50.5% 0.213 27.518 / 0.6);
  --color-red-700-50: oklch(50.5% 0.213 27.518 / 0.5);
  --color-red-700-40: oklch(50.5% 0.213 27.518 / 0.4);
  --color-red-700-30: oklch(50.5% 0.213 27.518 / 0.3);
  --color-red-700-20: oklch(50.5% 0.213 27.518 / 0.2);
  --color-red-700-10: oklch(50.5% 0.213 27.518 / 0.1);
  --color-red-700-5: oklch(50.5% 0.213 27.518 / 0.05);
  /* --color-red-800 */
  --color-red-800-100: oklch(44.4% 0.177 26.899 / 1);
  --color-red-800-90: oklch(44.4% 0.177 26.899 / 0.9);
  --color-red-800-80: oklch(44.4% 0.177 26.899 / 0.8);
  --color-red-800-70: oklch(44.4% 0.177 26.899 / 0.7);
  --color-red-800-60: oklch(44.4% 0.177 26.899 / 0.6);
  --color-red-800-50: oklch(44.4% 0.177 26.899 / 0.5);
  --color-red-800-40: oklch(44.4% 0.177 26.899 / 0.4);
  --color-red-800-30: oklch(44.4% 0.177 26.899 / 0.3);
  --color-red-800-20: oklch(44.4% 0.177 26.899 / 0.2);
  --color-red-800-10: oklch(44.4% 0.177 26.899 / 0.1);
  --color-red-800-5: oklch(44.4% 0.177 26.899 / 0.05);
  /* --color-red-900 */
  --color-red-900-100: oklch(39.6% 0.141 25.723 / 1);
  --color-red-900-90: oklch(39.6% 0.141 25.723 / 0.9);
  --color-red-900-80: oklch(39.6% 0.141 25.723 / 0.8);
  --color-red-900-70: oklch(39.6% 0.141 25.723 / 0.7);
  --color-red-900-60: oklch(39.6% 0.141 25.723 / 0.6);
  --color-red-900-50: oklch(39.6% 0.141 25.723 / 0.5);
  --color-red-900-40: oklch(39.6% 0.141 25.723 / 0.4);
  --color-red-900-30: oklch(39.6% 0.141 25.723 / 0.3);
  --color-red-900-20: oklch(39.6% 0.141 25.723 / 0.2);
  --color-red-900-10: oklch(39.6% 0.141 25.723 / 0.1);
  --color-red-900-5: oklch(39.6% 0.141 25.723 / 0.05);
  /* --color-red-950 */
  --color-red-950-100: oklch(25.8% 0.092 26.042 / 1);
  --color-red-950-90: oklch(25.8% 0.092 26.042 / 0.9);
  --color-red-950-80: oklch(25.8% 0.092 26.042 / 0.8);
  --color-red-950-70: oklch(25.8% 0.092 26.042 / 0.7);
  --color-red-950-60: oklch(25.8% 0.092 26.042 / 0.6);
  --color-red-950-50: oklch(25.8% 0.092 26.042 / 0.5);
  --color-red-950-40: oklch(25.8% 0.092 26.042 / 0.4);
  --color-red-950-30: oklch(25.8% 0.092 26.042 / 0.3);
  --color-red-950-20: oklch(25.8% 0.092 26.042 / 0.2);
  --color-red-950-10: oklch(25.8% 0.092 26.042 / 0.1);
  --color-red-950-5: oklch(25.8% 0.092 26.042 / 0.05);
  /* Orange */
  --color-orange-50: oklch(98% 0.016 73.684);
  --color-orange-100: oklch(95.4% 0.038 75.164);
  --color-orange-200: oklch(90.1% 0.076 70.697);
  --color-orange-300: oklch(83.7% 0.128 66.29);
  --color-orange-400: oklch(75% 0.183 55.934);
  --color-orange-500: oklch(70.5% 0.213 47.604);
  --color-orange-600: oklch(64.6% 0.222 41.116);
  --color-orange-700: oklch(55.3% 0.195 38.402);
  --color-orange-800: oklch(47% 0.157 37.304);
  --color-orange-900: oklch(40.8% 0.123 38.172);
  --color-orange-950: oklch(26.6% 0.079 36.259);
  /* --color-orange-50 */
  --color-orange-50-100: oklch(98% 0.016 73.684 / 1);
  --color-orange-50-90: oklch(98% 0.016 73.684 / 0.9);
  --color-orange-50-80: oklch(98% 0.016 73.684 / 0.8);
  --color-orange-50-70: oklch(98% 0.016 73.684 / 0.7);
  --color-orange-50-60: oklch(98% 0.016 73.684 / 0.6);
  --color-orange-50-50: oklch(98% 0.016 73.684 / 0.5);
  --color-orange-50-40: oklch(98% 0.016 73.684 / 0.4);
  --color-orange-50-30: oklch(98% 0.016 73.684 / 0.3);
  --color-orange-50-20: oklch(98% 0.016 73.684 / 0.2);
  --color-orange-50-10: oklch(98% 0.016 73.684 / 0.1);
  --color-orange-50-5: oklch(98% 0.016 73.684 / 0.05);
  /* --color-orange-100 */
  --color-orange-100-100: oklch(95.4% 0.038 75.164 / 1);
  --color-orange-100-90: oklch(95.4% 0.038 75.164 / 0.9);
  --color-orange-100-80: oklch(95.4% 0.038 75.164 / 0.8);
  --color-orange-100-70: oklch(95.4% 0.038 75.164 / 0.7);
  --color-orange-100-60: oklch(95.4% 0.038 75.164 / 0.6);
  --color-orange-100-50: oklch(95.4% 0.038 75.164 / 0.5);
  --color-orange-100-40: oklch(95.4% 0.038 75.164 / 0.4);
  --color-orange-100-30: oklch(95.4% 0.038 75.164 / 0.3);
  --color-orange-100-20: oklch(95.4% 0.038 75.164 / 0.2);
  --color-orange-100-10: oklch(95.4% 0.038 75.164 / 0.1);
  --color-orange-100-5: oklch(95.4% 0.038 75.164 / 0.05);
  /* --color-orange-200 */
  --color-orange-200-100: oklch(90.1% 0.076 70.697 / 1);
  --color-orange-200-90: oklch(90.1% 0.076 70.697 / 0.9);
  --color-orange-200-80: oklch(90.1% 0.076 70.697 / 0.8);
  --color-orange-200-70: oklch(90.1% 0.076 70.697 / 0.7);
  --color-orange-200-60: oklch(90.1% 0.076 70.697 / 0.6);
  --color-orange-200-50: oklch(90.1% 0.076 70.697 / 0.5);
  --color-orange-200-40: oklch(90.1% 0.076 70.697 / 0.4);
  --color-orange-200-30: oklch(90.1% 0.076 70.697 / 0.3);
  --color-orange-200-20: oklch(90.1% 0.076 70.697 / 0.2);
  --color-orange-200-10: oklch(90.1% 0.076 70.697 / 0.1);
  --color-orange-200-5: oklch(90.1% 0.076 70.697 / 0.05);
  /* --color-orange-300 */
  --color-orange-300-100: oklch(83.7% 0.128 66.29 / 1);
  --color-orange-300-90: oklch(83.7% 0.128 66.29 / 0.9);
  --color-orange-300-80: oklch(83.7% 0.128 66.29 / 0.8);
  --color-orange-300-70: oklch(83.7% 0.128 66.29 / 0.7);
  --color-orange-300-60: oklch(83.7% 0.128 66.29 / 0.6);
  --color-orange-300-50: oklch(83.7% 0.128 66.29 / 0.5);
  --color-orange-300-40: oklch(83.7% 0.128 66.29 / 0.4);
  --color-orange-300-30: oklch(83.7% 0.128 66.29 / 0.3);
  --color-orange-300-20: oklch(83.7% 0.128 66.29 / 0.2);
  --color-orange-300-10: oklch(83.7% 0.128 66.29 / 0.1);
  --color-orange-300-5: oklch(83.7% 0.128 66.29 / 0.05);
  /* --color-orange-400 */
  --color-orange-400-100: oklch(75% 0.183 55.934 / 1);
  --color-orange-400-90: oklch(75% 0.183 55.934 / 0.9);
  --color-orange-400-80: oklch(75% 0.183 55.934 / 0.8);
  --color-orange-400-70: oklch(75% 0.183 55.934 / 0.7);
  --color-orange-400-60: oklch(75% 0.183 55.934 / 0.6);
  --color-orange-400-50: oklch(75% 0.183 55.934 / 0.5);
  --color-orange-400-40: oklch(75% 0.183 55.934 / 0.4);
  --color-orange-400-30: oklch(75% 0.183 55.934 / 0.3);
  --color-orange-400-20: oklch(75% 0.183 55.934 / 0.2);
  --color-orange-400-10: oklch(75% 0.183 55.934 / 0.1);
  --color-orange-400-5: oklch(75% 0.183 55.934 / 0.05);
  /* --color-orange-500 */
  --color-orange-500-100: oklch(70.5% 0.213 47.604 / 1);
  --color-orange-500-90: oklch(70.5% 0.213 47.604 / 0.9);
  --color-orange-500-80: oklch(70.5% 0.213 47.604 / 0.8);
  --color-orange-500-70: oklch(70.5% 0.213 47.604 / 0.7);
  --color-orange-500-60: oklch(70.5% 0.213 47.604 / 0.6);
  --color-orange-500-50: oklch(70.5% 0.213 47.604 / 0.5);
  --color-orange-500-40: oklch(70.5% 0.213 47.604 / 0.4);
  --color-orange-500-30: oklch(70.5% 0.213 47.604 / 0.3);
  --color-orange-500-20: oklch(70.5% 0.213 47.604 / 0.2);
  --color-orange-500-10: oklch(70.5% 0.213 47.604 / 0.1);
  --color-orange-500-5: oklch(70.5% 0.213 47.604 / 0.05);
  /* --color-orange-600 */
  --color-orange-600-100: oklch(64.6% 0.222 41.116 / 1);
  --color-orange-600-90: oklch(64.6% 0.222 41.116 / 0.9);
  --color-orange-600-80: oklch(64.6% 0.222 41.116 / 0.8);
  --color-orange-600-70: oklch(64.6% 0.222 41.116 / 0.7);
  --color-orange-600-60: oklch(64.6% 0.222 41.116 / 0.6);
  --color-orange-600-50: oklch(64.6% 0.222 41.116 / 0.5);
  --color-orange-600-40: oklch(64.6% 0.222 41.116 / 0.4);
  --color-orange-600-30: oklch(64.6% 0.222 41.116 / 0.3);
  --color-orange-600-20: oklch(64.6% 0.222 41.116 / 0.2);
  --color-orange-600-10: oklch(64.6% 0.222 41.116 / 0.1);
  --color-orange-600-5: oklch(64.6% 0.222 41.116 / 0.05);
  /* --color-orange-700 */
  --color-orange-700-100: oklch(55.3% 0.195 38.402 / 1);
  --color-orange-700-90: oklch(55.3% 0.195 38.402 / 0.9);
  --color-orange-700-80: oklch(55.3% 0.195 38.402 / 0.8);
  --color-orange-700-70: oklch(55.3% 0.195 38.402 / 0.7);
  --color-orange-700-60: oklch(55.3% 0.195 38.402 / 0.6);
  --color-orange-700-50: oklch(55.3% 0.195 38.402 / 0.5);
  --color-orange-700-40: oklch(55.3% 0.195 38.402 / 0.4);
  --color-orange-700-30: oklch(55.3% 0.195 38.402 / 0.3);
  --color-orange-700-20: oklch(55.3% 0.195 38.402 / 0.2);
  --color-orange-700-10: oklch(55.3% 0.195 38.402 / 0.1);
  --color-orange-700-5: oklch(55.3% 0.195 38.402 / 0.05);
  /* --color-orange-800 */
  --color-orange-800-100: oklch(47% 0.157 37.304 / 1);
  --color-orange-800-90: oklch(47% 0.157 37.304 / 0.9);
  --color-orange-800-80: oklch(47% 0.157 37.304 / 0.8);
  --color-orange-800-70: oklch(47% 0.157 37.304 / 0.7);
  --color-orange-800-60: oklch(47% 0.157 37.304 / 0.6);
  --color-orange-800-50: oklch(47% 0.157 37.304 / 0.5);
  --color-orange-800-40: oklch(47% 0.157 37.304 / 0.4);
  --color-orange-800-30: oklch(47% 0.157 37.304 / 0.3);
  --color-orange-800-20: oklch(47% 0.157 37.304 / 0.2);
  --color-orange-800-10: oklch(47% 0.157 37.304 / 0.1);
  --color-orange-800-5: oklch(47% 0.157 37.304 / 0.05);
  /* --color-orange-900 */
  --color-orange-900-100: oklch(40.8% 0.123 38.172 / 1);
  --color-orange-900-90: oklch(40.8% 0.123 38.172 / 0.9);
  --color-orange-900-80: oklch(40.8% 0.123 38.172 / 0.8);
  --color-orange-900-70: oklch(40.8% 0.123 38.172 / 0.7);
  --color-orange-900-60: oklch(40.8% 0.123 38.172 / 0.6);
  --color-orange-900-50: oklch(40.8% 0.123 38.172 / 0.5);
  --color-orange-900-40: oklch(40.8% 0.123 38.172 / 0.4);
  --color-orange-900-30: oklch(40.8% 0.123 38.172 / 0.3);
  --color-orange-900-20: oklch(40.8% 0.123 38.172 / 0.2);
  --color-orange-900-10: oklch(40.8% 0.123 38.172 / 0.1);
  --color-orange-900-5: oklch(40.8% 0.123 38.172 / 0.05);
  /* --color-orange-950 */
  --color-orange-950-100: oklch(26.6% 0.079 36.259 / 1);
  --color-orange-950-90: oklch(26.6% 0.079 36.259 / 0.9);
  --color-orange-950-80: oklch(26.6% 0.079 36.259 / 0.8);
  --color-orange-950-70: oklch(26.6% 0.079 36.259 / 0.7);
  --color-orange-950-60: oklch(26.6% 0.079 36.259 / 0.6);
  --color-orange-950-50: oklch(26.6% 0.079 36.259 / 0.5);
  --color-orange-950-40: oklch(26.6% 0.079 36.259 / 0.4);
  --color-orange-950-30: oklch(26.6% 0.079 36.259 / 0.3);
  --color-orange-950-20: oklch(26.6% 0.079 36.259 / 0.2);
  --color-orange-950-10: oklch(26.6% 0.079 36.259 / 0.1);
  --color-orange-950-5: oklch(26.6% 0.079 36.259 / 0.05);
  /* Amber */
  --color-amber-50: oklch(98.7% 0.022 95.277);
  --color-amber-100: oklch(96.2% 0.059 95.617);
  --color-amber-200: oklch(92.4% 0.12 95.746);
  --color-amber-300: oklch(87.9% 0.169 91.605);
  --color-amber-400: oklch(82.8% 0.189 84.429);
  --color-amber-500: oklch(76.9% 0.188 70.08);
  --color-amber-600: oklch(66.6% 0.179 58.318);
  --color-amber-700: oklch(55.5% 0.163 48.998);
  --color-amber-800: oklch(47.3% 0.137 46.201);
  --color-amber-900: oklch(41.4% 0.112 45.904);
  --color-amber-950: oklch(27.9% 0.077 45.635);
  /* --color-amber-50 */
  --color-amber-50-100: oklch(98.7% 0.022 95.277 / 1);
  --color-amber-50-90: oklch(98.7% 0.022 95.277 / 0.9);
  --color-amber-50-80: oklch(98.7% 0.022 95.277 / 0.8);
  --color-amber-50-70: oklch(98.7% 0.022 95.277 / 0.7);
  --color-amber-50-60: oklch(98.7% 0.022 95.277 / 0.6);
  --color-amber-50-50: oklch(98.7% 0.022 95.277 / 0.5);
  --color-amber-50-40: oklch(98.7% 0.022 95.277 / 0.4);
  --color-amber-50-30: oklch(98.7% 0.022 95.277 / 0.3);
  --color-amber-50-20: oklch(98.7% 0.022 95.277 / 0.2);
  --color-amber-50-10: oklch(98.7% 0.022 95.277 / 0.1);
  --color-amber-50-5: oklch(98.7% 0.022 95.277 / 0.05);
  /* --color-amber-100 */
  --color-amber-100-100: oklch(96.2% 0.059 95.617 / 1);
  --color-amber-100-90: oklch(96.2% 0.059 95.617 / 0.9);
  --color-amber-100-80: oklch(96.2% 0.059 95.617 / 0.8);
  --color-amber-100-70: oklch(96.2% 0.059 95.617 / 0.7);
  --color-amber-100-60: oklch(96.2% 0.059 95.617 / 0.6);
  --color-amber-100-50: oklch(96.2% 0.059 95.617 / 0.5);
  --color-amber-100-40: oklch(96.2% 0.059 95.617 / 0.4);
  --color-amber-100-30: oklch(96.2% 0.059 95.617 / 0.3);
  --color-amber-100-20: oklch(96.2% 0.059 95.617 / 0.2);
  --color-amber-100-10: oklch(96.2% 0.059 95.617 / 0.1);
  --color-amber-100-5: oklch(96.2% 0.059 95.617 / 0.05);
  /* --color-amber-200 */
  --color-amber-200-100: oklch(92.4% 0.12 95.746 / 1);
  --color-amber-200-90: oklch(92.4% 0.12 95.746 / 0.9);
  --color-amber-200-80: oklch(92.4% 0.12 95.746 / 0.8);
  --color-amber-200-70: oklch(92.4% 0.12 95.746 / 0.7);
  --color-amber-200-60: oklch(92.4% 0.12 95.746 / 0.6);
  --color-amber-200-50: oklch(92.4% 0.12 95.746 / 0.5);
  --color-amber-200-40: oklch(92.4% 0.12 95.746 / 0.4);
  --color-amber-200-30: oklch(92.4% 0.12 95.746 / 0.3);
  --color-amber-200-20: oklch(92.4% 0.12 95.746 / 0.2);
  --color-amber-200-10: oklch(92.4% 0.12 95.746 / 0.1);
  --color-amber-200-5: oklch(92.4% 0.12 95.746 / 0.05);
  /* --color-amber-300 */
  --color-amber-300-100: oklch(87.9% 0.169 91.605 / 1);
  --color-amber-300-90: oklch(87.9% 0.169 91.605 / 0.9);
  --color-amber-300-80: oklch(87.9% 0.169 91.605 / 0.8);
  --color-amber-300-70: oklch(87.9% 0.169 91.605 / 0.7);
  --color-amber-300-60: oklch(87.9% 0.169 91.605 / 0.6);
  --color-amber-300-50: oklch(87.9% 0.169 91.605 / 0.5);
  --color-amber-300-40: oklch(87.9% 0.169 91.605 / 0.4);
  --color-amber-300-30: oklch(87.9% 0.169 91.605 / 0.3);
  --color-amber-300-20: oklch(87.9% 0.169 91.605 / 0.2);
  --color-amber-300-10: oklch(87.9% 0.169 91.605 / 0.1);
  --color-amber-300-5: oklch(87.9% 0.169 91.605 / 0.05);
  /* --color-amber-400 */
  --color-amber-400-100: oklch(82.8% 0.189 84.429 / 1);
  --color-amber-400-90: oklch(82.8% 0.189 84.429 / 0.9);
  --color-amber-400-80: oklch(82.8% 0.189 84.429 / 0.8);
  --color-amber-400-70: oklch(82.8% 0.189 84.429 / 0.7);
  --color-amber-400-60: oklch(82.8% 0.189 84.429 / 0.6);
  --color-amber-400-50: oklch(82.8% 0.189 84.429 / 0.5);
  --color-amber-400-40: oklch(82.8% 0.189 84.429 / 0.4);
  --color-amber-400-30: oklch(82.8% 0.189 84.429 / 0.3);
  --color-amber-400-20: oklch(82.8% 0.189 84.429 / 0.2);
  --color-amber-400-10: oklch(82.8% 0.189 84.429 / 0.1);
  --color-amber-400-5: oklch(82.8% 0.189 84.429 / 0.05);
  /* --color-amber-500 */
  --color-amber-500-100: oklch(76.9% 0.188 70.08 / 1);
  --color-amber-500-90: oklch(76.9% 0.188 70.08 / 0.9);
  --color-amber-500-80: oklch(76.9% 0.188 70.08 / 0.8);
  --color-amber-500-70: oklch(76.9% 0.188 70.08 / 0.7);
  --color-amber-500-60: oklch(76.9% 0.188 70.08 / 0.6);
  --color-amber-500-50: oklch(76.9% 0.188 70.08 / 0.5);
  --color-amber-500-40: oklch(76.9% 0.188 70.08 / 0.4);
  --color-amber-500-38: oklch(76.9% 0.188 70.08 / 0.38);
  --color-amber-500-30: oklch(76.9% 0.188 70.08 / 0.3);
  --color-amber-500-28: oklch(76.9% 0.188 70.08 / 0.28);
  --color-amber-500-26: oklch(76.9% 0.188 70.08 / 0.26);
  --color-amber-500-22: oklch(76.9% 0.188 70.08 / 0.22);
  --color-amber-500-20: oklch(76.9% 0.188 70.08 / 0.2);
  --color-amber-500-18: oklch(76.9% 0.188 70.08 / 0.18);
  --color-amber-500-14: oklch(76.9% 0.188 70.08 / 0.14);
  --color-amber-500-10: oklch(76.9% 0.188 70.08 / 0.1);
  --color-amber-500-5: oklch(76.9% 0.188 70.08 / 0.05);
  /* --color-amber-600 */
  --color-amber-600-100: oklch(66.6% 0.179 58.318 / 1);
  --color-amber-600-90: oklch(66.6% 0.179 58.318 / 0.9);
  --color-amber-600-80: oklch(66.6% 0.179 58.318 / 0.8);
  --color-amber-600-70: oklch(66.6% 0.179 58.318 / 0.7);
  --color-amber-600-60: oklch(66.6% 0.179 58.318 / 0.6);
  --color-amber-600-50: oklch(66.6% 0.179 58.318 / 0.5);
  --color-amber-600-40: oklch(66.6% 0.179 58.318 / 0.4);
  --color-amber-600-30: oklch(66.6% 0.179 58.318 / 0.3);
  --color-amber-600-20: oklch(66.6% 0.179 58.318 / 0.2);
  --color-amber-600-10: oklch(66.6% 0.179 58.318 / 0.1);
  --color-amber-600-5: oklch(66.6% 0.179 58.318 / 0.05);
  /* --color-amber-700 */
  --color-amber-700-100: oklch(55.5% 0.163 48.998 / 1);
  --color-amber-700-90: oklch(55.5% 0.163 48.998 / 0.9);
  --color-amber-700-80: oklch(55.5% 0.163 48.998 / 0.8);
  --color-amber-700-70: oklch(55.5% 0.163 48.998 / 0.7);
  --color-amber-700-60: oklch(55.5% 0.163 48.998 / 0.6);
  --color-amber-700-50: oklch(55.5% 0.163 48.998 / 0.5);
  --color-amber-700-40: oklch(55.5% 0.163 48.998 / 0.4);
  --color-amber-700-30: oklch(55.5% 0.163 48.998 / 0.3);
  --color-amber-700-20: oklch(55.5% 0.163 48.998 / 0.2);
  --color-amber-700-10: oklch(55.5% 0.163 48.998 / 0.1);
  --color-amber-700-5: oklch(55.5% 0.163 48.998 / 0.05);
  /* --color-amber-800 */
  --color-amber-800-100: oklch(47.3% 0.137 46.201 / 1);
  --color-amber-800-90: oklch(47.3% 0.137 46.201 / 0.9);
  --color-amber-800-80: oklch(47.3% 0.137 46.201 / 0.8);
  --color-amber-800-70: oklch(47.3% 0.137 46.201 / 0.7);
  --color-amber-800-60: oklch(47.3% 0.137 46.201 / 0.6);
  --color-amber-800-50: oklch(47.3% 0.137 46.201 / 0.5);
  --color-amber-800-40: oklch(47.3% 0.137 46.201 / 0.4);
  --color-amber-800-30: oklch(47.3% 0.137 46.201 / 0.3);
  --color-amber-800-20: oklch(47.3% 0.137 46.201 / 0.2);
  --color-amber-800-10: oklch(47.3% 0.137 46.201 / 0.1);
  --color-amber-800-5: oklch(47.3% 0.137 46.201 / 0.05);
  /* --color-amber-900 */
  --color-amber-900-100: oklch(41.4% 0.112 45.904 / 1);
  --color-amber-900-90: oklch(41.4% 0.112 45.904 / 0.9);
  --color-amber-900-80: oklch(41.4% 0.112 45.904 / 0.8);
  --color-amber-900-70: oklch(41.4% 0.112 45.904 / 0.7);
  --color-amber-900-60: oklch(41.4% 0.112 45.904 / 0.6);
  --color-amber-900-50: oklch(41.4% 0.112 45.904 / 0.5);
  --color-amber-900-40: oklch(41.4% 0.112 45.904 / 0.4);
  --color-amber-900-30: oklch(41.4% 0.112 45.904 / 0.3);
  --color-amber-900-20: oklch(41.4% 0.112 45.904 / 0.2);
  --color-amber-900-10: oklch(41.4% 0.112 45.904 / 0.1);
  --color-amber-900-5: oklch(41.4% 0.112 45.904 / 0.05);
  /* --color-amber-950 */
  --color-amber-950-100: oklch(27.9% 0.077 45.635 / 1);
  --color-amber-950-90: oklch(27.9% 0.077 45.635 / 0.9);
  --color-amber-950-80: oklch(27.9% 0.077 45.635 / 0.8);
  --color-amber-950-70: oklch(27.9% 0.077 45.635 / 0.7);
  --color-amber-950-60: oklch(27.9% 0.077 45.635 / 0.6);
  --color-amber-950-50: oklch(27.9% 0.077 45.635 / 0.5);
  --color-amber-950-40: oklch(27.9% 0.077 45.635 / 0.4);
  --color-amber-950-30: oklch(27.9% 0.077 45.635 / 0.3);
  --color-amber-950-20: oklch(27.9% 0.077 45.635 / 0.2);
  --color-amber-950-10: oklch(27.9% 0.077 45.635 / 0.1);
  --color-amber-950-5: oklch(27.9% 0.077 45.635 / 0.05);
  /* Yellow */
  --color-yellow-50: oklch(98.7% 0.026 102.212);
  --color-yellow-100: oklch(97.3% 0.071 103.193);
  --color-yellow-200: oklch(94.5% 0.129 101.54);
  --color-yellow-300: oklch(90.5% 0.182 98.111);
  --color-yellow-400: oklch(85.2% 0.199 91.936);
  --color-yellow-500: oklch(79.5% 0.184 86.047);
  --color-yellow-600: oklch(79.5% 0.184 86.047);
  --color-yellow-700: oklch(55.4% 0.135 66.442);
  --color-yellow-800: oklch(47.6% 0.114 61.907);
  --color-yellow-900: oklch(42.1% 0.095 57.708);
  --color-yellow-950: oklch(28.6% 0.066 53.813);
  /* --color-yellow-50 */
  --color-yellow-50-100: oklch(98.7% 0.026 102.212 / 1);
  --color-yellow-50-90: oklch(98.7% 0.026 102.212 / 0.9);
  --color-yellow-50-80: oklch(98.7% 0.026 102.212 / 0.8);
  --color-yellow-50-70: oklch(98.7% 0.026 102.212 / 0.7);
  --color-yellow-50-60: oklch(98.7% 0.026 102.212 / 0.6);
  --color-yellow-50-50: oklch(98.7% 0.026 102.212 / 0.5);
  --color-yellow-50-40: oklch(98.7% 0.026 102.212 / 0.4);
  --color-yellow-50-30: oklch(98.7% 0.026 102.212 / 0.3);
  --color-yellow-50-20: oklch(98.7% 0.026 102.212 / 0.2);
  --color-yellow-50-10: oklch(98.7% 0.026 102.212 / 0.1);
  --color-yellow-50-5: oklch(98.7% 0.026 102.212 / 0.05);
  /* --color-yellow-100 */
  --color-yellow-100-100: oklch(97.3% 0.071 103.193 / 1);
  --color-yellow-100-90: oklch(97.3% 0.071 103.193 / 0.9);
  --color-yellow-100-80: oklch(97.3% 0.071 103.193 / 0.8);
  --color-yellow-100-70: oklch(97.3% 0.071 103.193 / 0.7);
  --color-yellow-100-60: oklch(97.3% 0.071 103.193 / 0.6);
  --color-yellow-100-50: oklch(97.3% 0.071 103.193 / 0.5);
  --color-yellow-100-40: oklch(97.3% 0.071 103.193 / 0.4);
  --color-yellow-100-30: oklch(97.3% 0.071 103.193 / 0.3);
  --color-yellow-100-20: oklch(97.3% 0.071 103.193 / 0.2);
  --color-yellow-100-10: oklch(97.3% 0.071 103.193 / 0.1);
  --color-yellow-100-5: oklch(97.3% 0.071 103.193 / 0.05);
  /* --color-yellow-200 */
  --color-yellow-200-100: oklch(94.5% 0.129 101.54 / 1);
  --color-yellow-200-90: oklch(94.5% 0.129 101.54 / 0.9);
  --color-yellow-200-80: oklch(94.5% 0.129 101.54 / 0.8);
  --color-yellow-200-70: oklch(94.5% 0.129 101.54 / 0.7);
  --color-yellow-200-60: oklch(94.5% 0.129 101.54 / 0.6);
  --color-yellow-200-50: oklch(94.5% 0.129 101.54 / 0.5);
  --color-yellow-200-40: oklch(94.5% 0.129 101.54 / 0.4);
  --color-yellow-200-30: oklch(94.5% 0.129 101.54 / 0.3);
  --color-yellow-200-20: oklch(94.5% 0.129 101.54 / 0.2);
  --color-yellow-200-10: oklch(94.5% 0.129 101.54 / 0.1);
  --color-yellow-200-5: oklch(94.5% 0.129 101.54 / 0.05);
  /* --color-yellow-300 */
  --color-yellow-300-100: oklch(90.5% 0.182 98.111 / 1);
  --color-yellow-300-90: oklch(90.5% 0.182 98.111 / 0.9);
  --color-yellow-300-80: oklch(90.5% 0.182 98.111 / 0.8);
  --color-yellow-300-70: oklch(90.5% 0.182 98.111 / 0.7);
  --color-yellow-300-60: oklch(90.5% 0.182 98.111 / 0.6);
  --color-yellow-300-50: oklch(90.5% 0.182 98.111 / 0.5);
  --color-yellow-300-40: oklch(90.5% 0.182 98.111 / 0.4);
  --color-yellow-300-30: oklch(90.5% 0.182 98.111 / 0.3);
  --color-yellow-300-20: oklch(90.5% 0.182 98.111 / 0.2);
  --color-yellow-300-10: oklch(90.5% 0.182 98.111 / 0.1);
  --color-yellow-300-5: oklch(90.5% 0.182 98.111 / 0.05);
  /* --color-yellow-400 */
  --color-yellow-400-100: oklch(85.2% 0.199 91.936 / 1);
  --color-yellow-400-90: oklch(85.2% 0.199 91.936 / 0.9);
  --color-yellow-400-80: oklch(85.2% 0.199 91.936 / 0.8);
  --color-yellow-400-70: oklch(85.2% 0.199 91.936 / 0.7);
  --color-yellow-400-60: oklch(85.2% 0.199 91.936 / 0.6);
  --color-yellow-400-50: oklch(85.2% 0.199 91.936 / 0.5);
  --color-yellow-400-40: oklch(85.2% 0.199 91.936 / 0.4);
  --color-yellow-400-30: oklch(85.2% 0.199 91.936 / 0.3);
  --color-yellow-400-20: oklch(85.2% 0.199 91.936 / 0.2);
  --color-yellow-400-10: oklch(85.2% 0.199 91.936 / 0.1);
  --color-yellow-400-5: oklch(85.2% 0.199 91.936 / 0.05);
  /* --color-yellow-500 */
  --color-yellow-500-100: oklch(79.5% 0.184 86.047 / 1);
  --color-yellow-500-90: oklch(79.5% 0.184 86.047 / 0.9);
  --color-yellow-500-80: oklch(79.5% 0.184 86.047 / 0.8);
  --color-yellow-500-70: oklch(79.5% 0.184 86.047 / 0.7);
  --color-yellow-500-60: oklch(79.5% 0.184 86.047 / 0.6);
  --color-yellow-500-50: oklch(79.5% 0.184 86.047 / 0.5);
  --color-yellow-500-40: oklch(79.5% 0.184 86.047 / 0.4);
  --color-yellow-500-30: oklch(79.5% 0.184 86.047 / 0.3);
  --color-yellow-500-20: oklch(79.5% 0.184 86.047 / 0.2);
  --color-yellow-500-10: oklch(79.5% 0.184 86.047 / 0.1);
  --color-yellow-500-5: oklch(79.5% 0.184 86.047 / 0.05);
  /* --color-yellow-600 */
  --color-yellow-600-100: oklch(79.5% 0.184 86.047 / 1);
  --color-yellow-600-90: oklch(79.5% 0.184 86.047 / 0.9);
  --color-yellow-600-80: oklch(79.5% 0.184 86.047 / 0.8);
  --color-yellow-600-70: oklch(79.5% 0.184 86.047 / 0.7);
  --color-yellow-600-60: oklch(79.5% 0.184 86.047 / 0.6);
  --color-yellow-600-50: oklch(79.5% 0.184 86.047 / 0.5);
  --color-yellow-600-40: oklch(79.5% 0.184 86.047 / 0.4);
  --color-yellow-600-30: oklch(79.5% 0.184 86.047 / 0.3);
  --color-yellow-600-20: oklch(79.5% 0.184 86.047 / 0.2);
  --color-yellow-600-10: oklch(79.5% 0.184 86.047 / 0.1);
  --color-yellow-600-5: oklch(79.5% 0.184 86.047 / 0.05);
  /* --color-yellow-700 */
  --color-yellow-700-100: oklch(55.4% 0.135 66.442 / 1);
  --color-yellow-700-90: oklch(55.4% 0.135 66.442 / 0.9);
  --color-yellow-700-80: oklch(55.4% 0.135 66.442 / 0.8);
  --color-yellow-700-70: oklch(55.4% 0.135 66.442 / 0.7);
  --color-yellow-700-60: oklch(55.4% 0.135 66.442 / 0.6);
  --color-yellow-700-50: oklch(55.4% 0.135 66.442 / 0.5);
  --color-yellow-700-40: oklch(55.4% 0.135 66.442 / 0.4);
  --color-yellow-700-30: oklch(55.4% 0.135 66.442 / 0.3);
  --color-yellow-700-20: oklch(55.4% 0.135 66.442 / 0.2);
  --color-yellow-700-10: oklch(55.4% 0.135 66.442 / 0.1);
  --color-yellow-700-5: oklch(55.4% 0.135 66.442 / 0.05);
  /* --color-yellow-800 */
  --color-yellow-800-100: oklch(47.6% 0.114 61.907 / 1);
  --color-yellow-800-90: oklch(47.6% 0.114 61.907 / 0.9);
  --color-yellow-800-80: oklch(47.6% 0.114 61.907 / 0.8);
  --color-yellow-800-70: oklch(47.6% 0.114 61.907 / 0.7);
  --color-yellow-800-60: oklch(47.6% 0.114 61.907 / 0.6);
  --color-yellow-800-50: oklch(47.6% 0.114 61.907 / 0.5);
  --color-yellow-800-40: oklch(47.6% 0.114 61.907 / 0.4);
  --color-yellow-800-30: oklch(47.6% 0.114 61.907 / 0.3);
  --color-yellow-800-20: oklch(47.6% 0.114 61.907 / 0.2);
  --color-yellow-800-10: oklch(47.6% 0.114 61.907 / 0.1);
  --color-yellow-800-5: oklch(47.6% 0.114 61.907 / 0.05);
  /* --color-yellow-900 */
  --color-yellow-900-100: oklch(42.1% 0.095 57.708 / 1);
  --color-yellow-900-90: oklch(42.1% 0.095 57.708 / 0.9);
  --color-yellow-900-80: oklch(42.1% 0.095 57.708 / 0.8);
  --color-yellow-900-70: oklch(42.1% 0.095 57.708 / 0.7);
  --color-yellow-900-60: oklch(42.1% 0.095 57.708 / 0.6);
  --color-yellow-900-50: oklch(42.1% 0.095 57.708 / 0.5);
  --color-yellow-900-40: oklch(42.1% 0.095 57.708 / 0.4);
  --color-yellow-900-30: oklch(42.1% 0.095 57.708 / 0.3);
  --color-yellow-900-20: oklch(42.1% 0.095 57.708 / 0.2);
  --color-yellow-900-10: oklch(42.1% 0.095 57.708 / 0.1);
  --color-yellow-900-5: oklch(42.1% 0.095 57.708 / 0.05);
  /* --color-yellow-950 */
  --color-yellow-950-100: oklch(28.6% 0.066 53.813 / 1);
  --color-yellow-950-90: oklch(28.6% 0.066 53.813 / 0.9);
  --color-yellow-950-80: oklch(28.6% 0.066 53.813 / 0.8);
  --color-yellow-950-70: oklch(28.6% 0.066 53.813 / 0.7);
  --color-yellow-950-60: oklch(28.6% 0.066 53.813 / 0.6);
  --color-yellow-950-50: oklch(28.6% 0.066 53.813 / 0.5);
  --color-yellow-950-40: oklch(28.6% 0.066 53.813 / 0.4);
  --color-yellow-950-30: oklch(28.6% 0.066 53.813 / 0.3);
  --color-yellow-950-20: oklch(28.6% 0.066 53.813 / 0.2);
  --color-yellow-950-10: oklch(28.6% 0.066 53.813 / 0.1);
  --color-yellow-950-5: oklch(28.6% 0.066 53.813 / 0.05);
  /* Lime */
  --color-lime-50: oklch(98.6% 0.031 120.757);
  --color-lime-100: oklch(96.7% 0.067 122.328);
  --color-lime-200: oklch(93.8% 0.127 124.321);
  --color-lime-300: oklch(89.7% 0.196 126.665);
  --color-lime-400: oklch(84.1% 0.238 128.85);
  --color-lime-500: oklch(76.8% 0.233 130.85);
  --color-lime-600: oklch(64.8% 0.2 131.684);
  --color-lime-700: oklch(53.2% 0.157 131.589);
  --color-lime-800: oklch(45.3% 0.124 130.933);
  --color-lime-900: oklch(40.5% 0.101 131.063);
  --color-lime-950: oklch(27.4% 0.072 132.109);
  /* --color-lime-50 */
  --color-lime-50-100: oklch(98.6% 0.031 120.757 / 1);
  --color-lime-50-90: oklch(98.6% 0.031 120.757 / 0.9);
  --color-lime-50-80: oklch(98.6% 0.031 120.757 / 0.8);
  --color-lime-50-70: oklch(98.6% 0.031 120.757 / 0.7);
  --color-lime-50-60: oklch(98.6% 0.031 120.757 / 0.6);
  --color-lime-50-50: oklch(98.6% 0.031 120.757 / 0.5);
  --color-lime-50-40: oklch(98.6% 0.031 120.757 / 0.4);
  --color-lime-50-30: oklch(98.6% 0.031 120.757 / 0.3);
  --color-lime-50-20: oklch(98.6% 0.031 120.757 / 0.2);
  --color-lime-50-10: oklch(98.6% 0.031 120.757 / 0.1);
  --color-lime-50-5: oklch(98.6% 0.031 120.757 / 0.05);
  /* --color-lime-100 */
  --color-lime-100-100: oklch(96.7% 0.067 122.328 / 1);
  --color-lime-100-90: oklch(96.7% 0.067 122.328 / 0.9);
  --color-lime-100-80: oklch(96.7% 0.067 122.328 / 0.8);
  --color-lime-100-70: oklch(96.7% 0.067 122.328 / 0.7);
  --color-lime-100-60: oklch(96.7% 0.067 122.328 / 0.6);
  --color-lime-100-50: oklch(96.7% 0.067 122.328 / 0.5);
  --color-lime-100-40: oklch(96.7% 0.067 122.328 / 0.4);
  --color-lime-100-30: oklch(96.7% 0.067 122.328 / 0.3);
  --color-lime-100-20: oklch(96.7% 0.067 122.328 / 0.2);
  --color-lime-100-10: oklch(96.7% 0.067 122.328 / 0.1);
  --color-lime-100-5: oklch(96.7% 0.067 122.328 / 0.05);
  /* --color-lime-200 */
  --color-lime-200-100: oklch(93.8% 0.127 124.321 / 1);
  --color-lime-200-90: oklch(93.8% 0.127 124.321 / 0.9);
  --color-lime-200-80: oklch(93.8% 0.127 124.321 / 0.8);
  --color-lime-200-70: oklch(93.8% 0.127 124.321 / 0.7);
  --color-lime-200-60: oklch(93.8% 0.127 124.321 / 0.6);
  --color-lime-200-50: oklch(93.8% 0.127 124.321 / 0.5);
  --color-lime-200-40: oklch(93.8% 0.127 124.321 / 0.4);
  --color-lime-200-30: oklch(93.8% 0.127 124.321 / 0.3);
  --color-lime-200-20: oklch(93.8% 0.127 124.321 / 0.2);
  --color-lime-200-10: oklch(93.8% 0.127 124.321 / 0.1);
  --color-lime-200-5: oklch(93.8% 0.127 124.321 / 0.05);
  /* --color-lime-300 */
  --color-lime-300-100: oklch(89.7% 0.196 126.665 / 1);
  --color-lime-300-90: oklch(89.7% 0.196 126.665 / 0.9);
  --color-lime-300-80: oklch(89.7% 0.196 126.665 / 0.8);
  --color-lime-300-70: oklch(89.7% 0.196 126.665 / 0.7);
  --color-lime-300-60: oklch(89.7% 0.196 126.665 / 0.6);
  --color-lime-300-50: oklch(89.7% 0.196 126.665 / 0.5);
  --color-lime-300-40: oklch(89.7% 0.196 126.665 / 0.4);
  --color-lime-300-30: oklch(89.7% 0.196 126.665 / 0.3);
  --color-lime-300-20: oklch(89.7% 0.196 126.665 / 0.2);
  --color-lime-300-10: oklch(89.7% 0.196 126.665 / 0.1);
  --color-lime-300-5: oklch(89.7% 0.196 126.665 / 0.05);
  /* --color-lime-400 */
  --color-lime-400-100: oklch(84.1% 0.238 128.85 / 1);
  --color-lime-400-90: oklch(84.1% 0.238 128.85 / 0.9);
  --color-lime-400-80: oklch(84.1% 0.238 128.85 / 0.8);
  --color-lime-400-70: oklch(84.1% 0.238 128.85 / 0.7);
  --color-lime-400-60: oklch(84.1% 0.238 128.85 / 0.6);
  --color-lime-400-50: oklch(84.1% 0.238 128.85 / 0.5);
  --color-lime-400-40: oklch(84.1% 0.238 128.85 / 0.4);
  --color-lime-400-30: oklch(84.1% 0.238 128.85 / 0.3);
  --color-lime-400-20: oklch(84.1% 0.238 128.85 / 0.2);
  --color-lime-400-10: oklch(84.1% 0.238 128.85 / 0.1);
  --color-lime-400-5: oklch(84.1% 0.238 128.85 / 0.05);
  /* --color-lime-500 */
  --color-lime-500-100: oklch(76.8% 0.233 130.85 / 1);
  --color-lime-500-90: oklch(76.8% 0.233 130.85 / 0.9);
  --color-lime-500-80: oklch(76.8% 0.233 130.85 / 0.8);
  --color-lime-500-70: oklch(76.8% 0.233 130.85 / 0.7);
  --color-lime-500-60: oklch(76.8% 0.233 130.85 / 0.6);
  --color-lime-500-50: oklch(76.8% 0.233 130.85 / 0.5);
  --color-lime-500-40: oklch(76.8% 0.233 130.85 / 0.4);
  --color-lime-500-30: oklch(76.8% 0.233 130.85 / 0.3);
  --color-lime-500-20: oklch(76.8% 0.233 130.85 / 0.2);
  --color-lime-500-10: oklch(76.8% 0.233 130.85 / 0.1);
  --color-lime-500-5: oklch(76.8% 0.233 130.85 / 0.05);
  /* --color-lime-600 */
  --color-lime-600-100: oklch(64.8% 0.2 131.684 / 1);
  --color-lime-600-90: oklch(64.8% 0.2 131.684 / 0.9);
  --color-lime-600-80: oklch(64.8% 0.2 131.684 / 0.8);
  --color-lime-600-70: oklch(64.8% 0.2 131.684 / 0.7);
  --color-lime-600-60: oklch(64.8% 0.2 131.684 / 0.6);
  --color-lime-600-50: oklch(64.8% 0.2 131.684 / 0.5);
  --color-lime-600-40: oklch(64.8% 0.2 131.684 / 0.4);
  --color-lime-600-30: oklch(64.8% 0.2 131.684 / 0.3);
  --color-lime-600-20: oklch(64.8% 0.2 131.684 / 0.2);
  --color-lime-600-10: oklch(64.8% 0.2 131.684 / 0.1);
  --color-lime-600-5: oklch(64.8% 0.2 131.684 / 0.05);
  /* --color-lime-700 */
  --color-lime-700-100: oklch(53.2% 0.157 131.589 / 1);
  --color-lime-700-90: oklch(53.2% 0.157 131.589 / 0.9);
  --color-lime-700-80: oklch(53.2% 0.157 131.589 / 0.8);
  --color-lime-700-70: oklch(53.2% 0.157 131.589 / 0.7);
  --color-lime-700-60: oklch(53.2% 0.157 131.589 / 0.6);
  --color-lime-700-50: oklch(53.2% 0.157 131.589 / 0.5);
  --color-lime-700-40: oklch(53.2% 0.157 131.589 / 0.4);
  --color-lime-700-30: oklch(53.2% 0.157 131.589 / 0.3);
  --color-lime-700-20: oklch(53.2% 0.157 131.589 / 0.2);
  --color-lime-700-10: oklch(53.2% 0.157 131.589 / 0.1);
  --color-lime-700-5: oklch(53.2% 0.157 131.589 / 0.05);
  /* --color-lime-800 */
  --color-lime-800-100: oklch(45.3% 0.124 130.933 / 1);
  --color-lime-800-90: oklch(45.3% 0.124 130.933 / 0.9);
  --color-lime-800-80: oklch(45.3% 0.124 130.933 / 0.8);
  --color-lime-800-70: oklch(45.3% 0.124 130.933 / 0.7);
  --color-lime-800-60: oklch(45.3% 0.124 130.933 / 0.6);
  --color-lime-800-50: oklch(45.3% 0.124 130.933 / 0.5);
  --color-lime-800-40: oklch(45.3% 0.124 130.933 / 0.4);
  --color-lime-800-30: oklch(45.3% 0.124 130.933 / 0.3);
  --color-lime-800-20: oklch(45.3% 0.124 130.933 / 0.2);
  --color-lime-800-10: oklch(45.3% 0.124 130.933 / 0.1);
  --color-lime-800-5: oklch(45.3% 0.124 130.933 / 0.05);
  /* --color-lime-900 */
  --color-lime-900-100: oklch(40.5% 0.101 131.063 / 1);
  --color-lime-900-90: oklch(40.5% 0.101 131.063 / 0.9);
  --color-lime-900-80: oklch(40.5% 0.101 131.063 / 0.8);
  --color-lime-900-70: oklch(40.5% 0.101 131.063 / 0.7);
  --color-lime-900-60: oklch(40.5% 0.101 131.063 / 0.6);
  --color-lime-900-50: oklch(40.5% 0.101 131.063 / 0.5);
  --color-lime-900-40: oklch(40.5% 0.101 131.063 / 0.4);
  --color-lime-900-30: oklch(40.5% 0.101 131.063 / 0.3);
  --color-lime-900-20: oklch(40.5% 0.101 131.063 / 0.2);
  --color-lime-900-10: oklch(40.5% 0.101 131.063 / 0.1);
  --color-lime-900-5: oklch(40.5% 0.101 131.063 / 0.05);
  /* --color-lime-950 */
  --color-lime-950-100: oklch(27.4% 0.072 132.109 / 1);
  --color-lime-950-90: oklch(27.4% 0.072 132.109 / 0.9);
  --color-lime-950-80: oklch(27.4% 0.072 132.109 / 0.8);
  --color-lime-950-70: oklch(27.4% 0.072 132.109 / 0.7);
  --color-lime-950-60: oklch(27.4% 0.072 132.109 / 0.6);
  --color-lime-950-50: oklch(27.4% 0.072 132.109 / 0.5);
  --color-lime-950-40: oklch(27.4% 0.072 132.109 / 0.4);
  --color-lime-950-30: oklch(27.4% 0.072 132.109 / 0.3);
  --color-lime-950-20: oklch(27.4% 0.072 132.109 / 0.2);
  --color-lime-950-10: oklch(27.4% 0.072 132.109 / 0.1);
  --color-lime-950-5: oklch(27.4% 0.072 132.109 / 0.05);
  /* Green */
  --color-green-50: oklch(98.2% 0.018 155.826);
  --color-green-100: oklch(96.2% 0.044 156.743);
  --color-green-200: oklch(92.5% 0.084 155.995);
  --color-green-300: oklch(87.1% 0.15 154.449);
  --color-green-400: oklch(79.2% 0.209 151.711);
  --color-green-500: oklch(72.3% 0.219 149.579);
  --color-green-600: oklch(62.7% 0.194 149.214);
  --color-green-700: oklch(52.7% 0.154 150.069);
  --color-green-800: oklch(44.8% 0.119 151.328);
  --color-green-900: oklch(39.3% 0.095 152.535);
  --color-green-950: oklch(26.6% 0.065 152.934);
  /* --color-green-50 */
  --color-green-50-100: oklch(98.2% 0.018 155.826 / 1);
  --color-green-50-90: oklch(98.2% 0.018 155.826 / 0.9);
  --color-green-50-80: oklch(98.2% 0.018 155.826 / 0.8);
  --color-green-50-70: oklch(98.2% 0.018 155.826 / 0.7);
  --color-green-50-60: oklch(98.2% 0.018 155.826 / 0.6);
  --color-green-50-50: oklch(98.2% 0.018 155.826 / 0.5);
  --color-green-50-40: oklch(98.2% 0.018 155.826 / 0.4);
  --color-green-50-30: oklch(98.2% 0.018 155.826 / 0.3);
  --color-green-50-20: oklch(98.2% 0.018 155.826 / 0.2);
  --color-green-50-10: oklch(98.2% 0.018 155.826 / 0.1);
  --color-green-50-5: oklch(98.2% 0.018 155.826 / 0.05);
  /* --color-green-100 */
  --color-green-100-100: oklch(96.2% 0.044 156.743 / 1);
  --color-green-100-90: oklch(96.2% 0.044 156.743 / 0.9);
  --color-green-100-80: oklch(96.2% 0.044 156.743 / 0.8);
  --color-green-100-70: oklch(96.2% 0.044 156.743 / 0.7);
  --color-green-100-60: oklch(96.2% 0.044 156.743 / 0.6);
  --color-green-100-50: oklch(96.2% 0.044 156.743 / 0.5);
  --color-green-100-40: oklch(96.2% 0.044 156.743 / 0.4);
  --color-green-100-30: oklch(96.2% 0.044 156.743 / 0.3);
  --color-green-100-20: oklch(96.2% 0.044 156.743 / 0.2);
  --color-green-100-10: oklch(96.2% 0.044 156.743 / 0.1);
  --color-green-100-5: oklch(96.2% 0.044 156.743 / 0.05);
  /* --color-green-200 */
  --color-green-200-100: oklch(92.5% 0.084 155.995 / 1);
  --color-green-200-90: oklch(92.5% 0.084 155.995 / 0.9);
  --color-green-200-80: oklch(92.5% 0.084 155.995 / 0.8);
  --color-green-200-70: oklch(92.5% 0.084 155.995 / 0.7);
  --color-green-200-60: oklch(92.5% 0.084 155.995 / 0.6);
  --color-green-200-50: oklch(92.5% 0.084 155.995 / 0.5);
  --color-green-200-40: oklch(92.5% 0.084 155.995 / 0.4);
  --color-green-200-30: oklch(92.5% 0.084 155.995 / 0.3);
  --color-green-200-20: oklch(92.5% 0.084 155.995 / 0.2);
  --color-green-200-10: oklch(92.5% 0.084 155.995 / 0.1);
  --color-green-200-5: oklch(92.5% 0.084 155.995 / 0.05);
  /* --color-green-300 */
  --color-green-300-100: oklch(87.1% 0.15 154.449 / 1);
  --color-green-300-90: oklch(87.1% 0.15 154.449 / 0.9);
  --color-green-300-80: oklch(87.1% 0.15 154.449 / 0.8);
  --color-green-300-70: oklch(87.1% 0.15 154.449 / 0.7);
  --color-green-300-60: oklch(87.1% 0.15 154.449 / 0.6);
  --color-green-300-50: oklch(87.1% 0.15 154.449 / 0.5);
  --color-green-300-40: oklch(87.1% 0.15 154.449 / 0.4);
  --color-green-300-30: oklch(87.1% 0.15 154.449 / 0.3);
  --color-green-300-20: oklch(87.1% 0.15 154.449 / 0.2);
  --color-green-300-10: oklch(87.1% 0.15 154.449 / 0.1);
  --color-green-300-5: oklch(87.1% 0.15 154.449 / 0.05);
  /* --color-green-400 */
  --color-green-400-100: oklch(79.2% 0.209 151.711 / 1);
  --color-green-400-90: oklch(79.2% 0.209 151.711 / 0.9);
  --color-green-400-80: oklch(79.2% 0.209 151.711 / 0.8);
  --color-green-400-70: oklch(79.2% 0.209 151.711 / 0.7);
  --color-green-400-60: oklch(79.2% 0.209 151.711 / 0.6);
  --color-green-400-50: oklch(79.2% 0.209 151.711 / 0.5);
  --color-green-400-40: oklch(79.2% 0.209 151.711 / 0.4);
  --color-green-400-30: oklch(79.2% 0.209 151.711 / 0.3);
  --color-green-400-20: oklch(79.2% 0.209 151.711 / 0.2);
  --color-green-400-10: oklch(79.2% 0.209 151.711 / 0.1);
  --color-green-400-5: oklch(79.2% 0.209 151.711 / 0.05);
  /* --color-green-500 */
  --color-green-500-100: oklch(72.3% 0.219 149.579 / 1);
  --color-green-500-90: oklch(72.3% 0.219 149.579 / 0.9);
  --color-green-500-80: oklch(72.3% 0.219 149.579 / 0.8);
  --color-green-500-70: oklch(72.3% 0.219 149.579 / 0.7);
  --color-green-500-60: oklch(72.3% 0.219 149.579 / 0.6);
  --color-green-500-50: oklch(72.3% 0.219 149.579 / 0.5);
  --color-green-500-40: oklch(72.3% 0.219 149.579 / 0.4);
  --color-green-500-34: oklch(72.3% 0.219 149.579 / 0.34);
  --color-green-500-30: oklch(72.3% 0.219 149.579 / 0.3);
  --color-green-500-26: oklch(72.3% 0.219 149.579 / 0.26);
  --color-green-500-24: oklch(72.3% 0.219 149.579 / 0.24);
  --color-green-500-20: oklch(72.3% 0.219 149.579 / 0.2);
  --color-green-500-18: oklch(72.3% 0.219 149.579 / 0.18);
  --color-green-500-16: oklch(72.3% 0.219 149.579 / 0.16);
  --color-green-500-12: oklch(72.3% 0.219 149.579 / 0.12);
  --color-green-500-10: oklch(72.3% 0.219 149.579 / 0.1);
  --color-green-500-5: oklch(72.3% 0.219 149.579 / 0.05);
  /* --color-green-600 */
  --color-green-600-100: oklch(62.7% 0.194 149.214 / 1);
  --color-green-600-90: oklch(62.7% 0.194 149.214 / 0.9);
  --color-green-600-80: oklch(62.7% 0.194 149.214 / 0.8);
  --color-green-600-70: oklch(62.7% 0.194 149.214 / 0.7);
  --color-green-600-60: oklch(62.7% 0.194 149.214 / 0.6);
  --color-green-600-50: oklch(62.7% 0.194 149.214 / 0.5);
  --color-green-600-40: oklch(62.7% 0.194 149.214 / 0.4);
  --color-green-600-30: oklch(62.7% 0.194 149.214 / 0.3);
  --color-green-600-20: oklch(62.7% 0.194 149.214 / 0.2);
  --color-green-600-10: oklch(62.7% 0.194 149.214 / 0.1);
  --color-green-600-5: oklch(62.7% 0.194 149.214 / 0.05);
  /* --color-green-700 */
  --color-green-700-100: oklch(52.7% 0.154 150.069 / 1);
  --color-green-700-90: oklch(52.7% 0.154 150.069 / 0.9);
  --color-green-700-80: oklch(52.7% 0.154 150.069 / 0.8);
  --color-green-700-70: oklch(52.7% 0.154 150.069 / 0.7);
  --color-green-700-60: oklch(52.7% 0.154 150.069 / 0.6);
  --color-green-700-50: oklch(52.7% 0.154 150.069 / 0.5);
  --color-green-700-40: oklch(52.7% 0.154 150.069 / 0.4);
  --color-green-700-30: oklch(52.7% 0.154 150.069 / 0.3);
  --color-green-700-20: oklch(52.7% 0.154 150.069 / 0.2);
  --color-green-700-10: oklch(52.7% 0.154 150.069 / 0.1);
  --color-green-700-5: oklch(52.7% 0.154 150.069 / 0.05);
  /* --color-green-800 */
  --color-green-800-100: oklch(44.8% 0.119 151.328 / 1);
  --color-green-800-90: oklch(44.8% 0.119 151.328 / 0.9);
  --color-green-800-80: oklch(44.8% 0.119 151.328 / 0.8);
  --color-green-800-70: oklch(44.8% 0.119 151.328 / 0.7);
  --color-green-800-60: oklch(44.8% 0.119 151.328 / 0.6);
  --color-green-800-50: oklch(44.8% 0.119 151.328 / 0.5);
  --color-green-800-40: oklch(44.8% 0.119 151.328 / 0.4);
  --color-green-800-30: oklch(44.8% 0.119 151.328 / 0.3);
  --color-green-800-20: oklch(44.8% 0.119 151.328 / 0.2);
  --color-green-800-10: oklch(44.8% 0.119 151.328 / 0.1);
  --color-green-800-5: oklch(44.8% 0.119 151.328 / 0.05);
  /* --color-green-900 */
  --color-green-900-100: oklch(39.3% 0.095 152.535 / 1);
  --color-green-900-90: oklch(39.3% 0.095 152.535 / 0.9);
  --color-green-900-80: oklch(39.3% 0.095 152.535 / 0.8);
  --color-green-900-70: oklch(39.3% 0.095 152.535 / 0.7);
  --color-green-900-60: oklch(39.3% 0.095 152.535 / 0.6);
  --color-green-900-50: oklch(39.3% 0.095 152.535 / 0.5);
  --color-green-900-40: oklch(39.3% 0.095 152.535 / 0.4);
  --color-green-900-30: oklch(39.3% 0.095 152.535 / 0.3);
  --color-green-900-20: oklch(39.3% 0.095 152.535 / 0.2);
  --color-green-900-10: oklch(39.3% 0.095 152.535 / 0.1);
  --color-green-900-5: oklch(39.3% 0.095 152.535 / 0.05);
  /* --color-green-950 */
  --color-green-950-100: oklch(26.6% 0.065 152.934 / 1);
  --color-green-950-90: oklch(26.6% 0.065 152.934 / 0.9);
  --color-green-950-80: oklch(26.6% 0.065 152.934 / 0.8);
  --color-green-950-70: oklch(26.6% 0.065 152.934 / 0.7);
  --color-green-950-60: oklch(26.6% 0.065 152.934 / 0.6);
  --color-green-950-50: oklch(26.6% 0.065 152.934 / 0.5);
  --color-green-950-40: oklch(26.6% 0.065 152.934 / 0.4);
  --color-green-950-30: oklch(26.6% 0.065 152.934 / 0.3);
  --color-green-950-20: oklch(26.6% 0.065 152.934 / 0.2);
  --color-green-950-10: oklch(26.6% 0.065 152.934 / 0.1);
  --color-green-950-5: oklch(26.6% 0.065 152.934 / 0.05);
  /* Emerald */
  --color-emerald-50: oklch(97.9% 0.021 166.113);
  --color-emerald-100: oklch(95% 0.052 163.051);
  --color-emerald-200: oklch(90.5% 0.093 164.15);
  --color-emerald-300: oklch(84.5% 0.143 164.978);
  --color-emerald-400: oklch(76.5% 0.177 163.223);
  --color-emerald-500: oklch(69.6% 0.17 162.48);
  --color-emerald-600: oklch(59.6% 0.145 163.225);
  --color-emerald-700: oklch(50.8% 0.118 165.612);
  --color-emerald-800: oklch(43.2% 0.095 166.913);
  --color-emerald-900: oklch(37.8% 0.077 168.94);
  --color-emerald-950: oklch(26.2% 0.051 172.552);
  /* --color-emerald-50 */
  --color-emerald-50-100: oklch(97.9% 0.021 166.113 / 1);
  --color-emerald-50-90: oklch(97.9% 0.021 166.113 / 0.9);
  --color-emerald-50-80: oklch(97.9% 0.021 166.113 / 0.8);
  --color-emerald-50-70: oklch(97.9% 0.021 166.113 / 0.7);
  --color-emerald-50-60: oklch(97.9% 0.021 166.113 / 0.6);
  --color-emerald-50-50: oklch(97.9% 0.021 166.113 / 0.5);
  --color-emerald-50-40: oklch(97.9% 0.021 166.113 / 0.4);
  --color-emerald-50-30: oklch(97.9% 0.021 166.113 / 0.3);
  --color-emerald-50-20: oklch(97.9% 0.021 166.113 / 0.2);
  --color-emerald-50-10: oklch(97.9% 0.021 166.113 / 0.1);
  --color-emerald-50-5: oklch(97.9% 0.021 166.113 / 0.05);
  /* --color-emerald-100 */
  --color-emerald-100-100: oklch(95% 0.052 163.051 / 1);
  --color-emerald-100-90: oklch(95% 0.052 163.051 / 0.9);
  --color-emerald-100-80: oklch(95% 0.052 163.051 / 0.8);
  --color-emerald-100-70: oklch(95% 0.052 163.051 / 0.7);
  --color-emerald-100-60: oklch(95% 0.052 163.051 / 0.6);
  --color-emerald-100-50: oklch(95% 0.052 163.051 / 0.5);
  --color-emerald-100-40: oklch(95% 0.052 163.051 / 0.4);
  --color-emerald-100-30: oklch(95% 0.052 163.051 / 0.3);
  --color-emerald-100-20: oklch(95% 0.052 163.051 / 0.2);
  --color-emerald-100-10: oklch(95% 0.052 163.051 / 0.1);
  --color-emerald-100-5: oklch(95% 0.052 163.051 / 0.05);
  /* --color-emerald-200 */
  --color-emerald-200-100: oklch(90.5% 0.093 164.15 / 1);
  --color-emerald-200-90: oklch(90.5% 0.093 164.15 / 0.9);
  --color-emerald-200-80: oklch(90.5% 0.093 164.15 / 0.8);
  --color-emerald-200-70: oklch(90.5% 0.093 164.15 / 0.7);
  --color-emerald-200-60: oklch(90.5% 0.093 164.15 / 0.6);
  --color-emerald-200-50: oklch(90.5% 0.093 164.15 / 0.5);
  --color-emerald-200-40: oklch(90.5% 0.093 164.15 / 0.4);
  --color-emerald-200-30: oklch(90.5% 0.093 164.15 / 0.3);
  --color-emerald-200-20: oklch(90.5% 0.093 164.15 / 0.2);
  --color-emerald-200-10: oklch(90.5% 0.093 164.15 / 0.1);
  --color-emerald-200-5: oklch(90.5% 0.093 164.15 / 0.05);
  /* --color-emerald-300 */
  --color-emerald-300-100: oklch(84.5% 0.143 164.978 / 1);
  --color-emerald-300-90: oklch(84.5% 0.143 164.978 / 0.9);
  --color-emerald-300-80: oklch(84.5% 0.143 164.978 / 0.8);
  --color-emerald-300-70: oklch(84.5% 0.143 164.978 / 0.7);
  --color-emerald-300-60: oklch(84.5% 0.143 164.978 / 0.6);
  --color-emerald-300-50: oklch(84.5% 0.143 164.978 / 0.5);
  --color-emerald-300-40: oklch(84.5% 0.143 164.978 / 0.4);
  --color-emerald-300-30: oklch(84.5% 0.143 164.978 / 0.3);
  --color-emerald-300-20: oklch(84.5% 0.143 164.978 / 0.2);
  --color-emerald-300-10: oklch(84.5% 0.143 164.978 / 0.1);
  --color-emerald-300-5: oklch(84.5% 0.143 164.978 / 0.05);
  /* --color-emerald-400 */
  --color-emerald-400-100: oklch(76.5% 0.177 163.223 / 1);
  --color-emerald-400-90: oklch(76.5% 0.177 163.223 / 0.9);
  --color-emerald-400-80: oklch(76.5% 0.177 163.223 / 0.8);
  --color-emerald-400-70: oklch(76.5% 0.177 163.223 / 0.7);
  --color-emerald-400-60: oklch(76.5% 0.177 163.223 / 0.6);
  --color-emerald-400-50: oklch(76.5% 0.177 163.223 / 0.5);
  --color-emerald-400-40: oklch(76.5% 0.177 163.223 / 0.4);
  --color-emerald-400-30: oklch(76.5% 0.177 163.223 / 0.3);
  --color-emerald-400-20: oklch(76.5% 0.177 163.223 / 0.2);
  --color-emerald-400-10: oklch(76.5% 0.177 163.223 / 0.1);
  --color-emerald-400-5: oklch(76.5% 0.177 163.223 / 0.05);
  /* --color-emerald-500 */
  --color-emerald-500-100: oklch(69.6% 0.17 162.48 / 1);
  --color-emerald-500-90: oklch(69.6% 0.17 162.48 / 0.9);
  --color-emerald-500-80: oklch(69.6% 0.17 162.48 / 0.8);
  --color-emerald-500-70: oklch(69.6% 0.17 162.48 / 0.7);
  --color-emerald-500-60: oklch(69.6% 0.17 162.48 / 0.6);
  --color-emerald-500-50: oklch(69.6% 0.17 162.48 / 0.5);
  --color-emerald-500-40: oklch(69.6% 0.17 162.48 / 0.4);
  --color-emerald-500-30: oklch(69.6% 0.17 162.48 / 0.3);
  --color-emerald-500-20: oklch(69.6% 0.17 162.48 / 0.2);
  --color-emerald-500-10: oklch(69.6% 0.17 162.48 / 0.1);
  --color-emerald-500-5: oklch(69.6% 0.17 162.48 / 0.05);
  /* --color-emerald-600 */
  --color-emerald-600-100: oklch(59.6% 0.145 163.225 / 1);
  --color-emerald-600-90: oklch(59.6% 0.145 163.225 / 0.9);
  --color-emerald-600-80: oklch(59.6% 0.145 163.225 / 0.8);
  --color-emerald-600-70: oklch(59.6% 0.145 163.225 / 0.7);
  --color-emerald-600-60: oklch(59.6% 0.145 163.225 / 0.6);
  --color-emerald-600-50: oklch(59.6% 0.145 163.225 / 0.5);
  --color-emerald-600-40: oklch(59.6% 0.145 163.225 / 0.4);
  --color-emerald-600-30: oklch(59.6% 0.145 163.225 / 0.3);
  --color-emerald-600-20: oklch(59.6% 0.145 163.225 / 0.2);
  --color-emerald-600-10: oklch(59.6% 0.145 163.225 / 0.1);
  --color-emerald-600-5: oklch(59.6% 0.145 163.225 / 0.05);
  /* --color-emerald-700 */
  --color-emerald-700-100: oklch(50.8% 0.118 165.612 / 1);
  --color-emerald-700-90: oklch(50.8% 0.118 165.612 / 0.9);
  --color-emerald-700-80: oklch(50.8% 0.118 165.612 / 0.8);
  --color-emerald-700-70: oklch(50.8% 0.118 165.612 / 0.7);
  --color-emerald-700-60: oklch(50.8% 0.118 165.612 / 0.6);
  --color-emerald-700-50: oklch(50.8% 0.118 165.612 / 0.5);
  --color-emerald-700-40: oklch(50.8% 0.118 165.612 / 0.4);
  --color-emerald-700-30: oklch(50.8% 0.118 165.612 / 0.3);
  --color-emerald-700-20: oklch(50.8% 0.118 165.612 / 0.2);
  --color-emerald-700-10: oklch(50.8% 0.118 165.612 / 0.1);
  --color-emerald-700-5: oklch(50.8% 0.118 165.612 / 0.05);
  /* --color-emerald-800 */
  --color-emerald-800-100: oklch(43.2% 0.095 166.913 / 1);
  --color-emerald-800-90: oklch(43.2% 0.095 166.913 / 0.9);
  --color-emerald-800-80: oklch(43.2% 0.095 166.913 / 0.8);
  --color-emerald-800-70: oklch(43.2% 0.095 166.913 / 0.7);
  --color-emerald-800-60: oklch(43.2% 0.095 166.913 / 0.6);
  --color-emerald-800-50: oklch(43.2% 0.095 166.913 / 0.5);
  --color-emerald-800-40: oklch(43.2% 0.095 166.913 / 0.4);
  --color-emerald-800-30: oklch(43.2% 0.095 166.913 / 0.3);
  --color-emerald-800-20: oklch(43.2% 0.095 166.913 / 0.2);
  --color-emerald-800-10: oklch(43.2% 0.095 166.913 / 0.1);
  --color-emerald-800-5: oklch(43.2% 0.095 166.913 / 0.05);
  /* --color-emerald-900 */
  --color-emerald-900-100: oklch(37.8% 0.077 168.94 / 1);
  --color-emerald-900-90: oklch(37.8% 0.077 168.94 / 0.9);
  --color-emerald-900-80: oklch(37.8% 0.077 168.94 / 0.8);
  --color-emerald-900-70: oklch(37.8% 0.077 168.94 / 0.7);
  --color-emerald-900-60: oklch(37.8% 0.077 168.94 / 0.6);
  --color-emerald-900-50: oklch(37.8% 0.077 168.94 / 0.5);
  --color-emerald-900-40: oklch(37.8% 0.077 168.94 / 0.4);
  --color-emerald-900-30: oklch(37.8% 0.077 168.94 / 0.3);
  --color-emerald-900-20: oklch(37.8% 0.077 168.94 / 0.2);
  --color-emerald-900-10: oklch(37.8% 0.077 168.94 / 0.1);
  --color-emerald-900-5: oklch(37.8% 0.077 168.94 / 0.05);
  /* --color-emerald-950 */
  --color-emerald-950-100: oklch(26.2% 0.051 172.552 / 1);
  --color-emerald-950-90: oklch(26.2% 0.051 172.552 / 0.9);
  --color-emerald-950-80: oklch(26.2% 0.051 172.552 / 0.8);
  --color-emerald-950-70: oklch(26.2% 0.051 172.552 / 0.7);
  --color-emerald-950-60: oklch(26.2% 0.051 172.552 / 0.6);
  --color-emerald-950-50: oklch(26.2% 0.051 172.552 / 0.5);
  --color-emerald-950-40: oklch(26.2% 0.051 172.552 / 0.4);
  --color-emerald-950-30: oklch(26.2% 0.051 172.552 / 0.3);
  --color-emerald-950-20: oklch(26.2% 0.051 172.552 / 0.2);
  --color-emerald-950-10: oklch(26.2% 0.051 172.552 / 0.1);
  --color-emerald-950-5: oklch(26.2% 0.051 172.552 / 0.05);
  /* Teal */
  --color-teal-50: oklch(98.4% 0.014 180.72);
  --color-teal-100: oklch(95.3% 0.051 180.801);
  --color-teal-200: oklch(91% 0.096 180.426);
  --color-teal-300: oklch(85.5% 0.138 181.071);
  --color-teal-400: oklch(77.7% 0.152 181.912);
  --color-teal-500: oklch(70.4% 0.14 182.503);
  --color-teal-600: oklch(60% 0.118 184.704);
  --color-teal-700: oklch(51.1% 0.096 186.391);
  --color-teal-800: oklch(43.7% 0.078 188.216);
  --color-teal-900: oklch(38.6% 0.063 188.416);
  --color-teal-950: oklch(27.7% 0.046 192.524);
  /* --color-teal-50 */
  --color-teal-50-100: oklch(98.4% 0.014 180.72 / 1);
  --color-teal-50-90: oklch(98.4% 0.014 180.72 / 0.9);
  --color-teal-50-80: oklch(98.4% 0.014 180.72 / 0.8);
  --color-teal-50-70: oklch(98.4% 0.014 180.72 / 0.7);
  --color-teal-50-60: oklch(98.4% 0.014 180.72 / 0.6);
  --color-teal-50-50: oklch(98.4% 0.014 180.72 / 0.5);
  --color-teal-50-40: oklch(98.4% 0.014 180.72 / 0.4);
  --color-teal-50-30: oklch(98.4% 0.014 180.72 / 0.3);
  --color-teal-50-20: oklch(98.4% 0.014 180.72 / 0.2);
  --color-teal-50-10: oklch(98.4% 0.014 180.72 / 0.1);
  --color-teal-50-5: oklch(98.4% 0.014 180.72 / 0.05);
  /* --color-teal-100 */
  --color-teal-100-100: oklch(95.3% 0.051 180.801 / 1);
  --color-teal-100-90: oklch(95.3% 0.051 180.801 / 0.9);
  --color-teal-100-80: oklch(95.3% 0.051 180.801 / 0.8);
  --color-teal-100-70: oklch(95.3% 0.051 180.801 / 0.7);
  --color-teal-100-60: oklch(95.3% 0.051 180.801 / 0.6);
  --color-teal-100-50: oklch(95.3% 0.051 180.801 / 0.5);
  --color-teal-100-40: oklch(95.3% 0.051 180.801 / 0.4);
  --color-teal-100-30: oklch(95.3% 0.051 180.801 / 0.3);
  --color-teal-100-20: oklch(95.3% 0.051 180.801 / 0.2);
  --color-teal-100-10: oklch(95.3% 0.051 180.801 / 0.1);
  --color-teal-100-5: oklch(95.3% 0.051 180.801 / 0.05);
  /* --color-teal-200 */
  --color-teal-200-100: oklch(91% 0.096 180.426 / 1);
  --color-teal-200-90: oklch(91% 0.096 180.426 / 0.9);
  --color-teal-200-80: oklch(91% 0.096 180.426 / 0.8);
  --color-teal-200-70: oklch(91% 0.096 180.426 / 0.7);
  --color-teal-200-60: oklch(91% 0.096 180.426 / 0.6);
  --color-teal-200-50: oklch(91% 0.096 180.426 / 0.5);
  --color-teal-200-40: oklch(91% 0.096 180.426 / 0.4);
  --color-teal-200-30: oklch(91% 0.096 180.426 / 0.3);
  --color-teal-200-20: oklch(91% 0.096 180.426 / 0.2);
  --color-teal-200-10: oklch(91% 0.096 180.426 / 0.1);
  --color-teal-200-5: oklch(91% 0.096 180.426 / 0.05);
  /* --color-teal-300 */
  --color-teal-300-100: oklch(85.5% 0.138 181.071 / 1);
  --color-teal-300-90: oklch(85.5% 0.138 181.071 / 0.9);
  --color-teal-300-80: oklch(85.5% 0.138 181.071 / 0.8);
  --color-teal-300-70: oklch(85.5% 0.138 181.071 / 0.7);
  --color-teal-300-60: oklch(85.5% 0.138 181.071 / 0.6);
  --color-teal-300-50: oklch(85.5% 0.138 181.071 / 0.5);
  --color-teal-300-40: oklch(85.5% 0.138 181.071 / 0.4);
  --color-teal-300-30: oklch(85.5% 0.138 181.071 / 0.3);
  --color-teal-300-20: oklch(85.5% 0.138 181.071 / 0.2);
  --color-teal-300-10: oklch(85.5% 0.138 181.071 / 0.1);
  --color-teal-300-5: oklch(85.5% 0.138 181.071 / 0.05);
  /* --color-teal-400 */
  --color-teal-400-100: oklch(77.7% 0.152 181.912 / 1);
  --color-teal-400-90: oklch(77.7% 0.152 181.912 / 0.9);
  --color-teal-400-80: oklch(77.7% 0.152 181.912 / 0.8);
  --color-teal-400-70: oklch(77.7% 0.152 181.912 / 0.7);
  --color-teal-400-60: oklch(77.7% 0.152 181.912 / 0.6);
  --color-teal-400-50: oklch(77.7% 0.152 181.912 / 0.5);
  --color-teal-400-40: oklch(77.7% 0.152 181.912 / 0.4);
  --color-teal-400-30: oklch(77.7% 0.152 181.912 / 0.3);
  --color-teal-400-20: oklch(77.7% 0.152 181.912 / 0.2);
  --color-teal-400-10: oklch(77.7% 0.152 181.912 / 0.1);
  --color-teal-400-5: oklch(77.7% 0.152 181.912 / 0.05);
  /* --color-teal-500 */
  --color-teal-500-100: oklch(70.4% 0.14 182.503 / 1);
  --color-teal-500-90: oklch(70.4% 0.14 182.503 / 0.9);
  --color-teal-500-80: oklch(70.4% 0.14 182.503 / 0.8);
  --color-teal-500-70: oklch(70.4% 0.14 182.503 / 0.7);
  --color-teal-500-60: oklch(70.4% 0.14 182.503 / 0.6);
  --color-teal-500-50: oklch(70.4% 0.14 182.503 / 0.5);
  --color-teal-500-40: oklch(70.4% 0.14 182.503 / 0.4);
  --color-teal-500-30: oklch(70.4% 0.14 182.503 / 0.3);
  --color-teal-500-20: oklch(70.4% 0.14 182.503 / 0.2);
  --color-teal-500-10: oklch(70.4% 0.14 182.503 / 0.1);
  --color-teal-500-5: oklch(70.4% 0.14 182.503 / 0.05);
  /* --color-teal-600 */
  --color-teal-600-100: oklch(60% 0.118 184.704 / 1);
  --color-teal-600-90: oklch(60% 0.118 184.704 / 0.9);
  --color-teal-600-80: oklch(60% 0.118 184.704 / 0.8);
  --color-teal-600-70: oklch(60% 0.118 184.704 / 0.7);
  --color-teal-600-60: oklch(60% 0.118 184.704 / 0.6);
  --color-teal-600-50: oklch(60% 0.118 184.704 / 0.5);
  --color-teal-600-40: oklch(60% 0.118 184.704 / 0.4);
  --color-teal-600-30: oklch(60% 0.118 184.704 / 0.3);
  --color-teal-600-20: oklch(60% 0.118 184.704 / 0.2);
  --color-teal-600-10: oklch(60% 0.118 184.704 / 0.1);
  --color-teal-600-5: oklch(60% 0.118 184.704 / 0.05);
  /* --color-teal-700 */
  --color-teal-700-100: oklch(51.1% 0.096 186.391 / 1);
  --color-teal-700-90: oklch(51.1% 0.096 186.391 / 0.9);
  --color-teal-700-80: oklch(51.1% 0.096 186.391 / 0.8);
  --color-teal-700-70: oklch(51.1% 0.096 186.391 / 0.7);
  --color-teal-700-60: oklch(51.1% 0.096 186.391 / 0.6);
  --color-teal-700-50: oklch(51.1% 0.096 186.391 / 0.5);
  --color-teal-700-40: oklch(51.1% 0.096 186.391 / 0.4);
  --color-teal-700-30: oklch(51.1% 0.096 186.391 / 0.3);
  --color-teal-700-20: oklch(51.1% 0.096 186.391 / 0.2);
  --color-teal-700-10: oklch(51.1% 0.096 186.391 / 0.1);
  --color-teal-700-5: oklch(51.1% 0.096 186.391 / 0.05);
  /* --color-teal-800 */
  --color-teal-800-100: oklch(43.7% 0.078 188.216 / 1);
  --color-teal-800-90: oklch(43.7% 0.078 188.216 / 0.9);
  --color-teal-800-80: oklch(43.7% 0.078 188.216 / 0.8);
  --color-teal-800-70: oklch(43.7% 0.078 188.216 / 0.7);
  --color-teal-800-60: oklch(43.7% 0.078 188.216 / 0.6);
  --color-teal-800-50: oklch(43.7% 0.078 188.216 / 0.5);
  --color-teal-800-40: oklch(43.7% 0.078 188.216 / 0.4);
  --color-teal-800-30: oklch(43.7% 0.078 188.216 / 0.3);
  --color-teal-800-20: oklch(43.7% 0.078 188.216 / 0.2);
  --color-teal-800-10: oklch(43.7% 0.078 188.216 / 0.1);
  --color-teal-800-5: oklch(43.7% 0.078 188.216 / 0.05);
  /* --color-teal-900 */
  --color-teal-900-100: oklch(38.6% 0.063 188.416 / 1);
  --color-teal-900-90: oklch(38.6% 0.063 188.416 / 0.9);
  --color-teal-900-80: oklch(38.6% 0.063 188.416 / 0.8);
  --color-teal-900-70: oklch(38.6% 0.063 188.416 / 0.7);
  --color-teal-900-60: oklch(38.6% 0.063 188.416 / 0.6);
  --color-teal-900-50: oklch(38.6% 0.063 188.416 / 0.5);
  --color-teal-900-40: oklch(38.6% 0.063 188.416 / 0.4);
  --color-teal-900-30: oklch(38.6% 0.063 188.416 / 0.3);
  --color-teal-900-20: oklch(38.6% 0.063 188.416 / 0.2);
  --color-teal-900-10: oklch(38.6% 0.063 188.416 / 0.1);
  --color-teal-900-5: oklch(38.6% 0.063 188.416 / 0.05);
  /* --color-teal-950 */
  --color-teal-950-100: oklch(27.7% 0.046 192.524 / 1);
  --color-teal-950-90: oklch(27.7% 0.046 192.524 / 0.9);
  --color-teal-950-80: oklch(27.7% 0.046 192.524 / 0.8);
  --color-teal-950-70: oklch(27.7% 0.046 192.524 / 0.7);
  --color-teal-950-60: oklch(27.7% 0.046 192.524 / 0.6);
  --color-teal-950-50: oklch(27.7% 0.046 192.524 / 0.5);
  --color-teal-950-40: oklch(27.7% 0.046 192.524 / 0.4);
  --color-teal-950-30: oklch(27.7% 0.046 192.524 / 0.3);
  --color-teal-950-20: oklch(27.7% 0.046 192.524 / 0.2);
  --color-teal-950-10: oklch(27.7% 0.046 192.524 / 0.1);
  --color-teal-950-5: oklch(27.7% 0.046 192.524 / 0.05);
  /* Cyan */
  --color-cyan-50: oklch(98.4% 0.019 200.873);
  --color-cyan-100: oklch(95.6% 0.045 203.388);
  --color-cyan-200: oklch(91.7% 0.08 205.041);
  --color-cyan-300: oklch(86.5% 0.127 207.078);
  --color-cyan-400: oklch(78.9% 0.154 211.53);
  --color-cyan-500: oklch(71.5% 0.143 215.221);
  --color-cyan-600: oklch(60.9% 0.126 221.723);
  --color-cyan-700: oklch(52% 0.105 223.128);
  --color-cyan-800: oklch(45% 0.085 224.283);
  --color-cyan-900: oklch(39.8% 0.07 227.392);
  --color-cyan-950: oklch(30.2% 0.056 229.695);
  /* --color-cyan-50 */
  --color-cyan-50-100: oklch(98.4% 0.019 200.873 / 1);
  --color-cyan-50-90: oklch(98.4% 0.019 200.873 / 0.9);
  --color-cyan-50-80: oklch(98.4% 0.019 200.873 / 0.8);
  --color-cyan-50-70: oklch(98.4% 0.019 200.873 / 0.7);
  --color-cyan-50-60: oklch(98.4% 0.019 200.873 / 0.6);
  --color-cyan-50-50: oklch(98.4% 0.019 200.873 / 0.5);
  --color-cyan-50-40: oklch(98.4% 0.019 200.873 / 0.4);
  --color-cyan-50-30: oklch(98.4% 0.019 200.873 / 0.3);
  --color-cyan-50-20: oklch(98.4% 0.019 200.873 / 0.2);
  --color-cyan-50-10: oklch(98.4% 0.019 200.873 / 0.1);
  --color-cyan-50-5: oklch(98.4% 0.019 200.873 / 0.05);
  /* --color-cyan-100 */
  --color-cyan-100-100: oklch(95.6% 0.045 203.388 / 1);
  --color-cyan-100-90: oklch(95.6% 0.045 203.388 / 0.9);
  --color-cyan-100-80: oklch(95.6% 0.045 203.388 / 0.8);
  --color-cyan-100-70: oklch(95.6% 0.045 203.388 / 0.7);
  --color-cyan-100-60: oklch(95.6% 0.045 203.388 / 0.6);
  --color-cyan-100-50: oklch(95.6% 0.045 203.388 / 0.5);
  --color-cyan-100-40: oklch(95.6% 0.045 203.388 / 0.4);
  --color-cyan-100-30: oklch(95.6% 0.045 203.388 / 0.3);
  --color-cyan-100-20: oklch(95.6% 0.045 203.388 / 0.2);
  --color-cyan-100-10: oklch(95.6% 0.045 203.388 / 0.1);
  --color-cyan-100-5: oklch(95.6% 0.045 203.388 / 0.05);
  /* --color-cyan-200 */
  --color-cyan-200-100: oklch(91.7% 0.08 205.041 / 1);
  --color-cyan-200-90: oklch(91.7% 0.08 205.041 / 0.9);
  --color-cyan-200-80: oklch(91.7% 0.08 205.041 / 0.8);
  --color-cyan-200-70: oklch(91.7% 0.08 205.041 / 0.7);
  --color-cyan-200-60: oklch(91.7% 0.08 205.041 / 0.6);
  --color-cyan-200-50: oklch(91.7% 0.08 205.041 / 0.5);
  --color-cyan-200-40: oklch(91.7% 0.08 205.041 / 0.4);
  --color-cyan-200-30: oklch(91.7% 0.08 205.041 / 0.3);
  --color-cyan-200-20: oklch(91.7% 0.08 205.041 / 0.2);
  --color-cyan-200-10: oklch(91.7% 0.08 205.041 / 0.1);
  --color-cyan-200-5: oklch(91.7% 0.08 205.041 / 0.05);
  /* --color-cyan-300 */
  --color-cyan-300-100: oklch(86.5% 0.127 207.078 / 1);
  --color-cyan-300-90: oklch(86.5% 0.127 207.078 / 0.9);
  --color-cyan-300-80: oklch(86.5% 0.127 207.078 / 0.8);
  --color-cyan-300-70: oklch(86.5% 0.127 207.078 / 0.7);
  --color-cyan-300-60: oklch(86.5% 0.127 207.078 / 0.6);
  --color-cyan-300-50: oklch(86.5% 0.127 207.078 / 0.5);
  --color-cyan-300-40: oklch(86.5% 0.127 207.078 / 0.4);
  --color-cyan-300-30: oklch(86.5% 0.127 207.078 / 0.3);
  --color-cyan-300-20: oklch(86.5% 0.127 207.078 / 0.2);
  --color-cyan-300-10: oklch(86.5% 0.127 207.078 / 0.1);
  --color-cyan-300-5: oklch(86.5% 0.127 207.078 / 0.05);
  /* --color-cyan-400 */
  --color-cyan-400-100: oklch(78.9% 0.154 211.53 / 1);
  --color-cyan-400-90: oklch(78.9% 0.154 211.53 / 0.9);
  --color-cyan-400-80: oklch(78.9% 0.154 211.53 / 0.8);
  --color-cyan-400-70: oklch(78.9% 0.154 211.53 / 0.7);
  --color-cyan-400-60: oklch(78.9% 0.154 211.53 / 0.6);
  --color-cyan-400-50: oklch(78.9% 0.154 211.53 / 0.5);
  --color-cyan-400-40: oklch(78.9% 0.154 211.53 / 0.4);
  --color-cyan-400-30: oklch(78.9% 0.154 211.53 / 0.3);
  --color-cyan-400-20: oklch(78.9% 0.154 211.53 / 0.2);
  --color-cyan-400-10: oklch(78.9% 0.154 211.53 / 0.1);
  --color-cyan-400-5: oklch(78.9% 0.154 211.53 / 0.05);
  /* --color-cyan-500 */
  --color-cyan-500-100: oklch(71.5% 0.143 215.221 / 1);
  --color-cyan-500-90: oklch(71.5% 0.143 215.221 / 0.9);
  --color-cyan-500-80: oklch(71.5% 0.143 215.221 / 0.8);
  --color-cyan-500-70: oklch(71.5% 0.143 215.221 / 0.7);
  --color-cyan-500-60: oklch(71.5% 0.143 215.221 / 0.6);
  --color-cyan-500-50: oklch(71.5% 0.143 215.221 / 0.5);
  --color-cyan-500-40: oklch(71.5% 0.143 215.221 / 0.4);
  --color-cyan-500-30: oklch(71.5% 0.143 215.221 / 0.3);
  --color-cyan-500-20: oklch(71.5% 0.143 215.221 / 0.2);
  --color-cyan-500-10: oklch(71.5% 0.143 215.221 / 0.1);
  --color-cyan-500-5: oklch(71.5% 0.143 215.221 / 0.05);
  /* --color-cyan-600 */
  --color-cyan-600-100: oklch(60.9% 0.126 221.723 / 1);
  --color-cyan-600-90: oklch(60.9% 0.126 221.723 / 0.9);
  --color-cyan-600-80: oklch(60.9% 0.126 221.723 / 0.8);
  --color-cyan-600-70: oklch(60.9% 0.126 221.723 / 0.7);
  --color-cyan-600-60: oklch(60.9% 0.126 221.723 / 0.6);
  --color-cyan-600-50: oklch(60.9% 0.126 221.723 / 0.5);
  --color-cyan-600-40: oklch(60.9% 0.126 221.723 / 0.4);
  --color-cyan-600-30: oklch(60.9% 0.126 221.723 / 0.3);
  --color-cyan-600-20: oklch(60.9% 0.126 221.723 / 0.2);
  --color-cyan-600-10: oklch(60.9% 0.126 221.723 / 0.1);
  --color-cyan-600-5: oklch(60.9% 0.126 221.723 / 0.05);
  /* --color-cyan-700 */
  --color-cyan-700-100: oklch(52% 0.105 223.128 / 1);
  --color-cyan-700-90: oklch(52% 0.105 223.128 / 0.9);
  --color-cyan-700-80: oklch(52% 0.105 223.128 / 0.8);
  --color-cyan-700-70: oklch(52% 0.105 223.128 / 0.7);
  --color-cyan-700-60: oklch(52% 0.105 223.128 / 0.6);
  --color-cyan-700-50: oklch(52% 0.105 223.128 / 0.5);
  --color-cyan-700-40: oklch(52% 0.105 223.128 / 0.4);
  --color-cyan-700-30: oklch(52% 0.105 223.128 / 0.3);
  --color-cyan-700-20: oklch(52% 0.105 223.128 / 0.2);
  --color-cyan-700-10: oklch(52% 0.105 223.128 / 0.1);
  --color-cyan-700-5: oklch(52% 0.105 223.128 / 0.05);
  /* --color-cyan-800 */
  --color-cyan-800-100: oklch(45% 0.085 224.283 / 1);
  --color-cyan-800-90: oklch(45% 0.085 224.283 / 0.9);
  --color-cyan-800-80: oklch(45% 0.085 224.283 / 0.8);
  --color-cyan-800-70: oklch(45% 0.085 224.283 / 0.7);
  --color-cyan-800-60: oklch(45% 0.085 224.283 / 0.6);
  --color-cyan-800-50: oklch(45% 0.085 224.283 / 0.5);
  --color-cyan-800-40: oklch(45% 0.085 224.283 / 0.4);
  --color-cyan-800-30: oklch(45% 0.085 224.283 / 0.3);
  --color-cyan-800-20: oklch(45% 0.085 224.283 / 0.2);
  --color-cyan-800-10: oklch(45% 0.085 224.283 / 0.1);
  --color-cyan-800-5: oklch(45% 0.085 224.283 / 0.05);
  /* --color-cyan-900 */
  --color-cyan-900-100: oklch(39.8% 0.07 227.392 / 1);
  --color-cyan-900-90: oklch(39.8% 0.07 227.392 / 0.9);
  --color-cyan-900-80: oklch(39.8% 0.07 227.392 / 0.8);
  --color-cyan-900-70: oklch(39.8% 0.07 227.392 / 0.7);
  --color-cyan-900-60: oklch(39.8% 0.07 227.392 / 0.6);
  --color-cyan-900-50: oklch(39.8% 0.07 227.392 / 0.5);
  --color-cyan-900-40: oklch(39.8% 0.07 227.392 / 0.4);
  --color-cyan-900-30: oklch(39.8% 0.07 227.392 / 0.3);
  --color-cyan-900-20: oklch(39.8% 0.07 227.392 / 0.2);
  --color-cyan-900-10: oklch(39.8% 0.07 227.392 / 0.1);
  --color-cyan-900-5: oklch(39.8% 0.07 227.392 / 0.05);
  /* --color-cyan-950 */
  --color-cyan-950-100: oklch(30.2% 0.056 229.695 / 1);
  --color-cyan-950-90: oklch(30.2% 0.056 229.695 / 0.9);
  --color-cyan-950-80: oklch(30.2% 0.056 229.695 / 0.8);
  --color-cyan-950-70: oklch(30.2% 0.056 229.695 / 0.7);
  --color-cyan-950-60: oklch(30.2% 0.056 229.695 / 0.6);
  --color-cyan-950-50: oklch(30.2% 0.056 229.695 / 0.5);
  --color-cyan-950-40: oklch(30.2% 0.056 229.695 / 0.4);
  --color-cyan-950-30: oklch(30.2% 0.056 229.695 / 0.3);
  --color-cyan-950-20: oklch(30.2% 0.056 229.695 / 0.2);
  --color-cyan-950-10: oklch(30.2% 0.056 229.695 / 0.1);
  --color-cyan-950-5: oklch(30.2% 0.056 229.695 / 0.05);
  /* Mint */
  --color-mint-50: oklch(0.9809 0.0262 179.09);
  --color-mint-100: oklch(0.9568 0.0614 175.87);
  --color-mint-200: oklch(0.9275 0.1075 177.27);
  --color-mint-300: oklch(0.9035 0.1487 177.93);
  --color-mint-400: oklch(0.8862 0.17 173.1);
  --color-mint-500: oklch(0.8293 0.16085 171.9667);
  --color-mint-600: oklch(0.7146 0.136979 173.1815);
  --color-mint-700: oklch(0.6076 0.112781 176.8914);
  --color-mint-800: oklch(0.5125 0.0941 178.27);
  --color-mint-900: oklch(0.4447 0.0803 180.66);
  --color-mint-950: oklch(0.306 0.0544 183.34);
  --color-mint-50-100: oklch(0.9809 0.0262 179.09 / 1.0);
  --color-mint-50-90: oklch(0.9809 0.0262 179.09 / 0.9);
  --color-mint-50-80: oklch(0.9809 0.0262 179.09 / 0.8);
  --color-mint-50-70: oklch(0.9809 0.0262 179.09 / 0.7);
  --color-mint-50-60: oklch(0.9809 0.0262 179.09 / 0.6);
  --color-mint-50-50: oklch(0.9809 0.0262 179.09 / 0.5);
  --color-mint-50-40: oklch(0.9809 0.0262 179.09 / 0.4);
  --color-mint-50-30: oklch(0.9809 0.0262 179.09 / 0.3);
  --color-mint-50-20: oklch(0.9809 0.0262 179.09 / 0.2);
  --color-mint-50-10: oklch(0.9809 0.0262 179.09 / 0.1);
  --color-mint-50-5: oklch(0.9809 0.0262 179.09 / 0.05);
  --color-mint-100-100: oklch(0.9568 0.0614 175.87 / 1.0);
  --color-mint-100-90: oklch(0.9568 0.0614 175.87 / 0.9);
  --color-mint-100-80: oklch(0.9568 0.0614 175.87 / 0.8);
  --color-mint-100-70: oklch(0.9568 0.0614 175.87 / 0.7);
  --color-mint-100-60: oklch(0.9568 0.0614 175.87 / 0.6);
  --color-mint-100-50: oklch(0.9568 0.0614 175.87 / 0.5);
  --color-mint-100-40: oklch(0.9568 0.0614 175.87 / 0.4);
  --color-mint-100-30: oklch(0.9568 0.0614 175.87 / 0.3);
  --color-mint-100-20: oklch(0.9568 0.0614 175.87 / 0.2);
  --color-mint-100-10: oklch(0.9568 0.0614 175.87 / 0.1);
  --color-mint-100-5: oklch(0.9568 0.0614 175.87 / 0.05);
  --color-mint-200-100: oklch(0.9275 0.1075 177.27 / 1.0);
  --color-mint-200-90: oklch(0.9275 0.1075 177.27 / 0.9);
  --color-mint-200-80: oklch(0.9275 0.1075 177.27 / 0.8);
  --color-mint-200-70: oklch(0.9275 0.1075 177.27 / 0.7);
  --color-mint-200-60: oklch(0.9275 0.1075 177.27 / 0.6);
  --color-mint-200-50: oklch(0.9275 0.1075 177.27 / 0.5);
  --color-mint-200-40: oklch(0.9275 0.1075 177.27 / 0.4);
  --color-mint-200-30: oklch(0.9275 0.1075 177.27 / 0.3);
  --color-mint-200-20: oklch(0.9275 0.1075 177.27 / 0.2);
  --color-mint-200-10: oklch(0.9275 0.1075 177.27 / 0.1);
  --color-mint-200-5: oklch(0.9275 0.1075 177.27 / 0.05);
  --color-mint-300-100: oklch(0.9035 0.1487 177.93 / 1.0);
  --color-mint-300-90: oklch(0.9035 0.1487 177.93 / 0.9);
  --color-mint-300-80: oklch(0.9035 0.1487 177.93 / 0.8);
  --color-mint-300-70: oklch(0.9035 0.1487 177.93 / 0.7);
  --color-mint-300-60: oklch(0.9035 0.1487 177.93 / 0.6);
  --color-mint-300-50: oklch(0.9035 0.1487 177.93 / 0.5);
  --color-mint-300-40: oklch(0.9035 0.1487 177.93 / 0.4);
  --color-mint-300-30: oklch(0.9035 0.1487 177.93 / 0.3);
  --color-mint-300-20: oklch(0.9035 0.1487 177.93 / 0.2);
  --color-mint-300-10: oklch(0.9035 0.1487 177.93 / 0.1);
  --color-mint-300-5: oklch(0.9035 0.1487 177.93 / 0.05);
  --color-mint-400-100: oklch(0.8862 0.17 173.1 / 1.0);
  --color-mint-400-90: oklch(0.8862 0.17 173.1 / 0.9);
  --color-mint-400-80: oklch(0.8862 0.17 173.1 / 0.8);
  --color-mint-400-70: oklch(0.8862 0.17 173.1 / 0.7);
  --color-mint-400-60: oklch(0.8862 0.17 173.1 / 0.6);
  --color-mint-400-50: oklch(0.8862 0.17 173.1 / 0.5);
  --color-mint-400-40: oklch(0.8862 0.17 173.1 / 0.4);
  --color-mint-400-30: oklch(0.8862 0.17 173.1 / 0.3);
  --color-mint-400-20: oklch(0.8862 0.17 173.1 / 0.2);
  --color-mint-400-10: oklch(0.8862 0.17 173.1 / 0.1);
  --color-mint-400-5: oklch(0.8862 0.17 173.1 / 0.05);
  --color-mint-500-100: oklch(0.8293 0.16085 171.9667 / 1.0);
  --color-mint-500-90: oklch(0.8293 0.16085 171.9667 / 0.9);
  --color-mint-500-80: oklch(0.8293 0.16085 171.9667 / 0.8);
  --color-mint-500-70: oklch(0.8293 0.16085 171.9667 / 0.7);
  --color-mint-500-60: oklch(0.8293 0.16085 171.9667 / 0.6);
  --color-mint-500-50: oklch(0.8293 0.16085 171.9667 / 0.5);
  --color-mint-500-40: oklch(0.8293 0.16085 171.9667 / 0.4);
  --color-mint-500-30: oklch(0.8293 0.16085 171.9667 / 0.3);
  --color-mint-500-20: oklch(0.8293 0.16085 171.9667 / 0.2);
  --color-mint-500-10: oklch(0.8293 0.16085 171.9667 / 0.1);
  --color-mint-500-5: oklch(0.8293 0.16085 171.9667 / 0.05);
  --color-mint-600-100: oklch(0.7146 0.136979 173.1815 / 1.0);
  --color-mint-600-90: oklch(0.7146 0.136979 173.1815 / 0.9);
  --color-mint-600-80: oklch(0.7146 0.136979 173.1815 / 0.8);
  --color-mint-600-70: oklch(0.7146 0.136979 173.1815 / 0.7);
  --color-mint-600-60: oklch(0.7146 0.136979 173.1815 / 0.6);
  --color-mint-600-50: oklch(0.7146 0.136979 173.1815 / 0.5);
  --color-mint-600-40: oklch(0.7146 0.136979 173.1815 / 0.4);
  --color-mint-600-30: oklch(0.7146 0.136979 173.1815 / 0.3);
  --color-mint-600-20: oklch(0.7146 0.136979 173.1815 / 0.2);
  --color-mint-600-10: oklch(0.7146 0.136979 173.1815 / 0.1);
  --color-mint-600-5: oklch(0.7146 0.136979 173.1815 / 0.05);
  --color-mint-700-100: oklch(0.6076 0.112781 176.8914 / 1.0);
  --color-mint-700-90: oklch(0.6076 0.112781 176.8914 / 0.9);
  --color-mint-700-80: oklch(0.6076 0.112781 176.8914 / 0.8);
  --color-mint-700-70: oklch(0.6076 0.112781 176.8914 / 0.7);
  --color-mint-700-60: oklch(0.6076 0.112781 176.8914 / 0.6);
  --color-mint-700-50: oklch(0.6076 0.112781 176.8914 / 0.5);
  --color-mint-700-40: oklch(0.6076 0.112781 176.8914 / 0.4);
  --color-mint-700-30: oklch(0.6076 0.112781 176.8914 / 0.3);
  --color-mint-700-20: oklch(0.6076 0.112781 176.8914 / 0.2);
  --color-mint-700-10: oklch(0.6076 0.112781 176.8914 / 0.1);
  --color-mint-700-5: oklch(0.6076 0.112781 176.8914 / 0.05);
  --color-mint-800-100: oklch(0.5125 0.0941 178.27 / 1.0);
  --color-mint-800-90: oklch(0.5125 0.0941 178.27 / 0.9);
  --color-mint-800-80: oklch(0.5125 0.0941 178.27 / 0.8);
  --color-mint-800-70: oklch(0.5125 0.0941 178.27 / 0.7);
  --color-mint-800-60: oklch(0.5125 0.0941 178.27 / 0.6);
  --color-mint-800-50: oklch(0.5125 0.0941 178.27 / 0.5);
  --color-mint-800-40: oklch(0.5125 0.0941 178.27 / 0.4);
  --color-mint-800-30: oklch(0.5125 0.0941 178.27 / 0.3);
  --color-mint-800-20: oklch(0.5125 0.0941 178.27 / 0.2);
  --color-mint-800-10: oklch(0.5125 0.0941 178.27 / 0.1);
  --color-mint-800-5: oklch(0.5125 0.0941 178.27 / 0.05);
  --color-mint-900-100: oklch(0.4447 0.0803 180.66 / 1.0);
  --color-mint-900-90: oklch(0.4447 0.0803 180.66 / 0.9);
  --color-mint-900-80: oklch(0.4447 0.0803 180.66 / 0.8);
  --color-mint-900-70: oklch(0.4447 0.0803 180.66 / 0.7);
  --color-mint-900-60: oklch(0.4447 0.0803 180.66 / 0.6);
  --color-mint-900-50: oklch(0.4447 0.0803 180.66 / 0.5);
  --color-mint-900-40: oklch(0.4447 0.0803 180.66 / 0.4);
  --color-mint-900-30: oklch(0.4447 0.0803 180.66 / 0.3);
  --color-mint-900-20: oklch(0.4447 0.0803 180.66 / 0.2);
  --color-mint-900-10: oklch(0.4447 0.0803 180.66 / 0.1);
  --color-mint-900-5: oklch(0.4447 0.0803 180.66 / 0.05);
  --color-mint-950-100: oklch(0.306 0.0544 183.34 / 1.0);
  --color-mint-950-90: oklch(0.306 0.0544 183.34 / 0.9);
  --color-mint-950-80: oklch(0.306 0.0544 183.34 / 0.8);
  --color-mint-950-70: oklch(0.306 0.0544 183.34 / 0.7);
  --color-mint-950-60: oklch(0.306 0.0544 183.34 / 0.6);
  --color-mint-950-50: oklch(0.306 0.0544 183.34 / 0.5);
  --color-mint-950-40: oklch(0.306 0.0544 183.34 / 0.4);
  --color-mint-950-30: oklch(0.306 0.0544 183.34 / 0.3);
  --color-mint-950-20: oklch(0.306 0.0544 183.34 / 0.2);
  --color-mint-950-10: oklch(0.306 0.0544 183.34 / 0.1);
  --color-mint-950-5: oklch(0.306 0.0544 183.34 / 0.05);
  /* Sky */
  --color-sky-50: oklch(97.7% 0.013 236.62);
  --color-sky-100: oklch(95.1% 0.026 236.824);
  --color-sky-200: oklch(90.1% 0.058 230.902);
  --color-sky-300: oklch(82.8% 0.111 230.318);
  --color-sky-400: oklch(74.6% 0.16 232.661);
  --color-sky-500: oklch(68.5% 0.169 237.323);
  --color-sky-600: oklch(58.8% 0.158 241.966);
  --color-sky-700: oklch(50% 0.134 242.749);
  --color-sky-800: oklch(44.3% 0.11 240.79);
  --color-sky-900: oklch(39.1% 0.09 240.876);
  --color-sky-950: oklch(29.3% 0.066 243.157);
  /* --color-sky-50 */
  --color-sky-50-100: oklch(97.7% 0.013 236.62 / 1);
  --color-sky-50-90: oklch(97.7% 0.013 236.62 / 0.9);
  --color-sky-50-80: oklch(97.7% 0.013 236.62 / 0.8);
  --color-sky-50-70: oklch(97.7% 0.013 236.62 / 0.7);
  --color-sky-50-60: oklch(97.7% 0.013 236.62 / 0.6);
  --color-sky-50-50: oklch(97.7% 0.013 236.62 / 0.5);
  --color-sky-50-40: oklch(97.7% 0.013 236.62 / 0.4);
  --color-sky-50-30: oklch(97.7% 0.013 236.62 / 0.3);
  --color-sky-50-20: oklch(97.7% 0.013 236.62 / 0.2);
  --color-sky-50-10: oklch(97.7% 0.013 236.62 / 0.1);
  --color-sky-50-5: oklch(97.7% 0.013 236.62 / 0.05);
  /* --color-sky-100 */
  --color-sky-100-100: oklch(95.1% 0.026 236.824 / 1);
  --color-sky-100-90: oklch(95.1% 0.026 236.824 / 0.9);
  --color-sky-100-80: oklch(95.1% 0.026 236.824 / 0.8);
  --color-sky-100-70: oklch(95.1% 0.026 236.824 / 0.7);
  --color-sky-100-60: oklch(95.1% 0.026 236.824 / 0.6);
  --color-sky-100-50: oklch(95.1% 0.026 236.824 / 0.5);
  --color-sky-100-40: oklch(95.1% 0.026 236.824 / 0.4);
  --color-sky-100-30: oklch(95.1% 0.026 236.824 / 0.3);
  --color-sky-100-20: oklch(95.1% 0.026 236.824 / 0.2);
  --color-sky-100-10: oklch(95.1% 0.026 236.824 / 0.1);
  --color-sky-100-5: oklch(95.1% 0.026 236.824 / 0.05);
  /* --color-sky-200 */
  --color-sky-200-100: oklch(90.1% 0.058 230.902 / 1);
  --color-sky-200-90: oklch(90.1% 0.058 230.902 / 0.9);
  --color-sky-200-80: oklch(90.1% 0.058 230.902 / 0.8);
  --color-sky-200-70: oklch(90.1% 0.058 230.902 / 0.7);
  --color-sky-200-60: oklch(90.1% 0.058 230.902 / 0.6);
  --color-sky-200-50: oklch(90.1% 0.058 230.902 / 0.5);
  --color-sky-200-40: oklch(90.1% 0.058 230.902 / 0.4);
  --color-sky-200-30: oklch(90.1% 0.058 230.902 / 0.3);
  --color-sky-200-20: oklch(90.1% 0.058 230.902 / 0.2);
  --color-sky-200-10: oklch(90.1% 0.058 230.902 / 0.1);
  --color-sky-200-5: oklch(90.1% 0.058 230.902 / 0.05);
  /* --color-sky-300 */
  --color-sky-300-100: oklch(82.8% 0.111 230.318 / 1);
  --color-sky-300-90: oklch(82.8% 0.111 230.318 / 0.9);
  --color-sky-300-80: oklch(82.8% 0.111 230.318 / 0.8);
  --color-sky-300-70: oklch(82.8% 0.111 230.318 / 0.7);
  --color-sky-300-60: oklch(82.8% 0.111 230.318 / 0.6);
  --color-sky-300-50: oklch(82.8% 0.111 230.318 / 0.5);
  --color-sky-300-40: oklch(82.8% 0.111 230.318 / 0.4);
  --color-sky-300-30: oklch(82.8% 0.111 230.318 / 0.3);
  --color-sky-300-20: oklch(82.8% 0.111 230.318 / 0.2);
  --color-sky-300-10: oklch(82.8% 0.111 230.318 / 0.1);
  --color-sky-300-5: oklch(82.8% 0.111 230.318 / 0.05);
  /* --color-sky-400 */
  --color-sky-400-100: oklch(74.6% 0.16 232.661 / 1);
  --color-sky-400-90: oklch(74.6% 0.16 232.661 / 0.9);
  --color-sky-400-80: oklch(74.6% 0.16 232.661 / 0.8);
  --color-sky-400-70: oklch(74.6% 0.16 232.661 / 0.7);
  --color-sky-400-60: oklch(74.6% 0.16 232.661 / 0.6);
  --color-sky-400-50: oklch(74.6% 0.16 232.661 / 0.5);
  --color-sky-400-40: oklch(74.6% 0.16 232.661 / 0.4);
  --color-sky-400-30: oklch(74.6% 0.16 232.661 / 0.3);
  --color-sky-400-20: oklch(74.6% 0.16 232.661 / 0.2);
  --color-sky-400-10: oklch(74.6% 0.16 232.661 / 0.1);
  --color-sky-400-5: oklch(74.6% 0.16 232.661 / 0.05);
  /* --color-sky-500 */
  --color-sky-500-100: oklch(68.5% 0.169 237.323 / 1);
  --color-sky-500-90: oklch(68.5% 0.169 237.323 / 0.9);
  --color-sky-500-80: oklch(68.5% 0.169 237.323 / 0.8);
  --color-sky-500-70: oklch(68.5% 0.169 237.323 / 0.7);
  --color-sky-500-60: oklch(68.5% 0.169 237.323 / 0.6);
  --color-sky-500-50: oklch(68.5% 0.169 237.323 / 0.5);
  --color-sky-500-40: oklch(68.5% 0.169 237.323 / 0.4);
  --color-sky-500-30: oklch(68.5% 0.169 237.323 / 0.3);
  --color-sky-500-20: oklch(68.5% 0.169 237.323 / 0.2);
  --color-sky-500-10: oklch(68.5% 0.169 237.323 / 0.1);
  --color-sky-500-5: oklch(68.5% 0.169 237.323 / 0.05);
  /* --color-sky-600 */
  --color-sky-600-100: oklch(58.8% 0.158 241.966 / 1);
  --color-sky-600-90: oklch(58.8% 0.158 241.966 / 0.9);
  --color-sky-600-80: oklch(58.8% 0.158 241.966 / 0.8);
  --color-sky-600-70: oklch(58.8% 0.158 241.966 / 0.7);
  --color-sky-600-60: oklch(58.8% 0.158 241.966 / 0.6);
  --color-sky-600-50: oklch(58.8% 0.158 241.966 / 0.5);
  --color-sky-600-40: oklch(58.8% 0.158 241.966 / 0.4);
  --color-sky-600-30: oklch(58.8% 0.158 241.966 / 0.3);
  --color-sky-600-20: oklch(58.8% 0.158 241.966 / 0.2);
  --color-sky-600-10: oklch(58.8% 0.158 241.966 / 0.1);
  --color-sky-600-5: oklch(58.8% 0.158 241.966 / 0.05);
  /* --color-sky-700 */
  --color-sky-700-100: oklch(50% 0.134 242.749 / 1);
  --color-sky-700-90: oklch(50% 0.134 242.749 / 0.9);
  --color-sky-700-80: oklch(50% 0.134 242.749 / 0.8);
  --color-sky-700-70: oklch(50% 0.134 242.749 / 0.7);
  --color-sky-700-60: oklch(50% 0.134 242.749 / 0.6);
  --color-sky-700-50: oklch(50% 0.134 242.749 / 0.5);
  --color-sky-700-40: oklch(50% 0.134 242.749 / 0.4);
  --color-sky-700-30: oklch(50% 0.134 242.749 / 0.3);
  --color-sky-700-20: oklch(50% 0.134 242.749 / 0.2);
  --color-sky-700-10: oklch(50% 0.134 242.749 / 0.1);
  --color-sky-700-5: oklch(50% 0.134 242.749 / 0.05);
  /* --color-sky-800 */
  --color-sky-800-100: oklch(44.3% 0.11 240.79 / 1);
  --color-sky-800-90: oklch(44.3% 0.11 240.79 / 0.9);
  --color-sky-800-80: oklch(44.3% 0.11 240.79 / 0.8);
  --color-sky-800-70: oklch(44.3% 0.11 240.79 / 0.7);
  --color-sky-800-60: oklch(44.3% 0.11 240.79 / 0.6);
  --color-sky-800-50: oklch(44.3% 0.11 240.79 / 0.5);
  --color-sky-800-40: oklch(44.3% 0.11 240.79 / 0.4);
  --color-sky-800-30: oklch(44.3% 0.11 240.79 / 0.3);
  --color-sky-800-20: oklch(44.3% 0.11 240.79 / 0.2);
  --color-sky-800-10: oklch(44.3% 0.11 240.79 / 0.1);
  --color-sky-800-5: oklch(44.3% 0.11 240.79 / 0.05);
  /* --color-sky-900 */
  --color-sky-900-100: oklch(39.1% 0.09 240.876 / 1);
  --color-sky-900-90: oklch(39.1% 0.09 240.876 / 0.9);
  --color-sky-900-80: oklch(39.1% 0.09 240.876 / 0.8);
  --color-sky-900-70: oklch(39.1% 0.09 240.876 / 0.7);
  --color-sky-900-60: oklch(39.1% 0.09 240.876 / 0.6);
  --color-sky-900-50: oklch(39.1% 0.09 240.876 / 0.5);
  --color-sky-900-40: oklch(39.1% 0.09 240.876 / 0.4);
  --color-sky-900-30: oklch(39.1% 0.09 240.876 / 0.3);
  --color-sky-900-20: oklch(39.1% 0.09 240.876 / 0.2);
  --color-sky-900-10: oklch(39.1% 0.09 240.876 / 0.1);
  --color-sky-900-5: oklch(39.1% 0.09 240.876 / 0.05);
  /* --color-sky-950 */
  --color-sky-950-100: oklch(29.3% 0.066 243.157 / 1);
  --color-sky-950-90: oklch(29.3% 0.066 243.157 / 0.9);
  --color-sky-950-80: oklch(29.3% 0.066 243.157 / 0.8);
  --color-sky-950-70: oklch(29.3% 0.066 243.157 / 0.7);
  --color-sky-950-60: oklch(29.3% 0.066 243.157 / 0.6);
  --color-sky-950-50: oklch(29.3% 0.066 243.157 / 0.5);
  --color-sky-950-40: oklch(29.3% 0.066 243.157 / 0.4);
  --color-sky-950-30: oklch(29.3% 0.066 243.157 / 0.3);
  --color-sky-950-20: oklch(29.3% 0.066 243.157 / 0.2);
  --color-sky-950-10: oklch(29.3% 0.066 243.157 / 0.1);
  --color-sky-950-5: oklch(29.3% 0.066 243.157 / 0.05);
  /* Blue */
  --color-blue-50: oklch(97% 0.014 254.604);
  --color-blue-100: oklch(93.2% 0.032 255.585);
  --color-blue-200: oklch(88.2% 0.059 254.128);
  --color-blue-300: oklch(80.9% 0.105 251.813);
  --color-blue-400: oklch(70.7% 0.165 254.624);
  --color-blue-500: oklch(62.3% 0.214 259.815);
  --color-blue-600: oklch(54.6% 0.245 262.881);
  --color-blue-700: oklch(48.8% 0.243 264.376);
  --color-blue-800: oklch(42.4% 0.199 265.638);
  --color-blue-900: oklch(37.9% 0.146 265.522);
  --color-blue-950: oklch(28.2% 0.091 267.935);
  /* --color-blue-50 */
  --color-blue-50-100: oklch(97% 0.014 254.604 / 1);
  --color-blue-50-90: oklch(97% 0.014 254.604 / 0.9);
  --color-blue-50-80: oklch(97% 0.014 254.604 / 0.8);
  --color-blue-50-70: oklch(97% 0.014 254.604 / 0.7);
  --color-blue-50-60: oklch(97% 0.014 254.604 / 0.6);
  --color-blue-50-50: oklch(97% 0.014 254.604 / 0.5);
  --color-blue-50-40: oklch(97% 0.014 254.604 / 0.4);
  --color-blue-50-30: oklch(97% 0.014 254.604 / 0.3);
  --color-blue-50-20: oklch(97% 0.014 254.604 / 0.2);
  --color-blue-50-10: oklch(97% 0.014 254.604 / 0.1);
  --color-blue-50-5: oklch(97% 0.014 254.604 / 0.05);
  /* --color-blue-100 */
  --color-blue-100-100: oklch(93.2% 0.032 255.585 / 1);
  --color-blue-100-90: oklch(93.2% 0.032 255.585 / 0.9);
  --color-blue-100-80: oklch(93.2% 0.032 255.585 / 0.8);
  --color-blue-100-70: oklch(93.2% 0.032 255.585 / 0.7);
  --color-blue-100-60: oklch(93.2% 0.032 255.585 / 0.6);
  --color-blue-100-50: oklch(93.2% 0.032 255.585 / 0.5);
  --color-blue-100-40: oklch(93.2% 0.032 255.585 / 0.4);
  --color-blue-100-30: oklch(93.2% 0.032 255.585 / 0.3);
  --color-blue-100-20: oklch(93.2% 0.032 255.585 / 0.2);
  --color-blue-100-10: oklch(93.2% 0.032 255.585 / 0.1);
  --color-blue-100-5: oklch(93.2% 0.032 255.585 / 0.05);
  /* --color-blue-200 */
  --color-blue-200-100: oklch(88.2% 0.059 254.128 / 1);
  --color-blue-200-90: oklch(88.2% 0.059 254.128 / 0.9);
  --color-blue-200-80: oklch(88.2% 0.059 254.128 / 0.8);
  --color-blue-200-70: oklch(88.2% 0.059 254.128 / 0.7);
  --color-blue-200-60: oklch(88.2% 0.059 254.128 / 0.6);
  --color-blue-200-50: oklch(88.2% 0.059 254.128 / 0.5);
  --color-blue-200-40: oklch(88.2% 0.059 254.128 / 0.4);
  --color-blue-200-30: oklch(88.2% 0.059 254.128 / 0.3);
  --color-blue-200-20: oklch(88.2% 0.059 254.128 / 0.2);
  --color-blue-200-10: oklch(88.2% 0.059 254.128 / 0.1);
  --color-blue-200-5: oklch(88.2% 0.059 254.128 / 0.05);
  /* --color-blue-300 */
  --color-blue-300-100: oklch(80.9% 0.105 251.813 / 1);
  --color-blue-300-90: oklch(80.9% 0.105 251.813 / 0.9);
  --color-blue-300-80: oklch(80.9% 0.105 251.813 / 0.8);
  --color-blue-300-70: oklch(80.9% 0.105 251.813 / 0.7);
  --color-blue-300-60: oklch(80.9% 0.105 251.813 / 0.6);
  --color-blue-300-50: oklch(80.9% 0.105 251.813 / 0.5);
  --color-blue-300-40: oklch(80.9% 0.105 251.813 / 0.4);
  --color-blue-300-30: oklch(80.9% 0.105 251.813 / 0.3);
  --color-blue-300-20: oklch(80.9% 0.105 251.813 / 0.2);
  --color-blue-300-10: oklch(80.9% 0.105 251.813 / 0.1);
  --color-blue-300-5: oklch(80.9% 0.105 251.813 / 0.05);
  /* --color-blue-400 */
  --color-blue-400-100: oklch(70.7% 0.165 254.624 / 1);
  --color-blue-400-90: oklch(70.7% 0.165 254.624 / 0.9);
  --color-blue-400-80: oklch(70.7% 0.165 254.624 / 0.8);
  --color-blue-400-70: oklch(70.7% 0.165 254.624 / 0.7);
  --color-blue-400-60: oklch(70.7% 0.165 254.624 / 0.6);
  --color-blue-400-50: oklch(70.7% 0.165 254.624 / 0.5);
  --color-blue-400-40: oklch(70.7% 0.165 254.624 / 0.4);
  --color-blue-400-30: oklch(70.7% 0.165 254.624 / 0.3);
  --color-blue-400-20: oklch(70.7% 0.165 254.624 / 0.2);
  --color-blue-400-10: oklch(70.7% 0.165 254.624 / 0.1);
  --color-blue-400-5: oklch(70.7% 0.165 254.624 / 0.05);
  /* --color-blue-500 */
  --color-blue-500-100: oklch(62.3% 0.214 259.815 / 1);
  --color-blue-500-90: oklch(62.3% 0.214 259.815 / 0.9);
  --color-blue-500-80: oklch(62.3% 0.214 259.815 / 0.8);
  --color-blue-500-70: oklch(62.3% 0.214 259.815 / 0.7);
  --color-blue-500-60: oklch(62.3% 0.214 259.815 / 0.6);
  --color-blue-500-50: oklch(62.3% 0.214 259.815 / 0.5);
  --color-blue-500-40: oklch(62.3% 0.214 259.815 / 0.4);
  --color-blue-500-36: oklch(62.3% 0.214 259.815 / 0.36);
  --color-blue-500-34: oklch(62.3% 0.214 259.815 / 0.34);
  --color-blue-500-30: oklch(62.3% 0.214 259.815 / 0.3);
  --color-blue-500-26: oklch(62.3% 0.214 259.815 / 0.26);
  --color-blue-500-24: oklch(62.3% 0.214 259.815 / 0.24);
  --color-blue-500-20: oklch(62.3% 0.214 259.815 / 0.2);
  --color-blue-500-18: oklch(62.3% 0.214 259.815 / 0.18);
  --color-blue-500-16: oklch(62.3% 0.214 259.815 / 0.16);
  --color-blue-500-12: oklch(62.3% 0.214 259.815 / 0.12);
  --color-blue-500-10: oklch(62.3% 0.214 259.815 / 0.1);
  --color-blue-500-5: oklch(62.3% 0.214 259.815 / 0.05);
  /* --color-blue-600 */
  --color-blue-600-100: oklch(54.6% 0.245 262.881 / 1);
  --color-blue-600-90: oklch(54.6% 0.245 262.881 / 0.9);
  --color-blue-600-80: oklch(54.6% 0.245 262.881 / 0.8);
  --color-blue-600-70: oklch(54.6% 0.245 262.881 / 0.7);
  --color-blue-600-60: oklch(54.6% 0.245 262.881 / 0.6);
  --color-blue-600-50: oklch(54.6% 0.245 262.881 / 0.5);
  --color-blue-600-40: oklch(54.6% 0.245 262.881 / 0.4);
  --color-blue-600-30: oklch(54.6% 0.245 262.881 / 0.3);
  --color-blue-600-20: oklch(54.6% 0.245 262.881 / 0.2);
  --color-blue-600-10: oklch(54.6% 0.245 262.881 / 0.1);
  --color-blue-600-5: oklch(54.6% 0.245 262.881 / 0.05);
  /* --color-blue-700 */
  --color-blue-700-100: oklch(48.8% 0.243 264.376 / 1);
  --color-blue-700-90: oklch(48.8% 0.243 264.376 / 0.9);
  --color-blue-700-80: oklch(48.8% 0.243 264.376 / 0.8);
  --color-blue-700-70: oklch(48.8% 0.243 264.376 / 0.7);
  --color-blue-700-60: oklch(48.8% 0.243 264.376 / 0.6);
  --color-blue-700-50: oklch(48.8% 0.243 264.376 / 0.5);
  --color-blue-700-40: oklch(48.8% 0.243 264.376 / 0.4);
  --color-blue-700-30: oklch(48.8% 0.243 264.376 / 0.3);
  --color-blue-700-20: oklch(48.8% 0.243 264.376 / 0.2);
  --color-blue-700-10: oklch(48.8% 0.243 264.376 / 0.1);
  --color-blue-700-5: oklch(48.8% 0.243 264.376 / 0.05);
  /* --color-blue-800 */
  --color-blue-800-100: oklch(42.4% 0.199 265.638 / 1);
  --color-blue-800-90: oklch(42.4% 0.199 265.638 / 0.9);
  --color-blue-800-80: oklch(42.4% 0.199 265.638 / 0.8);
  --color-blue-800-70: oklch(42.4% 0.199 265.638 / 0.7);
  --color-blue-800-60: oklch(42.4% 0.199 265.638 / 0.6);
  --color-blue-800-50: oklch(42.4% 0.199 265.638 / 0.5);
  --color-blue-800-40: oklch(42.4% 0.199 265.638 / 0.4);
  --color-blue-800-30: oklch(42.4% 0.199 265.638 / 0.3);
  --color-blue-800-20: oklch(42.4% 0.199 265.638 / 0.2);
  --color-blue-800-10: oklch(42.4% 0.199 265.638 / 0.1);
  --color-blue-800-5: oklch(42.4% 0.199 265.638 / 0.05);
  /* --color-blue-900 */
  --color-blue-900-100: oklch(37.9% 0.146 265.522 / 1);
  --color-blue-900-90: oklch(37.9% 0.146 265.522 / 0.9);
  --color-blue-900-80: oklch(37.9% 0.146 265.522 / 0.8);
  --color-blue-900-70: oklch(37.9% 0.146 265.522 / 0.7);
  --color-blue-900-60: oklch(37.9% 0.146 265.522 / 0.6);
  --color-blue-900-50: oklch(37.9% 0.146 265.522 / 0.5);
  --color-blue-900-40: oklch(37.9% 0.146 265.522 / 0.4);
  --color-blue-900-30: oklch(37.9% 0.146 265.522 / 0.3);
  --color-blue-900-20: oklch(37.9% 0.146 265.522 / 0.2);
  --color-blue-900-10: oklch(37.9% 0.146 265.522 / 0.1);
  --color-blue-900-5: oklch(37.9% 0.146 265.522 / 0.05);
  /* --color-blue-950 */
  --color-blue-950-100: oklch(28.2% 0.091 267.935 / 1);
  --color-blue-950-90: oklch(28.2% 0.091 267.935 / 0.9);
  --color-blue-950-80: oklch(28.2% 0.091 267.935 / 0.8);
  --color-blue-950-70: oklch(28.2% 0.091 267.935 / 0.7);
  --color-blue-950-60: oklch(28.2% 0.091 267.935 / 0.6);
  --color-blue-950-50: oklch(28.2% 0.091 267.935 / 0.5);
  --color-blue-950-40: oklch(28.2% 0.091 267.935 / 0.4);
  --color-blue-950-30: oklch(28.2% 0.091 267.935 / 0.3);
  --color-blue-950-20: oklch(28.2% 0.091 267.935 / 0.2);
  --color-blue-950-10: oklch(28.2% 0.091 267.935 / 0.1);
  --color-blue-950-5: oklch(28.2% 0.091 267.935 / 0.05);
  /* Indigo */
  --color-indigo-50: oklch(96.2% 0.018 272.314);
  --color-indigo-100: oklch(93% 0.034 272.788);
  --color-indigo-200: oklch(78.5% 0.115 274.713);
  --color-indigo-300: oklch(78.5% 0.115 274.713);
  --color-indigo-400: oklch(67.3% 0.182 276.935);
  --color-indigo-500: oklch(58.5% 0.233 277.117);
  --color-indigo-600: oklch(51.1% 0.262 276.966);
  --color-indigo-700: oklch(45.7% 0.24 277.023);
  --color-indigo-800: oklch(39.8% 0.195 277.366);
  --color-indigo-900: oklch(35.9% 0.144 278.697);
  --color-indigo-950: oklch(25.7% 0.09 281.288);
  /* --color-indigo-50 */
  --color-indigo-50-100: oklch(96.2% 0.018 272.314 / 1);
  --color-indigo-50-90: oklch(96.2% 0.018 272.314 / 0.9);
  --color-indigo-50-80: oklch(96.2% 0.018 272.314 / 0.8);
  --color-indigo-50-70: oklch(96.2% 0.018 272.314 / 0.7);
  --color-indigo-50-60: oklch(96.2% 0.018 272.314 / 0.6);
  --color-indigo-50-50: oklch(96.2% 0.018 272.314 / 0.5);
  --color-indigo-50-40: oklch(96.2% 0.018 272.314 / 0.4);
  --color-indigo-50-30: oklch(96.2% 0.018 272.314 / 0.3);
  --color-indigo-50-20: oklch(96.2% 0.018 272.314 / 0.2);
  --color-indigo-50-10: oklch(96.2% 0.018 272.314 / 0.1);
  --color-indigo-50-5: oklch(96.2% 0.018 272.314 / 0.05);
  /* --color-indigo-100 */
  --color-indigo-100-100: oklch(93% 0.034 272.788 / 1);
  --color-indigo-100-90: oklch(93% 0.034 272.788 / 0.9);
  --color-indigo-100-80: oklch(93% 0.034 272.788 / 0.8);
  --color-indigo-100-70: oklch(93% 0.034 272.788 / 0.7);
  --color-indigo-100-60: oklch(93% 0.034 272.788 / 0.6);
  --color-indigo-100-50: oklch(93% 0.034 272.788 / 0.5);
  --color-indigo-100-40: oklch(93% 0.034 272.788 / 0.4);
  --color-indigo-100-30: oklch(93% 0.034 272.788 / 0.3);
  --color-indigo-100-20: oklch(93% 0.034 272.788 / 0.2);
  --color-indigo-100-10: oklch(93% 0.034 272.788 / 0.1);
  --color-indigo-100-5: oklch(93% 0.034 272.788 / 0.05);
  /* --color-indigo-200 */
  --color-indigo-200-100: oklch(78.5% 0.115 274.713 / 1);
  --color-indigo-200-90: oklch(78.5% 0.115 274.713 / 0.9);
  --color-indigo-200-80: oklch(78.5% 0.115 274.713 / 0.8);
  --color-indigo-200-70: oklch(78.5% 0.115 274.713 / 0.7);
  --color-indigo-200-60: oklch(78.5% 0.115 274.713 / 0.6);
  --color-indigo-200-50: oklch(78.5% 0.115 274.713 / 0.5);
  --color-indigo-200-40: oklch(78.5% 0.115 274.713 / 0.4);
  --color-indigo-200-30: oklch(78.5% 0.115 274.713 / 0.3);
  --color-indigo-200-20: oklch(78.5% 0.115 274.713 / 0.2);
  --color-indigo-200-10: oklch(78.5% 0.115 274.713 / 0.1);
  --color-indigo-200-5: oklch(78.5% 0.115 274.713 / 0.05);
  /* --color-indigo-300 */
  --color-indigo-300-100: oklch(78.5% 0.115 274.713 / 1);
  --color-indigo-300-90: oklch(78.5% 0.115 274.713 / 0.9);
  --color-indigo-300-80: oklch(78.5% 0.115 274.713 / 0.8);
  --color-indigo-300-70: oklch(78.5% 0.115 274.713 / 0.7);
  --color-indigo-300-60: oklch(78.5% 0.115 274.713 / 0.6);
  --color-indigo-300-50: oklch(78.5% 0.115 274.713 / 0.5);
  --color-indigo-300-40: oklch(78.5% 0.115 274.713 / 0.4);
  --color-indigo-300-30: oklch(78.5% 0.115 274.713 / 0.3);
  --color-indigo-300-20: oklch(78.5% 0.115 274.713 / 0.2);
  --color-indigo-300-10: oklch(78.5% 0.115 274.713 / 0.1);
  --color-indigo-300-5: oklch(78.5% 0.115 274.713 / 0.05);
  /* --color-indigo-400 */
  --color-indigo-400-100: oklch(67.3% 0.182 276.935 / 1);
  --color-indigo-400-90: oklch(67.3% 0.182 276.935 / 0.9);
  --color-indigo-400-80: oklch(67.3% 0.182 276.935 / 0.8);
  --color-indigo-400-70: oklch(67.3% 0.182 276.935 / 0.7);
  --color-indigo-400-60: oklch(67.3% 0.182 276.935 / 0.6);
  --color-indigo-400-50: oklch(67.3% 0.182 276.935 / 0.5);
  --color-indigo-400-40: oklch(67.3% 0.182 276.935 / 0.4);
  --color-indigo-400-30: oklch(67.3% 0.182 276.935 / 0.3);
  --color-indigo-400-20: oklch(67.3% 0.182 276.935 / 0.2);
  --color-indigo-400-10: oklch(67.3% 0.182 276.935 / 0.1);
  --color-indigo-400-5: oklch(67.3% 0.182 276.935 / 0.05);
  /* --color-indigo-500 */
  --color-indigo-500-100: oklch(58.5% 0.233 277.117 / 1);
  --color-indigo-500-90: oklch(58.5% 0.233 277.117 / 0.9);
  --color-indigo-500-80: oklch(58.5% 0.233 277.117 / 0.8);
  --color-indigo-500-70: oklch(58.5% 0.233 277.117 / 0.7);
  --color-indigo-500-60: oklch(58.5% 0.233 277.117 / 0.6);
  --color-indigo-500-50: oklch(58.5% 0.233 277.117 / 0.5);
  --color-indigo-500-40: oklch(58.5% 0.233 277.117 / 0.4);
  --color-indigo-500-30: oklch(58.5% 0.233 277.117 / 0.3);
  --color-indigo-500-20: oklch(58.5% 0.233 277.117 / 0.2);
  --color-indigo-500-10: oklch(58.5% 0.233 277.117 / 0.1);
  --color-indigo-500-5: oklch(58.5% 0.233 277.117 / 0.05);
  /* --color-indigo-600 */
  --color-indigo-600-100: oklch(51.1% 0.262 276.966 / 1);
  --color-indigo-600-90: oklch(51.1% 0.262 276.966 / 0.9);
  --color-indigo-600-80: oklch(51.1% 0.262 276.966 / 0.8);
  --color-indigo-600-70: oklch(51.1% 0.262 276.966 / 0.7);
  --color-indigo-600-60: oklch(51.1% 0.262 276.966 / 0.6);
  --color-indigo-600-50: oklch(51.1% 0.262 276.966 / 0.5);
  --color-indigo-600-40: oklch(51.1% 0.262 276.966 / 0.4);
  --color-indigo-600-30: oklch(51.1% 0.262 276.966 / 0.3);
  --color-indigo-600-20: oklch(51.1% 0.262 276.966 / 0.2);
  --color-indigo-600-10: oklch(51.1% 0.262 276.966 / 0.1);
  --color-indigo-600-5: oklch(51.1% 0.262 276.966 / 0.05);
  /* --color-indigo-700 */
  --color-indigo-700-100: oklch(45.7% 0.24 277.023 / 1);
  --color-indigo-700-90: oklch(45.7% 0.24 277.023 / 0.9);
  --color-indigo-700-80: oklch(45.7% 0.24 277.023 / 0.8);
  --color-indigo-700-70: oklch(45.7% 0.24 277.023 / 0.7);
  --color-indigo-700-60: oklch(45.7% 0.24 277.023 / 0.6);
  --color-indigo-700-50: oklch(45.7% 0.24 277.023 / 0.5);
  --color-indigo-700-40: oklch(45.7% 0.24 277.023 / 0.4);
  --color-indigo-700-30: oklch(45.7% 0.24 277.023 / 0.3);
  --color-indigo-700-20: oklch(45.7% 0.24 277.023 / 0.2);
  --color-indigo-700-10: oklch(45.7% 0.24 277.023 / 0.1);
  --color-indigo-700-5: oklch(45.7% 0.24 277.023 / 0.05);
  /* --color-indigo-800 */
  --color-indigo-800-100: oklch(39.8% 0.195 277.366 / 1);
  --color-indigo-800-90: oklch(39.8% 0.195 277.366 / 0.9);
  --color-indigo-800-80: oklch(39.8% 0.195 277.366 / 0.8);
  --color-indigo-800-70: oklch(39.8% 0.195 277.366 / 0.7);
  --color-indigo-800-60: oklch(39.8% 0.195 277.366 / 0.6);
  --color-indigo-800-50: oklch(39.8% 0.195 277.366 / 0.5);
  --color-indigo-800-40: oklch(39.8% 0.195 277.366 / 0.4);
  --color-indigo-800-30: oklch(39.8% 0.195 277.366 / 0.3);
  --color-indigo-800-20: oklch(39.8% 0.195 277.366 / 0.2);
  --color-indigo-800-10: oklch(39.8% 0.195 277.366 / 0.1);
  --color-indigo-800-5: oklch(39.8% 0.195 277.366 / 0.05);
  /* --color-indigo-900 */
  --color-indigo-900-100: oklch(35.9% 0.144 278.697 / 1);
  --color-indigo-900-90: oklch(35.9% 0.144 278.697 / 0.9);
  --color-indigo-900-80: oklch(35.9% 0.144 278.697 / 0.8);
  --color-indigo-900-70: oklch(35.9% 0.144 278.697 / 0.7);
  --color-indigo-900-60: oklch(35.9% 0.144 278.697 / 0.6);
  --color-indigo-900-50: oklch(35.9% 0.144 278.697 / 0.5);
  --color-indigo-900-40: oklch(35.9% 0.144 278.697 / 0.4);
  --color-indigo-900-30: oklch(35.9% 0.144 278.697 / 0.3);
  --color-indigo-900-20: oklch(35.9% 0.144 278.697 / 0.2);
  --color-indigo-900-10: oklch(35.9% 0.144 278.697 / 0.1);
  --color-indigo-900-5: oklch(35.9% 0.144 278.697 / 0.05);
  /* --color-indigo-950 */
  --color-indigo-950-100: oklch(25.7% 0.09 281.288 / 1);
  --color-indigo-950-90: oklch(25.7% 0.09 281.288 / 0.9);
  --color-indigo-950-80: oklch(25.7% 0.09 281.288 / 0.8);
  --color-indigo-950-70: oklch(25.7% 0.09 281.288 / 0.7);
  --color-indigo-950-60: oklch(25.7% 0.09 281.288 / 0.6);
  --color-indigo-950-50: oklch(25.7% 0.09 281.288 / 0.5);
  --color-indigo-950-40: oklch(25.7% 0.09 281.288 / 0.4);
  --color-indigo-950-30: oklch(25.7% 0.09 281.288 / 0.3);
  --color-indigo-950-20: oklch(25.7% 0.09 281.288 / 0.2);
  --color-indigo-950-10: oklch(25.7% 0.09 281.288 / 0.1);
  --color-indigo-950-5: oklch(25.7% 0.09 281.288 / 0.05);
  /* Violet */
  --color-violet-50: oklch(96.9% 0.016 293.756);
  --color-violet-100: oklch(94.3% 0.029 294.588);
  --color-violet-200: oklch(89.4% 0.057 293.283);
  --color-violet-300: oklch(81.1% 0.111 293.571);
  --color-violet-400: oklch(70.2% 0.183 293.541);
  --color-violet-500: oklch(60.6% 0.25 292.717);
  --color-violet-600: oklch(54.1% 0.281 293.009);
  --color-violet-700: oklch(49.1% 0.27 292.581);
  --color-violet-800: oklch(43.2% 0.232 292.759);
  --color-violet-900: oklch(38% 0.189 293.745);
  --color-violet-950: oklch(28.3% 0.141 291.089);
  /* --color-violet-50 */
  --color-violet-50-100: oklch(96.9% 0.016 293.756 / 1);
  --color-violet-50-90: oklch(96.9% 0.016 293.756 / 0.9);
  --color-violet-50-80: oklch(96.9% 0.016 293.756 / 0.8);
  --color-violet-50-70: oklch(96.9% 0.016 293.756 / 0.7);
  --color-violet-50-60: oklch(96.9% 0.016 293.756 / 0.6);
  --color-violet-50-50: oklch(96.9% 0.016 293.756 / 0.5);
  --color-violet-50-40: oklch(96.9% 0.016 293.756 / 0.4);
  --color-violet-50-30: oklch(96.9% 0.016 293.756 / 0.3);
  --color-violet-50-20: oklch(96.9% 0.016 293.756 / 0.2);
  --color-violet-50-10: oklch(96.9% 0.016 293.756 / 0.1);
  --color-violet-50-5: oklch(96.9% 0.016 293.756 / 0.05);
  /* --color-violet-100 */
  --color-violet-100-100: oklch(94.3% 0.029 294.588 / 1);
  --color-violet-100-90: oklch(94.3% 0.029 294.588 / 0.9);
  --color-violet-100-80: oklch(94.3% 0.029 294.588 / 0.8);
  --color-violet-100-70: oklch(94.3% 0.029 294.588 / 0.7);
  --color-violet-100-60: oklch(94.3% 0.029 294.588 / 0.6);
  --color-violet-100-50: oklch(94.3% 0.029 294.588 / 0.5);
  --color-violet-100-40: oklch(94.3% 0.029 294.588 / 0.4);
  --color-violet-100-30: oklch(94.3% 0.029 294.588 / 0.3);
  --color-violet-100-20: oklch(94.3% 0.029 294.588 / 0.2);
  --color-violet-100-10: oklch(94.3% 0.029 294.588 / 0.1);
  --color-violet-100-5: oklch(94.3% 0.029 294.588 / 0.05);
  /* --color-violet-200 */
  --color-violet-200-100: oklch(89.4% 0.057 293.283 / 1);
  --color-violet-200-90: oklch(89.4% 0.057 293.283 / 0.9);
  --color-violet-200-80: oklch(89.4% 0.057 293.283 / 0.8);
  --color-violet-200-70: oklch(89.4% 0.057 293.283 / 0.7);
  --color-violet-200-60: oklch(89.4% 0.057 293.283 / 0.6);
  --color-violet-200-50: oklch(89.4% 0.057 293.283 / 0.5);
  --color-violet-200-40: oklch(89.4% 0.057 293.283 / 0.4);
  --color-violet-200-30: oklch(89.4% 0.057 293.283 / 0.3);
  --color-violet-200-20: oklch(89.4% 0.057 293.283 / 0.2);
  --color-violet-200-10: oklch(89.4% 0.057 293.283 / 0.1);
  --color-violet-200-5: oklch(89.4% 0.057 293.283 / 0.05);
  /* --color-violet-300 */
  --color-violet-300-100: oklch(81.1% 0.111 293.571 / 1);
  --color-violet-300-90: oklch(81.1% 0.111 293.571 / 0.9);
  --color-violet-300-80: oklch(81.1% 0.111 293.571 / 0.8);
  --color-violet-300-70: oklch(81.1% 0.111 293.571 / 0.7);
  --color-violet-300-60: oklch(81.1% 0.111 293.571 / 0.6);
  --color-violet-300-50: oklch(81.1% 0.111 293.571 / 0.5);
  --color-violet-300-40: oklch(81.1% 0.111 293.571 / 0.4);
  --color-violet-300-30: oklch(81.1% 0.111 293.571 / 0.3);
  --color-violet-300-20: oklch(81.1% 0.111 293.571 / 0.2);
  --color-violet-300-10: oklch(81.1% 0.111 293.571 / 0.1);
  --color-violet-300-5: oklch(81.1% 0.111 293.571 / 0.05);
  /* --color-violet-400 */
  --color-violet-400-100: oklch(70.2% 0.183 293.541 / 1);
  --color-violet-400-90: oklch(70.2% 0.183 293.541 / 0.9);
  --color-violet-400-80: oklch(70.2% 0.183 293.541 / 0.8);
  --color-violet-400-70: oklch(70.2% 0.183 293.541 / 0.7);
  --color-violet-400-60: oklch(70.2% 0.183 293.541 / 0.6);
  --color-violet-400-50: oklch(70.2% 0.183 293.541 / 0.5);
  --color-violet-400-40: oklch(70.2% 0.183 293.541 / 0.4);
  --color-violet-400-30: oklch(70.2% 0.183 293.541 / 0.3);
  --color-violet-400-20: oklch(70.2% 0.183 293.541 / 0.2);
  --color-violet-400-10: oklch(70.2% 0.183 293.541 / 0.1);
  --color-violet-400-5: oklch(70.2% 0.183 293.541 / 0.05);
  /* --color-violet-500 */
  --color-violet-500-100: oklch(60.6% 0.25 292.717 / 1);
  --color-violet-500-90: oklch(60.6% 0.25 292.717 / 0.9);
  --color-violet-500-80: oklch(60.6% 0.25 292.717 / 0.8);
  --color-violet-500-70: oklch(60.6% 0.25 292.717 / 0.7);
  --color-violet-500-60: oklch(60.6% 0.25 292.717 / 0.6);
  --color-violet-500-50: oklch(60.6% 0.25 292.717 / 0.5);
  --color-violet-500-40: oklch(60.6% 0.25 292.717 / 0.4);
  --color-violet-500-30: oklch(60.6% 0.25 292.717 / 0.3);
  --color-violet-500-20: oklch(60.6% 0.25 292.717 / 0.2);
  --color-violet-500-10: oklch(60.6% 0.25 292.717 / 0.1);
  --color-violet-500-5: oklch(60.6% 0.25 292.717 / 0.05);
  /* --color-violet-600 */
  --color-violet-600-100: oklch(54.1% 0.281 293.009 / 1);
  --color-violet-600-90: oklch(54.1% 0.281 293.009 / 0.9);
  --color-violet-600-80: oklch(54.1% 0.281 293.009 / 0.8);
  --color-violet-600-70: oklch(54.1% 0.281 293.009 / 0.7);
  --color-violet-600-60: oklch(54.1% 0.281 293.009 / 0.6);
  --color-violet-600-50: oklch(54.1% 0.281 293.009 / 0.5);
  --color-violet-600-40: oklch(54.1% 0.281 293.009 / 0.4);
  --color-violet-600-30: oklch(54.1% 0.281 293.009 / 0.3);
  --color-violet-600-20: oklch(54.1% 0.281 293.009 / 0.2);
  --color-violet-600-10: oklch(54.1% 0.281 293.009 / 0.1);
  --color-violet-600-5: oklch(54.1% 0.281 293.009 / 0.05);
  /* --color-violet-700 */
  --color-violet-700-100: oklch(49.1% 0.27 292.581 / 1);
  --color-violet-700-90: oklch(49.1% 0.27 292.581 / 0.9);
  --color-violet-700-80: oklch(49.1% 0.27 292.581 / 0.8);
  --color-violet-700-70: oklch(49.1% 0.27 292.581 / 0.7);
  --color-violet-700-60: oklch(49.1% 0.27 292.581 / 0.6);
  --color-violet-700-50: oklch(49.1% 0.27 292.581 / 0.5);
  --color-violet-700-40: oklch(49.1% 0.27 292.581 / 0.4);
  --color-violet-700-30: oklch(49.1% 0.27 292.581 / 0.3);
  --color-violet-700-20: oklch(49.1% 0.27 292.581 / 0.2);
  --color-violet-700-10: oklch(49.1% 0.27 292.581 / 0.1);
  --color-violet-700-5: oklch(49.1% 0.27 292.581 / 0.05);
  /* --color-violet-800 */
  --color-violet-800-100: oklch(43.2% 0.232 292.759 / 1);
  --color-violet-800-90: oklch(43.2% 0.232 292.759 / 0.9);
  --color-violet-800-80: oklch(43.2% 0.232 292.759 / 0.8);
  --color-violet-800-70: oklch(43.2% 0.232 292.759 / 0.7);
  --color-violet-800-60: oklch(43.2% 0.232 292.759 / 0.6);
  --color-violet-800-50: oklch(43.2% 0.232 292.759 / 0.5);
  --color-violet-800-40: oklch(43.2% 0.232 292.759 / 0.4);
  --color-violet-800-30: oklch(43.2% 0.232 292.759 / 0.3);
  --color-violet-800-20: oklch(43.2% 0.232 292.759 / 0.2);
  --color-violet-800-10: oklch(43.2% 0.232 292.759 / 0.1);
  --color-violet-800-5: oklch(43.2% 0.232 292.759 / 0.05);
  /* --color-violet-900 */
  --color-violet-900-100: oklch(38% 0.189 293.745 / 1);
  --color-violet-900-90: oklch(38% 0.189 293.745 / 0.9);
  --color-violet-900-80: oklch(38% 0.189 293.745 / 0.8);
  --color-violet-900-70: oklch(38% 0.189 293.745 / 0.7);
  --color-violet-900-60: oklch(38% 0.189 293.745 / 0.6);
  --color-violet-900-50: oklch(38% 0.189 293.745 / 0.5);
  --color-violet-900-40: oklch(38% 0.189 293.745 / 0.4);
  --color-violet-900-30: oklch(38% 0.189 293.745 / 0.3);
  --color-violet-900-20: oklch(38% 0.189 293.745 / 0.2);
  --color-violet-900-10: oklch(38% 0.189 293.745 / 0.1);
  --color-violet-900-5: oklch(38% 0.189 293.745 / 0.05);
  /* --color-violet-950 */
  --color-violet-950-100: oklch(28.3% 0.141 291.089 / 1);
  --color-violet-950-90: oklch(28.3% 0.141 291.089 / 0.9);
  --color-violet-950-80: oklch(28.3% 0.141 291.089 / 0.8);
  --color-violet-950-70: oklch(28.3% 0.141 291.089 / 0.7);
  --color-violet-950-60: oklch(28.3% 0.141 291.089 / 0.6);
  --color-violet-950-50: oklch(28.3% 0.141 291.089 / 0.5);
  --color-violet-950-40: oklch(28.3% 0.141 291.089 / 0.4);
  --color-violet-950-30: oklch(28.3% 0.141 291.089 / 0.3);
  --color-violet-950-20: oklch(28.3% 0.141 291.089 / 0.2);
  --color-violet-950-10: oklch(28.3% 0.141 291.089 / 0.1);
  --color-violet-950-5: oklch(28.3% 0.141 291.089 / 0.05);
  /* Purple */
  --color-purple-50: oklch(97.7% 0.014 308.299);
  --color-purple-100: oklch(94.6% 0.033 307.174);
  --color-purple-200: oklch(90.2% 0.063 306.703);
  --color-purple-300: oklch(82.7% 0.119 306.383);
  --color-purple-400: oklch(71.4% 0.203 305.504);
  --color-purple-500: oklch(62.7% 0.265 303.9);
  --color-purple-600: oklch(55.8% 0.288 302.321);
  --color-purple-700: oklch(49.6% 0.265 301.924);
  --color-purple-800: oklch(43.8% 0.218 303.724);
  --color-purple-900: oklch(38.1% 0.176 304.987);
  --color-purple-950: oklch(29.1% 0.149 302.717);
  /* --color-purple-50 */
  --color-purple-50-100: oklch(97.7% 0.014 308.299 / 1);
  --color-purple-50-90: oklch(97.7% 0.014 308.299 / 0.9);
  --color-purple-50-80: oklch(97.7% 0.014 308.299 / 0.8);
  --color-purple-50-70: oklch(97.7% 0.014 308.299 / 0.7);
  --color-purple-50-60: oklch(97.7% 0.014 308.299 / 0.6);
  --color-purple-50-50: oklch(97.7% 0.014 308.299 / 0.5);
  --color-purple-50-40: oklch(97.7% 0.014 308.299 / 0.4);
  --color-purple-50-30: oklch(97.7% 0.014 308.299 / 0.3);
  --color-purple-50-20: oklch(97.7% 0.014 308.299 / 0.2);
  --color-purple-50-10: oklch(97.7% 0.014 308.299 / 0.1);
  --color-purple-50-5: oklch(97.7% 0.014 308.299 / 0.05);
  /* --color-purple-100 */
  --color-purple-100-100: oklch(94.6% 0.033 307.174 / 1);
  --color-purple-100-90: oklch(94.6% 0.033 307.174 / 0.9);
  --color-purple-100-80: oklch(94.6% 0.033 307.174 / 0.8);
  --color-purple-100-70: oklch(94.6% 0.033 307.174 / 0.7);
  --color-purple-100-60: oklch(94.6% 0.033 307.174 / 0.6);
  --color-purple-100-50: oklch(94.6% 0.033 307.174 / 0.5);
  --color-purple-100-40: oklch(94.6% 0.033 307.174 / 0.4);
  --color-purple-100-30: oklch(94.6% 0.033 307.174 / 0.3);
  --color-purple-100-20: oklch(94.6% 0.033 307.174 / 0.2);
  --color-purple-100-10: oklch(94.6% 0.033 307.174 / 0.1);
  --color-purple-100-5: oklch(94.6% 0.033 307.174 / 0.05);
  /* --color-purple-200 */
  --color-purple-200-100: oklch(90.2% 0.063 306.703 / 1);
  --color-purple-200-90: oklch(90.2% 0.063 306.703 / 0.9);
  --color-purple-200-80: oklch(90.2% 0.063 306.703 / 0.8);
  --color-purple-200-70: oklch(90.2% 0.063 306.703 / 0.7);
  --color-purple-200-60: oklch(90.2% 0.063 306.703 / 0.6);
  --color-purple-200-50: oklch(90.2% 0.063 306.703 / 0.5);
  --color-purple-200-40: oklch(90.2% 0.063 306.703 / 0.4);
  --color-purple-200-30: oklch(90.2% 0.063 306.703 / 0.3);
  --color-purple-200-20: oklch(90.2% 0.063 306.703 / 0.2);
  --color-purple-200-10: oklch(90.2% 0.063 306.703 / 0.1);
  --color-purple-200-5: oklch(90.2% 0.063 306.703 / 0.05);
  /* --color-purple-300 */
  --color-purple-300-100: oklch(82.7% 0.119 306.383 / 1);
  --color-purple-300-90: oklch(82.7% 0.119 306.383 / 0.9);
  --color-purple-300-80: oklch(82.7% 0.119 306.383 / 0.8);
  --color-purple-300-70: oklch(82.7% 0.119 306.383 / 0.7);
  --color-purple-300-60: oklch(82.7% 0.119 306.383 / 0.6);
  --color-purple-300-50: oklch(82.7% 0.119 306.383 / 0.5);
  --color-purple-300-40: oklch(82.7% 0.119 306.383 / 0.4);
  --color-purple-300-30: oklch(82.7% 0.119 306.383 / 0.3);
  --color-purple-300-20: oklch(82.7% 0.119 306.383 / 0.2);
  --color-purple-300-10: oklch(82.7% 0.119 306.383 / 0.1);
  --color-purple-300-5: oklch(82.7% 0.119 306.383 / 0.05);
  /* --color-purple-400 */
  --color-purple-400-100: oklch(71.4% 0.203 305.504 / 1);
  --color-purple-400-90: oklch(71.4% 0.203 305.504 / 0.9);
  --color-purple-400-80: oklch(71.4% 0.203 305.504 / 0.8);
  --color-purple-400-70: oklch(71.4% 0.203 305.504 / 0.7);
  --color-purple-400-60: oklch(71.4% 0.203 305.504 / 0.6);
  --color-purple-400-50: oklch(71.4% 0.203 305.504 / 0.5);
  --color-purple-400-40: oklch(71.4% 0.203 305.504 / 0.4);
  --color-purple-400-30: oklch(71.4% 0.203 305.504 / 0.3);
  --color-purple-400-20: oklch(71.4% 0.203 305.504 / 0.2);
  --color-purple-400-10: oklch(71.4% 0.203 305.504 / 0.1);
  --color-purple-400-5: oklch(71.4% 0.203 305.504 / 0.05);
  /* --color-purple-500 */
  --color-purple-500-100: oklch(62.7% 0.265 303.9 / 1);
  --color-purple-500-90: oklch(62.7% 0.265 303.9 / 0.9);
  --color-purple-500-80: oklch(62.7% 0.265 303.9 / 0.8);
  --color-purple-500-70: oklch(62.7% 0.265 303.9 / 0.7);
  --color-purple-500-60: oklch(62.7% 0.265 303.9 / 0.6);
  --color-purple-500-50: oklch(62.7% 0.265 303.9 / 0.5);
  --color-purple-500-40: oklch(62.7% 0.265 303.9 / 0.4);
  --color-purple-500-30: oklch(62.7% 0.265 303.9 / 0.3);
  --color-purple-500-20: oklch(62.7% 0.265 303.9 / 0.2);
  --color-purple-500-10: oklch(62.7% 0.265 303.9 / 0.1);
  --color-purple-500-5: oklch(62.7% 0.265 303.9 / 0.05);
  /* --color-purple-600 */
  --color-purple-600-100: oklch(55.8% 0.288 302.321 / 1);
  --color-purple-600-90: oklch(55.8% 0.288 302.321 / 0.9);
  --color-purple-600-80: oklch(55.8% 0.288 302.321 / 0.8);
  --color-purple-600-70: oklch(55.8% 0.288 302.321 / 0.7);
  --color-purple-600-60: oklch(55.8% 0.288 302.321 / 0.6);
  --color-purple-600-50: oklch(55.8% 0.288 302.321 / 0.5);
  --color-purple-600-40: oklch(55.8% 0.288 302.321 / 0.4);
  --color-purple-600-30: oklch(55.8% 0.288 302.321 / 0.3);
  --color-purple-600-20: oklch(55.8% 0.288 302.321 / 0.2);
  --color-purple-600-10: oklch(55.8% 0.288 302.321 / 0.1);
  --color-purple-600-5: oklch(55.8% 0.288 302.321 / 0.05);
  /* --color-purple-700 */
  --color-purple-700-100: oklch(49.6% 0.265 301.924 / 1);
  --color-purple-700-90: oklch(49.6% 0.265 301.924 / 0.9);
  --color-purple-700-80: oklch(49.6% 0.265 301.924 / 0.8);
  --color-purple-700-70: oklch(49.6% 0.265 301.924 / 0.7);
  --color-purple-700-60: oklch(49.6% 0.265 301.924 / 0.6);
  --color-purple-700-50: oklch(49.6% 0.265 301.924 / 0.5);
  --color-purple-700-40: oklch(49.6% 0.265 301.924 / 0.4);
  --color-purple-700-30: oklch(49.6% 0.265 301.924 / 0.3);
  --color-purple-700-20: oklch(49.6% 0.265 301.924 / 0.2);
  --color-purple-700-10: oklch(49.6% 0.265 301.924 / 0.1);
  --color-purple-700-5: oklch(49.6% 0.265 301.924 / 0.05);
  /* --color-purple-800 */
  --color-purple-800-100: oklch(43.8% 0.218 303.724 / 1);
  --color-purple-800-90: oklch(43.8% 0.218 303.724 / 0.9);
  --color-purple-800-80: oklch(43.8% 0.218 303.724 / 0.8);
  --color-purple-800-70: oklch(43.8% 0.218 303.724 / 0.7);
  --color-purple-800-60: oklch(43.8% 0.218 303.724 / 0.6);
  --color-purple-800-50: oklch(43.8% 0.218 303.724 / 0.5);
  --color-purple-800-40: oklch(43.8% 0.218 303.724 / 0.4);
  --color-purple-800-30: oklch(43.8% 0.218 303.724 / 0.3);
  --color-purple-800-20: oklch(43.8% 0.218 303.724 / 0.2);
  --color-purple-800-10: oklch(43.8% 0.218 303.724 / 0.1);
  --color-purple-800-5: oklch(43.8% 0.218 303.724 / 0.05);
  /* --color-purple-900 */
  --color-purple-900-100: oklch(38.1% 0.176 304.987 / 1);
  --color-purple-900-90: oklch(38.1% 0.176 304.987 / 0.9);
  --color-purple-900-80: oklch(38.1% 0.176 304.987 / 0.8);
  --color-purple-900-70: oklch(38.1% 0.176 304.987 / 0.7);
  --color-purple-900-60: oklch(38.1% 0.176 304.987 / 0.6);
  --color-purple-900-50: oklch(38.1% 0.176 304.987 / 0.5);
  --color-purple-900-40: oklch(38.1% 0.176 304.987 / 0.4);
  --color-purple-900-30: oklch(38.1% 0.176 304.987 / 0.3);
  --color-purple-900-20: oklch(38.1% 0.176 304.987 / 0.2);
  --color-purple-900-10: oklch(38.1% 0.176 304.987 / 0.1);
  --color-purple-900-5: oklch(38.1% 0.176 304.987 / 0.05);
  /* --color-purple-950 */
  --color-purple-950-100: oklch(29.1% 0.149 302.717 / 1);
  --color-purple-950-90: oklch(29.1% 0.149 302.717 / 0.9);
  --color-purple-950-80: oklch(29.1% 0.149 302.717 / 0.8);
  --color-purple-950-70: oklch(29.1% 0.149 302.717 / 0.7);
  --color-purple-950-60: oklch(29.1% 0.149 302.717 / 0.6);
  --color-purple-950-50: oklch(29.1% 0.149 302.717 / 0.5);
  --color-purple-950-40: oklch(29.1% 0.149 302.717 / 0.4);
  --color-purple-950-30: oklch(29.1% 0.149 302.717 / 0.3);
  --color-purple-950-20: oklch(29.1% 0.149 302.717 / 0.2);
  --color-purple-950-10: oklch(29.1% 0.149 302.717 / 0.1);
  --color-purple-950-5: oklch(29.1% 0.149 302.717 / 0.05);
  /* Fuchsia */
  --color-fuchsia-50: oklch(97.7% 0.017 320.058);
  --color-fuchsia-100: oklch(95.2% 0.037 318.852);
  --color-fuchsia-200: oklch(90.3% 0.076 319.62);
  --color-fuchsia-300: oklch(83.3% 0.145 321.434);
  --color-fuchsia-400: oklch(74% 0.238 322.16);
  --color-fuchsia-500: oklch(66.7% 0.295 322.15);
  --color-fuchsia-600: oklch(59.1% 0.293 322.896);
  --color-fuchsia-700: oklch(51.8% 0.253 323.949);
  --color-fuchsia-800: oklch(45.2% 0.211 324.591);
  --color-fuchsia-900: oklch(40.1% 0.17 325.612);
  --color-fuchsia-950: oklch(29.3% 0.136 325.661);
  /* --color-fuchsia-50 */
  --color-fuchsia-50-100: oklch(97.7% 0.017 320.058 / 1);
  --color-fuchsia-50-90: oklch(97.7% 0.017 320.058 / 0.9);
  --color-fuchsia-50-80: oklch(97.7% 0.017 320.058 / 0.8);
  --color-fuchsia-50-70: oklch(97.7% 0.017 320.058 / 0.7);
  --color-fuchsia-50-60: oklch(97.7% 0.017 320.058 / 0.6);
  --color-fuchsia-50-50: oklch(97.7% 0.017 320.058 / 0.5);
  --color-fuchsia-50-40: oklch(97.7% 0.017 320.058 / 0.4);
  --color-fuchsia-50-30: oklch(97.7% 0.017 320.058 / 0.3);
  --color-fuchsia-50-20: oklch(97.7% 0.017 320.058 / 0.2);
  --color-fuchsia-50-10: oklch(97.7% 0.017 320.058 / 0.1);
  --color-fuchsia-50-5: oklch(97.7% 0.017 320.058 / 0.05);
  /* --color-fuchsia-100 */
  --color-fuchsia-100-100: oklch(95.2% 0.037 318.852 / 1);
  --color-fuchsia-100-90: oklch(95.2% 0.037 318.852 / 0.9);
  --color-fuchsia-100-80: oklch(95.2% 0.037 318.852 / 0.8);
  --color-fuchsia-100-70: oklch(95.2% 0.037 318.852 / 0.7);
  --color-fuchsia-100-60: oklch(95.2% 0.037 318.852 / 0.6);
  --color-fuchsia-100-50: oklch(95.2% 0.037 318.852 / 0.5);
  --color-fuchsia-100-40: oklch(95.2% 0.037 318.852 / 0.4);
  --color-fuchsia-100-30: oklch(95.2% 0.037 318.852 / 0.3);
  --color-fuchsia-100-20: oklch(95.2% 0.037 318.852 / 0.2);
  --color-fuchsia-100-10: oklch(95.2% 0.037 318.852 / 0.1);
  --color-fuchsia-100-5: oklch(95.2% 0.037 318.852 / 0.05);
  /* --color-fuchsia-200 */
  --color-fuchsia-200-100: oklch(90.3% 0.076 319.62 / 1);
  --color-fuchsia-200-90: oklch(90.3% 0.076 319.62 / 0.9);
  --color-fuchsia-200-80: oklch(90.3% 0.076 319.62 / 0.8);
  --color-fuchsia-200-70: oklch(90.3% 0.076 319.62 / 0.7);
  --color-fuchsia-200-60: oklch(90.3% 0.076 319.62 / 0.6);
  --color-fuchsia-200-50: oklch(90.3% 0.076 319.62 / 0.5);
  --color-fuchsia-200-40: oklch(90.3% 0.076 319.62 / 0.4);
  --color-fuchsia-200-30: oklch(90.3% 0.076 319.62 / 0.3);
  --color-fuchsia-200-20: oklch(90.3% 0.076 319.62 / 0.2);
  --color-fuchsia-200-10: oklch(90.3% 0.076 319.62 / 0.1);
  --color-fuchsia-200-5: oklch(90.3% 0.076 319.62 / 0.05);
  /* --color-fuchsia-300 */
  --color-fuchsia-300-100: oklch(83.3% 0.145 321.434 / 1);
  --color-fuchsia-300-90: oklch(83.3% 0.145 321.434 / 0.9);
  --color-fuchsia-300-80: oklch(83.3% 0.145 321.434 / 0.8);
  --color-fuchsia-300-70: oklch(83.3% 0.145 321.434 / 0.7);
  --color-fuchsia-300-60: oklch(83.3% 0.145 321.434 / 0.6);
  --color-fuchsia-300-50: oklch(83.3% 0.145 321.434 / 0.5);
  --color-fuchsia-300-40: oklch(83.3% 0.145 321.434 / 0.4);
  --color-fuchsia-300-30: oklch(83.3% 0.145 321.434 / 0.3);
  --color-fuchsia-300-20: oklch(83.3% 0.145 321.434 / 0.2);
  --color-fuchsia-300-10: oklch(83.3% 0.145 321.434 / 0.1);
  --color-fuchsia-300-5: oklch(83.3% 0.145 321.434 / 0.05);
  /* --color-fuchsia-400 */
  --color-fuchsia-400-100: oklch(74% 0.238 322.16 / 1);
  --color-fuchsia-400-90: oklch(74% 0.238 322.16 / 0.9);
  --color-fuchsia-400-80: oklch(74% 0.238 322.16 / 0.8);
  --color-fuchsia-400-70: oklch(74% 0.238 322.16 / 0.7);
  --color-fuchsia-400-60: oklch(74% 0.238 322.16 / 0.6);
  --color-fuchsia-400-50: oklch(74% 0.238 322.16 / 0.5);
  --color-fuchsia-400-40: oklch(74% 0.238 322.16 / 0.4);
  --color-fuchsia-400-30: oklch(74% 0.238 322.16 / 0.3);
  --color-fuchsia-400-20: oklch(74% 0.238 322.16 / 0.2);
  --color-fuchsia-400-10: oklch(74% 0.238 322.16 / 0.1);
  --color-fuchsia-400-5: oklch(74% 0.238 322.16 / 0.05);
  /* --color-fuchsia-500 */
  --color-fuchsia-500-100: oklch(66.7% 0.295 322.15 / 1);
  --color-fuchsia-500-90: oklch(66.7% 0.295 322.15 / 0.9);
  --color-fuchsia-500-80: oklch(66.7% 0.295 322.15 / 0.8);
  --color-fuchsia-500-70: oklch(66.7% 0.295 322.15 / 0.7);
  --color-fuchsia-500-60: oklch(66.7% 0.295 322.15 / 0.6);
  --color-fuchsia-500-50: oklch(66.7% 0.295 322.15 / 0.5);
  --color-fuchsia-500-40: oklch(66.7% 0.295 322.15 / 0.4);
  --color-fuchsia-500-30: oklch(66.7% 0.295 322.15 / 0.3);
  --color-fuchsia-500-20: oklch(66.7% 0.295 322.15 / 0.2);
  --color-fuchsia-500-10: oklch(66.7% 0.295 322.15 / 0.1);
  --color-fuchsia-500-5: oklch(66.7% 0.295 322.15 / 0.05);
  /* --color-fuchsia-600 */
  --color-fuchsia-600-100: oklch(59.1% 0.293 322.896 / 1);
  --color-fuchsia-600-90: oklch(59.1% 0.293 322.896 / 0.9);
  --color-fuchsia-600-80: oklch(59.1% 0.293 322.896 / 0.8);
  --color-fuchsia-600-70: oklch(59.1% 0.293 322.896 / 0.7);
  --color-fuchsia-600-60: oklch(59.1% 0.293 322.896 / 0.6);
  --color-fuchsia-600-50: oklch(59.1% 0.293 322.896 / 0.5);
  --color-fuchsia-600-40: oklch(59.1% 0.293 322.896 / 0.4);
  --color-fuchsia-600-30: oklch(59.1% 0.293 322.896 / 0.3);
  --color-fuchsia-600-20: oklch(59.1% 0.293 322.896 / 0.2);
  --color-fuchsia-600-10: oklch(59.1% 0.293 322.896 / 0.1);
  --color-fuchsia-600-5: oklch(59.1% 0.293 322.896 / 0.05);
  /* --color-fuchsia-700 */
  --color-fuchsia-700-100: oklch(51.8% 0.253 323.949 / 1);
  --color-fuchsia-700-90: oklch(51.8% 0.253 323.949 / 0.9);
  --color-fuchsia-700-80: oklch(51.8% 0.253 323.949 / 0.8);
  --color-fuchsia-700-70: oklch(51.8% 0.253 323.949 / 0.7);
  --color-fuchsia-700-60: oklch(51.8% 0.253 323.949 / 0.6);
  --color-fuchsia-700-50: oklch(51.8% 0.253 323.949 / 0.5);
  --color-fuchsia-700-40: oklch(51.8% 0.253 323.949 / 0.4);
  --color-fuchsia-700-30: oklch(51.8% 0.253 323.949 / 0.3);
  --color-fuchsia-700-20: oklch(51.8% 0.253 323.949 / 0.2);
  --color-fuchsia-700-10: oklch(51.8% 0.253 323.949 / 0.1);
  --color-fuchsia-700-5: oklch(51.8% 0.253 323.949 / 0.05);
  /* --color-fuchsia-800 */
  --color-fuchsia-800-100: oklch(45.2% 0.211 324.591 / 1);
  --color-fuchsia-800-90: oklch(45.2% 0.211 324.591 / 0.9);
  --color-fuchsia-800-80: oklch(45.2% 0.211 324.591 / 0.8);
  --color-fuchsia-800-70: oklch(45.2% 0.211 324.591 / 0.7);
  --color-fuchsia-800-60: oklch(45.2% 0.211 324.591 / 0.6);
  --color-fuchsia-800-50: oklch(45.2% 0.211 324.591 / 0.5);
  --color-fuchsia-800-40: oklch(45.2% 0.211 324.591 / 0.4);
  --color-fuchsia-800-30: oklch(45.2% 0.211 324.591 / 0.3);
  --color-fuchsia-800-20: oklch(45.2% 0.211 324.591 / 0.2);
  --color-fuchsia-800-10: oklch(45.2% 0.211 324.591 / 0.1);
  --color-fuchsia-800-5: oklch(45.2% 0.211 324.591 / 0.05);
  /* --color-fuchsia-900 */
  --color-fuchsia-900-100: oklch(40.1% 0.17 325.612 / 1);
  --color-fuchsia-900-90: oklch(40.1% 0.17 325.612 / 0.9);
  --color-fuchsia-900-80: oklch(40.1% 0.17 325.612 / 0.8);
  --color-fuchsia-900-70: oklch(40.1% 0.17 325.612 / 0.7);
  --color-fuchsia-900-60: oklch(40.1% 0.17 325.612 / 0.6);
  --color-fuchsia-900-50: oklch(40.1% 0.17 325.612 / 0.5);
  --color-fuchsia-900-40: oklch(40.1% 0.17 325.612 / 0.4);
  --color-fuchsia-900-30: oklch(40.1% 0.17 325.612 / 0.3);
  --color-fuchsia-900-20: oklch(40.1% 0.17 325.612 / 0.2);
  --color-fuchsia-900-10: oklch(40.1% 0.17 325.612 / 0.1);
  --color-fuchsia-900-5: oklch(40.1% 0.17 325.612 / 0.05);
  /* --color-fuchsia-950 */
  --color-fuchsia-950-100: oklch(29.3% 0.136 325.661 / 1);
  --color-fuchsia-950-90: oklch(29.3% 0.136 325.661 / 0.9);
  --color-fuchsia-950-80: oklch(29.3% 0.136 325.661 / 0.8);
  --color-fuchsia-950-70: oklch(29.3% 0.136 325.661 / 0.7);
  --color-fuchsia-950-60: oklch(29.3% 0.136 325.661 / 0.6);
  --color-fuchsia-950-50: oklch(29.3% 0.136 325.661 / 0.5);
  --color-fuchsia-950-40: oklch(29.3% 0.136 325.661 / 0.4);
  --color-fuchsia-950-30: oklch(29.3% 0.136 325.661 / 0.3);
  --color-fuchsia-950-20: oklch(29.3% 0.136 325.661 / 0.2);
  --color-fuchsia-950-10: oklch(29.3% 0.136 325.661 / 0.1);
  --color-fuchsia-950-5: oklch(29.3% 0.136 325.661 / 0.05);
  /* Pink */
  --color-pink-50: oklch(97.1% 0.014 343.198);
  --color-pink-100: oklch(94.8% 0.028 342.258);
  --color-pink-200: oklch(89.9% 0.061 343.231);
  --color-pink-300: oklch(82.3% 0.12 346.018);
  --color-pink-400: oklch(71.8% 0.202 349.761);
  --color-pink-500: oklch(65.6% 0.241 354.308);
  --color-pink-600: oklch(59.2% 0.249 0.584);
  --color-pink-700: oklch(52.5% 0.223 3.958);
  --color-pink-800: oklch(45.9% 0.187 3.815);
  --color-pink-900: oklch(40.8% 0.153 2.432);
  --color-pink-950: oklch(28.4% 0.109 3.907);
  /* --color-pink-50 */
  --color-pink-50-100: oklch(97.1% 0.014 343.198 / 1);
  --color-pink-50-90: oklch(97.1% 0.014 343.198 / 0.9);
  --color-pink-50-80: oklch(97.1% 0.014 343.198 / 0.8);
  --color-pink-50-70: oklch(97.1% 0.014 343.198 / 0.7);
  --color-pink-50-60: oklch(97.1% 0.014 343.198 / 0.6);
  --color-pink-50-50: oklch(97.1% 0.014 343.198 / 0.5);
  --color-pink-50-40: oklch(97.1% 0.014 343.198 / 0.4);
  --color-pink-50-30: oklch(97.1% 0.014 343.198 / 0.3);
  --color-pink-50-20: oklch(97.1% 0.014 343.198 / 0.2);
  --color-pink-50-10: oklch(97.1% 0.014 343.198 / 0.1);
  --color-pink-50-5: oklch(97.1% 0.014 343.198 / 0.05);
  /* --color-pink-100 */
  --color-pink-100-100: oklch(94.8% 0.028 342.258 / 1);
  --color-pink-100-90: oklch(94.8% 0.028 342.258 / 0.9);
  --color-pink-100-80: oklch(94.8% 0.028 342.258 / 0.8);
  --color-pink-100-70: oklch(94.8% 0.028 342.258 / 0.7);
  --color-pink-100-60: oklch(94.8% 0.028 342.258 / 0.6);
  --color-pink-100-50: oklch(94.8% 0.028 342.258 / 0.5);
  --color-pink-100-40: oklch(94.8% 0.028 342.258 / 0.4);
  --color-pink-100-30: oklch(94.8% 0.028 342.258 / 0.3);
  --color-pink-100-20: oklch(94.8% 0.028 342.258 / 0.2);
  --color-pink-100-10: oklch(94.8% 0.028 342.258 / 0.1);
  --color-pink-100-5: oklch(94.8% 0.028 342.258 / 0.05);
  /* --color-pink-200 */
  --color-pink-200-100: oklch(89.9% 0.061 343.231 / 1);
  --color-pink-200-90: oklch(89.9% 0.061 343.231 / 0.9);
  --color-pink-200-80: oklch(89.9% 0.061 343.231 / 0.8);
  --color-pink-200-70: oklch(89.9% 0.061 343.231 / 0.7);
  --color-pink-200-60: oklch(89.9% 0.061 343.231 / 0.6);
  --color-pink-200-50: oklch(89.9% 0.061 343.231 / 0.5);
  --color-pink-200-40: oklch(89.9% 0.061 343.231 / 0.4);
  --color-pink-200-30: oklch(89.9% 0.061 343.231 / 0.3);
  --color-pink-200-20: oklch(89.9% 0.061 343.231 / 0.2);
  --color-pink-200-10: oklch(89.9% 0.061 343.231 / 0.1);
  --color-pink-200-5: oklch(89.9% 0.061 343.231 / 0.05);
  /* --color-pink-300 */
  --color-pink-300-100: oklch(82.3% 0.12 346.018 / 1);
  --color-pink-300-90: oklch(82.3% 0.12 346.018 / 0.9);
  --color-pink-300-80: oklch(82.3% 0.12 346.018 / 0.8);
  --color-pink-300-70: oklch(82.3% 0.12 346.018 / 0.7);
  --color-pink-300-60: oklch(82.3% 0.12 346.018 / 0.6);
  --color-pink-300-50: oklch(82.3% 0.12 346.018 / 0.5);
  --color-pink-300-40: oklch(82.3% 0.12 346.018 / 0.4);
  --color-pink-300-30: oklch(82.3% 0.12 346.018 / 0.3);
  --color-pink-300-20: oklch(82.3% 0.12 346.018 / 0.2);
  --color-pink-300-10: oklch(82.3% 0.12 346.018 / 0.1);
  --color-pink-300-5: oklch(82.3% 0.12 346.018 / 0.05);
  /* --color-pink-400 */
  --color-pink-400-100: oklch(71.8% 0.202 349.761 / 1);
  --color-pink-400-90: oklch(71.8% 0.202 349.761 / 0.9);
  --color-pink-400-80: oklch(71.8% 0.202 349.761 / 0.8);
  --color-pink-400-70: oklch(71.8% 0.202 349.761 / 0.7);
  --color-pink-400-60: oklch(71.8% 0.202 349.761 / 0.6);
  --color-pink-400-50: oklch(71.8% 0.202 349.761 / 0.5);
  --color-pink-400-40: oklch(71.8% 0.202 349.761 / 0.4);
  --color-pink-400-30: oklch(71.8% 0.202 349.761 / 0.3);
  --color-pink-400-20: oklch(71.8% 0.202 349.761 / 0.2);
  --color-pink-400-10: oklch(71.8% 0.202 349.761 / 0.1);
  --color-pink-400-5: oklch(71.8% 0.202 349.761 / 0.05);
  /* --color-pink-500 */
  --color-pink-500-100: oklch(65.6% 0.241 354.308 / 1);
  --color-pink-500-90: oklch(65.6% 0.241 354.308 / 0.9);
  --color-pink-500-80: oklch(65.6% 0.241 354.308 / 0.8);
  --color-pink-500-70: oklch(65.6% 0.241 354.308 / 0.7);
  --color-pink-500-60: oklch(65.6% 0.241 354.308 / 0.6);
  --color-pink-500-50: oklch(65.6% 0.241 354.308 / 0.5);
  --color-pink-500-40: oklch(65.6% 0.241 354.308 / 0.4);
  --color-pink-500-30: oklch(65.6% 0.241 354.308 / 0.3);
  --color-pink-500-20: oklch(65.6% 0.241 354.308 / 0.2);
  --color-pink-500-10: oklch(65.6% 0.241 354.308 / 0.1);
  --color-pink-500-5: oklch(65.6% 0.241 354.308 / 0.05);
  /* --color-pink-600 */
  --color-pink-600-100: oklch(59.2% 0.249 0.584 / 1);
  --color-pink-600-90: oklch(59.2% 0.249 0.584 / 0.9);
  --color-pink-600-80: oklch(59.2% 0.249 0.584 / 0.8);
  --color-pink-600-70: oklch(59.2% 0.249 0.584 / 0.7);
  --color-pink-600-60: oklch(59.2% 0.249 0.584 / 0.6);
  --color-pink-600-50: oklch(59.2% 0.249 0.584 / 0.5);
  --color-pink-600-40: oklch(59.2% 0.249 0.584 / 0.4);
  --color-pink-600-30: oklch(59.2% 0.249 0.584 / 0.3);
  --color-pink-600-20: oklch(59.2% 0.249 0.584 / 0.2);
  --color-pink-600-10: oklch(59.2% 0.249 0.584 / 0.1);
  --color-pink-600-5: oklch(59.2% 0.249 0.584 / 0.05);
  /* --color-pink-700 */
  --color-pink-700-100: oklch(52.5% 0.223 3.958 / 1);
  --color-pink-700-90: oklch(52.5% 0.223 3.958 / 0.9);
  --color-pink-700-80: oklch(52.5% 0.223 3.958 / 0.8);
  --color-pink-700-70: oklch(52.5% 0.223 3.958 / 0.7);
  --color-pink-700-60: oklch(52.5% 0.223 3.958 / 0.6);
  --color-pink-700-50: oklch(52.5% 0.223 3.958 / 0.5);
  --color-pink-700-40: oklch(52.5% 0.223 3.958 / 0.4);
  --color-pink-700-30: oklch(52.5% 0.223 3.958 / 0.3);
  --color-pink-700-20: oklch(52.5% 0.223 3.958 / 0.2);
  --color-pink-700-10: oklch(52.5% 0.223 3.958 / 0.1);
  --color-pink-700-5: oklch(52.5% 0.223 3.958 / 0.05);
  /* --color-pink-800 */
  --color-pink-800-100: oklch(45.9% 0.187 3.815 / 1);
  --color-pink-800-90: oklch(45.9% 0.187 3.815 / 0.9);
  --color-pink-800-80: oklch(45.9% 0.187 3.815 / 0.8);
  --color-pink-800-70: oklch(45.9% 0.187 3.815 / 0.7);
  --color-pink-800-60: oklch(45.9% 0.187 3.815 / 0.6);
  --color-pink-800-50: oklch(45.9% 0.187 3.815 / 0.5);
  --color-pink-800-40: oklch(45.9% 0.187 3.815 / 0.4);
  --color-pink-800-30: oklch(45.9% 0.187 3.815 / 0.3);
  --color-pink-800-20: oklch(45.9% 0.187 3.815 / 0.2);
  --color-pink-800-10: oklch(45.9% 0.187 3.815 / 0.1);
  --color-pink-800-5: oklch(45.9% 0.187 3.815 / 0.05);
  /* --color-pink-900 */
  --color-pink-900-100: oklch(40.8% 0.153 2.432 / 1);
  --color-pink-900-90: oklch(40.8% 0.153 2.432 / 0.9);
  --color-pink-900-80: oklch(40.8% 0.153 2.432 / 0.8);
  --color-pink-900-70: oklch(40.8% 0.153 2.432 / 0.7);
  --color-pink-900-60: oklch(40.8% 0.153 2.432 / 0.6);
  --color-pink-900-50: oklch(40.8% 0.153 2.432 / 0.5);
  --color-pink-900-40: oklch(40.8% 0.153 2.432 / 0.4);
  --color-pink-900-30: oklch(40.8% 0.153 2.432 / 0.3);
  --color-pink-900-20: oklch(40.8% 0.153 2.432 / 0.2);
  --color-pink-900-10: oklch(40.8% 0.153 2.432 / 0.1);
  --color-pink-900-5: oklch(40.8% 0.153 2.432 / 0.05);
  /* --color-pink-950 */
  --color-pink-950-100: oklch(28.4% 0.109 3.907 / 1);
  --color-pink-950-90: oklch(28.4% 0.109 3.907 / 0.9);
  --color-pink-950-80: oklch(28.4% 0.109 3.907 / 0.8);
  --color-pink-950-70: oklch(28.4% 0.109 3.907 / 0.7);
  --color-pink-950-60: oklch(28.4% 0.109 3.907 / 0.6);
  --color-pink-950-50: oklch(28.4% 0.109 3.907 / 0.5);
  --color-pink-950-40: oklch(28.4% 0.109 3.907 / 0.4);
  --color-pink-950-30: oklch(28.4% 0.109 3.907 / 0.3);
  --color-pink-950-20: oklch(28.4% 0.109 3.907 / 0.2);
  --color-pink-950-10: oklch(28.4% 0.109 3.907 / 0.1);
  --color-pink-950-5: oklch(28.4% 0.109 3.907 / 0.05);
  /* Rose */
  --color-rose-50: oklch(96.9% 0.015 12.422);
  --color-rose-100: oklch(94.1% 0.03 12.58);
  --color-rose-200: oklch(89.2% 0.058 10.001);
  --color-rose-300: oklch(81% 0.117 11.638);
  --color-rose-400: oklch(71.2% 0.194 13.428);
  --color-rose-500: oklch(64.5% 0.246 16.439);
  --color-rose-600: oklch(58.6% 0.253 17.585);
  --color-rose-700: oklch(51.4% 0.222 16.935);
  --color-rose-800: oklch(45.5% 0.188 13.697);
  --color-rose-900: oklch(41% 0.159 10.272);
  --color-rose-950: oklch(27.1% 0.105 12.094);
  /* --color-rose-50 */
  --color-rose-50-100: oklch(96.9% 0.015 12.422 / 1);
  --color-rose-50-90: oklch(96.9% 0.015 12.422 / 0.9);
  --color-rose-50-80: oklch(96.9% 0.015 12.422 / 0.8);
  --color-rose-50-70: oklch(96.9% 0.015 12.422 / 0.7);
  --color-rose-50-60: oklch(96.9% 0.015 12.422 / 0.6);
  --color-rose-50-50: oklch(96.9% 0.015 12.422 / 0.5);
  --color-rose-50-40: oklch(96.9% 0.015 12.422 / 0.4);
  --color-rose-50-30: oklch(96.9% 0.015 12.422 / 0.3);
  --color-rose-50-20: oklch(96.9% 0.015 12.422 / 0.2);
  --color-rose-50-10: oklch(96.9% 0.015 12.422 / 0.1);
  --color-rose-50-5: oklch(96.9% 0.015 12.422 / 0.05);
  /* --color-rose-100 */
  --color-rose-100-100: oklch(94.1% 0.03 12.58 / 1);
  --color-rose-100-90: oklch(94.1% 0.03 12.58 / 0.9);
  --color-rose-100-80: oklch(94.1% 0.03 12.58 / 0.8);
  --color-rose-100-70: oklch(94.1% 0.03 12.58 / 0.7);
  --color-rose-100-60: oklch(94.1% 0.03 12.58 / 0.6);
  --color-rose-100-50: oklch(94.1% 0.03 12.58 / 0.5);
  --color-rose-100-40: oklch(94.1% 0.03 12.58 / 0.4);
  --color-rose-100-30: oklch(94.1% 0.03 12.58 / 0.3);
  --color-rose-100-20: oklch(94.1% 0.03 12.58 / 0.2);
  --color-rose-100-10: oklch(94.1% 0.03 12.58 / 0.1);
  --color-rose-100-5: oklch(94.1% 0.03 12.58 / 0.05);
  /* --color-rose-200 */
  --color-rose-200-100: oklch(89.2% 0.058 10.001 / 1);
  --color-rose-200-90: oklch(89.2% 0.058 10.001 / 0.9);
  --color-rose-200-80: oklch(89.2% 0.058 10.001 / 0.8);
  --color-rose-200-70: oklch(89.2% 0.058 10.001 / 0.7);
  --color-rose-200-60: oklch(89.2% 0.058 10.001 / 0.6);
  --color-rose-200-50: oklch(89.2% 0.058 10.001 / 0.5);
  --color-rose-200-40: oklch(89.2% 0.058 10.001 / 0.4);
  --color-rose-200-30: oklch(89.2% 0.058 10.001 / 0.3);
  --color-rose-200-20: oklch(89.2% 0.058 10.001 / 0.2);
  --color-rose-200-10: oklch(89.2% 0.058 10.001 / 0.1);
  --color-rose-200-5: oklch(89.2% 0.058 10.001 / 0.05);
  /* --color-rose-300 */
  --color-rose-300-100: oklch(81% 0.117 11.638 / 1);
  --color-rose-300-90: oklch(81% 0.117 11.638 / 0.9);
  --color-rose-300-80: oklch(81% 0.117 11.638 / 0.8);
  --color-rose-300-70: oklch(81% 0.117 11.638 / 0.7);
  --color-rose-300-60: oklch(81% 0.117 11.638 / 0.6);
  --color-rose-300-50: oklch(81% 0.117 11.638 / 0.5);
  --color-rose-300-40: oklch(81% 0.117 11.638 / 0.4);
  --color-rose-300-30: oklch(81% 0.117 11.638 / 0.3);
  --color-rose-300-20: oklch(81% 0.117 11.638 / 0.2);
  --color-rose-300-10: oklch(81% 0.117 11.638 / 0.1);
  --color-rose-300-5: oklch(81% 0.117 11.638 / 0.05);
  /* --color-rose-400 */
  --color-rose-400-100: oklch(71.2% 0.194 13.428 / 1);
  --color-rose-400-90: oklch(71.2% 0.194 13.428 / 0.9);
  --color-rose-400-80: oklch(71.2% 0.194 13.428 / 0.8);
  --color-rose-400-70: oklch(71.2% 0.194 13.428 / 0.7);
  --color-rose-400-60: oklch(71.2% 0.194 13.428 / 0.6);
  --color-rose-400-50: oklch(71.2% 0.194 13.428 / 0.5);
  --color-rose-400-40: oklch(71.2% 0.194 13.428 / 0.4);
  --color-rose-400-30: oklch(71.2% 0.194 13.428 / 0.3);
  --color-rose-400-20: oklch(71.2% 0.194 13.428 / 0.2);
  --color-rose-400-10: oklch(71.2% 0.194 13.428 / 0.1);
  --color-rose-400-5: oklch(71.2% 0.194 13.428 / 0.05);
  /* --color-rose-500 */
  --color-rose-500-100: oklch(64.5% 0.246 16.439 / 1);
  --color-rose-500-90: oklch(64.5% 0.246 16.439 / 0.9);
  --color-rose-500-80: oklch(64.5% 0.246 16.439 / 0.8);
  --color-rose-500-70: oklch(64.5% 0.246 16.439 / 0.7);
  --color-rose-500-60: oklch(64.5% 0.246 16.439 / 0.6);
  --color-rose-500-50: oklch(64.5% 0.246 16.439 / 0.5);
  --color-rose-500-40: oklch(64.5% 0.246 16.439 / 0.4);
  --color-rose-500-30: oklch(64.5% 0.246 16.439 / 0.3);
  --color-rose-500-20: oklch(64.5% 0.246 16.439 / 0.2);
  --color-rose-500-10: oklch(64.5% 0.246 16.439 / 0.1);
  --color-rose-500-5: oklch(64.5% 0.246 16.439 / 0.05);
  /* --color-rose-600 */
  --color-rose-600-100: oklch(58.6% 0.253 17.585 / 1);
  --color-rose-600-90: oklch(58.6% 0.253 17.585 / 0.9);
  --color-rose-600-80: oklch(58.6% 0.253 17.585 / 0.8);
  --color-rose-600-70: oklch(58.6% 0.253 17.585 / 0.7);
  --color-rose-600-60: oklch(58.6% 0.253 17.585 / 0.6);
  --color-rose-600-50: oklch(58.6% 0.253 17.585 / 0.5);
  --color-rose-600-40: oklch(58.6% 0.253 17.585 / 0.4);
  --color-rose-600-30: oklch(58.6% 0.253 17.585 / 0.3);
  --color-rose-600-20: oklch(58.6% 0.253 17.585 / 0.2);
  --color-rose-600-10: oklch(58.6% 0.253 17.585 / 0.1);
  --color-rose-600-5: oklch(58.6% 0.253 17.585 / 0.05);
  /* --color-rose-700 */
  --color-rose-700-100: oklch(51.4% 0.222 16.935 / 1);
  --color-rose-700-90: oklch(51.4% 0.222 16.935 / 0.9);
  --color-rose-700-80: oklch(51.4% 0.222 16.935 / 0.8);
  --color-rose-700-70: oklch(51.4% 0.222 16.935 / 0.7);
  --color-rose-700-60: oklch(51.4% 0.222 16.935 / 0.6);
  --color-rose-700-50: oklch(51.4% 0.222 16.935 / 0.5);
  --color-rose-700-40: oklch(51.4% 0.222 16.935 / 0.4);
  --color-rose-700-30: oklch(51.4% 0.222 16.935 / 0.3);
  --color-rose-700-20: oklch(51.4% 0.222 16.935 / 0.2);
  --color-rose-700-10: oklch(51.4% 0.222 16.935 / 0.1);
  --color-rose-700-5: oklch(51.4% 0.222 16.935 / 0.05);
  /* --color-rose-800 */
  --color-rose-800-100: oklch(45.5% 0.188 13.697 / 1);
  --color-rose-800-90: oklch(45.5% 0.188 13.697 / 0.9);
  --color-rose-800-80: oklch(45.5% 0.188 13.697 / 0.8);
  --color-rose-800-70: oklch(45.5% 0.188 13.697 / 0.7);
  --color-rose-800-60: oklch(45.5% 0.188 13.697 / 0.6);
  --color-rose-800-50: oklch(45.5% 0.188 13.697 / 0.5);
  --color-rose-800-40: oklch(45.5% 0.188 13.697 / 0.4);
  --color-rose-800-30: oklch(45.5% 0.188 13.697 / 0.3);
  --color-rose-800-20: oklch(45.5% 0.188 13.697 / 0.2);
  --color-rose-800-10: oklch(45.5% 0.188 13.697 / 0.1);
  --color-rose-800-5: oklch(45.5% 0.188 13.697 / 0.05);
  /* --color-rose-900 */
  --color-rose-900-100: oklch(41% 0.159 10.272 / 1);
  --color-rose-900-90: oklch(41% 0.159 10.272 / 0.9);
  --color-rose-900-80: oklch(41% 0.159 10.272 / 0.8);
  --color-rose-900-70: oklch(41% 0.159 10.272 / 0.7);
  --color-rose-900-60: oklch(41% 0.159 10.272 / 0.6);
  --color-rose-900-50: oklch(41% 0.159 10.272 / 0.5);
  --color-rose-900-40: oklch(41% 0.159 10.272 / 0.4);
  --color-rose-900-30: oklch(41% 0.159 10.272 / 0.3);
  --color-rose-900-20: oklch(41% 0.159 10.272 / 0.2);
  --color-rose-900-10: oklch(41% 0.159 10.272 / 0.1);
  --color-rose-900-5: oklch(41% 0.159 10.272 / 0.05);
  /* --color-rose-950 */
  --color-rose-950-100: oklch(27.1% 0.105 12.094 / 1);
  --color-rose-950-90: oklch(27.1% 0.105 12.094 / 0.9);
  --color-rose-950-80: oklch(27.1% 0.105 12.094 / 0.8);
  --color-rose-950-70: oklch(27.1% 0.105 12.094 / 0.7);
  --color-rose-950-60: oklch(27.1% 0.105 12.094 / 0.6);
  --color-rose-950-50: oklch(27.1% 0.105 12.094 / 0.5);
  --color-rose-950-40: oklch(27.1% 0.105 12.094 / 0.4);
  --color-rose-950-30: oklch(27.1% 0.105 12.094 / 0.3);
  --color-rose-950-20: oklch(27.1% 0.105 12.094 / 0.2);
  --color-rose-950-10: oklch(27.1% 0.105 12.094 / 0.1);
  --color-rose-950-5: oklch(27.1% 0.105 12.094 / 0.05);
  /* Slate */
  --color-slate-50: oklch(98.4% 0.003 247.858);
  --color-slate-100: oklch(96.8% 0.007 247.896);
  --color-slate-200: oklch(92.9% 0.013 255.508);
  --color-slate-300: oklch(86.9% 0.022 252.894);
  --color-slate-400: oklch(70.4% 0.04 256.788);
  --color-slate-500: oklch(55.4% 0.046 257.417);
  --color-slate-600: oklch(44.6% 0.043 257.281);
  --color-slate-700: oklch(37.2% 0.044 257.287);
  --color-slate-800: oklch(27.9% 0.041 260.031);
  --color-slate-900: oklch(20.8% 0.042 265.755);
  --color-slate-950: oklch(12.9% 0.042 264.695);
  /* --color-slate-50 */
  --color-slate-50-100: oklch(98.4% 0.003 247.858 / 1);
  --color-slate-50-90: oklch(98.4% 0.003 247.858 / 0.9);
  --color-slate-50-80: oklch(98.4% 0.003 247.858 / 0.8);
  --color-slate-50-70: oklch(98.4% 0.003 247.858 / 0.7);
  --color-slate-50-60: oklch(98.4% 0.003 247.858 / 0.6);
  --color-slate-50-50: oklch(98.4% 0.003 247.858 / 0.5);
  --color-slate-50-40: oklch(98.4% 0.003 247.858 / 0.4);
  --color-slate-50-30: oklch(98.4% 0.003 247.858 / 0.3);
  --color-slate-50-20: oklch(98.4% 0.003 247.858 / 0.2);
  --color-slate-50-10: oklch(98.4% 0.003 247.858 / 0.1);
  --color-slate-50-5: oklch(98.4% 0.003 247.858 / 0.05);
  /* --color-slate-100 */
  --color-slate-100-100: oklch(96.8% 0.007 247.896 / 1);
  --color-slate-100-90: oklch(96.8% 0.007 247.896 / 0.9);
  --color-slate-100-80: oklch(96.8% 0.007 247.896 / 0.8);
  --color-slate-100-70: oklch(96.8% 0.007 247.896 / 0.7);
  --color-slate-100-60: oklch(96.8% 0.007 247.896 / 0.6);
  --color-slate-100-50: oklch(96.8% 0.007 247.896 / 0.5);
  --color-slate-100-40: oklch(96.8% 0.007 247.896 / 0.4);
  --color-slate-100-30: oklch(96.8% 0.007 247.896 / 0.3);
  --color-slate-100-20: oklch(96.8% 0.007 247.896 / 0.2);
  --color-slate-100-10: oklch(96.8% 0.007 247.896 / 0.1);
  --color-slate-100-5: oklch(96.8% 0.007 247.896 / 0.05);
  /* --color-slate-200 */
  --color-slate-200-100: oklch(92.9% 0.013 255.508 / 1);
  --color-slate-200-90: oklch(92.9% 0.013 255.508 / 0.9);
  --color-slate-200-80: oklch(92.9% 0.013 255.508 / 0.8);
  --color-slate-200-70: oklch(92.9% 0.013 255.508 / 0.7);
  --color-slate-200-60: oklch(92.9% 0.013 255.508 / 0.6);
  --color-slate-200-50: oklch(92.9% 0.013 255.508 / 0.5);
  --color-slate-200-40: oklch(92.9% 0.013 255.508 / 0.4);
  --color-slate-200-30: oklch(92.9% 0.013 255.508 / 0.3);
  --color-slate-200-20: oklch(92.9% 0.013 255.508 / 0.2);
  --color-slate-200-10: oklch(92.9% 0.013 255.508 / 0.1);
  --color-slate-200-5: oklch(92.9% 0.013 255.508 / 0.05);
  /* --color-slate-300 */
  --color-slate-300-100: oklch(86.9% 0.022 252.894 / 1);
  --color-slate-300-90: oklch(86.9% 0.022 252.894 / 0.9);
  --color-slate-300-80: oklch(86.9% 0.022 252.894 / 0.8);
  --color-slate-300-70: oklch(86.9% 0.022 252.894 / 0.7);
  --color-slate-300-60: oklch(86.9% 0.022 252.894 / 0.6);
  --color-slate-300-50: oklch(86.9% 0.022 252.894 / 0.5);
  --color-slate-300-40: oklch(86.9% 0.022 252.894 / 0.4);
  --color-slate-300-30: oklch(86.9% 0.022 252.894 / 0.3);
  --color-slate-300-20: oklch(86.9% 0.022 252.894 / 0.2);
  --color-slate-300-10: oklch(86.9% 0.022 252.894 / 0.1);
  --color-slate-300-5: oklch(86.9% 0.022 252.894 / 0.05);
  /* --color-slate-400 */
  --color-slate-400-100: oklch(70.4% 0.04 256.788 / 1);
  --color-slate-400-90: oklch(70.4% 0.04 256.788 / 0.9);
  --color-slate-400-80: oklch(70.4% 0.04 256.788 / 0.8);
  --color-slate-400-70: oklch(70.4% 0.04 256.788 / 0.7);
  --color-slate-400-60: oklch(70.4% 0.04 256.788 / 0.6);
  --color-slate-400-50: oklch(70.4% 0.04 256.788 / 0.5);
  --color-slate-400-40: oklch(70.4% 0.04 256.788 / 0.4);
  --color-slate-400-30: oklch(70.4% 0.04 256.788 / 0.3);
  --color-slate-400-20: oklch(70.4% 0.04 256.788 / 0.2);
  --color-slate-400-10: oklch(70.4% 0.04 256.788 / 0.1);
  --color-slate-400-5: oklch(70.4% 0.04 256.788 / 0.05);
  /* --color-slate-500 */
  --color-slate-500-100: oklch(55.4% 0.046 257.417 / 1);
  --color-slate-500-90: oklch(55.4% 0.046 257.417 / 0.9);
  --color-slate-500-80: oklch(55.4% 0.046 257.417 / 0.8);
  --color-slate-500-70: oklch(55.4% 0.046 257.417 / 0.7);
  --color-slate-500-60: oklch(55.4% 0.046 257.417 / 0.6);
  --color-slate-500-50: oklch(55.4% 0.046 257.417 / 0.5);
  --color-slate-500-40: oklch(55.4% 0.046 257.417 / 0.4);
  --color-slate-500-30: oklch(55.4% 0.046 257.417 / 0.3);
  --color-slate-500-20: oklch(55.4% 0.046 257.417 / 0.2);
  --color-slate-500-10: oklch(55.4% 0.046 257.417 / 0.1);
  --color-slate-500-5: oklch(55.4% 0.046 257.417 / 0.05);
  /* --color-slate-600 */
  --color-slate-600-100: oklch(44.6% 0.043 257.281 / 1);
  --color-slate-600-90: oklch(44.6% 0.043 257.281 / 0.9);
  --color-slate-600-80: oklch(44.6% 0.043 257.281 / 0.8);
  --color-slate-600-70: oklch(44.6% 0.043 257.281 / 0.7);
  --color-slate-600-60: oklch(44.6% 0.043 257.281 / 0.6);
  --color-slate-600-50: oklch(44.6% 0.043 257.281 / 0.5);
  --color-slate-600-40: oklch(44.6% 0.043 257.281 / 0.4);
  --color-slate-600-30: oklch(44.6% 0.043 257.281 / 0.3);
  --color-slate-600-20: oklch(44.6% 0.043 257.281 / 0.2);
  --color-slate-600-10: oklch(44.6% 0.043 257.281 / 0.1);
  --color-slate-600-5: oklch(44.6% 0.043 257.281 / 0.05);
  /* --color-slate-700 */
  --color-slate-700-100: oklch(37.2% 0.044 257.287 / 1);
  --color-slate-700-90: oklch(37.2% 0.044 257.287 / 0.9);
  --color-slate-700-80: oklch(37.2% 0.044 257.287 / 0.8);
  --color-slate-700-70: oklch(37.2% 0.044 257.287 / 0.7);
  --color-slate-700-60: oklch(37.2% 0.044 257.287 / 0.6);
  --color-slate-700-50: oklch(37.2% 0.044 257.287 / 0.5);
  --color-slate-700-40: oklch(37.2% 0.044 257.287 / 0.4);
  --color-slate-700-30: oklch(37.2% 0.044 257.287 / 0.3);
  --color-slate-700-20: oklch(37.2% 0.044 257.287 / 0.2);
  --color-slate-700-10: oklch(37.2% 0.044 257.287 / 0.1);
  --color-slate-700-5: oklch(37.2% 0.044 257.287 / 0.05);
  /* --color-slate-800 */
  --color-slate-800-100: oklch(27.9% 0.041 260.031 / 1);
  --color-slate-800-90: oklch(27.9% 0.041 260.031 / 0.9);
  --color-slate-800-80: oklch(27.9% 0.041 260.031 / 0.8);
  --color-slate-800-70: oklch(27.9% 0.041 260.031 / 0.7);
  --color-slate-800-60: oklch(27.9% 0.041 260.031 / 0.6);
  --color-slate-800-50: oklch(27.9% 0.041 260.031 / 0.5);
  --color-slate-800-40: oklch(27.9% 0.041 260.031 / 0.4);
  --color-slate-800-30: oklch(27.9% 0.041 260.031 / 0.3);
  --color-slate-800-20: oklch(27.9% 0.041 260.031 / 0.2);
  --color-slate-800-10: oklch(27.9% 0.041 260.031 / 0.1);
  --color-slate-800-5: oklch(27.9% 0.041 260.031 / 0.05);
  /* --color-slate-900 */
  --color-slate-900-100: oklch(20.8% 0.042 265.755 / 1);
  --color-slate-900-90: oklch(20.8% 0.042 265.755 / 0.9);
  --color-slate-900-80: oklch(20.8% 0.042 265.755 / 0.8);
  --color-slate-900-70: oklch(20.8% 0.042 265.755 / 0.7);
  --color-slate-900-60: oklch(20.8% 0.042 265.755 / 0.6);
  --color-slate-900-50: oklch(20.8% 0.042 265.755 / 0.5);
  --color-slate-900-40: oklch(20.8% 0.042 265.755 / 0.4);
  --color-slate-900-30: oklch(20.8% 0.042 265.755 / 0.3);
  --color-slate-900-20: oklch(20.8% 0.042 265.755 / 0.2);
  --color-slate-900-10: oklch(20.8% 0.042 265.755 / 0.1);
  --color-slate-900-5: oklch(20.8% 0.042 265.755 / 0.05);
  /* --color-slate-950 */
  --color-slate-950-100: oklch(12.9% 0.042 264.695 / 1);
  --color-slate-950-90: oklch(12.9% 0.042 264.695 / 0.9);
  --color-slate-950-80: oklch(12.9% 0.042 264.695 / 0.8);
  --color-slate-950-70: oklch(12.9% 0.042 264.695 / 0.7);
  --color-slate-950-60: oklch(12.9% 0.042 264.695 / 0.6);
  --color-slate-950-50: oklch(12.9% 0.042 264.695 / 0.5);
  --color-slate-950-40: oklch(12.9% 0.042 264.695 / 0.4);
  --color-slate-950-30: oklch(12.9% 0.042 264.695 / 0.3);
  --color-slate-950-20: oklch(12.9% 0.042 264.695 / 0.2);
  --color-slate-950-10: oklch(12.9% 0.042 264.695 / 0.1);
  --color-slate-950-5: oklch(12.9% 0.042 264.695 / 0.05);
  /* Gray */
  --color-gray-50: oklch(98.5% 0.002 247.839);
  --color-gray-100: oklch(96.7% 0.003 264.542);
  --color-gray-200: oklch(92.8% 0.006 264.531);
  --color-gray-300: oklch(87.2% 0.01 258.338);
  --color-gray-400: oklch(70.7% 0.022 261.325);
  --color-gray-500: oklch(55.1% 0.027 264.364);
  --color-gray-600: oklch(44.6% 0.03 256.802);
  --color-gray-700: oklch(37.3% 0.034 259.733);
  --color-gray-800: oklch(27.8% 0.033 256.848);
  --color-gray-900: oklch(21% 0.034 264.665);
  --color-gray-950: oklch(13% 0.028 261.692);
  /* --color-gray-50 */
  --color-gray-50-100: oklch(98.5% 0.002 247.839 / 1);
  --color-gray-50-90: oklch(98.5% 0.002 247.839 / 0.9);
  --color-gray-50-80: oklch(98.5% 0.002 247.839 / 0.8);
  --color-gray-50-70: oklch(98.5% 0.002 247.839 / 0.7);
  --color-gray-50-60: oklch(98.5% 0.002 247.839 / 0.6);
  --color-gray-50-50: oklch(98.5% 0.002 247.839 / 0.5);
  --color-gray-50-40: oklch(98.5% 0.002 247.839 / 0.4);
  --color-gray-50-30: oklch(98.5% 0.002 247.839 / 0.3);
  --color-gray-50-20: oklch(98.5% 0.002 247.839 / 0.2);
  --color-gray-50-10: oklch(98.5% 0.002 247.839 / 0.1);
  --color-gray-50-5: oklch(98.5% 0.002 247.839 / 0.05);
  /* --color-gray-100 */
  --color-gray-100-100: oklch(96.7% 0.003 264.542 / 1);
  --color-gray-100-90: oklch(96.7% 0.003 264.542 / 0.9);
  --color-gray-100-80: oklch(96.7% 0.003 264.542 / 0.8);
  --color-gray-100-70: oklch(96.7% 0.003 264.542 / 0.7);
  --color-gray-100-60: oklch(96.7% 0.003 264.542 / 0.6);
  --color-gray-100-50: oklch(96.7% 0.003 264.542 / 0.5);
  --color-gray-100-40: oklch(96.7% 0.003 264.542 / 0.4);
  --color-gray-100-30: oklch(96.7% 0.003 264.542 / 0.3);
  --color-gray-100-20: oklch(96.7% 0.003 264.542 / 0.2);
  --color-gray-100-10: oklch(96.7% 0.003 264.542 / 0.1);
  --color-gray-100-5: oklch(96.7% 0.003 264.542 / 0.05);
  /* --color-gray-200 */
  --color-gray-200-100: oklch(92.8% 0.006 264.531 / 1);
  --color-gray-200-90: oklch(92.8% 0.006 264.531 / 0.9);
  --color-gray-200-80: oklch(92.8% 0.006 264.531 / 0.8);
  --color-gray-200-70: oklch(92.8% 0.006 264.531 / 0.7);
  --color-gray-200-60: oklch(92.8% 0.006 264.531 / 0.6);
  --color-gray-200-50: oklch(92.8% 0.006 264.531 / 0.5);
  --color-gray-200-40: oklch(92.8% 0.006 264.531 / 0.4);
  --color-gray-200-30: oklch(92.8% 0.006 264.531 / 0.3);
  --color-gray-200-20: oklch(92.8% 0.006 264.531 / 0.2);
  --color-gray-200-10: oklch(92.8% 0.006 264.531 / 0.1);
  --color-gray-200-5: oklch(92.8% 0.006 264.531 / 0.05);
  /* --color-gray-300 */
  --color-gray-300-100: oklch(87.2% 0.01 258.338 / 1);
  --color-gray-300-90: oklch(87.2% 0.01 258.338 / 0.9);
  --color-gray-300-80: oklch(87.2% 0.01 258.338 / 0.8);
  --color-gray-300-70: oklch(87.2% 0.01 258.338 / 0.7);
  --color-gray-300-60: oklch(87.2% 0.01 258.338 / 0.6);
  --color-gray-300-50: oklch(87.2% 0.01 258.338 / 0.5);
  --color-gray-300-40: oklch(87.2% 0.01 258.338 / 0.4);
  --color-gray-300-30: oklch(87.2% 0.01 258.338 / 0.3);
  --color-gray-300-20: oklch(87.2% 0.01 258.338 / 0.2);
  --color-gray-300-10: oklch(87.2% 0.01 258.338 / 0.1);
  --color-gray-300-5: oklch(87.2% 0.01 258.338 / 0.05);
  /* --color-gray-400 */
  --color-gray-400-100: oklch(70.7% 0.022 261.325 / 1);
  --color-gray-400-90: oklch(70.7% 0.022 261.325 / 0.9);
  --color-gray-400-80: oklch(70.7% 0.022 261.325 / 0.8);
  --color-gray-400-70: oklch(70.7% 0.022 261.325 / 0.7);
  --color-gray-400-60: oklch(70.7% 0.022 261.325 / 0.6);
  --color-gray-400-50: oklch(70.7% 0.022 261.325 / 0.5);
  --color-gray-400-40: oklch(70.7% 0.022 261.325 / 0.4);
  --color-gray-400-30: oklch(70.7% 0.022 261.325 / 0.3);
  --color-gray-400-20: oklch(70.7% 0.022 261.325 / 0.2);
  --color-gray-400-10: oklch(70.7% 0.022 261.325 / 0.1);
  --color-gray-400-5: oklch(70.7% 0.022 261.325 / 0.05);
  /* --color-gray-500 */
  --color-gray-500-100: oklch(55.1% 0.027 264.364 / 1);
  --color-gray-500-90: oklch(55.1% 0.027 264.364 / 0.9);
  --color-gray-500-80: oklch(55.1% 0.027 264.364 / 0.8);
  --color-gray-500-70: oklch(55.1% 0.027 264.364 / 0.7);
  --color-gray-500-60: oklch(55.1% 0.027 264.364 / 0.6);
  --color-gray-500-50: oklch(55.1% 0.027 264.364 / 0.5);
  --color-gray-500-40: oklch(55.1% 0.027 264.364 / 0.4);
  --color-gray-500-30: oklch(55.1% 0.027 264.364 / 0.3);
  --color-gray-500-20: oklch(55.1% 0.027 264.364 / 0.2);
  --color-gray-500-10: oklch(55.1% 0.027 264.364 / 0.1);
  --color-gray-500-5: oklch(55.1% 0.027 264.364 / 0.05);
  /* --color-gray-600 */
  --color-gray-600-100: oklch(44.6% 0.03 256.802 / 1);
  --color-gray-600-90: oklch(44.6% 0.03 256.802 / 0.9);
  --color-gray-600-80: oklch(44.6% 0.03 256.802 / 0.8);
  --color-gray-600-70: oklch(44.6% 0.03 256.802 / 0.7);
  --color-gray-600-60: oklch(44.6% 0.03 256.802 / 0.6);
  --color-gray-600-50: oklch(44.6% 0.03 256.802 / 0.5);
  --color-gray-600-40: oklch(44.6% 0.03 256.802 / 0.4);
  --color-gray-600-30: oklch(44.6% 0.03 256.802 / 0.3);
  --color-gray-600-20: oklch(44.6% 0.03 256.802 / 0.2);
  --color-gray-600-10: oklch(44.6% 0.03 256.802 / 0.1);
  --color-gray-600-5: oklch(44.6% 0.03 256.802 / 0.05);
  /* --color-gray-700 */
  --color-gray-700-100: oklch(37.3% 0.034 259.733 / 1);
  --color-gray-700-90: oklch(37.3% 0.034 259.733 / 0.9);
  --color-gray-700-80: oklch(37.3% 0.034 259.733 / 0.8);
  --color-gray-700-70: oklch(37.3% 0.034 259.733 / 0.7);
  --color-gray-700-60: oklch(37.3% 0.034 259.733 / 0.6);
  --color-gray-700-50: oklch(37.3% 0.034 259.733 / 0.5);
  --color-gray-700-40: oklch(37.3% 0.034 259.733 / 0.4);
  --color-gray-700-30: oklch(37.3% 0.034 259.733 / 0.3);
  --color-gray-700-20: oklch(37.3% 0.034 259.733 / 0.2);
  --color-gray-700-10: oklch(37.3% 0.034 259.733 / 0.1);
  --color-gray-700-5: oklch(37.3% 0.034 259.733 / 0.05);
  /* --color-gray-800 */
  --color-gray-800-100: oklch(27.8% 0.033 256.848 / 1);
  --color-gray-800-90: oklch(27.8% 0.033 256.848 / 0.9);
  --color-gray-800-80: oklch(27.8% 0.033 256.848 / 0.8);
  --color-gray-800-70: oklch(27.8% 0.033 256.848 / 0.7);
  --color-gray-800-60: oklch(27.8% 0.033 256.848 / 0.6);
  --color-gray-800-50: oklch(27.8% 0.033 256.848 / 0.5);
  --color-gray-800-40: oklch(27.8% 0.033 256.848 / 0.4);
  --color-gray-800-30: oklch(27.8% 0.033 256.848 / 0.3);
  --color-gray-800-20: oklch(27.8% 0.033 256.848 / 0.2);
  --color-gray-800-10: oklch(27.8% 0.033 256.848 / 0.1);
  --color-gray-800-5: oklch(27.8% 0.033 256.848 / 0.05);
  /* --color-gray-900 */
  --color-gray-900-100: oklch(21% 0.034 264.665 / 1);
  --color-gray-900-90: oklch(21% 0.034 264.665 / 0.9);
  --color-gray-900-80: oklch(21% 0.034 264.665 / 0.8);
  --color-gray-900-70: oklch(21% 0.034 264.665 / 0.7);
  --color-gray-900-60: oklch(21% 0.034 264.665 / 0.6);
  --color-gray-900-50: oklch(21% 0.034 264.665 / 0.5);
  --color-gray-900-40: oklch(21% 0.034 264.665 / 0.4);
  --color-gray-900-30: oklch(21% 0.034 264.665 / 0.3);
  --color-gray-900-20: oklch(21% 0.034 264.665 / 0.2);
  --color-gray-900-10: oklch(21% 0.034 264.665 / 0.1);
  --color-gray-900-5: oklch(21% 0.034 264.665 / 0.05);
  /* --color-gray-950 */
  --color-gray-950-100: oklch(13% 0.028 261.692 / 1);
  --color-gray-950-90: oklch(13% 0.028 261.692 / 0.9);
  --color-gray-950-80: oklch(13% 0.028 261.692 / 0.8);
  --color-gray-950-70: oklch(13% 0.028 261.692 / 0.7);
  --color-gray-950-60: oklch(13% 0.028 261.692 / 0.6);
  --color-gray-950-50: oklch(13% 0.028 261.692 / 0.5);
  --color-gray-950-40: oklch(13% 0.028 261.692 / 0.4);
  --color-gray-950-30: oklch(13% 0.028 261.692 / 0.3);
  --color-gray-950-20: oklch(13% 0.028 261.692 / 0.2);
  --color-gray-950-10: oklch(13% 0.028 261.692 / 0.1);
  --color-gray-950-5: oklch(13% 0.028 261.692 / 0.05);
  /* Zinc */
  --color-zinc-50: oklch(98.5% 0 0);
  --color-zinc-100: oklch(96.7% 0.001 286.375);
  --color-zinc-200: oklch(92% 0.004 286.32);
  --color-zinc-300: oklch(87.1% 0.006 286.286);
  --color-zinc-400: oklch(70.5% 0.015 286.067);
  --color-zinc-500: oklch(55.2% 0.016 285.938);
  --color-zinc-600: oklch(44.2% 0.017 285.786);
  --color-zinc-700: oklch(37% 0.013 285.805);
  --color-zinc-800: oklch(27.4% 0.006 286.033);
  --color-zinc-900: oklch(21% 0.006 285.885);
  --color-zinc-950: oklch(14.1% 0.005 285.823);
  /* --color-zinc-50 */
  --color-zinc-50-100: oklch(98.5% 0 0 / 1);
  --color-zinc-50-90: oklch(98.5% 0 0 / 0.9);
  --color-zinc-50-80: oklch(98.5% 0 0 / 0.8);
  --color-zinc-50-70: oklch(98.5% 0 0 / 0.7);
  --color-zinc-50-60: oklch(98.5% 0 0 / 0.6);
  --color-zinc-50-50: oklch(98.5% 0 0 / 0.5);
  --color-zinc-50-40: oklch(98.5% 0 0 / 0.4);
  --color-zinc-50-30: oklch(98.5% 0 0 / 0.3);
  --color-zinc-50-20: oklch(98.5% 0 0 / 0.2);
  --color-zinc-50-10: oklch(98.5% 0 0 / 0.1);
  --color-zinc-50-5: oklch(98.5% 0 0 / 0.05);
  /* --color-zinc-100 */
  --color-zinc-100-100: oklch(96.7% 0.001 286.375 / 1);
  --color-zinc-100-90: oklch(96.7% 0.001 286.375 / 0.9);
  --color-zinc-100-80: oklch(96.7% 0.001 286.375 / 0.8);
  --color-zinc-100-70: oklch(96.7% 0.001 286.375 / 0.7);
  --color-zinc-100-60: oklch(96.7% 0.001 286.375 / 0.6);
  --color-zinc-100-50: oklch(96.7% 0.001 286.375 / 0.5);
  --color-zinc-100-40: oklch(96.7% 0.001 286.375 / 0.4);
  --color-zinc-100-30: oklch(96.7% 0.001 286.375 / 0.3);
  --color-zinc-100-20: oklch(96.7% 0.001 286.375 / 0.2);
  --color-zinc-100-10: oklch(96.7% 0.001 286.375 / 0.1);
  --color-zinc-100-5: oklch(96.7% 0.001 286.375 / 0.05);
  /* --color-zinc-200 */
  --color-zinc-200-100: oklch(92% 0.004 286.32 / 1);
  --color-zinc-200-90: oklch(92% 0.004 286.32 / 0.9);
  --color-zinc-200-80: oklch(92% 0.004 286.32 / 0.8);
  --color-zinc-200-70: oklch(92% 0.004 286.32 / 0.7);
  --color-zinc-200-60: oklch(92% 0.004 286.32 / 0.6);
  --color-zinc-200-50: oklch(92% 0.004 286.32 / 0.5);
  --color-zinc-200-40: oklch(92% 0.004 286.32 / 0.4);
  --color-zinc-200-30: oklch(92% 0.004 286.32 / 0.3);
  --color-zinc-200-20: oklch(92% 0.004 286.32 / 0.2);
  --color-zinc-200-10: oklch(92% 0.004 286.32 / 0.1);
  --color-zinc-200-5: oklch(92% 0.004 286.32 / 0.05);
  /* --color-zinc-300 */
  --color-zinc-300-100: oklch(87.1% 0.006 286.286 / 1);
  --color-zinc-300-90: oklch(87.1% 0.006 286.286 / 0.9);
  --color-zinc-300-80: oklch(87.1% 0.006 286.286 / 0.8);
  --color-zinc-300-70: oklch(87.1% 0.006 286.286 / 0.7);
  --color-zinc-300-60: oklch(87.1% 0.006 286.286 / 0.6);
  --color-zinc-300-50: oklch(87.1% 0.006 286.286 / 0.5);
  --color-zinc-300-40: oklch(87.1% 0.006 286.286 / 0.4);
  --color-zinc-300-30: oklch(87.1% 0.006 286.286 / 0.3);
  --color-zinc-300-20: oklch(87.1% 0.006 286.286 / 0.2);
  --color-zinc-300-10: oklch(87.1% 0.006 286.286 / 0.1);
  --color-zinc-300-5: oklch(87.1% 0.006 286.286 / 0.05);
  /* --color-zinc-400 */
  --color-zinc-400-100: oklch(70.5% 0.015 286.067 / 1);
  --color-zinc-400-90: oklch(70.5% 0.015 286.067 / 0.9);
  --color-zinc-400-80: oklch(70.5% 0.015 286.067 / 0.8);
  --color-zinc-400-70: oklch(70.5% 0.015 286.067 / 0.7);
  --color-zinc-400-60: oklch(70.5% 0.015 286.067 / 0.6);
  --color-zinc-400-50: oklch(70.5% 0.015 286.067 / 0.5);
  --color-zinc-400-40: oklch(70.5% 0.015 286.067 / 0.4);
  --color-zinc-400-30: oklch(70.5% 0.015 286.067 / 0.3);
  --color-zinc-400-20: oklch(70.5% 0.015 286.067 / 0.2);
  --color-zinc-400-10: oklch(70.5% 0.015 286.067 / 0.1);
  --color-zinc-400-5: oklch(70.5% 0.015 286.067 / 0.05);
  /* --color-zinc-500 */
  --color-zinc-500-100: oklch(55.2% 0.016 285.938 / 1);
  --color-zinc-500-90: oklch(55.2% 0.016 285.938 / 0.9);
  --color-zinc-500-80: oklch(55.2% 0.016 285.938 / 0.8);
  --color-zinc-500-70: oklch(55.2% 0.016 285.938 / 0.7);
  --color-zinc-500-60: oklch(55.2% 0.016 285.938 / 0.6);
  --color-zinc-500-50: oklch(55.2% 0.016 285.938 / 0.5);
  --color-zinc-500-40: oklch(55.2% 0.016 285.938 / 0.4);
  --color-zinc-500-30: oklch(55.2% 0.016 285.938 / 0.3);
  --color-zinc-500-20: oklch(55.2% 0.016 285.938 / 0.2);
  --color-zinc-500-10: oklch(55.2% 0.016 285.938 / 0.1);
  --color-zinc-500-5: oklch(55.2% 0.016 285.938 / 0.05);
  /* --color-zinc-600 */
  --color-zinc-600-100: oklch(44.2% 0.017 285.786 / 1);
  --color-zinc-600-90: oklch(44.2% 0.017 285.786 / 0.9);
  --color-zinc-600-80: oklch(44.2% 0.017 285.786 / 0.8);
  --color-zinc-600-70: oklch(44.2% 0.017 285.786 / 0.7);
  --color-zinc-600-60: oklch(44.2% 0.017 285.786 / 0.6);
  --color-zinc-600-50: oklch(44.2% 0.017 285.786 / 0.5);
  --color-zinc-600-40: oklch(44.2% 0.017 285.786 / 0.4);
  --color-zinc-600-30: oklch(44.2% 0.017 285.786 / 0.3);
  --color-zinc-600-20: oklch(44.2% 0.017 285.786 / 0.2);
  --color-zinc-600-10: oklch(44.2% 0.017 285.786 / 0.1);
  --color-zinc-600-5: oklch(44.2% 0.017 285.786 / 0.05);
  /* --color-zinc-700 */
  --color-zinc-700-100: oklch(37% 0.013 285.805 / 1);
  --color-zinc-700-90: oklch(37% 0.013 285.805 / 0.9);
  --color-zinc-700-80: oklch(37% 0.013 285.805 / 0.8);
  --color-zinc-700-70: oklch(37% 0.013 285.805 / 0.7);
  --color-zinc-700-60: oklch(37% 0.013 285.805 / 0.6);
  --color-zinc-700-50: oklch(37% 0.013 285.805 / 0.5);
  --color-zinc-700-40: oklch(37% 0.013 285.805 / 0.4);
  --color-zinc-700-30: oklch(37% 0.013 285.805 / 0.3);
  --color-zinc-700-20: oklch(37% 0.013 285.805 / 0.2);
  --color-zinc-700-10: oklch(37% 0.013 285.805 / 0.1);
  --color-zinc-700-5: oklch(37% 0.013 285.805 / 0.05);
  /* --color-zinc-800 */
  --color-zinc-800-100: oklch(27.4% 0.006 286.033 / 1);
  --color-zinc-800-90: oklch(27.4% 0.006 286.033 / 0.9);
  --color-zinc-800-80: oklch(27.4% 0.006 286.033 / 0.8);
  --color-zinc-800-70: oklch(27.4% 0.006 286.033 / 0.7);
  --color-zinc-800-60: oklch(27.4% 0.006 286.033 / 0.6);
  --color-zinc-800-50: oklch(27.4% 0.006 286.033 / 0.5);
  --color-zinc-800-40: oklch(27.4% 0.006 286.033 / 0.4);
  --color-zinc-800-30: oklch(27.4% 0.006 286.033 / 0.3);
  --color-zinc-800-20: oklch(27.4% 0.006 286.033 / 0.2);
  --color-zinc-800-10: oklch(27.4% 0.006 286.033 / 0.1);
  --color-zinc-800-5: oklch(27.4% 0.006 286.033 / 0.05);
  /* --color-zinc-900 */
  --color-zinc-900-100: oklch(21% 0.006 285.885 / 1);
  --color-zinc-900-90: oklch(21% 0.006 285.885 / 0.9);
  --color-zinc-900-80: oklch(21% 0.006 285.885 / 0.8);
  --color-zinc-900-70: oklch(21% 0.006 285.885 / 0.7);
  --color-zinc-900-60: oklch(21% 0.006 285.885 / 0.6);
  --color-zinc-900-50: oklch(21% 0.006 285.885 / 0.5);
  --color-zinc-900-40: oklch(21% 0.006 285.885 / 0.4);
  --color-zinc-900-30: oklch(21% 0.006 285.885 / 0.3);
  --color-zinc-900-20: oklch(21% 0.006 285.885 / 0.2);
  --color-zinc-900-10: oklch(21% 0.006 285.885 / 0.1);
  --color-zinc-900-5: oklch(21% 0.006 285.885 / 0.05);
  /* --color-zinc-950 */
  --color-zinc-950-100: oklch(14.1% 0.005 285.823 / 1);
  --color-zinc-950-90: oklch(14.1% 0.005 285.823 / 0.9);
  --color-zinc-950-80: oklch(14.1% 0.005 285.823 / 0.8);
  --color-zinc-950-70: oklch(14.1% 0.005 285.823 / 0.7);
  --color-zinc-950-60: oklch(14.1% 0.005 285.823 / 0.6);
  --color-zinc-950-50: oklch(14.1% 0.005 285.823 / 0.5);
  --color-zinc-950-40: oklch(14.1% 0.005 285.823 / 0.4);
  --color-zinc-950-30: oklch(14.1% 0.005 285.823 / 0.3);
  --color-zinc-950-20: oklch(14.1% 0.005 285.823 / 0.2);
  --color-zinc-950-10: oklch(14.1% 0.005 285.823 / 0.1);
  --color-zinc-950-5: oklch(14.1% 0.005 285.823 / 0.05);
  /* Neutral */
  --color-neutral-50: oklch(98.5% 0 0);
  --color-neutral-100: oklch(97% 0 0);
  --color-neutral-200: oklch(92.2% 0 0);
  --color-neutral-300: oklch(87% 0 0);
  --color-neutral-400: oklch(70.8% 0 0);
  --color-neutral-500: oklch(55.6% 0 0);
  --color-neutral-600: oklch(43.9% 0 0);
  --color-neutral-700: oklch(37.1% 0 0);
  --color-neutral-750: oklch(29% 0 0);
  --color-neutral-800: oklch(26.9% 0 0);
  --color-neutral-850: oklch(23.5% 0 0);
  --color-neutral-900: oklch(20.5% 0 0);
  --color-neutral-950: oklch(14.5% 0 0);
  /* --color-neutral-50 */
  --color-neutral-50-100: oklch(98.5% 0 0 / 1);
  --color-neutral-50-90: oklch(98.5% 0 0 / 0.9);
  --color-neutral-50-80: oklch(98.5% 0 0 / 0.8);
  --color-neutral-50-70: oklch(98.5% 0 0 / 0.7);
  --color-neutral-50-60: oklch(98.5% 0 0 / 0.6);
  --color-neutral-50-50: oklch(98.5% 0 0 / 0.5);
  --color-neutral-50-40: oklch(98.5% 0 0 / 0.4);
  --color-neutral-50-30: oklch(98.5% 0 0 / 0.3);
  --color-neutral-50-20: oklch(98.5% 0 0 / 0.2);
  --color-neutral-50-10: oklch(98.5% 0 0 / 0.1);
  --color-neutral-50-5: oklch(98.5% 0 0 / 0.05);
  /* --color-neutral-100 */
  --color-neutral-100-100: oklch(97% 0 0 / 1);
  --color-neutral-100-90: oklch(97% 0 0 / 0.9);
  --color-neutral-100-80: oklch(97% 0 0 / 0.8);
  --color-neutral-100-70: oklch(97% 0 0 / 0.7);
  --color-neutral-100-60: oklch(97% 0 0 / 0.6);
  --color-neutral-100-50: oklch(97% 0 0 / 0.5);
  --color-neutral-100-40: oklch(97% 0 0 / 0.4);
  --color-neutral-100-30: oklch(97% 0 0 / 0.3);
  --color-neutral-100-20: oklch(97% 0 0 / 0.2);
  --color-neutral-100-10: oklch(97% 0 0 / 0.1);
  --color-neutral-100-5: oklch(97% 0 0 / 0.05);
  /* --color-neutral-200 */
  --color-neutral-200-100: oklch(92.2% 0 0 / 1);
  --color-neutral-200-90: oklch(92.2% 0 0 / 0.9);
  --color-neutral-200-80: oklch(92.2% 0 0 / 0.8);
  --color-neutral-200-70: oklch(92.2% 0 0 / 0.7);
  --color-neutral-200-60: oklch(92.2% 0 0 / 0.6);
  --color-neutral-200-50: oklch(92.2% 0 0 / 0.5);
  --color-neutral-200-40: oklch(92.2% 0 0 / 0.4);
  --color-neutral-200-30: oklch(92.2% 0 0 / 0.3);
  --color-neutral-200-20: oklch(92.2% 0 0 / 0.2);
  --color-neutral-200-10: oklch(92.2% 0 0 / 0.1);
  --color-neutral-200-5: oklch(92.2% 0 0 / 0.05);
  /* --color-neutral-300 */
  --color-neutral-300-100: oklch(87% 0 0 / 1);
  --color-neutral-300-90: oklch(87% 0 0 / 0.9);
  --color-neutral-300-80: oklch(87% 0 0 / 0.8);
  --color-neutral-300-70: oklch(87% 0 0 / 0.7);
  --color-neutral-300-60: oklch(87% 0 0 / 0.6);
  --color-neutral-300-50: oklch(87% 0 0 / 0.5);
  --color-neutral-300-40: oklch(87% 0 0 / 0.4);
  --color-neutral-300-30: oklch(87% 0 0 / 0.3);
  --color-neutral-300-20: oklch(87% 0 0 / 0.2);
  --color-neutral-300-10: oklch(87% 0 0 / 0.1);
  --color-neutral-300-5: oklch(87% 0 0 / 0.05);
  /* --color-neutral-400 */
  --color-neutral-400-100: oklch(70.8% 0 0 / 1);
  --color-neutral-400-90: oklch(70.8% 0 0 / 0.9);
  --color-neutral-400-80: oklch(70.8% 0 0 / 0.8);
  --color-neutral-400-70: oklch(70.8% 0 0 / 0.7);
  --color-neutral-400-60: oklch(70.8% 0 0 / 0.6);
  --color-neutral-400-50: oklch(70.8% 0 0 / 0.5);
  --color-neutral-400-40: oklch(70.8% 0 0 / 0.4);
  --color-neutral-400-30: oklch(70.8% 0 0 / 0.3);
  --color-neutral-400-20: oklch(70.8% 0 0 / 0.2);
  --color-neutral-400-10: oklch(70.8% 0 0 / 0.1);
  --color-neutral-400-5: oklch(70.8% 0 0 / 0.05);
  /* --color-neutral-500 */
  --color-neutral-500-100: oklch(55.6% 0 0 / 1);
  --color-neutral-500-90: oklch(55.6% 0 0 / 0.9);
  --color-neutral-500-80: oklch(55.6% 0 0 / 0.8);
  --color-neutral-500-70: oklch(55.6% 0 0 / 0.7);
  --color-neutral-500-60: oklch(55.6% 0 0 / 0.6);
  --color-neutral-500-50: oklch(55.6% 0 0 / 0.5);
  --color-neutral-500-40: oklch(55.6% 0 0 / 0.4);
  --color-neutral-500-30: oklch(55.6% 0 0 / 0.3);
  --color-neutral-500-20: oklch(55.6% 0 0 / 0.2);
  --color-neutral-500-10: oklch(55.6% 0 0 / 0.1);
  --color-neutral-500-5: oklch(55.6% 0 0 / 0.05);
  /* --color-neutral-600 */
  --color-neutral-600-100: oklch(43.9% 0 0 / 1);
  --color-neutral-600-90: oklch(43.9% 0 0 / 0.9);
  --color-neutral-600-80: oklch(43.9% 0 0 / 0.8);
  --color-neutral-600-70: oklch(43.9% 0 0 / 0.7);
  --color-neutral-600-60: oklch(43.9% 0 0 / 0.6);
  --color-neutral-600-50: oklch(43.9% 0 0 / 0.5);
  --color-neutral-600-40: oklch(43.9% 0 0 / 0.4);
  --color-neutral-600-30: oklch(43.9% 0 0 / 0.3);
  --color-neutral-600-20: oklch(43.9% 0 0 / 0.2);
  --color-neutral-600-10: oklch(43.9% 0 0 / 0.1);
  --color-neutral-600-5: oklch(43.9% 0 0 / 0.05);
  /* --color-neutral-700 */
  --color-neutral-700-100: oklch(37.1% 0 0 / 1);
  --color-neutral-700-90: oklch(37.1% 0 0 / 0.9);
  --color-neutral-700-80: oklch(37.1% 0 0 / 0.8);
  --color-neutral-700-70: oklch(37.1% 0 0 / 0.7);
  --color-neutral-700-60: oklch(37.1% 0 0 / 0.6);
  --color-neutral-700-50: oklch(37.1% 0 0 / 0.5);
  --color-neutral-700-40: oklch(37.1% 0 0 / 0.4);
  --color-neutral-700-30: oklch(37.1% 0 0 / 0.3);
  --color-neutral-700-20: oklch(37.1% 0 0 / 0.2);
  --color-neutral-700-10: oklch(37.1% 0 0 / 0.1);
  --color-neutral-700-5: oklch(37.1% 0 0 / 0.05);
  /* --color-neutral-750 */
  --color-neutral-750-100: oklch(32% 0 0 / 1);
  --color-neutral-750-90: oklch(32% 0 0 / 0.9);
  --color-neutral-750-80: oklch(32% 0 0 / 0.8);
  --color-neutral-750-70: oklch(32% 0 0 / 0.7);
  --color-neutral-750-60: oklch(32% 0 0 / 0.6);
  --color-neutral-750-50: oklch(32% 0 0 / 0.5);
  --color-neutral-750-40: oklch(32% 0 0 / 0.4);
  --color-neutral-750-30: oklch(32% 0 0 / 0.3);
  --color-neutral-750-20: oklch(32% 0 0 / 0.2);
  --color-neutral-750-10: oklch(32% 0 0 / 0.1);
  --color-neutral-750-5: oklch(32% 0 0 / 0.05);
  /* --color-neutral-800 */
  --color-neutral-800-100: oklch(26.9% 0 0 / 1);
  --color-neutral-800-90: oklch(26.9% 0 0 / 0.9);
  --color-neutral-800-80: oklch(26.9% 0 0 / 0.8);
  --color-neutral-800-70: oklch(26.9% 0 0 / 0.7);
  --color-neutral-800-60: oklch(26.9% 0 0 / 0.6);
  --color-neutral-800-50: oklch(26.9% 0 0 / 0.5);
  --color-neutral-800-40: oklch(26.9% 0 0 / 0.4);
  --color-neutral-800-30: oklch(26.9% 0 0 / 0.3);
  --color-neutral-800-20: oklch(26.9% 0 0 / 0.2);
  --color-neutral-800-10: oklch(26.9% 0 0 / 0.1);
  --color-neutral-800-5: oklch(26.9% 0 0 / 0.05);
  /* --color-neutral-850 */
  --color-neutral-850-100: oklch(23.5% 0 0 / 1);
  --color-neutral-850-90: oklch(23.5% 0 0 / 0.9);
  --color-neutral-850-80: oklch(23.5% 0 0 / 0.8);
  --color-neutral-850-70: oklch(23.5% 0 0 / 0.7);
  --color-neutral-850-60: oklch(23.5% 0 0 / 0.6);
  --color-neutral-850-50: oklch(23.5% 0 0 / 0.5);
  --color-neutral-850-40: oklch(23.5% 0 0 / 0.4);
  --color-neutral-850-30: oklch(23.5% 0 0 / 0.3);
  --color-neutral-850-20: oklch(23.5% 0 0 / 0.2);
  --color-neutral-850-10: oklch(23.5% 0 0 / 0.1);
  --color-neutral-850-5: oklch(23.5% 0 0 / 0.05);
  /* --color-neutral-900 */
  --color-neutral-900-100: oklch(20.5% 0 0 / 1);
  --color-neutral-900-90: oklch(20.5% 0 0 / 0.9);
  --color-neutral-900-80: oklch(20.5% 0 0 / 0.8);
  --color-neutral-900-70: oklch(20.5% 0 0 / 0.7);
  --color-neutral-900-60: oklch(20.5% 0 0 / 0.6);
  --color-neutral-900-50: oklch(20.5% 0 0 / 0.5);
  --color-neutral-900-40: oklch(20.5% 0 0 / 0.4);
  --color-neutral-900-30: oklch(20.5% 0 0 / 0.3);
  --color-neutral-900-20: oklch(20.5% 0 0 / 0.2);
  --color-neutral-900-10: oklch(20.5% 0 0 / 0.1);
  --color-neutral-900-5: oklch(20.5% 0 0 / 0.05);
  /* --color-neutral-950 */
  --color-neutral-950-100: oklch(14.5% 0 0 / 1);
  --color-neutral-950-90: oklch(14.5% 0 0 / 0.9);
  --color-neutral-950-80: oklch(14.5% 0 0 / 0.8);
  --color-neutral-950-70: oklch(14.5% 0 0 / 0.7);
  --color-neutral-950-60: oklch(14.5% 0 0 / 0.6);
  --color-neutral-950-50: oklch(14.5% 0 0 / 0.5);
  --color-neutral-950-40: oklch(14.5% 0 0 / 0.4);
  --color-neutral-950-30: oklch(14.5% 0 0 / 0.3);
  --color-neutral-950-20: oklch(14.5% 0 0 / 0.2);
  --color-neutral-950-16: oklch(14.5% 0 0 / 0.16);
  --color-neutral-950-10: oklch(14.5% 0 0 / 0.1);
  --color-neutral-950-6: oklch(14.5% 0 0 / 0.06);
  --color-neutral-950-5: oklch(14.5% 0 0 / 0.05);
  /* Stone */
  --color-stone-50: oklch(98.5% 0.001 106.423);
  --color-stone-100: oklch(97% 0.001 106.424);
  --color-stone-200: oklch(92.3% 0.003 48.717);
  --color-stone-300: oklch(86.9% 0.005 56.366);
  --color-stone-400: oklch(70.9% 0.01 56.259);
  --color-stone-500: oklch(55.3% 0.013 58.071);
  --color-stone-600: oklch(44.4% 0.011 73.639);
  --color-stone-700: oklch(37.4% 0.01 67.558);
  --color-stone-800: oklch(26.8% 0.007 34.298);
  --color-stone-900: oklch(21.6% 0.006 56.043);
  --color-stone-950: oklch(14.7% 0.004 49.25);
  /* --color-stone-50 */
  --color-stone-50-100: oklch(98.5% 0.001 106.423 / 1);
  --color-stone-50-90: oklch(98.5% 0.001 106.423 / 0.9);
  --color-stone-50-80: oklch(98.5% 0.001 106.423 / 0.8);
  --color-stone-50-70: oklch(98.5% 0.001 106.423 / 0.7);
  --color-stone-50-60: oklch(98.5% 0.001 106.423 / 0.6);
  --color-stone-50-50: oklch(98.5% 0.001 106.423 / 0.5);
  --color-stone-50-40: oklch(98.5% 0.001 106.423 / 0.4);
  --color-stone-50-30: oklch(98.5% 0.001 106.423 / 0.3);
  --color-stone-50-20: oklch(98.5% 0.001 106.423 / 0.2);
  --color-stone-50-10: oklch(98.5% 0.001 106.423 / 0.1);
  --color-stone-50-5: oklch(98.5% 0.001 106.423 / 0.05);
  /* --color-stone-100 */
  --color-stone-100-100: oklch(97% 0.001 106.424 / 1);
  --color-stone-100-90: oklch(97% 0.001 106.424 / 0.9);
  --color-stone-100-80: oklch(97% 0.001 106.424 / 0.8);
  --color-stone-100-70: oklch(97% 0.001 106.424 / 0.7);
  --color-stone-100-60: oklch(97% 0.001 106.424 / 0.6);
  --color-stone-100-50: oklch(97% 0.001 106.424 / 0.5);
  --color-stone-100-40: oklch(97% 0.001 106.424 / 0.4);
  --color-stone-100-30: oklch(97% 0.001 106.424 / 0.3);
  --color-stone-100-20: oklch(97% 0.001 106.424 / 0.2);
  --color-stone-100-10: oklch(97% 0.001 106.424 / 0.1);
  --color-stone-100-5: oklch(97% 0.001 106.424 / 0.05);
  /* --color-stone-200 */
  --color-stone-200-100: oklch(92.3% 0.003 48.717 / 1);
  --color-stone-200-90: oklch(92.3% 0.003 48.717 / 0.9);
  --color-stone-200-80: oklch(92.3% 0.003 48.717 / 0.8);
  --color-stone-200-70: oklch(92.3% 0.003 48.717 / 0.7);
  --color-stone-200-60: oklch(92.3% 0.003 48.717 / 0.6);
  --color-stone-200-50: oklch(92.3% 0.003 48.717 / 0.5);
  --color-stone-200-40: oklch(92.3% 0.003 48.717 / 0.4);
  --color-stone-200-30: oklch(92.3% 0.003 48.717 / 0.3);
  --color-stone-200-20: oklch(92.3% 0.003 48.717 / 0.2);
  --color-stone-200-10: oklch(92.3% 0.003 48.717 / 0.1);
  --color-stone-200-5: oklch(92.3% 0.003 48.717 / 0.05);
  /* --color-stone-300 */
  --color-stone-300-100: oklch(86.9% 0.005 56.366 / 1);
  --color-stone-300-90: oklch(86.9% 0.005 56.366 / 0.9);
  --color-stone-300-80: oklch(86.9% 0.005 56.366 / 0.8);
  --color-stone-300-70: oklch(86.9% 0.005 56.366 / 0.7);
  --color-stone-300-60: oklch(86.9% 0.005 56.366 / 0.6);
  --color-stone-300-50: oklch(86.9% 0.005 56.366 / 0.5);
  --color-stone-300-40: oklch(86.9% 0.005 56.366 / 0.4);
  --color-stone-300-30: oklch(86.9% 0.005 56.366 / 0.3);
  --color-stone-300-20: oklch(86.9% 0.005 56.366 / 0.2);
  --color-stone-300-10: oklch(86.9% 0.005 56.366 / 0.1);
  --color-stone-300-5: oklch(86.9% 0.005 56.366 / 0.05);
  /* --color-stone-400 */
  --color-stone-400-100: oklch(70.9% 0.01 56.259 / 1);
  --color-stone-400-90: oklch(70.9% 0.01 56.259 / 0.9);
  --color-stone-400-80: oklch(70.9% 0.01 56.259 / 0.8);
  --color-stone-400-70: oklch(70.9% 0.01 56.259 / 0.7);
  --color-stone-400-60: oklch(70.9% 0.01 56.259 / 0.6);
  --color-stone-400-50: oklch(70.9% 0.01 56.259 / 0.5);
  --color-stone-400-40: oklch(70.9% 0.01 56.259 / 0.4);
  --color-stone-400-30: oklch(70.9% 0.01 56.259 / 0.3);
  --color-stone-400-20: oklch(70.9% 0.01 56.259 / 0.2);
  --color-stone-400-10: oklch(70.9% 0.01 56.259 / 0.1);
  --color-stone-400-5: oklch(70.9% 0.01 56.259 / 0.05);
  /* --color-stone-500 */
  --color-stone-500-100: oklch(55.3% 0.013 58.071 / 1);
  --color-stone-500-90: oklch(55.3% 0.013 58.071 / 0.9);
  --color-stone-500-80: oklch(55.3% 0.013 58.071 / 0.8);
  --color-stone-500-70: oklch(55.3% 0.013 58.071 / 0.7);
  --color-stone-500-60: oklch(55.3% 0.013 58.071 / 0.6);
  --color-stone-500-50: oklch(55.3% 0.013 58.071 / 0.5);
  --color-stone-500-40: oklch(55.3% 0.013 58.071 / 0.4);
  --color-stone-500-30: oklch(55.3% 0.013 58.071 / 0.3);
  --color-stone-500-20: oklch(55.3% 0.013 58.071 / 0.2);
  --color-stone-500-10: oklch(55.3% 0.013 58.071 / 0.1);
  --color-stone-500-5: oklch(55.3% 0.013 58.071 / 0.05);
  /* --color-stone-600 */
  --color-stone-600-100: oklch(44.4% 0.011 73.639 / 1);
  --color-stone-600-90: oklch(44.4% 0.011 73.639 / 0.9);
  --color-stone-600-80: oklch(44.4% 0.011 73.639 / 0.8);
  --color-stone-600-70: oklch(44.4% 0.011 73.639 / 0.7);
  --color-stone-600-60: oklch(44.4% 0.011 73.639 / 0.6);
  --color-stone-600-50: oklch(44.4% 0.011 73.639 / 0.5);
  --color-stone-600-40: oklch(44.4% 0.011 73.639 / 0.4);
  --color-stone-600-30: oklch(44.4% 0.011 73.639 / 0.3);
  --color-stone-600-20: oklch(44.4% 0.011 73.639 / 0.2);
  --color-stone-600-10: oklch(44.4% 0.011 73.639 / 0.1);
  --color-stone-600-5: oklch(44.4% 0.011 73.639 / 0.05);
  /* --color-stone-700 */
  --color-stone-700-100: oklch(37.4% 0.01 67.558 / 1);
  --color-stone-700-90: oklch(37.4% 0.01 67.558 / 0.9);
  --color-stone-700-80: oklch(37.4% 0.01 67.558 / 0.8);
  --color-stone-700-70: oklch(37.4% 0.01 67.558 / 0.7);
  --color-stone-700-60: oklch(37.4% 0.01 67.558 / 0.6);
  --color-stone-700-50: oklch(37.4% 0.01 67.558 / 0.5);
  --color-stone-700-40: oklch(37.4% 0.01 67.558 / 0.4);
  --color-stone-700-30: oklch(37.4% 0.01 67.558 / 0.3);
  --color-stone-700-20: oklch(37.4% 0.01 67.558 / 0.2);
  --color-stone-700-10: oklch(37.4% 0.01 67.558 / 0.1);
  --color-stone-700-5: oklch(37.4% 0.01 67.558 / 0.05);
  /* --color-stone-800 */
  --color-stone-800-100: oklch(26.8% 0.007 34.298 / 1);
  --color-stone-800-90: oklch(26.8% 0.007 34.298 / 0.9);
  --color-stone-800-80: oklch(26.8% 0.007 34.298 / 0.8);
  --color-stone-800-70: oklch(26.8% 0.007 34.298 / 0.7);
  --color-stone-800-60: oklch(26.8% 0.007 34.298 / 0.6);
  --color-stone-800-50: oklch(26.8% 0.007 34.298 / 0.5);
  --color-stone-800-40: oklch(26.8% 0.007 34.298 / 0.4);
  --color-stone-800-30: oklch(26.8% 0.007 34.298 / 0.3);
  --color-stone-800-20: oklch(26.8% 0.007 34.298 / 0.2);
  --color-stone-800-10: oklch(26.8% 0.007 34.298 / 0.1);
  --color-stone-800-5: oklch(26.8% 0.007 34.298 / 0.05);
  /* --color-stone-900 */
  --color-stone-900-100: oklch(21.6% 0.006 56.043 / 1);
  --color-stone-900-90: oklch(21.6% 0.006 56.043 / 0.9);
  --color-stone-900-80: oklch(21.6% 0.006 56.043 / 0.8);
  --color-stone-900-70: oklch(21.6% 0.006 56.043 / 0.7);
  --color-stone-900-60: oklch(21.6% 0.006 56.043 / 0.6);
  --color-stone-900-50: oklch(21.6% 0.006 56.043 / 0.5);
  --color-stone-900-40: oklch(21.6% 0.006 56.043 / 0.4);
  --color-stone-900-30: oklch(21.6% 0.006 56.043 / 0.3);
  --color-stone-900-20: oklch(21.6% 0.006 56.043 / 0.2);
  --color-stone-900-10: oklch(21.6% 0.006 56.043 / 0.1);
  --color-stone-900-5: oklch(21.6% 0.006 56.043 / 0.05);
  /* --color-stone-950 */
  --color-stone-950-100: oklch(14.7% 0.004 49.25 / 1);
  --color-stone-950-90: oklch(14.7% 0.004 49.25 / 0.9);
  --color-stone-950-80: oklch(14.7% 0.004 49.25 / 0.8);
  --color-stone-950-70: oklch(14.7% 0.004 49.25 / 0.7);
  --color-stone-950-60: oklch(14.7% 0.004 49.25 / 0.6);
  --color-stone-950-50: oklch(14.7% 0.004 49.25 / 0.5);
  --color-stone-950-40: oklch(14.7% 0.004 49.25 / 0.4);
  --color-stone-950-30: oklch(14.7% 0.004 49.25 / 0.3);
  --color-stone-950-20: oklch(14.7% 0.004 49.25 / 0.2);
  --color-stone-950-10: oklch(14.7% 0.004 49.25 / 0.1);
  --color-stone-950-5: oklch(14.7% 0.004 49.25 / 0.05);
  /*Alpha Transparent*/
  --alpha-0: oklch(100% 0 0 / 0);
  --unset-0: oklch(100% 0 0 / 0);
  /*Alpha White*/
  --alpha-white-8: oklch(100% 0 0 / 0.08);
  --alpha-white-10: oklch(100% 0 0 / 0.1);
  --alpha-white-12: oklch(100% 0 0 / 0.12);
  --alpha-white-15: oklch(100% 0 0 / 0.15);
  --alpha-white-16: oklch(100% 0 0 / 0.16);
  --alpha-white-20: oklch(100% 0 0 / 0.2);
  --alpha-white-30: oklch(100% 0 0 / 0.3);
  --alpha-white-40: oklch(100% 0 0 / 0.4);
  --alpha-white-50: oklch(100% 0 0 / 0.5);
  --alpha-white-60: oklch(100% 0 0 / 0.6);
  --alpha-white-70: oklch(100% 0 0 / 0.7);
  --alpha-white-80: oklch(100% 0 0 / 0.8);
  --alpha-white-90: oklch(100% 0 0 / 0.9);
  --alpha-white-100: oklch(100% 0 0);
  /*Alpha Black*/
  --alpha-black-10: oklch(0% 0 0 / 0.1);
  --alpha-black-20: oklch(0% 0 0 / 0.2);
  --alpha-black-30: oklch(0% 0 0 / 0.3);
  --alpha-black-40: oklch(0% 0 0 / 0.4);
  --alpha-black-50: oklch(0% 0 0 / 0.5);
  --alpha-black-60: oklch(0% 0 0 / 0.6);
  --alpha-black-70: oklch(0% 0 0 / 0.7);
  --alpha-black-80: oklch(0% 0 0 / 0.8);
  --alpha-black-90: oklch(0% 0 0 / 0.9);
  --alpha-black-100: oklch(0% 0 0);
  /*Utility Red*/
  --utility-red-50: var(--color-red-50);
  --utility-red-100: var(--color-red-100);
  --utility-red-200: var(--color-red-200);
  --utility-red-300: var(--color-red-300);
  --utility-red-400: var(--color-red-400);
  --utility-red-500: var(--color-red-500);
  --utility-red-600: var(--color-red-600);
  --utility-red-700: var(--color-red-700);
  --utility-red-800: var(--color-red-800);
  --utility-red-900: var(--color-red-900);
  --utility-red-950: var(--color-red-950);
  /*Alpha Red*/
  --alpha-red-50-100: var(--color-red-50-100);
  --alpha-red-50-90: var(--color-red-50-90);
  --alpha-red-50-80: var(--color-red-50-80);
  --alpha-red-50-70: var(--color-red-50-70);
  --alpha-red-50-60: var(--color-red-50-60);
  --alpha-red-50-50: var(--color-red-50-50);
  --alpha-red-50-40: var(--color-red-50-40);
  --alpha-red-50-30: var(--color-red-50-30);
  --alpha-red-50-20: var(--color-red-50-20);
  --alpha-red-50-10: var(--color-red-50-10);
  --alpha-red-50-5: var(--color-red-50-5);
  --alpha-red-100-100: var(--color-red-100-100);
  --alpha-red-100-90: var(--color-red-100-90);
  --alpha-red-100-80: var(--color-red-100-80);
  --alpha-red-100-70: var(--color-red-100-70);
  --alpha-red-100-60: var(--color-red-100-60);
  --alpha-red-100-50: var(--color-red-100-50);
  --alpha-red-100-40: var(--color-red-100-40);
  --alpha-red-100-30: var(--color-red-100-30);
  --alpha-red-100-20: var(--color-red-100-20);
  --alpha-red-100-10: var(--color-red-100-10);
  --alpha-red-100-5: var(--color-red-100-5);
  --alpha-red-200-100: var(--color-red-200-100);
  --alpha-red-200-90: var(--color-red-200-90);
  --alpha-red-200-80: var(--color-red-200-80);
  --alpha-red-200-70: var(--color-red-200-70);
  --alpha-red-200-60: var(--color-red-200-60);
  --alpha-red-200-50: var(--color-red-200-50);
  --alpha-red-200-40: var(--color-red-200-40);
  --alpha-red-200-30: var(--color-red-200-30);
  --alpha-red-200-20: var(--color-red-200-20);
  --alpha-red-200-10: var(--color-red-200-10);
  --alpha-red-200-5: var(--color-red-200-5);
  --alpha-red-300-100: var(--color-red-300-100);
  --alpha-red-300-90: var(--color-red-300-90);
  --alpha-red-300-80: var(--color-red-300-80);
  --alpha-red-300-70: var(--color-red-300-70);
  --alpha-red-300-60: var(--color-red-300-60);
  --alpha-red-300-50: var(--color-red-300-50);
  --alpha-red-300-40: var(--color-red-300-40);
  --alpha-red-300-30: var(--color-red-300-30);
  --alpha-red-300-20: var(--color-red-300-20);
  --alpha-red-300-10: var(--color-red-300-10);
  --alpha-red-300-5: var(--color-red-300-5);
  --alpha-red-400-100: var(--color-red-400-100);
  --alpha-red-400-90: var(--color-red-400-90);
  --alpha-red-400-80: var(--color-red-400-80);
  --alpha-red-400-70: var(--color-red-400-70);
  --alpha-red-400-60: var(--color-red-400-60);
  --alpha-red-400-50: var(--color-red-400-50);
  --alpha-red-400-40: var(--color-red-400-40);
  --alpha-red-400-30: var(--color-red-400-30);
  --alpha-red-400-20: var(--color-red-400-20);
  --alpha-red-400-10: var(--color-red-400-10);
  --alpha-red-400-5: var(--color-red-400-5);
  --alpha-red-500-100: var(--color-red-500-100);
  --alpha-red-500-90: var(--color-red-500-90);
  --alpha-red-500-80: var(--color-red-500-80);
  --alpha-red-500-70: var(--color-red-500-70);
  --alpha-red-500-60: var(--color-red-500-60);
  --alpha-red-500-50: var(--color-red-500-50);
  --alpha-red-500-40: var(--color-red-500-40);
  --alpha-red-500-34: var(--color-red-500-34);
  --alpha-red-500-30: var(--color-red-500-30);
  --alpha-red-500-26: var(--color-red-500-26);
  --alpha-red-500-24: var(--color-red-500-24);
  --alpha-red-500-20: var(--color-red-500-20);
  --alpha-red-500-18: var(--color-red-500-18);
  --alpha-red-500-16: var(--color-red-500-16);
  --alpha-red-500-12: var(--color-red-500-12);
  --alpha-red-500-10: var(--color-red-500-10);
  --alpha-red-500-5: var(--color-red-500-5);
  --alpha-red-600-100: var(--color-red-600-100);
  --alpha-red-600-90: var(--color-red-600-90);
  --alpha-red-600-80: var(--color-red-600-80);
  --alpha-red-600-70: var(--color-red-600-70);
  --alpha-red-600-60: var(--color-red-600-60);
  --alpha-red-600-50: var(--color-red-600-50);
  --alpha-red-600-40: var(--color-red-600-40);
  --alpha-red-600-30: var(--color-red-600-30);
  --alpha-red-600-20: var(--color-red-600-20);
  --alpha-red-600-10: var(--color-red-600-10);
  --alpha-red-600-5: var(--color-red-600-5);
  --alpha-red-700-100: var(--color-red-700-100);
  --alpha-red-700-90: var(--color-red-700-90);
  --alpha-red-700-80: var(--color-red-700-80);
  --alpha-red-700-70: var(--color-red-700-70);
  --alpha-red-700-60: var(--color-red-700-60);
  --alpha-red-700-50: var(--color-red-700-50);
  --alpha-red-700-40: var(--color-red-700-40);
  --alpha-red-700-30: var(--color-red-700-30);
  --alpha-red-700-20: var(--color-red-700-20);
  --alpha-red-700-10: var(--color-red-700-10);
  --alpha-red-700-5: var(--color-red-700-5);
  --alpha-red-800-100: var(--color-red-800-100);
  --alpha-red-800-90: var(--color-red-800-90);
  --alpha-red-800-80: var(--color-red-800-80);
  --alpha-red-800-70: var(--color-red-800-70);
  --alpha-red-800-60: var(--color-red-800-60);
  --alpha-red-800-50: var(--color-red-800-50);
  --alpha-red-800-40: var(--color-red-800-40);
  --alpha-red-800-30: var(--color-red-800-30);
  --alpha-red-800-20: var(--color-red-800-20);
  --alpha-red-800-10: var(--color-red-800-10);
  --alpha-red-800-5: var(--color-red-800-5);
  --alpha-red-900-100: var(--color-red-900-100);
  --alpha-red-900-90: var(--color-red-900-90);
  --alpha-red-900-80: var(--color-red-900-80);
  --alpha-red-900-70: var(--color-red-900-70);
  --alpha-red-900-60: var(--color-red-900-60);
  --alpha-red-900-50: var(--color-red-900-50);
  --alpha-red-900-40: var(--color-red-900-40);
  --alpha-red-900-30: var(--color-red-900-30);
  --alpha-red-900-20: var(--color-red-900-20);
  --alpha-red-900-10: var(--color-red-900-10);
  --alpha-red-900-5: var(--color-red-900-5);
  --alpha-red-950-100: var(--color-red-950-100);
  --alpha-red-950-90: var(--color-red-950-90);
  --alpha-red-950-80: var(--color-red-950-80);
  --alpha-red-950-70: var(--color-red-950-70);
  --alpha-red-950-60: var(--color-red-950-60);
  --alpha-red-950-50: var(--color-red-950-50);
  --alpha-red-950-40: var(--color-red-950-40);
  --alpha-red-950-30: var(--color-red-950-30);
  --alpha-red-950-20: var(--color-red-950-20);
  --alpha-red-950-10: var(--color-red-950-10);
  --alpha-red-950-5: var(--color-red-950-5);
  /* Utility Orange */
  --utility-orange-50: var(--color-orange-50);
  --utility-orange-100: var(--color-orange-100);
  --utility-orange-200: var(--color-orange-200);
  --utility-orange-300: var(--color-orange-300);
  --utility-orange-400: var(--color-orange-400);
  --utility-orange-500: var(--color-orange-500);
  --utility-orange-600: var(--color-orange-600);
  --utility-orange-700: var(--color-orange-700);
  --utility-orange-800: var(--color-orange-800);
  --utility-orange-900: var(--color-orange-900);
  --utility-orange-950: var(--color-orange-950);
  --alpha-orange-50-100: var(--color-orange-50-100);
  --alpha-orange-50-90: var(--color-orange-50-90);
  --alpha-orange-50-80: var(--color-orange-50-80);
  --alpha-orange-50-70: var(--color-orange-50-70);
  --alpha-orange-50-60: var(--color-orange-50-60);
  --alpha-orange-50-50: var(--color-orange-50-50);
  --alpha-orange-50-40: var(--color-orange-50-40);
  --alpha-orange-50-30: var(--color-orange-50-30);
  --alpha-orange-50-20: var(--color-orange-50-20);
  --alpha-orange-50-10: var(--color-orange-50-10);
  --alpha-orange-50-5: var(--color-orange-50-5);
  --alpha-orange-100-100: var(--color-orange-100-100);
  --alpha-orange-100-90: var(--color-orange-100-90);
  --alpha-orange-100-80: var(--color-orange-100-80);
  --alpha-orange-100-70: var(--color-orange-100-70);
  --alpha-orange-100-60: var(--color-orange-100-60);
  --alpha-orange-100-50: var(--color-orange-100-50);
  --alpha-orange-100-40: var(--color-orange-100-40);
  --alpha-orange-100-30: var(--color-orange-100-30);
  --alpha-orange-100-20: var(--color-orange-100-20);
  --alpha-orange-100-10: var(--color-orange-100-10);
  --alpha-orange-100-5: var(--color-orange-100-5);
  --alpha-orange-200-100: var(--color-orange-200-100);
  --alpha-orange-200-90: var(--color-orange-200-90);
  --alpha-orange-200-80: var(--color-orange-200-80);
  --alpha-orange-200-70: var(--color-orange-200-70);
  --alpha-orange-200-60: var(--color-orange-200-60);
  --alpha-orange-200-50: var(--color-orange-200-50);
  --alpha-orange-200-40: var(--color-orange-200-40);
  --alpha-orange-200-30: var(--color-orange-200-30);
  --alpha-orange-200-20: var(--color-orange-200-20);
  --alpha-orange-200-10: var(--color-orange-200-10);
  --alpha-orange-200-5: var(--color-orange-200-5);
  --alpha-orange-300-100: var(--color-orange-300-100);
  --alpha-orange-300-90: var(--color-orange-300-90);
  --alpha-orange-300-80: var(--color-orange-300-80);
  --alpha-orange-300-70: var(--color-orange-300-70);
  --alpha-orange-300-60: var(--color-orange-300-60);
  --alpha-orange-300-50: var(--color-orange-300-50);
  --alpha-orange-300-40: var(--color-orange-300-40);
  --alpha-orange-300-30: var(--color-orange-300-30);
  --alpha-orange-300-20: var(--color-orange-300-20);
  --alpha-orange-300-10: var(--color-orange-300-10);
  --alpha-orange-300-5: var(--color-orange-300-5);
  --alpha-orange-400-100: var(--color-orange-400-100);
  --alpha-orange-400-90: var(--color-orange-400-90);
  --alpha-orange-400-80: var(--color-orange-400-80);
  --alpha-orange-400-70: var(--color-orange-400-70);
  --alpha-orange-400-60: var(--color-orange-400-60);
  --alpha-orange-400-50: var(--color-orange-400-50);
  --alpha-orange-400-40: var(--color-orange-400-40);
  --alpha-orange-400-30: var(--color-orange-400-30);
  --alpha-orange-400-20: var(--color-orange-400-20);
  --alpha-orange-400-10: var(--color-orange-400-10);
  --alpha-orange-400-5: var(--color-orange-400-5);
  --alpha-orange-500-100: var(--color-orange-500-100);
  --alpha-orange-500-90: var(--color-orange-500-90);
  --alpha-orange-500-80: var(--color-orange-500-80);
  --alpha-orange-500-70: var(--color-orange-500-70);
  --alpha-orange-500-60: var(--color-orange-500-60);
  --alpha-orange-500-50: var(--color-orange-500-50);
  --alpha-orange-500-40: var(--color-orange-500-40);
  --alpha-orange-500-30: var(--color-orange-500-30);
  --alpha-orange-500-20: var(--color-orange-500-20);
  --alpha-orange-500-10: var(--color-orange-500-10);
  --alpha-orange-500-5: var(--color-orange-500-5);
  --alpha-orange-600-100: var(--color-orange-600-100);
  --alpha-orange-600-90: var(--color-orange-600-90);
  --alpha-orange-600-80: var(--color-orange-600-80);
  --alpha-orange-600-70: var(--color-orange-600-70);
  --alpha-orange-600-60: var(--color-orange-600-60);
  --alpha-orange-600-50: var(--color-orange-600-50);
  --alpha-orange-600-40: var(--color-orange-600-40);
  --alpha-orange-600-30: var(--color-orange-600-30);
  --alpha-orange-600-20: var(--color-orange-600-20);
  --alpha-orange-600-10: var(--color-orange-600-10);
  --alpha-orange-600-5: var(--color-orange-600-5);
  --alpha-orange-700-100: var(--color-orange-700-100);
  --alpha-orange-700-90: var(--color-orange-700-90);
  --alpha-orange-700-80: var(--color-orange-700-80);
  --alpha-orange-700-70: var(--color-orange-700-70);
  --alpha-orange-700-60: var(--color-orange-700-60);
  --alpha-orange-700-50: var(--color-orange-700-50);
  --alpha-orange-700-40: var(--color-orange-700-40);
  --alpha-orange-700-30: var(--color-orange-700-30);
  --alpha-orange-700-20: var(--color-orange-700-20);
  --alpha-orange-700-10: var(--color-orange-700-10);
  --alpha-orange-700-5: var(--color-orange-700-5);
  --alpha-orange-800-100: var(--color-orange-800-100);
  --alpha-orange-800-90: var(--color-orange-800-90);
  --alpha-orange-800-80: var(--color-orange-800-80);
  --alpha-orange-800-70: var(--color-orange-800-70);
  --alpha-orange-800-60: var(--color-orange-800-60);
  --alpha-orange-800-50: var(--color-orange-800-50);
  --alpha-orange-800-40: var(--color-orange-800-40);
  --alpha-orange-800-30: var(--color-orange-800-30);
  --alpha-orange-800-20: var(--color-orange-800-20);
  --alpha-orange-800-10: var(--color-orange-800-10);
  --alpha-orange-800-5: var(--color-orange-800-5);
  --alpha-orange-900-100: var(--color-orange-900-100);
  --alpha-orange-900-90: var(--color-orange-900-90);
  --alpha-orange-900-80: var(--color-orange-900-80);
  --alpha-orange-900-70: var(--color-orange-900-70);
  --alpha-orange-900-60: var(--color-orange-900-60);
  --alpha-orange-900-50: var(--color-orange-900-50);
  --alpha-orange-900-40: var(--color-orange-900-40);
  --alpha-orange-900-30: var(--color-orange-900-30);
  --alpha-orange-900-20: var(--color-orange-900-20);
  --alpha-orange-900-10: var(--color-orange-900-10);
  --alpha-orange-900-5: var(--color-orange-900-5);
  --alpha-orange-950-100: var(--color-orange-950-100);
  --alpha-orange-950-90: var(--color-orange-950-90);
  --alpha-orange-950-80: var(--color-orange-950-80);
  --alpha-orange-950-70: var(--color-orange-950-70);
  --alpha-orange-950-60: var(--color-orange-950-60);
  --alpha-orange-950-50: var(--color-orange-950-50);
  --alpha-orange-950-40: var(--color-orange-950-40);
  --alpha-orange-950-30: var(--color-orange-950-30);
  --alpha-orange-950-20: var(--color-orange-950-20);
  --alpha-orange-950-10: var(--color-orange-950-10);
  --alpha-orange-950-5: var(--color-orange-950-5);
  /* Utility Amber */
  --utility-amber-50: var(--color-amber-50);
  --utility-amber-100: var(--color-amber-100);
  --utility-amber-200: var(--color-amber-200);
  --utility-amber-300: var(--color-amber-300);
  --utility-amber-400: var(--color-amber-400);
  --utility-amber-500: var(--color-amber-500);
  --utility-amber-600: var(--color-amber-600);
  --utility-amber-700: var(--color-amber-700);
  --utility-amber-800: var(--color-amber-800);
  --utility-amber-900: var(--color-amber-900);
  --utility-amber-950: var(--color-amber-950);
  --alpha-amber-50-100: var(--color-amber-50-100);
  --alpha-amber-50-90: var(--color-amber-50-90);
  --alpha-amber-50-80: var(--color-amber-50-80);
  --alpha-amber-50-70: var(--color-amber-50-70);
  --alpha-amber-50-60: var(--color-amber-50-60);
  --alpha-amber-50-50: var(--color-amber-50-50);
  --alpha-amber-50-40: var(--color-amber-50-40);
  --alpha-amber-50-30: var(--color-amber-50-30);
  --alpha-amber-50-20: var(--color-amber-50-20);
  --alpha-amber-50-10: var(--color-amber-50-10);
  --alpha-amber-50-5: var(--color-amber-50-5);
  --alpha-amber-100-100: var(--color-amber-100-100);
  --alpha-amber-100-90: var(--color-amber-100-90);
  --alpha-amber-100-80: var(--color-amber-100-80);
  --alpha-amber-100-70: var(--color-amber-100-70);
  --alpha-amber-100-60: var(--color-amber-100-60);
  --alpha-amber-100-50: var(--color-amber-100-50);
  --alpha-amber-100-40: var(--color-amber-100-40);
  --alpha-amber-100-30: var(--color-amber-100-30);
  --alpha-amber-100-20: var(--color-amber-100-20);
  --alpha-amber-100-10: var(--color-amber-100-10);
  --alpha-amber-100-5: var(--color-amber-100-5);
  --alpha-amber-200-100: var(--color-amber-200-100);
  --alpha-amber-200-90: var(--color-amber-200-90);
  --alpha-amber-200-80: var(--color-amber-200-80);
  --alpha-amber-200-70: var(--color-amber-200-70);
  --alpha-amber-200-60: var(--color-amber-200-60);
  --alpha-amber-200-50: var(--color-amber-200-50);
  --alpha-amber-200-40: var(--color-amber-200-40);
  --alpha-amber-200-30: var(--color-amber-200-30);
  --alpha-amber-200-20: var(--color-amber-200-20);
  --alpha-amber-200-10: var(--color-amber-200-10);
  --alpha-amber-200-5: var(--color-amber-200-5);
  --alpha-amber-300-100: var(--color-amber-300-100);
  --alpha-amber-300-90: var(--color-amber-300-90);
  --alpha-amber-300-80: var(--color-amber-300-80);
  --alpha-amber-300-70: var(--color-amber-300-70);
  --alpha-amber-300-60: var(--color-amber-300-60);
  --alpha-amber-300-50: var(--color-amber-300-50);
  --alpha-amber-300-40: var(--color-amber-300-40);
  --alpha-amber-300-30: var(--color-amber-300-30);
  --alpha-amber-300-20: var(--color-amber-300-20);
  --alpha-amber-300-10: var(--color-amber-300-10);
  --alpha-amber-300-5: var(--color-amber-300-5);
  --alpha-amber-400-100: var(--color-amber-400-100);
  --alpha-amber-400-90: var(--color-amber-400-90);
  --alpha-amber-400-80: var(--color-amber-400-80);
  --alpha-amber-400-70: var(--color-amber-400-70);
  --alpha-amber-400-60: var(--color-amber-400-60);
  --alpha-amber-400-50: var(--color-amber-400-50);
  --alpha-amber-400-40: var(--color-amber-400-40);
  --alpha-amber-400-30: var(--color-amber-400-30);
  --alpha-amber-400-20: var(--color-amber-400-20);
  --alpha-amber-400-10: var(--color-amber-400-10);
  --alpha-amber-400-5: var(--color-amber-400-5);
  --alpha-amber-500-100: var(--color-amber-500-100);
  --alpha-amber-500-90: var(--color-amber-500-90);
  --alpha-amber-500-80: var(--color-amber-500-80);
  --alpha-amber-500-70: var(--color-amber-500-70);
  --alpha-amber-500-60: var(--color-amber-500-60);
  --alpha-amber-500-50: var(--color-amber-500-50);
  --alpha-amber-500-40: var(--color-amber-500-40);
  --alpha-amber-500-38: var(--color-amber-500-38);
  --alpha-amber-500-30: var(--color-amber-500-30);
  --alpha-amber-500-28: var(--color-amber-500-28);
  --alpha-amber-500-26: var(--color-amber-500-26);
  --alpha-amber-500-22: var(--color-amber-500-22);
  --alpha-amber-500-20: var(--color-amber-500-20);
  --alpha-amber-500-18: var(--color-amber-500-18);
  --alpha-amber-500-14: var(--color-amber-500-14);
  --alpha-amber-500-10: var(--color-amber-500-10);
  --alpha-amber-500-5: var(--color-amber-500-5);
  --alpha-amber-600-100: var(--color-amber-600-100);
  --alpha-amber-600-90: var(--color-amber-600-90);
  --alpha-amber-600-80: var(--color-amber-600-80);
  --alpha-amber-600-70: var(--color-amber-600-70);
  --alpha-amber-600-60: var(--color-amber-600-60);
  --alpha-amber-600-50: var(--color-amber-600-50);
  --alpha-amber-600-40: var(--color-amber-600-40);
  --alpha-amber-600-30: var(--color-amber-600-30);
  --alpha-amber-600-20: var(--color-amber-600-20);
  --alpha-amber-600-10: var(--color-amber-600-10);
  --alpha-amber-600-5: var(--color-amber-600-5);
  --alpha-amber-700-100: var(--color-amber-700-100);
  --alpha-amber-700-90: var(--color-amber-700-90);
  --alpha-amber-700-80: var(--color-amber-700-80);
  --alpha-amber-700-70: var(--color-amber-700-70);
  --alpha-amber-700-60: var(--color-amber-700-60);
  --alpha-amber-700-50: var(--color-amber-700-50);
  --alpha-amber-700-40: var(--color-amber-700-40);
  --alpha-amber-700-30: var(--color-amber-700-30);
  --alpha-amber-700-20: var(--color-amber-700-20);
  --alpha-amber-700-10: var(--color-amber-700-10);
  --alpha-amber-700-5: var(--color-amber-700-5);
  --alpha-amber-800-100: var(--color-amber-800-100);
  --alpha-amber-800-90: var(--color-amber-800-90);
  --alpha-amber-800-80: var(--color-amber-800-80);
  --alpha-amber-800-70: var(--color-amber-800-70);
  --alpha-amber-800-60: var(--color-amber-800-60);
  --alpha-amber-800-50: var(--color-amber-800-50);
  --alpha-amber-800-40: var(--color-amber-800-40);
  --alpha-amber-800-30: var(--color-amber-800-30);
  --alpha-amber-800-20: var(--color-amber-800-20);
  --alpha-amber-800-10: var(--color-amber-800-10);
  --alpha-amber-800-5: var(--color-amber-800-5);
  --alpha-amber-900-100: var(--color-amber-900-100);
  --alpha-amber-900-90: var(--color-amber-900-90);
  --alpha-amber-900-80: var(--color-amber-900-80);
  --alpha-amber-900-70: var(--color-amber-900-70);
  --alpha-amber-900-60: var(--color-amber-900-60);
  --alpha-amber-900-50: var(--color-amber-900-50);
  --alpha-amber-900-40: var(--color-amber-900-40);
  --alpha-amber-900-30: var(--color-amber-900-30);
  --alpha-amber-900-20: var(--color-amber-900-20);
  --alpha-amber-900-10: var(--color-amber-900-10);
  --alpha-amber-900-5: var(--color-amber-900-5);
  --alpha-amber-950-100: var(--color-amber-950-100);
  --alpha-amber-950-90: var(--color-amber-950-90);
  --alpha-amber-950-80: var(--color-amber-950-80);
  --alpha-amber-950-70: var(--color-amber-950-70);
  --alpha-amber-950-60: var(--color-amber-950-60);
  --alpha-amber-950-50: var(--color-amber-950-50);
  --alpha-amber-950-40: var(--color-amber-950-40);
  --alpha-amber-950-30: var(--color-amber-950-30);
  --alpha-amber-950-20: var(--color-amber-950-20);
  --alpha-amber-950-10: var(--color-amber-950-10);
  --alpha-amber-950-5: var(--color-amber-950-5);
  /* Utility Yellow */
  --utility-yellow-50: var(--color-yellow-50);
  --utility-yellow-100: var(--color-yellow-100);
  --utility-yellow-200: var(--color-yellow-200);
  --utility-yellow-300: var(--color-yellow-300);
  --utility-yellow-400: var(--color-yellow-400);
  --utility-yellow-500: var(--color-yellow-500);
  --utility-yellow-600: var(--color-yellow-600);
  --utility-yellow-700: var(--color-yellow-700);
  --utility-yellow-800: var(--color-yellow-800);
  --utility-yellow-900: var(--color-yellow-900);
  --utility-yellow-950: var(--color-yellow-950);
  --alpha-yellow-50-100: var(--color-yellow-50-100);
  --alpha-yellow-50-90: var(--color-yellow-50-90);
  --alpha-yellow-50-80: var(--color-yellow-50-80);
  --alpha-yellow-50-70: var(--color-yellow-50-70);
  --alpha-yellow-50-60: var(--color-yellow-50-60);
  --alpha-yellow-50-50: var(--color-yellow-50-50);
  --alpha-yellow-50-40: var(--color-yellow-50-40);
  --alpha-yellow-50-30: var(--color-yellow-50-30);
  --alpha-yellow-50-20: var(--color-yellow-50-20);
  --alpha-yellow-50-10: var(--color-yellow-50-10);
  --alpha-yellow-50-5: var(--color-yellow-50-5);
  --alpha-yellow-100-100: var(--color-yellow-100-100);
  --alpha-yellow-100-90: var(--color-yellow-100-90);
  --alpha-yellow-100-80: var(--color-yellow-100-80);
  --alpha-yellow-100-70: var(--color-yellow-100-70);
  --alpha-yellow-100-60: var(--color-yellow-100-60);
  --alpha-yellow-100-50: var(--color-yellow-100-50);
  --alpha-yellow-100-40: var(--color-yellow-100-40);
  --alpha-yellow-100-30: var(--color-yellow-100-30);
  --alpha-yellow-100-20: var(--color-yellow-100-20);
  --alpha-yellow-100-10: var(--color-yellow-100-10);
  --alpha-yellow-100-5: var(--color-yellow-100-5);
  --alpha-yellow-200-100: var(--color-yellow-200-100);
  --alpha-yellow-200-90: var(--color-yellow-200-90);
  --alpha-yellow-200-80: var(--color-yellow-200-80);
  --alpha-yellow-200-70: var(--color-yellow-200-70);
  --alpha-yellow-200-60: var(--color-yellow-200-60);
  --alpha-yellow-200-50: var(--color-yellow-200-50);
  --alpha-yellow-200-40: var(--color-yellow-200-40);
  --alpha-yellow-200-30: var(--color-yellow-200-30);
  --alpha-yellow-200-20: var(--color-yellow-200-20);
  --alpha-yellow-200-10: var(--color-yellow-200-10);
  --alpha-yellow-200-5: var(--color-yellow-200-5);
  --alpha-yellow-300-100: var(--color-yellow-300-100);
  --alpha-yellow-300-90: var(--color-yellow-300-90);
  --alpha-yellow-300-80: var(--color-yellow-300-80);
  --alpha-yellow-300-70: var(--color-yellow-300-70);
  --alpha-yellow-300-60: var(--color-yellow-300-60);
  --alpha-yellow-300-50: var(--color-yellow-300-50);
  --alpha-yellow-300-40: var(--color-yellow-300-40);
  --alpha-yellow-300-30: var(--color-yellow-300-30);
  --alpha-yellow-300-20: var(--color-yellow-300-20);
  --alpha-yellow-300-10: var(--color-yellow-300-10);
  --alpha-yellow-300-5: var(--color-yellow-300-5);
  --alpha-yellow-400-100: var(--color-yellow-400-100);
  --alpha-yellow-400-90: var(--color-yellow-400-90);
  --alpha-yellow-400-80: var(--color-yellow-400-80);
  --alpha-yellow-400-70: var(--color-yellow-400-70);
  --alpha-yellow-400-60: var(--color-yellow-400-60);
  --alpha-yellow-400-50: var(--color-yellow-400-50);
  --alpha-yellow-400-40: var(--color-yellow-400-40);
  --alpha-yellow-400-30: var(--color-yellow-400-30);
  --alpha-yellow-400-20: var(--color-yellow-400-20);
  --alpha-yellow-400-10: var(--color-yellow-400-10);
  --alpha-yellow-400-5: var(--color-yellow-400-5);
  --alpha-yellow-500-100: var(--color-yellow-500-100);
  --alpha-yellow-500-90: var(--color-yellow-500-90);
  --alpha-yellow-500-80: var(--color-yellow-500-80);
  --alpha-yellow-500-70: var(--color-yellow-500-70);
  --alpha-yellow-500-60: var(--color-yellow-500-60);
  --alpha-yellow-500-50: var(--color-yellow-500-50);
  --alpha-yellow-500-40: var(--color-yellow-500-40);
  --alpha-yellow-500-30: var(--color-yellow-500-30);
  --alpha-yellow-500-20: var(--color-yellow-500-20);
  --alpha-yellow-500-10: var(--color-yellow-500-10);
  --alpha-yellow-500-5: var(--color-yellow-500-5);
  --alpha-yellow-600-100: var(--color-yellow-600-100);
  --alpha-yellow-600-90: var(--color-yellow-600-90);
  --alpha-yellow-600-80: var(--color-yellow-600-80);
  --alpha-yellow-600-70: var(--color-yellow-600-70);
  --alpha-yellow-600-60: var(--color-yellow-600-60);
  --alpha-yellow-600-50: var(--color-yellow-600-50);
  --alpha-yellow-600-40: var(--color-yellow-600-40);
  --alpha-yellow-600-30: var(--color-yellow-600-30);
  --alpha-yellow-600-20: var(--color-yellow-600-20);
  --alpha-yellow-600-10: var(--color-yellow-600-10);
  --alpha-yellow-600-5: var(--color-yellow-600-5);
  --alpha-yellow-700-100: var(--color-yellow-700-100);
  --alpha-yellow-700-90: var(--color-yellow-700-90);
  --alpha-yellow-700-80: var(--color-yellow-700-80);
  --alpha-yellow-700-70: var(--color-yellow-700-70);
  --alpha-yellow-700-60: var(--color-yellow-700-60);
  --alpha-yellow-700-50: var(--color-yellow-700-50);
  --alpha-yellow-700-40: var(--color-yellow-700-40);
  --alpha-yellow-700-30: var(--color-yellow-700-30);
  --alpha-yellow-700-20: var(--color-yellow-700-20);
  --alpha-yellow-700-10: var(--color-yellow-700-10);
  --alpha-yellow-700-5: var(--color-yellow-700-5);
  --alpha-yellow-800-100: var(--color-yellow-800-100);
  --alpha-yellow-800-90: var(--color-yellow-800-90);
  --alpha-yellow-800-80: var(--color-yellow-800-80);
  --alpha-yellow-800-70: var(--color-yellow-800-70);
  --alpha-yellow-800-60: var(--color-yellow-800-60);
  --alpha-yellow-800-50: var(--color-yellow-800-50);
  --alpha-yellow-800-40: var(--color-yellow-800-40);
  --alpha-yellow-800-30: var(--color-yellow-800-30);
  --alpha-yellow-800-20: var(--color-yellow-800-20);
  --alpha-yellow-800-10: var(--color-yellow-800-10);
  --alpha-yellow-800-5: var(--color-yellow-800-5);
  --alpha-yellow-900-100: var(--color-yellow-900-100);
  --alpha-yellow-900-90: var(--color-yellow-900-90);
  --alpha-yellow-900-80: var(--color-yellow-900-80);
  --alpha-yellow-900-70: var(--color-yellow-900-70);
  --alpha-yellow-900-60: var(--color-yellow-900-60);
  --alpha-yellow-900-50: var(--color-yellow-900-50);
  --alpha-yellow-900-40: var(--color-yellow-900-40);
  --alpha-yellow-900-30: var(--color-yellow-900-30);
  --alpha-yellow-900-20: var(--color-yellow-900-20);
  --alpha-yellow-900-10: var(--color-yellow-900-10);
  --alpha-yellow-900-5: var(--color-yellow-900-5);
  --alpha-yellow-950-100: var(--color-yellow-950-100);
  --alpha-yellow-950-90: var(--color-yellow-950-90);
  --alpha-yellow-950-80: var(--color-yellow-950-80);
  --alpha-yellow-950-70: var(--color-yellow-950-70);
  --alpha-yellow-950-60: var(--color-yellow-950-60);
  --alpha-yellow-950-50: var(--color-yellow-950-50);
  --alpha-yellow-950-40: var(--color-yellow-950-40);
  --alpha-yellow-950-30: var(--color-yellow-950-30);
  --alpha-yellow-950-20: var(--color-yellow-950-20);
  --alpha-yellow-950-10: var(--color-yellow-950-10);
  --alpha-yellow-950-5: var(--color-yellow-950-5);
  /* Utility Lime */
  --utility-lime-50: var(--color-lime-50);
  --utility-lime-100: var(--color-lime-100);
  --utility-lime-200: var(--color-lime-200);
  --utility-lime-300: var(--color-lime-300);
  --utility-lime-400: var(--color-lime-400);
  --utility-lime-500: var(--color-lime-500);
  --utility-lime-600: var(--color-lime-600);
  --utility-lime-700: var(--color-lime-700);
  --utility-lime-800: var(--color-lime-800);
  --utility-lime-900: var(--color-lime-900);
  --utility-lime-950: var(--color-lime-950);
  --alpha-lime-50-100: var(--color-lime-50-100);
  --alpha-lime-50-90: var(--color-lime-50-90);
  --alpha-lime-50-80: var(--color-lime-50-80);
  --alpha-lime-50-70: var(--color-lime-50-70);
  --alpha-lime-50-60: var(--color-lime-50-60);
  --alpha-lime-50-50: var(--color-lime-50-50);
  --alpha-lime-50-40: var(--color-lime-50-40);
  --alpha-lime-50-30: var(--color-lime-50-30);
  --alpha-lime-50-20: var(--color-lime-50-20);
  --alpha-lime-50-10: var(--color-lime-50-10);
  --alpha-lime-50-5: var(--color-lime-50-5);
  --alpha-lime-100-100: var(--color-lime-100-100);
  --alpha-lime-100-90: var(--color-lime-100-90);
  --alpha-lime-100-80: var(--color-lime-100-80);
  --alpha-lime-100-70: var(--color-lime-100-70);
  --alpha-lime-100-60: var(--color-lime-100-60);
  --alpha-lime-100-50: var(--color-lime-100-50);
  --alpha-lime-100-40: var(--color-lime-100-40);
  --alpha-lime-100-30: var(--color-lime-100-30);
  --alpha-lime-100-20: var(--color-lime-100-20);
  --alpha-lime-100-10: var(--color-lime-100-10);
  --alpha-lime-100-5: var(--color-lime-100-5);
  --alpha-lime-200-100: var(--color-lime-200-100);
  --alpha-lime-200-90: var(--color-lime-200-90);
  --alpha-lime-200-80: var(--color-lime-200-80);
  --alpha-lime-200-70: var(--color-lime-200-70);
  --alpha-lime-200-60: var(--color-lime-200-60);
  --alpha-lime-200-50: var(--color-lime-200-50);
  --alpha-lime-200-40: var(--color-lime-200-40);
  --alpha-lime-200-30: var(--color-lime-200-30);
  --alpha-lime-200-20: var(--color-lime-200-20);
  --alpha-lime-200-10: var(--color-lime-200-10);
  --alpha-lime-200-5: var(--color-lime-200-5);
  --alpha-lime-300-100: var(--color-lime-300-100);
  --alpha-lime-300-90: var(--color-lime-300-90);
  --alpha-lime-300-80: var(--color-lime-300-80);
  --alpha-lime-300-70: var(--color-lime-300-70);
  --alpha-lime-300-60: var(--color-lime-300-60);
  --alpha-lime-300-50: var(--color-lime-300-50);
  --alpha-lime-300-40: var(--color-lime-300-40);
  --alpha-lime-300-30: var(--color-lime-300-30);
  --alpha-lime-300-20: var(--color-lime-300-20);
  --alpha-lime-300-10: var(--color-lime-300-10);
  --alpha-lime-300-5: var(--color-lime-300-5);
  --alpha-lime-400-100: var(--color-lime-400-100);
  --alpha-lime-400-90: var(--color-lime-400-90);
  --alpha-lime-400-80: var(--color-lime-400-80);
  --alpha-lime-400-70: var(--color-lime-400-70);
  --alpha-lime-400-60: var(--color-lime-400-60);
  --alpha-lime-400-50: var(--color-lime-400-50);
  --alpha-lime-400-40: var(--color-lime-400-40);
  --alpha-lime-400-30: var(--color-lime-400-30);
  --alpha-lime-400-20: var(--color-lime-400-20);
  --alpha-lime-400-10: var(--color-lime-400-10);
  --alpha-lime-400-5: var(--color-lime-400-5);
  --alpha-lime-500-100: var(--color-lime-500-100);
  --alpha-lime-500-90: var(--color-lime-500-90);
  --alpha-lime-500-80: var(--color-lime-500-80);
  --alpha-lime-500-70: var(--color-lime-500-70);
  --alpha-lime-500-60: var(--color-lime-500-60);
  --alpha-lime-500-50: var(--color-lime-500-50);
  --alpha-lime-500-40: var(--color-lime-500-40);
  --alpha-lime-500-30: var(--color-lime-500-30);
  --alpha-lime-500-20: var(--color-lime-500-20);
  --alpha-lime-500-10: var(--color-lime-500-10);
  --alpha-lime-500-5: var(--color-lime-500-5);
  --alpha-lime-600-100: var(--color-lime-600-100);
  --alpha-lime-600-90: var(--color-lime-600-90);
  --alpha-lime-600-80: var(--color-lime-600-80);
  --alpha-lime-600-70: var(--color-lime-600-70);
  --alpha-lime-600-60: var(--color-lime-600-60);
  --alpha-lime-600-50: var(--color-lime-600-50);
  --alpha-lime-600-40: var(--color-lime-600-40);
  --alpha-lime-600-30: var(--color-lime-600-30);
  --alpha-lime-600-20: var(--color-lime-600-20);
  --alpha-lime-600-10: var(--color-lime-600-10);
  --alpha-lime-600-5: var(--color-lime-600-5);
  --alpha-lime-700-100: var(--color-lime-700-100);
  --alpha-lime-700-90: var(--color-lime-700-90);
  --alpha-lime-700-80: var(--color-lime-700-80);
  --alpha-lime-700-70: var(--color-lime-700-70);
  --alpha-lime-700-60: var(--color-lime-700-60);
  --alpha-lime-700-50: var(--color-lime-700-50);
  --alpha-lime-700-40: var(--color-lime-700-40);
  --alpha-lime-700-30: var(--color-lime-700-30);
  --alpha-lime-700-20: var(--color-lime-700-20);
  --alpha-lime-700-10: var(--color-lime-700-10);
  --alpha-lime-700-5: var(--color-lime-700-5);
  --alpha-lime-800-100: var(--color-lime-800-100);
  --alpha-lime-800-90: var(--color-lime-800-90);
  --alpha-lime-800-80: var(--color-lime-800-80);
  --alpha-lime-800-70: var(--color-lime-800-70);
  --alpha-lime-800-60: var(--color-lime-800-60);
  --alpha-lime-800-50: var(--color-lime-800-50);
  --alpha-lime-800-40: var(--color-lime-800-40);
  --alpha-lime-800-30: var(--color-lime-800-30);
  --alpha-lime-800-20: var(--color-lime-800-20);
  --alpha-lime-800-10: var(--color-lime-800-10);
  --alpha-lime-800-5: var(--color-lime-800-5);
  --alpha-lime-900-100: var(--color-lime-900-100);
  --alpha-lime-900-90: var(--color-lime-900-90);
  --alpha-lime-900-80: var(--color-lime-900-80);
  --alpha-lime-900-70: var(--color-lime-900-70);
  --alpha-lime-900-60: var(--color-lime-900-60);
  --alpha-lime-900-50: var(--color-lime-900-50);
  --alpha-lime-900-40: var(--color-lime-900-40);
  --alpha-lime-900-30: var(--color-lime-900-30);
  --alpha-lime-900-20: var(--color-lime-900-20);
  --alpha-lime-900-10: var(--color-lime-900-10);
  --alpha-lime-900-5: var(--color-lime-900-5);
  --alpha-lime-950-100: var(--color-lime-950-100);
  --alpha-lime-950-90: var(--color-lime-950-90);
  --alpha-lime-950-80: var(--color-lime-950-80);
  --alpha-lime-950-70: var(--color-lime-950-70);
  --alpha-lime-950-60: var(--color-lime-950-60);
  --alpha-lime-950-50: var(--color-lime-950-50);
  --alpha-lime-950-40: var(--color-lime-950-40);
  --alpha-lime-950-30: var(--color-lime-950-30);
  --alpha-lime-950-20: var(--color-lime-950-20);
  --alpha-lime-950-10: var(--color-lime-950-10);
  --alpha-lime-950-5: var(--color-lime-950-5);
  /* Utility Green */
  --utility-green-50: var(--color-green-50);
  --utility-green-100: var(--color-green-100);
  --utility-green-200: var(--color-green-200);
  --utility-green-300: var(--color-green-300);
  --utility-green-400: var(--color-green-400);
  --utility-green-500: var(--color-green-500);
  --utility-green-600: var(--color-green-600);
  --utility-green-700: var(--color-green-700);
  --utility-green-800: var(--color-green-800);
  --utility-green-900: var(--color-green-900);
  --utility-green-950: var(--color-green-950);
  --alpha-green-50-100: var(--color-green-50-100);
  --alpha-green-50-90: var(--color-green-50-90);
  --alpha-green-50-80: var(--color-green-50-80);
  --alpha-green-50-70: var(--color-green-50-70);
  --alpha-green-50-60: var(--color-green-50-60);
  --alpha-green-50-50: var(--color-green-50-50);
  --alpha-green-50-40: var(--color-green-50-40);
  --alpha-green-50-30: var(--color-green-50-30);
  --alpha-green-50-20: var(--color-green-50-20);
  --alpha-green-50-10: var(--color-green-50-10);
  --alpha-green-50-5: var(--color-green-50-5);
  --alpha-green-100-100: var(--color-green-100-100);
  --alpha-green-100-90: var(--color-green-100-90);
  --alpha-green-100-80: var(--color-green-100-80);
  --alpha-green-100-70: var(--color-green-100-70);
  --alpha-green-100-60: var(--color-green-100-60);
  --alpha-green-100-50: var(--color-green-100-50);
  --alpha-green-100-40: var(--color-green-100-40);
  --alpha-green-100-30: var(--color-green-100-30);
  --alpha-green-100-20: var(--color-green-100-20);
  --alpha-green-100-10: var(--color-green-100-10);
  --alpha-green-100-5: var(--color-green-100-5);
  --alpha-green-200-100: var(--color-green-200-100);
  --alpha-green-200-90: var(--color-green-200-90);
  --alpha-green-200-80: var(--color-green-200-80);
  --alpha-green-200-70: var(--color-green-200-70);
  --alpha-green-200-60: var(--color-green-200-60);
  --alpha-green-200-50: var(--color-green-200-50);
  --alpha-green-200-40: var(--color-green-200-40);
  --alpha-green-200-30: var(--color-green-200-30);
  --alpha-green-200-20: var(--color-green-200-20);
  --alpha-green-200-10: var(--color-green-200-10);
  --alpha-green-200-5: var(--color-green-200-5);
  --alpha-green-300-100: var(--color-green-300-100);
  --alpha-green-300-90: var(--color-green-300-90);
  --alpha-green-300-80: var(--color-green-300-80);
  --alpha-green-300-70: var(--color-green-300-70);
  --alpha-green-300-60: var(--color-green-300-60);
  --alpha-green-300-50: var(--color-green-300-50);
  --alpha-green-300-40: var(--color-green-300-40);
  --alpha-green-300-30: var(--color-green-300-30);
  --alpha-green-300-20: var(--color-green-300-20);
  --alpha-green-300-10: var(--color-green-300-10);
  --alpha-green-300-5: var(--color-green-300-5);
  --alpha-green-400-100: var(--color-green-400-100);
  --alpha-green-400-90: var(--color-green-400-90);
  --alpha-green-400-80: var(--color-green-400-80);
  --alpha-green-400-70: var(--color-green-400-70);
  --alpha-green-400-60: var(--color-green-400-60);
  --alpha-green-400-50: var(--color-green-400-50);
  --alpha-green-400-40: var(--color-green-400-40);
  --alpha-green-400-30: var(--color-green-400-30);
  --alpha-green-400-20: var(--color-green-400-20);
  --alpha-green-400-10: var(--color-green-400-10);
  --alpha-green-400-5: var(--color-green-400-5);
  --alpha-green-500-100: var(--color-green-500-100);
  --alpha-green-500-90: var(--color-green-500-90);
  --alpha-green-500-80: var(--color-green-500-80);
  --alpha-green-500-70: var(--color-green-500-70);
  --alpha-green-500-60: var(--color-green-500-60);
  --alpha-green-500-50: var(--color-green-500-50);
  --alpha-green-500-40: var(--color-green-500-40);
  --alpha-green-500-34: var(--color-green-500-34);
  --alpha-green-500-30: var(--color-green-500-30);
  --alpha-green-500-26: var(--color-green-500-26);
  --alpha-green-500-24: var(--color-green-500-24);
  --alpha-green-500-20: var(--color-green-500-20);
  --alpha-green-500-18: var(--color-green-500-18);
  --alpha-green-500-16: var(--color-green-500-16);
  --alpha-green-500-12: var(--color-green-500-12);
  --alpha-green-500-10: var(--color-green-500-10);
  --alpha-green-500-5: var(--color-green-500-5);
  --alpha-green-600-100: var(--color-green-600-100);
  --alpha-green-600-90: var(--color-green-600-90);
  --alpha-green-600-80: var(--color-green-600-80);
  --alpha-green-600-70: var(--color-green-600-70);
  --alpha-green-600-60: var(--color-green-600-60);
  --alpha-green-600-50: var(--color-green-600-50);
  --alpha-green-600-40: var(--color-green-600-40);
  --alpha-green-600-30: var(--color-green-600-30);
  --alpha-green-600-20: var(--color-green-600-20);
  --alpha-green-600-10: var(--color-green-600-10);
  --alpha-green-600-5: var(--color-green-600-5);
  --alpha-green-700-100: var(--color-green-700-100);
  --alpha-green-700-90: var(--color-green-700-90);
  --alpha-green-700-80: var(--color-green-700-80);
  --alpha-green-700-70: var(--color-green-700-70);
  --alpha-green-700-60: var(--color-green-700-60);
  --alpha-green-700-50: var(--color-green-700-50);
  --alpha-green-700-40: var(--color-green-700-40);
  --alpha-green-700-30: var(--color-green-700-30);
  --alpha-green-700-20: var(--color-green-700-20);
  --alpha-green-700-10: var(--color-green-700-10);
  --alpha-green-700-5: var(--color-green-700-5);
  --alpha-green-800-100: var(--color-green-800-100);
  --alpha-green-800-90: var(--color-green-800-90);
  --alpha-green-800-80: var(--color-green-800-80);
  --alpha-green-800-70: var(--color-green-800-70);
  --alpha-green-800-60: var(--color-green-800-60);
  --alpha-green-800-50: var(--color-green-800-50);
  --alpha-green-800-40: var(--color-green-800-40);
  --alpha-green-800-30: var(--color-green-800-30);
  --alpha-green-800-20: var(--color-green-800-20);
  --alpha-green-800-10: var(--color-green-800-10);
  --alpha-green-800-5: var(--color-green-800-5);
  --alpha-green-900-100: var(--color-green-900-100);
  --alpha-green-900-90: var(--color-green-900-90);
  --alpha-green-900-80: var(--color-green-900-80);
  --alpha-green-900-70: var(--color-green-900-70);
  --alpha-green-900-60: var(--color-green-900-60);
  --alpha-green-900-50: var(--color-green-900-50);
  --alpha-green-900-40: var(--color-green-900-40);
  --alpha-green-900-30: var(--color-green-900-30);
  --alpha-green-900-20: var(--color-green-900-20);
  --alpha-green-900-10: var(--color-green-900-10);
  --alpha-green-900-5: var(--color-green-900-5);
  --alpha-green-950-100: var(--color-green-950-100);
  --alpha-green-950-90: var(--color-green-950-90);
  --alpha-green-950-80: var(--color-green-950-80);
  --alpha-green-950-70: var(--color-green-950-70);
  --alpha-green-950-60: var(--color-green-950-60);
  --alpha-green-950-50: var(--color-green-950-50);
  --alpha-green-950-40: var(--color-green-950-40);
  --alpha-green-950-30: var(--color-green-950-30);
  --alpha-green-950-20: var(--color-green-950-20);
  --alpha-green-950-10: var(--color-green-950-10);
  --alpha-green-950-5: var(--color-green-950-5);
  /* Utility Emerald */
  --utility-emerald-50: var(--color-emerald-50);
  --utility-emerald-100: var(--color-emerald-100);
  --utility-emerald-200: var(--color-emerald-200);
  --utility-emerald-300: var(--color-emerald-300);
  --utility-emerald-400: var(--color-emerald-400);
  --utility-emerald-500: var(--color-emerald-500);
  --utility-emerald-600: var(--color-emerald-600);
  --utility-emerald-700: var(--color-emerald-700);
  --utility-emerald-800: var(--color-emerald-800);
  --utility-emerald-900: var(--color-emerald-900);
  --utility-emerald-950: var(--color-emerald-950);
  --alpha-emerald-50-100: var(--color-emerald-50-100);
  --alpha-emerald-50-90: var(--color-emerald-50-90);
  --alpha-emerald-50-80: var(--color-emerald-50-80);
  --alpha-emerald-50-70: var(--color-emerald-50-70);
  --alpha-emerald-50-60: var(--color-emerald-50-60);
  --alpha-emerald-50-50: var(--color-emerald-50-50);
  --alpha-emerald-50-40: var(--color-emerald-50-40);
  --alpha-emerald-50-30: var(--color-emerald-50-30);
  --alpha-emerald-50-20: var(--color-emerald-50-20);
  --alpha-emerald-50-10: var(--color-emerald-50-10);
  --alpha-emerald-50-5: var(--color-emerald-50-5);
  --alpha-emerald-100-100: var(--color-emerald-100-100);
  --alpha-emerald-100-90: var(--color-emerald-100-90);
  --alpha-emerald-100-80: var(--color-emerald-100-80);
  --alpha-emerald-100-70: var(--color-emerald-100-70);
  --alpha-emerald-100-60: var(--color-emerald-100-60);
  --alpha-emerald-100-50: var(--color-emerald-100-50);
  --alpha-emerald-100-40: var(--color-emerald-100-40);
  --alpha-emerald-100-30: var(--color-emerald-100-30);
  --alpha-emerald-100-20: var(--color-emerald-100-20);
  --alpha-emerald-100-10: var(--color-emerald-100-10);
  --alpha-emerald-100-5: var(--color-emerald-100-5);
  --alpha-emerald-200-100: var(--color-emerald-200-100);
  --alpha-emerald-200-90: var(--color-emerald-200-90);
  --alpha-emerald-200-80: var(--color-emerald-200-80);
  --alpha-emerald-200-70: var(--color-emerald-200-70);
  --alpha-emerald-200-60: var(--color-emerald-200-60);
  --alpha-emerald-200-50: var(--color-emerald-200-50);
  --alpha-emerald-200-40: var(--color-emerald-200-40);
  --alpha-emerald-200-30: var(--color-emerald-200-30);
  --alpha-emerald-200-20: var(--color-emerald-200-20);
  --alpha-emerald-200-10: var(--color-emerald-200-10);
  --alpha-emerald-200-5: var(--color-emerald-200-5);
  --alpha-emerald-300-100: var(--color-emerald-300-100);
  --alpha-emerald-300-90: var(--color-emerald-300-90);
  --alpha-emerald-300-80: var(--color-emerald-300-80);
  --alpha-emerald-300-70: var(--color-emerald-300-70);
  --alpha-emerald-300-60: var(--color-emerald-300-60);
  --alpha-emerald-300-50: var(--color-emerald-300-50);
  --alpha-emerald-300-40: var(--color-emerald-300-40);
  --alpha-emerald-300-30: var(--color-emerald-300-30);
  --alpha-emerald-300-20: var(--color-emerald-300-20);
  --alpha-emerald-300-10: var(--color-emerald-300-10);
  --alpha-emerald-300-5: var(--color-emerald-300-5);
  --alpha-emerald-400-100: var(--color-emerald-400-100);
  --alpha-emerald-400-90: var(--color-emerald-400-90);
  --alpha-emerald-400-80: var(--color-emerald-400-80);
  --alpha-emerald-400-70: var(--color-emerald-400-70);
  --alpha-emerald-400-60: var(--color-emerald-400-60);
  --alpha-emerald-400-50: var(--color-emerald-400-50);
  --alpha-emerald-400-40: var(--color-emerald-400-40);
  --alpha-emerald-400-30: var(--color-emerald-400-30);
  --alpha-emerald-400-20: var(--color-emerald-400-20);
  --alpha-emerald-400-10: var(--color-emerald-400-10);
  --alpha-emerald-400-5: var(--color-emerald-400-5);
  --alpha-emerald-500-100: var(--color-emerald-500-100);
  --alpha-emerald-500-90: var(--color-emerald-500-90);
  --alpha-emerald-500-80: var(--color-emerald-500-80);
  --alpha-emerald-500-70: var(--color-emerald-500-70);
  --alpha-emerald-500-60: var(--color-emerald-500-60);
  --alpha-emerald-500-50: var(--color-emerald-500-50);
  --alpha-emerald-500-40: var(--color-emerald-500-40);
  --alpha-emerald-500-30: var(--color-emerald-500-30);
  --alpha-emerald-500-20: var(--color-emerald-500-20);
  --alpha-emerald-500-10: var(--color-emerald-500-10);
  --alpha-emerald-500-5: var(--color-emerald-500-5);
  --alpha-emerald-600-100: var(--color-emerald-600-100);
  --alpha-emerald-600-90: var(--color-emerald-600-90);
  --alpha-emerald-600-80: var(--color-emerald-600-80);
  --alpha-emerald-600-70: var(--color-emerald-600-70);
  --alpha-emerald-600-60: var(--color-emerald-600-60);
  --alpha-emerald-600-50: var(--color-emerald-600-50);
  --alpha-emerald-600-40: var(--color-emerald-600-40);
  --alpha-emerald-600-30: var(--color-emerald-600-30);
  --alpha-emerald-600-20: var(--color-emerald-600-20);
  --alpha-emerald-600-10: var(--color-emerald-600-10);
  --alpha-emerald-600-5: var(--color-emerald-600-5);
  --alpha-emerald-700-100: var(--color-emerald-700-100);
  --alpha-emerald-700-90: var(--color-emerald-700-90);
  --alpha-emerald-700-80: var(--color-emerald-700-80);
  --alpha-emerald-700-70: var(--color-emerald-700-70);
  --alpha-emerald-700-60: var(--color-emerald-700-60);
  --alpha-emerald-700-50: var(--color-emerald-700-50);
  --alpha-emerald-700-40: var(--color-emerald-700-40);
  --alpha-emerald-700-30: var(--color-emerald-700-30);
  --alpha-emerald-700-20: var(--color-emerald-700-20);
  --alpha-emerald-700-10: var(--color-emerald-700-10);
  --alpha-emerald-700-5: var(--color-emerald-700-5);
  --alpha-emerald-800-100: var(--color-emerald-800-100);
  --alpha-emerald-800-90: var(--color-emerald-800-90);
  --alpha-emerald-800-80: var(--color-emerald-800-80);
  --alpha-emerald-800-70: var(--color-emerald-800-70);
  --alpha-emerald-800-60: var(--color-emerald-800-60);
  --alpha-emerald-800-50: var(--color-emerald-800-50);
  --alpha-emerald-800-40: var(--color-emerald-800-40);
  --alpha-emerald-800-30: var(--color-emerald-800-30);
  --alpha-emerald-800-20: var(--color-emerald-800-20);
  --alpha-emerald-800-10: var(--color-emerald-800-10);
  --alpha-emerald-800-5: var(--color-emerald-800-5);
  --alpha-emerald-900-100: var(--color-emerald-900-100);
  --alpha-emerald-900-90: var(--color-emerald-900-90);
  --alpha-emerald-900-80: var(--color-emerald-900-80);
  --alpha-emerald-900-70: var(--color-emerald-900-70);
  --alpha-emerald-900-60: var(--color-emerald-900-60);
  --alpha-emerald-900-50: var(--color-emerald-900-50);
  --alpha-emerald-900-40: var(--color-emerald-900-40);
  --alpha-emerald-900-30: var(--color-emerald-900-30);
  --alpha-emerald-900-20: var(--color-emerald-900-20);
  --alpha-emerald-900-10: var(--color-emerald-900-10);
  --alpha-emerald-900-5: var(--color-emerald-900-5);
  --alpha-emerald-950-100: var(--color-emerald-950-100);
  --alpha-emerald-950-90: var(--color-emerald-950-90);
  --alpha-emerald-950-80: var(--color-emerald-950-80);
  --alpha-emerald-950-70: var(--color-emerald-950-70);
  --alpha-emerald-950-60: var(--color-emerald-950-60);
  --alpha-emerald-950-50: var(--color-emerald-950-50);
  --alpha-emerald-950-40: var(--color-emerald-950-40);
  --alpha-emerald-950-30: var(--color-emerald-950-30);
  --alpha-emerald-950-20: var(--color-emerald-950-20);
  --alpha-emerald-950-10: var(--color-emerald-950-10);
  --alpha-emerald-950-5: var(--color-emerald-950-5);
  /* Utility Teal */
  --utility-teal-50: var(--color-teal-50);
  --utility-teal-100: var(--color-teal-100);
  --utility-teal-200: var(--color-teal-200);
  --utility-teal-300: var(--color-teal-300);
  --utility-teal-400: var(--color-teal-400);
  --utility-teal-500: var(--color-teal-500);
  --utility-teal-600: var(--color-teal-600);
  --utility-teal-700: var(--color-teal-700);
  --utility-teal-800: var(--color-teal-800);
  --utility-teal-900: var(--color-teal-900);
  --utility-teal-950: var(--color-teal-950);
  --alpha-teal-50-100: var(--color-teal-50-100);
  --alpha-teal-50-90: var(--color-teal-50-90);
  --alpha-teal-50-80: var(--color-teal-50-80);
  --alpha-teal-50-70: var(--color-teal-50-70);
  --alpha-teal-50-60: var(--color-teal-50-60);
  --alpha-teal-50-50: var(--color-teal-50-50);
  --alpha-teal-50-40: var(--color-teal-50-40);
  --alpha-teal-50-30: var(--color-teal-50-30);
  --alpha-teal-50-20: var(--color-teal-50-20);
  --alpha-teal-50-10: var(--color-teal-50-10);
  --alpha-teal-50-5: var(--color-teal-50-5);
  --alpha-teal-100-100: var(--color-teal-100-100);
  --alpha-teal-100-90: var(--color-teal-100-90);
  --alpha-teal-100-80: var(--color-teal-100-80);
  --alpha-teal-100-70: var(--color-teal-100-70);
  --alpha-teal-100-60: var(--color-teal-100-60);
  --alpha-teal-100-50: var(--color-teal-100-50);
  --alpha-teal-100-40: var(--color-teal-100-40);
  --alpha-teal-100-30: var(--color-teal-100-30);
  --alpha-teal-100-20: var(--color-teal-100-20);
  --alpha-teal-100-10: var(--color-teal-100-10);
  --alpha-teal-100-5: var(--color-teal-100-5);
  --alpha-teal-200-100: var(--color-teal-200-100);
  --alpha-teal-200-90: var(--color-teal-200-90);
  --alpha-teal-200-80: var(--color-teal-200-80);
  --alpha-teal-200-70: var(--color-teal-200-70);
  --alpha-teal-200-60: var(--color-teal-200-60);
  --alpha-teal-200-50: var(--color-teal-200-50);
  --alpha-teal-200-40: var(--color-teal-200-40);
  --alpha-teal-200-30: var(--color-teal-200-30);
  --alpha-teal-200-20: var(--color-teal-200-20);
  --alpha-teal-200-10: var(--color-teal-200-10);
  --alpha-teal-200-5: var(--color-teal-200-5);
  --alpha-teal-300-100: var(--color-teal-300-100);
  --alpha-teal-300-90: var(--color-teal-300-90);
  --alpha-teal-300-80: var(--color-teal-300-80);
  --alpha-teal-300-70: var(--color-teal-300-70);
  --alpha-teal-300-60: var(--color-teal-300-60);
  --alpha-teal-300-50: var(--color-teal-300-50);
  --alpha-teal-300-40: var(--color-teal-300-40);
  --alpha-teal-300-30: var(--color-teal-300-30);
  --alpha-teal-300-20: var(--color-teal-300-20);
  --alpha-teal-300-10: var(--color-teal-300-10);
  --alpha-teal-300-5: var(--color-teal-300-5);
  --alpha-teal-400-100: var(--color-teal-400-100);
  --alpha-teal-400-90: var(--color-teal-400-90);
  --alpha-teal-400-80: var(--color-teal-400-80);
  --alpha-teal-400-70: var(--color-teal-400-70);
  --alpha-teal-400-60: var(--color-teal-400-60);
  --alpha-teal-400-50: var(--color-teal-400-50);
  --alpha-teal-400-40: var(--color-teal-400-40);
  --alpha-teal-400-30: var(--color-teal-400-30);
  --alpha-teal-400-20: var(--color-teal-400-20);
  --alpha-teal-400-10: var(--color-teal-400-10);
  --alpha-teal-400-5: var(--color-teal-400-5);
  --alpha-teal-500-100: var(--color-teal-500-100);
  --alpha-teal-500-90: var(--color-teal-500-90);
  --alpha-teal-500-80: var(--color-teal-500-80);
  --alpha-teal-500-70: var(--color-teal-500-70);
  --alpha-teal-500-60: var(--color-teal-500-60);
  --alpha-teal-500-50: var(--color-teal-500-50);
  --alpha-teal-500-40: var(--color-teal-500-40);
  --alpha-teal-500-30: var(--color-teal-500-30);
  --alpha-teal-500-20: var(--color-teal-500-20);
  --alpha-teal-500-10: var(--color-teal-500-10);
  --alpha-teal-500-5: var(--color-teal-500-5);
  --alpha-teal-600-100: var(--color-teal-600-100);
  --alpha-teal-600-90: var(--color-teal-600-90);
  --alpha-teal-600-80: var(--color-teal-600-80);
  --alpha-teal-600-70: var(--color-teal-600-70);
  --alpha-teal-600-60: var(--color-teal-600-60);
  --alpha-teal-600-50: var(--color-teal-600-50);
  --alpha-teal-600-40: var(--color-teal-600-40);
  --alpha-teal-600-30: var(--color-teal-600-30);
  --alpha-teal-600-20: var(--color-teal-600-20);
  --alpha-teal-600-10: var(--color-teal-600-10);
  --alpha-teal-600-5: var(--color-teal-600-5);
  --alpha-teal-700-100: var(--color-teal-700-100);
  --alpha-teal-700-90: var(--color-teal-700-90);
  --alpha-teal-700-80: var(--color-teal-700-80);
  --alpha-teal-700-70: var(--color-teal-700-70);
  --alpha-teal-700-60: var(--color-teal-700-60);
  --alpha-teal-700-50: var(--color-teal-700-50);
  --alpha-teal-700-40: var(--color-teal-700-40);
  --alpha-teal-700-30: var(--color-teal-700-30);
  --alpha-teal-700-20: var(--color-teal-700-20);
  --alpha-teal-700-10: var(--color-teal-700-10);
  --alpha-teal-700-5: var(--color-teal-700-5);
  --alpha-teal-800-100: var(--color-teal-800-100);
  --alpha-teal-800-90: var(--color-teal-800-90);
  --alpha-teal-800-80: var(--color-teal-800-80);
  --alpha-teal-800-70: var(--color-teal-800-70);
  --alpha-teal-800-60: var(--color-teal-800-60);
  --alpha-teal-800-50: var(--color-teal-800-50);
  --alpha-teal-800-40: var(--color-teal-800-40);
  --alpha-teal-800-30: var(--color-teal-800-30);
  --alpha-teal-800-20: var(--color-teal-800-20);
  --alpha-teal-800-10: var(--color-teal-800-10);
  --alpha-teal-800-5: var(--color-teal-800-5);
  --alpha-teal-900-100: var(--color-teal-900-100);
  --alpha-teal-900-90: var(--color-teal-900-90);
  --alpha-teal-900-80: var(--color-teal-900-80);
  --alpha-teal-900-70: var(--color-teal-900-70);
  --alpha-teal-900-60: var(--color-teal-900-60);
  --alpha-teal-900-50: var(--color-teal-900-50);
  --alpha-teal-900-40: var(--color-teal-900-40);
  --alpha-teal-900-30: var(--color-teal-900-30);
  --alpha-teal-900-20: var(--color-teal-900-20);
  --alpha-teal-900-10: var(--color-teal-900-10);
  --alpha-teal-900-5: var(--color-teal-900-5);
  --alpha-teal-950-100: var(--color-teal-950-100);
  --alpha-teal-950-90: var(--color-teal-950-90);
  --alpha-teal-950-80: var(--color-teal-950-80);
  --alpha-teal-950-70: var(--color-teal-950-70);
  --alpha-teal-950-60: var(--color-teal-950-60);
  --alpha-teal-950-50: var(--color-teal-950-50);
  --alpha-teal-950-40: var(--color-teal-950-40);
  --alpha-teal-950-30: var(--color-teal-950-30);
  --alpha-teal-950-20: var(--color-teal-950-20);
  --alpha-teal-950-10: var(--color-teal-950-10);
  --alpha-teal-950-5: var(--color-teal-950-5);
  /* Utility Cyan */
  --utility-cyan-50: var(--color-cyan-50);
  --utility-cyan-100: var(--color-cyan-100);
  --utility-cyan-200: var(--color-cyan-200);
  --utility-cyan-300: var(--color-cyan-300);
  --utility-cyan-400: var(--color-cyan-400);
  --utility-cyan-500: var(--color-cyan-500);
  --utility-cyan-600: var(--color-cyan-600);
  --utility-cyan-700: var(--color-cyan-700);
  --utility-cyan-800: var(--color-cyan-800);
  --utility-cyan-900: var(--color-cyan-900);
  --utility-cyan-950: var(--color-cyan-950);
  --alpha-cyan-50-100: var(--color-cyan-50-100);
  --alpha-cyan-50-90: var(--color-cyan-50-90);
  --alpha-cyan-50-80: var(--color-cyan-50-80);
  --alpha-cyan-50-70: var(--color-cyan-50-70);
  --alpha-cyan-50-60: var(--color-cyan-50-60);
  --alpha-cyan-50-50: var(--color-cyan-50-50);
  --alpha-cyan-50-40: var(--color-cyan-50-40);
  --alpha-cyan-50-30: var(--color-cyan-50-30);
  --alpha-cyan-50-20: var(--color-cyan-50-20);
  --alpha-cyan-50-10: var(--color-cyan-50-10);
  --alpha-cyan-50-5: var(--color-cyan-50-5);
  --alpha-cyan-100-100: var(--color-cyan-100-100);
  --alpha-cyan-100-90: var(--color-cyan-100-90);
  --alpha-cyan-100-80: var(--color-cyan-100-80);
  --alpha-cyan-100-70: var(--color-cyan-100-70);
  --alpha-cyan-100-60: var(--color-cyan-100-60);
  --alpha-cyan-100-50: var(--color-cyan-100-50);
  --alpha-cyan-100-40: var(--color-cyan-100-40);
  --alpha-cyan-100-30: var(--color-cyan-100-30);
  --alpha-cyan-100-20: var(--color-cyan-100-20);
  --alpha-cyan-100-10: var(--color-cyan-100-10);
  --alpha-cyan-100-5: var(--color-cyan-100-5);
  --alpha-cyan-200-100: var(--color-cyan-200-100);
  --alpha-cyan-200-90: var(--color-cyan-200-90);
  --alpha-cyan-200-80: var(--color-cyan-200-80);
  --alpha-cyan-200-70: var(--color-cyan-200-70);
  --alpha-cyan-200-60: var(--color-cyan-200-60);
  --alpha-cyan-200-50: var(--color-cyan-200-50);
  --alpha-cyan-200-40: var(--color-cyan-200-40);
  --alpha-cyan-200-30: var(--color-cyan-200-30);
  --alpha-cyan-200-20: var(--color-cyan-200-20);
  --alpha-cyan-200-10: var(--color-cyan-200-10);
  --alpha-cyan-200-5: var(--color-cyan-200-5);
  --alpha-cyan-300-100: var(--color-cyan-300-100);
  --alpha-cyan-300-90: var(--color-cyan-300-90);
  --alpha-cyan-300-80: var(--color-cyan-300-80);
  --alpha-cyan-300-70: var(--color-cyan-300-70);
  --alpha-cyan-300-60: var(--color-cyan-300-60);
  --alpha-cyan-300-50: var(--color-cyan-300-50);
  --alpha-cyan-300-40: var(--color-cyan-300-40);
  --alpha-cyan-300-30: var(--color-cyan-300-30);
  --alpha-cyan-300-20: var(--color-cyan-300-20);
  --alpha-cyan-300-10: var(--color-cyan-300-10);
  --alpha-cyan-300-5: var(--color-cyan-300-5);
  --alpha-cyan-400-100: var(--color-cyan-400-100);
  --alpha-cyan-400-90: var(--color-cyan-400-90);
  --alpha-cyan-400-80: var(--color-cyan-400-80);
  --alpha-cyan-400-70: var(--color-cyan-400-70);
  --alpha-cyan-400-60: var(--color-cyan-400-60);
  --alpha-cyan-400-50: var(--color-cyan-400-50);
  --alpha-cyan-400-40: var(--color-cyan-400-40);
  --alpha-cyan-400-30: var(--color-cyan-400-30);
  --alpha-cyan-400-20: var(--color-cyan-400-20);
  --alpha-cyan-400-10: var(--color-cyan-400-10);
  --alpha-cyan-400-5: var(--color-cyan-400-5);
  --alpha-cyan-500-100: var(--color-cyan-500-100);
  --alpha-cyan-500-90: var(--color-cyan-500-90);
  --alpha-cyan-500-80: var(--color-cyan-500-80);
  --alpha-cyan-500-70: var(--color-cyan-500-70);
  --alpha-cyan-500-60: var(--color-cyan-500-60);
  --alpha-cyan-500-50: var(--color-cyan-500-50);
  --alpha-cyan-500-40: var(--color-cyan-500-40);
  --alpha-cyan-500-30: var(--color-cyan-500-30);
  --alpha-cyan-500-20: var(--color-cyan-500-20);
  --alpha-cyan-500-10: var(--color-cyan-500-10);
  --alpha-cyan-500-5: var(--color-cyan-500-5);
  --alpha-cyan-600-100: var(--color-cyan-600-100);
  --alpha-cyan-600-90: var(--color-cyan-600-90);
  --alpha-cyan-600-80: var(--color-cyan-600-80);
  --alpha-cyan-600-70: var(--color-cyan-600-70);
  --alpha-cyan-600-60: var(--color-cyan-600-60);
  --alpha-cyan-600-50: var(--color-cyan-600-50);
  --alpha-cyan-600-40: var(--color-cyan-600-40);
  --alpha-cyan-600-30: var(--color-cyan-600-30);
  --alpha-cyan-600-20: var(--color-cyan-600-20);
  --alpha-cyan-600-10: var(--color-cyan-600-10);
  --alpha-cyan-600-5: var(--color-cyan-600-5);
  --alpha-cyan-700-100: var(--color-cyan-700-100);
  --alpha-cyan-700-90: var(--color-cyan-700-90);
  --alpha-cyan-700-80: var(--color-cyan-700-80);
  --alpha-cyan-700-70: var(--color-cyan-700-70);
  --alpha-cyan-700-60: var(--color-cyan-700-60);
  --alpha-cyan-700-50: var(--color-cyan-700-50);
  --alpha-cyan-700-40: var(--color-cyan-700-40);
  --alpha-cyan-700-30: var(--color-cyan-700-30);
  --alpha-cyan-700-20: var(--color-cyan-700-20);
  --alpha-cyan-700-10: var(--color-cyan-700-10);
  --alpha-cyan-700-5: var(--color-cyan-700-5);
  --alpha-cyan-800-100: var(--color-cyan-800-100);
  --alpha-cyan-800-90: var(--color-cyan-800-90);
  --alpha-cyan-800-80: var(--color-cyan-800-80);
  --alpha-cyan-800-70: var(--color-cyan-800-70);
  --alpha-cyan-800-60: var(--color-cyan-800-60);
  --alpha-cyan-800-50: var(--color-cyan-800-50);
  --alpha-cyan-800-40: var(--color-cyan-800-40);
  --alpha-cyan-800-30: var(--color-cyan-800-30);
  --alpha-cyan-800-20: var(--color-cyan-800-20);
  --alpha-cyan-800-10: var(--color-cyan-800-10);
  --alpha-cyan-800-5: var(--color-cyan-800-5);
  --alpha-cyan-900-100: var(--color-cyan-900-100);
  --alpha-cyan-900-90: var(--color-cyan-900-90);
  --alpha-cyan-900-80: var(--color-cyan-900-80);
  --alpha-cyan-900-70: var(--color-cyan-900-70);
  --alpha-cyan-900-60: var(--color-cyan-900-60);
  --alpha-cyan-900-50: var(--color-cyan-900-50);
  --alpha-cyan-900-40: var(--color-cyan-900-40);
  --alpha-cyan-900-30: var(--color-cyan-900-30);
  --alpha-cyan-900-20: var(--color-cyan-900-20);
  --alpha-cyan-900-10: var(--color-cyan-900-10);
  --alpha-cyan-900-5: var(--color-cyan-900-5);
  --alpha-cyan-950-100: var(--color-cyan-950-100);
  --alpha-cyan-950-90: var(--color-cyan-950-90);
  --alpha-cyan-950-80: var(--color-cyan-950-80);
  --alpha-cyan-950-70: var(--color-cyan-950-70);
  --alpha-cyan-950-60: var(--color-cyan-950-60);
  --alpha-cyan-950-50: var(--color-cyan-950-50);
  --alpha-cyan-950-40: var(--color-cyan-950-40);
  --alpha-cyan-950-30: var(--color-cyan-950-30);
  --alpha-cyan-950-20: var(--color-cyan-950-20);
  --alpha-cyan-950-10: var(--color-cyan-950-10);
  --alpha-cyan-950-5: var(--color-cyan-950-5);
  /* Mint */
  --utility-mint-50: var(--color-mint-50);
  --utility-mint-100: var(--color-mint-100);
  --utility-mint-200: var(--color-mint-200);
  --utility-mint-300: var(--color-mint-300);
  --utility-mint-400: var(--color-mint-400);
  --utility-mint-500: var(--color-mint-500);
  --utility-mint-600: var(--color-mint-600);
  --utility-mint-700: var(--color-mint-700);
  --utility-mint-800: var(--color-mint-800);
  --utility-mint-900: var(--color-mint-900);
  --utility-mint-950: var(--color-mint-950);
  --alpha-mint-50-100: var(--color-mint-50-100);
  --alpha-mint-50-90: var(--color-mint-50-90);
  --alpha-mint-50-80: var(--color-mint-50-80);
  --alpha-mint-50-70: var(--color-mint-50-70);
  --alpha-mint-50-60: var(--color-mint-50-60);
  --alpha-mint-50-50: var(--color-mint-50-50);
  --alpha-mint-50-40: var(--color-mint-50-40);
  --alpha-mint-50-30: var(--color-mint-50-30);
  --alpha-mint-50-20: var(--color-mint-50-20);
  --alpha-mint-50-10: var(--color-mint-50-10);
  --alpha-mint-50-5: var(--color-mint-50-5);
  --alpha-mint-100-100: var(--color-mint-100-100);
  --alpha-mint-100-90: var(--color-mint-100-90);
  --alpha-mint-100-80: var(--color-mint-100-80);
  --alpha-mint-100-70: var(--color-mint-100-70);
  --alpha-mint-100-60: var(--color-mint-100-60);
  --alpha-mint-100-50: var(--color-mint-100-50);
  --alpha-mint-100-40: var(--color-mint-100-40);
  --alpha-mint-100-30: var(--color-mint-100-30);
  --alpha-mint-100-20: var(--color-mint-100-20);
  --alpha-mint-100-10: var(--color-mint-100-10);
  --alpha-mint-100-5: var(--color-mint-100-5);
  --alpha-mint-200-100: var(--color-mint-200-100);
  --alpha-mint-200-90: var(--color-mint-200-90);
  --alpha-mint-200-80: var(--color-mint-200-80);
  --alpha-mint-200-70: var(--color-mint-200-70);
  --alpha-mint-200-60: var(--color-mint-200-60);
  --alpha-mint-200-50: var(--color-mint-200-50);
  --alpha-mint-200-40: var(--color-mint-200-40);
  --alpha-mint-200-30: var(--color-mint-200-30);
  --alpha-mint-200-20: var(--color-mint-200-20);
  --alpha-mint-200-10: var(--color-mint-200-10);
  --alpha-mint-200-5: var(--color-mint-200-5);
  --alpha-mint-300-100: var(--color-mint-300-100);
  --alpha-mint-300-90: var(--color-mint-300-90);
  --alpha-mint-300-80: var(--color-mint-300-80);
  --alpha-mint-300-70: var(--color-mint-300-70);
  --alpha-mint-300-60: var(--color-mint-300-60);
  --alpha-mint-300-50: var(--color-mint-300-50);
  --alpha-mint-300-40: var(--color-mint-300-40);
  --alpha-mint-300-30: var(--color-mint-300-30);
  --alpha-mint-300-20: var(--color-mint-300-20);
  --alpha-mint-300-10: var(--color-mint-300-10);
  --alpha-mint-300-5: var(--color-mint-300-5);
  --alpha-mint-400-100: var(--color-mint-400-100);
  --alpha-mint-400-90: var(--color-mint-400-90);
  --alpha-mint-400-80: var(--color-mint-400-80);
  --alpha-mint-400-70: var(--color-mint-400-70);
  --alpha-mint-400-60: var(--color-mint-400-60);
  --alpha-mint-400-50: var(--color-mint-400-50);
  --alpha-mint-400-40: var(--color-mint-400-40);
  --alpha-mint-400-30: var(--color-mint-400-30);
  --alpha-mint-400-20: var(--color-mint-400-20);
  --alpha-mint-400-10: var(--color-mint-400-10);
  --alpha-mint-400-5: var(--color-mint-400-5);
  --alpha-mint-500-100: var(--color-mint-500-100);
  --alpha-mint-500-90: var(--color-mint-500-90);
  --alpha-mint-500-80: var(--color-mint-500-80);
  --alpha-mint-500-70: var(--color-mint-500-70);
  --alpha-mint-500-60: var(--color-mint-500-60);
  --alpha-mint-500-50: var(--color-mint-500-50);
  --alpha-mint-500-40: var(--color-mint-500-40);
  --alpha-mint-500-30: var(--color-mint-500-30);
  --alpha-mint-500-20: var(--color-mint-500-20);
  --alpha-mint-500-10: var(--color-mint-500-10);
  --alpha-mint-500-5: var(--color-mint-500-5);
  --alpha-mint-600-100: var(--color-mint-600-100);
  --alpha-mint-600-90: var(--color-mint-600-90);
  --alpha-mint-600-80: var(--color-mint-600-80);
  --alpha-mint-600-70: var(--color-mint-600-70);
  --alpha-mint-600-60: var(--color-mint-600-60);
  --alpha-mint-600-50: var(--color-mint-600-50);
  --alpha-mint-600-40: var(--color-mint-600-40);
  --alpha-mint-600-30: var(--color-mint-600-30);
  --alpha-mint-600-20: var(--color-mint-600-20);
  --alpha-mint-600-10: var(--color-mint-600-10);
  --alpha-mint-600-5: var(--color-mint-600-5);
  --alpha-mint-700-100: var(--color-mint-700-100);
  --alpha-mint-700-90: var(--color-mint-700-90);
  --alpha-mint-700-80: var(--color-mint-700-80);
  --alpha-mint-700-70: var(--color-mint-700-70);
  --alpha-mint-700-60: var(--color-mint-700-60);
  --alpha-mint-700-50: var(--color-mint-700-50);
  --alpha-mint-700-40: var(--color-mint-700-40);
  --alpha-mint-700-30: var(--color-mint-700-30);
  --alpha-mint-700-20: var(--color-mint-700-20);
  --alpha-mint-700-10: var(--color-mint-700-10);
  --alpha-mint-700-5: var(--color-mint-700-5);
  --alpha-mint-800-100: var(--color-mint-800-100);
  --alpha-mint-800-90: var(--color-mint-800-90);
  --alpha-mint-800-80: var(--color-mint-800-80);
  --alpha-mint-800-70: var(--color-mint-800-70);
  --alpha-mint-800-60: var(--color-mint-800-60);
  --alpha-mint-800-50: var(--color-mint-800-50);
  --alpha-mint-800-40: var(--color-mint-800-40);
  --alpha-mint-800-30: var(--color-mint-800-30);
  --alpha-mint-800-20: var(--color-mint-800-20);
  --alpha-mint-800-10: var(--color-mint-800-10);
  --alpha-mint-800-5: var(--color-mint-800-5);
  --alpha-mint-900-100: var(--color-mint-900-100);
  --alpha-mint-900-90: var(--color-mint-900-90);
  --alpha-mint-900-80: var(--color-mint-900-80);
  --alpha-mint-900-70: var(--color-mint-900-70);
  --alpha-mint-900-60: var(--color-mint-900-60);
  --alpha-mint-900-50: var(--color-mint-900-50);
  --alpha-mint-900-40: var(--color-mint-900-40);
  --alpha-mint-900-30: var(--color-mint-900-30);
  --alpha-mint-900-20: var(--color-mint-900-20);
  --alpha-mint-900-10: var(--color-mint-900-10);
  --alpha-mint-900-5: var(--color-mint-900-5);
  --alpha-mint-950-100: var(--color-mint-950-100);
  --alpha-mint-950-90: var(--color-mint-950-90);
  --alpha-mint-950-80: var(--color-mint-950-80);
  --alpha-mint-950-70: var(--color-mint-950-70);
  --alpha-mint-950-60: var(--color-mint-950-60);
  --alpha-mint-950-50: var(--color-mint-950-50);
  --alpha-mint-950-40: var(--color-mint-950-40);
  --alpha-mint-950-30: var(--color-mint-950-30);
  --alpha-mint-950-20: var(--color-mint-950-20);
  --alpha-mint-950-10: var(--color-mint-950-10);
  --alpha-mint-950-5: var(--color-mint-950-5);
  /* Utility Sky */
  --utility-sky-50: var(--color-sky-50);
  --utility-sky-100: var(--color-sky-100);
  --utility-sky-200: var(--color-sky-200);
  --utility-sky-300: var(--color-sky-300);
  --utility-sky-400: var(--color-sky-400);
  --utility-sky-500: var(--color-sky-500);
  --utility-sky-600: var(--color-sky-600);
  --utility-sky-700: var(--color-sky-700);
  --utility-sky-800: var(--color-sky-800);
  --utility-sky-900: var(--color-sky-900);
  --utility-sky-950: var(--color-sky-950);
  --alpha-sky-50-100: var(--color-sky-50-100);
  --alpha-sky-50-90: var(--color-sky-50-90);
  --alpha-sky-50-80: var(--color-sky-50-80);
  --alpha-sky-50-70: var(--color-sky-50-70);
  --alpha-sky-50-60: var(--color-sky-50-60);
  --alpha-sky-50-50: var(--color-sky-50-50);
  --alpha-sky-50-40: var(--color-sky-50-40);
  --alpha-sky-50-30: var(--color-sky-50-30);
  --alpha-sky-50-20: var(--color-sky-50-20);
  --alpha-sky-50-10: var(--color-sky-50-10);
  --alpha-sky-50-5: var(--color-sky-50-5);
  --alpha-sky-100-100: var(--color-sky-100-100);
  --alpha-sky-100-90: var(--color-sky-100-90);
  --alpha-sky-100-80: var(--color-sky-100-80);
  --alpha-sky-100-70: var(--color-sky-100-70);
  --alpha-sky-100-60: var(--color-sky-100-60);
  --alpha-sky-100-50: var(--color-sky-100-50);
  --alpha-sky-100-40: var(--color-sky-100-40);
  --alpha-sky-100-30: var(--color-sky-100-30);
  --alpha-sky-100-20: var(--color-sky-100-20);
  --alpha-sky-100-10: var(--color-sky-100-10);
  --alpha-sky-100-5: var(--color-sky-100-5);
  --alpha-sky-200-100: var(--color-sky-200-100);
  --alpha-sky-200-90: var(--color-sky-200-90);
  --alpha-sky-200-80: var(--color-sky-200-80);
  --alpha-sky-200-70: var(--color-sky-200-70);
  --alpha-sky-200-60: var(--color-sky-200-60);
  --alpha-sky-200-50: var(--color-sky-200-50);
  --alpha-sky-200-40: var(--color-sky-200-40);
  --alpha-sky-200-30: var(--color-sky-200-30);
  --alpha-sky-200-20: var(--color-sky-200-20);
  --alpha-sky-200-10: var(--color-sky-200-10);
  --alpha-sky-200-5: var(--color-sky-200-5);
  --alpha-sky-300-100: var(--color-sky-300-100);
  --alpha-sky-300-90: var(--color-sky-300-90);
  --alpha-sky-300-80: var(--color-sky-300-80);
  --alpha-sky-300-70: var(--color-sky-300-70);
  --alpha-sky-300-60: var(--color-sky-300-60);
  --alpha-sky-300-50: var(--color-sky-300-50);
  --alpha-sky-300-40: var(--color-sky-300-40);
  --alpha-sky-300-30: var(--color-sky-300-30);
  --alpha-sky-300-20: var(--color-sky-300-20);
  --alpha-sky-300-10: var(--color-sky-300-10);
  --alpha-sky-300-5: var(--color-sky-300-5);
  --alpha-sky-400-100: var(--color-sky-400-100);
  --alpha-sky-400-90: var(--color-sky-400-90);
  --alpha-sky-400-80: var(--color-sky-400-80);
  --alpha-sky-400-70: var(--color-sky-400-70);
  --alpha-sky-400-60: var(--color-sky-400-60);
  --alpha-sky-400-50: var(--color-sky-400-50);
  --alpha-sky-400-40: var(--color-sky-400-40);
  --alpha-sky-400-30: var(--color-sky-400-30);
  --alpha-sky-400-20: var(--color-sky-400-20);
  --alpha-sky-400-10: var(--color-sky-400-10);
  --alpha-sky-400-5: var(--color-sky-400-5);
  --alpha-sky-500-100: var(--color-sky-500-100);
  --alpha-sky-500-90: var(--color-sky-500-90);
  --alpha-sky-500-80: var(--color-sky-500-80);
  --alpha-sky-500-70: var(--color-sky-500-70);
  --alpha-sky-500-60: var(--color-sky-500-60);
  --alpha-sky-500-50: var(--color-sky-500-50);
  --alpha-sky-500-40: var(--color-sky-500-40);
  --alpha-sky-500-30: var(--color-sky-500-30);
  --alpha-sky-500-20: var(--color-sky-500-20);
  --alpha-sky-500-10: var(--color-sky-500-10);
  --alpha-sky-500-5: var(--color-sky-500-5);
  --alpha-sky-600-100: var(--color-sky-600-100);
  --alpha-sky-600-90: var(--color-sky-600-90);
  --alpha-sky-600-80: var(--color-sky-600-80);
  --alpha-sky-600-70: var(--color-sky-600-70);
  --alpha-sky-600-60: var(--color-sky-600-60);
  --alpha-sky-600-50: var(--color-sky-600-50);
  --alpha-sky-600-40: var(--color-sky-600-40);
  --alpha-sky-600-30: var(--color-sky-600-30);
  --alpha-sky-600-20: var(--color-sky-600-20);
  --alpha-sky-600-10: var(--color-sky-600-10);
  --alpha-sky-600-5: var(--color-sky-600-5);
  --alpha-sky-700-100: var(--color-sky-700-100);
  --alpha-sky-700-90: var(--color-sky-700-90);
  --alpha-sky-700-80: var(--color-sky-700-80);
  --alpha-sky-700-70: var(--color-sky-700-70);
  --alpha-sky-700-60: var(--color-sky-700-60);
  --alpha-sky-700-50: var(--color-sky-700-50);
  --alpha-sky-700-40: var(--color-sky-700-40);
  --alpha-sky-700-30: var(--color-sky-700-30);
  --alpha-sky-700-20: var(--color-sky-700-20);
  --alpha-sky-700-10: var(--color-sky-700-10);
  --alpha-sky-700-5: var(--color-sky-700-5);
  --alpha-sky-800-100: var(--color-sky-800-100);
  --alpha-sky-800-90: var(--color-sky-800-90);
  --alpha-sky-800-80: var(--color-sky-800-80);
  --alpha-sky-800-70: var(--color-sky-800-70);
  --alpha-sky-800-60: var(--color-sky-800-60);
  --alpha-sky-800-50: var(--color-sky-800-50);
  --alpha-sky-800-40: var(--color-sky-800-40);
  --alpha-sky-800-30: var(--color-sky-800-30);
  --alpha-sky-800-20: var(--color-sky-800-20);
  --alpha-sky-800-10: var(--color-sky-800-10);
  --alpha-sky-800-5: var(--color-sky-800-5);
  --alpha-sky-900-100: var(--color-sky-900-100);
  --alpha-sky-900-90: var(--color-sky-900-90);
  --alpha-sky-900-80: var(--color-sky-900-80);
  --alpha-sky-900-70: var(--color-sky-900-70);
  --alpha-sky-900-60: var(--color-sky-900-60);
  --alpha-sky-900-50: var(--color-sky-900-50);
  --alpha-sky-900-40: var(--color-sky-900-40);
  --alpha-sky-900-30: var(--color-sky-900-30);
  --alpha-sky-900-20: var(--color-sky-900-20);
  --alpha-sky-900-10: var(--color-sky-900-10);
  --alpha-sky-900-5: var(--color-sky-900-5);
  --alpha-sky-950-100: var(--color-sky-950-100);
  --alpha-sky-950-90: var(--color-sky-950-90);
  --alpha-sky-950-80: var(--color-sky-950-80);
  --alpha-sky-950-70: var(--color-sky-950-70);
  --alpha-sky-950-60: var(--color-sky-950-60);
  --alpha-sky-950-50: var(--color-sky-950-50);
  --alpha-sky-950-40: var(--color-sky-950-40);
  --alpha-sky-950-30: var(--color-sky-950-30);
  --alpha-sky-950-20: var(--color-sky-950-20);
  --alpha-sky-950-10: var(--color-sky-950-10);
  --alpha-sky-950-5: var(--color-sky-950-5);
  /* Utility Blue */
  --utility-blue-50: var(--color-blue-50);
  --utility-blue-100: var(--color-blue-100);
  --utility-blue-200: var(--color-blue-200);
  --utility-blue-300: var(--color-blue-300);
  --utility-blue-400: var(--color-blue-400);
  --utility-blue-500: var(--color-blue-500);
  --utility-blue-600: var(--color-blue-600);
  --utility-blue-700: var(--color-blue-700);
  --utility-blue-800: var(--color-blue-800);
  --utility-blue-900: var(--color-blue-900);
  --utility-blue-950: var(--color-blue-950);
  --alpha-blue-50-100: var(--color-blue-50-100);
  --alpha-blue-50-90: var(--color-blue-50-90);
  --alpha-blue-50-80: var(--color-blue-50-80);
  --alpha-blue-50-70: var(--color-blue-50-70);
  --alpha-blue-50-60: var(--color-blue-50-60);
  --alpha-blue-50-50: var(--color-blue-50-50);
  --alpha-blue-50-40: var(--color-blue-50-40);
  --alpha-blue-50-30: var(--color-blue-50-30);
  --alpha-blue-50-20: var(--color-blue-50-20);
  --alpha-blue-50-10: var(--color-blue-50-10);
  --alpha-blue-50-5: var(--color-blue-50-5);
  --alpha-blue-100-100: var(--color-blue-100-100);
  --alpha-blue-100-90: var(--color-blue-100-90);
  --alpha-blue-100-80: var(--color-blue-100-80);
  --alpha-blue-100-70: var(--color-blue-100-70);
  --alpha-blue-100-60: var(--color-blue-100-60);
  --alpha-blue-100-50: var(--color-blue-100-50);
  --alpha-blue-100-40: var(--color-blue-100-40);
  --alpha-blue-100-30: var(--color-blue-100-30);
  --alpha-blue-100-20: var(--color-blue-100-20);
  --alpha-blue-100-10: var(--color-blue-100-10);
  --alpha-blue-100-5: var(--color-blue-100-5);
  --alpha-blue-200-100: var(--color-blue-200-100);
  --alpha-blue-200-90: var(--color-blue-200-90);
  --alpha-blue-200-80: var(--color-blue-200-80);
  --alpha-blue-200-70: var(--color-blue-200-70);
  --alpha-blue-200-60: var(--color-blue-200-60);
  --alpha-blue-200-50: var(--color-blue-200-50);
  --alpha-blue-200-40: var(--color-blue-200-40);
  --alpha-blue-200-30: var(--color-blue-200-30);
  --alpha-blue-200-20: var(--color-blue-200-20);
  --alpha-blue-200-10: var(--color-blue-200-10);
  --alpha-blue-200-5: var(--color-blue-200-5);
  --alpha-blue-300-100: var(--color-blue-300-100);
  --alpha-blue-300-90: var(--color-blue-300-90);
  --alpha-blue-300-80: var(--color-blue-300-80);
  --alpha-blue-300-70: var(--color-blue-300-70);
  --alpha-blue-300-60: var(--color-blue-300-60);
  --alpha-blue-300-50: var(--color-blue-300-50);
  --alpha-blue-300-40: var(--color-blue-300-40);
  --alpha-blue-300-30: var(--color-blue-300-30);
  --alpha-blue-300-20: var(--color-blue-300-20);
  --alpha-blue-300-10: var(--color-blue-300-10);
  --alpha-blue-300-5: var(--color-blue-300-5);
  --alpha-blue-400-100: var(--color-blue-400-100);
  --alpha-blue-400-90: var(--color-blue-400-90);
  --alpha-blue-400-80: var(--color-blue-400-80);
  --alpha-blue-400-70: var(--color-blue-400-70);
  --alpha-blue-400-60: var(--color-blue-400-60);
  --alpha-blue-400-50: var(--color-blue-400-50);
  --alpha-blue-400-40: var(--color-blue-400-40);
  --alpha-blue-400-30: var(--color-blue-400-30);
  --alpha-blue-400-20: var(--color-blue-400-20);
  --alpha-blue-400-10: var(--color-blue-400-10);
  --alpha-blue-400-5: var(--color-blue-400-5);
  --alpha-blue-500-100: var(--color-blue-500-100);
  --alpha-blue-500-90: var(--color-blue-500-90);
  --alpha-blue-500-80: var(--color-blue-500-80);
  --alpha-blue-500-70: var(--color-blue-500-70);
  --alpha-blue-500-60: var(--color-blue-500-60);
  --alpha-blue-500-50: var(--color-blue-500-50);
  --alpha-blue-500-40: var(--color-blue-500-40);
  --alpha-blue-500-36: var(--color-blue-500-36);
  --alpha-blue-500-34: var(--color-blue-500-34);
  --alpha-blue-500-30: var(--color-blue-500-30);
  --alpha-blue-500-26: var(--color-blue-500-26);
  --alpha-blue-500-24: var(--color-blue-500-24);
  --alpha-blue-500-20: var(--color-blue-500-20);
  --alpha-blue-500-18: var(--color-blue-500-18);
  --alpha-blue-500-16: var(--color-blue-500-16);
  --alpha-blue-500-12: var(--color-blue-500-12);
  --alpha-blue-500-10: var(--color-blue-500-10);
  --alpha-blue-500-5: var(--color-blue-500-5);
  --alpha-blue-600-100: var(--color-blue-600-100);
  --alpha-blue-600-90: var(--color-blue-600-90);
  --alpha-blue-600-80: var(--color-blue-600-80);
  --alpha-blue-600-70: var(--color-blue-600-70);
  --alpha-blue-600-60: var(--color-blue-600-60);
  --alpha-blue-600-50: var(--color-blue-600-50);
  --alpha-blue-600-40: var(--color-blue-600-40);
  --alpha-blue-600-30: var(--color-blue-600-30);
  --alpha-blue-600-20: var(--color-blue-600-20);
  --alpha-blue-600-10: var(--color-blue-600-10);
  --alpha-blue-600-5: var(--color-blue-600-5);
  --alpha-blue-700-100: var(--color-blue-700-100);
  --alpha-blue-700-90: var(--color-blue-700-90);
  --alpha-blue-700-80: var(--color-blue-700-80);
  --alpha-blue-700-70: var(--color-blue-700-70);
  --alpha-blue-700-60: var(--color-blue-700-60);
  --alpha-blue-700-50: var(--color-blue-700-50);
  --alpha-blue-700-40: var(--color-blue-700-40);
  --alpha-blue-700-30: var(--color-blue-700-30);
  --alpha-blue-700-20: var(--color-blue-700-20);
  --alpha-blue-700-10: var(--color-blue-700-10);
  --alpha-blue-700-5: var(--color-blue-700-5);
  --alpha-blue-800-100: var(--color-blue-800-100);
  --alpha-blue-800-90: var(--color-blue-800-90);
  --alpha-blue-800-80: var(--color-blue-800-80);
  --alpha-blue-800-70: var(--color-blue-800-70);
  --alpha-blue-800-60: var(--color-blue-800-60);
  --alpha-blue-800-50: var(--color-blue-800-50);
  --alpha-blue-800-40: var(--color-blue-800-40);
  --alpha-blue-800-30: var(--color-blue-800-30);
  --alpha-blue-800-20: var(--color-blue-800-20);
  --alpha-blue-800-10: var(--color-blue-800-10);
  --alpha-blue-800-5: var(--color-blue-800-5);
  --alpha-blue-900-100: var(--color-blue-900-100);
  --alpha-blue-900-90: var(--color-blue-900-90);
  --alpha-blue-900-80: var(--color-blue-900-80);
  --alpha-blue-900-70: var(--color-blue-900-70);
  --alpha-blue-900-60: var(--color-blue-900-60);
  --alpha-blue-900-50: var(--color-blue-900-50);
  --alpha-blue-900-40: var(--color-blue-900-40);
  --alpha-blue-900-30: var(--color-blue-900-30);
  --alpha-blue-900-20: var(--color-blue-900-20);
  --alpha-blue-900-10: var(--color-blue-900-10);
  --alpha-blue-900-5: var(--color-blue-900-5);
  --alpha-blue-950-100: var(--color-blue-950-100);
  --alpha-blue-950-90: var(--color-blue-950-90);
  --alpha-blue-950-80: var(--color-blue-950-80);
  --alpha-blue-950-70: var(--color-blue-950-70);
  --alpha-blue-950-60: var(--color-blue-950-60);
  --alpha-blue-950-50: var(--color-blue-950-50);
  --alpha-blue-950-40: var(--color-blue-950-40);
  --alpha-blue-950-30: var(--color-blue-950-30);
  --alpha-blue-950-20: var(--color-blue-950-20);
  --alpha-blue-950-10: var(--color-blue-950-10);
  --alpha-blue-950-5: var(--color-blue-950-5);
  /* Utility Indigo */
  --utility-indigo-50: var(--color-indigo-50);
  --utility-indigo-100: var(--color-indigo-100);
  --utility-indigo-200: var(--color-indigo-200);
  --utility-indigo-300: var(--color-indigo-300);
  --utility-indigo-400: var(--color-indigo-400);
  --utility-indigo-500: var(--color-indigo-500);
  --utility-indigo-600: var(--color-indigo-600);
  --utility-indigo-700: var(--color-indigo-700);
  --utility-indigo-800: var(--color-indigo-800);
  --utility-indigo-900: var(--color-indigo-900);
  --utility-indigo-950: var(--color-indigo-950);
  --alpha-indigo-50-100: var(--color-indigo-50-100);
  --alpha-indigo-50-90: var(--color-indigo-50-90);
  --alpha-indigo-50-80: var(--color-indigo-50-80);
  --alpha-indigo-50-70: var(--color-indigo-50-70);
  --alpha-indigo-50-60: var(--color-indigo-50-60);
  --alpha-indigo-50-50: var(--color-indigo-50-50);
  --alpha-indigo-50-40: var(--color-indigo-50-40);
  --alpha-indigo-50-30: var(--color-indigo-50-30);
  --alpha-indigo-50-20: var(--color-indigo-50-20);
  --alpha-indigo-50-10: var(--color-indigo-50-10);
  --alpha-indigo-50-5: var(--color-indigo-50-5);
  --alpha-indigo-100-100: var(--color-indigo-100-100);
  --alpha-indigo-100-90: var(--color-indigo-100-90);
  --alpha-indigo-100-80: var(--color-indigo-100-80);
  --alpha-indigo-100-70: var(--color-indigo-100-70);
  --alpha-indigo-100-60: var(--color-indigo-100-60);
  --alpha-indigo-100-50: var(--color-indigo-100-50);
  --alpha-indigo-100-40: var(--color-indigo-100-40);
  --alpha-indigo-100-30: var(--color-indigo-100-30);
  --alpha-indigo-100-20: var(--color-indigo-100-20);
  --alpha-indigo-100-10: var(--color-indigo-100-10);
  --alpha-indigo-100-5: var(--color-indigo-100-5);
  --alpha-indigo-200-100: var(--color-indigo-200-100);
  --alpha-indigo-200-90: var(--color-indigo-200-90);
  --alpha-indigo-200-80: var(--color-indigo-200-80);
  --alpha-indigo-200-70: var(--color-indigo-200-70);
  --alpha-indigo-200-60: var(--color-indigo-200-60);
  --alpha-indigo-200-50: var(--color-indigo-200-50);
  --alpha-indigo-200-40: var(--color-indigo-200-40);
  --alpha-indigo-200-30: var(--color-indigo-200-30);
  --alpha-indigo-200-20: var(--color-indigo-200-20);
  --alpha-indigo-200-10: var(--color-indigo-200-10);
  --alpha-indigo-200-5: var(--color-indigo-200-5);
  --alpha-indigo-300-100: var(--color-indigo-300-100);
  --alpha-indigo-300-90: var(--color-indigo-300-90);
  --alpha-indigo-300-80: var(--color-indigo-300-80);
  --alpha-indigo-300-70: var(--color-indigo-300-70);
  --alpha-indigo-300-60: var(--color-indigo-300-60);
  --alpha-indigo-300-50: var(--color-indigo-300-50);
  --alpha-indigo-300-40: var(--color-indigo-300-40);
  --alpha-indigo-300-30: var(--color-indigo-300-30);
  --alpha-indigo-300-20: var(--color-indigo-300-20);
  --alpha-indigo-300-10: var(--color-indigo-300-10);
  --alpha-indigo-300-5: var(--color-indigo-300-5);
  --alpha-indigo-400-100: var(--color-indigo-400-100);
  --alpha-indigo-400-90: var(--color-indigo-400-90);
  --alpha-indigo-400-80: var(--color-indigo-400-80);
  --alpha-indigo-400-70: var(--color-indigo-400-70);
  --alpha-indigo-400-60: var(--color-indigo-400-60);
  --alpha-indigo-400-50: var(--color-indigo-400-50);
  --alpha-indigo-400-40: var(--color-indigo-400-40);
  --alpha-indigo-400-30: var(--color-indigo-400-30);
  --alpha-indigo-400-20: var(--color-indigo-400-20);
  --alpha-indigo-400-10: var(--color-indigo-400-10);
  --alpha-indigo-400-5: var(--color-indigo-400-5);
  --alpha-indigo-500-100: var(--color-indigo-500-100);
  --alpha-indigo-500-90: var(--color-indigo-500-90);
  --alpha-indigo-500-80: var(--color-indigo-500-80);
  --alpha-indigo-500-70: var(--color-indigo-500-70);
  --alpha-indigo-500-60: var(--color-indigo-500-60);
  --alpha-indigo-500-50: var(--color-indigo-500-50);
  --alpha-indigo-500-40: var(--color-indigo-500-40);
  --alpha-indigo-500-30: var(--color-indigo-500-30);
  --alpha-indigo-500-20: var(--color-indigo-500-20);
  --alpha-indigo-500-10: var(--color-indigo-500-10);
  --alpha-indigo-500-5: var(--color-indigo-500-5);
  --alpha-indigo-600-100: var(--color-indigo-600-100);
  --alpha-indigo-600-90: var(--color-indigo-600-90);
  --alpha-indigo-600-80: var(--color-indigo-600-80);
  --alpha-indigo-600-70: var(--color-indigo-600-70);
  --alpha-indigo-600-60: var(--color-indigo-600-60);
  --alpha-indigo-600-50: var(--color-indigo-600-50);
  --alpha-indigo-600-40: var(--color-indigo-600-40);
  --alpha-indigo-600-30: var(--color-indigo-600-30);
  --alpha-indigo-600-20: var(--color-indigo-600-20);
  --alpha-indigo-600-10: var(--color-indigo-600-10);
  --alpha-indigo-600-5: var(--color-indigo-600-5);
  --alpha-indigo-700-100: var(--color-indigo-700-100);
  --alpha-indigo-700-90: var(--color-indigo-700-90);
  --alpha-indigo-700-80: var(--color-indigo-700-80);
  --alpha-indigo-700-70: var(--color-indigo-700-70);
  --alpha-indigo-700-60: var(--color-indigo-700-60);
  --alpha-indigo-700-50: var(--color-indigo-700-50);
  --alpha-indigo-700-40: var(--color-indigo-700-40);
  --alpha-indigo-700-30: var(--color-indigo-700-30);
  --alpha-indigo-700-20: var(--color-indigo-700-20);
  --alpha-indigo-700-10: var(--color-indigo-700-10);
  --alpha-indigo-700-5: var(--color-indigo-700-5);
  --alpha-indigo-800-100: var(--color-indigo-800-100);
  --alpha-indigo-800-90: var(--color-indigo-800-90);
  --alpha-indigo-800-80: var(--color-indigo-800-80);
  --alpha-indigo-800-70: var(--color-indigo-800-70);
  --alpha-indigo-800-60: var(--color-indigo-800-60);
  --alpha-indigo-800-50: var(--color-indigo-800-50);
  --alpha-indigo-800-40: var(--color-indigo-800-40);
  --alpha-indigo-800-30: var(--color-indigo-800-30);
  --alpha-indigo-800-20: var(--color-indigo-800-20);
  --alpha-indigo-800-10: var(--color-indigo-800-10);
  --alpha-indigo-800-5: var(--color-indigo-800-5);
  --alpha-indigo-900-100: var(--color-indigo-900-100);
  --alpha-indigo-900-90: var(--color-indigo-900-90);
  --alpha-indigo-900-80: var(--color-indigo-900-80);
  --alpha-indigo-900-70: var(--color-indigo-900-70);
  --alpha-indigo-900-60: var(--color-indigo-900-60);
  --alpha-indigo-900-50: var(--color-indigo-900-50);
  --alpha-indigo-900-40: var(--color-indigo-900-40);
  --alpha-indigo-900-30: var(--color-indigo-900-30);
  --alpha-indigo-900-20: var(--color-indigo-900-20);
  --alpha-indigo-900-10: var(--color-indigo-900-10);
  --alpha-indigo-900-5: var(--color-indigo-900-5);
  --alpha-indigo-950-100: var(--color-indigo-950-100);
  --alpha-indigo-950-90: var(--color-indigo-950-90);
  --alpha-indigo-950-80: var(--color-indigo-950-80);
  --alpha-indigo-950-70: var(--color-indigo-950-70);
  --alpha-indigo-950-60: var(--color-indigo-950-60);
  --alpha-indigo-950-50: var(--color-indigo-950-50);
  --alpha-indigo-950-40: var(--color-indigo-950-40);
  --alpha-indigo-950-30: var(--color-indigo-950-30);
  --alpha-indigo-950-20: var(--color-indigo-950-20);
  --alpha-indigo-950-10: var(--color-indigo-950-10);
  --alpha-indigo-950-5: var(--color-indigo-950-5);
  /* Utility Violet */
  --utility-violet-50: var(--color-violet-50);
  --utility-violet-100: var(--color-violet-100);
  --utility-violet-200: var(--color-violet-200);
  --utility-violet-300: var(--color-violet-300);
  --utility-violet-400: var(--color-violet-400);
  --utility-violet-500: var(--color-violet-500);
  --utility-violet-600: var(--color-violet-600);
  --utility-violet-700: var(--color-violet-700);
  --utility-violet-800: var(--color-violet-800);
  --utility-violet-900: var(--color-violet-900);
  --utility-violet-950: var(--color-violet-950);
  --alpha-violet-50-100: var(--color-violet-50-100);
  --alpha-violet-50-90: var(--color-violet-50-90);
  --alpha-violet-50-80: var(--color-violet-50-80);
  --alpha-violet-50-70: var(--color-violet-50-70);
  --alpha-violet-50-60: var(--color-violet-50-60);
  --alpha-violet-50-50: var(--color-violet-50-50);
  --alpha-violet-50-40: var(--color-violet-50-40);
  --alpha-violet-50-30: var(--color-violet-50-30);
  --alpha-violet-50-20: var(--color-violet-50-20);
  --alpha-violet-50-10: var(--color-violet-50-10);
  --alpha-violet-50-5: var(--color-violet-50-5);
  --alpha-violet-100-100: var(--color-violet-100-100);
  --alpha-violet-100-90: var(--color-violet-100-90);
  --alpha-violet-100-80: var(--color-violet-100-80);
  --alpha-violet-100-70: var(--color-violet-100-70);
  --alpha-violet-100-60: var(--color-violet-100-60);
  --alpha-violet-100-50: var(--color-violet-100-50);
  --alpha-violet-100-40: var(--color-violet-100-40);
  --alpha-violet-100-30: var(--color-violet-100-30);
  --alpha-violet-100-20: var(--color-violet-100-20);
  --alpha-violet-100-10: var(--color-violet-100-10);
  --alpha-violet-100-5: var(--color-violet-100-5);
  --alpha-violet-200-100: var(--color-violet-200-100);
  --alpha-violet-200-90: var(--color-violet-200-90);
  --alpha-violet-200-80: var(--color-violet-200-80);
  --alpha-violet-200-70: var(--color-violet-200-70);
  --alpha-violet-200-60: var(--color-violet-200-60);
  --alpha-violet-200-50: var(--color-violet-200-50);
  --alpha-violet-200-40: var(--color-violet-200-40);
  --alpha-violet-200-30: var(--color-violet-200-30);
  --alpha-violet-200-20: var(--color-violet-200-20);
  --alpha-violet-200-10: var(--color-violet-200-10);
  --alpha-violet-200-5: var(--color-violet-200-5);
  --alpha-violet-300-100: var(--color-violet-300-100);
  --alpha-violet-300-90: var(--color-violet-300-90);
  --alpha-violet-300-80: var(--color-violet-300-80);
  --alpha-violet-300-70: var(--color-violet-300-70);
  --alpha-violet-300-60: var(--color-violet-300-60);
  --alpha-violet-300-50: var(--color-violet-300-50);
  --alpha-violet-300-40: var(--color-violet-300-40);
  --alpha-violet-300-30: var(--color-violet-300-30);
  --alpha-violet-300-20: var(--color-violet-300-20);
  --alpha-violet-300-10: var(--color-violet-300-10);
  --alpha-violet-300-5: var(--color-violet-300-5);
  --alpha-violet-400-100: var(--color-violet-400-100);
  --alpha-violet-400-90: var(--color-violet-400-90);
  --alpha-violet-400-80: var(--color-violet-400-80);
  --alpha-violet-400-70: var(--color-violet-400-70);
  --alpha-violet-400-60: var(--color-violet-400-60);
  --alpha-violet-400-50: var(--color-violet-400-50);
  --alpha-violet-400-40: var(--color-violet-400-40);
  --alpha-violet-400-30: var(--color-violet-400-30);
  --alpha-violet-400-20: var(--color-violet-400-20);
  --alpha-violet-400-10: var(--color-violet-400-10);
  --alpha-violet-400-5: var(--color-violet-400-5);
  --alpha-violet-500-100: var(--color-violet-500-100);
  --alpha-violet-500-90: var(--color-violet-500-90);
  --alpha-violet-500-80: var(--color-violet-500-80);
  --alpha-violet-500-70: var(--color-violet-500-70);
  --alpha-violet-500-60: var(--color-violet-500-60);
  --alpha-violet-500-50: var(--color-violet-500-50);
  --alpha-violet-500-40: var(--color-violet-500-40);
  --alpha-violet-500-30: var(--color-violet-500-30);
  --alpha-violet-500-20: var(--color-violet-500-20);
  --alpha-violet-500-10: var(--color-violet-500-10);
  --alpha-violet-500-5: var(--color-violet-500-5);
  --alpha-violet-600-100: var(--color-violet-600-100);
  --alpha-violet-600-90: var(--color-violet-600-90);
  --alpha-violet-600-80: var(--color-violet-600-80);
  --alpha-violet-600-70: var(--color-violet-600-70);
  --alpha-violet-600-60: var(--color-violet-600-60);
  --alpha-violet-600-50: var(--color-violet-600-50);
  --alpha-violet-600-40: var(--color-violet-600-40);
  --alpha-violet-600-30: var(--color-violet-600-30);
  --alpha-violet-600-20: var(--color-violet-600-20);
  --alpha-violet-600-10: var(--color-violet-600-10);
  --alpha-violet-600-5: var(--color-violet-600-5);
  --alpha-violet-700-100: var(--color-violet-700-100);
  --alpha-violet-700-90: var(--color-violet-700-90);
  --alpha-violet-700-80: var(--color-violet-700-80);
  --alpha-violet-700-70: var(--color-violet-700-70);
  --alpha-violet-700-60: var(--color-violet-700-60);
  --alpha-violet-700-50: var(--color-violet-700-50);
  --alpha-violet-700-40: var(--color-violet-700-40);
  --alpha-violet-700-30: var(--color-violet-700-30);
  --alpha-violet-700-20: var(--color-violet-700-20);
  --alpha-violet-700-10: var(--color-violet-700-10);
  --alpha-violet-700-5: var(--color-violet-700-5);
  --alpha-violet-800-100: var(--color-violet-800-100);
  --alpha-violet-800-90: var(--color-violet-800-90);
  --alpha-violet-800-80: var(--color-violet-800-80);
  --alpha-violet-800-70: var(--color-violet-800-70);
  --alpha-violet-800-60: var(--color-violet-800-60);
  --alpha-violet-800-50: var(--color-violet-800-50);
  --alpha-violet-800-40: var(--color-violet-800-40);
  --alpha-violet-800-30: var(--color-violet-800-30);
  --alpha-violet-800-20: var(--color-violet-800-20);
  --alpha-violet-800-10: var(--color-violet-800-10);
  --alpha-violet-800-5: var(--color-violet-800-5);
  --alpha-violet-900-100: var(--color-violet-900-100);
  --alpha-violet-900-90: var(--color-violet-900-90);
  --alpha-violet-900-80: var(--color-violet-900-80);
  --alpha-violet-900-70: var(--color-violet-900-70);
  --alpha-violet-900-60: var(--color-violet-900-60);
  --alpha-violet-900-50: var(--color-violet-900-50);
  --alpha-violet-900-40: var(--color-violet-900-40);
  --alpha-violet-900-30: var(--color-violet-900-30);
  --alpha-violet-900-20: var(--color-violet-900-20);
  --alpha-violet-900-10: var(--color-violet-900-10);
  --alpha-violet-900-5: var(--color-violet-900-5);
  --alpha-violet-950-100: var(--color-violet-950-100);
  --alpha-violet-950-90: var(--color-violet-950-90);
  --alpha-violet-950-80: var(--color-violet-950-80);
  --alpha-violet-950-70: var(--color-violet-950-70);
  --alpha-violet-950-60: var(--color-violet-950-60);
  --alpha-violet-950-50: var(--color-violet-950-50);
  --alpha-violet-950-40: var(--color-violet-950-40);
  --alpha-violet-950-30: var(--color-violet-950-30);
  --alpha-violet-950-20: var(--color-violet-950-20);
  --alpha-violet-950-10: var(--color-violet-950-10);
  --alpha-violet-950-5: var(--color-violet-950-5);
  /* Utility Purple */
  --utility-purple-50: var(--color-purple-50);
  --utility-purple-100: var(--color-purple-100);
  --utility-purple-200: var(--color-purple-200);
  --utility-purple-300: var(--color-purple-300);
  --utility-purple-400: var(--color-purple-400);
  --utility-purple-500: var(--color-purple-500);
  --utility-purple-600: var(--color-purple-600);
  --utility-purple-700: var(--color-purple-700);
  --utility-purple-800: var(--color-purple-800);
  --utility-purple-900: var(--color-purple-900);
  --utility-purple-950: var(--color-purple-950);
  --alpha-purple-50-100: var(--color-purple-50-100);
  --alpha-purple-50-90: var(--color-purple-50-90);
  --alpha-purple-50-80: var(--color-purple-50-80);
  --alpha-purple-50-70: var(--color-purple-50-70);
  --alpha-purple-50-60: var(--color-purple-50-60);
  --alpha-purple-50-50: var(--color-purple-50-50);
  --alpha-purple-50-40: var(--color-purple-50-40);
  --alpha-purple-50-30: var(--color-purple-50-30);
  --alpha-purple-50-20: var(--color-purple-50-20);
  --alpha-purple-50-10: var(--color-purple-50-10);
  --alpha-purple-50-5: var(--color-purple-50-5);
  --alpha-purple-100-100: var(--color-purple-100-100);
  --alpha-purple-100-90: var(--color-purple-100-90);
  --alpha-purple-100-80: var(--color-purple-100-80);
  --alpha-purple-100-70: var(--color-purple-100-70);
  --alpha-purple-100-60: var(--color-purple-100-60);
  --alpha-purple-100-50: var(--color-purple-100-50);
  --alpha-purple-100-40: var(--color-purple-100-40);
  --alpha-purple-100-30: var(--color-purple-100-30);
  --alpha-purple-100-20: var(--color-purple-100-20);
  --alpha-purple-100-10: var(--color-purple-100-10);
  --alpha-purple-100-5: var(--color-purple-100-5);
  --alpha-purple-200-100: var(--color-purple-200-100);
  --alpha-purple-200-90: var(--color-purple-200-90);
  --alpha-purple-200-80: var(--color-purple-200-80);
  --alpha-purple-200-70: var(--color-purple-200-70);
  --alpha-purple-200-60: var(--color-purple-200-60);
  --alpha-purple-200-50: var(--color-purple-200-50);
  --alpha-purple-200-40: var(--color-purple-200-40);
  --alpha-purple-200-30: var(--color-purple-200-30);
  --alpha-purple-200-20: var(--color-purple-200-20);
  --alpha-purple-200-10: var(--color-purple-200-10);
  --alpha-purple-200-5: var(--color-purple-200-5);
  --alpha-purple-300-100: var(--color-purple-300-100);
  --alpha-purple-300-90: var(--color-purple-300-90);
  --alpha-purple-300-80: var(--color-purple-300-80);
  --alpha-purple-300-70: var(--color-purple-300-70);
  --alpha-purple-300-60: var(--color-purple-300-60);
  --alpha-purple-300-50: var(--color-purple-300-50);
  --alpha-purple-300-40: var(--color-purple-300-40);
  --alpha-purple-300-30: var(--color-purple-300-30);
  --alpha-purple-300-20: var(--color-purple-300-20);
  --alpha-purple-300-10: var(--color-purple-300-10);
  --alpha-purple-300-5: var(--color-purple-300-5);
  --alpha-purple-400-100: var(--color-purple-400-100);
  --alpha-purple-400-90: var(--color-purple-400-90);
  --alpha-purple-400-80: var(--color-purple-400-80);
  --alpha-purple-400-70: var(--color-purple-400-70);
  --alpha-purple-400-60: var(--color-purple-400-60);
  --alpha-purple-400-50: var(--color-purple-400-50);
  --alpha-purple-400-40: var(--color-purple-400-40);
  --alpha-purple-400-30: var(--color-purple-400-30);
  --alpha-purple-400-20: var(--color-purple-400-20);
  --alpha-purple-400-10: var(--color-purple-400-10);
  --alpha-purple-400-5: var(--color-purple-400-5);
  --alpha-purple-500-100: var(--color-purple-500-100);
  --alpha-purple-500-90: var(--color-purple-500-90);
  --alpha-purple-500-80: var(--color-purple-500-80);
  --alpha-purple-500-70: var(--color-purple-500-70);
  --alpha-purple-500-60: var(--color-purple-500-60);
  --alpha-purple-500-50: var(--color-purple-500-50);
  --alpha-purple-500-40: var(--color-purple-500-40);
  --alpha-purple-500-30: var(--color-purple-500-30);
  --alpha-purple-500-20: var(--color-purple-500-20);
  --alpha-purple-500-10: var(--color-purple-500-10);
  --alpha-purple-500-5: var(--color-purple-500-5);
  --alpha-purple-600-100: var(--color-purple-600-100);
  --alpha-purple-600-90: var(--color-purple-600-90);
  --alpha-purple-600-80: var(--color-purple-600-80);
  --alpha-purple-600-70: var(--color-purple-600-70);
  --alpha-purple-600-60: var(--color-purple-600-60);
  --alpha-purple-600-50: var(--color-purple-600-50);
  --alpha-purple-600-40: var(--color-purple-600-40);
  --alpha-purple-600-30: var(--color-purple-600-30);
  --alpha-purple-600-20: var(--color-purple-600-20);
  --alpha-purple-600-10: var(--color-purple-600-10);
  --alpha-purple-600-5: var(--color-purple-600-5);
  --alpha-purple-700-100: var(--color-purple-700-100);
  --alpha-purple-700-90: var(--color-purple-700-90);
  --alpha-purple-700-80: var(--color-purple-700-80);
  --alpha-purple-700-70: var(--color-purple-700-70);
  --alpha-purple-700-60: var(--color-purple-700-60);
  --alpha-purple-700-50: var(--color-purple-700-50);
  --alpha-purple-700-40: var(--color-purple-700-40);
  --alpha-purple-700-30: var(--color-purple-700-30);
  --alpha-purple-700-20: var(--color-purple-700-20);
  --alpha-purple-700-10: var(--color-purple-700-10);
  --alpha-purple-700-5: var(--color-purple-700-5);
  --alpha-purple-800-100: var(--color-purple-800-100);
  --alpha-purple-800-90: var(--color-purple-800-90);
  --alpha-purple-800-80: var(--color-purple-800-80);
  --alpha-purple-800-70: var(--color-purple-800-70);
  --alpha-purple-800-60: var(--color-purple-800-60);
  --alpha-purple-800-50: var(--color-purple-800-50);
  --alpha-purple-800-40: var(--color-purple-800-40);
  --alpha-purple-800-30: var(--color-purple-800-30);
  --alpha-purple-800-20: var(--color-purple-800-20);
  --alpha-purple-800-10: var(--color-purple-800-10);
  --alpha-purple-800-5: var(--color-purple-800-5);
  --alpha-purple-900-100: var(--color-purple-900-100);
  --alpha-purple-900-90: var(--color-purple-900-90);
  --alpha-purple-900-80: var(--color-purple-900-80);
  --alpha-purple-900-70: var(--color-purple-900-70);
  --alpha-purple-900-60: var(--color-purple-900-60);
  --alpha-purple-900-50: var(--color-purple-900-50);
  --alpha-purple-900-40: var(--color-purple-900-40);
  --alpha-purple-900-30: var(--color-purple-900-30);
  --alpha-purple-900-20: var(--color-purple-900-20);
  --alpha-purple-900-10: var(--color-purple-900-10);
  --alpha-purple-900-5: var(--color-purple-900-5);
  --alpha-purple-950-100: var(--color-purple-950-100);
  --alpha-purple-950-90: var(--color-purple-950-90);
  --alpha-purple-950-80: var(--color-purple-950-80);
  --alpha-purple-950-70: var(--color-purple-950-70);
  --alpha-purple-950-60: var(--color-purple-950-60);
  --alpha-purple-950-50: var(--color-purple-950-50);
  --alpha-purple-950-40: var(--color-purple-950-40);
  --alpha-purple-950-30: var(--color-purple-950-30);
  --alpha-purple-950-20: var(--color-purple-950-20);
  --alpha-purple-950-10: var(--color-purple-950-10);
  --alpha-purple-950-5: var(--color-purple-950-5);
  /* Utility Fuchsia */
  --utility-fuchsia-50: var(--color-fuchsia-50);
  --utility-fuchsia-100: var(--color-fuchsia-100);
  --utility-fuchsia-200: var(--color-fuchsia-200);
  --utility-fuchsia-300: var(--color-fuchsia-300);
  --utility-fuchsia-400: var(--color-fuchsia-400);
  --utility-fuchsia-500: var(--color-fuchsia-500);
  --utility-fuchsia-600: var(--color-fuchsia-600);
  --utility-fuchsia-700: var(--color-fuchsia-700);
  --utility-fuchsia-800: var(--color-fuchsia-800);
  --utility-fuchsia-900: var(--color-fuchsia-900);
  --utility-fuchsia-950: var(--color-fuchsia-950);
  --alpha-fuchsia-50-100: var(--color-fuchsia-50-100);
  --alpha-fuchsia-50-90: var(--color-fuchsia-50-90);
  --alpha-fuchsia-50-80: var(--color-fuchsia-50-80);
  --alpha-fuchsia-50-70: var(--color-fuchsia-50-70);
  --alpha-fuchsia-50-60: var(--color-fuchsia-50-60);
  --alpha-fuchsia-50-50: var(--color-fuchsia-50-50);
  --alpha-fuchsia-50-40: var(--color-fuchsia-50-40);
  --alpha-fuchsia-50-30: var(--color-fuchsia-50-30);
  --alpha-fuchsia-50-20: var(--color-fuchsia-50-20);
  --alpha-fuchsia-50-10: var(--color-fuchsia-50-10);
  --alpha-fuchsia-50-5: var(--color-fuchsia-50-5);
  --alpha-fuchsia-100-100: var(--color-fuchsia-100-100);
  --alpha-fuchsia-100-90: var(--color-fuchsia-100-90);
  --alpha-fuchsia-100-80: var(--color-fuchsia-100-80);
  --alpha-fuchsia-100-70: var(--color-fuchsia-100-70);
  --alpha-fuchsia-100-60: var(--color-fuchsia-100-60);
  --alpha-fuchsia-100-50: var(--color-fuchsia-100-50);
  --alpha-fuchsia-100-40: var(--color-fuchsia-100-40);
  --alpha-fuchsia-100-30: var(--color-fuchsia-100-30);
  --alpha-fuchsia-100-20: var(--color-fuchsia-100-20);
  --alpha-fuchsia-100-10: var(--color-fuchsia-100-10);
  --alpha-fuchsia-100-5: var(--color-fuchsia-100-5);
  --alpha-fuchsia-200-100: var(--color-fuchsia-200-100);
  --alpha-fuchsia-200-90: var(--color-fuchsia-200-90);
  --alpha-fuchsia-200-80: var(--color-fuchsia-200-80);
  --alpha-fuchsia-200-70: var(--color-fuchsia-200-70);
  --alpha-fuchsia-200-60: var(--color-fuchsia-200-60);
  --alpha-fuchsia-200-50: var(--color-fuchsia-200-50);
  --alpha-fuchsia-200-40: var(--color-fuchsia-200-40);
  --alpha-fuchsia-200-30: var(--color-fuchsia-200-30);
  --alpha-fuchsia-200-20: var(--color-fuchsia-200-20);
  --alpha-fuchsia-200-10: var(--color-fuchsia-200-10);
  --alpha-fuchsia-200-5: var(--color-fuchsia-200-5);
  --alpha-fuchsia-300-100: var(--color-fuchsia-300-100);
  --alpha-fuchsia-300-90: var(--color-fuchsia-300-90);
  --alpha-fuchsia-300-80: var(--color-fuchsia-300-80);
  --alpha-fuchsia-300-70: var(--color-fuchsia-300-70);
  --alpha-fuchsia-300-60: var(--color-fuchsia-300-60);
  --alpha-fuchsia-300-50: var(--color-fuchsia-300-50);
  --alpha-fuchsia-300-40: var(--color-fuchsia-300-40);
  --alpha-fuchsia-300-30: var(--color-fuchsia-300-30);
  --alpha-fuchsia-300-20: var(--color-fuchsia-300-20);
  --alpha-fuchsia-300-10: var(--color-fuchsia-300-10);
  --alpha-fuchsia-300-5: var(--color-fuchsia-300-5);
  --alpha-fuchsia-400-100: var(--color-fuchsia-400-100);
  --alpha-fuchsia-400-90: var(--color-fuchsia-400-90);
  --alpha-fuchsia-400-80: var(--color-fuchsia-400-80);
  --alpha-fuchsia-400-70: var(--color-fuchsia-400-70);
  --alpha-fuchsia-400-60: var(--color-fuchsia-400-60);
  --alpha-fuchsia-400-50: var(--color-fuchsia-400-50);
  --alpha-fuchsia-400-40: var(--color-fuchsia-400-40);
  --alpha-fuchsia-400-30: var(--color-fuchsia-400-30);
  --alpha-fuchsia-400-20: var(--color-fuchsia-400-20);
  --alpha-fuchsia-400-10: var(--color-fuchsia-400-10);
  --alpha-fuchsia-400-5: var(--color-fuchsia-400-5);
  --alpha-fuchsia-500-100: var(--color-fuchsia-500-100);
  --alpha-fuchsia-500-90: var(--color-fuchsia-500-90);
  --alpha-fuchsia-500-80: var(--color-fuchsia-500-80);
  --alpha-fuchsia-500-70: var(--color-fuchsia-500-70);
  --alpha-fuchsia-500-60: var(--color-fuchsia-500-60);
  --alpha-fuchsia-500-50: var(--color-fuchsia-500-50);
  --alpha-fuchsia-500-40: var(--color-fuchsia-500-40);
  --alpha-fuchsia-500-30: var(--color-fuchsia-500-30);
  --alpha-fuchsia-500-20: var(--color-fuchsia-500-20);
  --alpha-fuchsia-500-10: var(--color-fuchsia-500-10);
  --alpha-fuchsia-500-5: var(--color-fuchsia-500-5);
  --alpha-fuchsia-600-100: var(--color-fuchsia-600-100);
  --alpha-fuchsia-600-90: var(--color-fuchsia-600-90);
  --alpha-fuchsia-600-80: var(--color-fuchsia-600-80);
  --alpha-fuchsia-600-70: var(--color-fuchsia-600-70);
  --alpha-fuchsia-600-60: var(--color-fuchsia-600-60);
  --alpha-fuchsia-600-50: var(--color-fuchsia-600-50);
  --alpha-fuchsia-600-40: var(--color-fuchsia-600-40);
  --alpha-fuchsia-600-30: var(--color-fuchsia-600-30);
  --alpha-fuchsia-600-20: var(--color-fuchsia-600-20);
  --alpha-fuchsia-600-10: var(--color-fuchsia-600-10);
  --alpha-fuchsia-600-5: var(--color-fuchsia-600-5);
  --alpha-fuchsia-700-100: var(--color-fuchsia-700-100);
  --alpha-fuchsia-700-90: var(--color-fuchsia-700-90);
  --alpha-fuchsia-700-80: var(--color-fuchsia-700-80);
  --alpha-fuchsia-700-70: var(--color-fuchsia-700-70);
  --alpha-fuchsia-700-60: var(--color-fuchsia-700-60);
  --alpha-fuchsia-700-50: var(--color-fuchsia-700-50);
  --alpha-fuchsia-700-40: var(--color-fuchsia-700-40);
  --alpha-fuchsia-700-30: var(--color-fuchsia-700-30);
  --alpha-fuchsia-700-20: var(--color-fuchsia-700-20);
  --alpha-fuchsia-700-10: var(--color-fuchsia-700-10);
  --alpha-fuchsia-700-5: var(--color-fuchsia-700-5);
  --alpha-fuchsia-800-100: var(--color-fuchsia-800-100);
  --alpha-fuchsia-800-90: var(--color-fuchsia-800-90);
  --alpha-fuchsia-800-80: var(--color-fuchsia-800-80);
  --alpha-fuchsia-800-70: var(--color-fuchsia-800-70);
  --alpha-fuchsia-800-60: var(--color-fuchsia-800-60);
  --alpha-fuchsia-800-50: var(--color-fuchsia-800-50);
  --alpha-fuchsia-800-40: var(--color-fuchsia-800-40);
  --alpha-fuchsia-800-30: var(--color-fuchsia-800-30);
  --alpha-fuchsia-800-20: var(--color-fuchsia-800-20);
  --alpha-fuchsia-800-10: var(--color-fuchsia-800-10);
  --alpha-fuchsia-800-5: var(--color-fuchsia-800-5);
  --alpha-fuchsia-900-100: var(--color-fuchsia-900-100);
  --alpha-fuchsia-900-90: var(--color-fuchsia-900-90);
  --alpha-fuchsia-900-80: var(--color-fuchsia-900-80);
  --alpha-fuchsia-900-70: var(--color-fuchsia-900-70);
  --alpha-fuchsia-900-60: var(--color-fuchsia-900-60);
  --alpha-fuchsia-900-50: var(--color-fuchsia-900-50);
  --alpha-fuchsia-900-40: var(--color-fuchsia-900-40);
  --alpha-fuchsia-900-30: var(--color-fuchsia-900-30);
  --alpha-fuchsia-900-20: var(--color-fuchsia-900-20);
  --alpha-fuchsia-900-10: var(--color-fuchsia-900-10);
  --alpha-fuchsia-900-5: var(--color-fuchsia-900-5);
  --alpha-fuchsia-950-100: var(--color-fuchsia-950-100);
  --alpha-fuchsia-950-90: var(--color-fuchsia-950-90);
  --alpha-fuchsia-950-80: var(--color-fuchsia-950-80);
  --alpha-fuchsia-950-70: var(--color-fuchsia-950-70);
  --alpha-fuchsia-950-60: var(--color-fuchsia-950-60);
  --alpha-fuchsia-950-50: var(--color-fuchsia-950-50);
  --alpha-fuchsia-950-40: var(--color-fuchsia-950-40);
  --alpha-fuchsia-950-30: var(--color-fuchsia-950-30);
  --alpha-fuchsia-950-20: var(--color-fuchsia-950-20);
  --alpha-fuchsia-950-10: var(--color-fuchsia-950-10);
  --alpha-fuchsia-950-5: var(--color-fuchsia-950-5);
  /* Utility Pink */
  --utility-pink-50: var(--color-pink-50);
  --utility-pink-100: var(--color-pink-100);
  --utility-pink-200: var(--color-pink-200);
  --utility-pink-300: var(--color-pink-300);
  --utility-pink-400: var(--color-pink-400);
  --utility-pink-500: var(--color-pink-500);
  --utility-pink-600: var(--color-pink-600);
  --utility-pink-700: var(--color-pink-700);
  --utility-pink-800: var(--color-pink-800);
  --utility-pink-900: var(--color-pink-900);
  --utility-pink-950: var(--color-pink-950);
  --alpha-pink-50-100: var(--color-pink-50-100);
  --alpha-pink-50-90: var(--color-pink-50-90);
  --alpha-pink-50-80: var(--color-pink-50-80);
  --alpha-pink-50-70: var(--color-pink-50-70);
  --alpha-pink-50-60: var(--color-pink-50-60);
  --alpha-pink-50-50: var(--color-pink-50-50);
  --alpha-pink-50-40: var(--color-pink-50-40);
  --alpha-pink-50-30: var(--color-pink-50-30);
  --alpha-pink-50-20: var(--color-pink-50-20);
  --alpha-pink-50-10: var(--color-pink-50-10);
  --alpha-pink-50-5: var(--color-pink-50-5);
  --alpha-pink-100-100: var(--color-pink-100-100);
  --alpha-pink-100-90: var(--color-pink-100-90);
  --alpha-pink-100-80: var(--color-pink-100-80);
  --alpha-pink-100-70: var(--color-pink-100-70);
  --alpha-pink-100-60: var(--color-pink-100-60);
  --alpha-pink-100-50: var(--color-pink-100-50);
  --alpha-pink-100-40: var(--color-pink-100-40);
  --alpha-pink-100-30: var(--color-pink-100-30);
  --alpha-pink-100-20: var(--color-pink-100-20);
  --alpha-pink-100-10: var(--color-pink-100-10);
  --alpha-pink-100-5: var(--color-pink-100-5);
  --alpha-pink-200-100: var(--color-pink-200-100);
  --alpha-pink-200-90: var(--color-pink-200-90);
  --alpha-pink-200-80: var(--color-pink-200-80);
  --alpha-pink-200-70: var(--color-pink-200-70);
  --alpha-pink-200-60: var(--color-pink-200-60);
  --alpha-pink-200-50: var(--color-pink-200-50);
  --alpha-pink-200-40: var(--color-pink-200-40);
  --alpha-pink-200-30: var(--color-pink-200-30);
  --alpha-pink-200-20: var(--color-pink-200-20);
  --alpha-pink-200-10: var(--color-pink-200-10);
  --alpha-pink-200-5: var(--color-pink-200-5);
  --alpha-pink-300-100: var(--color-pink-300-100);
  --alpha-pink-300-90: var(--color-pink-300-90);
  --alpha-pink-300-80: var(--color-pink-300-80);
  --alpha-pink-300-70: var(--color-pink-300-70);
  --alpha-pink-300-60: var(--color-pink-300-60);
  --alpha-pink-300-50: var(--color-pink-300-50);
  --alpha-pink-300-40: var(--color-pink-300-40);
  --alpha-pink-300-30: var(--color-pink-300-30);
  --alpha-pink-300-20: var(--color-pink-300-20);
  --alpha-pink-300-10: var(--color-pink-300-10);
  --alpha-pink-300-5: var(--color-pink-300-5);
  --alpha-pink-400-100: var(--color-pink-400-100);
  --alpha-pink-400-90: var(--color-pink-400-90);
  --alpha-pink-400-80: var(--color-pink-400-80);
  --alpha-pink-400-70: var(--color-pink-400-70);
  --alpha-pink-400-60: var(--color-pink-400-60);
  --alpha-pink-400-50: var(--color-pink-400-50);
  --alpha-pink-400-40: var(--color-pink-400-40);
  --alpha-pink-400-30: var(--color-pink-400-30);
  --alpha-pink-400-20: var(--color-pink-400-20);
  --alpha-pink-400-10: var(--color-pink-400-10);
  --alpha-pink-400-5: var(--color-pink-400-5);
  --alpha-pink-500-100: var(--color-pink-500-100);
  --alpha-pink-500-90: var(--color-pink-500-90);
  --alpha-pink-500-80: var(--color-pink-500-80);
  --alpha-pink-500-70: var(--color-pink-500-70);
  --alpha-pink-500-60: var(--color-pink-500-60);
  --alpha-pink-500-50: var(--color-pink-500-50);
  --alpha-pink-500-40: var(--color-pink-500-40);
  --alpha-pink-500-30: var(--color-pink-500-30);
  --alpha-pink-500-20: var(--color-pink-500-20);
  --alpha-pink-500-10: var(--color-pink-500-10);
  --alpha-pink-500-5: var(--color-pink-500-5);
  --alpha-pink-600-100: var(--color-pink-600-100);
  --alpha-pink-600-90: var(--color-pink-600-90);
  --alpha-pink-600-80: var(--color-pink-600-80);
  --alpha-pink-600-70: var(--color-pink-600-70);
  --alpha-pink-600-60: var(--color-pink-600-60);
  --alpha-pink-600-50: var(--color-pink-600-50);
  --alpha-pink-600-40: var(--color-pink-600-40);
  --alpha-pink-600-30: var(--color-pink-600-30);
  --alpha-pink-600-20: var(--color-pink-600-20);
  --alpha-pink-600-10: var(--color-pink-600-10);
  --alpha-pink-600-5: var(--color-pink-600-5);
  --alpha-pink-700-100: var(--color-pink-700-100);
  --alpha-pink-700-90: var(--color-pink-700-90);
  --alpha-pink-700-80: var(--color-pink-700-80);
  --alpha-pink-700-70: var(--color-pink-700-70);
  --alpha-pink-700-60: var(--color-pink-700-60);
  --alpha-pink-700-50: var(--color-pink-700-50);
  --alpha-pink-700-40: var(--color-pink-700-40);
  --alpha-pink-700-30: var(--color-pink-700-30);
  --alpha-pink-700-20: var(--color-pink-700-20);
  --alpha-pink-700-10: var(--color-pink-700-10);
  --alpha-pink-700-5: var(--color-pink-700-5);
  --alpha-pink-800-100: var(--color-pink-800-100);
  --alpha-pink-800-90: var(--color-pink-800-90);
  --alpha-pink-800-80: var(--color-pink-800-80);
  --alpha-pink-800-70: var(--color-pink-800-70);
  --alpha-pink-800-60: var(--color-pink-800-60);
  --alpha-pink-800-50: var(--color-pink-800-50);
  --alpha-pink-800-40: var(--color-pink-800-40);
  --alpha-pink-800-30: var(--color-pink-800-30);
  --alpha-pink-800-20: var(--color-pink-800-20);
  --alpha-pink-800-10: var(--color-pink-800-10);
  --alpha-pink-800-5: var(--color-pink-800-5);
  --alpha-pink-900-100: var(--color-pink-900-100);
  --alpha-pink-900-90: var(--color-pink-900-90);
  --alpha-pink-900-80: var(--color-pink-900-80);
  --alpha-pink-900-70: var(--color-pink-900-70);
  --alpha-pink-900-60: var(--color-pink-900-60);
  --alpha-pink-900-50: var(--color-pink-900-50);
  --alpha-pink-900-40: var(--color-pink-900-40);
  --alpha-pink-900-30: var(--color-pink-900-30);
  --alpha-pink-900-20: var(--color-pink-900-20);
  --alpha-pink-900-10: var(--color-pink-900-10);
  --alpha-pink-900-5: var(--color-pink-900-5);
  --alpha-pink-950-100: var(--color-pink-950-100);
  --alpha-pink-950-90: var(--color-pink-950-90);
  --alpha-pink-950-80: var(--color-pink-950-80);
  --alpha-pink-950-70: var(--color-pink-950-70);
  --alpha-pink-950-60: var(--color-pink-950-60);
  --alpha-pink-950-50: var(--color-pink-950-50);
  --alpha-pink-950-40: var(--color-pink-950-40);
  --alpha-pink-950-30: var(--color-pink-950-30);
  --alpha-pink-950-20: var(--color-pink-950-20);
  --alpha-pink-950-10: var(--color-pink-950-10);
  --alpha-pink-950-5: var(--color-pink-950-5);
  /* Utility Rose */
  --utility-rose-50: var(--color-rose-50);
  --utility-rose-100: var(--color-rose-100);
  --utility-rose-200: var(--color-rose-200);
  --utility-rose-300: var(--color-rose-300);
  --utility-rose-400: var(--color-rose-400);
  --utility-rose-500: var(--color-rose-500);
  --utility-rose-600: var(--color-rose-600);
  --utility-rose-700: var(--color-rose-700);
  --utility-rose-800: var(--color-rose-800);
  --utility-rose-900: var(--color-rose-900);
  --utility-rose-950: var(--color-rose-950);
  --alpha-rose-50-100: var(--color-rose-50-100);
  --alpha-rose-50-90: var(--color-rose-50-90);
  --alpha-rose-50-80: var(--color-rose-50-80);
  --alpha-rose-50-70: var(--color-rose-50-70);
  --alpha-rose-50-60: var(--color-rose-50-60);
  --alpha-rose-50-50: var(--color-rose-50-50);
  --alpha-rose-50-40: var(--color-rose-50-40);
  --alpha-rose-50-30: var(--color-rose-50-30);
  --alpha-rose-50-20: var(--color-rose-50-20);
  --alpha-rose-50-10: var(--color-rose-50-10);
  --alpha-rose-50-5: var(--color-rose-50-5);
  --alpha-rose-100-100: var(--color-rose-100-100);
  --alpha-rose-100-90: var(--color-rose-100-90);
  --alpha-rose-100-80: var(--color-rose-100-80);
  --alpha-rose-100-70: var(--color-rose-100-70);
  --alpha-rose-100-60: var(--color-rose-100-60);
  --alpha-rose-100-50: var(--color-rose-100-50);
  --alpha-rose-100-40: var(--color-rose-100-40);
  --alpha-rose-100-30: var(--color-rose-100-30);
  --alpha-rose-100-20: var(--color-rose-100-20);
  --alpha-rose-100-10: var(--color-rose-100-10);
  --alpha-rose-100-5: var(--color-rose-100-5);
  --alpha-rose-200-100: var(--color-rose-200-100);
  --alpha-rose-200-90: var(--color-rose-200-90);
  --alpha-rose-200-80: var(--color-rose-200-80);
  --alpha-rose-200-70: var(--color-rose-200-70);
  --alpha-rose-200-60: var(--color-rose-200-60);
  --alpha-rose-200-50: var(--color-rose-200-50);
  --alpha-rose-200-40: var(--color-rose-200-40);
  --alpha-rose-200-30: var(--color-rose-200-30);
  --alpha-rose-200-20: var(--color-rose-200-20);
  --alpha-rose-200-10: var(--color-rose-200-10);
  --alpha-rose-200-5: var(--color-rose-200-5);
  --alpha-rose-300-100: var(--color-rose-300-100);
  --alpha-rose-300-90: var(--color-rose-300-90);
  --alpha-rose-300-80: var(--color-rose-300-80);
  --alpha-rose-300-70: var(--color-rose-300-70);
  --alpha-rose-300-60: var(--color-rose-300-60);
  --alpha-rose-300-50: var(--color-rose-300-50);
  --alpha-rose-300-40: var(--color-rose-300-40);
  --alpha-rose-300-30: var(--color-rose-300-30);
  --alpha-rose-300-20: var(--color-rose-300-20);
  --alpha-rose-300-10: var(--color-rose-300-10);
  --alpha-rose-300-5: var(--color-rose-300-5);
  --alpha-rose-400-100: var(--color-rose-400-100);
  --alpha-rose-400-90: var(--color-rose-400-90);
  --alpha-rose-400-80: var(--color-rose-400-80);
  --alpha-rose-400-70: var(--color-rose-400-70);
  --alpha-rose-400-60: var(--color-rose-400-60);
  --alpha-rose-400-50: var(--color-rose-400-50);
  --alpha-rose-400-40: var(--color-rose-400-40);
  --alpha-rose-400-30: var(--color-rose-400-30);
  --alpha-rose-400-20: var(--color-rose-400-20);
  --alpha-rose-400-10: var(--color-rose-400-10);
  --alpha-rose-400-5: var(--color-rose-400-5);
  --alpha-rose-500-100: var(--color-rose-500-100);
  --alpha-rose-500-90: var(--color-rose-500-90);
  --alpha-rose-500-80: var(--color-rose-500-80);
  --alpha-rose-500-70: var(--color-rose-500-70);
  --alpha-rose-500-60: var(--color-rose-500-60);
  --alpha-rose-500-50: var(--color-rose-500-50);
  --alpha-rose-500-40: var(--color-rose-500-40);
  --alpha-rose-500-30: var(--color-rose-500-30);
  --alpha-rose-500-20: var(--color-rose-500-20);
  --alpha-rose-500-10: var(--color-rose-500-10);
  --alpha-rose-500-5: var(--color-rose-500-5);
  --alpha-rose-600-100: var(--color-rose-600-100);
  --alpha-rose-600-90: var(--color-rose-600-90);
  --alpha-rose-600-80: var(--color-rose-600-80);
  --alpha-rose-600-70: var(--color-rose-600-70);
  --alpha-rose-600-60: var(--color-rose-600-60);
  --alpha-rose-600-50: var(--color-rose-600-50);
  --alpha-rose-600-40: var(--color-rose-600-40);
  --alpha-rose-600-30: var(--color-rose-600-30);
  --alpha-rose-600-20: var(--color-rose-600-20);
  --alpha-rose-600-10: var(--color-rose-600-10);
  --alpha-rose-600-5: var(--color-rose-600-5);
  --alpha-rose-700-100: var(--color-rose-700-100);
  --alpha-rose-700-90: var(--color-rose-700-90);
  --alpha-rose-700-80: var(--color-rose-700-80);
  --alpha-rose-700-70: var(--color-rose-700-70);
  --alpha-rose-700-60: var(--color-rose-700-60);
  --alpha-rose-700-50: var(--color-rose-700-50);
  --alpha-rose-700-40: var(--color-rose-700-40);
  --alpha-rose-700-30: var(--color-rose-700-30);
  --alpha-rose-700-20: var(--color-rose-700-20);
  --alpha-rose-700-10: var(--color-rose-700-10);
  --alpha-rose-700-5: var(--color-rose-700-5);
  --alpha-rose-800-100: var(--color-rose-800-100);
  --alpha-rose-800-90: var(--color-rose-800-90);
  --alpha-rose-800-80: var(--color-rose-800-80);
  --alpha-rose-800-70: var(--color-rose-800-70);
  --alpha-rose-800-60: var(--color-rose-800-60);
  --alpha-rose-800-50: var(--color-rose-800-50);
  --alpha-rose-800-40: var(--color-rose-800-40);
  --alpha-rose-800-30: var(--color-rose-800-30);
  --alpha-rose-800-20: var(--color-rose-800-20);
  --alpha-rose-800-10: var(--color-rose-800-10);
  --alpha-rose-800-5: var(--color-rose-800-5);
  --alpha-rose-900-100: var(--color-rose-900-100);
  --alpha-rose-900-90: var(--color-rose-900-90);
  --alpha-rose-900-80: var(--color-rose-900-80);
  --alpha-rose-900-70: var(--color-rose-900-70);
  --alpha-rose-900-60: var(--color-rose-900-60);
  --alpha-rose-900-50: var(--color-rose-900-50);
  --alpha-rose-900-40: var(--color-rose-900-40);
  --alpha-rose-900-30: var(--color-rose-900-30);
  --alpha-rose-900-20: var(--color-rose-900-20);
  --alpha-rose-900-10: var(--color-rose-900-10);
  --alpha-rose-900-5: var(--color-rose-900-5);
  --alpha-rose-950-100: var(--color-rose-950-100);
  --alpha-rose-950-90: var(--color-rose-950-90);
  --alpha-rose-950-80: var(--color-rose-950-80);
  --alpha-rose-950-70: var(--color-rose-950-70);
  --alpha-rose-950-60: var(--color-rose-950-60);
  --alpha-rose-950-50: var(--color-rose-950-50);
  --alpha-rose-950-40: var(--color-rose-950-40);
  --alpha-rose-950-30: var(--color-rose-950-30);
  --alpha-rose-950-20: var(--color-rose-950-20);
  --alpha-rose-950-10: var(--color-rose-950-10);
  --alpha-rose-950-5: var(--color-rose-950-5);
  /* Utility Slate */
  --utility-slate-50: var(--color-slate-50);
  --utility-slate-100: var(--color-slate-100);
  --utility-slate-200: var(--color-slate-200);
  --utility-slate-300: var(--color-slate-300);
  --utility-slate-400: var(--color-slate-400);
  --utility-slate-500: var(--color-slate-500);
  --utility-slate-600: var(--color-slate-600);
  --utility-slate-700: var(--color-slate-700);
  --utility-slate-800: var(--color-slate-800);
  --utility-slate-900: var(--color-slate-900);
  --utility-slate-950: var(--color-slate-950);
  --alpha-slate-50-100: var(--color-slate-50-100);
  --alpha-slate-50-90: var(--color-slate-50-90);
  --alpha-slate-50-80: var(--color-slate-50-80);
  --alpha-slate-50-70: var(--color-slate-50-70);
  --alpha-slate-50-60: var(--color-slate-50-60);
  --alpha-slate-50-50: var(--color-slate-50-50);
  --alpha-slate-50-40: var(--color-slate-50-40);
  --alpha-slate-50-30: var(--color-slate-50-30);
  --alpha-slate-50-20: var(--color-slate-50-20);
  --alpha-slate-50-10: var(--color-slate-50-10);
  --alpha-slate-50-5: var(--color-slate-50-5);
  --alpha-slate-100-100: var(--color-slate-100-100);
  --alpha-slate-100-90: var(--color-slate-100-90);
  --alpha-slate-100-80: var(--color-slate-100-80);
  --alpha-slate-100-70: var(--color-slate-100-70);
  --alpha-slate-100-60: var(--color-slate-100-60);
  --alpha-slate-100-50: var(--color-slate-100-50);
  --alpha-slate-100-40: var(--color-slate-100-40);
  --alpha-slate-100-30: var(--color-slate-100-30);
  --alpha-slate-100-20: var(--color-slate-100-20);
  --alpha-slate-100-10: var(--color-slate-100-10);
  --alpha-slate-100-5: var(--color-slate-100-5);
  --alpha-slate-200-100: var(--color-slate-200-100);
  --alpha-slate-200-90: var(--color-slate-200-90);
  --alpha-slate-200-80: var(--color-slate-200-80);
  --alpha-slate-200-70: var(--color-slate-200-70);
  --alpha-slate-200-60: var(--color-slate-200-60);
  --alpha-slate-200-50: var(--color-slate-200-50);
  --alpha-slate-200-40: var(--color-slate-200-40);
  --alpha-slate-200-30: var(--color-slate-200-30);
  --alpha-slate-200-20: var(--color-slate-200-20);
  --alpha-slate-200-10: var(--color-slate-200-10);
  --alpha-slate-200-5: var(--color-slate-200-5);
  --alpha-slate-300-100: var(--color-slate-300-100);
  --alpha-slate-300-90: var(--color-slate-300-90);
  --alpha-slate-300-80: var(--color-slate-300-80);
  --alpha-slate-300-70: var(--color-slate-300-70);
  --alpha-slate-300-60: var(--color-slate-300-60);
  --alpha-slate-300-50: var(--color-slate-300-50);
  --alpha-slate-300-40: var(--color-slate-300-40);
  --alpha-slate-300-30: var(--color-slate-300-30);
  --alpha-slate-300-20: var(--color-slate-300-20);
  --alpha-slate-300-10: var(--color-slate-300-10);
  --alpha-slate-300-5: var(--color-slate-300-5);
  --alpha-slate-400-100: var(--color-slate-400-100);
  --alpha-slate-400-90: var(--color-slate-400-90);
  --alpha-slate-400-80: var(--color-slate-400-80);
  --alpha-slate-400-70: var(--color-slate-400-70);
  --alpha-slate-400-60: var(--color-slate-400-60);
  --alpha-slate-400-50: var(--color-slate-400-50);
  --alpha-slate-400-40: var(--color-slate-400-40);
  --alpha-slate-400-30: var(--color-slate-400-30);
  --alpha-slate-400-20: var(--color-slate-400-20);
  --alpha-slate-400-10: var(--color-slate-400-10);
  --alpha-slate-400-5: var(--color-slate-400-5);
  --alpha-slate-500-100: var(--color-slate-500-100);
  --alpha-slate-500-90: var(--color-slate-500-90);
  --alpha-slate-500-80: var(--color-slate-500-80);
  --alpha-slate-500-70: var(--color-slate-500-70);
  --alpha-slate-500-60: var(--color-slate-500-60);
  --alpha-slate-500-50: var(--color-slate-500-50);
  --alpha-slate-500-40: var(--color-slate-500-40);
  --alpha-slate-500-30: var(--color-slate-500-30);
  --alpha-slate-500-20: var(--color-slate-500-20);
  --alpha-slate-500-10: var(--color-slate-500-10);
  --alpha-slate-500-5: var(--color-slate-500-5);
  --alpha-slate-600-100: var(--color-slate-600-100);
  --alpha-slate-600-90: var(--color-slate-600-90);
  --alpha-slate-600-80: var(--color-slate-600-80);
  --alpha-slate-600-70: var(--color-slate-600-70);
  --alpha-slate-600-60: var(--color-slate-600-60);
  --alpha-slate-600-50: var(--color-slate-600-50);
  --alpha-slate-600-40: var(--color-slate-600-40);
  --alpha-slate-600-30: var(--color-slate-600-30);
  --alpha-slate-600-20: var(--color-slate-600-20);
  --alpha-slate-600-10: var(--color-slate-600-10);
  --alpha-slate-600-5: var(--color-slate-600-5);
  --alpha-slate-700-100: var(--color-slate-700-100);
  --alpha-slate-700-90: var(--color-slate-700-90);
  --alpha-slate-700-80: var(--color-slate-700-80);
  --alpha-slate-700-70: var(--color-slate-700-70);
  --alpha-slate-700-60: var(--color-slate-700-60);
  --alpha-slate-700-50: var(--color-slate-700-50);
  --alpha-slate-700-40: var(--color-slate-700-40);
  --alpha-slate-700-30: var(--color-slate-700-30);
  --alpha-slate-700-20: var(--color-slate-700-20);
  --alpha-slate-700-10: var(--color-slate-700-10);
  --alpha-slate-700-5: var(--color-slate-700-5);
  --alpha-slate-800-100: var(--color-slate-800-100);
  --alpha-slate-800-90: var(--color-slate-800-90);
  --alpha-slate-800-80: var(--color-slate-800-80);
  --alpha-slate-800-70: var(--color-slate-800-70);
  --alpha-slate-800-60: var(--color-slate-800-60);
  --alpha-slate-800-50: var(--color-slate-800-50);
  --alpha-slate-800-40: var(--color-slate-800-40);
  --alpha-slate-800-30: var(--color-slate-800-30);
  --alpha-slate-800-20: var(--color-slate-800-20);
  --alpha-slate-800-10: var(--color-slate-800-10);
  --alpha-slate-800-5: var(--color-slate-800-5);
  --alpha-slate-900-100: var(--color-slate-900-100);
  --alpha-slate-900-90: var(--color-slate-900-90);
  --alpha-slate-900-80: var(--color-slate-900-80);
  --alpha-slate-900-70: var(--color-slate-900-70);
  --alpha-slate-900-60: var(--color-slate-900-60);
  --alpha-slate-900-50: var(--color-slate-900-50);
  --alpha-slate-900-40: var(--color-slate-900-40);
  --alpha-slate-900-30: var(--color-slate-900-30);
  --alpha-slate-900-20: var(--color-slate-900-20);
  --alpha-slate-900-10: var(--color-slate-900-10);
  --alpha-slate-900-5: var(--color-slate-900-5);
  --alpha-slate-950-100: var(--color-slate-950-100);
  --alpha-slate-950-90: var(--color-slate-950-90);
  --alpha-slate-950-80: var(--color-slate-950-80);
  --alpha-slate-950-70: var(--color-slate-950-70);
  --alpha-slate-950-60: var(--color-slate-950-60);
  --alpha-slate-950-50: var(--color-slate-950-50);
  --alpha-slate-950-40: var(--color-slate-950-40);
  --alpha-slate-950-30: var(--color-slate-950-30);
  --alpha-slate-950-20: var(--color-slate-950-20);
  --alpha-slate-950-10: var(--color-slate-950-10);
  --alpha-slate-950-5: var(--color-slate-950-5);
  /* Utility Gray */
  --utility-gray-50: var(--color-gray-50);
  --utility-gray-100: var(--color-gray-100);
  --utility-gray-200: var(--color-gray-200);
  --utility-gray-300: var(--color-gray-300);
  --utility-gray-400: var(--color-gray-400);
  --utility-gray-500: var(--color-gray-500);
  --utility-gray-600: var(--color-gray-600);
  --utility-gray-700: var(--color-gray-700);
  --utility-gray-800: var(--color-gray-800);
  --utility-gray-900: var(--color-gray-900);
  --utility-gray-950: var(--color-gray-950);
  --alpha-gray-50-100: var(--color-gray-50-100);
  --alpha-gray-50-90: var(--color-gray-50-90);
  --alpha-gray-50-80: var(--color-gray-50-80);
  --alpha-gray-50-70: var(--color-gray-50-70);
  --alpha-gray-50-60: var(--color-gray-50-60);
  --alpha-gray-50-50: var(--color-gray-50-50);
  --alpha-gray-50-40: var(--color-gray-50-40);
  --alpha-gray-50-30: var(--color-gray-50-30);
  --alpha-gray-50-20: var(--color-gray-50-20);
  --alpha-gray-50-10: var(--color-gray-50-10);
  --alpha-gray-50-5: var(--color-gray-50-5);
  --alpha-gray-100-100: var(--color-gray-100-100);
  --alpha-gray-100-90: var(--color-gray-100-90);
  --alpha-gray-100-80: var(--color-gray-100-80);
  --alpha-gray-100-70: var(--color-gray-100-70);
  --alpha-gray-100-60: var(--color-gray-100-60);
  --alpha-gray-100-50: var(--color-gray-100-50);
  --alpha-gray-100-40: var(--color-gray-100-40);
  --alpha-gray-100-30: var(--color-gray-100-30);
  --alpha-gray-100-20: var(--color-gray-100-20);
  --alpha-gray-100-10: var(--color-gray-100-10);
  --alpha-gray-100-5: var(--color-gray-100-5);
  --alpha-gray-200-100: var(--color-gray-200-100);
  --alpha-gray-200-90: var(--color-gray-200-90);
  --alpha-gray-200-80: var(--color-gray-200-80);
  --alpha-gray-200-70: var(--color-gray-200-70);
  --alpha-gray-200-60: var(--color-gray-200-60);
  --alpha-gray-200-50: var(--color-gray-200-50);
  --alpha-gray-200-40: var(--color-gray-200-40);
  --alpha-gray-200-30: var(--color-gray-200-30);
  --alpha-gray-200-20: var(--color-gray-200-20);
  --alpha-gray-200-10: var(--color-gray-200-10);
  --alpha-gray-200-5: var(--color-gray-200-5);
  --alpha-gray-300-100: var(--color-gray-300-100);
  --alpha-gray-300-90: var(--color-gray-300-90);
  --alpha-gray-300-80: var(--color-gray-300-80);
  --alpha-gray-300-70: var(--color-gray-300-70);
  --alpha-gray-300-60: var(--color-gray-300-60);
  --alpha-gray-300-50: var(--color-gray-300-50);
  --alpha-gray-300-40: var(--color-gray-300-40);
  --alpha-gray-300-30: var(--color-gray-300-30);
  --alpha-gray-300-20: var(--color-gray-300-20);
  --alpha-gray-300-10: var(--color-gray-300-10);
  --alpha-gray-300-5: var(--color-gray-300-5);
  --alpha-gray-400-100: var(--color-gray-400-100);
  --alpha-gray-400-90: var(--color-gray-400-90);
  --alpha-gray-400-80: var(--color-gray-400-80);
  --alpha-gray-400-70: var(--color-gray-400-70);
  --alpha-gray-400-60: var(--color-gray-400-60);
  --alpha-gray-400-50: var(--color-gray-400-50);
  --alpha-gray-400-40: var(--color-gray-400-40);
  --alpha-gray-400-30: var(--color-gray-400-30);
  --alpha-gray-400-20: var(--color-gray-400-20);
  --alpha-gray-400-10: var(--color-gray-400-10);
  --alpha-gray-400-5: var(--color-gray-400-5);
  --alpha-gray-500-100: var(--color-gray-500-100);
  --alpha-gray-500-90: var(--color-gray-500-90);
  --alpha-gray-500-80: var(--color-gray-500-80);
  --alpha-gray-500-70: var(--color-gray-500-70);
  --alpha-gray-500-60: var(--color-gray-500-60);
  --alpha-gray-500-50: var(--color-gray-500-50);
  --alpha-gray-500-40: var(--color-gray-500-40);
  --alpha-gray-500-30: var(--color-gray-500-30);
  --alpha-gray-500-20: var(--color-gray-500-20);
  --alpha-gray-500-10: var(--color-gray-500-10);
  --alpha-gray-500-5: var(--color-gray-500-5);
  --alpha-gray-600-100: var(--color-gray-600-100);
  --alpha-gray-600-90: var(--color-gray-600-90);
  --alpha-gray-600-80: var(--color-gray-600-80);
  --alpha-gray-600-70: var(--color-gray-600-70);
  --alpha-gray-600-60: var(--color-gray-600-60);
  --alpha-gray-600-50: var(--color-gray-600-50);
  --alpha-gray-600-40: var(--color-gray-600-40);
  --alpha-gray-600-30: var(--color-gray-600-30);
  --alpha-gray-600-20: var(--color-gray-600-20);
  --alpha-gray-600-10: var(--color-gray-600-10);
  --alpha-gray-600-5: var(--color-gray-600-5);
  --alpha-gray-700-100: var(--color-gray-700-100);
  --alpha-gray-700-90: var(--color-gray-700-90);
  --alpha-gray-700-80: var(--color-gray-700-80);
  --alpha-gray-700-70: var(--color-gray-700-70);
  --alpha-gray-700-60: var(--color-gray-700-60);
  --alpha-gray-700-50: var(--color-gray-700-50);
  --alpha-gray-700-40: var(--color-gray-700-40);
  --alpha-gray-700-30: var(--color-gray-700-30);
  --alpha-gray-700-20: var(--color-gray-700-20);
  --alpha-gray-700-10: var(--color-gray-700-10);
  --alpha-gray-700-5: var(--color-gray-700-5);
  --alpha-gray-800-100: var(--color-gray-800-100);
  --alpha-gray-800-90: var(--color-gray-800-90);
  --alpha-gray-800-80: var(--color-gray-800-80);
  --alpha-gray-800-70: var(--color-gray-800-70);
  --alpha-gray-800-60: var(--color-gray-800-60);
  --alpha-gray-800-50: var(--color-gray-800-50);
  --alpha-gray-800-40: var(--color-gray-800-40);
  --alpha-gray-800-30: var(--color-gray-800-30);
  --alpha-gray-800-20: var(--color-gray-800-20);
  --alpha-gray-800-10: var(--color-gray-800-10);
  --alpha-gray-800-5: var(--color-gray-800-5);
  --alpha-gray-900-100: var(--color-gray-900-100);
  --alpha-gray-900-90: var(--color-gray-900-90);
  --alpha-gray-900-80: var(--color-gray-900-80);
  --alpha-gray-900-70: var(--color-gray-900-70);
  --alpha-gray-900-60: var(--color-gray-900-60);
  --alpha-gray-900-50: var(--color-gray-900-50);
  --alpha-gray-900-40: var(--color-gray-900-40);
  --alpha-gray-900-30: var(--color-gray-900-30);
  --alpha-gray-900-20: var(--color-gray-900-20);
  --alpha-gray-900-10: var(--color-gray-900-10);
  --alpha-gray-900-5: var(--color-gray-900-5);
  --alpha-gray-950-100: var(--color-gray-950-100);
  --alpha-gray-950-90: var(--color-gray-950-90);
  --alpha-gray-950-80: var(--color-gray-950-80);
  --alpha-gray-950-70: var(--color-gray-950-70);
  --alpha-gray-950-60: var(--color-gray-950-60);
  --alpha-gray-950-50: var(--color-gray-950-50);
  --alpha-gray-950-40: var(--color-gray-950-40);
  --alpha-gray-950-30: var(--color-gray-950-30);
  --alpha-gray-950-20: var(--color-gray-950-20);
  --alpha-gray-950-10: var(--color-gray-950-10);
  --alpha-gray-950-5: var(--color-gray-950-5);
  /* Utility Zinc */
  --utility-zinc-50: var(--color-zinc-50);
  --utility-zinc-100: var(--color-zinc-100);
  --utility-zinc-200: var(--color-zinc-200);
  --utility-zinc-300: var(--color-zinc-300);
  --utility-zinc-400: var(--color-zinc-400);
  --utility-zinc-500: var(--color-zinc-500);
  --utility-zinc-600: var(--color-zinc-600);
  --utility-zinc-700: var(--color-zinc-700);
  --utility-zinc-800: var(--color-zinc-800);
  --utility-zinc-900: var(--color-zinc-900);
  --utility-zinc-950: var(--color-zinc-950);
  --alpha-zinc-50-100: var(--color-zinc-50-100);
  --alpha-zinc-50-90: var(--color-zinc-50-90);
  --alpha-zinc-50-80: var(--color-zinc-50-80);
  --alpha-zinc-50-70: var(--color-zinc-50-70);
  --alpha-zinc-50-60: var(--color-zinc-50-60);
  --alpha-zinc-50-50: var(--color-zinc-50-50);
  --alpha-zinc-50-40: var(--color-zinc-50-40);
  --alpha-zinc-50-30: var(--color-zinc-50-30);
  --alpha-zinc-50-20: var(--color-zinc-50-20);
  --alpha-zinc-50-10: var(--color-zinc-50-10);
  --alpha-zinc-50-5: var(--color-zinc-50-5);
  --alpha-zinc-100-100: var(--color-zinc-100-100);
  --alpha-zinc-100-90: var(--color-zinc-100-90);
  --alpha-zinc-100-80: var(--color-zinc-100-80);
  --alpha-zinc-100-70: var(--color-zinc-100-70);
  --alpha-zinc-100-60: var(--color-zinc-100-60);
  --alpha-zinc-100-50: var(--color-zinc-100-50);
  --alpha-zinc-100-40: var(--color-zinc-100-40);
  --alpha-zinc-100-30: var(--color-zinc-100-30);
  --alpha-zinc-100-20: var(--color-zinc-100-20);
  --alpha-zinc-100-10: var(--color-zinc-100-10);
  --alpha-zinc-100-5: var(--color-zinc-100-5);
  --alpha-zinc-200-100: var(--color-zinc-200-100);
  --alpha-zinc-200-90: var(--color-zinc-200-90);
  --alpha-zinc-200-80: var(--color-zinc-200-80);
  --alpha-zinc-200-70: var(--color-zinc-200-70);
  --alpha-zinc-200-60: var(--color-zinc-200-60);
  --alpha-zinc-200-50: var(--color-zinc-200-50);
  --alpha-zinc-200-40: var(--color-zinc-200-40);
  --alpha-zinc-200-30: var(--color-zinc-200-30);
  --alpha-zinc-200-20: var(--color-zinc-200-20);
  --alpha-zinc-200-10: var(--color-zinc-200-10);
  --alpha-zinc-200-5: var(--color-zinc-200-5);
  --alpha-zinc-300-100: var(--color-zinc-300-100);
  --alpha-zinc-300-90: var(--color-zinc-300-90);
  --alpha-zinc-300-80: var(--color-zinc-300-80);
  --alpha-zinc-300-70: var(--color-zinc-300-70);
  --alpha-zinc-300-60: var(--color-zinc-300-60);
  --alpha-zinc-300-50: var(--color-zinc-300-50);
  --alpha-zinc-300-40: var(--color-zinc-300-40);
  --alpha-zinc-300-30: var(--color-zinc-300-30);
  --alpha-zinc-300-20: var(--color-zinc-300-20);
  --alpha-zinc-300-10: var(--color-zinc-300-10);
  --alpha-zinc-300-5: var(--color-zinc-300-5);
  --alpha-zinc-400-100: var(--color-zinc-400-100);
  --alpha-zinc-400-90: var(--color-zinc-400-90);
  --alpha-zinc-400-80: var(--color-zinc-400-80);
  --alpha-zinc-400-70: var(--color-zinc-400-70);
  --alpha-zinc-400-60: var(--color-zinc-400-60);
  --alpha-zinc-400-50: var(--color-zinc-400-50);
  --alpha-zinc-400-40: var(--color-zinc-400-40);
  --alpha-zinc-400-30: var(--color-zinc-400-30);
  --alpha-zinc-400-20: var(--color-zinc-400-20);
  --alpha-zinc-400-10: var(--color-zinc-400-10);
  --alpha-zinc-400-5: var(--color-zinc-400-5);
  --alpha-zinc-500-100: var(--color-zinc-500-100);
  --alpha-zinc-500-90: var(--color-zinc-500-90);
  --alpha-zinc-500-80: var(--color-zinc-500-80);
  --alpha-zinc-500-70: var(--color-zinc-500-70);
  --alpha-zinc-500-60: var(--color-zinc-500-60);
  --alpha-zinc-500-50: var(--color-zinc-500-50);
  --alpha-zinc-500-40: var(--color-zinc-500-40);
  --alpha-zinc-500-30: var(--color-zinc-500-30);
  --alpha-zinc-500-20: var(--color-zinc-500-20);
  --alpha-zinc-500-10: var(--color-zinc-500-10);
  --alpha-zinc-500-5: var(--color-zinc-500-5);
  --alpha-zinc-600-100: var(--color-zinc-600-100);
  --alpha-zinc-600-90: var(--color-zinc-600-90);
  --alpha-zinc-600-80: var(--color-zinc-600-80);
  --alpha-zinc-600-70: var(--color-zinc-600-70);
  --alpha-zinc-600-60: var(--color-zinc-600-60);
  --alpha-zinc-600-50: var(--color-zinc-600-50);
  --alpha-zinc-600-40: var(--color-zinc-600-40);
  --alpha-zinc-600-30: var(--color-zinc-600-30);
  --alpha-zinc-600-20: var(--color-zinc-600-20);
  --alpha-zinc-600-10: var(--color-zinc-600-10);
  --alpha-zinc-600-5: var(--color-zinc-600-5);
  --alpha-zinc-700-100: var(--color-zinc-700-100);
  --alpha-zinc-700-90: var(--color-zinc-700-90);
  --alpha-zinc-700-80: var(--color-zinc-700-80);
  --alpha-zinc-700-70: var(--color-zinc-700-70);
  --alpha-zinc-700-60: var(--color-zinc-700-60);
  --alpha-zinc-700-50: var(--color-zinc-700-50);
  --alpha-zinc-700-40: var(--color-zinc-700-40);
  --alpha-zinc-700-30: var(--color-zinc-700-30);
  --alpha-zinc-700-20: var(--color-zinc-700-20);
  --alpha-zinc-700-10: var(--color-zinc-700-10);
  --alpha-zinc-700-5: var(--color-zinc-700-5);
  --alpha-zinc-800-100: var(--color-zinc-800-100);
  --alpha-zinc-800-90: var(--color-zinc-800-90);
  --alpha-zinc-800-80: var(--color-zinc-800-80);
  --alpha-zinc-800-70: var(--color-zinc-800-70);
  --alpha-zinc-800-60: var(--color-zinc-800-60);
  --alpha-zinc-800-50: var(--color-zinc-800-50);
  --alpha-zinc-800-40: var(--color-zinc-800-40);
  --alpha-zinc-800-30: var(--color-zinc-800-30);
  --alpha-zinc-800-20: var(--color-zinc-800-20);
  --alpha-zinc-800-10: var(--color-zinc-800-10);
  --alpha-zinc-800-5: var(--color-zinc-800-5);
  --alpha-zinc-900-100: var(--color-zinc-900-100);
  --alpha-zinc-900-90: var(--color-zinc-900-90);
  --alpha-zinc-900-80: var(--color-zinc-900-80);
  --alpha-zinc-900-70: var(--color-zinc-900-70);
  --alpha-zinc-900-60: var(--color-zinc-900-60);
  --alpha-zinc-900-50: var(--color-zinc-900-50);
  --alpha-zinc-900-40: var(--color-zinc-900-40);
  --alpha-zinc-900-30: var(--color-zinc-900-30);
  --alpha-zinc-900-20: var(--color-zinc-900-20);
  --alpha-zinc-900-10: var(--color-zinc-900-10);
  --alpha-zinc-900-5: var(--color-zinc-900-5);
  --alpha-zinc-950-100: var(--color-zinc-950-100);
  --alpha-zinc-950-90: var(--color-zinc-950-90);
  --alpha-zinc-950-80: var(--color-zinc-950-80);
  --alpha-zinc-950-70: var(--color-zinc-950-70);
  --alpha-zinc-950-60: var(--color-zinc-950-60);
  --alpha-zinc-950-50: var(--color-zinc-950-50);
  --alpha-zinc-950-40: var(--color-zinc-950-40);
  --alpha-zinc-950-30: var(--color-zinc-950-30);
  --alpha-zinc-950-20: var(--color-zinc-950-20);
  --alpha-zinc-950-10: var(--color-zinc-950-10);
  --alpha-zinc-950-5: var(--color-zinc-950-5);
  /* Utility Neutral */
  --utility-neutral-50: var(--color-neutral-50);
  --utility-neutral-100: var(--color-neutral-100);
  --utility-neutral-200: var(--color-neutral-200);
  --utility-neutral-300: var(--color-neutral-300);
  --utility-neutral-400: var(--color-neutral-400);
  --utility-neutral-500: var(--color-neutral-500);
  --utility-neutral-600: var(--color-neutral-600);
  --utility-neutral-700: var(--color-neutral-700);
  --utility-neutral-750: var(--color-neutral-750);
  --utility-neutral-800: var(--color-neutral-800);
  --utility-neutral-850: var(--color-neutral-850);
  --utility-neutral-900: var(--color-neutral-900);
  --utility-neutral-950: var(--color-neutral-950);
  --alpha-neutral-50-100: var(--color-neutral-50-100);
  --alpha-neutral-50-90: var(--color-neutral-50-90);
  --alpha-neutral-50-80: var(--color-neutral-50-80);
  --alpha-neutral-50-70: var(--color-neutral-50-70);
  --alpha-neutral-50-60: var(--color-neutral-50-60);
  --alpha-neutral-50-50: var(--color-neutral-50-50);
  --alpha-neutral-50-40: var(--color-neutral-50-40);
  --alpha-neutral-50-30: var(--color-neutral-50-30);
  --alpha-neutral-50-20: var(--color-neutral-50-20);
  --alpha-neutral-50-10: var(--color-neutral-50-10);
  --alpha-neutral-50-5: var(--color-neutral-50-5);
  --alpha-neutral-100-100: var(--color-neutral-100-100);
  --alpha-neutral-100-90: var(--color-neutral-100-90);
  --alpha-neutral-100-80: var(--color-neutral-100-80);
  --alpha-neutral-100-70: var(--color-neutral-100-70);
  --alpha-neutral-100-60: var(--color-neutral-100-60);
  --alpha-neutral-100-50: var(--color-neutral-100-50);
  --alpha-neutral-100-40: var(--color-neutral-100-40);
  --alpha-neutral-100-30: var(--color-neutral-100-30);
  --alpha-neutral-100-20: var(--color-neutral-100-20);
  --alpha-neutral-100-10: var(--color-neutral-100-10);
  --alpha-neutral-100-5: var(--color-neutral-100-5);
  --alpha-neutral-200-100: var(--color-neutral-200-100);
  --alpha-neutral-200-90: var(--color-neutral-200-90);
  --alpha-neutral-200-80: var(--color-neutral-200-80);
  --alpha-neutral-200-70: var(--color-neutral-200-70);
  --alpha-neutral-200-60: var(--color-neutral-200-60);
  --alpha-neutral-200-50: var(--color-neutral-200-50);
  --alpha-neutral-200-40: var(--color-neutral-200-40);
  --alpha-neutral-200-30: var(--color-neutral-200-30);
  --alpha-neutral-200-20: var(--color-neutral-200-20);
  --alpha-neutral-200-10: var(--color-neutral-200-10);
  --alpha-neutral-200-5: var(--color-neutral-200-5);
  --alpha-neutral-300-100: var(--color-neutral-300-100);
  --alpha-neutral-300-90: var(--color-neutral-300-90);
  --alpha-neutral-300-80: var(--color-neutral-300-80);
  --alpha-neutral-300-70: var(--color-neutral-300-70);
  --alpha-neutral-300-60: var(--color-neutral-300-60);
  --alpha-neutral-300-50: var(--color-neutral-300-50);
  --alpha-neutral-300-40: var(--color-neutral-300-40);
  --alpha-neutral-300-30: var(--color-neutral-300-30);
  --alpha-neutral-300-20: var(--color-neutral-300-20);
  --alpha-neutral-300-10: var(--color-neutral-300-10);
  --alpha-neutral-300-5: var(--color-neutral-300-5);
  --alpha-neutral-400-100: var(--color-neutral-400-100);
  --alpha-neutral-400-90: var(--color-neutral-400-90);
  --alpha-neutral-400-80: var(--color-neutral-400-80);
  --alpha-neutral-400-70: var(--color-neutral-400-70);
  --alpha-neutral-400-60: var(--color-neutral-400-60);
  --alpha-neutral-400-50: var(--color-neutral-400-50);
  --alpha-neutral-400-40: var(--color-neutral-400-40);
  --alpha-neutral-400-30: var(--color-neutral-400-30);
  --alpha-neutral-400-20: var(--color-neutral-400-20);
  --alpha-neutral-400-10: var(--color-neutral-400-10);
  --alpha-neutral-400-5: var(--color-neutral-400-5);
  --alpha-neutral-500-100: var(--color-neutral-500-100);
  --alpha-neutral-500-90: var(--color-neutral-500-90);
  --alpha-neutral-500-80: var(--color-neutral-500-80);
  --alpha-neutral-500-70: var(--color-neutral-500-70);
  --alpha-neutral-500-60: var(--color-neutral-500-60);
  --alpha-neutral-500-50: var(--color-neutral-500-50);
  --alpha-neutral-500-40: var(--color-neutral-500-40);
  --alpha-neutral-500-30: var(--color-neutral-500-30);
  --alpha-neutral-500-20: var(--color-neutral-500-20);
  --alpha-neutral-500-10: var(--color-neutral-500-10);
  --alpha-neutral-500-5: var(--color-neutral-500-5);
  --alpha-neutral-600-100: var(--color-neutral-600-100);
  --alpha-neutral-600-90: var(--color-neutral-600-90);
  --alpha-neutral-600-80: var(--color-neutral-600-80);
  --alpha-neutral-600-70: var(--color-neutral-600-70);
  --alpha-neutral-600-60: var(--color-neutral-600-60);
  --alpha-neutral-600-50: var(--color-neutral-600-50);
  --alpha-neutral-600-40: var(--color-neutral-600-40);
  --alpha-neutral-600-30: var(--color-neutral-600-30);
  --alpha-neutral-600-20: var(--color-neutral-600-20);
  --alpha-neutral-600-10: var(--color-neutral-600-10);
  --alpha-neutral-600-5: var(--color-neutral-600-5);
  --alpha-neutral-700-100: var(--color-neutral-700-100);
  --alpha-neutral-700-90: var(--color-neutral-700-90);
  --alpha-neutral-700-80: var(--color-neutral-700-80);
  --alpha-neutral-700-70: var(--color-neutral-700-70);
  --alpha-neutral-700-60: var(--color-neutral-700-60);
  --alpha-neutral-700-50: var(--color-neutral-700-50);
  --alpha-neutral-700-40: var(--color-neutral-700-40);
  --alpha-neutral-700-30: var(--color-neutral-700-30);
  --alpha-neutral-700-20: var(--color-neutral-700-20);
  --alpha-neutral-700-10: var(--color-neutral-700-10);
  --alpha-neutral-700-5: var(--color-neutral-700-5);
  --alpha-neutral-750-100: var(--color-neutral-750-100);
  --alpha-neutral-750-90: var(--color-neutral-750-90);
  --alpha-neutral-750-80: var(--color-neutral-750-80);
  --alpha-neutral-750-70: var(--color-neutral-750-70);
  --alpha-neutral-750-60: var(--color-neutral-750-60);
  --alpha-neutral-750-50: var(--color-neutral-750-50);
  --alpha-neutral-750-40: var(--color-neutral-750-40);
  --alpha-neutral-750-30: var(--color-neutral-750-30);
  --alpha-neutral-750-20: var(--color-neutral-750-20);
  --alpha-neutral-750-10: var(--color-neutral-750-10);
  --alpha-neutral-750-5: var(--color-neutral-750-5);
  --alpha-neutral-800-100: var(--color-neutral-800-100);
  --alpha-neutral-800-90: var(--color-neutral-800-90);
  --alpha-neutral-800-80: var(--color-neutral-800-80);
  --alpha-neutral-800-70: var(--color-neutral-800-70);
  --alpha-neutral-800-60: var(--color-neutral-800-60);
  --alpha-neutral-800-50: var(--color-neutral-800-50);
  --alpha-neutral-800-40: var(--color-neutral-800-40);
  --alpha-neutral-800-30: var(--color-neutral-800-30);
  --alpha-neutral-800-20: var(--color-neutral-800-20);
  --alpha-neutral-800-10: var(--color-neutral-800-10);
  --alpha-neutral-800-5: var(--color-neutral-800-5);
  --alpha-neutral-900-100: var(--color-neutral-900-100);
  --alpha-neutral-900-90: var(--color-neutral-900-90);
  --alpha-neutral-900-80: var(--color-neutral-900-80);
  --alpha-neutral-900-70: var(--color-neutral-900-70);
  --alpha-neutral-900-60: var(--color-neutral-900-60);
  --alpha-neutral-900-50: var(--color-neutral-900-50);
  --alpha-neutral-900-40: var(--color-neutral-900-40);
  --alpha-neutral-900-30: var(--color-neutral-900-30);
  --alpha-neutral-900-20: var(--color-neutral-900-20);
  --alpha-neutral-900-10: var(--color-neutral-900-10);
  --alpha-neutral-900-5: var(--color-neutral-900-5);
  --alpha-neutral-950-100: var(--color-neutral-950-100);
  --alpha-neutral-950-90: var(--color-neutral-950-90);
  --alpha-neutral-950-80: var(--color-neutral-950-80);
  --alpha-neutral-950-70: var(--color-neutral-950-70);
  --alpha-neutral-950-60: var(--color-neutral-950-60);
  --alpha-neutral-950-50: var(--color-neutral-950-50);
  --alpha-neutral-950-40: var(--color-neutral-950-40);
  --alpha-neutral-950-30: var(--color-neutral-950-30);
  --alpha-neutral-950-20: var(--color-neutral-950-20);
  --alpha-neutral-950-16: var(--color-neutral-950-16);
  --alpha-neutral-950-10: var(--color-neutral-950-10);
  --alpha-neutral-950-6: var(--color-neutral-950-6);
  --alpha-neutral-950-5: var(--color-neutral-950-5);
  /* Utility Stone */
  --utility-stone-50: var(--color-stone-50);
  --utility-stone-100: var(--color-stone-100);
  --utility-stone-200: var(--color-stone-200);
  --utility-stone-300: var(--color-stone-300);
  --utility-stone-400: var(--color-stone-400);
  --utility-stone-500: var(--color-stone-500);
  --utility-stone-600: var(--color-stone-600);
  --utility-stone-700: var(--color-stone-700);
  --utility-stone-800: var(--color-stone-800);
  --utility-stone-900: var(--color-stone-900);
  --alpha-stone-50-100: var(--color-stone-50-100);
  --alpha-stone-50-90: var(--color-stone-50-90);
  --alpha-stone-50-80: var(--color-stone-50-80);
  --alpha-stone-50-70: var(--color-stone-50-70);
  --alpha-stone-50-60: var(--color-stone-50-60);
  --alpha-stone-50-50: var(--color-stone-50-50);
  --alpha-stone-50-40: var(--color-stone-50-40);
  --alpha-stone-50-30: var(--color-stone-50-30);
  --alpha-stone-50-20: var(--color-stone-50-20);
  --alpha-stone-50-10: var(--color-stone-50-10);
  --alpha-stone-50-5: var(--color-stone-50-5);
  --alpha-stone-100-100: var(--color-stone-100-100);
  --alpha-stone-100-90: var(--color-stone-100-90);
  --alpha-stone-100-80: var(--color-stone-100-80);
  --alpha-stone-100-70: var(--color-stone-100-70);
  --alpha-stone-100-60: var(--color-stone-100-60);
  --alpha-stone-100-50: var(--color-stone-100-50);
  --alpha-stone-100-40: var(--color-stone-100-40);
  --alpha-stone-100-30: var(--color-stone-100-30);
  --alpha-stone-100-20: var(--color-stone-100-20);
  --alpha-stone-100-10: var(--color-stone-100-10);
  --alpha-stone-100-5: var(--color-stone-100-5);
  --alpha-stone-200-100: var(--color-stone-200-100);
  --alpha-stone-200-90: var(--color-stone-200-90);
  --alpha-stone-200-80: var(--color-stone-200-80);
  --alpha-stone-200-70: var(--color-stone-200-70);
  --alpha-stone-200-60: var(--color-stone-200-60);
  --alpha-stone-200-50: var(--color-stone-200-50);
  --alpha-stone-200-40: var(--color-stone-200-40);
  --alpha-stone-200-30: var(--color-stone-200-30);
  --alpha-stone-200-20: var(--color-stone-200-20);
  --alpha-stone-200-10: var(--color-stone-200-10);
  --alpha-stone-200-5: var(--color-stone-200-5);
  --alpha-stone-300-100: var(--color-stone-300-100);
  --alpha-stone-300-90: var(--color-stone-300-90);
  --alpha-stone-300-80: var(--color-stone-300-80);
  --alpha-stone-300-70: var(--color-stone-300-70);
  --alpha-stone-300-60: var(--color-stone-300-60);
  --alpha-stone-300-50: var(--color-stone-300-50);
  --alpha-stone-300-40: var(--color-stone-300-40);
  --alpha-stone-300-30: var(--color-stone-300-30);
  --alpha-stone-300-20: var(--color-stone-300-20);
  --alpha-stone-300-10: var(--color-stone-300-10);
  --alpha-stone-300-5: var(--color-stone-300-5);
  --alpha-stone-400-100: var(--color-stone-400-100);
  --alpha-stone-400-90: var(--color-stone-400-90);
  --alpha-stone-400-80: var(--color-stone-400-80);
  --alpha-stone-400-70: var(--color-stone-400-70);
  --alpha-stone-400-60: var(--color-stone-400-60);
  --alpha-stone-400-50: var(--color-stone-400-50);
  --alpha-stone-400-40: var(--color-stone-400-40);
  --alpha-stone-400-30: var(--color-stone-400-30);
  --alpha-stone-400-20: var(--color-stone-400-20);
  --alpha-stone-400-10: var(--color-stone-400-10);
  --alpha-stone-400-5: var(--color-stone-400-5);
  --alpha-stone-500-100: var(--color-stone-500-100);
  --alpha-stone-500-90: var(--color-stone-500-90);
  --alpha-stone-500-80: var(--color-stone-500-80);
  --alpha-stone-500-70: var(--color-stone-500-70);
  --alpha-stone-500-60: var(--color-stone-500-60);
  --alpha-stone-500-50: var(--color-stone-500-50);
  --alpha-stone-500-40: var(--color-stone-500-40);
  --alpha-stone-500-30: var(--color-stone-500-30);
  --alpha-stone-500-20: var(--color-stone-500-20);
  --alpha-stone-500-10: var(--color-stone-500-10);
  --alpha-stone-500-5: var(--color-stone-500-5);
  --alpha-stone-600-100: var(--color-stone-600-100);
  --alpha-stone-600-90: var(--color-stone-600-90);
  --alpha-stone-600-80: var(--color-stone-600-80);
  --alpha-stone-600-70: var(--color-stone-600-70);
  --alpha-stone-600-60: var(--color-stone-600-60);
  --alpha-stone-600-50: var(--color-stone-600-50);
  --alpha-stone-600-40: var(--color-stone-600-40);
  --alpha-stone-600-30: var(--color-stone-600-30);
  --alpha-stone-600-20: var(--color-stone-600-20);
  --alpha-stone-600-10: var(--color-stone-600-10);
  --alpha-stone-600-5: var(--color-stone-600-5);
  --alpha-stone-700-100: var(--color-stone-700-100);
  --alpha-stone-700-90: var(--color-stone-700-90);
  --alpha-stone-700-80: var(--color-stone-700-80);
  --alpha-stone-700-70: var(--color-stone-700-70);
  --alpha-stone-700-60: var(--color-stone-700-60);
  --alpha-stone-700-50: var(--color-stone-700-50);
  --alpha-stone-700-40: var(--color-stone-700-40);
  --alpha-stone-700-30: var(--color-stone-700-30);
  --alpha-stone-700-20: var(--color-stone-700-20);
  --alpha-stone-700-10: var(--color-stone-700-10);
  --alpha-stone-700-5: var(--color-stone-700-5);
  --alpha-stone-800-100: var(--color-stone-800-100);
  --alpha-stone-800-90: var(--color-stone-800-90);
  --alpha-stone-800-80: var(--color-stone-800-80);
  --alpha-stone-800-70: var(--color-stone-800-70);
  --alpha-stone-800-60: var(--color-stone-800-60);
  --alpha-stone-800-50: var(--color-stone-800-50);
  --alpha-stone-800-40: var(--color-stone-800-40);
  --alpha-stone-800-30: var(--color-stone-800-30);
  --alpha-stone-800-20: var(--color-stone-800-20);
  --alpha-stone-800-10: var(--color-stone-800-10);
  --alpha-stone-800-5: var(--color-stone-800-5);
  --alpha-stone-900-100: var(--color-stone-900-100);
  --alpha-stone-900-90: var(--color-stone-900-90);
  --alpha-stone-900-80: var(--color-stone-900-80);
  --alpha-stone-900-70: var(--color-stone-900-70);
  --alpha-stone-900-60: var(--color-stone-900-60);
  --alpha-stone-900-50: var(--color-stone-900-50);
  --alpha-stone-900-40: var(--color-stone-900-40);
  --alpha-stone-900-30: var(--color-stone-900-30);
  --alpha-stone-900-20: var(--color-stone-900-20);
  --alpha-stone-900-10: var(--color-stone-900-10);
  --alpha-stone-900-5: var(--color-stone-900-5);
  --alpha-stone-950-100: var(--color-stone-950-100);
  --alpha-stone-950-90: var(--color-stone-950-90);
  --alpha-stone-950-80: var(--color-stone-950-80);
  --alpha-stone-950-70: var(--color-stone-950-70);
  --alpha-stone-950-60: var(--color-stone-950-60);
  --alpha-stone-950-50: var(--color-stone-950-50);
  --alpha-stone-950-40: var(--color-stone-950-40);
  --alpha-stone-950-30: var(--color-stone-950-30);
  --alpha-stone-950-20: var(--color-stone-950-20);
  --alpha-stone-950-10: var(--color-stone-950-10);
  --alpha-stone-950-5: var(--color-stone-950-5);
}

/*Border Colors*/
.border-red-50 { border-color: var(--color-red-50); }
.border-red-100 { border-color: var(--color-red-100); }
.border-red-200 { border-color: var(--color-red-200); }
.border-red-300 { border-color: var(--color-red-300); }
.border-red-400 { border-color: var(--color-red-400); }
.border-red-500 { border-color: var(--color-red-500); }
.border-red-600 { border-color: var(--color-red-600); }
.border-red-700 { border-color: var(--color-red-700); }
.border-red-800 { border-color: var(--color-red-800); }
.border-red-900 { border-color: var(--color-red-900); }
.border-red-950 { border-color: var(--color-red-950); }
.border-orange-50 { border-color: var(--color-orange-50); }
.border-orange-100 { border-color: var(--color-orange-100); }
.border-orange-200 { border-color: var(--color-orange-200); }
.border-orange-300 { border-color: var(--color-orange-300); }
.border-orange-400 { border-color: var(--color-orange-400); }
.border-orange-500 { border-color: var(--color-orange-500); }
.border-orange-600 { border-color: var(--color-orange-600); }
.border-orange-700 { border-color: var(--color-orange-700); }
.border-orange-800 { border-color: var(--color-orange-800); }
.border-orange-900 { border-color: var(--color-orange-900); }
.border-orange-950 { border-color: var(--color-orange-950); }
.border-amber-50 { border-color: var(--color-amber-50); }
.border-amber-100 { border-color: var(--color-amber-100); }
.border-amber-200 { border-color: var(--color-amber-200); }
.border-amber-300 { border-color: var(--color-amber-300); }
.border-amber-400 { border-color: var(--color-amber-400); }
.border-amber-500 { border-color: var(--color-amber-500); }
.border-amber-600 { border-color: var(--color-amber-600); }
.border-amber-700 { border-color: var(--color-amber-700); }
.border-amber-800 { border-color: var(--color-amber-800); }
.border-amber-900 { border-color: var(--color-amber-900); }
.border-amber-950 { border-color: var(--color-amber-950); }
.border-yellow-50 { border-color: var(--color-yellow-50); }
.border-yellow-100 { border-color: var(--color-yellow-100); }
.border-yellow-200 { border-color: var(--color-yellow-200); }
.border-yellow-300 { border-color: var(--color-yellow-300); }
.border-yellow-400 { border-color: var(--color-yellow-400); }
.border-yellow-500 { border-color: var(--color-yellow-500); }
.border-yellow-600 { border-color: var(--color-yellow-600); }
.border-yellow-700 { border-color: var(--color-yellow-700); }
.border-yellow-800 { border-color: var(--color-yellow-800); }
.border-yellow-900 { border-color: var(--color-yellow-900); }
.border-yellow-950 { border-color: var(--color-yellow-950); }
.border-lime-50 { border-color: var(--color-lime-50); }
.border-lime-100 { border-color: var(--color-lime-100); }
.border-lime-200 { border-color: var(--color-lime-200); }
.border-lime-300 { border-color: var(--color-lime-300); }
.border-lime-400 { border-color: var(--color-lime-400); }
.border-lime-500 { border-color: var(--color-lime-500); }
.border-lime-600 { border-color: var(--color-lime-600); }
.border-lime-700 { border-color: var(--color-lime-700); }
.border-lime-800 { border-color: var(--color-lime-800); }
.border-lime-900 { border-color: var(--color-lime-900); }
.border-lime-950 { border-color: var(--color-lime-950); }
.border-green-50 { border-color: var(--color-green-50); }
.border-green-100 { border-color: var(--color-green-100); }
.border-green-200 { border-color: var(--color-green-200); }
.border-green-300 { border-color: var(--color-green-300); }
.border-green-400 { border-color: var(--color-green-400); }
.border-green-500 { border-color: var(--color-green-500); }
.border-green-600 { border-color: var(--color-green-600); }
.border-green-700 { border-color: var(--color-green-700); }
.border-green-800 { border-color: var(--color-green-800); }
.border-green-900 { border-color: var(--color-green-900); }
.border-green-950 { border-color: var(--color-green-950); }
.border-emerald-50 { border-color: var(--color-emerald-50); }
.border-emerald-100 { border-color: var(--color-emerald-100); }
.border-emerald-200 { border-color: var(--color-emerald-200); }
.border-emerald-300 { border-color: var(--color-emerald-300); }
.border-emerald-400 { border-color: var(--color-emerald-400); }
.border-emerald-500 { border-color: var(--color-emerald-500); }
.border-emerald-600 { border-color: var(--color-emerald-600); }
.border-emerald-700 { border-color: var(--color-emerald-700); }
.border-emerald-800 { border-color: var(--color-emerald-800); }
.border-emerald-900 { border-color: var(--color-emerald-900); }
.border-emerald-950 { border-color: var(--color-emerald-950); }
.border-teal-50 { border-color: var(--color-teal-50); }
.border-teal-100 { border-color: var(--color-teal-100); }
.border-teal-200 { border-color: var(--color-teal-200); }
.border-teal-300 { border-color: var(--color-teal-300); }
.border-teal-400 { border-color: var(--color-teal-400); }
.border-teal-500 { border-color: var(--color-teal-500); }
.border-teal-600 { border-color: var(--color-teal-600); }
.border-teal-700 { border-color: var(--color-teal-700); }
.border-teal-800 { border-color: var(--color-teal-800); }
.border-teal-900 { border-color: var(--color-teal-900); }
.border-teal-950 { border-color: var(--color-teal-950); }
.border-cyan-50 { border-color: var(--color-cyan-50); }
.border-cyan-100 { border-color: var(--color-cyan-100); }
.border-cyan-200 { border-color: var(--color-cyan-200); }
.border-cyan-300 { border-color: var(--color-cyan-300); }
.border-cyan-400 { border-color: var(--color-cyan-400); }
.border-cyan-500 { border-color: var(--color-cyan-500); }
.border-cyan-600 { border-color: var(--color-cyan-600); }
.border-cyan-700 { border-color: var(--color-cyan-700); }
.border-cyan-800 { border-color: var(--color-cyan-800); }
.border-cyan-900 { border-color: var(--color-cyan-900); }
.border-cyan-950 { border-color: var(--color-cyan-950); }
.border-sky-50 { border-color: var(--color-sky-50); }
.border-sky-100 { border-color: var(--color-sky-100); }
.border-sky-200 { border-color: var(--color-sky-200); }
.border-sky-300 { border-color: var(--color-sky-300); }
.border-sky-400 { border-color: var(--color-sky-400); }
.border-sky-500 { border-color: var(--color-sky-500); }
.border-sky-600 { border-color: var(--color-sky-600); }
.border-sky-700 { border-color: var(--color-sky-700); }
.border-sky-800 { border-color: var(--color-sky-800); }
.border-sky-900 { border-color: var(--color-sky-900); }
.border-sky-950 { border-color: var(--color-sky-950); }
.border-blue-50 { border-color: var(--color-blue-50); }
.border-blue-100 { border-color: var(--color-blue-100); }
.border-blue-200 { border-color: var(--color-blue-200); }
.border-blue-300 { border-color: var(--color-blue-300); }
.border-blue-400 { border-color: var(--color-blue-400); }
.border-blue-500 { border-color: var(--color-blue-500); }
.border-blue-600 { border-color: var(--color-blue-600); }
.border-blue-700 { border-color: var(--color-blue-700); }
.border-blue-800 { border-color: var(--color-blue-800); }
.border-blue-900 { border-color: var(--color-blue-900); }
.border-blue-950 { border-color: var(--color-blue-950); }
.border-indigo-50 { border-color: var(--color-indigo-50); }
.border-indigo-100 { border-color: var(--color-indigo-100); }
.border-indigo-200 { border-color: var(--color-indigo-200); }
.border-indigo-300 { border-color: var(--color-indigo-300); }
.border-indigo-400 { border-color: var(--color-indigo-400); }
.border-indigo-500 { border-color: var(--color-indigo-500); }
.border-indigo-600 { border-color: var(--color-indigo-600); }
.border-indigo-700 { border-color: var(--color-indigo-700); }
.border-indigo-800 { border-color: var(--color-indigo-800); }
.border-indigo-900 { border-color: var(--color-indigo-900); }
.border-indigo-950 { border-color: var(--color-indigo-950); }
.border-violet-50 { border-color: var(--color-violet-50); }
.border-violet-100 { border-color: var(--color-violet-100); }
.border-violet-200 { border-color: var(--color-violet-200); }
.border-violet-300 { border-color: var(--color-violet-300); }
.border-violet-400 { border-color: var(--color-violet-400); }
.border-violet-500 { border-color: var(--color-violet-500); }
.border-violet-600 { border-color: var(--color-violet-600); }
.border-violet-700 { border-color: var(--color-violet-700); }
.border-violet-800 { border-color: var(--color-violet-800); }
.border-violet-900 { border-color: var(--color-violet-900); }
.border-violet-950 { border-color: var(--color-violet-950); }
.border-purple-50 { border-color: var(--color-purple-50); }
.border-purple-100 { border-color: var(--color-purple-100); }
.border-purple-200 { border-color: var(--color-purple-200); }
.border-purple-300 { border-color: var(--color-purple-300); }
.border-purple-400 { border-color: var(--color-purple-400); }
.border-purple-500 { border-color: var(--color-purple-500); }
.border-purple-600 { border-color: var(--color-purple-600); }
.border-purple-700 { border-color: var(--color-purple-700); }
.border-purple-800 { border-color: var(--color-purple-800); }
.border-purple-900 { border-color: var(--color-purple-900); }
.border-purple-950 { border-color: var(--color-purple-950); }
.border-fuchsia-50 { border-color: var(--color-fuchsia-50); }
.border-fuchsia-100 { border-color: var(--color-fuchsia-100); }
.border-fuchsia-200 { border-color: var(--color-fuchsia-200); }
.border-fuchsia-300 { border-color: var(--color-fuchsia-300); }
.border-fuchsia-400 { border-color: var(--color-fuchsia-400); }
.border-fuchsia-500 { border-color: var(--color-fuchsia-500); }
.border-fuchsia-600 { border-color: var(--color-fuchsia-600); }
.border-fuchsia-700 { border-color: var(--color-fuchsia-700); }
.border-fuchsia-800 { border-color: var(--color-fuchsia-800); }
.border-fuchsia-900 { border-color: var(--color-fuchsia-900); }
.border-fuchsia-950 { border-color: var(--color-fuchsia-950); }
.border-pink-50 { border-color: var(--color-pink-50); }
.border-pink-100 { border-color: var(--color-pink-100); }
.border-pink-200 { border-color: var(--color-pink-200); }
.border-pink-300 { border-color: var(--color-pink-300); }
.border-pink-400 { border-color: var(--color-pink-400); }
.border-pink-500 { border-color: var(--color-pink-500); }
.border-pink-600 { border-color: var(--color-pink-600); }
.border-pink-700 { border-color: var(--color-pink-700); }
.border-pink-800 { border-color: var(--color-pink-800); }
.border-pink-900 { border-color: var(--color-pink-900); }
.border-pink-950 { border-color: var(--color-pink-950); }
.border-rose-50 { border-color: var(--color-rose-50); }
.border-rose-100 { border-color: var(--color-rose-100); }
.border-rose-200 { border-color: var(--color-rose-200); }
.border-rose-300 { border-color: var(--color-rose-300); }
.border-rose-400 { border-color: var(--color-rose-400); }
.border-rose-500 { border-color: var(--color-rose-500); }
.border-rose-600 { border-color: var(--color-rose-600); }
.border-rose-700 { border-color: var(--color-rose-700); }
.border-rose-800 { border-color: var(--color-rose-800); }
.border-rose-900 { border-color: var(--color-rose-900); }
.border-rose-950 { border-color: var(--color-rose-950); }
.border-slate-50 { border-color: var(--color-slate-50); }
.border-slate-100 { border-color: var(--color-slate-100); }
.border-slate-200 { border-color: var(--color-slate-200); }
.border-slate-300 { border-color: var(--color-slate-300); }
.border-slate-400 { border-color: var(--color-slate-400); }
.border-slate-500 { border-color: var(--color-slate-500); }
.border-slate-600 { border-color: var(--color-slate-600); }
.border-slate-700 { border-color: var(--color-slate-700); }
.border-slate-800 { border-color: var(--color-slate-800); }
.border-slate-900 { border-color: var(--color-slate-900); }
.border-slate-950 { border-color: var(--color-slate-950); }
.border-gray-50 { border-color: var(--color-gray-50); }
.border-gray-100 { border-color: var(--color-gray-100); }
.border-gray-200 { border-color: var(--color-gray-200); }
.border-gray-300 { border-color: var(--color-gray-300); }
.border-gray-400 { border-color: var(--color-gray-400); }
.border-gray-500 { border-color: var(--color-gray-500); }
.border-gray-600 { border-color: var(--color-gray-600); }
.border-gray-700 { border-color: var(--color-gray-700); }
.border-gray-800 { border-color: var(--color-gray-800); }
.border-gray-900 { border-color: var(--color-gray-900); }
.border-gray-950 { border-color: var(--color-gray-950); }
.border-stone-50 { border-color: var(--color-stone-50); }
.border-stone-100 { border-color: var(--color-stone-100); }
.border-stone-200 { border-color: var(--color-stone-200); }
.border-stone-300 { border-color: var(--color-stone-300); }
.border-stone-400 { border-color: var(--color-stone-400); }
.border-stone-500 { border-color: var(--color-stone-500); }
.border-stone-600 { border-color: var(--color-stone-600); }
.border-stone-700 { border-color: var(--color-stone-700); }
.border-stone-800 { border-color: var(--color-stone-800); }
.border-stone-900 { border-color: var(--color-stone-900); }
.border-stone-950 { border-color: var(--color-stone-950); }
/*Text Colors*/
.text-red-50 { color: var(--color-red-50); }
.text-red-100 { color: var(--color-red-100); }
.text-red-200 { color: var(--color-red-200); }
.text-red-300 { color: var(--color-red-300); }
.text-red-400 { color: var(--color-red-400); }
.text-red-500 { color: var(--color-red-500); }
.text-red-600 { color: var(--color-red-600); }
.text-red-700 { color: var(--color-red-700); }
.text-red-800 { color: var(--color-red-800); }
.text-red-900 { color: var(--color-red-900); }
.text-red-950 { color: var(--color-red-950); }
.text-orange-50 { color: var(--color-orange-50); }
.text-orange-100 { color: var(--color-orange-100); }
.text-orange-200 { color: var(--color-orange-200); }
.text-orange-300 { color: var(--color-orange-300); }
.text-orange-400 { color: var(--color-orange-400); }
.text-orange-500 { color: var(--color-orange-500); }
.text-orange-600 { color: var(--color-orange-600); }
.text-orange-700 { color: var(--color-orange-700); }
.text-orange-800 { color: var(--color-orange-800); }
.text-orange-900 { color: var(--color-orange-900); }
.text-orange-950 { color: var(--color-orange-950); }
.text-amber-50 { color: var(--color-amber-50); }
.text-amber-100 { color: var(--color-amber-100); }
.text-amber-200 { color: var(--color-amber-200); }
.text-amber-300 { color: var(--color-amber-300); }
.text-amber-400 { color: var(--color-amber-400); }
.text-amber-500 { color: var(--color-amber-500); }
.text-amber-600 { color: var(--color-amber-600); }
.text-amber-700 { color: var(--color-amber-700); }
.text-amber-800 { color: var(--color-amber-800); }
.text-amber-900 { color: var(--color-amber-900); }
.text-amber-950 { color: var(--color-amber-950); }
.text-yellow-50 { color: var(--color-yellow-50); }
.text-yellow-100 { color: var(--color-yellow-100); }
.text-yellow-200 { color: var(--color-yellow-200); }
.text-yellow-300 { color: var(--color-yellow-300); }
.text-yellow-400 { color: var(--color-yellow-400); }
.text-yellow-500 { color: var(--color-yellow-500); }
.text-yellow-600 { color: var(--color-yellow-600); }
.text-yellow-700 { color: var(--color-yellow-700); }
.text-yellow-800 { color: var(--color-yellow-800); }
.text-yellow-900 { color: var(--color-yellow-900); }
.text-yellow-950 { color: var(--color-yellow-950); }
.text-lime-50 { color: var(--color-lime-50); }
.text-lime-100 { color: var(--color-lime-100); }
.text-lime-200 { color: var(--color-lime-200); }
.text-lime-300 { color: var(--color-lime-300); }
.text-lime-400 { color: var(--color-lime-400); }
.text-lime-500 { color: var(--color-lime-500); }
.text-lime-600 { color: var(--color-lime-600); }
.text-lime-700 { color: var(--color-lime-700); }
.text-lime-800 { color: var(--color-lime-800); }
.text-lime-900 { color: var(--color-lime-900); }
.text-lime-950 { color: var(--color-lime-950); }
.text-green-50 { color: var(--color-green-50); }
.text-green-100 { color: var(--color-green-100); }
.text-green-200 { color: var(--color-green-200); }
.text-green-300 { color: var(--color-green-300); }
.text-green-400 { color: var(--color-green-400); }
.text-green-500 { color: var(--color-green-500); }
.text-green-600 { color: var(--color-green-600); }
.text-green-700 { color: var(--color-green-700); }
.text-green-800 { color: var(--color-green-800); }
.text-green-900 { color: var(--color-green-900); }
.text-green-950 { color: var(--color-green-950); }
.text-emerald-50 { color: var(--color-emerald-50); }
.text-emerald-100 { color: var(--color-emerald-100); }
.text-emerald-200 { color: var(--color-emerald-200); }
.text-emerald-300 { color: var(--color-emerald-300); }
.text-emerald-400 { color: var(--color-emerald-400); }
.text-emerald-500 { color: var(--color-emerald-500); }
.text-emerald-600 { color: var(--color-emerald-600); }
.text-emerald-700 { color: var(--color-emerald-700); }
.text-emerald-800 { color: var(--color-emerald-800); }
.text-emerald-900 { color: var(--color-emerald-900); }
.text-emerald-950 { color: var(--color-emerald-950); }
.text-teal-50 { color: var(--color-teal-50); }
.text-teal-100 { color: var(--color-teal-100); }
.text-teal-200 { color: var(--color-teal-200); }
.text-teal-300 { color: var(--color-teal-300); }
.text-teal-400 { color: var(--color-teal-400); }
.text-teal-500 { color: var(--color-teal-500); }
.text-teal-600 { color: var(--color-teal-600); }
.text-teal-700 { color: var(--color-teal-700); }
.text-teal-800 { color: var(--color-teal-800); }
.text-teal-900 { color: var(--color-teal-900); }
.text-teal-950 { color: var(--color-teal-950); }
.text-cyan-50 { color: var(--color-cyan-50); }
.text-cyan-100 { color: var(--color-cyan-100); }
.text-cyan-200 { color: var(--color-cyan-200); }
.text-cyan-300 { color: var(--color-cyan-300); }
.text-cyan-400 { color: var(--color-cyan-400); }
.text-cyan-500 { color: var(--color-cyan-500); }
.text-cyan-600 { color: var(--color-cyan-600); }
.text-cyan-700 { color: var(--color-cyan-700); }
.text-cyan-800 { color: var(--color-cyan-800); }
.text-cyan-900 { color: var(--color-cyan-900); }
.text-cyan-950 { color: var(--color-cyan-950); }
.text-sky-50 { color: var(--color-sky-50); }
.text-sky-100 { color: var(--color-sky-100); }
.text-sky-200 { color: var(--color-sky-200); }
.text-sky-300 { color: var(--color-sky-300); }
.text-sky-400 { color: var(--color-sky-400); }
.text-sky-500 { color: var(--color-sky-500); }
.text-sky-600 { color: var(--color-sky-600); }
.text-sky-700 { color: var(--color-sky-700); }
.text-sky-800 { color: var(--color-sky-800); }
.text-sky-900 { color: var(--color-sky-900); }
.text-sky-950 { color: var(--color-sky-950); }
.text-blue-50 { color: var(--color-blue-50); }
.text-blue-100 { color: var(--color-blue-100); }
.text-blue-200 { color: var(--color-blue-200); }
.text-blue-300 { color: var(--color-blue-300); }
.text-blue-400 { color: var(--color-blue-400); }
.text-blue-500 { color: var(--color-blue-500); }
.text-blue-600 { color: var(--color-blue-600); }
.text-blue-700 { color: var(--color-blue-700); }
.text-blue-800 { color: var(--color-blue-800); }
.text-blue-900 { color: var(--color-blue-900); }
.text-blue-950 { color: var(--color-blue-950); }
.text-indigo-50 { color: var(--color-indigo-50); }
.text-indigo-100 { color: var(--color-indigo-100); }
.text-indigo-200 { color: var(--color-indigo-200); }
.text-indigo-300 { color: var(--color-indigo-300); }
.text-indigo-400 { color: var(--color-indigo-400); }
.text-indigo-500 { color: var(--color-indigo-500); }
.text-indigo-600 { color: var(--color-indigo-600); }
.text-indigo-700 { color: var(--color-indigo-700); }
.text-indigo-800 { color: var(--color-indigo-800); }
.text-indigo-900 { color: var(--color-indigo-900); }
.text-indigo-950 { color: var(--color-indigo-950); }
.text-violet-50 { color: var(--color-violet-50); }
.text-violet-100 { color: var(--color-violet-100); }
.text-violet-200 { color: var(--color-violet-200); }
.text-violet-300 { color: var(--color-violet-300); }
.text-violet-400 { color: var(--color-violet-400); }
.text-violet-500 { color: var(--color-violet-500); }
.text-violet-600 { color: var(--color-violet-600); }
.text-violet-700 { color: var(--color-violet-700); }
.text-violet-800 { color: var(--color-violet-800); }
.text-violet-900 { color: var(--color-violet-900); }
.text-violet-950 { color: var(--color-violet-950); }
.text-purple-50 { color: var(--color-purple-50); }
.text-purple-100 { color: var(--color-purple-100); }
.text-purple-200 { color: var(--color-purple-200); }
.text-purple-300 { color: var(--color-purple-300); }
.text-purple-400 { color: var(--color-purple-400); }
.text-purple-500 { color: var(--color-purple-500); }
.text-purple-600 { color: var(--color-purple-600); }
.text-purple-700 { color: var(--color-purple-700); }
.text-purple-800 { color: var(--color-purple-800); }
.text-purple-900 { color: var(--color-purple-900); }
.text-purple-950 { color: var(--color-purple-950); }
.text-fuchsia-50 { color: var(--color-fuchsia-50); }
.text-fuchsia-100 { color: var(--color-fuchsia-100); }
.text-fuchsia-200 { color: var(--color-fuchsia-200); }
.text-fuchsia-300 { color: var(--color-fuchsia-300); }
.text-fuchsia-400 { color: var(--color-fuchsia-400); }
.text-fuchsia-500 { color: var(--color-fuchsia-500); }
.text-fuchsia-600 { color: var(--color-fuchsia-600); }
.text-fuchsia-700 { color: var(--color-fuchsia-700); }
.text-fuchsia-800 { color: var(--color-fuchsia-800); }
.text-fuchsia-900 { color: var(--color-fuchsia-900); }
.text-fuchsia-950 { color: var(--color-fuchsia-950); }
.text-pink-50 { color: var(--color-pink-50); }
.text-pink-100 { color: var(--color-pink-100); }
.text-pink-200 { color: var(--color-pink-200); }
.text-pink-300 { color: var(--color-pink-300); }
.text-pink-400 { color: var(--color-pink-400); }
.text-pink-500 { color: var(--color-pink-500); }
.text-pink-600 { color: var(--color-pink-600); }
.text-pink-700 { color: var(--color-pink-700); }
.text-pink-800 { color: var(--color-pink-800); }
.text-pink-900 { color: var(--color-pink-900); }
.text-pink-950 { color: var(--color-pink-950); }
.text-rose-50 { color: var(--color-rose-50); }
.text-rose-100 { color: var(--color-rose-100); }
.text-rose-200 { color: var(--color-rose-200); }
.text-rose-300 { color: var(--color-rose-300); }
.text-rose-400 { color: var(--color-rose-400); }
.text-rose-500 { color: var(--color-rose-500); }
.text-rose-600 { color: var(--color-rose-600); }
.text-rose-700 { color: var(--color-rose-700); }
.text-rose-800 { color: var(--color-rose-800); }
.text-rose-900 { color: var(--color-rose-900); }
.text-rose-950 { color: var(--color-rose-950); }
.text-slate-50 { color: var(--color-slate-50); }
.text-slate-100 { color: var(--color-slate-100); }
.text-slate-200 { color: var(--color-slate-200); }
.text-slate-300 { color: var(--color-slate-300); }
.text-slate-400 { color: var(--color-slate-400); }
.text-slate-500 { color: var(--color-slate-500); }
.text-slate-600 { color: var(--color-slate-600); }
.text-slate-700 { color: var(--color-slate-700); }
.text-slate-800 { color: var(--color-slate-800); }
.text-slate-900 { color: var(--color-slate-900); }
.text-slate-950 { color: var(--color-slate-950); }
.text-gray-50 { color: var(--color-gray-50); }
.text-gray-100 { color: var(--color-gray-100); }
.text-gray-200 { color: var(--color-gray-200); }
.text-gray-300 { color: var(--color-gray-300); }
.text-gray-400 { color: var(--color-gray-400); }
.text-gray-500 { color: var(--color-gray-500); }
.text-gray-600 { color: var(--color-gray-600); }
.text-gray-700 { color: var(--color-gray-700); }
.text-gray-800 { color: var(--color-gray-800); }
.text-gray-900 { color: var(--color-gray-900); }
.text-gray-950 { color: var(--color-gray-950); }
.text-stone-50 { color: var(--color-stone-50); }
.text-stone-100 { color: var(--color-stone-100); }
.text-stone-200 { color: var(--color-stone-200); }
.text-stone-300 { color: var(--color-stone-300); }
.text-stone-400 { color: var(--color-stone-400); }
.text-stone-500 { color: var(--color-stone-500); }
.text-stone-600 { color: var(--color-stone-600); }
.text-stone-700 { color: var(--color-stone-700); }
.text-stone-800 { color: var(--color-stone-800); }
.text-stone-900 { color: var(--color-stone-900); }
.text-stone-950 { color: var(--color-stone-950); }
/*Background Colors*/
.bg-red-50 { background-color: var(--color-red-50); }
.bg-red-100 { background-color: var(--color-red-100); }
.bg-red-200 { background-color: var(--color-red-200); }
.bg-red-300 { background-color: var(--color-red-300); }
.bg-red-400 { background-color: var(--color-red-400); }
.bg-red-500 { background-color: var(--color-red-500); }
.bg-red-600 { background-color: var(--color-red-600); }
.bg-red-700 { background-color: var(--color-red-700); }
.bg-red-800 { background-color: var(--color-red-800); }
.bg-red-900 { background-color: var(--color-red-900); }
.bg-red-950 { background-color: var(--color-red-950); }
.bg-orange-50 { background-color: var(--color-orange-50); }
.bg-orange-100 { background-color: var(--color-orange-100); }
.bg-orange-200 { background-color: var(--color-orange-200); }
.bg-orange-300 { background-color: var(--color-orange-300); }
.bg-orange-400 { background-color: var(--color-orange-400); }
.bg-orange-500 { background-color: var(--color-orange-500); }
.bg-orange-600 { background-color: var(--color-orange-600); }
.bg-orange-700 { background-color: var(--color-orange-700); }
.bg-orange-800 { background-color: var(--color-orange-800); }
.bg-orange-900 { background-color: var(--color-orange-900); }
.bg-orange-950 { background-color: var(--color-orange-950); }
.bg-amber-50 { background-color: var(--color-amber-50); }
.bg-amber-100 { background-color: var(--color-amber-100); }
.bg-amber-200 { background-color: var(--color-amber-200); }
.bg-amber-300 { background-color: var(--color-amber-300); }
.bg-amber-400 { background-color: var(--color-amber-400); }
.bg-amber-500 { background-color: var(--color-amber-500); }
.bg-amber-600 { background-color: var(--color-amber-600); }
.bg-amber-700 { background-color: var(--color-amber-700); }
.bg-amber-800 { background-color: var(--color-amber-800); }
.bg-amber-900 { background-color: var(--color-amber-900); }
.bg-amber-950 { background-color: var(--color-amber-950); }
.bg-yellow-50 { background-color: var(--color-yellow-50); }
.bg-yellow-100 { background-color: var(--color-yellow-100); }
.bg-yellow-200 { background-color: var(--color-yellow-200); }
.bg-yellow-300 { background-color: var(--color-yellow-300); }
.bg-yellow-400 { background-color: var(--color-yellow-400); }
.bg-yellow-500 { background-color: var(--color-yellow-500); }
.bg-yellow-600 { background-color: var(--color-yellow-600); }
.bg-yellow-700 { background-color: var(--color-yellow-700); }
.bg-yellow-800 { background-color: var(--color-yellow-800); }
.bg-yellow-900 { background-color: var(--color-yellow-900); }
.bg-yellow-950 { background-color: var(--color-yellow-950); }
.bg-lime-50 { background-color: var(--color-lime-50); }
.bg-lime-100 { background-color: var(--color-lime-100); }
.bg-lime-200 { background-color: var(--color-lime-200); }
.bg-lime-300 { background-color: var(--color-lime-300); }
.bg-lime-400 { background-color: var(--color-lime-400); }
.bg-lime-500 { background-color: var(--color-lime-500); }
.bg-lime-600 { background-color: var(--color-lime-600); }
.bg-lime-700 { background-color: var(--color-lime-700); }
.bg-lime-800 { background-color: var(--color-lime-800); }
.bg-lime-900 { background-color: var(--color-lime-900); }
.bg-lime-950 { background-color: var(--color-lime-950); }
.bg-green-50 { background-color: var(--color-green-50); }
.bg-green-100 { background-color: var(--color-green-100); }
.bg-green-200 { background-color: var(--color-green-200); }
.bg-green-300 { background-color: var(--color-green-300); }
.bg-green-400 { background-color: var(--color-green-400); }
.bg-green-500 { background-color: var(--color-green-500); }
.bg-green-600 { background-color: var(--color-green-600); }
.bg-green-700 { background-color: var(--color-green-700); }
.bg-green-800 { background-color: var(--color-green-800); }
.bg-green-900 { background-color: var(--color-green-900); }
.bg-green-950 { background-color: var(--color-green-950); }
.bg-emerald-50 { background-color: var(--color-emerald-50); }
.bg-emerald-100 { background-color: var(--color-emerald-100); }
.bg-emerald-200 { background-color: var(--color-emerald-200); }
.bg-emerald-300 { background-color: var(--color-emerald-300); }
.bg-emerald-400 { background-color: var(--color-emerald-400); }
.bg-emerald-500 { background-color: var(--color-emerald-500); }
.bg-emerald-600 { background-color: var(--color-emerald-600); }
.bg-emerald-700 { background-color: var(--color-emerald-700); }
.bg-emerald-800 { background-color: var(--color-emerald-800); }
.bg-emerald-900 { background-color: var(--color-emerald-900); }
.bg-emerald-950 { background-color: var(--color-emerald-950); }
.bg-teal-50 { background-color: var(--color-teal-50); }
.bg-teal-100 { background-color: var(--color-teal-100); }
.bg-teal-200 { background-color: var(--color-teal-200); }
.bg-teal-300 { background-color: var(--color-teal-300); }
.bg-teal-400 { background-color: var(--color-teal-400); }
.bg-teal-500 { background-color: var(--color-teal-500); }
.bg-teal-600 { background-color: var(--color-teal-600); }
.bg-teal-700 { background-color: var(--color-teal-700); }
.bg-teal-800 { background-color: var(--color-teal-800); }
.bg-teal-900 { background-color: var(--color-teal-900); }
.bg-teal-950 { background-color: var(--color-teal-950); }
.bg-cyan-50 { background-color: var(--color-cyan-50); }
.bg-cyan-100 { background-color: var(--color-cyan-100); }
.bg-cyan-200 { background-color: var(--color-cyan-200); }
.bg-cyan-300 { background-color: var(--color-cyan-300); }
.bg-cyan-400 { background-color: var(--color-cyan-400); }
.bg-cyan-500 { background-color: var(--color-cyan-500); }
.bg-cyan-600 { background-color: var(--color-cyan-600); }
.bg-cyan-700 { background-color: var(--color-cyan-700); }
.bg-cyan-800 { background-color: var(--color-cyan-800); }
.bg-cyan-900 { background-color: var(--color-cyan-900); }
.bg-cyan-950 { background-color: var(--color-cyan-950); }
.bg-sky-50 { background-color: var(--color-sky-50); }
.bg-sky-100 { background-color: var(--color-sky-100); }
.bg-sky-200 { background-color: var(--color-sky-200); }
.bg-sky-300 { background-color: var(--color-sky-300); }
.bg-sky-400 { background-color: var(--color-sky-400); }
.bg-sky-500 { background-color: var(--color-sky-500); }
.bg-sky-600 { background-color: var(--color-sky-600); }
.bg-sky-700 { background-color: var(--color-sky-700); }
.bg-sky-800 { background-color: var(--color-sky-800); }
.bg-sky-900 { background-color: var(--color-sky-900); }
.bg-sky-950 { background-color: var(--color-sky-950); }
.bg-blue-50 { background-color: var(--color-blue-50); }
.bg-blue-100 { background-color: var(--color-blue-100); }
.bg-blue-200 { background-color: var(--color-blue-200); }
.bg-blue-300 { background-color: var(--color-blue-300); }
.bg-blue-400 { background-color: var(--color-blue-400); }
.bg-blue-500 { background-color: var(--color-blue-500); }
.bg-blue-600 { background-color: var(--color-blue-600); }
.bg-blue-700 { background-color: var(--color-blue-700); }
.bg-blue-800 { background-color: var(--color-blue-800); }
.bg-blue-900 { background-color: var(--color-blue-900); }
.bg-blue-950 { background-color: var(--color-blue-950); }
.bg-indigo-50 { background-color: var(--color-indigo-50); }
.bg-indigo-100 { background-color: var(--color-indigo-100); }
.bg-indigo-200 { background-color: var(--color-indigo-200); }
.bg-indigo-300 { background-color: var(--color-indigo-300); }
.bg-indigo-400 { background-color: var(--color-indigo-400); }
.bg-indigo-500 { background-color: var(--color-indigo-500); }
.bg-indigo-600 { background-color: var(--color-indigo-600); }
.bg-indigo-700 { background-color: var(--color-indigo-700); }
.bg-indigo-800 { background-color: var(--color-indigo-800); }
.bg-indigo-900 { background-color: var(--color-indigo-900); }
.bg-indigo-950 { background-color: var(--color-indigo-950); }
.bg-violet-50 { background-color: var(--color-violet-50); }
.bg-violet-100 { background-color: var(--color-violet-100); }
.bg-violet-200 { background-color: var(--color-violet-200); }
.bg-violet-300 { background-color: var(--color-violet-300); }
.bg-violet-400 { background-color: var(--color-violet-400); }
.bg-violet-500 { background-color: var(--color-violet-500); }
.bg-violet-600 { background-color: var(--color-violet-600); }
.bg-violet-700 { background-color: var(--color-violet-700); }
.bg-violet-800 { background-color: var(--color-violet-800); }
.bg-violet-900 { background-color: var(--color-violet-900); }
.bg-violet-950 { background-color: var(--color-violet-950); }
.bg-purple-50 { background-color: var(--color-purple-50); }
.bg-purple-100 { background-color: var(--color-purple-100); }
.bg-purple-200 { background-color: var(--color-purple-200); }
.bg-purple-300 { background-color: var(--color-purple-300); }
.bg-purple-400 { background-color: var(--color-purple-400); }
.bg-purple-500 { background-color: var(--color-purple-500); }
.bg-purple-600 { background-color: var(--color-purple-600); }
.bg-purple-700 { background-color: var(--color-purple-700); }
.bg-purple-800 { background-color: var(--color-purple-800); }
.bg-purple-900 { background-color: var(--color-purple-900); }
.bg-purple-950 { background-color: var(--color-purple-950); }
.bg-fuchsia-50 { background-color: var(--color-fuchsia-50); }
.bg-fuchsia-100 { background-color: var(--color-fuchsia-100); }
.bg-fuchsia-200 { background-color: var(--color-fuchsia-200); }
.bg-fuchsia-300 { background-color: var(--color-fuchsia-300); }
.bg-fuchsia-400 { background-color: var(--color-fuchsia-400); }
.bg-fuchsia-500 { background-color: var(--color-fuchsia-500); }
.bg-fuchsia-600 { background-color: var(--color-fuchsia-600); }
.bg-fuchsia-700 { background-color: var(--color-fuchsia-700); }
.bg-fuchsia-800 { background-color: var(--color-fuchsia-800); }
.bg-fuchsia-900 { background-color: var(--color-fuchsia-900); }
.bg-fuchsia-950 { background-color: var(--color-fuchsia-950); }
.bg-pink-50 { background-color: var(--color-pink-50); }
.bg-pink-100 { background-color: var(--color-pink-100); }
.bg-pink-200 { background-color: var(--color-pink-200); }
.bg-pink-300 { background-color: var(--color-pink-300); }
.bg-pink-400 { background-color: var(--color-pink-400); }
.bg-pink-500 { background-color: var(--color-pink-500); }
.bg-pink-600 { background-color: var(--color-pink-600); }
.bg-pink-700 { background-color: var(--color-pink-700); }
.bg-pink-800 { background-color: var(--color-pink-800); }
.bg-pink-900 { background-color: var(--color-pink-900); }
.bg-pink-950 { background-color: var(--color-pink-950); }
.bg-rose-50 { background-color: var(--color-rose-50); }
.bg-rose-100 { background-color: var(--color-rose-100); }
.bg-rose-200 { background-color: var(--color-rose-200); }
.bg-rose-300 { background-color: var(--color-rose-300); }
.bg-rose-400 { background-color: var(--color-rose-400); }
.bg-rose-500 { background-color: var(--color-rose-500); }
.bg-rose-600 { background-color: var(--color-rose-600); }
.bg-rose-700 { background-color: var(--color-rose-700); }
.bg-rose-800 { background-color: var(--color-rose-800); }
.bg-rose-900 { background-color: var(--color-rose-900); }
.bg-rose-950 { background-color: var(--color-rose-950); }
.bg-slate-50 { background-color: var(--color-slate-50); }
.bg-slate-100 { background-color: var(--color-slate-100); }
.bg-slate-200 { background-color: var(--color-slate-200); }
.bg-slate-300 { background-color: var(--color-slate-300); }
.bg-slate-400 { background-color: var(--color-slate-400); }
.bg-slate-500 { background-color: var(--color-slate-500); }
.bg-slate-600 { background-color: var(--color-slate-600); }
.bg-slate-700 { background-color: var(--color-slate-700); }
.bg-slate-800 { background-color: var(--color-slate-800); }
.bg-slate-900 { background-color: var(--color-slate-900); }
.bg-slate-950 { background-color: var(--color-slate-950); }
.bg-gray-50 { background-color: var(--color-gray-50); }
.bg-gray-100 { background-color: var(--color-gray-100); }
.bg-gray-200 { background-color: var(--color-gray-200); }
.bg-gray-300 { background-color: var(--color-gray-300); }
.bg-gray-400 { background-color: var(--color-gray-400); }
.bg-gray-500 { background-color: var(--color-gray-500); }
.bg-gray-600 { background-color: var(--color-gray-600); }
.bg-gray-700 { background-color: var(--color-gray-700); }
.bg-gray-800 { background-color: var(--color-gray-800); }
.bg-gray-900 { background-color: var(--color-gray-900); }
.bg-gray-950 { background-color: var(--color-gray-950); }
.bg-stone-50 { background-color: var(--color-stone-50); }
.bg-stone-100 { background-color: var(--color-stone-100); }
.bg-stone-200 { background-color: var(--color-stone-200); }
.bg-stone-300 { background-color: var(--color-stone-300); }
.bg-stone-400 { background-color: var(--color-stone-400); }
.bg-stone-500 { background-color: var(--color-stone-500); }
.bg-stone-600 { background-color: var(--color-stone-600); }
.bg-stone-700 { background-color: var(--color-stone-700); }
.bg-stone-800 { background-color: var(--color-stone-800); }
.bg-stone-900 { background-color: var(--color-stone-900); }
.bg-stone-950 { background-color: var(--color-stone-950); }
/* Tailwind base imports */
*, ::before, ::after {
  --tw-border-spacing-x: 0;
  --tw-border-spacing-y: 0;
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  --tw-pan-x:  ;
  --tw-pan-y:  ;
  --tw-pinch-zoom:  ;
  --tw-scroll-snap-strictness: proximity;
  --tw-gradient-from-position:  ;
  --tw-gradient-via-position:  ;
  --tw-gradient-to-position:  ;
  --tw-ordinal:  ;
  --tw-slashed-zero:  ;
  --tw-numeric-figure:  ;
  --tw-numeric-spacing:  ;
  --tw-numeric-fraction:  ;
  --tw-ring-inset:  ;
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: rgb(47 111 228 / 0.5);
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow: 0 0 #0000;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  --tw-blur:  ;
  --tw-brightness:  ;
  --tw-contrast:  ;
  --tw-grayscale:  ;
  --tw-hue-rotate:  ;
  --tw-invert:  ;
  --tw-saturate:  ;
  --tw-sepia:  ;
  --tw-drop-shadow:  ;
  --tw-backdrop-blur:  ;
  --tw-backdrop-brightness:  ;
  --tw-backdrop-contrast:  ;
  --tw-backdrop-grayscale:  ;
  --tw-backdrop-hue-rotate:  ;
  --tw-backdrop-invert:  ;
  --tw-backdrop-opacity:  ;
  --tw-backdrop-saturate:  ;
  --tw-backdrop-sepia:  ;
  --tw-contain-size:  ;
  --tw-contain-layout:  ;
  --tw-contain-paint:  ;
  --tw-contain-style:  ;
}
::-ms-backdrop {
  --tw-border-spacing-x: 0;
  --tw-border-spacing-y: 0;
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  --tw-pan-x:  ;
  --tw-pan-y:  ;
  --tw-pinch-zoom:  ;
  --tw-scroll-snap-strictness: proximity;
  --tw-gradient-from-position:  ;
  --tw-gradient-via-position:  ;
  --tw-gradient-to-position:  ;
  --tw-ordinal:  ;
  --tw-slashed-zero:  ;
  --tw-numeric-figure:  ;
  --tw-numeric-spacing:  ;
  --tw-numeric-fraction:  ;
  --tw-ring-inset:  ;
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: rgb(47 111 228 / 0.5);
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow: 0 0 #0000;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  --tw-blur:  ;
  --tw-brightness:  ;
  --tw-contrast:  ;
  --tw-grayscale:  ;
  --tw-hue-rotate:  ;
  --tw-invert:  ;
  --tw-saturate:  ;
  --tw-sepia:  ;
  --tw-drop-shadow:  ;
  --tw-backdrop-blur:  ;
  --tw-backdrop-brightness:  ;
  --tw-backdrop-contrast:  ;
  --tw-backdrop-grayscale:  ;
  --tw-backdrop-hue-rotate:  ;
  --tw-backdrop-invert:  ;
  --tw-backdrop-opacity:  ;
  --tw-backdrop-saturate:  ;
  --tw-backdrop-sepia:  ;
  --tw-contain-size:  ;
  --tw-contain-layout:  ;
  --tw-contain-paint:  ;
  --tw-contain-style:  ;
}
::backdrop {
  --tw-border-spacing-x: 0;
  --tw-border-spacing-y: 0;
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  --tw-pan-x:  ;
  --tw-pan-y:  ;
  --tw-pinch-zoom:  ;
  --tw-scroll-snap-strictness: proximity;
  --tw-gradient-from-position:  ;
  --tw-gradient-via-position:  ;
  --tw-gradient-to-position:  ;
  --tw-ordinal:  ;
  --tw-slashed-zero:  ;
  --tw-numeric-figure:  ;
  --tw-numeric-spacing:  ;
  --tw-numeric-fraction:  ;
  --tw-ring-inset:  ;
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: rgb(47 111 228 / 0.5);
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow: 0 0 #0000;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  --tw-blur:  ;
  --tw-brightness:  ;
  --tw-contrast:  ;
  --tw-grayscale:  ;
  --tw-hue-rotate:  ;
  --tw-invert:  ;
  --tw-saturate:  ;
  --tw-sepia:  ;
  --tw-drop-shadow:  ;
  --tw-backdrop-blur:  ;
  --tw-backdrop-brightness:  ;
  --tw-backdrop-contrast:  ;
  --tw-backdrop-grayscale:  ;
  --tw-backdrop-hue-rotate:  ;
  --tw-backdrop-invert:  ;
  --tw-backdrop-opacity:  ;
  --tw-backdrop-saturate:  ;
  --tw-backdrop-sepia:  ;
  --tw-contain-size:  ;
  --tw-contain-layout:  ;
  --tw-contain-paint:  ;
  --tw-contain-style:  ;
}
/* ! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com *//*
1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
*/

*,
::before,
::after {
  -webkit-box-sizing: border-box;
  box-sizing: border-box; /* 1 */
  border-width: 0; /* 2 */
  border-style: solid; /* 2 */
  border-color: #dee1e6; /* 2 */
}

::before,
::after {
  --tw-content: '';
}

/*
1. Use a consistent sensible line-height in all browsers.
2. Prevent adjustments of font size after orientation changes in iOS.
3. Use a more readable tab size.
4. Use the user's configured `sans` font-family by default.
5. Use the user's configured `sans` font-feature-settings by default.
6. Use the user's configured `sans` font-variation-settings by default.
7. Disable tap highlights on iOS
*/

html,
:host {
  line-height: 1.5; /* 1 */
  -webkit-text-size-adjust: 100%; /* 2 */
  -moz-tab-size: 4; /* 3 */
  -o-tab-size: 4;
  tab-size: 4; /* 3 */
  font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */
  -webkit-font-feature-settings: normal;
  font-feature-settings: normal; /* 5 */
  font-variation-settings: normal; /* 6 */
  -webkit-tap-highlight-color: transparent; /* 7 */
}

/*
1. Remove the margin in all browsers.
2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
*/

body {
  margin: 0; /* 1 */
  line-height: inherit; /* 2 */
}

/*
1. Add the correct height in Firefox.
2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
3. Ensure horizontal rules are visible by default.
*/

hr {
  height: 0; /* 1 */
  color: inherit; /* 2 */
  border-top-width: 1px; /* 3 */
}

/*
Add the correct text decoration in Chrome, Edge, and Safari.
*/

abbr:where([title]) {
  -webkit-text-decoration: underline dotted;
  text-decoration: underline dotted;
}

/*
Remove the default font size and weight for headings.
*/

h1,
h2,
h3,
h4,
h5,
h6 {
  font-size: inherit;
  font-weight: inherit;
}

/*
Reset links to optimize for opt-in styling instead of opt-out.
*/

a {
  color: inherit;
  text-decoration: inherit;
}

/*
Add the correct font weight in Edge and Safari.
*/

b,
strong {
  font-weight: bolder;
}

/*
1. Use the user's configured `mono` font-family by default.
2. Use the user's configured `mono` font-feature-settings by default.
3. Use the user's configured `mono` font-variation-settings by default.
4. Correct the odd `em` font sizing in all browsers.
*/

code,
kbd,
samp,
pre {
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */
  -webkit-font-feature-settings: normal;
  font-feature-settings: normal; /* 2 */
  font-variation-settings: normal; /* 3 */
  font-size: 1em; /* 4 */
}

/*
Add the correct font size in all browsers.
*/

small {
  font-size: 80%;
}

/*
Prevent `sub` and `sup` elements from affecting the line height in all browsers.
*/

sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}

sub {
  bottom: -0.25em;
}

sup {
  top: -0.5em;
}

/*
1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
3. Remove gaps between table borders by default.
*/

table {
  text-indent: 0; /* 1 */
  border-color: inherit; /* 2 */
  border-collapse: collapse; /* 3 */
}

/*
1. Change the font styles in all browsers.
2. Remove the margin in Firefox and Safari.
3. Remove default padding in all browsers.
*/

button,
input,
optgroup,
select,
textarea {
  font-family: inherit; /* 1 */
  -webkit-font-feature-settings: inherit;
  font-feature-settings: inherit; /* 1 */
  font-variation-settings: inherit; /* 1 */
  font-size: 100%; /* 1 */
  font-weight: inherit; /* 1 */
  line-height: inherit; /* 1 */
  letter-spacing: inherit; /* 1 */
  color: inherit; /* 1 */
  margin: 0; /* 2 */
  padding: 0; /* 3 */
}

/*
Remove the inheritance of text transform in Edge and Firefox.
*/

button,
select {
  text-transform: none;
}

/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Remove default button styles.
*/

button,
input:where([type='button']),
input:where([type='reset']),
input:where([type='submit']) {
  -webkit-appearance: button; /* 1 */
  background-color: transparent; /* 2 */
  background-image: none; /* 2 */
}

/*
Use the modern Firefox focus style for all focusable elements.
*/

:-moz-focusring {
  outline: auto;
}

/*
Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
*/

:-moz-ui-invalid {
  box-shadow: none;
}

/*
Add the correct vertical alignment in Chrome and Firefox.
*/

progress {
  vertical-align: baseline;
}

/*
Correct the cursor style of increment and decrement buttons in Safari.
*/

::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
  height: auto;
}

/*
1. Correct the odd appearance in Chrome and Safari.
2. Correct the outline style in Safari.
*/

[type='search'] {
  -webkit-appearance: textfield; /* 1 */
  outline-offset: -2px; /* 2 */
}

/*
Remove the inner padding in Chrome and Safari on macOS.
*/

::-webkit-search-decoration {
  -webkit-appearance: none;
}

/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Change font properties to `inherit` in Safari.
*/

::-webkit-file-upload-button {
  -webkit-appearance: button; /* 1 */
  font: inherit; /* 2 */
}

/*
Add the correct display in Chrome and Safari.
*/

summary {
  display: list-item;
}

/*
Removes the default spacing and border for appropriate elements.
*/

blockquote,
dl,
dd,
h1,
h2,
h3,
h4,
h5,
h6,
hr,
figure,
p,
pre {
  margin: 0;
}

fieldset {
  margin: 0;
  padding: 0;
}

legend {
  padding: 0;
}

ol,
ul,
menu {
  list-style: none;
  margin: 0;
  padding: 0;
}

/*
Reset default styling for dialogs.
*/
dialog {
  padding: 0;
}

/*
Prevent resizing textareas horizontally by default.
*/

textarea {
  resize: vertical;
}

/*
1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
2. Set the default placeholder color to the user's configured gray 400 color.
*/

input::-webkit-input-placeholder, textarea::-webkit-input-placeholder {
  opacity: 1; /* 1 */
  color: #9196a4; /* 2 */
}

input::-moz-placeholder, textarea::-moz-placeholder {
  opacity: 1; /* 1 */
  color: #9196a4; /* 2 */
}

input:-ms-input-placeholder, textarea:-ms-input-placeholder {
  opacity: 1; /* 1 */
  color: #9196a4; /* 2 */
}

input::-ms-input-placeholder, textarea::-ms-input-placeholder {
  opacity: 1; /* 1 */
  color: #9196a4; /* 2 */
}

input::placeholder,
textarea::placeholder {
  opacity: 1; /* 1 */
  color: #9196a4; /* 2 */
}

/*
Set the default cursor for buttons.
*/

button,
[role="button"] {
  cursor: pointer;
}

/*
Make sure disabled buttons don't get the pointer cursor.
*/
:disabled {
  cursor: default;
}

/*
1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
   This can trigger a poorly considered lint error in some tools but is included by design.
*/

img,
svg,
video,
canvas,
audio,
iframe,
embed,
object {
  display: block; /* 1 */
  vertical-align: middle; /* 2 */
}

/*
Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
*/

img,
video {
  max-width: 100%;
  height: auto;
}

/* Make elements with the HTML hidden attribute stay hidden by default */
[hidden]:where(:not([hidden="until-found"])) {
  display: none;
}
input:where([type='text']),input:where(:not([type])),input:where([type='email']),input:where([type='url']),input:where([type='password']),input:where([type='number']),input:where([type='date']),input:where([type='datetime-local']),input:where([type='month']),input:where([type='search']),input:where([type='tel']),input:where([type='time']),input:where([type='week']),select:where([multiple]),textarea,select {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  background-color: #fff;
  border-color: #5c5f6b;
  border-width: 1px;
  border-radius: 0px;
  padding-top: 0.5rem;
  padding-right: 0.75rem;
  padding-bottom: 0.5rem;
  padding-left: 0.75rem;
  font-size: 1rem;
  line-height: 1.5rem;
  --tw-shadow: 0 0 #0000;
}
input:where([type='text']):focus, input:where(:not([type])):focus, input:where([type='email']):focus, input:where([type='url']):focus, input:where([type='password']):focus, input:where([type='number']):focus, input:where([type='date']):focus, input:where([type='datetime-local']):focus, input:where([type='month']):focus, input:where([type='search']):focus, input:where([type='tel']):focus, input:where([type='time']):focus, input:where([type='week']):focus, select:where([multiple]):focus, textarea:focus, select:focus {
  outline: 2px solid transparent;
  outline-offset: 2px;
  --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: #2058c1;
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
  border-color: #2058c1;
}
input::-webkit-input-placeholder, textarea::-webkit-input-placeholder {
  color: #5c5f6b;
  opacity: 1;
}
input::-moz-placeholder, textarea::-moz-placeholder {
  color: #5c5f6b;
  opacity: 1;
}
input:-ms-input-placeholder, textarea:-ms-input-placeholder {
  color: #5c5f6b;
  opacity: 1;
}
input::-ms-input-placeholder, textarea::-ms-input-placeholder {
  color: #5c5f6b;
  opacity: 1;
}
input::placeholder,textarea::placeholder {
  color: #5c5f6b;
  opacity: 1;
}
::-webkit-datetime-edit-fields-wrapper {
  padding: 0;
}
::-webkit-date-and-time-value {
  min-height: 1.5em;
  text-align: inherit;
}
::-webkit-datetime-edit {
  display: -webkit-inline-box;
  display: inline-flex;
}
::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field {
  padding-top: 0;
  padding-bottom: 0;
}
select {
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%235c5f6b' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
  background-position: right 0.5rem center;
  background-repeat: no-repeat;
  background-size: 1.5em 1.5em;
  padding-right: 2.5rem;
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
}
select:where([multiple]),select:where([size]:not([size="1"])) {
  background-image: initial;
  background-position: initial;
  background-repeat: unset;
  background-size: initial;
  padding-right: 0.75rem;
  -webkit-print-color-adjust: unset;
  print-color-adjust: unset;
}
input:where([type='checkbox']),input:where([type='radio']) {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  padding: 0;
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
  display: inline-block;
  vertical-align: middle;
  background-origin: border-box;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  height: 1rem;
  width: 1rem;
  color: #2058c1;
  background-color: #fff;
  border-color: #5c5f6b;
  border-width: 1px;
  --tw-shadow: 0 0 #0000;
}
input:where([type='checkbox']) {
  border-radius: 0px;
}
input:where([type='radio']) {
  border-radius: 100%;
}
input:where([type='checkbox']):focus,input:where([type='radio']):focus {
  outline: 2px solid transparent;
  outline-offset: 2px;
  --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);
  --tw-ring-offset-width: 2px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: #2058c1;
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}
input:where([type='checkbox']):checked,input:where([type='radio']):checked {
  border-color: transparent;
  background-color: currentColor;
  background-size: 100% 100%;
  background-position: center;
  background-repeat: no-repeat;
}
input:where([type='checkbox']):checked {
  background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e");
}
@media (forced-colors: active)  {
  input:where([type='checkbox']):checked {
    -webkit-appearance: auto;
    -moz-appearance: auto;
    appearance: auto;
  }
}
input:where([type='radio']):checked {
  background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e");
}
@media (forced-colors: active)  {
  input:where([type='radio']):checked {
    -webkit-appearance: auto;
    -moz-appearance: auto;
    appearance: auto;
  }
}
input:where([type='checkbox']):checked:hover,input:where([type='checkbox']):checked:focus,input:where([type='radio']):checked:hover,input:where([type='radio']):checked:focus {
  border-color: transparent;
  background-color: currentColor;
}
input:where([type='checkbox']):indeterminate {
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");
  border-color: transparent;
  background-color: currentColor;
  background-size: 100% 100%;
  background-position: center;
  background-repeat: no-repeat;
}
@media (forced-colors: active)  {
  input:where([type='checkbox']):indeterminate {
    -webkit-appearance: auto;
    -moz-appearance: auto;
    appearance: auto;
  }
}
input:where([type='checkbox']):indeterminate:hover,input:where([type='checkbox']):indeterminate:focus {
  border-color: transparent;
  background-color: currentColor;
}
input:where([type='file']) {
  background: unset;
  border-color: inherit;
  border-width: 0;
  border-radius: 0;
  padding: 0;
  font-size: unset;
  line-height: inherit;
}
input:where([type='file']):focus {
  outline: 1px solid ButtonText;
  outline: 1px auto -webkit-focus-ring-color;
}
* {
  scrollbar-color: initial;
  scrollbar-width: initial;
}
.\!container {
  width: 100% !important;
}
.container {
  width: 100%;
}
@media (min-width: 640px) {
  .\!container {
    max-width: 640px !important;
  }
  .container {
    max-width: 640px;
  }
}
@media (min-width: 768px) {
  .\!container {
    max-width: 768px !important;
  }
  .container {
    max-width: 768px;
  }
}
@media (min-width: 1024px) {
  .\!container {
    max-width: 1024px !important;
  }
  .container {
    max-width: 1024px;
  }
}
@media (min-width: 1280px) {
  .\!container {
    max-width: 1280px !important;
  }
  .container {
    max-width: 1280px;
  }
}
@media (min-width: 1536px) {
  .\!container {
    max-width: 1536px !important;
  }
  .container {
    max-width: 1536px;
  }
}
.prose {
  color: var(--tw-prose-body);
  max-width: 65ch;
}
.prose :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 1.25em;
  margin-bottom: 1.25em;
}
.prose :where([class~="lead"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-lead);
  font-size: 1.25em;
  line-height: 1.6;
  margin-top: 1.2em;
  margin-bottom: 1.2em;
}
.prose :where(a):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-links);
  text-decoration: underline;
  font-weight: 500;
}
.prose :where(strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-bold);
  font-weight: 600;
}
.prose :where(a strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: inherit;
}
.prose :where(blockquote strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: inherit;
}
.prose :where(thead th strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: inherit;
}
.prose :where(ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  list-style-type: decimal;
  margin-top: 1.25em;
  margin-bottom: 1.25em;
  -webkit-padding-start: 1.625em;
  padding-inline-start: 1.625em;
}
.prose :where(ol[type="A"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  list-style-type: upper-alpha;
}
.prose :where(ol[type="a"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  list-style-type: lower-alpha;
}
.prose :where(ol[type="A" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  list-style-type: upper-alpha;
}
.prose :where(ol[type="a" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  list-style-type: lower-alpha;
}
.prose :where(ol[type="I"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  list-style-type: upper-roman;
}
.prose :where(ol[type="i"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  list-style-type: lower-roman;
}
.prose :where(ol[type="I" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  list-style-type: upper-roman;
}
.prose :where(ol[type="i" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  list-style-type: lower-roman;
}
.prose :where(ol[type="1"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  list-style-type: decimal;
}
.prose :where(ul):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  list-style-type: disc;
  margin-top: 1.25em;
  margin-bottom: 1.25em;
  -webkit-padding-start: 1.625em;
  padding-inline-start: 1.625em;
}
.prose :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker {
  font-weight: 400;
  color: var(--tw-prose-counters);
}
.prose :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker {
  color: var(--tw-prose-bullets);
}
.prose :where(dt):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-headings);
  font-weight: 600;
  margin-top: 1.25em;
}
.prose :where(hr):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  border-color: var(--tw-prose-hr);
  border-top-width: 1px;
  margin-top: 3em;
  margin-bottom: 3em;
}
.prose :where(blockquote):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  font-weight: 500;
  font-style: italic;
  color: var(--tw-prose-quotes);
  border-inline-start-width: 0.25rem;
  border-inline-start-color: var(--tw-prose-quote-borders);
  quotes: "\201C""\201D""\2018""\2019";
  margin-top: 1.6em;
  margin-bottom: 1.6em;
  -webkit-padding-start: 1em;
  padding-inline-start: 1em;
}
.prose :where(blockquote p:first-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::before {
  content: open-quote;
}
.prose :where(blockquote p:last-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::after {
  content: close-quote;
}
.prose :where(h1):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-headings);
  font-weight: 800;
  font-size: 2.25em;
  margin-top: 0;
  margin-bottom: 0.8888889em;
  line-height: 1.1111111;
}
.prose :where(h1 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  font-weight: 900;
  color: inherit;
}
.prose :where(h2):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-headings);
  font-weight: 700;
  font-size: 1.5em;
  margin-top: 2em;
  margin-bottom: 1em;
  line-height: 1.3333333;
}
.prose :where(h2 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  font-weight: 800;
  color: inherit;
}
.prose :where(h3):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-headings);
  font-weight: 600;
  font-size: 1.25em;
  margin-top: 1.6em;
  margin-bottom: 0.6em;
  line-height: 1.6;
}
.prose :where(h3 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  font-weight: 700;
  color: inherit;
}
.prose :where(h4):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-headings);
  font-weight: 600;
  margin-top: 1.5em;
  margin-bottom: 0.5em;
  line-height: 1.5;
}
.prose :where(h4 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  font-weight: 700;
  color: inherit;
}
.prose :where(img):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 2em;
  margin-bottom: 2em;
}
.prose :where(picture):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  display: block;
  margin-top: 2em;
  margin-bottom: 2em;
}
.prose :where(video):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 2em;
  margin-bottom: 2em;
}
.prose :where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  font-weight: 500;
  font-family: inherit;
  color: var(--tw-prose-kbd);
  -webkit-box-shadow: 0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows);
  box-shadow: 0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows);
  font-size: 0.875em;
  border-radius: 0.3125rem;
  padding-top: 0.1875em;
  -webkit-padding-end: 0.375em;
  padding-inline-end: 0.375em;
  padding-bottom: 0.1875em;
  -webkit-padding-start: 0.375em;
  padding-inline-start: 0.375em;
}
.prose :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-code);
  font-weight: 600;
  font-size: 0.875em;
}
.prose :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before {
  content: "`";
}
.prose :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after {
  content: "`";
}
.prose :where(a code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: inherit;
}
.prose :where(h1 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: inherit;
}
.prose :where(h2 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: inherit;
  font-size: 0.875em;
}
.prose :where(h3 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: inherit;
  font-size: 0.9em;
}
.prose :where(h4 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: inherit;
}
.prose :where(blockquote code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: inherit;
}
.prose :where(thead th code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: inherit;
}
.prose :where(pre):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-pre-code);
  background-color: var(--tw-prose-pre-bg);
  overflow-x: auto;
  font-weight: 400;
  font-size: 0.875em;
  line-height: 1.7142857;
  margin-top: 1.7142857em;
  margin-bottom: 1.7142857em;
  border-radius: 0.375rem;
  padding-top: 0.8571429em;
  -webkit-padding-end: 1.1428571em;
  padding-inline-end: 1.1428571em;
  padding-bottom: 0.8571429em;
  -webkit-padding-start: 1.1428571em;
  padding-inline-start: 1.1428571em;
}
.prose :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  background-color: transparent;
  border-width: 0;
  border-radius: 0;
  padding: 0;
  font-weight: inherit;
  color: inherit;
  font-size: inherit;
  font-family: inherit;
  line-height: inherit;
}
.prose :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before {
  content: none;
}
.prose :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after {
  content: none;
}
.prose :where(table):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  width: 100%;
  table-layout: auto;
  margin-top: 2em;
  margin-bottom: 2em;
  font-size: 0.875em;
  line-height: 1.7142857;
}
.prose :where(thead):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  border-bottom-width: 1px;
  border-bottom-color: var(--tw-prose-th-borders);
}
.prose :where(thead th):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-headings);
  font-weight: 600;
  vertical-align: bottom;
  -webkit-padding-end: 0.5714286em;
  padding-inline-end: 0.5714286em;
  padding-bottom: 0.5714286em;
  -webkit-padding-start: 0.5714286em;
  padding-inline-start: 0.5714286em;
}
.prose :where(tbody tr):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  border-bottom-width: 1px;
  border-bottom-color: var(--tw-prose-td-borders);
}
.prose :where(tbody tr:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  border-bottom-width: 0;
}
.prose :where(tbody td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  vertical-align: baseline;
}
.prose :where(tfoot):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  border-top-width: 1px;
  border-top-color: var(--tw-prose-th-borders);
}
.prose :where(tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  vertical-align: top;
}
.prose :where(th, td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  text-align: start;
}
.prose :where(figure > *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 0;
  margin-bottom: 0;
}
.prose :where(figcaption):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-captions);
  font-size: 0.875em;
  line-height: 1.4285714;
  margin-top: 0.8571429em;
}
.prose {
  --tw-prose-body: #374151;
  --tw-prose-headings: #111827;
  --tw-prose-lead: #4b5563;
  --tw-prose-links: #111827;
  --tw-prose-bold: #111827;
  --tw-prose-counters: #6b7280;
  --tw-prose-bullets: #d1d5db;
  --tw-prose-hr: #e5e7eb;
  --tw-prose-quotes: #111827;
  --tw-prose-quote-borders: #e5e7eb;
  --tw-prose-captions: #6b7280;
  --tw-prose-kbd: #111827;
  --tw-prose-kbd-shadows: rgb(17 24 39 / 10%);
  --tw-prose-code: #111827;
  --tw-prose-pre-code: #e5e7eb;
  --tw-prose-pre-bg: #1f2937;
  --tw-prose-th-borders: #d1d5db;
  --tw-prose-td-borders: #e5e7eb;
  --tw-prose-invert-body: #d1d5db;
  --tw-prose-invert-headings: #fff;
  --tw-prose-invert-lead: #9ca3af;
  --tw-prose-invert-links: #fff;
  --tw-prose-invert-bold: #fff;
  --tw-prose-invert-counters: #9ca3af;
  --tw-prose-invert-bullets: #4b5563;
  --tw-prose-invert-hr: #374151;
  --tw-prose-invert-quotes: #f3f4f6;
  --tw-prose-invert-quote-borders: #374151;
  --tw-prose-invert-captions: #9ca3af;
  --tw-prose-invert-kbd: #fff;
  --tw-prose-invert-kbd-shadows: rgb(255 255 255 / 10%);
  --tw-prose-invert-code: #fff;
  --tw-prose-invert-pre-code: #d1d5db;
  --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);
  --tw-prose-invert-th-borders: #4b5563;
  --tw-prose-invert-td-borders: #374151;
  font-size: 1rem;
  line-height: 1.75;
}
.prose :where(picture > img):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 0;
  margin-bottom: 0;
}
.prose :where(li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 0.5em;
  margin-bottom: 0.5em;
}
.prose :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  -webkit-padding-start: 0.375em;
  padding-inline-start: 0.375em;
}
.prose :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  -webkit-padding-start: 0.375em;
  padding-inline-start: 0.375em;
}
.prose :where(.prose > ul > li p):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 0.75em;
  margin-bottom: 0.75em;
}
.prose :where(.prose > ul > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 1.25em;
}
.prose :where(.prose > ul > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-bottom: 1.25em;
}
.prose :where(.prose > ol > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 1.25em;
}
.prose :where(.prose > ol > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-bottom: 1.25em;
}
.prose :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 0.75em;
  margin-bottom: 0.75em;
}
.prose :where(dl):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 1.25em;
  margin-bottom: 1.25em;
}
.prose :where(dd):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 0.5em;
  -webkit-padding-start: 1.625em;
  padding-inline-start: 1.625em;
}
.prose :where(hr + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 0;
}
.prose :where(h2 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 0;
}
.prose :where(h3 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 0;
}
.prose :where(h4 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 0;
}
.prose :where(thead th:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  -webkit-padding-start: 0;
  padding-inline-start: 0;
}
.prose :where(thead th:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  -webkit-padding-end: 0;
  padding-inline-end: 0;
}
.prose :where(tbody td, tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  padding-top: 0.5714286em;
  -webkit-padding-end: 0.5714286em;
  padding-inline-end: 0.5714286em;
  padding-bottom: 0.5714286em;
  -webkit-padding-start: 0.5714286em;
  padding-inline-start: 0.5714286em;
}
.prose :where(tbody td:first-child, tfoot td:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  -webkit-padding-start: 0;
  padding-inline-start: 0;
}
.prose :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  -webkit-padding-end: 0;
  padding-inline-end: 0;
}
.prose :where(figure):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 2em;
  margin-bottom: 2em;
}
.prose :where(.prose > :first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 0;
}
.prose :where(.prose > :last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-bottom: 0;
}
  @-webkit-keyframes panel-item-flash {
    0%   { background-color: var(--bg-list-item-new-flash); }
    100% { background-color: var(--bg-list-item); }
  }
  @keyframes panel-item-flash {
    0%   { background-color: var(--bg-list-item-new-flash); }
    100% { background-color: var(--bg-list-item); }
  }
  @-webkit-keyframes panel-skeleton {
    0%   { -webkit-transform: translateX(-100%); transform: translateX(-100%); }
    100% { -webkit-transform: translateX(100%); transform: translateX(100%); }
  }
  @keyframes panel-skeleton {
    0%   { -webkit-transform: translateX(-100%); transform: translateX(-100%); }
    100% { -webkit-transform: translateX(100%); transform: translateX(100%); }
  }
::-moz-selection {
  padding: 0.5rem;   /* Tailwind p-2, written as plain CSS so the app can import this file (R4) */
  background-color: var(--bg-selection);
  color: var(--text-selection);
}
::selection {
  padding: 0.5rem;   /* Tailwind p-2, written as plain CSS so the app can import this file (R4) */
  background-color: var(--bg-selection);
  color: var(--text-selection);
}

a {
  display: block;   /* Tailwind block */
}

/* tq-8912 (A131; isabella r2.5, origin Enodia tq-8915): the DS focus ring is the DEFAULT for anything focusable (links had only
   the browser's own ring). Zero specificity (:where), so every component's own focus rule still wins. */
:where(a[href], button, summary, select, textarea, input, [tabindex]:not([tabindex="-1"])):focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: 2px;
}

/*CUSTOM COMPONENTS*/
.autoprefixer {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

#isDark:checked ~ label span.toggle-dot {
  -webkit-transform: translateX(1rem);
  -ms-transform: translateX(1rem);
  transform: translateX(1rem);   /* Tailwind translate-x-4; no #isDark or .toggle-dot exists in either tree */
}

/* ==========================================================================
   Z-INDEX SCALE
   ========================================================================== */

/* Per-record swatch — data colour flows through a custom property consumed here,
   so area/team/route dots never carry a raw colour in a paint property. Default
   seeds from the DS palette. (#5608) */
.ds-swatch { background-color: var(--swatch, var(--utility-indigo-500)); }

:root {
  /* THE z-index ladder (tq-9381, A227, isabella 900074216): the ONE writer of --z-*; no other file declares one, and
     no stylesheet uses a z-index literal above 100 (tests/z-ladder.test.mjs). A floater's band follows WHERE IT RENDERS:
     inside its host (a menu inside a toolbar, a list inside .modal-content) it uses the small in-page tokens; PORTALED to
     <body> (or to the open modal) it uses the floater band above the modal band. */
  /* in-page (inside the page or a host's own stacking context) */
  --z-behind: -1;   /* canvas / background layers that sit behind base content (#5611) */
  --z-base: 0;
  --z-sticky: 10;
  --z-filter: 20;
  --z-dropdown: 30;
  --z-sidebar-edge: 40;
  --z-tray: 50;
  --z-sidebar-panel: 60;
  /* a modal's own internal layers (inside its stacking context) */
  --z-modal-overlay: 80;
  --z-modal-dialog: 90;
  --z-modal-content: 100;
  /* chrome: the app chrome and the phone shell */
  --z-app-chrome: 200;
  --z-acct-nav: 210;
  --z-mobile-bottom-nav: 215;
  --z-mobile-fab: 218;
  --z-mobile-topbar: 220;
  --z-mobile-menu: 230;
  /* page surfaces (drawers, slide-overs, scrims, the tour): above the chrome, below every modal; the newest surface wins */
  --z-surface-backdrop: 300;
  --z-surface: 301;
  --z-surface-raised: 302;
  --z-tour: 320;
  --z-tour-highlight: 321;
  /* modals (the app's .modal is 1050, above the phone chrome); a modal opened FROM a modal stacks */
  --z-modal-backdrop: 1049;
  --z-modal: 1050;
  --z-modal-stacked-backdrop: 1059;
  --z-modal-stacked: 1060;
  /* floaters PORTALED to <body> / the open modal: above any modal */
  --z-popover: 1070;
  --z-tooltip: 1075;
  --z-drag-mirror: 1078;
  /* feedback, then the full-screen viewer, then the command palette */
  --z-toast: 1080;
  --z-lightbox: 1090;
  /* the iOS-standalone edge swipe-back chevron (tq-9540 A285; tq-9596 A308): above every layer its swipe can close (the
     modals, the surfaces, the mobile menu, the lightbox); a transient gesture affordance, below the command palette */
  --z-edge-back: 1095;
  --z-command: 9999;
}


/* ==========================================================================
   LAYOUT TOKENS
   ========================================================================== */

:root {
  --width-sidebar-default: 240px;
  --width-filter-sidebar: 280px;
  /* tq-9150 (A159, isabella 900068659 (B)): the APP chrome, measured on the live shell. It is NOT the DS's 51 / 62 Labs
     shell (A155): the app's chrome is one .topbar (its 40px row: the h-10 logo, md icon buttons; + --app-topbar-padding-y top
     and bottom) plus the
     .app-chrome 1px hairline = 65, on both pointers (the app's chrome controls are not floored on touch: a separate finding).
     Its readers: AdminSidebar's .sidebar-top (sidebar.css), flush with the chrome hairline. .app-chrome itself takes no
     min-height (the 404 shell stays 64). */
  --app-topbar-padding-y: 12px;   /* .topbar's block padding, below: the token and the padding read ONE value */
  /* tq-9160 (A164, isabella 900068667): the row is max(2.5rem, var(--control-h-xs)) since its controls floor at the touch ladder
     (rule below): 65 on a fine pointer (unchanged), 69 under a finger; the padding is NOT shrunk to hold 65 */
  --height-chrome: calc(max(2.5rem, var(--control-h-xs)) + 2 * var(--app-topbar-padding-y) + 1px);
  --split-min-size: 120px;
  --split-divider-width: 1px;
  --split-divider-width-active: 2px;
  --split-mini-rail-width: 36px;
  --transition-layout: 260ms cubic-bezier(0.4, 0, 0.2, 1);
  --transition-panel: 200ms ease;
}

/* tq-9135 — a pointer scope re-points --control-h-xs on its own subtree (base/control-heights.css), so the chrome height is
   restated there to compute from the scope's value (a fine chrome stays 51; a nested device preview follows the device). */
[data-pointer-scope] {
  --height-chrome: calc(max(2.5rem, var(--control-h-xs)) + 2 * var(--app-topbar-padding-y) + 1px);
}


/* ==========================================================================
   APP SHELL + FRAME
   ========================================================================== */

/* App: sidebar + workspace */
.app-shell { display: grid; height: 100vh; width: 100vw;
  grid-template-columns: auto minmax(0, 1fr); }

/* (tq-9364, A211: the DS docs' overlay-root declarations for .app-shell, position / overflow / contain, live in apps/docs.css.)
   No sidebar present — single-column full width. The layouts without a sidebar say so with .app-shell--single
   (tq-8220: no :has() on .app-shell; the rule: tests/has-anchor-guard/README.md) */
.app-shell.app-shell--single {
  grid-template-columns: minmax(0, 1fr);
}

.app-sidebar { height: 100%; }

/* Workspace: chrome + frame */
.app-workspace { display: grid; height: 100%; min-height: 0px; min-width: 0px;
  grid-template-rows: auto minmax(0, 1fr); }

/* Top chrome (topbar + tabbar) */
.app-chrome { position: relative; min-width: 0px; -webkit-box-flex: 0; -ms-flex: none; flex: none;
  z-index: var(--z-app-chrome);
  /* safe area (tq-9361): B. With viewport-fit=cover the chrome row clears the notch sides; its own gutters stay inside. */
  padding-inline: env(safe-area-inset-left, 0px) env(safe-area-inset-right, 0px); }

/* safe area (tq-9361): B. The hero chrome stays full-bleed (the image reaches the edges); its inner rows carry the
   insets instead (mobile-shell.css html.is-mobile .rnly-hero__nav / .rnly-hero__content). */
.app-chrome--hero {
  height: auto;
  /* hero mode: no chrome padding at all, so the hero fills the header edge-to-edge (was the app's components/data/hero.css
     `padding: 0 !important`; tq-9364, A211). The !important went with the fold: the hero chrome carries only .app-chrome
     + .app-chrome--hero and this rule follows .app-chrome, so it wins as is (measured 0 at 390 / 820 / 1400). That covers
     the safe-area padding-inline too (tq-9361 B): the hero stays full-bleed; its inner rows carry the insets. */
  padding: 0;
}

/* Your existing TopBarContainer can just use these */
.topbar { position: relative; display: grid; min-width: 0px; grid-template-columns: repeat(12, minmax(0, 1fr)); -webkit-box-align: center; -ms-flex-align: center; align-items: center;
  padding: var(--app-topbar-padding-y) 16px;   /* tq-9150: the same value --height-chrome is built from */ }

.topbar-left { grid-column: span 6 / span 6; min-width: 0px; }

.topbar-right { grid-column: span 6 / span 6; min-width: 0px; }

  .topbar-right > * { margin-left: auto; display: -webkit-inline-box; display: -ms-inline-flexbox; display: inline-flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-column-gap: 0.25rem; -moz-column-gap: 0.25rem; column-gap: 0.25rem; }

/* Frame: rails around a main canvas */
.app-frame { position: relative; display: grid; height: 100%; min-height: 0px; min-width: 0px; overflow: hidden; border-top-width: 1px;
  border-color: var(--border-divider);   /* the app's .border-default hook, as Tailwind 3 compiled it into this rule (no !important) */
  grid-template-columns: auto minmax(0, 1fr) auto;
  grid-template-rows: auto minmax(0, 1fr) auto; }

/* Overlay containing block — MOVED up to .app-shell (see above; Pavel #48/#49). The
   modal/drawer scrim now scopes to the WHOLE app (sidebar + content) and clips to the
   app/frame, instead of the content-only .app-frame. .app-frame keeps its own
   overflow:hidden for its scrolling canvas, but no longer anchors the overlays.
   (Safe on mobile: the shell == the viewport, so the true-fullscreen modal is NOT
   offset — the failure mode of the old .app-frame block, which sat inset from the
   viewport.) */

/* Rail base */
.frame-rail { min-height: 0px; min-width: 0px; }

/* Placement */
.rail-top { grid-column: span 3 / span 3;
  grid-row: 1; }

.rail-left {
  grid-column: 1;
  grid-row: 2;
}

.rail-right {
  grid-column: 3;
  grid-row: 2;
}

.rail-bottom { grid-column: span 3 / span 3;
  grid-row: 3; }

/* Canvas and stage (main content viewport) */
.frame-canvas { min-height: 0px; min-width: 0px;
  grid-column: 2;
  grid-row: 2; }

/* Single scroll container for the “page” inside the canvas */
.frame-stage { height: 100%; min-height: 0px; width: 100%; min-width: 0px;
  /* safe area (tq-9361): B. Every layout's page content clears the notch sides; the page gutters stay inside. */
  padding-inline: env(safe-area-inset-left, 0px) env(safe-area-inset-right, 0px); }

/* Hide rails that have no child elements (whitespace-safe — works even when Razor leaves text nodes) */
.frame-rail:not(:has(*)) { display: none; }


/* ==========================================================================
   PAGE + CONTAINER + PANEL PRIMITIVES
   (These are used inside .frame-stage / @RenderBody())
   ========================================================================== */

/* Page root inside frame-stage */
.container-page { display: -webkit-box; display: -ms-flexbox; display: flex; height: 100%; min-height: 0px; width: 100%; min-width: 0px; overflow: hidden; font-size: 0.8125rem; line-height: 1.5rem; }

/* 12-col view canvas */
.container-wrapper { display: grid; height: 100%; min-height: 0px; width: 100%; min-width: 0px; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 0px; overflow: hidden; font-size: 0.8125rem; line-height: 1.5rem; }

/* Optional helper if you sometimes use non-grid views */
.container-content { display: -webkit-box; display: -ms-flexbox; display: flex; height: 100%; min-height: 0px; width: 100%; min-width: 0px; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; overflow: hidden; }

/* Panel slot (put col-span-* on this element) */
.container-panel { display: -webkit-box; display: -ms-flexbox; display: flex; height: 100%; min-height: 0px; min-width: 0px; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; overflow: hidden; }

/* Panel regions */
.panel-header { min-width: 0px; -webkit-box-flex: 0; -ms-flex: none; flex: none; }

.panel-footer { min-width: 0px; -webkit-box-flex: 0; -ms-flex: none; flex: none; }

/* Recommended: ONE scroll container per panel */
.panel-body { height: 100%; min-height: 0px; min-width: 0px; -webkit-box-flex: 1; -ms-flex: 1 1 0%; flex: 1 1 0%; overflow: hidden; }

/* Content wrapper INSIDE body (non-scrolling by default)
   Use it for padding, stacks, etc. */
.panel-content { height: 100%; min-height: 0px; min-width: 0px; -webkit-box-flex: 1; -ms-flex: 1 1 0%; flex: 1 1 0%; overflow-x: auto; overflow-y: auto; }



/* If you truly need nested scrolling:
   - add .panel-body--no-scroll on the body
   - add .panel-content--scroll on the content
*/

.panel-body--no-scroll { overflow: hidden; }

.panel-content--scroll { min-height: 0px; overflow-y: auto; overflow-x: hidden; }

.scrollbar.panel-content--scroll { overflow-x: hidden; }

.scrollbar-thin.panel-content--scroll { overflow-x: hidden; }

.scroll-area.panel-content--scroll {
  overflow-x: hidden;
}

/* Tabs region wrapper */
.panel-tab-content { display: -webkit-box; display: -ms-flexbox; display: flex; height: 100%; min-height: 0px; width: 100%; min-width: 0px; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; overflow: hidden; }

/* Footer pager */
.panel-pager { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: justify; -ms-flex-pack: justify; justify-content: space-between; border-top-width: 1px; padding-left: 1rem; padding-right: 1rem; padding-top: 0.5rem; padding-bottom: 0.5rem;
  border-color: var(--border-secondary); }


/* ==========================================================================
   SCROLLBAR (SCOPED)
   Add class="scroll-area" to any element that scrolls.
   ========================================================================== */

/* tq-9364 (A211): written out as the app's Tailwind 3 compiled `scrollbar-thin` utility (the tailwind-scrollbar plugin,
   including the rules Tailwind copied in from other files' compound .scrollbar-thin selectors), so the plain file computes the
   same as the live app did. */
.scroll-area {
  --scrollbar-track: initial;
  --scrollbar-thumb: initial;
  scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
  overflow: overlay;
}

.scroll-area.overflow-x-hidden {
  overflow-x: hidden;
}

.scroll-area.overflow-y-hidden {
  overflow-y: hidden;
}

.scroll-area::-webkit-scrollbar-track {
  background-color: var(--scrollbar-track);
}

.scroll-area::-webkit-scrollbar-thumb {
  background-color: var(--scrollbar-thumb);
}

.scroll-area {
  scrollbar-width: thin;
}

.scroll-area::-webkit-scrollbar {
  width: 8px;
  height: 8px;
}

.scroll-area.modal-body {
  overflow-x: hidden;
}

.scroll-area {
  scrollbar-color: var(--scroll-thumb) var(--scroll-track); /* Firefox */
}

  .scroll-area::-webkit-scrollbar {
    width: var(--scroll-size);
    height: var(--scroll-size);
  }

  .scroll-area::-webkit-scrollbar-track {
    background-color: var(--scroll-track);
  }

  .scroll-area::-webkit-scrollbar-thumb {
    background-color: var(--scroll-thumb);
    border-radius: 10px;
  }

    .scroll-area::-webkit-scrollbar-thumb:hover {
      background-color: var(--scroll-thumb);
    }



.sidebar-edge-hitbox { width: 20px; -webkit-transition-property: all; transition-property: all; -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); -webkit-transition-duration: 200ms; transition-duration: 200ms; -webkit-transition-timing-function: cubic-bezier(0.4, 0, 1, 1); transition-timing-function: cubic-bezier(0.4, 0, 1, 1); }
  .sidebar-edge-hitbox:hover { width: 20px; -webkit-transition-property: all; transition-property: all; -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); -webkit-transition-duration: 200ms; transition-duration: 200ms; -webkit-transition-timing-function: cubic-bezier(0.4, 0, 1, 1); transition-timing-function: cubic-bezier(0.4, 0, 1, 1); }


/* ==========================================================================
   OPTIONAL GLOBAL SCROLLBAR
   If you keep this, you usually don't need per-element scrollbar rules.
   I recommend keeping ONLY one of: (scoped .scroll-area) OR (global rules).
   ========================================================================== */


::-webkit-scrollbar { width: var(--scroll-size); height: var(--scroll-size); }
::-webkit-scrollbar-track { background-color: var(--scroll-track); }
::-webkit-scrollbar-thumb { background-color: var(--scroll-thumb); border-radius: 10px; }
::-webkit-scrollbar-thumb:hover { background-color: var(--scroll-thumb); }

/* THIS RULE EXISTED AND WAS LOSING (2026-07-31). The webkit pseudo above won — a plain
   overflow container measured 8px — but scrollbar-width computed to `auto` on EVERY
   surface probed, so Firefox and anything on the standards property got fat scrollbars
   while Chromium looked correct. Cause: the tailwind-scrollbar plugin injected
   `@layer base { * { scrollbar-color: initial; scrollbar-width: initial } }`, which
   landed at built line 175948 against this rule at 8899 — identical 0 specificity, later
   wins, and `initial` for scrollbar-width IS `auto`. The plugin has been removed from
   site.css: it emitted ZERO .scrollbar-* utilities into the build and no markup
   referenced any, so it was purely a base reset that broke this rule for no benefit.
   enodia.monitor, the board Pavel named as the reference, never loaded it — which is
   exactly why the reference already looked right.
   If a future change re-adds that plugin, this rule silently stops working again in
   every non-webkit browser and the webkit path will keep hiding it. */
* {
  scrollbar-width: thin;
  scrollbar-color: var(--scroll-thumb) var(--scroll-track);
}


/* ==========================================================================
   PAGE TEMPLATE CLASSES
   Standardised page shells to reduce nesting and boilerplate.
   Use inside @RenderBody() / .frame-stage.
   ========================================================================== */

/* Standard list page: header + toolbar + scrollable table + pager */
.page-list { display: -webkit-box; display: -ms-flexbox; display: flex; height: 100%; min-height: 0px; min-width: 0px; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; overflow: hidden;
  background-color: var(--bg-panel); }

/* Detail page: header + scrollable content body */
.page-detail { display: -webkit-box; display: -ms-flexbox; display: flex; height: 100%; min-height: 0px; min-width: 0px; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; overflow: hidden;
  background-color: var(--bg-panel); }

/* Form page: header + scrollable form + sticky footer */
.page-form { display: -webkit-box; display: -ms-flexbox; display: flex; height: 100%; min-height: 0px; min-width: 0px; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; overflow: hidden;
  background-color: var(--bg-panel); }

/* Dashboard page: header + scrollable widget grid */
.page-dashboard { display: -webkit-box; display: -ms-flexbox; display: flex; height: 100%; min-height: 0px; min-width: 0px; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; overflow: hidden;
  background-color: var(--bg-panel); }

/* Page with filter sidebar alongside main content */
.page-filtered { display: -webkit-box; display: -ms-flexbox; display: flex; height: 100%; min-height: 0px; min-width: 0px; -webkit-box-orient: horizontal; -webkit-box-direction: normal; -ms-flex-direction: row; flex-direction: row; overflow: hidden; }

/* Allow the main content area to grow and fill remaining space */
.page-filtered > :not(.filter-sidebar) { min-height: 0px; min-width: 0px; -webkit-box-flex: 1; -ms-flex: 1 1 0%; flex: 1 1 0%; }


/* ==========================================================================
   APPLICATION / INFORMATIONAL PAGE TEMPLATE
   Faithful adoption of Untitled UI's application "informational" page examples
   (a sidebar-nav set + a top-nav set). A full standalone application page =
   nav chrome (.app-sidebar OR .topnav) + a scrolling .app-page__main region
   holding a centered .app-container content column. The chrome, page header,
   tabs, filter bar, table card and pager are each existing DS components; these
   classes are only the page-level scaffold that composes them. Brand accent is
   UUI's own violet ramp (never black) via the shared component tokens.
   ========================================================================== */

/* Root: the whole page. --sidebar lays chrome beside main at lg+; --topnav (the
   default) stacks chrome above main. */
.app-page { display: -webkit-box; display: -ms-flexbox; display: flex; min-height: 0px; width: 100%; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column;
  background-color: var(--bg-primary); }
@media (min-width: 1024px) {
 .app-page--sidebar { -webkit-box-orient: horizontal; -webkit-box-direction: normal; -ms-flex-direction: row; flex-direction: row; } }
.app-page--sidebar {
  /* A .sidebar-panel dropped in directly (no .app-shell state machine) still
     needs its surface token, which is normally scoped to .app-shell. */
  --bg-sidebar-panel: var(--bg-sidebar);
}
/* In this template the rail is a static column — no width:0 collapse wrapper. */
.app-page--sidebar > .sidebar-panel { -webkit-box-flex: 0; -ms-flex: none; flex: none; }

/* The scrolling main region — grows to fill, owns the page background. */
.app-page__main { min-width: 0px; -webkit-box-flex: 1; -ms-flex: 1 1 0%; flex: 1 1 0%;
  background-color: var(--bg-primary); }

/* Centered content column — UUI `max-w-container mx-auto px-4 lg:px-8`. */
.app-container { margin-left: auto; margin-right: auto; display: -webkit-box; display: -ms-flexbox; display: flex; width: 100%; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column;
  max-width: 80rem;                        /* UUI --width-container (1280px) */
  padding-inline: 1rem;                    /* px-4 */ }
@media (min-width: 1024px) {
  .app-container { padding-inline: 2rem; } /* lg:px-8 */
}

/* Page header block — an optional breadcrumb/back row above a title row that
   pairs a title+description group with a trailing actions cluster. */
.page-head { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; gap: 1rem; }
.page-head--bordered { padding-bottom: 1.25rem;
  border-bottom: 1px solid var(--border-secondary); }
.page-head__row { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; gap: 1rem; }
@media (min-width: 1024px) {
 .page-head__row { -webkit-box-orient: horizontal; -webkit-box-direction: normal; -ms-flex-direction: row; flex-direction: row; -webkit-box-align: start; -ms-flex-align: start; align-items: flex-start; } }
.page-head__titles { display: -webkit-box; display: -ms-flexbox; display: flex; min-width: 0px; -webkit-box-flex: 1; -ms-flex: 1 1 0%; flex: 1 1 0%; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column;
  gap: 2px; }
.page-head__title { font-size: 1.25rem; line-height: 2rem; font-weight: 600;
  color: var(--text-primary); }
.page-head__desc { font-size: 0.875rem; line-height: 1.5rem;
  color: var(--text-tertiary); }
.page-head__actions { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-flex: 0; -ms-flex: none; flex: none; -webkit-box-align: center; -ms-flex-align: center; align-items: center; gap: 0.75rem; }


/* ==========================================================================
   SETTINGS SHELL — settings pages (nav rail + content panel)
   Desktop: the nav rail sits beside a content panel that scrolls internally
   (default panel-body/panel-content behavior). Mobile (< 640px): the rail can't
   sit beside the panel, so the shell stacks (nav above content) and scrolls as a
   SINGLE column — the fixed-height panel-body/panel-content scroll model is
   relaxed here so the stacked content is reachable instead of clipped.
   Markup: the "settings-shell flex flex-col md:flex-row" wrapper in each
   Settings area Index view.
   ========================================================================== */
@media (max-width: 639px) {
  .settings-shell {
    -webkit-box-flex: 1;
    -ms-flex: 1 1 auto;
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
  }

  .settings-shell .panel-body,
  .settings-shell .panel-content {
    height: auto;
    -webkit-box-flex: 0;
    -ms-flex: none;
    flex: none;
    overflow: visible;
  }
}


/* ==========================================================================
   SCROLL UTILITIES
   Short helpers for scroll containers.
   ========================================================================== */

.scroll-y { min-height: 0px; overflow-y: auto; overflow-x: hidden; }

.scrollbar.scroll-y { overflow-x: hidden; }

.scrollbar-thin.scroll-y { overflow-x: hidden; }

.scroll-area.scroll-y {
  overflow-x: hidden;
}

.scroll-x { min-width: 0px; overflow-x: auto; overflow-y: hidden; }

.scrollbar.scroll-x { overflow-y: hidden; }

.scrollbar-thin.scroll-x { overflow-y: hidden; }

.scroll-area.scroll-x {
  overflow-y: hidden;
}

.scroll-both { min-height: 0px; min-width: 0px; overflow: auto; }


/* ==========================================================================
   PIN UTILITIES
   ========================================================================== */

.pin-top { position: sticky; top: 0px;
  z-index: var(--z-sticky); }

.pin-bottom { position: sticky; bottom: 0px;
  z-index: var(--z-sticky); }


/* ==========================================================================
   RESPONSIVE SHELL RULES
   Adapt the shell layout at different viewport sizes.
   The responsive.js module sets data-breakpoint on .app-shell.
   ========================================================================== */

/* ── Mobile: < 640px ────────────────────────────────────────────────────── */
@media (max-width: 639px) {
  /* Collapse the sidebar column entirely */
  .app-shell {
    grid-template-columns: minmax(0, 1fr);
  }

  /* The rail no longer occupies a layout column on a phone — it becomes an
     off-canvas drawer (see components/navigation/sidebar.css → "Mobile drawer").
     position:fixed takes it out of grid flow (so the workspace fills the width)
     while keeping it in the DOM, so the fixed .sidebar-panel and the top-bar
     hamburger keep working — unlike display:none, which killed both. */
  .app-sidebar {
    display: none;
  }

  .sidebar-edge-hitbox {
    display: none;
  }

  /* Hide frame rails on mobile */
  .frame-rail {
    display: none !important;
  }

  /* Stack split panes vertically */
  .split-pane--vertical {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }

  .split-pane--vertical > .split-pane__divider {
    width: auto;
    height: var(--split-divider-width, 1px);
    cursor: row-resize;
  }

  .split-pane--vertical > .split-pane__divider::after {
    left: 0;
    right: 0;
    top: -3px;
    bottom: -3px;
  }

  /* Full-width topbar */
  .topbar { grid-template-columns: repeat(12, minmax(0, 1fr)); }
}

/* ── Tablet: 640–1023px ─────────────────────────────────────────────────── */
/* tq-9201 (A172; port of Enodia tq-9142 84b0ce95, isabella 900069336 branch (2a): MEASURED DEAD): the tablet band that demoted a
   PINNED sidebar to a floating panel is REMOVED, here and in its twin (Reinly.Design and reinly.webapp foundations/layout.css):
   a pinned sidebar is the same at every width. Measured on the live /admin/dashboard shell, app sheet and DS sheet, 768 / 1024 /
   1180, fine + coarse: the pinned panel was IN FLOW at 768 exactly as at 1024 (relative, top 0, a 240px column, the workspace
   BESIDE it), because navigation/sidebar.css loads after this file and its same-specificity pinned rules win:
     - .app-sidebar { width: 0 }: dead (the column stayed 240px; sidebar.css: var(--width-sidebar-expanded));
     - .sidebar-panel position: fixed: dead (it computed relative); top-0 / left-0: no effect on the in-flow panel;
     - h-screen: no effect here (Reinly's sidebar column is the full window height, so 100vh = its column);
     - shadow-lg + z-index 60: LIVE but stray (only at 640-1023 a pinned panel painted a shadow and a stacking layer; 1024 has none);
     - transform / opacity / pointer-events: the same values sidebar.css sets for pinned (redundant);
     - (app twin) "show the toggle when pinned": dead (the app's sidebar.css hides the pinned toggle later; it computed none).
   The collapsed / overlay-open drawers and the mobile (< 640) drawer live in navigation/sidebar.css and are unchanged. A floating
   tablet sidebar is NOT wanted (it needs its own ask and design). */


/* (tq-9364, A211: the DS docs' phone .topbar flex row, @media (max-width: 767px), lives in apps/docs.css. The Reinly app's
   live .topbar stays a grid on a phone and keeps its page header.) */


/* ==========================================================================
   TOP NAVIGATION  (.topnav)  — ADOPT
   Faithful 1:1 rebuild of Untitled UI `application/header-navigation`
   (_phase3/uui-cache/layout-shell/header-navigation/…/header-navigation.tsx +
   base-components/nav-button.tsx), kept on our violet brand accent.

   A horizontal application header: brand logo · primary nav pills · a right
   action cluster (icon buttons + notification badge + account) · an OPTIONAL
   secondary row (sub-nav pills OR underline tabs + search) · a pure-CSS mobile
   disclosure below the lg breakpoint. Every colour resolves through the leaf
   tokens below, which point at canonical semantic tokens, so both themes fork
   automatically ([data-theme]) with zero literals in the resting skin.

   This is the faithful UUI top nav; it sits ALONGSIDE our app-chrome `.topbar`
   (the reinly context/switcher bar) — that extension is never narrowed.
   UUI geometry: bar h-16 (64px); logo h-6 (24px); pill rounded-md, px-2 py-1.5,
   text-sm/600; icon button size-9 (36px), icon size-5 (20px); list gap-0.5;
   actions gap-3; inner max-w-container, pr-3 pl-4 md:px-8; single 2px focus ring
   (brand violet), no halo; hover/current = bg-primary_hover / bg-secondary.
   ========================================================================== */

:root {
  --topnav-height: 4rem;                          /* UUI h-16 = 64px */
  --topnav-max-width: none;                        /* app chrome is full-bleed; .topnav--contained caps it */
  --topnav-bg: var(--bg-primary);
  --topnav-border: var(--border-secondary);
  --topnav-item-fg: var(--text-secondary);
  --topnav-item-fg-hover: var(--text-secondary-hover);
  --topnav-item-bg-hover: var(--bg-primary-hover);
  --topnav-item-bg-current: var(--bg-secondary);
  --topnav-item-bg-current-hover: var(--bg-secondary-hover);
  --topnav-icon: var(--text-quaternary);
  --topnav-icon-hover: var(--text-quaternary-hover);
  --topnav-focus: var(--focus-ring);             /* single 2px ring, brand violet */
  --topnav-badge-bg: var(--bg-danger);
  --topnav-badge-fg: var(--text-on-solid);
}

.topnav { width: 100%;
  background-color: var(--topnav-bg); }

/* Primary row — UUI h-16, content centered, optional bottom border */
.topnav__bar { display: -webkit-box; display: -ms-flexbox; display: flex; width: 100%; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center;
  height: var(--topnav-height);
  background-color: var(--topnav-bg);
  border-bottom: 1px solid var(--topnav-border); }

.topnav--no-border > .topnav__bar,
.topnav--no-border > .topnav__secondary {
  border-bottom-color: transparent;
}

/* Inner container — UUI max-w-container mx-auto, pr-3 pl-4 md:px-8 */
.topnav__inner { display: -webkit-box; display: -ms-flexbox; display: flex; width: 100%; -webkit-box-align: center; -ms-flex-align: center; align-items: center;
  max-width: var(--topnav-max-width);
  margin-inline: auto;
  padding-inline: 1rem 0.75rem;                    /* pl-4 pr-3 */ }

@media (min-width: 768px) {
  .topnav__inner,
  .topnav__secondary-inner {
    padding-inline: 2rem;                          /* md:px-8 */
  }
}

/* Brand / logo slot */
.topnav__brand { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center;
  margin-right: 1rem;                              /* mr-4 */ }

.topnav__logo { display: -webkit-inline-box; display: -ms-inline-flexbox; display: inline-flex; border-radius: 0.125rem; }

  .topnav__logo :where(img, svg) {
    height: 1.5rem;                                /* h-6 */
    width: auto;
  }

  .topnav__logo:focus-visible {
    outline: 2px solid var(--topnav-focus);
    outline-offset: 2px;
  }

/* Primary nav list */
.topnav__nav { min-width: 0px; }

.topnav__list { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center;
  gap: 0.125rem;                                   /* gap-0.5 */ }

/* Right action cluster */
.topnav__actions { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center;
  gap: 0.75rem;                                    /* gap-3 */
  margin-left: auto; }

.topnav__action-group { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center;
  gap: 0.125rem;                                   /* gap-0.5 */ }

/* Positioning context for a badge on an icon action */
.topnav__action { position: relative; display: -webkit-inline-box; display: -ms-inline-flexbox; display: inline-flex; }

/* Centered variant — nav sits between logo & actions (UUI centered) */
.topnav--centered .topnav__inner {
  gap: 2rem;                                       /* gap-8 */
}

.topnav--centered .topnav__brand {
  margin-right: 0;
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0%;
  flex: 1 1 0%;
}

.topnav--centered .topnav__actions {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0%;
  flex: 1 1 0%;
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
  margin-left: 0;
}

/* Contained variant — cap inner width like a UUI marketing header */
.topnav--contained {
  --topnav-max-width: 80rem;
}


/* ── Nav item / pill — UUI NavButton ──────────────────────────────────── */
.topnav-item { position: relative; display: -webkit-box; display: -ms-flexbox; display: flex; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; border-radius: 0.375rem; text-decoration-line: none;
  gap: 0.25rem;                                    /* gap-1 */
  padding: 0.375rem 0.5rem;                        /* py-1.5 px-2 */
  background-color: var(--topnav-bg);
  color: var(--topnav-item-fg);
  -webkit-transition: background-color 100ms linear, color 100ms linear;
  transition: background-color 100ms linear, color 100ms linear; }

  .topnav-item:hover {
    background-color: var(--topnav-item-bg-hover);
  }

  .topnav-item:focus-visible {
    outline: 2px solid var(--topnav-focus);
    outline-offset: 2px;
    z-index: 10;
  }

.topnav-item__label { font-size: 0.8125rem; line-height: 1.5rem; font-weight: 600;
  padding-inline: 0.125rem;                        /* px-0.5 */ }

  .topnav-item:hover .topnav-item__label {
    color: var(--topnav-item-fg-hover);
  }

.topnav-item__icon { display: -webkit-inline-box; display: -ms-inline-flexbox; display: inline-flex; -ms-flex-negative: 0; flex-shrink: 0; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center;
  width: 1.25rem;                                  /* size-5 */
  height: 1.25rem;
  color: var(--topnav-icon);
  -webkit-transition: color 100ms linear;
  transition: color 100ms linear; }

  .topnav-item:hover .topnav-item__icon {
    color: var(--topnav-icon-hover);
  }

/* Current / active pill */
.topnav-item.is-current,
.topnav-item[aria-current="page"] {
  background-color: var(--topnav-item-bg-current);
}

  .topnav-item.is-current:hover,
  .topnav-item[aria-current="page"]:hover {
    background-color: var(--topnav-item-bg-current-hover);
  }

  .topnav-item.is-current .topnav-item__label,
  .topnav-item[aria-current="page"] .topnav-item__label {
    color: var(--topnav-item-fg-hover);
  }

  .topnav-item.is-current .topnav-item__icon,
  .topnav-item[aria-current="page"] .topnav-item__icon {
    color: var(--topnav-icon-hover);
  }

/* Icon-only — UUI size-9 square */
.topnav-item--icon {
  width: 2.25rem;                                  /* size-9 */
  height: 2.25rem;
  padding: 0;
}

/* Notification badge on an icon action (UUI count dot / bare dot) */
.topnav__badge { position: absolute; display: -webkit-inline-box; display: -ms-inline-flexbox; display: inline-flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; border-radius: 9999px; font-weight: 700;
  top: -0.125rem;                                  /* -top-0.5 */
  right: -0.125rem;                                /* -right-0.5 */
  min-width: 0.875rem;                             /* size-3.5 */
  height: 0.875rem;
  padding-inline: 0.1875rem;
  font-size: 10px;
  line-height: 1;
  background-color: var(--topnav-badge-bg);
  color: var(--topnav-badge-fg); }

.topnav__badge--dot {
  min-width: 0.5rem;
  height: 0.5rem;
  padding: 0;
}


/* ── Secondary row — sub-nav pills OR underline tabs + search ─────────── */
.topnav__secondary { display: -webkit-box; display: -ms-flexbox; display: flex; width: 100%; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center;
  background-color: var(--topnav-bg);
  border-bottom: 1px solid var(--topnav-border); }

.topnav__secondary-inner { display: -webkit-box; display: -ms-flexbox; display: flex; width: 100%; -webkit-box-align: center; -ms-flex-align: center; align-items: center;
  height: var(--topnav-height);
  max-width: var(--topnav-max-width);
  margin-inline: auto;
  gap: 2rem;                                       /* gap-8 */
  padding-inline: 2rem;                            /* px-8 */
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between; }

.topnav--centered .topnav__secondary-inner {
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}

/* Underline-tabs secondary sits tighter (UUI pt-3 / -mb-px) */
.topnav__secondary--tabs .topnav__secondary-inner {
  height: auto;
  padding-top: 0.75rem;
  -webkit-box-pack: start;
  -ms-flex-pack: start;
  justify-content: flex-start;
}

.topnav__search {
  width: 100%;
  max-width: 17.5rem;                              /* max-w-70 = 280px */
}


/* ── Mobile disclosure (< lg) — pure-CSS native <details>, no JS ──────── */
.topnav__mobile { display: none; width: 100%;
  background-color: var(--topnav-bg);
  border-bottom: 1px solid var(--topnav-border); }

.topnav__mobile-trigger { display: -webkit-box; display: -ms-flexbox; display: flex; width: 100%; cursor: pointer; list-style-type: none; -webkit-box-align: center; -ms-flex-align: center; align-items: center;
  gap: 0.75rem;
  height: var(--topnav-height);
  padding-inline: 1rem; }

  .topnav__mobile-trigger::-webkit-details-marker {
    display: none;
  }

  .topnav__mobile-trigger:focus-visible {
    outline: 2px solid var(--topnav-focus);
    outline-offset: -2px;
  }

.topnav__mobile-burger { display: -webkit-inline-box; display: -ms-inline-flexbox; display: inline-flex; -ms-flex-negative: 0; flex-shrink: 0; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; border-radius: 0.375rem;
  width: 2.25rem;
  height: 2.25rem;
  color: var(--topnav-icon); }

.topnav__drawer { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; gap: 0.25rem;
  padding: 0 1rem 1rem; }

  .topnav__drawer .topnav-item { width: 100%; -webkit-box-pack: start; -ms-flex-pack: start; justify-content: flex-start; }

/* lg breakpoint (1024px): swap the desktop rows <-> mobile disclosure */
@media (max-width: 1023px) {
  .topnav__bar,
  .topnav__secondary {
    display: none;
  }

  .topnav__mobile {
    display: block;
  }
}

@media (prefers-reduced-motion: reduce) {
  .topnav-item,
  .topnav-item__label,
  .topnav-item__icon {
    -webkit-transition: none;
    transition: none;
  }
}   /* tq-9364 (A211): THE shell layout, imported in place (the app copy is gone) */
/* ==========================================================================
   App-only shell rules (tq-9364, A211). The shell itself is Reinly.Design components/foundations/layout.css, imported in
   place from site.css; this file redeclares nothing the DS owns. One reason per rule.
   ========================================================================== */

/* tq-9160 (A164, isabella 900068660 (b)): THE LIVE CHROME'S TOUCH FLOOR. The app's own top bars (this .topbar: main + admin;
   reinly/layouts buyer-header.css .buyer-topbar, seller-header.css .seller-topbar) never got A155's toolbar floor (the app
   does not import the DS toolbar.css). Every chrome control (the logo link, the nav tabs, the search launcher, the bell, the
   avatar, any icon button) floors at the touch ladder: min-height (and, for a square icon button, min-width) of
   var(--control-h-xs) — 24 on a fine pointer, below every control here, so nothing moves; 44 under a finger; back to 24 in a
   fine scope / .density-compact. The glyphs keep their size; the bars are padding-sized, so they grow (65 -> 69 admin).
   A dropdown's items (they live in the chrome, hidden) are not chrome controls. */
:is(.topbar, .buyer-topbar, .seller-topbar) :is(a[href], button):where(:not(.dropdown-menu *)) {
  min-height: var(--control-h-xs);
}
:is(.topbar, .buyer-topbar, .seller-topbar) .btn-icon:where(:not(.dropdown-menu *)) {
  min-width: var(--control-h-xs);
}
/* the logo link is a block around its 40px image: centre the image in the floored box (identical on a fine pointer) */
:is(.topbar, .buyer-topbar, .seller-topbar) a[href]:has(> img):where(:not(.dropdown-menu *)) {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}   /* tq-9364 (A211): the app-only shell rules, each with its reason */
/* =========================================================
   Typography: Enodia role classes + modifiers
   - Roles describe *what it is* (page-title, label, caption)
   - Modifiers describe *how it behaves* (is-muted, is-semibold)
   ========================================================= */

/* ---------- Optional: mono utility ---------- */
/* Prefer ONE mono class with optional modifiers, instead of 4 separate classes */
.font-mono {
  font-family: "Space Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}

/* ---------- Element defaults (map semantic tags to roles) ---------- */
h1 {
  font-size: 2rem;
  line-height: 3rem;
  font-weight: 300;
  letter-spacing: -0.025em;
  color: var(--text-primary-solid);
}
html.is-mobile h1 {
  font-size: 24px;
  line-height: 1.15;
  letter-spacing: -0.035em;
  font-weight: 600;
}

h2 {
  font-size: 1.5rem;
  line-height: 2rem;
  font-weight: 300;
  letter-spacing: -0.025em;
  color: var(--text-primary);
}

h3 {
  font-size: 1.125rem;
  line-height: 2rem;
  font-weight: 300;
  letter-spacing: -0.025em;
  color: var(--text-primary-alt);
}

h4 {
  font-size: 1.125rem;
  line-height: 2rem;
  font-weight: 300;
  letter-spacing: -0.025em;
  color: var(--text-primary);
}

h5 {
  font-size: 0.875rem;
  line-height: 1.5rem;
  font-weight: 400;
  color: var(--text-secondary-alt);
}

h6 {
  font-size: 0.75rem;
  line-height: 1rem;
  font-weight: 500;
  color: var(--text-secondary-alt);
}

/* ---------- Roles ---------- */

/* Page */
.page-title {
  font-size: 2rem;
  line-height: 3rem;
  font-weight: 300;
  letter-spacing: -0.025em;
  color: var(--text-primary-solid);
}

/* Section */
.panel-title {
  font-size: 1.5rem;
  line-height: 2rem;
  font-weight: 300;
  letter-spacing: -0.025em;
  color: var(--text-primary);
}

/* Panels / containers */
.section-title {
  font-size: 1.125rem;
  line-height: 2rem;
  font-weight: 300;
  letter-spacing: -0.025em;
  color: var(--text-primary-alt);
}

.modal-title {
  font-size: 1rem;
  line-height: 1.5rem;
  font-weight: 300;
  color: var(--text-primary);
}

/* General titles (when you *don’t* want a heading tag) */
.title {
  font-size: 1.125rem;
  line-height: 2rem;
  font-weight: 300;
  letter-spacing: -0.025em;
  color: var(--text-primary);
} 

.subtitle {
  font-size: 0.875rem;
  line-height: 1.5rem;
  font-weight: 400;
  color: var(--text-secondary-alt);
}

/* Body */
.body {
  font-size: 0.875rem;
  line-height: 1.5rem;
  font-weight: 400;
  color: var(--text-primary);
}

/* Labels / captions */ 
.label {
  font-size: 0.75rem;
  line-height: 1rem;
  font-weight: 500;
  color: var(--text-secondary-alt);
}

.hint {
  font-size: 0.8125rem;
  line-height: 1.5rem;
  font-weight: 400;
  color: var(--text-tertiary-alt);
}

.caption {
  font-size: 0.75rem;
  line-height: 1rem;
  font-weight: 400;
  color: var(--text-tertiary);
}

.caption-sm {
  font-size: 0.6875rem;
  line-height: 1rem;
  font-weight: 400;
  color: var(--text-tertiary);
}

.overline {
  font-size: 0.6875rem;
  line-height: 1rem;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.025em;
  color: var(--text-tertiary-alt);
}

/* ---------- Modifiers ---------- */

/* Weight */


/* Tone */
.text-primary {
  color: var(--text-primary) !important;
}

.text-secondary {
  color: var(--text-secondary) !important;
}

.text-muted {
  color: var(--text-tertiary) !important;
}

/* Status */
.text-danger {
  color: var(--text-danger) !important;
}

/* Behavior */

/* ---------- Background helpers (keep if you truly need them) ---------- */
/* If you can, prefer Tailwind bg utilities wired to tokens, but this is fine */

.bg-success {
  background-color: var(--bg-success) !important;
}

.bg-warning {
  background-color: var(--bg-warning) !important;
}

.bg-danger {
  background-color: var(--bg-danger) !important;
}

.bg-info {
  background-color: var(--bg-info) !important;
}
/* Enodia Anim — CSS Helpers (v1.7)
   - Layout-safe defaults for [data-anim]
   - Letter splitting (intro-title)
   - Optional bleed/mask wrappers (legacy-safe)
   - Odometer reels, Split-flap ticker, Text-scramble
   - Prefers-reduced-motion hardening
*/

/* ========== Root tokens (tweak as needed) ========== */
:root {
  --bleed: 3px; /* anti-clip wrapper padding */
  --eno-blur: 3px; /* default blur */
  --eno-odometer-gap: 0.02em; /* space between digit reels */
  --eno-slot-gap: 0.03em; /* space between ticker/scramble slots */
  --eno-slot-width: 1ch; /* width of one slot (approx one glyph) */
  --eno-slot-radius: 2px; /* ticker slot rounding (if you want bg) */
  --eno-slot-bg: transparent; /* ticker slot background */
  --eno-ticker-persp: 700px; /* depth for split-flap flip feel */
}

/* ========== Base animation helper ========== */
[data-anim] {
  visibility: hidden; /* prevent FOUC */
  will-change: transform, opacity, filter, clip-path;
}

/* Inline letter splitting (intro-title) */
.wd {
  white-space: nowrap;
}

.ch {
  display: inline-block;
}

/* Optional wrappers for anti-clip effects (kept for compatibility) */

/* Utility: fixed-width numerals where supported */

/* ========== Odometer (numeric counter) ========== */
.eno-odometer {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: baseline;
  -ms-flex-align: baseline;
  align-items: baseline;
  gap: var(--eno-odometer-gap);
  line-height: 1;
  font-variant-numeric: tabular-nums lining-nums;
  -webkit-font-feature-settings: "tnum" 1, "lnum" 1;
  font-feature-settings: "tnum" 1, "lnum" 1;
}

  .eno-odometer .eno-reel {
    position: relative;
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    overflow: hidden;
    height: 1em; /* one glyph tall */
    line-height: 1;
    min-width: 0.6em; /* avoid width jitter by narrow digits */
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    contain: strict;
  }

  .eno-odometer .eno-reel-track {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
    will-change: transform;
    -webkit-transform: translateY(0);
    -ms-transform: translateY(0);
    transform: translateY(0); /* JS animates in em units */
  }

  .eno-odometer .eno-glyph {
    display: block;
    height: 1em;
    line-height: 1;
    text-align: center;
  }

  .eno-odometer .eno-sep {
    display: inline-block;
    line-height: 1;
    padding: 0 .02em;
    opacity: .85;
  }

/* ========== Split-flap Ticker (alphanumeric) ========== */

.eno-ticker {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: baseline;
  -ms-flex-align: baseline;
  align-items: baseline;
  gap: var(--eno-slot-gap);
  -webkit-perspective: var(--eno-ticker-persp);
  perspective: var(--eno-ticker-persp);
  -webkit-transform-style: preserve-3d;
  transform-style: preserve-3d;
  line-height: 1;
  font-variant-numeric: tabular-nums lining-nums;
  -webkit-font-feature-settings: "tnum" 1, "lnum" 1;
  font-feature-settings: "tnum" 1, "lnum" 1;
}

  .eno-ticker .eno-slot {
    position: relative;
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    width: var(--eno-slot-width);
    height: 1em;
    overflow: hidden;
    border-radius: var(--eno-slot-radius);
    background: var(--eno-slot-bg);
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    contain: strict;
  }

  .eno-ticker .eno-slot-inner {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
    width: 100%;
    height: 100%;
    -webkit-backface-visibility: hidden;
    backface-visibility: hidden;
    -webkit-transform-style: preserve-3d;
    transform-style: preserve-3d;
    -webkit-transform: translateZ(0);
    transform: translateZ(0); /* avoid 3D flicker */
    will-change: transform, opacity;
  }

  .eno-ticker .eno-char {
    display: inline-block;
    line-height: 1;
  }

  .eno-ticker .eno-sep {
    display: inline-block;
    opacity: .8;
    line-height: 1;
    padding: 0 .02em;
  }

  /* Optional: add a subtle flap seam (feel free to delete if you want flat) */
  .eno-ticker .eno-slot::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    top: 50%;
    height: 1px;
    -webkit-transform: translateY(-50%);
    -ms-transform: translateY(-50%);
    transform: translateY(-50%);
    background: -webkit-gradient(linear, left top, right top, from(transparent), color-stop(rgba(0,0,0,.12)), to(transparent));
    background: linear-gradient(90deg, transparent, rgba(0,0,0,.12), transparent);
    pointer-events: none;
  }

/* ========== Text Scramble ========== */
.eno-scramble {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: baseline;
  -ms-flex-align: baseline;
  align-items: baseline;
  gap: var(--eno-slot-gap);
  line-height: 1;
  font-variant-numeric: tabular-nums lining-nums;
  -webkit-font-feature-settings: "tnum" 1, "lnum" 1;
  font-feature-settings: "tnum" 1, "lnum" 1;
}

  .eno-scramble .eno-slot {
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    width: var(--eno-slot-width);
    height: 1em;
    overflow: hidden;
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
  }

  .eno-scramble .eno-slot-inner {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
    width: 100%;
    height: 100%;
    will-change: contents, transform;
  }

  .eno-scramble .eno-sep {
    display: inline-block;
    opacity: .8;
    line-height: 1;
    padding: 0 .02em;
  }

/* ========== Accessibility: Reduced Motion ========== */
@media (prefers-reduced-motion: reduce) {
  [data-anim],
  .eno-odometer .eno-reel-track,
  .eno-ticker .eno-slot-inner,
  .eno-scramble .eno-slot-inner {
    visibility: visible !important;
    -webkit-animation: none !important;
    animation: none !important;
    -webkit-transition: none !important;
    transition: none !important;
    -webkit-transform: none !important;
    -ms-transform: none !important;
    transform: none !important;
    -webkit-filter: none !important;
    filter: none !important;
  }
}


.eno-odometer, .eno-ticker, .eno-scramble {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: baseline;
  -ms-flex-align: baseline;
  align-items: baseline;
}

  .eno-odometer .eno-reel {
    position: relative;
    display: inline-block;
    height: 1em;
    overflow: hidden;
  }

  .eno-odometer .eno-reel-track {
    display: block;
    line-height: 1;
    will-change: transform;
  }

.eno-slot {
  display: inline-block;
  -webkit-perspective: 600px;
  perspective: 600px;
}

.eno-slot-inner {
  display: inline-block;
  -webkit-transform-origin: center;
  -ms-transform-origin: center;
  transform-origin: center;
  will-change: transform,opacity;
}

@media (prefers-reduced-motion: reduce) {
  [data-anim], .eno-odometer .eno-reel-track {
    visibility: visible !important;
    -webkit-animation: none !important;
    animation: none !important;
    -webkit-transition: none !important;
    transition: none !important;
    -webkit-filter: none !important;
    filter: none !important;
  }
}
/* ==========================================================================
   POWERSHELL — Composable Shell Layout System

   Shell classes for frame-based layouts, toolbars, filter bars,
   and embedded contexts (modals, trays, popovers).

   Extends: layout.css page templates (page-list, page-detail, etc.)
   Works with: split-pane.css, filter.css, modal.css, tray.css
   ========================================================================== */


/* ==========================================================================
   TOKENS
   ========================================================================== */

:root {
  /* Shell surface */
  --bg-shell: var(--bg-panel, var(--alpha-white-100));
  --border-shell: var(--border-panel, var(--border-primary));
  --border-shell-toolbar: var(--border-panel, var(--border-primary));
  --border-shell-footer: var(--border-panel, var(--border-primary));

  /* Filter bar (expandable row) */
  --height-filter-bar: 200px;
  --transition-filter-bar: var(--transition-panel, 200ms ease);
}


/* ==========================================================================
   PS-FRAME — Frame-based shell (no card wrapper)
   Use instead of .page-list.card for full-area content.
   ========================================================================== */


/* ==========================================================================
   PS-TOOLBAR — Standardized toolbar region
   Replaces ad-hoc panel-header form patterns.
   Works as both <form> and <div>.
   ========================================================================== */

.ps-toolbar {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  min-width: 0px;
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;
  padding-left: 1rem;
  padding-right: 1rem;
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
}

.collapse.show.ps-toolbar {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .ps-toolbar {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.ps-toolbar.items-baseline { margin-bottom: 10px; }

html.is-mobile .ps-toolbar:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .ps-toolbar.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.ps-toolbar[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .ps-toolbar.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .ps-toolbar.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .ps-toolbar.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .ps-toolbar.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.ps-toolbar {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .ps-toolbar.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.ps-toolbar > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

/* Toolbar regions */
.ps-toolbar__left {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  min-width: 0px;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.ps-toolbar__left[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.ps-toolbar__left {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.ps-toolbar__left > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.ps-toolbar__right {
  margin-left: auto;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  min-width: 0px;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
  gap: 0.5rem;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.ps-toolbar__right[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.ps-toolbar__right {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.ps-toolbar__right > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

/* Nav-tabs variant — border + zero bottom padding so tabs sit on the line.
   Skip when tabs live inside a ribbon (they don't need underline treatment). */
.ps-toolbar:has(> .nav-tabs) {
  padding-bottom: 0;
  border-bottom: 1px solid var(--border-shell-toolbar);
}

/* Neutralise nav-tabs own border/background when hosted inside a ps-toolbar */
.ps-toolbar > .nav-tabs {
  margin-bottom: 0;
  border-bottom: none;
  background-color: transparent;
}

/* Dense variant — tighter for embedded contexts */


/* ==========================================================================
   PS-FOOTER — Standardized footer region
   ========================================================================== */


/* ==========================================================================
   PS-FILTER-BAR — Expandable filter row
   Sits between toolbar and body. Slides open/closed with max-height.
   ========================================================================== */


/* ==========================================================================
   PS-STATUS-BAR — Bottom status bar (counts, timestamps, etc.)
   ========================================================================== */


/* ==========================================================================
   EMBEDDED CONTEXT MODIFIERS
   Optimize shells for overlay/embedded contexts.
   ========================================================================== */

/* Modal context — no outer bg needed, modal provides it */

/* Tray context — compact spacing */

/* Popover context — minimal chrome */

/* Nested context — inherits parent borders */


/* ==========================================================================
   SURFACE VARIANTS — Card-like panel backgrounds
   Mirror card variants for consistent panel styling.
   ========================================================================== */

/* Default: solid panel surface */

/* Raised: slightly elevated look */

/* Sunken: recessed into the canvas */

/* Bordered: adds a visible border around the panel */

/* Card: full card treatment (border + radius + shadow) */

/* Ghost: transparent with border only */


/* ==========================================================================
   FRAME RAIL PATTERNS — Persistent side panels in app-frame grid
   Use inside .app-frame rails for navigation, inspector, or activity panels.
   ========================================================================== */

/* Rail panel — persistent side panel in a frame rail */

/* Rail widths */

/* Rail header/body/footer inherit ps-toolbar/ps-footer styles */


/* ==========================================================================
   PS-SEARCH — Search input with shortcut hint
   Wraps an input + optional kbd badge for Ctrl+K focus.
   ========================================================================== */

.ps-search {
  position: relative;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.ps-search[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

.ps-search .form-control {
  padding-right: 4rem;
}

/* Use .kbd-sm inside search shortcut hints */

/* Clear button inside search — hidden by default, shown via .has-value */
.ps-search__clear {
  position: absolute;
  right: 0.5rem;
  width: 1.25rem;
  height: 1.25rem;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 9999px;
  font-size: 0.75rem;
  line-height: 1rem;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.ps-search__clear[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
.ps-search__clear {
  display: none;
  color: var(--text-tertiary);
  background: transparent;
  border: none;
  -webkit-transition: color 100ms ease, background-color 100ms ease;
  transition: color 100ms ease, background-color 100ms ease;
}

.ps-search__clear:hover {
  color: var(--text-primary);
  background-color: var(--bg-primary-subtle);
}

/* When clear is visible, push shortcut out */
.ps-search.has-value .ps-search__clear {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
}

/* Hide shortcut hint when input has focus */

/* Inline spinner shown while a search is in progress */

.ps-search.is-searching .ps-search__spinner {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
}

.ps-search.is-searching .ps-search__shortcut {
  display: none;
}

/* Adjust input padding when clear button is present */
.ps-search:has(.ps-search__clear) .form-control {
  padding-right: 2rem;
}


/* ==========================================================================
   ACCESSIBILITY — Focus styles for interactive shell regions
   ========================================================================== */

/* Divider focus ring for keyboard users */

/* Toolbar button focus ring */
.ps-toolbar button:focus-visible,
.ps-toolbar input:focus-visible {
  outline: 2px solid var(--border-focus);
  outline-offset: -1px;
}


/* ==========================================================================
   RESPONSIVE
   ========================================================================== */

@media (max-width: 639px) {
  /* Filter bar hidden on mobile — use tray/overlay instead */

  /* Toolbar wraps on mobile */
  .ps-toolbar {
    -ms-flex-wrap: wrap;
    flex-wrap: wrap;
    padding-left: 0.75rem;
    padding-right: 0.75rem;
    padding-top: 0.5rem;
    padding-bottom: 0.5rem;
  }
}

/* Canonical theme tokens (Reinly.Design, R2 values = the app's, tq-8176). */
/* =============================================================================
 * MOTION — the design system's time layer (durations, easing, choreography)
 * -----------------------------------------------------------------------------
 * We had colour, spacing and type tokens and nothing canonical for TIME, so every
 * builder invented duration and easing at the point of use. Measured across
 * Assets/css before this file existed:
 *
 *   • 208 files contained hardcoded `ms` inside transition/animation (~850 literals)
 *   • the literal tail was 100 / 120 / 140 / 150 / 160 / 180 / 200 / 220 / 240 / 300 / 600ms —
 *     nobody chose 160 over 180; they were typed at different times by different hands
 *   • 16 duration tokens and 11 easing tokens already existed, defined IN THE THEME FILES
 *     (theme-light.css AND theme-dark.css) with byte-identical values — motion is not a
 *     theme concern, so that was pure duplication with two places to drift
 *   • FOUR names resolved to one curve: --ease-default, --ease-in-out, --ease-collapse and
 *     --ease-spinner-dash are all cubic-bezier(0.4, 0, 0.2, 1); three more
 *     (--ease-spinner-overlay, --ease-spinner-pop and the retired tag easing) are all cubic-bezier(.2, 0, .2, 1)
 *
 * So the problem was never a missing token. It was that the tokens were unenforced, themed,
 * over-named, and the literals won.
 *
 * This file is the single, THEME-INDEPENDENT home for time. It is imported before the theme
 * files so a theme can still override a semantic alias, but no theme needs to.
 *
 * ── THE RULES: WHEN motion is used at all ───────────────────────────────────
 * These matter more than the numbers. A duration scale with no rule about when to move just
 * makes inconsistent motion consistent in length.
 *
 * 1. MOTION EXPLAINS A RELATIONSHIP — spatial or causal. A drawer slides because it comes from
 *    an edge. A menu scales from its trigger because that is where it came from. If you cannot
 *    say what relationship the motion explains, the answer is no motion.
 *    Corollary: a THEME CHANGE does not animate. Nothing moved, nothing came from anywhere, and
 *    cross-fading every surface makes the whole product feel slow at the exact moment the user
 *    asked for an instant change.
 *
 * 2. EXITS ARE FASTER THAN ENTRANCES. Use --motion-exit leaving, --motion-enter arriving.
 *    Waiting for something to leave is the single most common way an interface feels sluggish;
 *    the user has already decided, so get out of the way.
 *
 * 3. NEVER ANIMATE A PROPERTY THAT TRIGGERS LAYOUT. transform and opacity only. Animating
 *    width/height/top/left forces layout on every frame and will jank on a low-end tablet,
 *    which is the device that matters here. Use transform: scale/translate instead.
 *
 * 4. FEEDBACK IS IMMEDIATE, EVEN WHEN THE RESULT IS NOT. Every action acknowledges itself
 *    within --motion-fast. If the work takes longer, that is a loading STATE (skeleton, busy,
 *    progress), not a longer animation. Never make someone watch an animation to learn that a
 *    click registered.
 *
 * 5. MOTION IS NEVER THE ONLY SIGNAL. Anything communicated by movement is also communicated by
 *    a durable change — text, icon, state class. Reduced-motion users and anyone who looked away
 *    must get the same information.
 *
 * 6. ONE MOVING THING. If two things animate at once, one of them is decoration. Sequenced
 *    choreography (stagger, cascade) is for entrances of a SET, never for a single action.
 *
 * 7. NO RAW LITERALS. A duration or easing typed directly into component CSS is invisible to
 *    every rule above. tests/motion-tokens.js enforces this — a spec without an assertion is a
 *    comment (R-69).
 * ========================================================================== */

:root {
  /* ── PRIMITIVES — the only real decisions. Deliberately four. ──────────────
     These match the EXISTING token values exactly, so adopting this file changes
     no rendered timing anywhere; it gives the values one home and one vocabulary.
     Retuning (e.g. collapsing the 285 literal 120ms sites onto --motion-fast) is a
     separate, deliberate sweep — not a silent side effect of consolidation. */
  --motion-instant: 0ms;     /* state that must not animate — theme swap, data swap */
  --motion-fast:    100ms;   /* hover, focus, colour, small state changes, feedback */
  --motion-base:    200ms;   /* dropdowns, popovers, tooltips, panel reveals */
  --motion-slow:    300ms;   /* drawers, sheets, sidebar — travel across the viewport */

  /* ── EASING — three curves, one job each ─────────────────────────────────── */
  --motion-ease-standard: cubic-bezier(0.4, 0, 0.2, 1);   /* enters and settles; the default */
  --motion-ease-exit:     cubic-bezier(0.4, 0, 1, 1);     /* leaving — accelerate away, never linger */
  --motion-ease-spatial:  cubic-bezier(0.32, 0.72, 0, 1); /* things with physical position (drawer, sheet) */

  /* ── CHOREOGRAPHY — the enter/exit pairing nothing had before ──────────────
     Rule 2 in a usable form: `transition: opacity var(--motion-enter);` on the open state and
     `var(--motion-exit)` on the closed state. Previously every overlay opened and closed at the
     same speed because there was no vocabulary for the difference. */
  --motion-enter: var(--motion-base) var(--motion-ease-standard);
  --motion-exit:  var(--motion-fast) var(--motion-ease-exit);
  --motion-move:  var(--motion-slow) var(--motion-ease-spatial);

  /* ── ALIAS LAYER — every pre-existing name, mapped onto a primitive ────────
     Provably value-identical to what theme-light.css / theme-dark.css defined, so nothing
     re-times. The point is that the duplicate NAMES now visibly resolve to the same primitive:
     four names for cubic-bezier(0.4, 0, 0.2, 1) is not four decisions, and seeing them collapse
     here is what makes the migration obvious.
     New code uses the --motion-* names; these exist so the ~850-literal sweep can be incremental
     rather than one unreviewable commit. */
  --duration-instant: var(--motion-instant);
  --duration-fast:    var(--motion-fast);
  --duration-normal:  var(--motion-base);
  --duration-slow:    var(--motion-slow);
  --duration-slower:  500ms;                              /* the only genuine 5th step in use */

  --ease-default: var(--motion-ease-standard);
  --ease-in-out:  var(--motion-ease-standard);            /* was a duplicate name for the same curve */
  --ease-out:     cubic-bezier(0, 0, 0.2, 1);             /* genuinely distinct: decelerate-only */
  --ease-in:      var(--motion-ease-exit);                /* was a duplicate name for the same curve */
  --ease-bounce:  cubic-bezier(0.34, 1.56, 0.64, 1);      /* see the note below — flagged, not blessed */

  /* ── COMPONENT-SEMANTIC, but NOT theme-dependent ─────────────────────────
     These were defined in the theme files, where nothing about them varies by theme.
     (The retired tag duration / easing tokens were defined in theme-light.css ONLY, so in DARK every
     consumer fell back to no value — the exact drift that having two homes causes.) Collapse durations were duplicated byte-identically in both. One home now. */
  --duration-collapse:      260ms;
  --duration-collapse-fast: 180ms;
  --duration-collapse-slow: 360ms;
  --ease-collapse:          var(--motion-ease-standard);

  /* tq-9626 (A313, isabella 900077714): the tag's own duration / easing tokens are gone: a tag / chip moves on the SHARED
     --duration-fast / --ease-default, so it can never step outside the reduced-motion primitives. */

  /* ── SEMANTIC MOTION (looping / feedback) — moved out of the theme files ──
     These were declared at :root in BOTH theme files. Nothing about a spinner's rotation period
     is a colour-scheme concern, and the duplication had already drifted: theme-dark declared
     --duration-spinner-rotate: 1.35s and --duration-spinner-dash: 1.6s against light's 1.2s /
     1.5s, so dark spinners ran ~12% slower than light ones. Nobody decided that.
     ⚠️ UNIFIED to the light values, which IS a visible (if subtle) change in dark — stated
     rather than hidden. Flagged for Pavel if the dark timing was deliberate. */
  --duration-row-sweep:      800ms;
  --duration-row-sweep-fade: 600ms;
  --ease-row-sweep:          cubic-bezier(0.25, 0.1, 0.25, 1);

  --duration-progress-indeterminate: 1.2s;

  --duration-spinner-rotate:  1.2s;
  --duration-spinner-dash:    1.5s;
  --ease-spinner-dash:        var(--motion-ease-standard);
  --duration-spinner-overlay: 180ms;
  --ease-spinner-overlay:     cubic-bezier(0.2, 0, 0.2, 1);
  --duration-spinner-pop:     160ms;
  --ease-spinner-pop:         cubic-bezier(0.2, 0, 0.2, 1);

  /* ── SURFACE-SPECIFIC, still global — folded in from components/foundations/powershell.css,
     which declared its own :root block. (The mobile easing aliases went with apps/mobile.css,
     their only consumer: tq-8614 M3.) */

  --duration-filter-bar: var(--motion-base);
}

/* ── REDUCED MOTION — one global rule, not 200 per-component @media blocks ───
   Rule 5 says motion is never the only signal, so removing it must never remove information.
   Collapsing the primitives to instant is enough: every consumer reads them, so honouring the
   preference stops being something each builder has to remember (most did not).
   Durations go to ~0 rather than `animation: none` so animationend/transitionend listeners still
   fire — killing them outright strands any component that waits for one to clean up. */
@media (prefers-reduced-motion: reduce) {
  :root {
    --motion-fast: 1ms;
    --motion-base: 1ms;
    --motion-slow: 1ms;
    --duration-slower: 1ms;
  }

  /* Looping/decorative animation stops entirely; it communicates nothing durable. Progress and
     busy indicators are exempt — there, the motion IS the information. */
  *:not([data-motion-essential]):not(.progress-bar__fill):not([class*="spinner"]):not([class*="loading"]) {
    -webkit-animation-iteration-count: 1 !important;
    animation-iteration-count: 1 !important;
  }
}

/* ── FLAGGED, NOT BLESSED ────────────────────────────────────────────────────
   --ease-bounce (cubic-bezier(0.34, 1.56, 0.64, 1)) overshoots. It is kept because 8 sites use it
   and removing it silently would change them, but an overshoot curve is a playful signal in a
   operational application and nobody decided it. Flagged for Pavel: keep it for a specific
   named purpose, or retire it onto --motion-ease-standard in the migration sweep. */ /* tq-9626 (A313): THE motion tokens + the reduced-motion primitives (one source with the DS), before the themes */
/* Theme: Light */
/* VALUES = THE SERVED APP (tq-8176 R2, USER via John 900047126: "Reinly app is visual truth").
   Every token src/reinly.webapp/Assets/css/base/theme-light.css defines resolves here to the
   value the app renders (src/reinly.webapp @ 09387252, http://172.16.1.201:5205/). The DS
   keeps its own structure and names; its DS-only tokens are kept. Where an older rationale
   comment below describes a different value, the value wins; changed lines say so inline.
   Deliberate exceptions:
   - the WHITELIST #S4 muted-text contrast block keeps its WCAG AA values (the app's are
     below AA; ruling asked of monica, message 900047376);
   - tokens the app points at an UNDEFINED name (--text-muted, --text-default, --bg-hover;
     --bg-surface / --bg-body outside mica) keep the DS's working value. */

[data-theme="theme-light"],
[data-theme="theme-mica-light"] {
  /* Canvas & Scrollbars */
  --scroll-thumb: rgba(0, 0, 0, 0.18);
  --scroll-track: var(--utility-neutral-300);
  --canvas-primary: var(--alpha-neutral-50-50);
  --canvas-secondary: var(--alpha-white-100);
  --bg-alpha-0: var(--alpha-0);
  /* Typography */
  --text-primary: var(--utility-neutral-900);
  --text-primary-alt: var(--utility-neutral-850);
  --text-primary-hover: var(--utility-neutral-950);
  --text-primary-subtle: var(--utility-neutral-800);
  --text-primary-solid: var(--utility-blue-500);
  --text-secondary: var(--utility-neutral-700);
  --text-secondary-alt: var(--utility-neutral-800);
  --text-secondary-hover: var(--utility-neutral-800);
  --text-secondary-subtle: var(--utility-neutral-600);
  --text-secondary-solid: var(--utility-neutral-800);
  --text-tertiary: var(--utility-neutral-600);
  --text-tertiary-alt: var(--utility-neutral-700);
  --text-tertiary-hover: var(--utility-neutral-700);
  --text-tertiary-subtle: var(--utility-neutral-500);
  --text-tertiary-solid: var(--utility-neutral-700);
  --text-quaternary: var(--utility-neutral-500);
  --text-quaternary-alt: var(--utility-neutral-600);
  --text-quaternary-hover: var(--utility-neutral-600);
  --text-quaternary-subtle: var(--utility-neutral-400);
  --text-quaternary-solid: var(--utility-neutral-600);
  --text-disabled: var(--utility-neutral-500);
  /* DR-003 was filed here, but neutral-500 on LIGHT is 4.73:1 on --bg-input (white)
     and 4.53:1 on --bg-input-soft — it already passes AA. (The reported 3.45:1 is the
     DARK-surface value; fixed in theme-dark.css.) Deliberately NOT darkened: neutral-600
     would put placeholder text ABOVE --text-quaternary in weight, so empty fields would
     read as filled-in content. Only 4.34:1 on --bg-input-disabled, which WCAG 1.4.3
     exempts. Leave at neutral-500. */
  --text-placeholder: var(--utility-neutral-500);
  --text-detail-section-title: var(--text-primary);
  /* Semantic text */
  /* Tonal-button ink. A .btn-tonal-* paints its label in the status ink over a 12%
     mix of that SAME ink — so on the light tint the base step lands at 3.85 (danger),
     4.19 (success) and 4.25 (warning), all under AA for a 13px label. One step darker
     clears it (5.18 / 6.04 / 6.23) while the tint, which still derives from the base
     token, is visually unchanged. Ink only — this is not a new status hue. */
  --text-danger: var(--utility-red-600);
  --text-danger-strong: var(--utility-red-700);
  --text-danger-alt: var(--utility-red-500);
  --text-danger-hover: var(--utility-red-700);
  --text-danger-subtle: var(--utility-red-400);
  --text-danger-solid: var(--utility-red-800);
  --text-warning: var(--utility-yellow-600);
  --text-warning-strong: var(--utility-orange-800);
  --text-warning-alt: var(--utility-yellow-500);
  --text-warning-hover: var(--utility-yellow-700);
  --text-warning-subtle: var(--utility-yellow-400);
  --text-warning-solid: var(--utility-yellow-800);
  --text-success: var(--utility-green-600);
  --text-success-strong: var(--utility-green-800);
  --text-success-alt: var(--utility-green-500);
  --text-success-hover: var(--utility-green-700);
  --text-success-subtle: var(--utility-green-400);
  --text-success-solid: var(--utility-green-800);
  --text-info: var(--utility-blue-600);
  /* Info tag text sits on a ~12% blue tint where blue-600 is 4.39:1 — a hair below
     AA; blue-700 clears it. Light only; dark keeps the lighter --text-info. (#5607) */
  --text-tag-info: var(--utility-blue-700);
  --text-info-alt: var(--utility-blue-500);
  --text-info-hover: var(--utility-blue-700);
  --text-info-subtle: var(--utility-blue-400);
  --text-info-solid: var(--utility-blue-800);
  --text-purple: var(--utility-purple-600);
  --text-purple-alt: var(--utility-purple-500);
  --text-purple-hover: var(--utility-purple-700);
  --text-purple-subtle: var(--utility-purple-400);
  --text-purple-solid: var(--utility-purple-800);
  --text-indigo: var(--utility-indigo-600);
  --text-indigo-alt: var(--utility-indigo-500);
  --text-indigo-hover: var(--utility-indigo-700);
  --text-indigo-subtle: var(--utility-indigo-400);
  --text-indigo-solid: var(--utility-indigo-800);
  --text-teal: var(--utility-teal-600);
  --text-teal-alt: var(--utility-teal-500);
  --text-teal-hover: var(--utility-teal-700);
  --text-teal-subtle: var(--utility-teal-400);
  --text-teal-solid: var(--utility-teal-800);
  --text-pink: var(--utility-pink-600);
  --text-pink-alt: var(--utility-pink-500);
  --text-pink-hover: var(--utility-pink-700);
  --text-pink-subtle: var(--utility-pink-400);
  --text-pink-solid: var(--utility-pink-800);
  --text-mint: var(--utility-mint-600);
  --text-mint-alt: var(--utility-mint-500);
  --text-mint-hover: var(--utility-mint-700);
  --text-mint-subtle: var(--utility-mint-400);
  --text-mint-solid: var(--utility-mint-800);
  /* Icon tones — the iconography foreground scale (closes the --text-icon-* gap).
     Aliases of the semantic --text-* scale so icons stay theme-aware + AA; --text-icon-brand anchors the UUI accent. */
  --text-icon: var(--text-secondary);
  --text-icon-primary: var(--text-primary);
  --text-icon-secondary: var(--text-secondary);
  --text-icon-tertiary: var(--text-tertiary);
  --text-icon-quaternary: var(--text-quaternary);
  --text-icon-light: var(--text-tertiary);
  --text-icon-dark: var(--text-primary);
  --text-icon-disabled: var(--text-disabled);
  --text-icon-brand: var(--utility-emerald-800); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --text-icon-success: var(--text-success);
  --text-icon-warning: var(--text-warning);
  --text-icon-danger: var(--text-danger);
  --text-icon-info: var(--text-info);
  --text-icon-purple: var(--text-purple);
  --text-icon-indigo: var(--text-indigo);
  --text-icon-pink: var(--text-pink);
  --text-icon-teal: var(--text-teal);
  --text-icon-mint: var(--text-mint);
  /* Borders */
  /* Default border — neutral-300, per UUI v8 (#231). Was neutral-200: one step weak,
     which read faint once bg-primary went white in Wave 0.1. Re-stated in the
     reinly brand override block below the sync marker (that copy is the authority —
     Reinly.Webapp still ships neutral-200 and would revert this one). */
  --border-primary: var(--utility-neutral-300);
  --border-primary-alt: var(--utility-neutral-300);
  --border-primary-hover: var(--utility-neutral-300);
  --border-primary-subtle: var(--utility-neutral-100);
  --border-primary-solid: var(--utility-neutral-400);
  --border-secondary: var(--utility-neutral-200);
  --border-secondary-alt: var(--utility-neutral-300);
  --border-secondary-hover: var(--utility-neutral-300);
  --border-secondary-subtle: var(--utility-neutral-100);
  --border-secondary-solid: var(--utility-neutral-400);
  --border-tertiary: var(--utility-neutral-400);
  --border-tertiary-alt: var(--utility-neutral-400);
  --border-tertiary-hover: var(--utility-neutral-400);
  --border-tertiary-subtle: var(--utility-neutral-300);
  --border-tertiary-solid: var(--utility-neutral-600);
  --border-quaternary: var(--utility-neutral-500);
  --border-quaternary-alt: var(--utility-neutral-600);
  --border-quaternary-hover: var(--utility-neutral-600);
  --border-quaternary-subtle: var(--utility-neutral-400);
  --border-quaternary-solid: var(--utility-neutral-700);
  --border-danger: var(--utility-red-400);
  --border-danger-alt: var(--utility-red-500);
  --border-danger-hover: var(--utility-red-500);
  --border-danger-subtle: var(--utility-red-200);
  --border-danger-solid: var(--utility-red-800);
  --border-warning: var(--utility-yellow-400);
  --border-warning-alt: var(--utility-yellow-500);
  --border-warning-hover: var(--utility-yellow-500);
  /* yellow-200 -> yellow-300 — the ONE value Isabella's DS-ROW-DIVIDER-STATUS ruling
     requires (docs/ds-row-divider-status-ruling.md). A paired family divider must reach
     >= 1.09:1 against its own tint; against --bg-warning-subtle (yellow-100 #fef9c2) the
     200 rung measured 1.082 and missed. Reproduced independently before changing it:
        yellow-200  1.082:1  FAIL      yellow-300  1.235:1  PASS
     There is no rung between them, so 1.235 is the nearest available step — slightly above
     the 1.185 accepted at #166, and in the same direction as that ruling.
     NOT a bespoke divider token, per the ruling: the family rung moves, nothing is added.
     Blast radius, stated rather than implied: 17 non-theme consumers (alert, error-state,
     import-flow, select-across-pages, --ring-avatar-warning) all get a slightly stronger
     warning border — every one of them a border ON a warning tint, so the same direction.
     DARK IS UNTOUCHED: its pairing already measures 1.758. */
  --border-warning-subtle: var(--utility-yellow-200);
  --border-warning-solid: var(--utility-yellow-800);
  --border-success: var(--utility-green-400);
  --border-success-alt: var(--utility-green-500);
  --border-success-hover: var(--utility-green-500);
  --border-success-subtle: var(--utility-green-200);
  --border-success-solid: var(--utility-green-800);
  --border-info: var(--utility-blue-400);
  --border-info-alt: var(--utility-blue-500);
  --border-info-hover: var(--utility-blue-500);
  --border-info-subtle: var(--utility-blue-200);
  --border-info-solid: var(--utility-blue-800);
  --border-purple: var(--utility-purple-400);
  --border-purple-alt: var(--utility-purple-500);
  --border-purple-hover: var(--utility-purple-500);
  --border-purple-subtle: var(--utility-purple-200);
  --border-purple-solid: var(--utility-purple-800);
  --border-indigo: var(--utility-indigo-400);
  --border-indigo-alt: var(--utility-indigo-500);
  --border-indigo-hover: var(--utility-indigo-500);
  --border-indigo-subtle: var(--utility-indigo-200);
  --border-indigo-solid: var(--utility-indigo-800);
  --border-teal: var(--utility-teal-400);
  --border-teal-alt: var(--utility-teal-500);
  --border-teal-hover: var(--utility-teal-500);
  --border-teal-subtle: var(--utility-teal-200);
  --border-teal-solid: var(--utility-teal-800);
  --border-pink: var(--utility-pink-400);
  --border-pink-alt: var(--utility-pink-500);
  --border-pink-hover: var(--utility-pink-500);
  --border-pink-subtle: var(--utility-pink-200);
  --border-pink-solid: var(--utility-pink-800);
  --border-mint: var(--utility-mint-400); /* consumed by .divider-mint (data/divider.css) */
  /* Backgrounds */
  /* SURFACE RAMP — rebased to UUI v8 at source (Pavel, #28/#29). This base used to
     ship bg-primary: neutral-100 = oklch(97%) — grey. v8's primary surface is WHITE.
     The reinly brand overrides block at the foot of this file re-states this same
     ramp and remains THE AUTHORITY; the two agree on purpose:
       · this copy keeps the ramp free of a stale grey def, so a
         `grep -- '--bg-primary: var(--utility-neutral-' ` audit comes back empty and
         deleting the override block costs nothing;
       · that copy survives the Reinly.Webapp re-sync, which would otherwise silently
         restore the grey.
     ON RE-SYNC: Reinly.Webapp STILL ships the old ramp as of 2026-07-16 (verified:
     src/Reinly.Webapp/Assets/css/base/theme-light.css → bg-primary: neutral-100). After
     replacing this base, re-apply this rebase. A missed re-apply costs audit noise,
     not a rendering regression, because the override block still wins.
     The -subtle steps are intentionally NOT shifted — rationale with the override. */
  --bg-black: var(--utility-neutral-900);
  --bg-black-hover: var(--utility-neutral-950);
  --bg-primary: var(--alpha-white-100);
  --bg-primary-alt: var(--alpha-white-100);
  --bg-primary-hover: var(--utility-neutral-100);
  --bg-primary-subtle: var(--utility-neutral-50);
  --bg-primary-solid: var(--utility-blue-500);
  --bg-secondary: var(--utility-neutral-50);
  --bg-secondary-alt: var(--utility-neutral-50);
  --bg-secondary-hover: var(--utility-neutral-100);
  --bg-secondary-subtle: var(--utility-neutral-100);
  --bg-secondary-solid: var(--utility-neutral-800);
  --bg-tertiary: var(--utility-neutral-100);
  --bg-tertiary-alt: var(--utility-neutral-200);
  --bg-tertiary-hover: var(--utility-neutral-200);
  --bg-tertiary-subtle: var(--utility-neutral-200);
  --bg-tertiary-solid: var(--utility-neutral-700);
  --bg-quaternary: var(--utility-neutral-200);
  --bg-quaternary-alt: var(--utility-neutral-300);
  --bg-quaternary-hover: var(--utility-neutral-300);
  --bg-quaternary-subtle: var(--utility-neutral-300);
  --bg-quaternary-solid: var(--utility-neutral-600);
  --bg-overlay: var(--utility-neutral-950);
  /* Map scrim (DR-027). Pill/legend chrome floating over a MAP TILE LAYER. These two are
     deliberately THEME-INVARIANT — identical in theme-light.css and theme-dark.css —
     because the tiles beneath do not theme-flip. A theme-reactive token here would invert
     the ink to dark-on-dark over an unchanged light basemap in dark mode. Do not "fix"
     the duplication by collapsing these onto --bg-primary / --text-primary.
     Worst case (scrim over a pure-white tile) measures 7.89:1 — passes AA and AAA. */
  --bg-gray: var(--utility-neutral-500);
  --bg-gray-alt: var(--utility-neutral-600);
  --bg-gray-hover: var(--utility-neutral-600);
  --bg-gray-subtle: var(--utility-neutral-100);
  --bg-gray-solid: var(--utility-neutral-800);
  --bg-danger: var(--utility-red-500);
  --bg-danger-alt: var(--utility-red-600);
  --bg-danger-hover: var(--utility-red-600);
  --bg-danger-subtle: var(--utility-red-100);
  --bg-danger-solid: var(--utility-red-800);
  --bg-warning: var(--utility-yellow-400);
  --bg-warning-alt: var(--utility-yellow-500);
  --bg-warning-hover: var(--utility-yellow-500);
  --bg-warning-subtle: var(--utility-yellow-100);
  --bg-warning-solid: var(--utility-yellow-800);
  --bg-success: var(--utility-green-400);
  --bg-success-alt: var(--utility-green-500);
  --bg-success-hover: var(--utility-green-500);
  --bg-success-subtle: var(--utility-green-100);
  --bg-success-solid: var(--utility-green-800);
  --bg-info: var(--utility-blue-400);
  --bg-info-alt: var(--utility-blue-500);
  --bg-info-hover: var(--utility-blue-500);
  --bg-info-subtle: var(--utility-blue-100);
  --bg-info-solid: var(--utility-blue-800);
  --bg-purple: var(--utility-purple-400);
  --bg-purple-alt: var(--utility-purple-500);
  --bg-purple-hover: var(--utility-purple-500);
  --bg-purple-subtle: var(--utility-purple-100);
  --bg-purple-solid: var(--utility-purple-800);
  --bg-indigo: var(--utility-indigo-400);
  --bg-indigo-alt: var(--utility-indigo-500);
  --bg-indigo-hover: var(--utility-indigo-500);
  --bg-indigo-subtle: var(--utility-indigo-100);
  --bg-indigo-solid: var(--utility-indigo-800);
  --bg-teal: var(--utility-teal-400);
  --bg-teal-alt: var(--utility-teal-500);
  --bg-teal-hover: var(--utility-teal-500);
  --bg-teal-subtle: var(--utility-teal-100);
  --bg-mint-subtle: var(--utility-mint-100); /* tq-8404: was referenced (avatar mint) but never defined; the sibling pattern (100 light / 900 dark) */
  --bg-teal-solid: var(--utility-teal-800);
  --bg-pink: var(--utility-pink-400);
  --bg-pink-alt: var(--utility-pink-500);
  --bg-pink-hover: var(--utility-pink-500);
  --bg-pink-subtle: var(--utility-pink-100);
  --bg-pink-solid: var(--utility-pink-800);
  /* Rating (stars) — faithful UUI rating-stars/rating-badge: a gold fill
     (yellow-400) over a neutral empty track (bg-tertiary). Semantic seat so the
     component never hardcodes a hue; the interactive focus ring resolves through
     --border-focus (brand). --star-filled-hover deepens the preview on hover. */
  --star-filled: var(--utility-yellow-400);
  --star-empty: var(--bg-tertiary);
  --star-filled-hover: var(--utility-yellow-500);
  /* Theme Swatches */
  --text-theme-label: var(--text-tertiary);
  /* WHITELIST #1b — every PRIMARY chip in the theme selector is the reinly brand, and
     the brand is now ONE blue in both themes (brand-500), so all four preview tiles show
     the same primary. These tiles preview a THEME, not the active one, so they resolve
     through the ramp (--color-brand-500) rather than a semantic like --bg-brand-solid,
     which would report whichever theme is currently applied. base/secondary/accent stay
     per-theme — the tiles still differ, just not in the brand. */
  /* Light theme swatches */
  --theme-light-base-swatch: var(--utility-neutral-900);
  --theme-light-primary-swatch: var(--utility-indigo-500); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --theme-light-secondary-swatch: var(--utility-pink-400);
  --theme-light-accent-swatch: var(--utility-teal-400);
  --bg-theme-light-swatch: var(--alpha-white-100);
  --border-theme-light-swatch: var(--utility-neutral-200);
  /* Dark theme swatches */
  --theme-dark-base-swatch: var(--utility-neutral-100);
  --theme-dark-primary-swatch: var(--utility-indigo-300); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --theme-dark-secondary-swatch: var(--utility-pink-300);
  --theme-dark-accent-swatch: var(--utility-teal-300);
  --bg-theme-dark-swatch: var(--utility-neutral-900);
  --border-theme-dark-swatch: var(--utility-neutral-700);
  /* Mica light swatches — theme_selector.css has referenced these six since it was
     adopted, but NOTHING ever declared them, so the whole Mica-light tile rendered
     with no swatch fills and no tile surface/border at all. Declared here as ALIASES
     of the light set (not copies, so they cannot drift) — the same approach the
     Mica-dark tile already documents for reusing the dark set. */
  --theme-mica-light-base-swatch: var(--theme-light-base-swatch);
  --theme-mica-light-primary-swatch: var(--utility-indigo-500); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --theme-mica-light-secondary-swatch: var(--theme-light-secondary-swatch);
  --theme-mica-light-accent-swatch: var(--theme-light-accent-swatch);
  --bg-theme-mica-light-swatch: var(--bg-theme-light-swatch);
  --border-theme-mica-light-swatch: var(--border-theme-light-swatch);
  /* Sidebar */
  --width-sidebar-expanded: 240px;
  --bg-sidebar: var(--utility-neutral-50); /* tq-8176: the served app's value (reinly.webapp @ 09387252) */
  --bg-sidebar-hover: var(--alpha-white-100);
  --bg-sidebar-header: var(--alpha-0);
  --bg-sidebar-avatar: var(--alpha-white-100);
  /* NOTE #13 (Pavel) — lighter separator: the sidebar's structural edge (the left/right
     rule that divides nav from canvas) was --border-primary (neutral-300), a step heavier
     than the header hairline (--border-secondary, neutral-200). Repointed to the lighter
     EXISTING token so both structural shell separators sit at ONE weight (neutral-200).
     No hardcoded colour, no token-value change. Was --border-primary. */
  --border-sidebar: var(--border-secondary);
  --border-sidebar-divider: var(--utility-neutral-100);
  /* #62 (Pavel) — "the sidebar menu rails are too dark in light theme, they should be a light
     gray - like the bg hover on the menu items". #50's neutral-500 (a MID gray, chased for 2px
     weight) read as a hard tree line on the white rail. Re-pointed at the EXISTING menu-item
     hover token Pavel named — an alias, so the rail and the row fill are the same gray by
     construction and can never drift apart. No new token, no literal.
     DARK is deliberately unchanged (neutral-600): dark's hover is neutral-800, and aliasing
     there would sink the rail into the dark rail surface — #62 is a light-theme complaint and
     dark must not regress. The two themes tune this token independently, which is the point of
     it being a token. */
  /* #93 SUPERSEDED — Pavel reversed it: "the rail should not be changing color on hover".
     ONE CONSTANT rail colour now, and the constraint is HARDER than either previous state: a
     single value must stay legible against BOTH backgrounds it sits on — the resting sidebar
     surface (white, 255,255,255) AND the hover fill (neutral-100, 245,245,245).

     This declaration WAS the original root cause, which is why "revert" was not the answer: the
     rest rail was aliased to --bg-sidebar-item-hover — the rail literally WAS the hover fill
     token — so the instant a row was hovered the line rendered at exactly the fill colour and
     vanished. Dropping the hover override alone would have restored precisely that bug.

     neutral-500 renders 115,115,115: 4.74:1 against the resting surface, 4.35:1 against the hover
     fill. Both clear the 3:1 non-text UI floor, so one value holds on either background without
     ever changing. Still far lighter than the near-black active marker (neutral-900, 23,23,23),
     so the rail stays subordinate to "you are here".

     Stated as a literal scale rung, never as an alias to another semantic token: an alias is how
     this broke twice — here, and via --border-secondary in #84. There is no longer a
     --border-sidebar-rail-hover at all, so hover has no mechanism to diverge through.

     #167 (Pavel) SUPERSEDES THE VALUE ABOVE, NOT THE REASONING — 2026-07-25.
     "the color of the sidebar rail is still too dark in light mode, it should match closer to the
     light default border color we use everywhere." Three notes were one requirement: #122 (target
     ambiguous), #143 (resolved it to this rail, light mode), #167 (named the value).

     Anton RULED the rail DECORATIVE for contrast purposes, so the 3:1 non-text floor no longer
     gates it — conditional on the hierarchy being conveyed structurally. VERIFIED in Chrome's real
     accessibility tree, both form factors: the sub-items sit in a nested list INSIDE the parent's
     listitem, the toggle exposes expanded state, and collapsing removes them from the tree
     (role:none, ignored:true). The line is now genuinely decoration over a structure that stands
     without it. Evidence in MOBILE-FORK-DELTAS.md §8.

     So the rail consumes a SHARED border token rather than a bespoke rail colour. That is the
     better answer architecturally: a bespoke value was always going to drift from the borders
     around it, and a consumed token inherits future corrections for free.

     #214 — WHICH shared token changed, and the guard below is why. This read
     var(--border-default) until #214, under an explicit warning: "--border-default resolves to
     #f5f5f5, which equals --bg-sidebar-item-hover exactly. Post-#121 that is survivable: the
     highlight is inset to the rail's outer edge, so the rail's backdrop is the PANEL (1.09:1),
     not the fill. If #121's inset is ever reverted, this alias becomes #84 again. Do not revert
     one without re-deciding the other."

     #214 REVERTED #121'S INSET — Pavel asked for the sub-menu hover band at full width — so that
     is exactly the condition the warning names, and this is the re-decision it demanded. The
     guard did its job: it turned a silent light-mode regression into a required decision. Keeping
     --border-default would have painted the rail #f5f5f5 on a #f5f5f5 hover fill (1.000:1) and
     the connector would have DISAPPEARED under the pointer.

     --border-secondary (neutral-200) is the smallest move that survives the new backdrop while
     staying a CONSUMED token, so 369-371's argument still holds — this is not a bespoke rail
     colour. Against the hover fill 1.137:1, against the panel 1.24:1; both ABOVE the 1.09:1 this
     block already recorded as seen-and-accepted, so the rail is no quieter anywhere than it was.
     Anton's DECORATIVE ruling (above) still governs: no 3:1 floor applies, and the nested-list
     hierarchy that ruling was conditional on is untouched by this.

     Same defect class as Kira's divider-exposure tranche (0b4dcb9e7 / 3bd3958b4 / 96198fca8) —
     a border sharing a rung with the thing it must contrast against — but those three are all
     DARK-ONLY. This is the LIGHT instance, and it is a FILL collision rather than a surface one.
     Note for that audit: #93's claim in sidebar.css that #84's root cause was "removed at the
     token" was true by NAME only. The alias went; the value collision survived it, here. */
  --border-sidebar-rail: var(--border-secondary);
  /* Declared, not left to an implicit fallback. #84's root cause was exactly this shape: a
     var(--x, <fallback>) whose fallback silently equalled the surface it had to contrast with.
     The active marker's tone is INTENDED to track the nav dot, so the alias stays — but it is
     stated here, where anyone re-toning the sidebar will see that something depends on it. */
  --bg-sidebar-rail-active: var(--bg-sidebar-dot-active);
  /* ACTIVE == HOVER, NEUTRAL (Pavel #29/#30/#31, 2026-07-23 — reverted the blue
     selection experiment after live review). The selected surface is the SAME gray
     as hover; the only rest-state distinction is the label weight step (+ the
     sub-menu rail's small active segment for children). Active-hover firms one
     neutral rung so a selected row still answers the pointer. */
  --bg-sidebar-item-hover: var(--utility-neutral-100);
  --bg-sidebar-item-active: var(--bg-sidebar-item-hover);
  --bg-sidebar-item-active-hover: var(--utility-neutral-200);
  /* Nested-items refinement (Pavel) — the SELECTED CHILD surface. A softer step of the
     selected fill, mixed toward transparent so the rail tint shows through, so a chosen
     nested child reads quieter than a top-level selected row (the child never out-weighs a
     top row). Derived from --bg-sidebar-item-active, so it tracks the ladder above and stays
     correct in both themes. Consumed by .sidebar-subitem / .sidebar-childlink in sidebar.css. */
  --bg-sidebar-item-child-active: color-mix(in srgb, var(--bg-sidebar-item-active) 60%, transparent);
  --bg-sidebar-item-child-active-hover: color-mix(in srgb, var(--bg-sidebar-item-active) 80%, transparent);
  --text-sidebar: var(--text-primary);
  --text-sidebar-muted: var(--text-secondary);
  --text-sidebar-subtle: var(--text-quaternary);
  --bg-sidebar-dot-muted: var(--utility-neutral-300);
  --bg-sidebar-dot-active: var(--utility-neutral-900);
  /* Split Pane — divider highlight = UUI brand accent (was info-blue), FAN-OUT-RULES §3 */
  --border-split: var(--border-secondary);
  --border-split-hover: var(--utility-blue-400);
  --border-split-active: var(--utility-blue-500);
  /* Menu */
  --width-menu-expanded: 224px;
  --width-menu-collapsed: 54px;
  --menu-indent: 12px;
  --bg-menu: var(--alpha-0);
  --bg-menu-hover: var(--utility-neutral-100);
  --bg-menu-active: var(--utility-neutral-100);
  --bg-menu-open: var(--utility-neutral-100);
  --bg-menu-dot: var(--utility-neutral-400);
  --bg-menu-dot-muted: var(--utility-neutral-400);
  --bg-menu-dot-active: var(--utility-neutral-950);
  --bg-menu-badge: var(--utility-neutral-900);
  --text-menu-badge: var(--utility-neutral-50);
  --bg-menu-badge-muted: var(--utility-neutral-200);
  --text-menu-badge-muted: var(--utility-neutral-700);
  --text-menu: var(--utility-neutral-800);
  --text-menu-hover: var(--utility-neutral-950);
  --text-menu-active: var(--utility-neutral-950);
  --border-menu: var(--alpha-0);
  --border-menu-muted: var(--alpha-0);
  --icon-menu: var(--utility-neutral-800);
  --icon-menu-muted: var(--utility-neutral-600);
  /* Breadcrumbs / Page Header */
  --text-page-header: var(--text-primary);
  --text-page-title: var(--text-primary);
  --text-breadcrumb: var(--text-tertiary);
  --text-breadcrumb-separator: var(--text-tertiary);
  --bg-page-header: var(--alpha-0);
  --bg-page-header-hover: var(--bg-secondary); /* optional: if you ever use it */
  --bg-breadcrumb: var(--alpha-0);
  --bg-breadcrumb-hover: var(--bg-secondary-subtle);
  --border-breadcrumb: var(--border-primary-subtle);
  /* Breadcrumbs — standalone .breadcrumbs component (3c ADOPT · UUI
     application/breadcrumbs 1:1). Distinct from the page-header trail tokens
     above. Brand accent = UUI's own ramp (--color-brand-600), never black. */
  --text-breadcrumb-item: var(--text-quaternary);         /* rest crumb label */
  --text-breadcrumb-item-hover: var(--text-tertiary);     /* hovered crumb label */
  --text-breadcrumb-current: var(--text-link);            /* current crumb (brand) */
  --text-breadcrumb-strong: var(--text-primary);          /* account name / avatar label */
  --fg-breadcrumb-icon: var(--text-quaternary);           /* leading icon at rest */
  --fg-breadcrumb-icon-current: var(--text-link);         /* leading icon on current (brand) */
  --fg-breadcrumb-divider: var(--utility-neutral-300);    /* chevron / slash glyph */
  --bg-breadcrumb-item-hover: var(--bg-primary-hover);    /* button-type hover / current fill */
  --border-breadcrumb-line: var(--border-secondary);      /* text-line band top/bottom rule */
  --border-breadcrumb-avatar: var(--border-secondary);    /* avatar-in-ring hairline */
  /* Tabs */
  --bg-tab: var(--alpha-0);
  --bg-tab-hover: var(--alpha-0);
  --text-tab: var(--utility-neutral-500);
  --text-tab-hover: var(--utility-neutral-950);
  --text-tab-active: var(--utility-neutral-950);
  --border-tab: var(--alpha-0);
  --border-tab-hover: var(--utility-neutral-900);
  --border-tab-active: var(--utility-neutral-900);
  --text-tab-badge: var(--text-primary);
  --bg-tab-ribbon: var(--utility-neutral-100);
  --bg-tab-ribbon-hover: var(--utility-neutral-100);
  --bg-tab-ribbon-item: var(--alpha-0);
  --bg-tab-ribbon-active: var(--alpha-white-100);
  --text-tab-ribbon: var(--utility-neutral-800);
  --text-tab-ribbon-active: var(--utility-neutral-950);
  --border-tab-ribbon: var(--utility-neutral-200);
  --bg-tab-menu-hover: var(--utility-neutral-100);
  --bg-tab-menu-active: var(--utility-neutral-100);
  --text-tab-menu: var(--utility-neutral-700);
  --text-tab-menu-hover: var(--utility-neutral-950);
  --text-tab-menu-active: var(--utility-neutral-950);
  --bg-tab-browser: var(--utility-neutral-50);
  --border-tab-browser: var(--utility-neutral-200);
  --bg-tab-browser-item: var(--alpha-0);
  --bg-tab-browser-hover: var(--utility-neutral-100);
  --bg-tab-browser-active: var(--alpha-white-100);
  --text-tab-browser: var(--utility-neutral-800);
  --text-tab-browser-hover: var(--utility-neutral-800);
  --text-tab-browser-active: var(--utility-neutral-950);
  --border-tab-browser-hover: var(--alpha-0);
  --bg-tab-browser-divider: var(--utility-neutral-200);
  /* UUI tabs — faithful 6-variant model (3c ADOPT). Underline/line/button-brand
     carry UUI's brand accent; button-gray/-border/-minimal stay neutral. The
     focus ring is the brand accent (--border-focus), a single 2px ring, no halo. */
  --text-tab-rest: var(--text-tab);                    /* neutral-500 quaternary */
  --text-tab-rest-hover: var(--text-secondary);        /* neutral-700 */
  --text-tab-accent: var(--utility-emerald-800); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --border-tab-accent: var(--utility-emerald-800); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --bg-tab-accent-active: var(--utility-emerald-50); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --text-tab-neutral-active: var(--text-secondary);    /* button-gray/-border/-minimal text */
  --bg-tab-neutral-active: var(--bg-primary-hover);     /* button-gray active bg */
  --bg-tab-track: var(--bg-tab-ribbon);                /* button-border/-minimal track */
  --border-tab-track: var(--border-tab-ribbon);         /* track ring */
  --bg-tab-raised-active: var(--bg-tab-ribbon-active);  /* raised active button in a track */
  --border-tab-hairline: var(--border-secondary);       /* underline list hairline */
  --ring-tab-focus: var(--focus-ring);                /* brand focus ring */
  /* Toolbars */
  --bg-toolbar: var(--alpha-0);
  --border-toolbar: var(--border-primary-subtle);
  --text-toolbar: var(--text-secondary);
  --text-toolbar-strong: var(--text-primary);
  --text-toolbar-muted: var(--text-tertiary);
  --bg-toolbar-group: var(--alpha-0);
  --border-toolbar-group: var(--alpha-0);
  --border-toolbar-divider: var(--border-primary-subtle);
  --bg-toolbar-btn: var(--alpha-0);
  --bg-toolbar-btn-hover: var(--utility-neutral-200);
  --bg-toolbar-btn-active: var(--utility-neutral-200);
  --bg-toolbar-btn-selected: var(--utility-neutral-200);
  --border-toolbar-btn: var(--alpha-0);
  --border-toolbar-btn-hover: var(--border-primary);
  --border-toolbar-btn-selected: var(--border-primary);
  --text-toolbar-hover: var(--text-primary);
  --icon-toolbar: var(--text-secondary);
  --icon-toolbar-hover: var(--text-primary);
  --bg-toolbar-badge: var(--utility-neutral-900);
  --text-toolbar-badge: var(--utility-neutral-50);
  --bg-toolbar-input: var(--alpha-0);
  --border-toolbar-input: var(--border-primary-subtle);
  /* Focus ring resolves through the canonical --border-focus (UUI brand accent),
     matching the pilot button — a single 2px outline, not the old info-blue. */
  --focus-toolbar: var(--border-info);
  /* Tray */
  --bg-tray: var(--alpha-white-100);
  --bg-tray-body: var(--utility-neutral-50);
  --bg-tray-header: var(--alpha-0);
  --bg-tray-footer: var(--alpha-0);
  --bg-tray-overlay: var(--alpha-neutral-950-20);
  --border-tray: var(--border-primary-subtle);
  --border-tray-divider: var(--border-primary-subtle);
  --text-tray: var(--text-primary);
  --text-tray-muted: var(--text-tertiary);
  --text-tray-heading: var(--text-primary);
  --icon-tray: var(--text-secondary);
  --icon-tray-close: var(--text-secondary);
  --bg-tray-close-hover: var(--utility-neutral-100);
  --icon-tray-pin: var(--text-tertiary);
  --bg-tray-pin-hover: var(--utility-neutral-100);
  --icon-tray-pin-active: var(--text-info);
  --bg-tray-pin-active: var(--bg-info-subtle);
  --border-tray-pin-active: transparent;
  /* Buttons */
  /* Primary — MacOS-style accent blue */
  --text-button-primary: var(--alpha-white-100);
  --bg-button-primary: var(--utility-gray-950);
  --bg-button-primary-hover: var(--utility-gray-800);
  --bg-button-primary-active: var(--utility-gray-900);
  --border-button-primary: var(--alpha-0);
  /* Secondary */
  --text-button-secondary: var(--text-primary);
  --bg-button-secondary: var(--alpha-0);
  --bg-button-secondary-hover: var(--bg-primary);
  --bg-button-secondary-active: var(--utility-neutral-50);
  --bg-button-secondary-active-state: var(--utility-neutral-100);
  /* Pavel #123 — .btn-secondary lost its shadow, and its background is --alpha-0, so
     the shadow had been the ONLY thing separating it from the page. The separation
     moves to a REAL border: --border-primary is the same step .btn-light already uses
     (--border-button-light), measured 1.48:1 against the white page — more definition
     than the 3%-black shadow it replaces, not less. */
  --border-button-secondary: var(--alpha-0);
  /* Soft */
  --text-button-soft: var(--text-primary);
  --bg-button-soft: var(--utility-neutral-50);
  --bg-button-soft-hover: var(--utility-neutral-100);
  --bg-button-soft-active: var(--utility-neutral-50);
  --border-button-soft: var(--alpha-0);
  /* Ghost */
  --text-button-ghost: var(--text-primary);
  --bg-button-ghost: var(--alpha-0);
  --bg-button-ghost-hover: var(--utility-neutral-100);
  --bg-button-ghost-active: var(--utility-neutral-50);
  --border-button-ghost: var(--alpha-0);
  /* Link */
  --text-button-link: var(--text-primary);
  --text-button-link-hover: var(--text-primary);
  /* Light */
  --text-button-light: var(--text-primary);
  --bg-button-light: var(--utility-neutral-50);
  --bg-button-light-hover: var(--utility-neutral-100);
  --bg-button-light-active: var(--utility-neutral-200);
  --border-button-light: var(--border-primary);
  /* Input-style button */
  --text-button-input: var(--utility-neutral-950);
  --bg-button-input: var(--utility-neutral-50);
  --bg-button-input-hover: var(--utility-neutral-100);
  --bg-button-input-active: var(--utility-neutral-50);
  --border-button-input: var(--alpha-0);
  /* Topbar */
  --text-button-topbar: var(--utility-neutral-900);
  --bg-button-topbar: var(--alpha-0);
  --bg-button-topbar-hover: var(--utility-neutral-200);
  --bg-button-topbar-active: var(--utility-neutral-100);
  --border-button-topbar: var(--alpha-0);
  --border-button-topbar-hover: var(--alpha-0);
  /* Danger */
  --text-button-danger: var(--alpha-white-100);
  --bg-button-danger: var(--utility-red-600);
  --bg-button-danger-hover: var(--utility-red-700);
  --bg-button-danger-active: var(--utility-red-800);
  --border-button-danger: var(--alpha-0);
  --text-button-danger-outline: var(--utility-red-700);
  --bg-button-danger-outline: var(--alpha-0);
  --bg-button-danger-outline-hover: var(--utility-red-100);
  --bg-button-danger-outline-active: var(--utility-red-50);
  --border-button-danger-outline: var(--alpha-0);
  /* Glass */
  --text-button-glass: var(--alpha-white-100);
  --bg-button-glass: var(--alpha-white-20);
  --border-button-glass: var(--alpha-white-30); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --text-button-glass-hover: var(--alpha-white-100);
  --bg-button-glass-hover: var(--alpha-white-30);
  --border-button-glass-hover: var(--alpha-white-30); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --text-button-glass-active: var(--alpha-white-100);
  --bg-button-glass-active: var(--alpha-white-20);
  --border-button-glass-active: var(--alpha-white-30); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  /* Grain */
  --opacity-button-grain: 0.2;
  /* Focus */
  --border-button-focus: var(--utility-emerald-800);
  --ring-button-focus-offset: var(--bg-body);
  /* Input & Forms */
  /* Text */
  --text-input: var(--utility-neutral-950);
  --text-input-primary: var(--utility-neutral-950);
  --text-input-placeholder: var(--utility-neutral-400);
  --text-input-disabled: var(--utility-neutral-500);
  --text-input-tertiary: var(--utility-neutral-500);
  /* Readonly */
  --text-input-readonly: var(--text-input);
  /* Backgrounds
     #375 — the field REST state is a light neutral gray fill, not white. This is
     the note that came back four times; the reason the first three passes changed
     nothing visible is that they all moved BORDER tokens, and the rest edge here
     is an inset box-shadow ring (input.css:89) over a fill that was pure white.
     The edge was already neutral (--border-input -> --border-control ->
     neutral-200, chroma 0); the WHITE FILL was the part that never read as gray.
     Page is white (--bg-primary), so the field needs a rung that actually READS as
     gray against it. neutral-50 does not: at rgb(250,250,250) on rgb(255,255,255)
     it is a 5-value delta and renders as white — I shot it and the "Soft" row
     (neutral-100) in the same specimen was visibly gray while the default was not.
     neutral-100 is the lightest rung that reads as a gray field and still counts
     as light. Dark already had this relationship (input 950 under a 900 page),
     which is why dark needs no change.
     Blue stays on :focus only (--border-focus -> utility-blue-500). */
  --bg-input: var(--utility-neutral-50);
  --bg-input-select: var(--utility-neutral-50);
  /* Disabled moves one rung deeper too — it was neutral-100, which the ENABLED
     field now occupies, so disabled would have been indistinguishable from rest. */
  --bg-input-disabled: var(--utility-neutral-100);
  /* Soft variant — same fill as the default; the two stay distinct exactly the way
     input.css documents it: default = fill + 1px ring, soft = fill + NO ring at
     rest ("the fill conveys the field"). Soft was neutral-50, which would now sit
     LIGHTER than the default field and invert the emphasis order. */
  --bg-input-soft: var(--utility-neutral-50);
  --bg-input-soft-hover: var(--utility-neutral-50);
  --bg-input-soft-active: var(--utility-neutral-100);
  /* Borderless variant */
  --bg-input-borderless: var(--utility-neutral-100);
  --bg-input-borderless-hover: var(--utility-neutral-100);
  --bg-input-borderless-active: var(--utility-neutral-100);
  /* Ghost variant */
  --bg-input-ghost-hover: var(--utility-neutral-100);
  --bg-input-ghost-active: var(--utility-neutral-50);
  /* Readonly */
  --bg-input-readonly: var(--utility-neutral-100);
  /* Addon/group */
  --bg-input-addon: var(--utility-neutral-100);
  --bg-input-group-hover: var(--utility-neutral-100); /* hovered input inside input-group */
  --bg-input-group-focus: var(--utility-neutral-100); /* focused input inside input-group */
  /* ══ THE CONTROL-EDGE LADDER (Pavel, definitive — supersedes #368/#372/#373/#374) ══
     PORTED from Reinly.Webapp, the gold standard, rather than re-derived:
       reinly theme-light.css:461-463  --border-input        neutral-200
                                       --border-input-hover  neutral-400
                                       --border-input-active blue-500
     rest = LIGHT GRAY -> hover = DARKER GRAY -> focus = BLUE. Every control type
     (input, textarea, select, combobox, checkbox, radio, outlined button) resolves
     its edge from these three, so there is one place to get it right.

     ROOT CAUSE of four repeat reports: --border-input-active was `var(--border-focus)`,
     and --border-focus was the BRAND. So the control edge was chained to the accent —
     every brand change re-tinted every focused control, and no amount of fixing the
     resting token could hold. reinly never chains them: its focus edge is a literal
     blue. --border-control-focus is that decoupling, and it is why this should stop
     coming back. The brand now reaches control edges through NO path at all. */
  /* tq-2736: enodia parity (Pavel 2026-08-18). 1.16:1 on --bg-primary, 1.21:1 on --bg-input — BELOW the WCAG 1.4.11 3:1
     floor; accepted tradeoff (Reinly's own figures, measured on the built CSS, tq-9102 A144). The RESTING edge only: focus,
     error and hover carry the >= 3:1 indicator (tests/field-focus-contrast.test.mjs). */
  --border-control: var(--utility-neutral-200);
  --border-control-hover: var(--utility-neutral-400);
  --border-control-focus: var(--utility-blue-500);
  --border-input: var(--border-control);
  --border-input-hover: var(--border-control-hover);
  --border-input-active: var(--border-control-focus);
  --border-input-disabled: var(--utility-neutral-300);
  --border-input-transparent: var(--alpha-0);
  /* Addon/group borders */
  --border-input-addon: var(--border-input);
  /* Stack */
  --border-input-stack: var(--border-input);
  --border-input-stack-hover: var(--border-input-hover);
  --border-input-stack-active: var(--border-input-active);
  /* The stack's inner dividers EQUAL the field border (one source; tq-9102 A144): never stronger than a field's own edge */
  --border-input-stack-divider: var(--border-input);
  /* Group Validation */
  --border-input-group-error: var(--border-input-error);
  --border-input-group-error-focus: var(--border-input-error-focus);
  /* Semantic states */
  --border-input-error: var(--border-danger);
  --border-input-error-focus: var(--border-input-active);   /* tq-8912: FOCUS WINS while focused; validity stays visible through its icon + message, its border returns on blur */
  --border-input-success: var(--border-success);
  --border-input-success-focus: var(--border-input-active);   /* tq-8912: FOCUS WINS while focused; validity stays visible through its icon + message, its border returns on blur */
  /* Warning/info */
  --border-input-warning: var(--border-warning);
  --border-input-warning-focus: var(--border-input-active);   /* tq-8912: FOCUS WINS while focused; validity stays visible through its icon + message, its border returns on blur */
  --border-input-info: var(--border-info);
  --border-input-info-focus: var(--border-input-active);   /* tq-8912: FOCUS WINS while focused; validity stays visible through its icon + message, its border returns on blur */
  /* Focus helpers */
  --border-input-focus: var(--border-input-active);
  --ring-input-focus-offset: var(--bg-body);
  /* Forms */
  /* Labels */
  --text-form-label: var(--utility-neutral-600);
  --text-form-label-strong: var(--utility-neutral-600);
  --text-form-label-muted: var(--utility-neutral-400);
  --text-form-label-required: var(--utility-red-500);
  /* Help / meta — WCAG AA (DR-002). neutral-400 was 2.59:1 on --bg-input/--bg-primary
     (white) — a body-size AA failure on EVERY form in the app. Hint carries real
     instructional copy, so it takes neutral-600 (7.80:1 on white, 7.15:1 worst-case on
     --bg-input-disabled); the -muted tier stays one step lighter at neutral-500
     (4.73:1 white / 4.53:1 on --bg-input-soft) so the two keep their hierarchy and
     both clear 4.5:1. Mirrors the dark-side fix in theme-dark.css. */
  --text-form-hint: var(--utility-neutral-400);
  --text-form-hint-muted: var(--utility-neutral-400);
  /* Messages */
  --text-form-error: var(--text-danger);
  --text-form-success: var(--text-success);
  --text-form-warning: var(--text-warning);
  --text-form-info: var(--text-info);
  /* Info button */
  --text-form-info-btn: var(--utility-neutral-500);
  --bg-form-info-btn-hover: var(--utility-neutral-100);
  --border-form-info-btn: var(--alpha-0);
  /* Validation borders (ties into your input tokens) */
  --border-form-error: var(--border-danger);
  --border-form-success: var(--border-success);
  --border-form-warning: var(--border-warning);
  --border-form-info: var(--border-info);
  /* Layout helpers */
  --border-form-divider: var(--utility-neutral-100);
  /* Theme tokens – Checkbox & Toggle V2 */
  /* Shared label/meta */
  --text-check-label: var(--text-primary);
  --text-check-label-muted: var(--utility-neutral-500);
  /* Checkbox tokens */
  /* text/icon */
  --text-checkbox: var(--utility-neutral-900);
  --text-checkbox-checked: var(--alpha-white-100);
  --text-checkbox-disabled: var(--utility-neutral-500);
  /* backgrounds */
  --bg-checkbox: var(--alpha-0);
  --bg-checkbox-active: var(--utility-neutral-100);
  --bg-checkbox-checked: var(--utility-neutral-900); /* tq-8176: the served app's value (reinly.webapp @ 09387252) */
  --bg-checkbox-disabled: var(--utility-neutral-100);
  /* Disabled checked */
  --bg-checkbox-disabled-checked: var(--utility-neutral-400);
  /* borders */
  --border-checkbox: var(--utility-neutral-200);
  --border-checkbox-hover: var(--utility-neutral-500);
  --border-checkbox-active: var(--utility-neutral-900);
  --border-checkbox-checked: var(--utility-neutral-900);   /* reinly light:535 — never the brand */
  --border-checkbox-disabled: var(--utility-neutral-300);
  /* Disabled checked */
  --border-checkbox-disabled-checked: var(--utility-neutral-400);
  /* semantic */
  --border-checkbox-error: var(--border-danger);
  --border-checkbox-success: var(--border-success);
  /* Toggle tokens */
  /* track */
  --bg-toggle-track: var(--utility-neutral-200);
  --bg-toggle-track-hover: var(--utility-neutral-300);
  --bg-toggle-track-checked: var(--utility-blue-500);
  --bg-toggle-track-disabled: var(--utility-neutral-300);
  /* border */
  --border-toggle-track: var(--alpha-0);
  /* Toggle intents */
  --bg-toggle-track-success: var(--utility-green-500);
  --bg-toggle-track-warning: var(--utility-amber-500);
  --bg-toggle-track-danger: var(--utility-red-500);
  --bg-toggle-track-info: var(--utility-blue-500);
  /* Toggle thumb icon (when using .toggle-icon) */
  --text-toggle-thumb-icon: var(--utility-neutral-500);
  --text-toggle-thumb-icon-checked: var(--utility-blue-600);
  /* Color picker tokens */
  --border-color-swatch: var(--alpha-black-20);
  /* 3c: selection ring de-branded blue -> UUI brand accent (kept as the fallback
     when a swatch has no own --swatch-color, e.g. .color-none). */
  --text-color-swatch-check: var(--alpha-white-100);
  /* Radio tokens */
  /* text (kept for consistency) */
  --text-radio: var(--utility-neutral-900);
  /* backgrounds */
  --bg-radio: var(--alpha-0);
  --bg-radio-active: var(--utility-neutral-100);
  --bg-radio-disabled: var(--utility-neutral-100);
  /* dot */
  --bg-radio-dot: var(--alpha-0);
  --bg-radio-dot-checked: var(--utility-neutral-900);
  --bg-radio-dot-disabled: var(--utility-neutral-400);
  /* borders */
  --border-radio: var(--utility-neutral-300);
  --border-radio-hover: var(--utility-neutral-500);
  --border-radio-active: var(--utility-neutral-500);
  --border-radio-checked: var(--utility-neutral-900);
  --border-radio-disabled: var(--utility-neutral-300);
  /* variant borders */
  --border-radio-soft: var(--utility-neutral-200);
  --border-radio-ghost: var(--utility-neutral-200);
  /* semantic */
  --border-radio-error: var(--border-danger);
  --border-radio-success: var(--border-success);
  --bg-radio-dot-error: var(--utility-red-600);
  --bg-radio-dot-success: var(--utility-green-600);
  /* Stepper / Wizard */
  /* Step indicator (default) */
  --text-step-indicator: var(--utility-neutral-700);
  --bg-step-indicator: var(--utility-neutral-50);
  --border-step-indicator: var(--utility-neutral-200);
  --shadow-step-indicator: var(--shadow-sm);
  /* Titles */
  --text-step-title: var(--text-primary);
  --text-step-subtitle: var(--utility-neutral-500);
  /* Connector */
  --bg-step-connector: var(--utility-neutral-200);
  --bg-step-connector-fill: var(--utility-neutral-900);
  /* Hover (default — light indicator) */
  --bg-step-hover: var(--utility-neutral-200);
  --bg-step-active: var(--utility-neutral-300);
  /* Hover (current/completed — dark indicator, lighten like btn-primary) */
  --bg-step-current-hover: var(--utility-neutral-700);
  --bg-step-current-active: var(--utility-neutral-900);
  --bg-step-completed-hover: var(--utility-neutral-700);
  --bg-step-completed-active: var(--utility-neutral-900);
  /* Current */
  --text-step-current: var(--alpha-white-100);
  --bg-step-current: var(--utility-neutral-900);
  --border-step-current: var(--alpha-0);
  --text-step-title-current: var(--text-primary);
  /* Completed */
  --text-step-completed: var(--alpha-white-100);
  --bg-step-completed: var(--utility-neutral-900);
  --border-step-completed: var(--alpha-0);
  /* Disabled */
  --text-step-disabled: var(--utility-neutral-400);
  --bg-step-disabled: var(--utility-neutral-100);
  --border-step-disabled: var(--utility-neutral-200);
  /* Error */
  --text-step-error: var(--alpha-white-100);
  --bg-step-error: var(--utility-red-600);
  --border-step-error: var(--alpha-0);
  --text-step-title-error: var(--utility-red-700);
  /* Success */
  --text-step-success: var(--alpha-white-100);
  --bg-step-success: var(--utility-green-600);
  --border-step-success: var(--alpha-0);
  /* Warning */
  --text-step-warning: var(--alpha-white-100);
  --bg-step-warning: var(--utility-amber-500);
  --border-step-warning: var(--alpha-0);
  --text-step-title-warning: var(--utility-amber-700);
  /* Skipped */
  --text-step-skipped: var(--utility-neutral-500);
  --bg-step-skipped: var(--utility-neutral-100);
  --border-step-skipped: var(--utility-neutral-200);
  /* In-progress (animated pulse halo) */
  --halo-step-in-progress: oklch(60% 0.13 250 / 0.18);
  /* Optional / locked / AI badges */
  --bg-step-badge-optional: var(--utility-neutral-100);
  --text-step-badge-optional: var(--utility-neutral-600);
  --bg-step-badge-locked: var(--utility-neutral-100);
  --text-step-badge-locked: var(--utility-neutral-600);
  --bg-step-badge-ai: var(--utility-blue-50);
  --text-step-badge-ai: var(--utility-blue-700);
  /* Pill variant */
  --bg-step-pill: var(--utility-neutral-50);
  --text-step-pill: var(--utility-neutral-700);
  --border-step-pill: var(--utility-neutral-200);
  --bg-step-pill-current: var(--utility-blue-600);
  --text-step-pill-current: var(--alpha-white-100);
  --bg-step-pill-completed: var(--utility-green-600);
  --text-step-pill-completed: var(--alpha-white-100);
  /* Card variant */
  --bg-step-card: var(--utility-white, oklch(100% 0 0));
  --border-step-card: var(--utility-neutral-200);
  --shadow-step-card: 0 1px 2px oklch(0% 0 0 / 0.04);
  --shadow-step-card-current: 0 0 0 2px var(--utility-blue-500), 0 6px 14px oklch(0% 0 0 / 0.08);
  /* Chevron / breadcrumb variant */
  --bg-step-chevron: var(--utility-neutral-50);
  --bg-step-chevron-current: var(--utility-blue-50);
  --bg-step-chevron-completed: var(--utility-green-50);
  --bg-step-chevron-error: var(--utility-red-50);
  --text-step-chevron: var(--utility-neutral-700);
  --text-step-chevron-current: var(--utility-blue-700);
  --text-step-chevron-completed: var(--utility-green-700);
  --text-step-chevron-error: var(--utility-red-700);
  /* Wizard shell */
  --shadow-wizard-floating: 0 1px 2px oklch(0% 0 0 / 0.04);
  /* Dropdown */
  /* Base menu */
  --bg-dropdown: var(--alpha-white-100);
  --border-dropdown: var(--border-primary);
  --shadow-dropdown: var(--shadow-lg);
  --blur-dropdown-backdrop: none;
  --opacity-dropdown-grain: 0;
  /* Text */
  --text-dropdown: var(--text-primary);
  --text-dropdown-item: var(--text-primary);
  --text-dropdown-icon: var(--utility-neutral-500);
  --text-dropdown-end: var(--utility-neutral-500);
  --text-dropdown-title: var(--utility-neutral-500);
  --text-dropdown-hint: var(--utility-neutral-400);
  /* Hover / active */
  --bg-dropdown-hover: var(--utility-neutral-100);
  --bg-dropdown-active: var(--utility-neutral-200);
  /* Divider */
  --border-dropdown-divider: var(--utility-neutral-100);
  /* Selected */
  --bg-dropdown-selected: var(--utility-neutral-100);
  --text-dropdown-selected: var(--text-primary);
  /* Danger */
  --text-dropdown-danger: var(--text-danger);
  --bg-dropdown-danger-hover: var(--utility-red-50);
  /* Glass */
  --bg-dropdown-glass: var(--alpha-white-80);
  --border-dropdown-glass: var(--alpha-neutral-900-10);
  --shadow-dropdown-glass: var(--shadow-lg);
  --blur-dropdown-glass: blur(20px);
  --opacity-dropdown-glass-grain: 0.1;
  --text-dropdown-glass: var(--utility-neutral-950);
  --text-dropdown-item-glass: var(--utility-neutral-950);
  --text-dropdown-icon-glass: var(--utility-neutral-700);
  --text-dropdown-end-glass: var(--utility-neutral-700);
  --bg-dropdown-glass-hover: var(--alpha-white-60);
  --bg-dropdown-glass-active: var(--alpha-white-50);
  --bg-dropdown-selected-glass: var(--alpha-white-60);
  --text-dropdown-selected-glass: var(--utility-neutral-950);
  --text-dropdown-danger-glass: var(--text-danger);
  --bg-dropdown-danger-hover-glass: var(--alpha-red-500-10, rgba(239,68,68,0.10));
  /* Table */
  /* Container / Surface */
  --bg-table: var(--alpha-white-100);
  --bg-table-surface: var(--bg-primary-subtle);
  --border-table-container: var(--border-primary);
  --radius-table: var(--radius-md, 0.375rem);
  /* Header */
  --bg-table-header: var(--bg-primary);
  --bg-table-header-hover: var(--bg-primary-hover);
  /* Active (sorted) */
  --bg-table-header-active: var(--bg-secondary);
  --text-table-header-active: var(--text-primary);
  --shadow-table-header-active: var(--shadow-table-header-pressed);
  /* Pressed (mousedown on .sort) */
  --bg-table-header-pressed: var(--bg-tertiary);
  --shadow-table-header-pressed: inset 0 1px 0 rgba(0,0,0,.06);
  --bg-table-header-sticky: var(--bg-table-header);
  --text-table-header: var(--text-secondary);
  --icon-table-header: var(--text-tertiary);
  --border-table-header: var(--border-primary);
  /* Body / Footer Text */
  --text-table: var(--text-primary);
  --text-table-active: var(--text-primary);
  --text-table-footer: var(--text-secondary-alt);
  --text-table-disabled: var(--text-disabled);
  /* Row States */
  --bg-table-row-hover: var(--bg-primary-subtle); /* default hover */
  --bg-table-row-zebra: var(--bg-primary-subtle);
  --bg-table-row-selected: var(--bg-info-subtle);
  --bg-table-row-active: var(--bg-primary);
  /* Focus within row */
  --bg-table-row-focus: var(--bg-info-subtle);
  --ring-table-row-focus: 0 0 0 2px var(--border-info-subtle);
  /* Disabled */
  --bg-table-row-disabled: var(--bg-primary-subtle);
  /* Intent rows */
  --bg-table-row-success: var(--bg-success-subtle);
  /* tr-warning: the warning-subtle wash, with muted (non-solid) text so a flagged row
     reads as flagged without shouting. */
  --bg-table-row-warning: var(--bg-warning-subtle);
  --bg-table-row-danger: var(--bg-danger-subtle);
  --text-table-row-success: var(--text-success-solid);
  --text-table-row-warning: var(--text-warning-solid);
  --text-table-row-danger: var(--text-danger-solid);
  /* Row Sweep — transient feedback */
  --bg-row-sweep-success: rgba(22, 163, 74, 0.10);
  --bg-row-sweep-info: rgba(37, 99, 235, 0.10);
  --bg-row-sweep-warning: rgba(217, 119, 6, 0.10);
  --bg-row-sweep-danger: rgba(220, 38, 38, 0.10);
  /* Cell Micro-states (optional) */
  --bg-table-cell-hover: var(--bg-primary-subtle);
  --bg-table-cell-focus: var(--bg-info-subtle);
  --ring-table-cell-focus: 0 0 0 2px var(--border-info-subtle);
  /* Hover opt-out (td/th.no-hover while row hovered) */
  --bg-table-cell-no-hover: var(--bg-table);
  /* Footer */
  --bg-table-footer: var(--bg-primary-subtle);
  --bg-table-footer-sticky: var(--bg-table-footer);
  /* Borders */
  --border-table: var(--border-primary-subtle);
  --border-table-grid: var(--border-primary);
  --border-table-grid-strong: var(--border-primary-alt);
  --border-table-sticky-divider: var(--border-primary-solid);
  /* Sticky Columns */
  --bg-table-sticky: var(--bg-table);
  --bg-table-sticky-hover: var(--bg-table-row-hover);
  --bg-table-sticky-selected: var(--bg-table-row-selected);
  --bg-table-sticky-active: var(--bg-table-row-active);
  --bg-table-sticky-focus: var(--bg-table-row-focus);
  /* Sticky Shadows / Separators */
  --shadow-table-sticky-header: inset 0 -1px 0 var(--border-table-header);
  --shadow-table-sticky-footer: inset 0 1px 0 var(--border-table);
  --shadow-table-sticky-col: inset -1px 0 0 var(--border-table-sticky-divider);
  --shadow-table-sticky-col-right: inset 1px 0 0 var(--border-table-sticky-divider);
  /* Column Hover (optional / JS) */
  --bg-table-col-hover: var(--bg-info-subtle);
  /* Editable Controls Inside Table */
  --bg-table-control: var(--alpha-0);
  --bg-table-control-focus: var(--bg-input-select);
  --border-table-control: var(--border-table);
  /* Panel surfaces (powershell frame bg) */
  --bg-panel: var(--alpha-white-100); /* tq-8176: the served app's value (reinly.webapp @ 09387252) */
  --bg-panel-raised: var(--alpha-white-100);
  --bg-panel-sunken: var(--alpha-neutral-50-50);
  --border-panel: var(--border-primary);
  /* Card */
  /* Base card */
  --bg-card: var(--alpha-white-100);
  --bg-card-alt: var(--alpha-white-100);
  /* Opaque base surfaces — card-equivalent elevated surface + page/body bg.
     Must live in the base theme so plain theme-light resolves them; the
     theme-mica-light block below overrides both with translucent glass. (#5609) */
  --bg-surface: var(--bg-card);
  --bg-body: var(--canvas-primary);
  /* App shell frame — the chrome behind header + sidebar + main + TOC — is painted
     with --bg-primary directly. The old --bg-app-canvas token (1e52b739/aa07042c) was
     a scoped patch for a grey ramp: it gave the shell its own white because
     --bg-primary couldn't be flipped at the time. The ramp is rebased to UUI v8, so
     --bg-primary IS white (PURE WHITE in light — Pavel) and the patch is fully
     removed — Wave 0.1. Mica needs no separate backdrop: its glass surfaces
     (--bg-surface/--bg-body, 0.72–0.92 alpha) composite against the shell, and
     --bg-primary is opaque and stated below the sync marker in every light theme
     (plain + mica), so it cannot go translucent or drift on an Reinly.Webapp re-sync. */
  /* Foreground on saturated / solid colour chips, dots, avatars (theme-invariant white). (#5608) */
  --text-on-solid: var(--alpha-white-100);
  --bg-card-hover: var(--bg-primary-subtle); /* was utility-neutral-50 */
  --bg-card-pressed: var(--bg-primary-hover);
  --text-card: var(--text-primary);
  --border-card: var(--border-primary);
  --border-card-active: var(--border-secondary);
  --shadow-card: var(--shadow-sm);
  --shadow-card-active: var(--shadow-sm);
  --shadow-card-pressed: inset 0 1px 0 rgba(0,0,0,.06);
  /* Backdrop + grain */
  --blur-card-backdrop: none;
  --opacity-card-grain: 0;
  /* Dividers + focus */
  --border-card-divider: var(--border-primary-subtle);
  --border-card-focus: var(--alpha-0);
  --ring-card-focus: 0 0 0 1px var(--alpha-0);
  /* Disabled */
  --opacity-card-disabled: 0.65;
  --filter-card-disabled: none;
  /* Sizing */
  --radius-card-sm: var(--radius-lg, 0.5rem);
  --radius-card-md: var(--radius-xl, 0.75rem);
  --radius-card-lg: var(--radius-2xl, 1rem);
  /* Flat */
  --bg-card-flat: var(--alpha-white-100);
  --border-card-flat: var(--border-primary);
  --opacity-card-flat-grain: 0;
  /* Light */
  --bg-card-light: var(--utility-neutral-100);
  --border-card-light: var(--border-primary);
  --opacity-card-light-grain: 0;
  /* Soft */
  --bg-card-soft: var(--bg-primary-subtle);
  --border-card-soft: var(--alpha-0);
  /* Ghost */
  --bg-card-ghost: var(--alpha-0);
  --border-card-ghost: var(--border-primary);
  --shadow-card-ghost: none;
  /* Strong outline */
  --border-card-strong: var(--border-primary-solid);
  /* Mini */
  --bg-card-mini: var(--bg-card);
  --border-card-mini: var(--border-card);
  --text-card-mini: var(--text-card);
  --opacity-card-mini-grain: 0;
  /* Glass */
  --bg-glass-card: var(--alpha-white-20);
  --border-glass-card: var(--alpha-white-20); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --text-glass-card: var(--text-primary);
  --blur-glass-card: blur(20px);
  --shadow-glass-card: var(--shadow-md);
  --opacity-glass-card-grain: 0.15;
  --opacity-glass-grain-sm: 0.15;
  --opacity-glass-grain-md: 0.2;
  --opacity-glass-grain-lg: 0.25;
  --opacity-glass-grain-xl: 0.3;
  /* Glass blur per size */
  --blur-glass-card-sm: blur(10px);
  --blur-glass-card-md: blur(16px);
  --blur-glass-card-lg: blur(22px);
  --blur-glass-card-xl: blur(28px);
  /* List */
  /* Container */
  --bg-list: var(--alpha-white-100);
  --border-list: var(--border-primary);
  --radius-list: var(--radius-md, 0.375rem);
  /* Header */
  --text-list-header: var(--text-secondary);
  --border-list-header: var(--border-primary-subtle);
  --bg-list-header: var(--bg-primary-subtle);
  /* Items */
  --bg-list-item: var(--bg-list);
  --bg-list-item-hover: var(--bg-primary-subtle);
  --bg-list-item-active: var(--bg-secondary-subtle);
  /* 3c DERIVE: selection reads on the UUI brand accent (not info-blue) so it
     stays distinct from the neutral .active row AND from .item-info intent. */
  --bg-list-item-selected: var(--bg-info-subtle);
  --bg-list-item-focus: var(--bg-info-subtle);
  --text-list-item: var(--text-primary);
  --text-list-item-title: var(--text-primary);
  --text-list-item-subtitle: var(--text-tertiary);
  --text-list-item-leading: var(--text-tertiary);
  --text-list-item-trailing: var(--text-tertiary);
  /* Dividers */
  --border-list-divider: var(--utility-neutral-100);
  --space-list-inset: 3rem;
  /* Active indicator (optional) */
  --size-list-indicator: 3px;
  /* 3c DERIVE: active-edge bar + focus ring resolve through the UUI brand
     accent (--border-focus), matching the sibling table's restrained accent. */
  --bg-list-indicator: var(--bg-info);
  /* Focus ring — single 2px brand-accent ring, no halo (FAN-OUT-RULES §3) */
  --ring-list-item-focus: 0 0 0 2px var(--border-info-subtle);
  /* Density */
  --space-list-item-x: 1rem;
  --space-list-item-y: 0.5rem;
  --space-list-item-y-compact: 0.375rem;
  --space-list-item-y-relaxed: 0.75rem;
  /* Disabled */
  --opacity-list-item-disabled: 0.6;
  --bg-list-item-disabled: var(--bg-primary-subtle);
  --text-list-item-disabled: var(--text-disabled);
  /* Intent items */
  --bg-list-item-success: var(--bg-success-subtle);
  --bg-list-item-warning: var(--bg-warning-subtle);
  --bg-list-item-danger: var(--bg-danger-subtle);
  --bg-list-item-info: var(--bg-info-subtle);
  /* Intent indicator bars (left edge) */
  --bg-list-indicator-success: var(--utility-green-500);
  --bg-list-indicator-warning: var(--utility-amber-500);
  --bg-list-indicator-danger:  var(--utility-red-500);
  --bg-list-indicator-info:    var(--utility-blue-500);
  /* New-item flash */
  --bg-list-item-new-flash: var(--utility-amber-50);
  /* Skeleton shimmer */
  --bg-list-item-skeleton:         var(--utility-neutral-100);
  --bg-list-item-skeleton-shimmer: linear-gradient(115deg, transparent 30%, oklch(100% 0 0 / 0.45) 50%, transparent 70%);
  /* Description / meta text */
  --text-list-item-description: var(--utility-neutral-600);
  --text-list-item-meta:        var(--utility-neutral-500);
  --text-list-item-kbd:         var(--utility-neutral-700);
  --bg-list-item-kbd:           var(--utility-neutral-100);
  --border-list-item-kbd:       var(--utility-neutral-200);
  /* Card variant surface */
  --bg-list-card:            oklch(100% 0 0);
  --border-list-card:        var(--utility-neutral-200);
  --shadow-list-card:        0 1px 2px oklch(0% 0 0 / 0.04);
  --shadow-list-card-hover:  0 4px 12px oklch(0% 0 0 / 0.08);
  --shadow-list-card-active: 0 0 0 2px var(--border-focus);
  /* Section header (rich variant) */
  --bg-list-section-header:   var(--utility-neutral-50);
  --text-list-section-header: var(--utility-neutral-700);
  /* Drag affordance */
  --text-list-handle:        var(--utility-neutral-400);
  --text-list-handle-hover:  var(--utility-neutral-700);
  /* Sizes — vertical paddings */
  --space-list-item-y-xs: 0.25rem;
  --space-list-item-y-sm: 0.375rem;
  --space-list-item-y-md: 0.5rem;
  --space-list-item-y-lg: 0.75rem;
  --space-list-item-y-xl: 1rem;

  /* Select Option (option-card / selection list)
     3c: default selected accent resolves through the UUI brand ramp
     (--color-brand-500 — WHITELIST #1b signature step), NOT monochrome-black.
     See FAN-OUT-RULES §3 — the accent tracks the brand ramp rather than a
     hand-picked hue. The selected row is a brand FILL, so it moved 600 → 500
     with every other fill and its hover keeps DARKENING (500 → 600), which is
     what lets the white label survive the hover. */
  --bg-select-option: var(--alpha-white-100);
  --bg-select-option-hover: var(--utility-neutral-50);
  --bg-select-option-selected: var(--bg-button-primary); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --bg-select-option-selected-hover: var(--bg-button-primary-hover); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --border-select-option: var(--utility-neutral-200);
  --border-select-option-hover: var(--utility-neutral-300);
  --border-select-option-selected: var(--bg-button-primary); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --text-select-option: var(--text-primary);
  --text-select-option-subtitle: var(--text-tertiary);
  --text-select-option-trailing: var(--text-secondary);
  --text-select-option-selected: var(--alpha-white-100);
  --text-select-option-selected-subtitle: var(--alpha-white-70);
  --text-select-option-selected-trailing: var(--alpha-white-80);
  --text-select-option-disabled: var(--text-disabled);
  --shadow-select-option: none;
  --shadow-select-option-hover: var(--shadow-xs);
  /* Group header / divider */
  --text-select-option-header: var(--text-tertiary);
  --border-select-option-divider: var(--border-secondary);
  /* Tone variants — selected border + check bg per intent. `accent` is the
     default tone and now resolves to the brand ramp (same as the base
     selected state above); success/warning/danger keep our semantic hues. */
  --border-select-option-accent: var(--bg-button-primary); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --bg-select-option-accent: var(--bg-button-primary); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --border-select-option-success: var(--utility-green-500);
  --bg-select-option-success: var(--utility-green-500);
  --border-select-option-warning: var(--utility-amber-500);
  --bg-select-option-warning: var(--utility-amber-500);
  --border-select-option-danger: var(--utility-red-500);
  --bg-select-option-danger: var(--utility-red-500);
  /* Selected option tinted backgrounds */
  --bg-select-option-tinted: var(--utility-emerald-50); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --bg-select-option-tinted-accent: var(--utility-emerald-50); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --bg-select-option-tinted-success: var(--utility-green-50);
  --bg-select-option-tinted-warning: var(--utility-amber-50);
  --bg-select-option-tinted-danger: var(--utility-red-50);

  /* Tree View */
  --bg-tree-surface: var(--alpha-0);
  --text-tree: var(--text-primary);
  --bg-tree-row: var(--alpha-0);
  --bg-tree-row-hover: var(--bg-primary-subtle);
  --bg-tree-row-active: var(--utility-neutral-100);
  --text-tree-row-active: var(--text-primary);
  --bg-tree-row-selected: var(--utility-neutral-100);
  --text-tree-row-selected: var(--text-primary);
  --bg-tree-row-disabled: var(--bg-primary-subtle);
  --text-tree-row-disabled: var(--text-disabled);
  --opacity-tree-disabled: 0.6;
  --bg-tree-line: var(--border-primary);
  --opacity-tree-line: 0.9;
  --bg-tree-toggle: var(--bg-primary);
  --border-tree-toggle: var(--border-primary);
  --text-tree-toggle: var(--text-tertiary);
  --text-tree-icon: var(--text-tertiary);
  --text-tree-label: var(--text-primary);
  --text-tree-meta: var(--text-tertiary);
  --text-tree-actions: var(--text-tertiary);
  --ring-tree-row: var(--alpha-0);
  --radius-tree-row: var(--radius-md, 0.5rem);
  /* Badge */
  /* Base */
  --text-badge: var(--text-primary);
  --bg-badge: var(--bg-primary-subtle);
  --bg-badge-hover: var(--bg-primary-hover);
  --bg-badge-pressed: var(--bg-primary);
  /* Alt / white */
  --bg-badge-alt: var(--alpha-white-100);
  /* Pressed shadow */
  --shadow-badge-pressed: inset 0 1px 0 rgba(0,0,0,.06);
  /* Close */
  --text-badge-close: var(--text-tertiary);
  --text-badge-close-hover: var(--text-primary);
  --bg-badge-close-hover: var(--bg-badge-hover);
  --bg-badge-close-pressed: var(--bg-badge);
  /* Style variants */
  --text-badge-solid: var(--alpha-white-100);
  --bg-badge-solid: var(--bg-primary-solid);
  --bg-badge-solid-hover: var(--bg-primary-solid);
  --bg-badge-solid-pressed: var(--bg-primary-solid);
  /* Outline */
  --bg-badge-outline: var(--alpha-0);
  --border-badge-outline: var(--border-primary);
  --text-badge-outline: var(--text-primary);
  --bg-badge-outline-hover: var(--bg-primary-subtle);
  --bg-badge-outline-pressed: var(--bg-primary-hover);
  /* Ghost */
  --text-badge-ghost: var(--text-secondary);
  --bg-badge-ghost-hover: var(--bg-primary-subtle);
  --bg-badge-ghost-pressed: var(--bg-primary-hover);
  /* Intent: semantic — text sits on a -subtle (-100) tint, so it needs the -700
     shade to clear WCAG AA (the -600 shades resolve to 2.9-3.9:1 on the tint). (#5607) */
  --text-badge-danger: var(--text-danger);
  --bg-badge-danger: var(--bg-danger-subtle);
  --bg-badge-danger-hover: var(--bg-danger-subtle);
  --bg-badge-danger-pressed: var(--bg-danger-subtle);
  --text-badge-warning: var(--utility-amber-700);
  --bg-badge-warning: var(--bg-warning-subtle);
  --bg-badge-warning-hover: var(--bg-warning-subtle);
  --bg-badge-warning-pressed: var(--bg-warning-subtle);
  --text-badge-success: var(--text-success);
  --bg-badge-success: var(--bg-success-subtle);
  --bg-badge-success-hover: var(--bg-success-subtle);
  --bg-badge-success-pressed: var(--bg-success-subtle);
  --text-badge-info: var(--text-info);
  --bg-badge-info: var(--bg-info-subtle);
  --bg-badge-info-hover: var(--bg-info-subtle);
  --bg-badge-info-pressed: var(--bg-info-subtle);
  /* Accent colors (foundation) */
  --text-badge-indigo: var(--text-indigo);
  --bg-badge-indigo: var(--bg-indigo-subtle);
  --bg-badge-indigo-hover: var(--bg-indigo-subtle);
  --bg-badge-indigo-pressed: var(--bg-indigo-subtle);
  --text-badge-purple: var(--text-purple);
  --bg-badge-purple: var(--bg-purple-subtle);
  --bg-badge-purple-hover: var(--bg-purple-subtle);
  --bg-badge-purple-pressed: var(--bg-purple-subtle);
  --text-badge-pink: var(--text-pink);
  --bg-badge-pink: var(--bg-pink-subtle);
  --bg-badge-pink-hover: var(--bg-pink-subtle);
  --bg-badge-pink-pressed: var(--bg-pink-subtle);
  --text-badge-teal: var(--utility-teal-700);
  --bg-badge-teal: var(--bg-teal-subtle);
  --bg-badge-teal-hover: var(--bg-teal-subtle);
  --bg-badge-teal-pressed: var(--bg-teal-subtle);
  --text-badge-mint: var(--utility-mint-700);
  --bg-badge-mint: var(--bg-mint-subtle, var(--bg-teal-subtle)); /* if mint bg tokens exist */
  --bg-badge-mint-hover: var(--bg-mint-subtle, var(--bg-teal-subtle));
  --bg-badge-mint-pressed: var(--bg-mint-subtle, var(--bg-teal-subtle));
  /* Notification */
  --text-badge-notification: var(--alpha-white-100);
  --bg-badge-notification: var(--bg-danger);
  /* Dot/status */
  --text-badge-status: var(--text-primary);
  --text-badge-dot: var(--text-primary);
  --bg-badge-dot: var(--bg-primary);
  /* Dots */
  --dot-light: var(--bg-secondary-alt);
  --dot-danger: var(--bg-danger);
  --dot-warning: var(--bg-warning);
  --dot-success: var(--bg-success);
  --dot-info: var(--bg-info);
  --dot-indigo: var(--bg-indigo);
  --dot-purple: var(--bg-purple);
  --dot-pink: var(--bg-pink);
  --dot-teal: var(--bg-teal);
  --dot-mint: var(--bg-mint, var(--bg-teal)); /* fallback if mint solid token differs */
  /* Avatar */
  /* Base */
  --text-avatar: var(--text-primary);
  --bg-avatar: var(--bg-secondary-subtle);
  --ring-avatar: var(--border-primary);
  /* Style variants */
  --bg-avatar-soft: var(--bg-secondary-subtle);
  --text-avatar-soft: var(--text-primary);
  --bg-avatar-solid: var(--bg-primary-solid);
  --text-avatar-solid: var(--alpha-white-100);
  --text-avatar-outline: var(--text-primary);
  --border-avatar-outline: var(--border-primary);
  --text-avatar-ghost: var(--text-primary);
  /* Presence badge */
  --bg-avatar-badge-ring: var(--bg-avatar);
  --border-avatar-badge: var(--border-primary);
  --bg-avatar-online: var(--bg-success-alt);
  --bg-avatar-away: var(--bg-warning-alt);
  --bg-avatar-busy: var(--bg-danger-alt);
  --bg-avatar-ooo: var(--utility-fuchsia-400);
  --bg-avatar-offline: var(--utility-neutral-400);
  /* Group stacking ring — 6a0b1bd: an opaque surface cutout so overlapping avatars
     stay distinct in light mode (--alpha-white-20 was invisible on light panels). */
  --ring-avatar-stack: var(--alpha-white-20);
  /* Overflow pill (+N) */
  --bg-avatar-more: var(--bg-primary-subtle);
  --text-avatar-more: var(--text-secondary);
  --ring-avatar-more: var(--border-primary);
  /* Semantic fills (optional) */
  --bg-avatar-info: var(--bg-info-subtle);
  --text-avatar-info: var(--text-info-solid);
  --ring-avatar-info: var(--border-info-subtle);
  --bg-avatar-success: var(--bg-success-subtle);
  --text-avatar-success: var(--text-success-solid);
  --ring-avatar-success: var(--border-success-subtle);
  --bg-avatar-warning: var(--bg-warning-subtle);
  --text-avatar-warning: var(--text-warning-solid);
  --ring-avatar-warning: var(--border-warning-subtle);
  --bg-avatar-danger: var(--bg-danger-subtle);
  --text-avatar-danger: var(--text-danger-solid);
  --ring-avatar-danger: var(--border-danger-subtle);
  /* Extra semantic families */
  --bg-avatar-indigo: var(--bg-indigo-subtle);
  --text-avatar-indigo: var(--text-indigo-solid);
  --bg-avatar-purple: var(--bg-purple-subtle);
  --text-avatar-purple: var(--text-purple-solid);
  --bg-avatar-pink: var(--bg-pink-subtle);
  --text-avatar-pink: var(--text-pink-solid);
  --bg-avatar-teal: var(--bg-teal-subtle);
  --text-avatar-teal: var(--text-teal-solid);
  --bg-avatar-mint: var(--bg-mint-subtle);
  --text-avatar-mint: var(--text-mint-solid);
  /* Persona */
  /* Base */
  --bg-persona: var(--alpha-white-100);
  --border-persona: var(--border-primary);
  --text-persona: var(--text-primary);
  --text-persona-title: var(--text-primary);
  --text-persona-subtitle: var(--text-tertiary);
  --text-persona-meta: var(--text-quaternary);
  /* Tag (optional) */
  --bg-persona-tag: var(--bg-primary-subtle);
  --text-persona-tag: var(--text-secondary);
  --border-persona-tag: var(--border-primary-subtle);
  /* Surface variants */
  --bg-persona-soft: var(--bg-primary-subtle);
  --border-persona-soft: var(--alpha-0);
  --bg-persona-ghost: var(--alpha-0);
  --border-persona-ghost: var(--border-primary-subtle);
  --border-persona-strong: var(--border-primary-solid);
  --shadow-persona: var(--shadow-sm);
  /* Interaction */
  --bg-persona-hover: var(--bg-primary-subtle);
  --border-persona-hover: var(--border-primary);
  --bg-persona-pressed: var(--bg-primary-hover);
  --border-persona-pressed: var(--border-primary-alt);
  /* NEW: pressed shadow (button-like) */
  --shadow-persona-pressed: inset 0 1px 0 rgba(0,0,0,.06);
  /* Selected */
  --bg-persona-selected: var(--bg-info-subtle);
  --border-persona-selected: var(--border-info-subtle);
  /* Focus */
  --ring-persona-focus: 0 0 0 2px var(--border-info-subtle);
  /* Disabled */
  --opacity-persona-disabled: 0.65;
  --filter-persona-disabled: none;
  /* Status pill */
  --bg-persona-status: var(--bg-primary-subtle);
  --border-persona-status: var(--border-primary-subtle);
  --text-persona-status: var(--text-secondary);
  --bg-persona-status-dot: var(--bg-secondary-solid);
  /* Status intent dots */
  --bg-persona-dot-success: var(--bg-success-alt);
  --bg-persona-dot-warning: var(--bg-warning-alt);
  --bg-persona-dot-danger: var(--bg-danger-alt);
  --bg-persona-dot-info: var(--bg-info-alt);
  /* Divider */
  /* Base */
  --border-divider: var(--utility-neutral-100);
  /* Compatibility alias: legacy var(--border-default) usages resolve to the divider color (matches the .border-default class) */
  --border-default: var(--border-divider);
  --border-divider-subtle: var(--utility-neutral-50);
  /* A NAME THAT LIED ABOUT ITS BEHAVIOUR — "strong" was WEAKER than the divider it
     strengthens, in LIGHT only. Found by Richard; he changed nothing because token values
     are my surface, and he attributed it correctly: PRE-EXISTING, and #232 NARROWED the
     inversion (33 -> 16 units of neutral) rather than causing it.
     Measured against the page (#ffffff), light:
        .divider        --border-secondary      n200 #e5e5e5  1.260:1
        .divider-strong n100 (was)              #f5f5f5  1.090:1   <- weaker than its own base
        .divider-strong --border-primary-solid  n400 #a1a1a1  2.584:1  <- actually stronger
     ADOPTED, NOT COPIED, and deliberately the SAME SEMANTIC DARK ALREADY USES: dark declares
     this token as var(--border-primary-solid) and is correct. Light was the outlier, hand-set
     to a raw rung, which is how the two themes diverged in the first place. Pointing light at
     the same semantic makes the construction parallel, so tuning --border-primary-solid moves
     both themes together instead of leaving light behind.
     This is my own principle applied to my own surface: a variant name must describe what it
     DOES. A "strong" divider quieter than its base is the name denying the value — the same
     fault as a --border-* token that is invisible everywhere. */
  --border-divider-strong: var(--utility-neutral-100);
  --border-divider-ghost: var(--alpha-neutral-100-80);
  --text-divider: var(--text-tertiary);
  /* Optional */
  --bg-divider: var(--bg-primary);
  /* Progress */
  /* Linear — Track + Bar */

  --height-progress-track: 4px;
  --bg-progress: var(--utility-neutral-200); 
  --bg-progress-bar: var(--utility-blue-500);
  --text-progress: var(--alpha-white-100);
  /* Intent bars */
  --bg-progress-bar-success: var(--bg-success);
  --bg-progress-bar-warning: var(--bg-warning);
  --bg-progress-bar-danger: var(--bg-danger);
  --bg-progress-bar-info: var(--bg-info);
  --bg-progress-bar-neutral: var(--utility-neutral-500);
  /* Radial / Circular */

  --bg-progress-radial-inner: var(--alpha-white-100);
  --text-progress-radial: var(--text-primary);
  /* Track inside radial */
  --bg-progress-radial-track: var(--bg-progress);
  /* Cap / Dot marker */
  --size-progress-cap: 10px;
  --shadow-progress-cap: 0 0 0 2px var(--bg-progress-radial-inner);
  /* Optional glow */
  --shadow-progress-cap-glow: 0 0 8px var(--bg-progress-bar), 0 0 0 2px var(--bg-progress-radial-inner);
  /* Indeterminate */

  --easing-progress-indeterminate: ease-in-out;
  /* Stack */

  --gap-progress-stack: 2px;
  /* Size System (Radial Defaults) */

  --size-progress-radial-xs: 28px;
  --size-progress-radial-sm: 36px;
  --size-progress-radial-md: 48px;
  --size-progress-radial-lg: 64px;
  --size-progress-radial-xl: 84px;
  --thickness-progress-radial-xs: 4px;
  --thickness-progress-radial-sm: 5px;
  --thickness-progress-radial-md: 6px;
  --thickness-progress-radial-lg: 8px;
  --thickness-progress-radial-xl: 10px;
  /* Accessibility Contrast Overrides */

  --text-progress-success: var(--alpha-white-100);
  --text-progress-warning: var(--text-primary);
  --text-progress-danger: var(--alpha-white-100);
  --text-progress-info: var(--alpha-white-100);
  --text-progress-neutral: var(--alpha-white-100);
  /* Busy Spinner */
  /* Sizes */
  --size-spinner-sm: 16px;
  --size-spinner-md: 20px;
  --size-spinner-lg: 24px;
  --size-spinner-xl: 32px;
  --size-spinner: var(--size-spinner-lg);
  /* Stroke scaling */
  --stroke-spinner-sm: 2;
  --stroke-spinner-md: 2.5;
  --stroke-spinner-lg: 3;
  --stroke-spinner-xl: 4;
  --stroke-spinner: 2px;
  /* Color */
  --text-spinner: var(--utility-emerald-500);
  /* Track */
  --opacity-spinner-track: 0.14;
  /* Overlay */
  --bg-spinner-overlay: var(--alpha-white-80);
  --blur-spinner-overlay: 4px;
  /* Motion */
  /* Overlay transition */
  /* Pop */
  /* Links V2 — 3c: faithful UUI, primary link = the brand accent (link-color = text-brand-secondary),
     not the legacy hyperlink-blue. Secondary/muted stay neutral (link-gray); danger stays red
     (link-destructive). Focus resolves through the canonical --border-focus. The [data-accent]
     presets below still override --text-link, so alt-accent themes keep working. */
  --text-link: var(--utility-blue-800);
  --text-link-hover: var(--utility-blue-900);
  --text-link-secondary: var(--utility-neutral-700);
  --text-link-secondary-hover: var(--alpha-black-100);
  --text-link-muted: var(--utility-neutral-500);
  --text-link-muted-hover: var(--utility-neutral-700);
  --text-link-danger: var(--utility-red-600);
  --text-link-danger-hover: var(--utility-red-700);
  --border-link-focus: var(--utility-blue-500);
  /* Form sections — 3c 3.2 (DERIVE). Leaf tokens resolve to canonical
     surface/text/border tokens so intent + card chrome stay theme-aware. */
  --text-form-section-title: var(--text-secondary);
  --text-form-section-description: var(--text-tertiary);
  --border-form-section: var(--border-primary-subtle);
  --bg-form-section-card: var(--bg-surface);
  --shadow-form-section-card: var(--shadow-xs);
  --bg-form-section-filled: var(--bg-secondary);
  --bg-form-section-icon: var(--bg-secondary);
  --text-form-section-icon: var(--text-secondary);
  --bg-form-section-badge: color-mix(in oklch, var(--text-secondary) 12%, transparent);
  --text-form-section-badge: var(--text-secondary);
  /* Tags */
  /* Neutral (default) */
  --bg-tag-neutral: var(--alpha-neutral-950-6);
  --bg-tag-neutral-hover: var(--alpha-neutral-950-10);
  --text-tag-neutral: var(--text-secondary);
  --text-tag-neutral-hover: var(--text-primary);
  --border-tag-neutral: var(--alpha-neutral-950-10);
  --border-tag-neutral-hover: var(--alpha-neutral-950-16);
  --border-tag-neutral-focus: var(--utility-blue-300);
  --bg-tag-neutral-dismiss-hover: var(--alpha-neutral-950-10);
  /* Primary */
  --bg-tag-primary: var(--alpha-blue-500-12);
  --bg-tag-primary-hover: var(--alpha-blue-500-16);
  --text-tag-primary: var(--utility-blue-800); /* tq-8380: 800 (600/700 measured 2.34-4.30:1 on the now-painted fills) */
  --text-tag-primary-hover: var(--utility-blue-700);
  --border-tag-primary: var(--alpha-blue-500-18);
  --border-tag-primary-hover: var(--alpha-blue-500-24);
  --border-tag-primary-focus: var(--utility-blue-300);
  --bg-tag-primary-dismiss-hover: var(--alpha-blue-500-12);
  /* Success */
  --bg-tag-success: var(--alpha-green-500-12);
  --bg-tag-success-hover: var(--alpha-green-500-16);
  --text-tag-success: var(--utility-green-800); /* tq-8380: 800 (600/700 measured 2.34-4.30:1 on the now-painted fills) */
  --text-tag-success-hover: var(--utility-green-700);
  --border-tag-success: var(--alpha-green-500-18);
  --border-tag-success-hover: var(--alpha-green-500-24);
  --border-tag-success-focus: var(--utility-green-300);
  --bg-tag-success-dismiss-hover: var(--alpha-green-500-12);
  /* Warning */
  --bg-tag-warning: var(--alpha-amber-500-14);
  --bg-tag-warning-hover: var(--alpha-amber-500-18);
  --text-tag-warning: var(--utility-amber-800); /* tq-8380: 800 (600/700 measured 2.34-4.30:1 on the now-painted fills) */
  --text-tag-warning-hover: var(--utility-amber-800);
  --border-tag-warning: var(--alpha-amber-500-22);
  --border-tag-warning-hover: var(--alpha-amber-500-28);
  --border-tag-warning-focus: var(--utility-amber-300);
  --bg-tag-warning-dismiss-hover: var(--alpha-amber-500-14);
  /* Danger */
  --bg-tag-danger: var(--alpha-red-500-12);
  --bg-tag-danger-hover: var(--alpha-red-500-16);
  --text-tag-danger: var(--utility-red-800); /* tq-8380: 800 (600/700 measured 2.34-4.30:1 on the now-painted fills) */
  --text-tag-danger-hover: var(--utility-red-700);
  --border-tag-danger: var(--alpha-red-500-18);
  --border-tag-danger-hover: var(--alpha-red-500-24);
  --border-tag-danger-focus: var(--utility-red-300);
  --bg-tag-danger-dismiss-hover: var(--alpha-red-500-12);
  /* Soft / Outline */
  --bg-tag-soft: var(--alpha-neutral-950-6);
  --border-tag-soft: var(--alpha-neutral-950-10);
  --border-tag-outline: var(--alpha-neutral-950-16);
  /* Selected */
  --bg-tag-selected: var(--alpha-blue-500-16);
  --border-tag-selected: var(--alpha-blue-500-24);
  --text-tag-selected: var(--utility-blue-700);
  /* Dismiss button (defaults; variant blocks override bg) */
  --text-tag-dismiss: var(--text-secondary);
  --text-tag-dismiss-hover: var(--text-primary);
  --bg-tag-dismiss-hover: var(--alpha-neutral-950-10);
  /* Filter */
  /* Base Item */

  --text-filter: var(--text-primary);
  --text-filter-hover: var(--text-primary-hover);
  --text-filter-disabled: var(--text-disabled);
  --bg-filter: var(--alpha-white-100);
  --bg-filter-hover: var(--utility-neutral-100);
  --bg-filter-active: var(--utility-neutral-100);
  --bg-filter-selected: var(--bg-info-subtle);
  --bg-filter-pressed: var(--utility-neutral-200);
  --opacity-filter-disabled: 0.65;
  /* Collapsible Section (Header Row) */

  --bg-filter-section: var(--bg-filter);
  --bg-filter-section-open: var(--bg-filter-hover);
  --bg-filter-section-pressed: var(--bg-filter-pressed);
  --text-filter-chevron: var(--text-tertiary);
  /* Collapse Body */

  --bg-filter-collapse: var(--bg-filter);
  --bg-filter-collapse-inner: var(--alpha-0);
  --border-filter: var(--border-primary);
  --border-filter-collapse: var(--border-filter);
  --border-filter-focus: var(--border-info-subtle);
  --ring-filter-focus: 0 0 0 2px var(--border-info-subtle);
  /* Nested Filter Items (inside collapse) */

  --bg-filter-nested: var(--alpha-0);
  --bg-filter-nested-hover: var(--bg-filter-hover);
  /* Filter Menu (thin header strip) */

  --text-filter-menu: var(--text-secondary);
  --bg-filter-menu: var(--alpha-0);
  /* Labels / Group Headings */

  --text-filter-label: var(--text-tertiary);
  /* Intent Rows (Optional Semantic States) */

  --bg-filter-success: var(--bg-success-subtle);
  --bg-filter-warning: var(--bg-warning-subtle);
  --bg-filter-danger: var(--bg-danger-subtle);
  --bg-filter-info: var(--bg-info-subtle);
  /* Density */

  --space-filter-item-x: 1rem; /* matches px-4 */
  --space-filter-item-y: 0.5rem; /* base vertical rhythm */
  --space-filter-item-y-compact: 0.375rem;
  --space-filter-item-y-relaxed: 0.75rem;
  /* Photo Viewer */
  --text-photo-viewer: var(--text-primary);
  --bg-photo-viewer-main: var(--alpha-white-100);
  --border-photo-viewer-main: var(--border-primary); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --shadow-photo-viewer-main: var(--shadow-sm);
  --bg-photo-viewer-image: var(--utility-neutral-100);
  --bg-photo-viewer-bar: var(--alpha-0);
  --border-photo-viewer-bar: var(--border-primary-subtle);
  --text-photo-viewer-bar: var(--text-secondary);
  --text-photo-viewer-title: var(--text-primary);
  --text-photo-viewer-meta: var(--text-tertiary);
  --bg-photo-viewer-action: var(--alpha-0);
  --bg-photo-viewer-action-hover: var(--bg-primary-subtle);
  --bg-photo-viewer-action-active: var(--bg-primary-hover);
  --border-photo-viewer-action: var(--border-primary-subtle);
  --border-photo-viewer-action-hover: var(--border-primary);
  --text-photo-viewer-action: var(--text-secondary);
  --text-photo-viewer-action-hover: var(--text-primary);
  --bg-photo-viewer-content: var(--alpha-0);
  --border-photo-viewer-content: var(--border-primary-subtle);
  --text-photo-viewer-content: var(--text-secondary);
  --text-photo-viewer-content-meta: var(--text-tertiary);
  --text-photo-viewer-content-body: var(--text-primary);
  --bg-photo-viewer-strip: var(--alpha-0);
  --border-photo-viewer-strip: var(--border-primary-subtle); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --bg-photo-viewer-thumb: var(--alpha-0);
  --bg-photo-viewer-thumb-hover: var(--bg-primary-subtle);
  --bg-photo-viewer-thumb-active: var(--bg-primary-hover);
  --border-photo-viewer-thumb: var(--border-primary-subtle);
  --border-photo-viewer-thumb-hover: var(--border-primary);
  --border-photo-viewer-thumb-active: var(--border-primary);
  --border-photo-viewer-thumb-selected: var(--border-info);
  /* Selected card/image ring: a white+black double ring, legible on any photo
     in either theme (Pavel #179). Same value both themes by design. */
  --ring-photo-viewer-thumb-selected: inset 0 0 0 2px oklch(100% 0 0), inset 0 0 0 3.5px oklch(0% 0 0);
  --shadow-photo-viewer-thumb: none;
  --ring-photo-viewer-thumb-focus: 0 0 0 2px var(--border-info-subtle);
  --opacity-photo-viewer-thumb: 0.92;
  --opacity-photo-viewer-thumb-disabled: 0.6;
  --filter-photo-viewer-thumb-disabled: none;
  /* Nav arrows (replaces hardcoded rgba) */
  --bg-photo-viewer-nav:               oklch(0% 0 0 / 0.45);
  --bg-photo-viewer-nav-hover:         oklch(0% 0 0 / 0.62);
  --bg-photo-viewer-nav-active:        oklch(0% 0 0 / 0.78);
  --text-photo-viewer-nav:             oklch(100% 0 0);
  --border-photo-viewer-nav: oklch(100% 0 0 / 0.12); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  /* Counter chip */
  --bg-photo-viewer-counter:           oklch(0% 0 0 / 0.5);
  --text-photo-viewer-counter:         oklch(100% 0 0 / 0.85);
  /* Caption overlay (on top of the image) */
  --bg-photo-viewer-caption-overlay:   linear-gradient(180deg, transparent 0%, oklch(0% 0 0 / 0.7) 100%);
  --text-photo-viewer-caption-overlay: oklch(100% 0 0);
  /* Zoom + controls bar */
  --bg-photo-viewer-toolbar:           oklch(0% 0 0 / 0.55);
  --text-photo-viewer-toolbar:         oklch(100% 0 0);
  --border-photo-viewer-toolbar: oklch(100% 0 0 / 0.10); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --bg-photo-viewer-zoom-btn:          oklch(100% 0 0 / 0.10);
  --bg-photo-viewer-zoom-btn-hover:    oklch(100% 0 0 / 0.20);
  --bg-photo-viewer-zoom-btn-active:   oklch(100% 0 0 / 0.30);
  --text-photo-viewer-zoom-btn:        oklch(100% 0 0);
  --text-photo-viewer-zoom-level:      oklch(100% 0 0 / 0.85);
  /* Status badges on slides */
  --bg-photo-viewer-status:            oklch(0% 0 0 / 0.55);
  --text-photo-viewer-status:          oklch(100% 0 0);
  /* Info panel sidebar */
  --bg-photo-viewer-info:              var(--bg-card, oklch(100% 0 0));
  --border-photo-viewer-info: var(--border-primary-subtle); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --text-photo-viewer-info:            var(--text-primary);
  --text-photo-viewer-info-muted:      var(--text-tertiary);
  --bg-photo-viewer-info-header:       var(--utility-neutral-50);
  /* Fullscreen overlay (unifies product-lightbox) */
  --bg-photo-viewer-fullscreen:        oklch(0% 0 0 / 0.94);
  --backdrop-photo-viewer-fullscreen:  blur(8px);
  --bg-photo-viewer-fullscreen-toolbar:oklch(100% 0 0 / 0.06);
  /* Compare slider (before/after) */
  --line-photo-viewer-compare:         oklch(100% 0 0);
  --bg-photo-viewer-compare-handle:    oklch(100% 0 0);
  --shadow-photo-viewer-compare-handle:0 2px 8px oklch(0% 0 0 / 0.35);
  /* Annotation pins */
  --bg-photo-viewer-annotation:        var(--utility-amber-500);
  --bg-photo-viewer-annotation-active: var(--utility-blue-500);
  --text-photo-viewer-annotation:      oklch(100% 0 0);
  --ring-photo-viewer-annotation:      0 0 0 3px oklch(100% 0 0 / 0.4);
  /* Video controls */
  --bg-photo-viewer-video-controls:    oklch(0% 0 0 / 0.55);
  --bg-photo-viewer-video-progress:    oklch(100% 0 0 / 0.18);
  --bg-photo-viewer-video-progress-fill: var(--utility-blue-400);
  /* Focus ring (on the stage / fullscreen container) */
  --ring-photo-viewer-focus:           0 0 0 2px var(--border-info);
  /* Apex Sparkline */
  --stroke-spark-width: 2;
  --stroke-spark: var(--utility-blue-500);
  --fill-spark-area: var(--alpha-0);
  --border-spark-grid: var(--utility-neutral-700);
  --marker-spark: var(--stroke-spark);
  --size-spark-marker: 0;
  --size-spark-marker-hover: 3;
  --border-spark-setpoint: var(--utility-neutral-200);
  --border-spark-deadband: var(--utility-neutral-100);
  --border-spark-warn: var(--utility-yellow-500);
  /* Apex Master */
  --apex-text-muted: var(--utility-neutral-900);
  --apex-series-1: var(--utility-blue-400);
  --apex-series-4: var(--utility-teal-400);
  --apex-series-5: var(--utility-indigo-400);
  --apex-series-line-1: var(--utility-red-400);
  --apex-series-line-2: var(--utility-yellow-400);
  --apex-series-line-3: var(--utility-yellow-400);
  --apex-series-line-4: var(--utility-teal-400);
  --apex-series-line-5: var(--utility-indigo-400);
  --apex-series-line-6: var(--utility-pink-400);
  --apex-series-line-7: var(--utility-amber-400);
  --apex-series-line-8: var(--utility-red-400);
  --apex-series-line-9: var(--utility-purple-400);
  --apex-series-line-10: var(--utility-neutral-400);
  --apex-series-line-11: var(--utility-orange-400);
  --apex-series-line-12: var(--utility-lime-400);
  --apex-series-pie-1: var(--utility-blue-400);
  --apex-series-pie-2: var(--utility-green-400);
  --apex-series-pie-3: var(--utility-yellow-400);
  --apex-series-pie-4: var(--utility-teal-400);
  --apex-series-pie-5: var(--utility-indigo-400);
  --apex-series-pie-6: var(--utility-pink-400);
  --apex-series-pie-7: var(--utility-amber-400);
  --apex-series-pie-8: var(--utility-red-400);
  --apex-series-pie-9: var(--utility-purple-400);
  --apex-series-pie-10: var(--utility-neutral-400);
  --apex-series-pie-11: var(--utility-orange-400);
  --apex-series-pie-12: var(--utility-lime-400);
  --apex-series-bar-1: var(--utility-blue-400);
  --apex-series-bar-2: var(--utility-green-400);
  --apex-series-bar-3: var(--utility-yellow-400);
  --apex-series-bar-4: var(--utility-teal-400);
  --apex-series-bar-5: var(--utility-indigo-400);
  --apex-series-bar-6: var(--utility-pink-400);
  --apex-series-bar-7: var(--utility-amber-400);
  --apex-series-bar-8: var(--utility-red-400);
  --apex-series-bar-9: var(--utility-purple-400);
  --apex-series-bar-10: var(--utility-neutral-400);
  --apex-series-bar-11: var(--utility-orange-400);
  --apex-series-bar-12: var(--utility-lime-400);
  --apex-series-radial-1: var(--utility-blue-400);
  --apex-series-radial-2: var(--utility-green-400);
  --apex-series-radial-3: var(--utility-yellow-400);
  --apex-series-radial-4: var(--utility-teal-400);
  --apex-series-radial-5: var(--utility-indigo-400);
  --apex-series-radial-6: var(--utility-pink-400);
  --apex-series-radial-7: var(--utility-amber-400);
  --apex-series-radial-8: var(--utility-red-400);
  --apex-series-radial-9: var(--utility-purple-400);
  --apex-series-radial-10: var(--utility-neutral-400);
  --apex-series-radial-11: var(--utility-orange-400);
  --apex-series-radial-12: var(--utility-lime-400);
  --apex-series-heatmap-5: var(--utility-indigo-400);
  --apex-series-heatmap-6: var(--utility-pink-400);
  --apex-series-heatmap-7: var(--utility-amber-400);
  --apex-series-heatmap-8: var(--utility-red-400);
  --apex-series-heatmap-9: var(--utility-purple-400);
  --apex-series-heatmap-10: var(--utility-neutral-400);
  --apex-series-heatmap-11: var(--utility-orange-400);
  --apex-series-heatmap-12: var(--utility-lime-400);
  --apex-fill-opacity-from: 0.35;
  --apex-fill-opacity-to: 0.05;
  --apex-marker-size: 2;
  --apex-marker-stroke: 1;
  --apex-marker-hover-offset: 2;
  --apex-line-stroke: 1;
  --apex-donut-value-size: 12;
  --apex-donut-name-size: 11;
  --apex-donut-total-size: 12;
  --apex-bar-column-width: 40%;
  --apex-bar-radius: 0px; /* fixed: was empty */
  --apex-bar-ending-shape: flat;
  --apex-bar-datalabels: off;
  /* Candlestick / boxplot / financial */
  --apex-candle-up-bg:     var(--utility-green-50);
  --apex-candle-down-bg:   var(--utility-red-50);
  /* Brush selection */
  /* Annotation accent */
  /* Chart card chrome */
  --bg-chart-card:           oklch(100% 0 0);
  --bg-chart-card-header:    transparent;
  --border-chart-card:       var(--utility-neutral-200);
  /* Chart KPI mini-card */
  /* Loading skeleton + no-data */
  --bg-chart-skeleton:       var(--utility-neutral-100);
  --bg-chart-skeleton-sweep: linear-gradient(115deg, transparent 30%, oklch(100% 0 0 / 0.5) 50%, transparent 70%);
  --bg-chart-no-data:        var(--utility-neutral-50);
  /* Autocomplete */
  --text-autocomplete: var(--utility-neutral-950);
  --bg-autocomplete: var(--alpha-white-100);
  --border-autocomplete: var(--border-primary);
  --text-autocomplete-item: var(--utility-neutral-950); /* fixed: removed 950S */
  --text-autocomplete-active: var(--alpha-white-100);
  --bg-autocomplete-active: var(--utility-blue-500);
  /* Chat */
  --bg-activity-log-header: var(--alpha-white-100);
  --bg-activity-log-panel: var(--alpha-white-100);
  --bg-activity-log-footer: var(--alpha-white-100);
  --text-post-owner: var(--utility-neutral-950); /* fixed */
  --text-post-public: var(--utility-neutral-950); /* fixed */
  --text-post-system: var(--utility-neutral-600); /* fixed */
  --text-post-date: var(--utility-neutral-700); /* fixed */

  --bg-post-owner: var(--utility-indigo-100);
  --bg-post-public: var(--utility-neutral-100);
  --bg-post-actions: var(--alpha-white-100);
  --border-post-actions: var(--utility-neutral-100);
  /* Color Picker */
  /* Thumbnail */
  --bg-thumbnail: var(--alpha-0); /* fixed: was --var(...) */
  --border-thumbnail: var(--alpha-0);
  --bg-thumbnail-img: var(--alpha-0);
  --bg-thumbnail-remove: var(--alpha-neutral-950-60);
  --bg-thumbnail-remove-hover: var(--utility-neutral-600);
  --text-thumbnail-remove: var(--alpha-white-100);
  --border-thumbnail-remove: var(--alpha-0);
  /* Kanban */
  --bg-kanban: var(--utility-neutral-50);
  --bg-kanban-header: var(--utility-neutral-50);
  --bg-kanban-list: var(--utility-neutral-50);
  --bg-kanban-card: var(--alpha-white-100);
  --bg-kanban-card-hover: var(--utility-neutral-50);
  --bg-kanban-card-active: var(--utility-neutral-100);
  --border-kanban: var(--utility-neutral-200);
  --border-kanban-card: var(--utility-neutral-200);
  --icon-kanban-muted: var(--text-tertiary);
  --text-kanban: var(--text-primary);
  --text-kanban-header: var(--text-secondary);
  --radius-kanban: var(--radius-lg);
  --radius-kanban-card: var(--radius-lg);
  --shadow-kanban-card-drag: var(--shadow-xl);
  --bg-kanban-col: var(--utility-neutral-50);
  --bg-kanban-drop-target: color-mix(in oklab, var(--utility-neutral-50), var(--border-info) 6%);
  --border-drop-target: var(--border-info);
  --bg-kanban-drop-invalid: color-mix(in oklab, var(--utility-neutral-50), var(--border-danger) 6%);
  --border-drop-invalid: var(--border-danger);
  --bg-kanban-wip-full: var(--bg-danger-subtle);
  --text-kanban-wip-full: var(--text-danger);
  --text-kanban-wip: var(--text-tertiary);
  --bg-kanban-wip: transparent;
  --border-kanban-selected: var(--text-info);  /* selection ring: --text-info measured 5.03:1 light / 9.6:1 dark on the column; --border-info (blue-400) computes 2.64:1 on white, under the 3:1 floor */
  --bg-kanban-card-media: var(--utility-neutral-100);
  --text-kanban-accent: hsl(220 90% 56%);
  /* Mobile / PWA */
  /* Mapbox */
  --border-mapbox-origin-marker: var(--alpha-neutral-900-30);
  --border-mapbox-destination-marker: var(--alpha-neutral-900-30);
  --bg-stop-marker: var(--utility-neutral-900);
  /* Mapbox route lines. JS reads these via getComputedStyle since the
     Mapbox GL layer paint props need concrete color strings, not `var()`. */
  --bg-mapbox-route-primary:   var(--utility-blue-500);
  /* Modal */
  --bg-modal: var(--alpha-white-100);
  --text-modal: var(--text-primary);
  --border-modal: var(--alpha-0);
  --border-modal-header: var(--border-primary);
  /* #232 addendum (ruling 128c73807) — COMPLETING a half-migration, not creating a value.
     --border-modal-divider was declared in DARK only (theme-dark.css:2124); in light the modal
     binding fell THROUGH to --border-secondary. Dark-only is the half-migration signature, and
     the remedy is to finish it rather than delete the half that exists.
     PIXEL-NEUTRAL BY CONSTRUCTION: --border-secondary in this theme IS utility-neutral-200
     (line 129), so this declares exactly what already renders (#e5e5e5). Written against the
     PRIMITIVE rather than var(--border-secondary), so it does not re-create the alias chain the
     coherence fix exists to remove. */
  --border-modal-divider: var(--utility-neutral-200);
  --bg-modal-overlay: var(--alpha-neutral-950-20);

  /* Lightbox — immersive media inspection (cinematic; same on both themes) */
  --bg-lightbox: oklch(8% 0.005 250 / 0.92);
  --bg-lightbox-overlay: oklch(0% 0 0 / 0.40);
  --opacity-lightbox-overlay: 0.40;
  --bg-lightbox-surface: oklch(100% 0 0 / 0.06);
  --bg-lightbox-control: oklch(100% 0 0 / 0.10);
  --bg-lightbox-control-hover: oklch(100% 0 0 / 0.18);
  --bg-lightbox-control-active: oklch(100% 0 0 / 0.24);
  --bg-lightbox-thumbnail: oklch(100% 0 0 / 0.06);
  --bg-lightbox-thumbnail-active: oklch(100% 0 0 / 0.18);
  --text-lightbox: oklch(100% 0 0 / 0.92);
  --text-lightbox-muted: oklch(100% 0 0 / 0.62);
  --border-lightbox: oklch(100% 0 0 / 0.10); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --border-lightbox-thumbnail: oklch(100% 0 0 / 0.14); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --border-lightbox-thumbnail-active: oklch(100% 0 0 / 0.70); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --ring-lightbox-focus: oklch(70% 0.15 240 / 0.90);
  --shadow-lightbox: 0 12px 32px -8px oklch(0% 0 0 / 0.5);

  /* Notification Tray */
  /* Section */
  /* Selection */
  --bg-selection: var(--utility-emerald-800);
  --text-selection: var(--alpha-white-100);
  --bg-input-selection: var(--alpha-emerald-800-20);
  --text-input-selection: var(--text-primary);

  /* =========================================
     Mail Client
     ========================================= */
  /* Shell + toolbar */
  --bg-mail-app:                     var(--bg-surface);
  --bg-mail-toolbar:                 var(--bg-surface);
  --bg-mail-search:                  var(--bg-input);
  --border-mail-search:              var(--border-input);
  /* Sidebar */
  --bg-mail-sidebar:                 var(--utility-neutral-50);
  --border-mail-sidebar:             var(--border-primary-subtle);
  --bg-mail-folder-hover:            var(--utility-neutral-100);
  --bg-mail-folder-active: var(--utility-emerald-50); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --text-mail-folder:                var(--text-secondary);
  --text-mail-folder-active:         var(--text-link);
  --text-mail-folder-count:          var(--text-tertiary);
  --bg-mail-folder-count-active:     var(--bg-brand-solid);
  --text-mail-folder-count-active:   var(--text-on-brand);
  --text-mail-sidebar-section:       var(--text-tertiary);
  /* List */
  --bg-mail-list:                    oklch(100% 0 0);
  --border-mail-list:                var(--border-primary-subtle);
  --bg-mail-item:                    transparent;
  --bg-mail-item-hover:              var(--utility-neutral-50);
  --bg-mail-item-active: var(--utility-emerald-50); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --bg-mail-item-selected: var(--utility-emerald-50); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --bg-mail-item-unread:             oklch(100% 0 0);
  --border-mail-item-divider:        var(--utility-neutral-100);
  --border-mail-item-active:         var(--border-focus);
  --bg-mail-item-new-flash:          var(--utility-amber-50);
  --bg-mail-unread-dot:              var(--bg-brand-solid);
  --text-mail-item:                  var(--text-primary);
  --text-mail-sender:                var(--text-primary);
  --text-mail-subject:               var(--text-primary);
  --text-mail-preview:               var(--text-tertiary);
  --text-mail-time:                  var(--text-tertiary);
  /* Item state accents */
  --text-mail-star:                  var(--utility-neutral-400);
  --text-mail-star-active:           var(--utility-amber-500);
  --text-mail-pin:                   var(--utility-amber-600);
  --text-mail-snoozed:               var(--utility-blue-500);
  --text-mail-flagged:               var(--utility-red-500);
  --text-mail-replied:               var(--utility-green-600);
  --text-mail-forwarded:             var(--utility-blue-600);
  --text-mail-important:             var(--utility-amber-600);
  --text-mail-encrypted:             var(--utility-purple-600);
  --text-mail-draft:                 var(--utility-orange-600);
  /* Priority indicators (left edge bar) */
  --bg-mail-priority-high:           var(--utility-red-500);
  --bg-mail-priority-normal:         transparent;
  --bg-mail-priority-low:            var(--utility-neutral-400);
  /* Labels (10-step palette for user-defined labels) */
  --bg-mail-label-blue:              var(--utility-blue-100);
  --text-mail-label-blue:            var(--utility-blue-700);
  --bg-mail-label-green:             var(--utility-green-100);
  --text-mail-label-green:           var(--utility-green-700);
  --bg-mail-label-amber:             var(--utility-amber-100);
  --text-mail-label-amber:           var(--utility-amber-700);
  --bg-mail-label-red:               var(--utility-red-100);
  --text-mail-label-red:             var(--utility-red-700);
  --bg-mail-label-purple:            var(--utility-purple-100);
  --text-mail-label-purple:          var(--utility-purple-700);
  --bg-mail-label-pink:              var(--utility-pink-100);
  --text-mail-label-pink:            var(--utility-pink-700);
  --bg-mail-label-teal:              var(--utility-teal-100);
  --text-mail-label-teal:            var(--utility-teal-700);
  --bg-mail-label-orange:            var(--utility-orange-100);
  --text-mail-label-orange:          var(--utility-orange-700);
  --bg-mail-label-indigo:            var(--utility-indigo-100);
  --text-mail-label-indigo:          var(--utility-indigo-700);
  --bg-mail-label-neutral:           var(--utility-neutral-100);
  --text-mail-label-neutral:         var(--utility-neutral-700);
  /* Detail (reading pane) */
  --bg-mail-detail:                  oklch(100% 0 0);
  --border-mail-detail:              var(--border-primary-subtle);
  --bg-mail-detail-toolbar:          oklch(100% 0 0 / 0.9);
  --bg-mail-quoted:                  var(--utility-neutral-50);
  --border-mail-quoted:              var(--utility-neutral-300);
  --text-mail-quoted-toggle:         var(--text-link);
  /* Compose */
  --bg-mail-compose:                 oklch(100% 0 0);
  --border-mail-compose:             var(--border-primary);
  --shadow-mail-compose:             0 8px 24px oklch(0% 0 0 / 0.12), 0 2px 6px oklch(0% 0 0 / 0.04);
  --bg-mail-compose-toolbar:         var(--utility-neutral-50);
  --bg-mail-compose-footer:          var(--utility-neutral-50);
  --text-mail-draft-dot:             var(--utility-orange-500);
  /* Recipient chip */
  --bg-mail-recipient:               var(--utility-neutral-100);
  --bg-mail-recipient-hover:         var(--utility-neutral-200);
  --bg-mail-recipient-internal:      var(--utility-blue-50);
  --text-mail-recipient-internal:    var(--utility-blue-700);
  --bg-mail-recipient-external:      var(--utility-amber-50);
  --text-mail-recipient-external:    var(--utility-amber-700);
  --bg-mail-recipient-group:         var(--utility-purple-50);
  --text-mail-recipient-group:       var(--utility-purple-700);
  --bg-mail-recipient-invalid:       var(--utility-red-50);
  --text-mail-recipient-invalid:     var(--utility-red-700);
  /* Banner / notification strip */
  --bg-mail-banner:                  var(--utility-blue-50);
  --text-mail-banner:                var(--utility-blue-700);
  --border-mail-banner:              var(--utility-blue-200);
  /* Selection bar */
  --bg-mail-selection-bar: var(--utility-emerald-50); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --text-mail-selection-bar:         var(--text-link);
  --border-mail-selection-bar: var(--utility-emerald-200); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  /* Category tabs */
  --bg-mail-category-tab:            transparent;
  --bg-mail-category-tab-active:     var(--utility-neutral-100);
  --text-mail-category-tab:          var(--text-tertiary);
  --text-mail-category-tab-active:   var(--text-primary);
  --border-mail-category-tab-active: var(--border-focus);
  /* Filter chips above the list */
  --bg-mail-filter-chip:             var(--utility-neutral-100);
  --bg-mail-filter-chip-active:      var(--bg-brand-solid);
  --text-mail-filter-chip:           var(--text-secondary);
  --text-mail-filter-chip-active:    oklch(100% 0 0);
  /* Sender hover card */
  --bg-mail-sender-card:             oklch(100% 0 0);
  --border-mail-sender-card:         var(--border-primary);
  --shadow-mail-sender-card:         0 8px 24px oklch(0% 0 0 / 0.12);
  /* Focus ring */
  --ring-mail-focus:                 inset 0 0 0 2px var(--border-focus);

  /* Tooltip */
  --text-tooltip: var(--text-primary);
  --bg-tooltip: var(--alpha-white-100);
  /* Plugin: Dropzone */
  --border-dropzone: var(--utility-neutral-300);
  --text-dropzone: var(--utility-neutral-600);
  --bg-dropzone: var(--utility-neutral-200);
  /* Plugin: Flatpickr */
  --bg-flatpickr-calendar: var(--alpha-white-100);
  --border-flatpickr-calendar: var(--utility-neutral-200);
  --text-flatpickr-primary: var(--utility-neutral-800);
  --text-flatpickr-months: var(--utility-neutral-600);
  --text-flatpickr-months-hover: var(--utility-neutral-900);
  --text-flatpickr: var(--utility-neutral-700);
  --text-flatpickr-hover: var(--utility-neutral-900);
  --text-flatpickr-disabled: var(--utility-neutral-300);
  --text-flatpickr-selected: var(--alpha-white-100);
  --text-flatpickr-selected-hover: var(--alpha-white-100);
  --text-flatpickr-time: var(--utility-neutral-500);
  --bg-flatpickr: var(--alpha-0);
  --bg-flatpickr-primary: var(--alpha-neutral-100-20);
  --bg-flatpickr-hover: var(--utility-neutral-200);
  --bg-flatpickr-selected: var(--utility-emerald-800);
  --bg-flatpickr-selected-hover: var(--utility-emerald-900);
  --bg-flatpickr-time-hover: var(--alpha-emerald-900-10);
  --border-flatpickr-hover: var(--utility-neutral-300);
  --border-flatpickr-selected: var(--utility-emerald-800);
  --border-flatpickr-selected-hover: var(--utility-emerald-900);
  --border-flatpickr-time: var(--utility-neutral-200);
  /* today cell — neutral fill in light (UUI 1:1); dark switches to a toned brand accent (Pavel #95) */
  --bg-flatpickr-today: var(--bg-secondary);
  --bg-flatpickr-today-hover: var(--bg-secondary-hover);
  /* Plugin: Select2 (namespaced to avoid collisions) */
  /* App: Calendar */
  --bg-calendar-container: var(--alpha-white-100);
  --border-calendar-divider: var(--utility-neutral-200);
  --border-calendar-divider-header: var(--utility-neutral-200);
  --border-calendar-divider-time: var(--utility-neutral-200);
  --text-calendar-time-label: var(--utility-neutral-800);
  --text-calendar-time: var(--utility-neutral-700);
  --text-calendar-day-label: var(--utility-neutral-950);
  --text-calendar-day-date: var(--utility-neutral-700);
  --text-calendar-day-header: var(--utility-neutral-950);
  --text-calendar-closed: var(--text-disabled);
  --bg-calendar-day-header: var(--alpha-white-100);
  --bg-calendar-time-slot: var(--alpha-white-100);
  --bg-calendar-day-slot: var(--utility-neutral-50);
  --bg-calendar-indicator-today: var(--utility-neutral-950);
  --bg-calendar-footer: var(--alpha-white-100);
  /* Appointment card */
  --text-appointment-gap: var(--text-danger);
  --border-appointment-toggle-btn: var(--utility-neutral-100);
  /* Schedule mini-calendar */
  --text-schedule-day-label: var(--utility-neutral-600);
  --text-schedule-day: var(--utility-neutral-950);
  --text-schedule-day-available: var(--utility-neutral-950);
  --text-schedule-day-active: var(--alpha-white-100);
  --bg-schedule-day: var(--alpha-0);
  --bg-schedule-day-hover: var(--utility-neutral-100);
  --bg-schedule-day-available: var(--utility-neutral-50);
  --bg-schedule-day-available-hover: var(--utility-neutral-100);
  --bg-schedule-day-available-active: var(--utility-neutral-100);
  --bg-schedule-day-active: var(--utility-neutral-900);
  --bg-schedule-day-active-hover: var(--utility-neutral-900);
  --bg-schedule-day-active-pressed: var(--utility-neutral-950);
  --bg-schedule-indicator-current: var(--utility-neutral-950);
  --border-schedule-day-available: var(--utility-neutral-100);

  /* Calendar Booking (date-picker / booking calendar) */
  /* available */
  /* selected */
  /* today */
  /* indicators */
  /* elevated variant */
  /* navigation */

  /* Calendar Schedule (reusable component) */
  --h-calendar-schedule-hour: 64px;
  --radius-calendar-schedule: var(--radius-lg, 0.5rem);
  --shadow-calendar-schedule: var(--shadow-sm);
  --bg-calendar-schedule: var(--alpha-white-100);
  --bg-calendar-schedule-surface: var(--alpha-white-100);
  --border-calendar-schedule: var(--utility-neutral-200);
  --bg-calendar-schedule-today: var(--utility-blue-50);
  --bg-calendar-schedule-hover: var(--utility-blue-100);
  --bg-calendar-schedule-now: var(--bg-info-solid);
  /* Calendar Schedule V2 */
  --bg-calendar-schedule-working-hours: transparent;
  --shadow-calendar-event: var(--shadow-sm);
  --shadow-calendar-event-hover: var(--shadow-md);
  --ring-calendar-event-focus: 0 0 0 4px var(--utility-blue-100);
  /* Calendar Schedule — Now Indicator */
  --bg-calendar-now-dot: var(--utility-red-500);
  --bg-calendar-now-line: var(--alpha-red-500-30);
  --bg-calendar-today-line: var(--alpha-red-500-10);
  /* Calendar Schedule — Stacked slot variant */
  /* Calendar Schedule — Frame layout */
  /* App: Inventory */
  --bg-inventory-grid-panel: var(--alpha-white-100);
  --bg-inventory-card: transparent;
  --bg-inventory-card-hover: var(--utility-neutral-100);
  --border-inventory-card: transparent;
  --border-inventory-card-hover: transparent;
  --bg-inventory-image: var(--utility-neutral-100);
  --text-inventory-info: var(--utility-neutral-950);
  --text-inventory-secondary: var(--utility-neutral-600);
  --bg-inventory-popover: var(--alpha-white-100);
  --bg-inventory-popover-hover: var(--utility-neutral-100);
  --text-inventory-tertiary: var(--utility-neutral-500);
  /* App: Gallery */
  --bg-gallery: var(--alpha-white-100);
  --bg-gallery-card-hover: var(--utility-neutral-100);
  --text-gallery-card: var(--text-primary);
  --text-gallery-header: var(--text-secondary);

  /* Gallery component tokens — property-first family for the new
     .gallery-item / .gallery-view system (see gallery.css for usage). */
  --bg-gallery-item: transparent;
  --bg-gallery-item-hover: var(--utility-neutral-100);
  --bg-gallery-item-selected: var(--bg-info-subtle);
  --bg-gallery-item-image: var(--utility-neutral-50);
  --bg-gallery-item-upload: transparent;
  --text-gallery: var(--text-primary);
  --text-gallery-muted: var(--text-tertiary);
  --border-gallery: transparent;
  --border-gallery-item: transparent;
  --border-gallery-item-hover: var(--border-divider);
  --border-gallery-item-selected: var(--text-info);
  --border-gallery-item-upload: var(--border-divider);
  --shadow-gallery-item: 0 1px 2px rgba(0,0,0,0.04);
  --shadow-gallery-item-hover: 0 4px 12px rgba(0,0,0,0.08);
  --ring-gallery-focus: 0 0 0 3px color-mix(in oklch, var(--text-info) 25%, transparent);
  /* App: Landing / Navbar */
  --border-navbar: var(--alpha-0);
  --text-navbar: var(--utility-neutral-900);
  --text-navbar-link-active: var(--utility-neutral-950);
  --bg-navbar-link-hover: var(--alpha-0);
  --bg-navbar-link-active: var(--alpha-0);
  --border-navbar-dropdown: var(--utility-neutral-100);
  --radius-navbar-card: var(--radius-md);
  --text-navbar-card-title: var(--text-primary);
  --text-navbar-card-caption: var(--text-secondary);
  /* App: Mobile Nav */
  /* Line Toast tokens retired with the component (tq-9368: the USER chose the Signal pill) */
  /* Signal Pill — Solid surface (white card) */
  --bg-signal-pill-solid: var(--alpha-white-100);
  --text-signal-pill-solid: var(--text-primary);
  --text-signal-pill-solid-muted: var(--text-tertiary);
  --border-signal-pill-solid: var(--border-divider);
  --icon-signal-pill-solid: var(--text-secondary);
  /* Signal Pill — Glass surface (light frosted) */
  --bg-signal-pill-glass: var(--alpha-white-50);
  --text-signal-pill-glass: var(--text-primary);
  --text-signal-pill-glass-muted: var(--text-tertiary);
  --border-signal-pill-glass: var(--alpha-white-60); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --icon-signal-pill-glass: var(--text-secondary);
  --blur-signal-pill-glass: blur(24px) saturate(140%);
  /* Signal Pill — Shadow & shape */
  --shadow-signal-pill: 0 12px 32px -8px oklch(0% 0 0 / 0.22), 0 4px 12px -4px oklch(0% 0 0 / 0.12);
  --shadow-signal-pill-glass: 0 12px 32px -8px oklch(0% 0 0 / 0.16), 0 2px 8px -2px oklch(0% 0 0 / 0.08);
  --radius-signal-pill: var(--radius-full);
  /* Signal Pill — Status: white surface, icon-only color */
  --bg-signal-pill-success: var(--alpha-white-100);
  --text-signal-pill-success: var(--text-primary);
  --icon-signal-pill-success: var(--text-success);
  --bg-signal-pill-danger: var(--alpha-white-100);
  --text-signal-pill-danger: var(--text-primary);
  --icon-signal-pill-danger: var(--text-danger);
  --bg-signal-pill-warning: var(--alpha-white-100);
  --text-signal-pill-warning: var(--text-primary);
  --icon-signal-pill-warning: var(--text-warning);
  --bg-signal-pill-info: var(--alpha-white-100);
  --text-signal-pill-info: var(--text-primary);
  --icon-signal-pill-info: var(--text-info);
  --bg-signal-pill-neutral: var(--alpha-white-100);
  --text-signal-pill-neutral: var(--text-primary);
  --icon-signal-pill-neutral: var(--text-secondary);
  --bg-signal-pill-loading: var(--alpha-white-100);
  --text-signal-pill-loading: var(--text-primary);
  --icon-signal-pill-loading: var(--text-info);
  --bg-signal-pill-action: var(--alpha-white-100);
  --text-signal-pill-action: var(--text-primary);
  --icon-signal-pill-action: var(--text-info);
  --text-signal-pill-action-label: var(--text-link);
  --text-signal-pill-action-label-hover: var(--text-link-hover);
  /* =========================================
     Foundation Scales
     ========================================= */
  /* Shadow Scale */
  --shadow-xs: 0 1px 1px 0 oklch(0% 0 0 / 0.03);
  --shadow-sm: 0 1px 3px 0 oklch(0% 0 0 / 0.1), 0 1px 2px -1px oklch(0% 0 0 / 0.1);
  --shadow-md: 0 4px 6px -1px oklch(0% 0 0 / 0.1), 0 2px 4px -2px oklch(0% 0 0 / 0.1);
  --shadow-lg: 0 10px 15px -3px oklch(0% 0 0 / 0.1), 0 4px 6px -4px oklch(0% 0 0 / 0.1);
  --shadow-xl: 0 20px 25px -5px oklch(0% 0 0 / 0.1), 0 8px 10px -6px oklch(0% 0 0 / 0.1);
  --shadow-2xl: 0 25px 50px -12px oklch(0% 0 0 / 0.25);
  --shadow-inner: inset 0 2px 4px 0 oklch(0% 0 0 / 0.05);
  --shadow-none: 0 0 0 0 transparent;
  /* Radius Scale */
  --radius-none: 0;
  --radius-xs: 0.125rem;
  --radius-sm: 0.25rem;
  --radius-md: 0.375rem;
  --radius-lg: 0.5rem;
  --radius-xl: 0.75rem;
  --radius-2xl: 1rem;
  --radius-3xl: 1.5rem;
  --radius-full: 9999px;
  /* Z-Index: none here. The ONE ladder is components/foundations/layout.css :root (tq-9381) */
  /* Duration Scale */
  /* Easing Scale */
  /* Spacing Scale */
  --space-0: 0;
  --space-px: 1px;
  --space-0-5: 0.125rem;
  --space-1: 0.25rem;
  --space-1-5: 0.375rem;
  --space-2: 0.5rem;
  --space-3: 0.75rem;
  --space-4: 1rem;
  --space-5: 1.25rem;
  --space-6: 1.5rem;
  --space-8: 2rem;
  --space-10: 2.5rem;
  --space-12: 3rem;
  --space-16: 4rem;
  --space-20: 5rem;
  --space-24: 6rem;
  --space-32: 8rem;
  --space-40: 10rem;
  --space-48: 12rem;
  --space-64: 16rem;
  /* Blur Scale */
  --blur-none: 0;
  --blur-xs: 2px;
  --blur-sm: 4px;
  --blur-md: 8px;
  --blur-lg: 12px;
  --blur-xl: 20px;
  --blur-2xl: 40px;
  /* Focus (Pavel #371 -> #373) — the ACCENT lives here, and ONLY here.
     The rule is a split, not a ban: DEFAULT control borders are neutral (black in
     light, blue in dark — #368), and the brand appears only on :focus. #371 briefly
     made this blue, which put blue on light-mode inputs the moment you focused one
     (#372) — wrong on both counts.
     brand-700, not brand-600: gold-on-white at brand-600 is ~2:1, a focus ring
     nobody can see, which is what "focus colours not correct" meant. brand-700 is
     5.4:1 on white, so focus is accent-coloured AND actually visible.
     One token for every focusable thing (buttons, menus, inputs, tabs, cards) —
     --ring-focus builds the 2px gap + 2px ring from it, so consumers stay
     consistent by construction. */
  --border-focus: var(--border-brand);             /* was --utility-blue-500. REVERSED to mirror isabella's PR 456 in the seed product: a blue focus ring in a colour brand reads as the browser default and was photographed as a bug. Safe HERE because --border-brand resolves to --color-brand-700 (oklch 50.8% 0.118 166), the step the DS annotates "dark gold — border on white (AA)". Re-key the brand and re-measure this before assuming it still holds. */
  --focus-ring: var(--utility-emerald-800);  /* tq-8912 (A131; origin Enodia tq-8915): THE one opaque focus ring (outline 2px, offset 2px / inset -2px), every component + danger. The brand border step (Pavel: a blue ring reads as the browser default here); 5.1-7.6:1 on every light surface */
  --ring-focus: 0 0 0 2px var(--bg-body, #fff), 0 0 0 4px var(--border-focus);
  /* WHITELIST #1b — the brand FILL is the 500 step (signature, identical in dark).
     The ladder DARKENS so the white ink holds all the way down. These two are re-stated
     as color-mix in the authority block below (and in theme-dark) — the step forms here
     are the fallback and land in the same place: hover 6.15:1 · active 7.76:1. */
  --bg-brand-solid: var(--bg-button-primary); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --bg-brand-solid-hover: var(--bg-button-primary-hover); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --bg-brand-solid-active: var(--bg-button-primary-active); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --text-on-brand: var(--color-white);
  --border-brand: var(--utility-emerald-800); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  /* Brand INK — the brand as TEXT, which is not the same colour as the brand as a FILL.
     25 components were setting `color: var(--bg-brand-solid)`, i.e. using a background
     token as ink: on white that is brand-600 #e6ad13 at 2.03:1, far under AA. The light
     brand is a light gold, so text/border-on-white roles drop to brand-700 (5.4:1) —
     the same rule the calendar/event-pill roles already follow. Fills keep brand-600. */
  --text-brand: var(--utility-emerald-800); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --border-disabled: var(--utility-neutral-200);
  /* Button: Success — green-600 under white ink is 3.22:1, under AA for the 13px/600
     button label. green-700 is the first step that clears it (4.95:1); the whole
     rest/hover/active ladder shifts up one to keep its darkening progression. */
  --bg-button-success: var(--utility-green-600);
  --bg-button-success-hover: var(--utility-green-700);
  --bg-button-success-active: var(--utility-green-800);
  --text-button-success: var(--alpha-white-100);
  --border-button-success: var(--alpha-0);
  /* Empty State */
  --bg-empty-state-icon: var(--utility-neutral-100);
  /* Skeleton */
  --bg-skeleton: var(--utility-neutral-200);
  --bg-skeleton-highlight: var(--utility-neutral-100);
  /* Combobox */
  --bg-combobox: var(--bg-input);
  --bg-combobox-search: var(--utility-neutral-100);
  --bg-combobox-listbox: var(--alpha-white-100);
  --bg-combobox-option-hover: var(--bg-dropdown-hover);
  --bg-combobox-option-active: var(--bg-dropdown-active);
  --bg-combobox-option-selected: var(--bg-dropdown-selected);
  --text-combobox: var(--text-input);
  --text-combobox-placeholder: var(--text-input-placeholder);
  --text-combobox-option: var(--text-primary);
  --text-combobox-option-selected: var(--text-dropdown-selected);
  --text-combobox-option-meta: var(--text-tertiary);
  --text-combobox-option-check: var(--text-success);
  --border-combobox: var(--border-input);
  --border-combobox-hover: var(--border-input-hover);
  --border-combobox-focus: var(--border-input-active);
  --shadow-combobox-listbox: var(--shadow-dropdown);
  --ring-combobox-focus: var(--ring-input-focus);
  --bg-combobox-header: var(--alpha-white-100);
  --border-combobox-header: var(--border-dropdown-divider);
  --bg-combobox-footer: var(--alpha-white-100);
  --border-combobox-footer: var(--border-dropdown-divider);
  --opacity-combobox-grain: var(--opacity-dropdown-grain, 0);

  /* =========================================
     Accordion (native details/summary based)
     ========================================= */
  --bg-accordion:                 oklch(100% 0 0);
  --bg-accordion-trigger:         transparent;
  --bg-accordion-trigger-hover:   var(--utility-neutral-50);
  --bg-accordion-trigger-active:  var(--utility-neutral-100);
  --bg-accordion-trigger-open:    var(--utility-neutral-50);
  --bg-accordion-body:            transparent;
  --bg-accordion-body-filled:     var(--utility-neutral-50);
  --bg-accordion-card:            oklch(100% 0 0);

  --text-accordion-title:         var(--text-primary);
  --text-accordion-title-open:    var(--text-primary);
  --text-accordion-description:   var(--utility-neutral-500);
  --text-accordion-body:          var(--text-secondary);
  --text-accordion-meta:          var(--utility-neutral-500);
  --text-accordion-chevron:       var(--utility-neutral-400);
  --text-accordion-chevron-hover: var(--utility-neutral-700);

  --border-accordion:             var(--utility-neutral-200);
  --border-accordion-divider:     var(--utility-neutral-100);
  --border-accordion-open:        var(--utility-neutral-300);
  --border-accordion-success:     var(--utility-green-500);
  --border-accordion-warning:     var(--utility-amber-500);
  --border-accordion-danger:      var(--utility-red-500);
  --border-accordion-info:        var(--utility-blue-500);

  /* Single 2px inset focus ring in the brand accent — resolves through
     --border-focus so it stays on-brand and theme-aware. */
  --ring-accordion-focus:         inset 0 0 0 2px var(--border-focus);
  --shadow-accordion-card:        0 1px 2px oklch(0% 0 0 / 0.04);
  --shadow-accordion-card-open:   0 2px 8px oklch(0% 0 0 / 0.08);

  --radius-accordion:             0.5rem;
  --radius-accordion-item:        0.375rem;

  /* =========================================
     Collapse (animated regions)
     ========================================= */
  --bg-collapse-trigger:          transparent;
  --bg-collapse-trigger-hover:    var(--utility-neutral-50);
  --bg-collapse-trigger-open:     var(--utility-neutral-50);
  --bg-collapse-section-header:   var(--utility-neutral-50);
  --bg-collapse-section:          oklch(100% 0 0);

  --text-collapse-trigger:        var(--text-primary);
  --text-collapse-trigger-muted:  var(--utility-neutral-500);
  --text-collapse-chevron:        var(--utility-neutral-400);
  --text-collapse-chevron-open:   var(--utility-neutral-700);
  --text-collapse-meta:           var(--utility-neutral-500);

  --border-collapse:              var(--utility-neutral-200);
  --border-collapse-divider:      var(--utility-neutral-100);
  --border-collapse-intent-success: var(--utility-green-500);
  --border-collapse-intent-warning: var(--utility-amber-500);
  --border-collapse-intent-danger:  var(--utility-red-500);
  --border-collapse-intent-info:    var(--utility-blue-500);

  /* Single 2px inset focus ring — same UUI brand accent as accordion + inputs. */
  --ring-collapse-focus:          inset 0 0 0 2px var(--border-focus);

  /* Popover */
  --bg-popover: var(--bg-surface);
  --bg-popover-modal: #fff;
  --text-popover: var(--text-primary);
  --border-popover: var(--border-primary);
  --shadow-popover: var(--shadow-lg);
  --radius-popover: var(--radius-lg);
  --bg-popover-arrow: var(--bg-surface);
  --border-popover-arrow: var(--border-primary);
  /* Popover — chrome / slots */
  --text-popover-title:        var(--utility-neutral-900);
  --text-popover-subtitle:     var(--utility-neutral-500);
  --text-popover-muted:        var(--utility-neutral-500);
  --border-popover-divider:    var(--utility-neutral-100);
  --bg-popover-header:         transparent;
  --bg-popover-footer:         transparent;
  --bg-popover-menu-hover:     var(--utility-neutral-50);
  --bg-popover-menu-active:    var(--utility-neutral-100);
  --bg-popover-kbd:            var(--utility-neutral-100);
  --text-popover-kbd:          var(--utility-neutral-700);
  --border-popover-kbd:        var(--utility-neutral-200);
  /* Popover — visual variants */
  --bg-popover-soft:           oklch(100% 0 0);
  --border-popover-soft:       transparent;
  --shadow-popover-soft:       0 4px 16px oklch(0% 0 0 / 0.10), 0 1px 3px oklch(0% 0 0 / 0.05);
  --bg-popover-glass:          oklch(100% 0 0 / 0.78);
  --border-popover-glass: oklch(100% 0 0 / 0.32); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --bg-popover-dark:           var(--utility-neutral-900);
  --text-popover-dark:         oklch(100% 0 0);
  --border-popover-dark:       var(--utility-neutral-800);
  --bg-popover-dark-arrow:     var(--utility-neutral-900);
  --bg-popover-card:           oklch(100% 0 0);
  --shadow-popover-card:       0 12px 28px oklch(0% 0 0 / 0.14), 0 2px 6px oklch(0% 0 0 / 0.06);
  /* Popover — intent strips */
  --border-popover-intent-success: var(--utility-green-500);
  --border-popover-intent-warning: var(--utility-amber-500);
  --border-popover-intent-danger:  var(--utility-red-500);
  --border-popover-intent-info:    var(--utility-blue-500);
  /* Popover — pin button + loading */
  --text-popover-pin:          var(--utility-neutral-400);
  --text-popover-pin-active:   var(--utility-blue-600);
  --bg-popover-pin-hover:      var(--utility-neutral-100);
  --bg-popover-skeleton:       var(--utility-neutral-100);
  /* Command Palette */
  /* #140 / #164 H2 — THE PALETTE SURFACE MUST BE DARKER THAN THE PAGE. This was
     var(--bg-surface) -> --bg-card -> white, i.e. EXACTLY the page (--bg-primary is
     alpha-white-100): 1.000:1, so in LIGHT the dialog had no surface of its own at all.
     Dark was fixed at 1a5e56c5c and light was missed — my probe asserted the gear (H1) and
     only PRINTED the surface (H2), so it passed a half-fixed state. Jared adjudicated it
     (637ed4286): H1 holds, H2 failed in light. Bryce's failure was real.
     n50 (#fafafa), chosen by measurement rather than taste:
        vs the page #ffffff              1.044:1  a real step below it
        vs the keycap --bg-kbd n100      1.045:1  the chips still read
     n100 was the obvious alternative and is WRONG: it is exactly --bg-kbd, so the palette
     would land on the keycap colour at 1.000:1 — precisely the collision the keycap comment
     in command-palette.css records being rescued from, where the chip inherited the palette
     token and darkening one darkened both.
     Structurally parallel to dark, which sits one rung below its page (n950 under n900). */
  --bg-command-palette: var(--utility-neutral-50);
  --bg-command-palette-backdrop: oklch(0% 0 0 / 0.4);
  --bg-command-palette-item-hover: var(--bg-primary-hover);
  --bg-command-palette-item-active: var(--bg-quaternary);
  --text-command-palette: var(--text-primary);
  --text-command-palette-muted: var(--text-tertiary);
  --border-command-palette: var(--border-primary);
  --shadow-command-palette: var(--shadow-xl);
  --radius-command-palette: var(--radius-xl);
  /* Messaging */
  --bg-msg-panel: var(--alpha-white-100);
  --bg-msg-composer-area: var(--alpha-white-100);
  --border-msg-panel: var(--border-secondary);
  --bg-msg-inbound: var(--utility-neutral-100);
  --text-msg-inbound: var(--text-primary);
  --border-msg-inbound: transparent;
  --bg-msg-outbound: var(--utility-indigo-50);
  --text-msg-outbound: var(--text-primary);
  --border-msg-outbound: transparent;
  --bg-msg-system: var(--utility-neutral-100);
  --text-msg-system: var(--text-tertiary);
  --text-msg-sender: var(--text-primary);
  --text-msg-time: var(--text-quaternary);
  /* tq-9030 (A141, isabella 900067681): the reaction chip is the app's shipped look (the app is the only consumer) */
  --bg-msg-reaction: var(--bg-primary-subtle);
  --border-msg-reaction: var(--border-primary);
  --text-msg-reaction: var(--text-secondary);
  --bg-msg-reaction-hover: var(--bg-secondary-subtle);
  /* tq-9030 (A141, isabella 900067717): the composer's send button, the app's shipped emerald step, explicit in BOTH themes */
  /* tq-9106 (A146, isabella 900067742): the app composer's field surface (.msg-composer__inner): white in light as it shipped,
     the input surface in dark (it was a #ffffff literal: near-white text on white in dark) */
  --bg-msg-composer-field: var(--alpha-white-100);
  /* tq-9138 (A157, isabella 900068581): the composer attachment's remove badge is ALWAYS visible on touch, over ANY preview
     (a white or a black image), so it needs a mid-luminance fill: red-600 (L ~ 0.17) is >= 4.4:1 against white AND black,
     with a white glyph (~4.8:1). The danger-solid fill it used was red-800 / red-200 (2.51:1 on a dark image in light, 1.45:1
     on a light image in dark). The same pair in both themes. */
  --bg-msg-attachment-remove: var(--utility-red-600);
  --text-msg-attachment-remove: var(--alpha-white-100);
  --bg-msg-composer-send: var(--utility-emerald-800);
  --bg-msg-composer-send-hover: var(--utility-emerald-900);
  --bg-msg-composer-send-active: var(--utility-emerald-900);
  --bg-msg-composer-send-disabled: var(--utility-emerald-800);
  --text-msg-composer-send: var(--color-white);
  /* tq-9030 (A141, isabella 900067741): the accent reply chip, the app's shipped bar + fill, explicit in BOTH themes */
  --border-msg-reply-accent: var(--utility-emerald-800);
  --bg-msg-reply-accent: var(--bg-card-hover-surface);
  --bg-msg-reaction-active: var(--bg-info-subtle);
  --border-msg-reaction-active: var(--border-info);
  --text-msg-reaction-active: var(--utility-blue-700); /* tq-8404: --text-info (blue-600) was 4.30:1 on --bg-info-subtle */
  --bg-msg-composer: var(--bg-input);
  --border-msg-composer: var(--border-input);
  --border-msg-composer-focus: var(--border-input-focus);
  --bg-msg-send: var(--bg-primary-solid);
  --text-msg-send: var(--alpha-white-100);
  --bg-msg-actions: var(--alpha-white-100);
  --border-msg-actions: var(--border-secondary);
  --bg-msg-conversation-hover: var(--bg-primary-hover);
  --bg-msg-conversation-active: var(--bg-quaternary);
  --bg-msg-conversation-unread: var(--bg-info-subtle);
  --bg-msg-badge: var(--bg-primary-solid);
  --text-msg-badge: var(--alpha-white-100);
  /* Bulk Action Bar */
  --bg-bulk-action-bar: var(--alpha-white-100);
  --text-bulk-action-bar: var(--text-primary);
  --border-bulk-action-bar: var(--border-primary);
  --shadow-bulk-action-bar: 0 -4px 24px -4px oklch(0% 0 0 / 0.12), 0 -2px 8px -2px oklch(0% 0 0 / 0.06);
  /* Kbd */
  --bg-kbd: var(--utility-neutral-100);
  --text-kbd: var(--text-secondary);
  --border-kbd: var(--utility-neutral-300);
  --shadow-kbd: 0 1px 0 0 var(--utility-neutral-200);
  /* Inline Edit (click-to-edit fields) */
  --bg-inline-edit:                transparent;
  --bg-inline-edit-hover:          var(--utility-neutral-50);
  --bg-inline-edit-editing: var(--bg-input);
  --bg-inline-edit-saving:         var(--utility-neutral-50);
  --bg-inline-edit-success-flash:  var(--utility-green-50);
  --bg-inline-edit-error:          var(--utility-red-50);
  --bg-inline-edit-readonly:       var(--utility-neutral-50);
  --bg-inline-edit-trigger-hover:  var(--utility-neutral-100);

  --text-inline-edit:              var(--text-primary);
  --text-inline-edit-muted:        var(--text-tertiary);
  --text-inline-edit-trigger:      var(--utility-neutral-400);
  --text-inline-edit-trigger-hover:var(--utility-neutral-700);
  --text-inline-edit-placeholder:  var(--utility-neutral-400);
  --text-inline-edit-success:      var(--utility-green-700);
  --text-inline-edit-error:        var(--utility-red-700);
  --text-inline-edit-readonly:     var(--utility-neutral-500);
  --text-inline-link-edit:         var(--text-link);
  --text-inline-link-edit-hover:   var(--text-link-hover);

  --border-inline-edit:            transparent;
  --border-inline-edit-hover:      var(--utility-neutral-200);
  --border-inline-edit-editing: var(--border-input-focus);
  --border-inline-edit-success:    var(--utility-green-500);
  --border-inline-edit-error:      var(--utility-red-500);
  --border-inline-edit-readonly:   var(--utility-neutral-200);

  --ring-inline-edit-focus:        oklch(60% 0.13 250 / 0.18);
  --ring-inline-edit-error:        oklch(60% 0.18 30  / 0.18);
  --ring-inline-edit-success:      oklch(60% 0.13 145 / 0.18);

  --shadow-inline-edit-focus:      0 0 0 3px var(--ring-inline-edit-focus);
  --shadow-inline-edit-error:      0 0 0 3px var(--ring-inline-edit-error);
  --shadow-inline-edit-success:    0 0 0 3px var(--ring-inline-edit-success);
  --shadow-inline-edit-popover:    0 8px 28px oklch(0% 0 0 / 0.12), 0 2px 6px oklch(0% 0 0 / 0.06);
  /* Range Slider */
  --bg-range-track: var(--utility-neutral-200);
  --bg-range-fill: var(--bg-primary-solid);
  --bg-range-thumb: var(--alpha-white-100);
  --border-range-thumb: var(--bg-primary-solid);
  --shadow-range-thumb: var(--shadow-sm);
  /* Activity Feed */
  --bg-activity-feed-item: var(--bg-surface);
  --bg-activity-feed-item-hover: var(--bg-primary-hover);
  --bg-activity-feed-item-unread: var(--bg-info-subtle);
  --text-activity-feed-action: var(--text-secondary);
  --text-activity-feed-target: var(--text-link);
  --text-activity-feed-meta: var(--text-tertiary);
  --border-activity-feed-item: var(--border-secondary);
  /* Activity Feed — UUI-faithful connected model (application/activity-feed) */
  --border-activity-feed-connector: var(--border-primary);
  --border-activity-feed-message: var(--border-secondary);
  --bg-activity-feed-message: transparent;
  --text-activity-feed-unseen: var(--text-success);
  --text-activity-feed-user: var(--text-secondary);
  --text-activity-feed-comment: var(--text-tertiary);
  /* Table Resize */
  --bg-table-resize-handle: transparent;
  --bg-table-resize-handle-hover: var(--utility-blue-400);
  --bg-table-resize-handle-active: var(--utility-blue-500);
  /* Table Detail Row */
  --bg-table-row-detail: var(--utility-neutral-50);


  /* R2 tq-8176 (c): tokens the served app defines and its CSS consumes, absent here until now. Values = src/reinly.webapp @ 09387252. */
  --scroll-size-xs: 4px;
  --ring-input-focus: var(--alpha-emerald-800-20);
  --bg-card-hover-surface: var(--alpha-emerald-900-10);

  /* tq-9626 (A313; isabella 900077729): the MOTION tokens (--duration-* / --ease-*) left this block. Declared on the themed
     <body>, a literal here beat :root's var(--motion-fast) by INHERITANCE, so --duration-fast ignored prefers-reduced-motion
     app-wide. base/motion.css is their one source (the app imports it too now).
     tq-8176 follow-up (erlich 900048090, R4): the app consumes these. The DS defined the scroll tokens only in the
     @theme block in base/theme.css, which R4 cannot import, so they are stated here too, with the same values.
     tq-9606 (A312; isabella 900077424): the five flatpickr *_hover aliases are gone: plugins/flatpickr.css reads the
     -hover tokens every theme defines (the aliases were light-only, so dark fell through). */
  --scroll-size: 8px;
  --scroll-size-sm: 6px;
}

/* =========================================
   High Contrast
   ========================================= */
[data-contrast="high"] {
  --text-primary: oklch(0% 0 0);
  --text-secondary: oklch(15% 0 0);
  --text-tertiary: oklch(25% 0 0);
  --text-quaternary: oklch(35% 0 0);
  --border-primary: oklch(30% 0 0);
  --border-input: oklch(20% 0 0);
  --border-input-hover: oklch(10% 0 0);
  --border-card: oklch(30% 0 0);
  --border-table: oklch(30% 0 0);
}

/* =========================================
   Accent Color System
   Preset via [data-accent] attribute
   ========================================= */
[data-accent="purple"] {
  --bg-primary-solid: var(--utility-purple-600);
  --bg-primary-solid-hover: var(--utility-purple-700);
  --bg-primary-solid-active: var(--utility-purple-800);
  --border-primary-solid: var(--utility-purple-600);
  --text-link: var(--utility-purple-600);
  --text-link-hover: var(--utility-purple-700);
}

[data-accent="teal"] {
  --bg-primary-solid: var(--utility-teal-600);
  --bg-primary-solid-hover: var(--utility-teal-700);
  --bg-primary-solid-active: var(--utility-teal-800);
  --border-primary-solid: var(--utility-teal-600);
  --text-link: var(--utility-teal-600);
  --text-link-hover: var(--utility-teal-700);
}

[data-accent="green"] {
  --bg-primary-solid: var(--utility-green-600);
  --bg-primary-solid-hover: var(--utility-green-700);
  --bg-primary-solid-active: var(--utility-green-800);
  --border-primary-solid: var(--utility-green-600);
  --text-link: var(--utility-green-600);
  --text-link-hover: var(--utility-green-700);
}

[data-accent="orange"] {
  --bg-primary-solid: var(--utility-orange-600);
  --bg-primary-solid-hover: var(--utility-orange-700);
  --bg-primary-solid-active: var(--utility-orange-800);
  --border-primary-solid: var(--utility-orange-600);
  --text-link: var(--utility-orange-600);
  --text-link-hover: var(--utility-orange-700);
}

[data-accent="pink"] {
  --bg-primary-solid: var(--utility-pink-600);
  --bg-primary-solid-hover: var(--utility-pink-700);
  --bg-primary-solid-active: var(--utility-pink-800);
  --border-primary-solid: var(--utility-pink-600);
  --text-link: var(--utility-pink-600);
  --text-link-hover: var(--utility-pink-700);
}

/* ============================================================================
   AI · Agentic · Generative UI — semantic tokens (LIGHT)
   Property-first names. Calm violet → blue → cyan signature; gradients/glows
   are reserved for genuine AI activity (thinking, streaming, generating).
   Consumed by components/ai/*.css. Mirror lives in theme-dark.css.
   ============================================================================ */
[data-theme="theme-light"],
[data-theme="theme-mica-light"] {
  /* —— AI accent = VIOLET (Pavel #352, reverses #214) ————————————————————————
     The AI/agent identity is PURPLE now — Anthropic-ish violet — and decoupled from
     the (blue) brand primitive so the accent, its sparkle/badge icons, and the whole
     --gradient-ai-* signature read as ONE coherent violet family, distinct from the
     brand. Pre-#214 left this accent on brand-600 while the signature was violet, an
     incoherent blue-accent-on-violet-glow; #352 makes the accent violet too.
     Contrast (AA, verified on the card surface): text-ai-accent violet-600 5.88:1;
     white on the violet-600 fill 5.88:1. Dark mirror uses violet-400/700. */
  --text-ai-accent: var(--utility-violet-600);
  --text-ai-accent-strong: var(--utility-violet-700);
  --text-ai-on-accent: var(--alpha-white-100);
  --bg-ai-accent-hover: var(--utility-violet-700);

  /* —— Surfaces (NEUTRAL — hue lives on borders + shadows, never the fill) — */
  --bg-ai-surface: var(--bg-card);
  --bg-ai-surface-subtle: color-mix(in oklch, var(--text-primary) 4%, var(--bg-card));
  --bg-ai-surface-active: color-mix(in oklch, var(--text-primary) 8%, var(--bg-card));
  --bg-ai-input: var(--bg-input);
  --bg-ai-panel: var(--bg-card);
  --bg-ai-dock: var(--bg-card);
  --bg-ai-canvas: color-mix(in oklch, var(--text-primary) 3%, var(--bg-surface));
  --bg-ai-generated: color-mix(in oklch, var(--text-primary) 3%, var(--bg-card));
  --bg-ai-message: color-mix(in oklch, var(--text-primary) 4%, var(--bg-card));
  --bg-ai-message-user: color-mix(in oklch, var(--text-primary) 8%, var(--bg-card));
  --bg-ai-tool: color-mix(in oklch, var(--text-primary) 3%, var(--bg-card));
  --bg-ai-tool-result: color-mix(in oklch, var(--text-primary) 4%, var(--bg-card));
  --bg-ai-context: color-mix(in oklch, var(--text-primary) 3%, var(--bg-card));
  --bg-ai-memory: color-mix(in oklch, var(--text-primary) 3%, var(--bg-card));
  --bg-ai-chip: color-mix(in oklch, var(--text-primary) 5%, var(--bg-card));
  --bg-ai-chip-hover: color-mix(in oklch, var(--text-primary) 9%, var(--bg-card));
  --bg-ai-badge: color-mix(in oklch, var(--text-primary) 6%, transparent);

  /* —— State surfaces (NEUTRAL — status reads from border + shadow + icon) — */
  --bg-ai-thinking: color-mix(in oklch, var(--text-primary) 4%, var(--bg-card));
  --bg-ai-streaming: color-mix(in oklch, var(--text-primary) 4%, var(--bg-card));
  --bg-ai-approval: color-mix(in oklch, var(--text-primary) 4%, var(--bg-card));
  --bg-ai-success-subtle: color-mix(in oklch, var(--text-primary) 4%, var(--bg-card));
  --bg-ai-warning-subtle: color-mix(in oklch, var(--text-primary) 5%, var(--bg-card));
  --bg-ai-error-subtle: color-mix(in oklch, var(--text-primary) 4%, var(--bg-card));

  /* —— Console / CLI (dark surface in both themes) ————————————————
     Light mode: a graphite GREY terminal (not near-black) — Pavel #218. */
  --bg-ai-console: var(--utility-neutral-800);
  --bg-ai-console-header: var(--utility-neutral-750);

  /* —— Skeleton / loading (NEUTRAL) ——————————————————————————————— */
  --bg-ai-skeleton: color-mix(in oklch, var(--text-primary) 7%, var(--bg-surface));
  --bg-ai-skeleton-shine: color-mix(in oklch, var(--text-primary) 12%, transparent);

  /* —— Text ———————————————————————————————————————————————————————— */
  --text-ai-primary: var(--text-primary);
  --text-ai-secondary: var(--text-secondary);
  --text-ai-muted: var(--text-tertiary);
  --text-ai-placeholder: var(--text-input-placeholder);
  --text-ai-streaming: var(--utility-blue-600);
  --text-ai-success: var(--text-success);
  --text-ai-warning: var(--text-warning);
  --text-ai-error: var(--text-danger);
  --text-ai-console: var(--utility-neutral-100);
  --text-ai-console-muted: var(--utility-neutral-400);
  --text-ai-console-prompt: var(--utility-teal-400);
  --text-ai-citation: var(--utility-blue-600);
  --text-ai-confidence-high: var(--utility-green-600);
  --text-ai-confidence-med: var(--utility-yellow-600);
  --text-ai-confidence-low: var(--utility-neutral-500);

  /* —— Borders ————————————————————————————————————————————————————— */
  --border-ai-surface: var(--border-default);
  --border-ai-subtle: var(--border-divider);
  --border-ai-input: var(--border-input);
  --border-ai-input-hover: var(--border-input-hover);
  --border-ai-panel: color-mix(in oklch, var(--utility-violet-500) 20%, var(--border-default));
  --border-ai-thinking: color-mix(in oklch, var(--utility-violet-500) 45%, transparent);
  --border-ai-streaming: color-mix(in oklch, var(--utility-blue-500) 40%, transparent);
  --border-ai-approval: color-mix(in oklch, var(--utility-yellow-500) 48%, transparent);
  --border-ai-tool: color-mix(in oklch, var(--utility-indigo-500) 32%, transparent);
  --border-ai-context: color-mix(in oklch, var(--utility-blue-500) 26%, transparent);
  --border-ai-generated: color-mix(in oklch, var(--utility-indigo-500) 36%, transparent);
  --border-ai-success: color-mix(in oklch, var(--utility-green-500) 40%, transparent);
  --border-ai-warning: color-mix(in oklch, var(--utility-yellow-500) 48%, transparent);
  --border-ai-error: color-mix(in oklch, var(--utility-red-500) 42%, transparent);
  --border-ai-console: color-mix(in oklch, var(--utility-neutral-100) 14%, transparent);
  --border-ai-focus: var(--border-focus);

  /* —— Gradients ——————————————————————————————————————————————————— */
  --gradient-ai-accent: linear-gradient(120deg, var(--utility-violet-500), var(--utility-blue-500));
  --gradient-ai-active: linear-gradient(120deg, var(--utility-violet-500), var(--utility-blue-500) 55%, var(--utility-cyan-400));
  --gradient-ai-thinking: linear-gradient(120deg, var(--utility-violet-500), var(--utility-indigo-500) 38%, var(--utility-blue-500) 68%, var(--utility-violet-500));
  --gradient-ai-streaming: linear-gradient(120deg, var(--utility-blue-500), var(--utility-cyan-400) 50%, var(--utility-blue-500));
  --gradient-ai-border: linear-gradient(130deg, color-mix(in oklch, var(--utility-violet-500) 70%, transparent), color-mix(in oklch, var(--utility-blue-500) 60%, transparent));
  --gradient-ai-glow: radial-gradient(120% 120% at 50% 0%, color-mix(in oklch, var(--utility-violet-500) 18%, transparent), transparent 70%);
  --gradient-ai-generated: linear-gradient(130deg, color-mix(in oklch, var(--utility-indigo-500) 55%, transparent), color-mix(in oklch, var(--utility-teal-500) 45%, transparent));
  --gradient-ai-success: linear-gradient(120deg, var(--utility-green-500), var(--utility-teal-500));
  --gradient-ai-error: linear-gradient(120deg, var(--utility-red-500), var(--utility-orange-500));
  --gradient-ai-aurora: conic-gradient(from 0deg, var(--utility-violet-500), var(--utility-blue-500), var(--utility-cyan-400), var(--utility-teal-400), var(--utility-fuchsia-500), var(--utility-indigo-500), var(--utility-violet-500));
  --gradient-ai-orb: radial-gradient(circle at 35% 28%, var(--utility-cyan-400), var(--utility-blue-500) 42%, var(--utility-violet-600) 82%);
  /* Signature — the iridescent full-spectrum "this surface is AI" outline (purple→blue→pink→amber).
     THE AI-component marker: a soft rainbow ring for AI inputs + suggest affordances. See .ai-ambient--signature. */
  --gradient-ai-signature: linear-gradient(115deg, var(--utility-purple-500), var(--utility-blue-500) 34%, var(--utility-fuchsia-500) 66%, var(--utility-amber-400));
  --gradient-ai-signature-glow: linear-gradient(115deg, color-mix(in oklch, var(--utility-purple-500) 22%, transparent), color-mix(in oklch, var(--utility-blue-500) 18%, transparent) 34%, color-mix(in oklch, var(--utility-fuchsia-500) 20%, transparent) 66%, color-mix(in oklch, var(--utility-amber-400) 20%, transparent));
  --bg-ai-orb-sheen: color-mix(in oklch, var(--utility-neutral-50) 60%, transparent);
  --gradient-ai-skeleton: linear-gradient(90deg, transparent, var(--bg-ai-skeleton-shine), transparent);

  /* —— Glow colors + shadows ——————————————————————————————————————— */
  --glow-ai-thinking: color-mix(in oklch, var(--utility-violet-500) 38%, transparent);
  --glow-ai-active: color-mix(in oklch, var(--utility-blue-500) 34%, transparent);
  --shadow-ai-panel: 0 10px 30px -16px color-mix(in oklch, var(--utility-violet-700) 40%, transparent);
  --shadow-ai-dock: -8px 0 40px -22px color-mix(in oklch, var(--utility-violet-700) 35%, transparent);
  --shadow-ai-thinking: 0 0 0 1px color-mix(in oklch, var(--utility-violet-500) 18%, transparent), 0 0 26px -4px var(--glow-ai-thinking);
  --shadow-ai-active: 0 0 0 1px color-mix(in oklch, var(--utility-blue-500) 18%, transparent), 0 0 24px -6px var(--glow-ai-active);
  --shadow-ai-generated: 0 8px 30px -18px color-mix(in oklch, var(--utility-indigo-600) 45%, transparent);
  --shadow-ai-approval: 0 8px 26px -16px color-mix(in oklch, var(--utility-yellow-700) 40%, transparent);
  --shadow-ai-console: 0 16px 50px -24px var(--alpha-black-60);

  /* —— Rings (3c DERIVE: the keyboard focus ring is a SINGLE 2px inset ring in
     UUI's brand accent — no offset halo / double-ring, FAN-OUT §3. active + prompt
     rings resolve through the same --border-focus for one source of truth) ————— */
  --ring-ai-focus: inset 0 0 0 2px var(--border-focus);
  --ring-ai-active: 0 0 0 1px color-mix(in oklch, var(--border-focus) 50%, transparent);
  --ring-ai-prompt: 0 0 0 3px color-mix(in oklch, var(--border-focus) 15%, transparent);

  /* —— Diff (proposed changes) ———————————————————————————————————— */
  --bg-ai-diff-add: color-mix(in oklch, var(--text-primary) 4%, var(--bg-card));
  --bg-ai-diff-del: color-mix(in oklch, var(--text-primary) 6%, var(--bg-card));
  --bg-ai-diff-add-word: color-mix(in oklch, var(--utility-green-500) 30%, transparent);
  --bg-ai-diff-del-word: color-mix(in oklch, var(--utility-red-500) 28%, transparent);
  --bg-ai-diff-hunk: color-mix(in oklch, var(--text-primary) 5%, var(--bg-card));
  --bg-ai-diff-gutter: color-mix(in oklch, var(--text-primary) 4%, var(--bg-card));
  --text-ai-diff-add: var(--utility-green-700);
  --text-ai-diff-del: var(--utility-red-700);
  --text-ai-diff-gutter: var(--text-ai-muted);
  --text-ai-diff-hunk: var(--text-ai-citation);
  --border-ai-diff-add: var(--border-ai-success);
  --border-ai-diff-del: var(--border-ai-error);

  /* —— Console extras (surface is dark in both themes) ———————————— */
  --text-ai-console-warn: var(--utility-amber-400);
  --text-ai-console-info: var(--utility-blue-300);
  --text-ai-console-debug: var(--utility-violet-300);
  --text-ai-console-sys: var(--utility-neutral-500);
  --text-ai-console-cmt: var(--utility-green-400);
  --text-ai-console-tool: var(--utility-cyan-300);
  --bg-ai-console-gutter: color-mix(in oklch, var(--utility-neutral-100) 6%, transparent);
  --text-ai-console-gutter: var(--utility-neutral-500);
  --bg-ai-console-footer: var(--utility-neutral-750);
  --bg-ai-console-selection: color-mix(in oklch, var(--utility-violet-400) 35%, transparent);
  --bg-ai-console-active: color-mix(in oklch, var(--utility-neutral-100) 4%, transparent);
  --bg-ai-console-light: var(--utility-neutral-50);
  --text-ai-console-light: var(--utility-neutral-800);
  --border-ai-console-light: var(--border-default);

  /* —— Progress / inline / confidence ring / model pill —————————— */
  --bg-ai-progress-track: color-mix(in oklch, var(--text-primary) 8%, transparent);
  --gradient-ai-progress: var(--gradient-ai-active);
  --bg-ai-confidence-track: color-mix(in oklch, var(--text-ai-muted) 22%, transparent);
  --text-ai-ghost: color-mix(in oklch, var(--text-ai-accent) 55%, var(--text-ai-muted));
  --bg-ai-inline: color-mix(in oklch, var(--text-primary) 5%, transparent);
  --border-ai-inline: color-mix(in oklch, var(--utility-violet-500) 30%, transparent);
}

/* ============================================================================
   A2UI Labs · Agent-to-User Interface — semantic tokens (LIGHT)
   Workspace chrome for the AGUI laboratory. Extends the --*-ai-* layer:
   surfaces stay NEUTRAL (hue lives only on borders, shadows, rings, text,
   icons). Consumed by components/ai/a2ui.css. Mirror lives in theme-dark.css.
   ============================================================================ */
[data-theme="theme-light"],
[data-theme="theme-mica-light"] {
  /* —— Surfaces (NEUTRAL — hue never on the fill) ——————————————————— */
  --bg-a2ui: color-mix(in oklch, var(--text-primary) 3%, var(--bg-surface));
  --bg-a2ui-panel: var(--bg-card);
  --bg-a2ui-surface: color-mix(in oklch, var(--text-primary) 4%, var(--bg-card));
  --bg-a2ui-hover: color-mix(in oklch, var(--text-primary) 7%, var(--bg-card));
  --bg-a2ui-active: color-mix(in oklch, var(--text-primary) 10%, var(--bg-card));

  /* —— Borders ————————————————————————————————————————————————————— */
  --border-a2ui: var(--border-default);
  --border-a2ui-subtle: var(--border-divider);

  /* —— Text ———————————————————————————————————————————————————————— */
  --text-a2ui: var(--text-primary);
  --text-a2ui-muted: var(--text-tertiary);

  /* —— Shadows + rings (the AI hue is allowed here) ————————————————— */
  --shadow-a2ui: 0 10px 30px -18px color-mix(in oklch, var(--utility-violet-500) 35%, transparent);
  --shadow-a2ui-hover: 0 14px 38px -16px color-mix(in oklch, var(--utility-violet-500) 45%, transparent);
  --ring-a2ui: 0 0 0 3px color-mix(in oklch, var(--utility-violet-500) 18%, transparent);
}

/* ============================================================================
   UI Labs · Prototyping workspace — semantic tokens (LIGHT)
   Figma-style canvas chrome: rail, toolbar, dotted viewport, frames, inspector.
   Standard HawkDesign treatment: NEUTRAL surfaces and menu-active states (same as
   the app sidebar/menu); the interactive accent is --text-info — selection
   rings and active icons only. Consumed by components/labs/ui-labs.css.
   Mirror lives in theme-dark.css.
   ============================================================================ */
[data-theme="theme-light"],
[data-theme="theme-mica-light"] {
  /* —— Surfaces (NEUTRAL — standard menu/sidebar treatment) ————————— */
  --bg-labs: color-mix(in oklch, var(--text-primary) 3%, var(--bg-primary));

  /* —— Borders ————————————————————————————————————————————————————— */
  --border-labs: var(--border-primary-subtle);

  /* —— Text ———————————————————————————————————————————————————————— */
  --text-labs: var(--text-primary);
}

/* ============================================================================
   reinly brand overrides (LIGHT) — layered on the HawkDesign base above.
   Everything ABOVE this marker is synced verbatim from Reinly.Webapp (source of
   truth); to re-sync, replace everything above and keep this block.
   Brand: reinly's green ramp (--color-brand-*, stated in theme.css) + drawer + Mica.
   On-brand ink and the text/border roles on white are set in the brand-identity
   block below (the seed's gold-era dark-ink model no longer applies).
   ============================================================================ */
[data-theme="theme-light"],
[data-theme="theme-mica-light"] {
  /* Default border rebased to UUI v8 — Pavel #231. One notch stronger: neutral-200 →
     neutral-300, which is exactly upstream v8's border-primary
     (config/styles/theme.css:317 --color-border-primary: --color-neutral-300).
     Ours sat one step weak, the same off-by-one the --bg-* ramp had, and it read faint
     once bg-primary went white in Wave 0.1. Against white: neutral-200 is Δ7.8% L,
     neutral-300 is Δ13.0% L — visibly clearer, still a hairline not a rule.
     KNOWN CONSEQUENCE: --border-primary-alt and --border-primary-hover were already
     neutral-300, so they now EQUAL this token — the border stops darkening on hover for
     the 11 rules using -hover (event-card/-popover, node-editor, …).
     Left alone deliberately: those rules also swap background + text on hover, so the
     hover still reads; and the palette has no step between 300 and 400 (300→400 is
     Δ16.2% L vs the old hover's Δ5.2%), so promoting -hover to 400 would read as
     "selected", not "hover". Fixing it properly needs a new palette step or a design
     call on the hover delta — Pavel's, not this note's.
     Semantic + palette-referenced (no literal oklch). NOTE: high contrast does NOT
     override this for free — the base's light [data-contrast="high"] is (0,1,0), the
     same specificity as this block, so it needs the compound re-statement added below
     ("Light high contrast") to win. Dark already used the compound form.
     --border-secondary stays neutral-200 = v8's border-secondary; the two are MEANT to
     differ (v8: primary 300 / secondary 200). This copy is below the sync marker and is
     THE AUTHORITY — Reinly.Webapp still ships neutral-200 above and would revert it. */
  --border-primary: var(--utility-neutral-200);

  /* WHITELIST #1b — SIGNATURE STEP = 500 (Pavel 2026-07-24). The brand fill roles moved
     600 → 500 and now render the IDENTICAL blue in light and dark: #226EFF. Ramp untouched;
     this is the whole change on the light side.
     HOVER/ACTIVE still darken via color-mix rather than stepping to brand-600/700 so the
     primary button keeps its own smooth ladder independent of the ramp's step spacing. */
  --bg-primary-solid: var(--utility-neutral-950);
  /* Theme-selector PRIMARY chips — re-stated below the sync marker so a wholesale base
     re-sync cannot drag them back to the seed's indigo (which is exactly how the
     dark tile survived the blue rotation). All four tiles show the one reinly blue.
     ON RE-SYNC: grep the new base for
       --(theme-light|theme-dark|theme-mica-light)-primary-swatch: var\(--utility-
     — it must come back empty. */
  --theme-light-primary-swatch: var(--utility-indigo-500); /* tq-8176: the served app's value (reinly.webapp @ 09387252) */
  --theme-dark-primary-swatch: var(--utility-indigo-300);
  --theme-mica-light-primary-swatch: var(--utility-indigo-500); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --bg-button-primary: var(--utility-neutral-900);
  --bg-button-primary-hover: var(--utility-neutral-700);
  --bg-button-primary-active: var(--utility-neutral-900);
  --bg-brand-solid-hover: var(--bg-button-primary-hover); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --bg-brand-solid-active: var(--bg-button-primary-active); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */

  /* WHITELIST #1 / #1b (a11y): reinly is a DARK BLUE brand → WHITE ink on the brand fills.
     This is the deliberate inverse of the gold-era model in theme.css ("fills 500..600 carry
     DARK ink"), which was written for a LIGHT brand and does not survive the rotation.
     All figures below measured in Chrome against the compiled site.css, not modelled:
       ink on brand-500 (renders #226EFF)   WCAG      APCA Lc
         white                              4.43:1     75.4   ← shipped
         neutral-950                        4.47:1     34.0
         pure black                         4.74:1     34.2
     The dark-ink model does not rescue AA: neutral-950 is short too, and the ONLY pairing
     that clears 4.5:1 is pure black — also the least legible of the four. WCAG 2.x is
     luminance-only and over-credits dark ink on saturated mid-blue; Lc 34 is below the bar
     for text at any size. White is the legible pairing and lands 0.07 UNDER the AA figure.
     KNOWN, ACCEPTED TRADEOFF on the RESTING state only; every other state clears AA:
       hover  mix(500, black 10%)  5.62:1   active mix(500, black 20%)  7.21:1
       select-option selected-hover (600) 6.15:1
     If the resting 4.43:1 is not acceptable, the fix is Pavel's call on the STEP (600 =
     6.15:1), not on the ink — there is no lighter ink than white, and no dark ink that is
     both AA-clean and legible. Covers every bg-brand-solid consumer. */
  --text-on-brand: var(--color-white);
  --text-button-primary: var(--color-white);

  /* Yellow-on-white TEXT/BORDER roles drop to a dark gold step (brand-700 = 5.4:1
     on white) so they clear WCAG AA — brand-600 as text/hairline is only ~2:1. */
  --text-primary-solid: var(--utility-neutral-950); /* tq-8176: the served app's value (reinly.webapp @ 09387252) */
  /* Focus stays on utility-blue-500 and is NOT re-pointed at the brand by WHITELIST #1b.
     Verified against the new signature fill: blue-500 (#3280FF) vs the light body 3.55:1 —
     clears 1.4.11's 3:1 for a non-text indicator. --ring-focus lays a 2px body-coloured gap
     BEFORE the ring, so the ring is always measured against the page, never against the
     button it surrounds (blue-500 directly adjacent to brand-500 would be only 1.18:1).
     NOTE for review: now that the brand is blue too, blue-500 and brand-500 are near-twins,
     so the ring already reads on-brand — unifying the two tokens is a separate one-line call. */
  --border-focus: var(--border-brand);             /* was --utility-blue-500 — see 2945. Brand focus, --color-brand-700 (dark gold, AA on white). */
  --border-brand: var(--utility-emerald-800); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --border-tab-accent: var(--utility-emerald-800); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */

  /* ── Surface ramp rebased to UUI v8 (Pavel — #28/#29) ──────────────────────
     v8's primary surface is WHITE; ours sat 2 steps darker across the whole ramp,
     which IS the "why is light mode grey" being rejected.
       v8 light:  primary=white · secondary=gray-50 · tertiary=gray-100 ·
                  quaternary=gray-200  (+ _alt / _hover below)
     The base block up top now states this SAME ramp (no stale grey def survives
     anywhere). This copy is kept deliberately, and is not redundant: the base is
     replaced wholesale on the next Reinly.Webapp re-sync — upstream still ships
     bg-primary: neutral-100 as of 2026-07-16 — and this block is what keeps the
     grey from silently coming back. It stays THE AUTHORITY. If the two ever
     disagree, this one is what renders.
     Dark mode untouched (Pavel). White = --alpha-white-100 (this file's idiom,
     113 uses); there is no --utility-white token in the palette. */
  --bg-primary: var(--utility-neutral-100);
  --bg-primary-alt: var(--utility-neutral-200); /* tq-8176: the served app's value (reinly.webapp @ 09387252) */
  --bg-primary-hover: var(--utility-neutral-200);
  --bg-secondary: var(--utility-neutral-200); /* tq-8176: the served app's value (reinly.webapp @ 09387252) */
  --bg-secondary-alt: var(--utility-neutral-300); /* tq-8176: the served app's value (reinly.webapp @ 09387252) */
  --bg-secondary-hover: var(--utility-neutral-300); /* tq-8176: the served app's value (reinly.webapp @ 09387252) */
  --bg-tertiary: var(--utility-neutral-300); /* tq-8176: the served app's value (reinly.webapp @ 09387252) */
  --bg-tertiary-alt: var(--utility-neutral-400);
  --bg-tertiary-hover: var(--utility-neutral-400);
  --bg-quaternary: var(--utility-neutral-400); /* tq-8176: the served app's value (reinly.webapp @ 09387252) */
  --bg-quaternary-alt: var(--utility-neutral-500);
  --bg-quaternary-hover: var(--utility-neutral-500);

  /* The -subtle steps are deliberately NOT shifted. In the base each was "one step
     lighter than its base step", but the ramp now bottoms out at white — there is no
     lighter step left. Every consumer wants a faint but VISIBLE tint ON the white
     surface: --bg-card-hover / --bg-table-row-hover / --bg-table-row-zebra /
     --bg-table-footer (primary-subtle, 110 rules), avatar + message-bubble fills
     (secondary-subtle), notification tiles (tertiary-subtle). Shifting them lighter
     paints white-on-white and silently deletes row hover, zebra striping and avatar
     chips. They keep their values; their role changes from "lighter than the base
     step" to "faint tint on the primary surface". primary-subtle = neutral-50 also
     lands exactly on v8's own bg-primary_hover, which is what card/row hover should be.
     Kept BELOW --bg-primary-hover (neutral-100) so --bg-card-pressed stays darker than
     --bg-card-hover — a flat 2-step shift collapses the two and kills press feedback.
     NAMING FOLLOW-UP: -subtle now reads darker than its base. Worth a rename; not
     worth repainting 110+ rules inside this pass.
     --bg-*-solid are inverted dark fills, not surfaces — untouched. */

  /* Input active/focus border — base Light ships utility-blue-500 and nothing overrode it,
     so an input's active border read blue against the black focus ring. Point it at the DS
     focus token so the two agree. (Same fix mirrored in theme-dark.css.) */
  --border-input-active: var(--text-primary);   /* tq-8912 follow-up (isabella 900064871 / 900064880): a field's FOCUS is the strong ink, never the success green; focus vs rest and vs the valid border >= 3:1 (light 14.23 / 10.08, dark 9.51 / 4.54) */
}

/* Light high contrast — RE-STATED so it still beats the #231 default-border rebase.
   The base's light high-contrast rule (above the sync marker) is a bare
   [data-contrast="high"] — specificity (0,1,0), the SAME as [data-theme="theme-light"].
   Once the brand override block above set --border-primary, it won on source
   order alone and silently flattened the a11y border from oklch(30%) to neutral-300.
   Dark never had this bug: its high-contrast block already uses the compound form.
   Light now matches it — (0,2,0) beats both theme blocks regardless of order.
   Values are verbatim from the base block; this restores behaviour, it does not change it. */
[data-theme="theme-light"][data-contrast="high"],
[data-theme="theme-mica-light"][data-contrast="high"] {
  --border-primary: oklch(30% 0 0);
}

/* Mica Light — translucent surfaces */
[data-theme="theme-mica-light"] {
  --canvas-primary: oklch(97% 0.005 250 / 0.85);
  --canvas-secondary: oklch(100% 0 0 / 0.8);
  --bg-surface: oklch(100% 0 0 / 0.78);
  --bg-body: oklch(98% 0.003 250 / 0.75);
  --bg-card: oklch(100% 0 0 / 0.72);
  /* No --bg-app-canvas pin here: the shell frame these glass surfaces composite
     against is --bg-primary, which the brand override block above states as
     opaque white for BOTH theme-light and theme-mica-light, below the sync marker. */
  --bg-sidebar: oklch(97% 0.005 250 / 0.82); /* tq-8176: the served app's value (reinly.webapp @ 09387252) */
  --bg-dropdown: oklch(100% 0 0 / 0.88);
  --bg-modal: oklch(100% 0 0 / 0.92);
  --bg-popover: oklch(100% 0 0 / 0.88);
  --bg-command-palette: oklch(100% 0 0 / 0.92);
  --bg-mica-tint: oklch(97% 0.005 250);
}
/* ============================================================================
   WHITELIST #1c — seed-product / monochrome RESIDUE CLEARED (Russ, 2026-07-24)
   ============================================================================
   Three defects, one class. Each of these elements was painted a DIFFERENT HUE
   in light than in dark, and neither hue was the reinly brand:

     stepper current/completed/connector   light neutral-900 (3b monochrome-black
                                           brand action)  ·  dark yellow-500/600
                                           (the seed's GOLD)
     progress bar fill                     light utility-blue-500 (not even the
                                           brand ramp)    ·  dark yellow-400
     sidebar / mobile-nav active accent         GOLD in BOTH themes
     calendar booking-selected             light neutral-900  ·  dark blue-500
     schedule day-active                   light neutral-900  ·  dark blue-500
     checkbox checked BORDER               light neutral-900  ·  dark blue-500
                                           (while its own FILL is already brand!)

   Every one is now the brand, and IDENTICAL in light and dark, because these
   alias the theme-resolved brand SEMANTICS rather than naming a ramp step:
     fills  -> --bg-brand-solid / -hover / -active   (brand-500 in both themes)
     ink    -> --text-on-brand                       (white in both themes)
     ink-on-surface roles -> --text-brand            (brand-700 light / 400 dark)
   So they can never drift from the brand again, and a future brand change needs
   no edit here. This is the same fill/ink split theme.css documents: bright
   fills carry the on-brand ink; ink-on-surface uses the dark/light text step.

   ── HOW TO FLIP THE DIRECTION (this is a consistency fix, not a design ruling)
   Whether steppers / progress bars SHOULD be brand-coloured at all, versus
   deliberately neutral or semantic, is Pavel's call and is NOT decided here.
   Reversing it is mechanical: change the right-hand side in THIS block (and its
   twin in theme-dark.css) — e.g. --bg-brand-solid -> --bg-neutral-solid,
   --text-on-brand -> --text-on-neutral. Nothing else references these values, no
   component carries a literal, and the block is deliberately one contiguous
   edit per theme. Do not re-scatter them back into the sections above.

   NOT touched, and why:
     · step PILL / CHEVRON variants (--bg-step-pill-current: utility-blue-600,
       -pill-completed: green, -chevron-error: red) are INTENTIONALLY semantic —
       blue=in-progress, green=done, red=error — and are already consistent across
       themes. They are a different vocabulary, not residue.
     · the warning/amber family (--text-warning-*, --border-ai-warning,
       --text-ai-confidence-med, --border-spark-warn, --text-appointment-icon-float)
       is yellow BY INTENT. It has its own light-yellow/dark-amber split, which is a
       pre-existing inconsistency in the WARNING ramp — a separate ticket, not brand.
     · --decoration-banner-brand-link (brand light / neutral dark) is UUI's
       documented "brand section neutralises in dark". Intentional.
   ============================================================================ */
[data-theme="theme-light"],
[data-theme="theme-mica-light"] {
  /* Stepper — the numbered/dot stepper's brand states. Marker ink is white on the
     brand fill (4.43:1, the same resting figure the primary button carries). */
  --bg-step-current: var(--utility-neutral-900);
  --bg-step-current-hover: var(--utility-neutral-700);
  --bg-step-current-active: var(--utility-neutral-900);
  --bg-step-completed: var(--utility-neutral-900);
  --bg-step-completed-hover: var(--utility-neutral-700);
  --bg-step-completed-active: var(--utility-neutral-900);
  --bg-step-connector-fill: var(--utility-neutral-900);
  --text-step-current: var(--text-on-brand);
  --text-step-completed: var(--text-on-brand);

  /* Progress bar — aliases the brand exactly as its siblings already alias their
     intents (--bg-progress-bar-success: --bg-success, -danger: --bg-danger, …), so
     the DEFAULT bar finally belongs to the same system as the intent bars. */
  --bg-progress-bar: var(--utility-blue-500);
  --text-progress: var(--text-on-brand);

  /* Calendar booking-selected + schedule day-active — the same monochrome-black
     brand action the stepper had in light, blue in dark. */
  --bg-schedule-day-active: var(--utility-neutral-900);
  --bg-schedule-day-active-hover: var(--utility-neutral-900);
  --bg-schedule-day-active-pressed: var(--utility-neutral-950);
  --text-schedule-day-active: var(--text-on-brand);

  /* Checkbox checked border — aliases its OWN fill so the box edge and the box can
     never disagree again (the fill went brand-500 in #1b; this stayed neutral-900). */
  --border-checkbox-checked: var(--utility-neutral-900);
}

/* ============================================================================
   WHITELIST #S4 — MUTED-TEXT CONTRAST (Mia S4 · Russ, 2026-07-24)
   ============================================================================
   Mia measured this in the live UI: combobox__placeholder ("Status"/"Priority",
   13px) was 2.38:1 on white against a 4.5 floor — 6 failures in light, 3 in dark.
   ROOT CAUSE, one for all of them: these tokens named a RAW palette step
   (--utility-neutral-400/500) instead of routing through the app's text ramp,
   which had already been darkened. So the ramp passed and every component token
   that bypassed it did not.

   THE TRAP, and how this avoids it: a placeholder is SUPPOSED to read as
   subordinate, so the wrong fix is darkening everything until it passes — that
   flattens the hierarchy. Subordination here is carried by ROLE and by the gap to
   the component's OWN primary text, not by sitting under the legibility floor:

     muted TEXT      (placeholders, hints, meta)  -> 4.5:1 floor  neutral-600 L / -400 D
     affordance GLYPHS (chevrons, handles, star)  -> 3.0:1 floor  neutral-500 both
     DISABLED / inactive                          -> no floor (see below), untouched

   A placeholder is still obviously subordinate because the field's VALUE text is
   --text-input (neutral-900) — a three-step ramp gap — and the glyph tier stays
   visibly lighter than the text tier. Any FURTHER subordination must come from
   weight or size in the component, never by pushing lightness back under 4.5:1.

   DELIBERATELY NOT TOUCHED — disabled and inactive text (--text-*-disabled,
   --text-step-skipped, --text-calendar-closed, --text-cal-booking-day-outside,
   --text-flatpickr-disabled, --text-color-swatch-slash). WCAG 1.4.3 exempts text
   in an inactive component ("incidental"), and darkening it destroys the very
   affordance that says the control is unavailable. Their low ratios in an audit
   are correct, not defects.

   NOT ENTANGLED WITH THE BRAND: this pass changes text/placeholder/badge ink only.
   The brand FILL step (brand-500 vs -600, the 4.43:1 resting button) is still an
   open Pavel question and no --bg-brand-* / --text-on-brand token is touched here.

   Console tokens take neutral-400 in BOTH themes on purpose: --bg-ai-console is a
   DARK surface in light theme too, so the light-theme value must be a light step.
   ============================================================================ */
[data-theme="theme-light"],
[data-theme="theme-mica-light"] {
  /* Muted TEXT tier — 4.5:1 floor. The placeholder family funnels through the
     single --text-placeholder so there is one knob, not eight. */
  --text-placeholder: var(--utility-neutral-600);
  --text-input-placeholder: var(--text-placeholder);
  --text-inline-edit-placeholder: var(--text-placeholder);
  --text-inline-edit-trigger: var(--text-placeholder);
  --text-dropdown-hint: var(--text-placeholder);

  /* Ramp bottom tier + its subtle sibling — the root many of the below inherit. */
  --text-quaternary: var(--utility-neutral-600);
  --text-tertiary-subtle: var(--utility-neutral-600);

  /* Muted meta/label text — re-pointed at the RAMP instead of naming a raw
     palette step, which is what let them drift under the floor in the first place. */
  --text-accordion-meta: var(--text-quaternary);
  --text-collapse-meta: var(--text-quaternary);
  --text-list-item-meta: var(--text-quaternary);
  --text-popover-muted: var(--text-quaternary);
  --text-check-label-muted: var(--text-quaternary);
  --text-input-tertiary: var(--text-quaternary);
  --text-inventory-tertiary: var(--text-quaternary);
  --text-form-info-btn: var(--text-quaternary);
  --text-command-palette-muted: var(--text-quaternary);

  /* --bg-ai-console is a DARK surface in BOTH themes — light step in both. */
  --text-ai-console-muted: var(--utility-neutral-400);
  --text-ai-console-sys: var(--utility-neutral-400);
  --text-ai-console-gutter: var(--utility-neutral-400);
  --text-dropzone: var(--utility-neutral-600);

  /* Affordance GLYPHS — non-text graphics, 3:1 floor (1.4.11). Held one step
     lighter than the text tier ON PURPOSE: this is what preserves the visual
     hierarchy that simply darkening everything would have flattened. */
  --text-accordion-chevron: var(--utility-neutral-500);
  --text-collapse-chevron: var(--utility-neutral-500);
  --text-list-handle: var(--utility-neutral-500);
  --text-mail-star: var(--utility-neutral-500);
  --text-popover-pin: var(--utility-neutral-500);
  --text-toggle-thumb-icon: var(--utility-neutral-500);

  /* .badge-soft fills are a 12% tint of the badge's OWN foreground, so a light
     fg lands on a light fill and the pair collapses. These three were under the
     floor on that tint (warning 4.23, mint 3.12, teal 4.50 on the line); one
     step darker each. The solid badge variants are unaffected — they already
     clear it, and the fg is the only thing shared. */
  --text-badge-warning: var(--utility-amber-800);
  --text-badge-mint: var(--utility-mint-800);
  --text-badge-teal: var(--utility-teal-800);
}

/* ── tq-8209 (R3b): Reinly status-badge tone tokens. The SAME values in theme-light and theme-dark (the served app shows the
   same light pastel pills in both themes; a token defined in only one theme would leak across theme scopes). Values = the
   served colours (Tailwind-3 amber / blue / red / violet 100 + 800, emerald 500). Only blue-100 and violet-100 equal this
   palette's (Tailwind-4 OKLCH) primitives exactly in sRGB; the others differ, so they keep the served hex. ── */
[data-theme="theme-light"],
[data-theme="theme-mica-light"] {
  --status-badge-amber-bg: #fef3c7;
  --status-badge-amber-fg: #92400e;
  --status-badge-blue-bg: var(--color-blue-100);
  --status-badge-blue-fg: #1e40af;
  --status-badge-red-bg: #fee2e2;
  --status-badge-red-fg: #991b1b;
  --status-badge-violet-bg: var(--color-violet-100);
  --status-badge-violet-fg: #5b21b6;
  /* tq-8272 (R3f, USER "Give each status its own colour"; tones = isabella 900048151): ready / paused / expiring get their
     own tones from the palette primitives (no new raw colour). Same values in both themes. */
  --status-badge-teal-bg: var(--color-teal-100);
  --status-badge-teal-fg: var(--color-teal-800);
  --status-badge-fuchsia-bg: var(--color-fuchsia-100);
  --status-badge-fuchsia-fg: var(--color-fuchsia-800);
  --status-badge-orange-bg: var(--color-orange-200);
  --status-badge-orange-fg: var(--color-orange-900);
  --status-badge-live-dot: #10b981;
  /* neutral tone (draft / published / archived): a light pill in BOTH themes; light: the semantic text tokens themselves, so light (and its [data-contrast="high"] variant) is byte-identical to before */
  --status-badge-neutral-bg: var(--utility-neutral-100);
  --status-badge-neutral-fg: var(--text-secondary);
  --status-badge-neutral-muted-fg: var(--text-tertiary);
}

/* ── tq-8209 (R3b): filter surface tokens (filter drawer + quick-filter bar). Light = the served colours exactly (the
   app hardcoded them), so light is unchanged; dark = the DS dark surfaces, which fixes the served dark drawer (a light
   panel under near-white --text-primary labels, isabella 900047451: the ONE allowed visual change besides the badges). ── */
[data-theme="theme-light"],
[data-theme="theme-mica-light"] {
  --filter-bar-bg: #ffffff;
  --filter-panel-bg: #ffffff;
  --filter-panel-bg-translucent: rgba(255, 255, 255, 0.96);
  --filter-panel-fg: #111111;
  --filter-control-bg: #ffffff;
  --filter-divider: rgb(231 229 228);
  --filter-hover-bg: #e7e5e4;
}

/* ── tq-8209 (R3b): the ONE .chip (components/utility/chip.css). --chip-bg = the served filter chip's fill (light: white;
   dark: the page surface). Tone tokens start from the .tag tokens; a tone whose label fails 4.5:1 on its fill gets its
   own value here (isabella 900049051: fix a tone with its token, never by changing the base). ── */
[data-theme="theme-light"],
[data-theme="theme-mica-light"] {
  --chip-bg: #ffffff;
  --chip-selectable-selected-bg: var(--utility-neutral-100); /* the served feature-chip fill */
  --chip-primary-bg: var(--bg-tag-primary);
  --chip-primary-fg: var(--text-tag-primary);
  --chip-primary-border: var(--border-tag-primary);
  --chip-success-bg: var(--bg-tag-success);
  --chip-success-fg: var(--text-tag-success);
  --chip-success-border: var(--border-tag-success);
  --chip-warning-bg: var(--bg-tag-warning);
  --chip-warning-fg: var(--text-tag-warning);
  --chip-warning-border: var(--border-tag-warning);
  --chip-danger-bg: var(--bg-tag-danger);
  --chip-danger-fg: var(--text-tag-danger);
  --chip-danger-border: var(--border-tag-danger);
  --chip-info-bg: color-mix(in oklch, var(--text-info) 12%, transparent);
  --chip-info-fg: var(--text-secondary); /* R4 LITERAL (Pavel): the info LABEL is text-secondary, as .tag--info */
  --chip-info-border: transparent;
  --chip-muted-bg: var(--bg-tag-neutral);
  --chip-muted-fg: var(--text-tag-neutral);
  --chip-muted-border: var(--border-tag-neutral);
}

/* ── tq-8335 (R12): text-bearing accent fills (isabella 900049586; the user's keep-aa precedent 900047390). White
   on emerald-600 is 3.67:1, a text failure; emerald-700 is 5.37:1, its hover emerald-800 7.58:1. ONLY fills that
   carry text use these; emerald-600 stays for non-text accents (focus rings, borders, icons, checks, the range fill).
   The SAME values in theme-light and theme-dark (the fill is not themed). ── */
[data-theme="theme-light"],
[data-theme="theme-mica-light"] {
  --bg-accent-solid: var(--color-emerald-700);
  --bg-accent-solid-hover: var(--color-emerald-800);
  --text-on-accent-solid: #ffffff;
}
/* Theme: Dark */
/* VALUES = THE SERVED APP (tq-8176 R2, USER via John 900047126: "Reinly app is visual truth").
   Every token src/reinly.webapp/Assets/css/base/theme-dark.css defines resolves here to the
   value the app renders (src/reinly.webapp @ 09387252, http://172.16.1.201:5205/). The DS
   keeps its own structure and names; its DS-only tokens are kept. Where an older rationale
   comment below describes a different value, the value wins; changed lines say so inline.
   Deliberate exceptions:
   - the WHITELIST #S4 muted-text contrast block keeps its WCAG AA values (the app's are
     below AA; ruling asked of monica, message 900047376);
   - tokens the app points at an UNDEFINED name (--text-muted, --text-default, --bg-hover;
     --bg-surface / --bg-body outside mica) keep the DS's working value. */
.floating-appointment {
  border-color: var(--border-warning);
}

[data-theme="theme-dark"],
[data-theme="theme-mica-dark"] {
  /* Canvas & Scrollbars */
  --scroll-thumb: var(--utility-neutral-700);
  --scroll-track: var(--utility-neutral-850);
  --canvas-primary: var(--utility-neutral-900);
  --canvas-secondary: var(--utility-neutral-950);
  --bg-alpha-0: var(--alpha-0);
  /* Typography */
  --text-primary: var(--utility-neutral-100);
  --text-primary-alt: var(--utility-neutral-200);
  --text-primary-hover: var(--utility-neutral-50);
  --text-primary-subtle: var(--utility-neutral-300);
  --text-primary-solid: var(--utility-blue-400);
  --text-secondary: var(--utility-neutral-300);
  --text-secondary-alt: var(--utility-neutral-200);
  --text-secondary-hover: var(--utility-neutral-200);
  --text-secondary-subtle: var(--utility-neutral-400);
  --text-secondary-solid: var(--utility-neutral-200);
  --text-tertiary: var(--utility-neutral-400);
  --text-tertiary-alt: var(--utility-neutral-300);
  --text-tertiary-hover: var(--utility-neutral-300);
  --text-tertiary-subtle: var(--utility-neutral-500);
  --text-tertiary-solid: var(--utility-neutral-300);
  --text-quaternary: var(--utility-neutral-400);  /* neutral-500 was 3.5:1 on dark surfaces — below AA (#5607) */
  --text-quaternary-alt: var(--utility-neutral-400);
  --text-quaternary-hover: var(--utility-neutral-400);
  --text-quaternary-subtle: var(--utility-neutral-600);
  --text-quaternary-solid: var(--utility-neutral-400);
  --text-disabled: var(--utility-neutral-500);
  /* DR-003. Placeholder is real, readable copy (.form-control::placeholder pins
     opacity:1, so this token IS the rendered colour — no UA alpha to hide behind).
     neutral-500 measured 4.18:1 on --bg-input / 3.19:1 on --bg-input-soft — the same
     ~3.5:1 dark-surface failure #5607 already fixed for --text-quaternary one line up.
     neutral-400 = 5.83:1 worst-case. NOTE: the finding filed this against
     theme-light.css:34, but light neutral-500 is 4.73:1 on white and already passes —
     the defect is dark-only. Light is deliberately left alone. */
  --text-placeholder: var(--utility-neutral-400);
  --text-detail-section-title: var(--utility-neutral-200);
  /* Tonal-button ink — see theme-light. Dark's tint is a 12% mix over a DARK surface,
     so the base step already clears AA (5.30 / 9.70 / 9.44); these are defined equal to
     the base rather than omitted, so a light specimen nested in a dark page cannot
     inherit light's darker step. */
  --text-danger: var(--utility-red-300);
  --text-danger-strong: var(--text-danger);
  --text-danger-alt: var(--utility-red-400);
  --text-danger-hover: var(--utility-red-200);
  --text-danger-subtle: var(--utility-red-500);
  --text-danger-solid: var(--utility-red-100);
  --text-warning: var(--utility-amber-300);
  --text-warning-strong: var(--text-warning);
  --text-warning-alt: var(--utility-amber-400);
  --text-warning-hover: var(--utility-amber-200);
  --text-warning-subtle: var(--utility-amber-500);
  --text-warning-solid: var(--utility-amber-100);
  --text-success: var(--utility-green-300);
  --text-success-strong: var(--text-success);
  --text-success-alt: var(--utility-green-400);
  --text-success-hover: var(--utility-green-200);
  --text-success-subtle: var(--utility-green-500);
  --text-success-solid: var(--utility-green-100);
  --text-info: var(--utility-blue-300);
  --text-info-alt: var(--utility-blue-400);
  --text-info-hover: var(--utility-blue-200);
  --text-info-subtle: var(--utility-blue-500);
  --text-info-solid: var(--utility-blue-100);
  --text-purple: var(--utility-purple-300);
  --text-purple-alt: var(--utility-purple-400);
  --text-purple-hover: var(--utility-purple-200);
  --text-purple-subtle: var(--utility-purple-500);
  --text-purple-solid: var(--utility-purple-100);
  --text-indigo: var(--utility-indigo-300);
  --text-indigo-alt: var(--utility-indigo-400);
  --text-indigo-hover: var(--utility-indigo-200);
  --text-indigo-subtle: var(--utility-indigo-500);
  --text-indigo-solid: var(--utility-indigo-100);
  --text-teal: var(--utility-teal-300);
  --text-teal-alt: var(--utility-teal-400);
  --text-teal-hover: var(--utility-teal-200);
  --text-teal-subtle: var(--utility-teal-500);
  --text-teal-solid: var(--utility-teal-100);
  --text-pink: var(--utility-pink-300);
  --text-pink-alt: var(--utility-pink-400);
  --text-pink-hover: var(--utility-pink-200);
  --text-pink-subtle: var(--utility-pink-500);
  --text-pink-solid: var(--utility-pink-100);
  --text-mint: var(--utility-mint-300);
  --text-mint-alt: var(--utility-mint-400);
  --text-mint-hover: var(--utility-mint-200);
  --text-mint-subtle: var(--utility-mint-500);
  --text-mint-solid: var(--utility-mint-100);
  /* Icon tones — the iconography foreground scale (closes the --text-icon-* gap).
     Aliases of the semantic --text-* scale so icons stay theme-aware + AA; --text-icon-brand anchors the UUI accent (lighter step for dark contrast). */
  --text-icon: var(--text-secondary);
  --text-icon-primary: var(--text-primary);
  --text-icon-secondary: var(--text-secondary);
  --text-icon-tertiary: var(--text-tertiary);
  --text-icon-quaternary: var(--text-quaternary);
  --text-icon-light: var(--text-tertiary);
  --text-icon-dark: var(--text-primary);
  --text-icon-disabled: var(--text-disabled);
  --text-icon-brand: var(--utility-emerald-400); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --text-icon-success: var(--text-success);
  --text-icon-warning: var(--text-warning);
  --text-icon-danger: var(--text-danger);
  --text-icon-info: var(--text-info);
  --text-icon-purple: var(--text-purple);
  --text-icon-indigo: var(--text-indigo);
  --text-icon-pink: var(--text-pink);
  --text-icon-teal: var(--text-teal);
  --text-icon-mint: var(--text-mint);
  /* Borders */
  /* Default border — neutral-700, per UUI v8 (#231). Was neutral-800: one step weak
     against the neutral-900 surface. Lighter = stronger in dark. Re-stated in the
     reinly override block below the sync marker (that copy is the authority). */
  --border-primary: var(--utility-neutral-700);
  --border-primary-alt: var(--utility-neutral-700);
  --border-primary-hover: var(--utility-neutral-700);
  /* neutral-900 -> neutral-750 (divider-exposure audit, 2 of 3).
     neutral-900 IS --bg-primary AND --canvas-primary in dark, so this border painted
     #171717 on #171717 = 1.000:1 — invisible on the two commonest dark surfaces. This
     is the root behind #166 (the header divider) and #126 (row separators): both were
     patched at their own token; this fixes the source they inherit from.
     Light is separately declared (neutral-100) and untouched. */
  --border-primary-subtle: var(--utility-neutral-900);
  --border-primary-solid: var(--utility-neutral-600);
  /* neutral-800 -> neutral-750 (divider-exposure audit, 1 of 3).
     neutral-800 IS --bg-secondary in dark, so this border painted #262626 on #262626
     = 1.000:1 — literally invisible wherever it met that surface. Not a "one value
     across both themes" problem (light is separately declared at neutral-200 and is
     fine): the DARK BORDER RAMP AND THE DARK SURFACE RAMP OCCUPY THE SAME RUNGS.
     neutral-750 (#2b2b2b) is the only rung below neutral-700 that no surface uses,
     and it clears all three: 1.266 / 1.177 / 1.069. It is also, independently, the
     row-separator value sampled from Pavel's own #161 reference image. */
  --border-secondary: var(--utility-neutral-800);
  --border-secondary-alt: var(--utility-neutral-700);
  --border-secondary-hover: var(--utility-neutral-600);
  --border-secondary-subtle: var(--utility-neutral-900);
  --border-secondary-solid: var(--utility-neutral-600);
  --border-tertiary: var(--utility-neutral-600);
  --border-tertiary-alt: var(--utility-neutral-600);
  --border-tertiary-hover: var(--utility-neutral-600);
  --border-tertiary-subtle: var(--utility-neutral-700);
  --border-tertiary-solid: var(--utility-neutral-400);
  --border-quaternary: var(--utility-neutral-500);
  --border-quaternary-alt: var(--utility-neutral-400);
  --border-quaternary-hover: var(--utility-neutral-400);
  --border-quaternary-subtle: var(--utility-neutral-600);
  --border-quaternary-solid: var(--utility-neutral-300);
  /* Semantic borders */
  --border-danger: var(--utility-red-500);
  --border-danger-alt: var(--utility-red-400);
  --border-danger-hover: var(--utility-red-600);
  --border-danger-subtle: var(--utility-red-700);
  --border-danger-solid: var(--utility-red-300);
  --border-warning: var(--utility-yellow-500);
  --border-warning-alt: var(--utility-yellow-400);
  --border-warning-hover: var(--utility-yellow-600);
  --border-warning-subtle: var(--utility-yellow-700);
  --border-warning-solid: var(--utility-yellow-300);
  --border-success: var(--utility-green-500);
  --border-success-alt: var(--utility-green-400);
  --border-success-hover: var(--utility-green-600);
  --border-success-subtle: var(--utility-green-700);
  --border-success-solid: var(--utility-green-300);
  --border-info: var(--utility-blue-500);
  --border-info-alt: var(--utility-blue-400);
  --border-info-hover: var(--utility-blue-600);
  --border-info-subtle: var(--utility-blue-700);
  --border-info-solid: var(--utility-blue-300);
  --border-purple: var(--utility-purple-500);
  --border-purple-alt: var(--utility-purple-400);
  --border-purple-hover: var(--utility-purple-600);
  --border-purple-subtle: var(--utility-purple-700);
  --border-purple-solid: var(--utility-purple-300);
  --border-indigo: var(--utility-indigo-500);
  --border-indigo-alt: var(--utility-indigo-400);
  --border-indigo-hover: var(--utility-indigo-600);
  --border-indigo-subtle: var(--utility-indigo-700);
  --border-indigo-solid: var(--utility-indigo-300);
  --border-teal: var(--utility-teal-500);
  --border-teal-alt: var(--utility-teal-400);
  --border-teal-hover: var(--utility-teal-600);
  --border-teal-subtle: var(--utility-teal-700);
  --border-teal-solid: var(--utility-teal-300);
  --border-pink: var(--utility-pink-500);
  --border-pink-alt: var(--utility-pink-400);
  --border-pink-hover: var(--utility-pink-600);
  --border-pink-subtle: var(--utility-pink-700);
  --border-pink-solid: var(--utility-pink-300);
  --border-mint: var(--utility-mint-500); /* consumed by .divider-mint (data/divider.css) */
  /* Backgrounds */
  --bg-black: var(--utility-neutral-900);
  --bg-black-hover: var(--utility-neutral-800);
  --bg-primary: var(--utility-neutral-900);
  --bg-primary-alt: var(--utility-neutral-800);
  --bg-primary-hover: var(--utility-neutral-800);
  --bg-primary-subtle: var(--utility-neutral-950);
  --bg-primary-solid: var(--utility-blue-500);
  --bg-secondary: var(--utility-neutral-800);
  --bg-secondary-alt: var(--utility-neutral-700);
  --bg-secondary-hover: var(--utility-neutral-700);
  --bg-secondary-subtle: var(--utility-neutral-900);
  --bg-secondary-solid: var(--utility-neutral-200);
  --bg-tertiary: var(--utility-neutral-700);
  --bg-tertiary-alt: var(--utility-neutral-600);
  --bg-tertiary-hover: var(--utility-neutral-600);
  --bg-tertiary-subtle: var(--utility-neutral-800);
  --bg-tertiary-solid: var(--utility-neutral-300);
  --bg-quaternary: var(--utility-neutral-600);
  --bg-quaternary-alt: var(--utility-neutral-500);
  --bg-quaternary-hover: var(--utility-neutral-500);
  --bg-quaternary-subtle: var(--utility-neutral-700);
  --bg-quaternary-solid: var(--utility-neutral-400);
  --bg-overlay: var(--utility-neutral-950);
  /* Map scrim (DR-027) — INTENTIONALLY IDENTICAL to the theme-light.css pair. The basemap
     tiles under this chrome do not theme-flip, so the scrim must not either. See the full
     rationale in theme-light.css. Keep these two files in lockstep. */
  --bg-gray: var(--utility-neutral-400);
  --bg-gray-alt: var(--utility-neutral-300);
  --bg-gray-hover: var(--utility-neutral-500);
  --bg-gray-subtle: var(--utility-neutral-900);
  --bg-gray-solid: var(--utility-neutral-200);
  /* Semantic backgrounds */
  --bg-danger: var(--utility-red-400);
  --bg-danger-alt: var(--utility-red-300);
  --bg-danger-hover: var(--utility-red-500);
  --bg-danger-subtle: var(--utility-red-900);
  --bg-danger-solid: var(--utility-red-200);
  --bg-warning: var(--utility-yellow-400);
  --bg-warning-alt: var(--utility-yellow-300);
  --bg-warning-hover: var(--utility-yellow-500);
  --bg-warning-subtle: var(--utility-yellow-900);
  --bg-warning-solid: var(--utility-yellow-200);
  --bg-success: var(--utility-green-400);
  --bg-success-alt: var(--utility-green-300);
  --bg-success-hover: var(--utility-green-500);
  --bg-success-subtle: var(--utility-green-900);
  --bg-success-solid: var(--utility-green-200);
  --bg-info: var(--utility-blue-400);
  --bg-info-alt: var(--utility-blue-300);
  --bg-info-hover: var(--utility-blue-500);
  --bg-info-subtle: var(--utility-blue-900);
  --bg-info-solid: var(--utility-blue-200);
  --bg-purple: var(--utility-purple-400);
  --bg-purple-alt: var(--utility-purple-300);
  --bg-purple-hover: var(--utility-purple-500);
  --bg-purple-subtle: var(--utility-purple-900);
  --bg-purple-solid: var(--utility-purple-200);
  --bg-indigo: var(--utility-indigo-400);
  --bg-indigo-alt: var(--utility-indigo-300);
  --bg-indigo-hover: var(--utility-indigo-500);
  --bg-indigo-subtle: var(--utility-indigo-900);
  --bg-indigo-solid: var(--utility-indigo-200);
  --bg-teal: var(--utility-teal-400);
  --bg-teal-alt: var(--utility-teal-300);
  --bg-teal-hover: var(--utility-teal-500);
  --bg-teal-subtle: var(--utility-teal-900);
  --bg-mint-subtle: var(--utility-mint-900); /* tq-8404: see theme-light */
  --bg-teal-solid: var(--utility-teal-200);
  --bg-pink: var(--utility-pink-400);
  --bg-pink-alt: var(--utility-pink-300);
  --bg-pink-hover: var(--utility-pink-500);
  --bg-pink-subtle: var(--utility-pink-900);
  --bg-pink-solid: var(--utility-pink-200);
  /* Rating (stars) — faithful UUI rating-stars/rating-badge: a gold fill
     (yellow-400) over a neutral empty track (bg-tertiary). Semantic seat so the
     component never hardcodes a hue; the interactive focus ring resolves through
     --border-focus. On dark surfaces the hover preview brightens (yellow-300). */
  --star-filled: var(--utility-yellow-400);
  --star-empty: var(--bg-tertiary);
  --star-filled-hover: var(--utility-yellow-300);
  /* Theme Swatches */
  --text-theme-label: var(--text-tertiary);
  /* WHITELIST #1b — mirrors theme-light.css verbatim; see the note there. These two were
     the last seed-era indigo left in a BRAND role: the primary chips read
     indigo-500 / indigo-300 here, so switching the app to dark turned the selector's
     primary swatch back to the old brand (#615fff) even though every other brand surface
     was reinly blue. The tiles preview a theme, so they resolve through the ramp. */
  /* Light theme swatches */
  --theme-light-base-swatch: var(--utility-neutral-900);
  --theme-light-primary-swatch: var(--utility-indigo-500); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --theme-light-secondary-swatch: var(--utility-pink-400);
  --theme-light-accent-swatch: var(--utility-teal-400);
  --bg-theme-light-swatch: var(--alpha-white-100);
  --border-theme-light-swatch: var(--utility-neutral-200);
  /* Dark theme swatches */
  --theme-dark-base-swatch: var(--utility-neutral-100);
  --theme-dark-primary-swatch: var(--utility-indigo-300); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --theme-dark-secondary-swatch: var(--utility-pink-300);
  --theme-dark-accent-swatch: var(--utility-teal-300);
  --bg-theme-dark-swatch: var(--utility-neutral-900);
  --border-theme-dark-swatch: var(--utility-neutral-700);
  /* Mica light swatches — never declared anywhere before; see theme-light.css. */
  --theme-mica-light-base-swatch: var(--theme-light-base-swatch);
  --theme-mica-light-primary-swatch: var(--utility-indigo-500); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --theme-mica-light-secondary-swatch: var(--theme-light-secondary-swatch);
  --theme-mica-light-accent-swatch: var(--theme-light-accent-swatch);
  --bg-theme-mica-light-swatch: var(--bg-theme-light-swatch);
  --border-theme-mica-light-swatch: var(--border-theme-light-swatch);
  /* Sidebar */
  --width-sidebar-expanded: 240px;
  --bg-sidebar: var(--utility-neutral-950); /* tq-8176: the served app's value (reinly.webapp @ 09387252) */
  --bg-sidebar-hover: var(--utility-neutral-850);
  --bg-sidebar-header: var(--alpha-0);
  --bg-sidebar-avatar: var(--utility-neutral-800);
  /* NOTE #13 (Pavel) — sidebar structural edge follows the same semantic ladder as light
     (--border-secondary). Dark --border-secondary is already neutral-800, so this is a
     no-op visually here; kept symmetric with theme-light so the separator is one token. */
  --border-sidebar: var(--utility-neutral-800);
  /* n900 -> n750: n900 IS --bg-primary in dark, so this divider was painted on its own
     surface at 1.000:1 — RENDERED and confirmed live on .sidebar-panel--simple, not inferred
     from the token chain. It had been sitting in the collision baseline as tracked debt; a
     visible defect is not debt (Maximo), so it comes out and gets fixed. n750 (#2b2b2b) is
     the only rung below n700 that no dark surface occupies: 1.266 on --bg-primary, 1.177 on
     --bg-card, 1.069 on --bg-secondary. Same fix as --border-secondary/-primary-subtle/
     -chart-card. LIGHT DELIBERATELY UNTOUCHED (neutral-100, 1.09 — quiet by intent). */
  --border-sidebar-divider: var(--utility-neutral-900);
  /* #93 SUPERSEDED — Pavel reversed it: "the rail should not be changing color on hover".
     ONE CONSTANT rail colour, legible against BOTH backgrounds it sits on: the resting sidebar
     surface (23,23,23) AND the hover fill (neutral-800, 38,38,38).
     neutral-600 (82,82,82) held the resting surface at 2.29:1 but only 1.94:1 against the fill —
     under a constant-colour rule that is the weakest link, so it steps to neutral-500
     (115,115,115): 3.78:1 vs the resting surface, 3.19:1 vs the hover fill. Both clear 3:1, and
     the same rung now serves both themes.
     --border-sidebar-rail-hover is GONE, here and in theme-light, so hover has no mechanism to
     diverge through — #84's collision cannot return by inheritance. */
  --border-sidebar-rail: var(--utility-neutral-500);
  /* Declared rather than left to an implicit fallback — see theme-light. #84's root cause was a
     fallback that silently equalled the surface it had to contrast with; the alias to the nav-dot
     tone is intentional, so it is kept but stated. */
  --bg-sidebar-rail-active: var(--bg-sidebar-dot-active);
  /* ACTIVE == HOVER, NEUTRAL (Pavel #29/#30/#31 — reverted the blue experiment after
     live review). Selected surface = the same gray as hover; label weight + the
     sub-menu rail's small active segment carry "selected". See theme-light. */
  --bg-sidebar-item-hover: var(--utility-neutral-800);
  --bg-sidebar-item-active: var(--bg-sidebar-item-hover);
  --bg-sidebar-item-active-hover: var(--utility-neutral-700);
  /* Nested selected-child surface — see theme-light for the rationale. The color-mix derives
     from this theme's own --bg-sidebar-item-active, so it auto-adapts to the dark ladder. */
  --bg-sidebar-item-child-active: color-mix(in srgb, var(--bg-sidebar-item-active) 60%, transparent);
  --bg-sidebar-item-child-active-hover: color-mix(in srgb, var(--bg-sidebar-item-active) 80%, transparent);
  --text-sidebar: var(--text-primary);
  --text-sidebar-muted: var(--text-secondary);
  --text-sidebar-subtle: var(--text-quaternary);
  --bg-sidebar-dot-muted: var(--utility-neutral-600);
  --bg-sidebar-dot-active: var(--utility-neutral-100);
  /* Split Pane — divider highlight = UUI brand accent (was info-blue), FAN-OUT-RULES §3 */
  --border-split: var(--border-secondary);
  --border-split-hover: var(--utility-blue-400);
  --border-split-active: var(--utility-blue-500);
  /* Menu */
  --width-menu-expanded: 224px;
  --width-menu-collapsed: 54px;
  --menu-indent: 12px;
  --bg-menu: var(--alpha-0);
  --bg-menu-hover: var(--utility-neutral-900);
  --bg-menu-active: var(--utility-neutral-800);
  --bg-menu-open: var(--utility-neutral-800);
  --bg-menu-dot: var(--utility-neutral-500);
  --bg-menu-dot-muted: var(--utility-neutral-500);
  --bg-menu-dot-active: var(--utility-neutral-100);
  --bg-menu-badge: var(--utility-neutral-700);
  --text-menu-badge: var(--utility-neutral-50);
  --bg-menu-badge-muted: var(--utility-neutral-800);
  --text-menu-badge-muted: var(--utility-neutral-400);
  --text-menu: var(--alpha-white-100);
  --text-menu-hover: var(--alpha-white-100);
  --text-menu-active: var(--alpha-white-100);
  --border-menu: var(--alpha-0);
  --border-menu-muted: var(--alpha-0);
  --icon-menu: var(--utility-neutral-300);
  --icon-menu-muted: var(--utility-neutral-400);
  /* Breadcrumbs / Page Header */
  --text-page-header: var(--text-primary);
  --text-page-title: var(--text-primary);
  --text-breadcrumb: var(--text-tertiary);
  --text-breadcrumb-separator: var(--text-tertiary-alt);
  --bg-page-header: var(--alpha-0);
  --bg-page-header-hover: var(--bg-secondary-alt);
  --bg-breadcrumb: var(--alpha-0);
  --bg-breadcrumb-hover: var(--bg-secondary);
  --border-breadcrumb: var(--alpha-0);
  /* Breadcrumbs — standalone .breadcrumbs component (3c ADOPT · UUI
     application/breadcrumbs 1:1). Dark-surface divider steps DOWN the ramp
     (neutral-300 would glare on a dark band); the rest inherit theme-aware
     semantic tokens that already flip. Brand accent = UUI's own ramp. */
  --text-breadcrumb-item: var(--text-quaternary);
  --text-breadcrumb-item-hover: var(--text-secondary);
  --text-breadcrumb-current: var(--text-link);
  --text-breadcrumb-strong: var(--text-primary);
  --fg-breadcrumb-icon: var(--text-quaternary);
  --fg-breadcrumb-icon-current: var(--text-link);
  --fg-breadcrumb-divider: var(--utility-neutral-600);
  --bg-breadcrumb-item-hover: var(--bg-primary-hover);
  --border-breadcrumb-line: var(--border-secondary);
  --border-breadcrumb-avatar: var(--border-secondary);
  /* Tabs */
  --bg-tab: var(--alpha-0);
  --bg-tab-hover: var(--alpha-0);
  --text-tab: var(--utility-neutral-400);
  --text-tab-hover: var(--utility-neutral-50);
  --text-tab-active: var(--utility-neutral-50);
  --border-tab: var(--alpha-0);
  --border-tab-hover: var(--utility-neutral-400);
  --border-tab-active: var(--utility-neutral-300);
  --text-tab-badge: var(--utility-neutral-50);
  --bg-tab-ribbon: var(--utility-neutral-900);
  --bg-tab-ribbon-hover: var(--utility-neutral-800);
  --bg-tab-ribbon-item: var(--alpha-0);
  --bg-tab-ribbon-active: var(--utility-neutral-700);
  --text-tab-ribbon: var(--utility-neutral-200);
  --text-tab-ribbon-active: var(--utility-neutral-50);
  --border-tab-ribbon: var(--utility-neutral-700);
  --bg-tab-menu-hover: var(--utility-neutral-800);
  --bg-tab-menu-active: var(--utility-neutral-800);
  --text-tab-menu: var(--utility-neutral-300);
  --text-tab-menu-hover: var(--utility-neutral-50);
  --text-tab-menu-active: var(--utility-neutral-50);
  --bg-tab-browser: var(--alpha-0);
  --border-tab-browser: var(--utility-neutral-700);
  --bg-tab-browser-item: var(--alpha-0);
  --bg-tab-browser-hover: var(--utility-neutral-800);
  --bg-tab-browser-active: var(--utility-neutral-800);
  --text-tab-browser: var(--utility-neutral-300);
  --text-tab-browser-hover: var(--utility-neutral-50);
  --text-tab-browser-active: var(--utility-neutral-50);
  --border-tab-browser-hover: var(--utility-neutral-600);
  --bg-tab-browser-divider: var(--utility-neutral-700);
  /* UUI tabs — faithful 6-variant model (3c ADOPT). Dark uses lighter brand
     steps so the accent clears AA on dark surfaces; neutral types track the
     canonical dark tokens. Focus ring = brand accent (--border-focus = brand-400). */
  --text-tab-rest: var(--text-tab);                    /* neutral-400 */
  --text-tab-rest-hover: var(--text-secondary);        /* neutral-300 */
  --text-tab-accent: var(--utility-emerald-400); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --border-tab-accent: var(--utility-emerald-500); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --bg-tab-accent-active: var(--utility-emerald-950); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --text-tab-neutral-active: var(--text-secondary);    /* neutral-300 */
  --bg-tab-neutral-active: var(--bg-primary-hover);     /* neutral-800 */
  --bg-tab-track: var(--bg-tab-ribbon);                /* neutral-900 */
  --border-tab-track: var(--border-tab-ribbon);         /* neutral-700 */
  --bg-tab-raised-active: var(--bg-tab-ribbon-active);  /* neutral-700 */
  --border-tab-hairline: var(--border-secondary);       /* neutral-800 */
  --ring-tab-focus: var(--focus-ring);                /* brand-400 */
  /* Toolbars */
  --bg-toolbar: var(--alpha-0);
  --border-toolbar: var(--border-primary-subtle);
  --text-toolbar: var(--text-tertiary);
  --text-toolbar-strong: var(--text-primary);
  --text-toolbar-muted: var(--text-quaternary);
  --bg-toolbar-group: var(--alpha-0);
  --border-toolbar-group: var(--alpha-0);
  /* Pavel — "In dark mode, im not seeing the same header divider". It was RENDERED,
     not absent (getClientRects=1, display:flex, visibility:visible, opacity:1,
     box 1x32) — it was INVISIBLE, so a colour fix is the right fix.
     --border-primary-subtle resolves to neutral-900 in dark, which is EXACTLY the
     header/canvas surface: the divider painted #171717 on #171717 = 1.000:1. Light
     is fine on the same token (#f5f5f5 on #ffffff = 1.090:1) — one token, two
     completely different outcomes. Same root class as #84 (rail vanished under
     hover) and #126 (row separators 3 lightness points off surface in light, 17 in
     dark): a divider token assuming one value works in both themes.
     --border-secondary (neutral-800) gives 1.185:1 — above light's own 1.090, so
     the divider is at least as legible in dark as the one he can already see. */
  --border-toolbar-divider: var(--border-primary-subtle);
  --bg-toolbar-btn: var(--alpha-0);
  --bg-toolbar-btn-hover: var(--bg-secondary-subtle);
  --bg-toolbar-btn-active: var(--bg-secondary-subtle);
  --bg-toolbar-btn-selected: var(--bg-secondary);
  --border-toolbar-btn: var(--alpha-0);
  --border-toolbar-btn-hover: var(--border-primary);
  --border-toolbar-btn-selected: var(--border-primary);
  --text-toolbar-hover: var(--text-primary);
  --icon-toolbar: var(--text-tertiary);
  --icon-toolbar-hover: var(--text-primary);
  --bg-toolbar-badge: var(--utility-neutral-50);
  --text-toolbar-badge: var(--utility-neutral-950);
  --bg-toolbar-input: var(--alpha-0);
  --border-toolbar-input: var(--border-primary-subtle);
  /* Focus ring resolves through the canonical --border-focus (UUI brand accent),
     matching the pilot button — a single 2px outline, not the old info-blue. */
  --focus-toolbar: var(--border-info);
  /* Tray */
  --bg-tray: var(--utility-neutral-800);
  --bg-tray-body: var(--utility-neutral-850);
  --bg-tray-header: var(--alpha-0);
  --bg-tray-footer: var(--alpha-0);
  --bg-tray-overlay: var(--alpha-neutral-950-20);
  --border-tray: var(--alpha-0);
  --border-tray-divider: var(--alpha-0);
  --text-tray: var(--alpha-white-100);
  --text-tray-muted: var(--utility-neutral-300);
  --text-tray-heading: var(--alpha-white-100);
  --icon-tray: var(--utility-neutral-200);
  --icon-tray-close: var(--utility-neutral-200);
  --bg-tray-close-hover: var(--utility-neutral-700);
  --icon-tray-pin: var(--text-tertiary);
  --bg-tray-pin-hover: var(--utility-neutral-850);
  --icon-tray-pin-active: var(--text-info);
  --bg-tray-pin-active: var(--bg-info-subtle);
  --border-tray-pin-active: transparent;
  /* Buttons */
  /* Primary — DE-BRANDED from upstream blue (see MONOCHROME CONVERSION note at the
     bottom of this file). Brand=BLACK, inverted white in Dark. */
  --text-button-primary: var(--alpha-white-100);
  --bg-button-primary: var(--utility-neutral-100);
  --bg-button-primary-hover: var(--utility-neutral-300);
  --bg-button-primary-active: var(--utility-neutral-100);
  --border-button-primary: var(--alpha-0);
  /* Secondary */
  --text-button-secondary: var(--text-primary);
  --bg-button-secondary: var(--alpha-0);
  --bg-button-secondary-hover: var(--utility-neutral-800);
  --bg-button-secondary-active: var(--utility-neutral-850);
  --bg-button-secondary-active-state: var(--utility-neutral-700);
  /* Pavel #123 — see theme-light. --border-primary measures 1.73:1 against the dark
     page, replacing a 15%-black shadow that was barely legible on a dark surface. */
  --border-button-secondary: var(--alpha-0);
  /* Soft */
  --text-button-soft: var(--text-primary);
  --bg-button-soft: var(--utility-neutral-800);
  --bg-button-soft-hover: var(--utility-neutral-700);
  --bg-button-soft-active: var(--utility-neutral-800);
  --border-button-soft: var(--alpha-0);
  /* Ghost */
  --text-button-ghost: var(--text-primary);
  --bg-button-ghost: var(--alpha-0);
  --bg-button-ghost-hover: var(--utility-neutral-800);
  --bg-button-ghost-active: var(--utility-neutral-850);
  --border-button-ghost: var(--alpha-0);
  /* Link */
  --text-button-link: var(--text-primary);
  --text-button-link-hover: var(--alpha-white-100);
  /* Light */
  --text-button-light: var(--text-primary);
  --bg-button-light: var(--utility-neutral-800);
  --bg-button-light-hover: var(--utility-neutral-700);
  --bg-button-light-active: var(--utility-neutral-600);
  --border-button-light: var(--border-primary);
  /* Input-style button */
  --text-button-input: var(--text-primary);
  --bg-button-input: var(--utility-neutral-800);
  --bg-button-input-hover: var(--utility-neutral-700);
  --bg-button-input-active: var(--utility-neutral-800);
  --border-button-input: var(--alpha-0);
  /* Topbar */
  --text-button-topbar: var(--text-primary);
  --bg-button-topbar: var(--alpha-0);
  --bg-button-topbar-hover: var(--utility-neutral-700);
  --bg-button-topbar-active: var(--utility-neutral-600);
  --border-button-topbar: var(--alpha-0);
  --border-button-topbar-hover: var(--alpha-0);
  /* Danger */
  --text-button-danger: var(--alpha-white-100);
  --bg-button-danger: var(--utility-red-600);
  --bg-button-danger-hover: var(--utility-red-500);
  --bg-button-danger-active: var(--utility-red-700);
  --border-button-danger: var(--alpha-0);
  --text-button-danger-outline: var(--utility-red-400);
  --bg-button-danger-outline: var(--alpha-0);
  --bg-button-danger-outline-hover: var(--alpha-red-900-50);
  --bg-button-danger-outline-active: var(--utility-red-950);
  --border-button-danger-outline: var(--alpha-0);
  /* Warning */
  --bg-button-warning: var(--utility-amber-600);
  --bg-button-warning-hover: var(--utility-amber-500);
  --bg-button-warning-active: var(--utility-amber-400);
  --text-button-warning: var(--utility-amber-950);
  --border-button-warning: var(--alpha-0);
  /* Warning outline */
  --text-button-warning-outline: var(--utility-amber-400);
  --bg-button-warning-outline: var(--alpha-0);
  --bg-button-warning-outline-hover: var(--alpha-amber-900-50);
  --bg-button-warning-outline-active: var(--utility-amber-950);
  --border-button-warning-outline: var(--alpha-0);
  /* Success outline */
  --text-button-success-outline: var(--utility-green-400);
  --bg-button-success-outline: var(--alpha-0);
  --bg-button-success-outline-hover: var(--alpha-green-900-50);
  --bg-button-success-outline-active: var(--utility-green-950);
  --border-button-success-outline: var(--alpha-0);
  /* Info */
  --bg-button-info: var(--utility-blue-600);
  --bg-button-info-hover: var(--utility-blue-500);
  --bg-button-info-active: var(--utility-blue-400);
  --text-button-info: var(--alpha-white-100);
  --border-button-info: var(--alpha-0);
  /* Info outline */
  --text-button-info-outline: var(--utility-blue-400);
  --bg-button-info-outline: var(--alpha-0);
  --bg-button-info-outline-hover: var(--alpha-blue-900-50);
  --bg-button-info-outline-active: var(--utility-blue-950);
  --border-button-info-outline: var(--alpha-0);
  /* Glass */
  --text-button-glass: var(--alpha-white-100);
  --bg-button-glass: var(--alpha-white-10);
  --border-button-glass: var(--alpha-white-20); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --text-button-glass-hover: var(--alpha-white-100);
  --bg-button-glass-hover: var(--alpha-white-20);
  --border-button-glass-hover: var(--alpha-white-30); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --text-button-glass-active: var(--alpha-white-100);
  --bg-button-glass-active: var(--alpha-white-15);
  --border-button-glass-active: var(--alpha-white-30); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  /* Grain */
  --opacity-button-grain: 0.25;
  /* Focus — DE-BRANDED from upstream blue. */
  --border-button-focus: var(--border-primary);
  --ring-button-focus-offset: var(--bg-body);
  /* Text */
  --text-input: var(--utility-neutral-50);
  --text-input-primary: var(--utility-neutral-50);
  --text-input-placeholder: var(--utility-neutral-500);
  --text-input-disabled: var(--utility-neutral-500);
  --text-input-tertiary: var(--utility-neutral-500);
  /* Readonly */
  --text-input-readonly: var(--text-input);
  /* Backgrounds
     #375 — deliberately UNCHANGED. Dark already had what light was missing: the
     field is a neutral fill recessed against its page (input 950 under a 900
     --bg-primary), chroma 0, blue on :focus only. Light was the outlier at pure
     white; it now matches this relationship with neutral-50 under a white page.
     Don't "fix" this to match some other rung without re-measuring both themes. */
  --bg-input: var(--utility-neutral-800);
  --bg-input-select: var(--utility-neutral-800);
  --bg-input-disabled: var(--utility-neutral-800);
  /* Soft variant */
  --bg-input-soft: var(--utility-neutral-800);
  --bg-input-soft-hover: var(--utility-neutral-750, var(--utility-neutral-800));
  --bg-input-soft-active: var(--utility-neutral-750, var(--utility-neutral-800));
  /* Borderless variant */
  --bg-input-borderless: var(--utility-neutral-850);
  --bg-input-borderless-hover: var(--utility-neutral-800);
  --bg-input-borderless-active: var(--utility-neutral-800);
  /* Ghost variant */
  --bg-input-ghost-hover: var(--utility-neutral-800);
  --bg-input-ghost-active: var(--utility-neutral-800);
  /* Readonly */
  --bg-input-readonly: var(--utility-neutral-800);
  /* Addon / group */
  --bg-input-addon: var(--utility-neutral-800);
  --bg-input-group-hover: var(--utility-neutral-750); /* hovered input inside input-group */
  --bg-input-group-focus: var(--utility-neutral-750); /* focused input inside input-group */
  /* ══ THE CONTROL-EDGE LADDER — see theme-light for the rule and the root cause ══
     PORTED from Reinly.Webapp theme-dark.css:493-495:
       --border-input        neutral-700
       --border-input-hover  neutral-600
       --border-input-active blue-400
     rest = GRAY -> hover = LIGHTER GRAY -> focus = BLUE. Note dark's resting edge is
     NEUTRAL, not blue: blue is reserved for focus in BOTH themes, so focus reads as a
     state change rather than a brighter shade of the resting colour. #368 had made
     dark's resting edge blue, which is what left focus with nowhere distinct to go. */
  /* tq-2736: enodia parity (Pavel 2026-08-18). 1.73:1 on --bg-primary, 1.46:1 on --bg-input — BELOW the WCAG 1.4.11 3:1
     floor; accepted tradeoff (Reinly's own figures, measured on the built CSS, tq-9102 A144). The RESTING edge only: focus,
     error and hover carry the >= 3:1 indicator (tests/field-focus-contrast.test.mjs). */
  --border-control: var(--utility-neutral-700);
  --border-control-hover: var(--utility-neutral-600);
  --border-control-focus: var(--utility-blue-400);
  --border-input: var(--border-control);
  --border-input-hover: var(--border-control-hover);
  --border-input-active: var(--border-control-focus);
  --border-input-disabled: var(--utility-neutral-700);
  --border-input-transparent: var(--alpha-0);
  /* Addon/group borders */
  --border-input-addon: var(--border-input);
  /* Stack */
  /* Outer outline */
  --border-input-stack: var(--border-input);
  --border-input-stack-hover: var(--border-input-hover);
  --border-input-stack-active: var(--border-input-active);
  /* The stack's inner dividers EQUAL the field border (one source; tq-9102 A144): an alias, so [data-contrast="high"]'s
     stronger --border-input reaches them too (it was the literal neutral-700, the same colour only in the default mode) */
  --border-input-stack-divider: var(--border-input);
  /* Semantic states */
  --border-input-error: var(--utility-red-500);
  --border-input-error-focus: var(--border-input-active);   /* tq-8912: FOCUS WINS while focused; validity stays visible through its icon + message, its border returns on blur */
  --border-input-success: var(--utility-green-700);   /* tq-8912 (isabella 900064880): the FIELD's valid border only; vs the ink focus 4.54, vs card 3.37 / body 3.63 (green-500 left focus at 2.03) */
  --border-input-success-focus: var(--border-input-active);   /* tq-8912: FOCUS WINS while focused; validity stays visible through its icon + message, its border returns on blur */
  /* Warning / Info */
  --border-input-warning: var(--utility-yellow-500);
  --border-input-warning-focus: var(--border-input-active);   /* tq-8912: FOCUS WINS while focused; validity stays visible through its icon + message, its border returns on blur */
  --border-input-info: var(--utility-blue-500);
  --border-input-info-focus: var(--border-input-active);   /* tq-8912: FOCUS WINS while focused; validity stays visible through its icon + message, its border returns on blur */
  /* Group Validation */
  --border-input-group-error: var(--border-input-error);
  --border-input-group-error-focus: var(--border-input-error-focus);
  /* Focus helpers */
  --border-input-focus: var(--border-input-active);
  --ring-input-focus-offset: var(--bg-body);
  /* Forms */
  /* Labels */
  --text-form-label: var(--utility-neutral-400);
  --text-form-label-strong: var(--utility-neutral-300);
  --text-form-label-muted: var(--utility-neutral-500);
  --text-form-label-required: var(--utility-red-400);
  /* Help / meta — WCAG AA (DR-002, dark side). Same #5607 constraint that moved
     --text-quaternary off neutral-500: on dark surfaces neutral-500 is only 4.18:1 on
     --bg-input (n950), 3.79:1 on --bg-primary (n900) and 3.19:1 on --bg-input-soft
     (n800), and neutral-600 was far worse at 1.94:1. neutral-400 is the dimmest step
     that clears 4.5:1 on ALL THREE input surfaces (5.83:1 worst-case), so hint and
     -muted necessarily collapse onto it here — the AA floor compresses the usable
     range on dark, and a hierarchy step is not worth an unreadable one. Light keeps
     its two distinct tiers (see theme-light.css). */
  --text-form-hint: var(--utility-neutral-500);
  --text-form-hint-muted: var(--utility-neutral-600);
  /* Messages */
  --text-form-error: var(--utility-red-400);
  --text-form-success: var(--utility-green-400);
  --text-form-warning: var(--utility-yellow-400);
  --text-form-info: var(--utility-blue-400);
  /* Info button */
  --text-form-info-btn: var(--utility-neutral-500);
  --bg-form-info-btn-hover: var(--utility-neutral-800);
  --bg-form-info-btn-active: var(--utility-neutral-700);
  --border-form-info-btn: var(--alpha-0);
  /* Validation borders */
  --border-form-error: var(--utility-red-500);
  --border-form-success: var(--utility-green-500);
  --border-form-warning: var(--utility-yellow-500);
  --border-form-info: var(--utility-blue-500);
  /* Layout helpers */
  --border-form-divider: var(--utility-neutral-800);
  /* Theme tokens – Checkbox & Toggle V2 */
  /* Shared label/meta */
  --text-check-label: var(--utility-neutral-50);
  --text-check-label-muted: var(--utility-neutral-500);
  /* Checkbox tokens */
  /* text / icon */
  --text-checkbox: var(--utility-neutral-50);
  --text-checkbox-checked: var(--utility-neutral-950);
  --text-checkbox-disabled: var(--utility-neutral-600);
  /* backgrounds */
  --bg-checkbox: var(--alpha-0);
  --bg-checkbox-active: var(--utility-neutral-800);
  /* DE-BRANDED from upstream blue — inverted white fill, dark mark (see checkbox.css). */
  --bg-checkbox-checked: var(--utility-neutral-100);
  --bg-checkbox-disabled: var(--utility-neutral-850);
  /* Disabled checked */
  --bg-checkbox-disabled-checked: var(--utility-neutral-700);
  /* borders */
  --border-checkbox: var(--utility-neutral-600);
  --border-checkbox-hover: var(--utility-neutral-500);
  --border-checkbox-active: var(--utility-neutral-400);
  /* DE-BRANDED from upstream blue. */
  --border-checkbox-checked: var(--utility-blue-500);      /* reinly dark:569 */
  --border-checkbox-disabled: var(--utility-neutral-700);
  /* Disabled checked */
  --border-checkbox-disabled-checked: var(--utility-neutral-700);
  /* semantic */
  --border-checkbox-error: var(--utility-red-500);
  --border-checkbox-success: var(--utility-green-500);
  /* Toggle tokens */
  /* track */
  --bg-toggle-track: var(--utility-neutral-700);
  --bg-toggle-track-hover: var(--utility-neutral-600);
  --bg-toggle-track-checked: var(--utility-blue-500);
  --bg-toggle-track-disabled: var(--utility-neutral-700);
  /* border */
  --border-toggle-track: var(--alpha-0);
  /* Toggle intents */
  --bg-toggle-track-success: var(--utility-green-500);
  --bg-toggle-track-warning: var(--utility-amber-500);
  --bg-toggle-track-danger: var(--utility-red-500);
  --bg-toggle-track-info: var(--utility-blue-500);
  /* Toggle thumb icon (when using .toggle-icon) */
  --text-toggle-thumb-icon: var(--utility-neutral-500);
  --text-toggle-thumb-icon-checked: var(--utility-blue-600);
  /* Color picker tokens */
  --border-color-swatch: var(--alpha-white-20);
  /* 3c: selection ring de-branded blue -> UUI brand accent (fallback for .color-none). */
  --text-color-swatch-check: var(--alpha-white-100);
  /* Radio tokens */
  /* text (kept for consistency) */
  --text-radio: var(--utility-neutral-50);
  /* backgrounds */
  --bg-radio: var(--alpha-0);
  --bg-radio-active: var(--utility-neutral-800);
  --bg-radio-disabled: var(--utility-neutral-800);
  /* dot */
  --bg-radio-dot: var(--alpha-0);
  --bg-radio-dot-checked: var(--utility-neutral-50);
  --bg-radio-dot-disabled: var(--utility-neutral-600);
  /* borders */
  --border-radio: var(--utility-neutral-600);
  --border-radio-hover: var(--utility-neutral-500);
  --border-radio-active: var(--utility-neutral-400);
  --border-radio-checked: var(--utility-neutral-50);
  --border-radio-disabled: var(--utility-neutral-700);
  /* variant borders */
  --border-radio-soft: var(--utility-neutral-700);
  --border-radio-ghost: var(--utility-neutral-700);
  /* semantic */
  --border-radio-error: var(--utility-red-500);
  --border-radio-success: var(--utility-green-500);
  --bg-radio-dot-error: var(--utility-red-400);
  --bg-radio-dot-success: var(--utility-green-400);
  /* Stepper / Wizard */
  /* Step indicator (default) */
  --text-step-indicator: var(--utility-neutral-200);
  --bg-step-indicator: var(--utility-neutral-900);
  --border-step-indicator: var(--utility-neutral-700);
  --shadow-step-indicator: var(--shadow-sm);
  /* Titles */
  --text-step-title: var(--utility-neutral-50);
  --text-step-subtitle: var(--utility-neutral-400);
  /* Connector */
  --bg-step-connector: var(--utility-neutral-700);
  --bg-step-connector-fill: var(--utility-blue-500);
  /* Hover (default — dark indicator) */
  --bg-step-hover: var(--utility-neutral-800);
  --bg-step-active: var(--utility-neutral-700);
  /* Hover (current/completed — blue indicator, lighten like btn-primary) */
  --bg-step-current-hover: var(--utility-blue-500);
  --bg-step-current-active: var(--utility-blue-700);
  --bg-step-completed-hover: var(--utility-blue-500);
  --bg-step-completed-active: var(--utility-blue-700);
  /* Current */
  --text-step-current: var(--alpha-white-100);
  --bg-step-current: var(--utility-blue-600);
  --border-step-current: var(--alpha-0);
  --text-step-title-current: var(--utility-neutral-50);
  /* Completed */
  --text-step-completed: var(--alpha-white-100);
  --bg-step-completed: var(--utility-blue-600);
  --border-step-completed: var(--alpha-0);
  /* Disabled */
  --text-step-disabled: var(--utility-neutral-600);
  --bg-step-disabled: var(--utility-neutral-900);
  --border-step-disabled: var(--utility-neutral-800);
  /* Error */
  --text-step-error: var(--alpha-white-100);
  --bg-step-error: var(--utility-red-500);
  --border-step-error: var(--alpha-0);
  --text-step-title-error: var(--utility-red-400);
  /* Success */
  --text-step-success: var(--alpha-white-100);
  --bg-step-success: var(--utility-green-500);
  --border-step-success: var(--alpha-0);
  /* Warning */
  --text-step-warning: var(--alpha-white-100);
  --bg-step-warning: var(--utility-amber-500);
  --border-step-warning: var(--alpha-0);
  --text-step-title-warning: var(--utility-amber-300);
  /* Skipped */
  --text-step-skipped: var(--utility-neutral-500);
  --bg-step-skipped: var(--utility-neutral-850);
  --border-step-skipped: var(--utility-neutral-800);
  /* In-progress halo */
  --halo-step-in-progress: oklch(70% 0.13 250 / 0.28);
  /* Optional / locked / AI badges */
  --bg-step-badge-optional: var(--utility-neutral-800);
  --text-step-badge-optional: var(--utility-neutral-300);
  --bg-step-badge-locked: var(--utility-neutral-800);
  --text-step-badge-locked: var(--utility-neutral-400);
  --bg-step-badge-ai: oklch(30% 0.10 250 / 0.45);
  --text-step-badge-ai: var(--utility-blue-300);
  /* Pill variant */
  --bg-step-pill: var(--utility-neutral-850);
  --text-step-pill: var(--utility-neutral-200);
  --border-step-pill: var(--utility-neutral-800);
  --bg-step-pill-current: var(--utility-blue-500);
  --text-step-pill-current: var(--alpha-white-100);
  --bg-step-pill-completed: var(--utility-green-500);
  --text-step-pill-completed: var(--alpha-white-100);
  /* Card variant */
  --bg-step-card: var(--utility-neutral-900);
  --border-step-card: var(--utility-neutral-800);
  --shadow-step-card: 0 1px 2px oklch(0% 0 0 / 0.35);
  --shadow-step-card-current: 0 0 0 2px var(--utility-blue-400), 0 6px 14px oklch(0% 0 0 / 0.45);
  /* Chevron / breadcrumb variant */
  --bg-step-chevron: var(--utility-neutral-850);
  --bg-step-chevron-current: oklch(28% 0.10 250 / 0.55);
  --bg-step-chevron-completed: oklch(28% 0.10 145 / 0.55);
  --bg-step-chevron-error: oklch(28% 0.13 30  / 0.55);
  --text-step-chevron: var(--utility-neutral-200);
  --text-step-chevron-current: var(--utility-blue-300);
  --text-step-chevron-completed: var(--utility-green-300);
  --text-step-chevron-error: var(--utility-red-300);
  /* Wizard shell */
  --shadow-wizard-floating: 0 1px 2px oklch(0% 0 0 / 0.35);
  /* Dropdown */
  /* Base menu */
  --bg-dropdown: var(--utility-neutral-850);
  --border-dropdown: var(--utility-neutral-700);
  --shadow-dropdown: var(--shadow-lg);
  --blur-dropdown-backdrop: none;
  --opacity-dropdown-grain: 0;
  /* Text */
  --text-dropdown: var(--utility-neutral-100);
  --text-dropdown-item: var(--utility-neutral-100);
  --text-dropdown-icon: var(--utility-neutral-400);
  --text-dropdown-end: var(--utility-neutral-400);
  --text-dropdown-title: var(--utility-neutral-400);
  --text-dropdown-hint: var(--utility-neutral-500);
  /* Hover / active */
  --bg-dropdown-hover: var(--utility-neutral-700);
  --bg-dropdown-active: var(--utility-neutral-800);
  /* Divider */
  --border-dropdown-divider: var(--utility-neutral-800);
  /* Selected */
  --bg-dropdown-selected: var(--utility-neutral-800);
  --text-dropdown-selected: var(--utility-neutral-50);
  /* Danger */
  --text-dropdown-danger: var(--utility-red-400);
  --bg-dropdown-danger-hover: var(--alpha-red-900-50);
  /* Glass */
  /* Glass base */
  --bg-dropdown-glass: var(--alpha-neutral-900-70);
  --border-dropdown-glass: var(--alpha-white-10);
  --shadow-dropdown-glass: var(--shadow-lg);
  --blur-dropdown-glass: blur(20px);
  --opacity-dropdown-glass-grain: 0.15;
  /* Glass text */
  --text-dropdown-glass: var(--utility-neutral-50);
  --text-dropdown-item-glass: var(--utility-neutral-50);
  --text-dropdown-icon-glass: var(--utility-neutral-300);
  --text-dropdown-end-glass: var(--utility-neutral-400);
  /* Glass hover / active */
  --bg-dropdown-glass-hover: var(--alpha-neutral-800-60);
  --bg-dropdown-glass-active: var(--alpha-neutral-700-60);
  /* Glass selected */
  --bg-dropdown-selected-glass: var(--alpha-neutral-800-60);
  --text-dropdown-selected-glass: var(--utility-neutral-50);
  /* Glass danger */
  --text-dropdown-danger-glass: var(--utility-red-400);
  --bg-dropdown-danger-hover-glass: var(--alpha-red-500-20, rgba(239,68,68,0.2));
  /* Table */
  /* Container / Surface */
  --bg-table: var(--utility-neutral-850);
  --bg-table-surface: var(--utility-neutral-850);
  --border-table-container: var(--utility-neutral-800);
  --radius-table: var(--radius-md, 0.375rem);
  /* Header — Pavel #139, "a bit darker in darkmode, the contrast is a little too
     aggressive". Measured all three relationships before moving anything:
       header TEXT vs header surface  10.21  (dimmer than row text at 16.44 — not it)
       header SURFACE vs row surface   1.185 (this one)
       row text vs row surface        16.44  (reference)
     The surface is the aggressor, and the light/dark comparison proves it: in LIGHT
     --bg-table-header is --bg-primary, identical to the row surface, so there is no
     header band at all (ratio 1.000) — the header reads purely through weight. Dark
     was the only theme painting a lifted band, which is what "glows" against the
     rows. One rung down the neutral ramp (800 -> 850) narrows the band toward the
     light-theme behaviour he already praised in #124 without erasing it. LIGHT IS
     UNTOUCHED — its token is --bg-primary and never referenced this one. */
  /* #161 — REVERTED to neutral-850 after SAMPLING his reference image, which
     disproved the guess I had made from it.
     I had taken "not as bright" to mean the header band should go away, and moved
     this to neutral-900 (header == rows, ratio 1.000). The reference says otherwise:
       reference header band  #191919
       reference rows/canvas  #111111
       reference header vs rows = 1.074
     The reference KEEPS a band, and 1.074 is what neutral-850 already produces here
     (#1e1e1e on #171717 = 1.075 — a match to one thousandth). #139 had already set
     the correct RELATIONSHIP; neutral-900 broke it.
     What is genuinely brighter in ours is the ABSOLUTE level, and it is not this
     token: his canvas/rows are #111111 where ours are #171717. The header only looks
     bright because the whole dark surface underneath it is lighter than his
     reference. That is --canvas-primary / --bg-primary, a theme-wide value, not the
     table's header — see the report. */
  --bg-table-header: var(--utility-neutral-800);
  --bg-table-header-hover: var(--alpha-neutral-700-50);
  /* Active (sorted) */
  --bg-table-header-active: var(--utility-neutral-800);
  --text-table-header-active: var(--text-primary);
  --shadow-table-header-active: var(--shadow-table-header-pressed);
  /* Pressed (mousedown on .sort) */
  --bg-table-header-pressed: var(--bg-secondary);
  /* Dark “pressed” reads better with a subtle inset shadow */
  --shadow-table-header-pressed: inset 0 1px 0 rgba(0,0,0,.35);
  --bg-table-header-sticky: var(--bg-table-header);
  --text-table-header: var(--text-secondary);
  --icon-table-header: var(--text-tertiary);
  --border-table-header: var(--border-primary);
  /* Body / Footer Text */
  --text-table: var(--text-primary);
  --text-table-active: var(--text-primary);
  --text-table-footer: var(--text-secondary-alt);
  --text-table-disabled: var(--text-disabled);
  /* Row States */
  /* In dark mode, hover usually needs to be a *slightly lighter* layer */
  --bg-table-row-hover: var(--alpha-neutral-700-10);
  --bg-table-row-zebra: var(--bg-primary);
  --bg-table-row-selected: var(--bg-info-subtle);
  --bg-table-row-active: var(--bg-secondary);
  /* Focus within row */
  --bg-table-row-focus: var(--bg-info-subtle);
  --ring-table-row-focus: 0 0 0 2px var(--border-info-subtle);
  /* Disabled */
  --bg-table-row-disabled: var(--bg-primary);
  /* Intent rows */
  --bg-table-row-success: var(--bg-success-subtle);
  /* Softened — see theme-light.css. Dark --bg-warning-subtle (yellow-900) is heavily
     saturated; mix more surface in so the rate "misses RDD" rows stay subtle. */
  --bg-table-row-warning: var(--bg-warning-subtle);
  --bg-table-row-danger: var(--bg-danger-subtle);
  --text-table-row-success: var(--text-success-solid);
  --text-table-row-warning: var(--text-warning-solid);
  --text-table-row-danger: var(--text-danger-solid);
  /* Row Sweep — transient feedback.
     Bumped from 0.12 → 0.28 in dark theme; the previous opacity was barely
     visible on dark card surfaces (~5-6% perceived contrast). 0.28 gives a
     clear flash that's still translucent enough to read as a sweep, not a fill. */
  --bg-row-sweep-success: rgba(74, 222, 128, 0.12);
  --bg-row-sweep-info: rgba(96, 165, 250, 0.12);
  --bg-row-sweep-warning: rgba(251, 191, 36, 0.12);
  --bg-row-sweep-danger: rgba(248, 113, 113, 0.12);
  /* Cell Micro-states (optional) */
  --bg-table-cell-hover: var(--bg-primary-hover);
  --bg-table-cell-focus: var(--bg-info-subtle);
  --ring-table-cell-focus: 0 0 0 2px var(--border-info-subtle);
  /* Hover opt-out (td/th.no-hover while row hovered) */
  --bg-table-cell-no-hover: var(--bg-table);
  /* Footer */
  --bg-table-footer: var(--utility-neutral-850);
  --bg-table-footer-sticky: var(--utility-neutral-850);
  /* Borders */
  --border-table: var(--border-primary-subtle);
  --border-table-grid: var(--border-primary);
  --border-table-grid-strong: var(--border-primary-alt);
  --border-table-sticky-divider: var(--border-primary-solid);
  /* Sticky Columns */
  --bg-table-sticky: var(--bg-table);
  --bg-table-sticky-hover: var(--bg-table-row-hover);
  --bg-table-sticky-selected: var(--bg-table-row-selected);
  --bg-table-sticky-active: var(--bg-table-row-active);
  --bg-table-sticky-focus: var(--bg-table-row-focus);
  /* Sticky Shadows / Separators */
  --shadow-table-sticky-header: inset 0 -1px 0 var(--border-table-header);
  --shadow-table-sticky-footer: inset 0 1px 0 var(--border-table);
  --shadow-table-sticky-col: inset -1px 0 0 var(--border-table-sticky-divider);
  --shadow-table-sticky-col-right: inset 1px 0 0 var(--border-table-sticky-divider);
  /* Column Hover (optional / JS) */
  --bg-table-col-hover: var(--bg-info-subtle);
  /* Editable Controls Inside Table */
  --bg-table-control: var(--alpha-0);
  --bg-table-control-focus: var(--bg-input-select);
  --border-table-control: var(--border-table);
  /* Panel surfaces (powershell frame bg) */
  --bg-panel: var(--utility-neutral-850); /* tq-8176: the served app's value (reinly.webapp @ 09387252) */
  --bg-panel-raised: var(--utility-neutral-800);
  --bg-panel-sunken: var(--utility-neutral-900);
  --border-panel: var(--alpha-neutral-700-50);
  /* Card */
  /* Base card */
  --bg-card: var(--utility-neutral-850);
  --bg-card-alt: var(--utility-neutral-900);
  /* Opaque base surfaces — card-equivalent elevated surface + page/body bg.
     Must live in the base theme so plain theme-dark resolves them; the
     theme-mica-dark block below overrides both with translucent glass. (#5609) */
  --bg-surface: var(--bg-card);
  --bg-body: var(--canvas-primary);
  /* App shell frame — see theme-light. Painted with --bg-primary directly, which is
     the same neutral-900 step the shell already held, so dark renders as before. */
  /* Foreground on saturated / solid colour chips, dots, avatars (theme-invariant white). (#5608) */
  --text-on-solid: var(--alpha-white-100);
  --bg-card-hover: var(--utility-neutral-800);
  --bg-card-pressed: var(--utility-neutral-750, var(--utility-neutral-800));
  --text-card: var(--text-primary);
  --border-card: var(--alpha-neutral-700-50);
  --border-card-active: var(--border-secondary);
  --shadow-card: var(--shadow-sm);
  --shadow-card-active: var(--shadow-sm);
  --shadow-card-pressed: inset 0 1px 0 rgba(255,255,255,.04);
  /* Backdrop + Grain */
  --blur-card-backdrop: none;
  --opacity-card-grain: 0;
  /* Dividers + Focus */
  --border-card-divider: var(--border-primary-subtle);
  --border-card-focus: var(--alpha-0);
  --ring-card-focus: var(--alpha-0);
  /* Disabled */
  --opacity-card-disabled: 0.55;
  --filter-card-disabled: none;
  /* Sizing */
  --radius-card-sm: var(--radius-lg, 0.5rem);
  --radius-card-md: var(--radius-xl, 0.75rem);
  --radius-card-lg: var(--radius-2xl, 1rem);
  /* Flat */
  --bg-card-flat: var(--utility-neutral-900);
  --border-card-flat: var(--border-primary-subtle);
  --opacity-card-flat-grain: 0;
  /* Light */
  --bg-card-light: var(--utility-neutral-800);
  --border-card-light: var(--border-primary-subtle);
  --opacity-card-light-grain: 0;
  /* Soft */
  --bg-card-soft: var(--utility-neutral-850, var(--utility-neutral-800));
  --border-card-soft: var(--alpha-0);
  /* Ghost */
  --bg-card-ghost: var(--alpha-0);
  --border-card-ghost: var(--border-primary-subtle);
  --shadow-card-ghost: none;
  /* Strong outline */
  --border-card-strong: var(--border-primary-solid);
  /* Mini */
  --bg-card-mini: var(--bg-card);
  --border-card-mini: var(--border-card);
  --text-card-mini: var(--text-card);
  --opacity-card-mini-grain: 0;
  /* Glass */
  --bg-glass-card: var(--alpha-white-10);
  --border-glass-card: var(--alpha-white-10); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --text-glass-card: var(--text-primary);
  --blur-glass-card: blur(20px);
  --shadow-glass-card: var(--shadow-md);
  --opacity-glass-card-grain: 0.12;
  --opacity-glass-grain-sm: 0.12;
  --opacity-glass-grain-md: 0.16;
  --opacity-glass-grain-lg: 0.20;
  --opacity-glass-grain-xl: 0.25;
  /* Glass blur per size */
  --blur-glass-card-sm: blur(10px);
  --blur-glass-card-md: blur(16px);
  --blur-glass-card-lg: blur(22px);
  --blur-glass-card-xl: blur(28px);
  /* List */
  /* Container */
  --bg-list: var(--alpha-0);
  --border-list: var(--border-primary-subtle);
  --radius-list: var(--radius-md, 0.375rem);
  /* Header */
  --text-list-header: var(--text-secondary);
  --border-list-header: var(--border-primary-subtle);
  --bg-list-header: var(--utility-neutral-850, var(--utility-neutral-800));
  /* Items */
  --bg-list-item: var(--bg-list);
  --bg-list-item-hover: var(--utility-neutral-800);
  --bg-list-item-active: var(--utility-neutral-800);
  /* 3c DERIVE: selection reads on the UUI brand accent (not info-blue) so it
     stays distinct from the neutral .active row AND from .item-info intent. */
  --bg-list-item-selected: var(--bg-info-subtle);
  --bg-list-item-focus: var(--bg-info-subtle);
  --text-list-item: var(--text-primary);
  --text-list-item-title: var(--text-primary);
  --text-list-item-subtitle: var(--text-tertiary);
  --text-list-item-leading: var(--text-tertiary);
  --text-list-item-trailing: var(--text-tertiary);
  /* Dividers */
  --border-list-divider: var(--border-primary-subtle);
  --space-list-inset: 3rem;
  /* Active Indicator (optional) */
  --size-list-indicator: 3px;
  /* 3c DERIVE: active-edge bar + focus ring resolve through the UUI brand
     accent (--border-focus), matching the sibling table's restrained accent. */
  --bg-list-indicator: var(--bg-info);
  /* Focus ring — single 2px brand-accent ring, no halo (FAN-OUT-RULES §3) */
  --ring-list-item-focus: 0 0 0 2px var(--border-info);
  /* Density */
  --space-list-item-x: 1rem;
  --space-list-item-y: 0.5rem;
  --space-list-item-y-compact: 0.375rem;
  --space-list-item-y-relaxed: 0.75rem;
  /* Disabled */
  --opacity-list-item-disabled: 0.55;
  --bg-list-item-disabled: var(--utility-neutral-850, var(--utility-neutral-800));
  --text-list-item-disabled: var(--text-disabled);
  /* Intent items */
  --bg-list-item-success: var(--bg-success-subtle);
  --bg-list-item-warning: var(--bg-warning-subtle);
  --bg-list-item-danger: var(--bg-danger-subtle);
  --bg-list-item-info: var(--bg-info-subtle);
  /* Intent indicator bars (left edge) */
  --bg-list-indicator-success: var(--utility-green-400);
  --bg-list-indicator-warning: var(--utility-amber-400);
  --bg-list-indicator-danger:  var(--utility-red-400);
  --bg-list-indicator-info:    var(--utility-blue-400);
  /* New-item flash */
  --bg-list-item-new-flash: oklch(35% 0.10 90 / 0.30);
  /* Skeleton shimmer */
  --bg-list-item-skeleton:         var(--utility-neutral-800);
  --bg-list-item-skeleton-shimmer: linear-gradient(115deg, transparent 30%, oklch(100% 0 0 / 0.10) 50%, transparent 70%);
  /* Description / meta text */
  --text-list-item-description: var(--utility-neutral-300);
  --text-list-item-meta:        var(--utility-neutral-500);
  --text-list-item-kbd:         var(--utility-neutral-200);
  --bg-list-item-kbd:           var(--utility-neutral-800);
  --border-list-item-kbd:       var(--utility-neutral-700);
  /* Card variant surface */
  --bg-list-card:            var(--utility-neutral-900);
  --border-list-card:        var(--utility-neutral-800);
  --shadow-list-card:        0 1px 2px oklch(0% 0 0 / 0.35);
  --shadow-list-card-hover:  0 4px 12px oklch(0% 0 0 / 0.45);
  --shadow-list-card-active: 0 0 0 2px var(--border-focus);
  /* Section header (rich variant) */
  --bg-list-section-header:   var(--utility-neutral-850);
  --text-list-section-header: var(--utility-neutral-300);
  /* Drag affordance */
  --text-list-handle:        var(--utility-neutral-500);
  --text-list-handle-hover:  var(--utility-neutral-200);
  /* Sizes — vertical paddings */
  --space-list-item-y-xs: 0.25rem;
  --space-list-item-y-sm: 0.375rem;
  --space-list-item-y-md: 0.5rem;
  --space-list-item-y-lg: 0.75rem;
  --space-list-item-y-xl: 1rem;

  /* Select Option (option-card / selection list)
     3c: default selected accent resolves through the UUI brand ramp
     (brand-500 fill — WHITELIST #1b signature step, same as light / brand-400 border
     to match --border-focus on dark). See FAN-OUT-RULES §3 — the accent tracks the
     brand ramp, never a hand-picked hue.
     HOVER DARKENS (500 → 600), against dark's usual lighten-on-hover convention: the
     selected row carries a WHITE label, and lifting to brand-400 would drop it to
     3.01:1. Darkening takes it to 6.08:1. Same reasoning as --bg-button-primary below. */
  --bg-select-option: var(--utility-neutral-800);
  --bg-select-option-hover: var(--utility-neutral-750);
  --bg-select-option-selected: var(--bg-button-primary); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --bg-select-option-selected-hover: var(--bg-button-primary-hover); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --border-select-option: var(--utility-neutral-700);
  --border-select-option-hover: var(--utility-neutral-600);
  --border-select-option-selected: var(--bg-button-primary); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --text-select-option: var(--text-primary);
  --text-select-option-subtitle: var(--text-tertiary);
  --text-select-option-trailing: var(--text-secondary);
  --text-select-option-selected: var(--alpha-white-100);
  --text-select-option-selected-subtitle: var(--alpha-white-70);
  --text-select-option-selected-trailing: var(--alpha-white-80);
  --text-select-option-disabled: var(--text-disabled);
  --shadow-select-option: none;
  --shadow-select-option-hover: var(--shadow-xs);
  /* Group header / divider */
  --text-select-option-header: var(--text-tertiary);
  --border-select-option-divider: var(--border-secondary);
  /* Tone variants — `accent` is the default tone, now on the brand ramp. */
  --border-select-option-accent: var(--bg-button-primary); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --bg-select-option-accent: var(--bg-button-primary); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --border-select-option-success: var(--utility-green-400);
  --bg-select-option-success: var(--utility-green-500);
  --border-select-option-warning: var(--utility-amber-400);
  --bg-select-option-warning: var(--utility-amber-500);
  --border-select-option-danger: var(--utility-red-400);
  --bg-select-option-danger: var(--utility-red-500);
  /* Selected option tinted backgrounds — semi-transparent so they read on dark
     surfaces. (Previously referenced undefined --alpha-*-500-12 tokens, which
     resolved to nothing and left the dark tint invisible; color-mix on the
     semantic hue tokens fixes it while keeping token discipline.) */
  --bg-select-option-tinted: color-mix(in oklch, var(--utility-emerald-500) 16%, transparent); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --bg-select-option-tinted-accent: color-mix(in oklch, var(--utility-emerald-500) 16%, transparent); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --bg-select-option-tinted-success: color-mix(in oklch, var(--utility-green-500) 15%, transparent);
  --bg-select-option-tinted-warning: color-mix(in oklch, var(--utility-amber-500) 15%, transparent);
  --bg-select-option-tinted-danger: color-mix(in oklch, var(--utility-red-500) 15%, transparent);

  /* Tree */
  --bg-tree-surface: var(--alpha-0);
  --text-tree: var(--text-primary);
  --bg-tree-row: var(--alpha-0);
  --bg-tree-row-hover: var(--utility-neutral-800);
  --bg-tree-row-active: var(--utility-neutral-800);
  --text-tree-row-active: var(--text-primary);
  --bg-tree-row-selected: var(--utility-neutral-800);
  --text-tree-row-selected: var(--text-primary);
  --bg-tree-row-disabled: var(--utility-neutral-850, var(--utility-neutral-800));
  --text-tree-row-disabled: var(--text-disabled);
  --opacity-tree-disabled: 0.55;
  --bg-tree-line: var(--utility-neutral-700);
  --opacity-tree-line: 0.8;
  --bg-tree-toggle: var(--utility-neutral-800);
  --border-tree-toggle: var(--utility-neutral-700);
  --text-tree-toggle: var(--text-tertiary);
  --text-tree-icon: var(--text-tertiary);
  --text-tree-label: var(--text-primary);
  --text-tree-meta: var(--text-tertiary);
  --text-tree-actions: var(--text-tertiary);
  --ring-tree-row: var(--alpha-0);
  --radius-tree-row: var(--radius-md, 0.5rem);
  /* Badge */
  /* Base */
  --text-badge: var(--utility-neutral-200);
  --text-badge-icon: var(--utility-neutral-300);
  --bg-badge: var(--utility-neutral-800);
  --bg-badge-hover: var(--utility-neutral-700);
  --bg-badge-pressed: var(--utility-neutral-750, var(--utility-neutral-700));
  --shadow-badge-pressed: inset 0 1px 0 rgba(0,0,0,.4);
  /* White / Alt */
  --bg-badge-alt: var(--utility-neutral-900);
  /* Close */
  --text-badge-close: var(--utility-neutral-400);
  --text-badge-close-hover: var(--utility-neutral-100);
  --bg-badge-close-hover: var(--utility-neutral-700);
  --bg-badge-close-pressed: var(--utility-neutral-750, var(--utility-neutral-700));
  /* Solid */
  --text-badge-solid: var(--alpha-white-100);
  --bg-badge-solid: var(--utility-neutral-600);
  --bg-badge-solid-hover: var(--utility-neutral-500);
  --bg-badge-solid-pressed: var(--utility-neutral-550, var(--utility-neutral-500));
  /* Outline */
  --bg-badge-outline: var(--alpha-0);
  --border-badge-outline: var(--utility-neutral-600);
  --text-badge-outline: var(--utility-neutral-200);
  --bg-badge-outline-hover: var(--utility-neutral-800);
  --bg-badge-outline-pressed: var(--utility-neutral-750, var(--utility-neutral-700));
  /* Ghost */
  --text-badge-ghost: var(--utility-neutral-300);
  --bg-badge-ghost-hover: var(--utility-neutral-800);
  --bg-badge-ghost-pressed: var(--utility-neutral-750, var(--utility-neutral-700));
  /* Intent: semantic */
  /* Danger */
  --text-badge-danger: var(--utility-red-300);
  --bg-badge-danger: var(--utility-red-950);
  --bg-badge-danger-hover: var(--utility-red-900);
  --bg-badge-danger-pressed: var(--utility-red-850, var(--utility-red-900));
  /* Warning */
  --text-badge-warning: var(--utility-yellow-300);
  --bg-badge-warning: var(--utility-yellow-950);
  --bg-badge-warning-hover: var(--utility-yellow-900);
  --bg-badge-warning-pressed: var(--utility-yellow-850, var(--utility-yellow-900));
  /* Success */
  --text-badge-success: var(--utility-green-300);
  --bg-badge-success: var(--utility-green-950);
  --bg-badge-success-hover: var(--utility-green-900);
  --bg-badge-success-pressed: var(--utility-green-850, var(--utility-green-900));
  /* Info */
  --text-badge-info: var(--utility-blue-300);
  --bg-badge-info: var(--utility-blue-950);
  --bg-badge-info-hover: var(--utility-blue-900);
  --bg-badge-info-pressed: var(--utility-blue-850, var(--utility-blue-900));
  /* Indigo */
  --text-badge-indigo: var(--utility-indigo-300);
  --bg-badge-indigo: var(--utility-indigo-950);
  --bg-badge-indigo-hover: var(--utility-indigo-900);
  --bg-badge-indigo-pressed: var(--utility-indigo-850, var(--utility-indigo-900));
  /* Purple */
  --text-badge-purple: var(--utility-purple-300);
  --bg-badge-purple: var(--utility-purple-950);
  --bg-badge-purple-hover: var(--utility-purple-900);
  --bg-badge-purple-pressed: var(--utility-purple-850, var(--utility-purple-900));
  /* Pink */
  --text-badge-pink: var(--utility-pink-300);
  --bg-badge-pink: var(--utility-pink-950);
  --bg-badge-pink-hover: var(--utility-pink-900);
  --bg-badge-pink-pressed: var(--utility-pink-850, var(--utility-pink-900));
  /* Teal */
  --text-badge-teal: var(--utility-teal-300);
  --bg-badge-teal: var(--utility-teal-950);
  --bg-badge-teal-hover: var(--utility-teal-900);
  --bg-badge-teal-pressed: var(--utility-teal-850, var(--utility-teal-900));
  /* Mint */
  --text-badge-mint: var(--utility-mint-300);
  --bg-badge-mint: var(--utility-mint-950);
  --bg-badge-mint-hover: var(--utility-mint-900);
  --bg-badge-mint-pressed: var(--utility-mint-850, var(--utility-mint-900));
  /* Notification */
  --text-badge-notification: var(--alpha-white-100);
  --bg-badge-notification: var(--utility-red-600);
  /* Dot/status */
  --text-badge-status: var(--utility-neutral-200);
  --text-badge-dot: var(--utility-neutral-200);
  --bg-badge-dot: var(--utility-neutral-800);
  /* Dots */
  --dot-light: var(--utility-neutral-400);
  --dot-danger: var(--utility-red-500);
  --dot-warning: var(--utility-yellow-500);
  --dot-success: var(--utility-green-500);
  --dot-info: var(--utility-blue-500);
  --dot-indigo: var(--utility-indigo-500);
  --dot-purple: var(--utility-purple-500);
  --dot-pink: var(--utility-pink-500);
  --dot-teal: var(--utility-teal-500);
  --dot-mint: var(--utility-mint-500);
  /* Avatar */
  /* Base */
  --text-avatar: var(--text-primary);
  --bg-avatar: var(--utility-neutral-700);
  --ring-avatar: var(--border-primary);
  /* Style variants */
  --bg-avatar-soft: var(--utility-neutral-800);
  --text-avatar-soft: var(--text-primary);
  --bg-avatar-solid: var(--utility-neutral-950);
  --text-avatar-solid: var(--alpha-white-100);
  --text-avatar-outline: var(--text-primary);
  --border-avatar-outline: var(--border-primary);
  --text-avatar-ghost: var(--text-primary);
  /* Presence badge */
  --bg-avatar-badge-ring: var(--bg-avatar);
  --border-avatar-badge: var(--border-primary);
  /* Presence colors */
  --bg-avatar-online: var(--bg-success-alt);
  --bg-avatar-away: var(--bg-warning-alt);
  --bg-avatar-busy: var(--bg-danger-alt);
  --bg-avatar-ooo: var(--utility-fuchsia-400);
  --bg-avatar-offline: var(--utility-neutral-500);
  /* Group stacking ring */
  --ring-avatar-stack: var(--alpha-white-50);
  /* Overflow pill (+N) */
  --bg-avatar-more: var(--bg-primary-subtle);
  --text-avatar-more: var(--text-secondary);
  --ring-avatar-more: var(--alpha-white-50);
  /* Semantic fills (optional) */
  --bg-avatar-info: var(--bg-info-subtle);
  --text-avatar-info: var(--text-info-solid);
  --ring-avatar-info: var(--border-info-subtle);
  --bg-avatar-success: var(--bg-success-subtle);
  --text-avatar-success: var(--text-success-solid);
  --ring-avatar-success: var(--border-success-subtle);
  --bg-avatar-warning: var(--bg-warning-subtle);
  --text-avatar-warning: var(--text-warning-solid);
  --ring-avatar-warning: var(--border-warning-subtle);
  --bg-avatar-danger: var(--bg-danger-subtle);
  --text-avatar-danger: var(--text-danger-solid);
  --ring-avatar-danger: var(--border-danger-subtle);
  /* Extra semantic families */
  --bg-avatar-indigo: var(--bg-indigo-subtle);
  --text-avatar-indigo: var(--text-indigo-solid);
  --bg-avatar-purple: var(--bg-purple-subtle);
  --text-avatar-purple: var(--text-purple-solid);
  --bg-avatar-pink: var(--bg-pink-subtle);
  --text-avatar-pink: var(--text-pink-solid);
  --bg-avatar-teal: var(--bg-teal-subtle);
  --text-avatar-teal: var(--text-teal-solid);
  --bg-avatar-mint: var(--bg-mint-subtle);
  --text-avatar-mint: var(--text-mint-solid);
  /* Persona */
  /* Base */
  --bg-persona: var(--bg-primary);
  --border-persona: var(--border-primary);
  --text-persona: var(--text-primary);
  --text-persona-title: var(--text-primary);
  --text-persona-subtitle: var(--text-tertiary);
  --text-persona-meta: var(--text-quaternary);
  /* Tag (optional) */
  --bg-persona-tag: var(--bg-primary-subtle);
  --text-persona-tag: var(--text-secondary);
  --border-persona-tag: var(--border-primary-subtle);
  /* Surface variants */
  --bg-persona-soft: var(--bg-primary-subtle);
  --border-persona-soft: var(--alpha-0);
  --bg-persona-ghost: var(--alpha-0);
  --border-persona-ghost: var(--border-primary-subtle);
  --border-persona-strong: var(--border-primary-solid);
  --shadow-persona: var(--shadow-sm);
  /* Interaction */
  --bg-persona-hover: var(--bg-primary-hover);
  --border-persona-hover: var(--border-primary-alt);
  --bg-persona-pressed: var(--bg-secondary);
  --border-persona-pressed: var(--border-primary-solid);
  /* NEW: pressed shadow (button-like) */
  --shadow-persona-pressed: inset 0 1px 0 rgba(0,0,0,.18);
  /* Selected */
  --bg-persona-selected: var(--bg-info-subtle);
  --border-persona-selected: var(--border-info-subtle);
  /* Focus */
  --ring-persona-focus: 0 0 0 2px var(--border-info-subtle);
  /* Disabled */
  --opacity-persona-disabled: 0.6;
  --filter-persona-disabled: none;
  /* Status pill */
  --bg-persona-status: var(--bg-primary-subtle);
  --border-persona-status: var(--border-primary-subtle);
  --text-persona-status: var(--text-secondary);
  --bg-persona-status-dot: var(--bg-secondary-solid);
  /* Status intent dots */
  --bg-persona-dot-success: var(--bg-success-alt);
  --bg-persona-dot-warning: var(--bg-warning-alt);
  --bg-persona-dot-danger: var(--bg-danger-alt);
  --bg-persona-dot-info: var(--bg-info-alt);
  /* Divider */
  /* Base */
  --border-divider: var(--border-primary);
  /* Compatibility alias: legacy var(--border-default) usages resolve to the divider color (matches the .border-default class) */
  --border-default: var(--border-divider);
  --border-divider-subtle: var(--border-primary-subtle);
  --border-divider-strong: var(--border-primary-solid);
  --border-divider-ghost: var(--alpha-neutral-900-60);
  --text-divider: var(--text-tertiary);
  /* Optional */
  --bg-divider: var(--bg-primary);
  /* Progress */
  /* Linear — Track + Bar */

  --height-progress-track: 4px;
  --bg-progress: var(--utility-neutral-800);
  --bg-progress-bar: var(--utility-blue-500);
  --text-progress: var(--alpha-white-100);
  /* Intent bars */
  --bg-progress-bar-success: var(--bg-success);
  --bg-progress-bar-warning: var(--bg-warning);
  --bg-progress-bar-danger: var(--bg-danger);
  --bg-progress-bar-info: var(--bg-info);
  --bg-progress-bar-neutral: var(--utility-neutral-600);
  /* Radial / Circular */

  --bg-progress-radial-inner: var(--bg-primary);
  --text-progress-radial: var(--text-primary);
  /* Track inside radial */
  --bg-progress-radial-track: var(--bg-progress);
  /* Cap / Dot marker */
  --size-progress-cap: 10px;
  --shadow-progress-cap: 0 0 0 2px var(--bg-progress-radial-inner);
  /* Optional glow */
  --shadow-progress-cap-glow: 0 0 10px var(--bg-progress-bar), 0 0 0 2px var(--bg-progress-radial-inner);
  /* Indeterminate */

  --easing-progress-indeterminate: ease-in-out;
  /* Stack */

  --gap-progress-stack: 2px;
  /* Size System (Radial Defaults) */

  --size-progress-radial-xs: 28px;
  --size-progress-radial-sm: 36px;
  --size-progress-radial-md: 48px;
  --size-progress-radial-lg: 64px;
  --size-progress-radial-xl: 84px;
  --thickness-progress-radial-xs: 4px;
  --thickness-progress-radial-sm: 5px;
  --thickness-progress-radial-md: 6px;
  --thickness-progress-radial-lg: 8px;
  --thickness-progress-radial-xl: 10px;
  /* Accessibility Contrast Overrides */

  --text-progress-success: var(--alpha-white-100);
  --text-progress-warning: var(--text-primary);
  --text-progress-danger: var(--alpha-white-100);
  --text-progress-info: var(--alpha-white-100);
  --text-progress-neutral: var(--alpha-white-100);
  /* Busy Spinner */
  /* Sizes */
  --size-spinner-sm: 16px;
  --size-spinner-md: 20px;
  --size-spinner-lg: 24px;
  --size-spinner-xl: 32px;
  --size-spinner: var(--size-spinner-lg);
  /* Stroke scaling */
  --stroke-spinner-sm: 2;
  --stroke-spinner-md: 2.5;
  --stroke-spinner-lg: 3;
  --stroke-spinner-xl: 4;
  --stroke-spinner: var(--stroke-spinner-lg);
  /* Color */
  --text-spinner: var(--utility-emerald-400);
  /* Track */
  --opacity-spinner-track: 0.18;
  /* Overlay */
  --bg-spinner-overlay: var(--alpha-neutral-950-60);
  --blur-spinner-overlay: 5px;
  /* Motion */
  /* Links V2 — 3c: faithful UUI, primary link = the brand accent. Dark mode lightens the brand
     step (300/200) so text-on-dark clears WCAG AA. Secondary/muted stay neutral; danger stays red.
     Focus resolves through the canonical --border-focus. [data-accent] presets still override below. */
  --text-link: var(--utility-blue-200);
  --text-link-hover: var(--utility-blue-100);
  --text-link-secondary: var(--utility-neutral-300);
  --text-link-secondary-hover: var(--utility-neutral-100);
  --text-link-muted: var(--utility-neutral-400);
  --text-link-muted-hover: var(--utility-neutral-200);
  --text-link-danger: var(--utility-red-400);
  --text-link-danger-hover: var(--utility-red-300);
  --border-link-focus: var(--utility-blue-200);
  /* Form sections — 3c 3.2 (DERIVE). Same mappings as light; the referenced
     surface/text/border tokens already carry their dark values. */
  --text-form-section-title: var(--text-secondary);
  --text-form-section-description: var(--text-tertiary);
  --border-form-section: var(--border-primary-subtle);
  --bg-form-section-card: var(--bg-surface);
  --shadow-form-section-card: var(--shadow-xs);
  --bg-form-section-filled: var(--bg-secondary);
  --bg-form-section-icon: var(--bg-secondary);
  --text-form-section-icon: var(--text-secondary);
  --bg-form-section-badge: color-mix(in oklch, var(--text-secondary) 12%, transparent);
  --text-form-section-badge: var(--text-secondary);
  /* Tags */
  /* Neutral (default) */
  --bg-tag-neutral: var(--alpha-white-8);
  --bg-tag-neutral-hover: var(--alpha-white-12);
  --text-tag-neutral: var(--utility-neutral-200);
  --text-tag-neutral-hover: var(--alpha-white-100);
  --border-tag-neutral: var(--alpha-white-10);
  --border-tag-neutral-hover: var(--alpha-white-16);
  --border-tag-neutral-focus: var(--utility-blue-200);
  --bg-tag-neutral-dismiss-hover: var(--alpha-white-10);
  /* Primary */
  --bg-tag-primary: var(--alpha-blue-500-18);
  --bg-tag-primary-hover: var(--alpha-blue-500-24);
  --text-tag-primary: var(--utility-blue-200);
  --text-tag-primary-hover: var(--utility-blue-100);
  --border-tag-primary: var(--alpha-blue-500-26);
  --border-tag-primary-hover: var(--alpha-blue-500-34);
  --border-tag-primary-focus: var(--utility-blue-200);
  --bg-tag-primary-dismiss-hover: var(--alpha-blue-500-18);
  /* Success */
  --bg-tag-success: var(--alpha-green-500-18);
  --bg-tag-success-hover: var(--alpha-green-500-24);
  --text-tag-success: var(--utility-green-200);
  --text-tag-success-hover: var(--utility-green-100);
  --border-tag-success: var(--alpha-green-500-26);
  --border-tag-success-hover: var(--alpha-green-500-34);
  --border-tag-success-focus: var(--utility-green-200);
  --bg-tag-success-dismiss-hover: var(--alpha-green-500-18);
  /* Warning */
  --bg-tag-warning: var(--alpha-amber-500-20);
  --bg-tag-warning-hover: var(--alpha-amber-500-26);
  --text-tag-warning: var(--utility-amber-200);
  --text-tag-warning-hover: var(--utility-amber-100);
  --border-tag-warning: var(--alpha-amber-500-30);
  --border-tag-warning-hover: var(--alpha-amber-500-38);
  --border-tag-warning-focus: var(--utility-amber-200);
  --bg-tag-warning-dismiss-hover: var(--alpha-amber-500-20);
  /* Danger */
  --bg-tag-danger: var(--alpha-red-500-18);
  --bg-tag-danger-hover: var(--alpha-red-500-24);
  --text-tag-danger: var(--utility-red-200);
  --text-tag-info: var(--utility-blue-200); /* tq-8380: was defined in light only, so .tag--info painted no fill in dark */
  --text-tag-danger-hover: var(--utility-red-100);
  --border-tag-danger: var(--alpha-red-500-26);
  --border-tag-danger-hover: var(--alpha-red-500-34);
  --border-tag-danger-focus: var(--utility-red-200);
  --bg-tag-danger-dismiss-hover: var(--alpha-red-500-18);
  /* Soft / Outline */
  --bg-tag-soft: var(--alpha-white-8);
  --border-tag-soft: var(--alpha-white-10);
  --border-tag-outline: var(--alpha-white-16);
  /* Selected */
  --bg-tag-selected: var(--alpha-blue-500-26);
  --border-tag-selected: var(--alpha-blue-500-36);
  --text-tag-selected: var(--utility-blue-100);
  /* Dismiss button (defaults; variant blocks override bg) */
  --text-tag-dismiss: var(--utility-neutral-200);
  --text-tag-dismiss-hover: var(--alpha-white-100);
  --bg-tag-dismiss-hover: var(--alpha-white-10);
  /* Filter */
  /* Base Item */

  --text-filter: var(--text-primary);
  --text-filter-hover: var(--text-primary-hover);
  --text-filter-disabled: var(--text-disabled);
  --bg-filter: var(--alpha-0);
  --bg-filter-hover: var(--utility-neutral-800);
  --bg-filter-active: var(--utility-neutral-800);
  --bg-filter-selected: var(--bg-info-subtle);
  --bg-filter-pressed: var(--utility-neutral-850);
  --opacity-filter-disabled: 0.6;
  /* Collapsible Section (Header Row) */

  --bg-filter-section: var(--bg-filter);
  --bg-filter-section-open: var(--bg-filter-hover);
  --bg-filter-section-pressed: var(--bg-filter-pressed);
  --text-filter-chevron: var(--text-tertiary);
  /* Collapse Body */

  --bg-filter-collapse: var(--bg-primary-subtle);
  --bg-filter-collapse-inner: var(--bg-secondary-subtle);
  --border-filter: var(--border-primary-subtle);
  --border-filter-collapse: var(--border-primary-subtle);
  --border-filter-focus: var(--border-info);
  --ring-filter-focus: 0 0 0 2px var(--border-info);
  /* Nested Filter Items (inside collapse) */

  --bg-filter-nested: var(--alpha-0);
  --bg-filter-nested-hover: var(--bg-secondary-subtle);
  /* Filter Menu (thin header strip) */

  --text-filter-menu: var(--text-secondary);
  --bg-filter-menu: var(--bg-primary-subtle);
  /* Labels / Group Headings */

  --text-filter-label: var(--text-tertiary);
  /* Intent Rows (Optional Semantic States) */

  --bg-filter-success: var(--bg-success-subtle);
  --bg-filter-warning: var(--bg-warning-subtle);
  --bg-filter-danger: var(--bg-danger-subtle);
  --bg-filter-info: var(--bg-info-subtle);
  /* Density */

  --space-filter-item-x: 1rem;
  --space-filter-item-y: 0.5rem;
  --space-filter-item-y-compact: 0.375rem;
  --space-filter-item-y-relaxed: 0.75rem;
  /* Photo Viewer */

  --text-photo-viewer: var(--text-primary);
  /* Main viewport */
  --bg-photo-viewer-main: var(--alpha-0);
  --border-photo-viewer-main: var(--utility-neutral-800); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --shadow-photo-viewer-main: var(--shadow-sm);
  --bg-photo-viewer-image: var(--utility-neutral-850);
  /* Bar */
  --bg-photo-viewer-bar: var(--alpha-0);
  --border-photo-viewer-bar: var(--border-primary-subtle);
  --text-photo-viewer-bar: var(--text-secondary);
  --text-photo-viewer-title: var(--text-primary);
  --text-photo-viewer-meta: var(--text-tertiary);
  /* Actions */
  --bg-photo-viewer-action: var(--alpha-0);
  --bg-photo-viewer-action-hover: var(--bg-primary-hover);
  --bg-photo-viewer-action-active: var(--bg-secondary);
  --border-photo-viewer-action: var(--border-primary-subtle);
  --border-photo-viewer-action-hover: var(--border-primary);
  --text-photo-viewer-action: var(--text-secondary);
  --text-photo-viewer-action-hover: var(--text-primary);
  /* Content */
  --bg-photo-viewer-content: var(--alpha-0);
  --border-photo-viewer-content: var(--border-primary-subtle);
  --text-photo-viewer-content: var(--text-secondary);
  --text-photo-viewer-content-meta: var(--text-tertiary);
  --text-photo-viewer-content-body: var(--text-primary);
  /* Strip */
  --bg-photo-viewer-strip: var(--alpha-0);
  --border-photo-viewer-strip: var(--utility-neutral-800); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  /* Thumbnail */
  --bg-photo-viewer-thumb: var(--utility-neutral-800);
  --bg-photo-viewer-thumb-hover: var(--bg-primary-hover);
  --bg-photo-viewer-thumb-active: var(--bg-secondary);
  --border-photo-viewer-flat: var(--utility-neutral-700);
  --border-photo-viewer-thumb: var(--border-primary-subtle);
  --border-photo-viewer-thumb-hover: var(--border-primary);
  --border-photo-viewer-thumb-active: var(--border-primary);
  --border-photo-viewer-thumb-selected: var(--border-info);
  /* Selected card/image ring: a white+black double ring, legible on any photo
     in either theme (Pavel #179). Same value both themes by design. */
  --ring-photo-viewer-thumb-selected: inset 0 0 0 2px oklch(100% 0 0), inset 0 0 0 3.5px oklch(0% 0 0);
  --shadow-photo-viewer-thumb: none;
  --ring-photo-viewer-thumb-focus: 0 0 0 2px var(--border-info-subtle);
  --opacity-photo-viewer-thumb: 0.92;
  --opacity-photo-viewer-thumb-disabled: 0.6;
  --filter-photo-viewer-thumb-disabled: none;
  /* Nav arrows */
  --bg-photo-viewer-nav:               oklch(100% 0 0 / 0.10);
  --bg-photo-viewer-nav-hover:         oklch(100% 0 0 / 0.20);
  --bg-photo-viewer-nav-active:        oklch(100% 0 0 / 0.30);
  --text-photo-viewer-nav:             oklch(100% 0 0);
  --border-photo-viewer-nav: oklch(100% 0 0 / 0.10); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  /* Counter chip */
  --bg-photo-viewer-counter:           oklch(0% 0 0 / 0.5);
  --text-photo-viewer-counter:         oklch(100% 0 0 / 0.85);
  /* Caption overlay */
  --bg-photo-viewer-caption-overlay:   linear-gradient(180deg, transparent 0%, oklch(0% 0 0 / 0.7) 100%);
  --text-photo-viewer-caption-overlay: oklch(100% 0 0);
  /* Toolbar */
  --bg-photo-viewer-toolbar:           oklch(0% 0 0 / 0.55);
  --text-photo-viewer-toolbar:         oklch(100% 0 0);
  --border-photo-viewer-toolbar: oklch(100% 0 0 / 0.10); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --bg-photo-viewer-zoom-btn:          oklch(100% 0 0 / 0.10);
  --bg-photo-viewer-zoom-btn-hover:    oklch(100% 0 0 / 0.20);
  --bg-photo-viewer-zoom-btn-active:   oklch(100% 0 0 / 0.30);
  --text-photo-viewer-zoom-btn:        oklch(100% 0 0);
  --text-photo-viewer-zoom-level:      oklch(100% 0 0 / 0.85);
  /* Status badges */
  --bg-photo-viewer-status:            oklch(0% 0 0 / 0.55);
  --text-photo-viewer-status:          oklch(100% 0 0);
  /* Info panel sidebar */
  --bg-photo-viewer-info:              var(--utility-neutral-900);
  --border-photo-viewer-info: var(--utility-neutral-800); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --text-photo-viewer-info:            var(--text-primary);
  --text-photo-viewer-info-muted:      var(--text-tertiary);
  --bg-photo-viewer-info-header:       var(--utility-neutral-850);
  /* Fullscreen overlay */
  --bg-photo-viewer-fullscreen:        oklch(0% 0 0 / 0.96);
  --backdrop-photo-viewer-fullscreen:  blur(8px);
  --bg-photo-viewer-fullscreen-toolbar:oklch(100% 0 0 / 0.06);
  /* Compare slider */
  --line-photo-viewer-compare:         oklch(100% 0 0);
  --bg-photo-viewer-compare-handle:    oklch(100% 0 0);
  --shadow-photo-viewer-compare-handle:0 2px 8px oklch(0% 0 0 / 0.55);
  /* Annotation pins */
  --bg-photo-viewer-annotation:        var(--utility-amber-400);
  --bg-photo-viewer-annotation-active: var(--utility-blue-400);
  --text-photo-viewer-annotation:      var(--utility-neutral-900);
  --ring-photo-viewer-annotation:      0 0 0 3px oklch(100% 0 0 / 0.4);
  /* Video controls */
  --bg-photo-viewer-video-controls:    oklch(0% 0 0 / 0.55);
  --bg-photo-viewer-video-progress:    oklch(100% 0 0 / 0.18);
  --bg-photo-viewer-video-progress-fill: var(--utility-blue-300);
  /* Focus ring */
  --ring-photo-viewer-focus:           0 0 0 2px var(--border-info);
  /* Apex Sparkline */
  --stroke-spark-width: 2;
  --stroke-spark: var(--utility-blue-400);
  --fill-spark-area: var(--alpha-0);
  --border-spark-grid: var(--utility-neutral-700);
  --marker-spark: var(--stroke-spark);
  --size-spark-marker: 0;
  --size-spark-marker-hover: 3;
  --border-spark-setpoint: var(--alpha-neutral-400-40);
  --border-spark-deadband: var(--alpha-neutral-400-40);
  --border-spark-warn: var(--alpha-yellow-300-50);
  /* Apex Master */
  --apex-text-muted: var(--utility-neutral-400);
  /* Series */
  --apex-series-1: var(--utility-blue-400);
  --apex-series-4: var(--utility-teal-400);
  --apex-series-5: var(--utility-indigo-400);
  --apex-series-line-1: var(--utility-neutral-200);
  --apex-series-line-2: var(--utility-blue-300);
  --apex-series-line-3: var(--utility-yellow-400);
  --apex-series-line-4: var(--utility-teal-400);
  --apex-series-line-5: var(--utility-indigo-400);
  --apex-series-line-6: var(--utility-pink-400);
  --apex-series-line-7: var(--utility-amber-400);
  --apex-series-line-8: var(--utility-red-400);
  --apex-series-line-9: var(--utility-purple-400);
  --apex-series-line-10: var(--utility-neutral-400);
  --apex-series-line-11: var(--utility-orange-400);
  --apex-series-line-12: var(--utility-lime-400);
  --apex-series-pie-1: var(--utility-blue-400);
  --apex-series-pie-2: var(--utility-green-400);
  --apex-series-pie-3: var(--utility-yellow-400);
  --apex-series-pie-4: var(--utility-teal-400);
  --apex-series-pie-5: var(--utility-indigo-400);
  --apex-series-pie-6: var(--utility-pink-400);
  --apex-series-pie-7: var(--utility-amber-400);
  --apex-series-pie-8: var(--utility-red-400);
  --apex-series-pie-9: var(--utility-purple-400);
  --apex-series-pie-10: var(--utility-neutral-400);
  --apex-series-pie-11: var(--utility-orange-400);
  --apex-series-pie-12: var(--utility-lime-400);
  --apex-series-bar-1: var(--utility-blue-400);
  --apex-series-bar-2: var(--utility-green-400);
  --apex-series-bar-3: var(--utility-yellow-400);
  --apex-series-bar-4: var(--utility-teal-400);
  --apex-series-bar-5: var(--utility-indigo-400);
  --apex-series-bar-6: var(--utility-pink-400);
  --apex-series-bar-7: var(--utility-amber-400);
  --apex-series-bar-8: var(--utility-red-400);
  --apex-series-bar-9: var(--utility-purple-400);
  --apex-series-bar-10: var(--utility-neutral-400);
  --apex-series-bar-11: var(--utility-orange-400);
  --apex-series-bar-12: var(--utility-lime-400);
  --apex-series-radial-1: var(--utility-blue-400);
  --apex-series-radial-2: var(--utility-green-400);
  --apex-series-radial-3: var(--utility-yellow-400);
  --apex-series-radial-4: var(--utility-teal-400);
  --apex-series-radial-5: var(--utility-indigo-400);
  --apex-series-radial-6: var(--utility-pink-400);
  --apex-series-radial-7: var(--utility-amber-400);
  --apex-series-radial-8: var(--utility-red-400);
  --apex-series-radial-9: var(--utility-purple-400);
  --apex-series-radial-10: var(--utility-neutral-400);
  --apex-series-radial-11: var(--utility-orange-400);
  --apex-series-radial-12: var(--utility-lime-400);
  --apex-series-heatmap-5: var(--utility-indigo-400);
  --apex-series-heatmap-6: var(--utility-pink-400);
  --apex-series-heatmap-7: var(--utility-amber-400);
  --apex-series-heatmap-8: var(--utility-red-400);
  --apex-series-heatmap-9: var(--utility-purple-400);
  --apex-series-heatmap-10: var(--utility-neutral-400);
  --apex-series-heatmap-11: var(--utility-orange-400);
  --apex-series-heatmap-12: var(--utility-lime-400);
  --apex-fill-opacity-from: 0.35;
  --apex-fill-opacity-to: 0.05;
  --apex-marker-size: 2;
  --apex-marker-stroke: 1;
  --apex-marker-hover-offset: 2;
  --apex-line-stroke: 1;
  --apex-donut-value-size: 12;
  --apex-donut-name-size: 11;
  --apex-donut-total-size: 12;
  --apex-bar-column-width: 55%;
  --apex-bar-radius: 0; /* fixed empty value */
  --apex-bar-ending-shape: flat;
  --apex-bar-datalabels: off;
  /* Candlestick / boxplot / financial */
  --apex-candle-up-bg:     oklch(35% 0.12 145 / 0.35);
  --apex-candle-down-bg:   oklch(35% 0.13 30  / 0.35);
  /* Brush selection */
  /* Annotation accent */
  /* Chart card chrome */
  --bg-chart-card:           var(--utility-neutral-900);
  --bg-chart-card-header:    transparent;
  /* neutral-800 -> neutral-750 (divider-exposure audit, 3 of 3). Same collision as
     --border-secondary: neutral-800 IS --bg-secondary in dark, so a chart card's own
     border measured 1.000:1 against it. Light (neutral-200) untouched. */
  --border-chart-card:       var(--utility-neutral-750);
  /* Chart KPI mini-card */
  /* Loading skeleton + no-data */
  --bg-chart-skeleton:       var(--utility-neutral-800);
  --bg-chart-skeleton-sweep: linear-gradient(115deg, transparent 30%, oklch(100% 0 0 / 0.10) 50%, transparent 70%);
  --bg-chart-no-data:        var(--utility-neutral-850);
  /* Autocomplete */
  --text-autocomplete: var(--utility-neutral-100);
  --bg-autocomplete: var(--utility-neutral-800);
  --border-autocomplete: var(--utility-neutral-800);
  --text-autocomplete-item: var(--alpha-white-100);
  --text-autocomplete-active: var(--alpha-white-100);
  --bg-autocomplete-active: var(--utility-blue-500);
  /* Chat */
  --bg-activity-log-header: var(--utility-neutral-800);
  --bg-activity-log-panel: var(--utility-neutral-900);
  --bg-activity-log-footer: var(--utility-neutral-800);
  --text-post-owner: var(--alpha-white-100);
  --text-post-public: var(--alpha-white-100);
  --text-post-system: var(--utility-neutral-400); /* fixed utility-400 */
  --text-post-date: var(--utility-neutral-300); /* fixed utility-300 */
  --bg-post-owner: var(--alpha-indigo-900-80);
  --bg-post-public: var(--alpha-neutral-700-60);
  --bg-post-actions: var(--utility-neutral-900);
  --border-post-actions: var(--utility-neutral-800);
  /* Thumbnail */
  --bg-thumbnail: var(--alpha-0);
  --border-thumbnail: var(--alpha-0);
  --bg-thumbnail-img: var(--alpha-0);
  --bg-thumbnail-remove: var(--alpha-neutral-950-60);
  --bg-thumbnail-remove-hover: var(--utility-neutral-600);
  --text-thumbnail-remove: var(--alpha-white-100);
  --border-thumbnail-remove: var(--alpha-0);
  /* Gallery */
  --bg-gallery-header: var(--utility-neutral-900);
  --border-gallery-header: var(--alpha-0);
  --bg-gallery-card: var(--utility-neutral-800);
  --border-gallery-card: var(--utility-neutral-700);
  --bg-gallery-card-active: var(--utility-neutral-800);
  --border-gallery-card-hover: var(--utility-neutral-700);
  /* Kanban */
  --bg-kanban: var(--alpha-neutral-950-20);
  --bg-kanban-header: var(--alpha-neutral-950-20);
  --bg-kanban-list: var(--alpha-neutral-950-20);
  --bg-kanban-card: var(--utility-neutral-800);
  --bg-kanban-card-hover: var(--alpha-neutral-700-60);
  --bg-kanban-card-active: var(--utility-neutral-800);
  --border-kanban: var(--utility-neutral-700);
  --border-kanban-card: var(--utility-neutral-700);
  --icon-kanban-muted: var(--text-tertiary);
  --text-kanban: var(--text-primary);
  --text-kanban-header: var(--text-secondary);
  --radius-kanban: var(--radius-lg);
  --radius-kanban-card: var(--radius-lg);
  --shadow-kanban-card-drag: var(--shadow-xl);
  --bg-kanban-col: var(--alpha-neutral-950-20);
  --bg-kanban-drop-target: color-mix(in oklab, var(--alpha-neutral-950-20), var(--border-info) 8%);
  --border-drop-target: var(--border-info);
  --bg-kanban-drop-invalid: color-mix(in oklab, var(--alpha-neutral-950-20), var(--border-danger) 8%);
  --border-drop-invalid: var(--border-danger);
  --bg-kanban-wip-full: var(--bg-danger-subtle);
  --text-kanban-wip-full: var(--text-danger);
  --text-kanban-wip: var(--text-tertiary);
  --bg-kanban-wip: transparent;
  --border-kanban-selected: var(--text-info);  /* selection ring: --text-info measured 5.03:1 light / 9.6:1 dark on the column; --border-info (blue-400) computes 2.64:1 on white, under the 3:1 floor */
  --bg-kanban-card-media: var(--utility-neutral-700);
  --text-kanban-accent: hsl(220 85% 68%);
  /* Mobile / PWA */
  /* Mapbox */
  --border-mapbox-origin-marker: var(--alpha-white-30);
  --border-mapbox-destination-marker: var(--alpha-white-30);
  /* #199 — dark was missing every stop-marker token, so the waypoint dot rendered
     with no fill/border (invisible on the dark basemap). Give it a bright fill. */
  --bg-stop-marker: var(--utility-neutral-300);
  /* Mapbox route lines (dark — lifted hues so they're readable on the dark basemap). */
  --bg-mapbox-route-primary:   var(--utility-blue-400);
  /* Modal */
  --bg-modal: var(--utility-neutral-850);
  --text-modal: var(--alpha-white-100);
  --border-modal: var(--alpha-neutral-700-60);
  --border-modal-header: var(--border-primary);
  --border-modal-divider: var(--utility-neutral-800);
  /* Wizard content panel — slightly darker than modal in dark mode */
  --modal-backdrop-blur: 0;
  --modal-grain-opacity: 0;
  --bg-modal-overlay: var(--alpha-neutral-950-60); /* tq-8176: the served app's value (reinly.webapp @ 09387252) */

  /* Lightbox — slightly deeper backdrop in dark theme */
  --bg-lightbox: oklch(6% 0.005 250 / 0.94);
  --bg-lightbox-overlay: oklch(0% 0 0 / 0.50);
  --opacity-lightbox-overlay: 0.50;
  --bg-lightbox-surface: oklch(100% 0 0 / 0.05);
  --bg-lightbox-control: oklch(100% 0 0 / 0.08);
  --bg-lightbox-control-hover: oklch(100% 0 0 / 0.14);
  --bg-lightbox-control-active: oklch(100% 0 0 / 0.20);
  --bg-lightbox-thumbnail: oklch(100% 0 0 / 0.05);
  --bg-lightbox-thumbnail-active: oklch(100% 0 0 / 0.16);
  --text-lightbox: oklch(100% 0 0 / 0.92);
  --text-lightbox-muted: oklch(100% 0 0 / 0.60);
  --border-lightbox: oklch(100% 0 0 / 0.08); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --border-lightbox-thumbnail: oklch(100% 0 0 / 0.12); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --border-lightbox-thumbnail-active: oklch(100% 0 0 / 0.70); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --ring-lightbox-focus: oklch(72% 0.16 240 / 0.95);
  --shadow-lightbox: 0 12px 32px -8px oklch(0% 0 0 / 0.6);

  /* Notification Tray */
  /* Selection */
  --bg-selection: var(--utility-emerald-500);
  --text-selection: var(--alpha-white-100);
  --bg-input-selection: var(--utility-emerald-500);
  --text-input-selection: var(--alpha-white-100);

  /* =========================================
     Mail Client
     ========================================= */
  /* Shell + toolbar */
  --bg-mail-app:                     var(--bg-surface);
  --bg-mail-toolbar:                 var(--utility-neutral-900);
  --bg-mail-search:                  var(--utility-neutral-800);
  --border-mail-search:              var(--utility-neutral-700);
  /* Sidebar */
  --bg-mail-sidebar:                 var(--utility-neutral-900);
  --border-mail-sidebar:             var(--utility-neutral-800);
  --bg-mail-folder-hover:            var(--utility-neutral-850);
  --bg-mail-folder-active: color-mix(in oklch, var(--utility-emerald-400) 20%, transparent); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --text-mail-folder:                var(--text-secondary);
  --text-mail-folder-active:         var(--text-link);
  --text-mail-folder-count:          var(--text-tertiary);
  --bg-mail-folder-count-active:     var(--bg-brand-solid);
  --text-mail-folder-count-active:   var(--text-on-brand);
  --text-mail-sidebar-section:       var(--text-tertiary);
  /* List */
  --bg-mail-list:                    var(--utility-neutral-900);
  --border-mail-list:                var(--utility-neutral-800);
  --bg-mail-item:                    transparent;
  --bg-mail-item-hover:              var(--utility-neutral-850);
  --bg-mail-item-active: color-mix(in oklch, var(--utility-emerald-400) 20%, transparent); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --bg-mail-item-selected: color-mix(in oklch, var(--utility-emerald-400) 20%, transparent); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --bg-mail-item-unread:             var(--utility-neutral-900);
  --border-mail-item-divider:        var(--utility-neutral-850);
  --border-mail-item-active:         var(--border-focus);
  --bg-mail-item-new-flash:          oklch(30% 0.10 90 / 0.30);
  --bg-mail-unread-dot: var(--utility-emerald-400); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --text-mail-item:                  var(--text-primary);
  --text-mail-sender:                var(--text-primary);
  --text-mail-subject:               var(--text-primary);
  --text-mail-preview:               var(--text-tertiary);
  --text-mail-time:                  var(--text-tertiary);
  /* Item state accents */
  --text-mail-star:                  var(--utility-neutral-500);
  --text-mail-star-active:           var(--utility-amber-400);
  --text-mail-pin:                   var(--utility-amber-400);
  --text-mail-snoozed:               var(--utility-blue-400);
  --text-mail-flagged:               var(--utility-red-400);
  --text-mail-replied:               var(--utility-green-400);
  --text-mail-forwarded:             var(--utility-blue-400);
  --text-mail-important:             var(--utility-amber-400);
  --text-mail-encrypted:             var(--utility-purple-400);
  --text-mail-draft:                 var(--utility-orange-400);
  /* Priority indicators */
  --bg-mail-priority-high:           var(--utility-red-400);
  --bg-mail-priority-normal:         transparent;
  --bg-mail-priority-low:            var(--utility-neutral-500);
  /* Labels (10-step palette) */
  --bg-mail-label-blue:              oklch(28% 0.10 250 / 0.5);
  --text-mail-label-blue:            var(--utility-blue-300);
  --bg-mail-label-green:             oklch(28% 0.10 145 / 0.5);
  --text-mail-label-green:           var(--utility-green-300);
  --bg-mail-label-amber:             oklch(28% 0.10 75 / 0.5);
  --text-mail-label-amber:           var(--utility-amber-300);
  --bg-mail-label-red:               oklch(28% 0.10 30 / 0.5);
  --text-mail-label-red:             var(--utility-red-300);
  --bg-mail-label-purple:            oklch(28% 0.10 295 / 0.5);
  --text-mail-label-purple:          var(--utility-purple-300);
  --bg-mail-label-pink:              oklch(28% 0.10 340 / 0.5);
  --text-mail-label-pink:            var(--utility-pink-300);
  --bg-mail-label-teal:              oklch(28% 0.10 200 / 0.5);
  --text-mail-label-teal:            var(--utility-teal-300);
  --bg-mail-label-orange:            oklch(28% 0.13 50 / 0.5);
  --text-mail-label-orange:          var(--utility-orange-300);
  --bg-mail-label-indigo:            oklch(28% 0.10 270 / 0.5);
  --text-mail-label-indigo:          var(--utility-indigo-300);
  --bg-mail-label-neutral:           var(--utility-neutral-800);
  --text-mail-label-neutral:         var(--utility-neutral-300);
  /* Detail */
  --bg-mail-detail:                  var(--utility-neutral-900);
  --border-mail-detail:              var(--utility-neutral-800);
  --bg-mail-detail-toolbar:          oklch(20% 0 0 / 0.9);
  --bg-mail-quoted:                  var(--utility-neutral-850);
  --border-mail-quoted:              var(--utility-neutral-700);
  --text-mail-quoted-toggle:         var(--text-link);
  /* Compose */
  --bg-mail-compose:                 var(--utility-neutral-900);
  --border-mail-compose:             var(--utility-neutral-800);
  --shadow-mail-compose:             0 8px 24px oklch(0% 0 0 / 0.5), 0 2px 6px oklch(0% 0 0 / 0.3);
  --bg-mail-compose-toolbar:         var(--utility-neutral-850);
  --bg-mail-compose-footer:          var(--utility-neutral-850);
  --text-mail-draft-dot:             var(--utility-orange-400);
  /* Recipient chip */
  --bg-mail-recipient:               var(--utility-neutral-800);
  --bg-mail-recipient-hover:         var(--utility-neutral-700);
  --bg-mail-recipient-internal:      oklch(30% 0.10 250 / 0.5);
  --text-mail-recipient-internal:    var(--utility-blue-300);
  --bg-mail-recipient-external:      oklch(30% 0.12 75 / 0.5);
  --text-mail-recipient-external:    var(--utility-amber-300);
  --bg-mail-recipient-group:         oklch(30% 0.10 295 / 0.5);
  --text-mail-recipient-group:       var(--utility-purple-300);
  --bg-mail-recipient-invalid:       oklch(30% 0.13 30 / 0.5);
  --text-mail-recipient-invalid:     var(--utility-red-300);
  /* Banner */
  --bg-mail-banner:                  oklch(28% 0.08 250 / 0.5);
  --text-mail-banner:                var(--utility-blue-200);
  --border-mail-banner:              var(--utility-blue-400);
  /* Selection bar */
  --bg-mail-selection-bar: color-mix(in oklch, var(--utility-emerald-400) 18%, transparent); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --text-mail-selection-bar:         var(--text-link);
  --border-mail-selection-bar: color-mix(in oklch, var(--utility-emerald-400) 35%, transparent); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  /* Category tabs */
  --bg-mail-category-tab:            transparent;
  --bg-mail-category-tab-active:     var(--utility-neutral-800);
  --text-mail-category-tab:          var(--text-tertiary);
  --text-mail-category-tab-active:   var(--text-primary);
  --border-mail-category-tab-active: var(--border-focus);
  /* Filter chips */
  --bg-mail-filter-chip:             var(--utility-neutral-800);
  --bg-mail-filter-chip-active:      var(--bg-brand-solid);
  --text-mail-filter-chip:           var(--text-secondary);
  --text-mail-filter-chip-active:    oklch(100% 0 0);
  /* Sender hover card */
  --bg-mail-sender-card:             var(--utility-neutral-850);
  --border-mail-sender-card:         var(--utility-neutral-700);
  --shadow-mail-sender-card:         0 8px 24px oklch(0% 0 0 / 0.55);
  /* Focus ring */
  --ring-mail-focus:                 inset 0 0 0 2px var(--border-focus);

  /* Tooltip */
  --text-tooltip: var(--text-primary);
  --bg-tooltip: var(--utility-neutral-800);
  /* Plugin: Dropzone */
  --border-dropzone: var(--utility-neutral-600);
  --text-dropzone: var(--utility-neutral-400);
  --bg-dropzone: var(--utility-neutral-700);
  /* Plugin: Flatpickr */
  --bg-flatpickr-calendar: var(--utility-neutral-800);
  --border-flatpickr-calendar: var(--utility-neutral-700);
  --text-flatpickr-primary: var(--utility-neutral-100);
  --text-flatpickr-months: var(--utility-neutral-300);
  --text-flatpickr-months-hover: var(--alpha-white-100); /* fixed invalid utility-white */
  --text-flatpickr: var(--utility-neutral-100);
  --text-flatpickr-hover: var(--alpha-white-100);
  --text-flatpickr-disabled: var(--utility-neutral-600);
  --text-flatpickr-selected: var(--alpha-white-100);
  --text-flatpickr-selected-hover: var(--alpha-white-100);
  --text-flatpickr-time: var(--utility-neutral-200);
  --bg-flatpickr: var(--alpha-0);
  --bg-flatpickr-primary: var(--utility-neutral-800);
  --flatpickr-color-scheme: dark;
  --bg-flatpickr-hover: var(--utility-neutral-700);
  --bg-flatpickr-selected: var(--utility-emerald-800);
  --bg-flatpickr-selected-hover: var(--utility-emerald-700);
  --bg-flatpickr-time-hover: var(--alpha-emerald-900-10);
  --border-flatpickr-hover: var(--utility-neutral-600);
  --border-flatpickr-selected: var(--utility-emerald-800);
  --border-flatpickr-selected-hover: var(--utility-emerald-700);
  --border-flatpickr-time: var(--utility-neutral-700);
  /* today cell — a TONED brand accent, not a flat neutral disc: neutral-800 read as a pale
     near-white blob on the near-black calendar (bg-primary = neutral-900) — Pavel #95. */
  --bg-flatpickr-today: color-mix(in oklch, var(--utility-emerald-400) 18%, transparent); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --bg-flatpickr-today-hover: color-mix(in oklch, var(--utility-emerald-400) 28%, transparent); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */

  /* App: Calendar */
  --bg-calendar-container: var(--utility-neutral-800);
  --border-calendar-divider: var(--utility-neutral-800);
  --border-calendar-divider-header: var(--alpha-neutral-700-60);
  --border-calendar-divider-time: var(--alpha-neutral-700-60);
  --text-calendar-time-label: var(--alpha-white-100);
  --text-calendar-time: var(--alpha-white-100);
  --text-calendar-day-label: var(--utility-neutral-100);
  --text-calendar-day-date: var(--utility-neutral-300);
  --text-calendar-day-header: var(--alpha-white-100);
  --text-calendar-closed: var(--text-disabled);
  --bg-calendar-day-header: var(--utility-neutral-800);
  --bg-calendar-time-slot: var(--utility-neutral-800);
  --bg-calendar-day-slot: var(--utility-neutral-900);
  --bg-calendar-indicator-today: var(--alpha-white-100);
  --bg-calendar-footer: var(--alpha-0);
  --text-appointment-gap: var(--text-danger);
  --border-appointment-toggle-btn: var(--utility-neutral-800);
  --text-schedule-day-label: var(--utility-neutral-400); /* fixed weird alias */
  --text-schedule-day: var(--alpha-white-100);
  --text-schedule-day-available: var(--alpha-white-100);
  --text-schedule-day-active: var(--alpha-white-100);
  --bg-schedule-day: var(--alpha-0);
  --bg-schedule-day-hover: var(--utility-neutral-700);
  --bg-schedule-day-available: var(--utility-neutral-700);
  --bg-schedule-day-available-hover: var(--utility-neutral-700);
  --bg-schedule-day-available-active: var(--utility-neutral-700);
  --bg-schedule-day-active: var(--utility-blue-500);
  --bg-schedule-day-active-hover: var(--utility-blue-500);
  --bg-schedule-day-active-pressed: var(--utility-blue-500);
  --bg-schedule-indicator-current: var(--alpha-white-100);
  --border-schedule-day-available: var(--utility-neutral-700);

  /* Calendar Booking (date-picker / booking calendar) */
  /* available */
  /* selected */
  /* today */
  /* indicators */
  /* elevated variant */
  /* navigation */

  /* Calendar Schedule (reusable component) */
  --h-calendar-schedule-hour: 64px;
  --radius-calendar-schedule: var(--radius-lg, 0.5rem);
  --shadow-calendar-schedule: var(--shadow-md);
  --bg-calendar-schedule: var(--utility-neutral-900);
  --bg-calendar-schedule-surface: var(--utility-neutral-850);
  --border-calendar-schedule: var(--utility-neutral-700);
  --bg-calendar-schedule-today: var(--utility-blue-950);
  --bg-calendar-schedule-hover: var(--utility-blue-900);
  --bg-calendar-schedule-now: var(--bg-info-solid);
  /* Calendar Schedule V2 */
  --bg-calendar-schedule-working-hours: transparent;
  --shadow-calendar-event: var(--shadow-sm);
  --shadow-calendar-event-hover: var(--shadow-md);
  --ring-calendar-event-focus: 0 0 0 4px var(--utility-blue-800);
  /* Calendar Schedule — Now Indicator */
  --bg-calendar-now-dot: var(--utility-red-400);
  --bg-calendar-now-line: var(--alpha-red-500-30);
  --bg-calendar-today-line: var(--alpha-red-500-10);
  /* Calendar Schedule — Stacked slot variant */
  /* Calendar Schedule — Frame layout */
  /* App: Inventory */
  --bg-inventory-grid-panel: var(--utility-neutral-900);
  --bg-inventory-card: transparent;
  --bg-inventory-card-hover: var(--utility-neutral-800);
  --border-inventory-card: transparent;
  --border-inventory-card-hover: transparent;
  --bg-inventory-image: var(--utility-neutral-800);
  --text-inventory-info: var(--alpha-white-100);
  --text-inventory-secondary: var(--utility-neutral-400);
  --bg-inventory-popover: var(--utility-neutral-800);
  --bg-inventory-popover-hover: var(--alpha-neutral-700-60);
  --text-inventory-tertiary: var(--utility-neutral-500);
  /* App: Gallery */
  --bg-gallery: var(--utility-neutral-900);
  --bg-gallery-card-hover: var(--utility-neutral-700);
  --text-gallery-card: var(--alpha-white-100);
  --text-gallery-header: var(--utility-neutral-100);

  /* Gallery component tokens — dark counterparts */
  --bg-gallery-item: transparent;
  --bg-gallery-item-hover: var(--utility-neutral-800);
  --bg-gallery-item-selected: var(--bg-info-subtle);
  --bg-gallery-item-image: var(--utility-neutral-800);
  --bg-gallery-item-upload: transparent;
  --text-gallery: var(--text-primary);
  --text-gallery-muted: var(--text-tertiary);
  --border-gallery: transparent;
  --border-gallery-item: transparent;
  --border-gallery-item-hover: var(--border-divider);
  --border-gallery-item-selected: var(--text-info);
  --border-gallery-item-upload: var(--border-divider);
  --shadow-gallery-item: 0 1px 2px rgba(0,0,0,0.18);
  --shadow-gallery-item-hover: 0 6px 20px rgba(0,0,0,0.45);
  --ring-gallery-focus: 0 0 0 3px color-mix(in oklch, var(--text-info) 30%, transparent);

  /* App: Landing / Navbar */
  --border-navbar: var(--alpha-0);
  --text-navbar: var(--alpha-white-100);
  --text-navbar-link-active: var(--alpha-white-100);
  --bg-navbar-link-hover: var(--alpha-0);
  --bg-navbar-link-active: var(--alpha-0);
  --border-navbar-dropdown: var(--utility-neutral-800);
  --radius-navbar-card: var(--radius-md);
  --text-navbar-card-title: var(--text-primary);
  --text-navbar-card-caption: var(--text-secondary);
  /* App: Mobile Nav */

  /* =========================================
     Foundation Scales
     ========================================= */

  /* Shadow Scale (dark: higher opacity) */
  --shadow-xs: 0 1px 1px 0 oklch(0% 0 0 / 0.15);
  --shadow-sm: 0 1px 3px 0 oklch(0% 0 0 / 0.3), 0 1px 2px -1px oklch(0% 0 0 / 0.3);
  --shadow-md: 0 4px 6px -1px oklch(0% 0 0 / 0.3), 0 2px 4px -2px oklch(0% 0 0 / 0.3);
  --shadow-lg: 0 10px 15px -3px oklch(0% 0 0 / 0.3), 0 4px 6px -4px oklch(0% 0 0 / 0.3);
  --shadow-xl: 0 20px 25px -5px oklch(0% 0 0 / 0.3), 0 8px 10px -6px oklch(0% 0 0 / 0.3);
  --shadow-2xl: 0 25px 50px -12px oklch(0% 0 0 / 0.5);
  --shadow-inner: inset 0 2px 4px 0 oklch(0% 0 0 / 0.2);
  --shadow-none: 0 0 0 0 transparent;

  /* Radius Scale */
  --radius-none: 0;
  --radius-xs: 0.125rem;
  --radius-sm: 0.25rem;
  --radius-md: 0.375rem;
  --radius-lg: 0.5rem;
  --radius-xl: 0.75rem;
  --radius-2xl: 1rem;
  --radius-3xl: 1.5rem;
  --radius-full: 9999px;

  /* Z-Index: none here. The ONE ladder is components/foundations/layout.css :root (tq-9381) */

  /* Duration Scale */

  /* Easing Scale */

  /* Spacing Scale */
  --space-0: 0;
  --space-px: 1px;
  --space-0-5: 0.125rem;
  --space-1: 0.25rem;
  --space-1-5: 0.375rem;
  --space-2: 0.5rem;
  --space-3: 0.75rem;
  --space-4: 1rem;
  --space-5: 1.25rem;
  --space-6: 1.5rem;
  --space-8: 2rem;
  --space-10: 2.5rem;
  --space-12: 3rem;
  --space-16: 4rem;
  --space-20: 5rem;
  --space-24: 6rem;
  --space-32: 8rem;
  --space-40: 10rem;
  --space-48: 12rem;
  --space-64: 16rem;
  /* Blur Scale */
  --blur-none: 0;
  --blur-xs: 2px;
  --blur-sm: 4px;
  --blur-md: 8px;
  --blur-lg: 12px;
  --blur-xl: 20px;
  --blur-2xl: 40px;
  /* Focus + monochrome brand action (3b — inverts to white on dark) */
  /* Focus (Pavel #371 -> #373) — the ACCENT, same as light. Default borders here
     are neutral-for-dark (blue, #368); the brand appears only on :focus, so gold
     against the blue resting border is an unmistakable change of state. */
  /* Focus stays on utility-blue-400 and is NOT re-pointed at the brand by WHITELIST #1b.
     Verified against the new signature fill: blue-400 (#56A2FF) vs the dark body 6.84:1 and
     vs the dark card 6.36:1 — comfortably over 1.4.11's 3:1. --ring-focus lays a 2px
     body-coloured gap BEFORE the ring, so the ring is measured against the page and never
     against the button it surrounds (blue-400 directly adjacent to brand-500 is 1.67:1). */
  --border-focus: var(--border-brand);             /* was --utility-blue-400. REVERSED to mirror isabella's PR 456 in the seed product: a blue focus ring in a colour brand reads as the browser default (Pavel's cross-project complaint). Safe because --border-brand is the AA-certified border step, not the bright ramp — re-key the brand and re-measure before assuming it holds. */
  --focus-ring: var(--utility-emerald-500);  /* tq-8912 (A131; origin Enodia tq-8915): THE one opaque focus ring; the brand border step, 4.2-8.0:1 on every dark surface */
  --ring-focus: 0 0 0 2px var(--bg-body, #1a1a1a), 0 0 0 4px var(--border-focus);
  /* WHITELIST #1b — SIGNATURE STEP = 500 (Pavel 2026-07-24). This token is now brand-500,
     THE SAME VALUE AS LIGHT (#226EFF) — that light/dark parity is the point of the change.
     It supersedes the #250/#251/#253 resolution, which lifted the fill to brand-400 with
     neutral-900 ink; that was the gold-era "bright fill + dark ink" model and it cannot
     survive a mid-blue signature (neutral-950 on brand-500 is 4.47:1 / APCA Lc 34.0 —
     under AA *and* illegible; only pure black clears 4.5:1, at Lc 34.2). Ink flips to WHITE with the fill.
     LADDER DARKENS via the same color-mix light uses (so every state is byte-identical
     across the two themes) rather than lightening, so the white ink holds:
       rest 4.43:1 (Lc 75.4) · hover 5.62:1 · active 7.21:1
     The resting 4.43:1 is 0.07 under WCAG AA and is the accepted tradeoff of the 500 step —
     see the full note in theme-light.css.
     REGRESSION TO WATCH (pre-existing token misuse, not introduced here): ~9 rules still use
     var(--bg-brand-solid) as a text COLOUR (marketing eyebrows/kickers, step-status marker,
     reaction count, automation kicker). As ink on the dark body those go 5.96:1 → 4.09:1.
     The correct token for that role is --text-brand (brand-400, 5.96:1) — worth a sweep.
     .btn-primary's dark hover derives from this token via color-mix (#84), so it tracks. */
  --bg-brand-solid: var(--bg-button-primary); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --bg-brand-solid-hover: var(--bg-button-primary-hover); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --bg-brand-solid-active: var(--bg-button-primary-active); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --text-on-brand: var(--color-white);
  --border-brand: var(--utility-emerald-500); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  /* Brand INK — see theme-light. On a dark surface the bright step IS the readable one,
     so brand-400 serves as both fill and ink here. */
  --text-brand: var(--utility-emerald-400); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */
  --border-disabled: var(--utility-neutral-700);

  /* Button: Success — green-600 under white ink is 3.22:1, under AA for the 13px/600
     label. Dark's ladder LIGHTENS on hover, so darkening the base the way light does
     would fight the convention and make hover worse, not better. Instead this takes the
     model the brand overlay already uses on light fills: keep the green bright and put
     DARK ink on it. green-500 under neutral-950 is 8.93:1, and the ladder still lightens
     (500 -> 400 -> 300, rising to 11.13:1 and 14.13:1). */
  --bg-button-success: var(--utility-green-600);
  --bg-button-success-hover: var(--utility-green-500);
  --bg-button-success-active: var(--utility-green-400);
  --text-button-success: var(--alpha-white-100);
  --border-button-success: var(--alpha-0);

  /* Empty State */
  --bg-empty-state-icon: var(--utility-neutral-800);

  /* Skeleton */
  --bg-skeleton: var(--utility-neutral-800);
  --bg-skeleton-highlight: var(--utility-neutral-700);

  /* Combobox */
  --bg-combobox: var(--bg-input);
  --bg-combobox-search: var(--utility-neutral-850);
  --bg-combobox-listbox: var(--bg-input);
  --bg-combobox-option-hover: var(--bg-dropdown-hover);
  --bg-combobox-option-active: var(--bg-dropdown-active);
  --bg-combobox-option-selected: var(--bg-dropdown-selected);
  --text-combobox: var(--text-input);
  --text-combobox-placeholder: var(--text-input-placeholder);
  --text-combobox-option: var(--text-primary);
  --text-combobox-option-selected: var(--text-dropdown-selected);
  --text-combobox-option-meta: var(--text-tertiary);
  --text-combobox-option-check: var(--text-success);
  --border-combobox: var(--border-input);
  --border-combobox-hover: var(--border-input-hover);
  --border-combobox-focus: var(--border-input-active);
  --shadow-combobox-listbox: var(--shadow-dropdown);
  --ring-combobox-focus: var(--ring-input-focus);
  --bg-combobox-header: var(--bg-input);
  --border-combobox-header: var(--border-dropdown-divider);
  --bg-combobox-footer: var(--bg-input);
  --border-combobox-footer: var(--border-dropdown-divider);
  --opacity-combobox-grain: var(--opacity-dropdown-grain, 0);

  /* =========================================
     Accordion
     ========================================= */
  --bg-accordion:                 var(--utility-neutral-900);
  --bg-accordion-trigger:         transparent;
  --bg-accordion-trigger-hover:   var(--utility-neutral-850);
  --bg-accordion-trigger-active:  var(--utility-neutral-800);
  --bg-accordion-trigger-open:    var(--utility-neutral-850);
  --bg-accordion-body:            transparent;
  --bg-accordion-body-filled:     var(--utility-neutral-850);
  --bg-accordion-card:            var(--utility-neutral-900);

  --text-accordion-title:         var(--utility-neutral-100);
  --text-accordion-title-open:    var(--utility-neutral-50);
  --text-accordion-description:   var(--utility-neutral-400);
  --text-accordion-body:          var(--utility-neutral-200);
  --text-accordion-meta:          var(--utility-neutral-500);
  --text-accordion-chevron:       var(--utility-neutral-500);
  --text-accordion-chevron-hover: var(--utility-neutral-200);

  --border-accordion:             var(--utility-neutral-800);
  --border-accordion-divider:     var(--utility-neutral-850);
  --border-accordion-open:        var(--utility-neutral-700);
  --border-accordion-success:     var(--utility-green-400);
  --border-accordion-warning:     var(--utility-amber-400);
  --border-accordion-danger:      var(--utility-red-400);
  --border-accordion-info:        var(--utility-blue-400);

  /* Single 2px inset focus ring in the brand accent — resolves through
     --border-focus so it stays on-brand and theme-aware. */
  --ring-accordion-focus:         inset 0 0 0 2px var(--border-focus);
  --shadow-accordion-card:        0 1px 2px oklch(0% 0 0 / 0.35);
  --shadow-accordion-card-open:   0 2px 8px oklch(0% 0 0 / 0.50);

  --radius-accordion:             0.5rem;
  --radius-accordion-item:        0.375rem;

  /* =========================================
     Collapse
     ========================================= */
  --bg-collapse-trigger:          transparent;
  --bg-collapse-trigger-hover:    var(--utility-neutral-850);
  --bg-collapse-trigger-open:     var(--utility-neutral-850);
  --bg-collapse-section-header:   var(--utility-neutral-850);
  --bg-collapse-section:          var(--utility-neutral-900);

  --text-collapse-trigger:        var(--utility-neutral-100);
  --text-collapse-trigger-muted:  var(--utility-neutral-400);
  --text-collapse-chevron:        var(--utility-neutral-500);
  --text-collapse-chevron-open:   var(--utility-neutral-200);
  --text-collapse-meta:           var(--utility-neutral-500);

  --border-collapse:              var(--utility-neutral-800);
  /* n850 -> n750: n850 IS --bg-card/--bg-surface in dark, and .collapse-trigger paints
     --bg-card, so this divider was painted on its own fill at 1.000:1 — RENDERED on
     /Design/Page/collapse, twice, by two independent probes. The one card-rung token of the
     three that survived rendering as a real defect (accordion is never painted on a card;
     mail-item has no consumers). n750 clears every dark surface — 1.177 on --bg-card here.
     LIGHT DELIBERATELY UNTOUCHED (neutral-100, 1.045 on #fafafa — quiet by intent). */
  --border-collapse-divider:      var(--utility-neutral-750);
  --border-collapse-intent-success: var(--utility-green-400);
  --border-collapse-intent-warning: var(--utility-amber-400);
  --border-collapse-intent-danger:  var(--utility-red-400);
  --border-collapse-intent-info:    var(--utility-blue-400);

  /* Single 2px inset focus ring — same UUI brand accent as accordion + inputs. */
  --ring-collapse-focus:          inset 0 0 0 2px var(--border-focus);

  /* Popover */
  --bg-popover: var(--bg-surface);
  --bg-popover-modal: var(--utility-neutral-750);
  --text-popover: var(--text-primary);
  --border-popover: var(--border-primary);
  --shadow-popover: var(--shadow-lg);
  --radius-popover: var(--radius-lg);
  --bg-popover-arrow: var(--bg-surface);
  --border-popover-arrow: var(--border-primary);
  /* Popover — chrome / slots */
  --text-popover-title:        var(--utility-neutral-50);
  --text-popover-subtitle:     var(--utility-neutral-400);
  --text-popover-muted:        var(--utility-neutral-500);
  --border-popover-divider:    var(--utility-neutral-800);
  --bg-popover-header:         transparent;
  --bg-popover-footer:         transparent;
  --bg-popover-menu-hover:     var(--utility-neutral-850);
  --bg-popover-menu-active:    var(--utility-neutral-800);
  --bg-popover-kbd:            var(--utility-neutral-800);
  --text-popover-kbd:          var(--utility-neutral-200);
  --border-popover-kbd:        var(--utility-neutral-700);
  /* Popover — visual variants */
  --bg-popover-soft:           var(--utility-neutral-900);
  --border-popover-soft:       transparent;
  --shadow-popover-soft:       0 4px 16px oklch(0% 0 0 / 0.5), 0 1px 3px oklch(0% 0 0 / 0.3);
  --bg-popover-glass:          oklch(18% 0.005 250 / 0.7);
  --border-popover-glass: oklch(100% 0 0 / 0.08); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --bg-popover-dark:           var(--utility-neutral-800);
  --text-popover-dark:         oklch(100% 0 0);
  --border-popover-dark:       var(--utility-neutral-700);
  --bg-popover-dark-arrow:     var(--utility-neutral-800);
  --bg-popover-card:           var(--utility-neutral-900);
  --shadow-popover-card:       0 12px 28px oklch(0% 0 0 / 0.55), 0 2px 6px oklch(0% 0 0 / 0.35);
  /* Popover — intent strips */
  --border-popover-intent-success: var(--utility-green-400);
  --border-popover-intent-warning: var(--utility-amber-400);
  --border-popover-intent-danger:  var(--utility-red-400);
  --border-popover-intent-info:    var(--utility-blue-400);
  /* Popover — pin button + loading */
  --text-popover-pin:          var(--utility-neutral-500);
  --text-popover-pin-active:   var(--utility-blue-300);
  --bg-popover-pin-hover:      var(--utility-neutral-800);
  --bg-popover-skeleton:       var(--utility-neutral-800);

  /* Command Palette */
  /* Pavel #140/#159 — "make the command search pop-up bg even darker in dark mode".
     --bg-surface resolved to neutral-850 (#1e1e1e); one rung down the ramp to
     neutral-900 (#171717). There is nothing between them, and neutral-950 (#0a0a0a)
     was measured and REJECTED: against the real 60%-black backdrop it lands at
     1.005:1, i.e. the palette would disappear into its own scrim.
     Darkening buys keycap separation (the point — the keycaps keep --bg-kbd at
     #262626, so palette-vs-keycap goes 1.102 -> 1.185) and costs edge definition
     against what is behind it, so the dialog takes an explicit border below. */
  /* #140 + #164(2) RECONCILED INTO ONE VALUE, not darkened twice. Both notes ask for the
     same surface: #140 "give it a darker default BG so that we can have more contrast with
     text and things like the KBD buttons in the footer"; #164 "make the command search
     pop-up bg even darker in dark mode".
     MEASURED BEFORE CHANGING (1680x1000, theme-dark asserted, canvas-resolved):
        palette surface #171717 on a #171717 page = 1.000:1 — the dialog was EXACTLY the
        page colour, which is why it read as having no contrast at all.
        footer KBD chip #262626 on that surface = 1.185:1 — the keycaps barely separated.
     n900 -> n950 (#0a0a0a): surface now steps off the page, and the KBD chips gain contrast
     without being re-valued, which is what #140 asked for.
     CHECKED, NOT ASSUMED: --bg-input is also n950, so a palette input painted --bg-input
     would have vanished into this surface — measured, the palette input is `transparent`,
     so there is no collision. --canvas-secondary is n950 too but never adjacent to an
     overlay. #209's frozen surfaces are untouched; this is a distinct overlay token. */
  --bg-command-palette: var(--utility-neutral-950);
  --bg-command-palette-backdrop: oklch(0% 0 0 / 0.6);
  --bg-command-palette-item-hover: var(--bg-primary-hover);
  --bg-command-palette-item-active: var(--bg-quaternary);
  --text-command-palette: var(--text-primary);
  --text-command-palette-muted: var(--text-tertiary);
  --border-command-palette: var(--border-primary);
  --shadow-command-palette: var(--shadow-xl);
  --radius-command-palette: var(--radius-xl);

  /* Messaging */
  --bg-msg-panel: var(--utility-neutral-900);
  --bg-msg-composer-area: var(--bg-surface);
  --border-msg-panel: var(--border-secondary);
  --bg-msg-inbound: var(--utility-neutral-800);
  --text-msg-inbound: var(--text-primary);
  --border-msg-inbound: var(--utility-neutral-700);
  --bg-msg-outbound: var(--utility-indigo-900);
  --text-msg-outbound: var(--utility-indigo-100);
  --border-msg-outbound: transparent;
  --bg-msg-system: var(--utility-neutral-800);
  --text-msg-system: var(--text-tertiary);
  --text-msg-sender: var(--text-primary);
  --text-msg-time: var(--text-quaternary);
  /* tq-9030 (A141, isabella 900067681): the reaction chip is the app's shipped look (the app is the only consumer) */
  --bg-msg-reaction: var(--bg-primary-subtle);
  --border-msg-reaction: var(--border-primary);
  --text-msg-reaction: var(--text-secondary);
  --bg-msg-reaction-hover: var(--bg-secondary-subtle);
  /* tq-9030 (A141, isabella 900067717): the composer's send button, the app's shipped emerald step, explicit in BOTH themes */
  /* tq-9106 (A146, isabella 900067742): the app composer's field surface (.msg-composer__inner): white in light as it shipped,
     the input surface in dark (it was a #ffffff literal: near-white text on white in dark) */
  --bg-msg-composer-field: var(--bg-input);
  /* tq-9138 (A157, isabella 900068581): the composer attachment's remove badge is ALWAYS visible on touch, over ANY preview
     (a white or a black image), so it needs a mid-luminance fill: red-600 (L ~ 0.17) is >= 4.4:1 against white AND black,
     with a white glyph (~4.8:1). The danger-solid fill it used was red-800 / red-200 (2.51:1 on a dark image in light, 1.45:1
     on a light image in dark). The same pair in both themes. */
  --bg-msg-attachment-remove: var(--utility-red-600);
  --text-msg-attachment-remove: var(--alpha-white-100);
  /* tq-9106 (A146, isabella 900068006): DARK is a lighter accent with a dark glyph. On the dark composer field
     (--bg-msg-composer-field = neutral-800) emerald-800 measured 1.99:1; now rest emerald-500 (fill 6.12 / glyph 8.00),
     hover emerald-400 (7.81 / 10.21), active emerald-600 (4.14 / 5.42). No dark on-accent text token resolves to ~neutral-950
     (--text-on-brand is white), so the glyph is the primitive. */
  --bg-msg-composer-send: var(--utility-emerald-500);
  --bg-msg-composer-send-hover: var(--utility-emerald-400);
  --bg-msg-composer-send-active: var(--utility-emerald-600);
  --bg-msg-composer-send-disabled: var(--utility-emerald-500);
  --text-msg-composer-send: var(--utility-neutral-950);
  /* tq-9030 (A141, isabella 900067741): the accent reply chip, the app's shipped bar + fill, explicit in BOTH themes */
  --border-msg-reply-accent: var(--utility-emerald-500);   /* dark's brand edge step (as --focus-ring): emerald-800 measured 2.36:1 on the dark composer */
  --bg-msg-reply-accent: var(--bg-card-hover-surface);
  --bg-msg-reaction-active: var(--bg-info-subtle);
  --border-msg-reaction-active: var(--border-info);
  --text-msg-reaction-active: var(--text-info);
  --bg-msg-composer: var(--bg-input);
  --border-msg-composer: var(--border-input);
  --border-msg-composer-focus: var(--border-input-focus);
  --bg-msg-send: var(--bg-primary-solid);
  --text-msg-send: var(--alpha-white-100);
  --bg-msg-actions: var(--utility-neutral-800);
  --border-msg-actions: var(--utility-neutral-700);
  --bg-msg-conversation-hover: var(--bg-primary-hover);
  --bg-msg-conversation-active: var(--bg-quaternary);
  --bg-msg-conversation-unread: var(--bg-info-subtle);
  --bg-msg-badge: var(--bg-primary-solid);
  --text-msg-badge: var(--utility-neutral-950);  /* tq-8381 (R16): was white on the near-white dark badge (1.09:1); 18.16:1 */
  --text-msg-conversation-time: var(--text-secondary);  /* tq-8381 (R16): the quaternary fallback read 4.01:1 on the unread row; 7.00:1 */

  /* Bulk Action Bar */
  --bg-bulk-action-bar: var(--utility-neutral-850);
  --text-bulk-action-bar: var(--text-primary);
  --border-bulk-action-bar: var(--border-primary);
  --shadow-bulk-action-bar: 0 -4px 24px -4px oklch(0% 0 0 / 0.4), 0 -2px 8px -2px oklch(0% 0 0 / 0.2);

  /* Kbd */
  --bg-kbd: var(--utility-neutral-800);
  --text-kbd: var(--utility-neutral-200);
  --border-kbd: var(--utility-neutral-700);
  --shadow-kbd: 0 1px 0 0 var(--utility-neutral-900);

  /* Inline Edit (click-to-edit fields) */
  --bg-inline-edit:                transparent;
  --bg-inline-edit-hover:          var(--utility-neutral-850);
  --bg-inline-edit-editing: var(--bg-input);
  --bg-inline-edit-saving:         var(--utility-neutral-850);
  --bg-inline-edit-success-flash:  oklch(35% 0.12 145 / 0.35);
  --bg-inline-edit-error:          oklch(35% 0.13 30  / 0.35);
  --bg-inline-edit-readonly:       var(--utility-neutral-850);
  --bg-inline-edit-trigger-hover:  var(--utility-neutral-800);

  --text-inline-edit:              var(--text-primary);
  --text-inline-edit-muted:        var(--text-tertiary);
  --text-inline-edit-trigger:      var(--utility-neutral-500);
  --text-inline-edit-trigger-hover:var(--utility-neutral-200);
  --text-inline-edit-placeholder:  var(--utility-neutral-500);
  --text-inline-edit-success:      var(--utility-green-300);
  --text-inline-edit-error:        var(--utility-red-300);
  --text-inline-edit-readonly:     var(--utility-neutral-500);
  --text-inline-link-edit:         var(--text-link);
  --text-inline-link-edit-hover:   var(--text-link-hover);

  --border-inline-edit:            transparent;
  --border-inline-edit-hover:      var(--utility-neutral-700);
  --border-inline-edit-editing: var(--border-input-focus);
  --border-inline-edit-success:    var(--utility-green-400);
  --border-inline-edit-error:      var(--utility-red-400);
  --border-inline-edit-readonly:   var(--utility-neutral-800);

  --ring-inline-edit-focus:        oklch(70% 0.13 250 / 0.28);
  --ring-inline-edit-error:        oklch(70% 0.18 30  / 0.28);
  --ring-inline-edit-success:      oklch(70% 0.13 145 / 0.28);

  --shadow-inline-edit-focus:      0 0 0 3px var(--ring-inline-edit-focus);
  --shadow-inline-edit-error:      0 0 0 3px var(--ring-inline-edit-error);
  --shadow-inline-edit-success:    0 0 0 3px var(--ring-inline-edit-success);
  --shadow-inline-edit-popover:    0 8px 28px oklch(0% 0 0 / 0.5), 0 2px 6px oklch(0% 0 0 / 0.3);

  /* Range Slider */
  --bg-range-track: var(--utility-neutral-700);
  --bg-range-fill: var(--bg-primary-solid);
  --bg-range-thumb: var(--utility-neutral-200);
  --border-range-thumb: var(--bg-primary-solid);
  --shadow-range-thumb: var(--shadow-sm);

  /* Line Toast tokens retired with the component (tq-9368: the USER chose the Signal pill) */

  /* Signal Pill — Solid surface (dark elevated chip) */
  --bg-signal-pill-solid: var(--utility-neutral-800);
  --text-signal-pill-solid: var(--alpha-white-100);
  --text-signal-pill-solid-muted: var(--alpha-white-70);
  --border-signal-pill-solid: var(--alpha-white-10);
  --icon-signal-pill-solid: var(--alpha-white-90);
  /* Signal Pill — Glass surface (dark frosted) */
  --bg-signal-pill-glass: var(--alpha-neutral-900-70);
  --text-signal-pill-glass: var(--alpha-white-100);
  --text-signal-pill-glass-muted: var(--alpha-white-70);
  --border-signal-pill-glass: var(--alpha-white-20); /* surface-collision-ok: white/alpha on media or glass — never painted on a theme surface */
  --icon-signal-pill-glass: var(--alpha-white-80);
  --blur-signal-pill-glass: blur(24px) saturate(160%);
  /* Signal Pill — Shadow & shape */
  --shadow-signal-pill: 0 12px 32px -8px oklch(0% 0 0 / 0.55), 0 4px 12px -4px oklch(0% 0 0 / 0.35);
  --shadow-signal-pill-glass: 0 12px 32px -8px oklch(0% 0 0 / 0.45), 0 2px 8px -2px oklch(0% 0 0 / 0.25);
  --radius-signal-pill: var(--radius-full);
  /* Signal Pill — Status: elevated dark surface, icon-only color */
  --bg-signal-pill-success: var(--utility-neutral-800);
  --text-signal-pill-success: var(--text-primary);
  --icon-signal-pill-success: var(--utility-green-400);
  --bg-signal-pill-danger: var(--utility-neutral-800);
  --text-signal-pill-danger: var(--text-primary);
  --icon-signal-pill-danger: var(--utility-red-400);
  --bg-signal-pill-warning: var(--utility-neutral-800);
  --text-signal-pill-warning: var(--text-primary);
  --icon-signal-pill-warning: var(--utility-yellow-400);
  --bg-signal-pill-info: var(--utility-neutral-800);
  --text-signal-pill-info: var(--text-primary);
  --icon-signal-pill-info: var(--utility-blue-400);
  --bg-signal-pill-neutral: var(--utility-neutral-800);
  --text-signal-pill-neutral: var(--text-primary);
  --icon-signal-pill-neutral: var(--text-secondary);
  --bg-signal-pill-loading: var(--utility-neutral-800);
  --text-signal-pill-loading: var(--text-primary);
  --icon-signal-pill-loading: var(--utility-blue-400);
  --bg-signal-pill-action: var(--utility-neutral-800);
  --text-signal-pill-action: var(--text-primary);
  --icon-signal-pill-action: var(--utility-blue-400);
  --text-signal-pill-action-label: var(--text-link);
  --text-signal-pill-action-label-hover: var(--text-link-hover);

  /* Activity Feed */
  --bg-activity-feed-item: var(--bg-surface);
  --bg-activity-feed-item-hover: var(--bg-primary-hover);
  --bg-activity-feed-item-unread: var(--bg-info-subtle);
  --text-activity-feed-action: var(--text-secondary);
  --text-activity-feed-target: var(--text-link);
  --text-activity-feed-meta: var(--text-tertiary);
  --border-activity-feed-item: var(--border-secondary);
  /* Activity Feed — UUI-faithful connected model (application/activity-feed) */
  --border-activity-feed-connector: var(--border-primary);
  --border-activity-feed-message: var(--border-secondary);
  --bg-activity-feed-message: transparent;
  --text-activity-feed-unseen: var(--text-success);
  --text-activity-feed-user: var(--text-secondary);
  --text-activity-feed-comment: var(--text-tertiary);


  /* Table Resize */
  --bg-table-resize-handle: transparent;
  --bg-table-resize-handle-hover: var(--utility-blue-400);
  --bg-table-resize-handle-active: var(--utility-blue-500);

  /* Table Detail Row */
  --bg-table-row-detail: var(--utility-neutral-850);


  /* R2 tq-8176 (c): tokens the served app defines and its CSS consumes, absent here until now. Values = src/reinly.webapp @ 09387252. */
  --scroll-size-xs: 4px;
  --ring-input-focus: var(--alpha-emerald-500-20);
  --bg-card-hover-surface: var(--alpha-emerald-900-10);

  /* tq-9626 (A313; isabella 900077729): the MOTION tokens (--duration-* / --ease-*) left this block. Declared on the themed
     <body>, a literal here beat :root's var(--motion-fast) by INHERITANCE, so --duration-fast ignored prefers-reduced-motion
     app-wide. base/motion.css is their one source (the app imports it too now).
     tq-8176 follow-up (erlich 900048090, R4): the app consumes these. The DS defined the scroll tokens only in the
     @theme block in base/theme.css, which R4 cannot import, so they are stated here too, with the same values.
     tq-9606 (A312; isabella 900077424): the five flatpickr *_hover aliases are gone: plugins/flatpickr.css reads the
     -hover tokens every theme defines (the aliases were light-only, so dark fell through). */
  --scroll-size: 8px;
  --scroll-size-sm: 6px;
}

/* Accent presets for dark theme (Mica Dark inherits them — same base) */
[data-theme="theme-dark"][data-accent="purple"],
[data-theme="theme-mica-dark"][data-accent="purple"] {
  --bg-primary-solid: var(--utility-purple-500);
  --bg-primary-solid-hover: var(--utility-purple-400);
  --bg-primary-solid-active: var(--utility-purple-300);
  --border-primary-solid: var(--utility-purple-500);
  --text-link: var(--utility-purple-300);
  --text-link-hover: var(--utility-purple-200);
}

[data-theme="theme-dark"][data-accent="teal"],
[data-theme="theme-mica-dark"][data-accent="teal"] {
  --bg-primary-solid: var(--utility-teal-500);
  --bg-primary-solid-hover: var(--utility-teal-400);
  --bg-primary-solid-active: var(--utility-teal-300);
  --border-primary-solid: var(--utility-teal-500);
  --text-link: var(--utility-teal-300);
  --text-link-hover: var(--utility-teal-200);
}

[data-theme="theme-dark"][data-accent="green"],
[data-theme="theme-mica-dark"][data-accent="green"] {
  --bg-primary-solid: var(--utility-green-500);
  --bg-primary-solid-hover: var(--utility-green-400);
  --bg-primary-solid-active: var(--utility-green-300);
  --border-primary-solid: var(--utility-green-500);
  --text-link: var(--utility-green-300);
  --text-link-hover: var(--utility-green-200);
}

[data-theme="theme-dark"][data-accent="orange"],
[data-theme="theme-mica-dark"][data-accent="orange"] {
  --bg-primary-solid: var(--utility-orange-500);
  --bg-primary-solid-hover: var(--utility-orange-400);
  --bg-primary-solid-active: var(--utility-orange-300);
  --border-primary-solid: var(--utility-orange-500);
  --text-link: var(--utility-orange-300);
  --text-link-hover: var(--utility-orange-200);
}

[data-theme="theme-dark"][data-accent="pink"],
[data-theme="theme-mica-dark"][data-accent="pink"] {
  --bg-primary-solid: var(--utility-pink-500);
  --bg-primary-solid-hover: var(--utility-pink-400);
  --bg-primary-solid-active: var(--utility-pink-300);
  --border-primary-solid: var(--utility-pink-500);
  --text-link: var(--utility-pink-300);
  --text-link-hover: var(--utility-pink-200);
}

/* Dark high contrast */
[data-theme="theme-dark"][data-contrast="high"],
[data-theme="theme-mica-dark"][data-contrast="high"] {
  --text-primary: oklch(100% 0 0);
  --text-secondary: oklch(90% 0 0);
  --text-tertiary: oklch(80% 0 0);
  --text-quaternary: oklch(70% 0 0);
  --border-primary: oklch(60% 0 0);
  --border-input: oklch(65% 0 0);
  --border-input-hover: oklch(75% 0 0);
  --border-card: oklch(55% 0 0);
  --border-table: oklch(55% 0 0);
}

/* ==========================================================================
   DARK-MODE COMPONENT OVERRIDES
   ────────────────────────────────────────────────────────────────────────
   The shared --bg-*-solid tokens resolve to -200 pastels in dark mode
   (great for badges + chips), but used as a full filled alert banner those
   pastels are blinding. Override only inside .alert--*-solid so other
   components keep their bright pastels.
   ========================================================================== */

[data-theme="theme-dark"] .alert--info-solid,
[data-theme="theme-mica-dark"] .alert--info-solid {
  --bg-alert: var(--utility-blue-500);
  --border-alert: var(--utility-blue-500);
  --text-alert: var(--alpha-white-100);
  --icon-alert: var(--alpha-white-100);
  --text-alert-dismiss: rgba(255, 255, 255, 0.8);
  --bg-alert-dismiss-hover: rgba(255, 255, 255, 0.18);
}

[data-theme="theme-dark"] .alert--success-solid,
[data-theme="theme-mica-dark"] .alert--success-solid {
  --bg-alert: var(--utility-green-500);
  --border-alert: var(--utility-green-500);
  --text-alert: var(--alpha-white-100);
  --icon-alert: var(--alpha-white-100);
  --text-alert-dismiss: rgba(255, 255, 255, 0.8);
  --bg-alert-dismiss-hover: rgba(255, 255, 255, 0.18);
}

[data-theme="theme-dark"] .alert--warning-solid,
[data-theme="theme-mica-dark"] .alert--warning-solid {
  /* Warning stays an amber surface but tuned down from -200 to -500.
     Dark ink remains readable on amber-500. */
  --bg-alert: var(--utility-amber-500);
  --border-alert: var(--utility-amber-500);
  --text-alert: var(--utility-amber-950, #451a03);
  --icon-alert: var(--utility-amber-950, #451a03);
  --text-alert-dismiss: rgba(0, 0, 0, 0.7);
  --bg-alert-dismiss-hover: rgba(0, 0, 0, 0.12);
}

[data-theme="theme-dark"] .alert--danger-solid,
[data-theme="theme-mica-dark"] .alert--danger-solid {
  --bg-alert: var(--utility-red-500);
  --border-alert: var(--utility-red-500);
  --text-alert: var(--alpha-white-100);
  --icon-alert: var(--alpha-white-100);
  --text-alert-dismiss: rgba(255, 255, 255, 0.8);
  --bg-alert-dismiss-hover: rgba(255, 255, 255, 0.18);
}

/* ============================================================================
   AI · Agentic · Generative UI — semantic tokens (DARK)
   Mirror of the light block in theme-light.css. Accents run brighter so they
   read on dark surfaces; glows carry a touch more presence.
   ============================================================================ */
[data-theme="theme-dark"],
[data-theme="theme-mica-dark"] {
  /* —— AI accent = VIOLET (Pavel #352, reverses #214) — see theme-light. The AI
     identity is purple, decoupled from the blue brand. Dark uses the lighter violet
     steps for AA on the dark card: text-ai-accent violet-400 5.39:1. The bg-ai-accent
     fill stays violet-600 (theme-invariant chip) with white text 5.88:1. ————————— */
  --text-ai-accent: var(--utility-violet-400);
  --text-ai-accent-strong: var(--utility-violet-300);
  --text-ai-on-accent: var(--alpha-white-100);
  --bg-ai-accent-hover: var(--utility-violet-700);

  /* —— Surfaces (NEUTRAL — hue lives on borders + shadows, never the fill) — */
  --bg-ai-surface: var(--bg-card);
  --bg-ai-surface-subtle: color-mix(in oklch, var(--text-primary) 5%, var(--bg-card));
  --bg-ai-surface-active: color-mix(in oklch, var(--text-primary) 10%, var(--bg-card));
  --bg-ai-input: var(--bg-input);
  --bg-ai-panel: var(--bg-card);
  --bg-ai-dock: var(--bg-card);
  --bg-ai-canvas: color-mix(in oklch, var(--text-primary) 4%, var(--bg-surface));
  --bg-ai-generated: color-mix(in oklch, var(--text-primary) 4%, var(--bg-card));
  --bg-ai-message: color-mix(in oklch, var(--text-primary) 5%, var(--bg-card));
  --bg-ai-message-user: color-mix(in oklch, var(--text-primary) 10%, var(--bg-card));
  --bg-ai-tool: color-mix(in oklch, var(--text-primary) 4%, var(--bg-card));
  --bg-ai-tool-result: color-mix(in oklch, var(--text-primary) 5%, var(--bg-card));
  --bg-ai-context: color-mix(in oklch, var(--text-primary) 4%, var(--bg-card));
  --bg-ai-memory: color-mix(in oklch, var(--text-primary) 4%, var(--bg-card));
  --bg-ai-chip: color-mix(in oklch, var(--text-primary) 6%, var(--bg-card));
  --bg-ai-chip-hover: color-mix(in oklch, var(--text-primary) 11%, var(--bg-card));
  --bg-ai-badge: color-mix(in oklch, var(--text-primary) 8%, transparent);

  /* —— State surfaces (NEUTRAL — status reads from border + shadow + icon) — */
  --bg-ai-thinking: color-mix(in oklch, var(--text-primary) 5%, var(--bg-card));
  --bg-ai-streaming: color-mix(in oklch, var(--text-primary) 5%, var(--bg-card));
  --bg-ai-approval: color-mix(in oklch, var(--text-primary) 5%, var(--bg-card));
  --bg-ai-success-subtle: color-mix(in oklch, var(--text-primary) 5%, var(--bg-card));
  --bg-ai-warning-subtle: color-mix(in oklch, var(--text-primary) 6%, var(--bg-card));
  --bg-ai-error-subtle: color-mix(in oklch, var(--text-primary) 5%, var(--bg-card));

  /* —— Console / CLI ——————————————————————————————————————————————— */
  --bg-ai-console: var(--utility-neutral-950);
  --bg-ai-console-header: var(--utility-neutral-900);

  /* —— Skeleton / loading (NEUTRAL) ——————————————————————————————— */
  --bg-ai-skeleton: color-mix(in oklch, var(--text-primary) 9%, var(--bg-surface));
  --bg-ai-skeleton-shine: color-mix(in oklch, var(--text-primary) 14%, transparent);

  /* —— Text ———————————————————————————————————————————————————————— */
  --text-ai-primary: var(--text-primary);
  --text-ai-secondary: var(--text-secondary);
  --text-ai-muted: var(--text-tertiary);
  --text-ai-placeholder: var(--text-input-placeholder);
  --text-ai-streaming: var(--utility-blue-300);
  --text-ai-success: var(--text-success);
  --text-ai-warning: var(--text-warning);
  --text-ai-error: var(--text-danger);
  --text-ai-console: var(--utility-neutral-100);
  --text-ai-console-muted: var(--utility-neutral-500);
  --text-ai-console-prompt: var(--utility-teal-300);
  --text-ai-citation: var(--utility-blue-300);
  --text-ai-confidence-high: var(--utility-green-400);
  --text-ai-confidence-med: var(--utility-amber-400);
  --text-ai-confidence-low: var(--utility-neutral-400);

  /* —— Borders ————————————————————————————————————————————————————— */
  --border-ai-surface: var(--border-default);
  --border-ai-subtle: var(--border-divider);
  --border-ai-input: var(--border-input);
  --border-ai-input-hover: var(--border-input-hover);
  --border-ai-panel: color-mix(in oklch, var(--utility-violet-400) 28%, var(--border-default));
  --border-ai-thinking: color-mix(in oklch, var(--utility-violet-400) 55%, transparent);
  --border-ai-streaming: color-mix(in oklch, var(--utility-blue-400) 50%, transparent);
  --border-ai-approval: color-mix(in oklch, var(--utility-amber-500) 55%, transparent);
  --border-ai-tool: color-mix(in oklch, var(--utility-indigo-400) 40%, transparent);
  --border-ai-context: color-mix(in oklch, var(--utility-blue-400) 34%, transparent);
  --border-ai-generated: color-mix(in oklch, var(--utility-indigo-400) 44%, transparent);
  --border-ai-success: color-mix(in oklch, var(--utility-green-400) 48%, transparent);
  --border-ai-warning: color-mix(in oklch, var(--utility-amber-500) 55%, transparent);
  --border-ai-error: color-mix(in oklch, var(--utility-red-400) 50%, transparent);
  --border-ai-console: color-mix(in oklch, var(--utility-neutral-100) 12%, transparent);
  --border-ai-focus: var(--border-focus);

  /* —— Gradients ——————————————————————————————————————————————————— */
  --gradient-ai-accent: linear-gradient(120deg, var(--utility-violet-400), var(--utility-blue-400));
  --gradient-ai-active: linear-gradient(120deg, var(--utility-violet-400), var(--utility-blue-400) 55%, var(--utility-cyan-300));
  --gradient-ai-thinking: linear-gradient(120deg, var(--utility-violet-400), var(--utility-indigo-400) 38%, var(--utility-blue-400) 68%, var(--utility-violet-400));
  --gradient-ai-streaming: linear-gradient(120deg, var(--utility-blue-400), var(--utility-cyan-300) 50%, var(--utility-blue-400));
  --gradient-ai-border: linear-gradient(130deg, color-mix(in oklch, var(--utility-violet-400) 80%, transparent), color-mix(in oklch, var(--utility-blue-400) 70%, transparent));
  --gradient-ai-glow: radial-gradient(120% 120% at 50% 0%, color-mix(in oklch, var(--utility-violet-400) 26%, transparent), transparent 70%);
  --gradient-ai-generated: linear-gradient(130deg, color-mix(in oklch, var(--utility-indigo-400) 65%, transparent), color-mix(in oklch, var(--utility-teal-400) 55%, transparent));
  --gradient-ai-success: linear-gradient(120deg, var(--utility-green-400), var(--utility-teal-400));
  --gradient-ai-error: linear-gradient(120deg, var(--utility-red-400), var(--utility-orange-500));
  --gradient-ai-aurora: conic-gradient(from 0deg, var(--utility-violet-400), var(--utility-blue-400), var(--utility-cyan-300), var(--utility-teal-400), var(--utility-fuchsia-400), var(--utility-indigo-400), var(--utility-violet-400));
  --gradient-ai-orb: radial-gradient(circle at 35% 28%, var(--utility-cyan-300), var(--utility-blue-400) 42%, var(--utility-violet-500) 82%);
  /* Signature — the iridescent full-spectrum "this surface is AI" outline (purple→blue→pink→amber).
     THE AI-component marker: a soft rainbow ring for AI inputs + suggest affordances. See .ai-ambient--signature. */
  --gradient-ai-signature: linear-gradient(115deg, var(--utility-purple-400), var(--utility-blue-400) 34%, var(--utility-fuchsia-400) 66%, var(--utility-amber-300));
  --gradient-ai-signature-glow: linear-gradient(115deg, color-mix(in oklch, var(--utility-purple-400) 30%, transparent), color-mix(in oklch, var(--utility-blue-400) 26%, transparent) 34%, color-mix(in oklch, var(--utility-fuchsia-400) 28%, transparent) 66%, color-mix(in oklch, var(--utility-amber-300) 28%, transparent));
  --bg-ai-orb-sheen: color-mix(in oklch, var(--utility-neutral-50) 45%, transparent);
  --gradient-ai-skeleton: linear-gradient(90deg, transparent, var(--bg-ai-skeleton-shine), transparent);

  /* —— Glow colors + shadows ——————————————————————————————————————— */
  --glow-ai-thinking: color-mix(in oklch, var(--utility-violet-400) 50%, transparent);
  --glow-ai-active: color-mix(in oklch, var(--utility-blue-400) 46%, transparent);
  --shadow-ai-panel: 0 12px 36px -16px color-mix(in oklch, var(--utility-violet-400) 50%, transparent);
  --shadow-ai-dock: -8px 0 44px -22px color-mix(in oklch, var(--utility-violet-400) 45%, transparent);
  --shadow-ai-thinking: 0 0 0 1px color-mix(in oklch, var(--utility-violet-400) 28%, transparent), 0 0 30px -4px var(--glow-ai-thinking);
  --shadow-ai-active: 0 0 0 1px color-mix(in oklch, var(--utility-blue-400) 28%, transparent), 0 0 28px -6px var(--glow-ai-active);
  --shadow-ai-generated: 0 10px 34px -18px color-mix(in oklch, var(--utility-indigo-400) 55%, transparent);
  --shadow-ai-approval: 0 10px 30px -16px color-mix(in oklch, var(--utility-amber-500) 45%, transparent);
  --shadow-ai-console: 0 18px 54px -24px var(--alpha-black-80);

  /* —— Rings (3c DERIVE: SINGLE 2px inset ring in UUI's brand accent — no offset
     halo / double-ring, FAN-OUT §3; active + prompt track the same --border-focus) */
  --ring-ai-focus: inset 0 0 0 2px var(--border-focus);
  --ring-ai-active: 0 0 0 1px color-mix(in oklch, var(--border-focus) 60%, transparent);
  --ring-ai-prompt: 0 0 0 3px color-mix(in oklch, var(--border-focus) 20%, transparent);

  /* —— Diff (proposed changes) ———————————————————————————————————— */
  --bg-ai-diff-add: color-mix(in oklch, var(--text-primary) 5%, var(--bg-card));
  --bg-ai-diff-del: color-mix(in oklch, var(--text-primary) 8%, var(--bg-card));
  --bg-ai-diff-add-word: color-mix(in oklch, var(--utility-green-400) 34%, transparent);
  --bg-ai-diff-del-word: color-mix(in oklch, var(--utility-red-400) 32%, transparent);
  --bg-ai-diff-hunk: color-mix(in oklch, var(--text-primary) 6%, var(--bg-card));
  --bg-ai-diff-gutter: color-mix(in oklch, var(--text-primary) 6%, var(--bg-card));
  --text-ai-diff-add: var(--utility-green-300);
  --text-ai-diff-del: var(--utility-red-300);
  --text-ai-diff-gutter: var(--text-ai-muted);
  --text-ai-diff-hunk: var(--text-ai-citation);
  --border-ai-diff-add: var(--border-ai-success);
  --border-ai-diff-del: var(--border-ai-error);

  /* —— Console extras (surface is dark in both themes) ———————————— */
  --text-ai-console-warn: var(--utility-amber-400);
  --text-ai-console-info: var(--utility-blue-300);
  --text-ai-console-debug: var(--utility-violet-300);
  --text-ai-console-sys: var(--utility-neutral-500);
  --text-ai-console-cmt: var(--utility-green-400);
  --text-ai-console-tool: var(--utility-cyan-300);
  --bg-ai-console-gutter: color-mix(in oklch, var(--utility-neutral-100) 5%, transparent);
  --text-ai-console-gutter: var(--utility-neutral-500);
  --bg-ai-console-footer: var(--utility-neutral-900);
  --bg-ai-console-selection: color-mix(in oklch, var(--utility-violet-400) 40%, transparent);
  --bg-ai-console-active: color-mix(in oklch, var(--utility-neutral-100) 4%, transparent);
  --bg-ai-console-light: var(--utility-neutral-100);
  --text-ai-console-light: var(--utility-neutral-800);
  --border-ai-console-light: var(--border-default);

  /* —— Progress / inline / confidence ring / model pill —————————— */
  --bg-ai-progress-track: color-mix(in oklch, var(--text-primary) 12%, transparent);
  --gradient-ai-progress: var(--gradient-ai-active);
  --bg-ai-confidence-track: color-mix(in oklch, var(--text-ai-muted) 26%, transparent);
  --text-ai-ghost: color-mix(in oklch, var(--text-ai-accent) 60%, var(--text-ai-muted));
  --bg-ai-inline: color-mix(in oklch, var(--text-primary) 6%, transparent);
  --border-ai-inline: color-mix(in oklch, var(--utility-violet-400) 38%, transparent);
}

/* ============================================================================
   A2UI Labs · Agent-to-User Interface — semantic tokens (DARK)
   Workspace chrome for the AGUI laboratory. Extends the --*-ai-* layer:
   surfaces stay NEUTRAL (hue lives only on borders, shadows, rings, text,
   icons). Mirror of the block in theme-light.css — accents one step brighter,
   glows slightly stronger, neutral mixes one step deeper.
   ============================================================================ */
[data-theme="theme-dark"],
[data-theme="theme-mica-dark"] {
  /* —— Surfaces (NEUTRAL — hue never on the fill) ——————————————————— */
  --bg-a2ui: color-mix(in oklch, var(--text-primary) 4%, var(--bg-surface));
  --bg-a2ui-panel: var(--bg-card);
  --bg-a2ui-surface: color-mix(in oklch, var(--text-primary) 5%, var(--bg-card));
  --bg-a2ui-hover: color-mix(in oklch, var(--text-primary) 9%, var(--bg-card));
  --bg-a2ui-active: color-mix(in oklch, var(--text-primary) 12%, var(--bg-card));

  /* —— Borders ————————————————————————————————————————————————————— */
  --border-a2ui: var(--border-default);
  --border-a2ui-subtle: var(--border-divider);

  /* —— Text ———————————————————————————————————————————————————————— */
  --text-a2ui: var(--text-primary);
  --text-a2ui-muted: var(--text-tertiary);

  /* —— Shadows + rings (the AI hue is allowed here) ————————————————— */
  --shadow-a2ui: 0 10px 30px -18px color-mix(in oklch, var(--utility-violet-400) 40%, transparent);
  --shadow-a2ui-hover: 0 14px 38px -16px color-mix(in oklch, var(--utility-violet-400) 50%, transparent);
  --ring-a2ui: 0 0 0 3px color-mix(in oklch, var(--utility-violet-400) 22%, transparent);
}

/* ============================================================================
   UI Labs · Prototyping workspace — semantic tokens (DARK)
   Figma-style canvas chrome: rail, toolbar, dotted viewport, frames, inspector.
   Standard HawkDesign treatment (menu-active neutrals + --text-info accent).
   Mirror of the block in theme-light.css — neutral mixes one step deeper,
   canvas slightly darker than the panels.
   ============================================================================ */
[data-theme="theme-dark"],
[data-theme="theme-mica-dark"] {
  /* —— Surfaces (NEUTRAL — standard menu/sidebar treatment) ————————— */
  --bg-labs: color-mix(in oklch, var(--text-primary) 4%, var(--bg-primary));

  /* —— Borders ————————————————————————————————————————————————————— */
  --border-labs: var(--border-primary-subtle);

  /* —— Text ———————————————————————————————————————————————————————— */
  --text-labs: var(--text-primary);
}

/* ============================================================================
   reinly brand overrides (DARK) — layered on the HawkDesign base above.
   Everything ABOVE this marker is synced from Reinly.Webapp (source of truth); to
   re-sync, replace everything above and keep this block.

   MONOCHROME CONVERSION — the one deviation from verbatim. The base above USED to
   carry upstream's blue brand on five semantic tokens (--bg-button-primary x3,
   --border-button-focus, --border-input-active, --bg/--border-checkbox-checked).
   The block below already shadowed them, so nothing blue ever rendered — but the
   dead declarations survived every `grep utility-blue` audit and were a live trap:
   delete this block and the app silently ships blue again. They are now de-branded
   at source and marked "DE-BRANDED from upstream blue".
   ON RE-SYNC: after replacing the base, re-apply those conversions (grep the new
   base for `--(bg-button-primary|bg-checkbox-checked|border-button-focus|
   border-input-active): var(--utility-(blue|yellow)` — it must come back empty).
   This block stays the authority, so a missed re-conversion costs audit noise, not
   a rendering regression.
   Brand: reinly GOLD primary identity (via --color-brand-*, now a yellow
   ramp) + drawer + Mica. DARK already paints brand-solid as a light step with
   dark ink, so most of the light-brand a11y work is native here — only the primary
   button's active step (was the dark brand-700) needs
   the gold-specific fix below.
   ============================================================================ */
[data-theme="theme-dark"],
[data-theme="theme-mica-dark"] {
  /* Default border rebased to UUI v8 — Pavel #231. See theme-light for the full note.
     neutral-800 → neutral-700 = exactly upstream v8's dark border-primary
     (config/styles/theme.css:681). In dark, LIGHTER is stronger: against the
     neutral-900 surface, neutral-800 is Δ6.4% L, neutral-700 is Δ16.6% L.
     --border-secondary stays neutral-800 = v8's dark border-secondary.
     NOTE: --border-divider aliases --border-primary in dark (it does NOT in light,
     where it is neutral-100), so dark dividers strengthen with this and light
     dividers do not. Pre-existing asymmetry, left alone — #231 is border-primary.
     Below the sync marker = THE AUTHORITY. */
  --border-primary: var(--utility-neutral-800);

  /* 1:1 UUI brand identity (FAN-OUT-RULES §3). Reverts the 3b monochrome inversion.
     Mirrors real UUI verbatim — DARK: bg-brand-solid = brand-600 (same as light),
     hover = brand-500 (lighter, unlike light's 700), border-brand = brand-400. */
  --text-primary-solid: var(--utility-neutral-50); /* tq-8176: the served app's value (reinly.webapp @ 09387252) */
  --bg-primary-solid: var(--utility-neutral-100); /* tq-8176: the served app's value (reinly.webapp @ 09387252) */

  /* Theme-selector PRIMARY chips — re-stated below the sync marker, mirroring
     theme-light.css. The dark theme had NO override for these at all, which is why the
     base's indigo rendered whenever the app was in dark. See the light note for the
     re-sync grep. */
  --theme-light-primary-swatch: var(--utility-indigo-500);
  --theme-dark-primary-swatch: var(--utility-indigo-300);
  --theme-mica-light-primary-swatch: var(--utility-indigo-500); /* tq-8176: no semantic token on the brand ramp (isabella R-A1) */

  /* Primary button — WHITELIST #1b. Fill is brand-500, IDENTICAL to light, and the ladder
     DARKENS via color-mix exactly as light does. Two gold-era leftovers are corrected here:
       · ink was neutral-900 on a brand-600 fill = 2.92:1 — a live AA failure in dark, left
         behind when the ramp rotated gold → blue (light was fixed by #1, dark was not).
         reinly blue is a DARK brand, so the ink is WHITE in both themes now.
       · hover LIFTED to brand-500 (dark's lighten convention). With white ink that is
         backwards — lighter fill = less contrast. It darkens instead, same as light.
     rest 4.43:1 (APCA Lc 75.4, the accepted 0.07-under-AA tradeoff of the 500 step) ·
     hover 5.62:1 · active 7.21:1. Full rationale in theme-light.css. */
  --text-button-primary: var(--color-white);
  --bg-button-primary: var(--utility-blue-600);
  --bg-button-primary-hover: var(--utility-blue-500);
  --bg-button-primary-active: var(--utility-blue-700);


  /* Focus ring — UUI's `ring-brand`, not the 3b monochrome ring. */
  --border-button-focus: var(--utility-emerald-500);

  /* Input active/focus border — base Dark ships utility-blue-400 and NOTHING overrode it,
     so an input's active border read blue against the black focus ring. Point it at the
     DS focus token so the two agree. (Light needs the same fix — see theme-light.css.) */
  --border-input-active: var(--text-primary);   /* tq-8912 follow-up (isabella 900064871 / 900064880): a field's FOCUS is the strong ink, never the success green; focus vs rest and vs the valid border >= 3:1 (light 14.23 / 10.08, dark 9.51 / 4.54) */

  /* Monochrome checkbox — INVERTED white fill, like the primary button (Pavel's call at
     re-gate). neutral-900 would have matched Light literally, but Dark's canvas IS
     neutral-900, so a checked box would vanish into the page. Dark's
     --text-checkbox-checked is already neutral-950, i.e. the token set always intended an
     inverted box with a DARK mark — checkbox.css just hardcoded a white checkmark SVG and
     ignored it. That is fixed there with a dark-scoped mark. */
  /* WHITELIST #1b — signature step, same as light. The mark is a hardcoded white SVG in
     components/inputs/checkbox.css (BOTH themes — the "dark-scoped mark" the note above
     claims does not exist, and --text-checkbox-checked: neutral-950 is dead for it), so
     the real pairing is white-on-brand-500 = 4.43:1, well clear of the 3:1 a checkmark
     graphic needs under 1.4.11. */
  --bg-checkbox-checked: var(--utility-blue-500);
  --border-checkbox-checked: var(--utility-blue-500);      /* reinly dark:569 */

  /* DEAD — the seed's gold steppers. Superseded by the WHITELIST #1c block at the
     BOTTOM of this file, which repaints all seven on the brand. Kept (not deleted) so
     the re-sync audit still greps `utility-yellow` here and re-applies #1c; delete
     these only together with that block. They render nothing today. */
  --bg-step-connector-fill: var(--utility-yellow-500);
  --bg-step-current: var(--utility-yellow-500);
  --bg-step-current-hover: var(--utility-yellow-400);
  --bg-step-current-active: var(--utility-yellow-600);
  --bg-step-completed: var(--utility-yellow-500);
  --bg-step-completed-hover: var(--utility-yellow-400);
  --bg-step-completed-active: var(--utility-yellow-600);

  /* DEAD — gold progress bar, superseded by WHITELIST #1c at the bottom of this file. */
  --bg-progress-bar: var(--utility-yellow-400);
}

/* Mica Dark — translucent surface overlay ON TOP of the full Dark token set above.
   Mica is Dark + glass: it redefines only the surface/canvas tokens. Every other
   semantic token (text, border, status, accent presets, high contrast, alerts)
   is inherited by matching the Dark selectors — do not re-declare them here. */
[data-theme="theme-mica-dark"] {
  --canvas-primary: oklch(15% 0.005 250 / 0.85);
  --canvas-secondary: oklch(10% 0 0 / 0.8);
  --bg-surface: oklch(18% 0.005 250 / 0.78);
  --bg-body: oklch(12% 0.003 250 / 0.75);
  --bg-card: oklch(20% 0.005 250 / 0.72);
  /* No --bg-app-canvas pin here — see theme-light. The shell frame is --bg-primary,
     opaque neutral-900 for both theme-dark and theme-mica-dark. */
  --bg-sidebar: oklch(14% 0.005 250 / 0.82); /* tq-8176: the served app's value (reinly.webapp @ 09387252) */
  --bg-dropdown: oklch(22% 0.005 250 / 0.88);
  --bg-modal: oklch(18% 0.005 250 / 0.92);
  --bg-popover: oklch(22% 0.005 250 / 0.88);
  --bg-command-palette: oklch(18% 0.005 250 / 0.92);
  --bg-mica-tint: oklch(15% 0.005 250);
}
/* ============================================================================
   WHITELIST #1c — seed-product / monochrome RESIDUE CLEARED (Russ, 2026-07-24)
   The dark twin of the block in theme-light.css — READ THE FULL RATIONALE THERE
   (what the defect was, what is deliberately NOT touched, and how to flip the
   direction if Pavel wants these neutral rather than brand). Identical values:
   the point of the fix is that these are the SAME in both themes, which falls
   out for free because they alias --bg-brand-solid / --text-on-brand /
   --text-brand, all of which are already theme-resolved.
   Dark also had two extra gold declarations here (the "Yellow steppers" and
   "Yellow progress + drawer + sidebar accent" blocks above) — this supersedes
   both; they are dead now but left in place so the re-sync grep still finds them.
   ============================================================================ */
[data-theme="theme-dark"],
[data-theme="theme-mica-dark"] {
  /* Stepper — the numbered/dot stepper's brand states. Marker ink is white on the
     brand fill (4.43:1, the same resting figure the primary button carries). */
  --bg-step-current: var(--utility-blue-600);
  --bg-step-current-hover: var(--utility-blue-500);
  --bg-step-current-active: var(--utility-blue-700);
  --bg-step-completed: var(--utility-blue-600);
  --bg-step-completed-hover: var(--utility-blue-500);
  --bg-step-completed-active: var(--utility-blue-700);
  --bg-step-connector-fill: var(--utility-blue-500);
  --text-step-current: var(--text-on-brand);
  --text-step-completed: var(--text-on-brand);

  /* Progress bar — aliases the brand exactly as its siblings already alias their
     intents (--bg-progress-bar-success: --bg-success, -danger: --bg-danger, …), so
     the DEFAULT bar finally belongs to the same system as the intent bars. */
  --bg-progress-bar: var(--utility-blue-500);
  --text-progress: var(--text-on-brand);

  /* Calendar booking-selected + schedule day-active — the same monochrome-black
     brand action the stepper had in light, blue in dark. */
  --bg-schedule-day-active: var(--utility-blue-500);
  --bg-schedule-day-active-hover: var(--utility-blue-500);
  --bg-schedule-day-active-pressed: var(--utility-blue-500);
  --text-schedule-day-active: var(--text-on-brand);

  /* Checkbox checked border — aliases its OWN fill so the box edge and the box can
     never disagree again (the fill went brand-500 in #1b; this stayed neutral-900). */
  --border-checkbox-checked: var(--utility-blue-500);

  /* Stepper connector TRACK, dark only — the one contrast casualty of the repaint, and
     the reason this is a track change and not a fill change. The unfilled track was
     neutral-700 (#404040), tuned for the LIGHT gold fill it used to sit under; a mid-blue
     fill on it is only 2.34:1, so the completed part of the connector stopped reading
     against the incomplete part. Dropping the track to neutral-800 restores it to 3.42:1
     (>= 3:1 for a meaningful graphic) and lands on exactly the value --bg-progress
     already uses for the same job in dark, so the two tracks now agree.
     The FILL stays on the brand — darkening the track is what keeps one reinly blue. */
  --bg-step-connector: var(--utility-neutral-700);
}

/* ============================================================================
   WHITELIST #S4 — MUTED-TEXT CONTRAST (Mia S4 · Russ, 2026-07-24)
   The dark twin of the block in theme-light.css — FULL RATIONALE THERE (root
   cause, why disabled text is deliberately exempt, and why subordination is
   carried by role + the gap to the component's own primary text rather than by
   lightness). Dark's muted tier is neutral-400 and its glyph tier neutral-500;
   the surface-inverted case (ai-console is dark in BOTH themes) is handled the
   same way here.
   ============================================================================ */
[data-theme="theme-dark"],
[data-theme="theme-mica-dark"] {
  /* Muted TEXT tier — 4.5:1 floor. The placeholder family funnels through the
     single --text-placeholder so there is one knob, not eight. */
  --text-placeholder: var(--utility-neutral-400);
  --text-input-placeholder: var(--text-placeholder);
  --text-inline-edit-placeholder: var(--text-placeholder);
  --text-inline-edit-trigger: var(--text-placeholder);
  --text-dropdown-hint: var(--text-placeholder);

  /* Ramp bottom tier + its subtle sibling — the root many of the below inherit. */
  --text-quaternary: var(--utility-neutral-400);
  --text-tertiary-subtle: var(--utility-neutral-400);

  /* Muted meta/label text — re-pointed at the RAMP instead of naming a raw
     palette step, which is what let them drift under the floor in the first place. */
  --text-accordion-meta: var(--text-quaternary);
  --text-collapse-meta: var(--text-quaternary);
  --text-list-item-meta: var(--text-quaternary);
  --text-popover-muted: var(--text-quaternary);
  --text-check-label-muted: var(--text-quaternary);
  --text-input-tertiary: var(--text-quaternary);
  --text-inventory-tertiary: var(--text-quaternary);
  --text-form-info-btn: var(--text-quaternary);
  --text-command-palette-muted: var(--text-quaternary);

  /* --bg-ai-console is a DARK surface in BOTH themes — light step in both. */
  --text-ai-console-muted: var(--utility-neutral-400);
  --text-ai-console-sys: var(--utility-neutral-400);
  --text-ai-console-gutter: var(--utility-neutral-400);
  --text-dropzone: var(--utility-neutral-300);

  /* Affordance GLYPHS — non-text graphics, 3:1 floor (1.4.11). Held one step
     lighter than the text tier ON PURPOSE: this is what preserves the visual
     hierarchy that simply darkening everything would have flattened. */
  --text-accordion-chevron: var(--utility-neutral-500);
  --text-collapse-chevron: var(--utility-neutral-500);
  --text-list-handle: var(--utility-neutral-500);
  --text-mail-star: var(--utility-neutral-500);
  --text-popover-pin: var(--utility-neutral-500);
  --text-toggle-thumb-icon: var(--utility-neutral-500);
}

/* ── tq-8209 (R3b): Reinly status-badge tone tokens. The SAME values in theme-light and theme-dark (the served app shows the
   same light pastel pills in both themes; a token defined in only one theme would leak across theme scopes). Values = the
   served colours (Tailwind-3 amber / blue / red / violet 100 + 800, emerald 500). Only blue-100 and violet-100 equal this
   palette's (Tailwind-4 OKLCH) primitives exactly in sRGB; the others differ, so they keep the served hex. ── */
[data-theme="theme-dark"],
[data-theme="theme-mica-dark"] {
  --status-badge-amber-bg: #fef3c7;
  --status-badge-amber-fg: #92400e;
  --status-badge-blue-bg: var(--color-blue-100);
  --status-badge-blue-fg: #1e40af;
  --status-badge-red-bg: #fee2e2;
  --status-badge-red-fg: #991b1b;
  --status-badge-violet-bg: var(--color-violet-100);
  --status-badge-violet-fg: #5b21b6;
  /* tq-8272 (R3f, USER "Give each status its own colour"; tones = isabella 900048151): ready / paused / expiring get their
     own tones from the palette primitives (no new raw colour). Same values in both themes. */
  --status-badge-teal-bg: var(--color-teal-100);
  --status-badge-teal-fg: var(--color-teal-800);
  --status-badge-fuchsia-bg: var(--color-fuchsia-100);
  --status-badge-fuchsia-fg: var(--color-fuchsia-800);
  --status-badge-orange-bg: var(--color-orange-200);
  --status-badge-orange-fg: var(--color-orange-900);
  --status-badge-live-dot: #10b981;
  /* neutral tone (draft / published / archived): a light pill in BOTH themes; dark: the LIGHT theme's values (neutral-700 / -600): the served dark --text-secondary / -tertiary on this light pill were 1.36:1 / 2.37:1 (isabella 900048999: a served defect, the ONE intended change) */
  --status-badge-neutral-bg: var(--utility-neutral-100);
  --status-badge-neutral-fg: var(--utility-neutral-700);
  --status-badge-neutral-muted-fg: var(--utility-neutral-600);
}

/* ── tq-8209 (R3b): filter surface tokens (filter drawer + quick-filter bar); see theme-light.css. Dark = the DS dark
   surfaces: the bar sits on the page (--bg-primary), the drawer / popovers are raised sheets (--bg-modal). ── */
[data-theme="theme-dark"],
[data-theme="theme-mica-dark"] {
  --filter-bar-bg: var(--bg-primary);
  --filter-panel-bg: var(--bg-modal);
  --filter-panel-bg-translucent: color-mix(in srgb, var(--bg-modal) 96%, transparent);
  --filter-panel-fg: var(--text-primary);
  --filter-control-bg: var(--bg-primary);
  --filter-divider: var(--border-primary);
  --filter-hover-bg: var(--utility-neutral-800);
}

/* ── tq-8209 (R3b): the ONE .chip (components/utility/chip.css). --chip-bg = the served filter chip's fill (light: white;
   dark: the page surface). Tone tokens start from the .tag tokens; a tone whose label fails 4.5:1 on its fill gets its
   own value here (isabella 900049051: fix a tone with its token, never by changing the base). ── */
[data-theme="theme-dark"],
[data-theme="theme-mica-dark"] {
  --chip-bg: var(--bg-primary);
  --chip-selectable-selected-bg: var(--utility-neutral-700); /* served dark: neutral-100 under near-white text (1:1); the selected trait now reads */
  --chip-primary-bg: var(--bg-tag-primary);
  --chip-primary-fg: var(--text-tag-primary);
  --chip-primary-border: var(--border-tag-primary);
  --chip-success-bg: var(--bg-tag-success);
  --chip-success-fg: var(--text-tag-success);
  --chip-success-border: var(--border-tag-success);
  --chip-warning-bg: var(--bg-tag-warning);
  --chip-warning-fg: var(--text-tag-warning);
  --chip-warning-border: var(--border-tag-warning);
  --chip-danger-bg: var(--bg-tag-danger);
  --chip-danger-fg: var(--text-tag-danger);
  --chip-danger-border: var(--border-tag-danger);
  --chip-info-bg: color-mix(in oklch, var(--text-info) 12%, transparent);
  --chip-info-fg: var(--text-secondary); /* R4 LITERAL (Pavel): the info LABEL is text-secondary, as .tag--info */
  --chip-info-border: transparent;
  --chip-muted-bg: var(--bg-tag-neutral);
  --chip-muted-fg: var(--text-tag-neutral);
  --chip-muted-border: var(--border-tag-neutral);
}

/* ── tq-8335 (R12): text-bearing accent fills (isabella 900049586; the user's keep-aa precedent 900047390). White
   on emerald-600 is 3.67:1, a text failure; emerald-700 is 5.37:1, its hover emerald-800 7.58:1. ONLY fills that
   carry text use these; emerald-600 stays for non-text accents (focus rings, borders, icons, checks, the range fill).
   The SAME values in theme-light and theme-dark (the fill is not themed). ── */
[data-theme="theme-dark"],
[data-theme="theme-mica-dark"] {
  --bg-accent-solid: var(--color-emerald-700);
  --bg-accent-solid-hover: var(--color-emerald-800);
  --text-on-accent-solid: #ffffff;
}
/* scale-tokens.css — the theme-INDEPENDENT size / spacing / motion tokens of components (tq-9583, A302; isabella 900076993:
   "scoped-theme tokens: define in every theme" — size and spacing are not colour, so they live in ONE theme-independent place).
   They used to be declared only in theme-light.css ([data-theme="theme-light"], [data-theme="theme-mica-light"]), so under
   theme-dark / theme-mica-dark they were undefined: a rule without a fallback (the app's tag.css) got padding 0 and the
   inherited 16px font (romeo 900076968, iOS Simulator). Colour tokens stay per theme in theme-light / theme-dark.
   SCOPE: `:root, [data-theme]` — declared on every themed element too, so a value that refers to a per-theme scale
   (var(--space-2)) resolves where the theme is. Imported by Reinly.Design's site.css and reinly.webapp's site.css right AFTER
   both theme files, in their layer: the density modes below re-point tokens the themes also declare (--space-list-item-*),
   at the same specificity, so they must come later. PLAIN CSS (the app's Tailwind-3 compile reads it). Pinned by tests/Reinly.Design.Tests (theme-independent tokens resolve in every theme). */

:root,
[data-theme] {
  /* Tags: base sizing */
  --radius-tag: 999px;
  --padding-tag-y: 4px;
  --padding-tag-x: 10px;
  --size-tag-icon: 14px;
  --text-tag-icon: 12px;
  --opacity-tag-icon: 0.9;
  --size-tag-dismiss: 18px;
  --opacity-tag-disabled: 0.55;
  /* Tags: size presets */
  --text-tag-sm: 11px;
  --text-tag-md: 12px;
  --text-tag-lg: 13px;
  --padding-tag-sm-y: 3px;
  --padding-tag-sm-x: 8px;
  --radius-tag-sm: 999px;
  --padding-tag-md-y: 4px;
  --padding-tag-md-x: 10px;
  --radius-tag-md: 999px;
  --padding-tag-lg-y: 6px;
  --padding-tag-lg-x: 12px;
  --radius-tag-lg: 999px;
  /* Kanban: spacing + column width */
  --gap-kanban: var(--space-2);
  --pad-kanban: var(--space-4);
  --pad-kanban-header: var(--space-4);
  --pad-kanban-card: var(--space-3) var(--space-4);
  --w-kanban-col: 300px;
}

/* =========================================
   Density Modes
   ========================================= */
[data-density="compact"] {
  --density-factor: 0.75;
  --space-list-item-y: 0.375rem;
  --space-list-item-x: 0.75rem;
  --padding-tag-y: 2px;
  --padding-tag-x: 6px;
  --space-table-cell-y: 0.25rem;
  --space-table-cell-x: 0.5rem;
  --space-form-group-y: 0.375rem;
  --space-toolbar-y: 0.25rem;
  --space-toolbar-x: 0.5rem;
  --space-card-y: 0.5rem;
  --space-card-x: 0.75rem;
}

[data-density="spacious"] {
  --density-factor: 1.25;
  --space-list-item-y: 0.75rem;
  --space-list-item-x: 1.25rem;
  --padding-tag-y: 6px;
  --padding-tag-x: 14px;
  --space-table-cell-y: 0.625rem;
  --space-table-cell-x: 1rem;
  --space-form-group-y: 1rem;
  --space-toolbar-y: 0.5rem;
  --space-toolbar-x: 1rem;
  --space-card-y: 1.25rem;
  --space-card-x: 1.5rem;
} /* tq-9583: theme-independent size / spacing tokens + density (one source with the DS), after both themes */
/* control-heights.css — THE control-height ladder (--control-h-xs .. -xl) and its touch-density re-point (DR-006).
   tq-8386 (R18, isabella ruling C): moved here from base/theme.css's Tailwind-4 @theme block so BOTH builds read one
   source. Reinly.Design's site.css imports it right after theme.css; reinly.webapp's site.css imports it with the other
   base tokens. PLAIN CSS (the app's Tailwind-3 compile reads it): no Tailwind directives or functions.
   Buttons / inputs / comboboxes derive their height from these (via --ctl-h). tq-9035 (A143): --control-line-* /
   --control-fs-* / --control-border moved here too (they don't change on touch), so both builds read the whole ladder. */

:root {
  --control-h-xs: 24px;
  --control-h-sm: 32px;   /* DEFAULT — see DS-SIZE-SM */
  --control-h-md: 40px;
  --control-h-lg: 48px;
  --control-h-xl: 56px;
  /* NOTE: this ladder is re-pointed to a >=44px tap target on coarse pointers —
     see the TOUCH DENSITY block (DR-006) below. Change both, or neither. */

  /* tq-9035 (A143): moved here from base/theme.css's @theme block with the heights, so the app's field rules (the DS
     input.css, imported in place) read the same line-height / font-size / border tokens. They don't change on touch. */
  --control-line-xs: 16px;
  --control-line-sm: 20px;
  --control-line-md: 24px;
  --control-line-lg: 24px;
  --control-line-xl: 24px;

  --control-fs-xs: 0.75rem;    /* text-xs   12px */
  --control-fs-sm: 0.8125rem;  /* text-sm   13px */
  --control-fs-md: 1rem;       /* text-base 16px */
  --control-fs-lg: 1rem;
  --control-fs-xl: 1rem;

  /* Per-edge border a control contributes to its own height (a button's border; a field's 1px border + its inset ring). */
  --control-border: 1px;
}

/* ════════════════════════════════════════════════════════════════════════════
   TOUCH DENSITY  ·  DS standard DR-006  (Pavel-approved 2026-07-19)
   ════════════════════════════════════════════════════════════════════════════

   WHAT IT DOES
     On a coarse pointer (phone/tablet), every control auto-grows to a >=44px tap
     target. Desktop is untouched and stays compact at 32px.

   WHY IT IS ONLY THIS BLOCK
     Nothing in the DS hard-codes a control height: buttons, inputs, comboboxes and
     the clear-(x) ALL derive from the --control-h-* ladder above (via --ctl-h, see
     the btn / input-base utilities). So re-pointing the ladder is the entire change —
     `top: calc(var(--control-h-sm) / 2)` re-centres the clear-(x) on its own, and
     the button/input baseline-parity maths re-solves at the new height. Resist
     adding per-component touch overrides; if something does NOT grow, that
     component is reading a hard-coded px and the bug is THERE, not here.

   WHY HEIGHT ONLY — NOT line-height / font-size
     --control-line-* and --control-fs-* deliberately do NOT change. padding-block is
     derived as (H - line)/2, so the extra height is absorbed entirely as padding:
     the tap target grows, the type does not reflow, and no text re-wraps between
     desktop and mobile.

   WHY pointer: coarse AND NOT a width breakpoint
     Tap-target need follows the INPUT DEVICE, not the viewport: a 1024px tablet needs
     44px, a 700px-wide desktop window does not. `pointer` reports the PRIMARY
     pointer, so a touchscreen laptop driven by a mouse correctly stays compact
     (`any-pointer: coarse` would wrongly catch it — do not use it here).

   44px = Apple HIG / WCAG 2.5.5 (AAA). lg (48) and xl (56) already clear it and are
   deliberately left alone so the ladder keeps a usable large tier on touch.

   ESCAPE HATCHES (both inherit, so put them on any container)
     .density-compact — opt OUT on touch, for genuinely dense surfaces (data grids).
                        Using it re-introduces a sub-44px target: justify it.
     .density-touch   — opt IN on any pointer (kiosk/tablet-first views, and how you
                        test this on a desktop browser without device emulation).

   KNOWN GAP (not covered here): checkbox / radio / switch size from hard-coded px in
   components/inputs/{checkbox,radio}.css, so they do NOT grow with this ladder. They
   need a hit-area expansion rather than a height change — tracked separately.
   ════════════════════════════════════════════════════════════════════════════ */

@media (pointer: coarse) {
  :root {
    --control-h-xs: 44px;
    --control-h-sm: 44px;
    --control-h-md: 44px;
    /* lg/xl already exceed 44px — restated so the whole ladder reads in one place. */
    --control-h-lg: 48px;
    --control-h-xl: 56px;
  }

  .density-compact {
    --control-h-xs: 24px;
    --control-h-sm: 32px;
    --control-h-md: 40px;
    --control-h-lg: 48px;
    --control-h-xl: 56px;
  }

  /* POINTER SCOPE — docs/ds-tooling-chrome-ruling.md ruling 2 (Isabella, 80028a874).
     A surface that declares itself fine-pointer keeps the fine ladder even when the
     PRIMARY pointer is coarse. Tooling chrome driven by a cursor
     is fine-pointer by definition, and a 44px control there eats the stage the user
     is judging product through. Declared once at the chrome root, never per
     component: `<div class="labs-shell" data-pointer-scope="fine">`.

     THIS IS NOT .density-compact ABOVE, and the distinction is the ruling's own:
     DENSITY AND POINTER ARE DIFFERENT AXES. .density-compact is a density opt-out
     that DOES strip touch targets from a surface a finger may still operate — the
     ruling calls a flag conflating the two "worse than the defect it fixes". This
     one says nothing about density; it asserts the input device. The 24x24 floor is
     UNWEAKENED anywhere a finger can reach, because a finger cannot reach here.

     AT THE DEFINITION SITE, per dacab4e95 — "the consumers were never the problem;
     the defect is concentrated in the definition sites". The chrome-side alternative
     was to re-pin these five properties inside the Labs chrome stylesheet, which would have COPIED
     resolved values (24/32/40) into a consumer — the exact thing the #153 wave
     exists to delete. Here the values are already literal in this file, three rules
     up, so nothing is copied and one declaration serves every consumer. */
  [data-pointer-scope="fine"] {
    --control-h-xs: 24px;
    --control-h-sm: 32px;
    --control-h-md: 40px;
    --control-h-lg: 48px;
    --control-h-xl: 56px;
  }

  /* POINTER SCOPE IS NOT INHERITED ACROSS A PREVIEW BOUNDARY — ruling addendum
     66e1ef520. The `fine` scope above is declared at the chrome ROOT, and that
     root CONTAINS PRODUCT CONTENT: every previewed .app-shell / .app-chrome /
     .app-sidebar / nav.sidebar renders inside it. Without a reset they inherit
     the chrome ladder, so Labs would show Pavel control sizes no real user gets
     — and Labs exists to review product UI, so that defeats the surface's only
     purpose. Review fidelity is the cost here, not accessibility: the attribute
     is Labs-only, so the a11y blast radius is narrow.

     `device` RE-ESTABLISHES the media answer — it restates what :root gets in
     this same query, so a preview renders at the TRUE device pointer. It is
     deliberately NOT `coarse`: a `coarse` counter-rule would ASSERT touch rather
     than TRACK the device, making the preview always-touch on a desktop and
     breaking review fidelity in the opposite direction. Outside this media query
     `device` declares nothing, so on a fine-pointer machine a preview correctly
     stays fine — which is why it must live in here and cannot be hoisted.

     A NARROWER CHROME NODE CANNOT REPLACE THIS, and the ruling records why so it
     is not retried: in the retired Labs workspace, chrome and previews were
     INTERLEAVED — .app-shell and .app-chrome sat inside the declared subtree
     alongside the workspace chrome — so no single node separated them.

     WHO DECLARES IT: a preview's foreign-content MOUNT POINT (in the retired
     workspace, .labs-frame__body). No view declares either scope today. NOT the
     frames. A frame must never declare pointer
     scope, because it cannot know whether it is being previewed or shipped, and
     that is precisely the knowledge this attribute encodes. Not the chrome root
     either: the frame IDENTITY BAR lived there, and resetting it would send the
     frame-chrome selects (a4250f715 / #153 unit-7) to 44px on touch — undoing the
     scope this pairs with. This generalises past Labs to any embed or preview. */
  [data-pointer-scope="device"] {
    --control-h-xs: 44px;
    --control-h-sm: 44px;
    --control-h-md: 44px;
    --control-h-lg: 48px;
    --control-h-xl: 56px;
  }
}

.density-touch {
  --control-h-xs: 44px;
  --control-h-sm: 44px;
  --control-h-md: 44px;
  --control-h-lg: 48px;
  --control-h-xl: 56px;
} /* tq-8386: the control-height ladder (one source with the DS) */
/* the UA [hidden]{display:none} loses to any author display rule; this makes the attribute authoritative (A199, isabella) */
[hidden]:not([hidden="until-found"]) { display: none !important; } /* A199 tq-9337 (isabella 900073313): [hidden] is authoritative, one DS rule (never copied into ./base/tailwind or a token file) */

/*Buttons*/
/* ==========================================================================
   Buttons: the ONE Reinly button system (tq-8324 R3a2)
   --------------------------------------------------------------------------
   PLAIN CSS: reinly.webapp imports this file IN PLACE (R4 guard), so there is
   no @apply / @utility / theme() here. The shared classes carry the app's
   served values (the app look wins: pill-shaped, black primary):
     .btn + the variants (primary / secondary / soft / ghost / link / light /
     danger(-outline) / success(-outline) / accent / warning(-outline) /
     info(-outline) / glass), the sizes, .btn-icon(-*), .btn-group(-*), and the
     loading state: .is-loading (pointer-events: none) + a .btn-spinner glyph in
     the markup. Whatever sets .is-loading also sets disabled (or aria-disabled
     + a click guard) and aria-busy="true", since pointer-events alone does not
     stop Enter / Space.
   Every variant shares ONE base rule (the selector list below), so a new
   variant joins that list instead of copying the base.
   The DS-only families (tonal / outline / primary-outline / cta / fab / split /
   count / block / xl) live in buttons-library.css, which only the DS imports.
   ========================================================================== */

/* ════════════════════════════════════════════════════════════════
 * Reinly button system
 * ────────────────────────────────────────────────────────────────
 *  • All buttons are pill-shaped by default (rounded-full).
 *  • Sizes scale font-size + padding together for visual harmony.
 *  • btn-md is the default; sm and lg sit ±1 step from it.
 *  • Touch targets ≥ 36px on the default (md), ≥ 44px on lg
 *    (Apple HIG minimum for comfortable tapping).
 *  • Font-sizes ≥ 14px on btn-md so text reads on phones; the
 *    iOS auto-zoom threshold (16px) only applies to <input>, not
 *    buttons, so we don't need to push every button to 16.
 * ════════════════════════════════════════════════════════════════ */

/* Base Button (abstract; not required in markup) */
.btn,
.btn-primary,
.btn-secondary,
.btn-soft,
.btn-ghost,
.btn-light,
.btn-danger,
.btn-danger-outline,
.btn-success,
.btn-success-outline,
.btn-accent,
.btn-warning,
.btn-warning-outline,
.btn-info,
.btn-info-outline,
.btn-glass {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 0.5rem;
  border-radius: 9999px;
  border-width: 1px;
  padding-left: 1.25rem;
  padding-right: 1.25rem;
  padding-top: 0.625rem;
  padding-bottom: 0.625rem;
  font-size: 0.8125rem;
  line-height: 1.5rem;
  font-weight: 500;
  outline: 2px solid transparent;
  outline-offset: 2px;
  -webkit-transition-property: all;
  transition-property: all;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  -webkit-transition-duration: 75ms;
  transition-duration: 75ms;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 1, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 1, 1);
}
.btn:disabled,
.btn-primary:disabled,
.btn-secondary:disabled,
.btn-soft:disabled,
.btn-ghost:disabled,
.btn-light:disabled,
.btn-danger:disabled,
.btn-danger-outline:disabled,
.btn-success:disabled,
.btn-success-outline:disabled,
.btn-accent:disabled,
.btn-warning:disabled,
.btn-warning-outline:disabled,
.btn-info:disabled,
.btn-info-outline:disabled,
.btn-glass:disabled {
  cursor: not-allowed;
  opacity: 0.5;
}
.btn,
.btn-primary,
.btn-secondary,
.btn-soft,
.btn-ghost,
.btn-light,
.btn-danger,
.btn-danger-outline,
.btn-success,
.btn-success-outline,
.btn-accent,
.btn-warning,
.btn-warning-outline,
.btn-info,
.btn-info-outline,
.btn-glass {
  -webkit-tap-highlight-color: transparent;
}

  .btn:focus-visible,
.btn-primary:focus-visible,
.btn-secondary:focus-visible,
.btn-soft:focus-visible,
.btn-ghost:focus-visible,
.btn-light:focus-visible,
.btn-danger:focus-visible,
.btn-danger-outline:focus-visible,
.btn-success:focus-visible,
.btn-success-outline:focus-visible,
.btn-accent:focus-visible,
.btn-warning:focus-visible,
.btn-warning-outline:focus-visible,
.btn-info:focus-visible,
.btn-info-outline:focus-visible,
.btn-glass:focus-visible {
  outline: 2px solid var(--focus-ring); outline-offset: 2px; -webkit-box-shadow: var(--tw-shadow, 0 0 #0000); box-shadow: var(--tw-shadow, 0 0 #0000);
}

/* -----------------------------------------
 * Variants (each one includes `.btn`)
 * ----------------------------------------- */

/* Primary */
.btn-primary {
  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  color: var(--text-button-primary);
  background-color: var(--bg-button-primary);
  border-color: var(--border-button-primary);
}

  .btn-primary:hover {
    background-color: var(--bg-button-primary-hover);
  }

  .btn-primary:active {
    background-color: var(--bg-button-primary-active);
  }

/* Secondary */
.btn-secondary {
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  color: var(--text-button-secondary);
  background-color: var(--bg-button-secondary);
  border-color: var(--border-button-secondary);
}

  .btn-secondary:hover {
    background-color: var(--bg-button-secondary-hover);
  }

  .btn-secondary:active {
    background-color: var(--bg-button-secondary-active);
  }

  .btn-secondary.is-active,
  .btn-secondary[aria-pressed="true"] {
    background-color: var(--bg-button-secondary-active-state);
  }

/* Soft */
.btn-soft {
  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  color: var(--text-button-soft, var(--text-primary));
  background-color: var(--bg-button-soft, var(--utility-neutral-50));
  border-color: var(--border-button-soft, var(--alpha-0));
}

  .btn-soft:hover {
    background-color: var(--bg-button-soft-hover, var(--utility-neutral-100));
  }

  .btn-soft:active {
    background-color: var(--bg-button-soft-active, var(--utility-neutral-200));
  }

/* Ghost */
.btn-ghost {
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  color: var(--text-button-ghost, var(--text-primary));
  background-color: var(--bg-button-ghost, var(--alpha-0));
  border-color: var(--border-button-ghost, var(--alpha-0));
}

  .btn-ghost:hover {
    background-color: var(--bg-button-ghost-hover, var(--utility-neutral-100));
  }

  .btn-ghost:active {
    background-color: var(--bg-button-ghost-active, var(--utility-neutral-200));
  }

/* The danger ghost (tq-8227 C10; ported from enodia.Design tq-6996 06fc12419b, the DELETE-ACTION rule in buttons.md).
   A danger action inside a ghost action list ('Delete listing'), and the icon-only per-row remover:
     <button class="btn-ghost btn-icon btn-icon-sm is-danger" aria-label="Delete <object>" title="Delete">
       <i class="fa-light fa-trash" aria-hidden="true"></i></button>
   The danger glyph/label + the existing danger-outline hover/press tint (no new colour); focus ring + disabled come from
   .btn-ghost. Close x, Remove-chip and photo-tile overlay controls never use it. */
.btn-ghost.is-danger {
  /* the danger-outline button's own token: one danger red across every Delete (--text-danger is paler in dark) */
  color: var(--text-button-danger-outline, var(--text-danger));
}

  .btn-ghost.is-danger:hover {
    background-color: var(--bg-button-danger-outline-hover, var(--utility-red-50, #fef2f2));
  }

  .btn-ghost.is-danger:active {
    background-color: var(--bg-button-danger-outline-active, var(--utility-red-100, #fee2e2));
  }

/* Link */
.btn-link {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;
  border-radius: 0.125rem;
  padding-left: 0.25rem;
  padding-right: 0.25rem;
  padding-top: 0.25rem;
  padding-bottom: 0.25rem;
  font-size: 0.75rem;
  line-height: 1rem;
  font-weight: 500;
  text-decoration-line: underline;
  text-underline-offset: 4px;
  -webkit-transition-property: all;
  transition-property: all;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  -webkit-transition-duration: 75ms;
  transition-duration: 75ms;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 1, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 1, 1);
}
.btn-link:disabled {
  cursor: not-allowed;
  opacity: 0.5;
}
.btn-link {
  color: var(--text-button-link, var(--text-primary));
}

  .btn-link:hover {
  text-decoration-line: none;
}

/* Bare — tq-9151 (A160, ORIGIN for the other DSes; isabella 900068420): a <button> that looks exactly like the text around it
   (a name, an inline trigger). Everything inherits; NO hover / underline / colour of its own (that is .btn-link's and .link's
   job, and both recolour): the consumer adds a hover if it wants one. Not for links (use <a>) and not for primary actions.
   Touch: it does not size itself; as a STANDALONE tap target add the shared hit-slop hook (.hit-slop,
   foundations/hit-slop.css) for 44 on a coarse pointer. Specificity (0,1,0), declared early: a consumer's own classes win. */
.btn-bare {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  background: none;
  border: 0;
  padding: 0;
  margin: 0;
  font: inherit;
  color: inherit;
  line-height: inherit;
  letter-spacing: inherit;
  text-align: inherit;
  text-transform: inherit;
  cursor: pointer;
}
.btn-bare:focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: 2px;
}
.btn-bare:disabled {
  cursor: default;   /* no colour change: the consumer decides */
}

/* Light */
.btn-light {
  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  color: var(--text-button-light, var(--text-primary));
  background-color: var(--bg-button-light, var(--utility-neutral-50));
  border-color: var(--border-button-light, var(--border-primary));
}

  .btn-light:hover {
    background-color: var(--bg-button-light-hover, var(--utility-neutral-100));
  }

  .btn-light:active {
    background-color: var(--bg-button-light-active, var(--utility-neutral-200));
  }

/* Danger */
.btn-danger {
  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  color: var(--text-button-danger, var(--alpha-white-100));
  background-color: var(--bg-button-danger, var(--utility-red-600, #dc2626));
  border-color: var(--border-button-danger, var(--alpha-0));
}

  .btn-danger:hover {
    background-color: var(--bg-button-danger-hover, var(--utility-red-700, #b91c1c));
  }

  .btn-danger:active {
    background-color: var(--bg-button-danger-active, var(--utility-red-800, #991b1b));
  }

/* Danger outline */
.btn-danger-outline {
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  color: var(--text-button-danger-outline, var(--utility-red-700, #b91c1c));
  background-color: var(--bg-button-danger-outline, var(--alpha-0));
  border-color: var(--border-button-danger-outline, var(--alpha-0));
}

  .btn-danger-outline:hover {
    background-color: var(--bg-button-danger-outline-hover, var(--utility-red-50, #fef2f2));
  }

  .btn-danger-outline:active {
    background-color: var(--bg-button-danger-outline-active, var(--utility-red-100, #fee2e2));
  }

/* Success */
.btn-success {
  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  color: var(--text-button-success, var(--text-on-success, var(--alpha-white-100)));
  background-color: var(--bg-button-success, var(--bg-success-solid, var(--utility-green-600, #16a34a)));
  border-color: var(--border-button-success, var(--border-success-solid, var(--alpha-0)));
}

  .btn-success:hover {
    background-color: var(--bg-button-success-hover, var(--bg-success-solid-hover, var(--utility-green-700, #15803d)));
  }

  .btn-success:active {
    background-color: var(--bg-button-success-active, var(--bg-success-solid-active, var(--utility-green-800, #166534)));
  }

/* Success outline */
.btn-success-outline {
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  color: var(--text-button-success-outline, var(--utility-green-700, #15803d));
  background-color: var(--bg-button-success-outline, var(--alpha-0));
  border-color: var(--border-button-success-outline, var(--alpha-0));
}

  .btn-success-outline:hover {
    background-color: var(--bg-button-success-outline-hover, var(--utility-green-50, #f0fdf4));
  }

  .btn-success-outline:active {
    background-color: var(--bg-button-success-outline-active, var(--utility-green-100, #dcfce7));
  }

  /* Accent (tq-8324 R3a2): the accent-solid action fill (publish / confirm / booked / messaged) */

  .btn-accent {
  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  color: var(--text-on-accent-solid);
  background-color: var(--bg-accent-solid);
  border-color: var(--alpha-0);
}

  .btn-accent:hover,
  .btn-accent:active {
    background-color: var(--bg-accent-solid-hover);
  }

/* Warning */
.btn-warning {
  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  color: var(--text-button-warning, var(--text-on-warning, var(--alpha-white-100)));
  background-color: var(--bg-button-warning, var(--bg-warning-solid, var(--utility-amber-600, #d97706)));
  border-color: var(--border-button-warning, var(--border-warning-solid, var(--alpha-0)));
}

  .btn-warning:hover {
    background-color: var(--bg-button-warning-hover, var(--bg-warning-solid-hover, var(--utility-amber-700, #b45309)));
  }

  .btn-warning:active {
    background-color: var(--bg-button-warning-active, var(--bg-warning-solid-active, var(--utility-amber-800, #92400e)));
  }

/* Warning outline */
.btn-warning-outline {
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  color: var(--text-button-warning-outline, var(--utility-amber-700, #b45309));
  background-color: var(--bg-button-warning-outline, var(--alpha-0));
  border-color: var(--border-button-warning-outline, var(--alpha-0));
}

  .btn-warning-outline:hover {
    background-color: var(--bg-button-warning-outline-hover, var(--utility-amber-50, #fffbeb));
  }

  .btn-warning-outline:active {
    background-color: var(--bg-button-warning-outline-active, var(--utility-amber-100, #fef3c7));
  }

/* Info */
.btn-info {
  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  color: var(--text-button-info, var(--alpha-white-100));
  background-color: var(--bg-button-info, var(--bg-info-solid, var(--utility-blue-600, #2563eb)));
  border-color: var(--border-button-info, var(--alpha-0));
}

  .btn-info:hover {
    background-color: var(--bg-button-info-hover, var(--utility-blue-700, #1d4ed8));
  }

  .btn-info:active {
    background-color: var(--bg-button-info-active, var(--utility-blue-800, #1e40af));
  }

/* Info outline */
.btn-info-outline {
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  color: var(--text-button-info-outline, var(--utility-blue-700, #1d4ed8));
  background-color: var(--bg-button-info-outline, var(--alpha-0));
  border-color: var(--border-button-info-outline, var(--alpha-0));
}

  .btn-info-outline:hover {
    background-color: var(--bg-button-info-outline-hover, var(--utility-blue-50, #eff6ff));
  }

  .btn-info-outline:active {
    background-color: var(--bg-button-info-outline-active, var(--utility-blue-100, #dbeafe));
  }

/* Glass */
.btn-glass {
  position: relative;
  --tw-backdrop-blur: blur(8px);
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
  overflow: hidden;
  z-index: 0;
  color: var(--text-button-glass);
  background-color: var(--bg-button-glass);
  border-color: var(--border-button-glass);
}

  .btn-glass::after {
    content: "";
    position: absolute;
    inset: 0;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'><filter id='noiseFilter'><feTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/></filter><rect width='100%' height='100%' filter='url(%23noiseFilter)' opacity='1'/></svg>");
    background-repeat: repeat;
    mix-blend-mode: overlay;
    opacity: var(--opacity-button-grain, 0);
    pointer-events: none;
    z-index: 0;
    border-radius: inherit;
  }

  .btn-glass > * {
    position: relative;
    z-index: 1;
  }

  .btn-glass:hover {
    color: var(--text-button-glass-hover);
    background-color: var(--bg-button-glass-hover);
    border-color: var(--border-button-glass-hover);
  }

  .btn-glass:active {
    color: var(--text-button-glass-active);
    background-color: var(--bg-button-glass-active);
    border-color: var(--border-button-glass-active);
  }

/* -----------------------------------------
 * Sizes (stackable with any variant)
 *   xs : 11px / ~26px tall  — dense table actions, chips
 *   sm : 13px / ~32px tall  — compact toolbars, tag rows
 *   md : 14px / ~38px tall  — default everywhere
 *   lg : 16px / ~46px tall  — primary CTAs, hero actions
 * All sizes are pill-shaped (rounded-full) for a single visual
 * language across the app.
 * ----------------------------------------- */
.btn-xs {
  border-radius: 9999px;
  padding-left: 0.625rem;
  padding-right: 0.625rem;
  padding-top: 0.25rem;
  padding-bottom: 0.25rem;
  font-size: 0.6875rem;
  line-height: 1rem;
}

.btn-sm {
  border-radius: 9999px;
  padding-left: 0.875rem;
  padding-right: 0.875rem;
  padding-top: 0.375rem;
  padding-bottom: 0.375rem;
  font-size: 0.75rem;
  line-height: 1rem;
}

/* default */
.btn-md {
  border-radius: 9999px;
  padding-left: 1.25rem;
  padding-right: 1.25rem;
  padding-top: 0.625rem;
  padding-bottom: 0.625rem;
  font-size: 0.8125rem;
  line-height: 1.5rem;
}

.btn-lg {
  border-radius: 9999px;
  padding-left: 1.5rem;
  padding-right: 1.5rem;
  padding-top: 0.75rem;
  padding-bottom: 0.75rem;
  font-size: 1rem;
  line-height: 1.5rem;
}

/* -----------------------------------------
 * Shapes / Formats
 *   .btn-pill kept for back-compat — it's now a no-op since
 *   every .btn is pill-shaped, but existing markup still
 *   referencing it stays valid.
 * ----------------------------------------- */
.btn-pill {
  border-radius: 9999px;
}

/* Opt-out for the rare case a square button is needed (e.g.
   inside a btn-group with sharp edges, dropdown caret pairs). */
.btn-square {
  border-radius: 0.375rem;
}

/* icon + label spacing helper */
.btn-with-icon > i,
.btn-with-icon > svg {
  margin-left: -0.125rem;
}

/* -----------------------------------------
 * Icon Buttons (Font Awesome–friendly)
 *   Pair with a variant class for colors, e.g.:
 *     class="btn-secondary btn-icon btn-icon-md"
 *     class="btn-primary btn-icon btn-icon-sm"
 *
 *   Circular by default to match the pill button aesthetic.
 *   Sizes track the touch-target tiers:
 *     xs : 28px — dense rows
 *     sm : 32px — toolbars
 *     md : 40px — default; comfortable on touch (matches Apple HIG)
 *     lg : 48px — hero / floating actions
 * ----------------------------------------- */
.btn-icon {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 9999px;
  border-width: 1px;
  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  -webkit-transition-property: all;
  transition-property: all;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  -webkit-transition-duration: 75ms;
  transition-duration: 75ms;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 1, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 1, 1);
}
.btn-icon:disabled {
  cursor: not-allowed;
  opacity: 0.5;
}
.btn-icon {
  padding: 0; /* perfect circle */
  line-height: 1;
}

/* Icon size is intentionally one tier larger than the matching
 * text-button font so the glyph carries proper visual weight in
 * an icon-only context (industry convention: ~1.25× to 1.5×
 * the body font). Without this bump, a 12px ✕ glyph in a 32px
 * round button reads as undersized next to a 14px-icon Share
 * button sitting beside it. */
.btn-icon-xs {
  height: 1.75rem;
  width: 1.75rem;
  padding: 0px;
  font-size: 0.75rem;
  line-height: 1rem;
  line-height: 1;
}

.btn-icon-sm {
  height: 2rem;
  width: 2rem;
  padding: 0px;
  font-size: 0.8125rem;
  line-height: 1.5rem;
  line-height: 1;
}

.btn-icon-md {
  height: 2.5rem;
  width: 2.5rem;
  padding: 0px;
  font-size: 1rem;
  line-height: 1.5rem;
  line-height: 1;
}

.btn-icon-lg {
  height: 3rem;
  width: 3rem;
  padding: 0px;
  font-size: 1.125rem;
  line-height: 2rem;
  line-height: 1;
}

.btn-icon i {
  line-height: 1;
  font-size: 1em;
}

/* cleaner combos */
.btn-icon.btn-secondary,
.btn-icon.btn-soft,
.btn-icon.btn-ghost,
.btn-icon.btn-danger-outline,
.btn-icon.btn-success-outline,
.btn-icon.btn-warning-outline,
.btn-icon.btn-info-outline {
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

/* -----------------------------------------
 * Loading State
 * ----------------------------------------- */
.is-loading {
  pointer-events: none;
}

.btn-spinner {
  display: inline-block;
}

@-webkit-keyframes spin {
  to {
    -webkit-transform: rotate(360deg);
    transform: rotate(360deg);
  }
}

@keyframes spin {
  to {
    -webkit-transform: rotate(360deg);
    transform: rotate(360deg);
  }
}

.btn-spinner {
  -webkit-animation: spin 1s linear infinite;
  animation: spin 1s linear infinite;
}

/* -----------------------------------------
 * Button Group / Split Buttons
 * ----------------------------------------- */
.btn-group {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  vertical-align: middle;
}

  /* ----------------------------------------------------
 * Segment targeting
 * Supports:
 *  - direct child buttons/anchors: .btn-group > .btn-*
 *  - bootstrap dropdown wrapper:  .btn-group > .dropdown > .btn-*
 * ---------------------------------------------------- */

  /* segments (direct children) */
  .btn-group > :is( [class^="btn-"], [class*=" btn-"], a[class^="btn-"], a[class*=" btn-"] ) {
  margin-left: -1px;
  border-radius: 0px;
    -webkit-box-shadow: none;
    box-shadow: none;
}

  /* segments (inside a dropdown wrapper) */
  .btn-group > .dropdown > :is( [class^="btn-"], [class*=" btn-"], a[class^="btn-"], a[class*=" btn-"] ) {
  margin-left: -1px;
  border-radius: 0px;
    -webkit-box-shadow: none;
    box-shadow: none;
}

  /* Preserve left outer radius */
  .btn-group > :is( [class^="btn-"], [class*=" btn-"], a[class^="btn-"], a[class*=" btn-"] ):first-child {
  margin-left: 0px;
  border-top-left-radius: 9999px;
  border-bottom-left-radius: 9999px;
}

  .btn-group > .dropdown:first-child > :is( [class^="btn-"], [class*=" btn-"], a[class^="btn-"], a[class*=" btn-"] ) {
  margin-left: 0px;
  border-top-left-radius: 9999px;
  border-bottom-left-radius: 9999px;
}

  /* Preserve right outer radius */
  .btn-group > :is( [class^="btn-"], [class*=" btn-"], a[class^="btn-"], a[class*=" btn-"] ):last-child {
  border-top-right-radius: 9999px;
  border-bottom-right-radius: 9999px;
}

  .btn-group > .dropdown:last-child > :is( [class^="btn-"], [class*=" btn-"], a[class^="btn-"], a[class*=" btn-"] ) {
  border-top-right-radius: 9999px;
  border-bottom-right-radius: 9999px;
}

  /* Pill groups */
  .btn-group.btn-group-pill > :is( [class^="btn-"], [class*=" btn-"], a[class^="btn-"], a[class*=" btn-"] ):first-child {
  border-top-left-radius: 9999px;
  border-bottom-left-radius: 9999px;
}

  .btn-group.btn-group-pill > .dropdown:first-child > :is( [class^="btn-"], [class*=" btn-"], a[class^="btn-"], a[class*=" btn-"] ) {
  border-top-left-radius: 9999px;
  border-bottom-left-radius: 9999px;
}

  .btn-group.btn-group-pill > :is( [class^="btn-"], [class*=" btn-"], a[class^="btn-"], a[class*=" btn-"] ):last-child {
  border-top-right-radius: 9999px;
  border-bottom-right-radius: 9999px;
}

  .btn-group.btn-group-pill > .dropdown:last-child > :is( [class^="btn-"], [class*=" btn-"], a[class^="btn-"], a[class*=" btn-"] ) {
  border-top-right-radius: 9999px;
  border-bottom-right-radius: 9999px;
}

  /* Hover / focus layering so active segment sits above seam */
  .btn-group > * {
    position: relative;
    z-index: 0;
  }

    .btn-group > *:hover,
    .btn-group > *:focus-visible {
      z-index: 1;
    }

    /* Elevate dropdown when open so the menu escapes the z-0 stacking context */
    .btn-group > .dropdown:has(.show) {
      z-index: 2;
    }

  /* One outer shadow */
  .btn-group.btn-group-shadow {
  border-radius: 9999px;
  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

    .btn-group.btn-group-shadow > * {
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

  /* Compact groups */
  .btn-group.btn-group-compact > :is(.btn-primary,.btn-secondary,.btn-soft,.btn-ghost,.btn-danger,.btn-danger-outline,.btn-success,.btn-success-outline,.btn-warning,.btn-warning-outline,.btn-info,.btn-info-outline,.btn-glass) {
  padding-left: 0.5rem;
  padding-right: 0.5rem;
}

    .btn-group.btn-group-compact > :is(.btn-primary,.btn-secondary,.btn-soft,.btn-ghost,.btn-danger,.btn-danger-outline,.btn-success,.btn-success-outline,.btn-warning,.btn-warning-outline,.btn-info,.btn-info-outline,.btn-glass).btn-xs {
  padding-left: 0.375rem;
  padding-right: 0.375rem;
}

    .btn-group.btn-group-compact > :is(.btn-primary,.btn-secondary,.btn-soft,.btn-ghost,.btn-danger,.btn-danger-outline,.btn-success,.btn-success-outline,.btn-warning,.btn-warning-outline,.btn-info,.btn-info-outline,.btn-glass).btn-sm {
  padding-left: 0.5rem;
  padding-right: 0.5rem;
}

    .btn-group.btn-group-compact > :is(.btn-primary,.btn-secondary,.btn-soft,.btn-ghost,.btn-danger,.btn-danger-outline,.btn-success,.btn-success-outline,.btn-warning,.btn-warning-outline,.btn-info,.btn-info-outline,.btn-glass).btn-md {
  padding-left: 0.625rem;
  padding-right: 0.625rem;
}

    .btn-group.btn-group-compact > :is(.btn-primary,.btn-secondary,.btn-soft,.btn-ghost,.btn-danger,.btn-danger-outline,.btn-success,.btn-success-outline,.btn-warning,.btn-warning-outline,.btn-info,.btn-info-outline,.btn-glass).btn-lg {
  padding-left: 0.75rem;
  padding-right: 0.75rem;
}

  /* Compact icon buttons (slightly smaller squares) */
  .btn-group.btn-group-compact > .btn-icon.btn-icon-lg {
  height: 2rem;
  width: 2rem;
}

  .btn-group.btn-group-compact > .btn-icon.btn-icon-md {
  height: 1.75rem;
  width: 1.75rem;
}

  .btn-group.btn-group-compact > .btn-icon.btn-icon-sm {
  height: 1.5rem;
  width: 1.5rem;
}

  .btn-group.btn-group-compact > .btn-icon.btn-icon-xs {
  height: 1.25rem;
  width: 1.25rem;
}

  /* Equal-width groups */
  .btn-group.btn-group-equal {
  width: 100%;
}

    .btn-group.btn-group-equal > * {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0%;
  flex: 1 1 0%;
}
    /* Prevent icon buttons from collapsing too far */
    .btn-group.btn-group-equal > .btn-icon {
  min-width: 2.5rem;
}

    /*Case for Buttons with Badge Elements*/




.btn > .badge,
.btn-primary > .badge,
.btn-secondary > .badge,
.btn-soft > .badge,
.btn-ghost > .badge,
.btn-light > .badge,
.btn-danger > .badge,
.btn-danger-outline > .badge,
.btn-success > .badge,
.btn-success-outline > .badge,
.btn-accent > .badge,
.btn-warning > .badge,
.btn-warning-outline > .badge,
.btn-info > .badge,
.btn-info-outline > .badge,
.btn-glass > .badge {
  margin-top: -0.25rem;
  margin-bottom: -0.25rem;
  font-size: 0.75rem;
  line-height: 1rem;
}

/* ==========================================================================
 * Cross-cutting button states (tq-8324, isabella G5 / G6: kept only where the
 * served app shows no difference: measured on every page that carries buttons).
 * ========================================================================== */

/* Pointer on every enabled button (G6; the app already computes pointer on all of them) */
:is([class^="btn-"], [class*=" btn-"]):not(:disabled):not([aria-disabled="true"]):not(.is-loading) {
  cursor: pointer;
}

/* A button that marks the current page gets a quiet fill (G5; no app button carries aria-current="page" today).
   tq-9165 (A165, isabella 900068703): never on .btn-bare, which adds no chrome; :where() keeps this rule's specificity. */
[class*="btn-"][aria-current="page"]:not(.btn-secondary):not(:where(.btn-bare)) {
  background-color: color-mix(in oklch, var(--text-primary) 10%, transparent);
  color: var(--text-primary);
}   /* the ONE button system: canonical DS component, imported in place (tq-8324 R3a2) */

/*Data*/
/* ==========================================================================
   BASE
   ========================================================================== */
.avatar {
  position: relative;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 9999px;
  font-weight: 500;
  line-height: 1;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.avatar[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
.avatar {
  color: var(--text-avatar, var(--text-primary));
  background-color: var(--bg-avatar, var(--bg-secondary-subtle));
  -webkit-box-shadow: 0 0 0 2px var(--ring-avatar, var(--border-primary));
  box-shadow: 0 0 0 2px var(--ring-avatar, var(--border-primary));
  overflow: hidden;
}

  .avatar img {
  height: 100%;
  width: 100%;
  -o-object-fit: cover;
  object-fit: cover;
}

  /* Optional: initials/text */
  .avatar > .avatar-initials {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  height: 100%;
  width: 100%;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}
  html.is-mobile #rnly-wizard-modal .flex.flex-col.avatar > .avatar-initials[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

  /* If you want "no ring" (image-only look) */
  .avatar.avatar-image {
    -webkit-box-shadow: none;
    box-shadow: none;
  }


  /* ==========================================================================
   SIZES
   ========================================================================== */
  .avatar.avatar-xs {
  height: 24px;
  width: 24px;
  font-size: 0.625rem;
  line-height: 0.875rem;
}

  .avatar.avatar-md {
  height: 38px;
  width: 38px;
  font-size: 0.875rem;
  line-height: 1.5rem;
}


/* ==========================================================================
   SHAPES
   ========================================================================== */


/* ==========================================================================
   STYLE VARIANTS
   ========================================================================== */
.avatar-soft {
  background-color: var(--bg-avatar-soft, var(--bg-secondary-subtle));
  color: var(--text-avatar-soft, var(--text-primary));
}

.avatar-solid {
  background-color: var(--bg-avatar-solid, var(--bg-primary-solid));
  color: var(--text-avatar-solid, var(--alpha-white-100));
}


/* ==========================================================================
   SEMANTIC COLOR VARIANTS (optional)
   - Use for non-photo avatars (initials / icon avatars)
   ========================================================================== */

/* Ring tint for semantic (optional) */


/* ==========================================================================
   STATUS BADGE (presence)
   - Place: <span class="avatar-badge badge-online"></span>
   - Optional outline ring: add .avatar-badge-outline
   ========================================================================== */

  /* Optional: badge outline instead of ring cutout */

/* Badge sizes/position per avatar size */

/* Presence colors */


/* ==========================================================================
   GROUPS
   ========================================================================== */

/* Overlap/stack */

/* Tighter stack */

/* Grid style (optional) */

/* Overflow pill (+N) */


/* ==========================================================================
   USERMENU TRIGGER (Reinly-specific)
   Thin overrides on top of the design-system .avatar component:
     • Drop the avatar's default 2px ring inside the button — the
       button's own border serves as the visual frame; the doubled
       ring otherwise compounded into a thick-looking edge.
     • Force overflow:hidden on the BUTTON itself as belt-and-
       suspenders so the photo's corners are clipped to a circle
       even on browsers where overflow:hidden + border-radius on the
       inner span isn't quite enough (which is what was producing
       the "square avatar" on /Seller/Listings).
     • Suppress Bootstrap's dropdown-toggle ::after caret — we don't
       want a triangle next to the photo.
   ========================================================================== */
.rnly-usermenu-trigger {
  overflow: hidden;
  /* Center the avatar inside the button frame. btn-icon already does
     inline-flex justify-center items-center, but the avatar is also
     inline-flex which can sometimes leave a subpixel gap. line-height
     1 keeps everything sitting tight. */
  line-height: 1;
}
.rnly-usermenu-trigger > .avatar {
  /* Drop the default ring — the button's own border is the frame. */
  -webkit-box-shadow: none;
  box-shadow: none;
}
.rnly-usermenu-trigger .avatar-initials {
  /* The hero's title font would otherwise inherit through to the
     initials and render them oversized on the home page. Lock the
     size + weight to the avatar-md tier. */
  font-size: 13px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0;
  color: inherit;
}
.dropdown-toggle.btn-icon::after {
  display: none;
}


/* ==========================================================================
   GLASS VARIANT (Reinly-specific)
   ========================================================================== */
/* Glass */
.avatar-glass {
  position: relative;
  --tw-backdrop-blur: blur(8px);
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
  z-index: 0;
  color: var(--text-avatar-glass, var(--alpha-white-100));
  background-color: var(--bg-avatar-glass, var(--alpha-white-20));
  -webkit-box-shadow: 0 0 0 1px var(--ring-avatar-glass, var(--alpha-white-30));
  box-shadow: 0 0 0 1px var(--ring-avatar-glass, var(--alpha-white-30));
}

  .avatar-glass::after {
    content: "";
    position: absolute;
    inset: 0;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'><filter id='noiseFilter'><feTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/></filter><rect width='100%' height='100%' filter='url(%23noiseFilter)' opacity='1'/></svg>");
    background-repeat: repeat;
    mix-blend-mode: overlay;
    opacity: var(--opacity-avatar-grain, 0);
    pointer-events: none;
    z-index: 0;
    border-radius: inherit;
  }

  .avatar-glass > * {
    position: relative;
    z-index: 1;
  }


/* ==========================================================================
   VERIFIED BADGE (Reinly-specific)
   - Positioned on the parent (e.g. <a> or wrapper) — not inside .avatar
   - Shows a small checkmark icon at bottom-right of the avatar
   ========================================================================== */
/* ==========================================================================
   Badges – Complete Component (V2)
   Updates in this version:
   - Outline badges are transparent (no fill), with border + text matching variant
   - Dots reliably render (badge-dot + status-dot support)
   - Dismiss "X" uses the same tone as badge text; hover/active background is tinted per variant
   - Clickable badges (.btn-badge) use variant-aware hover + active shades
   ========================================================================== */


/* ==========================================================================
   BASE BADGE
   ========================================================================== */
.badge {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-column-gap: 0.25rem;
  -moz-column-gap: 0.25rem;
  column-gap: 0.25rem;
  border-radius: 9999px;
  padding-left: 0.5rem;
  padding-right: 0.5rem;
  padding-top: 0.25rem;
  padding-bottom: 0.25rem;
  font-size: 0.625rem;
  font-weight: 400;
  line-height: .75rem;
  letter-spacing: 0.025em;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.badge[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
.badge {
  color: var(--text-badge);
  background-color: var(--bg-badge);
}

.badge > i,
.badge > [class*="fa-"] {
  color: var(--text-badge-icon, currentColor);
}

.badge-pill {
  border-radius: 9999px;
}

/* Alternate surface */


/* ==========================================================================
   DISMISS (CLOSE)
   - X inherits the badge text color
   - Hover/active background uses badge-tinted variables
   ========================================================================== */


/* ==========================================================================
   CLICKABLE BADGES (btn-badge)
   - Hover + active use variant-aware colors
   ========================================================================== */

  /* Neutral */


/* ==========================================================================
   SEMANTIC VARIANTS
   ========================================================================== */
.badge-danger {
  color: var(--text-badge-danger);
  background-color: var(--bg-badge-danger);
}

.badge-warning {
  color: var(--text-badge-warning);
  background-color: var(--bg-badge-warning);
}

.badge-success {
  color: var(--text-badge-success);
  background-color: var(--bg-badge-success);
}

.badge-info {
  color: var(--text-badge-info);
  background-color: var(--bg-badge-info);
}

.badge-pink {
  color: var(--text-badge-pink);
  background-color: var(--bg-badge-pink);
}


/* ==========================================================================
   OUTLINE BADGES (transparent fill)
   - Border + text match variant tone
   ========================================================================== */


/* ==========================================================================
   OPTIONAL: GHOST BADGE
   ========================================================================== */


/* ==========================================================================
   CLICKABLE SEMANTIC HOVER + ACTIVE
   ========================================================================== */
/* Danger */

/* Warning */

/* Success */

/* Info */

/* Indigo */

/* Purple */

/* Pink */

/* Teal */

/* Mint */


/* ==========================================================================
   OUTLINE CLICKABLE (tinted hover fill)
   ========================================================================== */


/* ==========================================================================
   DISMISS (CLOSE) – VARIANT-TINTED HOVER / PRESSED
   ========================================================================== */
/* Neutral close */
.badge {
  --bg-badge-close-hover: var(--bg-badge-hover);
  --bg-badge-close-pressed: var(--bg-badge-pressed, var(--bg-badge-hover));
}

/* Danger close */
.badge-danger {
  --bg-badge-close-hover: var(--bg-badge-danger-hover);
  --bg-badge-close-pressed: var(--bg-badge-danger-pressed, var(--bg-badge-danger-hover));
}

/* Warning close */
.badge-warning {
  --bg-badge-close-hover: var(--bg-badge-warning-hover);
  --bg-badge-close-pressed: var(--bg-badge-warning-pressed, var(--bg-badge-warning-hover));
}

/* Success close */
.badge-success {
  --bg-badge-close-hover: var(--bg-badge-success-hover);
  --bg-badge-close-pressed: var(--bg-badge-success-pressed, var(--bg-badge-success-hover));
}

/* Info close */
.badge-info {
  --bg-badge-close-hover: var(--bg-badge-info-hover);
  --bg-badge-close-pressed: var(--bg-badge-info-pressed, var(--bg-badge-info-hover));
}

/* Indigo close */

/* Purple close */

/* Pink close */
.badge-pink {
  --bg-badge-close-hover: var(--bg-badge-pink-hover);
  --bg-badge-close-pressed: var(--bg-badge-pink-pressed, var(--bg-badge-pink-hover));
}

/* Teal close */

/* Mint close */

/* Outline close should still tint correctly on hover */


/* ==========================================================================
   NOTIFICATION BADGES
   ========================================================================== */


/* ==========================================================================
   STATUS (label + dot)
   - Use: <span class="badge-status"><span class="status-dot success"></span>Online</span>
   ========================================================================== */


/* ==========================================================================
   BADGE DOT (pill badge with colored dot)
   - Use: <span class="badge-dot"><span class="success"></span>Active</span>
   ========================================================================== */
/* ==========================================================================
   BASE CARD
   ========================================================================== */
.card {
  position: relative;
  overflow: hidden;
  border-radius: 0.75rem;
  border-width: 1px;
  --tw-shadow: 0 1px 1px 0 rgb(0 0 0 / 0.03);
  --tw-shadow-colored: 0 1px 1px 0 var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  background-color: var(--bg-card, var(--alpha-white-100));
  border-color: var(--border-card, var(--border-primary));
  color: var(--text-card, var(--text-primary));
}

/* Optional blur hook */
.card {
  backdrop-filter: var(--blur-card-backdrop, none);
}

  /* Grain overlay (shared) */
  .card::after {
    content: "";
    position: absolute;
    inset: 0;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'><filter id='noiseFilter'><feTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/></filter><rect width='100%' height='100%' filter='url(%23noiseFilter)' opacity='1'/></svg>");
    background-repeat: repeat;
    mix-blend-mode: overlay;
    opacity: var(--opacity-card-grain, 0);
    pointer-events: none; 
    z-index: 0;
    border-radius: inherit;
  } 
   
  .card > * {
    position: relative;
    z-index: 1;
  }


/* ==========================================================================
   CARD LAYOUT SLOTS (optional but recommended)
   ========================================================================== */
.card-header {
  padding-left: 1rem;
  padding-right: 1rem;
  padding-top: 0.75rem;
  padding-bottom: 0.75rem;
}

.card-body {
  padding-left: 1rem;
  padding-right: 1rem;
  padding-top: 1rem;
  padding-bottom: 1rem;
}

/* Optional dividers */


/* ==========================================================================
   SIZING + PADDING VARIANTS
   ========================================================================== */

/* Padding utilities (when not using header/body/footer slots) */

.card.card-pad-md {
  padding: 1rem;
}


/* ==========================================================================
   EDGE / JOIN HELPERS
   ========================================================================== */


/* ==========================================================================
   INTERACTION VARIANTS
   ========================================================================== */

/* Selected / Active (persistent) */
.card[aria-selected="true"],
.card.is-selected {
  border-color: var(--border-card-active, var(--border-secondary));
  -webkit-box-shadow: var(--shadow-card-active, var(--shadow-sm));
  box-shadow: var(--shadow-card-active, var(--shadow-sm));
}

/* Focus within (forms, inputs inside cards) */
/*.card:focus-within {
  border-color: var(--border-card-focus, var(--border-info-subtle));
  box-shadow: var(--ring-card-focus, 0 0 0 2px var(--border-info-subtle));
}*/

/* Disabled */
.card.is-disabled,
.card[aria-disabled="true"] {
  opacity: var(--opacity-card-disabled, 0.65);
  -webkit-filter: var(--filter-card-disabled, none);
  filter: var(--filter-card-disabled, none);
}

  .card.is-disabled,
  .card[aria-disabled="true"],
  .card.is-disabled *,
  .card[aria-disabled="true"] * {
    pointer-events: none;
  }


/* ==========================================================================
   HOVER SURFACE – Background scale-in on hover
   ========================================================================== */

.card--hover-surface {
  position: relative;
}

  .card--hover-surface::before {
    content: "";
    position: absolute;
    inset: -6px;
    border-radius: var(--radius-card-hover, 1.25rem);
    background: var(--bg-card-hover-surface);
    opacity: 0;
    -webkit-transform: scale(0.96);
    -ms-transform: scale(0.96);
    transform: scale(0.96);
    -webkit-transition: opacity var(--duration-card-hover, 200ms) var(--ease-card-hover, cubic-bezier(.4, 0, .2, 1)),
               -webkit-transform var(--duration-card-hover, 200ms) var(--ease-card-hover, cubic-bezier(.4, 0, .2, 1));
    transition: opacity var(--duration-card-hover, 200ms) var(--ease-card-hover, cubic-bezier(.4, 0, .2, 1)),
               -webkit-transform var(--duration-card-hover, 200ms) var(--ease-card-hover, cubic-bezier(.4, 0, .2, 1));
    transition: opacity var(--duration-card-hover, 200ms) var(--ease-card-hover, cubic-bezier(.4, 0, .2, 1)),
               transform var(--duration-card-hover, 200ms) var(--ease-card-hover, cubic-bezier(.4, 0, .2, 1));
    transition: opacity var(--duration-card-hover, 200ms) var(--ease-card-hover, cubic-bezier(.4, 0, .2, 1)),
               transform var(--duration-card-hover, 200ms) var(--ease-card-hover, cubic-bezier(.4, 0, .2, 1)),
               -webkit-transform var(--duration-card-hover, 200ms) var(--ease-card-hover, cubic-bezier(.4, 0, .2, 1));
    pointer-events: none;
    z-index: 0;
  }

  .card--hover-surface > * {
    position: relative;
    z-index: 1;
  }

  /* Active states — :hover, :focus-within, AND .is-active (set
     programmatically when a card is "linked" to e.g. a clicked map
     marker popover). All three trigger the same scaled background. */
  .card--hover-surface:hover::before,
  .card--hover-surface:focus-within::before,
  .card--hover-surface.is-active::before {
    opacity: 1;
    -webkit-transform: scale(1);
    -ms-transform: scale(1);
    transform: scale(1);
  }

/* Optional shadow raise on hover */

/* Disable hover surface entirely */

/* Drag / drop safety */
.card--hover-surface.is-dragging::before,
.card--hover-surface.is-ghost::before {
  opacity: 0 !important;
  -webkit-transform: none !important;
  -ms-transform: none !important;
  transform: none !important;
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
  .card--hover-surface::before {
    -webkit-transform: none;
    -ms-transform: none;
    transform: none;
    -webkit-transition: opacity var(--duration-card-hover, 200ms) var(--ease-card-hover, cubic-bezier(.4, 0, .2, 1));
    transition: opacity var(--duration-card-hover, 200ms) var(--ease-card-hover, cubic-bezier(.4, 0, .2, 1));
  }
}


/* ==========================================================================
   STYLE VARIANTS
   ========================================================================== */

/* Flat */
.card.card-flat {
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  background-color: var(--bg-card-flat, var(--bg-card));
  border-color: var(--border-card-flat, var(--border-card));
}

  .card.card-flat::after {
    opacity: var(--opacity-card-flat-grain, 0);
  }

/* Light / Subtle surface */

/* Soft (nice for panels) */

/* Ghost (border-only, transparent surface) */

/* Outline emphasis */


/* ==========================================================================
   MINI CARD (kept as separate preset)
   ========================================================================== */


/* ==========================================================================
   GLASS CARD (unified + size variants)
   ========================================================================== */
.card-glass {
  position: relative;
  overflow: hidden;
  border-radius: 0.75rem;
  border-width: 1px;
  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  background-color: var(--bg-glass-card, var(--alpha-white-20));
  border-color: var(--border-glass-card, var(--alpha-white-20));
  color: var(--text-glass-card, var(--text-primary));
  backdrop-filter: var(--blur-glass-card, blur(20px));
  -webkit-box-shadow: var(--shadow-glass-card, var(--shadow-md));
  box-shadow: var(--shadow-glass-card, var(--shadow-md));
}

  .card-glass::after {
    content: "";
    position: absolute;
    inset: 0;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'><filter id='noiseFilter'><feTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/></filter><rect width='100%' height='100%' filter='url(%23noiseFilter)' opacity='1'/></svg>");
    background-repeat: repeat;
    mix-blend-mode: overlay;
    opacity: var(--opacity-glass-card-grain, 0.15);
    pointer-events: none;
    z-index: 0;
    border-radius: inherit;
  }

/* Glass sizes: adjust blur + shadow + grain (wired to your tokens) */

/* ==========================================================================
   SECTION (kept as-is, but token-forward)
   ========================================================================== */
.section {
  border-radius: 0.375rem;
  padding: 1rem;
  color: var(--text-primary);
  background-color: var(--bg-primary);
}
/* ========================================
   Component: Collapse
   Smooth expand / collapse using CSS transitions.
   States:
     .collapse          → hidden (no space taken)
     .collapse.show     → fully visible
     .collapsing        → animating (JS sets explicit height/width)
     .collapse-horizontal → horizontal variant
   ======================================== */

/* --- Vertical (default) -------------------------------- */

.collapse:not(.show) {
  display: none;
}

.collapse.show {
  display: block;
  visibility: visible;
}

/* Preserve flex layout when a collapse container also uses .flex */
.collapse.show.flex {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

.collapsing {
  height: 0;
  overflow: hidden;
  -webkit-transition: height 0.35s ease;
  transition: height 0.35s ease;
}

@media (prefers-reduced-motion: reduce) {
  .collapsing {
    -webkit-transition: none;
    transition: none;
  }
}

/* --- Horizontal --------------------------------------- */

.collapsing.collapse-horizontal {
  width: 0;
  height: auto;
  overflow: hidden;
  -webkit-transition: width 0.35s ease;
  transition: width 0.35s ease;
}

@media (prefers-reduced-motion: reduce) {
  .collapsing.collapse-horizontal {
    -webkit-transition: none;
    transition: none;
  }
}

/* When shown horizontally, ensure inline-block so width
   is dictated by content rather than block-level 100%. */
.collapse-horizontal.collapse.show {
  display: inline-block;
}
/* ==========================================================================
   Divider v2
   - Horizontal + vertical
   - With / without content
   - Inset / padded / strong / dashed
   - Semantic variants
   ========================================================================== */

/* ==========================================================================
   BASE WRAPPER (with optional content)
   ========================================================================== */
.divider-wrapper {
  position: relative;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}
.collapse.show.divider-wrapper {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .divider-wrapper {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.divider-wrapper.items-baseline { margin-bottom: 10px; }
html.is-mobile .divider-wrapper:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .divider-wrapper.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.divider-wrapper[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .divider-wrapper.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .divider-wrapper.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .divider-wrapper.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .divider-wrapper.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .divider-wrapper.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

/* Default horizontal divider (primary — matches panel/resize borders) */
.divider {
  -webkit-box-flex: 1;
  -ms-flex-positive: 1;
  flex-grow: 1;
  border-top-width: 1px;
  border-color: var(--border-primary);
}

/* Secondary divider (lighter) */

/* Center content */
.divider-content {
  margin-left: 1rem;
  margin-right: 1rem;
  -ms-flex-negative: 1;
  flex-shrink: 1;
  font-size: 0.75rem;
  line-height: 1rem;
  color: var(--text-divider);
}

/* ==========================================================================
   SIMPLE DIVIDER (no wrapper required)
   ========================================================================== */

/* ==========================================================================
   VERTICAL DIVIDER
   ========================================================================== */

/* ==========================================================================
   INSET VARIANTS
   ========================================================================== */

/* Vertical inset */

/* ==========================================================================
   STYLE VARIANTS
   ========================================================================== */

/* Strong (thicker / higher contrast) */

/* Dashed */

/* Dotted */

/* Subtle */

/* ==========================================================================
   SEMANTIC VARIANTS
   ========================================================================== */

/* ==========================================================================
   BORDER UTILITY HOOK
   ========================================================================== */
.border-default {
  border-color: var(--border-divider) !important;
}

.border-danger {
  border-color: var(--border-danger);
}

.border-warning {
  border-color: var(--border-warning);
}
/* ==========================================================================
   HERO HEADER – full-bleed background image with overlaid navigation
   ========================================================================== */

.rnly-hero {
  position: relative;
  min-height: 320px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
}

/* Hero mode: the chrome's padding is stripped by Reinly.Design foundations/layout.css .app-chrome--hero (tq-9364, A211:
   one writer for the DS selector) so the hero fills the header edge-to-edge */

/* ── Background image ── */
.rnly-hero__image {
  position: absolute;
  inset: 0px;
  height: 100%;
  width: 100%;
  -o-object-fit: cover;
  object-fit: cover;
  -o-object-position: center 35%;
  object-position: center 35%;
  pointer-events: none;
}

/* ── Gradient overlay for text readability ── */
.rnly-hero__overlay {
  position: absolute;
  inset: 0px;
  background: -webkit-gradient(
    linear,
    left top, left bottom,
    from(rgba(0,0,0,.18)),
    color-stop(50%, rgba(0,0,0,.40)),
    to(rgba(0,0,0,.55))
  );
  background: linear-gradient(
    to bottom,
    rgba(0,0,0,.18) 0%,
    rgba(0,0,0,.40) 50%,
    rgba(0,0,0,.55) 100%
  );
  pointer-events: none;
}

/* ── Navigation bar (sits at the top of the hero) ── */
.rnly-hero__nav {
  position: relative;
  z-index: 10;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
}
.collapse.show.rnly-hero__nav {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .rnly-hero__nav {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.rnly-hero__nav.items-baseline { margin-bottom: 10px; }
html.is-mobile .rnly-hero__nav:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .rnly-hero__nav.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.rnly-hero__nav[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .rnly-hero__nav.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .rnly-hero__nav.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .rnly-hero__nav.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .rnly-hero__nav.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .rnly-hero__nav.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}
.rnly-hero__nav {
  padding: 12px 16px 0;
}

.rnly-hero__nav-left {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.rnly-hero__nav-left[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

.rnly-hero__nav-right {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.rnly-hero__nav-right[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

/* Compact search pill container – absolutely centered within the nav */
.rnly-hero__nav-center {
  position: absolute;
  left: 50%;
  top: 50%;
  -webkit-transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
  opacity: 0;
  pointer-events: none;
  -webkit-transition: opacity var(--hero-dur-fast, 180ms) ease;
  transition: opacity var(--hero-dur-fast, 180ms) ease;
  will-change: opacity;
}

/* Glass-ify any standard buttons rendered inside the hero nav (e.g. SetTheme) */
.rnly-hero__nav .btn-secondary,
.rnly-hero__nav .dropdown-toggle.btn-secondary {
  color: var(--text-button-glass);
  background-color: var(--bg-button-glass);
  border-color: var(--border-button-glass);
  backdrop-filter: blur(12px);
}

.rnly-hero__nav .btn-secondary:hover,
.rnly-hero__nav .dropdown-toggle.btn-secondary:hover {
  color: var(--text-button-glass-hover);
  background-color: var(--bg-button-glass-hover);
  border-color: var(--border-button-glass-hover);
}

/* ── Hero body (title + subtitle, vertically centered) ── */
.rnly-hero__body {
  position: relative;
  z-index: 1;
  width: 100%;
  text-align: center;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
}

.rnly-hero__body-inner {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  height: 100%;
  padding: 1rem 1rem 0;
}

.rnly-hero__title {
  margin-bottom: 0.5rem;
  font-size: 2rem;
  line-height: 3rem;
  font-weight: 600;
  letter-spacing: -0.025em;
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
  text-shadow: 0 2px 12px rgba(0,0,0,.3);
}

.rnly-hero__subtitle {
  margin-bottom: 1rem;
  font-size: 1rem;
  line-height: 1.5rem;
  color: rgba(255,255,255,.8);
  text-shadow: 0 1px 6px rgba(0,0,0,.25);
}

/* ── Hero inner content (search bar, CTAs – rendered below body) ── */
.rnly-hero__content {
  position: relative;
  z-index: 1;
  width: 100%;
  text-align: center;
  padding: 0 1rem 1.5rem;
}

/* ── Desktop tightening ────────────────────────────────────────
   On desktop, the hero feels too tall and the title/subtitle
   stack sits in dead-center of an oversized body, leaving a big
   empty gap above the search pill below it. Two adjustments:
     1. Shorter hero (smaller min-height) so the surface reads as
        a compact header rather than a giant landing block.
     2. Push the title/subtitle stack to the bottom of the body
        (justify-content: flex-end) and tighten the subtitle's
        bottom margin so the search pill sits just below it. */
html:not(.is-mobile) .rnly-hero { min-height: 240px; }
html:not(.is-mobile) .rnly-hero__body-inner {
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
  padding-bottom: 6px;
}
html:not(.is-mobile) .rnly-hero__subtitle { margin-bottom: 8px; }
html:not(.is-mobile) .rnly-hero__content { padding-top: 0; padding-bottom: 18px; }

/* ── Unsplash credit ── */
.rnly-hero__credit {
  position: absolute;
  z-index: 1;
  bottom: 12px;
  right: 16px;
  font-size: 0.6875rem;
  opacity: 0.55;
  color: rgba(255,255,255,.85);
}

.rnly-hero__credit a {
  color: rgba(255,255,255,.85);
  text-decoration: none;
}

.rnly-hero__credit a:hover {
  text-decoration: underline;
}
/* ==========================================================================
   List + List group (.panel-list / .panel-item) — Phase-3c rebuild
   DERIVE (no UUI source). Built on the pilot primitives, keeping the UUI accent.
   ==========================================================================

   PILOT PRIMITIVES APPLIED (FAN-OUT-RULES §1, §3):
   - SINGLE focus ring — one 2px inset ring in the UUI brand accent
     (`--ring-list-item-focus` → `--border-focus`, violet not black, NO halo).
   - Accents resolve through the UUI BRAND, not info-blue: the active left-edge
     bar (`--bg-list-indicator`), the selection tint (`--bg-list-item-selected`,
     UUI brand-50 in light / a soft brand mix in dark), and the card-active ring
     (`--shadow-list-card-active`) all point at the brand — matching the sibling
     table's restrained `--border-focus` accent so the two read as one system.
   - Rows are separated by a divider `border-b` (a legitimate hairline, not field
     chrome) — the container border lives in markup, so there is no double edge.
   - Card-variant items use `rounded-lg`; the container keeps `--radius-list`
     (= md) so list + table seams line up.

   OUR TAXONOMY LAYERED ON TOP (never narrowed — FAN-OUT-RULES §5):
   - Five sizes incl. `xs` (+ legacy `list-compact`/`list-relaxed` aliases).
   - Eight layout variants (flush/cards/ladder/inset-dividers/sectioned/
     two-column/quiet/virtual) + behaviour modifiers (clickable/selectable/
     sortable/searchable/indicator).
   - Intent rows success/warning/danger/`info` — `info` is a reinly
     extension with no UUI analog and is KEPT; its info-blue is deliberate and
     distinct from the (now brand) selection tint.
   - Full state set: active/selected/multi-selected/expanded/disabled/loading
     skeleton/new-flash + drag & drop (ghost/drop-target). Drop affordances keep
     the info hue to match the sibling kanban's drag precedent.

   Interactivity: `Scripts/components/list-group.js` (pure vanilla, auto-inits on
   `.panel-list[data-list-group]`; imported + inited by `layout.js`).
   ========================================================================== */

.panel-list {
  /* ============================================================
   * Container
   * ============================================================ */
  width: 100%;
  background-color: var(--bg-list, var(--alpha-white-100));
  border-radius: var(--radius-list, 0.375rem);
  --pl-pad-x: var(--space-list-item-x, 1rem);
  --pl-pad-y: var(--space-list-item-y, 0.5rem);
}

/* Hover ON by default; opt out with .no-hover on container or item */

.panel-list:not(.no-hover)
    .panel-item:not(.no-hover):not(.is-disabled):not(
      [aria-disabled='true']
    ):hover {
    background-color: var(--bg-list-item-hover, var(--bg-primary-subtle));
  }

/* Active indicator bar (opt-in via .list-indicator OR .panel-list--indicator) */

.panel-list.list-indicator .panel-item.active::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: var(--size-list-indicator, 3px);
    background-color: var(--bg-list-indicator, var(--border-focus));
    border-radius: 0 2px 2px 0;
  }

.panel-list.list-indicator .panel-item[aria-current='true']::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: var(--size-list-indicator, 3px);
    background-color: var(--bg-list-indicator, var(--border-focus));
    border-radius: 0 2px 2px 0;
  }

/* ============================================================
   * Density variants — backwards compatible names
   * ============================================================ */

.panel-list.list-compact {
    --pl-pad-y: var(--space-list-item-y-compact, 0.375rem);
  }

.panel-list.list-relaxed {
    --pl-pad-y: var(--space-list-item-y-relaxed, 0.75rem);
  }

/* New size scale */

.panel-list.list-xs {
    --pl-pad-y: var(--space-list-item-y-xs, 0.25rem);
  }

.panel-list.list-sm {
    --pl-pad-y: var(--space-list-item-y-sm, 0.375rem);
  }

.panel-list.list-md {
    --pl-pad-y: var(--space-list-item-y-md, 0.5rem);
  }

.panel-list.list-lg {
    --pl-pad-y: var(--space-list-item-y-lg, 0.75rem);
  }

.panel-list.list-xl {
    --pl-pad-y: var(--space-list-item-y-xl, 1rem);
  }

/* ============================================================
   * Divider variants
   * ============================================================ */

.panel-list.list-borderless {
    border-color: var(--alpha-0);
    background-color: transparent;
  }

.panel-list.list-borderless .panel-item {
    border-color: var(--alpha-0);
  }

.panel-list.list-inset-dividers {
    /* same behavior, new alias */
  }

.panel-list.list-inset-dividers .panel-item {
    border-bottom-color: var(--alpha-0);
  }

.panel-list.list-inset-dividers .panel-item::after {
    content: '';
    position: absolute;
    left: var(--space-list-inset, 3rem);
    right: 0;
    bottom: 0;
    height: 1px;
    background-color: var(--border-list-divider, var(--border-primary-subtle));
  }

.panel-list.list-inset-dividers .panel-item:last-child::after {
    display: none;
  }

.panel-list-header {
  /* Optional section header */
  border-bottom-style: var(--tw-border-style, solid);
  border-bottom-width: 1px;
  padding-inline: 1rem;
  padding-block: 0.5rem;
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  --tw-font-weight: 500;
  font-weight: 500;
  color: var(--text-list-header, var(--text-secondary));
  border-color: var(--border-list-header, var(--border-primary-subtle));
  background-color: var(--bg-list-header, var(--bg-primary-subtle));
}

.panel-list-header.is-sticky {
    position: sticky;
    top: 0;
    z-index: 2;
    backdrop-filter: blur(8px);
    background-color: color-mix(
      in oklab,
      var(--bg-list-header) 80%,
      transparent
    );
  }

/* Sectioned — sticky section headers + rule between groups */

.panel-list--sectioned > .panel-list-header {
    position: sticky;
    top: 0;
    z-index: 2;
  }

.is-sticky.panel-list-header {
    position: sticky;
    top: 0;
    z-index: 2;
    backdrop-filter: blur(8px);
    background-color: color-mix(
      in oklab,
      var(--bg-list-header) 80%,
      transparent
    );
  }

.panel-list-subheader {
  /* Sub-header — quieter row used between groups of items */
  border-block-style: var(--tw-border-style, solid);
  border-block-width: 1px;
  padding-inline: 1rem;
  padding-block: 0.375rem;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  --tw-font-weight: 500;
  font-weight: 500;
  color: var(--text-list-section-header, var(--text-tertiary));
  background-color: var(--bg-list-section-header, var(--bg-primary-subtle));
  border-color: var(--border-list-divider, var(--border-primary-subtle));
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

.panel-list--sectioned > .panel-list-subheader {
    position: sticky;
    top: 0;
    z-index: 2;
  }

.panel-list-empty {
  /* Empty state */
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 0.5rem;
  padding-inline: 1rem;
  padding-block: 2rem;
  text-align: center;
  color: var(--text-list-item-subtitle, var(--text-tertiary));
}

.panel-list-empty__icon {
  width: 36px;
  height: 36px;
  border-radius: 999px;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  background-color: var(--bg-list-item-hover, var(--bg-primary-subtle));
  color: var(--text-list-item-leading, var(--text-tertiary));
  font-size: 14px;
}

.panel-list-empty__title {
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  --tw-font-weight: 600;
  font-weight: 600;
  color: var(--text-list-item-title, var(--text-primary));
}

.panel-list-empty__body {
  max-width: var(--container-xs, 20rem);
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  opacity: 80%;
}

.panel-list-search {
  /* Optional search row */
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;
  border-bottom-style: var(--tw-border-style, solid);
  border-bottom-width: 1px;
  padding-inline: 0.75rem;
  padding-block: 0.5rem;
  border-color: var(--border-list-divider, var(--border-primary-subtle));
  background-color: transparent;
}

.panel-list-search input {
    -webkit-box-flex: 1;
    -ms-flex: 1;
    flex: 1;
    background-color: transparent;
    font-size: 0.8125rem;
    line-height: var(--tw-leading, 1.25rem);
    --tw-outline-style: none;
    outline-style: none;
    color: var(--text-list-item, var(--text-primary));
  }
@media (forced-colors: active) {

  .panel-list-search input {
    outline: 2px solid transparent;
    outline-offset: 2px;
  }
}

.panel-list-search i {
    color: var(--text-list-item-leading, var(--text-tertiary));
    font-size: 12px;
  }

.panel-item {
  /* ============================================================
   * Item
   * ============================================================ */
  position: relative;
  cursor: pointer;
  border-radius: 0;
  border-bottom-style: var(--tw-border-style, solid);
  border-bottom-width: 1px;
  padding: var(--pl-pad-y) var(--pl-pad-x);
  border-color: var(--border-list-divider, var(--border-primary-subtle));
  background-color: var(--bg-list-item, var(--bg-list, var(--alpha-white-100)));
  color: var(--text-list-item, var(--text-primary));
  -webkit-transition:
    background-color 120ms ease,
    -webkit-box-shadow 160ms ease;
  transition:
    background-color 120ms ease,
    -webkit-box-shadow 160ms ease;
  transition:
    background-color 120ms ease,
    box-shadow 160ms ease;
  transition:
    background-color 120ms ease,
    box-shadow 160ms ease,
    -webkit-box-shadow 160ms ease;
}

/* The END rows follow the list's rounded corners (tq-9030 A141, isabella 900067681): a hover / selected / active fill never
   paints square past them. Radius on the rows, not overflow: hidden on the list, which would clip the rows' outside focus
   ring. :where() keeps it at the row's own weight; cards round every row themselves. */
:where(.panel-list:not(.panel-list--cards)) > .panel-item:first-child {
  border-start-start-radius: inherit;
  border-start-end-radius: inherit;
}

:where(.panel-list:not(.panel-list--cards)) > .panel-item:last-child {
  border-end-start-radius: inherit;
  border-end-end-radius: inherit;
}

.panel-item:last-child {
    border-bottom-color: var(--alpha-0);
  }

/* Hover ON by default; opt out with .no-hover on container or item */

.panel-list:not(.no-hover)
    .panel-item:not(.no-hover):not(.is-disabled):not([aria-disabled='true']):hover {
    background-color: var(--bg-list-item-hover, var(--bg-primary-subtle));
  }

/* Active / current */

.panel-item.active {
    background-color: var(--bg-list-item-active, var(--bg-secondary));
  }

.panel-item[aria-current='true'] {
    background-color: var(--bg-list-item-active, var(--bg-secondary));
  }

/* Selection (single-select highlight) */

.panel-item.selected {
    background-color: var(--bg-list-item-selected, var(--color-brand-50, oklch(97.9% 0.021 166)));
  }

.panel-item[aria-selected='true'] {
    background-color: var(--bg-list-item-selected, var(--color-brand-50, oklch(97.9% 0.021 166)));
  }

/* Multi-select with checkbox */

.panel-item.is-multi-selected {
    background-color: var(--bg-list-item-selected, var(--color-brand-50, oklch(97.9% 0.021 166)));
  }

/* Active indicator bar (opt-in via .list-indicator OR .panel-list--indicator) */

.panel-list.list-indicator .panel-item.active::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: var(--size-list-indicator, 3px);
    background-color: var(--bg-list-indicator, var(--border-focus));
    border-radius: 0 2px 2px 0;
  }

.panel-list.list-indicator .panel-item[aria-current='true']::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: var(--size-list-indicator, 3px);
    background-color: var(--bg-list-indicator, var(--border-focus));
    border-radius: 0 2px 2px 0;
  }

.panel-list--indicator .panel-item.active::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: var(--size-list-indicator, 3px);
    background-color: var(--bg-list-indicator, var(--border-focus));
    border-radius: 0 2px 2px 0;
  }

.panel-list--indicator .panel-item[aria-current='true']::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: var(--size-list-indicator, 3px);
    background-color: var(--bg-list-indicator, var(--border-focus));
    border-radius: 0 2px 2px 0;
  }

/* Keyboard focus */

.panel-item:focus-visible {
    outline: 2px solid var(--focus-ring); outline-offset: 2px;
    z-index: 1;
  }

.panel-item:focus-within {
    background-color: var(--bg-list-item-hover, var(--bg-primary-subtle));
  }

/* Disabled */

.panel-item.is-disabled {
    cursor: default;
    opacity: var(--opacity-list-item-disabled, 0.6);
    color: var(--text-list-item-disabled, var(--text-disabled));
    background-color: var(--bg-list-item-disabled, var(--bg-primary-subtle));
  }

.panel-item[aria-disabled='true'] {
    cursor: default;
    opacity: var(--opacity-list-item-disabled, 0.6);
    color: var(--text-list-item-disabled, var(--text-disabled));
    background-color: var(--bg-list-item-disabled, var(--bg-primary-subtle));
  }

.panel-item.is-disabled * {
    pointer-events: none;
  }

.panel-item[aria-disabled='true'] * {
    pointer-events: none;
  }

.panel-list--sortable .panel-item:hover .panel-item-handle {
    opacity: 1;
  }

.panel-list--sortable .panel-item:focus-within .panel-item-handle {
    opacity: 1;
  }

.panel-item.is-expanded .panel-item-detail {
    display: block;
  }

.panel-item.is-expanded .panel-item__expand-trigger::after {
    -webkit-transform: rotate(180deg);
    -ms-transform: rotate(180deg);
    transform: rotate(180deg);
  }

.panel-item:hover .panel-item__chevron {
    -webkit-transform: translateX(2px);
    -ms-transform: translateX(2px);
    transform: translateX(2px);
    color: var(--text-list-item-title);
  }

.panel-item.list-xs {
    --pl-pad-y: var(--space-list-item-y-xs, 0.25rem);
  }

.panel-item.list-sm {
    --pl-pad-y: var(--space-list-item-y-sm, 0.375rem);
  }

.panel-item.list-md {
    --pl-pad-y: var(--space-list-item-y-md, 0.5rem);
  }

.panel-item.list-lg {
    --pl-pad-y: var(--space-list-item-y-lg, 0.75rem);
  }

.panel-item.list-xl {
    --pl-pad-y: var(--space-list-item-y-xl, 1rem);
  }

.panel-list.list-borderless .panel-item {
    border-color: var(--alpha-0);
  }

.panel-list--quiet .panel-item {
    border-color: var(--alpha-0);
  }

.panel-list.list-inset-dividers .panel-item {
    border-bottom-color: var(--alpha-0);
  }

.panel-list--inset-dividers .panel-item {
    border-bottom-color: var(--alpha-0);
  }

.panel-list.list-inset-dividers .panel-item::after {
    content: '';
    position: absolute;
    left: var(--space-list-inset, 3rem);
    right: 0;
    bottom: 0;
    height: 1px;
    background-color: var(--border-list-divider, var(--border-primary-subtle));
  }

.panel-list--inset-dividers .panel-item::after {
    content: '';
    position: absolute;
    left: var(--space-list-inset, 3rem);
    right: 0;
    bottom: 0;
    height: 1px;
    background-color: var(--border-list-divider, var(--border-primary-subtle));
  }

.panel-list.list-inset-dividers .panel-item:last-child::after {
    display: none;
  }

.panel-list--inset-dividers .panel-item:last-child::after {
    display: none;
  }

.panel-list--cards .panel-item {
    border: 1px solid var(--border-list-card);
    border-radius: var(--radius-lg, 0.5rem);
    background-color: var(--bg-list-card);
    -webkit-box-shadow: var(--shadow-list-card);
    box-shadow: var(--shadow-list-card);
    -webkit-transition:
      -webkit-box-shadow 160ms ease,
      -webkit-transform 160ms ease;
    transition:
      -webkit-box-shadow 160ms ease,
      -webkit-transform 160ms ease;
    transition:
      box-shadow 160ms ease,
      transform 160ms ease;
    transition:
      box-shadow 160ms ease,
      transform 160ms ease,
      -webkit-box-shadow 160ms ease,
      -webkit-transform 160ms ease;
  }

.panel-list--cards .panel-item:hover {
    -webkit-box-shadow: var(--shadow-list-card-hover);
    box-shadow: var(--shadow-list-card-hover);
  }

.panel-list--cards .panel-item.active {
    -webkit-box-shadow: var(--shadow-list-card-active);
    box-shadow: var(--shadow-list-card-active);
  }

.panel-list--cards .panel-item[aria-current='true'] {
    -webkit-box-shadow: var(--shadow-list-card-active);
    box-shadow: var(--shadow-list-card-active);
  }

.panel-list--ladder .panel-item {
    background-color: transparent;
    border-bottom: 1px solid var(--border-list-divider);
  }

.panel-list--ladder .panel-item:last-child {
    border-bottom: 0;
  }

.panel-list--ladder .panel-item:hover {
    background-color: transparent;
    -webkit-box-shadow: inset 3px 0 0 var(--border-list-divider);
    box-shadow: inset 3px 0 0 var(--border-list-divider);
  }

.panel-list--two-column .panel-item:nth-child(odd) {
    border-right: 1px solid var(--border-list-divider);
  }

@media (max-width: 640px) {
    .panel-list--two-column .panel-item:nth-child(odd) {
      border-right: 0;
    }
  }

.panel-list--virtual .panel-item {
    border-bottom: 0;
  }

/* ============================================================
   * Behaviour modifiers
   * ============================================================ */

.panel-list--clickable .panel-item {
    cursor: pointer;
  }

/* ============================================================
   * States
   * ============================================================ */

/* New-item flash */

.panel-item.is-new {
    -webkit-animation: panel-item-flash 1.6s ease-out 1;
    animation: panel-item-flash 1.6s ease-out 1;
  }

@media (prefers-reduced-motion: reduce) {
    .panel-item.is-new {
      -webkit-animation: none;
      animation: none;
    }
  }

.panel-item.is-loading {
    pointer-events: none;
  }

.panel-item.is-loading .panel-item-title {
    color: transparent !important;
    background-color: var(--bg-list-item-skeleton);
    border-radius: 4px;
    position: relative;
    overflow: hidden;
    height: 10px;
  }

.panel-item.is-loading .panel-item-subtitle {
    color: transparent !important;
    background-color: var(--bg-list-item-skeleton);
    border-radius: 4px;
    position: relative;
    overflow: hidden;
    height: 10px;
  }

.panel-item.is-loading .panel-item-leading {
    color: transparent !important;
    background-color: var(--bg-list-item-skeleton);
    border-radius: 4px;
    position: relative;
    overflow: hidden;
    height: 10px;
  }

.panel-item.is-loading .panel-item-trailing {
    color: transparent !important;
    background-color: var(--bg-list-item-skeleton);
    border-radius: 4px;
    position: relative;
    overflow: hidden;
    height: 10px;
  }

.panel-item.is-loading .panel-item-title {
    width: 60%;
    height: 12px;
  }

.panel-item.is-loading .panel-item-subtitle {
    width: 40%;
    height: 10px;
    margin-top: 6px;
  }

.panel-item.is-loading .panel-item-leading {
    width: 24px;
    height: 24px;
    border-radius: 999px;
  }

.panel-item.is-loading .panel-item-trailing {
    width: 24px;
    height: 24px;
    border-radius: 999px;
  }

.panel-item.is-loading .panel-item-title::after {
    content: '';
    position: absolute;
    inset: 0;
    background: var(--bg-list-item-skeleton-shimmer);
    -webkit-animation: panel-skeleton 1.4s linear infinite;
    animation: panel-skeleton 1.4s linear infinite;
  }

.panel-item.is-loading .panel-item-subtitle::after {
    content: '';
    position: absolute;
    inset: 0;
    background: var(--bg-list-item-skeleton-shimmer);
    -webkit-animation: panel-skeleton 1.4s linear infinite;
    animation: panel-skeleton 1.4s linear infinite;
  }

.panel-item.is-loading .panel-item-leading::after {
    content: '';
    position: absolute;
    inset: 0;
    background: var(--bg-list-item-skeleton-shimmer);
    -webkit-animation: panel-skeleton 1.4s linear infinite;
    animation: panel-skeleton 1.4s linear infinite;
  }

.panel-item.is-loading .panel-item-trailing::after {
    content: '';
    position: absolute;
    inset: 0;
    background: var(--bg-list-item-skeleton-shimmer);
    -webkit-animation: panel-skeleton 1.4s linear infinite;
    animation: panel-skeleton 1.4s linear infinite;
  }

@media (prefers-reduced-motion: reduce) {
    .panel-item.is-loading .panel-item-title::after {
      -webkit-animation: none;
      animation: none;
    }
    .panel-item.is-loading .panel-item-subtitle::after {
      -webkit-animation: none;
      animation: none;
    }
  }

/* ============================================================
   * Drag & drop
   * ============================================================ */

.panel-item.is-dragging {
    opacity: 0.55;
    -webkit-box-shadow: 0 6px 18px oklch(0% 0 0 / 0.16);
    box-shadow: 0 6px 18px oklch(0% 0 0 / 0.16);
  }

.panel-item.is-ghost {
    border: 2px dashed var(--border-info);
    background-color: var(--bg-info-subtle);
    border-radius: 6px;
  }

.panel-item.is-drop-target {
    -webkit-box-shadow: inset 0 -2px 0 0 var(--border-info);
    box-shadow: inset 0 -2px 0 0 var(--border-info);
  }

.panel-item.is-drop-target-above {
    -webkit-box-shadow: inset 0 2px 0 0 var(--border-info);
    box-shadow: inset 0 2px 0 0 var(--border-info);
  }

/* ============================================================
   * Intent items
   * ============================================================ */

/* DS-ROW-DIVIDER-STATUS (Isabella, docs/ds-row-divider-status-ruling.md) — a row that
     paints a status tint takes its DIVIDER from the same family, never from the neutral
     --border-list-divider. Routing only: the --bg-X-subtle → --border-X-subtle pairing
     already exists for every status in both themes, so no token is added.
     Rendered evidence for this component specifically: .panel-item.item-success measured
     #f5f5f5 on #dbfce7 = 1.009:1 and .item-warning #f5f5f5 on #fef9c2 = 1.015:1 — both
     below the 1.02 invisible band, on the neutral divider the tint was never told about. */

.panel-item.item-success {
    background-color: var(--bg-list-item-success, var(--bg-success-subtle));
    border-color: var(--border-success-subtle);
  }

.panel-item.item-warning {
    background-color: var(--bg-list-item-warning, var(--bg-warning-subtle));
    border-color: var(--border-warning-subtle);
  }

.panel-item.item-danger {
    background-color: var(--bg-list-item-danger, var(--bg-danger-subtle));
    border-color: var(--border-danger-subtle);
  }

.panel-item.item-info {
    background-color: var(--bg-list-item-info, var(--bg-info-subtle));
    border-color: var(--border-info-subtle);
  }

/* ============================================================
   * High contrast / reduced motion
   * ============================================================ */

[data-contrast='high'] .panel-item {
    border-bottom-color: var(--text-list-item-meta);
  }

[data-contrast='high'] .panel-item:focus-visible {
    outline: 2px solid var(--focus-ring); outline-offset: 2px;
  }

@media (prefers-reduced-motion: reduce) {

.panel-item {
    -webkit-transition: none;
    transition: none
}
  }

/* Active / current */

.active.panel-item {
    background-color: var(--bg-list-item-active, var(--bg-secondary));
  }

/* Active indicator bar (opt-in via .list-indicator OR .panel-list--indicator) */

.panel-list.list-indicator .active.panel-item::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: var(--size-list-indicator, 3px);
    background-color: var(--bg-list-indicator, var(--border-focus));
    border-radius: 0 2px 2px 0;
  }

.panel-list--indicator .active.panel-item::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: var(--size-list-indicator, 3px);
    background-color: var(--bg-list-indicator, var(--border-focus));
    border-radius: 0 2px 2px 0;
  }

.panel-list--cards .active.panel-item {
    -webkit-box-shadow: var(--shadow-list-card-active);
    box-shadow: var(--shadow-list-card-active);
  }

/* Selection (single-select highlight) */

.selected.panel-item {
    background-color: var(--bg-list-item-selected, var(--color-brand-50, oklch(97.9% 0.021 166)));
  }

/* Multi-select with checkbox */

.is-multi-selected.panel-item {
    background-color: var(--bg-list-item-selected, var(--color-brand-50, oklch(97.9% 0.021 166)));
  }

/* Active indicator bar (opt-in via .list-indicator OR .panel-list--indicator) */

.list-indicator.panel-list .panel-item.active::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: var(--size-list-indicator, 3px);
    background-color: var(--bg-list-indicator, var(--border-focus));
    border-radius: 0 2px 2px 0;
  }

.list-indicator .panel-list .panel-item[aria-current='true']::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: var(--size-list-indicator, 3px);
    background-color: var(--bg-list-indicator, var(--border-focus));
    border-radius: 0 2px 2px 0;
  }

.panel-list--indicator .panel-item.active::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: var(--size-list-indicator, 3px);
    background-color: var(--bg-list-indicator, var(--border-focus));
    border-radius: 0 2px 2px 0;
  }

.panel-list--indicator .panel-item[aria-current='true']::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: var(--size-list-indicator, 3px);
    background-color: var(--bg-list-indicator, var(--border-focus));
    border-radius: 0 2px 2px 0;
  }

/* Per-item intent indicators */

.panel-item--with-indicator.item-success::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 3px;
  }

.panel-item--with-indicator.item-warning::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 3px;
  }

.panel-item--with-indicator.item-danger::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 3px;
  }

.panel-item--with-indicator.item-info::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 3px;
  }

.panel-item--with-indicator.item-success::before {
    background-color: var(--bg-list-indicator-success);
  }

.panel-item--with-indicator.item-warning::before {
    background-color: var(--bg-list-indicator-warning);
  }

.panel-item--with-indicator.item-danger::before {
    background-color: var(--bg-list-indicator-danger);
  }

.panel-item--with-indicator.item-info::before {
    background-color: var(--bg-list-indicator-info);
  }

/* Per-item intent indicators */

.item-success.panel-item--with-indicator::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 3px;
    background-color: var(--bg-list-indicator-success);
  }

/* ============================================================
   * Intent items
   * ============================================================ */

.item-success.panel-item {
    background-color: var(--bg-list-item-success, var(--bg-success-subtle));
  }

.item-warning .panel-item--with-indicator::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 3px;
  }

.item-warning.panel-item--with-indicator::before {
    background-color: var(--bg-list-indicator-warning);
  }

.item-warning.panel-item {
    background-color: var(--bg-list-item-warning, var(--bg-warning-subtle));
  }

.item-danger .panel-item--with-indicator::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 3px;
  }

.item-danger.panel-item--with-indicator::before {
    background-color: var(--bg-list-indicator-danger);
  }

.item-danger.panel-item {
    background-color: var(--bg-list-item-danger, var(--bg-danger-subtle));
  }

.item-info .panel-item--with-indicator::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 3px;
  }

.item-info.panel-item--with-indicator::before {
    background-color: var(--bg-list-indicator-info);
  }

.item-info.panel-item {
    background-color: var(--bg-list-item-info, var(--bg-info-subtle));
  }

/* Disabled */

.is-disabled.panel-item {
    cursor: default;
    opacity: var(--opacity-list-item-disabled, 0.6);
    color: var(--text-list-item-disabled, var(--text-disabled));
    background-color: var(--bg-list-item-disabled, var(--bg-primary-subtle));
  }

.is-disabled.panel-item * {
    pointer-events: none;
  }

.panel-item-row {
  /* ============================================================
   * Slots
   * ============================================================ */
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  min-width: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.75rem;
}

.panel-item-checkbox {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}

.panel-list--selectable .panel-item-checkbox {
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
  }

.panel-list--selectable .panel-item-checkbox input[type='checkbox'] {
    width: 16px;
    height: 16px;
  }

.panel-item-handle {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  cursor: -webkit-grab;
  cursor: grab;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  width: 18px;
  height: 18px;
  color: var(--text-list-handle);
  opacity: 0;
  -webkit-transition:
    opacity 120ms ease,
    color 120ms ease;
  transition:
    opacity 120ms ease,
    color 120ms ease;
}

.panel-list--sortable .panel-item:hover .panel-item-handle {
    opacity: 1;
  }

.panel-list--sortable .panel-item:focus-within .panel-item-handle {
    opacity: 1;
  }

.panel-item-handle:hover {
    color: var(--text-list-handle-hover);
  }

.panel-item-handle:active {
    cursor: -webkit-grabbing;
    cursor: grabbing;
  }

.panel-item-handle::before {
    content: '\f58e'; /* fa-grip-dots-vertical */
    font-family:
      'Font Awesome 7 Pro', 'Font Awesome 6 Pro', 'Font Awesome 6 Free';
    font-weight: 300;
    font-size: 12px;
  }

.panel-list--sortable .panel-item:hover .panel-item-handle {
    opacity: 1;
  }

.panel-list--sortable .panel-item:focus-within .panel-item-handle {
    opacity: 1;
  }

.panel-item-leading {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  color: var(--text-list-item-leading, var(--text-tertiary));
}

.panel-item.is-loading .panel-item-leading {
    color: transparent !important;
    background-color: var(--bg-list-item-skeleton);
    position: relative;
    overflow: hidden;
    width: 24px;
    height: 24px;
    border-radius: 999px;
  }

.panel-item.is-loading .panel-item-leading::after {
    content: '';
    position: absolute;
    inset: 0;
    background: var(--bg-list-item-skeleton-shimmer);
    -webkit-animation: panel-skeleton 1.4s linear infinite;
    animation: panel-skeleton 1.4s linear infinite;
  }

.panel-item-content {
  min-width: 0;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
}

.panel-item-trailing {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;
  color: var(--text-list-item-trailing, var(--text-tertiary));
}

/* Kbd hint inside trailing */

.panel-item-trailing kbd {
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    padding: 1px 5px;
    border-radius: 4px;
    font-family: 'Space Mono', monospace;
    font-size: 10px;
    color: var(--text-list-item-kbd);
    background-color: var(--bg-list-item-kbd);
    border: 1px solid var(--border-list-item-kbd);
    -webkit-box-shadow: 0 1px 0 var(--border-list-item-kbd);
    box-shadow: 0 1px 0 var(--border-list-item-kbd);
    line-height: 1;
  }

.panel-item-trailing .kbd {
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    padding: 1px 5px;
    border-radius: 4px;
    font-family: 'Space Mono', monospace;
    font-size: 10px;
    color: var(--text-list-item-kbd);
    background-color: var(--bg-list-item-kbd);
    border: 1px solid var(--border-list-item-kbd);
    -webkit-box-shadow: 0 1px 0 var(--border-list-item-kbd);
    box-shadow: 0 1px 0 var(--border-list-item-kbd);
    line-height: 1;
  }

/* Trailing chevron — affordance for "click to drill down" */

.panel-item-trailing .panel-item__chevron {
    width: 14px;
    height: 14px;
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
    color: var(--text-list-item-leading, var(--text-tertiary));
    -webkit-transition:
      color 160ms ease,
      -webkit-transform 160ms ease;
    transition:
      color 160ms ease,
      -webkit-transform 160ms ease;
    transition:
      transform 160ms ease,
      color 160ms ease;
    transition:
      transform 160ms ease,
      color 160ms ease,
      -webkit-transform 160ms ease;
  }

.panel-item.is-loading .panel-item-trailing {
    color: transparent !important;
    background-color: var(--bg-list-item-skeleton);
    position: relative;
    overflow: hidden;
    width: 24px;
    height: 24px;
    border-radius: 999px;
  }

.panel-item.is-loading .panel-item-trailing::after {
    content: '';
    position: absolute;
    inset: 0;
    background: var(--bg-list-item-skeleton-shimmer);
    -webkit-animation: panel-skeleton 1.4s linear infinite;
    animation: panel-skeleton 1.4s linear infinite;
  }

.panel-item-title {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  --tw-font-weight: 500;
  font-weight: 500;
  color: var(--text-list-item-title, var(--text-primary));
}

.panel-item.is-loading .panel-item-title {
    color: transparent !important;
    background-color: var(--bg-list-item-skeleton);
    border-radius: 4px;
    position: relative;
    overflow: hidden;
    width: 60%;
    height: 12px;
  }

.panel-item.is-loading .panel-item-title::after {
    content: '';
    position: absolute;
    inset: 0;
    background: var(--bg-list-item-skeleton-shimmer);
    -webkit-animation: panel-skeleton 1.4s linear infinite;
    animation: panel-skeleton 1.4s linear infinite;
  }

@media (prefers-reduced-motion: reduce) {
    .panel-item.is-loading .panel-item-title::after {
      -webkit-animation: none;
      animation: none;
    }
  }

.panel-item-subtitle {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  color: var(--text-list-item-subtitle, var(--text-tertiary));
}

.panel-item.is-loading .panel-item-subtitle {
    color: transparent !important;
    background-color: var(--bg-list-item-skeleton);
    border-radius: 4px;
    position: relative;
    overflow: hidden;
    width: 40%;
    height: 10px;
    margin-top: 6px;
  }

.panel-item.is-loading .panel-item-subtitle::after {
    content: '';
    position: absolute;
    inset: 0;
    background: var(--bg-list-item-skeleton-shimmer);
    -webkit-animation: panel-skeleton 1.4s linear infinite;
    animation: panel-skeleton 1.4s linear infinite;
  }

@media (prefers-reduced-motion: reduce) {
    .panel-item.is-loading .panel-item-subtitle::after {
      -webkit-animation: none;
      animation: none;
    }
  }

.panel-item-meta {
  margin-top: 0.125rem;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  font-family: 'Space Mono', monospace;
  color: var(--text-list-item-meta, var(--text-list-item-subtitle));
}

.panel-item-meta > * + *::before {
    content: '·';
    margin-right: 6px;
    opacity: 0.6;
  }

.panel-item-description {
  /* Description — multi-line block below the row */
  margin-top: 0.25rem;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  color: var(--text-list-item-description, var(--text-list-item-subtitle));
  line-height: 1.5;
}

.panel-item-description--clamp {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.panel-item-detail {
  /* Detail block (revealed by .is-expanded) */
  margin-top: 0.5rem;
  display: none;
  padding-top: 0.75rem;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  color: var(--text-list-item-subtitle);
  border-top: 1px dashed var(--border-list-divider);
}

.panel-item.is-expanded .panel-item-detail {
    display: block;
  }

.is-expanded.panel-item .panel-item-detail {
    display: block;
  }

.is-expanded.panel-item .panel-item__expand-trigger::after {
    -webkit-transform: rotate(180deg);
    -ms-transform: rotate(180deg);
    transform: rotate(180deg);
  }

.panel-item-detail__toolbar {
  margin-top: 0.5rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
  gap: 0.25rem;
}

.panel-item__expand-trigger {
  /* Expand chevron */
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

.panel-item__expand-trigger::after {
    content: '\f078'; /* fa-chevron-down */
    font-family: 'Font Awesome 7 Pro', 'Font Awesome 6 Pro';
    font-weight: 300;
    font-size: 10px;
    color: var(--text-quaternary, var(--text-tertiary));
    -webkit-transition: -webkit-transform 160ms ease;
    transition: -webkit-transform 160ms ease;
    transition: transform 160ms ease;
    transition: transform 160ms ease, -webkit-transform 160ms ease;
  }

.panel-item.is-expanded .panel-item__expand-trigger::after {
    -webkit-transform: rotate(180deg);
    -ms-transform: rotate(180deg);
    transform: rotate(180deg);
  }

@media (prefers-reduced-motion: reduce) {
    .panel-item__expand-trigger::after {
      -webkit-transition: none;
      transition: none;
    }
  }

.panel-item-trailing .kbd {
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    padding: 1px 5px;
    border-radius: 4px;
    font-family: 'Space Mono', monospace;
    font-size: 10px;
    color: var(--text-list-item-kbd);
    background-color: var(--bg-list-item-kbd);
    border: 1px solid var(--border-list-item-kbd);
    -webkit-box-shadow: 0 1px 0 var(--border-list-item-kbd);
    box-shadow: 0 1px 0 var(--border-list-item-kbd);
    line-height: 1;
  }

/* Trailing chevron — affordance for "click to drill down" */

.panel-item-trailing .panel-item__chevron {
    width: 14px;
    height: 14px;
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
    color: var(--text-list-item-leading, var(--text-tertiary));
    -webkit-transition:
      color 160ms ease,
      -webkit-transform 160ms ease;
    transition:
      color 160ms ease,
      -webkit-transform 160ms ease;
    transition:
      transform 160ms ease,
      color 160ms ease;
    transition:
      transform 160ms ease,
      color 160ms ease,
      -webkit-transform 160ms ease;
  }

.panel-item:hover .panel-item__chevron {
    -webkit-transform: translateX(2px);
    -ms-transform: translateX(2px);
    transform: translateX(2px);
    color: var(--text-list-item-title);
  }

@media (prefers-reduced-motion: reduce) {

.panel-item__chevron {
    -webkit-transition: none;
    transition: none
}
  }

/* ============================================================
   * Density variants — backwards compatible names
   * ============================================================ */

.list-compact.panel-list {
    --pl-pad-y: var(--space-list-item-y-compact, 0.375rem);
  }

.list-relaxed.panel-list {
    --pl-pad-y: var(--space-list-item-y-relaxed, 0.75rem);
  }

/* New size scale */

.list-xs.panel-list {
    --pl-pad-y: var(--space-list-item-y-xs, 0.25rem);
  }

.list-xs .panel-item {
    --pl-pad-y: var(--space-list-item-y-xs, 0.25rem);
  }

.list-sm.panel-list {
    --pl-pad-y: var(--space-list-item-y-sm, 0.375rem);
  }

.list-sm .panel-item {
    --pl-pad-y: var(--space-list-item-y-sm, 0.375rem);
  }

.list-md.panel-list {
    --pl-pad-y: var(--space-list-item-y-md, 0.5rem);
  }

.list-md .panel-item {
    --pl-pad-y: var(--space-list-item-y-md, 0.5rem);
  }

.list-lg.panel-list {
    --pl-pad-y: var(--space-list-item-y-lg, 0.75rem);
  }

.list-lg .panel-item {
    --pl-pad-y: var(--space-list-item-y-lg, 0.75rem);
  }

.list-xl.panel-list {
    --pl-pad-y: var(--space-list-item-y-xl, 1rem);
  }

.list-xl .panel-item {
    --pl-pad-y: var(--space-list-item-y-xl, 1rem);
  }

/* ============================================================
   * Divider variants
   * ============================================================ */

.list-borderless.panel-list {
    border-color: var(--alpha-0);
    background-color: transparent;
  }

.list-borderless.panel-list .panel-item {
    border-color: var(--alpha-0);
  }

.panel-list--quiet {
  border-color: var(--alpha-0);
  background-color: transparent;
}

.panel-list--quiet .panel-item {
    border-color: var(--alpha-0);
  }

.list-inset-dividers.panel-list {
    /* same behavior, new alias */
  }

.list-inset-dividers.panel-list .panel-item {
    border-bottom-color: var(--alpha-0);
  }

.list-inset-dividers.panel-list .panel-item::after {
    content: '';
    position: absolute;
    left: var(--space-list-inset, 3rem);
    right: 0;
    bottom: 0;
    height: 1px;
    background-color: var(--border-list-divider, var(--border-primary-subtle));
  }

.list-inset-dividers.panel-list .panel-item:last-child::after {
    display: none;
  }

/* same behavior, new alias */

.panel-list--inset-dividers .panel-item {
    border-bottom-color: var(--alpha-0);
  }

.panel-list--inset-dividers .panel-item::after {
    content: '';
    position: absolute;
    left: var(--space-list-inset, 3rem);
    right: 0;
    bottom: 0;
    height: 1px;
    background-color: var(--border-list-divider, var(--border-primary-subtle));
  }

.panel-list--inset-dividers .panel-item:last-child::after {
    display: none;
  }

.panel-list--flush {
  /* ============================================================
   * Layout variants
   * ============================================================ */

  /* Flush — sits inside another container (panels, drawers) */
  border: 0;
  border-radius: 0;
  background-color: transparent;
}

.panel-list--cards {
  /* Cards — each item is its own card */
  background-color: transparent;
  border: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 8px;
}

.panel-list--cards .panel-item {
    border: 1px solid var(--border-list-card);
    border-radius: var(--radius-lg, 0.5rem);
    background-color: var(--bg-list-card);
    -webkit-box-shadow: var(--shadow-list-card);
    box-shadow: var(--shadow-list-card);
    -webkit-transition:
      -webkit-box-shadow 160ms ease,
      -webkit-transform 160ms ease;
    transition:
      -webkit-box-shadow 160ms ease,
      -webkit-transform 160ms ease;
    transition:
      box-shadow 160ms ease,
      transform 160ms ease;
    transition:
      box-shadow 160ms ease,
      transform 160ms ease,
      -webkit-box-shadow 160ms ease,
      -webkit-transform 160ms ease;
  }

.panel-list--cards .panel-item:hover {
    -webkit-box-shadow: var(--shadow-list-card-hover);
    box-shadow: var(--shadow-list-card-hover);
  }

.panel-list--cards .panel-item.active {
    -webkit-box-shadow: var(--shadow-list-card-active);
    box-shadow: var(--shadow-list-card-active);
  }

.panel-list--cards .panel-item[aria-current='true'] {
    -webkit-box-shadow: var(--shadow-list-card-active);
    box-shadow: var(--shadow-list-card-active);
  }

.panel-list--ladder {
  /* Ladder — no fills, only borders. Reads as a stripped-down feed. */
  background-color: transparent;
  border: 0;
}

.panel-list--ladder .panel-item {
    background-color: transparent;
    border-bottom: 1px solid var(--border-list-divider);
  }

.panel-list--ladder .panel-item:last-child {
    border-bottom: 0;
  }

.panel-list--ladder .panel-item:hover {
    background-color: transparent;
    -webkit-box-shadow: inset 3px 0 0 var(--border-list-divider);
    box-shadow: inset 3px 0 0 var(--border-list-divider);
  }

/* Sectioned — sticky section headers + rule between groups */

.panel-list--sectioned > .panel-list-header {
    position: sticky;
    top: 0;
    z-index: 2;
  }

.panel-list--sectioned > .panel-list-subheader {
    position: sticky;
    top: 0;
    z-index: 2;
  }

.panel-list--sectioned .panel-list__section + .panel-list__section {
    border-top: 1px solid var(--border-list-divider);
  }

.panel-list--two-column {
  /* Two-column grid */
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0;
}

.panel-list--two-column .panel-item:nth-child(odd) {
    border-right: 1px solid var(--border-list-divider);
  }

@media (max-width: 640px) {

.panel-list--two-column {
    grid-template-columns: 1fr
}
    .panel-list--two-column .panel-item:nth-child(odd) {
      border-right: 0;
    }
  }

.panel-list--virtual {
  /* Virtual — assume virtual scroller; remove borders that would be wrong on absolute-positioned rows */
  background-color: transparent;
  border: 0;
}

.panel-list--virtual .panel-item {
    border-bottom: 0;
  }

/* ============================================================
   * Behaviour modifiers
   * ============================================================ */

.panel-list--clickable .panel-item {
    cursor: pointer;
  }

.panel-list--selectable .panel-item-checkbox {
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
  }

.panel-list--selectable .panel-item-checkbox input[type='checkbox'] {
    width: 16px;
    height: 16px;
  }

/* ============================================================
   * States
   * ============================================================ */

/* New-item flash */

.is-new.panel-item {
    -webkit-animation: panel-item-flash 1.6s ease-out 1;
    animation: panel-item-flash 1.6s ease-out 1;
  }

@media (prefers-reduced-motion: reduce) {
    .is-new.panel-item {
      -webkit-animation: none;
      animation: none;
    }
  }

.panel-item--skeleton {
  /* Loading skeleton */
  pointer-events: none;
}

.is-loading .panel-item {
    pointer-events: none;
  }

.is-loading.panel-item .panel-item-title {
    color: transparent !important;
    background-color: var(--bg-list-item-skeleton);
    border-radius: 4px;
    position: relative;
    overflow: hidden;
    height: 10px;
  }

.is-loading .panel-item .panel-item-subtitle {
    color: transparent !important;
    background-color: var(--bg-list-item-skeleton);
    border-radius: 4px;
    position: relative;
    overflow: hidden;
    height: 10px;
  }

.is-loading .panel-item .panel-item-leading {
    color: transparent !important;
    background-color: var(--bg-list-item-skeleton);
    border-radius: 4px;
    position: relative;
    overflow: hidden;
    height: 10px;
  }

.is-loading .panel-item .panel-item-trailing {
    color: transparent !important;
    background-color: var(--bg-list-item-skeleton);
    border-radius: 4px;
    position: relative;
    overflow: hidden;
    height: 10px;
  }

.is-loading.panel-item .panel-item-title {
    width: 60%;
    height: 12px;
  }

.is-loading.panel-item .panel-item-subtitle {
    width: 40%;
    height: 10px;
    margin-top: 6px;
  }

.is-loading.panel-item .panel-item-leading {
    width: 24px;
    height: 24px;
    border-radius: 999px;
  }

.is-loading .panel-item .panel-item-trailing {
    width: 24px;
    height: 24px;
    border-radius: 999px;
  }

.is-loading.panel-item .panel-item-title::after {
    content: '';
    position: absolute;
    inset: 0;
    background: var(--bg-list-item-skeleton-shimmer);
    -webkit-animation: panel-skeleton 1.4s linear infinite;
    animation: panel-skeleton 1.4s linear infinite;
  }

.is-loading .panel-item .panel-item-subtitle::after {
    content: '';
    position: absolute;
    inset: 0;
    background: var(--bg-list-item-skeleton-shimmer);
    -webkit-animation: panel-skeleton 1.4s linear infinite;
    animation: panel-skeleton 1.4s linear infinite;
  }

.is-loading .panel-item .panel-item-leading::after {
    content: '';
    position: absolute;
    inset: 0;
    background: var(--bg-list-item-skeleton-shimmer);
    -webkit-animation: panel-skeleton 1.4s linear infinite;
    animation: panel-skeleton 1.4s linear infinite;
  }

.is-loading .panel-item .panel-item-trailing::after {
    content: '';
    position: absolute;
    inset: 0;
    background: var(--bg-list-item-skeleton-shimmer);
    -webkit-animation: panel-skeleton 1.4s linear infinite;
    animation: panel-skeleton 1.4s linear infinite;
  }

@media (prefers-reduced-motion: reduce) {
    .is-loading.panel-item .panel-item-title::after {
      -webkit-animation: none;
      animation: none;
    }
    .is-loading .panel-item .panel-item-subtitle::after {
      -webkit-animation: none;
      animation: none;
    }
  }

/* ============================================================
   * Drag & drop
   * ============================================================ */

.is-dragging.panel-item {
    opacity: 0.55;
    -webkit-box-shadow: 0 6px 18px oklch(0% 0 0 / 0.16);
    box-shadow: 0 6px 18px oklch(0% 0 0 / 0.16);
  }

.is-ghost.panel-item {
    border: 2px dashed var(--border-info);
    background-color: var(--bg-info-subtle);
    border-radius: 6px;
  }

.is-drop-target.panel-item {
    -webkit-box-shadow: inset 0 -2px 0 0 var(--border-info);
    box-shadow: inset 0 -2px 0 0 var(--border-info);
  }

.is-drop-target-above.panel-item {
    -webkit-box-shadow: inset 0 2px 0 0 var(--border-info);
    box-shadow: inset 0 2px 0 0 var(--border-info);
  }

/* ==========================================================================
 * Component: List Group (.panel-list / .panel-item)
 *
 * The HawkDesign row-list component. Used for navigation rails, settings menus,
 * notification feeds, conversation lists, file browsers, audit logs, and
 * any other dense vertical row layout. Powered by a small JS helper for
 * keyboard nav, multi-select, sort, and expand behaviours.
 *
 * Anatomy:
 *   .panel-list
 *     .panel-list-header                section title (sticky-friendly)
 *     .panel-list-subheader             secondary divider
 *     .panel-list-empty                 empty state
 *     .panel-item
 *       .panel-item-row                 flex row holding the slots
 *         .panel-item-checkbox          multi-select checkbox slot
 *         .panel-item-handle            drag handle (visible on .panel-list--sortable)
 *         .panel-item-leading           icon / avatar / status dot
 *         .panel-item-content
 *           .panel-item-title
 *           .panel-item-subtitle
 *           .panel-item-meta            tertiary inline facts (mono)
 *         .panel-item-trailing          badge / chevron / button / kbd
 *       .panel-item-description         multi-line text below the row
 *       .panel-item-detail              collapsible region (is-expanded reveals)
 *
 * Container variants:
 *   default                  bordered card surface
 *   .panel-list--flush       no outer border + no radius (sit flush in panels)
 *   .panel-list--cards       each item is its own card (gap between items)
 *   .panel-list--ladder      line-only items, no fill, used for dense feeds
 *   .panel-list--inset-dividers   dividers indented to align with content
 *   .panel-list--sectioned   multi-section with sticky headers + divider rule
 *   .panel-list--two-column  responsive 2-column grid
 *   .panel-list--virtual     no item borders (assumes a virtual scroller draws them)
 *   .panel-list--quiet       transparent surface, no border (in-place lists)
 *
 * Behaviour modifiers:
 *   .panel-list--clickable   marks every item as clickable
 *   .panel-list--selectable  enables aria-selected + multi-select checkbox column
 *   .panel-list--sortable    reveals drag handles + enables JS sort
 *   .panel-list--searchable  CSS for the search input slot
 *   .panel-list--indicator   show the active left-edge bar
 *   .no-hover                opt out of hover background
 *
 * Sizes (on the container or individual items):
 *   .list-xs   .list-sm   .list-md (default)   .list-lg   .list-xl
 *
 * Item states (on .panel-item):
 *   .active / [aria-current="true"]         currently active
 *   .selected / [aria-selected="true"]      selection highlight (info bg)
 *   .is-multi-selected                      checkbox-style selection
 *   .is-expanded                            expandable item revealed
 *   .is-dragging                            being dragged
 *   .is-ghost                               drop placeholder
 *   .is-drop-target / .is-drop-target-above drop indicator
 *   .is-new                                 brief flash for newly added items
 *   .is-loading                             skeleton shimmer
 *   .is-disabled / [aria-disabled="true"]
 *   .item-success / .item-warning / .item-danger / .item-info
 *   .panel-item--with-indicator             show coloured left edge (intent state)
 *   .panel-item--with-thumb                 wider leading slot for thumbnails
 *
 * Backwards-compat: every previous class, attribute, and modifier is preserved.
 * ========================================================================== */   /* tq-9030 (A141): THE list group, imported in place (converged under A143's ratchet; the app copy is gone) */
/* ========================================
   Component: Pagination
   ======================================== */

.pagination {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}

.collapse.show.pagination {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .pagination {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.pagination.items-baseline { margin-bottom: 10px; }

html.is-mobile .pagination:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .pagination.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.pagination[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .pagination.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .pagination.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .pagination.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .pagination.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .pagination.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.pager {
  position: relative;
  z-index: 0;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  border-radius: 0.375rem;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.pager[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

.pager {
  gap: 2px;
}

.page-item {
  position: relative;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 0.375rem;
  font-size: 0.75rem;
  line-height: 1rem;
  font-weight: 500;
  -webkit-transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  -webkit-transition-duration: 100ms;
  transition-duration: 100ms;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.page-item[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

.page-item {
  min-width: 28px;
  height: 28px;
  padding: 0 6px;
  color: var(--text-secondary);
  background-color: transparent;
  cursor: pointer;
}

.page-item:hover {
  background-color: var(--bg-primary-hover);
  color: var(--text-primary);
}

.page-item:focus-visible {
  outline: 2px solid transparent;
  outline-offset: 2px;
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-offset-width: 1px;
  ring-color: var(--border-info);
}

.page-item.active {
  background-color: var(--bg-primary-solid);
  color: var(--alpha-white-100);
}

.page-item.disabled {
  pointer-events: none;
  cursor: not-allowed;
  opacity: 0.4;
}

/* Ellipsis */

/* Info text */

/* Per-page selector */
/* ==========================================================================
   TABLE CONTAINER
   ========================================================================== */
.table-container {
  position: relative;
  width: 100%;
  overflow: hidden;
  border-radius: 0.375rem;
  border-width: 1px;
  background-color: var(--bg-table, var(--alpha-white-100));
  border-color: var(--border-table-container, var(--border-primary));
  border-radius: var(--radius-table, 0.375rem);
}

/* Scroll region (recommended place for fixed height + sticky header/footer) */


/* ==========================================================================
   BASE TABLE
   ========================================================================== */
.table {
  margin-top: 0px;
  margin-bottom: 0px;
  width: 100%;
  min-width: 100%;
  border-collapse: separate;
  --tw-border-spacing-x: 0px;
  --tw-border-spacing-y: 0px;
  border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
  color: var(--text-table, var(--text-primary));
  background-color: var(--bg-table, var(--alpha-white-100));
}
  .table thead > tr > th {
  border-bottom-width: 1px;
  padding-left: 0.5rem;
  padding-right: 0.5rem;
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
  vertical-align: bottom;
  font-family: 'Manrope', sans-serif;
  font-size: 0.75rem;
  line-height: 1rem;
  font-weight: 500;
    background-color: var(--bg-table-header, var(--bg-primary));
    color: var(--text-table-header, var(--text-secondary));
    border-color: var(--border-table-header, var(--border-primary-alt));
    white-space: nowrap;
}

  .table tbody > tr > td {
  border-bottom-width: 1px;
  padding-left: 0.5rem;
  padding-right: 0.5rem;
  padding-top: 0.375rem;
  padding-bottom: 0.375rem;
  vertical-align: middle;
  font-size: 0.875rem;
  line-height: 1.5rem;
    color: var(--text-table, var(--text-primary));
    border-color: var(--border-table, var(--border-primary-subtle));
    background-color: transparent;
}

  .table tfoot > tr > td {
  padding-left: 0.5rem;
  padding-right: 0.5rem;
  padding-top: 0.375rem;
  padding-bottom: 0.375rem;
  vertical-align: middle;
  font-size: 0.875rem;
  line-height: 1.5rem;
    color: var(--text-table-footer, var(--text-secondary-alt));
    border-color: var(--border-table, var(--border-primary-subtle));
    background-color: var(--bg-table-footer, var(--bg-primary-subtle));
}

  .table :is(th, td):first-child {
  padding-left: 1rem;
}

  .table :is(th, td):last-child {
  padding-right: 1rem;
}


  /* ==========================================================================
   SORTABLE HEADER BUTTON BEHAVIOR
   - Hover and pressed styles like a button
   - Persistent active pressed style via .is-sorted
   ========================================================================== */
  .table thead > tr > th.sort:hover {
  cursor: pointer;
    background-color: var(--bg-table-header-hover, var(--bg-primary-hover));
}

  /* Pressed (mousedown) */
  .table thead > tr > th.sort:active {
    background-color: var(--bg-table-header-pressed, var(--bg-table-header-active, var(--bg-secondary)));
    -webkit-box-shadow: var(--shadow-table-header-pressed, inset 0 1px 0 rgba(0,0,0,.06));
    box-shadow: var(--shadow-table-header-pressed, inset 0 1px 0 rgba(0,0,0,.06));
  }

  /* Active / sorted (persistent pressed look) */
  .table thead > tr > th.is-sorted {
    background-color: var(--bg-table-header-active, var(--bg-secondary));
    color: var(--text-table-header-active, var(--text-primary));
    -webkit-box-shadow: var(--shadow-table-header-active, var(--shadow-table-header-pressed, inset 0 1px 0 rgba(0,0,0,.06)));
    box-shadow: var(--shadow-table-header-active, var(--shadow-table-header-pressed, inset 0 1px 0 rgba(0,0,0,.06)));
  }

  /* ==========================================================================
   SORT DIRECTION INDICATORS
   - .sorting_asc   ascending (up arrow)
   - .sorting_desc  descending (down arrow)
   ========================================================================== */
  .table thead > tr > th.sorting_asc {
    position: relative;
    padding-right: calc(1rem + 1rem);
    background-color: var(--bg-table-header-active, var(--bg-secondary));
    color: var(--text-table-header-active, var(--text-primary));
  }

  .table thead > tr > th.sorting_asc::after {
    display: inline-block;
    position: absolute;
    right: 0.75rem;
    top: 50%;
    -webkit-transform: translateY(-50%);
    -ms-transform: translateY(-50%);
    transform: translateY(-50%);
    font-family: "Font Awesome 7 Pro";
    font-style: normal;
    font-weight: 300;
    font-size: 0.65rem;
    line-height: 1;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    color: var(--text-table-sort, currentColor);
    content: "\f0de"; /* fa-sort-up */
  }


  /* ==========================================================================
   SPACING SCALE
   ========================================================================== */


  /* ==========================================================================
   ROW STATES / VARIANTS
   ========================================================================== */

  /* Row hover ON by default (unless table.no-hover) */
  .table:not(.no-hover) tbody > tr:hover {
    background-color: var(--bg-table-row-hover, var(--bg-primary-subtle));
  }

  /* Backwards-compatible alias if you still use .table-hover anywhere */

  /* Disable hover on table */
  .table.no-hover tbody > tr:hover {
    background-color: transparent;
  }

  /* Disable hover on rows containing an empty state */
  .table tbody > tr:has(.empty-state):hover {
    background-color: transparent;
  }

  /* Disable hover for specific cells (opt-out at td/th level) */
  .table:not(.no-hover) tbody > tr:hover > :is(td, th).no-hover {
    background-color: var(--bg-table-cell-no-hover, var(--bg-table, var(--alpha-white-100)));
  }

  /* Zebra */

  /* Selected */
  .table tbody > tr.selected,
  .table tbody > tr[aria-selected="true"] {
    background-color: var(--bg-table-row-selected, var(--bg-info-subtle));
  }

  /* Active row (clickable tables, current row, etc.) */
  .table > tbody tr[aria-current="true"] {
    background-color: var(--bg-table-row-active, var(--bg-primary));
    color: var(--text-table-active, var(--text-primary));
  }

  /* Borderless */

  /* Disabled row */
  .table tbody > tr.is-disabled,
  .table tbody > tr[aria-disabled="true"] {
    background-color: var(--bg-table-row-disabled, var(--bg-primary-subtle));
    color: var(--text-table-disabled, var(--text-disabled));
  }

    .table tbody > tr.is-disabled :is(a, button, input, select, textarea),
    .table tbody > tr[aria-disabled="true"] :is(a, button, input, select, textarea) {
  pointer-events: none;
      opacity: 0.65;
}

  /* Intent rows */


  /* ==========================================================================
   ROW SWEEP — transient row-level feedback
   A translucent gradient passes left-to-right across the row, then fades.
   Triggered via JS: rowSweep(tr, 'success') / rowSweep.success(tr)
   ========================================================================== */

  /* Shared pseudo-element overlay for sweep effect */

  /* Active sweep — animates the gradient across */

  /* Variant colors — each sets a CSS var consumed by the keyframes */

  /* Fade-out after sweep completes */

  /* Keyframes */

  /* Reduced motion — show a brief static tint instead of sweep */


  /* ==========================================================================
   CELL MICRO-STATES (optional / opt-in)
   ========================================================================== */


  /* ==========================================================================
   CONTROL CELLS (SINGLE CLASS)
   - `.controls` ONLY on <td> that contains a control
   ========================================================================== */
  .table td.controls {
  padding-top: 2px;
  padding-bottom: 2px;
  padding-left: 1px;
  padding-right: 1px;
}
  /* First cell in row */
  .table tr > td.controls:first-child {
  padding-left: 1rem;
  padding-right: 1px;
}

  /* Last cell in row */
  .table tr > td.controls:last-child {
  padding-right: 1rem;
  padding-left: 1px;
}

  .table td.controls :is(.form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static, select.form-control) {
  width: 100%;
  border-radius: 0.125rem;
  padding-left: 0.375rem;
  padding-right: 0.375rem;
}

  .table td.controls .combobox__input {
  border-radius: 0.125rem;
}

  /* Editable controls */

  .table td.controls :is(.checkbox, .checkbox-soft, .checkbox-round, .radio, .radio-soft, .radio-ghost) {
  vertical-align: middle;
}

  .table td.controls .dropdown {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
}


  /* ==========================================================================
   STICKY HEADER / FOOTER
   - Works when the scroll container is the table's ancestor:
     e.g. .table-scroll { overflow:auto; height: ... }
   - FIX: avoid “double border” by removing th border-bottom when sticky
   ========================================================================== */
  .table.table-sticky-header thead,
  .table thead.sticky-top {
  position: sticky;
  top: 0px;
  z-index: 20;
}

  /* Ensure sticky area paints correct background */
  .table thead.sticky-top,
  .table.table-sticky-header thead {
    background-color: var(--bg-table-header-sticky, var(--bg-table-header, var(--bg-primary)));
  }

    .table thead.sticky-top > tr > th,
    .table.table-sticky-header thead > tr > th {
  position: sticky;
  top: 0px;
  z-index: 20;
      background-color: var(--bg-table-header-sticky, var(--bg-table-header, var(--bg-primary)));
      /* KEY FIX: remove border so it doesn't stack with the shadow separator */
      border-bottom-color: var(--alpha-0);
}

    /* Single separator line via shadow */
    .table.table-sticky-header thead > tr > th,
    .table thead.sticky-top > tr > th {
      -webkit-box-shadow: var(--shadow-table-sticky-header, inset 0 -1px 0 var(--border-table-header, var(--border-primary-alt)));
      box-shadow: var(--shadow-table-sticky-header, inset 0 -1px 0 var(--border-table-header, var(--border-primary-alt)));
    }


/* ==========================================================================
   ROUNDED CORNERS (only when wrapped in .table-container)
   - Top corners: first/last TH in first thead row
   - Bottom corners:
     - If tfoot exists: first/last TD in last tfoot row
     - Else: first/last TD in last tbody row
   ========================================================================== */

/* Top corners */
.table-container .table thead > tr:first-child > th:first-child {
  border-top-left-radius: var(--radius-table, 0.375rem);
}

.table-container .table thead > tr:first-child > th:last-child {
  border-top-right-radius: var(--radius-table, 0.375rem);
}

/* Sticky header: keep radius on sticky header cells */
.table-container .table.table-sticky-header thead > tr:first-child > th:first-child,
.table-container .table thead.sticky-top > tr:first-child > th:first-child {
  border-top-left-radius: var(--radius-table, 0.375rem);
}

.table-container .table.table-sticky-header thead > tr:first-child > th:last-child,
.table-container .table thead.sticky-top > tr:first-child > th:last-child {
  border-top-right-radius: var(--radius-table, 0.375rem);
}

/* Bottom corners (tbody by default) */
.table-container .table tbody > tr:last-child > td:first-child {
  border-bottom-left-radius: var(--radius-table, 0.375rem);
}

.table-container .table tbody > tr:last-child > td:last-child {
  border-bottom-right-radius: var(--radius-table, 0.375rem);
}

/* If tfoot exists, footer owns the bottom corners */
.table-container .table tfoot > tr:last-child > td:first-child {
  border-bottom-left-radius: var(--radius-table, 0.375rem);
}

.table-container .table tfoot > tr:last-child > td:last-child {
  border-bottom-right-radius: var(--radius-table, 0.375rem);
}

/* When tfoot exists, prevent tbody last row from also rounding (avoid double rounding). Anchored on the tbody that a tfoot
   follows, a sibling :has() (Enodia tq-8036; ported by tq-8220): the old descendant `.table:has(tfoot)` made Chrome restyle
   every body cell on any insert anywhere in the table. A tfoot always follows its tbody, so the same rows match. */
.table-container .table tbody:has(~ tfoot) > tr:last-child > td:first-child,
.table-container .table tbody:has(~ tfoot) > tr:last-child > td:last-child {
  border-bottom-left-radius: 0;
  border-bottom-right-radius: 0;
}

/* Sticky footer: keep radius on sticky footer cells */


/* ==========================================================================
   STICKY FIRST / LAST COLUMN
   ========================================================================== */

.table thead :is(.sticky-col, .sticky-col-right) {
  z-index: 40;
  background-color: var(--bg-table-header-sticky, var(--bg-table-header, var(--bg-primary)));
}

/* Sticky overlay matches row states (but respects .no-hover) */
.table:not(.no-hover) tbody > tr:hover :is(.sticky-col, .sticky-col-right) {
  background-color: var(--bg-table-sticky-hover, var(--bg-table-row-hover, var(--bg-primary-subtle)));
}

.table tbody > tr.selected :is(.sticky-col, .sticky-col-right),
.table tbody > tr[aria-selected="true"] :is(.sticky-col, .sticky-col-right) {
  background-color: var(--bg-table-sticky-selected, var(--bg-table-row-selected, var(--bg-info-subtle)));
}

.table tbody > tr[aria-current="true"] :is(.sticky-col, .sticky-col-right) {
  background-color: var(--bg-table-sticky-active, var(--bg-table-row-active, var(--bg-primary)));
}


/* ==========================================================================
   COLUMN HOVER SUPPORT (optional / JS)
   ========================================================================== */
.table td[col-index]:hover,
.table th[col-index]:hover {
  background-color: var(--bg-table-col-hover, var(--bg-info-subtle));
}


/* ==========================================================================
   GRID / VERTICAL BORDERS
   ========================================================================== */


/* ==========================================================================
   EXPANDABLE ROWS
   ========================================================================== */


/* ==========================================================================
   SKELETON / LOADING ROWS
   ========================================================================== */


/* ==========================================================================
   EMPTY STATE
   ========================================================================== */


/* ==========================================================================
   RESIZE HANDLES (for .table--resizable)
   ========================================================================== */
/* ========================================
   Component: Empty State
   ======================================== */

.empty-state {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.75rem;
  padding-top: 3rem;
  padding-bottom: 3rem;
  padding-left: 1.5rem;
  padding-right: 1.5rem;
  text-align: center;
}

.collapse.show.empty-state {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .empty-state {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.empty-state.items-baseline { margin-bottom: 10px; }

html.is-mobile .empty-state:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .empty-state.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.empty-state.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.empty-state[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .empty-state.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .empty-state.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .empty-state.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .empty-state.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .empty-state.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.empty-state__icon {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 3.5rem;
  width: 3.5rem;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 0.75rem;
  font-size: 1.5rem;
  line-height: 2rem;
  letter-spacing: -0.01em;
}

.collapse.show.empty-state__icon {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .empty-state__icon {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.empty-state__icon.items-baseline { margin-bottom: 10px; }

html.is-mobile .empty-state__icon:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .empty-state__icon.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.empty-state__icon[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .empty-state__icon.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .empty-state__icon.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .empty-state__icon.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .empty-state__icon.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .empty-state__icon.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.empty-state__icon {
  background-color: var(--bg-empty-state-icon, var(--bg-tertiary));
  color: var(--text-empty-state-icon, var(--text-quaternary));
}

.empty-state__title {
  font-size: 0.8125rem;
  line-height: 1.5rem;
  font-weight: 500;
  color: var(--text-empty-state-title, var(--text-secondary));
}

.empty-state__description {
  max-width: 20rem;
  font-size: 0.75rem;
  line-height: 1rem;
  color: var(--text-empty-state-description, var(--text-tertiary));
}

.empty-state__actions {
  margin-top: 0.5rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;
}

.collapse.show.empty-state__actions {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .empty-state__actions {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.empty-state__actions.items-baseline { margin-bottom: 10px; }

html.is-mobile .empty-state__actions:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .empty-state__actions.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.empty-state__actions[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .empty-state__actions.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .empty-state__actions.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .empty-state__actions.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .empty-state__actions.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .empty-state__actions.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

/* ── Variants ── */

/* Compact: smaller spacing and icon for inline use in cards/panels */
.empty-state--compact {
  gap: 0.5rem;
  padding-top: 1.5rem;
  padding-bottom: 1.5rem;
  padding-left: 1rem;
  padding-right: 1rem;
}

.empty-state--compact .empty-state__icon {
  height: 2.5rem;
  width: 2.5rem;
  border-radius: 0.5rem;
  font-size: 1rem;
  line-height: 1.5rem;
}

.empty-state--compact .empty-state__title {
  font-size: 0.75rem;
  line-height: 1rem;
}

.empty-state--compact .empty-state__description {
  font-size: 0.6875rem;
  line-height: 1rem;
}

/* Large: bigger icon and text for full-page empty states */

/* Bordered: dashed border around container (drop zones, empty containers) */
/* ==========================================================================
   Component: Detail Section
   Purpose:   Semantic wrapper for grouped key-value content in detail views.
              Provides consistent section headers, spacing, and optional
              collapse or section-level actions.

   Anatomy
   -------
   .detail-section
     .detail-section__header       — flex row with title + optional actions
       .detail-section__title      — section heading text
       .detail-section__actions    — optional right-aligned action buttons
     .detail-section__body         — content area (key-value pairs, tables, etc.)

   Variants
   --------
   (default)                       — spacing-only wrapper, no border
   .detail-section--divider        — top border separator between sections
   .detail-section--bordered       — full border around the section
   .detail-section--card           — elevated card-style section
   .detail-section--collapsible    — header acts as collapse toggle

   Context modifiers
   -----------------
   .detail-section--flush          — no horizontal padding (for full-bleed tables)
   .detail-section--compact        — reduced spacing
   ========================================================================== */


/* ==========================================================================
   BASE
   ========================================================================== */
.detail-section {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
}
.collapse.show.detail-section {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .detail-section {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.detail-section.items-baseline { margin-bottom: 10px; }
html.is-mobile .detail-section:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .detail-section.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.detail-section.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .detail-section.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .detail-section.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .detail-section.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .detail-section.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .detail-section.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

  /* Spacing between consecutive sections */
  .detail-section + .detail-section {
  margin-top: 1.5rem;
}


/* ---------- Header ---------- */
.detail-section__header {
  margin-bottom: 0.5rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 0.5rem;
}
.collapse.show.detail-section__header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .detail-section__header {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.detail-section__header.items-baseline { margin-bottom: 10px; }
html.is-mobile .detail-section__header:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .detail-section__header.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.detail-section__header[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .detail-section__header.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .detail-section__header.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .detail-section__header.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .detail-section__header.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .detail-section__header.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.detail-section__title {
  font-size: 0.75rem;
  line-height: 1rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.025em;
  color: var(--text-detail-section-title, var(--text-secondary));
}


/* ---------- Body ---------- */
.detail-section__body {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
}
.collapse.show.detail-section__body {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .detail-section__body {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.detail-section__body.items-baseline { margin-bottom: 10px; }
html.is-mobile .detail-section__body:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .detail-section__body.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.detail-section__body.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .detail-section__body.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .detail-section__body.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .detail-section__body.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .detail-section__body.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .detail-section__body.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}


/* ==========================================================================
   DIVIDER VARIANT — top border between stacked sections
   ========================================================================== */


/* ==========================================================================
   BORDERED VARIANT — outlined section
   ========================================================================== */
.detail-section--bordered {
  border-radius: 0.5rem;
  padding: 1rem;
  border: 1px solid var(--border-detail-section, var(--border-primary-subtle));
}

  .detail-section--bordered .detail-section__header {
  margin-bottom: 0.75rem;
}


/* ==========================================================================
   CARD VARIANT — elevated card-style section
   ========================================================================== */


/* ==========================================================================
   COLLAPSIBLE VARIANT
   ========================================================================== */

/* Chevron indicator */

/* Collapse body */


/* ==========================================================================
   CONTEXT MODIFIERS
   ========================================================================== */

/* Flush: no horizontal padding (for full-bleed tables inside sections) */

/* Compact: tighter spacing */
/* ========================================
   Component: Messaging
   Enterprise messaging system — composer, conversation thread,
   reactions, engagement indicators.
   ======================================== */

/* ==========================================================================
   CONVERSATION PANEL — scrollable message thread container
   ========================================================================== */

.msg-panel {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 100%;
  min-height: 0;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  overflow: hidden;
  background-color: var(--bg-msg-panel, var(--bg-surface));
}

.msg-panel__thread {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  overflow-y: auto;
  padding: 1rem;
  scrollbar-width: thin;
  scrollbar-color: var(--scroll-thumb) var(--scroll-track);
}
:where(.msg-panel__thread > :not(:last-child)) {
  --tw-space-y-reverse: 0;
  -webkit-margin-before: calc(0.25rem * var(--tw-space-y-reverse));
  margin-block-start: calc(0.25rem * var(--tw-space-y-reverse));
  -webkit-margin-after: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));
  margin-block-end: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));
}

/* PAGE-SCROLL THREAD (tq-9030 A141, isabella 900067681): the thread grows; an ancestor scrolls. The base thread scrolls itself
   (flex: 1 + overflow-y: auto: the specimen, a modal / drawer thread); a thread inside a scrolling page pane (the app's Messages
   shell) takes this modifier instead, so the PAGE scrolls it: if the inner thread also scrolled, the outer pane's scrollHeight
   would collapse to its clientHeight and a scroll-to-bottom would find nowhere to go. Messages stack in a column with a 0.25rem
   gap (and no stacked-message margin). */
.msg-panel__thread--page-scroll {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 0.25rem;
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  overflow: visible;
  padding: 1.5rem;
  scrollbar-width: auto;
}

/* its gap carries the spacing between messages, as the app shipped: the base thread's stacked-message margins are off */
.msg-panel__thread--page-scroll > * {
  margin-block: 0;
}

.msg-panel__composer-area {
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
  padding: 0.75rem;
  background-color: var(--bg-msg-composer-area, var(--bg-surface));
}

/* ==========================================================================
   MESSAGE BUBBLE — individual message in the thread
   ========================================================================== */

.msg {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  max-width: 85%;
  gap: 0.625rem;
}

.msg--outbound {
  margin-left: auto;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: reverse;
  -ms-flex-direction: row-reverse;
  flex-direction: row-reverse;
}

.msg--system {
  max-width: 100%;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}

/* Avatar */
.msg__avatar {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -ms-flex-item-align: end;
  align-self: flex-end;
}

.msg__avatar img,
.msg__avatar .avatar {
  height: 1.5rem;
  width: 1.5rem;
  border-radius: var(--radius-full);
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
}

.msg--outbound .msg__avatar {
  display: none;
}

/* Body wrapper */
.msg__body {
  position: relative;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  min-width: 0;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 0.125rem;
}

/* Sender name + timestamp header */
.msg__header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: baseline;
  -ms-flex-align: baseline;
  align-items: baseline;
  gap: 0.5rem;
  padding-inline: 0.25rem;
}

.msg--outbound .msg__header {
  -webkit-box-orient: horizontal;
  -webkit-box-direction: reverse;
  -ms-flex-direction: row-reverse;
  flex-direction: row-reverse;
}

.msg__sender {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  --tw-font-weight: 500;
  font-weight: 500;
  color: var(--text-msg-sender, var(--text-primary));
}

.msg__time {
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  white-space: nowrap;
  color: var(--text-msg-time, var(--text-tertiary));
}

/* Bubble */
.msg__bubble {
  position: relative;
  border-radius: var(--radius-xl);
  padding-inline: 0.75rem;
  padding-block: 0.5rem;
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  --tw-leading: var(--leading-relaxed, 1.625);
  line-height: var(--leading-relaxed, 1.625);
  background-color: var(--bg-msg-inbound, var(--bg-secondary-subtle));
  color: var(--text-msg-inbound, var(--text-primary));
  border: 1px solid var(--border-msg-inbound, transparent);
  word-break: break-word;
}

.msg--outbound .msg__bubble {
  background-color: var(--bg-msg-outbound, var(--bg-primary-solid));
  color: var(--text-msg-outbound);
  border-color: var(--border-msg-outbound, transparent);
}

.msg--system .msg__bubble {
  border-radius: var(--radius-full);
  padding-inline: 0.75rem;
  padding-block: 0.375rem;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  background-color: var(--bg-msg-system, var(--bg-tertiary-subtle));
  color: var(--text-msg-system, var(--text-tertiary));
  border-color: var(--border-msg-system, transparent);
}

/* Bubble tail shape via border-radius adjustments */
.msg__bubble {
  border-bottom-left-radius: var(--radius-xs, 4px);
}

.msg--outbound .msg__bubble {
  border-bottom-left-radius: var(--radius-xl, 12px);
  border-bottom-right-radius: var(--radius-xs, 4px);
}

/* Consecutive messages from same sender: tighter spacing */
.msg + .msg:not(.msg--outbound) .msg__header,
.msg--outbound + .msg--outbound .msg__header {
  display: none;
}

.msg + .msg:not(.msg--outbound),
.msg--outbound + .msg--outbound {
  margin-top: 0.125rem;
}

.msg + .msg:not(.msg--outbound) .msg__bubble,
.msg--outbound + .msg--outbound .msg__bubble {
  border-radius: var(--radius-xl, 12px);
}

/* ==========================================================================
   MESSAGE CONTENT — rich text inside bubbles (lists, links, whitespace)
   ========================================================================== */

.msg__content {
  overflow-wrap: break-word;
  white-space: pre-line;
  color: inherit;
}

.msg__content img {
  margin-block: 0.25rem;
  max-width: 100%;
  cursor: pointer;
  border-radius: var(--radius-md);
}

.msg__content img:hover {
  opacity: 90%;
}

/* Only clamp very long text-heavy messages; images stay full-height.
   Scroll is on the bubble so the scrollbar sits at the bubble edge, not inset by padding. */
.msg__bubble:not(:has(img)) {
  max-height: 450px;
  overflow-y: auto;
  scrollbar-width: thin;
}

.msg__content ol,
.msg__content ul {
  margin-block: 0.25rem;
  padding-left: 1.25rem;
  margin: 0;
  padding-left: 1.5em;
}

.msg__content ul { list-style-type: disc; }
.msg__content ol { list-style-type: decimal; }

.msg__content li {
  margin-block: 0.125rem;
  list-style-type: revert;
}

.msg__content a {
  color: var(--text-info);
  text-decoration-line: underline;
}

.msg--outbound .msg__content a {
  color: var(--text-info);
}

/* ==========================================================================
   MESSAGE ATTACHMENTS
   ========================================================================== */

.msg__attachments {
  margin-top: 0.25rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  gap: 0.375rem;
}

/* STACKED attachments (tq-9030 A141, isabella 900067741): file cards one per row (the app's thread); the base row-wrap
   stays for the DS's image strip. */
.msg__attachments--stack {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -ms-flex-wrap: nowrap;
  flex-wrap: nowrap;
  max-width: 20rem;
  gap: 0.375rem;
}

.msg__attachment {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.375rem;
  border-radius: var(--radius-lg);
  padding-inline: 0.5rem;
  padding-block: 0.25rem;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  background-color: var(--bg-msg-attachment, color-mix(in oklch, var(--text-primary) 6%, transparent));
  color: var(--text-msg-attachment, var(--text-secondary));
  border: 1px solid var(--border-msg-attachment, transparent);
  -webkit-transition: background-color var(--duration-fast, 100ms) ease;
  transition: background-color var(--duration-fast, 100ms) ease;
}

.msg__attachment:hover {
  background-color: var(--bg-msg-attachment-hover, color-mix(in oklch, var(--text-primary) 10%, transparent));
}

.msg__attachment i {
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  color: var(--text-msg-attachment-icon, var(--text-tertiary));
}

.msg--outbound .msg__attachment {
  background-color: color-mix(in oklch, currentColor 8%, transparent);
  color: var(--text-msg-outbound, var(--text-secondary));
  border-color: color-mix(in oklch, currentColor 12%, transparent);
}

.msg--outbound .msg__attachment:hover {
  background-color: color-mix(in oklch, currentColor 12%, transparent);
}

.msg--outbound .msg__attachment i {
  color: var(--text-tertiary);
}

/* ==========================================================================
   MESSAGE ACTIONS — Teams-style floating toolbar at top-right on hover
   ========================================================================== */

.msg__actions {
  position: absolute;
  z-index: 10;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 1px;
  border-radius: var(--radius-md);
  border-style: var(--tw-border-style, solid);
  border-width: 1px;
  --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
  -webkit-box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
  box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
  padding: 2px;
  top: -10px;
  right: 4px;
  background-color: var(--bg-msg-actions);
  border-color: var(--border-msg-actions, var(--border-secondary));
  opacity: 0;
  pointer-events: none;
  -webkit-transform: translateY(4px);
  -ms-transform: translateY(4px);
  transform: translateY(4px);
  -webkit-transition: opacity var(--duration-fast, 100ms) ease,
              -webkit-transform var(--duration-fast, 100ms) ease;
  transition: opacity var(--duration-fast, 100ms) ease,
              -webkit-transform var(--duration-fast, 100ms) ease;
  transition: opacity var(--duration-fast, 100ms) ease,
              transform var(--duration-fast, 100ms) ease;
  transition: opacity var(--duration-fast, 100ms) ease,
              transform var(--duration-fast, 100ms) ease,
              -webkit-transform var(--duration-fast, 100ms) ease;
}

.msg:hover .msg__actions,
.msg__actions:focus-within,
.msg__actions:has(.dropdown-menu.show) {
  opacity: 1;
  pointer-events: auto;
  -webkit-transform: translateY(0);
  -ms-transform: translateY(0);
  transform: translateY(0);
}
/* tq-9158 (A162; THE HOVER-REVEAL RULE, isabella 900068581): keyboard focus already reveals it (A148); ALWAYS shown where there
   is no hover ((hover: none) or the coarse pointer, scoped like the touch floor: a fine-scope subtree keeps the hover reveal) */
@media (hover: none), (pointer: coarse) {
  .msg__actions:where(:not([data-pointer-scope="fine"] *)),
  :where([data-pointer-scope="device"]) .msg__actions:where(:not([data-pointer-scope="device"] [data-pointer-scope="fine"] *)) {
    opacity: 1;
    pointer-events: auto;
    -webkit-transform: translateY(0);
    -ms-transform: translateY(0);
    transform: translateY(0);
  }
}

.msg--outbound .msg__actions {
  right: 4px;
  left: auto;
}

/* Inbound dropdown menus align left to avoid overflow */
.msg:not(.msg--outbound) .msg__actions .dropdown-menu {
  right: auto !important;
  left: 0 !important;
}

/* Action buttons — ghost icon buttons */
.msg__action-btn {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: var(--radius-sm);
  border-style: var(--tw-border-style, solid);
  border-width: 0px;
  width: 22px;
  height: 22px;
  font-size: 11px;
  color: var(--text-msg-action-btn, var(--text-secondary));
  background-color: transparent;
  -webkit-transition: background-color var(--duration-fast, 100ms) ease,
              color var(--duration-fast, 100ms) ease;
  transition: background-color var(--duration-fast, 100ms) ease,
              color var(--duration-fast, 100ms) ease;
}

.msg__action-btn:hover {
  color: var(--text-msg-action-btn-hover, var(--text-primary));
  background-color: var(--bg-msg-action-btn-hover, var(--bg-primary-hover));
}

.msg__action-btn:active {
  background-color: var(--bg-msg-action-btn-active, var(--bg-quaternary));
}

/* ==========================================================================
   REACTIONS — emoji reaction pills below a message
   ========================================================================== */

.msg__reactions {
  /* tq-9030 (A141): the app's shipped spacing (isabella 900067681) */
  margin-top: 0.125rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  gap: 0.25rem;
  padding-inline: 0.25rem;
}

.msg-reaction {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  border-radius: var(--radius-full);
  border-style: var(--tw-border-style, solid);
  border-width: 1px;
  padding-inline: 0.5rem;   /* tq-9030 (A141): the app's chip (2px 8px), on the ladder */
  padding-block: 0.125rem;
  font-size: 0.6875rem;   /* the 2xs step (the app's 11px) */
  line-height: 1rem;   /* the app's 16px chip line */
  background-color: var(--bg-msg-reaction, var(--bg-secondary-subtle));
  border-color: var(--border-msg-reaction, var(--border-secondary));
  color: var(--text-msg-reaction, var(--text-secondary));
  -webkit-transition: background-color var(--duration-fast, 100ms) ease,
              border-color var(--duration-fast, 100ms) ease;
  transition: background-color var(--duration-fast, 100ms) ease,
              border-color var(--duration-fast, 100ms) ease;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

.msg-reaction:hover {
  /* tq-9030 (A141): a fill change only, as the app shipped (no border recolour) */
  background-color: var(--bg-msg-reaction-hover, var(--bg-primary-hover));
}

.msg-reaction.is-active {
  background-color: var(--bg-msg-reaction-active, var(--bg-info-subtle));
  border-color: var(--border-msg-reaction-active, var(--border-info));
  color: var(--text-msg-reaction-active, var(--text-info));
}

.msg-reaction__emoji {
  font-size: 14px;
  line-height: 1;
}

.msg-reaction__count {
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  --tw-font-weight: 500;
  font-weight: 500;
  --tw-numeric-spacing: tabular-nums;
  font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);
}

/* Add reaction button */
.msg-reaction--add {
  --tw-border-style: dashed;
  border-style: dashed;
  color: var(--text-msg-reaction-add, var(--text-tertiary));
  opacity: 0;
  -webkit-transition: opacity var(--duration-fast, 100ms) ease,
              background-color var(--duration-fast, 100ms) ease;
  transition: opacity var(--duration-fast, 100ms) ease,
              background-color var(--duration-fast, 100ms) ease;
}

.msg:hover .msg-reaction--add,
.msg-reaction--add:focus-visible {
  opacity: 1;
}

/* ==========================================================================
   REACTION PICKER — popup emoji grid
   ========================================================================== */

.msg-reaction-picker {
  position: absolute;
  z-index: 50;
  border-radius: var(--radius-xl);
  border-style: var(--tw-border-style, solid);
  border-width: 1px;
  padding: 0.5rem;
  --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
  -webkit-box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
  box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
  background-color: var(--bg-msg-reaction-picker, var(--bg-popover));
  border-color: var(--border-msg-reaction-picker, var(--border-popover));
  opacity: 0;
  pointer-events: none;
  -webkit-transform: scale(0.9);
  -ms-transform: scale(0.9);
  transform: scale(0.9);
  -webkit-transition: opacity var(--duration-fast, 100ms) ease,
              -webkit-transform var(--duration-fast, 100ms) ease;
  transition: opacity var(--duration-fast, 100ms) ease,
              -webkit-transform var(--duration-fast, 100ms) ease;
  transition: opacity var(--duration-fast, 100ms) ease,
              transform var(--duration-fast, 100ms) ease;
  transition: opacity var(--duration-fast, 100ms) ease,
              transform var(--duration-fast, 100ms) ease,
              -webkit-transform var(--duration-fast, 100ms) ease;
}

.msg-reaction-picker.is-open {
  opacity: 1;
  pointer-events: auto;
  -webkit-transform: scale(1);
  -ms-transform: scale(1);
  transform: scale(1);
}

.msg-reaction-picker__grid {
  display: grid;
  gap: 0.125rem;
  grid-template-columns: repeat(6, 1fr);
}

/* FLOATING reaction picker (tq-9030 A141, isabella 900067741): the app's JS-placed picker (Scripts/modules/messaging/
   messageActionsKit.js positions it in viewport coordinates against the message's action menu), a VARIANT: a quick row
   over an expandable search + 8-column scrolling grid. It shares the DS popover surface (bg / border / radius-xl /
   shadow); shows and hides by opacity / transform on [hidden] (reduced motion below). z-index: the Messages thread
   renders only on the Messages pages, never inside a modal or drawer, so the popover layer (above the action menu's 50). */
.msg-reaction-picker--floating {
  position: fixed;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: stretch;
  -ms-flex-align: stretch;
  align-items: stretch;
  gap: 0.125rem;
  padding: 0;
  max-width: 20rem;
  overflow: hidden;
  z-index: var(--z-dropdown);
  background-color: var(--bg-popover, var(--bg-card));
  border: 1px solid var(--border-popover, var(--border-divider));
  border-radius: var(--radius-xl);
  -webkit-box-shadow:
    0 12px 32px -8px color-mix(in oklch, var(--text-primary) 22%, transparent),
    0 4px 12px -4px color-mix(in oklch, var(--text-primary) 10%, transparent);
  box-shadow:
    0 12px 32px -8px color-mix(in oklch, var(--text-primary) 22%, transparent),
    0 4px 12px -4px color-mix(in oklch, var(--text-primary) 10%, transparent);
  pointer-events: auto;
  opacity: 1;
  -webkit-transform: translateY(0);
  -ms-transform: translateY(0);
  transform: translateY(0);
  -webkit-transition: opacity 200ms cubic-bezier(0.16, 1, 0.3, 1), -webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1);
  transition: opacity 200ms cubic-bezier(0.16, 1, 0.3, 1), -webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1);
  transition: opacity 200ms cubic-bezier(0.16, 1, 0.3, 1), transform 200ms cubic-bezier(0.16, 1, 0.3, 1);
  transition: opacity 200ms cubic-bezier(0.16, 1, 0.3, 1), transform 200ms cubic-bezier(0.16, 1, 0.3, 1), -webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1);
}

.msg-reaction-picker--floating[hidden] {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  pointer-events: none;
  opacity: 0;
  -webkit-transform: translateY(6px);
  -ms-transform: translateY(6px);
  transform: translateY(6px);
}

.msg-reaction-picker--floating .msg-reaction-picker__grid {
  grid-template-columns: repeat(8, 1.875rem);
  gap: 0.25rem;
  max-height: 13.75rem;
  overflow-y: auto;
  padding-right: 0.25rem;
}

@media (prefers-reduced-motion: reduce) {
  .msg-reaction-picker--floating {
    -webkit-transition: none;
    transition: none;
    -webkit-transform: none;
    -ms-transform: none;
    transform: none;
  }
}

.msg-reaction-picker__btn {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 2rem;
  width: 2rem;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: var(--radius-md);
  border-style: var(--tw-border-style, solid);
  border-width: 0px;
  background-color: transparent;
  font-size: 18px;
  -webkit-transition: background-color var(--duration-fast, 100ms) ease,
              -webkit-transform var(--duration-fast, 100ms) ease;
  transition: background-color var(--duration-fast, 100ms) ease,
              -webkit-transform var(--duration-fast, 100ms) ease;
  transition: background-color var(--duration-fast, 100ms) ease,
              transform var(--duration-fast, 100ms) ease;
  transition: background-color var(--duration-fast, 100ms) ease,
              transform var(--duration-fast, 100ms) ease,
              -webkit-transform var(--duration-fast, 100ms) ease;
}

.msg-reaction-picker__btn:hover {
  background-color: var(--bg-primary-hover);
  -webkit-transform: scale(1.2);
  -ms-transform: scale(1.2);
  transform: scale(1.2);
}

/* ==========================================================================
   COMPOSER — WYSIWYG message editor
   ========================================================================== */

.msg-composer {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  overflow: hidden;
  border-radius: var(--radius-lg);
  background-color: var(--bg-msg-composer, var(--bg-input));
  /* Pilot inset-ring model: a subtle 1px inset ring (box-shadow) carries the
     chrome — NOT a CSS border — so focus thickens ONE contiguous ring with no
     layout shift and no border+ring double-up. */
  -webkit-box-shadow: inset 0 0 0 1px var(--border-msg-composer, var(--border-input)), var(--shadow-xs);
  box-shadow: inset 0 0 0 1px var(--border-msg-composer, var(--border-input)), var(--shadow-xs);
  -webkit-transition: background-color var(--duration-fast, 100ms) ease,
              -webkit-box-shadow var(--duration-fast, 100ms) ease;
  transition: background-color var(--duration-fast, 100ms) ease,
              -webkit-box-shadow var(--duration-fast, 100ms) ease;
  transition: box-shadow var(--duration-fast, 100ms) ease,
              background-color var(--duration-fast, 100ms) ease;
  transition: box-shadow var(--duration-fast, 100ms) ease,
              background-color var(--duration-fast, 100ms) ease,
              -webkit-box-shadow var(--duration-fast, 100ms) ease;
}

.msg-composer:focus-within {
  /* SINGLE 2px brand ring — no info-blue, no offset halo (pilot input §3). */
  outline: 2px solid var(--focus-ring); outline-offset: -2px; -webkit-box-shadow: var(--shadow-xs); box-shadow: var(--shadow-xs);
}

.msg-composer.is-drag-over {
  -webkit-box-shadow: inset 0 0 0 2px var(--border-focus), var(--shadow-xs);
  box-shadow: inset 0 0 0 2px var(--border-focus), var(--shadow-xs);
  background-color: var(--bg-msg-composer-dragover, color-mix(in oklch, var(--border-focus) 8%, var(--bg-input)));
}

/* Editor body — wraps the contenteditable or textarea */
.msg-composer__body {
  padding-inline: 0.75rem;
  padding-top: 0.625rem;
  padding-bottom: 0.25rem;
}

/* Contenteditable WYSIWYG editor */
.msg-composer__editor {
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  --tw-outline-style: none;
  outline-style: none;
  color: var(--text-msg-composer, var(--text-primary));
  min-height: 24px;
  max-height: 160px;
  overflow-y: auto;
  line-height: 1.6;
  font-family: inherit;
  word-break: break-word;
  scrollbar-width: thin;
}
@media (forced-colors: active) {

  .msg-composer__editor {
    outline: 2px solid transparent;
    outline-offset: 2px;
  }
}

.msg-composer__editor:empty::before {
  content: attr(data-placeholder);
  color: var(--text-msg-composer-placeholder, var(--text-placeholder));
  pointer-events: none;
}

/* Editor inline formatting */
.msg-composer__editor b,
.msg-composer__editor strong {
  --tw-font-weight: 600;
  font-weight: 600;
}

.msg-composer__editor i,
.msg-composer__editor em {
  font-style: italic;
}

.msg-composer__editor u {
  text-decoration-line: underline;
}

.msg-composer__editor s,
.msg-composer__editor strike {
  text-decoration-line: line-through;
}

.msg-composer__editor code {
  border-radius: var(--radius-sm);
  padding-inline: 0.25rem;
  padding-block: 0.125rem;
  font-family: var(--font-mono, 'Space Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace);
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  background-color: var(--bg-msg-composer-code, var(--bg-tertiary-subtle));
  color: var(--text-msg-composer-code, var(--text-danger));
}

.msg-composer__editor blockquote {
  margin-block: 0.25rem;
  border-left-style: var(--tw-border-style, solid);
  border-left-width: 2px;
  padding-left: 0.75rem;
  font-style: italic;
  border-color: var(--border-msg-composer-quote, var(--border-secondary));
  color: var(--text-msg-composer-quote, var(--text-secondary));
}

.msg-composer__editor ul,
.msg-composer__editor ol {
  margin-block: 0.25rem;
  padding-left: 1.25rem;
}

.msg-composer__editor ul {
  list-style-type: disc;
}

.msg-composer__editor ol {
  list-style-type: decimal;
}

.msg-composer__editor li {
  margin-block: 0.125rem;
}

.msg-composer__editor a {
  color: var(--text-info);
  text-decoration-line: underline;
}

/* Fallback textarea (non-WYSIWYG mode) */
.msg-composer__input {
  margin: 0;
  width: 100%;
  resize: none;
  border-style: var(--tw-border-style, solid);
  border-width: 0px;
  background-color: transparent;
  padding: 0;
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  --tw-outline-style: none;
  outline-style: none;
  color: var(--text-msg-composer, var(--text-primary));
  max-height: 120px;
  min-height: 20px;
  line-height: 1.5;
  font-family: inherit;
}
@media (forced-colors: active) {

  .msg-composer__input {
    outline: 2px solid transparent;
    outline-offset: 2px;
  }
}

.msg-composer__input::-webkit-input-placeholder {
  color: var(--text-msg-composer-placeholder, var(--text-placeholder));
}

.msg-composer__input::-moz-placeholder {
  color: var(--text-msg-composer-placeholder, var(--text-placeholder));
}

.msg-composer__input:-ms-input-placeholder {
  color: var(--text-msg-composer-placeholder, var(--text-placeholder));
}

.msg-composer__input::-ms-input-placeholder {
  color: var(--text-msg-composer-placeholder, var(--text-placeholder));
}

.msg-composer__input::placeholder {
  color: var(--text-msg-composer-placeholder, var(--text-placeholder));
}

/* Toolbar — bottom bar with tools on left, send on right */
.msg-composer__toolbar {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 0.5rem;
  padding-inline: 0.375rem;
  padding-block: 0.375rem;
}

.msg-composer__tools {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.125rem;
}

.msg-composer__tool-btn {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 1.75rem;
  width: 1.75rem;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: var(--radius-md);
  border-style: var(--tw-border-style, solid);
  border-width: 0px;
  background-color: transparent;
  color: var(--text-msg-composer-tool, var(--text-tertiary));
  font-size: 14px;
  -webkit-transition: color var(--duration-fast, 100ms) ease,
              background-color var(--duration-fast, 100ms) ease;
  transition: color var(--duration-fast, 100ms) ease,
              background-color var(--duration-fast, 100ms) ease;
}

.msg-composer__tool-btn:hover {
  color: var(--text-msg-composer-tool-hover, var(--text-primary));
  background-color: var(--bg-msg-composer-tool-hover, var(--bg-primary-hover));
}

.msg-composer__tool-btn.is-active {
  /* Active formatting toggle uses the brand accent (pilot), not info-blue. */
  color: var(--text-msg-composer-tool-active, var(--border-focus));
  background-color: var(--bg-msg-composer-tool-active, color-mix(in oklch, var(--border-focus) 12%, transparent));
}

.msg-composer__tool-sep {
  margin-inline: 0.125rem;
  height: 1rem;
  width: 1px;
  background-color: var(--border-msg-composer-sep, var(--border-secondary-subtle));
}

/* Actions area — right side of toolbar */
.msg-composer__actions {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;
}

.msg-composer__hint {
  display: none;
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  color: var(--text-msg-composer-hint, var(--text-quaternary));
}
@media (width >= 40rem) {

  .msg-composer__hint {
    display: inline;
  }
}

/* Send button — styled like btn-primary, radius matches composer inner edge */
.msg-composer__send {
  /* Pavel #353: a circular icon send button (was a rounded-lg pill with a "Send"
     label). Square + radius-full = a true circle; the label drops to sr-only
     below so the button keeps its accessible name.
     tq-9030 (A141, isabella 900067717): its size is the CONTROL ladder's md tier (40px on a mouse, 44px on touch: the
     touch target), not a one-off 30px / 36px; its fill and glyph are the --bg-msg-composer-send / --text-msg-composer-send
     component tokens (the app's shipped emerald step, theme-light + theme-dark); no border, no shadow (the app showed
     none); focus is the canonical outline (below). */
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: var(--control-h-md);
  height: var(--control-h-md);
  padding: 0;
  border: 0;
  border-radius: var(--radius-full);
  font-size: 13px;
  color: var(--text-msg-composer-send, var(--text-button-primary));
  background-color: var(--bg-msg-composer-send, var(--bg-button-primary));
  -webkit-transition: background-color var(--duration-fast, 100ms) ease,
              opacity var(--duration-fast, 100ms) ease;
  transition: background-color var(--duration-fast, 100ms) ease,
              opacity var(--duration-fast, 100ms) ease;
}

.msg-composer__send:hover:not(:disabled) {
  background-color: var(--bg-msg-composer-send-hover, var(--bg-button-primary-hover));
}

.msg-composer__send:active:not(:disabled) {
  background-color: var(--bg-msg-composer-send-active, var(--bg-button-primary-hover));
}

.msg-composer__send:disabled {
  background-color: var(--bg-msg-composer-send-disabled, var(--bg-button-primary));
  opacity: 0.45;   /* the app's shipped disabled send */
  cursor: not-allowed;
}

.msg-composer__send-text {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
  border-width: 0;   /* Pavel #353: icon-only circular send keeps its accessible name */
}

/* ==========================================================================
   TYPING INDICATOR
   ========================================================================== */

.msg-typing {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.375rem;
  padding: 0.25rem 1.5rem 0.5rem;   /* tq-9030 (A141): the app's typing row, on the ladder */
  font-size: 0.6875rem;   /* the 2xs step (the app's 11px) */
  line-height: 1rem;   /* the app's 16px row line */
  color: var(--text-msg-typing, var(--text-tertiary));
  -ms-flex-negative: 0;
  flex-shrink: 0;
  background-color: transparent;
}

.msg-typing__dots {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  gap: 0.125rem;
}

.msg-typing__dot {
  /* tq-9030 (A141): the app's dot + bounce (ornament / motion: app values as they are; still under reduced motion below) */
  height: 5px;
  width: 5px;
  border-radius: var(--radius-full);
  background-color: var(--bg-msg-typing-dot, var(--text-tertiary));
  -webkit-animation: msg-typing-bounce 1.2s ease-in-out infinite;
  animation: msg-typing-bounce 1.2s ease-in-out infinite;
}

.msg-typing__dot:nth-child(2) { -webkit-animation-delay: 0.15s; animation-delay: 0.15s; }
.msg-typing__dot:nth-child(3) { -webkit-animation-delay: 0.3s; animation-delay: 0.3s; }

@-webkit-keyframes msg-typing-bounce {
  0%, 60%, 100% { -webkit-transform: translateY(0); transform: translateY(0); opacity: 0.4; }
  30% { -webkit-transform: translateY(-4px); transform: translateY(-4px); opacity: 1; }
}

@keyframes msg-typing-bounce {
  0%, 60%, 100% { -webkit-transform: translateY(0); transform: translateY(0); opacity: 0.4; }
  30% { -webkit-transform: translateY(-4px); transform: translateY(-4px); opacity: 1; }
}

/* ==========================================================================
   ENGAGEMENT — read receipts, delivery status
   ========================================================================== */

.msg__status {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  padding-inline: 0.25rem;
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  color: var(--text-msg-status, var(--text-quaternary));
}

.msg--outbound .msg__status {
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
}

.msg__status-icon {
  font-size: 11px;
}

.msg__status-icon--sent {
  color: var(--text-msg-status, var(--text-quaternary));
}

.msg__status-icon--delivered {
  color: var(--text-msg-status, var(--text-tertiary));
}

.msg__status-icon--read {
  color: var(--text-msg-status-read, var(--text-info));
}

/* ==========================================================================
   DATE SEPARATOR — "Today", "Yesterday", "March 5"
   ========================================================================== */

.msg-date-separator {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.75rem;
  padding-block: 0.75rem;
}

.msg-date-separator::before,
.msg-date-separator::after {
  content: "";
  height: 1px;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  background-color: var(--border-msg-separator, var(--border-secondary));
}

.msg-date-separator__label {
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  --tw-font-weight: 500;
  font-weight: 500;
  --tw-tracking: var(--tracking-wide, 0.025em);
  letter-spacing: var(--tracking-wide, 0.025em);
  white-space: nowrap;
  text-transform: uppercase;
  color: var(--text-msg-separator, var(--text-tertiary));
}

/* ==========================================================================
   UNREAD BANNER
   ========================================================================== */

.msg-unread-banner {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.75rem;
  padding-block: 0.5rem;
}

.msg-unread-banner::before,
.msg-unread-banner::after {
  content: "";
  height: 1px;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  background-color: var(--border-msg-unread, var(--border-danger));
}

.msg-unread-banner__label {
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  --tw-font-weight: 500;
  font-weight: 500;
  --tw-tracking: var(--tracking-wide, 0.025em);
  letter-spacing: var(--tracking-wide, 0.025em);
  white-space: nowrap;
  text-transform: uppercase;
  color: var(--text-msg-unread, var(--text-danger));
}

/* ==========================================================================
   CONVERSATION LIST — sidebar list of conversations
   ========================================================================== */

.msg-conversation-list {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  overflow-y: auto;
  scrollbar-width: thin;
  scrollbar-color: var(--scroll-thumb) var(--scroll-track);
}

.msg-conversation-item {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.75rem;
  border-bottom-style: var(--tw-border-style, solid);
  border-bottom-width: 1px;
  padding-inline: 0.75rem;
  padding-block: 0.625rem;
  border-color: var(--border-msg-conversation, var(--border-secondary));
  background-color: var(--bg-msg-conversation, transparent);
  -webkit-transition: background-color var(--duration-fast, 100ms) ease;
  transition: background-color var(--duration-fast, 100ms) ease;
}

.msg-conversation-item:hover {
  background-color: var(--bg-msg-conversation-hover, var(--bg-primary-hover));
}

.msg-conversation-item.is-active {
  background-color: var(--bg-msg-conversation-active, var(--bg-quaternary));
}

.msg-conversation-item.is-unread {
  background-color: var(--bg-msg-conversation-unread, var(--bg-info-subtle));
}

.msg-conversation-item__avatar {
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

.msg-conversation-item__content {
  min-width: 0;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
}

.msg-conversation-item__name {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  --tw-font-weight: 500;
  font-weight: 500;
  color: var(--text-msg-conversation-name, var(--text-primary));
}

.msg-conversation-item.is-unread .msg-conversation-item__name {
  --tw-font-weight: 600;
  font-weight: 600;
}

.msg-conversation-item__preview {
  margin-top: 0.125rem;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  color: var(--text-msg-conversation-preview, var(--text-tertiary));
}

.msg-conversation-item__meta {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: end;
  -ms-flex-align: end;
  align-items: flex-end;
  gap: 0.25rem;
}

.msg-conversation-item__time {
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  white-space: nowrap;
  color: var(--text-msg-conversation-time, var(--text-quaternary));
}

.msg-conversation-item__badge {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 1.25rem;
  width: 1.25rem;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: var(--radius-full);
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  --tw-font-weight: 700;
  font-weight: 700;
  background-color: var(--bg-msg-badge, var(--bg-primary-solid));
  color: var(--text-msg-badge);
}

/* ==========================================================================
   LAYOUT VARIANTS
   ========================================================================== */

/* Compact mode — tighter spacing */
.msg-panel--compact .msg__bubble {
  padding-inline: 0.625rem;
  padding-block: 0.375rem;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
}

.msg-panel--compact .msg-panel__thread {
  padding: 0.75rem;
}
:where(.msg-panel--compact .msg-panel__thread > :not(:last-child)) {
  --tw-space-y-reverse: 0;
  -webkit-margin-before: calc(0.125rem * var(--tw-space-y-reverse));
  margin-block-start: calc(0.125rem * var(--tw-space-y-reverse));
  -webkit-margin-after: calc(0.125rem * calc(1 - var(--tw-space-y-reverse)));
  margin-block-end: calc(0.125rem * calc(1 - var(--tw-space-y-reverse)));
}

.msg-panel--compact .msg {
  max-width: 90%;
  gap: 0.5rem;
}

/* Flat mode — no bubble backgrounds, just text */
.msg-panel--flat .msg__bubble {
  background-color: transparent;
  border-color: transparent;
  padding-inline: 0.25rem;
  padding-block: 0.125rem;
}

.msg-panel--flat .msg--outbound .msg__bubble {
  background-color: transparent;
  color: var(--text-primary);
}

/* ==========================================================================
   COMPOSER — Reply-to quote bar
   ========================================================================== */

.msg-composer__reply {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;
  border-bottom-style: var(--tw-border-style, solid);
  border-bottom-width: 1px;
  padding-inline: 0.75rem;
  padding-block: 0.5rem;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  background-color: var(--bg-msg-reply, var(--bg-secondary-subtle));
  border-color: var(--border-msg-composer-reply, var(--border-secondary-subtle));
  color: var(--text-msg-reply, var(--text-secondary));
}

.msg-composer__reply-text {
  min-width: 0;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* ACCENT reply chip (tq-9030 A141, isabella 900067741): the app's quote-reply chip, a VARIANT (the base strip stays what
   Scripts/components/messaging.js and /Design render). A left accent bar + a tinted fill, radius-md, the sender name over
   the quoted line (the quoted line stays one ellipsised row, so a long quote never grows the composer). */
.msg-composer__reply--accent {
  gap: 0.625rem;
  padding: 0.5rem 0.875rem;
  margin-bottom: 0.5rem;
  border-left: 3px solid var(--border-msg-reply-accent, var(--border-brand));
  line-height: 1rem;
  border-radius: var(--radius-md);
  background-color: var(--bg-msg-reply-accent, var(--bg-msg-reply, var(--bg-secondary-subtle)));
}

.msg-composer__reply--accent .msg-composer__reply-text {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
}

.msg-composer__reply-sender {
  margin-right: 0.25rem;
  --tw-font-weight: 600;
  font-weight: 600;
  color: var(--text-msg-reply-sender, var(--text-primary));
}

.msg-composer__reply-close {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 1.25rem;
  width: 1.25rem;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: var(--radius-sm);
  border-style: var(--tw-border-style, solid);
  border-width: 0px;
  background-color: transparent;
  color: var(--text-msg-reply-close, var(--text-tertiary));
  font-size: 11px;
}

.msg-composer__reply-close:hover {
  color: var(--text-primary);
  background-color: var(--bg-primary-hover);
}

/* Reply bar sits inside the composer container — no radius adjustment needed */

/* ==========================================================================
   COMPOSER — Attachment preview strip
   ========================================================================== */

.msg-composer__attachments {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  gap: 0.5rem;
  border-top-style: var(--tw-border-style, solid);
  border-top-width: 1px;
  padding-inline: 0.75rem;
  padding-block: 0.5rem;
  border-color: var(--border-msg-composer-attachments, var(--border-secondary-subtle));
  margin-bottom: 0.5rem;   /* tq-9030 (A141): the app's shipped strip spacing (its one value; the flow file had two) */
  /* tq-9138 (A157): the remove badge's 44px hit-slop reaches 20px above its preview under a finger; the strip opens its top
     padding by the same amount so the slop never covers the editor above it (8px, unchanged, on a fine pointer) */
  padding-top: max(0.5rem, calc(var(--control-h-xs) - 24px));
}

.msg-composer__attachment-preview {
  position: relative;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.375rem;
  border-radius: var(--radius-lg);
  padding-inline: 0.5rem;
  padding-block: 0.375rem;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  background-color: var(--bg-msg-attachment-preview, var(--bg-secondary-subtle));
  border: 1px solid var(--border-msg-attachment-preview, var(--border-secondary));
  color: var(--text-msg-attachment-preview, var(--text-secondary));
  max-width: 200px;
}

.msg-composer__attachment-preview i {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  color: var(--text-msg-attachment-icon, var(--text-tertiary));
}

.msg-composer__attachment-name {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.msg-composer__attachment-size {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  color: var(--text-quaternary);
}

.msg-composer__attachment-remove {
  position: absolute;
  top: calc(0.25rem * -1.5);
  right: calc(0.25rem * -1.5);
  z-index: 10;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 1rem;
  width: 1rem;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: var(--radius-full);
  border-style: var(--tw-border-style, solid);
  border-width: 0px;
  background-color: var(--bg-msg-attachment-remove);   /* tq-9138: >= 3:1 over any preview, both themes (theme files) */
  color: var(--text-msg-attachment-remove);
  font-size: 8px;
  opacity: 0;
  /* tq-9138 (A157, isabella 900068581): hidden = inert. An invisible control that still takes a click removes attachments
     by accident, so it takes no pointer until it is revealed. */
  pointer-events: none;
  -webkit-transition: opacity var(--duration-fast, 100ms) ease;
  transition: opacity var(--duration-fast, 100ms) ease;
}

/* the preview's file-icon colour (.msg-composer__attachment-preview i) must not reach the badge's own glyph */
.msg-composer__attachment-preview .msg-composer__attachment-remove i {
  color: inherit;
}

/* THE HOVER-REVEAL RULE (isabella 900068581; design-system/foundations/accessibility.md "Hover-only reveals"): a reveal on
   hover is a fine-pointer convenience. It also reveals on keyboard focus (its host's :focus-within, its own :focus-visible),
   and it is ALWAYS shown where there is no hover: (hover: none) or the coarse pointer (the touch floor's scope, with the
   nested "device" re-entry). A [data-pointer-scope="fine"] subtree keeps the hover reveal. */
.msg-composer__attachment-preview:is(:hover, :focus-within) .msg-composer__attachment-remove,
.msg-composer__attachment-remove:focus-visible {
  opacity: 1;
  pointer-events: auto;
}
@media (hover: none), (pointer: coarse) {
  .msg-composer__attachment-remove:where(:not([data-pointer-scope="fine"] *)),
  :where([data-pointer-scope="device"]) .msg-composer__attachment-remove:where(:not([data-pointer-scope="device"] [data-pointer-scope="fine"] *)) {
    opacity: 1;
    pointer-events: auto;
  }
}

/* Image attachment thumbnail */
.msg-composer__attachment-preview--image {
  padding: 0;
  width: 64px;
  height: 64px;
}

.msg-composer__attachment-preview--image img {
  height: 100%;
  width: 100%;
  border-radius: var(--radius-lg);
  -o-object-fit: cover;
  object-fit: cover;
}

/* ==========================================================================
   COMPOSER — Compact variant (minimal toolbar)
   ========================================================================== */

.msg-panel--compact .msg-composer__toolbar {
  padding-inline: 0.375rem;
  padding-block: 0.25rem;
}

.msg-panel--compact .msg-composer__tool-btn {
  height: 1.5rem;
  width: 1.5rem;
  font-size: 12px;
}

.msg-panel--compact .msg-composer__send {
  width: 28px;
  height: 28px;
  padding: 0;
  font-size: 12px;
}

.msg-panel--compact .msg-composer__body {
  padding-inline: 0.625rem;
  padding-top: 0.5rem;
  padding-bottom: 0.125rem;
}

/* ==========================================================================
   QUOTED / REPLY MESSAGE — inside a bubble
   ========================================================================== */

.msg__quote {
  margin-bottom: 0.375rem;
  border-radius: var(--radius-lg);
  border-left-style: var(--tw-border-style, solid);
  border-left-width: 2px;
  padding-inline: 0.625rem;
  padding-block: 0.375rem;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  background-color: var(--bg-msg-quote, color-mix(in oklch, currentColor 5%, transparent));
  border-left-color: var(--border-msg-quote, var(--border-focus));
  color: var(--text-msg-quote, var(--text-secondary));
}

.msg--outbound .msg__quote {
  background-color: color-mix(in oklch, currentColor 5%, transparent);
  border-left-color: var(--border-focus);
  color: var(--text-secondary);
}

.msg__quote-sender {
  margin-bottom: 0.125rem;
  display: block;
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  --tw-font-weight: 600;
  font-weight: 600;
}

.msg__quote-text {
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
}

/* ==========================================================================
   IMAGE MESSAGE — inline image inside a bubble
   ========================================================================== */

.msg__image {
  margin-top: 0.25rem;
  cursor: pointer;
  overflow: hidden;
  border-radius: var(--radius-lg);
  max-width: 280px;
}

.msg__image img {
  display: block;
  height: auto;
  width: 100%;
}

.msg__image-grid {
  margin-top: 0.25rem;
  display: grid;
  gap: 0.25rem;
  max-width: 320px;
}

.msg__image-grid--2 { grid-template-columns: 1fr 1fr; }
.msg__image-grid--3 { grid-template-columns: 1fr 1fr; }
.msg__image-grid--4 { grid-template-columns: 1fr 1fr; }

.msg__image-grid img {
  height: 100%;
  width: 100%;
  cursor: pointer;
  border-radius: var(--radius-lg);
  -o-object-fit: cover;
  object-fit: cover;
  aspect-ratio: 1;
}

/* ==========================================================================
   LINK PREVIEW — auto-generated card inside a bubble
   ========================================================================== */

.msg__link-preview {
  margin-top: 0.5rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  cursor: pointer;
  gap: 0.625rem;
  border-radius: var(--radius-lg);
  border-style: var(--tw-border-style, solid);
  border-width: 1px;
  padding: 0.5rem;
  background-color: var(--bg-msg-link-preview, color-mix(in oklch, currentColor 4%, transparent));
  border-color: var(--border-msg-link-preview, var(--border-secondary));
  -webkit-transition: background-color var(--duration-fast, 100ms) ease;
  transition: background-color var(--duration-fast, 100ms) ease;
}

.msg__link-preview:hover {
  background-color: var(--bg-msg-link-preview-hover, color-mix(in oklch, currentColor 7%, transparent));
}

.msg--outbound .msg__link-preview {
  background-color: color-mix(in oklch, currentColor 4%, transparent);
  border-color: color-mix(in oklch, currentColor 12%, transparent);
}

.msg--outbound .msg__link-preview:hover {
  background-color: color-mix(in oklch, currentColor 7%, transparent);
}

.msg__link-preview-image {
  height: 3rem;
  width: 3rem;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  overflow: hidden;
  border-radius: var(--radius-md);
}

.msg__link-preview-image img {
  height: 100%;
  width: 100%;
  -o-object-fit: cover;
  object-fit: cover;
}

.msg__link-preview-body {
  min-width: 0;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
}

.msg__link-preview-title {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  --tw-font-weight: 500;
  font-weight: 500;
}

.msg__link-preview-desc {
  margin-top: 0.125rem;
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  opacity: 0.7;
}

.msg__link-preview-domain {
  margin-top: 0.25rem;
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  opacity: 0.5;
}

/* ==========================================================================
   MENTIONS — @username highlighting in text
   ========================================================================== */

.msg__mention {
  cursor: pointer;
  border-radius: var(--radius-sm);
  padding-inline: 0.125rem;
  --tw-font-weight: 500;
  font-weight: 500;
  color: var(--text-msg-mention, var(--text-info));
  background-color: var(--bg-msg-mention, var(--bg-info-subtle));
}

.msg--outbound .msg__mention {
  color: var(--text-msg-mention, var(--text-info));
  background-color: var(--bg-msg-mention, var(--bg-info-subtle));
}

.msg__mention:hover {
  text-decoration: underline;
}

/* ==========================================================================
   GROUP CHAT — multi-avatar stack, aligned with .avatar-group-stack
   The legacy 2x2 quadrant layout is gone — group avatars now use the design
   system's horizontal stack pattern (overlapping by -8px). Prefer this:

     <span class="avatar-group-stack">
       <span class="avatar avatar-xs avatar-info">SR</span>
       <span class="avatar avatar-xs avatar-success">KL</span>
       <span class="avatar avatar-xs avatar-warning">JM</span>
       <span class="avatar-more avatar-xs">+2</span>
     </span>

   .msg-group-avatar is retained as a thin alias of .avatar-group-stack for
   backward compat. The 2x2 quadrant layout is dropped.
   ========================================================================== */
.msg-group-avatar {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}
:where(.msg-group-avatar > :not(:last-child)) {
  --tw-space-x-reverse: 0;
  -webkit-margin-start: calc(calc(0.25rem * -2) * var(--tw-space-x-reverse));
  margin-inline-start: calc(calc(0.25rem * -2) * var(--tw-space-x-reverse));
  -webkit-margin-end: calc(calc(0.25rem * -2) * calc(1 - var(--tw-space-x-reverse)));
  margin-inline-end: calc(calc(0.25rem * -2) * calc(1 - var(--tw-space-x-reverse)));
}

  /* Each child is a regular .avatar; the messaging shim accepts plain divs too. */
  .msg-group-avatar > * {
    -webkit-box-shadow: 0 0 0 2px var(--bg-msg-panel, var(--bg-surface));
    box-shadow: 0 0 0 2px var(--bg-msg-panel, var(--bg-surface));
    border-radius: 9999px;
  }

/* Backward-compat: when authors still write .msg-group-avatar__item divs,
   render them as a 24x24 round avatar tile so the stack still works. */
.msg-group-avatar__item {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  border-radius: 9999px;
  font-size: 10px;
  font-weight: 600;
  background-color: color-mix(in oklch, var(--text-primary) 10%, transparent);
  color: var(--text-secondary);
  /* Cancel the old absolute positioning that the quadrant layout used */
  position: static !important;
  top: auto !important;
  left: auto !important;
  right: auto !important;
  bottom: auto !important;
}

/* Overflow pill at the end of the stack — same scale as the items. */
.msg-group-avatar__overflow {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  border-radius: 9999px;
  font-size: 9px;
  font-weight: 700;
  background-color: color-mix(in oklch, var(--text-primary) 8%, transparent);
  color: var(--text-tertiary);
  position: static !important;
  top: auto !important;
  left: auto !important;
  right: auto !important;
  bottom: auto !important;
}

/* ==========================================================================
   MESSAGE HEADER BAR — top bar with contact info and actions
   ========================================================================== */

.msg-header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.75rem;
  border-bottom-style: var(--tw-border-style, solid);
  border-bottom-width: 1px;
  padding-inline: 1rem;
  padding-block: 0.625rem;
  border-color: var(--border-msg-panel, var(--border-secondary));
  background-color: var(--bg-msg-header, var(--bg-surface));
}

.msg-header__info {
  min-width: 0;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
}

.msg-header__name {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  --tw-font-weight: 600;
  font-weight: 600;
  color: var(--text-primary);
}

.msg-header__status {
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  color: var(--text-tertiary);
}

.msg-header__status-dot {
  margin-right: 0.25rem;
  display: inline-block;
  height: 0.375rem;
  width: 0.375rem;
  border-radius: var(--radius-full);
}

.msg-header__status-dot--online {
  background-color: var(--bg-success-solid);
}

.msg-header__status-dot--away {
  background-color: var(--bg-warning-solid);
}

.msg-header__status-dot--offline {
  background-color: var(--text-quaternary);
}

.msg-header__actions {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
}

/* ==========================================================================
   PINNED MESSAGE BANNER
   ========================================================================== */

.msg-pinned {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;
  border-bottom-style: var(--tw-border-style, solid);
  border-bottom-width: 1px;
  padding-inline: 1rem;
  padding-block: 0.5rem;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  background-color: var(--bg-msg-pinned, var(--bg-warning-subtle));
  border-color: var(--border-msg-pinned, var(--border-warning-subtle));
  color: var(--text-msg-pinned, var(--text-warning));
  -webkit-transition: background-color var(--duration-fast, 100ms) ease;
  transition: background-color var(--duration-fast, 100ms) ease;
}

.msg-pinned:hover {
  background-color: var(--bg-msg-pinned-hover, var(--bg-warning-subtle));
  -webkit-filter: brightness(0.97);
  filter: brightness(0.97);
}

.msg-pinned__icon {
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

.msg-pinned__text {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* ==========================================================================
   EMPTY STATE — no messages yet
   ========================================================================== */

.msg-empty {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 0.75rem;
  padding-block: 3rem;
  text-align: center;
  color: var(--text-tertiary);
}

.msg-empty__icon {
  font-size: 2.25rem;
  line-height: var(--tw-leading, 2.625rem);
  letter-spacing: var(--tw-tracking, -0.02em);
  opacity: 30%;
}

.msg-empty__title {
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  --tw-font-weight: 500;
  font-weight: 500;
  color: var(--text-secondary);
}

.msg-empty__text {
  max-width: var(--container-xs, 20rem);
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
}

/* ==========================================================================
   EMOJI PICKER — comprehensive standalone picker
   Works inside the composer (popup) OR standalone (.emoji-picker--standalone).
   Anatomy:
     .emoji-picker / .msg-emoji-picker (alias)
       .emoji-picker__quick-row        — small frequently-used emoji row at top
       .emoji-picker__search-row       — search input + skin tone picker
       .emoji-picker__categories       — sticky category nav (bottom or top)
       .emoji-picker__scroll
         .emoji-picker__category-label — sticky header per category
         .emoji-picker__grid           — 8-col emoji grid
           .emoji-picker__btn          — individual emoji button
       .emoji-picker__preview          — bottom info row showing hovered emoji
   ========================================================================== */

.emoji-picker,
.msg-emoji-picker {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  width: 340px;
  max-height: 420px;
  background-color: var(--bg-popover, var(--bg-card));
  border: 1px solid var(--border-popover, var(--border-divider));
  border-radius: var(--radius-xl);
  overflow: hidden;
  -webkit-box-shadow:
    0 12px 32px -8px color-mix(in oklch, var(--text-primary) 22%, transparent),
    0 4px 12px -4px color-mix(in oklch, var(--text-primary) 10%, transparent);
  box-shadow:
    0 12px 32px -8px color-mix(in oklch, var(--text-primary) 22%, transparent),
    0 4px 12px -4px color-mix(in oklch, var(--text-primary) 10%, transparent);
}

/* Floating popup variant — opens above the composer */
.emoji-picker--popup,
.msg-emoji-picker {
  position: absolute;
  bottom: calc(100% + 8px);
  right: 0;
  z-index: 50;
  opacity: 0;
  pointer-events: none;
  -webkit-transform: translateY(4px);
  -ms-transform: translateY(4px);
  transform: translateY(4px);
  -webkit-transition: opacity 120ms ease, -webkit-transform 120ms ease;
  transition: opacity 120ms ease, -webkit-transform 120ms ease;
  transition: opacity 120ms ease, transform 120ms ease;
  transition: opacity 120ms ease, transform 120ms ease, -webkit-transform 120ms ease;
}

  .emoji-picker--popup.is-open,
  .msg-emoji-picker.is-open {
    opacity: 1;
    pointer-events: auto;
    -webkit-transform: translateY(0);
    -ms-transform: translateY(0);
    transform: translateY(0);
  }

/* Standalone variant — embeds inline (no popup chrome) */
.emoji-picker--standalone {
  position: relative;
  bottom: auto;
  right: auto;
  opacity: 1;
  pointer-events: auto;
  -webkit-transform: none;
  -ms-transform: none;
  transform: none;
}

/* Compact variant — smaller width for inline contexts */
.emoji-picker--compact {
  width: 280px;
  max-height: 320px;
}

/* GRID variant (tq-9030 A141, isabella 900067717): the compact QUICK-PICK popup, a 6-column grid of emoji buttons
   (.emoji-picker__btn) with no search / categories. It SHARES the panel's surface, border, radius, shadow and the popup's
   opacity / transform show-hide (reduced motion below); only the layout, the popover z token and the composer-anchored
   offsets are its own. The app's Messages composer uses it (class="msg-emoji-picker emoji-picker--grid"). */
.emoji-picker--grid {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 0.25rem;
  padding: 0.5rem;
  width: auto;
  max-height: none;
  z-index: var(--z-dropdown);
  bottom: calc(100% + 0.5rem);
  right: 1.5rem;
}


/* === Quick-row (frequently used / recents) === */
.emoji-picker__quick-row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 2px;
  padding: 8px 8px 4px;
  border-bottom: 1px solid var(--border-divider);
  background-color: color-mix(in oklch, var(--text-primary) 2%, transparent);
}

  .emoji-picker__quick-row .emoji-picker__btn {
    width: 28px;
    height: 28px;
    font-size: 17px;
  }


/* === Search row (search input + skin tone picker) === */
.emoji-picker__search-row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  padding: 8px;
  border-bottom: 1px solid var(--border-divider);
}

.emoji-picker__search {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  height: 28px;
  padding: 0 10px;
  font-size: 12px;
  background-color: var(--bg-input);
  border: 1px solid var(--border-input, var(--border-divider));
  border-radius: var(--radius-lg);
  color: var(--text-primary);
  outline: none;
  -webkit-transition: border-color 120ms ease, -webkit-box-shadow 120ms ease;
  transition: border-color 120ms ease, -webkit-box-shadow 120ms ease;
  transition: border-color 120ms ease, box-shadow 120ms ease;
  transition: border-color 120ms ease, box-shadow 120ms ease, -webkit-box-shadow 120ms ease;
}

  .emoji-picker__search::-webkit-input-placeholder {
    color: var(--text-tertiary);
  }

  .emoji-picker__search::-moz-placeholder {
    color: var(--text-tertiary);
  }

  .emoji-picker__search:-ms-input-placeholder {
    color: var(--text-tertiary);
  }

  .emoji-picker__search::-ms-input-placeholder {
    color: var(--text-tertiary);
  }

  .emoji-picker__search::placeholder {
    color: var(--text-tertiary);
  }

  .emoji-picker__search:focus {
    /* SINGLE brand ring — the 1px border recolours and a 1px inset shadow
       thickens it into one contiguous 2px ring (pilot input model). */
    border-color: var(--border-focus);
    outline: 2px solid var(--focus-ring); outline-offset: -2px;
  }

/* Skin tone picker — single button that expands to a row of 6 tones */
.emoji-picker__tones {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  gap: 0;
  background-color: var(--bg-input);
  border: 1px solid var(--border-input, var(--border-divider));
  border-radius: 9999px;
  padding: 2px;
  overflow: hidden;
  -webkit-transition: width 180ms ease;
  transition: width 180ms ease;
}

.emoji-picker__tone {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  border-radius: 9999px;
  border: 0;
  /* Skin-tone swatch is data-driven: the host sets the literal tone via the
     --msg-tone custom property (Fitzpatrick colours are content, not tokens). */
  background-color: var(--msg-tone, transparent);
  cursor: pointer;
  font-size: 14px;
  line-height: 1;
  -webkit-transition: -webkit-transform 120ms ease;
  transition: -webkit-transform 120ms ease;
  transition: transform 120ms ease;
  transition: transform 120ms ease, -webkit-transform 120ms ease;
}

  .emoji-picker__tone:hover {
    -webkit-transform: scale(1.2);
    -ms-transform: scale(1.2);
    transform: scale(1.2);
  }

  .emoji-picker__tone.is-active {
    -webkit-box-shadow: inset 0 0 0 2px var(--border-focus);
    box-shadow: inset 0 0 0 2px var(--border-focus);
  }


/* === Scroll body === */
.emoji-picker__scroll {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  overflow-y: auto;
  scrollbar-width: thin;
  scrollbar-color: var(--border-divider) transparent;
  padding: 0 8px;
}

  .emoji-picker__scroll::-webkit-scrollbar { width: var(--scroll-size-sm); }
  .emoji-picker__scroll::-webkit-scrollbar-thumb {
    background-color: var(--border-divider);
    border-radius: 9999px;
  }


/* === Category label — sticky per category === */
.emoji-picker__category-label,
.emoji-picker__category {
  position: sticky;
  top: 0;
  z-index: 1;
  padding: 8px 4px 4px;
  font-size: 0.5625rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--text-tertiary);
  background-color: var(--bg-popover, var(--bg-card));
}


/* === Grid === */
.emoji-picker__grid {
  display: grid;
  grid-template-columns: repeat(8, 1fr);
  gap: 2px;
  padding-bottom: 6px;
}

  .emoji-picker--compact .emoji-picker__grid {
    grid-template-columns: repeat(7, 1fr);
  }


/* === Emoji button === */
.emoji-picker__btn {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  padding: 0;
  border: 0;
  background-color: transparent;
  border-radius: var(--radius-md);
  cursor: pointer;
  font-size: 19px;
  line-height: 1;
  -webkit-transition: background-color 100ms ease, -webkit-transform 100ms ease;
  transition: background-color 100ms ease, -webkit-transform 100ms ease;
  transition: background-color 100ms ease, transform 100ms ease;
  transition: background-color 100ms ease, transform 100ms ease, -webkit-transform 100ms ease;
}

  .emoji-picker__btn:hover {
    background-color: color-mix(in oklch, var(--text-primary) 8%, transparent);
    -webkit-transform: scale(1.15);
    -ms-transform: scale(1.15);
    transform: scale(1.15);
  }

  .emoji-picker__btn:active {
    -webkit-transform: scale(0.95);
    -ms-transform: scale(0.95);
    transform: scale(0.95);
  }

  .emoji-picker__btn:focus-visible {
    /* single 2px brand ring, no halo */
    outline: 2px solid var(--focus-ring);
    outline-offset: 2px;
  }

  .emoji-picker__btn.is-recent::after {
    content: "";
    position: absolute;
    width: 4px;
    height: 4px;
    border-radius: 9999px;
    background-color: var(--border-focus);
    bottom: 2px;
    right: 2px;
  }


/* === Sticky category nav (bottom by default) === */
.emoji-picker__categories {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 2px;
  padding: 6px 6px;
  border-top: 1px solid var(--border-divider);
  background-color: var(--bg-popover, var(--bg-card));
}

.emoji-picker__category-btn {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 30px;
  height: 28px;
  padding: 0;
  border: 0;
  background-color: transparent;
  border-radius: var(--radius-md);
  cursor: pointer;
  color: var(--text-tertiary);
  font-size: 14px;
  -webkit-transition: background-color 100ms ease, color 100ms ease;
  transition: background-color 100ms ease, color 100ms ease;
  position: relative;
}

  .emoji-picker__category-btn:hover {
    background-color: color-mix(in oklch, var(--text-primary) 8%, transparent);
    color: var(--text-primary);
  }

  .emoji-picker__category-btn.is-active {
    color: var(--border-focus);
  }

  .emoji-picker__category-btn.is-active::after {
    content: "";
    position: absolute;
    bottom: 0;
    left: 50%;
    -webkit-transform: translateX(-50%);
    -ms-transform: translateX(-50%);
    transform: translateX(-50%);
    width: 16px;
    height: 2px;
    border-radius: 9999px;
    background-color: var(--border-focus);
  }


/* === Preview footer (hovered emoji info) === */
.emoji-picker__preview {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
  padding: 6px 10px;
  border-top: 1px solid var(--border-divider);
  background-color: color-mix(in oklch, var(--text-primary) 2%, transparent);
  min-height: 36px;
}

.emoji-picker__preview-emoji {
  font-size: 20px;
  line-height: 1;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

.emoji-picker__preview-info {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  min-width: 0;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
}

.emoji-picker__preview-name {
  font-size: 11.5px;
  font-weight: 600;
  color: var(--text-primary);
  text-transform: capitalize;
  line-height: 1.2;
}

.emoji-picker__preview-shortcode {
  font-size: 10px;
  color: var(--text-tertiary);
  font-family: var(--font-mono, ui-monospace, monospace);
  line-height: 1.2;
}


/* === Empty state when search has no results === */
.emoji-picker__empty {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 8px;
  padding: 32px 16px;
  text-align: center;
  color: var(--text-tertiary);
}

  .emoji-picker__empty-icon { font-size: 24px; opacity: 0.5; }
  .emoji-picker__empty-text { font-size: 12px; }


/* === Backward-compat aliases for old class names === */
.msg-emoji-picker__search        { -webkit-box-flex: 1; -ms-flex: 1; flex: 1; height: 28px; padding: 0 10px; font-size: 12px; background-color: var(--bg-input); border: 1px solid var(--border-input, var(--border-divider)); border-radius: 8px; color: var(--text-primary); outline: none; -webkit-transition: border-color 120ms ease; transition: border-color 120ms ease; }
.msg-emoji-picker__category      { position: sticky; top: 0; z-index: 1; padding: 8px 4px 4px; font-size: 0.5625rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-tertiary); background-color: var(--bg-popover, var(--bg-card)); }
.msg-emoji-picker__grid          { display: grid; grid-template-columns: repeat(8, 1fr); gap: 2px; padding-bottom: 6px; }
.msg-emoji-picker__btn           { display: -webkit-inline-box; display: -ms-inline-flexbox; display: inline-flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; width: 32px; height: 32px; padding: 0; border: 0; background-color: transparent; border-radius: 6px; cursor: pointer; font-size: 19px; line-height: 1; -webkit-transition: background-color 100ms ease, -webkit-transform 100ms ease; transition: background-color 100ms ease, -webkit-transform 100ms ease; transition: background-color 100ms ease, transform 100ms ease; transition: background-color 100ms ease, transform 100ms ease, -webkit-transform 100ms ease; }


/* === Reduced motion === */
@media (prefers-reduced-motion: reduce) {
  .emoji-picker,
  .msg-emoji-picker,
  .emoji-picker__btn,
  .emoji-picker__tone {
    -webkit-transition: none;
    transition: none;
    -webkit-transform: none !important;
    -ms-transform: none !important;
    transform: none !important;
  }
}

/* ==========================================================================
   AUDIO / VOICE MESSAGE — play button + waveform + duration
   Markup:
     <div class="msg__audio">
       <button class="msg__audio-play"><i class="fa-light fa-play"></i></button>
       <div class="msg__audio-waveform">
         <span></span><span></span>… (random bar heights via inline style)
       </div>
       <span class="msg__audio-duration">0:42</span>
     </div>
   ========================================================================== */
.msg__audio {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.625rem;
  padding-inline: 0.25rem;
  padding-block: 0.25rem;
  min-width: 220px;
}

.msg__audio-play {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: var(--radius-full);
  border-style: var(--tw-border-style, solid);
  border-width: 0px;
  width: 32px;
  height: 32px;
  background-color: var(--bg-msg-audio-play, color-mix(in oklch, currentColor 18%, transparent));
  color: inherit;
  font-size: 12px;
  -webkit-transition: background-color 120ms ease, -webkit-transform 120ms ease;
  transition: background-color 120ms ease, -webkit-transform 120ms ease;
  transition: background-color 120ms ease, transform 120ms ease;
  transition: background-color 120ms ease, transform 120ms ease, -webkit-transform 120ms ease;
}

  .msg__audio-play:hover {
    background-color: var(--bg-msg-audio-play-hover, color-mix(in oklch, currentColor 26%, transparent));
  }

  .msg__audio-play:active {
    -webkit-transform: scale(0.95);
    -ms-transform: scale(0.95);
    transform: scale(0.95);
  }

  .msg__audio-play.is-playing i {
    /* Swap icon to pause via aria; CSS just provides hover affordance */
  }

.msg__audio-waveform {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  height: 2rem;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.125rem;
  min-width: 0;
}

  .msg__audio-waveform > span {
    display: inline-block;
    width: 2px;
    height: var(--bar-h, 40%);
    background-color: currentColor;
    opacity: 0.55;
    border-radius: 1px;
    -webkit-transition: opacity 120ms ease, background-color 120ms ease;
    transition: opacity 120ms ease, background-color 120ms ease;
  }

  .msg__audio-waveform > span.is-played {
    opacity: 1;
  }

.msg__audio-duration {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  font-family: var(--font-mono, 'Space Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace);
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  --tw-numeric-spacing: tabular-nums;
  font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);
  opacity: 0.7;
}


/* ==========================================================================
   VIDEO MESSAGE — thumbnail with play overlay + duration badge
   ========================================================================== */
.msg__video {
  position: relative;
  margin-top: 0.25rem;
  cursor: pointer;
  overflow: hidden;
  border-radius: var(--radius-lg);
  max-width: 280px;
  background-color: var(--bg-overlay);
}

  .msg__video img,
  .msg__video video {
    display: block;
    height: auto;
    width: 100%;
  }

  .msg__video::after {
    content: "\f04b"; /* fa-play */
    font-family: "Font Awesome 6 Pro", "Font Awesome 7 Pro";
    font-weight: 900;
    position: absolute;
    top: 50%;
    left: 50%;
    -webkit-transform: translate(-50%, -50%);
    -ms-transform: translate(-50%, -50%);
    transform: translate(-50%, -50%);
    width: 48px;
    height: 48px;
    border-radius: 9999px;
    background-color: color-mix(in oklch, var(--bg-overlay) 55%, transparent);
    color: var(--text-on-solid);
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
    font-size: 16px;
    -webkit-transition: background-color 120ms ease;
    transition: background-color 120ms ease;
  }

  .msg__video:hover::after {
    background-color: color-mix(in oklch, var(--bg-overlay) 75%, transparent);
  }

.msg__video-duration {
  position: absolute;
  border-radius: var(--radius-sm);
  padding-inline: 0.375rem;
  padding-block: 0.125rem;
  font-family: var(--font-mono, 'Space Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace);
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  bottom: 6px;
  right: 6px;
  background-color: color-mix(in oklch, var(--bg-overlay) 70%, transparent);
  color: var(--text-on-solid);
  font-variant-numeric: tabular-nums;
}


/* ==========================================================================
   FILE MESSAGE — file card (icon + name + size + download)
   ========================================================================== */
.msg__file {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  min-width: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.625rem;
  border-radius: var(--radius-lg);
  border-style: var(--tw-border-style, solid);
  border-width: 1px;
  padding-inline: 0.625rem;
  padding-block: 0.5rem;
  background-color: var(--bg-msg-file, color-mix(in oklch, currentColor 4%, transparent));
  border-color: var(--border-msg-file, color-mix(in oklch, currentColor 12%, transparent));
  max-width: 320px;
}

.msg__file-icon {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: var(--radius-sm);
  width: 34px;
  height: 34px;
  background-color: color-mix(in oklch, currentColor 14%, transparent);
  color: inherit;
  font-size: 14px;
}

.msg__file-body {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  min-width: 0;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 1px;
}

.msg__file-name {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  --tw-font-weight: 500;
  font-weight: 500;
  color: inherit;
}

.msg__file-meta {
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  opacity: 0.7;
}

.msg__file-action {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: var(--radius-md);
  border-style: var(--tw-border-style, solid);
  border-width: 0px;
  background-color: transparent;
  width: 28px;
  height: 28px;
  color: inherit;
  opacity: 0.6;
  font-size: 12px;
  -webkit-transition: opacity 120ms ease, background-color 120ms ease;
  transition: opacity 120ms ease, background-color 120ms ease;
}

  .msg__file-action:hover {
    opacity: 1;
    background-color: color-mix(in oklch, currentColor 12%, transparent);
  }


/* ==========================================================================
   CODE BLOCK MESSAGE — pre + monospace + horizontal scroll
   ========================================================================== */
.msg__code {
  margin-block: 0.25rem;
  overflow-x: auto;
  border-radius: var(--radius-md);
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  background-color: var(--bg-msg-code, color-mix(in oklch, currentColor 6%, transparent));
  border: 1px solid var(--border-msg-code, color-mix(in oklch, currentColor 12%, transparent));
  font-family: var(--font-mono, ui-monospace, SFMono-Regular, monospace);
  line-height: 1.5;
  padding: 8px 10px;
  color: inherit;
}

  .msg__code-lang {
    margin-bottom: 0.25rem;
    display: block;
    font-size: 0.6875rem;
    line-height: var(--tw-leading, 1rem);
    letter-spacing: var(--tw-tracking, 0.01em);
    --tw-font-weight: 600;
    font-weight: 600;
    --tw-tracking: var(--tracking-wider, 0.05em);
    letter-spacing: var(--tracking-wider, 0.05em);
    text-transform: uppercase;
    opacity: 0.55;
  }


/* ==========================================================================
   MESSAGE STATES — edited / deleted / forwarded / sending / failed
   ========================================================================== */

/* Edited — italic "edited" suffix in the time row */
.msg--edited .msg__time::after {
  content: " · edited";
  font-style: italic;
  opacity: 0.7;
}

/* Deleted — replace the bubble with a muted "this message was deleted" */
.msg--deleted .msg__bubble {
  background-color: transparent !important;
  border: 1px dashed var(--border-msg-deleted, color-mix(in oklch, var(--text-primary) 18%, transparent));
  color: var(--text-tertiary);
  font-style: italic;
}

  .msg--deleted .msg__reactions,
  .msg--deleted .msg__attachments,
  .msg--deleted .msg__actions { display: none !important; }

/* Forwarded indicator — small label above the bubble */
.msg__forwarded {
  margin-bottom: 0.25rem;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  padding-inline: 0.25rem;
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  color: var(--text-tertiary);
  font-style: italic;
}

  .msg__forwarded i { font-size: 9px; opacity: 0.7; }

/* Sending state — bubble dimmed, progress bar at bottom */
.msg--sending .msg__bubble {
  opacity: 0.7;
  position: relative;
}

  .msg--sending .msg__bubble::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 2px;
    background: -webkit-gradient(
      linear,
      left top, right top,
      from(transparent),
      color-stop(50%, currentColor),
      to(transparent)
    );
    background: linear-gradient(
      90deg,
      transparent 0%,
      currentColor 50%,
      transparent 100%
    );
    background-size: 200% 100%;
    -webkit-animation: msg-sending-flow 1.4s linear infinite;
    animation: msg-sending-flow 1.4s linear infinite;
    border-bottom-left-radius: inherit;
    border-bottom-right-radius: inherit;
  }

@-webkit-keyframes msg-sending-flow {
  from { background-position: 0% 0; }
  to   { background-position: -200% 0; }
}

@keyframes msg-sending-flow {
  from { background-position: 0% 0; }
  to   { background-position: -200% 0; }
}

/* Failed state — danger border + retry CTA */
.msg--failed .msg__bubble {
  border: 1px solid var(--text-danger);
  background-color: color-mix(in oklch, var(--text-danger) 6%, var(--bg-msg-inbound, var(--bg-secondary-subtle)));
}

.msg__failed-action {
  margin-top: 0.25rem;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  border-style: var(--tw-border-style, solid);
  border-width: 0px;
  background-color: transparent;
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  --tw-font-weight: 600;
  font-weight: 600;
  color: var(--text-danger);
}

  .msg__failed-action:hover { text-decoration: underline; }
  .msg__failed-action i { font-size: 10px; }


/* ==========================================================================
   THREAD REPLY COUNT — inline indicator below a message linking to a thread
   ========================================================================== */
.msg__thread-count {
  margin-top: 0.25rem;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.375rem;
  border-radius: var(--radius-full);
  border-style: var(--tw-border-style, solid);
  border-width: 1px;
  padding-inline: 0.5rem;
  padding-block: 0.25rem;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  --tw-font-weight: 500;
  font-weight: 500;
  background-color: transparent;
  border-color: var(--border-msg-thread, color-mix(in oklch, var(--text-info) 30%, transparent));
  color: var(--text-info);
  -webkit-transition: background-color 120ms ease;
  transition: background-color 120ms ease;
}

  .msg__thread-count:hover {
    background-color: color-mix(in oklch, var(--text-info) 8%, transparent);
  }

  .msg__thread-count i { font-size: 10px; }

  .msg__thread-count-avatars {
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
  }

  .msg__thread-count-avatars > * {
    width: 16px;
    height: 16px;
    border-radius: 9999px;
    margin-left: -4px;
    border: 1.5px solid var(--bg-msg-panel, var(--bg-surface));
    background-color: color-mix(in oklch, currentColor 14%, transparent);
  }

  .msg__thread-count-avatars > *:first-child { margin-left: 0; }


/* ==========================================================================
   STICKER MESSAGE — large media, no bubble chrome
   ========================================================================== */
.msg--sticker .msg__bubble {
  background-color: transparent !important;
  border: 0 !important;
  padding: 0 !important;
  max-height: none !important;
  overflow: visible !important;
}

  .msg--sticker .msg__bubble img,
  .msg--sticker .msg__bubble svg {
    max-width: 140px;
    max-height: 140px;
    display: block;
  }


/* ==========================================================================
   AVATAR STATUS — small online/away/offline dot overlaid on avatar
   ========================================================================== */
.msg__avatar {
  position: relative;
}

.msg__avatar-status {
  position: absolute;
  display: inline-block;
  border-radius: var(--radius-full);
  width: 9px;
  height: 9px;
  bottom: -1px;
  right: -1px;
  background-color: var(--text-tertiary);
  border: 2px solid var(--bg-msg-panel, var(--bg-surface));
  z-index: 1;
}

  .msg__avatar-status--online  { background-color: var(--bg-success-solid); }
  .msg__avatar-status--away    { background-color: var(--bg-warning-solid); }
  .msg__avatar-status--busy    { background-color: var(--text-danger); }
  .msg__avatar-status--offline { background-color: var(--text-tertiary); }


/* ==========================================================================
   READ RECEIPTS — "seen by" mini avatar row below outbound messages
   ========================================================================== */
.msg__seen-by {
  margin-top: 0.25rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
  gap: 0.125rem;
  padding-inline: 0.25rem;
}

  .msg__seen-by-label {
    margin-right: 0.25rem;
    font-size: 0.6875rem;
    line-height: var(--tw-leading, 1rem);
    letter-spacing: var(--tw-tracking, 0.01em);
    color: var(--text-tertiary);
  }

  .msg__seen-by > .avatar,
  .msg__seen-by-avatar {
    width: 14px;
    height: 14px;
    border-radius: 9999px;
    border: 1.5px solid var(--bg-msg-panel, var(--bg-surface));
    margin-left: -4px;
    background-color: color-mix(in oklch, var(--text-primary) 14%, transparent);
    overflow: hidden;
  }

  .msg__seen-by > .avatar:first-child,
  .msg__seen-by-avatar:first-child { margin-left: 0; }

  .msg__seen-by-more {
    margin-left: 0.25rem;
    font-size: 0.6875rem;
    line-height: var(--tw-leading, 1rem);
    letter-spacing: var(--tw-tracking, 0.01em);
    color: var(--text-tertiary);
  }


/* ==========================================================================
   SELECTION MODE — multi-select messages for bulk actions
   ========================================================================== */
.msg-panel--selecting .msg {
  cursor: pointer;
  padding-left: 32px;
  position: relative;
}

.msg-panel--selecting .msg::before {
  content: "";
  position: absolute;
  left: 8px;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
  width: 16px;
  height: 16px;
  border-radius: var(--radius-sm);
  border: 1.5px solid var(--border-divider, color-mix(in oklch, var(--text-primary) 22%, transparent));
  background-color: var(--bg-surface);
  -webkit-transition: background-color 120ms ease, border-color 120ms ease;
  transition: background-color 120ms ease, border-color 120ms ease;
}

.msg-panel--selecting .msg.is-selected::before {
  background-color: var(--bg-brand-solid);
  border-color: var(--bg-brand-solid);
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><path d='M20 6L9 17l-5-5'/></svg>");
  background-repeat: no-repeat;
  background-position: center;
}

.msg-panel--selecting .msg.is-selected {
  background-color: color-mix(in oklch, var(--bg-brand-solid) 4%, transparent);
}


/* ==========================================================================
   QUICK REPLIES — preset reply chips below the composer
   ========================================================================== */
.msg-quick-replies {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.375rem;
  border-top-style: var(--tw-border-style, solid);
  border-top-width: 1px;
  padding-inline: 0.75rem;
  padding-block: 0.5rem;
  border-color: var(--border-msg-composer-attachments, var(--border-secondary-subtle));
  background-color: var(--bg-msg-panel, var(--bg-surface));
}

.msg-quick-reply {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.375rem;
  border-radius: var(--radius-full);
  border-style: var(--tw-border-style, solid);
  border-width: 1px;
  padding-inline: 0.625rem;
  padding-block: 0.25rem;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  background-color: var(--bg-secondary-subtle, color-mix(in oklch, var(--text-primary) 5%, transparent));
  border-color: transparent;
  color: var(--text-primary);
  -webkit-transition: background-color 120ms ease, border-color 120ms ease;
  transition: background-color 120ms ease, border-color 120ms ease;
}

  .msg-quick-reply:hover {
    background-color: color-mix(in oklch, var(--text-primary) 10%, transparent);
  }

  .msg-quick-reply i {
    font-size: 10px;
    opacity: 0.7;
  }


/* ==========================================================================
   VOICE RECORDING STATE — composer transforms during recording
   Apply .msg-composer--recording on the composer element.
   ========================================================================== */
.msg-composer--recording {
  /* Recording overrides the inset ring with a danger ring (composer has no
     CSS border under the pilot ring model). */
  -webkit-box-shadow: inset 0 0 0 2px var(--text-danger), var(--shadow-xs);
  box-shadow: inset 0 0 0 2px var(--text-danger), var(--shadow-xs);
}

.msg-composer__recording {
  display: none;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.75rem;
  padding-inline: 0.75rem;
  padding-block: 0.5rem;
}

  .msg-composer--recording .msg-composer__recording {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
  }

  .msg-composer--recording .msg-composer__body,
  .msg-composer--recording .msg-composer__toolbar {
    display: none;
  }

  .msg-composer__recording-dot {
    display: inline-block;
    height: 0.5rem;
    width: 0.5rem;
    -ms-flex-negative: 0;
    flex-shrink: 0;
    border-radius: var(--radius-full);
    background-color: var(--text-danger);
    -webkit-animation: msg-recording-pulse 1.4s ease-in-out infinite;
    animation: msg-recording-pulse 1.4s ease-in-out infinite;
  }

  .msg-composer__recording-waveform {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    height: 1.5rem;
    -webkit-box-flex: 1;
    -ms-flex: 1;
    flex: 1;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    gap: 0.125rem;
  }

    .msg-composer__recording-waveform > span {
      display: inline-block;
      width: 2px;
      background-color: var(--text-danger);
      border-radius: 1px;
      -webkit-animation: msg-recording-bar 0.8s ease-in-out infinite;
      animation: msg-recording-bar 0.8s ease-in-out infinite;
    }

  .msg-composer__recording-time {
    font-family: var(--font-mono, 'Space Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace);
    font-size: 0.75rem;
    line-height: var(--tw-leading, 1.125rem);
    --tw-numeric-spacing: tabular-nums;
    font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);
    color: var(--text-danger);
  }

  .msg-composer__recording-actions {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    gap: 0.25rem;
  }

@-webkit-keyframes msg-recording-pulse {
  0%, 100% { opacity: 1; -webkit-transform: scale(1); transform: scale(1); }
  50%      { opacity: 0.4; -webkit-transform: scale(0.7); transform: scale(0.7); }
}

@keyframes msg-recording-pulse {
  0%, 100% { opacity: 1; -webkit-transform: scale(1); transform: scale(1); }
  50%      { opacity: 0.4; -webkit-transform: scale(0.7); transform: scale(0.7); }
}

@-webkit-keyframes msg-recording-bar {
  0%, 100% { height: 30%; }
  50%      { height: 100%; }
}

@keyframes msg-recording-bar {
  0%, 100% { height: 30%; }
  50%      { height: 100%; }
}

@media (prefers-reduced-motion: reduce) {
  .msg-composer__recording-dot,
  .msg-composer__recording-waveform > span { -webkit-animation: none; animation: none; }
}


/* ==========================================================================
   MENTION / SLASH COMMAND AUTOCOMPLETE — floating list above the composer
   Markup:
     <div class="msg-composer-autocomplete is-open">
       <div class="msg-composer-autocomplete__hint">Mention a person</div>
       <ul>
         <li class="msg-composer-autocomplete__item is-active">…</li>
       </ul>
     </div>
   ========================================================================== */
.msg-composer-autocomplete {
  position: absolute;
  z-index: 50;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  overflow: hidden;
  border-radius: var(--radius-lg);
  border-style: var(--tw-border-style, solid);
  border-width: 1px;
  --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
  -webkit-box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
  box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
  bottom: calc(100% + 6px);
  left: 0;
  right: 0;
  background-color: var(--bg-popover, var(--bg-card));
  border-color: var(--border-popover, var(--border-divider));
  display: none;
  max-height: 240px;
}

  .msg-composer-autocomplete.is-open {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
  }

  .msg-composer-autocomplete__hint {
    padding-inline: 0.75rem;
    padding-block: 0.375rem;
    font-size: 0.6875rem;
    line-height: var(--tw-leading, 1rem);
    letter-spacing: var(--tw-tracking, 0.01em);
    --tw-font-weight: 600;
    font-weight: 600;
    --tw-tracking: var(--tracking-wider, 0.05em);
    letter-spacing: var(--tracking-wider, 0.05em);
    text-transform: uppercase;
    color: var(--text-tertiary);
    background-color: color-mix(in oklch, var(--text-primary) 3%, transparent);
  }

  .msg-composer-autocomplete > ul {
    margin: 0;
    list-style-type: none;
    overflow-y: auto;
    padding: 0;
    scrollbar-width: thin;
  }

.msg-composer-autocomplete__item {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;
  padding-inline: 0.75rem;
  padding-block: 0.5rem;
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  -webkit-transition: background-color 100ms ease;
  transition: background-color 100ms ease;
}

  .msg-composer-autocomplete__item:hover,
  .msg-composer-autocomplete__item.is-active {
    /* Active list selection uses the composer's brand accent (pilot), not info. */
    background-color: color-mix(in oklch, var(--border-focus) 10%, transparent);
  }

  .msg-composer-autocomplete__item-icon,
  .msg-composer-autocomplete__item-avatar {
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    -ms-flex-negative: 0;
    flex-shrink: 0;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
    overflow: hidden;
    border-radius: var(--radius-full);
    width: 22px;
    height: 22px;
    font-size: 11px;
    background-color: color-mix(in oklch, var(--text-primary) 10%, transparent);
    color: var(--text-secondary);
  }

  .msg-composer-autocomplete__item-name {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    --tw-font-weight: 500;
    font-weight: 500;
    -webkit-box-flex: 1;
    -ms-flex: 1;
    flex: 1;
  }

  .msg-composer-autocomplete__item-meta {
    -ms-flex-negative: 0;
    flex-shrink: 0;
    font-size: 0.75rem;
    line-height: var(--tw-leading, 1.125rem);
    color: var(--text-tertiary);
  }


/* ==========================================================================
   SCROLL-TO-BOTTOM FAB + NEW MESSAGES STICKY PILL
   ========================================================================== */
.msg-panel__thread {
  position: relative;
}

.msg-panel__scroll-bottom {
  position: absolute;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: var(--radius-full);
  border-style: var(--tw-border-style, solid);
  border-width: 0px;
  width: 36px;
  height: 36px;
  bottom: 16px;
  right: 16px;
  background-color: var(--bg-card);
  border: 1px solid var(--border-divider);
  color: var(--text-secondary);
  font-size: 13px;
  -webkit-box-shadow:
    0 4px 12px -2px color-mix(in oklch, var(--text-primary) 18%, transparent),
    0 2px 4px -1px color-mix(in oklch, var(--text-primary) 10%, transparent);
  box-shadow:
    0 4px 12px -2px color-mix(in oklch, var(--text-primary) 18%, transparent),
    0 2px 4px -1px color-mix(in oklch, var(--text-primary) 10%, transparent);
  opacity: 0;
  pointer-events: none;
  -webkit-transform: translateY(6px);
  -ms-transform: translateY(6px);
  transform: translateY(6px);
  -webkit-transition: opacity 150ms ease, -webkit-transform 150ms ease;
  transition: opacity 150ms ease, -webkit-transform 150ms ease;
  transition: opacity 150ms ease, transform 150ms ease;
  transition: opacity 150ms ease, transform 150ms ease, -webkit-transform 150ms ease;
  z-index: 10;
}

  .msg-panel.has-scroll-fab .msg-panel__scroll-bottom {
    opacity: 1;
    pointer-events: auto;
    -webkit-transform: translateY(0);
    -ms-transform: translateY(0);
    transform: translateY(0);
  }

  .msg-panel__scroll-bottom:hover {
    background-color: color-mix(in oklch, var(--text-primary) 5%, var(--bg-card));
  }

  /* Unread count badge on the FAB */
  .msg-panel__scroll-bottom-count {
    position: absolute;
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
    border-radius: var(--radius-full);
    font-size: 0.6875rem;
    line-height: var(--tw-leading, 1rem);
    letter-spacing: var(--tw-tracking, 0.01em);
    --tw-font-weight: 700;
    font-weight: 700;
    top: -4px;
    right: -4px;
    min-width: 18px;
    height: 18px;
    padding: 0 5px;
    background-color: var(--bg-danger-solid);
    color: var(--text-on-solid);
    border: 2px solid var(--bg-msg-panel, var(--bg-surface));
  }


/* New-messages sticky pill — anchored at top of thread when user has unread above */
.msg-panel__new-pill {
  position: absolute;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.375rem;
  border-radius: var(--radius-full);
  border-style: var(--tw-border-style, solid);
  border-width: 0px;
  padding-inline: 0.75rem;
  padding-block: 0.25rem;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  --tw-font-weight: 600;
  font-weight: 600;
  top: 12px;
  left: 50%;
  -webkit-transform: translateX(-50%) translateY(-8px);
  -ms-transform: translateX(-50%) translateY(-8px);
  transform: translateX(-50%) translateY(-8px);
  background-color: var(--bg-brand-solid);
  color: var(--text-on-brand);
  -webkit-box-shadow: 0 4px 12px -2px color-mix(in oklch, var(--bg-brand-solid) 30%, transparent);
  box-shadow: 0 4px 12px -2px color-mix(in oklch, var(--bg-brand-solid) 30%, transparent);
  opacity: 0;
  pointer-events: none;
  -webkit-transition: opacity 150ms ease, -webkit-transform 150ms ease;
  transition: opacity 150ms ease, -webkit-transform 150ms ease;
  transition: opacity 150ms ease, transform 150ms ease;
  transition: opacity 150ms ease, transform 150ms ease, -webkit-transform 150ms ease;
  z-index: 10;
}

  .msg-panel.has-new-pill .msg-panel__new-pill {
    opacity: 1;
    pointer-events: auto;
    -webkit-transform: translateX(-50%) translateY(0);
    -ms-transform: translateX(-50%) translateY(0);
    transform: translateX(-50%) translateY(0);
  }


/* ==========================================================================
   DROP ZONE OVERLAY — full-panel overlay when dragging files into thread
   Toggled via .msg-panel--drag-over on the panel.
   ========================================================================== */
.msg-panel__drop-zone {
  pointer-events: none;
  position: absolute;
  inset: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 0.75rem;
  border-radius: var(--radius-lg);
  background-color: color-mix(in oklch, var(--border-focus) 12%, var(--bg-surface));
  border: 2px dashed var(--border-focus);
  z-index: 20;
  opacity: 0;
  -webkit-transition: opacity 120ms ease;
  transition: opacity 120ms ease;
}

  .msg-panel.is-drag-over .msg-panel__drop-zone {
    opacity: 1;
  }

  .msg-panel__drop-zone-icon {
    font-size: 32px;
    color: var(--border-focus);
  }

  .msg-panel__drop-zone-title {
    font-size: 0.8125rem;
    line-height: var(--tw-leading, 1.25rem);
    --tw-font-weight: 600;
    font-weight: 600;
    color: var(--border-focus);
  }

  .msg-panel__drop-zone-hint {
    font-size: 0.75rem;
    line-height: var(--tw-leading, 1.125rem);
    color: var(--text-secondary);
  }


/* ==========================================================================
   REDUCED MOTION
   ========================================================================== */

@media (prefers-reduced-motion: reduce) {
  .msg-typing__dot {
    -webkit-animation: none;
    animation: none;
    opacity: 0.6;
  }

  .msg-reaction-picker,
  .msg-panel__scroll-bottom,
  .msg-panel__new-pill {
    -webkit-transition: none;
    transition: none;
  }

  .msg--sending .msg__bubble::after {
    -webkit-animation: none;
    animation: none;
    background: currentColor;
    opacity: 0.4;
  }
}


/* ==========================================================================
   KEYBOARD FOCUS — one 2px brand ring on every interactive control
   Pilot primitive: a SINGLE 2px ring in the brand accent (--border-focus),
   offset 2px, no info-blue and no second halo. Every focusable control that
   does not already carry a field-style inset ring is covered here so keyboard
   users get a visible, WCAG-AA (>=3:1) focus indicator in light AND dark.
   ========================================================================== */
.msg__action-btn:focus-visible,
.msg-reaction:focus-visible,
.msg-reaction-picker__btn:focus-visible,
.msg-composer__tool-btn:focus-visible,
.msg-composer__send:focus-visible,
.msg-composer__reply-close:focus-visible,
.msg-composer__attachment-remove:focus-visible,
.msg__audio-play:focus-visible,
.msg__file-action:focus-visible,
.msg__failed-action:focus-visible,
.msg__thread-count:focus-visible,
.msg__mention:focus-visible,
.msg-conversation-item:focus-visible,
.msg-quick-reply:focus-visible,
.msg-pinned:focus-visible,
.msg-panel__scroll-bottom:focus-visible,
.msg-panel__new-pill:focus-visible,
.emoji-picker__tone:focus-visible,
.emoji-picker__category-btn:focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: 2px;
}

/* Conversation rows sit flush against their neighbours — pull the ring inward
   so it is not clipped by the adjacent row's border. */
.msg-conversation-item:focus-visible {
  outline-offset: -2px;
}   /* tq-9030 (A141): THE messaging component, imported in place (converged under A143's ratchet; the app copy is gone) */
/* =========================================================
   Node Editor — Graph Canvas Component
   A zoomable, pannable canvas with draggable nodes,
   connectors, snap alignment, and timeline mode.
   ========================================================= */

/* ---------------------------------------------------------
   Canvas
   --------------------------------------------------------- */
.ne-canvas {
  position: relative;
  overflow: hidden;
  width: 100%;
  height: 100%;
  min-height: 480px;
  border-radius: 8px;
  border: 1px solid var(--border-primary);
  background-color: var(--bg-surface, var(--canvas-secondary));
  cursor: -webkit-grab;
  cursor: grab;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-user-select: none;
  -ms-touch-action: none;
  touch-action: none;
}

.ne-canvas:active:not(.ne-canvas--connecting) {
  cursor: -webkit-grabbing;
  cursor: grabbing;
}

/* Dot grid background */

/* Transform layer — holds nodes and SVG */

/* SVG connector layer */

/* ---------------------------------------------------------
   Toolbar
   --------------------------------------------------------- */

/* Zoom display */

/* ---------------------------------------------------------
   Minimap
   --------------------------------------------------------- */

/* ---------------------------------------------------------
   Node
   --------------------------------------------------------- */
.ne-node {
  position: absolute;
  min-width: 180px;
  max-width: 280px;
  border-radius: 8px;
  background-color: var(--bg-surface, var(--canvas-secondary));
  border: 1.5px solid var(--border-primary);
  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 2px rgba(0, 0, 0, 0.03);
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 2px rgba(0, 0, 0, 0.03);
  cursor: -webkit-grab;
  cursor: grab;
  -webkit-transition: border-color 150ms ease, -webkit-box-shadow 150ms ease;
  transition: border-color 150ms ease, -webkit-box-shadow 150ms ease;
  transition: box-shadow 150ms ease, border-color 150ms ease;
  transition: box-shadow 150ms ease, border-color 150ms ease, -webkit-box-shadow 150ms ease;
  z-index: 1;
}

.ne-node:hover {
  border-color: var(--border-primary-hover);
  -webkit-box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08), 0 1px 3px rgba(0, 0, 0, 0.05);
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08), 0 1px 3px rgba(0, 0, 0, 0.05);
  z-index: 2;
}

.ne-node:active {
  cursor: -webkit-grabbing;
  cursor: grabbing;
}

.ne-node.is-selected {
  border-color: var(--text-info);
  -webkit-box-shadow: 0 0 0 2px var(--bg-info), 0 2px 8px rgba(0, 0, 0, 0.08);
  box-shadow: 0 0 0 2px var(--bg-info), 0 2px 8px rgba(0, 0, 0, 0.08);
  z-index: 3;
}

.ne-node.is-dragging {
  -webkit-box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12), 0 2px 8px rgba(0, 0, 0, 0.06);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12), 0 2px 8px rgba(0, 0, 0, 0.06);
  z-index: 10;
  -webkit-transition: none;
  transition: none;
}

.ne-node.is-snapping {
  -webkit-transition: none;
  transition: none;
}

/* Node color accent (top border stripe) */
.ne-node[data-color="blue"]    { border-top: 3px solid var(--text-info); }
.ne-node[data-color="green"]   { border-top: 3px solid var(--text-success); }
.ne-node[data-color="purple"]  { border-top: 3px solid var(--text-purple); }
.ne-node[data-color="orange"]  { border-top: 3px solid var(--text-warning); }
.ne-node[data-color="red"]     { border-top: 3px solid var(--text-danger); }
.ne-node[data-color="teal"]    { border-top: 3px solid var(--text-teal); }
.ne-node[data-color="pink"]    { border-top: 3px solid var(--text-pink); }
.ne-node[data-color="indigo"]  { border-top: 3px solid var(--text-indigo); }

/* Node header */

/* Node body / metadata */

/* ---------------------------------------------------------
   Ports (connection handles)
   --------------------------------------------------------- */

/* ---------------------------------------------------------
   Connectors (SVG paths)
   --------------------------------------------------------- */
.ne-connector {
  fill: none;
  stroke: var(--border-primary-solid);
  stroke-width: 2;
  stroke-linecap: round;
  -webkit-transition: stroke 150ms ease, stroke-width 150ms ease;
  transition: stroke 150ms ease, stroke-width 150ms ease;
}

.ne-connector:hover {
  stroke: var(--text-info);
  stroke-width: 2.5;
}

.ne-connector.is-selected {
  stroke: var(--text-info);
  stroke-width: 2.5;
}

/* Connector arrowheads */

/* ---------------------------------------------------------
   Snap alignment guides
   --------------------------------------------------------- */

/* Snap distance indicator */

/* ---------------------------------------------------------
   Selection box (marquee)
   --------------------------------------------------------- */

/* ---------------------------------------------------------
   Timeline mode
   --------------------------------------------------------- */

/* Timeline node variant */

/* ---------------------------------------------------------
   Status badge / info bar at bottom
   --------------------------------------------------------- */

/* ---------------------------------------------------------
   Reduced motion
   --------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  .ne-node,
  .ne-connector {
    -webkit-transition: none;
    transition: none;
  }
}
/* ========================================
   Component: Activity Feed
   ======================================== */

.activity-feed {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
}

.activity-feed__group {
  padding-left: 0.75rem;
  padding-right: 0.75rem;
  padding-top: 0.375rem;
  padding-bottom: 0.375rem;
  font-size: 0.6875rem;
  line-height: 1rem;
  letter-spacing: 0.025em;
  font-weight: 500;
  text-transform: uppercase;
  position: sticky;
  top: 0;
  color: var(--text-tertiary);
  background-color: var(--bg-surface);
}

.activity-feed__item {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  gap: 0.75rem;
  padding-left: 0.75rem;
  padding-right: 0.75rem;
  padding-top: 0.625rem;
  padding-bottom: 0.625rem;
  border-bottom-style: solid;
  border-bottom-width: 1px;
  border-color: var(--border-activity-feed-item, var(--border-secondary));
  background-color: var(--bg-activity-feed-item, var(--bg-surface));
  -webkit-transition: background-color var(--duration-fast, 100ms) var(--ease-default, ease);
  transition: background-color var(--duration-fast, 100ms) var(--ease-default, ease);
}

/* tq-9499 (A276, isabella 900076474): the list's LAST row has no divider. A line under it sits right above the container's
   bottom edge / padding (a card, a panel) and reads as a stray double line (a border collision). --cards keeps its full
   border (its own rule below sets every side); --timeline and --connected rows have none anyway. */
.activity-feed__item:last-child {
  border-bottom-width: 0;
}

/* Hover is OPT-IN (tq-8406, isabella 900051541): a highlight on a row you can't click is a false affordance, so a plain
   feed stays still (history, audit) and only .activity-feed--interactive (every row is clickable) highlights on hover,
   shows the pointer, and rings the row's link / button on keyboard focus. */
.activity-feed--interactive .activity-feed__item {
  cursor: pointer;
}

.activity-feed--interactive .activity-feed__item:hover {
  background-color: var(--bg-activity-feed-item-hover, var(--bg-primary-hover));
}

.activity-feed--interactive .activity-feed__item :is(a, button):focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: 2px;
}

.activity-feed__item--unread {
  background-color: var(--bg-activity-feed-item-unread, var(--bg-info-subtle));
}

.activity-feed__avatar {
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

.activity-feed__content {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
  /* tq-9499 (A276): a long unbroken token (a URL, a pasted reference) wraps inside the content column instead of
     running under the time / past the row; min-width 0 alone only lets the column shrink */
  overflow-wrap: anywhere;
}

.activity-feed__action {
  font-size: 0.75rem;
  line-height: 1.125rem;
  color: var(--text-activity-feed-action, var(--text-secondary));
}

.activity-feed__target {
  font-weight: 500;
  color: var(--text-activity-feed-target, var(--text-link));
}

.activity-feed__meta {
  font-size: 0.6875rem;
  line-height: 1rem;
  letter-spacing: 0.01em;
  margin-top: 0.125rem;
  color: var(--text-activity-feed-meta, var(--text-tertiary));
}

/* Compact */
.activity-feed--compact .activity-feed__item {
  padding-top: 0.375rem;
  padding-bottom: 0.375rem;
  gap: 0.5rem;
}

/* Timeline variant (with connector) */
.activity-feed--timeline {
  position: relative;
  padding-left: 2rem;
}

.activity-feed--timeline .activity-feed__item {
  position: relative;
  border-bottom-style: solid;
  border-bottom-width: 0;
  padding-left: 0;
}

.activity-feed--timeline .activity-feed__item::before {
  content: "";
  position: absolute;
  left: 0;
  width: 2.4px;
  top: 0;
  bottom: 0;
  -webkit-transform: translateX(4px);
  -ms-transform: translateX(4px);
  transform: translateX(4px);
  /* dotted connector — matches the UUI connector model (see __connector) */
  background-image: radial-gradient(circle at center, var(--border-activity-feed-connector, var(--border-primary)) 1.2px, transparent 1.35px);
  background-position: center top;
  background-size: 2.4px 6px;
  background-repeat: repeat-y;
}

.activity-feed--timeline .activity-feed__item:last-child::before {
  display: none;
}

/* ========================================
   Rich Activity Feed Extensions
   ======================================== */

/* --- Icon variant (event type icon instead of avatar) --- */
.activity-feed__icon {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 2rem;
  height: 2rem;
  border-radius: 9999px;
  font-size: 0.75rem;
  line-height: 1.125rem;
  background-color: var(--bg-tertiary-subtle);
  color: var(--text-secondary);
}

.activity-feed__icon--success {
  background-color: var(--bg-success-subtle);
  color: var(--text-success);
}

.activity-feed__icon--danger {
  background-color: var(--bg-danger-subtle);
  color: var(--text-danger);
}

.activity-feed__icon--warning {
  background-color: var(--bg-warning-subtle);
  color: var(--text-warning);
}

.activity-feed__icon--info {
  background-color: var(--bg-info-subtle);
  color: var(--text-info);
}

.activity-feed__icon--primary {
  background-color: var(--bg-primary-subtle);
  color: var(--text-primary-solid);
}

/* --- Rich body content --- */
.activity-feed__body {
  font-size: 0.75rem;
  line-height: 1.625;
  margin-top: 0.25rem;
  color: var(--text-secondary);
}

/* --- Inline attachments --- */
.activity-feed__attachments {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  gap: 0.375rem;
  margin-top: 0.375rem;
}

.activity-feed__attachment {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  padding-left: 0.5rem;
  padding-right: 0.5rem;
  padding-top: 0.125rem;
  padding-bottom: 0.125rem;
  border-radius: 0.25rem;
  border-style: solid;
  border-width: 1px;
  font-size: 0.6875rem;
  line-height: 1rem;
  letter-spacing: 0.01em;
  background-color: var(--bg-tertiary-subtle);
  border-color: var(--border-secondary);
  color: var(--text-secondary);
}

/* --- Inline actions --- */
.activity-feed__actions {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;
  margin-top: 0.375rem;
}

.activity-feed__action-btn {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  font-size: 0.6875rem;
  line-height: 1rem;
  letter-spacing: 0.01em;
  font-weight: 500;
  cursor: pointer;
  border-style: solid;
  border-width: 0;
  background-color: transparent;
  color: var(--text-tertiary);
  -webkit-transition: color 100ms ease;
  transition: color 100ms ease;
}

.activity-feed__action-btn:hover {
  color: var(--text-primary);
}

/* --- Priority / Important highlight --- */
.activity-feed__item--important {
  border-left: 3px solid var(--bg-danger-solid);
  border-start-start-radius: var(--radius-colored-edge, 0px);
  border-end-start-radius: var(--radius-colored-edge, 0px);
}

.activity-feed__item--important .activity-feed__action {
  font-weight: 500;
  color: var(--text-primary);
}

/* --- System event styling (muted) --- */
.activity-feed__item--system {
  background-color: var(--bg-tertiary-subtle);
}

.activity-feed__item--system .activity-feed__action {
  font-style: italic;
  color: var(--text-tertiary);
}

/* --- Expandable item --- */
.activity-feed__expand {
  font-size: 0.6875rem;
  line-height: 1rem;
  letter-spacing: 0.01em;
  font-weight: 500;
  cursor: pointer;
  border-style: solid;
  border-width: 0;
  background-color: transparent;
  margin-top: 0.25rem;
  color: var(--text-link);
}

.activity-feed__expand:hover {
  text-decoration: underline;
}

.activity-feed__detail {
  display: none;
  margin-top: 0.375rem;
  font-size: 0.75rem;
  line-height: 1.125rem;
  color: var(--text-secondary);
}

.activity-feed__detail.is-expanded {
  display: block;
}

/* --- Card variant (each item gets card treatment) --- */
.activity-feed--cards .activity-feed__item {
  border-radius: 0.5rem;
  border-style: solid;
  border-width: 1px;
  margin-bottom: 0.5rem;
  border-bottom-style: solid;
  border-bottom-width: 1px;
  background-color: var(--bg-card);
  border-color: var(--border-card);
}

.activity-feed--cards .activity-feed__item:hover {
  border-color: var(--border-primary);
}


/* ==========================================================================
   THREADED — parent-child reply nesting
   ========================================================================== */
.activity-feed__replies {
  margin-left: 2rem;
  padding-left: 0.75rem;
  margin-top: 0.25rem;
  border-left: 2px solid var(--border-primary-subtle);
}

  .activity-feed__replies .activity-feed__item {
    padding-top: 0.375rem;
    padding-bottom: 0.375rem;
  }


/* ==========================================================================
   NEW ITEM — highlight animation for real-time updates
   ========================================================================== */
@-webkit-keyframes feed-item-appear {
  from {
    opacity: 0;
    -webkit-transform: translateY(-8px);
    transform: translateY(-8px);
  }
  to {
    opacity: 1;
    -webkit-transform: translateY(0);
    transform: translateY(0);
  }
}
@keyframes feed-item-appear {
  from {
    opacity: 0;
    -webkit-transform: translateY(-8px);
    transform: translateY(-8px);
  }
  to {
    opacity: 1;
    -webkit-transform: translateY(0);
    transform: translateY(0);
  }
}

.activity-feed__item.is-new {
  -webkit-animation: feed-item-appear 300ms ease both;
  animation: feed-item-appear 300ms ease both;
}

  .activity-feed__item.is-new::before {
    content: "";
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 0.125rem;
    border-radius: 9999px;
    background-color: var(--bg-info-solid);
  }

@media (prefers-reduced-motion: reduce) {
  .activity-feed__item.is-new {
    -webkit-animation: none;
    animation: none;
  }
}


/* ==========================================================================
   SKELETON — loading placeholder items
   ========================================================================== */
.activity-feed__item--skeleton .activity-feed__icon {
  background: var(--bg-skeleton);
}

:where(.activity-feed__item--skeleton .activity-feed__content > :not(:last-child)) {
  -webkit-margin-before: 0;
  margin-block-start: 0;
  -webkit-margin-after: 0.375rem;
  margin-block-end: 0.375rem;
}


/* ==========================================================================
   DENSE — ultra-compact for narrow panels
   ========================================================================== */
.activity-feed--dense .activity-feed__item {
  padding-top: 0.25rem;
  padding-bottom: 0.25rem;
  padding-left: 0.5rem;
  padding-right: 0.5rem;
  gap: 0.5rem;
}

  .activity-feed--dense .activity-feed__icon {
    width: 1.25rem;
    height: 1.25rem;
    font-size: 0.6875rem;
    line-height: 1rem;
    letter-spacing: 0.01em;
  }

  .activity-feed--dense .activity-feed__content {
    font-size: 0.6875rem;
    line-height: 1rem;
    letter-spacing: 0.01em;
  }

  .activity-feed--dense .activity-feed__avatar img,
  .activity-feed--dense .activity-feed__avatar .avatar {
    width: 1.25rem;
    height: 1.25rem;
  }


/* ──────────────────────────────────────────────────────────────────
   ENHANCEMENTS
   ────────────────────────────────────────────────────────────────── */

/* Pinned / starred items — anchored to the top, with a leading bookmark accent */
.activity-feed__item--pinned {
  background-color: var(--bg-activity-feed-pinned, var(--bg-warning-subtle));
  border-left: 3px solid var(--text-warning, var(--bg-warning-solid));
  border-start-start-radius: var(--radius-colored-edge, 0px);
  border-end-start-radius: var(--radius-colored-edge, 0px);
}

.activity-feed__item--pinned::after {
  content: "\f02e"; /* fa-bookmark */
  font-family: "Font Awesome 7 Pro", "Font Awesome 6 Pro", "Font Awesome 6 Free", sans-serif;
  font-weight: 900;
  position: absolute;
  top: 8px;
  right: 8px;
  font-size: 10px;
  color: var(--text-warning);
}

.activity-feed__item--pinned {
  position: relative;
}

/* Line-clamp on action / body so long entries stay readable */
.activity-feed__action {
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.activity-feed__body {
  display: -webkit-box;
  -webkit-line-clamp: 4;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.activity-feed__item.is-expanded .activity-feed__action,
.activity-feed__item.is-expanded .activity-feed__body,
.activity-feed--no-clamp .activity-feed__action,
.activity-feed--no-clamp .activity-feed__body {
  -webkit-line-clamp: unset;
  overflow: visible;
}


/* Reply / thread depth cap — visual progress without runaway indentation */
.activity-feed__replies .activity-feed__replies {
  margin-left: 1rem;
  padding-left: 0.5rem;
}

.activity-feed__replies .activity-feed__replies .activity-feed__replies {
  margin-left: 0.5rem;
  padding-left: 0.5rem;
  border-left-style: dashed;
}

.activity-feed__replies .activity-feed__replies .activity-feed__replies .activity-feed__replies {
  margin-left: 0;
  padding-left: 0.5rem;
  /* Cap at depth 4 — beyond this, nest under a "show more replies" affordance */
}


/* Loading state on action buttons */
.activity-feed__action-btn.is-loading {
  opacity: 0.7;
  cursor: progress;
  pointer-events: none;
}

.activity-feed__action-btn.is-loading::before {
  content: "";
  display: inline-block;
  width: 10px;
  height: 10px;
  border: 1.5px solid currentColor;
  border-right-color: transparent;
  border-radius: 999px;
  -webkit-animation: feed-action-spin 0.7s linear infinite;
  animation: feed-action-spin 0.7s linear infinite;
  margin-right: 4px;
}

@-webkit-keyframes feed-action-spin {
  to { -webkit-transform: rotate(360deg); transform: rotate(360deg); }
}

@keyframes feed-action-spin {
  to { -webkit-transform: rotate(360deg); transform: rotate(360deg); }
}

@media (prefers-reduced-motion: reduce) {
  .activity-feed__action-btn.is-loading::before { -webkit-animation: none; animation: none; }
}


/* "Load more" anchor at the bottom of a virtualised feed */
.activity-feed__load-more {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 0.5rem;
  padding-top: 0.75rem;
  padding-bottom: 0.75rem;
  font-size: 0.75rem;
  line-height: 1.125rem;
  cursor: pointer;
  color: var(--text-tertiary);
  background-color: transparent;
  border: 0;
  border-top: 1px solid var(--border-secondary);
  width: 100%;
  -webkit-transition: background-color 100ms ease, color 100ms ease;
  transition: background-color 100ms ease, color 100ms ease;
}

.activity-feed__load-more:hover {
  background-color: var(--bg-activity-feed-item-hover, var(--bg-primary-hover));
  color: var(--text-primary);
}

.activity-feed__load-more.is-loading::before {
  content: "";
  display: inline-block;
  width: 12px;
  height: 12px;
  border: 1.5px solid currentColor;
  border-right-color: transparent;
  border-radius: 999px;
  -webkit-animation: feed-action-spin 0.7s linear infinite;
  animation: feed-action-spin 0.7s linear infinite;
}

@media (prefers-reduced-motion: reduce) {
  .activity-feed__load-more.is-loading::before { -webkit-animation: none; animation: none; }
}


/* Floating "X new" indicator that surfaces above the feed when real-time
   updates arrive and the user has scrolled past the top */
.activity-feed__new-indicator {
  position: absolute;
  top: 0.5rem;
  left: 50%;
  z-index: 10;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  padding-left: 0.75rem;
  padding-right: 0.75rem;
  padding-top: 0.25rem;
  padding-bottom: 0.25rem;
  border-radius: 9999px;
  cursor: pointer;
  font-size: 0.75rem;
  line-height: 1.125rem;
  font-weight: 500;
  -webkit-transform: translate(-50%, 0);
  -ms-transform: translate(-50%, 0);
  transform: translate(-50%, 0);
  background-color: var(--text-info);
  color: var(--alpha-white-100);
  -webkit-box-shadow: 0 4px 12px rgba(0,0,0,0.15);
  box-shadow: 0 4px 12px rgba(0,0,0,0.15);
  opacity: 0;
  pointer-events: none;
  -webkit-transition: opacity 180ms ease;
  transition: opacity 180ms ease;
}

.activity-feed__new-indicator.is-visible {
  opacity: 1;
  pointer-events: auto;
}


/* Filter chip row at the top of the feed (matches .chip pattern but inline) */
.activity-feed__filters {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  padding-left: 0.75rem;
  padding-right: 0.75rem;
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  border-bottom: 1px solid var(--border-secondary);
  background-color: var(--bg-surface);
}


/* ==========================================================================
   UUI-FAITHFUL CONNECTED FEED  —  ADOPT: application/activity-feed
   --------------------------------------------------------------------------
   1:1 with Untitled UI's activity-feed: a borderless stream where each row is
   an avatar column (avatar stacked over a dotted connector) beside a content
   column (actor header, optional comment/attachment/labels, and an optional
   inset-ring "speech-bubble" message). Opt in with `.activity-feed--connected`.
   This is the faithful structural adoption per FAN-OUT-RULES §1 — ring (inset
   box-shadow) over border, rounded-lg, generous padding, single brand focus
   ring — and it LAYERS ON TOP of the base list taxonomy above; it never
   replaces it, so the default bordered-row feed (and its app consumers) stand.
   ========================================================================== */

.activity-feed--connected {
  gap: 0;
}

  /* Borderless, transparent rows — separation comes from the connector + gap,
     not a bottom border (UUI: `relative flex gap-3`). */
  .activity-feed--connected .activity-feed__item {
    position: relative;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    gap: 0.75rem;
    padding-left: 0;
    padding-right: 0;
    padding-top: 0;
    padding-bottom: 0;
    border-bottom: 0;
    background-color: transparent;
    -webkit-transition: none;
    transition: none;
  }

  .activity-feed--connected .activity-feed__item:hover {
    background-color: transparent;
  }

  /* Avatar column — avatar stacked over the connector, centered. */
  .activity-feed--connected .activity-feed__avatar {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -ms-flex-negative: 0;
    flex-shrink: 0;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    -ms-flex-item-align: stretch;
    align-self: stretch;
  }

  /* Content column continues; leave breathing room while a connector is drawn
     (every item except the last carries a connector). */
  .activity-feed--connected .activity-feed__content {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-flex: 1;
    -ms-flex: 1;
    flex: 1;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
    gap: 0.75rem;
    min-width: 0;
  }

  .activity-feed--connected .activity-feed__item:not(:last-child) .activity-feed__content {
    padding-bottom: 2rem;
  }

  /* In the connected feed the action line is a fuller-size tertiary paragraph
     (UUI: `text-sm text-tertiary`) and is NOT clamped. */
  .activity-feed--connected .activity-feed__action {
    font-size: 0.8125rem;
    line-height: 1.25rem;
    color: var(--text-activity-feed-action, var(--text-tertiary));
    display: block;
    -webkit-line-clamp: unset;
    overflow: visible;
  }

/* --- UUI dotted connector ------------------------------------------------
   Reproduces UUI's <svg stroke-dasharray="0,6" stroke-linecap="round">: round
   dots, 6px pitch, 2.4px wide, centered under the avatar and filling the row.
   Rendered as a real element in the avatar column so it degrades without JS. */
.activity-feed__connector {
  margin-top: 0.25rem;
  margin-bottom: 0.25rem;
  width: 100%;
  -webkit-box-flex: 1;
  -ms-flex-positive: 1;
  flex-grow: 1;
  min-height: 0.5rem;
  background-image: radial-gradient(circle at center, var(--border-activity-feed-connector, var(--border-primary)) 1.2px, transparent 1.35px);
  background-position: center top;
  background-size: 2.4px 6px;
  background-repeat: repeat-y;
}

/* --- Actor header (name link + timestamp) -------------------------------- */
.activity-feed__header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 0.125rem;
}

.activity-feed__header-row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
}

.activity-feed__user {
  border-radius: 0.25rem;
  font-size: 0.8125rem;
  line-height: 1.25rem;
  font-weight: 500;
  text-decoration-line: none;
  color: var(--text-activity-feed-user, var(--text-secondary));
}

.activity-feed__user:hover {
  text-decoration: underline;
}

/* Single 2px brand focus ring — no border, no offset halo (FAN-OUT-RULES §3). */
.activity-feed__user:focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: 2px;
}

.activity-feed__time {
  font-size: 0.75rem;
  line-height: 1.125rem;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  color: var(--text-activity-feed-meta, var(--text-tertiary));
}

.activity-feed__username {
  font-size: 0.8125rem;
  line-height: 1.25rem;
  color: var(--text-activity-feed-meta, var(--text-tertiary));
}

/* --- Unseen dot — top-right success marker (UUI Dot md, fg-success) ------- */
.activity-feed__unseen {
  position: absolute;
  top: 0;
  right: 0;
  border-radius: 9999px;
  width: 10px;
  height: 10px;
  background-color: var(--text-activity-feed-unseen, var(--text-success));
}

/* --- Quoted comment (UUI <q>) -------------------------------------------- */
.activity-feed__comment {
  display: block;
  font-size: 0.8125rem;
  line-height: 1.25rem;
  color: var(--text-activity-feed-comment, var(--text-tertiary));
}

/* --- Label badges row ---------------------------------------------------- */
.activity-feed__labels {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  gap: 0.25rem;
}

/* --- Attachment as a file figure (UUI FileIcon + name + size) ------------ */
.activity-feed__file {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.75rem;
}

.activity-feed__file-icon {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 2.5rem;
  height: 2.5rem;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 0.375rem;
  font-size: 1.125rem;
  line-height: 1.6875rem;
  background-color: var(--bg-tertiary-subtle);
  color: var(--text-tertiary);
}

.activity-feed__file-body {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  min-width: 0;
}

.activity-feed__file-name {
  font-size: 0.8125rem;
  line-height: 1.25rem;
  font-weight: 500;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--text-secondary);
}

.activity-feed__file-size {
  font-size: 0.8125rem;
  line-height: 1.25rem;
  color: var(--text-tertiary);
}

/* --- Inset-ring speech-bubble message (UUI: ring-1 ring-inset ring-secondary,
   rounded-lg rounded-tl-none). Ring is a box-shadow, NEVER a CSS border, so
   there is no double border (FAN-OUT-RULES §1). --------------------------- */
.activity-feed__message {
  border-radius: 0.5rem;
  padding: 0.75rem;
  font-size: 0.8125rem;
  line-height: 1.25rem;
  border-top-left-radius: 0;
  color: var(--text-secondary);
  background-color: var(--bg-activity-feed-message, transparent);
  -webkit-box-shadow: inset 0 0 0 1px var(--border-activity-feed-message, var(--border-secondary));
  box-shadow: inset 0 0 0 1px var(--border-activity-feed-message, var(--border-secondary));
}

/* --- Sizes — UUI ships sm/md; md is the default. sm tightens the connector
   gap; the avatar size is set on the .avatar element itself (avatar-sm/-md).- */
.activity-feed--connected.activity-feed--sm .activity-feed__item:not(:last-child) .activity-feed__content {
  padding-bottom: 1.5rem;
}

.activity-feed--connected.activity-feed--sm .activity-feed__content {
  gap: 0.5rem;
} /* tq-8406 (A34): the ONE activity feed, imported in place */

/*Inputs*/
.ui-autocomplete {
  position: absolute;
  border-radius: 0.375rem;
  padding: 0.5rem;
  font-size: 0.8125rem;
  line-height: 1.5rem;
  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  top: 100%;
  left: 0;
  z-index: var(--z-popover);
  float: left;
  display: none;
  margin: 0 0 10px 25px;
  list-style: none;
  -webkit-background-clip: padding-box;
  -moz-background-clip: padding;
  background-clip: padding-box;
  color: var(--text-autocomplete);
  background-color: var(--bg-autocomplete);
  border-color: var(--border-autocomplete);
}
/* ==========================================================================
   Checks v2 – Checkbox + Toggle + Radio (FINAL + TOGGLE LOCK)
   (Includes improved disabled+checked checkbox styling)
   ========================================================================== */


/* ==========================================================================
   CHECKBOX v2
   ========================================================================== */

.checkbox-base {
  display: inline-block;
  cursor: pointer;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  border-width: 1px;
  vertical-align: middle;
  outline: 2px solid transparent;
  outline-offset: 2px;
  -webkit-transition-property: all;
  transition-property: all;
  -webkit-transition-duration: 75ms;
  transition-duration: 75ms;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}

.checkbox-base:focus {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-offset-width: 0px;
}

.checkbox-base {
  -webkit-tap-highlight-color: transparent;
  background-color: var(--bg-checkbox);
  border-color: var(--border-checkbox);
}

  /* Hover / Active */
  .checkbox-base:hover {
    border-color: var(--border-checkbox-hover);
  }

  .checkbox-base:active {
    background-color: var(--bg-checkbox-active);
    border-color: var(--border-checkbox-active);
  }

  /* Checked (LOCKED) */
  .checkbox-base:checked,
  .checkbox-base:checked:hover,
  .checkbox-base:checked:active,
  .checkbox-base:checked:focus {
    background-color: var(--bg-checkbox-checked);
    border-color: var(--border-checkbox-checked);
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23FFFFFF' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><path d='M20 6L9 17l-5-5'/></svg>");
    background-repeat: no-repeat;
    background-position: center;
  }

  /* Indeterminate (LOCKED) */
  .checkbox-base:indeterminate,
  .checkbox-base:indeterminate:hover,
  .checkbox-base:indeterminate:active,
  .checkbox-base:indeterminate:focus {
    background-color: var(--bg-checkbox-checked);
    border-color: var(--border-checkbox-checked);
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23FFFFFF' stroke-width='3' stroke-linecap='round'><path d='M6 12h12'/></svg>");
    background-repeat: no-repeat;
    background-position: center;
  }

  /* Disabled */
  .checkbox-base:disabled,
  .checkbox-base[disabled] {
  cursor: not-allowed;
  opacity: 0.6;
    background-color: var(--bg-checkbox-disabled);
    border-color: var(--border-checkbox-disabled);
}

    /* ✅ Disabled + Checked / Indeterminate (make distinct) */
    .checkbox-base:disabled:checked,
    .checkbox-base[disabled]:checked,
    .checkbox-base:disabled:indeterminate,
    .checkbox-base[disabled]:indeterminate {
      /* Reduce “flattening” so checked still reads as checked */
      opacity: 0.9;
      background-color: var(--bg-checkbox-disabled-checked);
      border-color: var(--border-checkbox-disabled-checked);
      /* Keep mark crisp */
      background-repeat: no-repeat;
      background-position: center;
      /* No inset "stamp edge" here (Pavel, 2026-07-31: controls read balanced and
         even, no offset or inset shadows). It was a SECOND edge stacked on the
         border-color above, which already draws one tokenized 1px edge on all four
         sides — so removing it loses no affordance, it just stops drawing the edge
         twice. It was also hardcoded rgba(0,0,0,0.12), which cannot adapt: in dark
         theme it painted 12% black over a light-on-dark control, where the border it
         doubled measures oklch(0.371 0 0). If this state needs more weight, change
         --border-checkbox-disabled-checked so both themes get it. */
    }

    /* Disabled + Checked mark */
    .checkbox-base:disabled:checked,
    .checkbox-base[disabled]:checked {
      background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23FFFFFF' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><path d='M20 6L9 17l-5-5'/></svg>");
    }

    /* Disabled + Indeterminate mark */
    .checkbox-base:disabled:indeterminate,
    .checkbox-base[disabled]:indeterminate {
      background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23FFFFFF' stroke-width='3' stroke-linecap='round'><path d='M6 12h12'/></svg>");
    }

  /* Semantic */
  .checkbox-base.is-error {
    border-color: var(--border-checkbox-error);
  }

  .checkbox-base.is-success {
    border-color: var(--border-checkbox-success);
  }

/* Variants */
.checkbox {
  border-radius: 0.25rem;
  display: inline-block;
  cursor: pointer;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  border-width: 1px;
  vertical-align: middle;
  outline: 2px solid transparent;
  outline-offset: 2px;
  -webkit-transition-property: all;
  transition-property: all;
  -webkit-transition-duration: 75ms;
  transition-duration: 75ms;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
.checkbox:focus {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-offset-width: 0px;
}
.checkbox {
  -webkit-tap-highlight-color: transparent;
  background-color: var(--bg-checkbox);
  border-color: var(--border-checkbox);
}
.checkbox:hover {
    border-color: var(--border-checkbox-hover);
  }
.checkbox:active {
    background-color: var(--bg-checkbox-active);
    border-color: var(--border-checkbox-active);
  }
.checkbox:checked,.checkbox:checked:hover,.checkbox:checked:active,.checkbox:checked:focus {
    background-color: var(--bg-checkbox-checked);
    border-color: var(--border-checkbox-checked);
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23FFFFFF' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><path d='M20 6L9 17l-5-5'/></svg>");
    background-repeat: no-repeat;
    background-position: center;
  }
.checkbox:indeterminate,.checkbox:indeterminate:hover,.checkbox:indeterminate:active,.checkbox:indeterminate:focus {
    background-color: var(--bg-checkbox-checked);
    border-color: var(--border-checkbox-checked);
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23FFFFFF' stroke-width='3' stroke-linecap='round'><path d='M6 12h12'/></svg>");
    background-repeat: no-repeat;
    background-position: center;
  }
.checkbox:disabled,.checkbox[disabled] {
  cursor: not-allowed;
  opacity: 0.6;
    background-color: var(--bg-checkbox-disabled);
    border-color: var(--border-checkbox-disabled);
}
.checkbox:disabled:checked,.checkbox[disabled]:checked,.checkbox:disabled:indeterminate,.checkbox[disabled]:indeterminate {
      /* Reduce “flattening” so checked still reads as checked */
      /* Keep mark crisp */
      /* No inset "stamp edge" here (Pavel, 2026-07-31: controls read balanced and
         even, no offset or inset shadows). It was a SECOND edge stacked on the
         border-color above, which already draws one tokenized 1px edge on all four
         sides — so removing it loses no affordance, it just stops drawing the edge
         twice. It was also hardcoded rgba(0,0,0,0.12), which cannot adapt: in dark
         theme it painted 12% black over a light-on-dark control, where the border it
         doubled measures oklch(0.371 0 0). If this state needs more weight, change
         --border-checkbox-disabled-checked so both themes get it. */
      /* Reduce “flattening” so checked still reads as checked */
      /* Keep mark crisp */
      /* No inset "stamp edge" here (Pavel, 2026-07-31: controls read balanced and
         even, no offset or inset shadows). It was a SECOND edge stacked on the
         border-color above, which already draws one tokenized 1px edge on all four
         sides — so removing it loses no affordance, it just stops drawing the edge
         twice. It was also hardcoded rgba(0,0,0,0.12), which cannot adapt: in dark
         theme it painted 12% black over a light-on-dark control, where the border it
         doubled measures oklch(0.371 0 0). If this state needs more weight, change
         --border-checkbox-disabled-checked so both themes get it. */
      /* Reduce “flattening” so checked still reads as checked */
      /* Keep mark crisp */
      /* No inset "stamp edge" here (Pavel, 2026-07-31: controls read balanced and
         even, no offset or inset shadows). It was a SECOND edge stacked on the
         border-color above, which already draws one tokenized 1px edge on all four
         sides — so removing it loses no affordance, it just stops drawing the edge
         twice. It was also hardcoded rgba(0,0,0,0.12), which cannot adapt: in dark
         theme it painted 12% black over a light-on-dark control, where the border it
         doubled measures oklch(0.371 0 0). If this state needs more weight, change
         --border-checkbox-disabled-checked so both themes get it. */
      /* Reduce “flattening” so checked still reads as checked */
      opacity: 0.9;
      background-color: var(--bg-checkbox-disabled-checked);
      border-color: var(--border-checkbox-disabled-checked);
      /* Keep mark crisp */
      background-repeat: no-repeat;
      background-position: center;
      /* No inset "stamp edge" here (Pavel, 2026-07-31: controls read balanced and
         even, no offset or inset shadows). It was a SECOND edge stacked on the
         border-color above, which already draws one tokenized 1px edge on all four
         sides — so removing it loses no affordance, it just stops drawing the edge
         twice. It was also hardcoded rgba(0,0,0,0.12), which cannot adapt: in dark
         theme it painted 12% black over a light-on-dark control, where the border it
         doubled measures oklch(0.371 0 0). If this state needs more weight, change
         --border-checkbox-disabled-checked so both themes get it. */
    }
.checkbox:disabled:checked,.checkbox[disabled]:checked {
      background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23FFFFFF' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><path d='M20 6L9 17l-5-5'/></svg>");
    }
.checkbox:disabled:indeterminate,.checkbox[disabled]:indeterminate {
      background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23FFFFFF' stroke-width='3' stroke-linecap='round'><path d='M6 12h12'/></svg>");
    }
.checkbox.is-error {
    border-color: var(--border-checkbox-error);
  }
.checkbox.is-success {
    border-color: var(--border-checkbox-success);
  }
.checkbox {
  height: 1rem;
  width: 1rem;
}

/* Sizes */

.checkbox-md {
  height: 1rem;
  width: 1rem;
}

/* Checkbox + label */
.check {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.check[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}



/* The switch (.toggle*) is the canonical Reinly.Design components/inputs/toggle.css, imported by site.css (tq-8208). */

/* ==========================================================================
   RADIO v2 (LOCKED, NO FILL)
   ========================================================================== */

.radio-base {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  cursor: pointer;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  border-radius: 9999px;
  border-width: 1px;
  vertical-align: middle;
  outline: 2px solid transparent;
  outline-offset: 2px;
  -webkit-transition-property: all;
  transition-property: all;
  -webkit-transition-duration: 75ms;
  transition-duration: 75ms;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}

.radio-base:focus {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-offset-width: 0px;
}

.radio-base {
  -webkit-tap-highlight-color: transparent;
  background-color: var(--bg-radio);
  border-color: var(--border-radio);
  position: relative;
  --radio-dot-size: 0.5rem;
}

  /* Hover */
  .radio-base:hover {
    border-color: var(--border-radio-hover);
  }

  /* Active (no fill) */
  .radio-base:active {
    background-color: var(--bg-radio);
    border-color: var(--border-radio-active);
  }

  /* Dot */
  .radio-base::after {
    content: "";
    position: absolute;
    left: 50%;
    top: 50%;
    width: var(--radio-dot-size);
    height: var(--radio-dot-size);
    border-radius: 999px;
    -webkit-transform: translate(-50%, -50%) scale(0);
    -ms-transform: translate(-50%, -50%) scale(0);
    transform: translate(-50%, -50%) scale(0);
    background-color: var(--bg-radio-dot);
    -webkit-transition: background-color 75ms ease-in-out, -webkit-transform 75ms ease-in-out;
    transition: background-color 75ms ease-in-out, -webkit-transform 75ms ease-in-out;
    transition: transform 75ms ease-in-out, background-color 75ms ease-in-out;
    transition: transform 75ms ease-in-out, background-color 75ms ease-in-out, -webkit-transform 75ms ease-in-out;
  }

  /* Checked (LOCKED) */
  .radio-base:checked,
  .radio-base:checked:hover,
  .radio-base:checked:active,
  .radio-base:checked:focus {
    background-color: var(--bg-radio);
    border-color: var(--border-radio-checked);
  }

    .radio-base:checked::after,
    .radio-base:checked:hover::after,
    .radio-base:checked:active::after,
    .radio-base:checked:focus::after {
      -webkit-transform: translate(-50%, -50%) scale(1);
      -ms-transform: translate(-50%, -50%) scale(1);
      transform: translate(-50%, -50%) scale(1);
      background-color: var(--bg-radio-dot-checked);
    }

  /* Disabled */
  .radio-base:disabled,
  .radio-base[disabled] {
  cursor: not-allowed;
  opacity: 0.6;
    background-color: var(--bg-radio-disabled);
    border-color: var(--border-radio-disabled);
}

    .radio-base:disabled::after {
      background-color: var(--bg-radio-dot-disabled);
    }

/* Variants */
.radio {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  cursor: pointer;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  border-radius: 9999px;
  border-width: 1px;
  vertical-align: middle;
  outline: 2px solid transparent;
  outline-offset: 2px;
  -webkit-transition-property: all;
  transition-property: all;
  -webkit-transition-duration: 75ms;
  transition-duration: 75ms;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
.radio:focus {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-offset-width: 0px;
}
.radio {
  -webkit-tap-highlight-color: transparent;
  background-color: var(--bg-radio);
  border-color: var(--border-radio);
  position: relative;
  --radio-dot-size: 0.5rem;
}
.radio:hover {
    border-color: var(--border-radio-hover);
  }
.radio:active {
    background-color: var(--bg-radio);
    border-color: var(--border-radio-active);
  }
.radio::after {
    content: "";
    position: absolute;
    left: 50%;
    top: 50%;
    width: var(--radio-dot-size);
    height: var(--radio-dot-size);
    border-radius: 999px;
    -webkit-transform: translate(-50%, -50%) scale(0);
    -ms-transform: translate(-50%, -50%) scale(0);
    transform: translate(-50%, -50%) scale(0);
    background-color: var(--bg-radio-dot);
    -webkit-transition: background-color 75ms ease-in-out, -webkit-transform 75ms ease-in-out;
    transition: background-color 75ms ease-in-out, -webkit-transform 75ms ease-in-out;
    transition: transform 75ms ease-in-out, background-color 75ms ease-in-out;
    transition: transform 75ms ease-in-out, background-color 75ms ease-in-out, -webkit-transform 75ms ease-in-out;
  }
.radio:checked,.radio:checked:hover,.radio:checked:active,.radio:checked:focus {
    background-color: var(--bg-radio);
    border-color: var(--border-radio-checked);
  }
.radio:checked::after,.radio:checked:hover::after,.radio:checked:active::after,.radio:checked:focus::after {
      -webkit-transform: translate(-50%, -50%) scale(1);
      -ms-transform: translate(-50%, -50%) scale(1);
      transform: translate(-50%, -50%) scale(1);
      background-color: var(--bg-radio-dot-checked);
    }
.radio:disabled,.radio[disabled] {
  cursor: not-allowed;
  opacity: 0.6;
    background-color: var(--bg-radio-disabled);
    border-color: var(--border-radio-disabled);
}
.radio:disabled::after {
      background-color: var(--bg-radio-dot-disabled);
    }

/* Sizes */

/* Groups */
/* ==========================================================================
   Form Controls v2 – Labels + Groups (UPDATED)
   Goal:
   - Use <label> tags by default (no .form-label required)
   - Allow label/control widths to be controlled via Tailwind grid classes
   - Support vertical + inline/grid layouts
   - Add read-only “detail view” groups (label + text)
   - Keep your label-to-first-line alignment behavior
   ========================================================================== */


/* -----------------------------------------
 * Labels — readable on touch screens (14px / text-sm).
 * Was 12px (text-xs) which felt cramped above the new larger
 * inputs and disappeared on small phones.
 * ----------------------------------------- */
label,
.form-label {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.8125rem;
  line-height: 1.5rem;
  font-weight: 500;
}
html.is-mobile #rnly-wizard-modal label.flex.flex-col[style*="border-left"],html.is-mobile #rnly-wizard-modal .flex.flex-col
.form-label[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
label,
.form-label {
  color: var(--text-form-label);
}

/* label variants */
.form-label-muted {
  font-size: 0.8125rem;
  line-height: 1.5rem;
  font-weight: 400;
  color: var(--text-form-label-muted);
}

.form-label-strong {
  font-size: 0.8125rem;
  line-height: 1.5rem;
  font-weight: 600;
  color: var(--text-form-label-strong);
}

/* Required indicator
   - Use either: <label class="required"> OR <label class="is-required"> */
label.required::after,
.form-label.required::after,
label.is-required::after,
.form-label.is-required::after,
.required::after,
.is-required::after {
  content: " *";
  font-size: 0.8125rem;
  line-height: 1.5rem;
  font-weight: 400;
  color: var(--text-form-label-required);
}


/* -----------------------------------------
 * Info button (label helper)
 * ----------------------------------------- */

/* size helpers */


/* -----------------------------------------
 * Form Group (vertical default)
 * ----------------------------------------- */
.form-group {
  margin-bottom: 0.75rem;
}

/* spacing variants */

/* label row + controls */
.form-group > label,
.form-group > .form-label {
  display: block;
}

.controls {
  margin-top: 0.25rem;
}

/* Optional: control row variants */


/* -----------------------------------------
 * Help / Hint / Meta text
 * ----------------------------------------- */
.form-hint {
  margin-top: 0.25rem;
  font-size: 0.75rem;
  line-height: 1rem;
  color: var(--text-form-hint);
}

.form-hint-muted {
  margin-top: 0.25rem;
  font-size: 0.75rem;
  line-height: 1rem;
  color: var(--text-form-hint-muted);
}

/* message variants */

/* meta row (hint left + counter right) */


/* -----------------------------------------
 * Divider / sectioning (optional)
 * ----------------------------------------- */


/* ==========================================================================
   INLINE / GRID ROWS (Label + Controls)
   - You control widths with Tailwind col-span classes in markup.
   - Works with:
     <div class="form-group-inline">
        <label class="col-span-12 md:col-span-3">...</label>
        <div class="controls col-span-12 md:col-span-9">...</div>
     </div>
   ========================================================================== */

  /* label cell (no forced col-spans; you set them in markup) */

  /* controls cell */

  /* Size-aware auto offsets (inputs + input-groups + stacks) */

  /* textarea rows */


/* -----------------------------------------
 * Label alignment helpers (optional)
 * ----------------------------------------- */


/* -----------------------------------------
 * Form wrappers (layout helpers)
 * ----------------------------------------- */

/* grid form (multi-column sections) */


/* ==========================================================================
   DETAIL / DISPLAY GROUPS (Label + Text)
   - Use only .form-group-display (no .form-group needed)
   - Use <label> tag directly
   - Value typography comes from your existing classes (e.g. .body, .body-sm)
   ========================================================================== */

/* Vertical display: label on top, value below */

  /* spacing + default value color only (typography comes from your .body classes) */

/* Inline/grid display: label + value side-by-side */

/* multi-line value helper (addresses/notes) */

/* value helpers that do NOT touch typography */

/* -----------------------------------------
 * Copyable — hover-reveal copy button
 * ----------------------------------------- */


/* -----------------------------------------
 * Validation (MVC + generic)
 * ----------------------------------------- */
.input-validation-error {
  border-width: 1px;
  border-color: var(--border-form-error, var(--border-danger)) !important;
}

.field-validation-error {
  color: var(--text-form-error);
}

select.form-control.input-validation-error {
  border-width: 1px;
  border-color: var(--border-form-error, var(--border-danger)) !important;
}

/* group-level state helpers */
.form-group.is-error :is(.form-hint, .form-hint-muted) {
  color: var(--text-form-error);
}

.form-group.is-success :is(.form-hint, .form-hint-muted) {
  color: var(--text-form-success);
}

.form-group.is-warning :is(.form-hint, .form-hint-muted) {
  color: var(--text-form-warning);
}

.form-group.is-info :is(.form-hint, .form-hint-muted) {
  color: var(--text-form-info);
}

/* Optional: dense form wrapper */
/* ==========================================================================
   Form Controls v2 – Complete Component
   (UPDATED: per-item hover/focus background ONLY inside input-group / wrap / stack)
   - Everything else unchanged
   ========================================================================== */


/* -----------------------------------------
 * Base input (abstract)
 * IMPORTANT:
 * - Keep native inputs/textarea/select as `block` (NOT inline-flex)
 * - Height alignment is handled by size classes (font + leading + padding + min-height)
 * ----------------------------------------- */
.input-base {
  /* Geometry only. Each variant layers a 1px CSS border + 1px inset ring per state
     (mirrors @utility input-base, and isabella's PR 456 in the seed product). Every variant
     carries a 1px border — transparent where the rest state shows no visible edge — so
     the bordered padding in @utility input-base holds identically across all of them. */
  display: block;
  width: 100%;
  border-radius: var(--radius-lg);
  --tw-font-weight: 400;
  font-weight: 400;
  --tw-outline-style: none;
  outline-style: none;
  -webkit-transition: background-color 100ms ease, -webkit-box-shadow 100ms ease;
  transition: background-color 100ms ease, -webkit-box-shadow 100ms ease;
  transition: box-shadow 100ms ease, background-color 100ms ease;
  transition: box-shadow 100ms ease, background-color 100ms ease, -webkit-box-shadow 100ms ease;
  -webkit-tap-highlight-color: transparent;
}
@media (forced-colors: active) {
  .input-base {
    outline: 2px solid transparent;
    outline-offset: 2px;
  }
}
.input-base:focus {
  --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width, 0px)) var(--tw-ring-color, currentcolor);
  -webkit-box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
  box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
}
@media (hover: hover) {
  .input-base:disabled:hover {
    --tw-shadow: 0 0 #0000;
    -webkit-box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
    box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
  }
}

/* Text selection highlight (lighter blue to match select option highlight) */
.form-control::-moz-selection, .form-control-soft::-moz-selection, .form-control-ghost::-moz-selection, .form-control-borderless::-moz-selection, .form-control-static::-moz-selection {
  background-color: var(--bg-input-selection, var(--utility-blue-200));
  color: var(--text-input-selection, var(--text-primary));
}
.form-control::selection,
.form-control-soft::selection,
.form-control-ghost::selection,
.form-control-borderless::selection,
.form-control-static::selection {
  background-color: var(--bg-input-selection, var(--utility-blue-200));
  color: var(--text-input-selection, var(--text-primary));
}

/* Placeholder */
/* tq-9035 (A143, isabella 900067398): the placeholder takes its FIELD's font (a fixed text-sm made a 16px field's
   placeholder smaller than its value); only the colour is set here. */
input::-webkit-input-placeholder, textarea::-webkit-input-placeholder {
  color: var(--text-input-placeholder);
}
input::-moz-placeholder, textarea::-moz-placeholder {
  color: var(--text-input-placeholder);
}
input:-ms-input-placeholder, textarea:-ms-input-placeholder {
  color: var(--text-input-placeholder);
}
input::-ms-input-placeholder, textarea::-ms-input-placeholder {
  color: var(--text-input-placeholder);
}
input::placeholder,
textarea::placeholder {
  color: var(--text-input-placeholder);
}

/* Autofill fixes — suppress browser yellow/blue background */

/* Chrome / Edge / Safari */
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active,
textarea:-webkit-autofill,
textarea:-webkit-autofill:hover,
textarea:-webkit-autofill:focus,
select:-webkit-autofill,
select:-webkit-autofill:hover,
select:-webkit-autofill:focus {
  -webkit-box-shadow: 0 0 0 9999px var(--bg-input) inset !important;
  box-shadow: 0 0 0 9999px var(--bg-input) inset !important;
  -webkit-text-fill-color: var(--text-input) !important;
  -webkit-background-clip: text !important;
  background-clip: text !important;
  caret-color: var(--text-input);
}

/* Firefox */
input:autofill,
input:autofill:hover,
input:autofill:focus,
textarea:autofill,
select:autofill {
  background-color: var(--bg-input) !important;
  color: var(--text-input) !important;
  -webkit-filter: none !important;
  filter: none !important;
  background-image: none !important;
}


/* -----------------------------------------
 * Core variants (self-contained, default to SM sizing)
 * DS standard (Pavel #42): the BASE input size is `sm`. A bare `.form-control*`
 * renders at the sm scale; opt UP to `.form-control-md` / `-lg` explicitly.
 * ----------------------------------------- */

/* Size tiers: these only SET the shared vars; the variants below compute the geometry from them (--ctl-h / --ctl-line /
 * --control-* in base/control-heights.css). Never add min-height / padding-block here: see the note in base/theme.css.
 * tq-9035 (A143): plain classes (they were Tailwind-4 @utility in base/utilities.css), so the app reads them too. */
.form-control-xs { --ctl-h: var(--control-h-xs); --ctl-line: var(--control-line-xs); --ctl-fs: var(--control-fs-xs); --ctl-px: 0.625rem; }
.form-control-sm { --ctl-h: var(--control-h-sm); --ctl-line: var(--control-line-sm); --ctl-fs: var(--control-fs-sm); --ctl-px: 0.75rem; }
.form-control-md { --ctl-h: var(--control-h-md); --ctl-line: var(--control-line-md); --ctl-fs: var(--control-fs-md); --ctl-px: 0.75rem; }
.form-control-lg { --ctl-h: var(--control-h-lg); --ctl-line: var(--control-line-lg); --ctl-fs: var(--control-fs-lg); --ctl-px: 0.875rem; }
.form-control-xl { --ctl-h: var(--control-h-xl); --ctl-line: var(--control-line-xl); --ctl-fs: var(--control-fs-xl); --ctl-px: 0.875rem; }

/* COMFORTABLE DENSITY, the consumer opt-in (tq-9035 A143, isabella 900067398): a layout root that sets
 * data-control-density="comfortable" puts its bare fields on the md tier (40px on a fine pointer, 44px on touch, 16px text).
 * An explicit tier class still wins (form-control-sm stays sm: the :not() leaves it alone). Consumer surfaces opt in on the
 * layout root; never override .form-control in an app file. */
[data-control-density="comfortable"] :is(.form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static):not(.form-control-xs, .form-control-sm, .form-control-md, .form-control-lg, .form-control-xl) {
  --ctl-h: var(--control-h-md);
  --ctl-line: var(--control-line-md);
  --ctl-fs: var(--control-fs-md);
  --ctl-px: 0.75rem;
}

/* TOUCH FONT FLOOR (isabella 900067398, amended 900067427; repaired tq-9107 A147): iOS Safari zooms the page on focus for any
 * text field under 16px, and the ladder re-points only HEIGHTS on a coarse pointer, so every text-entry field's font is at least
 * 16px there. NATIVE elements, not DS classes, so a classless / typeless input is covered too. Not inside
 * [data-pointer-scope="fine"] (cursor-driven tooling chrome; base/control-heights.css restates the fine ladder there), EXCEPT
 * where a [data-pointer-scope="device"] inside it restores the device ladder (a preview's mount point): the floor follows the
 * ladder back. The same pointer: coarse query the ladder uses, not any-pointer.
 * A field that SETS a size above 16px also declares --ctl-fs with it (tq-9107 audit), so max() keeps it (a 20px PIN stays 20px). */
@media (pointer: coarse) {
  :where(input:not([type=checkbox], [type=radio], [type=range], [type=color], [type=file], [type=hidden], [type=button], [type=submit], [type=reset], [type=image]), textarea, select):not([data-pointer-scope="fine"] *),
  [data-pointer-scope="device"] :where(input:not([type=checkbox], [type=radio], [type=range], [type=color], [type=file], [type=hidden], [type=button], [type=submit], [type=reset], [type=image]), textarea, select):not([data-pointer-scope="device"] [data-pointer-scope="fine"] *) {
    /* !important on purpose: a text-xs / text-sm utility on a field would otherwise beat the floor and bring iOS focus zoom back */
    font-size: max(var(--ctl-fs, 1rem), 16px) !important;
  }

}

/* Default
 * Pavel's exact spec (mirrors isabella's PR 456 in the seed product): a 1px CSS border PLUS a
 * 1px inset ring = an even 2px edge, all four sides identical. ONE token for both layers
 * (not a stronger outer + softer inner) so the two halves can never disagree and a future
 * nudge moves them together. Every state stays 2px and only the HUE changes — rest, hover,
 * focus, error, success, warning, info, disabled — so there is zero layout shift between
 * states, and focus adds NO outline (border + ring + outline would be 3px). */
.form-control {
  display: block;
  width: 100%;
  border-radius: var(--radius-lg);
  --tw-font-weight: 400;
  font-weight: 400;
  --tw-outline-style: none;
  outline-style: none;
  min-height: var(--ctl-h, var(--control-h-sm));
  line-height: var(--ctl-line, var(--control-line-sm));
  font-size: var(--ctl-fs, var(--control-fs-sm));
  padding-block: calc((var(--ctl-h, var(--control-h-sm)) - var(--ctl-line, var(--control-line-sm)) - 2 * var(--control-border, 1px)) / 2);
  padding-inline: var(--ctl-px, 0.75rem);
  -webkit-transition: background-color 100ms ease, -webkit-box-shadow 100ms ease;
  transition: background-color 100ms ease, -webkit-box-shadow 100ms ease;
  transition: box-shadow 100ms ease, background-color 100ms ease;
  transition: box-shadow 100ms ease, background-color 100ms ease, -webkit-box-shadow 100ms ease;
  -webkit-tap-highlight-color: transparent;
  color: var(--text-input);
  background-color: var(--bg-input);
  /* The border SHORTHAND sets width AND colour together, which is what neutralises the
     v3->v4 compat shim (base/tailwind.css:19 sets border-COLOR on *, and can only surface
     if something sets a width WITHOUT a colour). So this is NOT the double-border
     regression the old comment feared — that only happens with a bare border-width.
     Never set border-width alone on a control. The ring sits immediately inside the border;
     --control-border (1px) drives both, so they stay locked at a combined 2px. */
  border: var(--control-border) solid var(--border-input);
  -webkit-box-shadow: inset 0 0 0 var(--control-border) var(--border-input);
  box-shadow: inset 0 0 0 var(--control-border) var(--border-input);
}
@media (forced-colors: active) {
  .form-control {
    outline: 2px solid transparent;
    outline-offset: 2px;
  }
}
@media (hover: hover) {
  .form-control:disabled:hover {
    --tw-shadow: 0 0 #0000;
    -webkit-box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
    box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
  }
}

  .form-control::-webkit-input-placeholder { color: var(--text-placeholder); opacity: 1; }

  .form-control::-moz-placeholder { color: var(--text-placeholder); opacity: 1; }

  .form-control:-ms-input-placeholder { color: var(--text-placeholder); opacity: 1; }

  .form-control::-ms-input-placeholder { color: var(--text-placeholder); opacity: 1; }

  .form-control::placeholder { color: var(--text-placeholder); opacity: 1; }

  .form-control:hover {
    border-color: var(--border-input-hover);
    -webkit-box-shadow: inset 0 0 0 var(--control-border) var(--border-input-hover);
    box-shadow: inset 0 0 0 var(--control-border) var(--border-input-hover);
  }

  /* Focus: recolour BOTH layers to the FIELD focus token and thicken the ring: 1px border + 2px
     ring = a 3px edge against the 2px rest, so focus reads without colour (WCAG 1.4.1), with no
     layout shift (box-shadow). No outline (it would paint on every mouse click: text inputs always
     match :focus-visible). tq-8912 follow-up (isabella 900064871): --border-input-active is the
     strong ink, never the success green, >= 3:1 against the rest AND the valid border in both themes;
     a focused valid / invalid field shows it too (focus wins), validity stays in its icon + message. */
  .form-control:focus {
    border-color: var(--border-input-active);
    -webkit-box-shadow: inset 0 0 0 calc(var(--control-border) * 2) var(--border-input-active);
    box-shadow: inset 0 0 0 calc(var(--control-border) * 2) var(--border-input-active);
  }

/* Soft */
.form-control-soft {
  display: block;
  width: 100%;
  border-radius: var(--radius-lg);
  --tw-font-weight: 400;
  font-weight: 400;
  --tw-outline-style: none;
  outline-style: none;
  min-height: var(--ctl-h, var(--control-h-sm));
  line-height: var(--ctl-line, var(--control-line-sm));
  font-size: var(--ctl-fs, var(--control-fs-sm));
  padding-block: calc((var(--ctl-h, var(--control-h-sm)) - var(--ctl-line, var(--control-line-sm)) - 2 * var(--control-border, 1px)) / 2);
  padding-inline: var(--ctl-px, 0.75rem);
  -webkit-transition: background-color 100ms ease, -webkit-box-shadow 100ms ease;
  transition: background-color 100ms ease, -webkit-box-shadow 100ms ease;
  transition: box-shadow 100ms ease, background-color 100ms ease;
  transition: box-shadow 100ms ease, background-color 100ms ease, -webkit-box-shadow 100ms ease;
  -webkit-tap-highlight-color: transparent;
  color: var(--text-input);
  background-color: var(--bg-input-soft, var(--utility-neutral-100));
  /* Filled variant: the fill conveys the field, so NO visible edge at rest — but a 1px
     TRANSPARENT border keeps its box geometry identical to .form-control under the shared
     bordered padding, so gaining a coloured edge on hover/focus shifts nothing. */
  border: var(--control-border) solid transparent;
  -webkit-box-shadow: none;
  box-shadow: none;
  -webkit-transition:
    background-color 180ms cubic-bezier(0.4, 0, 0.2, 1),
    border-color 180ms cubic-bezier(0.4, 0, 0.2, 1),
    -webkit-box-shadow 220ms cubic-bezier(0.4, 0, 0.2, 1);
  transition:
    background-color 180ms cubic-bezier(0.4, 0, 0.2, 1),
    border-color 180ms cubic-bezier(0.4, 0, 0.2, 1),
    -webkit-box-shadow 220ms cubic-bezier(0.4, 0, 0.2, 1);
  transition:
    background-color 180ms cubic-bezier(0.4, 0, 0.2, 1),
    border-color 180ms cubic-bezier(0.4, 0, 0.2, 1),
    box-shadow 220ms cubic-bezier(0.4, 0, 0.2, 1);
  transition:
    background-color 180ms cubic-bezier(0.4, 0, 0.2, 1),
    border-color 180ms cubic-bezier(0.4, 0, 0.2, 1),
    box-shadow 220ms cubic-bezier(0.4, 0, 0.2, 1),
    -webkit-box-shadow 220ms cubic-bezier(0.4, 0, 0.2, 1);
}
@media (forced-colors: active) {
  .form-control-soft {
    outline: 2px solid transparent;
    outline-offset: 2px;
  }
}
@media (hover: hover) {
  .form-control-soft:disabled:hover {
    --tw-shadow: 0 0 #0000;
    -webkit-box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
    box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
  }
}

  .form-control-soft:hover {
    background-color: var(--bg-input-soft-hover, var(--utility-neutral-100));
    border-color: var(--border-input);
    -webkit-box-shadow: inset 0 0 0 var(--control-border) var(--border-input);
    box-shadow: inset 0 0 0 var(--control-border) var(--border-input);
  }

  .form-control-soft:focus,
  .form-control-soft:focus-visible {
    background-color: var(--bg-input-soft-active, var(--utility-neutral-50));
    border-color: var(--border-input-active);
    -webkit-box-shadow: inset 0 0 0 calc(var(--control-border) * 2) var(--border-input-active);
    box-shadow: inset 0 0 0 calc(var(--control-border) * 2) var(--border-input-active);
    outline: none;
  }

  @media (prefers-reduced-motion: reduce) {
    .form-control-soft { -webkit-transition: none; transition: none; }
  }

/* Ghost */
.form-control-ghost {
  display: block;
  width: 100%;
  border-radius: var(--radius-lg);
  --tw-font-weight: 400;
  font-weight: 400;
  --tw-outline-style: none;
  outline-style: none;
  min-height: var(--ctl-h, var(--control-h-sm));
  line-height: var(--ctl-line, var(--control-line-sm));
  font-size: var(--ctl-fs, var(--control-fs-sm));
  padding-block: calc((var(--ctl-h, var(--control-h-sm)) - var(--ctl-line, var(--control-line-sm)) - 2 * var(--control-border, 1px)) / 2);
  padding-inline: var(--ctl-px, 0.75rem);
  -webkit-transition: background-color 100ms ease, -webkit-box-shadow 100ms ease;
  transition: background-color 100ms ease, -webkit-box-shadow 100ms ease;
  transition: box-shadow 100ms ease, background-color 100ms ease;
  transition: box-shadow 100ms ease, background-color 100ms ease, -webkit-box-shadow 100ms ease;
  -webkit-tap-highlight-color: transparent;
  --tw-shadow: 0 0 #0000;
  -webkit-box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
  box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
  color: var(--text-input);
  background-color: var(--alpha-0);
  /* Minimal: no visible edge at rest — 1px transparent border for geometry parity,
     border+ring appear only on focus. */
  border: var(--control-border) solid transparent;
}
@media (forced-colors: active) {
  .form-control-ghost {
    outline: 2px solid transparent;
    outline-offset: 2px;
  }
}
@media (hover: hover) {
  .form-control-ghost:disabled:hover {
    --tw-shadow: 0 0 #0000;
    -webkit-box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
    box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
  }
}

  .form-control-ghost:hover {
    background-color: var(--bg-input-ghost-hover, var(--utility-neutral-100));
  }

  .form-control-ghost:focus {
    background-color: var(--bg-input-ghost-active, var(--utility-neutral-50));
    border-color: var(--border-input-active);
    -webkit-box-shadow: inset 0 0 0 calc(var(--control-border) * 2) var(--border-input-active);
    box-shadow: inset 0 0 0 calc(var(--control-border) * 2) var(--border-input-active);
  }

/* Borderless */
.form-control-borderless {
  display: block;
  width: 100%;
  border-radius: var(--radius-lg);
  --tw-font-weight: 400;
  font-weight: 400;
  --tw-outline-style: none;
  outline-style: none;
  min-height: var(--ctl-h, var(--control-h-sm));
  line-height: var(--ctl-line, var(--control-line-sm));
  font-size: var(--ctl-fs, var(--control-fs-sm));
  padding-block: calc((var(--ctl-h, var(--control-h-sm)) - var(--ctl-line, var(--control-line-sm)) - 2 * var(--control-border, 1px)) / 2);
  padding-inline: var(--ctl-px, 0.75rem);
  -webkit-transition: background-color 100ms ease, -webkit-box-shadow 100ms ease;
  transition: background-color 100ms ease, -webkit-box-shadow 100ms ease;
  transition: box-shadow 100ms ease, background-color 100ms ease;
  transition: box-shadow 100ms ease, background-color 100ms ease, -webkit-box-shadow 100ms ease;
  -webkit-tap-highlight-color: transparent;
  --tw-shadow: 0 0 #0000;
  -webkit-box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
  box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
  color: var(--text-input-primary);
  background-color: var(--bg-input-borderless);
  /* Minimal: no visible edge at rest — 1px transparent border for geometry parity. */
  border: var(--control-border) solid transparent;
}
@media (forced-colors: active) {
  .form-control-borderless {
    outline: 2px solid transparent;
    outline-offset: 2px;
  }
}
@media (hover: hover) {
  .form-control-borderless:disabled:hover {
    --tw-shadow: 0 0 #0000;
    -webkit-box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
    box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
  }
}

  .form-control-borderless:hover {
    background-color: var(--bg-input-borderless-hover);
  }

  .form-control-borderless:focus {
    background-color: var(--bg-input-borderless-active);
    border-color: var(--border-input-active);
    -webkit-box-shadow: inset 0 0 0 calc(var(--control-border) * 2) var(--border-input-active);
    box-shadow: inset 0 0 0 calc(var(--control-border) * 2) var(--border-input-active);
  }

/* Static / Readonly presentation */
.form-control-static {
  display: block;
  width: 100%;
  border-radius: var(--radius-lg);
  --tw-font-weight: 400;
  font-weight: 400;
  --tw-outline-style: none;
  outline-style: none;
  min-height: var(--ctl-h, var(--control-h-sm));
  line-height: var(--ctl-line, var(--control-line-sm));
  font-size: var(--ctl-fs, var(--control-fs-sm));
  padding-block: calc((var(--ctl-h, var(--control-h-sm)) - var(--ctl-line, var(--control-line-sm)) - 2 * var(--control-border, 1px)) / 2);
  padding-inline: var(--ctl-px, 0.75rem);
  -webkit-transition: background-color 100ms ease, -webkit-box-shadow 100ms ease;
  transition: background-color 100ms ease, -webkit-box-shadow 100ms ease;
  transition: box-shadow 100ms ease, background-color 100ms ease;
  transition: box-shadow 100ms ease, background-color 100ms ease, -webkit-box-shadow 100ms ease;
  -webkit-tap-highlight-color: transparent;
  --tw-shadow: 0 0 #0000;
  -webkit-box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
  box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
  color: var(--text-input-primary);
  background-color: var(--bg-input);
  /* Static presentation keeps the resting 1px border + 1px ring so it still reads as a field. */
  border: var(--control-border) solid var(--border-input);
  -webkit-box-shadow: inset 0 0 0 var(--control-border) var(--border-input);
  box-shadow: inset 0 0 0 var(--control-border) var(--border-input);
}
@media (forced-colors: active) {
  .form-control-static {
    outline: 2px solid transparent;
    outline-offset: 2px;
  }
}
@media (hover: hover) {
  .form-control-static:disabled:hover {
    --tw-shadow: 0 0 #0000;
    -webkit-box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
    box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
  }
}

  /* Readonly attribute styling (works for any .form-control*) */
  .form-control[readonly],
  .form-control-soft[readonly],
  .form-control-ghost[readonly],
  .form-control-borderless[readonly],
  .form-control-static[readonly] {
    color: var(--text-input-readonly, var(--text-input-tertiary));
    background-color: var(--bg-input-readonly, var(--utility-neutral-100));
    border-color: var(--border-input);
    -webkit-box-shadow: inset 0 0 0 var(--control-border) var(--border-input);
    box-shadow: inset 0 0 0 var(--control-border) var(--border-input);
  }

  /* Disabled (works for any .form-control*) */
  .form-control:disabled,
  .form-control-soft:disabled,
  .form-control-ghost:disabled,
  .form-control-borderless:disabled,
  .form-control-static:disabled,
  .form-control[disabled],
  .form-control-soft[disabled],
  .form-control-ghost[disabled],
  .form-control-borderless[disabled],
  .form-control-static[disabled] {
    color: var(--text-input-disabled);
    background-color: var(--bg-input-disabled);
    border-color: var(--border-input-disabled);
    -webkit-box-shadow: inset 0 0 0 var(--control-border) var(--border-input-disabled);
    box-shadow: inset 0 0 0 var(--control-border) var(--border-input-disabled);
    cursor: not-allowed;
    opacity: 0.75;
  }

  /* Read-only is focusable but never editable — suppress the focus ring so it
     reads as display-only (cursor default, no ring). */
  .form-control[readonly]:focus {
    border-color: var(--border-input);
    -webkit-box-shadow: inset 0 0 0 var(--control-border) var(--border-input);
    box-shadow: inset 0 0 0 var(--control-border) var(--border-input);
    outline: none;
  }

  .form-control-soft[readonly]:focus,
  .form-control-ghost[readonly]:focus,
  .form-control-borderless[readonly]:focus,
  .form-control-static[readonly]:focus {
    border-color: var(--border-input);
    -webkit-box-shadow: inset 0 0 0 var(--control-border) var(--border-input);
    box-shadow: inset 0 0 0 var(--control-border) var(--border-input);
    outline: none;
  }

/* -----------------------------------------
 * Date / Time inputs
 * Normalize text color to match regular inputs
 * ----------------------------------------- */
input[type="date"].form-control,
input[type="date"].form-control-soft,
input[type="date"].form-control-ghost,
input[type="date"].form-control-borderless,
input[type="date"].form-control-static,
input[type="datetime-local"].form-control,
input[type="datetime-local"].form-control-soft,
input[type="datetime-local"].form-control-ghost,
input[type="datetime-local"].form-control-borderless,
input[type="datetime-local"].form-control-static,
input[type="time"].form-control,
input[type="time"].form-control-soft,
input[type="time"].form-control-ghost,
input[type="time"].form-control-borderless,
input[type="time"].form-control-static {
  color: var(--text-input);
}

/* Calendar/clock picker icon */
input[type="date"]::-webkit-calendar-picker-indicator,
input[type="datetime-local"]::-webkit-calendar-picker-indicator,
input[type="time"]::-webkit-calendar-picker-indicator {
  color: var(--text-tertiary);
  opacity: 0.7;
  cursor: pointer;
}

input[type="date"]::-webkit-calendar-picker-indicator:hover,
input[type="datetime-local"]::-webkit-calendar-picker-indicator:hover,
input[type="time"]::-webkit-calendar-picker-indicator:hover {
  opacity: 1;
}


/* -----------------------------------------
 * Selects
 * ----------------------------------------- */
select.form-control,
select.form-control-soft,
select.form-control-ghost,
select.form-control-borderless,
select.form-control-static {
  cursor: pointer;
  background-color: var(--bg-input-select);
}

select.form-control-soft {
  cursor: pointer;
  background-color: var(--bg-input-soft, var(--utility-neutral-100));
}

/* Select placeholder option */
select:invalid {
  color: var(--text-input-placeholder);
}

select option[disabled][selected] {
  color: var(--text-input-placeholder);
}

select option {
  color: var(--text-input-primary);
}

/* -----------------------------------------
 * Textarea tweaks
 * ----------------------------------------- */
textarea.form-control,
textarea.form-control-soft,
textarea.form-control-ghost,
textarea.form-control-borderless,
textarea.form-control-static {
  resize: vertical;
}

/* #62 — the default textarea shares the EXACT input surface (--bg-input), so a
   multi-line field never reads a shade off from the single-line inputs beside
   it. Pinned at textarea+class specificity so no element default or ancestor
   rule can diverge it from the plain .form-control input. */
textarea.form-control {
  background-color: var(--bg-input);
}

/* Optional helpers */
.form-control-inline {
  /* tq-9126 (A151): a fine-pointer density, floored to the touch ladder (44 on coarse; unchanged on fine, in a fine scope and under .density-compact) */
  min-height: max(1.75rem, var(--control-h-xs));
  border-radius: var(--radius-md);
  padding-inline: 0.5rem;
  padding-block: 0.25rem;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  --tw-leading: 1rem;
  line-height: 1rem;
}

.form-control-mono {
  font-family: var(--font-mono, 'Space Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace);
  --tw-tracking: var(--tracking-tight, -0.025em);
  letter-spacing: var(--tracking-tight, -0.025em);
}

/* Search kind — we supply the clear affordance via .input-clear, so hide the
   browser's native search cancel/decoration to avoid a duplicate ✕. */
input[type="search"].form-control::-webkit-search-cancel-button,
input[type="search"].form-control-soft::-webkit-search-cancel-button,
input[type="search"].form-control-ghost::-webkit-search-cancel-button,
input[type="search"].form-control-borderless::-webkit-search-cancel-button,
input[type="search"].form-control::-webkit-search-decoration,
input[type="search"].form-control-soft::-webkit-search-decoration,
input[type="search"].form-control-ghost::-webkit-search-decoration,
input[type="search"].form-control-borderless::-webkit-search-decoration {
  -webkit-appearance: none;
  appearance: none;
}


/* -----------------------------------------
 * Semantic states (modifier classes + native aria)
 * Usage: class="form-control is-error"  OR  aria-invalid="true"
 *
 * Validation border — Pavel #239 → #272 (reconciled): the error border lives
 * ONLY on the INPUT itself (this ring), never on the control-group / wrapper /
 * input-group (those decorations stay removed — see below). It's a single inset
 * ring (no CSS border over it, no double edge) and is paired with the
 * `.field-feedback.is-error` message (dot + icon + text) + aria-invalid /
 * aria-describedby, which remains the primary, colour-independent signal.
 * ----------------------------------------- */
/* Every state stays a 1px border + 1px ring (an even 2px edge); only the HUE changes.
   Border and ring take the SAME token so the field never reads two-tone (a recoloured
   border over a stale neutral ring). Focus recolours both — no jump to a 2px ring. */
.is-error,
[aria-invalid="true"].form-control,
[aria-invalid="true"].form-control-soft,
[aria-invalid="true"].form-control-ghost,
[aria-invalid="true"].form-control-borderless {
  border-color: var(--border-input-error);
  -webkit-box-shadow: inset 0 0 0 var(--control-border) var(--border-input-error);
  box-shadow: inset 0 0 0 var(--control-border) var(--border-input-error);
}

  .is-error:hover,
  [aria-invalid="true"].form-control:hover {
    border-color: var(--border-input-error);
    -webkit-box-shadow: inset 0 0 0 var(--control-border) var(--border-input-error);
    box-shadow: inset 0 0 0 var(--control-border) var(--border-input-error);
  }

  .is-error:focus,
  [aria-invalid="true"].form-control:focus,
  [aria-invalid="true"].form-control-soft:focus,
  [aria-invalid="true"].form-control-ghost:focus,
  [aria-invalid="true"].form-control-borderless:focus {
    border-color: var(--border-input-error-focus);
    -webkit-box-shadow: inset 0 0 0 calc(var(--control-border) * 2) var(--border-input-error-focus);
    box-shadow: inset 0 0 0 calc(var(--control-border) * 2) var(--border-input-error-focus);
  }

.is-success {
  border-color: var(--border-input-success);
  -webkit-box-shadow: inset 0 0 0 var(--control-border) var(--border-input-success);
  box-shadow: inset 0 0 0 var(--control-border) var(--border-input-success);
}

  .is-success:hover {
    border-color: var(--border-input-success);
    -webkit-box-shadow: inset 0 0 0 var(--control-border) var(--border-input-success);
    box-shadow: inset 0 0 0 var(--control-border) var(--border-input-success);
  }

  .is-success:focus {
    border-color: var(--border-input-success-focus);
    -webkit-box-shadow: inset 0 0 0 calc(var(--control-border) * 2) var(--border-input-success-focus);
    box-shadow: inset 0 0 0 calc(var(--control-border) * 2) var(--border-input-success-focus);
  }

.is-warning {
  border-color: var(--border-input-warning, var(--border-input-hover));
  -webkit-box-shadow: inset 0 0 0 var(--control-border) var(--border-input-warning, var(--border-input-hover));
  box-shadow: inset 0 0 0 var(--control-border) var(--border-input-warning, var(--border-input-hover));
}

  .is-warning:hover {
    border-color: var(--border-input-warning, var(--border-input-hover));
    -webkit-box-shadow: inset 0 0 0 var(--control-border) var(--border-input-warning, var(--border-input-hover));
    box-shadow: inset 0 0 0 var(--control-border) var(--border-input-warning, var(--border-input-hover));
  }

  .is-warning:focus {
    border-color: var(--border-input-warning-focus, var(--border-warning));
    -webkit-box-shadow: inset 0 0 0 calc(var(--control-border) * 2) var(--border-input-warning-focus, var(--border-warning));
    box-shadow: inset 0 0 0 calc(var(--control-border) * 2) var(--border-input-warning-focus, var(--border-warning));
  }

.is-info {
  border-color: var(--border-input-info, var(--border-input-hover));
  -webkit-box-shadow: inset 0 0 0 var(--control-border) var(--border-input-info, var(--border-input-hover));
  box-shadow: inset 0 0 0 var(--control-border) var(--border-input-info, var(--border-input-hover));
}

  .is-info:hover {
    border-color: var(--border-input-info, var(--border-input-hover));
    -webkit-box-shadow: inset 0 0 0 var(--control-border) var(--border-input-info, var(--border-input-hover));
    box-shadow: inset 0 0 0 var(--control-border) var(--border-input-info, var(--border-input-hover));
  }

  .is-info:focus {
    border-color: var(--border-input-info-focus, var(--border-info));
    -webkit-box-shadow: inset 0 0 0 calc(var(--control-border) * 2) var(--border-input-info-focus, var(--border-info));
    box-shadow: inset 0 0 0 calc(var(--control-border) * 2) var(--border-input-info-focus, var(--border-info));
  }


/* -----------------------------------------
 * Addons / Group text
 * ----------------------------------------- */
.input-addon,
.input-group-text {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  min-height: 2rem;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  padding-inline: 0.5rem;
  padding-block: 0.375rem;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  --tw-leading: 1rem;
  line-height: 1rem;
  --tw-font-weight: 400;
  font-weight: 400;
  white-space: nowrap;
  color: var(--text-input-tertiary);
  background-color: var(--bg-input-addon, var(--utility-neutral-100));
  /* Standalone addon carries its own 1px ring; inside a group the group ring +
     divider take over (see .input-group segment rules). */
  -webkit-box-shadow: inset 0 0 0 1px var(--border-input-addon, var(--border-input));
  box-shadow: inset 0 0 0 1px var(--border-input-addon, var(--border-input));
}

/* Addon sizing helpers */
.input-addon-xs,
.input-group-text-xs {
  min-height: 1.5rem;
  padding-inline: 0.5rem;
  padding-block: 0.125rem;
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  --tw-leading: 1rem;
  line-height: 1rem;
}

.input-addon-sm,
.input-group-text-sm {
  min-height: 1.75rem;
  padding-inline: 0.5rem;
  padding-block: 0.25rem;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  --tw-leading: 1rem;
  line-height: 1rem;
}

.input-addon-lg,
.input-group-text-lg {
  min-height: 2.5rem;
  padding-inline: 0.75rem;
  padding-block: 0.5rem;
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  --tw-leading: 1.25rem;
  line-height: 1.25rem;
}


/* -----------------------------------------
 * Input Groups (single-line, no wrap)
 * ----------------------------------------- */
.input-group {
  position: relative;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  width: 100%;
  border-radius: var(--radius-md);
  background-color: var(--bg-input);
  /* No drop shadow on a control container either (#ds-controls-reinly): --shadow-xs is
     0 1px 1px 0, so it re-creates on the wrapper the bottom-heavy edge just removed
     from the field. No --shadow-input escape hatch, per the DS ruling — a hatch that
     defaults to none on every control is how the offset comes back. */
}

  /* Single ring around the WHOLE group — rendered above the segments (same
     overlay pattern as .input-group-stack::after) so the group reads as ONE
     ringed field, not a row of boxes. */
  .input-group::after {
    content: "";
    pointer-events: none;
    position: absolute;
    inset: 0;
    border-radius: var(--radius-md);
    -webkit-box-shadow: inset 0 0 0 1px var(--border-input);
    box-shadow: inset 0 0 0 1px var(--border-input);
    z-index: 3;
  }

  .input-group:hover::after {
    -webkit-box-shadow: inset 0 0 0 1px var(--border-input-hover);
    box-shadow: inset 0 0 0 1px var(--border-input-hover);
  }

  .input-group:focus-within::after {
    outline: 2px solid var(--focus-ring); outline-offset: -2px;
  }

  /* collapse seams */
  .input-group > * {
    margin-left: -1px;
    position: relative;
    z-index: 0;
  }

  /* first/last radii */
  .input-group > :first-child {
    margin-left: 0;
    border-top-left-radius: var(--radius-md);
    border-bottom-left-radius: var(--radius-md);
  }

  .input-group > :last-child {
    border-top-right-radius: var(--radius-md);
    border-bottom-right-radius: var(--radius-md);
  }

  /* middle flat */
  .input-group > :not(:first-child):not(:last-child) {
    border-radius: 0;
  }

  /* bring hovered/focused above seam */
  .input-group > *:hover,
  .input-group > *:focus-within {
    z-index: 1;
  }

  /* flatten inner radii for contents */
  .input-group :is( .form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static, .input-addon, .input-group-text, .btn-primary, .btn-secondary, .btn-soft, .btn-ghost, .btn-danger, .btn-danger-outline, .btn-glass, .btn-icon ) {
    border-radius: 0;
  }

  /* restore outer radii on the group edges */
  .input-group > :first-child,
  .input-group > :first-child :is( .form-control,.form-control-soft,.form-control-ghost,.form-control-borderless,.form-control-static, .btn-primary,.btn-secondary,.btn-soft,.btn-ghost,.btn-danger,.btn-danger-outline,.btn-glass,.btn-icon ),
  .input-group > :first-child :is(.input-addon,.input-group-text) {
    border-top-left-radius: var(--radius-md);
    border-bottom-left-radius: var(--radius-md);
  }

  .input-group > :last-child,
  .input-group > :last-child :is( .form-control,.form-control-soft,.form-control-ghost,.form-control-borderless,.form-control-static, .btn-primary,.btn-secondary,.btn-soft,.btn-ghost,.btn-danger,.btn-danger-outline,.btn-glass,.btn-icon ),
  .input-group > :last-child :is(.input-addon,.input-group-text) {
    border-top-right-radius: var(--radius-md);
    border-bottom-right-radius: var(--radius-md);
  }

  /* Input Groups – Compact */
  .input-group.input-group-compact :is( .form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static ) {
    /* tq-9126 (A151): a fine-pointer density, floored to the touch ladder (44 on coarse; unchanged on fine, in a fine scope and under .density-compact) */
    min-height: max(1.75rem, var(--control-h-xs));
    padding-inline: 0.5rem;
    padding-block: 0.25rem;
    font-size: 0.75rem;
    line-height: var(--tw-leading, 1.125rem);
    --tw-leading: 1rem;
    line-height: 1rem;
  }

  .input-group.input-group-compact :is(.input-addon,.input-group-text) {
    min-height: max(1.75rem, var(--control-h-xs));
    padding-inline: 0.5rem;
    padding-block: 0.25rem;
    font-size: 0.75rem;
    line-height: var(--tw-leading, 1.125rem);
    --tw-leading: 1rem;
    line-height: 1rem;
  }

  /* Input Groups – Equal widths */
  .input-group.input-group-equal > * {
    -webkit-box-flex: 1;
    -ms-flex: 1;
    flex: 1;
  }

  .input-group.input-group-equal > :is(.input-addon,.input-group-text) {
    -webkit-box-flex: 0;
    -ms-flex: none;
    flex: none;
  }

  /* Bare leading/trailing icon dropped straight into an .input-group — e.g. the
     search magnifier (every search field). With no
     definite size it became a full-height flex item, so the glyph stretched and
     sat off-centre. Pin it to a centred, non-stretching slot so the icon reads
     crisp + aligned in every search field, at any group size.
     (Pavel #289 #290 #291 #292) */
  .input-group > i[class*="fa-"],
  .input-group > svg {
    -webkit-box-flex: 0;
    -ms-flex: 0 0 auto;
    flex: 0 0 auto;
    align-self: center;
    display: inline-grid;
    place-items: center;
    padding-inline: 0.625rem 0.25rem;
    font-size: 0.9375rem;
    line-height: 1;
    color: var(--text-search-icon, var(--text-quaternary));
    pointer-events: none;
  }

  .input-group > svg {
    -webkit-box-sizing: content-box;
    box-sizing: content-box;
    width: 1.125rem;
    height: 1.125rem;
  }

  .input-group-sm > i[class*="fa-"],
  .input-group-sm > svg {
    padding-inline: 0.5rem 0.125rem;
    font-size: 0.875rem;
  }

  /* Segments carry no ring of their own — the group ::after is the single
     outline. Inner/nested controls stay flat in every state. The 1px border is kept
     but recoloured TRANSPARENT (not removed) so each segment keeps the geometry the
     shared bordered padding expects, while showing no per-segment edge. */
  .input-group :is( .form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static ),
  .input-group :is( .form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static ):hover,
  .input-group :is( .form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static ):focus {
    border-color: transparent;
    -webkit-box-shadow: none;
    box-shadow: none;
  }

  /* First segment flat; every subsequent segment gets a thin 1px leading
     divider (a box-shadow separator, not a full ring), held in every state. */
  .input-group > :first-child,
  .input-group > :first-child:hover,
  .input-group > :first-child:focus,
  .input-group > :first-child:focus-within {
    -webkit-box-shadow: none;
    box-shadow: none;
  }

  .input-group > *:not(:first-child),
  .input-group > *:not(:first-child):hover,
  .input-group > *:not(:first-child):focus,
  .input-group > *:not(:first-child):focus-within {
    -webkit-box-shadow: inset 1px 0 0 0 var(--border-input);
    box-shadow: inset 1px 0 0 0 var(--border-input);
  }


/* ==========================================================================
   NEW: Per-item hover/focus background INSIDE groups
   - Applies to: .input-group, .input-group-wrap, .input-group-stack
   - Only the specific control hovered/focused changes bg
   - Does NOT touch addons/buttons/container borders (your existing behavior stays)
   ========================================================================== */

/* Token hooks (scoped, so they don't affect anything else) */
.input-group,
.input-group-wrap,
.input-group-stack {
  --bg-input-group-item-hover: var(--bg-input-group-hover, var(--bg-input-soft-hover, var(--bg-primary-subtle)));
  --bg-input-group-item-focus: var(--bg-input-group-focus, var(--bg-input-soft-active, var(--bg-primary-hover)));
}

  /* 1) .input-group (single-line) */
  .input-group :is( .form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static, select.form-control, select.form-control-soft, select.form-control-ghost, select.form-control-borderless, select.form-control-static, textarea.form-control, textarea.form-control-soft, textarea.form-control-ghost, textarea.form-control-borderless, textarea.form-control-static ):hover {
    background-color: var(--bg-input-group-item-hover);
  }

  .input-group :is( .form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static, select.form-control, select.form-control-soft, select.form-control-ghost, select.form-control-borderless, select.form-control-static, textarea.form-control, textarea.form-control-soft, textarea.form-control-ghost, textarea.form-control-borderless, textarea.form-control-static ):focus {
    background-color: var(--bg-input-group-item-focus);
  }

  /* 2) .input-group-wrap (chips/tags + input)
   - Only the actual control changes bg, not the container.
   - Keeps your existing container border highlight. */
  .input-group-wrap :is( .form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static, select.form-control, select.form-control-soft, select.form-control-ghost, select.form-control-borderless, select.form-control-static, textarea.form-control, textarea.form-control-soft, textarea.form-control-ghost, textarea.form-control-borderless, textarea.form-control-static ):hover {
    background-color: var(--bg-input-group-item-hover);
  }

  .input-group-wrap :is( .form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static, select.form-control, select.form-control-soft, select.form-control-ghost, select.form-control-borderless, select.form-control-static, textarea.form-control, textarea.form-control-soft, textarea.form-control-ghost, textarea.form-control-borderless, textarea.form-control-static ):focus {
    background-color: var(--bg-input-group-item-focus);
  }

  /* 3) .input-group-stack (multi-row combo)
   - Stack removes inner borders and uses container outline; this adds per-field bg.
   - Works even though controls are borderless inside stack. */
  .input-group-stack :is( .form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static, select.form-control, select.form-control-soft, select.form-control-ghost, select.form-control-borderless, select.form-control-static, textarea.form-control, textarea.form-control-soft, textarea.form-control-ghost, textarea.form-control-borderless, textarea.form-control-static ):hover {
    background-color: var(--bg-input-group-item-hover);
  }

  .input-group-stack :is( .form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static, select.form-control, select.form-control-soft, select.form-control-ghost, select.form-control-borderless, select.form-control-static, textarea.form-control, textarea.form-control-soft, textarea.form-control-ghost, textarea.form-control-borderless, textarea.form-control-static ):focus {
    background-color: var(--bg-input-group-item-focus);
  }


/* -----------------------------------------
 * Input Group Wrap (chips/tags + input)
 * Multi-line wrapping control
 * ----------------------------------------- */
.input-group-wrap {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  border-radius: var(--radius-md);
  padding-inline: 0.5rem;
  padding-block: 0.375rem;
  background-color: var(--bg-input);
  /* Whole chip container reads as ONE ringed field. */
  -webkit-box-shadow: inset 0 0 0 1px var(--border-input);
  box-shadow: inset 0 0 0 1px var(--border-input);
}

  .input-group-wrap:hover {
    -webkit-box-shadow: inset 0 0 0 1px var(--border-input-hover);
    box-shadow: inset 0 0 0 1px var(--border-input-hover);
  }

  .input-group-wrap:focus-within {
    outline: 2px solid var(--focus-ring); outline-offset: -2px;
  }

  .input-group-wrap .form-control,
  .input-group-wrap .form-control-soft,
  .input-group-wrap .form-control-ghost,
  .input-group-wrap .form-control-borderless,
  .input-group-wrap .form-control-static {
    min-width: 120px;
    border-style: var(--tw-border-style, solid);
    border-width: 0px;
    padding: 0;
    --tw-shadow: 0 0 #0000;
    --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width, 0px)) var(--tw-ring-color, currentcolor);
    -webkit-box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
    box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
    --tw-outline-style: none;
    outline-style: none;
    min-height: unset;
    background-color: var(--alpha-0);
  }
  @media (forced-colors: active) {
  .input-group-wrap .form-control, .input-group-wrap .form-control-soft, .input-group-wrap .form-control-ghost, .input-group-wrap .form-control-borderless, .input-group-wrap .form-control-static {
      outline: 2px solid transparent;
      outline-offset: 2px;
  }
}


/* -----------------------------------------
 * Input Group Stack (multi-line combo inputs)
 * - Outer border via OUTLINE (no layout height impact)
 * ----------------------------------------- */
.input-group-stack {
  position: relative;
  width: 100%;
  overflow: hidden;
  border-radius: var(--radius-md);
  background-color: var(--bg-input);
  /* See .input-group above — no offset drop shadow on the container. */
  border: 0;
}

  /* Ring via ::after — renders above content so hover backgrounds don't overlap.
     One inset ring around the whole stack (2px on focus). */
  .input-group-stack::after {
    content: "";
    pointer-events: none;
    position: absolute;
    inset: 0;
    border-radius: var(--radius-md);
    -webkit-box-shadow: inset 0 0 0 1px var(--border-input-stack);
    box-shadow: inset 0 0 0 1px var(--border-input-stack);
    z-index: 1;
  }

  .input-group-stack:hover::after {
    -webkit-box-shadow: inset 0 0 0 1px var(--border-input-stack-hover);
    box-shadow: inset 0 0 0 1px var(--border-input-stack-hover);
  }

  .input-group-stack:focus-within::after,
  .input-group-stack:has(.combobox.is-focused)::after {
    outline: 2px solid var(--focus-ring); outline-offset: -2px;
  }

  /* An INVALID group (tq-9035 A143, moved from the app, isabella 900067398): any child carrying .is-error, or ASP.NET's
     server-rendered .input-validation-error, turns the group's ONE ring red (the --border-input-group-error tokens,
     theme-light / theme-dark); focus wins while focused, as A142 ruled. :has() on .input-group / .input-group-stack, a
     low-churn container, is allowed under the :has perf rule. */
  .input-group:has(.is-error, .input-validation-error)::after,
  .input-group-stack:has(.is-error, .input-validation-error)::after {
    -webkit-box-shadow: inset 0 0 0 1px var(--border-input-group-error);
    box-shadow: inset 0 0 0 1px var(--border-input-group-error);
  }

  .input-group:has(.is-error, .input-validation-error):focus-within::after,
  .input-group-stack:has(.is-error, .input-validation-error):focus-within::after {
    -webkit-box-shadow: inset 0 0 0 1px var(--border-input-group-error-focus);
    box-shadow: inset 0 0 0 1px var(--border-input-group-error-focus);
  }

  .input-group-stack > * {
    width: 100%;
  }

  /* rows */
  .input-group-stack .input-row {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    width: 100%;
  }

/* grid row variant (12-col baseline) */
.input-row.input-row-grid {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
}

  .input-row.input-row-grid > * {
    min-width: 0;
  }

/* remove inner borders; rely on container/dividers. The border WIDTH is kept (recoloured
   transparent, not removed) so each segment keeps the geometry the shared bordered padding
   expects — border-0 here would shrink every stacked control by 2px. */
.input-group-stack :is( .form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static, .input-addon, .input-group-text, .btn-primary, .btn-secondary, .btn-soft, .btn-ghost, .btn-danger, .btn-danger-outline, .btn-glass, .btn-icon ) {
  border-radius: 0;
  --tw-shadow: 0 0 #0000;
  -webkit-box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
  box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow, 0 0 #0000);
  border: var(--control-border) solid transparent;
  background-color: var(--alpha-0);
}

/* dividers between rows */
.input-group-stack .input-row + .input-row {
  border-top-style: var(--tw-border-style, solid);
  border-top-width: 1px;
  border-color: var(--border-input-stack-divider);
}

/* dividers between columns within a row */
.input-group-stack .input-row > * + * {
  border-left-style: var(--tw-border-style, solid);
  border-left-width: 1px;
  border-color: var(--border-input-stack-divider);
}


/* ==========================================================================
   VALIDATION – Input Groups turn RED if any child is invalid
   ========================================================================== */

/* Pavel #239 → #272 — the validation border is scoped to the INPUT, never the
   wrapper. So the input-group / -wrap / -stack keeps its normal ring + dividers
   when a child is invalid (NO group-level error recolour); only the child input
   carries the error ring, and the `.field-feedback.is-error` message carries the
   detail. (The group-error ring/divider recolours stay removed.) */


/* -----------------------------------------
 * Sizes — REMOVED. See @utility form-control-{xs,sm,md,lg,xl} in base/utilities.css.
 *
 * This block used to redeclare all four tiers here, under the heading "Sizes
 * (authoritative, button-aligned)". It was neither. It was DEAD CODE — the @utility
 * of the same name is emitted later in the bundle and won every one of these — and
 * its ladder (24/28/32/40) was aligned to nothing: buttons run 24/32/40/48. It only
 * became visible when the utility stopped declaring min-height directly (it now sets
 * the shared --ctl-* vars), at which point these stale min-h-6/7/8/10 values took
 * over and every input rendered a tier short.
 *
 * Do not reintroduce a second definition of a tier. One tier = one place = the
 * @utility, which sets --ctl-h / --ctl-line / --ctl-fs from the --control-* ladder
 * in base/theme.css. CONTROL-HEIGHT PARITY depends on there being exactly one.
 * ----------------------------------------- */

/* Radius helpers */
.input-first {
  border-top-left-radius: var(--radius-md) !important;
  border-bottom-left-radius: var(--radius-md) !important;
}

.input-first-full {
  border-top-left-radius: var(--radius-md) !important;
  border-top-right-radius: var(--radius-md) !important;
}

.input-last {
  border-top-right-radius: var(--radius-md) !important;
  border-bottom-right-radius: var(--radius-md) !important;
}

.input-last-full {
  border-bottom-right-radius: var(--radius-md) !important;
  border-bottom-left-radius: var(--radius-md) !important;
}

.input-start-first {
  border-top-left-radius: var(--radius-md) !important;
}

.input-start-last {
  border-top-right-radius: var(--radius-md) !important;
}

.input-end-first {
  border-bottom-left-radius: var(--radius-md) !important;
}

.input-end-last {
  border-bottom-right-radius: var(--radius-md) !important;
}


/* -----------------------------------------
 * Input Clear Button
 * Shows an "x" inside focused text inputs with a value.
 * Eligible containers: .controls (standard form) and .input-row (stacked groups).
 *
 * Positioning math — button is mathematically centered in the input's right
 * padding zone, so it doesn't visually collide with the value text:
 *
 *   size  | input h | input pad-x | btn size | right-offset
 *   xs    | 24px    | 8px (px-2)  | 12px     | 5px
 *   sm    | 28px    | 8px (px-2)  | 14px     | 6px
 *   md    | 32px    | 8px (px-2)  | 16px     | 6px   (default)
 *   lg    | 40px    | 12px (px-3) | 18px     | 8px
 * ----------------------------------------- */
.controls,
.input-row {
  position: relative;
}

.input-clear {
  position: absolute;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  right: 6px;
  /* Pavel #258 — anchor to the INPUT's vertical centre, not 50% of .controls:
     when a validation message is added inside .controls the container grows, and
     top:50% would drop the clear icon below the field (measured: +19.8px, the
     icon lands outside the control entirely). So we anchor to half the control
     height — but that height MUST come from the token ladder, never a literal.

     Pavel #365 — it used to be a literal (0.875rem), copied from the retired
     24/28/32/40 min-h ladder. The live ladder is --control-h-* (24/32/40/48),
     so every tier but xs sat high: sm −2px, md −4px, lg −4px, xl −2px. Deriving
     from the same token the @utility uses makes this self-correcting if the
     ladder moves again. Default = sm (DS-SIZE-SM); size rules below override. */
  top: calc(var(--control-h-sm) / 2);
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
  width: 16px;
  height: 16px;
  font-size: 10px;
  line-height: 1;
  color: var(--text-tertiary);
  opacity: 0;
  pointer-events: none;
  border: 0;
  background: none;
  padding: 0;
  margin: 0;
  border-radius: 9999px;
  z-index: 2;
  -webkit-transition: opacity var(--duration-fast, 100ms) ease,
              color var(--duration-fast, 100ms) ease,
              background-color var(--duration-fast, 100ms) ease;
  transition: opacity var(--duration-fast, 100ms) ease,
              color var(--duration-fast, 100ms) ease,
              background-color var(--duration-fast, 100ms) ease;
}

  .input-clear > i,
  .input-clear > svg {
    line-height: 1;
    display: block;
  }

/* Size variants — apply to both .controls and .input-row contexts */
:is(.controls, .input-row):has(:is(.form-control-xs, select.form-control-xs, textarea.form-control-xs)) > .input-clear {
  right: 5px;
  top: calc(var(--control-h-xs) / 2);   /* #365 — token-derived, was 0.75rem */
  width: 12px;
  height: 12px;
  font-size: 8px;
}

:is(.controls, .input-row):has(:is(.form-control-sm, select.form-control-sm, textarea.form-control-sm)) > .input-clear {
  right: 6px;
  top: calc(var(--control-h-sm) / 2);   /* #365 — token-derived, was 0.875rem */
  width: 14px;
  height: 14px;
  font-size: 9px;
}

:is(.controls, .input-row):has(:is(.form-control-md, select.form-control-md, textarea.form-control-md)) > .input-clear {
  top: calc(var(--control-h-md) / 2);   /* #365 — token-derived, was 1rem (−4px) */
}

:is(.controls, .input-row):has(:is(.form-control-lg, select.form-control-lg, textarea.form-control-lg)) > .input-clear {
  right: 8px;
  top: calc(var(--control-h-lg) / 2);   /* #365 — token-derived, was 1.25rem (−4px) */
  width: 18px;
  height: 18px;
  font-size: 11px;
}

/* #365 — xl tier had NO rule at all, so it fell back to the sm default. */
:is(.controls, .input-row):has(:is(.form-control-xl, select.form-control-xl, textarea.form-control-xl)) > .input-clear {
  right: 8px;
  top: calc(var(--control-h-xl) / 2);
  width: 18px;
  height: 18px;
  font-size: 11px;
}

/* Visibility — controlled by JS via .has-clear-value */
:is(.controls, .input-row).has-clear-value > .input-clear {
  opacity: 0.55;
  pointer-events: auto;
}

.input-clear:hover {
  opacity: 1;
  color: var(--text-primary);
  background-color: var(--bg-secondary);
}

.input-clear:active {
  background-color: color-mix(in oklch, var(--text-primary) 10%, transparent);
}

.input-clear:focus-visible {
  opacity: 1;
  outline: 2px solid var(--focus-ring);
  outline-offset: 1px;
}

/* TOUCH DENSITY (DR-006 carry-forward) — the × keeps its 16px GLYPH but gets a
   >=44px HIT AREA on coarse pointers.

   Why a pseudo-element and not width/height: the round-2 ladder re-point grew every
   control to 44px, but the clear-(x) is sized independently of --control-h-* (it is
   deliberately small so it does not crowd the value text), so it stayed at 16px --
   measured 16x16 in a 44px field. Growing the box itself would either swallow the
   value text or force a visual glyph nobody asked for. An invisible ::before is the
   only expander that adds target area without adding a single painted pixel.

   The pseudo is a CHILD of the button, so taps anywhere in it dispatch to the button.
   Centred on the glyph, so the target grows symmetrically and the (x) stays exactly
   where the eye expects it -- the top: calc(--control-h/2) anchor above is untouched.

   44px is also exactly --control-h-* on coarse, so the expander never exceeds the
   field vertically. Horizontally it overhangs the field edge by ~8px; that lands in
   the form gutter (grid gaps are 12-16px), not on the neighbouring control.

   Desktop is deliberately untouched: a mouse does not need 44px, and the expander
   would silently steal hover/click from the input's right padding zone. */
@media (pointer: coarse) {
  .input-clear::before {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    -webkit-transform: translate(-50%, -50%);
    -ms-transform: translate(-50%, -50%);
    transform: translate(-50%, -50%);
    width: 44px;
    height: 44px;
    /* no background / no border — target area only */
  }
}

/* No extra right-padding on inputs — the button overlays the right padding zone.
   The button is positioned ENTIRELY within the input's intrinsic right-pad area
   (see math in header comment above), so it doesn't collide with the value text. */

/* Table cell context: td.controls has minimal cell padding (1px) so the
   clear button offset must account for cell-pad + input-border + breathing room.
   Middle cells: 1px pad + 1px border + 4px = 6px
   Last-child cells: 16px pad + 1px border + 3px = 20px */
.table td.controls > .input-clear {
  right: 6px;
}

.table tr > td.controls:last-child > .input-clear {
  right: 20px;
}


/* ==========================================================================
   INPUT AFFIX — Icon overlay (prefix and/or suffix)
   A lighter-weight alternative to .input-group when you just want an
   icon inside the input rather than a full bordered addon.

   <div class="input-affix">
     <i class="fa-light fa-magnifying-glass input-affix__icon"></i>
     <input class="form-control" />
   </div>

   For trailing affix add .input-affix--end (or use both prefix + suffix).
   ========================================================================== */

.input-affix {
  position: relative;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  width: 100%;
}

.input-affix__icon,
.input-affix__btn {
  pointer-events: none;
  position: absolute;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
  color: var(--text-input-placeholder, var(--text-tertiary));
  /* #88 — the base control is sm, so the DEFAULT affix icon is sized/placed for
     sm (matching the :has(.form-control-sm) rule below). A bare .form-control no
     longer inherits the larger md-scale icon, so the glyph lines up with the
     field's text. Opt UP to md/lg with an explicit size class. */
  font-size: 11px;
  z-index: 1;
  left: 8px;
  width: 14px;
  height: 14px;
}

.input-affix--end .input-affix__icon,
.input-affix__icon--end,
.input-affix__btn--end {
  left: auto;
  right: 10px;
}

.input-affix__btn {
  cursor: pointer;
  pointer-events: auto;
  background: transparent;
  border: 0;
  padding: 0;
  border-radius: 4px;
  -webkit-transition: color 100ms ease, background-color 100ms ease;
  transition: color 100ms ease, background-color 100ms ease;
}

.input-affix__btn:hover {
  color: var(--text-input);
  background-color: var(--bg-input-soft-hover, var(--utility-neutral-100));
}

/* TOUCH DENSITY (DR-006 carry-forward) — same gap, same fix, as `.input-clear` above.
   Nelson's adopt-C wave surfaced this DS-side: `.input-affix__btn` is the canonical
   password-reveal / affix action, authored at 14x14 (it inherits the affix ICON box so
   the glyph lines up with the field's text), and the DS shipped NO coarse rule for it.
   App markup therefore could not reach 44px by adopting the right class — the ladder
   simply was not there — which is why the workaround in the app was to reach for
   `.btn-ghost .btn-icon-sm` instead. The canonical component now carries the ladder, so
   the adoption is the correct fix rather than a downgrade.

   Invisible ::before, not a bigger box: growing a 14x14 affix to 44x44 would swallow the
   value text and force a painted control nobody asked for. `.input-affix__btn` is already
   `position: absolute` (from the shared `@apply absolute` block above), so the pseudo
   anchors to the button — no `position: relative` restatement needed here, unlike the
   unpositioned hosts in dropdown.css / badge.css.

   The button's own `transform: translateY(-50%)` does not disturb this: the pseudo is
   positioned against the button's padding box, which the transform does not change.

   Vertically 44px equals --control-h-* on coarse, so the expander never exceeds the
   field. Horizontally it overhangs the field edge by ~8px into the form gutter (grid
   gaps are 12-16px), not onto the neighbouring control — identical to `.input-clear`.

   Desktop deliberately untouched. */
@media (pointer: coarse) {
  .input-affix__btn::before {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    -webkit-transform: translate(-50%, -50%);
    -ms-transform: translate(-50%, -50%);
    transform: translate(-50%, -50%);
    width: 44px;
    height: 44px;
    /* no background / no border — target area only */
  }
}

/* Push input padding to make room for the icon (sm base — see #88) */
.input-affix > :is(.form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static) {
  padding-left: 26px;
}

.input-affix--end > :is(.form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static),
.input-affix:has(.input-affix__icon--end, .input-affix__btn--end) > :is(.form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static) {
  padding-right: 26px;
}

/* Explicit MD affix sizing — opt up from the sm base. */
.input-affix:has(.form-control-md) :is(.input-affix__icon, .input-affix__btn) {
  left: 10px;
  width: 16px;
  height: 16px;
  font-size: 12px;
}

.input-affix:has(.form-control-md) > :is(.form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static) {
  padding-left: 32px;
}

.input-affix--end:has(.form-control-md) > :is(.form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static),
.input-affix:has(.form-control-md):has(.input-affix__icon--end, .input-affix__btn--end) > :is(.form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static) {
  padding-right: 32px;
}

/* Size-aware affix positioning */
.input-affix:has(.form-control-xs) :is(.input-affix__icon, .input-affix__btn) {
  left: 6px;
  width: 12px;
  height: 12px;
  font-size: 10px;
}

.input-affix:has(.form-control-xs) > :is(.form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static) {
  padding-left: 22px;
}

.input-affix:has(.form-control-sm) :is(.input-affix__icon, .input-affix__btn) {
  left: 8px;
  width: 14px;
  height: 14px;
  font-size: 11px;
}

.input-affix:has(.form-control-sm) > :is(.form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static) {
  padding-left: 26px;
}

.input-affix:has(.form-control-lg) :is(.input-affix__icon, .input-affix__btn) {
  left: 12px;
  width: 18px;
  height: 18px;
  font-size: 14px;
}

.input-affix:has(.form-control-lg) > :is(.form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static) {
  padding-left: 38px;
}


/* ==========================================================================
   INPUT FOCUS RING — Optional outer glow on focus.
   Apply .is-ringed to any form-control to add a soft accent ring on focus.
   ========================================================================== */

.form-control.is-ringed:focus,
.form-control-soft.is-ringed:focus,
.form-control-ghost.is-ringed:focus,
.form-control-borderless.is-ringed:focus,
.form-control-static.is-ringed:focus {
  /* 2px inset ring keeps the field edge, plus the optional outer glow. */
  outline: 2px solid var(--focus-ring); outline-offset: -2px;
}

/* Pavel note #239 — a ringed invalid field focuses with the NORMAL brand halo
   (the `.is-ringed:focus` rule above), not a red one. No red validation halo. */

.form-control.is-ringed.is-success:focus,
.form-control-soft.is-ringed.is-success:focus,
.form-control-ghost.is-ringed.is-success:focus,
.form-control-borderless.is-ringed.is-success:focus {
  outline: 2px solid var(--focus-ring); outline-offset: -2px;
}


/* ==========================================================================
   INPUT-STEPPER — Numeric input with +/- buttons.
   <div class="input-stepper">
     <button class="input-stepper__btn" data-step="-1">−</button>
     <input type="number" class="form-control" value="1" />
     <button class="input-stepper__btn" data-step="1">+</button>
   </div>
   ========================================================================== */

/* The ring is an INSET box-shadow on the wrapper, and children paint above their
   parent's box-shadow — so a full-bleed button hover fill covered the ring and the
   +/- buttons read as overlapping the input's border (Pavel #367). Padding the
   wrapper by the ring's own width holds the buttons inside it. 2px, not 1px: the
   focus-within ring thickens to 2px, and the buttons must clear that state too. */
.input-stepper {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: stretch;
  -ms-flex-align: stretch;
  align-items: stretch;
  border-radius: var(--radius-md);
  --stepper-ring: 2px;
  -webkit-box-shadow: inset 0 0 0 1px var(--border-input);
  box-shadow: inset 0 0 0 1px var(--border-input);
  background-color: var(--bg-input);
  overflow: hidden;
  padding: var(--stepper-ring);
}

.input-stepper:hover {
  -webkit-box-shadow: inset 0 0 0 1px var(--border-input-hover);
  box-shadow: inset 0 0 0 1px var(--border-input-hover);
}

.input-stepper:focus-within {
  outline: 2px solid var(--focus-ring); outline-offset: -2px;
}

.input-stepper > input {
  width: 100%;
  border-style: var(--tw-border-style, solid);
  border-width: 0px;
  background-color: transparent;
  text-align: center;
  font-size: 0.875rem;
  line-height: var(--tw-leading, 1.375rem);
  --tw-outline-style: none;
  outline-style: none;
  min-width: 56px;
  padding: 0 6px;
  color: var(--text-input);
  -moz-appearance: textfield;
}
@media (forced-colors: active) {
  .input-stepper > input {
    outline: 2px solid transparent;
    outline-offset: 2px;
  }
}

.input-stepper > input::-webkit-outer-spin-button,
.input-stepper > input::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

.input-stepper__btn {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  width: 28px;
  background-color: transparent;
  border: 0;
  color: var(--text-input);
  font-size: 14px;
  line-height: 1;
  -webkit-transition: background-color 100ms ease, color 100ms ease;
  transition: background-color 100ms ease, color 100ms ease;
}

.input-stepper__btn:hover {
  background-color: var(--bg-input-soft-hover, var(--utility-neutral-100));
}

.input-stepper__btn:disabled,
.input-stepper__btn[disabled] {
  opacity: 0.4;
  cursor: not-allowed;
}

/* #90 — keep the +/- hover fill INSIDE the stepper's rounded box. The wrapper
   already clips with overflow:hidden; rounding the end buttons' outer corners
   guarantees the hover/active tint follows the rounded edge instead of squaring
   off past the corner.
   #367: the radius is now the OUTER radius minus the ring inset, not `inherit` —
   a button held 2px inside the box needs a correspondingly tighter corner, or it
   bulges against the ring it is supposed to sit within. */
.input-stepper > .input-stepper__btn:first-child {
  border-top-left-radius: calc(var(--radius-md, 0.375rem) - var(--stepper-ring));
  border-bottom-left-radius: calc(var(--radius-md, 0.375rem) - var(--stepper-ring));
}

.input-stepper > .input-stepper__btn:last-child {
  border-top-right-radius: calc(var(--radius-md, 0.375rem) - var(--stepper-ring));
  border-bottom-right-radius: calc(var(--radius-md, 0.375rem) - var(--stepper-ring));
}

.input-stepper.input-stepper-sm > input { min-width: 44px; padding: 2px 4px; font-size: 12px; }
.input-stepper.input-stepper-sm .input-stepper__btn { width: 24px; font-size: 12px; }
.input-stepper.input-stepper-lg > input { min-width: 72px; padding: 6px 8px; font-size: 15px; }
.input-stepper.input-stepper-lg .input-stepper__btn { width: 36px; font-size: 16px; }


/* ==========================================================================
   INPUT-NUMERIC — text input with subtle stacked chevrons on the right
   for nudge-up / nudge-down. We use type="text" + inputmode="numeric" by
   convention so the value can be formatted (commas, currency) while
   mobile still gets a numeric keypad. JS handles step + format.

   Markup:
     <div class="input-numeric" data-input-numeric data-step="50" data-min="0">
       <input type="text" class="form-control" inputmode="numeric" value="1,240" />
       <span class="input-numeric__steppers" aria-hidden="true">
         <button class="input-numeric__step" data-step="1"  tabindex="-1" aria-label="Increase"><i class="fa-solid fa-caret-up"></i></button>
         <button class="input-numeric__step" data-step="-1" tabindex="-1" aria-label="Decrease"><i class="fa-solid fa-caret-down"></i></button>
       </span>
     </div>

   The steppers are revealed on hover / focus-within so the input reads
   as a plain right-aligned text field at rest and a richer control on
   interaction (same restraint as input-clear).
   ========================================================================== */

.input-numeric {
  position: relative;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  width: 100%;
}

.input-numeric > :is(.form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static) {
  text-align: right;
  font-variant-numeric: tabular-nums;
  /* #125 — leave room for the wider, always-visible stepper. */
  padding-right: 30px;
}

.input-numeric__steppers {
  position: absolute;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  top: 50%;
  right: 5px;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
  /* #125 — a clean integer stepper: a wider hit target with the carets shown at
     rest (subtle) so they read as a real up/down control, brightening to full
     strength on hover / focus. */
  width: 20px;
  height: calc(100% - 6px);
  max-height: 30px;
  gap: 1px;
  opacity: 0.65;
  pointer-events: auto;
  -webkit-transition: opacity 100ms ease;
  transition: opacity 100ms ease;
}

.input-numeric:hover .input-numeric__steppers,
.input-numeric:focus-within .input-numeric__steppers {
  opacity: 1;
  pointer-events: auto;
}

.input-numeric__step {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  background: transparent;
  border: 0;
  border-radius: 3px;
  padding: 0;
  color: var(--text-secondary);
  /* #125 — larger caret glyph so up/down is legible at a glance. */
  font-size: 11px;
  line-height: 1;
  -webkit-transition: background-color 75ms ease, color 75ms ease;
  transition: background-color 75ms ease, color 75ms ease;
}

.input-numeric__step:hover {
  background-color: var(--bg-input-soft-hover, var(--utility-neutral-100));
  color: var(--text-primary);
}

.input-numeric__step:active {
  background-color: var(--bg-input-soft-active, var(--utility-neutral-50));
}

/* Suppress native spinners if the input happens to be type="number" */
.input-numeric input[type="number"]::-webkit-outer-spin-button,
.input-numeric input[type="number"]::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

.input-numeric input[type="number"] {
  -moz-appearance: textfield;
}

/* ==========================================================================
   #92 — NUMBER SPINNER OVERRIDE (global)
   The browser's native number spinner is inconsistent across engines and its
   hover target overflows the field's rounded corner. Suppress it on EVERY
   form-control number input; the DS supplies custom up/down affordances via
   .input-numeric (subtle stacked carets) and .input-stepper (explicit +/-).
   ========================================================================== */
:is(.form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static)[type="number"]::-webkit-outer-spin-button,
:is(.form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static)[type="number"]::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

:is(.form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static)[type="number"] {
  -moz-appearance: textfield;
  -webkit-appearance: textfield;
  appearance: textfield;
}

/* Inside table.controls cells the steppers stay visible because the row
   already implies focus context, AND the cell padding is tight. */
.table td.controls .input-numeric > :is(.form-control, .form-control-ghost, .form-control-soft) {
  padding-right: 22px;
}

.table td.controls .input-numeric__steppers {
  right: 2px;
}

@media (prefers-reduced-motion: reduce) {
  .input-numeric__steppers { -webkit-transition: none; transition: none; }
}


/* ==========================================================================
   SELECT — custom chevron for ghost / cell-context selects.
   Native browser chevrons are inconsistent across platforms; ghost
   selects in table cells were rendering as plain text with no affordance.
   ========================================================================== */
select.form-control,
select.form-control-soft,
select.form-control-ghost,
select.form-control-borderless,
select.form-control-static {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  padding-right: 24px;
  background-image:
    linear-gradient(45deg, transparent 50%, var(--text-tertiary) 50%),
    linear-gradient(135deg, var(--text-tertiary) 50%, transparent 50%);
  background-position:
    calc(100% - 12px) calc(50% - 2px),
    calc(100% - 8px) calc(50% - 2px);
  background-size: 4px 4px, 4px 4px;
  background-repeat: no-repeat;
}

select.form-control:focus,
select.form-control-soft:focus,
select.form-control-ghost:focus,
select.form-control-borderless:focus,
select.form-control-static:focus {
  background-image:
    linear-gradient(45deg, var(--text-primary) 50%, transparent 50%),
    linear-gradient(135deg, transparent 50%, var(--text-primary) 50%);
  background-position:
    calc(100% - 8px) calc(50% - 2px),
    calc(100% - 12px) calc(50% - 2px);
}


/* ==========================================================================
   INPUT-OTP — Segmented one-time-passcode boxes.
   <div class="input-otp" data-input-otp="6">
     <input class="input-otp__cell" inputmode="numeric" maxlength="1" />
     ...
   </div>
   ========================================================================== */

.input-otp {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
}

.input-otp__cell {
  border-radius: var(--radius-md);
  text-align: center;
  font-family: var(--font-mono, 'Space Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace);
  --tw-outline-style: none;
  outline-style: none;
  width: 40px;
  height: 44px;
  font-size: 18px;
  --ctl-fs: 18px;   /* tq-9107 (A147): declared, so the coarse-pointer font floor's max() keeps this size */
  color: var(--text-input);
  background-color: var(--bg-input);
  -webkit-box-shadow: inset 0 0 0 1px var(--border-input);
  box-shadow: inset 0 0 0 1px var(--border-input);
  -webkit-transition: background-color 75ms ease, -webkit-box-shadow 100ms ease;
  transition: background-color 75ms ease, -webkit-box-shadow 100ms ease;
  transition: box-shadow 100ms ease, background-color 75ms ease;
  transition: box-shadow 100ms ease, background-color 75ms ease, -webkit-box-shadow 100ms ease;
}
@media (forced-colors: active) {
  .input-otp__cell {
    outline: 2px solid transparent;
    outline-offset: 2px;
  }
}

.input-otp__cell:hover {
  -webkit-box-shadow: inset 0 0 0 1px var(--border-input-hover);
  box-shadow: inset 0 0 0 1px var(--border-input-hover);
}
.input-otp__cell:focus {
  outline: 2px solid var(--focus-ring); outline-offset: -2px;
}

.input-otp__cell:not(:-moz-placeholder) {
  background-color: var(--bg-input-soft-active, var(--utility-neutral-50));
}

.input-otp__cell:not(:-ms-input-placeholder) {
  background-color: var(--bg-input-soft-active, var(--utility-neutral-50));
}

.input-otp__cell:not(:placeholder-shown) {
  background-color: var(--bg-input-soft-active, var(--utility-neutral-50));
}

.input-otp__separator {
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  font-size: 18px;
  color: var(--text-tertiary);
}

.input-otp.input-otp-sm .input-otp__cell { width: 32px; height: 36px; font-size: 15px; }
.input-otp.input-otp-lg .input-otp__cell { width: 48px; height: 52px; font-size: 22px; --ctl-fs: 22px; }   /* tq-9107 (A147): --ctl-fs declared for the touch font floor */


/* ==========================================================================
   INPUT-FILE — Styled file uploader (dropzone or button).
   <label class="input-file">
     <input type="file" />
     <span class="input-file__inner">...</span>
   </label>
   ========================================================================== */

.input-file {
  position: relative;
  display: block;
  cursor: pointer;
  border-radius: var(--radius-md);
  border-style: var(--tw-border-style, solid);
  border-width: 1px;
  --tw-border-style: dashed;
  border-style: dashed;
  border-color: var(--border-input);
  background-color: var(--bg-input);
  -webkit-transition: border-color 100ms ease, background-color 100ms ease;
  transition: border-color 100ms ease, background-color 100ms ease;
}

.input-file:hover {
  border-color: var(--border-focus);
  background-color: var(--bg-input-soft-hover, var(--utility-neutral-100));
}

.input-file.is-dragover {
  border-color: var(--border-focus);
  background-color: var(--bg-input-soft-active, var(--utility-neutral-50));
}

.input-file > input[type="file"] {
  position: absolute;
  inset: 0;
  height: 100%;
  width: 100%;
  cursor: pointer;
  opacity: 0%;
}

.input-file__inner {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 0.5rem;
  padding-inline: 1rem;
  padding-block: 1.5rem;
  text-align: center;
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  color: var(--text-input);
  pointer-events: none;
}

.input-file__icon {
  font-size: 22px;
  color: var(--text-tertiary);
}

.input-file__hint {
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  color: var(--text-tertiary);
}

/* Compact button-style file picker */
.input-file--button {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  --tw-border-style: solid;
  border-style: solid;
}

.input-file--button .input-file__inner {
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
  -ms-flex-direction: row;
  flex-direction: row;
  padding-inline: 0.75rem;
  padding-block: 0.375rem;
}

.input-file--button .input-file__icon { font-size: 13px; }


/* ==========================================================================
   PASSWORD REVEAL — Pair .form-control with a trailing toggle button.
   Use .input-affix with an .input-affix__btn--end at the trailing edge and a
   [data-pw-toggle] hook. The button toggles the input's [type] between password
   and text, swapping the icon (.fa-eye / .fa-eye-slash) and aria-pressed.
   No CSS-only state — behaviour lives in Scripts/components/input-reveal.js
   (vanilla, event-delegated). The trailing button shares the same monochrome
   focus treatment as the field's single ring.
   ========================================================================== */


/* ==========================================================================
   CHARACTER COUNTER — Pair .form-counter (already in form.css) with JS
   that listens to "input" and updates the count. No CSS needed beyond
   the existing token; the wrapper pattern is .form-meta > hint + counter.
   ========================================================================== */

/* THE BOX STAYS ON THE LADDER under the touch font floor (tq-9107 A147; FINAL FORM tq-9126 A151, isabella 900068104, copied
   from the origin card tq-9112, f1600804). Chromium floors a SINGLE-LINE text input's inner box at the font's NORMAL line height
   (~19px at 16px), above the xs tier's 16px line, so a floored form-control-xs grew 44 -> 47px. Under coarse a single-line
   field-class input drops its block padding ONLY: the variants' base min-height: var(--ctl-h) supplies 44 / 48 / 56 and
   the browser centres the text. There is NO fixed height: a field whose box comes from its own padding / flex stretch (an
   inline form at 70px) keeps it. THE INVARIANT (all products): touch >= fine AND touch >= the ladder tier; the ladder is a
   floor, not a ceiling. Select and textarea keep their padding. Same scope as the floor (above). Specificity (0,1,0) and
   LAST in this file, so a component's own box (the app's 48px .rnly-pin-input) still wins.
   NOT inside a composition that sizes its own inner input (CONTRACT LINE 1, isabella 900068161): .input-group-wrap (chips +
   an inline input): the inner input is left alone and the CONTAINER, the box the finger hits, gets the floor (below). */
@media (pointer: coarse) {
  :where(input:not([type=checkbox], [type=radio], [type=range], [type=color], [type=file], [type=hidden], [type=button], [type=submit], [type=reset], [type=image])):is(.form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static):where(:not([data-pointer-scope="fine"] *)):where(:not(.input-group-wrap *)),
  :where([data-pointer-scope="device"] input:not([type=checkbox], [type=radio], [type=range], [type=color], [type=file], [type=hidden], [type=button], [type=submit], [type=reset], [type=image])):is(.form-control, .form-control-soft, .form-control-ghost, .form-control-borderless, .form-control-static):where(:not([data-pointer-scope="device"] [data-pointer-scope="fine"] *)):where(:not(.input-group-wrap *)) {
    padding-block: 0;
  }

  /* the composition's container meets the floor (min-height, so chips still wrap); (0,1,0), last, so it beats the wrap's own */
  .input-group-wrap:where(:not([data-pointer-scope="fine"] *)),
  :where([data-pointer-scope="device"]) .input-group-wrap:where(:not([data-pointer-scope="device"] [data-pointer-scope="fine"] *)) {
    min-height: var(--control-h-sm);
  }
}   /* tq-9035 (A143): THE field rules, imported in place (the app copy is gone) */
/* ==========================================================================
   input.app.css — the APP-ONLY field rules (tq-9035 A143, isabella 900064976).
   The field rules themselves are the DS's: site.css imports Reinly.Design's components/inputs/input.css IN PLACE (the app's
   own copy is gone). This file holds only Reinly-app rules, each with its reason, and none of it restyles a DS class
   (isabella 900067398): a declared app-override file (tests/app-css-twins.allowlist.json, "overrides"). Field density is
   NOT set here: the layout roots opt into the DS's data-control-density="comfortable". Generic field behaviour belongs in
   the DS input.css (the input-group invalid ring moved there).
   ========================================================================== */

/* WHY: a DIFFERENT chevron asset: the app's Tailwind 3 @tailwindcss/forms plugin paints the select chevron (a background-image
   at `right 0.5rem center`, 1.5em wide; tq-8268 R9). The DS removed that plugin (3b re-gate F3) and draws no such chevron,
   so this clearance is app-only: it keeps the plugin's chevron clear of the text. Derived from the chevron (inset + size + a 0.5rem gap); list boxes ([multiple],
   [size] > 1) draw none and are left alone; :where() keeps select.form-control's own specificity. */
:is(select.form-control, select.form-control-soft, select.form-control-ghost, select.form-control-borderless, select.form-control-static):where(:not([multiple], [size]:not([size="1"]))) {
  padding-right: calc(0.5rem + 1.5em + 0.5rem);
}

/* WHY: the one-time-code field of the sign-in / verify flows (an app screen, no DS specimen): ONE tall input that takes the
   whole 6-digit code in one paste / autofill, read as a digit sequence by tabular numerals + wide letter-spacing. */
.rnly-pin-input {
  display: block;
  margin-left: auto;
  margin-right: auto;
  max-width: 240px;
  text-align: center;
  font-size: 20px;
  --ctl-fs: 20px;   /* tq-9107 (A147): declared, so the coarse-pointer font floor's max() keeps this size */
  line-height: 1;
  letter-spacing: 0.35em;
  /* letter-spacing applies AFTER each glyph: a matching left pad keeps the centred digits optically centred */
  padding-left: 0.35em;
  padding-right: 0;
  font-weight: 600;
  height: 48px;
  font-variant-numeric: tabular-nums;
  -webkit-font-feature-settings: "tnum";
  font-feature-settings: "tnum";
}

.rnly-pin-input::-webkit-input-placeholder {
  letter-spacing: 0.35em;
  color: var(--text-input-placeholder);
  font-weight: 400;
  opacity: 0.6;
}

.rnly-pin-input::-moz-placeholder {
  letter-spacing: 0.35em;
  color: var(--text-input-placeholder);
  font-weight: 400;
  opacity: 0.6;
}

.rnly-pin-input:-ms-input-placeholder {
  letter-spacing: 0.35em;
  color: var(--text-input-placeholder);
  font-weight: 400;
  opacity: 0.6;
}

.rnly-pin-input::-ms-input-placeholder {
  letter-spacing: 0.35em;
  color: var(--text-input-placeholder);
  font-weight: 400;
  opacity: 0.6;
}

.rnly-pin-input::placeholder {
  letter-spacing: 0.35em;
  color: var(--text-input-placeholder);
  font-weight: 400;
  opacity: 0.6;
}

.rnly-pin-input.is-error {
  border-color: var(--utility-red-500, #dc2626);
  color: var(--utility-red-700, #b91c1c);
}   /* tq-9035 (A143): the app-only field rules, each with its reason */
/* ==========================================================================
   Component: Character counter  ·  06 Forms & Inputs · L2 · DERIVE
   --------------------------------------------------------------------------
   The live "N/max" count under a length-limited field. Driven by
   `Scripts/components/char-counter.js` (window.HawkCharCounter): a field with
   [data-char-counter="id"] writes its count into .char-counter[data-counter-for="id"].

   SOURCE — ADOPT (tq-8595, REINLY-DS C12). The LOOK is the Reinly app's own
   listing-editor counter (the old `.form-hint-muted text-right` readout, measured
   as served, light + dark, 1440 / 390): 12px / 16px, right-aligned, 4px under the
   field, `--text-form-hint-muted`, "28/50". The app imports this file in place, so
   it is PLAIN CSS (no @apply / @utility / theme()) and semantic tokens only.

   Threshold states are opt-in (`data-warn` on the readout): the driver adds
   .is-near at >= 90% of the limit and .is-over past a soft budget.
   ========================================================================== */

.char-counter {
  display: block;
  margin-top: 0.25rem;
  font-size: 0.75rem;
  line-height: 1rem;
  text-align: right;
  color: var(--text-form-hint-muted);
}

/* Beside a hint in a .field-hint-row the row owns the spacing. */
.field-hint-row .char-counter { margin-top: 0; }

.char-counter.is-near { color: var(--text-warning); }
.char-counter.is-over { color: var(--text-danger); font-weight: 600; } /* tq-8595 (C12): THE character counter, imported in place */
/* ==========================================================================
   Component: Combobox  (THE ONE combobox: tq-8211 R3c, isabella R-A2)
   Reinly.Design source, imported IN PLACE by reinly.webapp (R4, tq-8177), so this file is PLAIN CSS: no Tailwind
   directives (Reinly.Design/tests/app-imported-plain-css.test.mjs guards it). Script: Scripts/components/combobox.js.

   PART 1 is the served Reinly app's combobox (its look wins): the app's former components/inputs/combobox.css,
   exactly as its Tailwind-3 build compiled it (the apply rules expanded to that output, in source order). The
   Tailwind-3 apply CLONES of unrelated rules (e.g. `html.is-mobile #rnly-wizard-modal .flex.flex-col.combobox__control`)
   are not carried: plain, they would be re-cloned by every other apply of that utility (R4 precedent, tq-8177).
   PART 2 is what only the design system documents (/Design/Page/combobox): tones (soft / ghost / borderless / pill),
   sizes sm / lg, states (success / warning / info / loading), chips variants, rich option parts (dot, swatch,
   shortcut, trailing, levels 1-3), panel tabs / compact / arrow / floating, add-new. Nothing in PART 2 matches the
   app's markup; the app's option rows TINT on keyboard focus with no inset ring (C8 / tq-8100).
   ========================================================================== */

/* ---------- PART 1: the served app combobox ---------- */

.combobox {
  position: relative;
  display: inline-block;
  width: 100%;
}
.controls .combobox,
.form-group-inline .combobox {
  display: block;
}

.combobox__input {

  display: block;
  width: 100%;
  border-radius: 0.375rem;
  border-width: 1px;
  font-weight: 400;
  outline: 2px solid transparent;
  outline-offset: 2px;
}

.combobox__input:focus {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}

.combobox__input:hover:disabled {
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

/* tq-9124 (A150): the input-mode combobox's default tier (md) */
:where(.combobox__input) {
  --ctl-h: var(--control-h-md);
  --ctl-line: var(--control-line-md);
  --ctl-fs: var(--control-fs-md);
  --ctl-px: 1rem;
}

.combobox__input {
  -webkit-transition: border-color 75ms ease-in-out, background-color 75ms ease-in-out, -webkit-box-shadow 75ms ease-in-out;
  transition: border-color 75ms ease-in-out, background-color 75ms ease-in-out, -webkit-box-shadow 75ms ease-in-out;
  transition: border-color 75ms ease-in-out, box-shadow 75ms ease-in-out, background-color 75ms ease-in-out;
  transition: border-color 75ms ease-in-out, box-shadow 75ms ease-in-out, background-color 75ms ease-in-out, -webkit-box-shadow 75ms ease-in-out;
  -webkit-tap-highlight-color: transparent;
  /* tq-9124 (A150, isabella 900068066): the box comes from the control ladder like .form-control (md: 40 fine / 44 touch;
     it was 2.75rem + 0.625rem padding = 46 on both pointers). The tier sets --ctl-h / --ctl-line / --ctl-fs / --ctl-px
     (--sm / --lg below); padding-block solves (H - line - 2 * border) / 2. Inline padding keeps its values (--ctl-px =
     the old padding-left; padding-right 2rem = the chevron clearance). The md defaults sit in :where() just above, at
     zero specificity, so a .form-control-sm / -lg on the same input still picks its own tier. */
  min-height: var(--ctl-h);
  line-height: var(--ctl-line);
  font-size: var(--ctl-fs);
  padding-block: calc((var(--ctl-h) - var(--ctl-line) - 2 * var(--control-border, 1px)) / 2);
  padding-left: var(--ctl-px);
  padding-right: 2rem;
  color: var(--text-combobox, var(--text-input));
  background-color: var(--bg-combobox, var(--bg-input));
  border-color: var(--border-combobox, var(--border-input));
}

.combobox__input::-webkit-input-placeholder {
  color: var(--text-combobox-placeholder, var(--text-input-placeholder));
}

.combobox__input::-moz-placeholder {
  color: var(--text-combobox-placeholder, var(--text-input-placeholder));
}

.combobox__input:-ms-input-placeholder {
  color: var(--text-combobox-placeholder, var(--text-input-placeholder));
}

.combobox__input::-ms-input-placeholder {
  color: var(--text-combobox-placeholder, var(--text-input-placeholder));
}

.combobox__input::placeholder {
  color: var(--text-combobox-placeholder, var(--text-input-placeholder));
}

.combobox__input:hover {
  border-color: var(--border-combobox-hover, var(--border-input-hover));
}

.combobox__input:focus,
.combobox.is-focused .combobox__input {
  border-color: var(--border-combobox-focus, var(--border-input-active));
}

.combobox__control {
  min-width: 0px;
  cursor: pointer;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;

  display: block;
  width: 100%;
  border-radius: 0.375rem;
  border-width: 1px;
  font-weight: 400;
  outline: 2px solid transparent;
  outline-offset: 2px;
}

.combobox__control:focus {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}

.combobox__control:hover:disabled {
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

.combobox__control {
  -webkit-transition: border-color 75ms ease-in-out, background-color 75ms ease-in-out, -webkit-box-shadow 75ms ease-in-out;
  transition: border-color 75ms ease-in-out, background-color 75ms ease-in-out, -webkit-box-shadow 75ms ease-in-out;
  transition: border-color 75ms ease-in-out, box-shadow 75ms ease-in-out, background-color 75ms ease-in-out;
  transition: border-color 75ms ease-in-out, box-shadow 75ms ease-in-out, background-color 75ms ease-in-out, -webkit-box-shadow 75ms ease-in-out;
  -webkit-tap-highlight-color: transparent;
  min-height: 2.75rem;
  padding-left: 1rem;
  padding-right: 1rem;
  padding-top: 0.625rem;
  padding-bottom: 0.625rem;
  font-size: 1rem;
  line-height: 1.5rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: nowrap;
  flex-wrap: nowrap;
  padding-right: 0;
  color: var(--text-combobox, var(--text-input));
  background-color: var(--bg-combobox, var(--bg-input));
  border-color: var(--border-combobox, var(--border-input));
}

.combobox__control:hover {
  border-color: var(--border-combobox-hover, var(--border-input-hover));
}

.combobox__control:focus,
.combobox__control:focus-visible,
.combobox.is-focused .combobox__control {
  border-color: var(--border-combobox-focus, var(--border-input-active));
  outline: none;
}
.combobox__value {
  min-width: 0px;
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0%;
  flex: 1 1 0%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--text-combobox, var(--text-input));
}

.combobox__value:empty {
  display: none;
}
.combobox__placeholder {
  min-width: 0px;
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0%;
  flex: 1 1 0%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--text-combobox-placeholder, var(--text-input-placeholder));
}
.combobox__control:has(.combobox__value:not(:empty)) .combobox__placeholder {
  display: none;
}
.combobox--select .combobox__input {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}

.combobox__trigger {
  position: absolute;
  right: 0px;
  top: 0px;
  bottom: 0px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  padding-left: 0.5rem;
  padding-right: 0.5rem;
  color: var(--text-tertiary);
  -webkit-transition: -webkit-transform var(--duration-fast, 100ms) var(--ease-default, ease);
  transition: -webkit-transform var(--duration-fast, 100ms) var(--ease-default, ease);
  transition: transform var(--duration-fast, 100ms) var(--ease-default, ease);
  transition: transform var(--duration-fast, 100ms) var(--ease-default, ease), -webkit-transform var(--duration-fast, 100ms) var(--ease-default, ease);
}
.combobox__control .combobox__trigger {
  position: static;
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
}

.combobox.is-open .combobox__trigger {
  -webkit-transform: rotate(180deg);
  -ms-transform: rotate(180deg);
  transform: rotate(180deg);
}
.combobox__clear {
  position: absolute;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  right: 28px;
  top: 0;
  height: 100%;
  width: 16px;
  font-size: 10px;
  color: var(--text-tertiary);
  opacity: 0;
  pointer-events: none;
  border: none;
  background: none;
  padding: 0;
  border-radius: 50%;
  z-index: 1;
  -webkit-transition: opacity var(--duration-fast, 100ms) ease,
              color var(--duration-fast, 100ms) ease;
  transition: opacity var(--duration-fast, 100ms) ease,
              color var(--duration-fast, 100ms) ease;
}
.combobox__control > .combobox__clear {
  position: static;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  height: auto;
}
.combobox.has-value.is-focused .combobox__clear,
.combobox.has-value.is-open .combobox__clear {
  opacity: 0.5;
  pointer-events: auto;
}

.combobox__clear:hover {
  opacity: 1;
  color: var(--text-primary);
}

.combobox__panel {
  position: absolute;
  left: 0px;
  right: 0px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  overflow: hidden;
  border-radius: 0.5rem;
  border-width: 1px;
  max-height: 320px;
  background-color: var(--bg-combobox-listbox, var(--bg-dropdown));
  border-color: var(--border-combobox, var(--border-dropdown));
  -webkit-box-shadow: var(--shadow-combobox-listbox, var(--shadow-dropdown));
  box-shadow: var(--shadow-combobox-listbox, var(--shadow-dropdown));
  z-index: var(--z-popover);
  display: none;
}

.combobox.is-open .combobox__panel {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
.combobox__panel::after {
  content: "";
  position: absolute;
  inset: 0;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'><filter id='noiseFilter'><feTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/></filter><rect width='100%' height='100%' filter='url(%23noiseFilter)' opacity='1'/></svg>");
  background-repeat: repeat;
  mix-blend-mode: overlay;
  opacity: var(--opacity-combobox-grain, 0);
  pointer-events: none;
  z-index: 0;
  border-radius: inherit;
}
.combobox__panel > * {
  position: relative;
  z-index: 1;
}

.combobox__header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  border-bottom-width: 1px;
  padding: 0.375rem;
  background-color: var(--bg-combobox-header, var(--bg-dropdown));
  border-color: var(--border-combobox-header, var(--border-dropdown-divider));
  position: relative;
  z-index: 2;
}

.combobox__search-wrap {
  position: relative;
  min-width: 0px;
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0%;
  flex: 1 1 0%;
}

.combobox__search {

  min-height: 1.75rem;
  padding-left: 0.5rem;
  padding-top: 0.25rem;
  padding-bottom: 0.25rem;
  padding-right: 1.75rem;
  font-size: 0.8125rem;
  line-height: 1rem;

  display: block;
  width: 100%;
  border-radius: 0.375rem;
  border-width: 1px;
  font-weight: 400;
  outline: 2px solid transparent;
  outline-offset: 2px;
}

.combobox__search:focus {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}

.combobox__search:hover:disabled {
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

.combobox__search {
  -webkit-transition: border-color 75ms ease-in-out, background-color 75ms ease-in-out, -webkit-box-shadow 75ms ease-in-out;
  transition: border-color 75ms ease-in-out, background-color 75ms ease-in-out, -webkit-box-shadow 75ms ease-in-out;
  transition: border-color 75ms ease-in-out, box-shadow 75ms ease-in-out, background-color 75ms ease-in-out;
  transition: border-color 75ms ease-in-out, box-shadow 75ms ease-in-out, background-color 75ms ease-in-out, -webkit-box-shadow 75ms ease-in-out;
  -webkit-tap-highlight-color: transparent;
  color: var(--text-combobox, var(--text-input));
  background-color: var(--bg-combobox-search, var(--bg-input));
  border-color: var(--border-combobox, var(--border-input));
}

.combobox__search:focus {
  border-color: var(--border-combobox-focus, var(--border-input-active));
}

.combobox__search::-webkit-input-placeholder {
  color: var(--text-combobox-placeholder, var(--text-input-placeholder));
}

.combobox__search::-moz-placeholder {
  color: var(--text-combobox-placeholder, var(--text-input-placeholder));
}

.combobox__search:-ms-input-placeholder {
  color: var(--text-combobox-placeholder, var(--text-input-placeholder));
}

.combobox__search::-ms-input-placeholder {
  color: var(--text-combobox-placeholder, var(--text-input-placeholder));
}

.combobox__search::placeholder {
  color: var(--text-combobox-placeholder, var(--text-input-placeholder));
}
.combobox__search-clear {
  position: absolute;
  right: 0.5rem;
  top: 50%;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 16px;
  height: 16px;
  font-size: 10px;
  color: var(--text-tertiary);
  opacity: 0;
  pointer-events: none;
  border-radius: 50%;
  -webkit-transition: opacity var(--duration-fast, 100ms) ease, color var(--duration-fast, 100ms) ease;
  transition: opacity var(--duration-fast, 100ms) ease, color var(--duration-fast, 100ms) ease;
}

.combobox__search-wrap.has-search-value .combobox__search-clear {
  opacity: 0.6;
  pointer-events: auto;
}

.combobox__search-clear:hover {
  opacity: 1;
  color: var(--text-primary);
}
.combobox__add-new {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 0.25rem;
  width: 26px;
  height: 26px;
  font-size: 11px;
  color: var(--text-secondary);
  background: transparent;
  border: 1px solid var(--border-combobox, var(--border-input));
  -webkit-transition: color var(--duration-fast, 100ms) ease, background-color var(--duration-fast, 100ms) ease;
  transition: color var(--duration-fast, 100ms) ease, background-color var(--duration-fast, 100ms) ease;
}

.combobox__add-new:hover {
  color: var(--text-primary);
  background-color: var(--bg-primary-hover);
}
.combobox__panel .combobox__listbox {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0%;
  flex: 1 1 0%;
  overflow-y: auto;
  padding: 0.25rem;
  scrollbar-width: thin;
}
.combobox:not(:has(.combobox__panel)) .combobox__listbox {
  position: absolute;
  left: 0px;
  right: 0px;
  margin-top: 0.25rem;
  overflow-y: auto;
  border-radius: 0.5rem;
  border-width: 1px;
  padding: 0.25rem;
  max-height: 240px;
  background-color: var(--bg-combobox-listbox, var(--bg-dropdown));
  border-color: var(--border-combobox, var(--border-dropdown));
  -webkit-box-shadow: var(--shadow-combobox-listbox, var(--shadow-dropdown));
  box-shadow: var(--shadow-combobox-listbox, var(--shadow-dropdown));
  z-index: var(--z-dropdown);
  display: none;
}

.combobox:not(:has(.combobox__panel)).is-open .combobox__listbox {
  display: block;
}

.combobox__footer {
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
  border-top-width: 1px;
  padding-left: 0.5rem;
  padding-right: 0.5rem;
  padding-top: 0.375rem;
  padding-bottom: 0.375rem;
  font-size: 0.75rem;
  line-height: 1rem;
  background-color: var(--bg-combobox-footer, var(--bg-dropdown));
  border-color: var(--border-combobox-footer, var(--border-dropdown-divider));
  color: var(--text-tertiary);
}

.combobox__option {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  cursor: pointer;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;
  border-radius: 0.375rem;
  padding-left: 0.5rem;
  padding-right: 0.5rem;
  padding-top: 0.375rem;
  padding-bottom: 0.375rem;
  font-size: 0.75rem;
  line-height: 1rem;
  color: var(--text-combobox-option, var(--text-primary));
  -webkit-transition: background-color var(--duration-fast, 100ms) var(--ease-default, ease);
  transition: background-color var(--duration-fast, 100ms) var(--ease-default, ease);
}

.combobox__option:hover,
.combobox__option--active {
  background-color: var(--bg-combobox-option-hover, var(--bg-dropdown-hover));
}
.combobox__option--selected {
  background-color: var(--bg-combobox-option-selected, var(--bg-dropdown-selected));
  color: var(--text-combobox-option-selected, var(--text-dropdown-selected));
  font-weight: 500;
}
.combobox__option--disabled {
  pointer-events: none;
  cursor: not-allowed;
  opacity: 0.5;
}
.combobox__option-icon {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 1.25rem;
  width: 1.25rem;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  font-size: 0.75rem;
  line-height: 1rem;
  color: var(--text-tertiary);
}

.combobox__option-content {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  min-width: 0px;
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0%;
  flex: 1 1 0%;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
}

.combobox__option-label {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.combobox__option-meta {
  margin-top: 0.125rem;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 0.6875rem;
  line-height: 1rem;
  line-height: 1.25;
  color: var(--text-combobox-option-meta, var(--text-tertiary));
}
.combobox__option-avatar {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 1.75rem;
  width: 1.75rem;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 9999px;
  font-size: 0.6875rem;
  line-height: 1rem;
  font-weight: 500;
  text-transform: uppercase;
  background-color: var(--bg-combobox-option-avatar, var(--bg-badge));
  color: var(--text-combobox-option-avatar, var(--text-badge));
}
.combobox__option .avatar {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-shadow: none;
  box-shadow: none;
}
.combobox__option-check {
  margin-left: auto;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  font-size: 0.75rem;
  line-height: 1rem;
  opacity: 0;
  color: var(--text-combobox-option-check, var(--text-success));
  -webkit-transition: opacity var(--duration-fast, 100ms) var(--ease-default, ease);
  transition: opacity var(--duration-fast, 100ms) var(--ease-default, ease);
}

.combobox__option--selected .combobox__option-check {
  opacity: 1;
}
.combobox--checkbox .combobox__option-check {
  margin-left: 0px;
  margin-right: 0.25rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 0.875rem;
  width: 0.875rem;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 0.25rem;
  border-width: 1px;
  opacity: 1;
  border-color: var(--border-checkbox);
  background-color: var(--bg-checkbox);
  -webkit-box-ordinal-group: 0;
  -ms-flex-order: -1;
  order: -1;
  font-size: 9px;
  color: white;
}

.combobox--checkbox .combobox__option--selected .combobox__option-check {
  background-color: var(--bg-checkbox-checked);
  border-color: var(--border-checkbox-checked);
}
.combobox__option--selected:not(:has(.combobox__option-check))::after {
  content: "\f00c";
  font-family: "Font Awesome 7 Pro";
  font-weight: 300;
  margin-left: auto;
  font-size: 0.75rem;
  line-height: 1rem;
  color: var(--text-combobox-option-check, var(--text-success));
}

.combobox__group {
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  padding-left: 0.5rem;
  padding-right: 0.5rem;
  padding-top: 0.375rem;
  padding-bottom: 0.375rem;
  font-size: 0.6875rem;
  line-height: 1rem;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.025em;
  color: var(--text-tertiary);
}

.combobox__divider {
  margin-top: 0.25rem;
  margin-bottom: 0.25rem;
  margin-left: 0.25rem;
  margin-right: 0.25rem;
  border-top-width: 1px;
  border-color: var(--border-combobox-header, var(--border-dropdown-divider));
}

.combobox__empty {
  padding-left: 0.75rem;
  padding-right: 0.75rem;
  padding-top: 0.75rem;
  padding-bottom: 0.75rem;
  text-align: center;
  font-size: 0.75rem;
  line-height: 1rem;
  color: var(--text-tertiary);
}

.combobox__loading {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 0.5rem;
  padding-left: 0.75rem;
  padding-right: 0.75rem;
  padding-top: 0.75rem;
  padding-bottom: 0.75rem;
  font-size: 0.75rem;
  line-height: 1rem;
  color: var(--text-tertiary);
}

.combobox__loading .combobox__spinner {
  -webkit-animation: spin 1s linear infinite;
  animation: spin 1s linear infinite;
  width: 14px;
  height: 14px;
}

.combobox__chips {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  border-radius: 0.375rem;
  border-width: 1px;
  padding-left: 0.5rem;
  padding-right: 0.5rem;
  padding-top: 0.375rem;
  padding-bottom: 0.375rem;
  background-color: var(--bg-combobox, var(--bg-input));
  border-color: var(--border-combobox, var(--border-input));
  min-height: 34px;
}

.combobox__chips:hover {
  border-color: var(--border-combobox-hover, var(--border-input-hover));
}

.combobox__chips:focus-within {
  border-color: var(--border-combobox-focus, var(--border-input-active));
}
.combobox__chips .combobox__input {
  min-width: 80px;
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0%;
  flex: 1 1 0%;
  border-radius: 0px;
  border-width: 0px;
  padding: 0px;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  outline: 2px solid transparent;
  outline-offset: 2px;
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  min-height: unset;
  background-color: var(--alpha-0);
}

.combobox__chip {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  border-radius: 0.375rem;
  padding-left: 0.5rem;
  padding-right: 0.5rem;
  padding-top: 0.125rem;
  padding-bottom: 0.125rem;
  font-size: 0.6875rem;
  line-height: 1rem;
  background-color: var(--bg-tag-neutral);
  border: 1px solid var(--border-tag-neutral);
  color: var(--text-tag-neutral);
  max-width: 200px;
}

.combobox__chip-label {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.combobox__chip-dismiss {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  cursor: pointer;
  border-radius: 0.125rem;
  font-size: 10px;
  opacity: 0.5;
  -webkit-transition: opacity var(--duration-fast, 100ms) ease;
  transition: opacity var(--duration-fast, 100ms) ease;
}

.combobox__chip-dismiss:hover {
  opacity: 1;
}
.combobox--select .combobox__control:has(.combobox__chip) {
  height: auto;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  gap: 0.25rem;
  min-height: 34px;
  padding-top: 4px;
  padding-bottom: 4px;
}
.combobox.is-disabled {
  pointer-events: none;
}

/* tq-9503 (SELECT-FIELD G5, Enodia tq-9500 b04ba7c7): the same disabled look as .form-control:disabled (inputs/input.css): the
   border AND the inset ring in --border-input-disabled (Reinly's field edge is border + ring), opacity 0.75 (it was 0.6) */
.combobox.is-disabled .combobox__input,
.combobox.is-disabled .combobox__control,
.combobox.is-disabled .combobox__chips {
  color: var(--text-input-disabled);
  background-color: var(--bg-input-disabled);
  border-color: var(--border-input-disabled);
  -webkit-box-shadow: inset 0 0 0 var(--control-border, 1px) var(--border-input-disabled);
  box-shadow: inset 0 0 0 var(--control-border, 1px) var(--border-input-disabled);
  cursor: not-allowed;
  opacity: 0.75;
}
/* tq-9503 (SELECT-FIELD G5): the invalid edge of the field beside it. aria-invalid / .is-error on a .form-control (inputs/input.css)
   is the border AND the ring in --border-input-error (focused: --border-input-error-focus, the ring doubled); MVC's
   .input-validation-error is the ring alone, no border over it (inputs/form.css), below. The WRAPPER carries .is-error (the
   native-state bridge) but must not take input.css's generic .is-error edge itself: it has no radius (a square frame). */
.combobox.is-error {
  border-color: transparent;
  -webkit-box-shadow: none;
  box-shadow: none;
}

/* tq-9503: a disabled select's VALUE text dims with the control (the span's own --text-combobox colour kept it bright) */
.combobox.is-disabled .combobox__value {
  color: inherit;
}

.combobox.is-error .combobox__input,
.combobox.is-error .combobox__control,
.combobox.is-error .combobox__chips {
  border-color: var(--border-input-error) !important;
  -webkit-box-shadow: inset 0 0 0 var(--control-border, 1px) var(--border-input-error) !important;
  box-shadow: inset 0 0 0 var(--control-border, 1px) var(--border-input-error) !important;
}

.combobox.is-error .combobox__input:focus,
.combobox.is-error .combobox__control:focus,
.combobox.is-error .combobox__chips:focus-within {
  border-color: var(--border-input-error-focus) !important;
  -webkit-box-shadow: inset 0 0 0 calc(var(--control-border, 1px) * 2) var(--border-input-error-focus) !important;
  box-shadow: inset 0 0 0 calc(var(--control-border, 1px) * 2) var(--border-input-error-focus) !important;
}
.combobox:has(.input-validation-error) .combobox__input,
.combobox:has(.input-validation-error) .combobox__control,
.combobox:has(.input-validation-error) .combobox__chips {
  border-color: transparent !important;   /* tq-9503: one edge, as .input-validation-error (form.css) */
  -webkit-box-shadow: inset 0 0 0 1px var(--border-input-error) !important;
  box-shadow: inset 0 0 0 1px var(--border-input-error) !important;
}

.combobox:has(.input-validation-error) .combobox__input:focus,
.combobox:has(.input-validation-error) .combobox__control:focus,
.combobox:has(.input-validation-error) .combobox__chips:focus-within {
  border-color: var(--border-input-error-focus) !important;
}
.combobox.is-readonly .combobox__control {
  background-color: var(--bg-input-readonly);
  color: var(--text-input-readonly);
  cursor: default;
}

.combobox--sm .combobox__input {
  /* tq-9124 (A150): the sm tier (32 fine / 44 touch; was 2.25rem + 0.5rem padding = 38) */
  --ctl-h: var(--control-h-sm);
  --ctl-line: var(--control-line-sm);
  --ctl-fs: 1rem;
  --ctl-px: 0.75rem;
  padding-right: 0.75rem;
}
.combobox--sm .combobox__control {
  /* tq-9503 (SELECT-FIELD G4): the tier only SETS the shared vars, exactly as .form-control-sm (inputs/input.css); the select-
     field block at the end of this file computes the geometry from them (it was 2.25rem + 0.5rem padding = 36, 16px) */
  --ctl-h: var(--control-h-sm);
  --ctl-line: var(--control-line-sm);
  --ctl-fs: var(--control-fs-sm);
  --ctl-px: 0.75rem;
}
.combobox--sm .combobox__chips {
  padding-left: 0.375rem;
  padding-right: 0.375rem;
  padding-top: 0.25rem;
  padding-bottom: 0.25rem; min-height: 28px;
}
.combobox--sm .combobox__option {
  padding-top: 0.25rem;
  padding-bottom: 0.25rem;
  font-size: 0.75rem;
  line-height: 1rem;
}

.combobox--lg .combobox__input {
  /* tq-9124 (A150): the lg tier (48 on both pointers; was 3rem + 0.75rem padding = 50) */
  --ctl-h: var(--control-h-lg);
  --ctl-line: var(--control-line-lg);
  --ctl-fs: 1.125rem;   /* tq-9107 (A147): declared, so the coarse-pointer font floor's max() keeps this size */
  --ctl-px: 1.25rem;
  padding-right: 1.25rem;
}
.combobox--lg .combobox__control {
  /* tq-9503 (SELECT-FIELD G4): as .form-control-lg (it was 3rem + 0.75rem padding = 50, 18px) */
  --ctl-h: var(--control-h-lg);
  --ctl-line: var(--control-line-lg);
  --ctl-fs: var(--control-fs-lg);
  --ctl-px: 0.875rem;
}
.combobox--lg .combobox__chips {
  padding-left: 0.625rem;
  padding-right: 0.625rem;
  padding-top: 0.5rem;
  padding-bottom: 0.5rem; min-height: 40px;
}
.combobox--lg .combobox__option {
  padding-top: 0.625rem;
  padding-bottom: 0.625rem;
  font-size: 0.8125rem;
  line-height: 1.5rem;
}
:is(.input-group-stack, .input-group, .input-group-wrap) .combobox {
  position: static;
  display: block;
}
:is(.input-group-stack, .input-group, .input-group-wrap) .combobox .combobox__trigger {
  position: static;
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
  padding-left: 0.5rem;
  padding-right: 0.5rem;
}
:is(.input-group-stack, .input-group, .input-group-wrap) .combobox:not(.combobox--select) {
  position: relative;
}
:is(.input-group-stack, .input-group, .input-group-wrap) .combobox .combobox__control {
  padding-right: 0px;
}

:is(.input-group-stack, .input-group, .input-group-wrap) :is(.combobox__control, .combobox__input, .combobox__chips) {
  border-radius: 0px;
  border-width: 0px;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  background-color: var(--alpha-0);
}

:is(.input-group-stack, .input-group, .input-group-wrap) :is(.combobox__control, .combobox__input):hover {
  background-color: var(--bg-input-group-item-hover);
  border-color: transparent;
}

:is(.input-group-stack, .input-group, .input-group-wrap) :is(.combobox__control, .combobox__input):focus,
:is(.input-group-stack, .input-group, .input-group-wrap) .combobox.is-focused :is(.combobox__control, .combobox__input) {
  background-color: var(--bg-input-group-item-focus);
  border-color: transparent;
}
:is(.input-group-stack, .input-group, .input-group-wrap) .combobox .form-control {
  border-radius: 0px;
  border-width: 0px;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  background-color: var(--alpha-0);
}

:is(.input-group-stack, .input-group, .input-group-wrap) .combobox .form-control:hover {
  background-color: var(--bg-input-group-item-hover);
  border-color: transparent;
}

:is(.input-group-stack, .input-group, .input-group-wrap) .combobox .form-control:focus,
:is(.input-group-stack, .input-group, .input-group-wrap) .combobox.is-focused .form-control {
  background-color: var(--bg-input-group-item-focus);
  border-color: transparent;
}

.combobox--w-auto .combobox__panel,
.combobox__panel.combobox--w-auto {
  width: auto;
  min-width: 100%;
  left: 0;
  right: auto;
}

.combobox--w-sm .combobox__panel,
.combobox__panel.combobox--w-sm {
  width: 200px;
  left: 0;
  right: auto;
}

.combobox--w-md .combobox__panel,
.combobox__panel.combobox--w-md {
  width: 280px;
  left: 0;
  right: auto;
}

.combobox--w-lg .combobox__panel,
.combobox__panel.combobox--w-lg {
  width: 360px;
  left: 0;
  right: auto;
}

.combobox--w-xl .combobox__panel,
.combobox__panel.combobox--w-xl {
  width: 480px;
  left: 0;
  right: auto;
}

.combobox--w-full .combobox__panel,
.combobox__panel.combobox--w-full {
  width: 100%;
}

@media (prefers-reduced-motion: reduce) {
  .combobox__trigger,
  .combobox__option,
  .combobox__clear,
  .combobox__chip-dismiss,
  .combobox__option-check {
    -webkit-transition: none;
    transition: none;
  }
}

@keyframes spin {
  to {
    -webkit-transform: rotate(360deg);
    transform: rotate(360deg);
  }
}

/* ---------- PART 2: design-system-only (documented in /Design) ---------- */

.combobox--sm .combobox__control .combobox__trigger {
  width: 16px;
  font-size: 10px;
}

  .combobox--sm > .combobox__clear { top: calc(var(--control-h-sm) / 2); }

  .combobox--lg > .combobox__clear { top: calc(var(--control-h-lg) / 2); }

@-webkit-keyframes combobox-panel-in {
  from { opacity: 0; -webkit-transform: translateY(-2px); transform: translateY(-2px); }
  to   { opacity: 1; -webkit-transform: translateY(0); transform: translateY(0); }
}

@keyframes combobox-panel-in {
  from { opacity: 0; -webkit-transform: translateY(-2px); transform: translateY(-2px); }
  to   { opacity: 1; -webkit-transform: translateY(0); transform: translateY(0); }
}

.combobox--soft .combobox__input,
.combobox--soft .combobox__control,
.combobox--soft .combobox__chips {
  background-color: var(--bg-input-soft, var(--bg-secondary));
  -webkit-box-shadow: none;
  box-shadow: none;
}

.combobox--soft .combobox__input:hover,
.combobox--soft .combobox__control:hover,
.combobox--soft .combobox__chips:hover {
  background-color: color-mix(in oklch, var(--text-primary) 6%, var(--bg-input-soft, var(--bg-secondary)));
}

.combobox--soft .combobox__input:focus,
.combobox--soft .combobox__control:focus,
.combobox--soft .combobox.is-focused .combobox__control,
.combobox--soft .combobox__chips:focus-within {
  background-color: var(--bg-input, var(--bg-primary));
  outline: 2px solid var(--focus-ring); outline-offset: -2px;
}

.combobox--ghost .combobox__input,
.combobox--ghost .combobox__control,
.combobox--ghost .combobox__chips {
  background-color: transparent;
  -webkit-box-shadow: none;
  box-shadow: none;
}

.combobox--ghost .combobox__input:hover,
.combobox--ghost .combobox__control:hover,
.combobox--ghost .combobox__chips:hover {
  background-color: color-mix(in oklch, var(--text-primary) 5%, transparent);
}

.combobox--ghost .combobox__input:focus,
.combobox--ghost .combobox__control:focus,
.combobox--ghost .combobox.is-focused .combobox__control,
.combobox--ghost .combobox__chips:focus-within {
  background-color: var(--bg-input);
  outline: 2px solid var(--focus-ring); outline-offset: -2px;
}

.combobox--borderless .combobox__input,
.combobox--borderless .combobox__control,
.combobox--borderless .combobox__chips {
  -webkit-box-shadow: none;
  box-shadow: none;
}

.combobox--pill .combobox__control,
.combobox--pill .combobox__input {
  border-radius: 9999px;
  padding-left: 0.625rem;
  padding-right: 0.5rem;
  min-height: 28px;
}

.combobox--pill .combobox__value,
.combobox--pill .combobox__placeholder {
  font-size: 0.6875rem;
}

.combobox.is-success .combobox__input,
.combobox.is-success .combobox__control,
.combobox.is-success .combobox__chips {
  -webkit-box-shadow: inset 0 0 0 1px var(--border-input-success, var(--text-success)) !important;
  box-shadow: inset 0 0 0 1px var(--border-input-success, var(--text-success)) !important;
}

.combobox.is-warning .combobox__input,
.combobox.is-warning .combobox__control,
.combobox.is-warning .combobox__chips {
  -webkit-box-shadow: inset 0 0 0 1px var(--border-input-warning, var(--text-warning)) !important;
  box-shadow: inset 0 0 0 1px var(--border-input-warning, var(--text-warning)) !important;
}

.combobox.is-info .combobox__input,
.combobox.is-info .combobox__control,
.combobox.is-info .combobox__chips {
  -webkit-box-shadow: inset 0 0 0 1px var(--border-input-info, var(--text-info)) !important;
  box-shadow: inset 0 0 0 1px var(--border-input-info, var(--text-info)) !important;
}

.combobox.is-loading .combobox__trigger > i,
.combobox.is-loading .combobox__trigger > svg {
  display: none;
}

.combobox.is-loading .combobox__trigger::before {
  content: "";
  display: inline-block;
  width: 12px;
  height: 12px;
  border: 2px solid currentColor;
  border-top-color: transparent;
  border-radius: 9999px;
  -webkit-animation: combobox-spin 0.7s linear infinite;
  animation: combobox-spin 0.7s linear infinite;
}

@-webkit-keyframes combobox-spin {
  to { -webkit-transform: rotate(360deg); transform: rotate(360deg); }
}

@keyframes combobox-spin {
  to { -webkit-transform: rotate(360deg); transform: rotate(360deg); }
}

.combobox__option-swatch {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  border-radius: var(--radius-xs);
  border-style: solid;
  border-width: 1px;
  width: 14px;
  height: 14px;
  border-color: var(--text-primary);
  border-color: color-mix(in oklch, var(--text-primary) 12%, transparent);
}

.combobox__option-dot {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  border-radius: var(--radius-full);
  width: 8px;
  height: 8px;
  background-color: var(--text-tertiary);
}

  .combobox__option-dot.is-success { background-color: var(--text-success); }

  .combobox__option-dot.is-warning { background-color: var(--text-warning); }

  .combobox__option-dot.is-danger { background-color: var(--text-danger); }

  .combobox__option-dot.is-info { background-color: var(--text-info); }

.combobox__option-trailing {
  margin-left: auto;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.375rem;
}

.combobox__option-shortcut {
  margin-left: auto;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.125rem;
  font-family: 'Space Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace;
  font-family: var(--font-mono, 'Space Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace);
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  opacity: 60%;
  color: var(--text-tertiary);
}

.combobox__option-shortcut > kbd {
  display: inline-block;
  border-radius: var(--radius-sm);
  border-style: solid;
  border-width: 1px;
  padding-inline: 0.25rem;
  min-width: 14px;
  text-align: center;
  line-height: 1.4;
  color: inherit;
  background-color: transparent;
  border-color: var(--border-divider);
  font-family: inherit;
  font-size: inherit;
}

.combobox__option--has-description {
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
  padding-block: 0.5rem;
}

.combobox__option--has-description .combobox__option-icon,
.combobox__option--has-description .combobox__option-avatar {
  margin-top: 1px;
}

  .combobox__option--level-1 { padding-left: 1.25rem; }

  .combobox__option--level-2 { padding-left: 2rem; }

  .combobox__option--level-3 { padding-left: 2.75rem; }

.combobox__panel--compact .combobox__option {
  gap: 0.375rem;
  padding-inline: 0.5rem;
  padding-block: 0.25rem;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
}

.combobox__panel--compact .combobox__group {
  padding-inline: 0.5rem;
  padding-block: 0.25rem;
}

.combobox__panel--floating {
  border-color: transparent;
  -webkit-box-shadow:
0 20px 48px -12px color-mix(in oklch, var(--text-primary) 24%, transparent),
  0 8px 16px -6px color-mix(in oklch, var(--text-primary) 12%, transparent);
  box-shadow:
0 20px 48px -12px color-mix(in oklch, var(--text-primary) 24%, transparent),
  0 8px 16px -6px color-mix(in oklch, var(--text-primary) 12%, transparent);
}

.combobox__panel--arrow {
  overflow: visible;
}

.combobox__panel--arrow::before {
  content: "";
  position: absolute;
  top: -5px;
  left: 14px;
  width: 10px;
  height: 10px;
  background-color: inherit;
  border-left: 1px solid var(--border-combobox, var(--border-dropdown));
  border-top: 1px solid var(--border-combobox, var(--border-dropdown));
  -webkit-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  transform: rotate(45deg);
  z-index: 2;
}

.combobox__panel-tabs {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  border-bottom-style: solid;
  border-bottom-width: 1px;
  padding-inline: 0.5rem;
  padding-top: 0.5rem;
  padding-bottom: 0.25rem;
  border-color: var(--border-combobox-header, var(--border-dropdown-divider));
}

.combobox__panel-tab {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  border-radius: var(--radius-md);
  padding-inline: 0.5rem;
  padding-block: 0.25rem;
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  font-weight: 500;
  transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  -webkit-transition-duration: 150ms;
  transition-duration: 150ms;
  color: var(--text-secondary);
  background-color: transparent;
  border: 0;
}

.combobox__panel-tab:hover {
  color: var(--text-primary);
  background-color: color-mix(in oklch, var(--text-primary) 5%, transparent);
}

.combobox__panel-tab.is-active,
.combobox__panel-tab[aria-selected="true"] {
  color: var(--text-info);
  background-color: color-mix(in oklch, var(--text-info) 10%, transparent);
}

.combobox__add-new-action {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 0.5rem;
  border-radius: var(--radius-md);
  padding-inline: 0.5rem;
  padding-block: 0.5rem;
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  font-weight: 500;
  transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  -webkit-transition-duration: 150ms;
  transition-duration: 150ms;
  color: var(--text-info);
  background-color: transparent;
  border: 0;
}

.combobox__add-new-action:hover {
  background-color: color-mix(in oklch, var(--text-info) 8%, transparent);
}

.combobox__add-new-action > i {
  font-size: 10px;
}

.combobox__chip--avatar {
  padding-left: 2px;
}

.combobox__chip--avatar > .combobox__chip-avatar {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  overflow: hidden;
  border-radius: var(--radius-full);
  font-weight: 500;
  text-transform: uppercase;
  width: 18px;
  height: 18px;
  margin-right: 4px;
  background-color: var(--text-primary);
  background-color: color-mix(in oklch, var(--text-primary) 10%, transparent);
  color: var(--text-secondary);
  font-size: 8px;
}

.combobox__chip--avatar > .combobox__chip-avatar > img,
.combobox__chip--avatar > .combobox__chip-avatar > svg {
  height: 100%;
  width: 100%;
  -o-object-fit: cover;
  object-fit: cover;
}

.combobox__chip--colored {
  background-color: var(--chip-bg, color-mix(in oklch, var(--text-info) 12%, transparent));
  color: var(--chip-fg, var(--text-info));
  border-color: var(--chip-bg, transparent);
}

.combobox__chip--success {
  background-color: color-mix(in oklch, var(--text-success) 12%, transparent);
  color: var(--text-success);
  border-color: color-mix(in oklch, var(--text-success) 30%, transparent);
}

.combobox__chip--warning {
  background-color: color-mix(in oklch, var(--text-warning) 12%, transparent);
  color: var(--text-warning);
  border-color: color-mix(in oklch, var(--text-warning) 30%, transparent);
}

.combobox__chip--danger {
  background-color: color-mix(in oklch, var(--text-danger) 12%, transparent);
  color: var(--text-danger);
  border-color: color-mix(in oklch, var(--text-danger) 30%, transparent);
}

.combobox__chips-overflow {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  cursor: default;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  border-radius: var(--radius-md);
  padding-inline: 0.5rem;
  padding-block: 0.125rem;
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  background-color: var(--text-primary);
  background-color: color-mix(in oklch, var(--text-primary) 8%, transparent);
  color: var(--text-secondary);
  border: 1px dashed var(--text-primary);
  border: 1px dashed color-mix(in oklch, var(--text-primary) 18%, transparent);
}

.combobox__option:is(.combobox__option--level-1, .combobox__option--level-2, .combobox__option--level-3)::before {
  content: "";
  display: inline-block;
  width: 8px;
  height: 1px;
  margin-right: 4px;
  margin-left: -8px;
  background-color: color-mix(in oklch, var(--text-primary) 18%, transparent);
  opacity: 0.6;
  -ms-flex-item-align: center;
  align-self: center;
}

@media (pointer: coarse) {
  .combobox__clear::before {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    -webkit-transform: translate(-50%, -50%);
    -ms-transform: translate(-50%, -50%);
    transform: translate(-50%, -50%);
    width: 44px;
    height: 44px;
  }
  .combobox__control > .combobox__clear {
    position: relative;
  }
}

@media (prefers-reduced-motion: reduce) {
  .combobox__panel-tab,
  .combobox__add-new-action,
  .combobox.is-loading .combobox__trigger::before {
    -webkit-transition: none;
    transition: none;
    -webkit-animation: none;
    animation: none;
  }
}

/* ==========================================================================
 * tq-9503 — THE CANONICAL SELECT FIELD (SELECT-FIELD G4; the port of Enodia tq-9500 c57d9ff0, USER via John 900076200,
 * contract owner isabella). The select-mode control IS a form field: it takes the field model of the .form-control beside it
 * (inputs/input.css), measured equal by Scripts/__tests__/select-field-parity on both built sheets:
 *  - geometry from the shared ladder vars (--ctl-h / --ctl-line / --ctl-fs / --ctl-px; a .combobox--sm / --lg sets them as
 *    .form-control-sm / -lg do, and the comfortable density opt-in puts a bare one on md, like a bare field); the same bordered
 *    padding formula, so it measures exactly its rung; the trailing padding is the chevron's (by design);
 *  - Reinly's field edge: a 1px border PLUS a 1px inset ring (rest / hover), both recoloured and the ring thickened on focus;
 *  - the soft surface mirrors .form-control-soft (no edge at rest; the edge on hover / focus);
 *  - the touch font floor (16px on a coarse pointer, max() with --ctl-fs), the same scope as input.css's floor.
 * It was the old fixed box (2.75rem + 0.625rem padding = 46px, 16px, a 6px radius, no ring) beside a 32px field.
 * ========================================================================== */
.combobox__control {
  border-radius: var(--radius-lg);
  min-height: var(--ctl-h, var(--control-h-sm));
  line-height: var(--ctl-line, var(--control-line-sm));
  font-size: var(--ctl-fs, var(--control-fs-sm));
  padding-block: calc((var(--ctl-h, var(--control-h-sm)) - var(--ctl-line, var(--control-line-sm)) - 2 * var(--control-border, 1px)) / 2);
  padding-left: var(--ctl-px, 0.75rem);
  padding-right: 0;
  border: var(--control-border, 1px) solid var(--border-combobox, var(--border-input));
  -webkit-box-shadow: inset 0 0 0 var(--control-border, 1px) var(--border-combobox, var(--border-input));
  box-shadow: inset 0 0 0 var(--control-border, 1px) var(--border-combobox, var(--border-input));
}

.combobox__control:hover {
  border-color: var(--border-combobox-hover, var(--border-input-hover));
  -webkit-box-shadow: inset 0 0 0 var(--control-border, 1px) var(--border-combobox-hover, var(--border-input-hover));
  box-shadow: inset 0 0 0 var(--control-border, 1px) var(--border-combobox-hover, var(--border-input-hover));
}

.combobox__control:focus,
.combobox__control:focus-visible,
.combobox.is-focused .combobox__control {
  border-color: var(--border-combobox-focus, var(--border-input-active));
  -webkit-box-shadow: inset 0 0 0 calc(var(--control-border, 1px) * 2) var(--border-combobox-focus, var(--border-input-active));
  box-shadow: inset 0 0 0 calc(var(--control-border, 1px) * 2) var(--border-combobox-focus, var(--border-input-active));
  outline: none;
}

[data-control-density="comfortable"] .combobox:not(.combobox--sm, .combobox--lg) .combobox__control {
  --ctl-h: var(--control-h-md);
  --ctl-line: var(--control-line-md);
  --ctl-fs: var(--control-fs-md);
  --ctl-px: 0.75rem;
}

.combobox--soft .combobox__control {
  border-color: transparent;
  -webkit-box-shadow: none;
  box-shadow: none;
}

.combobox--soft .combobox__control:hover {
  background-color: var(--bg-input-soft-hover, var(--utility-neutral-100));
  border-color: var(--border-input);
  -webkit-box-shadow: inset 0 0 0 var(--control-border, 1px) var(--border-input);
  box-shadow: inset 0 0 0 var(--control-border, 1px) var(--border-input);
}

.combobox--soft .combobox__control:focus,
.combobox--soft .combobox__control:focus-visible,
.combobox--soft.is-focused .combobox__control {
  background-color: var(--bg-input-soft-active, var(--utility-neutral-50));
  border-color: var(--border-input-active);
  -webkit-box-shadow: inset 0 0 0 calc(var(--control-border, 1px) * 2) var(--border-input-active);
  box-shadow: inset 0 0 0 calc(var(--control-border, 1px) * 2) var(--border-input-active);
  outline: 2px solid transparent;   /* paints nothing, and a system-colour outline under forced colors (forced-colors-focus.test) */
  outline-offset: -2px;
}

/* tq-9503 rule 8c (SELECT-FIELD v1.1, Enodia tq-9527): an option row is a 44px touch target on a coarse pointer. Enodia's token is
   --menu-item-min-h; Reinly has none, so it is --control-h-xs (44px on a coarse pointer, 24px on a fine one), as the contract
   says for a library without it. No bottom-sheet substitute. */
@media (pointer: coarse) {
  .combobox__option:not([data-pointer-scope="fine"] *) {
    min-height: var(--control-h-xs);
  }
  .combobox__control:not([data-pointer-scope="fine"] *),
  [data-pointer-scope="device"] .combobox__control:not([data-pointer-scope="device"] [data-pointer-scope="fine"] *) {
    font-size: max(var(--ctl-fs, 1rem), 16px) !important;
  }
}   /* tq-8211 (R3c): the ONE combobox */

/*Navigation*/
.page-header-wrapper {
  border-top-width: 1px;
  border-bottom-width: 1px;
  border-color: transparent;
  background-color: var(--bg-page-header);
}

.page-header {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-column-gap: 0.5rem;
  -moz-column-gap: 0.5rem;
  column-gap: 0.5rem;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.page-header[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

/* Back button */

/* App icon injected via CSS pseudo-element (hidden when sidebar is pinned) */

.app-shell[data-sidebar-state="pinned"] .page-header::after {
  display: none;
}

/* Theme-aware logo swap */
.logo-dark  { display: none; }
[data-theme="theme-dark"] .logo-light { display: none; }
[data-theme="theme-dark"] .logo-dark  { display: block; }

/* Title */
.page-header-title {
  margin-top: -0.125rem;
  font-size: 0.8125rem;
  font-weight: 500;
  line-height: 1rem;
  color: var(--text-page-title);
}

/* Breadcrumb */
.page-header-breadcrumb {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  padding-top: 0.125rem;
  font-size: 0.6875rem;
  line-height: 1rem;
  font-weight: 500;
  line-height: 1;
}
.collapse.show.page-header-breadcrumb {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .page-header-breadcrumb {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.page-header-breadcrumb.items-baseline { margin-bottom: 10px; }
html.is-mobile .page-header-breadcrumb:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .page-header-breadcrumb.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.page-header-breadcrumb[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .page-header-breadcrumb.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .page-header-breadcrumb.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .page-header-breadcrumb.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .page-header-breadcrumb.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .page-header-breadcrumb.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}
.page-header-breadcrumb { 
  color: var(--text-breadcrumb);
}

  .page-header-breadcrumb span + span::before {
    content: "›";
    margin: 0 0.25rem;
    display: inline-block;
    color: var(--text-breadcrumb-separator);
  }

/*
.btn-nav {
  @apply inline-flex items-center self-center text-sm h-[28px] w-[28px] flex justify-around rounded-full transition duration-150 ease-in-out text-gray-600 hover:bg-gray-200/80 hover:text-gray-900 active:bg-gray-200 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white;
}

.breadcrumb {
  @apply space-x-2 flex items-center text-base font-medium font-Manrope tracking-tight text-gray-500 dark:text-gray-300;
}

.breadcrumb .link {
  @apply text-sm text-gray-400 hover:text-gray-600 dark:text-gray-400 dark:hover:text-gray-300;
}

.breadcrumb .text {
  @apply text-sm text-gray-500 dark:text-gray-400;
}

.breadcrumb .text.active {
  @apply text-sm text-gray-700 dark:text-gray-200;
}

.breadcrumb li i {
  @apply text-sm text-gray-500 dark:text-gray-400 mt-[1px] font-bold;
}
*/
/* Container */
.menu {
  min-height: 100vh;
  width: 100%;
  overflow: hidden;
  background: var(--bg-menu);
  color: var(--text-menu);
  border-color: var(--border-menu);
}

/* Optional modifier: collapsed (icon-only) */
  /* fallback without extra label class */

/* Header / Branding */

/* Scroller + list */

/* Links / summaries (rows are full width) */

/* Use .menu-toggle (button) as the clickable header for groups */

/* Active route (aria-current) — uses dedicated var */

/* Icons & images */

/* Badges */

/* Collapsible groups (DIV-based) */

  /* Chevron + rotation via .is-open on the container */

  /* Open-state styling (uses dedicated var) */

/* Children levels */

/* Optional: the collapsible panel wrapper */

/* Sub-links/items (rows are full width) */

/* Bullets (dots only) */

/* --- Active classes (primary + secondary) ------------------------------- */

  /* Keep active bg on hover */

  /* Secondary active: light up the dot for sub-items */

/* Optional: mirror dot highlight for aria-current usage */

/* Parent “has active child” hint (apply .has-active to the container) */

/* Reduced motion */

/* RTL-friendly spacing (optional) */

/* Active subitem: change the dot color */

/* If you use aria-current instead of .active */
.top-bar {
  min-height: 40px;
}
/* =========================================================
 * Nav Vertical — minimal, link-style vertical menu.
 *
 * A lightweight column of navigation links. No pills, no
 * boxes, no dividers — just typographic links that pick up
 * a soft background tint on hover and a subtle active
 * indicator. Designed to be used inside a settings-style
 * two-column layout where a sticky sidebar sits alongside
 * a content panel.
 *
 * Markup:
 *   <nav class="nav-vertical" role="tablist">
 *     <button class="nav-vertical__link is-active" role="tab">
 *       <i class="fa-light fa-..."></i> Label
 *     </button>
 *     ...
 *   </nav>
 * ========================================================= */

.nav-vertical {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}

.nav-vertical__heading {
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--text-tertiary);
  padding: 8px 10px 4px;
  margin: 0;
  line-height: 1.2;
}

.nav-vertical__link {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 10px;
  padding: 8px 10px;
  border-radius: 8px;
  border: 0;
  background: none;
  color: var(--text-secondary);
  font-size: 13px;
  font-weight: 500;
  line-height: 1.3;
  text-align: left;
  text-decoration: none;
  cursor: pointer;
  -webkit-transition: background-color 120ms ease, color 120ms ease;
  transition: background-color 120ms ease, color 120ms ease;
  min-width: 0;
  width: 100%;
}

.nav-vertical__link i {
  font-size: 13px;
  color: var(--text-tertiary);
  width: 16px;
  text-align: center;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-transition: color 120ms ease;
  transition: color 120ms ease;
}

.nav-vertical__link:hover {
  background-color: var(--bg-button-secondary-hover, var(--bg-primary-subtle));
  color: var(--text-primary);
}

.nav-vertical__link:hover i {
  color: var(--text-primary);
}

.nav-vertical__link.is-active,
.nav-vertical__link[aria-selected="true"] {
  color: var(--text-primary);
  font-weight: 600;
  background-color: var(--bg-button-secondary-hover, var(--bg-primary-subtle));
}

.nav-vertical__link.is-active i,
.nav-vertical__link[aria-selected="true"] i {
  color: var(--utility-emerald-800);
}

.nav-vertical__link:focus-visible {
  outline: 2px solid var(--utility-emerald-800);
  outline-offset: 1px;
}
/* =========================================================
 * Sidebar (Notion-style) — UPDATED CSS
 * States: collapsed | overlay-open | pinned
 * ========================================================= */

[data-sidebar-role="toggle"] {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
}

.app-shell[data-sidebar-state="pinned"] [data-sidebar-role="toggle"] {
  display: none;
}

/* =========================================
 * State-driven tokens
 * - pinned/collapsed: --bg-sidebar
 * - overlay-open (hover expand): --bg-sidebar-hover
 * ========================================= */
.app-shell {
  --bg-sidebar-panel: var(--bg-sidebar);
}

  .app-shell[data-sidebar-state="overlay-open"] {
    --bg-sidebar-panel: var(--bg-sidebar-hover);
  }

/* =========================================
 * Edge hitbox (hover zone)
 * ========================================= */
.sidebar-edge-hitbox {
  position: fixed;
  top: 0px;
  left: 0px;
  height: 100vh;
  width: 0.625rem;
  z-index: 40;
}

.app-shell[data-sidebar-state="pinned"] .sidebar-edge-hitbox,
.app-shell[data-sidebar-state="overlay-open"] .sidebar-edge-hitbox {
  display: none;
}

/* =========================================
 * SIDEBAR LAYOUT COLUMN (controls space)
 * IMPORTANT: prevents layout shift
 * ========================================= */
.app-sidebar {
  position: relative;
  height: 100%;
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
  width: 0; /* default: sidebar takes NO layout space */
  -webkit-transition: width 260ms cubic-bezier(0.4, 0, 0.2, 1);
  transition: width 260ms cubic-bezier(0.4, 0, 0.2, 1);
}

.app-shell[data-sidebar-state="pinned"] .app-sidebar {
  width: var(--width-sidebar-expanded);
}

.app-shell[data-sidebar-state="collapsed"] .app-sidebar,
.app-shell[data-sidebar-state="overlay-open"] .app-sidebar {
  width: 0;
}

/* =========================================
 * VISUAL PANEL (what you see)
 * ========================================= */
.sidebar-panel {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 100%;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  overflow: hidden;
}
.collapse.show.sidebar-panel {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .sidebar-panel {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.sidebar-panel.items-baseline { margin-bottom: 10px; }
html.is-mobile .sidebar-panel:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .sidebar-panel.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.sidebar-panel.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .sidebar-panel.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .sidebar-panel.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .sidebar-panel.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .sidebar-panel.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .sidebar-panel.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}
.sidebar-panel {
  width: var(--width-sidebar-expanded);
  background: var(--bg-sidebar-panel);
  border-right: 1px solid var(--border-sidebar);
  color: var(--text-sidebar);
  -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1),
              background-color 200ms ease,
              -webkit-transform 260ms cubic-bezier(0.4, 0, 0.2, 1),
              -webkit-box-shadow 200ms ease;
  transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1),
              background-color 200ms ease,
              -webkit-transform 260ms cubic-bezier(0.4, 0, 0.2, 1),
              -webkit-box-shadow 200ms ease;
  transition: transform 260ms cubic-bezier(0.4, 0, 0.2, 1),
              opacity 200ms cubic-bezier(0.4, 0, 0.2, 1),
              box-shadow 200ms ease,
              background-color 200ms ease;
  transition: transform 260ms cubic-bezier(0.4, 0, 0.2, 1),
              opacity 200ms cubic-bezier(0.4, 0, 0.2, 1),
              box-shadow 200ms ease,
              background-color 200ms ease,
              -webkit-transform 260ms cubic-bezier(0.4, 0, 0.2, 1),
              -webkit-box-shadow 200ms ease;
  min-height: 0;
}

.app-shell[data-sidebar-state="collapsed"] .sidebar-panel {
  position: fixed;
  top: 0px;
  left: 0px;
  height: 100vh;
  -webkit-transform: translateX(calc(var(--width-sidebar-expanded) * -1));
  -ms-transform: translateX(calc(var(--width-sidebar-expanded) * -1));
  transform: translateX(calc(var(--width-sidebar-expanded) * -1));
  opacity: 0;
  pointer-events: none;
  z-index: 60;
}

.app-shell[data-sidebar-state="overlay-open"] .sidebar-panel {
  position: fixed;
  top: 0px;
  left: 0px;
  height: 100vh;
  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  -webkit-transform: translateX(0);
  -ms-transform: translateX(0);
  transform: translateX(0);
  opacity: 1;
  pointer-events: auto;
  z-index: 60;
}

.app-shell[data-sidebar-state="pinned"] .sidebar-panel {
  position: relative;
  -webkit-transform: translateX(0);
  -ms-transform: translateX(0);
  transform: translateX(0);
  opacity: 1;
  pointer-events: auto;
}

/* =========================================
 * Sidebar content container
 * ========================================= */
.sidebar {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 100%;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
}
.collapse.show.sidebar {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .sidebar {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.sidebar.items-baseline { margin-bottom: 10px; }
html.is-mobile .sidebar:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .sidebar.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.sidebar.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .sidebar.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .sidebar.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .sidebar.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .sidebar.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .sidebar.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}
.sidebar {
  min-height: 0;
}

/* =========================================
 * Sidebar Header
 * ========================================= */
.sidebar-top {
  padding-left: 0.625rem;
  padding-right: 0.625rem;
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
  background: var(--bg-sidebar-header);
  border-bottom: 1px solid var(--border-sidebar-divider);
  /* tq-9150 (A159, isabella 900068659): EXACTLY the chrome height (it already counts the chrome's 1px hairline), so the two
     hairlines are flush: 65 / 65 on both pointers. It was calc(51px + 1px) = 52 against a 65px chrome (13px apart). */
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  min-height: var(--height-chrome);
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

.sidebar-top-row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 2rem;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;
}

.collapse.show.sidebar-top-row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .sidebar-top-row {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.sidebar-top-row.items-baseline { margin-bottom: 10px; }

html.is-mobile .sidebar-top-row:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .sidebar-top-row.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.sidebar-top-row[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .sidebar-top-row.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .sidebar-top-row.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .sidebar-top-row.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .sidebar-top-row.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .sidebar-top-row.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.sidebar-workspace {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  min-width: 0px;
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0%;
  flex: 1 1 0%;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.625rem;
  padding-left: 0.5rem;
  padding-right: 0.5rem;
}

.collapse.show.sidebar-workspace {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .sidebar-workspace {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.sidebar-workspace.items-baseline { margin-bottom: 10px; }

html.is-mobile .sidebar-workspace:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .sidebar-workspace.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.sidebar-workspace[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .sidebar-workspace.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .sidebar-workspace.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .sidebar-workspace.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .sidebar-workspace.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.sidebar-workspace {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .sidebar-workspace.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .sidebar-workspace.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.sidebar-workspace > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .sidebar-workspace.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.sidebar-top-actions {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.sidebar-top-actions[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

/* =========================================
 * Pin / Collapse visibility rules
 * ========================================= */
[data-sidebar-role="pin"],
[data-sidebar-role="collapse"] {
  display: none;
}

.app-shell[data-sidebar-state="overlay-open"] [data-sidebar-role="pin"],
.app-shell[data-sidebar-state="overlay-open"] [data-sidebar-role="collapse"] {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
}

.app-shell[data-sidebar-state="pinned"] [data-sidebar-role="collapse"] {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
}

/* =========================================
 * Scroll container
 * ========================================= */
.sidebar-body {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0%;
  flex: 1 1 0%;
  overflow-y: auto;
  padding: 0.625rem;
  font-size: 0.8125rem;
  line-height: 1.5rem;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .sidebar-body.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .sidebar-body.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}
.sidebar-body {
  min-height: 0;
}

/* =========================================
 * Sections
 * ========================================= */
.sidebar-section {
  margin-bottom: 0.625rem;
}

.sidebar-section-title {
  padding-left: 0.75rem;
  padding-right: 0.75rem;
  padding-top: 0.375rem;
  padding-bottom: 0.375rem;
  font-size: 0.6875rem;
  line-height: 1rem;
  font-weight: 400;
  text-transform: uppercase;
  letter-spacing: 0.025em;
  color: var(--text-sidebar-subtle);
}

/* =========================================
 * Lists
 * ========================================= */
.sidebar-list {
  margin: 0px;
  list-style-type: none;
  padding-left: 0px;
  padding-right: 0px;
}

/* =========================================
 * Items (parent)
 * ========================================= */
.sidebar-item {
  display: grid;
  height: 2rem;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;
  white-space: nowrap;
  border-radius: 0.5rem;
  padding-left: 0.75rem;
  padding-right: 0.75rem;
  text-decoration-line: none;
}
html.is-mobile #rnly-wizard-modal .sidebar-item.grid-cols-2 {
  grid-template-columns: minmax(0, 1fr);
  gap: 16px;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.sidebar-item[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] .sidebar-item {
  width: 100%;
  max-width: 100%;
}
.sidebar-item {
  color: var(--text-sidebar-muted);
  grid-template-columns: 1rem 1fr auto;
}

  .sidebar-item:hover {
    background: var(--bg-sidebar-item-hover);
    color: var(--text-sidebar);
  }

  .sidebar-item.active {
    background: var(--bg-sidebar-item-active);
    color: var(--text-sidebar);
  }

/* =========================================
 * Subitems (full-width hover, inset content)
 * ========================================= */

.sidebar-subitem {
  display: block;
  height: 1.75rem;
  white-space: nowrap;
  border-radius: 0.5rem;
  padding-left: 1.5rem;
  padding-right: 0.75rem;
  text-decoration-line: none;
  color: var(--text-sidebar-muted);
}

  .sidebar-subitem:hover {
    background: var(--bg-sidebar-item-hover);
    color: var(--text-sidebar);
  }

.sidebar-subitem.active {
  background: var(--bg-sidebar-item-active);
  color: var(--text-sidebar);
}

/* =========================================
 * Icons & labels
 * ========================================= */
.sidebar-item-icon {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  height: 1rem;
  width: 1rem;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.sidebar-item-icon[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
.sidebar-item-icon {
  color: var(--text-sidebar-subtle);
}

.sidebar-item-label {
  overflow: hidden;
  text-overflow: ellipsis;
}

/* =========================================
 * Dots
 * ========================================= */

/* =========================================
 * Expandable group
 * ========================================= */

/* Submenu label aligned to parent text column */

/* =========================================
 * Footer
 * ========================================= */
.sidebar-footer {
  padding: 0.5rem;
  border-top: 1px solid var(--border-sidebar-divider);
}

  .sidebar-footer .sidebar-item {
  height: 2.25rem;
}

/* =========================================
 * Scrollbar polish
 * ========================================= */
.sidebar-body::-webkit-scrollbar {
  width: var(--scroll-size);
}

.sidebar-body::-webkit-scrollbar-thumb {
  background: var(--scroll-thumb);
  border-radius: 8px;
}

.sidebar-body::-webkit-scrollbar-track {
  background: transparent;
}
/* ==========================================================================
   TABS — FULL UPDATED CSS (token-aligned)
   - Fixes token name mismatches (-hover/-active)
   - Removes direct --text-primary usage (routes through tab tokens)
   - Adds/uses Tab Browser tokens (expects you defined them in theme)
   ========================================================================== */

/* === Default Tabs === */
.nav-tabs {
  margin-bottom: -1px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
.nav-tabs > :not([hidden]) ~ :not([hidden]) {
  --tw-space-x-reverse: 0;
  margin-right: calc(1rem * var(--tw-space-x-reverse));
  margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
}
.nav-tabs {
  overflow-x: auto;
  border-bottom-width: 1px;
  padding-top: 0.5rem;
  --scrollbar-track: initial;
  --scrollbar-thumb: initial;
  scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
  overflow: overlay;
}
.nav-tabs.overflow-x-hidden {
  overflow-x: hidden;
}
.nav-tabs.overflow-y-hidden {
  overflow-y: hidden;
}
.nav-tabs::-webkit-scrollbar-track {
  background-color: var(--scrollbar-track);
}
.nav-tabs::-webkit-scrollbar-thumb {
  background-color: var(--scrollbar-thumb);
}
.nav-tabs {
  scrollbar-width: auto;
}
.nav-tabs::-webkit-scrollbar {
  width: 16px;
  height: 16px;
}
.nav-tabs {
  --scrollbar-track: initial;
  --scrollbar-thumb: initial;
  scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
  overflow: overlay;
}
.nav-tabs.overflow-x-hidden {
  overflow-x: hidden;
}
.nav-tabs.overflow-y-hidden {
  overflow-y: hidden;
}
.nav-tabs::-webkit-scrollbar-track {
  background-color: var(--scrollbar-track);
}
.nav-tabs::-webkit-scrollbar-thumb {
  background-color: var(--scrollbar-thumb);
}
.nav-tabs {
  scrollbar-width: thin;
}
.nav-tabs::-webkit-scrollbar {
  width: 8px;
  height: 8px;
}
.nav-tabs.panel-content--scroll { overflow-x: hidden; }
.nav-tabs.scroll-y { overflow-x: hidden; }
.nav-tabs.scroll-x { overflow-y: hidden; }
.collapse.show.nav-tabs {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
.nav-tabs.modal-body {
  overflow-x: hidden;
}
@media (max-width: 420px) {
.rnly-achievement-card > .nav-tabs {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.nav-tabs.items-baseline { margin-bottom: 10px; }
html.is-mobile .nav-tabs:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .nav-tabs.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .nav-tabs.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .nav-tabs.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .nav-tabs.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .nav-tabs.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .nav-tabs.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}
.nav-tabs {
  border-color: var(--border-tab);
  background-color: var(--bg-tab);
}

  .nav-tabs > .nav-item {
    background-color: var(--bg-tab);
  }

  .nav-tabs .nav-link {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  white-space: nowrap;
  border-left-width: 0px;
  border-right-width: 0px;
  border-top-width: 0px;
  border-bottom-width: 2px;
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
  padding-left: 0.125rem;
  padding-right: 0.125rem;
  font-size: 0.75rem;
  line-height: 1rem;
  font-weight: 500;
  -webkit-transition-property: all;
  transition-property: all;
  -webkit-transition-duration: 150ms;
  transition-duration: 150ms;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}

  .collapse.show.nav-tabs .nav-link {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

  @media (max-width: 420px) {
.rnly-achievement-card > .nav-tabs .nav-link {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

  html.is-mobile .rnly-rail > div.nav-tabs .nav-link.items-baseline { margin-bottom: 10px; }

  html.is-mobile .nav-tabs .nav-link:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

  html.is-mobile #rnly-wizard-modal .nav-tabs .nav-link.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

  html.is-mobile #rnly-wizard-modal .flex.flex-col.nav-tabs .nav-link[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

  html.is-mobile #pt-scroll-body [id^="pt-section-"] > .nav-tabs .nav-link.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

  html.is-mobile #pt-scroll-body [id^="pt-section-"] > .nav-tabs .nav-link.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

  html.is-mobile #pt-scroll-body [id^="pt-section-"] > .nav-tabs .nav-link.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

  html.is-mobile #pt-scroll-body [id^="pt-section-"] > .nav-tabs .nav-link.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

  html.is-mobile #pt-scroll-body [id^="pt-section-"] > .nav-tabs .nav-link.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

  .nav-tabs .nav-link {
    color: var(--text-tab);
    border-color: var(--border-tab);
    background-color: var(--bg-tab);
  }

    .nav-tabs .nav-link:hover {
      color: var(--text-tab-hover);
      border-color: var(--border-tab-hover);
      background-color: var(--bg-tab-hover);
    }

    .nav-tabs .nav-link.active {
      color: var(--text-tab-active);
      border-color: var(--border-tab-active);
    }

  /* Badge inside tabs */
  .nav-tabs .badge {
  margin-top: -0.25rem;
  margin-bottom: -0.25rem;
  margin-left: 0.125rem;
  font-weight: 500;
    color: var(--text-tab-badge);
}

/* === Ribbon Tabs === */
.nav-tabs-ribbon {
  width: 100%;
  border-radius: 0.5rem;
  border-width: 1px;
  background-color: var(--bg-tab-ribbon);
  border-color: var(--border-tab-ribbon);
}

  .nav-tabs-ribbon .nav-tabs {
  margin: 0px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

  .nav-tabs-ribbon .nav-tabs > :not([hidden]) ~ :not([hidden]) {
  --tw-space-x-reverse: 0;
  margin-right: calc(-1px * var(--tw-space-x-reverse));
  margin-left: calc(-1px * calc(1 - var(--tw-space-x-reverse)));
}

  .nav-tabs-ribbon .nav-tabs {
  overflow-x: auto;
  border-width: 0px;
  padding: 0px;
  --scrollbar-track: initial;
  --scrollbar-thumb: initial;
  scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
  overflow: overlay;
}

  .nav-tabs-ribbon .nav-tabs.overflow-x-hidden {
  overflow-x: hidden;
}

  .nav-tabs-ribbon .nav-tabs.overflow-y-hidden {
  overflow-y: hidden;
}

  .nav-tabs-ribbon .nav-tabs::-webkit-scrollbar-track {
  background-color: var(--scrollbar-track);
}

  .nav-tabs-ribbon .nav-tabs::-webkit-scrollbar-thumb {
  background-color: var(--scrollbar-thumb);
}

  .nav-tabs-ribbon .nav-tabs {
  scrollbar-width: auto;
}

  .nav-tabs-ribbon .nav-tabs::-webkit-scrollbar {
  width: 16px;
  height: 16px;
}

  .nav-tabs-ribbon .nav-tabs {
  --scrollbar-track: initial;
  --scrollbar-thumb: initial;
  scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
  overflow: overlay;
}

  .nav-tabs-ribbon .nav-tabs.overflow-x-hidden {
  overflow-x: hidden;
}

  .nav-tabs-ribbon .nav-tabs.overflow-y-hidden {
  overflow-y: hidden;
}

  .nav-tabs-ribbon .nav-tabs::-webkit-scrollbar-track {
  background-color: var(--scrollbar-track);
}

  .nav-tabs-ribbon .nav-tabs::-webkit-scrollbar-thumb {
  background-color: var(--scrollbar-thumb);
}

  .nav-tabs-ribbon .nav-tabs {
  scrollbar-width: thin;
}

  .nav-tabs-ribbon .nav-tabs::-webkit-scrollbar {
  width: 8px;
  height: 8px;
}

  .nav-tabs-ribbon .nav-tabs.panel-content--scroll { overflow-x: hidden; }

  .nav-tabs-ribbon .nav-tabs.scroll-y { overflow-x: hidden; }

  .nav-tabs-ribbon .nav-tabs.scroll-x { overflow-y: hidden; }

  .collapse.show.nav-tabs-ribbon .nav-tabs {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

  .nav-tabs-ribbon .nav-tabs.modal-body {
  overflow-x: hidden;
}

  @media (max-width: 420px) {
.rnly-achievement-card > .nav-tabs-ribbon .nav-tabs {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

  html.is-mobile .rnly-rail > div.nav-tabs-ribbon .nav-tabs.items-baseline { margin-bottom: 10px; }

  html.is-mobile .nav-tabs-ribbon .nav-tabs:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

  html.is-mobile #rnly-wizard-modal .nav-tabs-ribbon .nav-tabs.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

  html.is-mobile #pt-scroll-body [id^="pt-section-"] > .nav-tabs-ribbon .nav-tabs.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

  html.is-mobile #pt-scroll-body [id^="pt-section-"] > .nav-tabs-ribbon .nav-tabs.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

  html.is-mobile #pt-scroll-body [id^="pt-section-"] > .nav-tabs-ribbon .nav-tabs.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

  html.is-mobile #pt-scroll-body [id^="pt-section-"] > .nav-tabs-ribbon .nav-tabs.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

  html.is-mobile #pt-scroll-body [id^="pt-section-"] > .nav-tabs-ribbon .nav-tabs.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

  .nav-tabs-ribbon .nav-tabs {
    background-color: transparent;
  }

  .nav-tabs-ribbon .nav-item {
  border-radius: 0.375rem;
  padding: 0.125rem;
  padding-left: 0.125rem;
  padding-right: 0.125rem;
    background-color: var(--bg-tab-ribbon-item);
}

  .nav-tabs-ribbon .nav-link {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  white-space: nowrap;
  border-radius: 0.375rem;
  padding-left: 0.625rem;
  padding-right: 0.625rem;
  padding-top: 7px;
  padding-bottom: 6px;
  font-size: 0.75rem;
  line-height: 1rem;
  font-weight: 400;
}

  .collapse.show.nav-tabs-ribbon .nav-link {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

  @media (max-width: 420px) {
.rnly-achievement-card > .nav-tabs-ribbon .nav-link {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

  html.is-mobile .rnly-rail > div.nav-tabs-ribbon .nav-link.items-baseline { margin-bottom: 10px; }

  html.is-mobile .nav-tabs-ribbon .nav-link:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

  html.is-mobile #rnly-wizard-modal .nav-tabs-ribbon .nav-link.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

  html.is-mobile #rnly-wizard-modal .flex.flex-col.nav-tabs-ribbon .nav-link[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

  html.is-mobile #pt-scroll-body [id^="pt-section-"] > .nav-tabs-ribbon .nav-link.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

  html.is-mobile #pt-scroll-body [id^="pt-section-"] > .nav-tabs-ribbon .nav-link.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

  html.is-mobile #pt-scroll-body [id^="pt-section-"] > .nav-tabs-ribbon .nav-link.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

  html.is-mobile #pt-scroll-body [id^="pt-section-"] > .nav-tabs-ribbon .nav-link.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

  html.is-mobile #pt-scroll-body [id^="pt-section-"] > .nav-tabs-ribbon .nav-link.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

  .nav-tabs-ribbon .nav-link {
    color: var(--text-tab);
    background-color: var(--bg-tab-ribbon-item);
    border: none;
    -webkit-transition: color 0.15s ease, background-color 0.15s ease;
    transition: color 0.15s ease, background-color 0.15s ease;
  }

    .nav-tabs-ribbon .nav-link:hover {
      color: var(--text-tab-ribbon);
      background-color: var(--bg-tab-ribbon-hover);
      border-color: var(--border-tab-ribbon);
    }

    .nav-tabs-ribbon .nav-link.active {
  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
      color: var(--text-tab-ribbon-active);
      background-color: var(--bg-tab-ribbon-active);
}

/* === Ribbon Pill variant === */
.nav-tabs-ribbon--pill {
  position: relative;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  width: auto;
  border-radius: 9999px;
  border-width: 0px;
  padding: 3px;
}

  .nav-tabs-ribbon--pill .nav-tabs {
  position: relative;
  gap: 0.125rem;
  overflow: visible;
}

  .nav-tabs-ribbon--pill .nav-item {
  border-radius: 9999px;
  padding: 0px;
}

  .nav-tabs-ribbon--pill .nav-link {
  position: relative;
  border-radius: 9999px;
  font-size: 0.8125rem;
  line-height: 1.5rem;
  font-weight: 500;
    padding: 6px 16px;
    z-index: 1;
}

  .nav-tabs-ribbon--pill .nav-link.active {
  font-weight: 500;
    background-color: transparent;
    -webkit-box-shadow: none;
    box-shadow: none;
}

/* Sliding pill indicator */
.nav-tabs-pill-indicator {
  position: absolute;
  border-radius: 9999px;
  top: 0;
  left: 0;
  height: 100%;
  background-color: var(--bg-tab-ribbon-active);
  -webkit-box-shadow: var(--shadow-sm);
  box-shadow: var(--shadow-sm);
  -webkit-transition: width 0.25s cubic-bezier(0.4, 0, 0.2, 1),
              -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
  transition: width 0.25s cubic-bezier(0.4, 0, 0.2, 1),
              -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
  transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1),
              width 0.25s cubic-bezier(0.4, 0, 0.2, 1);
  transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1),
              width 0.25s cubic-bezier(0.4, 0, 0.2, 1),
              -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
  z-index: 0;
  pointer-events: none;
}

@media (prefers-reduced-motion: reduce) {
  .nav-tabs-pill-indicator {
    -webkit-transition: none;
    transition: none;
  }
}

/* === View Switcher — compact icon toggle for toolbars === */
.view-switcher {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 2px;
  border-radius: 9999px;
  border-width: 1px;
  padding: 2px;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.view-switcher[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
.view-switcher {
  background-color: var(--bg-tab-ribbon);
  border-color: var(--border-tab-ribbon);
}

.view-switcher__btn {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 9999px;
  font-size: 0.75rem;
  line-height: 1rem;
  line-height: 1;
  text-decoration-line: none;
  -webkit-transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  -webkit-transition-duration: 100ms;
  transition-duration: 100ms;
}

.collapse.show.view-switcher__btn {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .view-switcher__btn {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.view-switcher__btn.items-baseline { margin-bottom: 10px; }

html.is-mobile .view-switcher__btn:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .view-switcher__btn.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.view-switcher__btn[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .view-switcher__btn.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .view-switcher__btn.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .view-switcher__btn.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .view-switcher__btn.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .view-switcher__btn.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.view-switcher__btn {
  width: 26px;
  height: 26px;
  color: var(--text-tab);
}

.view-switcher__btn:hover {
  color: var(--text-tab-ribbon);
  background-color: var(--bg-tab-ribbon-hover);
}

.view-switcher__btn.is-active {
  color: var(--text-tab-ribbon-active);
  background-color: var(--bg-tab-ribbon-active);
  -webkit-box-shadow: var(--shadow-sm);
  box-shadow: var(--shadow-sm);
}

/* === Vertical Menu Tabs === */

/* === Tab Content === */

/* === Tab Content as Flex Region ===
   When .tab-content carries .panel-body it is used as a height-filling
   region inside flex column containers (modal-container, container-panel,
   ps-frame, etc.).  The active pane becomes a flex column so internal
   layouts — split-pane, toolbar + table, ps-frame — stretch correctly.
   Simple content (e.g. form fields) scrolls via overflow-y on the pane. */

/* === Tab Browser Wrapper === */

/* Divider between tab strip and actions (optional) */

/* ==========================================================================
   TAB INDICATOR — sliding pill for ribbon / view-switcher / tab-browser
   ========================================================================== */

/* When indicator is present, hide per-item active backgrounds */

/* Ensure nav-links sit above the indicator */
.nav-tabs-ribbon .nav-link,
.nav-tabs-ribbon .nav-item,
.view-switcher .view-switcher__btn {
  position: relative;
  z-index: 1;
}

/* ==========================================================================
   TAB PANE — fade transition
   ========================================================================== */
/* Root tray container */
.tray {
  pointer-events: none;
  visibility: hidden;
  position: fixed;
  inset: 0px;
  z-index: 50;
}

/* Overlay */
.tray-overlay {
  position: absolute;
  inset: 0px;
  opacity: 0;
  -webkit-transition-property: opacity;
  transition-property: opacity;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  -webkit-transition-duration: 100ms;
  transition-duration: 100ms;
  -webkit-transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
  background-color: var(--bg-tray-overlay);
  pointer-events: none;
}

/* Panel */
.tray-panel {
  position: absolute;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  overflow: hidden;
  border-radius: 0px;
  -webkit-transition-property: all;
  transition-property: all;
  -webkit-transition-duration: 200ms;
  transition-duration: 200ms;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
.collapse.show.tray-panel {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .tray-panel {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.tray-panel.items-baseline { margin-bottom: 10px; }
html.is-mobile .tray-panel:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .tray-panel.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.tray-panel.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .tray-panel.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .tray-panel.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .tray-panel.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .tray-panel.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .tray-panel.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}
.tray-panel {
  background-color: var(--bg-tray);
  color: var(--text-tray);
  border: 1px solid var(--border-tray);
  /* slide logic via custom props */
  --tray-translate-x: 0%;
  --tray-translate-y: 0%;
  -webkit-transform: translateX(var(--tray-translate-x)) translateY(var(--tray-translate-y));
  -ms-transform: translateX(var(--tray-translate-x)) translateY(var(--tray-translate-y));
  transform: translateX(var(--tray-translate-x)) translateY(var(--tray-translate-y));
}

/* Open state */
.tray.active {
  pointer-events: auto;
  visibility: visible;
}

  .tray.active .tray-overlay {
  opacity: 1;
    pointer-events: auto;
}

  .tray.active .tray-panel {
  --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
    --tray-translate-x: 0%;
    --tray-translate-y: 0%;
}

/* Directions -------------------------------------------------- */
.tray-left .tray-panel {
  top: 0px;
  bottom: 0px;
  left: 0px;
  border-radius: 0px;
  --tray-translate-x: -100%;
  --tray-translate-y: 0%;
}

.tray-right .tray-panel {
  top: 0px;
  bottom: 0px;
  right: 0px;
  border-radius: 0px;
  --tray-translate-x: 100%;
  --tray-translate-y: 0%;
}

.tray-top .tray-panel {
  left: 0px;
  right: 0px;
  top: 0px;
  border-radius: 0px;
  --tray-translate-x: 0%;
  --tray-translate-y: -100%;
}

.tray-bottom .tray-panel {
  left: 0px;
  right: 0px;
  bottom: 0px;
  border-radius: 0px;
  --tray-translate-x: 0%;
  --tray-translate-y: 100%;
}

/* Sizes ------------------------------------------------------- */
.tray-left .tray-panel,
.tray-right .tray-panel {
  width: 100%;
  max-width: 100%;
}

.tray-full .tray-panel {
  border-radius: 0px;
}

.tray-full.tray-left .tray-panel,
.tray-full.tray-right .tray-panel {
  width: 100%;
}

.tray-full.tray-top .tray-panel,
.tray-full.tray-bottom .tray-panel {
  height: 100%;
}

/* Desktop widths for left/right */
@media (min-width: 640px) {

  .tray-left:not(.tray-full) .tray-panel {
    border-radius: 0px;
  }

  .tray-right:not(.tray-full) .tray-panel {
    border-radius: 0px;
  }
}

/* CONTAINED VARIANT ------------------------------------------- */
/* Scopes the tray to a relative parent instead of the viewport. */
/* Parent must have position: relative and overflow: hidden.      */

/* NO OVERLAY VARIANT ------------------------------------------ */
.tray-no-overlay .tray-overlay {
  background-color: transparent;
  opacity: 0 !important;
  pointer-events: none !important;
}

.tray-no-overlay.active {
  pointer-events: none;
}

  .tray-no-overlay.active .tray-panel {
    pointer-events: auto;
  }

/* Tray inner layout ------------------------------------------- */

/* Pin button -------------------------------------------------- */

  /* Unpinned: icon rotated 45° (loose pin) */

  /* Pinned: icon upright + accent colour */

/* PINNED STATE ------------------------------------------------ */
/* Overlay becomes transparent + non-interactive so page stays usable */
.tray.tray-pinned .tray-overlay {
  pointer-events: none !important;
  opacity: 0 !important;
}

/* Container passes clicks through (like no-overlay mode) */
.tray.tray-pinned {
  pointer-events: none;
}

/* Panel itself stays interactive */
.tray.tray-pinned .tray-panel {
  pointer-events: auto;
}

/* Optional: lock body scroll when any tray with overlay is open */
.tray-open {
  overflow: hidden;
}

/* Trays scoped inside modals — absolute within modal-content bounds
   Overrides both .tray { fixed } and .modal-content > * { relative } */
.modal-content > .tray {
  position: absolute;
  z-index: 10;
  overflow: hidden;
}

/* =========================
   Drag behavior (Option A)
   ========================= */

/* Mark non-draggable zones (use on text-heavy areas like .tray-body) */
.tray-no-drag {
  -webkit-user-select: text;
  -moz-user-select: text;
  -ms-user-select: text;
  user-select: text;
}

/* =========================
   Resize behavior
   ========================= */

/* Opt-in: data-eno-resizable on the .tray element.
   Runtime width/height is driven by --tray-width / --tray-height custom props. */

/* Resize drag handle — matches split-pane__divider styling */

/* Invisible grab area (easier to grab than 1px) */

/* Left/right trays: vertical resize handle */

/* Top/bottom trays: horizontal resize handle */

/* Hover / active states — expand like split-pane divider */

/* Resize action buttons — centered on the resize edge, identical to split-pane__actions */

/* For left/right trays: stack vertically */

/* For top/bottom trays: stack horizontally */

/* Show on resize handle hover or when nearby */

/* Hide during active resize drag */

/* Individual action button — identical to .split-pane__action */

/* While resizing, disable transitions so panel follows the pointer */

/* Animated snap (not during drag) */

/* While dragging, disable transitions so panel/overlay follow the pointer */
.tray.tray-dragging .tray-panel,
.tray.tray-dragging .tray-overlay {
  -webkit-transition: none !important;
  transition: none !important;
}

/* Prevent page gestures + accidental selection while dragging */
.tray.tray-dragging {
  -ms-touch-action: none;
  touch-action: none;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
  .tray-overlay,
  .tray-panel {
    -webkit-transition: none;
    transition: none;
  }
}

/*Overlays*/
/* ==========================================================================
   Dropdown — canonical (A232 tq-9386)

   The app (reinly.webapp) imports this file IN PLACE, so it is plain CSS (Tailwind directives expanded:
   Reinly.Design/tests/app-imported-plain-css.test.mjs).
   1. The app's LIVE dropdown: the values of every selector the app uses (expanded with the app's Tailwind 3.4, as the app
      built them). These are canonical; the DS's earlier values for these selectors are gone.
   2. DS-only additions no app element can match (glass, sizes, widths, sections, the hint / meta / search / footer rows,
      the mode-switch and unread dots ...; expanded with the DS's Tailwind 4, as the DS built them). The DS additions that
      WOULD reach the app's markup live in apps/docs.css, docs-only. Their z-9999 / z-10000 map onto the z ladder
      (var(--z-dropdown), +1 for a submenu); their Tailwind 4 theme variables carry the DS value as a var() fallback.
   ========================================================================== */

/* ============================== 1. The app's live dropdown ============================== */

/* -----------------------------------------
 * Wrapper
 * ----------------------------------------- */
.dropdown {
  position: relative;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}

/* Toggle helper */
.dropdown-toggle,
.dropdown-toggle.show {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;
}

/* Bootstrap .show support */
.dropdown-menu.show {
  display: block;
}


/* ==========================================================================
 * Menu Base (abstract)
 * ========================================================================== */
.dropdown-menu-base {
  position: absolute;
  display: none;
  overflow: hidden;
  border-radius: 0.5rem;
  border-width: 1px;
  padding: 0.25rem;
  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  z-index: var(--z-dropdown);   /* z ladder (tq-9381): a menu renders in its host */
  min-width: 10rem;
  /* ✅ default anchor: end-aligned to trigger */
  right: 0;
  left: auto;
  background-color: var(--bg-dropdown);
  border-color: var(--border-dropdown);
  color: var(--text-dropdown);
  backdrop-filter: var(--blur-dropdown-backdrop);
  -webkit-box-shadow: var(--shadow-dropdown);
  box-shadow: var(--shadow-dropdown);
}

  /* Grain overlay */
  .dropdown-menu-base::after {
    content: "";
    position: absolute;
    inset: 0;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'><filter id='noiseFilter'><feTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/></filter><rect width='100%' height='100%' filter='url(%23noiseFilter)' opacity='1'/></svg>");
    background-repeat: repeat;
    mix-blend-mode: overlay;
    opacity: var(--opacity-dropdown-grain, 0);
    pointer-events: none;
    z-index: 0;
    border-radius: inherit;
  }

  /* Content above grain */
  .dropdown-menu-base > * {
    position: relative;
    z-index: 1;
  }


/* -----------------------------------------
 * Default menu
 * ----------------------------------------- */
.dropdown-menu {
  position: absolute;
  display: none;
  overflow: hidden;
  border-radius: 0.5rem;
  border-width: 1px;
  padding: 0.25rem;
  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  z-index: var(--z-dropdown);   /* z ladder (tq-9381): a menu renders in its host */
  min-width: 10rem;
  /* ✅ default anchor: end-aligned to trigger */
  right: 0;
  left: auto;
  background-color: var(--bg-dropdown);
  border-color: var(--border-dropdown);
  color: var(--text-dropdown);
  backdrop-filter: var(--blur-dropdown-backdrop);
  -webkit-box-shadow: var(--shadow-dropdown);
  box-shadow: var(--shadow-dropdown);
}
.dropdown-menu::after {
    content: "";
    position: absolute;
    inset: 0;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'><filter id='noiseFilter'><feTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/></filter><rect width='100%' height='100%' filter='url(%23noiseFilter)' opacity='1'/></svg>");
    background-repeat: repeat;
    mix-blend-mode: overlay;
    opacity: var(--opacity-dropdown-grain, 0);
    pointer-events: none;
    z-index: 0;
    border-radius: inherit;
  }
.dropdown-menu > * {
    position: relative;
    z-index: 1;
  }


/* -----------------------------------------
 * Glass menu
 * ----------------------------------------- */


/* ==========================================================================
 * Menu content
 * ========================================================================== */

/* Section title */

/* Hint / meta row */

/* Divider */
.dropdown-divider {
  margin-top: 0.25rem;
  margin-bottom: 0.25rem;
  margin-left: 0.25rem;
  margin-right: 0.25rem;
  border-top-width: 1px;
  border-color: var(--border-dropdown-divider);
}


/* ==========================================================================
 * Items
 * ========================================================================== */
.dropdown-item {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  width: 100%;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;
  border-radius: 0.375rem;
  padding-left: 0.5rem;
  padding-right: 0.5rem;
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
  text-align: left;
  font-size: 0.75rem;
  line-height: 1rem;
  font-weight: 400;
  -webkit-transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, backdrop-filter, -webkit-box-shadow, -webkit-transform, -webkit-filter;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, backdrop-filter, -webkit-box-shadow, -webkit-transform, -webkit-filter;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-box-shadow, -webkit-transform, -webkit-filter;
  -webkit-transition-duration: 100ms;
  transition-duration: 100ms;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  color: var(--text-dropdown-item);
}

  .dropdown-item:hover {
  cursor: pointer;
    background-color: var(--bg-dropdown-hover);
}

  .dropdown-item:active {
    background-color: var(--bg-dropdown-active);
  }

/* Glass items */

/* Icon slot */
.dropdown-icon {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  width: 1.25rem;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  color: var(--text-dropdown-icon);
}

/* Right-side meta */

/* Active / selected */
.dropdown-item.is-active,
.dropdown-item[aria-current="true"],
.dropdown-item[aria-selected="true"] {
  background-color: var(--bg-dropdown-selected);
  color: var(--text-dropdown-selected);
}

/* Disabled */
.dropdown-item.is-disabled,
.dropdown-item:disabled,
.dropdown-item[disabled] {
  pointer-events: none;
  cursor: not-allowed;
  opacity: 0.5;
}

/* Danger — tq-9408 (A247; the USER Delete standard, tq-6991): the visible text AND the icon in the destructive colour,
   owned by this rule (no per-item colour utility); hover, keyboard focus and press keep it, on the danger tint instead of
   the neutral one */
.dropdown-item.is-danger {
  color: var(--text-dropdown-danger);
}

.dropdown-item.is-danger .dropdown-icon {
  color: var(--text-dropdown-danger);
}

  .dropdown-item.is-danger:hover,
  .dropdown-item.is-danger:focus-visible,
  .dropdown-item.is-danger:active {
    color: var(--text-dropdown-danger);
    background-color: var(--bg-dropdown-danger-hover);
  }

/* Touch — tq-9408 (A247; isabella 900074422, the DS 44px touch contract): on a coarse pointer an item is at least 44px tall
   (its text stays centred: the item is an inline-flex row, items-center), and a toggle gets a 44x44 HIT AREA centred on it
   without changing its visible size, so no header shifts. Desktop is unchanged. */
@media (pointer: coarse) {
  /* items IN A MENU only: the account nav (.rnly-acct-nav__item) borrows .dropdown-item for its tabs, which are not a menu */
  .dropdown-menu .dropdown-item,
  .dropdown-menu-glass .dropdown-item {
    min-height: 44px;
  }

  .dropdown-toggle {
    position: relative;
  }

  /* ::before: the app hides an icon toggle's ::after (.dropdown-toggle.btn-icon::after, the Bootstrap caret) */
  .dropdown-toggle::before {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    width: max(100%, 44px);
    height: max(100%, 44px);
    -webkit-transform: translate(-50%, -50%);
    -ms-transform: translate(-50%, -50%);
    transform: translate(-50%, -50%);
  }
}


/* ==========================================================================
 * Sizes
 * ========================================================================== */


/* ==========================================================================
 * Widths (semantic)
 * Apply on .dropdown-menu / .dropdown-menu-glass
 * ========================================================================== */


/* ==========================================================================
 * Alignment / placement (FIXED)
 * - Works with or without Popper
 * - Uses !important to beat inline popper styles if present
 * ========================================================================== */

/* Start aligned */

/* End aligned */
.dropdown-menu-end {
  right: 0 !important;
  left: auto !important;
}

/* Popper attribute support (still included) */


/* ==========================================================================
 * Offsets
 * ========================================================================== */


/* ==========================================================================
 * User menu unread indicator — green pulse dot on the hamburger button
 * + inline count pill next to the Messages dropdown item.
 * ========================================================================== */

/* Count pill on the Messages menu item */

/* ==========================================================================
 * Mode-switch dot — appears on "Switch to selling" / "Switch to buying"
 * buttons (header + UserMenu dropdown) when there's unread messaging
 * traffic on the side the user isn't currently viewing. Same emerald
 * pulse as the hamburger indicator so the visual language is consistent
 * across every notification surface in the app.
 * ========================================================================== */

/* Inside dropdown items the dot sits inline at the right edge instead
   of floating off the corner — the dropdown row is rectangular so
   absolute positioning would clip against the menu border. */

/* ============================== 2. DS-only additions ============================== */

/* ============================================================================
 * DROPDOWN / MENU — Phase-3c rebuild (Tailwind v4 · faithful 1:1 Untitled UI)
 * ----------------------------------------------------------------------------
 * ADOPT seat: source = UUI `base/dropdown` (+13 dropdown-* variants),
 * cached at _phase3/uui-cache/dropdowns/dropdown/base/dropdown/dropdown.tsx.
 *
 * WHAT WAS ADOPTED FROM UUI'S ARCHITECTURE (FAN-OUT-RULES §1 — resolve the model,
 * not just the colours):
 *   • PANEL = a subtle 1px **inset-free ring (box-shadow), NOT a CSS `border`** +
 *     `shadow-lg` on a themed surface — UUI: `rounded-lg bg-primary shadow-lg
 *     ring-1 ring-secondary_alt`. The old build used `(apply) border`, which the
 *     v3→v4 compat shim can recolour to a stray gray hairline; a ring never
 *     double-borders and composites cleanly with the drop shadow.
 *   • ITEM = UUI's `flex items-center rounded-md px-2.5 py-2`, label
 *     `text-sm font-semibold` (UUI menu items ARE semibold — the signature),
 *     hover/focus fill on the row, leading icon `text-fg-quaternary`.
 *   • SELECTION INDICATOR in UUI's **brand accent** (violet), never info-blue:
 *     single-select check = brand; multi-select checkbox fill = `--bg-brand-solid`
 *     + white mark — identical to the sibling `.checkbox` (inputs/checkbox.css).
 *   • SINGLE focus ring — one 2px ring in `--border-focus` (the brand accent),
 *     `-outline-offset-2` (inset), no border+ring, no offset halo (F6).
 *
 * WHAT IS OURS AND IS KEPT (never-narrow — FAN-OUT-RULES §5 / TOKEN-MAP narrowing):
 *   • `is-info` intent (no UUI analog) alongside danger/success/warning.
 *   • `.dropdown-menu-glass` mica sub-theme + grain overlay (UUI is single-surface).
 *   • our size ladder (sm/md/lg), semantic widths, placement/offset/arrow/top,
 *     the item slots (description/avatar/trailing/shortcut), submenu, and the
 *     full menu structure (search/scroll/footer/empty/loading/group).
 *
 * Everything is token-driven — no literals; theme-*.css owns the resolved values
 * (Lead-only). Interactivity is wired by the delegated, framework-free
 * Scripts/dropdown-wire.js (no jQuery/Bootstrap); the CSS open contract is
 * `.dropdown-menu.show` / `.dropdown.show` (matched by that driver AND still by
 * Bootstrap's `data-bs-toggle` for legacy app markup).
 * ========================================================================== */

/* -----------------------------------------
 * Wrapper
 * ----------------------------------------- */

/* Toggle helper */

/* Open convention (driver toggles `.show` on the menu — and on `.dropdown` for
   the caret). Matches Scripts/dropdown-wire.js AND Bootstrap's plugin. */
.dropdown-menu-glass.show {
  display: block;
}

/* ==========================================================================
 * Menu Base (abstract) — UUI popover: rounded-lg · bg · shadow-lg · ring-1
 * ========================================================================== */

  /* Grain overlay (our mica extension — kept) */

  /* Content above grain */

/* -----------------------------------------
 * Default menu
 * ----------------------------------------- */

/* -----------------------------------------
 * Glass menu (mica sub-theme — kept; ring-over-border applied here too)
 * ----------------------------------------- */
.dropdown-menu-glass {
  position: absolute;
  z-index: var(--z-dropdown);
  display: none;
  overflow: hidden;
  border-radius: var(--radius-lg);
  border-style: var(--tw-border-style);
  border-width: 1px;
  padding: var(--spacing, 0.25rem);
  --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
  -webkit-box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
  box-shadow: var(--tw-inset-shadow, 0 0 #0000), var(--tw-inset-ring-shadow, 0 0 #0000), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
  min-width: 10rem;
  right: 0;
  left: auto;
  background-color: var(--bg-dropdown);
  border-color: var(--border-dropdown);
  color: var(--text-dropdown);
  backdrop-filter: var(--blur-dropdown-backdrop);
  -webkit-box-shadow: var(--shadow-dropdown);
  box-shadow: var(--shadow-dropdown);
  top: 100%;                                    /* see .dropdown-menu — (apply) drops it */
  width: -webkit-max-content;
  width: -moz-max-content;
  width: max-content;                           /* ditto — never two lines */
  max-width: var(--dropdown-menu-max-w, min(20rem, calc(100vw - 2rem)));
  background-color: var(--bg-dropdown-glass);
  color: var(--text-dropdown-glass);
  backdrop-filter: var(--blur-dropdown-glass);
  -webkit-box-shadow: 0 0 0 1px var(--border-dropdown-glass), var(--shadow-dropdown-glass);
  box-shadow: 0 0 0 1px var(--border-dropdown-glass), var(--shadow-dropdown-glass);
}

  .dropdown-menu-glass::after {
    opacity: var(--opacity-dropdown-glass-grain, 0);
  }

/* ==========================================================================
 * Menu content — header / hint / divider slots
 * ========================================================================== */

/* Section title (header slot) */
.dropdown-title {
  padding-inline: calc(var(--spacing, 0.25rem) * 3);
  padding-block: var(--spacing, 0.25rem);
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  --tw-tracking: var(--tracking-wide, 0.025em);
  letter-spacing: var(--tracking-wide, 0.025em);
  text-transform: uppercase;
  --tw-font-weight: var(--font-weight-semibold, 600);
  font-weight: var(--font-weight-semibold, 600);
  color: var(--text-dropdown-title);
}

/* Hint / meta row */
.dropdown-hint {
  padding-inline: calc(var(--spacing, 0.25rem) * 3);
  padding-block: var(--spacing, 0.25rem);
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  color: var(--text-dropdown-hint);
}

/* Divider (UUI: my-1 h-px bg-border-secondary) */

/* ==========================================================================
 * Items — UUI: flex items-center rounded-md px-2.5 py-2, text-sm font-semibold
 * ========================================================================== */
/* `flex`, NOT `inline-flex` — load-bearing for the content-width panel above.
   As inline-flex the rows are INLINE-level, so the menu's max-content is "all four
   rows on one unwrapped line" (measured: 559px for the 4-row area switcher, which
   pinned the panel to its 20rem cap instead of its real ~170px content width).
   Block-level rows make max-content = the WIDEST ROW, which is the whole point.
   They already carry w-full, so nothing moves visually. */

  /* SINGLE focus ring — 2px brand accent, inset (UUI: outline-2 -outline-offset-2).
     No border + ring, no offset halo. */

/* Glass items */
.dropdown-menu-glass .dropdown-item {
  color: var(--text-dropdown-item-glass);
}

  .dropdown-menu-glass .dropdown-item:hover {
    background-color: var(--bg-dropdown-glass-hover);
  }

  .dropdown-menu-glass .dropdown-item:active {
    background-color: var(--bg-dropdown-glass-active);
  }

/* Icon slot (UUI: leading size-4 text-fg-quaternary) */

.dropdown-menu-glass .dropdown-icon {
  color: var(--text-dropdown-icon-glass);
}

/* Right-side meta (UUI addon: ml-1 text-xs font-medium text-quaternary) */
.dropdown-end {
  margin-left: auto;
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  opacity: 70%;
  color: var(--text-dropdown-end);
}

.dropdown-menu-glass .dropdown-end {
  color: var(--text-dropdown-end-glass);
}

/* Active / selected */

.dropdown-menu-glass .dropdown-item.is-active,
.dropdown-menu-glass .dropdown-item[aria-current="true"],
.dropdown-menu-glass .dropdown-item[aria-selected="true"] {
  background-color: var(--bg-dropdown-selected-glass);
  color: var(--text-dropdown-selected-glass);
}

/* Disabled */

/* Danger */

.dropdown-menu-glass .dropdown-item.is-danger {
  color: var(--text-dropdown-danger-glass);
}

  .dropdown-menu-glass .dropdown-item.is-danger:hover {
    background-color: var(--bg-dropdown-danger-hover-glass);
  }

/* ==========================================================================
 * Sizes  (sm = text-xs · md = UUI base text-sm · lg = roomier)
 * ========================================================================== */
.dropdown-sm .dropdown-menu,
.dropdown-sm .dropdown-menu-glass {
  padding: var(--spacing, 0.25rem);
  border-radius: var(--radius-md);
}

.dropdown-sm .dropdown-item {
  padding-block: calc(var(--spacing, 0.25rem) * 1.5);
  padding-inline: calc(var(--spacing, 0.25rem) * 2);
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
}

.dropdown-md .dropdown-menu,
.dropdown-md .dropdown-menu-glass {
  padding: var(--spacing, 0.25rem);
  border-radius: var(--radius-lg);
}

.dropdown-lg .dropdown-menu,
.dropdown-lg .dropdown-menu-glass {
  padding: calc(var(--spacing, 0.25rem) * 2);
  border-radius: var(--radius-xl);
}

.dropdown-lg .dropdown-item {
  padding-block: calc(var(--spacing, 0.25rem) * 2.5);
  padding-inline: calc(var(--spacing, 0.25rem) * 3);
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
}

.dropdown-lg .dropdown-end {
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
}

/* ==========================================================================
 * Widths (semantic) — apply on .dropdown-menu / .dropdown-menu-glass.
 * (UUI's own default popover is w-62 / 15.5rem; our ladder is kept intact.)
 *
 * The rungs are FLOORS (min-width), not fixed widths. They used to be `width`,
 * which fought the never-wrap rule: a row is now `white-space: nowrap`, so a
 * label longer than the rung could no longer wrap — against a hard width it would
 * have been CLIPPED by the panel's overflow:hidden, which is strictly worse than
 * the wrapping we set out to fix, and it would have hit all ~150 ladder usages.
 * As floors they keep doing their real job (a menu of short rows still reads at
 * the intended width) while the panel's `width: max-content` is free to grow past
 * them for the one long label. The max-width cap still bounds the growth.
 * ========================================================================== */
.dropdown-w-auto {
  /* "no imposed width" — drop the 10rem floor, stay content-sized (not `auto`,
     which would shrink-to-fit the trigger again and re-introduce wrapping). */
  width: -webkit-max-content;
  width: -moz-max-content;
  width: max-content;
  min-width: 0;
}

.dropdown-w-sm {
  min-width: 10rem; /* 160px */
}

.dropdown-w-md {
  min-width: 12rem; /* 192px */
}

.dropdown-w-lg {
  min-width: 14rem; /* 224px */
}

.dropdown-w-xl {
  min-width: 18rem; /* 288px */
}

.dropdown-w-full {
  /* a stretch, not a floor — and it opts out of the content cap */
  width: 100%;
  max-width: none;
}

/* ==========================================================================
 * Alignment / placement (FIXED)
 * - Works with or without a positioning engine
 * - Uses !important to beat inline popper styles if present
 * ========================================================================== */

/* Start aligned */
.dropdown-menu-start,
.dropdown-menu-glass.dropdown-menu-start {
  left: 0 !important;
  right: auto !important;
}

/* End aligned */
.dropdown-menu-glass.dropdown-menu-end {
  right: 0 !important;
  left: auto !important;
}

/* Popper attribute support (still included) */
.dropdown-menu-start[data-bs-popper],
.dropdown-menu-glass.dropdown-menu-start[data-bs-popper] {
  left: 0 !important;
  right: auto !important;
}

.dropdown-menu-glass.dropdown-menu-end[data-bs-popper] {
  right: 0 !important;
  left: auto !important;
}

/* ==========================================================================
 * Offsets
 * ========================================================================== */
.dropdown-menu-offset-sm {
  margin-top: .25rem;
}

.dropdown-menu-offset-md {
  margin-top: .5rem;
}

.dropdown-menu-offset-lg {
  margin-top: .75rem;
}

/* ==========================================================================
 * INTENT VARIANTS — rounds out the existing .is-danger.
 * `info` has NO UUI analog — kept (never-narrow #1). Stack with .dropdown-item.
 * ========================================================================== */
.dropdown-item.is-success {
  color: var(--text-success);
}
  .dropdown-item.is-success:hover {
    background-color: color-mix(in oklch, var(--text-success) 10%, transparent);
  }

.dropdown-item.is-warning {
  color: var(--text-warning);
}
  .dropdown-item.is-warning:hover {
    background-color: color-mix(in oklch, var(--text-warning) 10%, transparent);
  }

.dropdown-item.is-info {
  color: var(--text-info);
}
  .dropdown-item.is-info:hover {
    background-color: color-mix(in oklch, var(--text-info) 10%, transparent);
  }

/* ==========================================================================
 * ITEM SLOTS — description / avatar / trailing / shortcut
 * ========================================================================== */

/* Two-line item: title on top, description below.
   Markup: <button class="dropdown-item dropdown-item--has-description">
            <span class="dropdown-icon">...</span>
            <div class="dropdown-item__content">
              <div>Title</div>
              <div class="dropdown-item__description">Helper text</div>
            </div>
          </button>
*/
.dropdown-item--has-description {
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
  padding-block: calc(var(--spacing, 0.25rem) * 2.5);
}

  .dropdown-item--has-description .dropdown-icon {
    margin-top: 1px;
  }

.dropdown-item__content {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  min-width: 0;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  gap: 1px;
}

.dropdown-item__description {
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  --tw-font-weight: var(--font-weight-normal, 400);
  font-weight: var(--font-weight-normal, 400);
  opacity: 70%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--text-dropdown-hint, var(--text-tertiary));
}

/* Avatar slot (alternative to icon) */
.dropdown-item__avatar {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  border-radius: var(--radius-full);
  overflow: hidden;
  width: 22px;
  height: 22px;
  background-color: var(--bg-secondary);
  font-size: 10px;
  font-weight: 600;
  color: var(--text-secondary);
}

  .dropdown-item__avatar > img,
  .dropdown-item__avatar > svg {
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
  object-fit: cover;
  }

/* Trailing slot — generic right-aligned container (badge, chevron, status dot) */
.dropdown-item__trailing {
  margin-left: auto;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: calc(var(--spacing, 0.25rem) * 1.5);
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

/* Keyboard shortcut display — kbd-like styling (UUI addon) */
.dropdown-shortcut {
  margin-left: auto;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: calc(var(--spacing, 0.25rem) * 0.5);
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  font-family: var(--font-mono, 'Space Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace);
  opacity: 60%;
  color: var(--text-dropdown-end, var(--text-tertiary));
}

  .dropdown-shortcut > kbd {
  display: inline-block;
  padding-inline: var(--spacing, 0.25rem);
  border-radius: var(--radius-sm);
  border-style: var(--tw-border-style);
  border-width: 1px;
    min-width: 14px;
    text-align: center;
    line-height: 1.4;
    color: inherit;
    background-color: transparent;
    border-color: var(--border-divider);
    font-family: inherit;
    font-size: inherit;
  }

/* ==========================================================================
 * MULTI-SELECT — checkable item pattern (UUI selectionIndicator="checkbox")
 * Markup: <button class="dropdown-item dropdown-item--checkable" role="menuitemcheckbox"
 *           aria-checked="true"><span class="dropdown-icon">...</span> Label</button>
 * Leading checkbox indicator; toggles fill/check via aria-checked.
 * CHECKED FILL = brand accent (violet) + white mark — identical to .checkbox.
 * ========================================================================== */
.dropdown-item--checkable::before {
  content: "";
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: var(--radius-sm);
  -ms-flex-negative: 0;
  flex-shrink: 0;
  width: 14px;
  height: 14px;
  background-color: transparent;
  -webkit-box-shadow: inset 0 0 0 1px var(--border-checkbox, var(--border-divider));
  box-shadow: inset 0 0 0 1px var(--border-checkbox, var(--border-divider));
  margin-right: 4px;
  -webkit-transition: background-color 100ms ease, -webkit-box-shadow 100ms ease;
  transition: background-color 100ms ease, -webkit-box-shadow 100ms ease;
  transition: background-color 100ms ease, box-shadow 100ms ease;
  transition: background-color 100ms ease, box-shadow 100ms ease, -webkit-box-shadow 100ms ease;
}

  .dropdown-item--checkable[aria-checked="true"]::before {
    background-color: var(--bg-brand-solid);
    -webkit-box-shadow: inset 0 0 0 1px var(--bg-brand-solid);
    box-shadow: inset 0 0 0 1px var(--bg-brand-solid);
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23FFFFFF' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><path d='M20 6L9 17l-5-5'/></svg>");
    background-repeat: no-repeat;
    background-position: center;
    background-size: 10px;
  }

/* ==========================================================================
 * SELECTED — single-select check mark, trailing (UUI selectionIndicator="checkmark")
 * On a regular .dropdown-item[aria-selected="true"]. CHECK = brand accent (violet).
 * ========================================================================== */

  /* Don't double up if a trailing element is already present */
  .dropdown-item[aria-selected="true"]:has(.dropdown-end)::after,
  .dropdown-item[aria-selected="true"]:has(.dropdown-shortcut)::after,
  .dropdown-item[aria-selected="true"]:has(.dropdown-item__trailing)::after {
    display: none;
  }

/* ==========================================================================
 * SUBMENU — nested menu trigger + panel (UUI hasSubmenu ChevronRight)
 * Markup:
 *   <div class="dropdown-item dropdown-item--submenu" aria-haspopup="true" aria-expanded="false">
 *     <span class="dropdown-icon">...</span> Share to
 *     <div class="dropdown-submenu">
 *       <button class="dropdown-item">Email</button>
 *     </div>
 *   </div>
 * ========================================================================== */
.dropdown-item--submenu::after {
  content: "\f054"; /* fa-chevron-right */
  font-family: "Font Awesome 7 Pro", "Font Awesome 6 Pro";
  font-weight: 400;
  margin-left: auto;
  padding-left: 0.5rem;
  font-size: 10px;
  color: var(--text-dropdown-icon);
  -webkit-transition: -webkit-transform 120ms ease;
  transition: -webkit-transform 120ms ease;
  transition: transform 120ms ease;
  transition: transform 120ms ease, -webkit-transform 120ms ease;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

  .dropdown-item--submenu:hover::after,
  .dropdown-item--submenu[aria-expanded="true"]::after {
    -webkit-transform: translateX(2px);
    -ms-transform: translateX(2px);
    transform: translateX(2px);
  }

.dropdown-submenu {
  position: absolute;
  display: none;
  z-index: calc(var(--z-dropdown) + 1);
  overflow: hidden;
  border-radius: var(--radius-lg);
  padding: var(--spacing, 0.25rem);
  min-width: 10rem;
  /* same shrink-to-fit defect as .dropdown-menu-base — its containing block is the
     parent row, so without this a long submenu label wraps. See that comment. */
  width: -webkit-max-content;
  width: -moz-max-content;
  width: max-content;
  max-width: var(--dropdown-menu-max-w, min(20rem, calc(100vw - 2rem)));
  top: 0;
  left: 100%;
  margin-left: 4px;
  border: 0;
  background-color: var(--bg-dropdown);
  color: var(--text-dropdown);
  -webkit-box-shadow: 0 0 0 1px var(--border-dropdown), var(--shadow-dropdown);
  box-shadow: 0 0 0 1px var(--border-dropdown), var(--shadow-dropdown);
}

  /* Show on hover / open */
  .dropdown-item--submenu:hover > .dropdown-submenu,
  .dropdown-item--submenu[aria-expanded="true"] > .dropdown-submenu {
  display: block;
  }

/* ==========================================================================
 * MENU STRUCTURE — search header, scroll body, footer, empty, loading, group
 * ========================================================================== */

/* Sticky search header — pin to top, separated by divider */
.dropdown-search {
  position: sticky;
  top: 0;
  z-index: 10;
  padding-inline: calc(var(--spacing, 0.25rem) * 2);
  padding-block: calc(var(--spacing, 0.25rem) * 2);
  margin-inline: calc(var(--spacing, 0.25rem) * -1);
  margin-top: calc(var(--spacing, 0.25rem) * -1);
  margin-bottom: var(--spacing, 0.25rem);
  border-bottom-style: var(--tw-border-style);
  border-bottom-width: 1px;
  background-color: inherit;
  border-color: var(--border-dropdown-divider, var(--border-divider));
}

  .dropdown-search .form-control,
  .dropdown-search .form-control-soft,
  .dropdown-search input[type="text"],
  .dropdown-search input[type="search"] {
  width: 100%;
  }

/* Sticky bottom action row (footer slot) */
.dropdown-footer {
  position: sticky;
  bottom: 0;
  z-index: 10;
  padding-inline: calc(var(--spacing, 0.25rem) * 2);
  padding-block: calc(var(--spacing, 0.25rem) * 2);
  margin-inline: calc(var(--spacing, 0.25rem) * -1);
  margin-bottom: calc(var(--spacing, 0.25rem) * -1);
  margin-top: var(--spacing, 0.25rem);
  border-top-style: var(--tw-border-style);
  border-top-width: 1px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: calc(var(--spacing, 0.25rem) * 2);
  background-color: inherit;
  border-color: var(--border-dropdown-divider, var(--border-divider));
}

  .dropdown-footer--between {
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between; }
  .dropdown-footer--end     {
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end; }

/* Scroll container — caps item-list height + smooth scrollbar */
.dropdown-scroll {
  overflow-y: auto;
  margin-inline: calc(var(--spacing, 0.25rem) * -1);
  padding-inline: var(--spacing, 0.25rem);
  max-height: var(--dropdown-scroll-max, 18rem);
  scrollbar-width: thin;
  scrollbar-color: var(--border-divider) transparent;
}

  .dropdown-scroll::-webkit-scrollbar {
    width: var(--scroll-size-sm);
  }

  .dropdown-scroll::-webkit-scrollbar-thumb {
    background-color: var(--border-divider);
    border-radius: 9999px;
  }

/* Empty state */
.dropdown-empty {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: calc(var(--spacing, 0.25rem) * 2);
  padding-inline: calc(var(--spacing, 0.25rem) * 3);
  padding-block: calc(var(--spacing, 0.25rem) * 6);
  text-align: center;
  color: var(--text-tertiary);
}

  .dropdown-empty__icon {
  font-size: 1rem;
  line-height: var(--tw-leading, 1.5rem);
  opacity: 50%;
  }

  .dropdown-empty__title {
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  --tw-font-weight: var(--font-weight-medium, 500);
  font-weight: var(--font-weight-medium, 500);
    color: var(--text-secondary);
  }

  .dropdown-empty__description {
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  --tw-font-weight: var(--font-weight-normal, 400);
  font-weight: var(--font-weight-normal, 400);
  opacity: 70%;
  }

/* Loading state */
.dropdown-loading {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: calc(var(--spacing, 0.25rem) * 2);
  padding-inline: calc(var(--spacing, 0.25rem) * 3);
  padding-block: calc(var(--spacing, 0.25rem) * 4);
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  color: var(--text-tertiary);
}

  .dropdown-loading::before {
    content: "";
  display: inline-block;
  border-radius: var(--radius-full);
  border-style: var(--tw-border-style);
  border-width: 2px;
  border-color: currentcolor;
    width: 12px;
    height: 12px;
    border-top-color: transparent;
    -webkit-animation: dropdown-spin 0.7s linear infinite;
    animation: dropdown-spin 0.7s linear infinite;
  }

@-webkit-keyframes dropdown-spin {
  to { -webkit-transform: rotate(360deg); transform: rotate(360deg); }
}

@keyframes dropdown-spin {
  to { -webkit-transform: rotate(360deg); transform: rotate(360deg); }
}

/* Group — like .dropdown-title but as a true group wrapper (header slot) */
.dropdown-group {
  padding-block: var(--spacing, 0.25rem);
}

  .dropdown-group + .dropdown-group {
  border-top-style: var(--tw-border-style);
  border-top-width: 1px;
  margin-top: var(--spacing, 0.25rem);
  padding-top: calc(var(--spacing, 0.25rem) * 2);
    border-color: var(--border-dropdown-divider, var(--border-divider));
  }

  .dropdown-group__label {
  padding-inline: calc(var(--spacing, 0.25rem) * 3);
  padding-block: var(--spacing, 0.25rem);
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  text-transform: uppercase;
  --tw-tracking: var(--tracking-wide, 0.025em);
  letter-spacing: var(--tracking-wide, 0.025em);
  --tw-font-weight: var(--font-weight-semibold, 600);
  font-weight: var(--font-weight-semibold, 600);
    color: var(--text-dropdown-title, var(--text-tertiary));
  }

/* ==========================================================================
 * VISUAL VARIANTS — compact / filled / floating
 * ========================================================================== */

/* Compact — denser padding, smaller text (command-palette-style menus) */
.dropdown-menu--compact .dropdown-item {
  padding-block: calc(var(--spacing, 0.25rem) * 1.5);
  padding-inline: calc(var(--spacing, 0.25rem) * 2);
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  gap: calc(var(--spacing, 0.25rem) * 1.5);
}

  .dropdown-menu--compact .dropdown-title,
  .dropdown-menu--compact .dropdown-hint,
  .dropdown-menu--compact .dropdown-group__label {
  padding-inline: calc(var(--spacing, 0.25rem) * 2);
  padding-block: calc(var(--spacing, 0.25rem) * 0.5);
  }

/* Filled — no ring, prominent shadow only (less chrome on dark surfaces) */
.dropdown-menu--filled {
  -webkit-box-shadow:
    0 12px 32px -8px color-mix(in oklch, var(--text-primary) 18%, transparent),
    0 4px 12px -4px color-mix(in oklch, var(--text-primary) 10%, transparent);
  box-shadow:
    0 12px 32px -8px color-mix(in oklch, var(--text-primary) 18%, transparent),
    0 4px 12px -4px color-mix(in oklch, var(--text-primary) 10%, transparent);
}

/* Floating — pronounced shadow, useful for command palette */
.dropdown-menu--floating {
  -webkit-box-shadow:
    0 0 0 1px var(--border-dropdown),
    0 20px 48px -12px color-mix(in oklch, var(--text-primary) 24%, transparent),
    0 8px 16px -6px color-mix(in oklch, var(--text-primary) 12%, transparent);
  box-shadow:
    0 0 0 1px var(--border-dropdown),
    0 20px 48px -12px color-mix(in oklch, var(--text-primary) 24%, transparent),
    0 8px 16px -6px color-mix(in oklch, var(--text-primary) 12%, transparent);
}

/* ==========================================================================
 * PLACEMENT — top / arrow / bottom (default)
 * ========================================================================== */

/* Anchored above the trigger (vs default below) */
.dropdown-menu--top,
.dropdown-menu-glass.dropdown-menu--top {
  top: auto !important;
  bottom: 100% !important;
  margin-top: 0 !important;
  margin-bottom: .5rem;
}

/* Caret / arrow pointing back at the trigger */
.dropdown-menu--arrow {
  overflow: visible;
}

  .dropdown-menu--arrow::before {
    content: "";
    position: absolute;
    top: -5px;
    width: 10px;
    height: 10px;
    background-color: inherit;
    border-left: 1px solid var(--border-dropdown);
    border-top: 1px solid var(--border-dropdown);
    -webkit-transform: rotate(45deg);
    -ms-transform: rotate(45deg);
    transform: rotate(45deg);
    z-index: 2;
  }

  /* Arrow position follows alignment */
  .dropdown-menu--arrow.dropdown-menu-start::before { left: 14px; }
  .dropdown-menu--arrow.dropdown-menu-end::before   { right: 14px; }
  .dropdown-menu--arrow:not(.dropdown-menu-start):not(.dropdown-menu-end)::before {
    right: 14px;
  }

  /* Arrow flips when menu is anchored above */
  .dropdown-menu--arrow.dropdown-menu--top::before {
    top: auto;
    bottom: -5px;
    -webkit-transform: rotate(225deg);
    -ms-transform: rotate(225deg);
    transform: rotate(225deg);
  }

/* ==========================================================================
 * TRIGGER — caret with auto-rotation on open
 * Markup: <button class="btn-secondary dropdown-toggle" aria-expanded="false">
 *           Actions <i class="dropdown-caret fa-light fa-chevron-down"></i>
 *         </button>
 * ========================================================================== */
.dropdown-caret {
  -webkit-transition: -webkit-transform 150ms ease;
  transition: -webkit-transform 150ms ease;
  transition: transform 150ms ease;
  transition: transform 150ms ease, -webkit-transform 150ms ease;
  font-size: 9px;
}

  [aria-expanded="true"] > .dropdown-caret,
  .dropdown.show > .dropdown-toggle > .dropdown-caret {
    -webkit-transform: rotate(180deg);
    -ms-transform: rotate(180deg);
    transform: rotate(180deg);
  }

@media (prefers-reduced-motion: reduce) {
  .dropdown-caret,
  .dropdown-item--submenu::after,
  .dropdown-item--checkable::before,
  .dropdown-loading::before {
    -webkit-transition: none;
    transition: none;
    -webkit-animation: none;
    animation: none;
  }
}

/* ==========================================================================
 * ==========================================================================
 * PHASE-4 · WAVE 2 — TRIGGER + CONTENT VARIANT TAXONOMY (serial seat)
 * --------------------------------------------------------------------------
 * ADOPT: UUI `base/dropdown` + the 13 `dropdown-*` variant leaves cached at
 * _phase3/uui-cache/_all/base/dropdown-* (account-breadcrumb · account-button ·
 * account-card-{md,sm,xs} · avatar · button-{advanced,link,simple} ·
 * icon-{advanced,simple} · integration · search-{advanced,simple}).
 *
 * The Wave-2 seat adds ONLY what the base above does not already express: the
 * distinct TRIGGER presentations and the panel HEADER/FOOTER regions + account
 * block those variants introduce. Everything else (item rows, slots, selection,
 * submenu, search/scroll/footer, sizes, intents) is the base — never duplicated.
 *
 * REUSE (referenced in markup, never redefined here):
 *   • avatar family — `.avatar .avatar-{xs,sm,md}` · `.avatar-border` ·
 *     `.avatar-badge.badge-online` · `.avatar-action` (data/avatar.css — the
 *     interactive avatar was authored for exactly the dropdown-avatar trigger)
 *   • buttons — `.btn-secondary .dropdown-toggle` is the standard button trigger
 *     for button-simple/advanced, integration, account-button, search-*; footer
 *     actions use `.btn-secondary .btn-xs` / `.btn-ghost`
 *   • badges — `.badge .badge-sm` in item trailing slots
 *
 * TOKENS ONLY. Every colour resolves through a semantic token (dropdown-scoped
 * first, then a semantic surface/text fallback) so this auto-inherits the v8
 * surface-ramp rebase — ZERO colour literals (HARD RULE).
 * The `.show`/`[data-dropdown-toggle]` open contract and Scripts/dropdown-wire.js
 * are unchanged; new triggers are ordinary `[data-dropdown-toggle]` elements.
 * ========================================================================== */

/* The platform `hidden` attribute must win over an item's/region's own `display`
 * (set via a utility class — specificity would otherwise ignore `[hidden]`). This
 * is what makes JS search-filtering (`item.hidden`, dropdown-wire.js) and an
 * authored-hidden empty state actually collapse. */
.dropdown-empty[hidden],
.dropdown-title[hidden] {
  display: none !important;
}

/* ==========================================================================
 * TRIGGER — kebab / dots (UUI DotsButton · dropdown-icon-simple/-advanced)
 * Icon-only overflow trigger. MUST carry aria-label (a11y §7). Lives on a
 * toolbar/row, OUTSIDE the menu surface — so it hovers on the app surface,
 * not the menu surface.
 * Markup: <button class="dropdown-dots" data-dropdown-toggle aria-haspopup="menu"
 *           aria-expanded="false" aria-label="Open menu">
 *           <i class="fa-light fa-ellipsis-vertical"></i></button>
 * ========================================================================== */
.dropdown-dots {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  border-radius: var(--radius-md);
  cursor: pointer;
  transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, backdrop-filter, display, content-visibility, overlay, pointer-events;
  -webkit-transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(0.4, 0, 0.2, 1)));
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(0.4, 0, 0.2, 1)));
  -webkit-transition-duration: var(--tw-duration, var(--default-transition-duration, 150ms));
  transition-duration: var(--tw-duration, var(--default-transition-duration, 150ms));
  --tw-duration: 100ms;
  -webkit-transition-duration: 100ms;
  transition-duration: 100ms;
  --tw-ease: var(--ease-in-out);
  -webkit-transition-timing-function: var(--ease-in-out);
  transition-timing-function: var(--ease-in-out);
  width: 2.25rem;
  height: 2.25rem;
  color: var(--text-dropdown-icon, var(--text-quaternary));
  background-color: transparent;
}

  .dropdown-dots:hover {
    color: var(--text-quaternary-hover, var(--text-secondary));
    background-color: var(--bg-primary-hover, var(--bg-secondary));
  }

  .dropdown-dots:focus-visible {
    outline: 2px solid var(--focus-ring);
    outline-offset: 2px;
  }

  .dropdown-dots > i,
  .dropdown-dots > svg {
    font-size: 1.125rem;
    line-height: 1;
  }

/* Dense variant to sit inside a compact toolbar / table row */
.dropdown-dots.dropdown-dots--sm {
  width: 1.75rem;
  height: 1.75rem;
}
  .dropdown-dots--sm > i,
  .dropdown-dots--sm > svg {
    font-size: 1rem;
  }

/* ==========================================================================
 * TRIGGER — text link (UUI dropdown-button-link)
 * Inline text + small chevron, no button chrome. Reflects a chosen value
 * (e.g. an inline "Can edit ▾" permission picker). font-semibold, tertiary.
 * ========================================================================== */
.dropdown-link-trigger {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: var(--spacing, 0.25rem);
  border-radius: 0.25rem;
  cursor: pointer;
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  --tw-font-weight: var(--font-weight-semibold, 600);
  font-weight: var(--font-weight-semibold, 600);
  transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, backdrop-filter, display, content-visibility, overlay, pointer-events;
  -webkit-transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(0.4, 0, 0.2, 1)));
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(0.4, 0, 0.2, 1)));
  -webkit-transition-duration: var(--tw-duration, var(--default-transition-duration, 150ms));
  transition-duration: var(--tw-duration, var(--default-transition-duration, 150ms));
  --tw-duration: 100ms;
  -webkit-transition-duration: 100ms;
  transition-duration: 100ms;
  --tw-ease: var(--ease-in-out);
  -webkit-transition-timing-function: var(--ease-in-out);
  transition-timing-function: var(--ease-in-out);
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  color: var(--text-tertiary);
  background-color: transparent;
}

  .dropdown-link-trigger:hover {
    color: var(--text-secondary);
  }

  .dropdown-link-trigger:focus-visible {
    outline: 2px solid var(--focus-ring);
    outline-offset: 2px;
  }

  .dropdown-link-trigger > i,
  .dropdown-link-trigger > svg {
    font-size: 0.6875rem;
    color: var(--text-dropdown-icon, var(--text-quaternary));
  }

/* ==========================================================================
 * TRIGGER — account breadcrumb (UUI dropdown-account-breadcrumb)
 * A small framed avatar chip + name + selector chevron, inline (used in a
 * top-bar breadcrumb / workspace switcher). Reuses `.avatar .avatar-border`.
 * ========================================================================== */
.dropdown-breadcrumb {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: calc(var(--spacing, 0.25rem) * 1.5);
  border-radius: var(--radius-lg);
  cursor: pointer;
  text-align: left;
  transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, backdrop-filter, display, content-visibility, overlay, pointer-events;
  -webkit-transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(0.4, 0, 0.2, 1)));
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(0.4, 0, 0.2, 1)));
  -webkit-transition-duration: var(--tw-duration, var(--default-transition-duration, 150ms));
  transition-duration: var(--tw-duration, var(--default-transition-duration, 150ms));
  --tw-duration: 100ms;
  -webkit-transition-duration: 100ms;
  transition-duration: 100ms;
  --tw-ease: var(--ease-in-out);
  -webkit-transition-timing-function: var(--ease-in-out);
  transition-timing-function: var(--ease-in-out);
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  background-color: transparent;
}

  .dropdown-breadcrumb:focus-visible {
    outline: 2px solid var(--focus-ring);
    outline-offset: 2px;
  }

  .dropdown-breadcrumb__name {
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  --tw-font-weight: var(--font-weight-semibold, 600);
  font-weight: var(--font-weight-semibold, 600);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
    color: var(--text-primary);
  }

  .dropdown-breadcrumb > i.dropdown-selector,
  .dropdown-breadcrumb > svg.dropdown-selector {
    font-size: 0.6875rem;
    color: var(--text-dropdown-icon, var(--text-quaternary));
  }

/* ==========================================================================
 * TRIGGER — account card (UUI dropdown-account-card-{md,sm,xs})
 * A bordered card trigger holding an account block + a selector chevron pinned
 * top-right. Inset ring (never a border — the panel model), single focus ring.
 * Three densities; width is a sensible default, override with a width utility.
 * ========================================================================== */
.dropdown-account-card {
  position: relative;
  cursor: pointer;
  border-radius: var(--radius-lg);
  text-align: left;
  transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, backdrop-filter, display, content-visibility, overlay, pointer-events;
  -webkit-transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(0.4, 0, 0.2, 1)));
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(0.4, 0, 0.2, 1)));
  -webkit-transition-duration: var(--tw-duration, var(--default-transition-duration, 150ms));
  transition-duration: var(--tw-duration, var(--default-transition-duration, 150ms));
  --tw-duration: 100ms;
  -webkit-transition-duration: 100ms;
  transition-duration: 100ms;
  --tw-ease: var(--ease-in-out);
  -webkit-transition-timing-function: var(--ease-in-out);
  transition-timing-function: var(--ease-in-out);
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  padding: 0.5rem;
  background-color: var(--bg-primary-alt, var(--bg-primary));
  -webkit-box-shadow: inset 0 0 0 1px var(--border-secondary);
  box-shadow: inset 0 0 0 1px var(--border-secondary);
}

  .dropdown-account-card:hover {
    background-color: var(--bg-primary-hover, var(--bg-secondary));
  }

  .dropdown-account-card:focus-visible {
    outline: 2px solid var(--focus-ring);
    outline-offset: 2px;
  }

  /* Selector chevron, pinned top-right (UUI ChevronSelectorVertical / ChevronDown) */
  .dropdown-account-card__chevron {
  position: absolute;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: var(--radius-md);
    top: 0.5rem;
    right: 0.5rem;
    width: 1.75rem;
    height: 1.75rem;
    color: var(--text-dropdown-icon, var(--text-quaternary));
    font-size: 0.875rem;
  }

/* Densities — set an intrinsic min-width; consumers may override with utilities */
.dropdown-account-card--md { min-width: 15rem; }   /* UUI w-60 */
.dropdown-account-card--sm { min-width: 13rem; }   /* UUI w-42 (roomier for name) */
.dropdown-account-card--xs { min-width: 11rem; }   /* UUI w-38 */

  .dropdown-account-card--sm,
  .dropdown-account-card--xs {
    padding: 0.375rem 0.5rem;
  }

/* ==========================================================================
 * CONTENT — account block (avatar + name + email + presence)
 * The two/three-line identity block used BOTH inside an account-card trigger
 * and inside a `.dropdown-header` (avatar / account-card panels). Avatar comes
 * from the reused `.avatar` family; this owns only the text stack + layout.
 * Markup:
 *   <div class="dropdown-account">
 *     <span class="avatar avatar-md"><img …><span class="avatar-badge badge-online"></span></span>
 *     <div class="dropdown-account__body">
 *       <p class="dropdown-account__name">Olivia Rhye</p>
 *       <p class="dropdown-account__email">olivia@example.com</p>
 *     </div>
 *   </div>
 * ========================================================================== */
.dropdown-account {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: calc(var(--spacing, 0.25rem) * 3);
  min-width: 0;
}

  .dropdown-account__body {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  min-width: 0;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  }

  .dropdown-account__name {
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  --tw-font-weight: var(--font-weight-semibold, 600);
  font-weight: var(--font-weight-semibold, 600);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
    color: var(--text-primary);
  }

  .dropdown-account__email {
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
    color: var(--text-dropdown-hint, var(--text-tertiary));
  }

/* Compact account block (sm/xs card triggers: avatar + name, no email) */
.dropdown-account--compact {
  gap: calc(var(--spacing, 0.25rem) * 2);
}
  .dropdown-account--compact .dropdown-account__name {
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  }

/* ==========================================================================
 * SECTION HEADER — brand-accent group label (UUI text-brand-secondary)
 * Used by account menus ("Switch Account", "Company"). A brand-tinted, NON-
 * uppercase header — distinct from the uppercase tertiary `.dropdown-title`.
 * ========================================================================== */
.dropdown-title--section {
  padding-inline: calc(var(--spacing, 0.25rem) * 3);
  padding-top: calc(var(--spacing, 0.25rem) * 1.5);
  padding-bottom: calc(var(--spacing, 0.25rem) * 0.5);
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  --tw-font-weight: var(--font-weight-semibold, 600);
  font-weight: var(--font-weight-semibold, 600);
  text-transform: none;
  --tw-tracking: var(--tracking-normal, 0em);
  letter-spacing: var(--tracking-normal, 0em);
  color: var(--text-icon-brand, var(--border-focus));
}

/* ==========================================================================
 * LEADING STATUS DOT (UUI StatusDot — icon-/button-advanced people rows)
 * A presence dot occupying the leading icon column. Sits inside/near the
 * `.dropdown-icon` slot; pairs with `aria-label` on the row for SR presence.
 * ========================================================================== */
.dropdown-dot {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  width: 1.25rem;
}

  .dropdown-dot::before {
    content: "";
  display: inline-block;
  border-radius: var(--radius-full);
    width: 0.375rem;
    height: 0.375rem;
    background-color: var(--text-dropdown-icon, var(--text-quaternary));
  }

  .dropdown-dot.is-online::before  { background-color: var(--bg-success-solid, var(--text-success)); }
  .dropdown-dot.is-away::before    { background-color: var(--text-warning); }
  .dropdown-dot.is-busy::before    { background-color: var(--text-danger); }
  .dropdown-dot.is-offline::before { background-color: var(--text-quaternary); }

/* ==========================================================================
 * BRAND / INTEGRATION ICON (UUI dropdown-integration — grayscale brand logos)
 * The "Open in v0 / Claude / Figma …" rows: a brand glyph in the leading slot
 * at full item contrast (not the quaternary tint used for utility icons).
 * `--grayscale` desaturates a coloured brand glyph to match UUI's mono row.
 * ========================================================================== */
.dropdown-icon--brand {
  color: var(--text-dropdown-item, var(--text-secondary));
}

  .dropdown-icon--brand.dropdown-icon--grayscale > img,
  .dropdown-icon--brand.dropdown-icon--grayscale > svg {
    -webkit-filter: grayscale(1);
    filter: grayscale(1);
  }

/* ==========================================================================
 * PANEL HEADER REGION (UUI account/avatar/search panels)
 * A full-bleed, NON-sticky region at the top of the menu, above the item list,
 * separated by a bottom divider. Holds an account block, a plan/status block,
 * or a search field. Negative margins cancel the menu's p-1 so it is full-width
 * and its top corners follow the menu's rounding (overflow-hidden clips them).
 * ========================================================================== */
.dropdown-header {
  margin-inline: calc(var(--spacing, 0.25rem) * -1);
  margin-top: calc(var(--spacing, 0.25rem) * -1);
  margin-bottom: var(--spacing, 0.25rem);
  padding-inline: calc(var(--spacing, 0.25rem) * 4);
  padding-block: calc(var(--spacing, 0.25rem) * 3);
  border-bottom-style: var(--tw-border-style);
  border-bottom-width: 1px;
  border-color: var(--border-dropdown-divider, var(--border-divider));
  background-color: inherit;
}

  /* Two-line plan / status block (UUI "PRO account / Renews …") */
  .dropdown-header__title {
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  --tw-font-weight: var(--font-weight-semibold, 600);
  font-weight: var(--font-weight-semibold, 600);
    color: var(--text-primary);
  }

  .dropdown-header__meta {
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
    color: var(--text-dropdown-hint, var(--text-tertiary));
  }

/* ==========================================================================
 * PANEL FOOTER — modifiers on the existing sticky `.dropdown-footer`
 * The account/avatar panels use a STATIC, roomier footer holding either meta
 * (© / version) or a full-width action button (Sign out). These are additive
 * to `.dropdown-footer` and never change its default sticky behaviour (used by
 * the search + scroll pattern above).
 * ========================================================================== */
.dropdown-footer--static {
  position: static;
  z-index: auto;
}

.dropdown-footer--roomy {
  padding: 0.75rem 1rem;   /* UUI px-4 py-3 */
}

/* Muted, spread meta row (© Reinly · v12.6.8) */
.dropdown-footer--meta {
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  color: var(--text-dropdown-hint, var(--text-tertiary));
}
  .dropdown-footer--meta > span {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  }

/* Stacked action block — a full-width footer button (Sign out) */
.dropdown-footer--action {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: stretch;
  -ms-flex-align: stretch;
  align-items: stretch;
  gap: calc(var(--spacing, 0.25rem) * 3);
}

/* ==========================================================================
 * MENU SHAPE — flush-top (UUI dropdown-account-button: rounded-b-xl)
 * Squares the top edge so the panel reads as attached to a bar/trigger above,
 * keeping the bottom corners rounded. Purely decorative; opt-in.
 * ========================================================================== */
.dropdown-menu--flush-top {
  border-top-left-radius: 0;
  border-top-right-radius: 0;
}

/* ==========================================================================
   TOUCH DENSITY  ·  DS standard DR-006 (carry-forward) · closes DR-026
   ==========================================================================

   THE GAP THIS CLOSES
   The round-2 ladder re-point grew everything that derives its height from
   --control-h-*, and round-3 caught the selection controls that size themselves in
   hard-coded px. Dropdowns were missed by both, because a dropdown's target is not
   one control but four different things, only one of which touches the ladder:

     .dropdown-toggle       no intrinsic height at all — it is a composition helper.
                            Paired with .btn-* it inherited round-2's ladder and is
                            fine; used bare (the common case on icon triggers) it is
                            whatever its content happens to be.
     .dropdown-dots         2.25rem = 36px, hard-coded here.  --sm variant 1.75rem = 28px.
     .dropdown-item         px-2.5 py-2 over text-sm — measured ~36px per row, and
                            .dropdown-sm .dropdown-item ~28px.
     .dropdown-link-trigger inline text, no height — measured ~20px tall.

   Menus are also the single worst place to under-size a target: the items sit
   directly against one another, so a miss does not do nothing, it fires the
   NEIGHBOURING action. On a row-level kebab that is "Delete" instead of "Edit".

   TWO TECHNIQUES, CHOSEN PER CONTROL — and the choice is load-bearing
   Stacked rows (.dropdown-item) take min-height. They cannot overlap by
   construction, and a 44px menu row is what a mobile menu should look like anyway.
   Isolated triggers take the invisible ::before expander from round-3 instead, so
   the painted chrome keeps its designed size: growing .dropdown-dots to a real 44px
   would drag a 44px hover halo into every table row and wreck row density, and
   growing .dropdown-link-trigger would break the inline text rhythm it exists for.

   DO NOT collapse these two into one rule. Expanders on stacked items would overlap
   by 8px and the lower row would silently steal a band of the upper row's target
   (last-painted wins) — measured in round-3 on .check, and menu rows sit tighter.

   `position: relative` IS RESTATED BELOW AND IS NOT REDUNDANT. Neither
   .dropdown-dots nor .dropdown-link-trigger declares a position, so `left/top: 50%`
   on the pseudo would resolve against the INITIAL CONTAINING BLOCK — round-3
   measured exactly that failure at left:195px on a 390px viewport: not an enlarged
   button, but a stray invisible 44px hit-box parked mid-layout stealing taps from
   whatever sat there. An expander without an anchor is worse than no expander.

   Desktop is deliberately untouched — a mouse does not need 44px, and on a dense
   table an expander would steal hover from the row it overhangs. */
@media (pointer: coarse) {

  /* Stacked rows — grow the row itself. */

  /* The dense tiers explicitly re-assert it: .dropdown-sm/.dropdown-lg override the
     item's padding, and without this they would keep their 28px/40px rhythm. */
  .dropdown-sm .dropdown-item,
  .dropdown-lg .dropdown-item {
    min-height: 44px;
  }

  /* Isolated triggers — grow the TARGET, never the painted box. */
  .dropdown-dots,
  .dropdown-link-trigger {
    position: relative;        /* load-bearing — see the note above */
  }

  .dropdown-dots::before,
  .dropdown-link-trigger::before {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    -webkit-transform: translate(-50%, -50%);
    -ms-transform: translate(-50%, -50%);
    transform: translate(-50%, -50%);
    width: 44px;
    height: 44px;
    /* target area only — nothing painted */
  }

  /* A bare .dropdown-toggle (no .btn-* to inherit the ladder from) is unsized.
     Both axes are needed and min-height alone is not enough: measured on the live
     top bar, `.dropdown-toggle.btn-topbar` went 16x16 -> 16x44 with min-height only —
     tall enough, still 16px wide, still a miss. Icon-only triggers are square, so the
     failing axis is whichever one you forget.

     Both are no-ops when the toggle IS composed with a .btn-* (already >=44px from the
     round-2 ladder) or carries a text label (wider than 44px by construction), which is
     why this is safe to apply unconditionally rather than trying to detect the bare
     case in CSS. */
}   /* tq-9386 (A232): THE dropdown, imported in place (the app copy is gone) */
/* ============================================================================
 * MODAL / DIALOG — the ONE modal stylesheet (Reinly.Design; the app imports it in place)
 * ----------------------------------------------------------------------------
 * tq-9360 (A207, isabella 900073985): the app's twin (reinly.webapp components/overlays/modal.css) was the LIVE copy;
 * it is converged here and deleted. The shared rules carry the app's shipped values (z above the mobile chrome, the
 * 12px panel + iOS motion, header padding, the floating footer without a safe-area pad, Y-only body scroll). The rest
 * is the DS's additive contract (variants, window states, confirm, loading, invalid) that app markup doesn't use.
 * Compiles under BOTH Tailwind 4 (this project) and Tailwind 3.4 (the app): only utilities both versions know, plain
 * declarations otherwise (no z-70, no *-dvh helpers).
 *
 *   Stack   .modal → .modal-overlay → .modal-dialog → .modal-content → .modal-container
 *   Widths  modal-w-xs|sm|md|lg|xl|2xl|3xl  (+ modal-w-fixed-*)   · heights modal-h-*
 *   Kinds   create/edit-form · detail · confirm(+--warning/--info) · fullscreen ·
 *           scrollable-body (.modal-body) · sticky-footer (.modal-footer)
 *   States  open (.show — focus-trap) · closing (.hiding) · loading (.is-loading
 *           busy-overlay) · form-invalid (.is-invalid) · window states
 *           (--draggable/--minimized/--maximized/--pinned/--floating/--no-overlay)
 *   Stacked one level max; single-scrim + z-escalation via the vanilla driver
 *           (Scripts/components/modal.js).
 *
 * Monochrome: the footer's primary action is `.btn-primary` (black); every focus
 * ring on modal chrome uses `--focus-ring`.
 * ========================================================================== */

/* === Modal Container — above mobile chrome (z-220-230) === */
.modal {
  position: fixed;
  inset: 0px;
  z-index: var(--z-modal);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 100dvh;
  width: 100dvw;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  padding: 1rem;
  /* the padding / max-size calc()s below read these (they mirror the p-4 outer gap; tq-8386 found them undefined in
     the app's former copy, which dropped the padding and the content max sizes) */
  --modal-pad-x: 1rem;
  --modal-pad-y: 1rem;
  /* Safe-area breathing room so content isn’t covered by system UI */
  padding-bottom: calc( var(--modal-pad-y) + max(env(safe-area-inset-bottom, 0px), var(--viewport-ui-bottom, 0px)) );
  padding-top: calc(var(--modal-pad-y) + env(safe-area-inset-top, 0px));
  opacity: 0;
  pointer-events: none;
  visibility: hidden;
  -webkit-transition: opacity 200ms ease, visibility 0s linear 200ms;
  transition: opacity 200ms ease, visibility 0s linear 200ms; /* hide after fade-out completes */
}

  /* === Modal Visibility === */
  .modal.show {
    opacity: 1;
    pointer-events: auto;
    visibility: visible;
    -webkit-transition: opacity 200ms ease, visibility 0s;
    transition: opacity 200ms ease, visibility 0s; /* visible immediately on open */
  }

  /* Optional exit helper */
  .modal.hiding {
    opacity: 0;
    pointer-events: none;
    visibility: hidden;
    -webkit-transition: opacity 150ms ease, visibility 0s linear 150ms;
    transition: opacity 150ms ease, visibility 0s linear 150ms;
  }

/* === Modal Overlay (z-80 inside the .modal stacking context) === */
.modal-overlay {
  position: fixed;
  inset: 0px;
  background-color: var(--bg-modal-overlay);
  /* tq-8221 / tq-9405 (A245): a PLAIN dim, no backdrop blur (the USER's default for modal scrims). Unprefixed only: Lightning
     CSS drops the unprefixed form when both are present. The app computes none here already. */
  backdrop-filter: none;
  /* z-index is RELATIVE to `.modal`'s stacking context (z-1050).
     Internal ordering only needs to be `overlay < dialog < content`
     so the dim sits behind the dialog, dialog wraps the content,
     content paints on top. Absolute values stayed in the 80-100
     range across the bump because they don't escape the modal's
     stacking context. */
  z-index: 80;
  opacity: 0;
  -webkit-transition: opacity 200ms ease;
  transition: opacity 200ms ease;
}

.modal.show .modal-overlay {
  opacity: 1;
}

.modal.hiding .modal-overlay {
  opacity: 0;
}

/* === Single-overlay management (see Scripts/components/modal.js) ===
   Each .modal ships its own .modal-overlay. When modals stack, those overlays
   would compound into a too-dark backdrop. The driver keeps ONE overlay visible
   (the topmost open modal's) and suppresses the rest, so the scrim never doubles. */
.modal--overlay-suppressed .modal-overlay {
  opacity: 0 !important;
}

/* ==========================================================================
 * OVERLAY TREATMENTS — dial the scrim per instance without touching a token,
 * on modifier classes added to `.modal-overlay`:
 *   • DIM  — how dark the tint reads. Drives --modal-scrim-bg via the
 *            --alpha-neutral-950-* alpha scale. Default: the --bg-modal-overlay tint.
 *   • BLUR — RETIRED (tq-8221): modal scrims never blur the page behind them.
 * e.g. `.modal-overlay--dim-soft`.
 * ========================================================================== */

/* — Backdrop-blur intensity: RETIRED (tq-8221; port of Enodia 17dbfe52f9). They set NOTHING, so no variant class can
     re-enable a modal-scrim blur. The selectors stay as inert no-ops so existing markup keeps validating. — */
.modal-overlay--blur-lg,
.modal-overlay--blur-md,
.modal-overlay--blur-sm,
.modal-overlay--blur-xs { /* retired: no modal-scrim blur */ }

/* No backdrop blur — a plain dim scrim. Cheaper to paint and the right default
   for full-screen / content-heavy dialogs where the frost adds cost, not clarity. */
.modal-overlay--no-blur {
  --modal-scrim-blur: 0px;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}

/* — Dim (tint) strength — */
.modal-overlay--dim-strong { --modal-scrim-bg: var(--alpha-neutral-950-50); }
.modal-overlay--dim-soft   { --modal-scrim-bg: var(--alpha-neutral-950-10); }

/* Clear scrim — no blur + the faintest tint. For low-stakes dialogs where the
   page context should stay legible (e.g. a quick inline picker). */
.modal-overlay--clear {
  --modal-scrim-blur: 0px;
  --modal-scrim-bg: var(--alpha-neutral-950-5);
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}

/* Solid takeover — a near-opaque cover that hides the page entirely. Pairs with
   `.modal-fullscreen` for immersive editors / media viewers / lightboxes. */
.modal-overlay--solid {
  --modal-scrim-blur: 0px;
  --modal-scrim-bg: var(--alpha-neutral-950-90);
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}

/* === Dialog wrapper (z-90, above overlay at z-80, inside .modal stacking context) === */
.modal-dialog,
.modal-dialog-panel {
  display: block;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 100%;
  width: 100%;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -ms-flex-pack: distribute;
  justify-content: space-around;
  text-align: center;
}
@media (min-width: 640px) {
  .modal-dialog,
.modal-dialog-panel {
    border-radius: 0px;
    padding: 0px;
  }
}
.modal-dialog,
.modal-dialog-panel {
  z-index: 90;
}

/* Disable old spacer that fights centering */
.modal-block {
  display: none !important;
}

/* === Modal Content (z-100, inside .modal-dialog stacking context) === */
.modal-content {
  position: relative;
  width: 100%;
  overflow: hidden;
  border-radius: 0.75rem;
  border-width: 1px;
  text-align: left;
  --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  --tw-backdrop-blur: blur(8px);
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
@media (min-width: 640px) {
  .modal-content {
    width: auto;
    vertical-align: middle;
    --tw-shadow: 0 0 #0000;
    --tw-shadow-colored: 0 0 #0000;
    -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
    box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  }
}
.modal-content {
  background-color: var(--bg-modal);
  color: var(--text-modal);
  border-color: var(--border-modal);
  backdrop-filter: var(--modal-backdrop-blur, none);
  z-index: 100;
  /* Stronger internal borders — modal bg is often close to default border color */
  --border-divider: var(--border-modal-divider, var(--border-secondary));
  --border-split: var(--border-modal-divider, var(--border-secondary));
  --border-shell-toolbar: var(--border-modal-divider, var(--border-secondary));
  --border-shell-footer: var(--border-modal-divider, var(--border-secondary));
  --border-panel: var(--border-modal-divider, var(--border-secondary));
  /* Animation base (hidden state).
     Modals enter by scaling UP from a smaller size with the iOS
     UIKit easing curve, and exit by scaling back DOWN. The
     starting scale is intentionally further from 1 than a
     typical fade so the entry/exit reads as a clear motion
     event, not a gentle fade. Transform-origin: center so the
     scale anchors at the modal's centre. */
  opacity: 0;
  -webkit-transform: scale(0.88);
  -ms-transform: scale(0.88);
  transform: scale(0.88);
  -webkit-transform-origin: center;
  -ms-transform-origin: center;
  transform-origin: center;
  -webkit-transition:
    opacity   260ms cubic-bezier(0.32, 0.72, 0, 1),
    -webkit-transform 320ms cubic-bezier(0.32, 0.72, 0, 1);
  transition:
    opacity   260ms cubic-bezier(0.32, 0.72, 0, 1),
    -webkit-transform 320ms cubic-bezier(0.32, 0.72, 0, 1);
  transition:
    opacity   260ms cubic-bezier(0.32, 0.72, 0, 1),
    transform 320ms cubic-bezier(0.32, 0.72, 0, 1);
  transition:
    opacity   260ms cubic-bezier(0.32, 0.72, 0, 1),
    transform 320ms cubic-bezier(0.32, 0.72, 0, 1),
    -webkit-transform 320ms cubic-bezier(0.32, 0.72, 0, 1);
  will-change: transform, opacity;
  /* keep centered; large dialogs scroll inside
     NOTE: use 100dvh/100dvw and subtract the actual outer padding + safe areas */
  max-height: calc( 100dvh - (var(--modal-pad-y) * 2) - env(safe-area-inset-top, 0px) - max(env(safe-area-inset-bottom, 0px), var(--viewport-ui-bottom, 0px)) );
  max-width: calc(100dvw - (var(--modal-pad-x) * 2));
}

.modal.show .modal-content {
  opacity: 1;
  -webkit-transform: scale(1);
  -ms-transform: scale(1);
  transform: scale(1);
}

.modal.hiding .modal-content {
  opacity: 0;
  -webkit-transform: scale(0.88);
  -ms-transform: scale(0.88);
  transform: scale(0.88);
  -webkit-transition:
    opacity   220ms cubic-bezier(0.32, 0.72, 0, 1),
    -webkit-transform 260ms cubic-bezier(0.32, 0.72, 0, 1);
  transition:
    opacity   220ms cubic-bezier(0.32, 0.72, 0, 1),
    -webkit-transform 260ms cubic-bezier(0.32, 0.72, 0, 1);
  transition:
    opacity   220ms cubic-bezier(0.32, 0.72, 0, 1),
    transform 260ms cubic-bezier(0.32, 0.72, 0, 1);
  transition:
    opacity   220ms cubic-bezier(0.32, 0.72, 0, 1),
    transform 260ms cubic-bezier(0.32, 0.72, 0, 1),
    -webkit-transform 260ms cubic-bezier(0.32, 0.72, 0, 1);
}

/* === Grain overlay stays intact === */
.modal-content::after {
  content: "";
  position: absolute;
  inset: 0;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'><filter id='noiseFilter'><feTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/></filter><rect width='100%' height='100%' filter='url(%23noiseFilter)' opacity='1'/></svg>");
  background-repeat: repeat;
  mix-blend-mode: overlay;
  opacity: var(--modal-grain-opacity, 0);
  pointer-events: none;
  z-index: 0;
  border-radius: inherit;
}

.modal-content > * {
  position: relative;
  z-index: 1;
}

/* === Fullscreen Variant (use dvh/dvw) === */
.modal-fullscreen {
  position: fixed;
  inset: 0px;
  height: 100dvh;
  max-height: 100dvh;
  width: 100dvw;
  max-width: 100dvw;
  border-radius: 0px;
}

/* === Modal Header/Footer/Body === */
/* Tip: sticky footer ensures it never hides under keyboard/chrome */
.modal-header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  padding: 1rem;
  padding-bottom: 0.5rem;
}

  /* Header title — small + tight, aligned with .tray-title for visual parity. */
  /* Header title. tq-9360 (A207, isabella M5): the app's 13 live titles keep their shipped type (typography.css
     .modal-title text-base and each view's own classes), so this rule sets ONLY what doesn't change them. */
  .modal-title {
    color: var(--text-modal-heading, var(--text-primary));
  }

  /* Optional subtitle / caption under the title (or beside it on a single line). */
  .modal-subtitle {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 0.75rem;
  line-height: 1rem;
  line-height: 1.375;
    color: var(--text-modal-muted, var(--text-tertiary));
}

  /* Title stack — wrap title + subtitle when both are used */
  .modal-title-group {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  min-width: 0px;
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0%;
  flex: 1 1 0%;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
    gap: 1px;
}

  /* Optional leading icon slot — rounded-tile, similar to card/form-section */
  .modal-header__icon {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 0.375rem;
    width: 28px;
    height: 28px;
    font-size: 13px;
    color: var(--text-secondary);
    background-color: color-mix(in oklch, var(--text-primary) 6%, transparent);
}

  /* Right-side action cluster (pin / minimize / maximize / close) */
  .modal-actions {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.125rem;
}


/* === Header action buttons — aligned with .tray-close / .tray-nav primitives.
   Same 28px round footprint, same hover treatment, theme-aware via color-mix. */
.modal-close,
.modal-action {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 9999px;
  border-width: 1px;
  border-color: transparent;
  width: 28px;
  height: 28px;
  font-size: 12px;
  color: var(--icon-modal-close, var(--text-tertiary));
  background: transparent;
  padding: 0;
  cursor: pointer;
  -webkit-transition: background-color 120ms ease, color 120ms ease;
  transition: background-color 120ms ease, color 120ms ease;
}

  .modal-close:hover,
  .modal-action:hover {
    background-color: var(--bg-modal-close-hover, color-mix(in oklch, var(--text-primary) 8%, transparent));
    color: var(--text-primary);
  }

  /* Monochrome focus — the brand focus ring (--border-focus: black / near-white). */
  .modal-close:focus-visible,
  .modal-action:focus-visible {
    outline: 2px solid var(--focus-ring);
    outline-offset: 1px;
    color: var(--text-primary);
  }

  .modal-close:disabled,
  .modal-action:disabled {
  pointer-events: none;
  opacity: 0.3;
}

  /* Danger variant (e.g. close icon on destructive modals) */
  .modal-close--danger:hover {
    background-color: color-mix(in oklch, var(--text-danger) 12%, transparent);
    color: var(--text-danger);
  }


/* === Pin button — same dimensions, with rotate-on-pin behavior matching tray. */
.modal-pin {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 9999px;
  border-width: 1px;
  border-color: transparent;
  width: 28px;
  height: 28px;
  font-size: 12px;
  color: var(--icon-modal-pin, var(--text-tertiary));
  background: transparent;
  padding: 0;
  cursor: pointer;
  -webkit-transition: background-color 120ms ease, color 120ms ease;
  transition: background-color 120ms ease, color 120ms ease;
}

  .modal-pin:hover {
    background-color: color-mix(in oklch, var(--text-primary) 8%, transparent);
    color: var(--text-primary);
  }

  .modal-pin:focus-visible {
    outline: 2px solid var(--focus-ring);
    outline-offset: 1px;
  }

  /* Unpinned (default) — icon rotated 45° "loose pin" */
  .modal-pin i,
  .modal-pin svg {
    -webkit-transition: color 150ms ease, -webkit-transform 200ms ease;
    transition: color 150ms ease, -webkit-transform 200ms ease;
    transition: transform 200ms ease, color 150ms ease;
    transition: transform 200ms ease, color 150ms ease, -webkit-transform 200ms ease;
    -webkit-transform: rotate(45deg);
    -ms-transform: rotate(45deg);
    transform: rotate(45deg);
  }

  /* Pinned — icon upright, accent color + bg */
  .modal-pin.is-pinned i,
  .modal-pin.is-pinned svg {
    -webkit-transform: rotate(0deg);
    -ms-transform: rotate(0deg);
    transform: rotate(0deg);
  }

  .modal-pin.is-pinned {
    color: var(--text-info);
    background-color: color-mix(in oklch, var(--text-info) 12%, transparent);
  }

  @media (prefers-reduced-motion: reduce) {
    .modal-pin i, .modal-pin svg { -webkit-transition: none; transition: none; }
  }


/* === Minimize / Maximize affordances — visual primitives that drive
       the .modal--minimized and .modal--maximized states (JS toggles them). */
.modal-minimize i,
.modal-minimize svg,
.modal-maximize i,
.modal-maximize svg {
  font-size: 10px;
}


/* === Secondary toolbar row inside the header (filters, view-switchers, etc.).
   Sits below the title row, separated by a hairline. */
.modal-toolbar {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;
  padding-left: 1rem;
  padding-right: 1rem;
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
  border-bottom: 1px solid var(--border-modal-divider, var(--border-secondary));
  background-color: var(--bg-modal-toolbar, var(--bg-modal));
}


/* ==========================================================================
 * DRAGGABLE MODAL — opt-in via .modal--draggable on .modal-content
 *
 * The .modal-header acts as the drag handle by default. Add .modal-no-drag
 * on a child to opt out a specific zone (e.g. an inline input in the header).
 *
 * JS contract: pointerdown on the header reads modal-content's bounding rect
 * and applies translate3d on the content. CSS marks the container during drag.
 * ========================================================================== */
.modal-content.modal--draggable .modal-header {
  cursor: -webkit-grab;
  cursor: grab;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

  .modal-content.modal--draggable .modal-header:active {
    cursor: -webkit-grabbing;
    cursor: grabbing;
  }

  /* Show a subtle grip dots cluster at the left edge of the header */
  .modal-content.modal--draggable .modal-header::before {
    content: "";
    display: inline-block;
    width: 8px;
    height: 16px;
    -ms-flex-negative: 0;
    flex-shrink: 0;
    background-image: radial-gradient(circle at center, currentColor 1.1px, transparent 1.3px);
    background-size: 4px 4px;
    background-position: 0 1px;
    background-repeat: round;
    color: var(--text-tertiary);
    opacity: 0.4;
    margin-right: 4px;
    -webkit-transition: opacity 120ms ease;
    transition: opacity 120ms ease;
  }

  .modal-content.modal--draggable .modal-header:hover::before {
    opacity: 1;
    color: var(--text-secondary);
  }

  /* Disable text selection within draggable header */
  .modal-content.modal--draggable .modal-header :is(.modal-title, .modal-subtitle, .modal-header__icon) {
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    pointer-events: none;
  }

  /* Re-enable pointer events on action buttons so they stay clickable */
  .modal-content.modal--draggable .modal-header :is(.modal-actions, .modal-actions *) {
    pointer-events: auto;
  }

  /* Opt-out zone for draggable headers (e.g. an inline input) */
  .modal-no-drag {
    -webkit-user-select: text;
    -moz-user-select: text;
    -ms-user-select: text;
    user-select: text;
    pointer-events: auto;
  }

  /* While dragging — disable any transitions so the modal follows the pointer */
  .modal--dragging .modal-content {
    -webkit-transition: none !important;
    transition: none !important;
    cursor: -webkit-grabbing;
    cursor: grabbing;
  }


/* ==========================================================================
 * MINIMIZED — collapsed to title bar, anchored to a corner.
 *   Anchor default: bottom-right. Use .modal--minimized.modal--anchor-bl/-br/-tl/-tr.
 * ========================================================================== */
.modal-content.modal--minimized {
  position: fixed;
  bottom: 16px;
  right: 16px;
  top: auto;
  left: auto;
  width: min(360px, calc(100dvw - 32px));
  height: auto;
  max-height: none;
  border-radius: 12px;
  -webkit-box-shadow:
    0 12px 32px -8px color-mix(in oklch, var(--text-primary) 24%, transparent),
    0 4px 12px -4px color-mix(in oklch, var(--text-primary) 12%, transparent);
  box-shadow:
    0 12px 32px -8px color-mix(in oklch, var(--text-primary) 24%, transparent),
    0 4px 12px -4px color-mix(in oklch, var(--text-primary) 12%, transparent);
  -webkit-transform: none !important;
  -ms-transform: none !important;
  transform: none !important;
}

  /* Hide everything except the header when minimized */
  .modal-content.modal--minimized > :not(.modal-header):not(.modal-actions) {
    display: none !important;
  }

  /* The header itself is the only visible chrome — drop the bottom border */
  .modal-content.modal--minimized .modal-header {
    border-bottom: 0;
    border-radius: 12px;
  }

  /* Anchor variants */
  .modal-content.modal--minimized.modal--anchor-bl { right: auto; left: 16px; }
  .modal-content.modal--minimized.modal--anchor-tr { bottom: auto; top: 16px; }
  .modal-content.modal--minimized.modal--anchor-tl { bottom: auto; top: 16px; right: auto; left: 16px; }

  /* When the parent .modal has a minimized content, the overlay disappears
     (a minimized modal is non-blocking by definition). */
  .modal:has(.modal-content.modal--minimized) .modal-overlay {
    opacity: 0 !important;
    pointer-events: none !important;
  }

  .modal:has(.modal-content.modal--minimized) {
    pointer-events: none;
  }

  .modal:has(.modal-content.modal--minimized) .modal-content {
    pointer-events: auto;
  }


/* ==========================================================================
 * MAXIMIZED — fullscreen overlay (re-uses the existing fullscreen rules
 * but driven via the same modifier family as minimize/pin for consistency).
 * ========================================================================== */
.modal-content.modal--maximized {
  position: fixed;
  inset: 0;
  width: 100dvw !important;
  height: 100dvh !important;
  max-width: 100dvw;
  max-height: 100dvh;
  border-radius: 0;
  -webkit-transform: none !important;
  -ms-transform: none !important;
  transform: none !important;
}


/* ==========================================================================
 * PINNED — modal stays visible but overlay becomes click-through, so users
 * can interact with the page beneath. Mirrors .tray.tray-pinned behavior.
 * ========================================================================== */
.modal:has(.modal-pin.is-pinned) .modal-overlay,
.modal.modal--pinned .modal-overlay {
  opacity: 0 !important;
  pointer-events: none !important;
}

.modal:has(.modal-pin.is-pinned),
.modal.modal--pinned {
  pointer-events: none;
}

.modal:has(.modal-pin.is-pinned) .modal-content,
.modal.modal--pinned .modal-content {
  pointer-events: auto;
}


/* ==========================================================================
 * FLOATING WINDOW — no overlay, draggable, has shadow + rounded corners,
 * meant for non-blocking dialogs (e.g. inline editors, mini-players).
 * Opt-in via .modal-content.modal--floating on a .modal that has no
 * .modal-overlay (or set .modal--no-overlay on the .modal).
 * ========================================================================== */
.modal--no-overlay .modal-overlay {
  display: none;
}

.modal--no-overlay {
  pointer-events: none;
}

  .modal--no-overlay .modal-content {
    pointer-events: auto;
    -webkit-box-shadow:
      0 12px 32px -8px color-mix(in oklch, var(--text-primary) 24%, transparent),
      0 4px 12px -4px color-mix(in oklch, var(--text-primary) 12%, transparent);
    box-shadow:
      0 12px 32px -8px color-mix(in oklch, var(--text-primary) 24%, transparent),
      0 4px 12px -4px color-mix(in oklch, var(--text-primary) 12%, transparent);
  }

.modal-content.modal--floating {
  border-radius: 12px;
  -webkit-box-shadow:
    0 16px 40px -10px color-mix(in oklch, var(--text-primary) 26%, transparent),
    0 6px 16px -6px color-mix(in oklch, var(--text-primary) 14%, transparent);
  box-shadow:
    0 16px 40px -10px color-mix(in oklch, var(--text-primary) 26%, transparent),
    0 6px 16px -6px color-mix(in oklch, var(--text-primary) 14%, transparent);
}

/* === Footer — sticky action bar. The primary action inside is `.btn-primary` (monochrome black). === */
.modal-footer {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
  gap: 0.5rem;
  padding: 1rem;
  position: sticky;
  bottom: 0;
  z-index: 1;
  background: var(--bg-modal);
}

/* Safe-area + virtual-keyboard inset ONLY applies when the modal is
   actually flush to the viewport edge (fullscreen mode). For floating
   dialogs the footer sits well above the home indicator, so adding
   `env(safe-area-inset-bottom)` produced a phantom 20–34px gap below
   the buttons on iPad / iOS — visible as "extra padding" the user
   reported. */
.modal-fullscreen .modal-footer {
  padding-bottom: calc( 1rem
    + max(env(safe-area-inset-bottom, 0px), var(--viewport-ui-bottom, 0px)) );
}

.modal-body {
  /* overflow-x: hidden is explicit — without it the browser computes
     overflow-x: auto (mixing `visible` + `auto` is invalid per spec),
     letting any child wider than the modal trigger horizontal scroll
     inside the body. Modal content scrolls Y-only; any descendant
     that legitimately needs horizontal scrolling carries its own
     overflow-x: auto container. */
  -webkit-box-flex: 1;
  -ms-flex-positive: 1;
  flex-grow: 1;
  overflow-y: auto;
  overflow-x: hidden;
}

.scrollbar.modal-body {
  overflow-x: hidden;
}

.scrollbar-thin.modal-body {
  overflow-x: hidden;
}

.modal-body {
  scrollbar-width: thin;
  scrollbar-color: var(--scroll-thumb) var(--scroll-track);
  min-height: 0; /* allow middle track to shrink */
}

/* === Modal Inner Container === */
.modal-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 100%;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
}

/* === Responsive sizes (use dvh/dvw) === */
.modal-h-xs {
  height: 100dvh;
}
@media (min-width: 640px) {
  .modal-h-xs {
    height: 95dvh;
  }
}
@media (min-width: 768px) {
  .modal-h-xs {
    height: 75dvh;
  }
}
@media (min-width: 1024px) {
  .modal-h-xs {
    height: 50dvh;
  }
}
@media (min-width: 1280px) {
  .modal-h-xs {
    height: 25dvh;
  }
}
@media (min-width: 1536px) {
  .modal-h-xs {
    height: 20dvh;
  }
}

.modal-h-sm {
  height: 100dvh;
}

@media (min-width: 640px) {
  .modal-h-sm {
    height: 95dvh;
  }
}

@media (min-width: 768px) {
  .modal-h-sm {
    height: 80dvh;
  }
}

@media (min-width: 1024px) {
  .modal-h-sm {
    height: 60dvh;
  }
}

@media (min-width: 1280px) {
  .modal-h-sm {
    height: 35dvh;
  }
}

@media (min-width: 1536px) {
  .modal-h-sm {
    height: 30dvh;
  }
}

.modal-h-md {
  height: 100dvh;
}

@media (min-width: 640px) {
  .modal-h-md {
    height: 95dvh;
  }
}

@media (min-width: 768px) {
  .modal-h-md {
    height: 85dvh;
  }
}

@media (min-width: 1024px) {
  .modal-h-md {
    height: 70dvh;
  }
}

@media (min-width: 1280px) {
  .modal-h-md {
    height: 50dvh;
  }
}

@media (min-width: 1536px) {
  .modal-h-md {
    height: 40dvh;
  }
}

.modal-h-lg {
  height: 100dvh;
}

@media (min-width: 640px) {
  .modal-h-lg {
    height: 95dvh;
  }
}

@media (min-width: 768px) {
  .modal-h-lg {
    height: 90dvh;
  }
}

@media (min-width: 1024px) {
  .modal-h-lg {
    height: 80dvh;
  }
}

@media (min-width: 1280px) {
  .modal-h-lg {
    height: 65dvh;
  }
}

@media (min-width: 1536px) {
  .modal-h-lg {
    height: 55dvh;
  }
}

.modal-h-xl {
  height: 100dvh;
}

@media (min-width: 640px) {
  .modal-h-xl {
    height: 100dvh;
  }
}

@media (min-width: 768px) {
  .modal-h-xl {
    height: 95dvh;
  }
}

@media (min-width: 1024px) {
  .modal-h-xl {
    height: 85dvh;
  }
}

@media (min-width: 1280px) {
  .modal-h-xl {
    height: 75dvh;
  }
}

@media (min-width: 1536px) {
  .modal-h-xl {
    height: 70dvh;
  }
}

.modal-h-2xl {
  height: 100dvh;
}

@media (min-width: 640px) {
  .modal-h-2xl {
    height: 100dvh;
  }
}

@media (min-width: 768px) {
  .modal-h-2xl {
    height: 100dvh;
  }
}

@media (min-width: 1024px) {
  .modal-h-2xl {
    height: 90dvh;
  }
}

@media (min-width: 1280px) {
  .modal-h-2xl {
    height: 85dvh;
  }
}

@media (min-width: 1536px) {
  .modal-h-2xl {
    height: 80dvh;
  }
}

.modal-h-3xl {
  height: 100dvh;
}

@media (min-width: 640px) {
  .modal-h-3xl {
    height: 100dvh;
  }
}

@media (min-width: 768px) {
  .modal-h-3xl {
    height: 100dvh;
  }
}

@media (min-width: 1024px) {
  .modal-h-3xl {
    height: 95dvh;
  }
}

@media (min-width: 1280px) {
  .modal-h-3xl {
    height: 95dvh;
  }
}

@media (min-width: 1536px) {
  .modal-h-3xl {
    height: 90dvh;
  }
}

/* the photo tour (Reinly horses/detail.js) */
.modal-h-4xl {
  height: 100dvh;
}
@media (min-width: 640px) {
  .modal-h-4xl {
    height: 100dvh;
  }
}
@media (min-width: 768px) {
  .modal-h-4xl {
    height: 100dvh;
  }
}
@media (min-width: 1024px) {
  .modal-h-4xl {
    height: 97dvh;
  }
}
@media (min-width: 1280px) {
  .modal-h-4xl {
    height: 97dvh;
  }
}
@media (min-width: 1536px) {
  .modal-h-4xl {
    height: 97dvh;
  }
}

.modal-w-xs {
  width: 100dvw;
}

@media (min-width: 640px) {
  .modal-w-xs {
    width: 95dvw;
  }
}

@media (min-width: 768px) {
  .modal-w-xs {
    width: 70dvw;
  }
}

@media (min-width: 1024px) {
  .modal-w-xs {
    width: 45dvw;
  }
}

@media (min-width: 1280px) {
  .modal-w-xs {
    width: 30dvw;
  }
}

@media (min-width: 1536px) {
  .modal-w-xs {
    width: 25dvw;
  }
}

.modal-w-sm {
  width: 100dvw;
}

@media (min-width: 640px) {
  .modal-w-sm {
    width: 95dvw;
  }
}

@media (min-width: 768px) {
  .modal-w-sm {
    width: 75dvw;
  }
}

@media (min-width: 1024px) {
  .modal-w-sm {
    width: 60dvw;
  }
}

@media (min-width: 1280px) {
  .modal-w-sm {
    width: 45dvw;
  }
}

@media (min-width: 1536px) {
  .modal-w-sm {
    width: 35dvw;
  }
}

.modal-w-md {
  width: 100dvw;
}

@media (min-width: 640px) {
  .modal-w-md {
    width: 95dvw;
  }
}

@media (min-width: 768px) {
  .modal-w-md {
    width: 80dvw;
  }
}

@media (min-width: 1024px) {
  .modal-w-md {
    width: 70dvw;
  }
}

@media (min-width: 1280px) {
  .modal-w-md {
    width: 60dvw;
  }
}

@media (min-width: 1536px) {
  .modal-w-md {
    width: 50dvw;
  }
}

.modal-w-lg {
  width: 100dvw;
}

@media (min-width: 640px) {
  .modal-w-lg {
    width: 100dvw;
  }
}

@media (min-width: 768px) {
  .modal-w-lg {
    width: 90dvw;
  }
}

@media (min-width: 1024px) {
  .modal-w-lg {
    width: 80dvw;
  }
}

@media (min-width: 1280px) {
  .modal-w-lg {
    width: 70dvw;
  }
}

@media (min-width: 1536px) {
  .modal-w-lg {
    width: 65dvw;
  }
}

.modal-w-xl {
  width: 100dvw;
}

@media (min-width: 640px) {
  .modal-w-xl {
    width: 100dvw;
  }
}

@media (min-width: 768px) {
  .modal-w-xl {
    width: 95dvw;
  }
}

@media (min-width: 1024px) {
  .modal-w-xl {
    width: 90dvw;
  }
}

@media (min-width: 1280px) {
  .modal-w-xl {
    width: 80dvw;
  }
}

@media (min-width: 1536px) {
  .modal-w-xl {
    width: 75dvw;
  }
}

.modal-w-2xl {
  width: 100dvw;
}

@media (min-width: 640px) {
  .modal-w-2xl {
    width: 100dvw;
  }
}

@media (min-width: 768px) {
  .modal-w-2xl {
    width: 100dvw;
  }
}

@media (min-width: 1024px) {
  .modal-w-2xl {
    width: 95dvw;
  }
}

@media (min-width: 1280px) {
  .modal-w-2xl {
    width: 90dvw;
  }
}

@media (min-width: 1536px) {
  .modal-w-2xl {
    width: 85dvw;
  }
}

.modal-w-3xl {
  width: 100dvw;
}

@media (min-width: 640px) {
  .modal-w-3xl {
    width: 100dvw;
  }
}

@media (min-width: 768px) {
  .modal-w-3xl {
    width: 100dvw;
  }
}

@media (min-width: 1024px) {
  .modal-w-3xl {
    width: 100dvw;
  }
}

@media (min-width: 1280px) {
  .modal-w-3xl {
    width: 95dvw;
  }
}

@media (min-width: 1536px) {
  .modal-w-3xl {
    width: 90dvw;
  }
}

/* === Fixed px sizes (height respect dvh cap) === */
@media (min-width: 640px) {
  .modal-h-fixed-xs {
    height: 240px;
  }
}
@media (min-width: 768px) {
  .modal-h-fixed-xs {
    height: 200px;
  }
}
@media (min-width: 1024px) {
  .modal-h-fixed-xs {
    height: 180px;
  }
}
@media (min-width: 1280px) {
  .modal-h-fixed-xs {
    height: 160px;
  }
}
@media (min-width: 1536px) {
  .modal-h-fixed-xs {
    height: 140px;
  }
}
.modal-h-fixed-xs {
  max-height: 100dvh;
}

@media (min-width: 640px) {
  .modal-h-fixed-sm {
    height: 320px;
  }
}

@media (min-width: 768px) {
  .modal-h-fixed-sm {
    height: 280px;
  }
}

@media (min-width: 1024px) {
  .modal-h-fixed-sm {
    height: 240px;
  }
}

@media (min-width: 1280px) {
  .modal-h-fixed-sm {
    height: 200px;
  }
}

@media (min-width: 1536px) {
  .modal-h-fixed-sm {
    height: 180px;
  }
}

.modal-h-fixed-sm {
  max-height: 100dvh;
}

@media (min-width: 640px) {
  .modal-h-fixed-md {
    height: 480px;
  }
}

@media (min-width: 768px) {
  .modal-h-fixed-md {
    height: 420px;
  }
}

@media (min-width: 1024px) {
  .modal-h-fixed-md {
    height: 360px;
  }
}

@media (min-width: 1280px) {
  .modal-h-fixed-md {
    height: 300px;
  }
}

@media (min-width: 1536px) {
  .modal-h-fixed-md {
    height: 260px;
  }
}

.modal-h-fixed-md {
  max-height: 100dvh;
}

@media (min-width: 640px) {
  .modal-h-fixed-lg {
    height: 640px;
  }
}

@media (min-width: 768px) {
  .modal-h-fixed-lg {
    height: 560px;
  }
}

@media (min-width: 1024px) {
  .modal-h-fixed-lg {
    height: 480px;
  }
}

@media (min-width: 1280px) {
  .modal-h-fixed-lg {
    height: 400px;
  }
}

@media (min-width: 1536px) {
  .modal-h-fixed-lg {
    height: 340px;
  }
}

.modal-h-fixed-lg {
  max-height: 100dvh;
}

@media (min-width: 640px) {
  .modal-h-fixed-xl {
    height: 800px;
  }
}

@media (min-width: 768px) {
  .modal-h-fixed-xl {
    height: 720px;
  }
}

@media (min-width: 1024px) {
  .modal-h-fixed-xl {
    height: 640px;
  }
}

@media (min-width: 1280px) {
  .modal-h-fixed-xl {
    height: 560px;
  }
}

@media (min-width: 1536px) {
  .modal-h-fixed-xl {
    height: 480px;
  }
}

.modal-h-fixed-xl {
  max-height: 100dvh;
}

@media (min-width: 640px) {
  .modal-h-fixed-2xl {
    height: 920px;
  }
}

@media (min-width: 768px) {
  .modal-h-fixed-2xl {
    height: 840px;
  }
}

@media (min-width: 1024px) {
  .modal-h-fixed-2xl {
    height: 720px;
  }
}

@media (min-width: 1280px) {
  .modal-h-fixed-2xl {
    height: 640px;
  }
}

@media (min-width: 1536px) {
  .modal-h-fixed-2xl {
    height: 560px;
  }
}

.modal-h-fixed-2xl {
  max-height: 100dvh;
}

@media (min-width: 640px) {
  .modal-h-fixed-3xl {
    height: 1000px;
  }
}

@media (min-width: 768px) {
  .modal-h-fixed-3xl {
    height: 960px;
  }
}

@media (min-width: 1024px) {
  .modal-h-fixed-3xl {
    height: 840px;
  }
}

@media (min-width: 1280px) {
  .modal-h-fixed-3xl {
    height: 720px;
  }
}

@media (min-width: 1536px) {
  .modal-h-fixed-3xl {
    height: 640px;
  }
}

.modal-h-fixed-3xl {
  max-height: 100dvh;
}

.modal-w-fixed-xs {
  width: 100dvw;
}

@media (min-width: 640px) {
  .modal-w-fixed-xs {
    width: 320px;
  }
}

@media (min-width: 768px) {
  .modal-w-fixed-xs {
    width: 280px;
  }
}

@media (min-width: 1024px) {
  .modal-w-fixed-xs {
    width: 240px;
  }
}

@media (min-width: 1280px) {
  .modal-w-fixed-xs {
    width: 200px;
  }
}

@media (min-width: 1536px) {
  .modal-w-fixed-xs {
    width: 180px;
  }
}

.modal-w-fixed-sm {
  width: 100dvw;
}

@media (min-width: 640px) {
  .modal-w-fixed-sm {
    width: 480px;
  }
}

@media (min-width: 768px) {
  .modal-w-fixed-sm {
    width: 400px;
  }
}

@media (min-width: 1024px) {
  .modal-w-fixed-sm {
    width: 360px;
  }
}

@media (min-width: 1280px) {
  .modal-w-fixed-sm {
    width: 320px;
  }
}

@media (min-width: 1536px) {
  .modal-w-fixed-sm {
    width: 280px;
  }
}

.modal-w-fixed-md {
  width: 100dvw;
}

@media (min-width: 640px) {
  .modal-w-fixed-md {
    width: 624px;
  }
}

@media (min-width: 768px) {
  .modal-w-fixed-md {
    width: 520px;
  }
}

@media (min-width: 1024px) {
  .modal-w-fixed-md {
    width: 480px;
  }
}

@media (min-width: 1280px) {
  .modal-w-fixed-md {
    width: 400px;
  }
}

@media (min-width: 1536px) {
  .modal-w-fixed-md {
    width: 360px;
  }
}

.modal-w-fixed-lg {
  width: 100dvw;
}

@media (min-width: 640px) {
  .modal-w-fixed-lg {
    width: 768px;
  }
}

@media (min-width: 768px) {
  .modal-w-fixed-lg {
    width: 640px;
  }
}

@media (min-width: 1024px) {
  .modal-w-fixed-lg {
    width: 560px;
  }
}

@media (min-width: 1280px) {
  .modal-w-fixed-lg {
    width: 480px;
  }
}

@media (min-width: 1536px) {
  .modal-w-fixed-lg {
    width: 440px;
  }
}

.modal-w-fixed-xl {
  width: 100dvw;
}

@media (min-width: 640px) {
  .modal-w-fixed-xl {
    width: 1024px;
  }
}

@media (min-width: 768px) {
  .modal-w-fixed-xl {
    width: 800px;
  }
}

@media (min-width: 1024px) {
  .modal-w-fixed-xl {
    width: 720px;
  }
}

@media (min-width: 1280px) {
  .modal-w-fixed-xl {
    width: 640px;
  }
}

@media (min-width: 1536px) {
  .modal-w-fixed-xl {
    width: 600px;
  }
}

.modal-w-fixed-2xl {
  width: 100dvw;
}

@media (min-width: 640px) {
  .modal-w-fixed-2xl {
    width: 1280px;
  }
}

@media (min-width: 768px) {
  .modal-w-fixed-2xl {
    width: 1024px;
  }
}

@media (min-width: 1024px) {
  .modal-w-fixed-2xl {
    width: 880px;
  }
}

@media (min-width: 1280px) {
  .modal-w-fixed-2xl {
    width: 720px;
  }
}

@media (min-width: 1536px) {
  .modal-w-fixed-2xl {
    width: 680px;
  }
}

.modal-w-fixed-3xl {
  width: 100dvw;
}

@media (min-width: 640px) {
  .modal-w-fixed-3xl {
    width: 1440px;
  }
}

@media (min-width: 768px) {
  .modal-w-fixed-3xl {
    width: 1280px;
  }
}

@media (min-width: 1024px) {
  .modal-w-fixed-3xl {
    width: 1024px;
  }
}

@media (min-width: 1280px) {
  .modal-w-fixed-3xl {
    width: 880px;
  }
}

@media (min-width: 1536px) {
  .modal-w-fixed-3xl {
    width: 800px;
  }
}

.modal-h-full {
  height: 100dvh;
}

.modal-w-full {
  width: 100dvw;
}

  /* === Force fullscreen when flagged (keep z-index: 80/90 here) === */
  .modal-h-full .modal-dialog,
  .modal-w-full .modal-dialog,
  .modal-force-full .modal-dialog {
    position: fixed;
    inset: 0;
    margin: 0;
    z-index: 80;
  }

  .modal-h-full .modal-content,
  .modal-w-full .modal-content,
  .modal-force-full .modal-content,
  .modal-content.modal-h-full,
  .modal-content.modal-w-full,
  .modal-content.modal-force-full {
    position: fixed;
    top: 0;
    left: 0;
    z-index: 90;
    border-radius: 0 !important;
    height: 100dvh;
    max-height: 100dvh;
    width: 100dvw;
    max-width: 100dvw;
  }

/* === Floating dialog (>1024px): a bounded flex chain — tq-9363 (A210) ===
   Above the small-screen breakpoint .modal-content has only a max-height, so .modal-container's h-full resolved against
   no height: the chain was unbounded, .modal-body never scrolled, and in a short window the panel's overflow:hidden
   clipped the footer (the primary action unreachable) for any modal without a .modal-h-* height. The panel is a flex
   column and the container may shrink to it, so the body takes the scroll. A tall window is unchanged: nothing shrinks
   while the content fits. (≤1024px already has a definite height: the fullscreen rules below.) */
@media (min-width: 1025px) {
  .modal-content {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }

  .modal-container {
    -webkit-box-flex: 1;
    -ms-flex: 1 1 auto;
    flex: 1 1 auto;
    min-height: 0;
  }
}

/* === Small screens: fullscreen (keep z-index: 80/90) === */
@media (max-width: 1024px) {
  .modal-dialog {
    position: fixed;
    inset: 0;
    margin: 0;
    z-index: 80;
  }

  .modal-content {
    border-radius: 0 !important;
    height: 100dvh;
    max-height: 100dvh;
    width: 100dvw;
    max-width: 100dvw;
    z-index: 90;
    position: fixed;
    top: 0;
    left: 0;
    /* safe area (tq-9355): B. The full-screen phone modal escapes the overlay root's padding, so it clears every inset itself. */
    padding: calc(0px + env(safe-area-inset-top, 0px)) max(0px, env(safe-area-inset-right, 0px))
             calc(0px + env(safe-area-inset-bottom, 0px)) max(0px, env(safe-area-inset-left, 0px));
  }

  .modal-container {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    height: 100%;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }

  .modal-body {
    -webkit-box-flex: 1;
    -ms-flex-positive: 1;
    flex-grow: 1;
    overflow-y: auto;
    min-height: 0;
  }
}

@media (max-width: 640px) {
  .modal-content {
    border-radius: 0 !important;
  }
}

/* === Fallback for browsers without dvh/dvw support === */
@supports not (height: 100dvh) {
  .modal {
    height: 100vh;
    width: 100vw;
  }

  .modal-content {
    max-height: calc(100vh - (var(--modal-pad-y) * 2));
    max-width: calc(100vw - (var(--modal-pad-x) * 2));
  }

    .modal-fullscreen,
    .modal-h-full .modal-content,
    .modal-w-full .modal-content,
    .modal-content.modal-h-full,
    .modal-content.modal-w-full {
      height: 100vh;
      width: 100vw;
      max-height: 100vh;
      max-width: 100vw;
    }
}

/* === Split pane inside modal body === */
.modal-body:has(> .split-pane),
.modal-body:has(> .page-filtered) {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
}

.modal-body > .split-pane,
.modal-body > .page-filtered {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-height: 0;
}

/* === Confirmation Dialog === */
.modal-content.modal-confirm .modal-body {
  padding-top: 1.5rem;
  padding-bottom: 1.5rem;
  padding-left: 2rem;
  padding-right: 2rem;
  text-align: center;
}

  .modal-content.modal-confirm .modal-body .modal-confirm__icon {
  margin-left: auto;
  margin-right: auto;
  margin-bottom: 0.75rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 3rem;
  width: 3rem;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 9999px;
    background-color: var(--bg-danger-subtle);
    color: var(--text-danger);
}

  .modal-content.modal-confirm .modal-body .modal-confirm__title {
  margin-bottom: 0.25rem;
  font-size: 1rem;
  line-height: 1.5rem;
  font-weight: 600;
}

  .modal-content.modal-confirm .modal-body .modal-confirm__message {
  font-size: 0.8125rem;
  line-height: 1.5rem;
    color: var(--text-secondary);
}

  .modal-content.modal-confirm .modal-footer {
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 0.75rem;
}

/* Intent variants for the featured icon.
   The `.modal-body` in these selectors is LOAD-BEARING — do not "simplify" it away.
   The base rule above is `.modal-content.modal-confirm .modal-body .modal-confirm__icon`
   (0,4,0). Without `.modal-body` here these overrides are only (0,3,0), so the base
   danger red won every time and `--warning` / `--info` silently did nothing. That
   accident is what pushed callers into `style="background-color: var(--bg-warning-subtle)"`
   inline workarounds — the exact style-hack the DS forbids — and pushed one pattern off
   `.modal-confirm` entirely. Matching the base at (0,4,0) and relying on source order
   (these come later) makes the variants win honestly, with no !important. */

/* Warning confirmation variant */
.modal-content.modal-confirm--warning .modal-body .modal-confirm__icon {
  background-color: var(--bg-warning-subtle);
  color: var(--text-warning);
}

/* Info confirmation variant */
.modal-content.modal-confirm--info .modal-body .modal-confirm__icon {
  background-color: var(--bg-info-subtle);
  color: var(--text-info);
}

/* ==========================================================================
 * LOADING (busy-overlay) — the panel is working; block interaction and dim.
 * Toggle .is-loading (alias .modal--loading) on .modal-content and set
 * aria-busy="true". Drop a `.spinner-overlay[data-visible="true"]` (see
 * components/status/busy-overlay.css) inside for the spinner; this veil sits
 * over header + body + footer so the whole dialog reads as busy.
 * ========================================================================== */
.modal-content.is-loading,
.modal-content.modal--loading {
  cursor: progress;
}

  .modal-content.is-loading > :is(.modal-container, .modal-header, .modal-body, .modal-footer),
  .modal-content.modal--loading > :is(.modal-container, .modal-header, .modal-body, .modal-footer) {
    pointer-events: none;
  }

  .modal-content.is-loading::before,
  .modal-content.modal--loading::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 2; /* above content children (z-1), below an inner spinner-overlay */
    background-color: color-mix(in oklch, var(--bg-modal) 55%, transparent);
    backdrop-filter: blur(1px);
    border-radius: inherit;
    pointer-events: auto;
  }

/* ==========================================================================
 * FORM-INVALID — the modal's form failed validation (paired with the DS
 * validation summary). Toggle .is-invalid (alias .modal--form-invalid) on
 * .modal-content for a subtle danger ring around the panel.
 * ========================================================================== */
.modal-content.is-invalid,
.modal-content.modal--form-invalid {
  -webkit-box-shadow:
    var(--modal-shadow, var(--shadow-xl)),
    inset 0 0 0 1px var(--border-danger);
  box-shadow:
    var(--modal-shadow, var(--shadow-xl)),
    inset 0 0 0 1px var(--border-danger);
}

/* === Reduced motion === */
@media (prefers-reduced-motion: reduce) {
  .modal, .modal-overlay, .modal-content {
    -webkit-transition: none !important;
    transition: none !important;
  }
}   /* tq-9360 (A207): THE modal, imported in place (the app copy is gone) */
/* ==========================================================================
   App-only modal rules (tq-9360, A207). The modal component itself is Reinly.Design components/overlays/modal.css,
   imported in place from site.css; this file redeclares nothing the DS owns. One reason per rule.
   ========================================================================== */

/* tq-8220: when the listing-detail modal opens on top of the standalone full-page detail view (.horse-details), the
   page behind read as a "duplicated" listing through the light scrim, so the full-page view hides while that modal is
   open. body.horse-detail-open mirrors #rnly-horse-detail-modal.show (horses/detail.js keeps it): other modals
   (booking, messaging, share) on the full-page Details don't trigger the hide. */
body.horse-detail-open .horse-details {
  visibility: hidden;
}

/* Bootstrap compat (was reinly/layouts/modal-compat.css): Bootstrap JS sets `display: block` inline on a .modal it opens,
   but the modal centres with the DS .modal's `display: flex`. The DS sets no display on .modal.show; this only beats the
   inline style. Retires with Bootstrap modals (the bootstrap-modal ratchet). */
.modal.show {
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
}   /* tq-9360 (A207): the app-only modal rules, each with its reason */
/* ==========================================================================
   Component: Popover  ·  ADS 13 Overlays · L3 · DERIVE (no UUI analog)
   --------------------------------------------------------------------------
   The INTERACTIVE floating panel — anchored to a trigger and positioned live
   by @floating-ui/dom (see Scripts/components/popover.js). Where the tooltip is
   brief, non-interactive text, the popover holds structured, clickable content:
   a header / body / footer, an action menu, a sticky search, lazy-loaded HTML,
   pin, and an optional focus-trap.

   SOURCE — DERIVE. Untitled UI ships no popover, so this is NOT a 1:1 adoption;
   it inherits the 3b/3c PILOT-resolved primitives instead (FAN-OUT-RULES §3, §5):

     • surface  → thin token border + `rounded-lg` (var(--radius-lg)) + shadow-lg,
                  matching the sibling `.dropdown-menu-base`. (The inset-ring-over-
                  border rule is for FIELDS; floating surfaces keep a hairline
                  border, like the pilot dropdown/modal.)
     • accent   → KEEP UUI's brand accent. Every interactive affordance focuses
                  through `--border-focus` (= --color-brand-600, rgb(127 86 217)),
                  a SINGLE 2px ring, NO offset halo (the halo was F6, removed).
     • spacing  → UUI px-3 / py-2 rhythm; type on the text-xs scale.
     • radius   → surface `--radius-lg`; rows/chips `--radius-md`; kbd `--radius-sm`.

   FULL TAXONOMY PRESERVED (never narrowed — FAN-OUT-RULES §5):
     Chromes  default · --soft · --glass · --dark · --card · --menu
     Intents  --success · --warning · --danger · --info   (--info has no UUI analog — kept)
     Widths   --xs · --sm · --md (default) · --lg · --xl · --2xl · --3xl · --auto-width · --fit-content
     Padding  --p-flush · --p-xs · --p-sm · --p-md (default) · --p-lg · --p-xl
     Arrow    --no-arrow · --lg-arrow
     States   .is-open · .is-anchor-hidden · .is-loading · .is-error · .is-pinned

   Anatomy:
     .popover
       .popover__arrow                            flip-aware arrow (JS sets data-placement)
       .popover__header
         .popover__icon                           leading slot (status / icon)
         .popover__header-title  (or .popover__title + .popover__subtitle)
         .popover__header-actions                 right-side button strip
           button[data-popover-pin]  .popover__pin        sticky toggle
           button[data-popover-close] .popover__close     dismiss
       .popover__search                           sticky search input
       .popover__body                             main content
         .popover__menu                           action-list (role="menu")
           .popover__menu-item                    row · __menu-icon / __menu-label / __menu-meta / __kbd
       .popover__divider                          horizontal rule between sections
       .popover__footer                           action bar
         .popover__footer-info                    left-aligned text
         .popover__actions                        right-aligned button group (uses .btn-*)

   All colour / elevation / radius values resolve through semantic tokens
   (theme-light.css / theme-dark.css, Lead-owned) so the panel themes in both
   light and dark by token flip alone — the component never hard-codes a hue.
   ========================================================================== */

/* --------------------------------------------------------------------------
   Surface
   -------------------------------------------------------------------------- */
.popover {
   border-radius: 0.5rem;
   border-width: 1px;   /* tq-9387 (A233): the app's live value (its border-radius below still wins) */
  background-color: var(--bg-popover, var(--bg-dropdown));
  color: var(--text-popover, var(--text-primary));
  border-color: var(--border-popover, var(--border-primary));
  -webkit-box-shadow: var(--shadow-popover, var(--shadow-lg));
  box-shadow: var(--shadow-popover, var(--shadow-lg));
  border-radius: var(--radius-popover, var(--radius-lg, 0.5rem));
  z-index: var(--z-popover);
  display: none;
}

.popover.is-open {
  display: block;
  -webkit-transition: opacity 150ms ease;
  transition: opacity 150ms ease;
}

/* tq-9436 (A263; copied from Enodia tq-9437, 06edf40fec69, release/enodia.web): an anchor-hidden panel is OUT of the Tab
   order and the accessibility tree, not just transparent: visibility goes hidden once the fade ends (transition-property
   adds visibility, which reuses the 150ms above and only flips at its end) and comes back at once on scroll-back (the base
   rule does not transition it). A panel holding focus (a trapped panel, or the user tabbed in) stays shown, so it never
   vanishes under the user; once focus leaves, it hides. aria-expanded stays "true": the popover is still open. */
.popover.is-open.is-anchor-hidden:not(:focus-within) {
  opacity: 0;
  pointer-events: none;
  visibility: hidden;
  -webkit-transition-property: opacity, visibility;
  transition-property: opacity, visibility;
}

/* Slightly brighter background when inside (or portaled for) a modal. */
.modal-content .popover,
.popover--modal {
  background-color: var(--bg-popover-modal, var(--bg-popover, var(--bg-dropdown)));
}

/* --------------------------------------------------------------------------
   Arrow — flip-aware; JS sets [data-placement] + tracks the trigger centre
   -------------------------------------------------------------------------- */
.popover__arrow {
   position: absolute;
  width: 8px;
  height: 8px;
  background-color: var(--bg-popover-arrow, var(--bg-dropdown));
  border-color: var(--border-popover-arrow, var(--border-primary));
  -webkit-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  transform: rotate(45deg);
}

.popover[data-placement^="top"]    .popover__arrow {
   bottom: -0.25rem;
   border-bottom-width: 1px;
   border-right-width: 1px;
}
.popover[data-placement^="bottom"] .popover__arrow {
   top: -0.25rem;
   border-top-width: 1px;
   border-left-width: 1px;
}
.popover[data-placement^="left"]   .popover__arrow {
   right: -0.25rem;
   border-top-width: 1px;
   border-right-width: 1px;
}
.popover[data-placement^="right"]  .popover__arrow {
   left: -0.25rem;
   border-bottom-width: 1px;
   border-left-width: 1px;
}

.popover--no-arrow .popover__arrow { display: none; }

.popover--lg-arrow .popover__arrow {
  width: 10px;
  height: 10px;
}

/* --------------------------------------------------------------------------
   Header
   -------------------------------------------------------------------------- */
.popover__header {
   display: -webkit-box;
   display: -ms-flexbox;
   display: flex;
   -webkit-box-align: center;
   -ms-flex-align: center;
   align-items: center;
   gap: 0.5rem;
   border-bottom-width: 1px;
   padding-left: 0.75rem;
   padding-right: 0.75rem;
   padding-top: 0.5rem;
   padding-bottom: 0.5rem;
  border-color: var(--border-popover-divider, var(--border-popover));
  background-color: var(--bg-popover-header);
}

.popover__header-title {
   font-size: 0.75rem;
   line-height: 1rem;
   font-weight: 500;
  color: var(--text-popover-title);
}

.popover__title {
   font-size: 0.8125rem;
   line-height: 1.5rem;
   font-weight: 600;
  color: var(--text-popover-title);
  line-height: 1.3;
}
.popover__subtitle {
   font-size: 0.75rem;
   line-height: 1rem;
  color: var(--text-popover-subtitle);
  line-height: 1.4;
  margin-top: 1px;
}
.popover__icon {
   display: -webkit-inline-box;
   display: -ms-inline-flexbox;
   display: inline-flex;
   -webkit-box-align: center;
   -ms-flex-align: center;
   align-items: center;
   -webkit-box-pack: center;
   -ms-flex-pack: center;
   justify-content: center;
  width: 22px; height: 22px;
  border-radius: var(--radius-md, 0.375rem);
  color: var(--text-popover-subtitle);
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
}
.popover__header > .popover__title,
.popover__header > .popover__header-title,
.popover__header > .popover__icon + .popover__title { -webkit-box-flex: 1; -ms-flex: 1 1 auto; flex: 1 1 auto; min-width: 0; }

.popover__header-actions {
   margin-left: auto;
   display: -webkit-inline-box;
   display: -ms-inline-flexbox;
   display: inline-flex;
   -webkit-box-align: center;
   -ms-flex-align: center;
   align-items: center;
   gap: 0.25rem;
}

/* --------------------------------------------------------------------------
   Header buttons — close + pin (icon-only; need an aria-label)
   -------------------------------------------------------------------------- */
.popover__header-close,
.popover__close,
[data-popover-close].popover__btn {
   display: -webkit-inline-box;
   display: -ms-inline-flexbox;
   display: inline-flex;
   cursor: pointer;
   -webkit-box-align: center;
   -ms-flex-align: center;
   align-items: center;
   -webkit-box-pack: center;
   -ms-flex-pack: center;
   justify-content: center;
  width: 22px; height: 22px;
  border: 0;
  border-radius: var(--radius-sm, 0.25rem);
  background: transparent;
  color: var(--text-popover-muted, var(--text-tertiary));
  -webkit-transition: background-color 120ms ease, color 120ms ease;
  transition: background-color 120ms ease, color 120ms ease;
}
.popover__header-close:hover,
.popover__close:hover {
  background-color: var(--bg-popover-menu-hover, var(--bg-menu-hover));
  color: var(--text-popover-title, var(--text-primary));
}

.popover__pin {
   display: -webkit-inline-box;
   display: -ms-inline-flexbox;
   display: inline-flex;
   cursor: pointer;
   -webkit-box-align: center;
   -ms-flex-align: center;
   align-items: center;
   -webkit-box-pack: center;
   -ms-flex-pack: center;
   justify-content: center;
  width: 22px; height: 22px;
  border: 0;
  border-radius: var(--radius-sm, 0.25rem);
  background: transparent;
  color: var(--text-popover-pin);
  -webkit-transition: background-color 120ms ease, color 120ms ease;
  transition: background-color 120ms ease, color 120ms ease;
}
.popover__pin:hover {
  background-color: var(--bg-popover-pin-hover);
  color: var(--text-popover-title);
}
.popover.is-pinned .popover__pin {
  color: var(--text-popover-pin-active);
  background-color: var(--bg-popover-pin-hover);
}

/* Single brand focus ring on the icon buttons (WCAG 2.4.7 / 1.4.11 — ≥3:1). */
.popover__header-close:focus-visible,
.popover__close:focus-visible,
.popover__pin:focus-visible,
[data-popover-close].popover__btn:focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: 1px;
}

/* --------------------------------------------------------------------------
   Search
   -------------------------------------------------------------------------- */
.popover__search {
   padding-left: 0.5rem;
   padding-right: 0.5rem;
   padding-top: 0.5rem;
}
.popover__search .controls {
   position: relative;
}
.popover__search .input-clear {
   position: absolute;
   right: 0.375rem;
   top: 50%;
   display: none;
   --tw-translate-y: -50%;
   /* tq-9394: --tw-rotate gets its 0 fallback. The DS's Tailwind 4 defines the other --tw-* transform variables but not
      --tw-rotate (the app's Tailwind 3 preflight sets it 0), so on /Design this transform was invalid; A231's docs-only
      lightbox block set it, and that block is gone. The app computes the same. */
   -webkit-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate, 0)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
   -ms-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate, 0)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
   transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate, 0)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
   cursor: pointer;
   border-width: 0px;
   padding: 0px;
  background: none;
  color: var(--text-tertiary);
  font-size: 0.625rem;
  line-height: 1;
}
.popover__search .controls.has-clear-value .input-clear {
   display: -webkit-box;
   display: -ms-flexbox;
   display: flex;
   -webkit-box-align: center;
   -ms-flex-align: center;
   align-items: center;
   -webkit-box-pack: center;
   -ms-flex-pack: center;
   justify-content: center;
}

/* --------------------------------------------------------------------------
   Body
   -------------------------------------------------------------------------- */
.popover__body {
   padding-left: 0.75rem;
   padding-right: 0.75rem;
   padding-top: 0.5rem;
   padding-bottom: 0.5rem;
}

.popover__divider {
   margin-left: 0.75rem;
   margin-right: 0.75rem;
   margin-top: 0.25rem;
   margin-bottom: 0.25rem;
   border-top-width: 1px;
  border-color: var(--border-popover-divider);
}

/* --------------------------------------------------------------------------
   Footer
   -------------------------------------------------------------------------- */
.popover__footer {
   display: -webkit-box;
   display: -ms-flexbox;
   display: flex;
   -webkit-box-align: center;
   -ms-flex-align: center;
   align-items: center;
   -webkit-box-pack: end;
   -ms-flex-pack: end;
   justify-content: flex-end;
   gap: 0.5rem;
   border-top-width: 1px;
   padding-left: 0.75rem;
   padding-right: 0.75rem;
   padding-top: 0.5rem;
   padding-bottom: 0.5rem;
  border-color: var(--border-popover-divider, var(--border-popover));
  background-color: var(--bg-popover-footer);
}
.popover__footer-info {
   margin-right: auto;
   font-size: 0.75rem;
   line-height: 1rem;
  color: var(--text-popover-muted, var(--text-tertiary));
}
.popover__actions {
   display: -webkit-inline-box;
   display: -ms-inline-flexbox;
   display: inline-flex;
   -webkit-box-align: center;
   -ms-flex-align: center;
   align-items: center;
   gap: 0.375rem;
}

/* --------------------------------------------------------------------------
   Menu pattern — an action list inside a popover (role="menu")
     <ul class="popover__menu">
       <li><button class="popover__menu-item" role="menuitem">
         <i class="popover__menu-icon fa-light fa-calendar-check"></i>
         <span class="popover__menu-label">Open booking</span>
         <kbd class="popover__kbd">↵</kbd>
       </button></li>
     </ul>
   Arrow-key navigation, roving `.is-focused`, Home/End/Enter are handled by
   the driver — see popover.js.
   -------------------------------------------------------------------------- */
.popover__menu {
  list-style: none;
  margin: 0;
  padding: 4px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 1px;
}
.popover__menu-item {
   display: -webkit-box;
   display: -ms-flexbox;
   display: flex;
   width: 100%;
   cursor: pointer;
   -webkit-box-align: center;
   -ms-flex-align: center;
   align-items: center;
   gap: 0.5rem;
   padding-left: 0.5rem;
   padding-right: 0.5rem;
   padding-top: 0.375rem;
   padding-bottom: 0.375rem;
   font-size: 0.75rem;
   line-height: 1rem;
  border: 0;
  border-radius: var(--radius-md, 0.375rem);
  background: transparent;
  color: var(--text-popover);
  line-height: 1.4;
  text-align: left;
  -webkit-transition: background-color 100ms ease, color 100ms ease;
  transition: background-color 100ms ease, color 100ms ease;
}
/* Hover + roving keyboard highlight = a background wash. */
.popover__menu-item:hover,
.popover__menu-item.is-focused {
  background-color: var(--bg-popover-menu-hover);
}
/* Keyboard focus = a single brand ring (inset so it never clips the panel edge). */
.popover__menu-item:focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: -2px;
  background-color: var(--bg-popover-menu-hover);
}
.popover__menu-item.is-active,
.popover__menu-item[aria-current="true"] {
  background-color: var(--bg-popover-menu-active);
  color: var(--text-popover-title);
}
.popover__menu-item.is-danger { color: var(--utility-red-600); }
.popover__menu-item.is-danger:hover { background-color: var(--utility-red-50); color: var(--utility-red-700); }
/* tq-8912 (A131; isabella r2.1, origin Enodia tq-8915): ONE focus ring for every intent; the 2px offset gap keeps it readable against red / green. The per-intent tint is gone. */
.popover__menu-icon {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  width: 16px; height: 16px;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center;
  color: var(--text-popover-muted);
  font-size: 12px;
}
.popover__menu-item:hover .popover__menu-icon,
.popover__menu-item.is-focused .popover__menu-icon,
.popover__menu-item.is-active .popover__menu-icon {
  color: var(--text-popover);
}
.popover__menu-label { -webkit-box-flex: 1; -ms-flex: 1 1 auto; flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.popover__menu-meta {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  font-size: 10.5px;
  color: var(--text-popover-muted);
  font-family: 'Space Mono', monospace;
}

/* Sticky search inside a scrolling menu. */
.popover__menu-sticky {
  position: sticky;
  top: 0;
  z-index: 1;
  background-color: inherit;
  border-bottom: 1px solid var(--border-popover-divider);
}

/* kbd hint — shared style. */
.popover kbd,
.popover__kbd {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  padding: 1px 5px;
  border-radius: var(--radius-sm, 0.25rem);
  font-family: 'Space Mono', monospace;
  font-size: 10px;
  color: var(--text-popover-kbd);
  background-color: var(--bg-popover-kbd);
  border: 1px solid var(--border-popover-kbd);
  line-height: 1;
}

/* --------------------------------------------------------------------------
   Padding variants
   -------------------------------------------------------------------------- */
.popover--p-flush > .popover__body {
   padding: 0px;
}
.popover--p-flush > form > .popover__body {
   padding: 0px;
}

.popover--p-xs > .popover__body {
   padding-left: 0.25rem;
   padding-right: 0.25rem;
   padding-top: 0.25rem;
   padding-bottom: 0.25rem;
}
.popover--p-xs > form > .popover__body {
   padding-left: 0.25rem;
   padding-right: 0.25rem;
   padding-top: 0.25rem;
   padding-bottom: 0.25rem;
}
.popover--p-xs > .popover__header {
   padding-left: 0.5rem;
   padding-right: 0.5rem;
   padding-top: 0.25rem;
   padding-bottom: 0.25rem;
}
.popover--p-xs > .popover__footer {
   padding-left: 0.5rem;
   padding-right: 0.5rem;
   padding-top: 0.25rem;
   padding-bottom: 0.25rem;
}

.popover--p-sm > .popover__body {
   padding-left: 0.5rem;
   padding-right: 0.5rem;
   padding-top: 0.5rem;
   padding-bottom: 0.5rem;
}
.popover--p-sm > form > .popover__body {
   padding-left: 0.5rem;
   padding-right: 0.5rem;
   padding-top: 0.5rem;
   padding-bottom: 0.5rem;
}
.popover--p-sm > .popover__header {
   padding-left: 0.5rem;
   padding-right: 0.5rem;
   padding-top: 0.5rem;
   padding-bottom: 0.5rem;
}
.popover--p-sm > .popover__footer {
   padding-left: 0.5rem;
   padding-right: 0.5rem;
   padding-top: 0.5rem;
   padding-bottom: 0.5rem;
}

.popover--p-lg > .popover__body {
   padding-left: 1rem;
   padding-right: 1rem;
   padding-top: 1rem;
   padding-bottom: 0.5rem;
}
.popover--p-lg > form > .popover__body {
   padding-left: 1rem;
   padding-right: 1rem;
   padding-top: 1rem;
   padding-bottom: 0.5rem;
}
.popover--p-lg > .popover__header {
   padding-left: 1rem;
   padding-right: 1rem;
   padding-top: 0.75rem;
   padding-bottom: 0.75rem;
}
.popover--p-lg > .popover__footer {
   padding-left: 1rem;
   padding-right: 1rem;
   padding-top: 0.75rem;
   padding-bottom: 0.75rem;
}

.popover--p-xl > .popover__body {
   padding-left: 1.25rem;
   padding-right: 1.25rem;
   padding-top: 1.25rem;
   padding-bottom: 0.75rem;
}
.popover--p-xl > form > .popover__body {
   padding-left: 1.25rem;
   padding-right: 1.25rem;
   padding-top: 1.25rem;
   padding-bottom: 0.75rem;
}
.popover--p-xl > .popover__header {
   padding-left: 1.25rem;
   padding-right: 1.25rem;
   padding-top: 0.75rem;
   padding-bottom: 0.75rem;
}
.popover--p-xl > .popover__footer {
   padding-left: 1.25rem;
   padding-right: 1.25rem;
   padding-top: 0.75rem;
   padding-bottom: 0.75rem;
}

/* --------------------------------------------------------------------------
   Width sizes
   -------------------------------------------------------------------------- */
.popover--xs         { width: 160px; }
.popover--sm         { width: 200px; }
.popover--md         { width: 280px; }
.popover--lg         { width: 400px; }
.popover--xl         { width: 520px; }
/* --2xl continues the ladder for genuinely wide panels — a filter panel with two
   columns of controls (#155) outgrows --xl. 640px is the NEXT RUNG BY THE LADDER'S
   OWN RHYTHM (lg->xl and xl->2xl are both +120), not a bespoke number: a 560px
   variant would have sat 40px off --xl and given the DS two near-identical wide
   sizes, which is how a size ladder stops meaning anything.
   For "roughly 560px" --xl (520px) is usually the right pick; reach for --2xl only
   when 520 genuinely does not fit. */
.popover--2xl        { width: 640px; }
/* --3xl continues the same +120 rhythm (lg 400 · xl 520 · 2xl 640 · 3xl 760). Added
   for the filter BUILDER (#202), whose row is three deliberately unequal controls
   plus a delete: the reference measures 176 + 123 + 381 with ~13px gaps, which needs
   ~800px of panel before the value control stops collapsing. See the note on
   .dropdown-menu below — a rung alone was not enough. */
.popover--3xl        { width: 760px; }
.popover--auto-width { width: auto; }

/* A POPOVER RENDERED AS A DROPDOWN WAS CAPPED AT 320px REGARDLESS OF ITS WIDTH RUNG.
   .dropdown-menu sets `max-width: var(--dropdown-menu-max-w, min(20rem, …))`, and
   max-width beats width — so `popover--2xl` on a dropdown still rendered 320px, and
   `popover--auto-width` (the filter panel's setting) resolved to 320px rather than to
   its content. That is a COMPOSITION defect between two components, not a bug in
   either: measured on the filter panel, the panel was 320px and its third combobox
   collapsed to ZERO width.
   Fixed by setting the dropdown's OWN documented escape-hatch variable rather than
   overriding max-width from outside, and only for popovers that have explicitly asked
   for a width — an unsized popover still gets the dropdown's sensible 20rem cap. */
.dropdown-menu:is(.popover--lg, .popover--xl, .popover--2xl, .popover--3xl, .popover--auto-width, .popover--fit-content) {
  --dropdown-menu-max-w: none;
}
.popover--fit-content{ width: -webkit-max-content; width: -moz-max-content; width: max-content; max-width: 480px; }

/* --------------------------------------------------------------------------
   Visual chromes
   -------------------------------------------------------------------------- */

/* Soft — no border, soft drop shadow. */
.popover--soft {
  background-color: var(--bg-popover-soft);
  border-color: var(--border-popover-soft);
  -webkit-box-shadow: var(--shadow-popover-soft);
  box-shadow: var(--shadow-popover-soft);
}
.popover--soft .popover__arrow {
  background-color: var(--bg-popover-soft);
  border-color: transparent;
}

/* Glass — translucent + backdrop blur. */
.popover--glass {
  background-color: var(--bg-popover-glass);
  border-color: var(--border-popover-glass);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
}
.popover--glass .popover__arrow {
  background-color: var(--bg-popover-glass);
  border-color: var(--border-popover-glass);
}

/* Dark — inverse surface for rich tooltips. Alpha-white derivations are the
   inverse chrome's own overlays, not hard-coded hues. */
.popover--dark {
  background-color: var(--bg-popover-dark);
  color: var(--text-popover-dark);
  border-color: var(--border-popover-dark);
}
.popover--dark .popover__title,
.popover--dark .popover__header-title { color: var(--text-popover-dark); }
.popover--dark .popover__subtitle,
.popover--dark .popover__menu-meta,
.popover--dark .popover__footer-info { color: oklch(100% 0 0 / 0.7); }
.popover--dark .popover__divider,
.popover--dark .popover__header,
.popover--dark .popover__footer { border-color: oklch(100% 0 0 / 0.1); }
.popover--dark .popover__menu-item:hover,
.popover--dark .popover__menu-item.is-focused { background-color: oklch(100% 0 0 / 0.08); }
.popover--dark .popover__arrow {
  background-color: var(--bg-popover-dark-arrow);
  border-color: var(--border-popover-dark);
}
.popover--dark kbd,
.popover--dark .popover__kbd {
  background-color: oklch(100% 0 0 / 0.1);
  color: oklch(100% 0 0 / 0.9);
  border-color: oklch(100% 0 0 / 0.15);
}

/* Card — card-style chrome with deeper shadow. */
.popover--card {
  background-color: var(--bg-popover-card);
  -webkit-box-shadow: var(--shadow-popover-card);
  box-shadow: var(--shadow-popover-card);
}

/* Menu — tighter padding optimised for menu lists. */
.popover--menu {
   padding: 0px;
}
.popover--menu > .popover__body { padding: 0; }

/* --------------------------------------------------------------------------
   Intent strips — a 3px top bar. --info is ours (no UUI analog) and is kept.
   -------------------------------------------------------------------------- */
.popover--success,
.popover--warning,
.popover--danger,
.popover--info {
  position: relative;
}
.popover--success::before,
.popover--warning::before,
.popover--danger::before,
.popover--info::before {
  content: "";
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 3px;
  border-top-left-radius: inherit;
  border-top-right-radius: inherit;
}
.popover--success::before { background-color: var(--border-popover-intent-success); }
.popover--warning::before { background-color: var(--border-popover-intent-warning); }
.popover--danger::before  { background-color: var(--border-popover-intent-danger); }
.popover--info::before    { background-color: var(--border-popover-intent-info); }

/* --------------------------------------------------------------------------
   States
   -------------------------------------------------------------------------- */

/* Loading — skeleton placeholder inside body (auto for data-popover-src fetches). */
.popover.is-loading .popover__body {
  position: relative;
  min-height: 60px;
}
.popover.is-loading .popover__body::before,
.popover.is-loading .popover__body::after {
  content: "";
  display: block;
  background-color: var(--bg-popover-skeleton);
  border-radius: var(--radius-sm, 0.25rem);
  background-image: linear-gradient(
    90deg,
    var(--bg-popover-skeleton) 0%,
    color-mix(in oklch, var(--bg-popover-skeleton) 60%, var(--bg-primary)) 50%,
    var(--bg-popover-skeleton) 100%
  );
  background-size: 200% 100%;
  -webkit-animation: popover-skeleton 1.4s ease-in-out infinite;
  animation: popover-skeleton 1.4s ease-in-out infinite;
}
.popover.is-loading .popover__body::before { height: 12px; width: 80%; margin: 6px 0; }
.popover.is-loading .popover__body::after  { height: 12px; width: 55%; }
.popover.is-loading .popover__body > * { visibility: hidden; }
@-webkit-keyframes popover-skeleton {
  from { background-position: -100% 0; }
  to   { background-position:  100% 0; }
}
@keyframes popover-skeleton {
  from { background-position: -100% 0; }
  to   { background-position:  100% 0; }
}
@media (prefers-reduced-motion: reduce) {
  .popover.is-loading .popover__body::before,
  .popover.is-loading .popover__body::after { -webkit-animation: none; animation: none; }
}

/* Error — gentle red body. A failed lazy fetch falls back here, never a blank panel. */
.popover.is-error .popover__body {
  color: var(--utility-red-700);
}

/* --------------------------------------------------------------------------
   Entry animation. tq-9387 (A233, the A207 / A231 method): the app's LIVE values (a 100ms scale-in); the DS's directional
   slide-in (120ms; JS sets [data-placement]) is the docs-only variant in apps/docs.css. The placement rules below only
   feed that variant's custom properties.
   -------------------------------------------------------------------------- */
.popover.is-open {
  -webkit-animation: popover-in var(--duration-fast, 100ms) var(--ease-out, ease-out);
  animation: popover-in var(--duration-fast, 100ms) var(--ease-out, ease-out);
}
.popover[data-placement^="top"].is-open    { --popover-anim-from-y:  6px; }
.popover[data-placement^="bottom"].is-open { --popover-anim-from-y: -6px; }
.popover[data-placement^="left"].is-open   { --popover-anim-from-x:  6px; --popover-anim-from-y: 0; }
.popover[data-placement^="right"].is-open  { --popover-anim-from-x: -6px; --popover-anim-from-y: 0; }

@-webkit-keyframes popover-in {
  from { opacity: 0; -webkit-transform: scale(0.95); transform: scale(0.95); }
  to { opacity: 1; -webkit-transform: scale(1); transform: scale(1); }
}

@keyframes popover-in {
  from { opacity: 0; -webkit-transform: scale(0.95); transform: scale(0.95); }
  to { opacity: 1; -webkit-transform: scale(1); transform: scale(1); }
}

@media (prefers-reduced-motion: reduce) {
  /* tq-9394: convergence with origin 06edf40f (isabella 900075274): reduced motion removes the entry MOVEMENT and keeps the
     150ms opacity fade, the 'leaving' cue (the DS reduced-motion line, as Enodia and CH). */
  .popover.is-open { -webkit-animation: none; animation: none; }
}

/* --------------------------------------------------------------------------
   Notes-clamp pattern — "Read more" on truncated text opens a scrollable popover
   -------------------------------------------------------------------------- */
.notes-clamp {
   position: relative;
}
.notes-clamp.is-clamped .notes-clamp__text { cursor: pointer; }

.notes-clamp__more {
   margin-top: 0.125rem;
   display: -webkit-inline-box;
   display: -ms-inline-flexbox;
   display: inline-flex;
   cursor: pointer;
   -webkit-box-align: center;
   -ms-flex-align: center;
   align-items: center;
   gap: 0.25rem;
   font-size: 0.6875rem;
   line-height: 1rem;
  color: var(--text-link);
}
.notes-clamp__more:hover {
  color: var(--text-link-hover);
  text-decoration: underline;
}
.notes-clamp__more:focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: 2px;
  border-radius: var(--radius-sm, 0.25rem);
}
.notes-clamp__full-wrapper {
   padding: 0px;
}
.popover .notes-clamp__full {
   white-space: pre-wrap;
   padding: 1rem;
   font-size: 0.75rem;
   line-height: 1rem;
  max-height: 320px;
  overflow-y: auto;
  scrollbar-width: thin;
}   /* tq-9387 (A233): THE popover, imported in place (the app twin is gone; the A207 / A231 method) */
/* ========================================
   Component: Context Menu (right-click)
   Reuses dropdown-menu styling, positioned at cursor
   ======================================== */

/* Grain overlay (matches dropdown) */

/* Glass variant */

/* Reuse dropdown items inside context menu */

/* Glass item overrides */

/* Widths */
/* ==========================================================================
   Lightbox — canonical (v2). tq-9394 (A239; USER 900074710 'B: switch to the newer viewer', 900074742 'A: no info panel';
   isabella 900074726 / 900075448)

   The app (reinly.webapp) imports this file IN PLACE, so it is plain CSS (Reinly.Design/tests/app-imported-plain-css.test.mjs).
   ONE generation: the v2 lightbox (Scripts/components/lightbox.js) is THE viewer, in the app and on /Design.
     - The v1 app viewer (the caption pill, the fixed counter / close / prev-next over an .lightbox__image-wrap, the 0.92
       entry keyframe) is gone with its markup (_HorseLightbox / the seller layout's copy) and its two drivers.
     - The v2 values for the selectors both generations shared were parked in apps/docs.css by A231 (tq-9385); they are back
       here, after the v2-only rules, in the order the docs page cascaded them (so /Design computes exactly as before).
   ========================================================================== */

/* ==========================================================================
   Lightbox — immersive media inspection

   Designed for operational workflows: listing photo review, vet-check
   inspections, evidence analysis, document verification.
   Calm, spatial, performant — the chrome disappears behind the content.

   Boundaries:
     Lightbox       Immersive single-media inspection (this file)
     Gallery View   Browse many at once (separate component)
     Carousel       Sequential embedded scrolling (separate component)
     Photo Viewer   Deep image interaction layer (separate component)
     Popover        Contextual metadata / help (separate component)

   Anatomy (BEM under .lightbox-backdrop root; built by Scripts/components/lightbox.js):
     .lightbox-backdrop                Root, fixed full-screen
       .lightbox__chrome               Top chrome (title, toolbar, close)
         .lightbox__title
         .lightbox__counter
         .lightbox__toolbar            Action buttons (download, rotate, etc.)
         .lightbox__close
       .lightbox__stage                Image viewport (zoom + pan target)
         .lightbox__image
         .lightbox__video              A video item (tq-9394, Reinly-only)
         .lightbox__shimmer            Loading placeholder
         .lightbox__error              Broken-media fallback
       .lightbox__nav                  Prev/next buttons
         .lightbox__prev / .lightbox__next
       .lightbox__zoom-controls        Floating zoom UI
         .lightbox__zoom-btn
         .lightbox__zoom-level         Live zoom %
       .lightbox__caption-bar          Bottom caption + meta row
         .lightbox__caption
         .lightbox__meta
       .lightbox__thumbs               Thumbnail strip
         .lightbox__thumb
       .lightbox__panel                Side metadata panel (variant)
         .lightbox__panel-section
         .lightbox__panel-row

   Style modifiers on the root:
     .lightbox--minimal      No chrome, just stage + close
     .lightbox--immersive    Stage edge-to-edge, chrome auto-hides (focus mode)
     .lightbox--evidence     Persistent toolbar + metadata strip (audit workflow)
     .lightbox--metadata     50/50 split with side panel
     .lightbox--presentation Calmer chrome for sharing screens
     .lightbox--compact      Embedded, not full-viewport
     .lightbox--compare      Side-by-side comparison (2 images)

   Behavior modifiers:
     .is-open                Visible
     .is-focus               Chrome auto-fades (toggled by JS after idle)
     .is-dim                 Extra ambient dimming behind the image
     .is-zoomed              Stage in zoom mode (cursor: grab)
     .is-panning             Currently dragging the stage
   ========================================================================== */

/* ============================== Root ============================== */

/* Visually-hidden polite live region — announces "Image X of Y — caption" to
   screen readers as navigation happens (the visible counter is decorative). */
.lightbox__live {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

/* Ambient dim — adds a vignette-like overlay behind the stage */
.lightbox-backdrop.is-dim::before {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(
    ellipse at center,
    transparent 30%,
    var(--bg-lightbox-overlay) 100%
  );
  pointer-events: none;
}

/* ============================== Chrome (top bar) ============================== */

.lightbox__chrome {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: calc(var(--spacing, 0.25rem) * 3);
  padding-inline: calc(var(--spacing, 0.25rem) * 4);
  padding-block: calc(var(--spacing, 0.25rem) * 3);
  z-index: 3;
  color: var(--text-lightbox);
  -webkit-transition: opacity var(--duration-normal, 200ms) var(--ease-default, ease),
              -webkit-transform var(--duration-normal, 200ms) var(--ease-default, ease);
  transition: opacity var(--duration-normal, 200ms) var(--ease-default, ease),
              -webkit-transform var(--duration-normal, 200ms) var(--ease-default, ease);
  transition: opacity var(--duration-normal, 200ms) var(--ease-default, ease),
              transform var(--duration-normal, 200ms) var(--ease-default, ease);
  transition: opacity var(--duration-normal, 200ms) var(--ease-default, ease),
              transform var(--duration-normal, 200ms) var(--ease-default, ease),
              -webkit-transform var(--duration-normal, 200ms) var(--ease-default, ease);
}

.lightbox__title {
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  --tw-font-weight: var(--font-weight-medium, 500);
  font-weight: var(--font-weight-medium, 500);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0%;
  flex: 1 1 0%;
  min-width: 0;
  color: var(--text-lightbox);
}

/* Toolbar + close — always anchored to the right of the chrome row */
.lightbox__toolbar {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: var(--spacing, 0.25rem);
  margin-left: auto;
}

/* ============================== Controls (close, nav, zoom, toolbar) ============================== */

.lightbox__btn,
.lightbox__zoom-btn,
.lightbox__toolbar > button {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: var(--radius-full);
  cursor: pointer;
  width: 36px;
  height: 36px;
  background-color: var(--bg-lightbox-control);
  color: var(--text-lightbox);
  border: 1px solid var(--border-lightbox);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  -webkit-transition: background-color 150ms ease, color 150ms ease, -webkit-transform 150ms ease;
  transition: background-color 150ms ease, color 150ms ease, -webkit-transform 150ms ease;
  transition: background-color 150ms ease, color 150ms ease, transform 150ms ease;
  transition: background-color 150ms ease, color 150ms ease, transform 150ms ease, -webkit-transform 150ms ease;
}

.lightbox__btn:hover,
.lightbox__zoom-btn:hover,
.lightbox__toolbar > button:hover {
  background-color: var(--bg-lightbox-control-hover);
}

.lightbox__btn:active,
.lightbox__zoom-btn:active,
.lightbox__toolbar > button:active {
  background-color: var(--bg-lightbox-control-active);
  -webkit-transform: scale(0.95);
  -ms-transform: scale(0.95);
  transform: scale(0.95);
}

/* Single 2px focus ring in UUI's brand accent (--border-focus = --color-brand-600),
   never the legacy blue --ring-lightbox-focus and never black (FAN-OUT-RULES §1b/§3).
   One ring, no offset halo — the halo was the F6 double-ring. */
.lightbox__btn:focus-visible,
.lightbox__zoom-btn:focus-visible,
.lightbox__toolbar > button:focus-visible {
  outline: 2px solid var(--focus-ring); outline-offset: 2px;
}

/* Disabled state */
.lightbox__btn[disabled],
.lightbox__zoom-btn[disabled] {
  opacity: 0.4;
  cursor: not-allowed;
}

/* ============================== Navigation arrows ============================== */

.lightbox__nav {
  position: absolute;
  inset-block: 0;
  inset-inline: 0;
  display: contents;
  pointer-events: none;
}

/* ============================== Stage (image viewport) ============================== */

.lightbox__stage {
  position: relative;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 100%;
  height: 100%;
  overflow: hidden;
  cursor: -webkit-zoom-in;
  cursor: zoom-in;
}

.lightbox-backdrop.is-zoomed .lightbox__stage {
  cursor: -webkit-grab;
  cursor: grab;
}

.lightbox-backdrop.is-panning .lightbox__stage {
  cursor: -webkit-grabbing;
  cursor: grabbing;
}

.lightbox-backdrop.is-panning .lightbox__image {
  -webkit-transition: none;
  transition: none;
}

/* Cross-fade between images during navigation */
.lightbox__image.is-exiting-next,
.lightbox__image.is-exiting-prev {
  opacity: 0;
  -webkit-transition: opacity 150ms ease;
  transition: opacity 150ms ease;
}

.lightbox__image.is-entering-next,
.lightbox__image.is-entering-prev {
  opacity: 0;
}

/* ============================== Shimmer + error ============================== */

/* Error card — absolutely centered overlay so it never sits beside the image.
   Visibility is controlled by the [hidden] attribute (see override below). */
.lightbox__error {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  text-align: center;
  padding-inline: calc(var(--spacing, 0.25rem) * 6);
  padding-block: calc(var(--spacing, 0.25rem) * 10);
  border-radius: var(--radius-lg);
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
  gap: 0.5rem;
  background-color: var(--bg-lightbox-surface);
  color: var(--text-lightbox-muted);
  border: 1px dashed var(--border-lightbox);
  min-width: 16rem;
  max-width: 28rem;
  z-index: 2;
}

.lightbox__error-icon {
  font-size: 1.875rem;
  line-height: var(--tw-leading, 2.25rem);
  letter-spacing: var(--tw-tracking, -0.015em);
  margin-bottom: var(--spacing, 0.25rem);
  opacity: 60%;
}

.lightbox__error-title {
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  --tw-font-weight: var(--font-weight-medium, 500);
  font-weight: var(--font-weight-medium, 500);
  color: var(--text-lightbox);
}

.lightbox__error-message {
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
}

/* ============================== Caption bar ============================== */

.lightbox__caption-bar {
  position: absolute;
  bottom: 0;
  left: 50%;
  -webkit-transform: translateX(-50%);
  -ms-transform: translateX(-50%);
  transform: translateX(-50%);
  z-index: 3;
  max-width: min(80vw, 56rem);
  padding: 0.75rem 1rem 1.25rem;
  text-align: center;
  -webkit-transition: opacity var(--duration-normal, 200ms) var(--ease-default, ease);
  transition: opacity var(--duration-normal, 200ms) var(--ease-default, ease);
}

.lightbox__meta {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: calc(var(--spacing, 0.25rem) * 2);
  margin-top: var(--spacing, 0.25rem);
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  text-transform: uppercase;
  font-family: var(--font-mono, 'Space Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace);
  color: var(--text-lightbox-muted);
  letter-spacing: 0.05em;
}

.lightbox__meta-dot {
  opacity: 50%;
}

/* ============================== Zoom controls (floating, bottom-right) ============================== */

.lightbox__zoom-controls {
  position: absolute;
  bottom: 1rem;
  right: 1rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  padding: 0.25rem;
  border-radius: var(--radius-full);
  background-color: var(--bg-lightbox-surface);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border: 1px solid var(--border-lightbox);
  z-index: 3;
  -webkit-transition: opacity var(--duration-normal, 200ms) ease;
  transition: opacity var(--duration-normal, 200ms) ease;
}

.lightbox__zoom-btn {
  width: 32px;
  height: 32px;
  border: none;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  background-color: transparent;
}

.lightbox__zoom-btn:hover {
  background-color: var(--bg-lightbox-control-hover);
}

.lightbox__zoom-level {
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  --tw-numeric-spacing: tabular-nums;
  font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);
  font-family: var(--font-mono, 'Space Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace);
  padding-inline: calc(var(--spacing, 0.25rem) * 2);
  color: var(--text-lightbox-muted);
  min-width: 3rem;
  text-align: center;
}

/* ============================== Thumbnail strip ============================== */

.lightbox__thumb img.is-loaded {
  opacity: 1;
}

/* ============================== Side metadata panel (variants: --metadata, --evidence) ============================== */

.lightbox__panel {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  width: 22rem;
  max-width: 90vw;
  padding: 4rem 1.5rem 1.5rem;
  overflow-y: auto;
  background-color: var(--bg-lightbox-surface);
  backdrop-filter: blur(20px) saturate(140%);
  -webkit-backdrop-filter: blur(20px) saturate(140%);
  border-left: 1px solid var(--border-lightbox);
  color: var(--text-lightbox);
  z-index: 2;
  -webkit-transform: translateX(0);
  -ms-transform: translateX(0);
  transform: translateX(0);
  -webkit-transition: -webkit-transform var(--duration-normal, 200ms) var(--ease-default, ease);
  transition: -webkit-transform var(--duration-normal, 200ms) var(--ease-default, ease);
  transition: transform var(--duration-normal, 200ms) var(--ease-default, ease);
  transition: transform var(--duration-normal, 200ms) var(--ease-default, ease), -webkit-transform var(--duration-normal, 200ms) var(--ease-default, ease);
}

.lightbox__panel-section {
  margin-bottom: calc(var(--spacing, 0.25rem) * 5);
}

.lightbox__panel-section-title {
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  text-transform: uppercase;
  --tw-font-weight: var(--font-weight-medium, 500);
  font-weight: var(--font-weight-medium, 500);
  --tw-tracking: var(--tracking-wider, 0.05em);
  letter-spacing: var(--tracking-wider, 0.05em);
  margin-bottom: calc(var(--spacing, 0.25rem) * 2);
  color: var(--text-lightbox-muted);
  letter-spacing: 0.06em;
}

.lightbox__panel-row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: baseline;
  -ms-flex-align: baseline;
  align-items: baseline;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: calc(var(--spacing, 0.25rem) * 3);
  padding-block: calc(var(--spacing, 0.25rem) * 1.5);
  font-size: 0.75rem;
  line-height: var(--tw-leading, 1.125rem);
  border-bottom: 1px solid var(--border-lightbox);
}

.lightbox__panel-row:last-child {
  border-bottom: 0;
}

.lightbox__panel-label {
  color: var(--text-lightbox-muted);
}

.lightbox__panel-value {
  --tw-font-weight: var(--font-weight-medium, 500);
  font-weight: var(--font-weight-medium, 500);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  text-align: right;
  color: var(--text-lightbox);
}

/* ============================== Variants ============================== */

/* MINIMAL — distraction-free: just stage + close */
.lightbox-backdrop.lightbox--minimal .lightbox__chrome {
  display: none; }
.lightbox-backdrop.lightbox--minimal .lightbox__nav {
  display: none; }
.lightbox-backdrop.lightbox--minimal .lightbox__caption-bar {
  display: none; }
.lightbox-backdrop.lightbox--minimal .lightbox__thumbs {
  display: none; }
.lightbox-backdrop.lightbox--minimal .lightbox__zoom-controls {
  display: none; }
.lightbox-backdrop.lightbox--minimal .lightbox__close {
  position: absolute;
  top: 1rem;
  right: 1rem;
  z-index: 4;
}

/* IMMERSIVE — chrome auto-hides on idle (set via .is-focus by JS) */
.lightbox-backdrop.lightbox--immersive.is-focus .lightbox__chrome,
.lightbox-backdrop.lightbox--immersive.is-focus .lightbox__caption-bar,
.lightbox-backdrop.lightbox--immersive.is-focus .lightbox__thumbs,
.lightbox-backdrop.lightbox--immersive.is-focus .lightbox__zoom-controls,
.lightbox-backdrop.lightbox--immersive.is-focus .lightbox__prev,
.lightbox-backdrop.lightbox--immersive.is-focus .lightbox__next {
  opacity: 0;
  pointer-events: none;
}

.lightbox-backdrop.lightbox--immersive.is-focus .lightbox__chrome {
  -webkit-transform: translateY(-100%);
  -ms-transform: translateY(-100%);
  transform: translateY(-100%);
}

/* EVIDENCE — persistent toolbar, side metadata panel, status badges */
.lightbox-backdrop.lightbox--evidence .lightbox__stage {
  /* leave room for panel */
  padding-right: 22rem;
}

.lightbox-backdrop.lightbox--evidence .lightbox__image {
  max-width: calc(90vw - 22rem);
}

/* METADATA — 50/50 split with side panel */
.lightbox-backdrop.lightbox--metadata .lightbox__stage {
  padding-right: 22rem;
}

.lightbox-backdrop.lightbox--metadata .lightbox__image {
  max-width: calc(90vw - 22rem);
}

/* PRESENTATION — calmer chrome, no thumbs, larger caption */
.lightbox-backdrop.lightbox--presentation .lightbox__thumbs {
  display: none; }
.lightbox-backdrop.lightbox--presentation .lightbox__caption {
  font-size: 1rem;
  line-height: var(--tw-leading, 1.5rem);
}

/* COMPACT — embedded mode, not full-viewport */
.lightbox-backdrop.lightbox--compact {
  position: relative;
  inset: auto;
  min-height: 28rem;
  border-radius: var(--radius-xl);
  border: 1px solid var(--border-lightbox);
  overflow: hidden;
}

.lightbox-backdrop.lightbox--compact .lightbox__image {
  max-width: 100%;
  max-height: 24rem;
}

/* COMPARE — side-by-side two images */
.lightbox-backdrop.lightbox--compare .lightbox__stage {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1rem;
  padding: 4rem 1rem 1rem;
}

.lightbox-backdrop.lightbox--compare .lightbox__compare-pane {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  min-width: 0;
}

.lightbox-backdrop.lightbox--compare .lightbox__compare-pane img {
  max-width: 100%;
  max-height: 80vh;
  -o-object-fit: contain;
  object-fit: contain;
  border-radius: var(--radius-lg);
}

.lightbox-backdrop.lightbox--compare .lightbox__compare-label {
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  text-transform: uppercase;
  font-family: var(--font-mono, 'Space Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace);
  margin-top: calc(var(--spacing, 0.25rem) * 2);
  padding-inline: calc(var(--spacing, 0.25rem) * 2);
  padding-block: var(--spacing, 0.25rem);
  border-radius: var(--radius-sm);
  background-color: var(--bg-lightbox-surface);
  color: var(--text-lightbox-muted);
  letter-spacing: 0.05em;
}

/* ============================== Touch + responsive ============================== */

@media (pointer: coarse) {

  /* On narrow screens, collapse the metadata/evidence side panel into a sheet */
  .lightbox-backdrop.lightbox--metadata .lightbox__stage,
  .lightbox-backdrop.lightbox--evidence .lightbox__stage {
    padding-right: 0;
  }

  .lightbox-backdrop.lightbox--metadata .lightbox__image,
  .lightbox-backdrop.lightbox--evidence .lightbox__image {
    max-width: 90vw;
    max-height: 60vh;
  }

  .lightbox-backdrop.lightbox--metadata .lightbox__panel,
  .lightbox-backdrop.lightbox--evidence .lightbox__panel {
    top: auto;
    left: 0;
    right: 0;
    bottom: 0;
    width: 100%;
    max-height: 40vh;
    border-left: 0;
    border-top: 1px solid var(--border-lightbox);
    padding: 1rem 1.25rem;
  }
}

@media (prefers-reduced-motion: reduce) {
  .lightbox__chrome,
  .lightbox__caption-bar,
  .lightbox__panel,
.lightbox__zoom-controls {
    -webkit-transition: none;
    transition: none;
}

  .lightbox__image.is-exiting-next,
  .lightbox__image.is-exiting-prev,
  .lightbox__image.is-entering-next,
  .lightbox__image.is-entering-prev {
    -webkit-transition: opacity 0ms;
    transition: opacity 0ms;
  }
}

/* ============================== Shared selectors (v2 values; back from apps/docs.css, tq-9394) ============================== */

@-webkit-keyframes lightbox-img-in {
  from { opacity: 0; -webkit-transform: scale(0.96); transform: scale(0.96); }
  to   { opacity: 1; -webkit-transform: scale(1); transform: scale(1); }
}

@keyframes lightbox-img-in {
  from { opacity: 0; -webkit-transform: scale(0.96); transform: scale(0.96); }
  to   { opacity: 1; -webkit-transform: scale(1); transform: scale(1); }
}

.lightbox-backdrop {
  position: fixed;
  inset: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  z-index: var(--z-lightbox);   /* z ladder (tq-9381): the top of the page */
  background-color: var(--bg-lightbox);
  /* tq-9405 (A245, the USER's default for scrims, tq-8221): a plain dim, NO backdrop blur. Unprefixed only (Lightning CSS
     drops the unprefixed form when both are present). */
  backdrop-filter: none;
  color: var(--text-lightbox);
  display: none;
  opacity: 0;
  -webkit-transition: opacity var(--duration-normal, 200ms) var(--ease-default, ease);
  transition: opacity var(--duration-normal, 200ms) var(--ease-default, ease);
  /* Make sure children can position absolutely against the root */
  /* and don't inherit accidental color from the page */
}

.lightbox-backdrop.is-open {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  opacity: 1;
}
.lightbox-backdrop [hidden] {
  display: none !important;
}
.lightbox__counter {
  position: absolute;
  left: 50%;
  top: 50%;
  -webkit-transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
  font-size: 0.6875rem;
  line-height: var(--tw-leading, 1rem);
  letter-spacing: var(--tw-tracking, 0.01em);
  --tw-numeric-spacing: tabular-nums;
  font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);
  padding-inline: calc(var(--spacing, 0.25rem) * 2.5);
  padding-block: var(--spacing, 0.25rem);
  border-radius: var(--radius-full);
  font-family: var(--font-mono, 'Space Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace);
  text-transform: uppercase;
  background-color: var(--bg-lightbox-surface);
  color: var(--text-lightbox-muted);
  letter-spacing: 0.05em;
  pointer-events: none;
}

.lightbox__close,
.lightbox__prev,
.lightbox__next {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: var(--radius-full);
  cursor: pointer;
  width: 36px;
  height: 36px;
  background-color: var(--bg-lightbox-control);
  color: var(--text-lightbox);
  border: 1px solid var(--border-lightbox);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  -webkit-transition: background-color 150ms ease, color 150ms ease, -webkit-transform 150ms ease;
  transition: background-color 150ms ease, color 150ms ease, -webkit-transform 150ms ease;
  transition: background-color 150ms ease, color 150ms ease, transform 150ms ease;
  transition: background-color 150ms ease, color 150ms ease, transform 150ms ease, -webkit-transform 150ms ease;
}

.lightbox__close:hover,
.lightbox__prev:hover,
.lightbox__next:hover {
  background-color: var(--bg-lightbox-control-hover);
}

.lightbox__close:active,
.lightbox__prev:active,
.lightbox__next:active {
  background-color: var(--bg-lightbox-control-active);
  -webkit-transform: scale(0.95);
  -ms-transform: scale(0.95);
  transform: scale(0.95);
}
.lightbox__close:focus-visible,
.lightbox__prev:focus-visible,
.lightbox__next:focus-visible {
  outline: 2px solid var(--focus-ring); outline-offset: 2px;
}

.lightbox__prev,
.lightbox__next {
  position: absolute;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
  width: 44px;
  height: 44px;
  z-index: 2;
  pointer-events: auto;
}

.lightbox__prev { left: 1rem; }
.lightbox__next { right: 1rem; }

.lightbox__image {
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  max-width: 90vw;
  max-height: 80vh;
  -o-object-fit: contain;
  object-fit: contain;
  border-radius: var(--radius-lg);
  /* Transform changes are JS-driven (zoom + pan + rotate) */
  -webkit-transform-origin: center center;
  -ms-transform-origin: center center;
  transform-origin: center center;
  -webkit-transition: opacity 200ms ease,
              -webkit-transform var(--duration-fast, 150ms) var(--ease-default, ease);
  transition: opacity 200ms ease,
              -webkit-transform var(--duration-fast, 150ms) var(--ease-default, ease);
  transition: transform var(--duration-fast, 150ms) var(--ease-default, ease),
              opacity 200ms ease;
  transition: transform var(--duration-fast, 150ms) var(--ease-default, ease),
              opacity 200ms ease,
              -webkit-transform var(--duration-fast, 150ms) var(--ease-default, ease);
  will-change: transform;
}

.lightbox__image.is-loading {
  opacity: 0;
}

.lightbox__shimmer {
  position: absolute;
  border-radius: var(--radius-lg);
  width: 60vw;
  height: 50vh;
  max-width: 600px;
  max-height: 400px;
  /* Highlight sweep uses the lightbox control-hover surface token (a brighter step
     of the same white-alpha family) instead of a raw oklch literal. */
  background: linear-gradient(
    90deg,
    var(--bg-lightbox-surface) 25%,
    var(--bg-lightbox-control-hover) 37%,
    var(--bg-lightbox-surface) 63%
  );
  background-size: 200% 100%;
  -webkit-animation: shimmer 1.5s ease-in-out infinite;
  animation: shimmer 1.5s ease-in-out infinite;
}

.lightbox__caption {
  font-size: 0.8125rem;
  line-height: var(--tw-leading, 1.25rem);
  --tw-leading: var(--leading-snug, 1.375);   /* tq-9394: the app (Tailwind 3) has no --leading-snug; 1.375 is Tailwind 4's */
  line-height: var(--leading-snug, 1.375);
  color: var(--text-lightbox);
}

.lightbox__thumbs {
  position: absolute;
  bottom: 5.5rem;
  left: 50%;
  -webkit-transform: translateX(-50%);
  -ms-transform: translateX(-50%);
  transform: translateX(-50%);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  gap: 0.5rem;
  padding: 0.5rem 0.75rem;
  max-width: min(80vw, 56rem);
  overflow-x: auto;
  border-radius: var(--radius-xl);
  background-color: var(--bg-lightbox-surface);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border: 1px solid var(--border-lightbox);
  z-index: 3;
  scrollbar-width: thin;
  -webkit-transition: opacity var(--duration-normal, 200ms) ease;
  transition: opacity var(--duration-normal, 200ms) ease;
}

  .lightbox__thumbs::-webkit-scrollbar {
    height: var(--scroll-size-sm);
  }

  .lightbox__thumbs::-webkit-scrollbar-thumb {
    background-color: var(--border-lightbox);
    border-radius: 3px;
  }

.lightbox__thumb {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  border-radius: var(--radius-md);
  overflow: hidden;
  cursor: pointer;
  position: relative;
  width: 48px;
  height: 48px;
  background-color: var(--bg-lightbox-thumbnail);
  border: 2px solid transparent;
  opacity: 0.6;
  -webkit-transition: opacity 150ms ease, border-color 150ms ease, -webkit-transform 150ms ease;
  transition: opacity 150ms ease, border-color 150ms ease, -webkit-transform 150ms ease;
  transition: opacity 150ms ease, border-color 150ms ease, transform 150ms ease;
  transition: opacity 150ms ease, border-color 150ms ease, transform 150ms ease, -webkit-transform 150ms ease;
}

  .lightbox__thumb:hover {
    opacity: 0.9;
    -webkit-transform: translateY(-1px);
    -ms-transform: translateY(-1px);
    transform: translateY(-1px);
  }

  .lightbox__thumb.is-active {
    opacity: 1;
    border-color: var(--border-lightbox-thumbnail-active);
    background-color: var(--bg-lightbox-thumbnail-active);
  }

  .lightbox__thumb:focus-visible {
    outline: 2px solid var(--focus-ring); outline-offset: 2px;
  }

  .lightbox__thumb img {
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
  object-fit: cover;
    opacity: 0;
    -webkit-transition: opacity 200ms ease;
    transition: opacity 200ms ease;
  }

.lightbox-backdrop.is-open .lightbox__image {
  -webkit-animation: lightbox-img-in 220ms cubic-bezier(0.16, 1, 0.3, 1);
  animation: lightbox-img-in 220ms cubic-bezier(0.16, 1, 0.3, 1);
}

.lightbox__image.is-swiping {
  -webkit-transition: none !important;
  transition: none !important;
  -webkit-animation: none !important;
  animation: none !important;
}

@media (pointer: coarse) {
  .lightbox__prev,
  .lightbox__next {
    width: 48px;
    height: 48px;
  }

  .lightbox__close {
    width: 44px;
    height: 44px;
  }

  .lightbox__thumb {
    width: 56px;
    height: 56px;
  }
  .lightbox__prev,
  .lightbox__next {
    top: auto;
    bottom: 5.5rem;
    -webkit-transform: none;
    -ms-transform: none;
    transform: none;
  }
}

@media (prefers-reduced-motion: reduce) {
  .lightbox-backdrop,
  .lightbox__thumbs {
    -webkit-transition: none;
    transition: none;
  }

  .lightbox-backdrop.is-open .lightbox__image {
    -webkit-animation: none;
    animation: none;
  }

  .lightbox__image {
    -webkit-transition: opacity 0ms;
    transition: opacity 0ms;
  }

  .lightbox__shimmer {
    -webkit-animation: none;
    animation: none;
    background: var(--bg-lightbox-surface);
  }
}

.lightbox-backdrop.is-open .lightbox__image:not(.is-loading) {
  -webkit-animation: lightbox-img-in 220ms cubic-bezier(0.16, 1, 0.3, 1);
  animation: lightbox-img-in 220ms cubic-bezier(0.16, 1, 0.3, 1);
}

@media (prefers-reduced-motion: reduce) {
  .lightbox-backdrop.is-open .lightbox__image:not(.is-loading) {
    -webkit-animation: none;
    animation: none;
  }
}


/* ============================== Video items (tq-9394, Reinly-only; isabella 900075448) ============================== */

.lightbox__video {
  max-width: 90vw;
  max-height: 80vh;
  border-radius: var(--radius-md, 0.375rem);
  background-color: #000;
}

.lightbox__thumb--video {
  position: relative;
}

.lightbox__thumb-play {
  position: absolute;
  inset: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  font-size: 0.625rem;
  color: #fff;
  text-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
  pointer-events: none;
}

/* ============================== Safe areas (tq-9394; A206's recipe, isabella 900074726) ============================== */
/* The viewer is full screen on a phone: the chrome clears the status bar / notch and the side insets; everything on the
   bottom edge (the thumbnail strip, the coarse-pointer prev / next on the same line, the zoom pill, the caption bar) clears
   the home indicator. env(safe-area-inset-*) is the only token; each value equals the one above when the inset is 0. */
.lightbox__chrome {
  padding-top: max(calc(var(--spacing, 0.25rem) * 3), env(safe-area-inset-top, 0px));
  padding-left: max(calc(var(--spacing, 0.25rem) * 4), env(safe-area-inset-left, 0px));
  padding-right: max(calc(var(--spacing, 0.25rem) * 4), env(safe-area-inset-right, 0px));
}

.lightbox__thumbs {
  bottom: calc(5.5rem + env(safe-area-inset-bottom, 0px));
}

.lightbox__zoom-controls {
  bottom: calc(1rem + env(safe-area-inset-bottom, 0px));
  right: max(1rem, env(safe-area-inset-right, 0px));
}

.lightbox__caption-bar {
  padding-bottom: calc(1.25rem + env(safe-area-inset-bottom, 0px));
}

.lightbox__prev { left: max(1rem, env(safe-area-inset-left, 0px)); }
.lightbox__next { right: max(1rem, env(safe-area-inset-right, 0px)); }

@media (pointer: coarse) {
  .lightbox__prev,
  .lightbox__next {
    bottom: calc(5.5rem + env(safe-area-inset-bottom, 0px));
  }
}

/* ============================== Phones (tq-9544, A287; romeo's A275 iOS sweep) ============================== */
/* On a touch screen the viewer is laid out in ZONES, so nothing overlaps (layout, not z-index):
     - the counter sits in the chrome's row after the title (the title truncates in its own space; it was drawn over it);
     - portrait: Prev / Next share the strip's row but keep their own side zones (the strip's width leaves them free; it
       covered half of each, so a tap on Next hit a thumbnail);
     - phone landscape (short): the strip drops to the bottom edge, capped so it clears the zoom pill, and Prev / Next move to
       the vertical middle of the side zones;
     - the media fits the VISIBLE box left by the chrome, the strip (or the zoom pill) and the safe areas (the stage is
       padded by them and the media is at most 100% of it), instead of 80vh, which iOS measures on the LARGE viewport.
   Desktop (a fine pointer) is unchanged; the variants keep their own stage rules. */
.lightbox-backdrop {
  --lb-side: max(1rem, env(safe-area-inset-left, 0px), env(safe-area-inset-right, 0px));   /* each side's inset, symmetric */
  --lb-nav: 48px;                                    /* the coarse Prev / Next */
  --lb-strip-h: calc(56px + 1rem + 2px);             /* the coarse strip: a 56px thumb + 0.5rem padding x 2 + its border */
  --lb-zoom-w: 15rem;                                /* the zoom pill: 5 x 32px buttons + the 3rem level + gaps / padding */
  --lb-chrome-h: calc(max(0.75rem, env(safe-area-inset-top, 0px)) + 44px + 0.75rem);   /* the chrome row (a 44px close) */
}

@media (pointer: coarse), (max-width: 48rem) {
  .lightbox__counter {
    position: static;
    -webkit-transform: none;
    -ms-transform: none;
    transform: none;
    -webkit-box-flex: 0;
    -ms-flex: none;
    flex: none;
  }
}

@media (pointer: coarse) {
  .lightbox__thumbs {
    max-width: calc(100% - 2 * (var(--lb-side) + var(--lb-nav) + 0.5rem));
  }

  .lightbox__prev,
  .lightbox__next {
    bottom: calc(5.5rem + env(safe-area-inset-bottom, 0px) + (var(--lb-strip-h) - var(--lb-nav)) / 2);
  }

  .lightbox-backdrop:not(:is(.lightbox--metadata, .lightbox--evidence, .lightbox--compact, .lightbox--compare, .lightbox--minimal)) .lightbox__stage {
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
    padding-top: var(--lb-chrome-h);
    /* no strip: clear the zoom pill (1rem + its 42px) */
    padding-bottom: calc(1rem + 42px + 0.5rem + env(safe-area-inset-bottom, 0px));
  }

  .lightbox-backdrop:not(:is(.lightbox--metadata, .lightbox--evidence, .lightbox--compact, .lightbox--compare, .lightbox--minimal)):has(.lightbox__thumbs:not([hidden])) .lightbox__stage {
    padding-bottom: calc(5.5rem + env(safe-area-inset-bottom, 0px) + var(--lb-strip-h) + 0.5rem);
  }

  .lightbox-backdrop:not(:is(.lightbox--metadata, .lightbox--evidence, .lightbox--compact, .lightbox--compare, .lightbox--minimal)) .lightbox__image,
  .lightbox-backdrop:not(:is(.lightbox--metadata, .lightbox--evidence, .lightbox--compact, .lightbox--compare, .lightbox--minimal)) .lightbox__video {
    max-width: 100%;
    max-height: 100%;
  }
}

@media (pointer: coarse) and (orientation: landscape) and (max-height: 32rem) {
  .lightbox__thumbs {
    bottom: max(0.5rem, env(safe-area-inset-bottom, 0px));
    max-width: calc(100% - 2 * (var(--lb-side) + var(--lb-zoom-w) + 0.5rem));
  }

  .lightbox__prev,
  .lightbox__next {
    top: 50%;
    bottom: auto;
    -webkit-transform: translateY(-50%);
    -ms-transform: translateY(-50%);
    transform: translateY(-50%);
  }

  .lightbox-backdrop:not(:is(.lightbox--metadata, .lightbox--evidence, .lightbox--compact, .lightbox--compare, .lightbox--minimal)) .lightbox__stage {
    padding-inline: calc(var(--lb-side) + var(--lb-nav) + 0.5rem);
  }

  .lightbox-backdrop:not(:is(.lightbox--metadata, .lightbox--evidence, .lightbox--compact, .lightbox--compare, .lightbox--minimal)):has(.lightbox__thumbs:not([hidden])) .lightbox__stage {
    padding-bottom: calc(max(0.5rem, env(safe-area-inset-bottom, 0px)) + var(--lb-strip-h) + 0.5rem);
  }
}   /* tq-9385 (A231): THE lightbox, imported in place (v1 canonical; the app copy is gone) */
/* ==========================================================================
   Component: Confirmation dialog  ·  ADS 13 Overlays · L3 · DERIVE
   --------------------------------------------------------------------------
   A focused, blocking alertdialog for a single decision — the UUI "featured
   icon + headline + supporting text + two actions" confirm pattern, themed by
   intent (danger / warning / info / success). Complements the low-level
   `confirm.js` helper: this is the presentation surface, usable statically in
   markup OR promoted imperatively via `Scripts/components/confirm-dialog.js`
   (window.HawkConfirm → Promise<boolean>).

   SOURCE — ADOPT (tq-8581, REINLY-DS C11). The LOOK is the Reinly app's own
   confirm (#rnly-confirm-modal, measured as served, light + dark, 1440 / 390):
   a 400px modal card, a plain intent glyph (no halo tile), a centred 16/600
   title over a 13px secondary consequence line, and natural-width Cancel +
   action buttons, centred. The ENGINE is the DS modal driver: the dialog is a
   `.modal`, so the layer, the ONE plain scrim (.modal-overlay, tq-8221), the
   stacking over other modals, focus and Escape all come from modal.css /
   modal.js. The ONLY colour beyond the neutral surface is the intent.

   TAXONOMY (never narrowed):
     Intents  --danger (default for destructive) · --warning · --info · --success
     Sizes    --sm · --md (default)
     Layouts  --center (default) · --start
     States   .show (open, set by the driver) · .is-loading (action pending)

   Anatomy (what HawkConfirm renders):
     .modal.confirm.confirm--<intent>.confirm--center   role="alertdialog" aria-modal (the driver's layer)
       .modal-overlay                 the one plain scrim (the driver keeps ONE visible across a stack)
       .modal-dialog
         .modal-content.confirm__dialog   the panel
         .confirm__featured           the intent glyph
         .confirm__title
         .confirm__body
         .confirm__footer
           button.btn-secondary       cancel
           button.btn-primary|danger  the confirming action
   ========================================================================== */

.confirm {
  --confirm-accent-fg: var(--text-danger);           /* the intent glyph (default: danger) */
  --confirm-focus: var(--focus-ring);
}

/* The panel — the app's confirm card. Two classes, so it wins over .modal-content (app or DS copy) wherever both apply;
   the bare .confirm__dialog is the static docs surface. */
.confirm__dialog,
.modal-content.confirm__dialog {
  position: relative;
  width: 100%;
  max-width: 25rem;                                  /* --md: 400px */
  height: auto;
  background: var(--bg-modal);
  color: var(--text-modal);
  border: 1px solid var(--border-modal);
  border-radius: var(--radius-xl);
  -webkit-box-shadow: none;
  box-shadow: none;
  padding: 1.5rem;
  text-align: left;
}
.confirm--sm .confirm__dialog { max-width: 22rem; padding: 1.25rem; }

/* The intent glyph — plain, no tile / halo */
.confirm__featured {
  display: block;
  margin-bottom: 1rem;
  font-size: 1.75rem;
  line-height: 2.5rem;
  letter-spacing: -0.01em;                            /* the app glyph's text-3xl tracking */
  color: var(--confirm-accent-fg);
}
.confirm__featured > i { line-height: inherit; }   /* the glyph's own line box = the row (Font Awesome sets 1) */

.confirm__title {
  margin: 0 0 0.5rem;
  font-size: 1rem;
  font-weight: 600;
  line-height: 1.5rem;
  color: var(--text-primary);
}
.confirm__body {
  margin: 0 0 1.5rem;
  font-size: 0.8125rem;
  line-height: 1.5rem;
  color: var(--text-secondary);
}
.confirm__footer {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  gap: 0.75rem;
}
.confirm__footer > * { -webkit-box-flex: 0; -ms-flex: 0 0 auto; flex: 0 0 auto; }
/* Labels that don't fit side by side (long text, a 320px phone): full-width stacked rows, never truncated. The
   driver measures and sets .is-stacked. */
.confirm__footer.is-stacked { -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; }
.confirm__footer.is-stacked > * { width: 100%; white-space: normal; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; }

/* Caller content under the body (a detail line, an optional reason field): reads left-aligned in a centred dialog. */
.confirm__content { margin: -0.75rem 0 1.5rem; text-align: left; }
.confirm__content:empty { display: none; }

.confirm--center .confirm__dialog { text-align: center; }
.confirm--center .confirm__footer { -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; }
.confirm--start .confirm__footer { -webkit-box-pack: end; -ms-flex-pack: end; justify-content: flex-end; }

/* Phones (isabella 900053955, option 1): a confirm is a short interruption, so it stays a centred card, never the
   full-screen modal sheet: min(400px, 100vw - 32px), centred both ways inside the safe-area insets, lifted by the
   --shadow-xl the app's modal cards carry below sm; same padding / radius / glyph / type as desktop. */
@media (max-width: 639.98px) {
  .modal.confirm {
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
    padding: max(1rem, env(safe-area-inset-top, 0px)) max(1rem, env(safe-area-inset-right, 0px))
             max(1rem, env(safe-area-inset-bottom, 0px)) max(1rem, env(safe-area-inset-left, 0px));
  }
  .modal.confirm .modal-dialog { height: 100%; width: 100%; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; padding: 0; }
  .confirm__dialog,
  .modal-content.confirm__dialog {
    width: min(25rem, calc(100vw - 2rem));
    max-width: min(25rem, calc(100vw - 2rem));
    max-height: calc(100dvh - 2rem);
    overflow-y: auto;
    border-radius: var(--radius-xl);
    -webkit-box-shadow: var(--shadow-xl);
    box-shadow: var(--shadow-xl);
  }
}

/* === Intents — recolour the glyph (the action's colour comes from its button class) === */
.confirm--danger  { --confirm-accent-fg: var(--text-danger); }
.confirm--warning { --confirm-accent-fg: var(--text-warning); }
.confirm--info    { --confirm-accent-fg: var(--text-info); }
.confirm--success { --confirm-accent-fg: var(--text-success); }

/* Pending state — the confirming button stops taking clicks */
.confirm.is-loading .confirm__footer button[data-confirm-go] { pointer-events: none; opacity: 0.75; }

/* Focus ring (brand accent, single 2px) */
.confirm__dialog :focus-visible { outline: 2px solid var(--confirm-focus); outline-offset: 2px; }

/* --------------------------------------------------------------------------
   TAXONOMY: intents --danger(default) --warning --info --success ·
   sizes --sm --md · layout --center --start · state .show (driver) .is-loading
   -------------------------------------------------------------------------- */ /* tq-8581 (C11): THE confirm (HawkConfirm), imported in place */

/*Status*/
/* =========================================================
   Spinner Animations
   ========================================================= */

@-webkit-keyframes rotate {
  100% {
    -webkit-transform: rotate(360deg);
    transform: rotate(360deg);
  }
}

@keyframes rotate {
  100% {
    -webkit-transform: rotate(360deg);
    transform: rotate(360deg);
  }
}

@-webkit-keyframes dash {
  0% {
    stroke-dasharray: 1 100;
    stroke-dashoffset: 0;
  }

  50% {
    stroke-dasharray: 65 100;
    stroke-dashoffset: -15;
  }

  100% {
    stroke-dasharray: 65 100;
    stroke-dashoffset: -100;
  }
}

@keyframes dash {
  0% {
    stroke-dasharray: 1 100;
    stroke-dashoffset: 0;
  }

  50% {
    stroke-dasharray: 65 100;
    stroke-dashoffset: -15;
  }

  100% {
    stroke-dasharray: 65 100;
    stroke-dashoffset: -100;
  }
}


/* =========================================================
   SVG Spinner
   ========================================================= */

.spinner {
  width: var(--size-spinner);
  height: var(--size-spinner);
  color: var(--text-spinner);
  display: block;
  -webkit-transform-origin: 50% 50%;
  -ms-transform-origin: 50% 50%;
  transform-origin: 50% 50%;
  -webkit-animation: rotate var(--duration-spinner-rotate) linear infinite;
  animation: rotate var(--duration-spinner-rotate) linear infinite;
}

/* Faint base circle */

/* Animated arc */
.spinner-ring {
  stroke: currentColor;
  stroke-width: var(--stroke-spinner);
  stroke-linecap: round;
  shape-rendering: geometricPrecision;
  -webkit-animation: dash var(--duration-spinner-dash) var(--ease-spinner-dash) infinite;
  animation: dash var(--duration-spinner-dash) var(--ease-spinner-dash) infinite;
}


/* =========================================================
   Size Variants
   ========================================================= */

.spinner[data-size="sm"] {
  --size-spinner: var(--size-spinner-sm);
  --stroke-spinner: var(--stroke-spinner-sm);
}

.spinner[data-size="md"] {
  --size-spinner: var(--size-spinner-md);
  --stroke-spinner: var(--stroke-spinner-md);
}

.spinner[data-size="lg"] {
  --size-spinner: var(--size-spinner-lg);
  --stroke-spinner: var(--stroke-spinner-lg);
}

.spinner[data-size="xl"] {
  --size-spinner: var(--size-spinner-xl);
  --stroke-spinner: var(--stroke-spinner-xl);
}


/* =========================================================
   Reduced Motion
   ========================================================= */

@media (prefers-reduced-motion: reduce) {
  .spinner {
    -webkit-animation: none;
    animation: none;
  }

  .spinner-ring {
    -webkit-animation: none;
    animation: none;
    stroke-dasharray: 65 100;
    stroke-dashoffset: -25;
  }
}
/* ========================================
   Component: Skeleton
   ======================================== */

@-webkit-keyframes shimmer {
  0% { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}

@keyframes shimmer {
  0% { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}

.skeleton {
  display: block;
  border-radius: 0.25rem;
  background: linear-gradient(
    90deg,
    var(--bg-skeleton, var(--bg-tertiary)) 25%,
    var(--bg-skeleton-highlight, var(--bg-secondary)) 37%,
    var(--bg-skeleton, var(--bg-tertiary)) 63%
  );
  background-size: 200% 100%;
  -webkit-animation: shimmer 1.5s ease-in-out infinite;
  animation: shimmer 1.5s ease-in-out infinite;
}

.skeleton--text {
  height: 0.75rem;
  width: 100%;
  border-radius: 0.25rem;
}

.skeleton--text-sm {
  height: 0.625rem;
  width: 75%;
  border-radius: 0.25rem;
}

.skeleton--text-lg {
  height: 1rem;
  width: 100%;
  border-radius: 0.25rem;
}

.skeleton--heading {
  height: 1.5rem;
  width: 66.666667%;
  border-radius: 0.25rem;
}

.skeleton--avatar {
  border-radius: 9999px;
  width: 40px;
  height: 40px;
}

.skeleton--avatar-sm {
  border-radius: 9999px;
  width: 32px;
  height: 32px;
}

.skeleton--avatar-lg {
  border-radius: 9999px;
  width: 48px;
  height: 48px;
}

.skeleton--button {
  height: 2rem;
  width: 6rem;
  border-radius: 0.375rem;
}

.skeleton--card {
  height: 10rem;
  width: 100%;
  border-radius: 0.5rem;
}

.skeleton--image {
  width: 100%;
  border-radius: 0.5rem;
  aspect-ratio: 16/9;
}

.skeleton--thumbnail {
  border-radius: 0.375rem;
  width: 100%;
  height: 100%;
}

.skeleton--thumbnail-sm {
  border-radius: 0.375rem;
  width: 32px;
  height: 32px;
}

.skeleton--table-row {
  height: 2.5rem;
  width: 100%;
  border-radius: 0.25rem;
}

.skeleton--circle {
  border-radius: 9999px;
}

/* =========================================================
   Image shimmer loading — fade-in on load
   ========================================================= */

/* Thumbnail buttons show shimmer background while image loads.
   Only apply the gradient when the container actually has an <img>. */
[data-product-thumb]:has(img) {
  background: linear-gradient(
    90deg,
    var(--bg-skeleton, var(--bg-tertiary)) 25%,
    var(--bg-skeleton-highlight, var(--bg-secondary)) 37%,
    var(--bg-skeleton, var(--bg-tertiary)) 63%
  );
  background-size: 200% 100%;
  overflow: hidden;
}

[data-product-thumb]:has(img.is-loading) {
  -webkit-animation: shimmer 1.5s ease-in-out infinite;
  animation: shimmer 1.5s ease-in-out infinite;
}

[data-product-thumb] img {
  -webkit-transition: opacity 200ms ease;
  transition: opacity 200ms ease;
}

[data-product-thumb] img.is-loading {
  opacity: 0;
}

@media (prefers-reduced-motion: reduce) {
  .skeleton {
    -webkit-animation: none;
    animation: none;
  }

  [data-product-thumb]:has(img.is-loading) {
    -webkit-animation: none;
    animation: none;
  }
}
/* ==========================================================================
   Alerts — Phase-3c rebuild
   FAITHFUL 1:1 Untitled UI (application/alerts + shared-assets/banner-*),
   keeping UUI's indigo/violet accent.
   ==========================================================================

   UUI STRUCTURE ADOPTED (FAN-OUT-RULES §1 — ring over border, no double-edge):
   - The card carries a subtle INSET RING (box-shadow) + shadow-xs, NEVER a CSS
     border → `ring-1 ring-inset` becomes `box-shadow: inset 0 0 0 1px …`.
   - NEUTRAL surface by default (UUI `AlertFloating color="default"` = bg-primary_alt);
     the intent lives in a coloured FEATURED-ICON tile, not a full colour wash.
   - radius = `rounded-xl` (UUI alert card), generous `p-4`, `text-sm` type ramp:
     title `font-semibold text-secondary`, message `text-tertiary`.
   - Close button sits top-right on dismissible alerts (UUI `absolute top-2 right-2`).
   - Full-width banner = neutral `secondary` surface + bottom hairline (AlertFullWidth);
     floating/toast banner = shadow-lg + hairline ring (shared-assets/banner-*).
   - SINGLE 2px focus ring in UUI's accent (`--border-focus`), NO offset halo (F6).

   OUR TAXONOMY LAYERED ON TOP (never narrowed — FAN-OUT-RULES §5):
   - 4 INTENTS: info · success · warning · danger.  `info` has NO UUI analog — KEPT
     (never-narrow rule 1; shared across alerts/badges/dropdown-items/toasts).
   - 5 FLAVOURS (surface treatment, composes with an intent):
       subtle (default)  neutral card + coloured featured icon + faint tone ring
       solid             filled high-contrast surface (UUI "on-brand" text)
       outline           transparent fill + tone ring
       glass             frosted backdrop-blur (over imagery/colour)
       strip             neutral card + coloured left accent bar (Notion/Linear)
   - LAYOUT modifiers (intent-agnostic): banner · inline · compact · sm · lg · toast · featured.
   - FEATURE flags: loading (icon → spinner) · dismissible · progress track.

   TOKEN MODEL — the base consumes a small set of local hooks; every intent/flavour
   re-points them. Pure source-order cascade — no `!important`, no per-cell matrix.
   Reuses the EXISTING alert hook names so the Lead-owned dark-mode solid overrides
   (theme-dark.css) keep applying unchanged:
     --bg-alert (surface) · --border-alert (ring) · --text-alert (body)
     --text-alert-title (title) · --icon-alert (accent: glyph + link)
     --bg-alert-icon / --border-alert-icon (featured-icon tile)
     --text-alert-dismiss / --bg-alert-dismiss-hover (close button)
   All colours resolve through theme-aware semantic tokens (light + dark), never literals.
   ========================================================================== */


/* ==========================================================================
   1 · BASE  (UUI AlertFloating, color="default" — neutral card + featured icon)
   ========================================================================== */
.alert {   /* tq-9391 (A237): the app's LIVE values (the A207 method); the DS v2 body is docs-only (apps/docs.css) */   display: -webkit-box;   display: -ms-flexbox;   display: flex;   -webkit-box-align: start;   -ms-flex-align: start;   align-items: flex-start;   gap: 0.75rem;   border-radius: 0.5rem;   border-width: 1px;   padding-left: 1rem;   padding-right: 1rem;   padding-top: 0.75rem;   padding-bottom: 0.75rem;   font-size: 0.75rem;   line-height: 1rem;
  color: var(--text-alert, var(--text-primary));
  background-color: var(--bg-alert, var(--bg-surface));
  border-color: var(--border-alert, var(--border-primary));
}

/* --- Featured-icon tile (UUI FeaturedIcon "light" — tone tint + tone glyph) --- */
.alert__icon {   position: relative;   display: -webkit-box;   display: -ms-flexbox;   display: flex;   -ms-flex-negative: 0;   flex-shrink: 0;   -webkit-box-align: center;   -ms-flex-align: center;   align-items: center;   -webkit-box-pack: center;   -ms-flex-pack: center;   justify-content: center;   line-height: 1;
  width: 2.25rem;                 /* 36px — UUI md featured icon */
  height: 2.25rem;
  border-radius: var(--radius-lg);
  font-size: 1.125rem;            /* glyph ≈ 50% of the tile (UUI ratio) */
  color: var(--icon-alert);
  background-color: var(--bg-alert-icon);
  -webkit-box-shadow: inset 0 0 0 1px var(--border-alert-icon);
  box-shadow: inset 0 0 0 1px var(--border-alert-icon);
}

  /* An <svg> icon fills the same footprint as a FA glyph */
  .alert__icon > svg { width: 1.125rem; height: 1.125rem; fill: currentColor; }

.alert__content {   display: -webkit-box;   display: -ms-flexbox;   display: flex;   min-width: 0px;   -webkit-box-flex: 1;   -ms-flex: 1 1 0%;   flex: 1 1 0%;   -webkit-box-orient: vertical;   -webkit-box-direction: normal;   -ms-flex-direction: column;   flex-direction: column;   gap: 0.125rem;
}

.alert__title {   font-weight: 600;
  color: var(--text-alert-title);
}

.alert__message {   font-size: 0.8125rem;   line-height: 1.5rem;
  color: var(--text-alert);
}

  /* Inline links inside the body pick up the accent + UUI underline treatment */
  /* R4 (Pavel #207/#213) — BLUE IS ONLY EVER AN UNDERLINE. The text takes the per-theme
     max-contrast foreground; the alert's intent colour moves onto the decoration. Previously the
     intent colour was the TEXT and the underline was a faded currentColor, i.e. exactly inverted. */
  .alert__message a,
  .alert__message .alert__link {
    color: var(--text-primary);
    text-decoration: underline;
    text-underline-offset: 3px;
    text-decoration-color: var(--icon-alert);
  }

/* --- Action row (host drops in .btn-* buttons or lightweight .alert__link) --- */
.alert__actions {   margin-top: 0.625rem;   display: -webkit-box;   display: -ms-flexbox;   display: flex;   -ms-flex-wrap: wrap;   flex-wrap: wrap;   -webkit-box-align: center;   -ms-flex-align: center;   align-items: center;   gap: 0.75rem;
}

/* Text-link action (UUI link-gray / link-color button) */
.alert__link {   display: -webkit-inline-box;   display: -ms-inline-flexbox;   display: inline-flex;   cursor: pointer;   -webkit-box-align: center;   -ms-flex-align: center;   align-items: center;   gap: 0.375rem;   font-weight: 600;
  /* R4 — text is never the intent colour; the intent colour is the underline.
     --text-primary is the per-theme foreground (neutral-900 light / neutral-100 dark), so this
     stays correct when the theme is retuned; a hex would not. All four states below keep the text
     at max contrast and vary only opacity and the decoration. */
  color: var(--text-primary);
  text-decoration-line: underline;
  text-decoration-color: var(--icon-alert);
  text-decoration-thickness: from-font;
  text-underline-offset: 3px;
  background: transparent;
  border: 0;
  -webkit-transition: opacity var(--duration-fast) var(--ease-in-out),
              text-decoration-color var(--duration-fast) var(--ease-in-out);
  transition: opacity var(--duration-fast) var(--ease-in-out),
              text-decoration-color var(--duration-fast) var(--ease-in-out);
}
  .alert__link:hover { opacity: 0.82; }
  .alert__link:active { opacity: 0.7; }
  .alert__link:focus-visible {
    outline: 2px solid var(--focus-ring);
    outline-offset: 2px;
    border-radius: var(--radius-xs);
  }
  /* A neutral (dismiss) link uses the muted tone */
  .alert__link--muted { color: var(--text-alert); }

/* Right-aligned trailing slot (CTA / value / meta) */
.alert__trailing {   margin-left: auto;   display: -webkit-box;   display: -ms-flexbox;   display: flex;   -ms-flex-negative: 0;   flex-shrink: 0;   -webkit-box-align: center;   -ms-flex-align: center;   align-items: center;   gap: 0.5rem;
}

/* --- Dismiss (close) button --- */
.alert__dismiss {   display: -webkit-inline-box;   display: -ms-inline-flexbox;   display: inline-flex;   -ms-flex-negative: 0;   flex-shrink: 0;   cursor: pointer;   -webkit-box-align: center;   -ms-flex-align: center;   align-items: center;   -webkit-box-pack: center;   -ms-flex-pack: center;   justify-content: center;   border-radius: 0.375rem;   padding: 0.375rem;
  color: var(--text-alert-dismiss);
  background: transparent;
  border: 0;
  -webkit-transition: background-color var(--duration-fast) var(--ease-in-out),
              color var(--duration-fast) var(--ease-in-out);
  transition: background-color var(--duration-fast) var(--ease-in-out),
              color var(--duration-fast) var(--ease-in-out);
}
  .alert__dismiss:hover {
    background-color: var(--bg-alert-dismiss-hover);
    color: var(--text-alert-title);
  }
  .alert__dismiss:focus-visible {
    outline: 2px solid var(--focus-ring);
    outline-offset: 2px;
  }

/* --- Progress track (upload / countdown) — pinned to the card's bottom edge --- */
.alert__progress {   position: absolute;   left: 0px;   right: 0px;   bottom: 0px;   height: 0.25rem;   overflow: hidden;
  background-color: var(--alert-progress-track);
}
.alert__progress-fill {   height: 100%;
  width: var(--progress, 0%);
  background-color: var(--icon-alert);
  -webkit-transition: width var(--duration-normal, 300ms) var(--ease-out, ease-out);
  transition: width var(--duration-normal, 300ms) var(--ease-out, ease-out);
}


/* ==========================================================================
   2 · INTENTS × SUBTLE (default)  — neutral card, tone featured icon, tone ring
   The intent reads from the coloured FEATURED-ICON tile + a faint tone card ring
   (UUI AlertFloating with a coloured icon). Surface stays neutral so the tile
   always contrasts — light AND dark (tokens are theme-swapped).
   ========================================================================== */
.alert--info {   /* tq-9391 (A237): the app's LIVE values (the A207 method); the DS v2 body is docs-only (apps/docs.css) */
  --text-alert: var(--text-info-solid, var(--utility-blue-800));
  --bg-alert: var(--bg-info-subtle, var(--utility-blue-50));
  --border-alert: var(--border-info-subtle, var(--utility-blue-200));
  --icon-alert: var(--text-info, var(--utility-blue-600));
}

.alert--success {   /* tq-9391 (A237): the app's LIVE values (the A207 method); the DS v2 body is docs-only (apps/docs.css) */
  --text-alert: var(--text-success-solid, var(--utility-green-800));
  --bg-alert: var(--bg-success-subtle, var(--utility-green-50));
  --border-alert: var(--border-success-subtle, var(--utility-green-200));
  --icon-alert: var(--text-success, var(--utility-green-600));
}

.alert--warning {   /* tq-9391 (A237): the app's LIVE values (the A207 method); the DS v2 body is docs-only (apps/docs.css) */
  --text-alert: var(--text-warning-solid, var(--utility-amber-800));
  --bg-alert: var(--bg-warning-subtle, var(--utility-amber-50));
  --border-alert: var(--border-warning-subtle, var(--utility-amber-200));
  --icon-alert: var(--text-warning, var(--utility-amber-600));
}

.alert--danger {
  --border-alert: var(--border-danger-subtle);
  --icon-alert: var(--text-danger);
  --bg-alert-icon: var(--bg-danger-subtle);
  --border-alert-icon: var(--border-danger-subtle);
}


/* ==========================================================================
   3 · FLAVOUR — SOLID  (filled high-contrast surface; UUI on-brand text)
   Title tracks body (`var(--text-alert)`) so the Lead-owned dark solid
   overrides in theme-dark.css (which set --text-alert) flow through unchanged.
   ========================================================================== */
.alert--info-solid,
.alert--success-solid,
.alert--warning-solid,
.alert--danger-solid {
  --text-alert-title: var(--text-alert);
  --border-alert: transparent;
  --bg-alert-icon: color-mix(in oklch, transparent, var(--text-alert) 16%);
  --border-alert-icon: transparent;
  --text-alert-dismiss: color-mix(in oklch, transparent, var(--text-alert) 78%);
  --bg-alert-dismiss-hover: color-mix(in oklch, transparent, var(--text-alert) 18%);
  --alert-progress-track: color-mix(in oklch, transparent, var(--text-alert) 22%);
}

.alert--info-solid {
  --bg-alert: var(--bg-info-solid);
  --text-alert: var(--text-on-brand);
  --icon-alert: var(--text-on-brand);
}

.alert--success-solid {
  --bg-alert: var(--bg-success-solid);
  --text-alert: var(--text-on-brand);
  --icon-alert: var(--text-on-brand);
}

.alert--warning-solid {
  /* Amber surface takes dark ink for AA contrast (both themes) */
  --bg-alert: var(--bg-warning-solid);
  --text-alert: var(--utility-amber-950);
  --icon-alert: var(--utility-amber-950);
  --text-alert-dismiss: color-mix(in oklch, transparent, var(--utility-amber-950) 72%);
  --bg-alert-dismiss-hover: color-mix(in oklch, transparent, var(--utility-amber-950) 12%);
  --alert-progress-track: color-mix(in oklch, transparent, var(--utility-amber-950) 18%);
}

.alert--danger-solid {
  --bg-alert: var(--bg-danger-solid);
  --text-alert: var(--text-on-brand);
  --icon-alert: var(--text-on-brand);
}


/* ==========================================================================
   4 · FLAVOUR — OUTLINE  (transparent fill + tone ring; dense layouts)
   ========================================================================== */
.alert--info-outline,
.alert--success-outline,
.alert--warning-outline,
.alert--danger-outline {
  --bg-alert: transparent;
  -webkit-box-shadow: inset 0 0 0 1px var(--border-alert);
  box-shadow: inset 0 0 0 1px var(--border-alert);   /* ring only, no shadow-xs */
}

.alert--info-outline {
  --border-alert: var(--border-info);
  --icon-alert: var(--text-info);
  --text-alert-title: var(--text-info-solid);
  --bg-alert-icon: var(--bg-info-subtle);
  --border-alert-icon: var(--border-info-subtle);
}

.alert--success-outline {
  --border-alert: var(--border-success);
  --icon-alert: var(--text-success);
  --text-alert-title: var(--text-success-solid);
  --bg-alert-icon: var(--bg-success-subtle);
  --border-alert-icon: var(--border-success-subtle);
}

.alert--warning-outline {
  --border-alert: var(--border-warning);
  --icon-alert: var(--text-warning);
  --text-alert-title: var(--text-warning-solid);
  --bg-alert-icon: var(--bg-warning-subtle);
  --border-alert-icon: var(--border-warning-subtle);
}

.alert--danger-outline {
  --border-alert: var(--border-danger);
  --icon-alert: var(--text-danger);
  --text-alert-title: var(--text-danger-solid);
  --bg-alert-icon: var(--bg-danger-subtle);
  --border-alert-icon: var(--border-danger-subtle);
}


/* ==========================================================================
   5 · FLAVOUR — GLASS  (frosted backdrop blur; layer over imagery / colour)
   Own translucent surface + hairline; falls back to the tint where backdrop
   filters are unsupported.
   ========================================================================== */
.alert--info-glass,
.alert--success-glass,
.alert--warning-glass,
.alert--danger-glass,
.alert--glass,
.alert--glass-dark {
  backdrop-filter: blur(14px) saturate(140%);
  -webkit-box-shadow:
    inset 0 0 0 1px var(--border-alert),
    inset 0 1px 0 0 color-mix(in oklch, transparent, var(--color-white) 15%),
    var(--shadow-sm);
  box-shadow:
    inset 0 0 0 1px var(--border-alert),
    inset 0 1px 0 0 color-mix(in oklch, transparent, var(--color-white) 15%),
    var(--shadow-sm);
}

.alert--info-glass {
  --bg-alert: color-mix(in oklch, var(--bg-info-subtle) 72%, transparent);
  --border-alert: color-mix(in oklch, var(--text-info) 30%, transparent);
  --text-alert-title: var(--text-info-solid);
  --icon-alert: var(--text-info);
  --bg-alert-icon: var(--bg-info-subtle);
  --border-alert-icon: var(--border-info-subtle);
}

.alert--success-glass {
  --bg-alert: color-mix(in oklch, var(--bg-success-subtle) 72%, transparent);
  --border-alert: color-mix(in oklch, var(--text-success) 30%, transparent);
  --text-alert-title: var(--text-success-solid);
  --icon-alert: var(--text-success);
  --bg-alert-icon: var(--bg-success-subtle);
  --border-alert-icon: var(--border-success-subtle);
}

.alert--warning-glass {
  --bg-alert: color-mix(in oklch, var(--bg-warning-subtle) 72%, transparent);
  --border-alert: color-mix(in oklch, var(--text-warning) 30%, transparent);
  --text-alert-title: var(--text-warning-solid);
  --icon-alert: var(--text-warning);
  --bg-alert-icon: var(--bg-warning-subtle);
  --border-alert-icon: var(--border-warning-subtle);
}

.alert--danger-glass {
  --bg-alert: color-mix(in oklch, var(--bg-danger-subtle) 72%, transparent);
  --border-alert: color-mix(in oklch, var(--text-danger) 30%, transparent);
  --text-alert-title: var(--text-danger-solid);
  --icon-alert: var(--text-danger);
  --bg-alert-icon: var(--bg-danger-subtle);
  --border-alert-icon: var(--border-danger-subtle);
}

/* Neutral glass — for use on intent-coloured or photographic backgrounds */
.alert--glass {
  --bg-alert: color-mix(in oklch, var(--bg-surface) 78%, transparent);
  --border-alert: color-mix(in oklch, var(--border-primary) 80%, transparent);
  --bg-alert-icon: color-mix(in oklch, var(--bg-primary-subtle) 80%, transparent);
}

.alert--glass-dark {
  --bg-alert: var(--alpha-black-50);
  --border-alert: color-mix(in oklch, transparent, var(--color-white) 14%);
  --text-alert: var(--alpha-white-80);
  --text-alert-title: var(--alpha-white-100);
  --icon-alert: var(--alpha-white-100);
  --bg-alert-icon: color-mix(in oklch, transparent, var(--color-white) 14%);
  --border-alert-icon: transparent;
  --text-alert-dismiss: var(--alpha-white-80);
  --bg-alert-dismiss-hover: color-mix(in oklch, transparent, var(--color-white) 18%);
}


/* ==========================================================================
   6 · FLAVOUR — STRIP  (neutral card + coloured left accent bar)
   The loud, scannable intent cue without a full colour wash.
   ========================================================================== */
.alert--info-strip,
.alert--success-strip,
.alert--warning-strip,
.alert--danger-strip {
  --bg-alert: var(--bg-surface);
  --border-alert: var(--border-primary);
  border-radius: var(--radius-lg);
  -webkit-box-shadow: inset 0 0 0 1px var(--border-alert), var(--shadow-xs);
  box-shadow: inset 0 0 0 1px var(--border-alert), var(--shadow-xs);
}

  /* The accent bar (pseudo-element so it hugs the rounded corners) */
  .alert--info-strip::before,
  .alert--success-strip::before,
  .alert--warning-strip::before,
  .alert--danger-strip::before {
    content: "";
    pointer-events: none;
    position: absolute;
    top: 0px;
    bottom: 0px;
    left: 0px;
    width: 0.25rem;
    background-color: var(--icon-alert);
  }

.alert--info-strip    { --icon-alert: var(--text-info);    --bg-alert-icon: var(--bg-info-subtle);    --border-alert-icon: var(--border-info-subtle); }
.alert--success-strip { --icon-alert: var(--text-success); --bg-alert-icon: var(--bg-success-subtle); --border-alert-icon: var(--border-success-subtle); }
.alert--warning-strip { --icon-alert: var(--text-warning); --bg-alert-icon: var(--bg-warning-subtle); --border-alert-icon: var(--border-warning-subtle); }
.alert--danger-strip  { --icon-alert: var(--text-danger);  --bg-alert-icon: var(--bg-danger-subtle);  --border-alert-icon: var(--border-danger-subtle); }


/* ==========================================================================
   7 · LAYOUT MODIFIERS  (intent-agnostic — compose with any flavour)
   ========================================================================== */

/* Banner — full-width, no radius, bottom hairline (UUI AlertFullWidth) */
.alert--banner {   border-radius: 0px;
  -webkit-box-shadow: inset 0 -1px 0 0 var(--border-alert);
  box-shadow: inset 0 -1px 0 0 var(--border-alert);
}

/* Toast / floating banner — elevated card, hairline ring (shared-assets/banner-*) */
.alert--toast {
  -webkit-box-shadow: inset 0 0 0 1px var(--border-alert), var(--shadow-lg);
  box-shadow: inset 0 0 0 1px var(--border-alert), var(--shadow-lg);
}

/* Featured — brand-gradient announcement bar (our extension; UUI violet accent) */
.alert--featured {
  --text-alert: var(--alpha-white-80);
  --text-alert-title: var(--alpha-white-100);
  --icon-alert: var(--alpha-white-100);
  --border-alert: transparent;
  --bg-alert-icon: color-mix(in oklch, transparent, var(--color-white) 16%);
  --border-alert-icon: transparent;
  --text-alert-dismiss: var(--alpha-white-80);
  --bg-alert-dismiss-hover: color-mix(in oklch, transparent, var(--color-white) 16%);
  background-image: linear-gradient(
    135deg,
    var(--utility-violet-600) 0%,
    var(--utility-indigo-600) 55%,
    var(--utility-blue-600) 100%
  );
  -webkit-box-shadow: var(--shadow-sm);
  box-shadow: var(--shadow-sm);
}

/* Compact — tighter padding, smaller icon tile */
.alert--compact {   gap: 0.625rem;   padding: 0.75rem;
}
  .alert--compact .alert__icon {
    width: 1.75rem; height: 1.75rem; font-size: 1rem;
  }

/* Size scale */
.alert--sm {   gap: 0.625rem;   padding: 0.75rem;   font-size: 0.75rem;   line-height: 1rem;
}
  .alert--sm .alert__icon { width: 1.75rem; height: 1.75rem; font-size: 1rem; }
  .alert--sm .alert__message {   font-size: 0.75rem;   line-height: 1rem;
}

.alert--lg {   gap: 1rem;   padding: 1.25rem;   font-size: 1rem;   line-height: 1.5rem;
}
  .alert--lg .alert__icon { width: 2.75rem; height: 2.75rem; font-size: 1.375rem; }
  .alert--lg .alert__title {   font-size: 1rem;   line-height: 1.5rem;
}
  .alert--lg .alert__message {   font-size: 0.8125rem;   line-height: 1.5rem;
}

/* Inline — single-line, ultra-compact; icon becomes a bare tone glyph (no tile) */
.alert--inline {   -webkit-box-align: center;   -ms-flex-align: center;   align-items: center;   gap: 0.5rem;   padding-left: 0.75rem;   padding-right: 0.75rem;   padding-top: 0.5rem;   padding-bottom: 0.5rem;   font-size: 0.75rem;   line-height: 1rem;
}
  .alert--inline .alert__icon {
    width: auto; height: auto; padding: 0; font-size: 1rem;
    background: transparent; -webkit-box-shadow: none; box-shadow: none; border-radius: 0;
  }
  .alert--inline .alert__content {   -webkit-box-orient: horizontal;   -webkit-box-direction: normal;   -ms-flex-direction: row;   flex-direction: row;   -webkit-box-align: center;   -ms-flex-align: center;   align-items: center;   gap: 0.5rem;
}
  .alert--inline .alert__title {   margin-bottom: 0px;
}


/* ==========================================================================
   8 · FEATURE FLAGS
   ========================================================================== */

/* Dismissible — reserve room + pin the close button to the top-right (UUI) */
.alert--dismissible {   padding-right: 3rem;
}
  .alert--dismissible > .alert__dismiss {   position: absolute;   right: 0.5rem;   top: 0.5rem;
}

/* Loading — the icon tile drops its chrome and the glyph spins.
   The loading alert now hosts OUR dynamic `.spinner` SVG element (Pavel spinner
   sweep), which self-animates — so the icon tile is only neutralised here; the
   spin cadence comes from the spinner itself (no wrapper rotation, which would
   compound with the SVG's own). */
.alert--loading .alert__icon {
  background: transparent;
  -webkit-box-shadow: none;
  box-shadow: none;
}

/* Dismissing — exit transition driven by alert-wire.js, then the node is removed
   (instant under prefers-reduced-motion, see §9). */
.alert.is-dismissing {
  -webkit-transition: opacity var(--duration-fast) var(--ease-in-out),
              -webkit-transform var(--duration-fast) var(--ease-in-out);
  transition: opacity var(--duration-fast) var(--ease-in-out),
              -webkit-transform var(--duration-fast) var(--ease-in-out);
  transition: opacity var(--duration-fast) var(--ease-in-out),
              transform var(--duration-fast) var(--ease-in-out);
  transition: opacity var(--duration-fast) var(--ease-in-out),
              transform var(--duration-fast) var(--ease-in-out),
              -webkit-transform var(--duration-fast) var(--ease-in-out);
  opacity: 0;
  -webkit-transform: translateY(-4px);
  -ms-transform: translateY(-4px);
  transform: translateY(-4px);
}


/* ==========================================================================
   9 · REDUCED MOTION
   ========================================================================== */
@media (prefers-reduced-motion: reduce) {
  .alert,
  .alert__link,
  .alert__dismiss,
  .alert__progress-fill,
  .alert.is-dismissing {
    -webkit-transition: none;
    transition: none;
  }
  .alert.is-dismissing {
    /* collapse instantly rather than animating out */
    opacity: 0;
    -webkit-transform: none;
    -ms-transform: none;
    transform: none;
  }
  .alert--loading .alert__icon {
    -webkit-animation: none;
    animation: none;
  }
}   /* tq-9391 (A237): THE alert, imported in place (the app twin is gone; the A207 / A231 method) */

/*Utility*/
/* ==========================================================================
   FILTER SIDEBAR (collapsible side panel)
   - Uses width transition instead of display toggle for smooth animation.
   - Collapsed: width 0, overflow hidden.
   - Open: width var(--width-filter-sidebar, 280px).
   ========================================================================== */

/* Lock inner content width so it doesn't reflow during width transition */

/* Disable transitions during drag resize */

/* Border inside the sidebar (right-aligned sidebars get right border) */

/* Left-side border for right-aligned sidebars */

/* Resize drag handle */

/* Filter sidebar action buttons (min, max, reset)
   Centered on the resize edge (like split-pane divider actions).
   Revealed by JS proximity detection (.is-actions-nearby on sidebar). */

/* Reveal via proximity detection (JS toggles .is-actions-nearby on the sidebar) */

/* Hide during drag resize */

/* Individual action button */

/* Disabled state — sidebar already at min/max limit */

/* Mobile: filter sidebar becomes full-screen overlay */


/* ==========================================================================
   FILTER PANEL (container)
   ========================================================================== */


/* ==========================================================================
   FILTER SIDEBAR — Small-size form controls
   All inputs, selects, textareas, and buttons inside the sidebar use
   the compact size so filter panels stay dense and space-efficient.
   ========================================================================== */


/* ==========================================================================
   FILTER ITEM (leaf row)
   ========================================================================== */

  /* Active (leaf) */

  /* Selected (opt-in; e.g., aria-selected for listbox patterns) */

  /* Pressed (mousedown) */

  /* Disabled */

/* Optional: no-hover support at container level */


/* ==========================================================================
   FILTER TOGGLE (header row that controls expand/collapse)
   - Use: .filter-item.filter-toggle with data-bs-target
   ========================================================================== */

/* Chevron icon (left-side angle arrow) */

/* Rotate chevron when expanded */

/* Hover */

/* Make the header feel pressed without shifting */

/* Loading state — spinner replaces chevron */

/* "open" styling (when expanded) */


/* ==========================================================================
   FILTER SECTION (wrapper around toggle + body)
   ========================================================================== */


/* ==========================================================================
   FILTER SECTION BODY (expandable area below toggle)
   - Each section body is its own scroll container so list items
     never bleed behind the toggle header above.
   ========================================================================== */

/* Search input pinned below the sticky toggle header */

/* Clear button inside filter search input */


/* ==========================================================================
   COLLAPSE BODY (legacy — kept for backwards compatibility)
   ========================================================================== */

/* Optional inner surface for content */

  /* Density options for body */
  .filter-collapse-inner.is-compact {
  padding: 0.5rem;
}

/* A common "stack" layout inside collapse bodies */

/* If you place nested filter-items inside collapse */

/* Optional focus-within highlight for collapse bodies containing inputs */


/* ==========================================================================
   FILTER GROUP (labels + grouping)
   ========================================================================== */


/* ==========================================================================
   FILTER MENU (thin section header / strip)
   ========================================================================== */


/* ==========================================================================
   OPTIONAL: Intent rows (quick semantic emphasis)
   ========================================================================== */

.filter-item.is-warning {
  background-color: var(--bg-filter-warning, var(--bg-warning-subtle));
}

.filter-item.is-info {
  background-color: var(--bg-filter-info, var(--bg-info-subtle));
}
.fa-light {
  /*@apply font-normal;*/
}
.icon-primary {
  color: var(--text-icon-primary);
}
/* =========================================================
   Links V2
   ========================================================= */

/* Base Link */
.link {
  cursor: pointer;
  font-size: 0.875rem;
  line-height: 1.5rem;
  font-weight: 400;
  -webkit-transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  -webkit-transition-duration: 150ms;
  transition-duration: 150ms;
  -webkit-transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
  color: var(--text-link);
  text-decoration: none;
}

  .link:hover {
    color: var(--text-link-hover);
  }

  .link:focus-visible {
    outline: 2px solid var(--border-link-focus);
    outline-offset: 2px;
    border-radius: 4px;
  }

/* =========================================================
   Secondary Link
   ========================================================= */


/* =========================================================
   Underline Modifier
   ========================================================= */


/* =========================================================
   Muted Variant
   ========================================================= */

/* =========================================================
   Danger Variant
   ========================================================= */


/* =========================================================
   Sizes
   ========================================================= */


/* =========================================================
   Disabled
   ========================================================= */

.link[aria-disabled="true"],
.link.is-disabled {
  pointer-events: none;
  opacity: 0.5;
}


/* =========================================================
   Reduced Motion
   ========================================================= */

@media (prefers-reduced-motion: reduce) {
  .link {
    -webkit-transition: none;
    transition: none;
  }
}


/*TEMP FOR COPY TO CLIPBOARD*/ /* LIVE, not dead: class="link" in the auth / onboarding / account views (tq-8177 defect fix, quinn 900048951) */
/* === Swatch Wrapper (clickable item) === */
.theme-swatch {
  position: relative;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 1px;
  border-radius: 0.375rem;
  border-width: 1px;
  padding: 0.125rem;
  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.theme-swatch[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
.theme-swatch {
  color: var(--text-primary);
}

/* === Swatch Grid Container === */
.theme-swatch-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 2px;
}
html.is-mobile #rnly-wizard-modal .theme-swatch-grid.grid-cols-2 {
  grid-template-columns: minmax(0, 1fr);
  gap: 16px;
}
html.is-mobile #rnly-wizard-modal .grid.theme-swatch-grid {
  grid-template-columns: minmax(0, 1fr);
  gap: 16px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] .theme-swatch-grid {
  width: 100%;
  max-width: 100%;
}

/* === Shared Swatch Style === */
.theme-swatch-box {
  width: 0.25rem;
  height: 0.25rem;
  border-radius: 0.125rem;
}

.theme-label {
  color: var(--text-theme-label);
}

/* === Light Theme === */
.theme-light {
  background-color: var(--bg-theme-light-swatch);
  border-color: var(--border-theme-light-swatch);
}

  .theme-light .theme-base-swatch {
    background-color: var(--theme-light-base-swatch);
  }

  .theme-light .theme-primary-swatch {
    background-color: var(--theme-light-primary-swatch);
  }

  .theme-light .theme-secondary-swatch {
    background-color: var(--theme-light-secondary-swatch);
  }

  .theme-light .theme-accent-swatch {
    background-color: var(--theme-light-accent-swatch);
  }

/* === Dark Theme === */
.theme-dark {
  background-color: var(--bg-theme-dark-swatch);
  border-color: var(--border-theme-dark-swatch);
}

  .theme-dark .theme-base-swatch {
    background-color: var(--theme-dark-base-swatch);
  }

  .theme-dark .theme-primary-swatch {
    background-color: var(--theme-dark-primary-swatch);
  }

  .theme-dark .theme-secondary-swatch {
    background-color: var(--theme-dark-secondary-swatch);
  }

  .theme-dark .theme-accent-swatch {
    background-color: var(--theme-dark-accent-swatch);
  }

/* === Mica Light Theme === */
.theme-mica-light {
  background-color: var(--bg-theme-mica-light-swatch);
  border-color: var(--border-theme-mica-light-swatch);
}

  .theme-mica-light .theme-base-swatch {
    background-color: var(--theme-mica-light-base-swatch);
  }

  .theme-mica-light .theme-primary-swatch {
    background-color: var(--theme-mica-light-primary-swatch);
  }

  .theme-mica-light .theme-secondary-swatch {
    background-color: var(--theme-mica-light-secondary-swatch);
  }

  .theme-mica-light .theme-accent-swatch {
    background-color: var(--theme-mica-light-accent-swatch);
  }

/* === Mica Dark Theme === */
.theme-mica-dark {
  background-color: var(--bg-theme-light-swatch);
  border-color: var(--border-theme-light-swatch);
}

  .theme-mica-dark .theme-base-swatch {
    background-color: var(--theme-light-base-swatch);
  }

  .theme-mica-dark .theme-primary-swatch {
    background-color: var(--theme-light-primary-swatch);
  }

  .theme-mica-dark .theme-secondary-swatch {
    background-color: var(--theme-light-secondary-swatch);
  }

  .theme-mica-dark .theme-accent-swatch {
    background-color: var(--theme-light-accent-swatch);
  }
/* =========================================
   Component: Signal Pill
   A compact pill-shaped notification that pops up
   from a screen edge to deliver lightweight
   confirmations ("Saved", "Copied"), status
   updates, and timed actions.

   The app's transient feedback: every toastr / lineToast
   call renders it at top-centre (tq-9368; the contextual
   .line-toast bar was retired by the USER's choice).
   ========================================= */

/* ── Stack container — fixed to a viewport edge ── */
.signal-pill-stack {
  position: fixed;
  z-index: var(--z-toast);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 0.5rem;
  pointer-events: none;
  max-width: min(420px, calc(100vw - 2rem));
  width: -webkit-max-content;
  width: -moz-max-content;
  width: max-content;
}

  /* Stack stacks newest-on-bottom for top placements,
     newest-on-top for bottom placements */
  .signal-pill-stack--bottom-center,
  .signal-pill-stack--bottom-left,
  .signal-pill-stack--bottom-right {
    -webkit-box-orient: vertical;
    -webkit-box-direction: reverse;
    -ms-flex-direction: column-reverse;
    flex-direction: column-reverse;
  }

/* Placement: bottom row. A100 (origin Hermanns tq-8778 3ae2b556): --signal-pill-lift (signal-pill-lift.js) raises a bottom stack above the open
   modal's footer when the pill would cover one of its controls (a phone full-height modal); 0 everywhere else. */
.signal-pill-stack--bottom-center {
  left: 50%;
  -webkit-transform: translateX(-50%);
  -ms-transform: translateX(-50%);
  transform: translateX(-50%);
  bottom: calc(1rem + var(--signal-pill-lift, 0px) + env(safe-area-inset-bottom, 0px));
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}

.signal-pill-stack--bottom-left {
  left: calc(1rem + env(safe-area-inset-left, 0px));
  bottom: calc(1rem + var(--signal-pill-lift, 0px) + env(safe-area-inset-bottom, 0px));
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
}

.signal-pill-stack--bottom-right {
  right: calc(1rem + env(safe-area-inset-right, 0px));
  bottom: calc(1rem + var(--signal-pill-lift, 0px) + env(safe-area-inset-bottom, 0px));
  -webkit-box-align: end;
  -ms-flex-align: end;
  align-items: flex-end;
}

/* Placement: top row. A241 tq-9401 (R1, isabella 900074465): --signal-pill-top-offset (modal.js) moves a top stack below
   the TOP open modal's header (its bottom + the stack gap) when that header would sit under it: a phone's full-screen
   modal always. Unset (no modal, or a centred dialog clear of the band), the max() keeps 1rem + the safe area. */
.signal-pill-stack--top-center {
  left: 50%;
  -webkit-transform: translateX(-50%);
  -ms-transform: translateX(-50%);
  transform: translateX(-50%);
  top: max(calc(1rem + env(safe-area-inset-top, 0px)), var(--signal-pill-top-offset, 0px));
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}

.signal-pill-stack--top-left {
  left: calc(1rem + env(safe-area-inset-left, 0px));
  top: max(calc(1rem + env(safe-area-inset-top, 0px)), var(--signal-pill-top-offset, 0px));
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
}

.signal-pill-stack--top-right {
  right: calc(1rem + env(safe-area-inset-right, 0px));
  top: max(calc(1rem + env(safe-area-inset-top, 0px)), var(--signal-pill-top-offset, 0px));
  -webkit-box-align: end;
  -ms-flex-align: end;
  align-items: flex-end;
}

/* ── Card wrapper — used when a pill carries an expandable details panel ── */
.signal-pill-card {
  pointer-events: auto;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: stretch;
  -ms-flex-align: stretch;
  align-items: stretch;
  gap: 0.375rem;
  max-width: min(420px, calc(100vw - 2rem));
  width: -webkit-max-content;
  width: -moz-max-content;
  width: max-content;
}

/* The pill inside a card should stretch to the card's content width */
.signal-pill-card > .signal-pill {
  -ms-flex-item-align: start;
  align-self: flex-start;
}

/* ── The pill itself ── */
.signal-pill {
  pointer-events: auto;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.625rem;
  padding: 0.5rem 0.875rem 0.5rem 0.75rem;
  border-radius: var(--radius-signal-pill, 9999px);
  font-size: 0.8125rem;
  line-height: 1.35;
  font-weight: 500;
  max-width: 100%;
  min-height: 36px;
  background-color: var(--bg-signal-pill-solid);
  color: var(--text-signal-pill-solid);
  border: 1px solid var(--border-signal-pill-solid);
  -webkit-box-shadow: var(--shadow-signal-pill);
  box-shadow: var(--shadow-signal-pill);
  position: relative;
  overflow: hidden;
  -webkit-transition: -webkit-transform var(--duration-fast, 100ms) var(--ease-out, ease-out);
  transition: -webkit-transform var(--duration-fast, 100ms) var(--ease-out, ease-out);
  transition: transform var(--duration-fast, 100ms) var(--ease-out, ease-out);
  transition: transform var(--duration-fast, 100ms) var(--ease-out, ease-out), -webkit-transform var(--duration-fast, 100ms) var(--ease-out, ease-out);
  will-change: transform, opacity;
}

  .signal-pill:hover {
    -webkit-transform: translateY(-1px);
    -ms-transform: translateY(-1px);
    transform: translateY(-1px);
  }

/* ── Sub-elements ── */
.signal-pill__icon {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 1rem;
  height: 1rem;
  font-size: 0.875rem;
  line-height: 1;
  color: var(--icon-signal-pill-solid);
}

.signal-pill__body {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  min-width: 0;
  -webkit-box-flex: 1;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto;
  gap: 0.0625rem;
}

.signal-pill__title {
  font-weight: 600;
  font-size: 0.8125rem;
  letter-spacing: -0.005em;
}

.signal-pill__text {
  font-weight: 400;
  font-size: 0.75rem;
  opacity: 0.75;
  color: var(--text-signal-pill-solid-muted);
}

.signal-pill__label {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* tq-9140 (A158; origin pair tq-9133 a8c914d0 + its repair tq-9152 f9a44bf2, the same form as Enodia's port tq-9136 251403ac): a pill with a
   close button grows to hold the remover's hit-slop under a finger (+ its 1px borders: the clip is the padding box). EACH
   SIZE keeps its own fine floor: the origin's single (0,2,0) max(36px, …) beat the size variants (a closable --compact grew
   28 -> 36 and a closable --expanded shrank 48 -> 36 on a FINE pointer). Fine 28 / 36 / 48 (unchanged); touch 46 / 46 / 48. */
.signal-pill:has(> .signal-pill__close)           { min-height: max(36px, calc(var(--control-h-xs) + 2px)); }
.signal-pill--compact:has(> .signal-pill__close)  { min-height: max(28px, calc(var(--control-h-xs) + 2px)); }
.signal-pill--expanded:has(> .signal-pill__close) { min-height: max(48px, calc(var(--control-h-xs) + 2px)); }
/* NO OVERLAP inside the pill (tq-9140; not in the origin, whose pill has no details toggle): the close's 44px slop
   overhangs its box by up to (44 - 16) / 2 = 14px, more than the gap to a preceding details toggle (7px compact, 10px
   default). Under a finger the close moves away by (token - 1rem) / 2 - 0.4375rem = 7px, the worst case (the smallest close
   and gap); on a fine pointer that is negative, so the authored 0.125rem holds and nothing moves. */
.signal-pill__details-toggle + .signal-pill__close { margin-left: max(0.125rem, calc((var(--control-h-xs) - 1rem) / 2 - 0.4375rem)); }

/* Close button */
.signal-pill__close {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 1.125rem;
  height: 1.125rem;
  margin-left: 0.125rem;
  padding: 0;
  border: 0;
  background: transparent;
  border-radius: var(--radius-full, 9999px);
  color: inherit;
  font-size: 0.625rem;
  opacity: 0.55;
  cursor: pointer;
  -webkit-transition: opacity var(--duration-fast, 100ms) var(--ease-default, ease),
              background-color var(--duration-fast, 100ms) var(--ease-default, ease);
  transition: opacity var(--duration-fast, 100ms) var(--ease-default, ease),
              background-color var(--duration-fast, 100ms) var(--ease-default, ease);
}

  .signal-pill__close:hover {
    opacity: 1;
    background-color: rgb(from currentColor r g b / 0.12);
  }

  .signal-pill__close:focus-visible {
    opacity: 1;
    outline: 2px solid var(--focus-ring);
    outline-offset: 1px;
  }

/* Details toggle — chevron + label rendered inside the pill when `details` is provided */
.signal-pill__details-toggle {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  margin-left: 0.25rem;
  padding: 0.125rem 0.5rem;
  background: transparent;
  border: 0;
  border-radius: var(--radius-md, 0.375rem);
  font-weight: 500;
  font-size: 0.75rem;
  color: var(--text-secondary);
  cursor: pointer;
  white-space: nowrap;
  -webkit-transition: background-color var(--duration-fast, 100ms) var(--ease-default, ease),
              color var(--duration-fast, 100ms) var(--ease-default, ease);
  transition: background-color var(--duration-fast, 100ms) var(--ease-default, ease),
              color var(--duration-fast, 100ms) var(--ease-default, ease);
}

  .signal-pill__details-toggle:hover {
    color: var(--text-primary);
    background-color: rgb(from currentColor r g b / 0.08);
  }

  .signal-pill__details-toggle:focus-visible {
    outline: 2px solid var(--focus-ring);
    outline-offset: 1px;
  }

  .signal-pill__details-toggle > i {
    font-size: 0.625rem;
    -webkit-transition: -webkit-transform var(--duration-normal, 200ms) var(--ease-out, ease-out);
    transition: -webkit-transform var(--duration-normal, 200ms) var(--ease-out, ease-out);
    transition: transform var(--duration-normal, 200ms) var(--ease-out, ease-out);
    transition: transform var(--duration-normal, 200ms) var(--ease-out, ease-out), -webkit-transform var(--duration-normal, 200ms) var(--ease-out, ease-out);
  }

  .signal-pill-card.is-expanded .signal-pill__details-toggle > i {
    -webkit-transform: rotate(180deg);
    -ms-transform: rotate(180deg);
    transform: rotate(180deg);
  }

/* Details panel — slides down from below the pill */
.signal-pill__details {
  pointer-events: auto;
  -ms-flex-item-align: stretch;
  align-self: stretch;
  padding: 0 0.875rem;
  border-radius: var(--radius-lg, 0.5rem);
  background-color: var(--bg-signal-pill-solid);
  color: var(--text-signal-pill-solid);
  border: 1px solid var(--border-signal-pill-solid);
  -webkit-box-shadow: var(--shadow-signal-pill);
  box-shadow: var(--shadow-signal-pill);
  font-size: 0.75rem;
  line-height: 1.5;
  max-height: 0;
  overflow: hidden;
  opacity: 0;
  -webkit-transform: translateY(-4px);
  -ms-transform: translateY(-4px);
  transform: translateY(-4px);
  -webkit-transition: max-height var(--duration-normal, 200ms) var(--ease-out, ease-out),
              opacity var(--duration-fast, 100ms) var(--ease-default, ease),
              padding var(--duration-normal, 200ms) var(--ease-out, ease-out),
              -webkit-transform var(--duration-normal, 200ms) var(--ease-out, ease-out);
  transition: max-height var(--duration-normal, 200ms) var(--ease-out, ease-out),
              opacity var(--duration-fast, 100ms) var(--ease-default, ease),
              padding var(--duration-normal, 200ms) var(--ease-out, ease-out),
              -webkit-transform var(--duration-normal, 200ms) var(--ease-out, ease-out);
  transition: max-height var(--duration-normal, 200ms) var(--ease-out, ease-out),
              opacity var(--duration-fast, 100ms) var(--ease-default, ease),
              transform var(--duration-normal, 200ms) var(--ease-out, ease-out),
              padding var(--duration-normal, 200ms) var(--ease-out, ease-out);
  transition: max-height var(--duration-normal, 200ms) var(--ease-out, ease-out),
              opacity var(--duration-fast, 100ms) var(--ease-default, ease),
              transform var(--duration-normal, 200ms) var(--ease-out, ease-out),
              padding var(--duration-normal, 200ms) var(--ease-out, ease-out),
              -webkit-transform var(--duration-normal, 200ms) var(--ease-out, ease-out);
}

.signal-pill-card.is-expanded .signal-pill__details {
  max-height: 320px;
  opacity: 1;
  -webkit-transform: translateY(0);
  -ms-transform: translateY(0);
  transform: translateY(0);
  padding: 0.625rem 0.875rem;
  overflow-y: auto;
}

  .signal-pill__details > * + * {
    margin-top: 0.375rem;
  }

  .signal-pill__details code,
  .signal-pill__details pre {
    font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
    font-size: 0.6875rem;
    background-color: rgb(from currentColor r g b / 0.06);
    padding: 0.0625rem 0.25rem;
    border-radius: 3px;
  }

  .signal-pill__details pre {
    padding: 0.5rem;
    white-space: pre-wrap;
    word-break: break-word;
  }

/* Action button (e.g., "Undo") */
.signal-pill__action {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  margin-left: 0.25rem;
  padding: 0.125rem 0.5rem;
  background: transparent;
  border: 0;
  border-radius: var(--radius-md, 0.375rem);
  font-weight: 600;
  font-size: 0.75rem;
  color: var(--text-signal-pill-action-label);
  cursor: pointer;
  white-space: nowrap;
  -webkit-transition: color var(--duration-fast, 100ms) var(--ease-default, ease),
              background-color var(--duration-fast, 100ms) var(--ease-default, ease);
  transition: color var(--duration-fast, 100ms) var(--ease-default, ease),
              background-color var(--duration-fast, 100ms) var(--ease-default, ease);
}

  .signal-pill__action:hover {
    color: var(--text-signal-pill-action-label-hover);
    background-color: rgb(from currentColor r g b / 0.08);
  }

  .signal-pill__action:focus-visible {
    outline: 2px solid var(--focus-ring);
    outline-offset: 1px;
  }

/* Progress / timeout indicator (bottom-edge thin bar) */
.signal-pill__progress {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 2px;
  background-color: rgb(from currentColor r g b / 0.18);
  overflow: hidden;
  pointer-events: none;
}

  .signal-pill__progress::after {
    content: "";
    position: absolute;
    inset: 0;
    background-color: rgb(from currentColor r g b / 0.9);
    -webkit-transform-origin: left center;
    -ms-transform-origin: left center;
    transform-origin: left center;
    -webkit-transform: scaleX(var(--sp-progress, 1));
    -ms-transform: scaleX(var(--sp-progress, 1));
    transform: scaleX(var(--sp-progress, 1));
    -webkit-transition: -webkit-transform var(--sp-progress-duration, 3000ms) linear;
    transition: -webkit-transform var(--sp-progress-duration, 3000ms) linear;
    transition: transform var(--sp-progress-duration, 3000ms) linear;
    transition: transform var(--sp-progress-duration, 3000ms) linear, -webkit-transform var(--sp-progress-duration, 3000ms) linear;
  }

/* ── Surface style: solid (default) ── */
.signal-pill--solid {
  background-color: var(--bg-signal-pill-solid);
  color: var(--text-signal-pill-solid);
  border-color: var(--border-signal-pill-solid);
  -webkit-box-shadow: var(--shadow-signal-pill);
  box-shadow: var(--shadow-signal-pill);
}

  .signal-pill--solid .signal-pill__icon  { color: var(--icon-signal-pill-solid); }
  .signal-pill--solid .signal-pill__text  { color: var(--text-signal-pill-solid-muted); }

/* ── Surface style: glass ── */
.signal-pill--glass {
  background-color: var(--bg-signal-pill-glass);
  color: var(--text-signal-pill-glass);
  border-color: var(--border-signal-pill-glass);
  -webkit-box-shadow: var(--shadow-signal-pill-glass);
  box-shadow: var(--shadow-signal-pill-glass);
  backdrop-filter: var(--blur-signal-pill-glass);
}

  .signal-pill--glass .signal-pill__icon { color: var(--icon-signal-pill-glass); }
  .signal-pill--glass .signal-pill__text { color: var(--text-signal-pill-glass-muted); }

/* ── Status variants — colored backgrounds (solid) ──
   Status sets bg + text + icon only. The surface (--solid/--glass)
   owns the border so glass keeps its frosted hairline even when a
   status modifier is applied. */
.signal-pill--success {
  background-color: var(--bg-signal-pill-success);
  color: var(--text-signal-pill-success);
}
  .signal-pill--success .signal-pill__icon { color: var(--icon-signal-pill-success); }

.signal-pill--danger {
  background-color: var(--bg-signal-pill-danger);
  color: var(--text-signal-pill-danger);
}
  .signal-pill--danger .signal-pill__icon { color: var(--icon-signal-pill-danger); }

.signal-pill--warning {
  background-color: var(--bg-signal-pill-warning);
  color: var(--text-signal-pill-warning);
}
  .signal-pill--warning .signal-pill__icon { color: var(--icon-signal-pill-warning); }

.signal-pill--info {
  background-color: var(--bg-signal-pill-info);
  color: var(--text-signal-pill-info);
}
  .signal-pill--info .signal-pill__icon { color: var(--icon-signal-pill-info); }

.signal-pill--neutral {
  background-color: var(--bg-signal-pill-neutral);
  color: var(--text-signal-pill-neutral);
}
  .signal-pill--neutral .signal-pill__icon { color: var(--icon-signal-pill-neutral); }

.signal-pill--loading {
  background-color: var(--bg-signal-pill-loading);
  color: var(--text-signal-pill-loading);
}
  .signal-pill--loading .signal-pill__icon { color: var(--icon-signal-pill-loading); }

.signal-pill--action {
  background-color: var(--bg-signal-pill-action);
  color: var(--text-signal-pill-action);
}
  .signal-pill--action .signal-pill__icon { color: var(--icon-signal-pill-action); }

/* ── Status overlay on glass — keep glass surface, tint icon only ── */
.signal-pill--glass.signal-pill--success .signal-pill__icon { color: var(--icon-signal-pill-success); }
.signal-pill--glass.signal-pill--danger  .signal-pill__icon { color: var(--icon-signal-pill-danger);  }
.signal-pill--glass.signal-pill--warning .signal-pill__icon { color: var(--icon-signal-pill-warning); }
.signal-pill--glass.signal-pill--info    .signal-pill__icon { color: var(--icon-signal-pill-info);    }
.signal-pill--glass.signal-pill--neutral .signal-pill__icon { color: var(--icon-signal-pill-neutral); }
.signal-pill--glass.signal-pill--loading .signal-pill__icon { color: var(--icon-signal-pill-loading); }
.signal-pill--glass.signal-pill--action  .signal-pill__icon { color: var(--icon-signal-pill-action);  }

.signal-pill--glass.signal-pill--success,
.signal-pill--glass.signal-pill--danger,
.signal-pill--glass.signal-pill--warning,
.signal-pill--glass.signal-pill--info,
.signal-pill--glass.signal-pill--neutral,
.signal-pill--glass.signal-pill--loading,
.signal-pill--glass.signal-pill--action {
  background-color: var(--bg-signal-pill-glass);
  color: var(--text-signal-pill-glass);
}

/* ── Loading spin on the icon ── */
.signal-pill--loading .signal-pill__icon > i,
.signal-pill--loading .signal-pill__icon > svg {
  -webkit-animation: sp-spin 900ms linear infinite;
  animation: sp-spin 900ms linear infinite;
}

/* ── Size variants ── */
.signal-pill--compact {
  padding: 0.3125rem 0.625rem 0.3125rem 0.5rem;
  font-size: 0.75rem;
  min-height: 28px;
  gap: 0.4375rem;
}

  .signal-pill--compact .signal-pill__icon { width: 0.8125rem; height: 0.8125rem; font-size: 0.75rem; }
  .signal-pill--compact .signal-pill__close { width: 1rem; height: 1rem; }

.signal-pill--expanded {
  padding: 0.75rem 1rem 0.75rem 0.875rem;
  font-size: 0.875rem;
  min-height: 48px;
  gap: 0.75rem;
  border-radius: var(--radius-2xl, 1rem);
  max-width: 360px;
}

  .signal-pill--expanded .signal-pill__icon { width: 1.125rem; height: 1.125rem; font-size: 1rem; }

/* ── Animation states — placement-aware ──
   These match either a bare .signal-pill or a wrapping .signal-pill-card
   (used when the pill has an expandable details panel). */
.signal-pill.is-entering,
.signal-pill.is-leaving,
.signal-pill-card.is-entering,
.signal-pill-card.is-leaving {
  pointer-events: none;
}

/* Bottom placements — rise from below */
.signal-pill-stack--bottom-center > .is-entering,
.signal-pill-stack--bottom-left   > .is-entering,
.signal-pill-stack--bottom-right  > .is-entering {
  -webkit-animation: sp-rise-in var(--duration-slow, 300ms) var(--ease-out, ease-out) both;
  animation: sp-rise-in var(--duration-slow, 300ms) var(--ease-out, ease-out) both;
}
.signal-pill-stack--bottom-center > .is-leaving,
.signal-pill-stack--bottom-left   > .is-leaving,
.signal-pill-stack--bottom-right  > .is-leaving {
  -webkit-animation: sp-rise-out var(--duration-normal, 200ms) var(--ease-in, ease-in) both;
  animation: sp-rise-out var(--duration-normal, 200ms) var(--ease-in, ease-in) both;
}

/* Top placements — drop from above */
.signal-pill-stack--top-center > .is-entering,
.signal-pill-stack--top-left   > .is-entering,
.signal-pill-stack--top-right  > .is-entering {
  -webkit-animation: sp-drop-in var(--duration-slow, 300ms) var(--ease-out, ease-out) both;
  animation: sp-drop-in var(--duration-slow, 300ms) var(--ease-out, ease-out) both;
}
.signal-pill-stack--top-center > .is-leaving,
.signal-pill-stack--top-left   > .is-leaving,
.signal-pill-stack--top-right  > .is-leaving {
  -webkit-animation: sp-drop-out var(--duration-normal, 200ms) var(--ease-in, ease-in) both;
  animation: sp-drop-out var(--duration-normal, 200ms) var(--ease-in, ease-in) both;
}

/* Side placements override with a slight horizontal slide */
.signal-pill-stack--bottom-left > .is-entering,
.signal-pill-stack--top-left    > .is-entering {
  -webkit-animation: sp-slide-in-left var(--duration-slow, 300ms) var(--ease-out, ease-out) both;
  animation: sp-slide-in-left var(--duration-slow, 300ms) var(--ease-out, ease-out) both;
}
.signal-pill-stack--bottom-left > .is-leaving,
.signal-pill-stack--top-left    > .is-leaving {
  -webkit-animation: sp-slide-out-left var(--duration-normal, 200ms) var(--ease-in, ease-in) both;
  animation: sp-slide-out-left var(--duration-normal, 200ms) var(--ease-in, ease-in) both;
}

.signal-pill-stack--bottom-right > .is-entering,
.signal-pill-stack--top-right    > .is-entering {
  -webkit-animation: sp-slide-in-right var(--duration-slow, 300ms) var(--ease-out, ease-out) both;
  animation: sp-slide-in-right var(--duration-slow, 300ms) var(--ease-out, ease-out) both;
}
.signal-pill-stack--bottom-right > .is-leaving,
.signal-pill-stack--top-right    > .is-leaving {
  -webkit-animation: sp-slide-out-right var(--duration-normal, 200ms) var(--ease-in, ease-in) both;
  animation: sp-slide-out-right var(--duration-normal, 200ms) var(--ease-in, ease-in) both;
}

/* ── Keyframes ── */
@-webkit-keyframes sp-rise-in {
  from { opacity: 0; -webkit-transform: translateY(16px) scale(0.96); transform: translateY(16px) scale(0.96); }
  to   { opacity: 1; -webkit-transform: translateY(0)    scale(1); transform: translateY(0)    scale(1);    }
}
@keyframes sp-rise-in {
  from { opacity: 0; -webkit-transform: translateY(16px) scale(0.96); transform: translateY(16px) scale(0.96); }
  to   { opacity: 1; -webkit-transform: translateY(0)    scale(1); transform: translateY(0)    scale(1);    }
}
@-webkit-keyframes sp-rise-out {
  from { opacity: 1; -webkit-transform: translateY(0)    scale(1); transform: translateY(0)    scale(1);    }
  to   { opacity: 0; -webkit-transform: translateY(8px)  scale(0.98); transform: translateY(8px)  scale(0.98); }
}
@keyframes sp-rise-out {
  from { opacity: 1; -webkit-transform: translateY(0)    scale(1); transform: translateY(0)    scale(1);    }
  to   { opacity: 0; -webkit-transform: translateY(8px)  scale(0.98); transform: translateY(8px)  scale(0.98); }
}

@-webkit-keyframes sp-drop-in {
  from { opacity: 0; -webkit-transform: translateY(-16px) scale(0.96); transform: translateY(-16px) scale(0.96); }
  to   { opacity: 1; -webkit-transform: translateY(0)     scale(1); transform: translateY(0)     scale(1);    }
}

@keyframes sp-drop-in {
  from { opacity: 0; -webkit-transform: translateY(-16px) scale(0.96); transform: translateY(-16px) scale(0.96); }
  to   { opacity: 1; -webkit-transform: translateY(0)     scale(1); transform: translateY(0)     scale(1);    }
}
@-webkit-keyframes sp-drop-out {
  from { opacity: 1; -webkit-transform: translateY(0)     scale(1); transform: translateY(0)     scale(1);    }
  to   { opacity: 0; -webkit-transform: translateY(-8px)  scale(0.98); transform: translateY(-8px)  scale(0.98); }
}
@keyframes sp-drop-out {
  from { opacity: 1; -webkit-transform: translateY(0)     scale(1); transform: translateY(0)     scale(1);    }
  to   { opacity: 0; -webkit-transform: translateY(-8px)  scale(0.98); transform: translateY(-8px)  scale(0.98); }
}

@-webkit-keyframes sp-slide-in-left {
  from { opacity: 0; -webkit-transform: translateX(-12px) scale(0.96); transform: translateX(-12px) scale(0.96); }
  to   { opacity: 1; -webkit-transform: translateX(0)     scale(1); transform: translateX(0)     scale(1);    }
}

@keyframes sp-slide-in-left {
  from { opacity: 0; -webkit-transform: translateX(-12px) scale(0.96); transform: translateX(-12px) scale(0.96); }
  to   { opacity: 1; -webkit-transform: translateX(0)     scale(1); transform: translateX(0)     scale(1);    }
}
@-webkit-keyframes sp-slide-out-left {
  from { opacity: 1; -webkit-transform: translateX(0)     scale(1); transform: translateX(0)     scale(1);    }
  to   { opacity: 0; -webkit-transform: translateX(-8px)  scale(0.98); transform: translateX(-8px)  scale(0.98); }
}
@keyframes sp-slide-out-left {
  from { opacity: 1; -webkit-transform: translateX(0)     scale(1); transform: translateX(0)     scale(1);    }
  to   { opacity: 0; -webkit-transform: translateX(-8px)  scale(0.98); transform: translateX(-8px)  scale(0.98); }
}

@-webkit-keyframes sp-slide-in-right {
  from { opacity: 0; -webkit-transform: translateX(12px) scale(0.96); transform: translateX(12px) scale(0.96); }
  to   { opacity: 1; -webkit-transform: translateX(0)    scale(1); transform: translateX(0)    scale(1);    }
}

@keyframes sp-slide-in-right {
  from { opacity: 0; -webkit-transform: translateX(12px) scale(0.96); transform: translateX(12px) scale(0.96); }
  to   { opacity: 1; -webkit-transform: translateX(0)    scale(1); transform: translateX(0)    scale(1);    }
}
@-webkit-keyframes sp-slide-out-right {
  from { opacity: 1; -webkit-transform: translateX(0)    scale(1); transform: translateX(0)    scale(1);    }
  to   { opacity: 0; -webkit-transform: translateX(8px)  scale(0.98); transform: translateX(8px)  scale(0.98); }
}
@keyframes sp-slide-out-right {
  from { opacity: 1; -webkit-transform: translateX(0)    scale(1); transform: translateX(0)    scale(1);    }
  to   { opacity: 0; -webkit-transform: translateX(8px)  scale(0.98); transform: translateX(8px)  scale(0.98); }
}

@-webkit-keyframes sp-spin {
  to { -webkit-transform: rotate(360deg); transform: rotate(360deg); }
}

@keyframes sp-spin {
  to { -webkit-transform: rotate(360deg); transform: rotate(360deg); }
}

/* ── Responsive: tighter spacing on small screens ── */
@media (max-width: 480px) {
  .signal-pill-stack {
    max-width: calc(100vw - 1rem);
  }
  .signal-pill-stack--bottom-center,
  .signal-pill-stack--top-center {
    /* Allow the stack to span full width on mobile centered placements */
    left: 0.5rem;
    right: 0.5rem;
    -webkit-transform: none;
    -ms-transform: none;
    transform: none;
    width: auto;
    max-width: none;
    -webkit-box-align: stretch;
    -ms-flex-align: stretch;
    align-items: stretch;
  }
  .signal-pill-stack--bottom-left,
  .signal-pill-stack--bottom-right,
  .signal-pill-stack--top-left,
  .signal-pill-stack--top-right {
    left: 0.5rem;
    right: 0.5rem;
    width: auto;
    max-width: none;
    -webkit-box-align: stretch;
    -ms-flex-align: stretch;
    align-items: stretch;
  }
  .signal-pill,
  .signal-pill--expanded {
    max-width: none;
  }
}

/* ── Repeat pulse (tq-9390, A236): a deduped pill, shown again, pulses once. Motion-gated: under reduced motion there is
   no pulse at all (the pill just stays). ── */
@media (prefers-reduced-motion: no-preference) {
  .signal-pill.is-pulsing,
  .signal-pill-card.is-pulsing {
    -webkit-animation: sp-pulse var(--duration-slow, 300ms) var(--ease-out, ease-out);
    animation: sp-pulse var(--duration-slow, 300ms) var(--ease-out, ease-out);
  }
}
@-webkit-keyframes sp-pulse {
  0%, 100% { -webkit-transform: scale(1); transform: scale(1); }
  40%      { -webkit-transform: scale(1.04); transform: scale(1.04); }
}
@keyframes sp-pulse {
  0%, 100% { -webkit-transform: scale(1); transform: scale(1); }
  40%      { -webkit-transform: scale(1.04); transform: scale(1.04); }
}

/* ── Reduced motion ── */
@media (prefers-reduced-motion: reduce) {
  .signal-pill,
  .signal-pill:hover {
    -webkit-transform: none;
    -ms-transform: none;
    transform: none;
    -webkit-transition: none;
    transition: none;
  }
  .signal-pill.is-entering,
  .signal-pill.is-leaving {
    -webkit-animation: sp-fade-in var(--duration-fast, 100ms) linear both;
    animation: sp-fade-in var(--duration-fast, 100ms) linear both;
  }
  .signal-pill.is-leaving {
    -webkit-animation-name: sp-fade-out;
    animation-name: sp-fade-out;
  }
  .signal-pill--loading .signal-pill__icon > i,
  .signal-pill--loading .signal-pill__icon > svg {
    -webkit-animation: none;
    animation: none;
  }
  .signal-pill__progress::after {
    -webkit-transition: none;
    transition: none;
  }
}

@-webkit-keyframes sp-fade-in  { from { opacity: 0; } to { opacity: 1; } }

@keyframes sp-fade-in  { from { opacity: 0; } to { opacity: 1; } }
@-webkit-keyframes sp-fade-out { from { opacity: 1; } to { opacity: 0; } }
@keyframes sp-fade-out { from { opacity: 1; } to { opacity: 0; } }

/* ── Demo backdrop (docs/design-system only) ──
   Gives the glass variant something visual to blur against
   when previewed inline outside of a real app context. */
.signal-pill-demo-bg {
  background-image:
    radial-gradient(at 20% 20%, var(--utility-blue-300) 0, transparent 45%),
    radial-gradient(at 80% 30%, var(--utility-purple-300) 0, transparent 45%),
    radial-gradient(at 50% 80%, var(--utility-green-300) 0, transparent 45%),
    linear-gradient(135deg, var(--utility-neutral-200), var(--utility-neutral-50));
}
:is([data-theme="theme-dark"],[data-theme="theme-mica-dark"]) .signal-pill-demo-bg {
  background-image:
    radial-gradient(at 20% 20%, var(--utility-blue-700) 0, transparent 45%),
    radial-gradient(at 80% 30%, var(--utility-purple-700) 0, transparent 45%),
    radial-gradient(at 50% 80%, var(--utility-green-700) 0, transparent 45%),
    linear-gradient(135deg, var(--utility-neutral-800), var(--utility-neutral-950));
}   /* tq-9368 (A215): THE Signal pill, imported in place: every toastr / lineToast call renders it, top-centre (the contextual line-toast bar is gone, and with it the line-toast.css import) */
/* =========================================================
   Tag Component
   ========================================================= */

/* Base */
.tag {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.375rem;
  font-weight: 500;
  line-height: 1;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.tag[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
.tag {
  border: 1px solid var(--border-tag-neutral);
  border-radius: var(--radius-tag);
  padding: var(--padding-tag-y) var(--padding-tag-x);
  background-color: var(--bg-tag-neutral);
  color: var(--text-tag-neutral);
  font-size: var(--text-tag-md);
  -webkit-transition-property: background-color, color, border-color, -webkit-box-shadow;
  transition-property: background-color, color, border-color, -webkit-box-shadow;
  transition-property: background-color, color, border-color, box-shadow;
  transition-property: background-color, color, border-color, box-shadow, -webkit-box-shadow;
  -webkit-transition-duration: var(--duration-fast);
  transition-duration: var(--duration-fast);
  -webkit-transition-timing-function: var(--ease-default);
  transition-timing-function: var(--ease-default);
}


/* =========================================================
   Leading Icon
   ========================================================= */


/* =========================================================
   Dismiss Button
   ========================================================= */

.tag__dismiss {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-width: 0px;
  background-color: transparent;
  padding: 0px;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.tag__dismiss[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .tag__dismiss:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .tag__dismiss:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

.tag__dismiss {
  width: var(--size-tag-dismiss);
  height: var(--size-tag-dismiss);
  color: var(--text-tag-dismiss);
  border-radius: var(--radius-tag);
  -webkit-transition-property: background-color, color;
  transition-property: background-color, color;
  -webkit-transition-duration: var(--duration-fast);
  transition-duration: var(--duration-fast);
  -webkit-transition-timing-function: var(--ease-default);
  transition-timing-function: var(--ease-default);
}

  .tag__dismiss:hover {
    color: var(--text-tag-dismiss-hover);
    background-color: var(--bg-tag-dismiss-hover);
  }


/* =========================================================
   Sizes
   ========================================================= */

.tag--sm {
  font-size: var(--text-tag-sm);
  padding: var(--padding-tag-sm-y) var(--padding-tag-sm-x);
  border-radius: var(--radius-tag-sm);
}


/* =========================================================
   Color Variants
   ========================================================= */

/* Neutral (default — already applied on .tag base) */

/* Primary */

/* Success */

/* Warning */

/* Danger */


/* =========================================================
   Style Variants
   ========================================================= */


/* =========================================================
   Selected State
   ========================================================= */


/* =========================================================
   Clickable
   ========================================================= */


/* =========================================================
   Disabled
   ========================================================= */

.tag:disabled,
.tag.is-disabled {
  pointer-events: none;
  opacity: var(--opacity-tag-disabled);
}


/* =========================================================
   Focus Visible (generic fallback)
   ========================================================= */

.tag:focus-visible {
  outline: 2px solid var(--border-tag-neutral-focus);
  outline-offset: 2px;
}


/* =========================================================
   Reduced Motion
   ========================================================= */

@media (prefers-reduced-motion: reduce) {
  .tag,
  .tag__dismiss {
    -webkit-transition: none;
    transition: none;
  }
}

/*Labs*/

/*AI · Agentic*/

/*Apps*/
/* ==========================================================================
   REINLY – App-specific styles (aggregator)
   ==========================================================================

   This folder contains styles specific to the Reinly horse marketplace.
   Base design-system components (card, layout, hero, etc.) stay in
   /components/. Only Reinly-specific pages, flows, layouts, and component
   variations belong here.

   Import order: layouts → components → pages → flows → utilities
   ========================================================================== */

/* Layouts */
/* ==========================================================================
   REINLY — Marketplace component tokens   [tq-3789 Part 2]
   ==========================================================================

   TOKEN DISCIPLINE + THEME SYMMETRY (isabella 25330 / 25347 / 25428):
   marketplace components carry Reinly.Web VALUES but never raw hex inline. Themeable
   SURFACES/TEXT/BORDERS use the shared SEMANTIC tokens (--canvas-primary, --text-primary,
   --border-*, --text-on-brand …) so they flip light<->dark like the base .card.

   Two constant families live here and must reference the DS PALETTE, never raw hex
   (isabella 25428): (a) ON-MEDIA controls that sit over photos/video and therefore do NOT
   flip (over-media rule) -> --alpha-white-* / --alpha-black-* / --color-*; (b) the emerald
   active-fill overlays (brand-constant). The reinly SHADOW ramp on THEMED surfaces keeps
   rgba composites (their fine alphas .05–.15 have no 10-step palette equivalent, and they
   theme via the dark block below); they are not on-media.
   ========================================================================== */

:root {
  /* soft-diffuse component shadows on THEMED surfaces (dark overrides below) */
  --shadow-rnly-search:        0 1px 2px rgba(0, 0, 0, .08), 0 4px 12px rgba(0, 0, 0, .05);
  --shadow-rnly-search-hover:  0 2px 4px rgba(0, 0, 0, .1),  0 8px 16px rgba(0, 0, 0, .08);
  --shadow-rnly-preset-hover:  0 4px 12px rgba(0, 0, 0, .06);
  --shadow-rnly-preset-active: 0 4px 14px rgba(5, 150, 105, .28);   /* emerald glow — brand-constant */
  --shadow-rnly-price-marker:  0 1px 2px rgba(0, 0, 0, .15);        /* price-scale carrot marker (themed track) */
  --shadow-rnly-seller-mirror: 0 12px 28px rgba(0, 0, 0, .15), 0 4px 10px rgba(0, 0, 0, .1);
  --shadow-rnly-trait-panel:   0 4px 20px rgba(0, 0, 0, .12);       /* trait-picker floating panel (themed) */

  /* ─── CONSTANT tokens — reference the DS --alpha-white-* / --alpha-black-* / --color-* palette, never raw hex ─── */

  /* preset — white overlays ON the theme-constant emerald active fill (brand-constant) */
  --bg-rnly-preset-remove-active:       var(--alpha-white-20);
  --bg-rnly-preset-remove-active-hover: var(--alpha-white-40);

  /* listing-card favourite drop-shadow — on the photo, constant */
  --shadow-rnly-listing-fav:   0 1px 3px var(--alpha-black-40);

  /* search-pill MOBILE CTA — on-photo pill over the hero image */
  --bg-rnly-search-cta:        var(--alpha-white-90);
  --bg-rnly-search-cta-hover:  var(--alpha-white-100);
  --border-rnly-search-cta:    var(--alpha-white-60);
  --fg-rnly-search-cta:        var(--utility-neutral-900);   /* constant dark glyph/text on the white pill */
  --shadow-rnly-search-cta:    0 8px 24px -10px var(--alpha-black-30);

  /* listing-carousel — on-photo nav controls */
  --bg-rnly-carousel-arrow:        var(--alpha-white-90);
  --bg-rnly-carousel-arrow-hover:  var(--alpha-white-100);
  --fg-rnly-carousel-arrow:        var(--utility-neutral-900);
  --shadow-rnly-carousel-arrow:        0 1px 4px var(--alpha-black-10);
  --shadow-rnly-carousel-arrow-hover:  0 2px 8px var(--alpha-black-20);
  --bg-rnly-carousel-dot:          var(--alpha-white-40);
  --bg-rnly-carousel-dot-active:   var(--alpha-white-100);
  --bg-rnly-carousel-dot-small:    var(--alpha-white-20);

  /* video-scrub — on-video controls */
  --bg-rnly-video-gradient:         linear-gradient(to top, var(--alpha-black-40) 0%, transparent 100%);
  --bg-rnly-video-track:            var(--alpha-white-30);
  --bg-rnly-video-fill:             var(--alpha-white-100);
  --bg-rnly-video-handle:           var(--alpha-white-100);
  --shadow-rnly-video-handle:       0 1px 4px var(--alpha-black-30);
  --shadow-rnly-video-preview:      0 4px 12px var(--alpha-black-30);
  --border-rnly-video-canvas:       var(--alpha-white-80);
  --bg-rnly-video-canvas:           var(--color-black);
  --bg-rnly-video-badge:            var(--alpha-black-70);
  --fg-rnly-video-badge:            var(--alpha-white-100);
  --bg-rnly-video-playpause:        var(--alpha-black-50);
  --bg-rnly-video-playpause-hover:  oklch(0% 0 0 / 0.65);   /* tq-8242: the served app's hover (0.65) */
  --fg-rnly-video-playpause:        var(--alpha-white-100);
}

/* Dark theme — deepen the themed-surface soft-diffuse shadows so they read on a dark surface
   (mirrors the base --shadow-* ramp). The on-media/constant tokens above do NOT flip. */
:root[data-theme='theme-dark'],
[data-theme='theme-dark'],
[data-theme='theme-mica-dark'] {
  --shadow-rnly-search:        0 1px 2px rgba(0, 0, 0, .4),  0 4px 12px rgba(0, 0, 0, .3);
  --shadow-rnly-search-hover:  0 2px 4px rgba(0, 0, 0, .5),  0 8px 16px rgba(0, 0, 0, .4);
  --shadow-rnly-preset-hover:  0 4px 12px rgba(0, 0, 0, .35);
  --shadow-rnly-price-marker:  0 1px 2px rgba(0, 0, 0, .5);
  --shadow-rnly-seller-mirror: 0 12px 28px rgba(0, 0, 0, .5), 0 4px 10px rgba(0, 0, 0, .4);
  --shadow-rnly-trait-panel:   0 4px 20px rgba(0, 0, 0, .5);
  /* preset-active glow stays emerald (brand-constant) */
} /* tq-8404: the Reinly component tokens (search-pill CTA set ...); 0 name collisions with the app */
/* ==========================================================================
   RNLY – Hero collapse/expand animation
   ==========================================================================
   Two separate pill elements crossfade in-place (Airbnb pattern).
   Full pill lives in __content (hero body), compact pill in __nav-center.
   JS toggles a single --collapsed class; all animation is CSS-only.

   Height collapse uses CSS Grid (grid-template-rows: 1fr → 0fr) which
   interpolates smoothly without the max-height hack's dead-zone.           */

/* ── Easing & duration tokens ──
   Shorter than typical so mobile/tablet has fewer reflow frames during
   the min-height layout transition. 220ms still feels deliberate, not
   abrupt. */
:root {
  --hero-ease: cubic-bezier(.4, 0, .2, 1);
  --hero-dur: 220ms;
  --hero-dur-fast: 140ms;
}

/* ── Transition hooks ──
   iPad/iOS Safari historically choppy with grid-template-rows
   interpolation — WebKit tends to step rather than tween across
   1fr → 0fr, especially when content inside reflows on each frame.
   We collapse the hero with GPU-accelerated opacity + transform
   instead, and let min-height on the hero drive the actual layout
   shrink. overflow:hidden on the hero clips the fading content so
   the visual effect (smooth fade + slight upward slide) reads the
   same as the old grid-row collapse. */

.rnly-hero {
  -webkit-transition: min-height var(--hero-dur) var(--hero-ease);
  transition: min-height var(--hero-dur) var(--hero-ease);
  /* overflow: visible by default so the home-page search dropdown
     panel (positioned absolute below the search bar) AND the
     user-menu dropdown in the hero nav can extend past the hero
     bottom edge without being clipped. We only clip when the hero
     is in its collapsed state, where clipping is needed to hide
     the slightly-translated body/content boxes. */
  overflow: visible;
  /* `contain: layout` gives the browser the animation perf
     benefit (layout work isolated to the hero subtree during
     min-height tweens) without trapping descendants. We
     INTENTIONALLY do not promote the hero to its own
     compositor layer here — `transform: translateZ(0)` made
     the hero a containing block for absolutely-positioned
     descendants, which confused Popper's clipping-parent
     detection and caused the user-menu dropdown to render
     BEHIND the listings body underneath the hero on desktop.
     The collapse animation still tweens smoothly without it
     because `min-height` interpolates cheaply on its own. */
  contain: layout;
}
.rnly-hero--collapsed {
  overflow: hidden;
}

.rnly-hero__nav {
  /* Padding change is intentionally instant — animating it caused
     extra layout reflow on every frame of the collapse on iPad/Android
     and the visual delta is small enough that a hard switch reads as
     "the bar settled" rather than choppy. */
}

.rnly-hero__body {
  -webkit-transition: opacity var(--hero-dur-fast) ease,
              -webkit-transform var(--hero-dur) var(--hero-ease);
  transition: opacity var(--hero-dur-fast) ease,
              -webkit-transform var(--hero-dur) var(--hero-ease);
  transition: opacity var(--hero-dur-fast) ease,
              transform var(--hero-dur) var(--hero-ease);
  transition: opacity var(--hero-dur-fast) ease,
              transform var(--hero-dur) var(--hero-ease),
              -webkit-transform var(--hero-dur) var(--hero-ease);
  -webkit-transform-origin: top center;
  -ms-transform-origin: top center;
  transform-origin: top center;
  will-change: opacity, transform;
}

.rnly-hero__content {
  -webkit-transition: opacity var(--hero-dur-fast) ease,
              padding var(--hero-dur) var(--hero-ease),
              -webkit-transform var(--hero-dur) var(--hero-ease);
  transition: opacity var(--hero-dur-fast) ease,
              padding var(--hero-dur) var(--hero-ease),
              -webkit-transform var(--hero-dur) var(--hero-ease);
  transition: opacity var(--hero-dur-fast) ease,
              transform var(--hero-dur) var(--hero-ease),
              padding var(--hero-dur) var(--hero-ease);
  transition: opacity var(--hero-dur-fast) ease,
              transform var(--hero-dur) var(--hero-ease),
              padding var(--hero-dur) var(--hero-ease),
              -webkit-transform var(--hero-dur) var(--hero-ease);
  -webkit-transform-origin: top center;
  -ms-transform-origin: top center;
  transform-origin: top center;
  will-change: opacity, transform;
}

.rnly-hero__overlay {
  -webkit-transition: opacity var(--hero-dur) ease;
  transition: opacity var(--hero-dur) ease;
}

.rnly-hero__image {
  -webkit-transition: -webkit-transform calc(var(--hero-dur) + 80ms) var(--hero-ease);
  transition: -webkit-transform calc(var(--hero-dur) + 80ms) var(--hero-ease);
  transition: transform calc(var(--hero-dur) + 80ms) var(--hero-ease);
  transition: transform calc(var(--hero-dur) + 80ms) var(--hero-ease), -webkit-transform calc(var(--hero-dur) + 80ms) var(--hero-ease);
  will-change: transform;
  -webkit-backface-visibility: hidden;
  backface-visibility: hidden;
}

/* ── Collapsed state ── */

.rnly-hero--collapsed {
  min-height: 0px;
}

/* Collapsed nav: symmetric vertical padding around the centered
   compact search pill. Mathematically 12/12 and 16/16 are both
   "balanced", but the pill carries a downward drop-shadow that
   makes the bottom read heavier — bumping top padding a hair
   higher than bottom rebalances the optical center. */
.rnly-hero--collapsed .rnly-hero__nav {
  padding: 16px 16px 10px;
}

/* Collapse body (title + subtitle) — fade + slide up. Layout shrink
   comes from the hero's min-height transition. */
.rnly-hero--collapsed .rnly-hero__body {
  pointer-events: none;
  opacity: 0;
  -webkit-transform: translateY(-8px) scaleY(0.96);
  -ms-transform: translateY(-8px) scaleY(0.96);
  transform: translateY(-8px) scaleY(0.96);
  /* Collapse the height so the search content above can move up
     into the freed space. height:0 + overflow:hidden ensures the
     body's intrinsic title height doesn't keep the hero tall. */
  max-height: 0;
  overflow: hidden;
  margin: 0;
  padding: 0;
}

/* The search content STAYS VISIBLE when the hero collapses — the
   user wants the filter pill to remain accessible after they scroll.
   We just trim the vertical padding so the pill sits closer to the
   nav bar. The hide-the-pill approach (which we used to do) broke
   the filter dropdowns the moment the hero collapsed. */
.rnly-hero--collapsed .rnly-hero__content {
  padding-top: 0;
  padding-bottom: 12px;
}

/* The compact pill in the nav-center is unused now that the real
   search content stays visible — keep it hidden so we don't render
   two search affordances in the collapsed state. */
.rnly-hero--collapsed .rnly-hero__nav-center {
  display: none;
}

/* Subtle zoom on the background image when collapsed */
.rnly-hero--collapsed .rnly-hero__image {
  --tw-scale-x: 1.05;
  --tw-scale-y: 1.05;
  -webkit-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  -ms-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}

/* Lighten the overlay when collapsed */
.rnly-hero--collapsed .rnly-hero__overlay {
  opacity: 0.7;
}

/* ── Branded topbar (emerald-900 header on internal pages) ──
   Force white icons / text on the dark header bar.            */

.app-chrome--branded .btn-secondary,
.app-chrome--branded .dropdown-toggle.btn-secondary {
  color: #fff;
  background-color: rgba(255, 255, 255, 0.12);
  border-color: rgba(255, 255, 255, 0.18);
}

.app-chrome--branded .btn-secondary:hover,
.app-chrome--branded .dropdown-toggle.btn-secondary:hover {
  background-color: rgba(255, 255, 255, 0.2);
  border-color: rgba(255, 255, 255, 0.3);
}
/* ==========================================================================
   RNLY – Seller header & navigation
   ========================================================================== */

/* ── Seller topbar (3-column centered layout) ── */
.seller-topbar {
  display: grid;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}
html.is-mobile #rnly-wizard-modal .seller-topbar.grid-cols-2 {
  grid-template-columns: minmax(0, 1fr);
  gap: 16px;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.seller-topbar[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] .seller-topbar {
  width: 100%;
  max-width: 100%;
}
.seller-topbar {
  grid-template-columns: 1fr auto 1fr;
  padding: 12px 16px;
  min-width: 0;
  background-color: var(--canvas-primary);
}

.seller-topbar__left {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  min-width: 0px;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
}

.collapse.show.seller-topbar__left {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .seller-topbar__left {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.seller-topbar__left.items-baseline { margin-bottom: 10px; }

html.is-mobile .seller-topbar__left:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .seller-topbar__left.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.seller-topbar__left[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .seller-topbar__left.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .seller-topbar__left.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .seller-topbar__left.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .seller-topbar__left.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.seller-topbar__left {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .seller-topbar__left.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.seller-topbar__left > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.seller-topbar__center {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  min-width: 0px;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}

.collapse.show.seller-topbar__center {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .seller-topbar__center {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.seller-topbar__center.items-baseline { margin-bottom: 10px; }

html.is-mobile .seller-topbar__center:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .seller-topbar__center.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.seller-topbar__center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .seller-topbar__center.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .seller-topbar__center.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .seller-topbar__center.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .seller-topbar__center.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.seller-topbar__center {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .seller-topbar__center.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.seller-topbar__center > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.seller-topbar__right {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  min-width: 0px;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
  gap: 0.5rem;
}

.collapse.show.seller-topbar__right {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .seller-topbar__right {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.seller-topbar__right.items-baseline { margin-bottom: 10px; }

html.is-mobile .seller-topbar__right:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .seller-topbar__right.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.seller-topbar__right[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .seller-topbar__right.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .seller-topbar__right.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .seller-topbar__right.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .seller-topbar__right.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.seller-topbar__right {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .seller-topbar__right.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.seller-topbar__right > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

/* ── Tab badge counters (inside nav-link) ── */

/* Empty badge: fully collapse so it doesn't offset the tab label */
/* ==========================================================================
   RNLY – Buyer header & navigation
   Sibling file to seller-header.css. Kept fully independent so the
   buyer chrome can evolve without touching the seller experience.
   ========================================================================== */

/* ── Buyer topbar (3-column centered layout) ── */
.buyer-topbar {
  display: grid;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}
html.is-mobile #rnly-wizard-modal .buyer-topbar.grid-cols-2 {
  grid-template-columns: minmax(0, 1fr);
  gap: 16px;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.buyer-topbar[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] .buyer-topbar {
  width: 100%;
  max-width: 100%;
}
.buyer-topbar {
  grid-template-columns: 1fr auto 1fr;
  padding: 12px 16px;
  min-width: 0;
  background-color: var(--canvas-primary);
}

.buyer-topbar__left {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  min-width: 0px;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
}

.collapse.show.buyer-topbar__left {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .buyer-topbar__left {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.buyer-topbar__left.items-baseline { margin-bottom: 10px; }

html.is-mobile .buyer-topbar__left:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .buyer-topbar__left.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.buyer-topbar__left[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .buyer-topbar__left.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .buyer-topbar__left.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .buyer-topbar__left.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .buyer-topbar__left.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.buyer-topbar__left {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .buyer-topbar__left.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.buyer-topbar__left > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.buyer-topbar__center {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  min-width: 0px;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}

.collapse.show.buyer-topbar__center {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .buyer-topbar__center {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.buyer-topbar__center.items-baseline { margin-bottom: 10px; }

html.is-mobile .buyer-topbar__center:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .buyer-topbar__center.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.buyer-topbar__center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .buyer-topbar__center.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .buyer-topbar__center.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .buyer-topbar__center.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .buyer-topbar__center.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.buyer-topbar__center {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .buyer-topbar__center.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.buyer-topbar__center > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.buyer-topbar__right {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  min-width: 0px;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
  gap: 0.5rem;
}

.collapse.show.buyer-topbar__right {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .buyer-topbar__right {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.buyer-topbar__right.items-baseline { margin-bottom: 10px; }

html.is-mobile .buyer-topbar__right:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .buyer-topbar__right.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.buyer-topbar__right[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .buyer-topbar__right.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .buyer-topbar__right.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .buyer-topbar__right.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .buyer-topbar__right.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.buyer-topbar__right {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .buyer-topbar__right.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.buyer-topbar__right > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

/* ── Tab badge counters (inside nav-link) ── */

/* Empty badge: fully collapse so it doesn't offset the tab label */

/* Lift the sibling tab text one pixel so the text baseline aligns
   with the vertically-centered badge pill — prevents the classic
   "badge sits below the text" jitter when counts populate async. */

/* ── tq-8217 (R7): the white app chrome follows the theme ──
   The buyer / seller / admin layouts and the _Layout pages that pass HeaderClass="bg-white …" (horse detail, sellers,
   listings, billing, vendor) paint header.app-chrome with Tailwind's literal bg-white, so in dark the header stayed white
   under light dark-theme text. --bg-surface is white in light (unchanged) and the dark surface in dark. One rule here keeps
   those views' HeaderClass untouched. */
.app-chrome.bg-white {
  background-color: var(--bg-surface);
}
/* ==========================================================================
   RNLY – Bootstrap modal compatibility
   ==========================================================================
   Bootstrap creates a dynamic .modal-backdrop element — we
   need to style it since Bootstrap CSS is not loaded.              */

/* tq-9360 (A207): the `.modal.show { display: flex !important }` override (Bootstrap JS sets display:block inline) moved to
   components/overlays/modal.app.css, the declared app-override file, now that the DS modal.css is imported in place. */

.modal-backdrop {
  /* Sits 1 below the modal (z-1050) so the modal paints above
     the backdrop. Both are above the mobile chrome (z-220) so
     opening a modal correctly covers the top bar / nav-tabs. */
  position: fixed;
  inset: 0px;
  z-index: var(--z-modal-backdrop);   /* z ladder (tq-9381) */
  background-color: var(--bg-modal-overlay, rgba(0, 0, 0, 0.5));
  opacity: 0;
  -webkit-transition: opacity 200ms ease;
  transition: opacity 200ms ease;
}

.modal-backdrop.show {
  opacity: 1;
}

/* tq-8302 (R10): ONE scrim. A modal that ships its own .modal-overlay is dimmed by that overlay alone; the DS modal
   driver marks the backdrop Bootstrap generates for it (Reinly.Design Scripts/components/modal.js, onBsShow). */
.modal-backdrop.modal-backdrop--suppressed {
  display: none;
}

/* tq-8412: the other half of the ONE-scrim rule. When modals nest, the DS modal driver marks every modal below the top
   `.modal--overlay-suppressed` (Reinly.Design Scripts/components/modal.js, applyStack), and Reinly.Design's modal.css
   hides that modal's .modal-overlay. The app does not import that file, so the class did nothing here and a nested pair
   (listing detail -> sign-in, listing detail -> Message Seller) dimmed the page twice. Same rule, app side. */
.modal--overlay-suppressed > .modal-overlay {
  opacity: 0 !important;
}

/* Components (Reinly variations only – not base card/badge/etc.) */
/* search-pill.css: Reinly marketplace component (Reinly.Design OWNS it; reinly.webapp imports this file IN PLACE).
   tq-8177 (R4, one CSS pipeline): the rules are the served app's (src/reinly.webapp @ 09387252, the visual truth;
   isabella 900047450): every Tailwind apply rule expanded to the app's own Tailwind-3 output, plain CSS only (app-imported-plain-css test).
*/

/* ==========================================================================
   RNLY – Search pill (shared across homepage hero + listings header)
   ========================================================================== */

.rnly-search {
  /* Tailwind-3 output of: border (tq-8177) */
  border-width: 1px;
  background-color: #fff;
  border-color: rgba(255,255,255,.3);
  -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.08), 0 4px 12px rgba(0,0,0,.05);
  box-shadow: 0 1px 2px rgba(0,0,0,.08), 0 4px 12px rgba(0,0,0,.05);
}

.rnly-search:hover {
  -webkit-box-shadow: 0 2px 4px rgba(0,0,0,.1), 0 8px 16px rgba(0,0,0,.08);
  box-shadow: 0 2px 4px rgba(0,0,0,.1), 0 8px 16px rgba(0,0,0,.08);
}

.rnly-seg {
  color: var(--text-primary);
}

.rnly-seg:hover {
  background-color: var(--bg-primary-subtle);
}

.rnly-seg + .rnly-seg {
  /* Tailwind-3 output of: border-l (tq-8177) */
  border-left-width: 1px;
  border-color: var(--border-primary);
}

/* ── DS library content with no app counterpart (documented at /Design; inert in the app: the app never uses these classes) ── */

.rnly-search-cta {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 8px;
  height: 44px;
  padding: 0 28px;
  border-radius: 9999px;
  font-size: 14px;
  font-weight: 600;
  letter-spacing: -0.005em;
  text-decoration: none;
  white-space: nowrap;
  background-color: var(--bg-rnly-search-cta);
  border: 1px solid var(--border-rnly-search-cta);
  color: var(--fg-rnly-search-cta);
  -webkit-box-shadow: var(--shadow-rnly-search-cta);
  box-shadow: var(--shadow-rnly-search-cta);
  -webkit-tap-highlight-color: transparent;
}

.rnly-search-cta:hover {
  background-color: var(--bg-rnly-search-cta-hover);
}

.rnly-search-cta:active {
  -webkit-transform: scale(0.96);
  -ms-transform: scale(0.96);
  transform: scale(0.96);
} /* canonical DS component, imported in place (tq-8177) */
/* price-scale.css: Reinly marketplace component (Reinly.Design OWNS it; reinly.webapp imports this file IN PLACE).
   tq-8177 (R4, one CSS pipeline): the rules are the served app's (src/reinly.webapp @ 09387252, the visual truth;
   isabella 900047450): every Tailwind apply rule expanded to the app's own Tailwind-3 output, plain CSS only (app-imported-plain-css test).
*/

/* ==========================================================================
   RNLY – Price-band scale (Hi/Lo component)
   ========================================================================== */

.rnly-price-scale {
  /* Tailwind-3 output of: relative (tq-8177) */
  position: relative;
  height: 4px;
  border-radius: 2px;
  background-color: var(--utility-neutral-200, #e5e7eb);
}

.rnly-price-scale__fill {
  /* Tailwind-3 output of: absolute top-0 left-0 h-full (tq-8177) */
  position: absolute;
  top: 0px;
  left: 0px;
  height: 100%;
  border-radius: 2px;
  background-color: var(--utility-orange-200, #fed7aa);
}

.rnly-price-scale__marker {
  /* Tailwind-3 output of: absolute top-1/2 -translate-x-1/2 -translate-y-1/2 (tq-8177) */
  position: absolute;
  top: 50%;
  -webkit-transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
  -webkit-filter: drop-shadow(0 1px 2px rgba(0,0,0,.15));
  filter: drop-shadow(0 1px 2px rgba(0,0,0,.15));
}

/* Range labels (low / high) underneath the bar */
.rnly-price-scale__range {
  /* Tailwind-3 output of: flex justify-between mt-1 text-[0.625rem] font-medium leading-none (tq-8177) */
  margin-top: 0.25rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  font-size: 0.625rem;
  font-weight: 500;
  line-height: 1;
  color: var(--text-tertiary, #9ca3af);
}

/* Compact modifier for map pins */
.rnly-price-scale--compact {
  /* Tailwind-3 output of: h-[3px] w-8 (tq-8177) */
  height: 3px;
  width: 2rem;
}

/* Compact marker inside pins – scale down the carrot SVG */
.rnly-price-scale--compact .rnly-price-scale__marker {
  -webkit-transform: translate(-50%, -50%) scale(0.65);
  -ms-transform: translate(-50%, -50%) scale(0.65);
  transform: translate(-50%, -50%) scale(0.65);
}

/* Detail modifier – wider bar for CTA sidebar */
.rnly-price-scale--detail {
  /* Tailwind-3 output of: h-1.5 rounded-[3px] (tq-8177) */
  height: 0.375rem;
  border-radius: 3px;
}

.rnly-price-scale--detail .rnly-price-scale__fill {
  /* Tailwind-3 output of: rounded-[3px] (tq-8177) */
  border-radius: 3px;
}

.rnly-price-scale--detail .rnly-price-scale__marker {
  -webkit-transform: translate(-50%, -50%) scale(1.2);
  -ms-transform: translate(-50%, -50%) scale(1.2);
  transform: translate(-50%, -50%) scale(1.2);
} /* canonical DS component, imported in place (tq-8177) */
/* listing-card.css: Reinly marketplace component (Reinly.Design OWNS it; reinly.webapp imports this file IN PLACE).
   tq-8177 (R4, one CSS pipeline): the rules are the served app's (src/reinly.webapp @ 09387252, the visual truth;
   isabella 900047450): every Tailwind apply rule expanded to the app's own Tailwind-3 output, plain CSS only (app-imported-plain-css test).
   The canonical name is rnly-; the app's old class names are kept as grouped aliases until tq-8209 renames the markup.
*/

/* ==========================================================================
   REINLY – Buyer listing card (.card--listing)
   Reinly-specific card variation — base .card stays in card.css
   ========================================================================== */

.card--listing {
  /* Tailwind-3 output of: flex flex-col cursor-pointer (tq-8177) */
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  cursor: pointer;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  background-color: var(--canvas-primary);
  outline: 2px solid transparent;
  outline-offset: 4px;
}

.card--listing.is-active {
  outline-color: var(--text-primary);
}

.card--listing:focus-visible {
  outline-color: var(--focus-ring); /* tq-8912: the one DS ring (was the info blue) */
}

/* Media area */
.card--listing__media {
  /* Tailwind-3 output of: relative overflow-hidden (tq-8177) */
  position: relative;
  overflow: hidden;
  border-radius: var(--radius-card-hover, 1.25rem);
  aspect-ratio: 20 / 19;
  background: linear-gradient(
    90deg,
    var(--bg-skeleton, var(--bg-tertiary)) 25%,
    var(--bg-skeleton-highlight, var(--bg-secondary)) 37%,
    var(--bg-skeleton, var(--bg-tertiary)) 63%
  );
  background-size: 200% 100%;
  -webkit-animation: shimmer 1.5s ease-in-out infinite;
  animation: shimmer 1.5s ease-in-out infinite;
}

/* Stop shimmer once content loads or placeholder is shown */
.card--listing__media:has(img, video, .rnly-listing-carousel, .card--listing__placeholder) {
  -webkit-animation: none;
  animation: none;
  background: var(--bg-primary-subtle);
}

.card--listing__media img {
  /* Tailwind-3 output of: w-full h-full object-cover (tq-8177) */
  height: 100%;
  width: 100%;
  -o-object-fit: cover;
  object-fit: cover;
}

/* Badge overlay */
.card--listing__badge {
  /* Tailwind-3 output of: absolute top-3 left-3 z-10 (tq-8177) */
  position: absolute;
  top: 0.75rem;
  left: 0.75rem;
  z-index: 10;
}

/* Favorite button */
.card--listing__fav {
  /* Tailwind-3 output of: absolute top-3 right-3 z-10 text-lg (tq-8177) */
  position: absolute;
  top: 0.75rem;
  right: 0.75rem;
  z-index: 10;
  font-size: 1.125rem;
  line-height: 2rem;
  color: var(--alpha-white-100, #fff);
  -webkit-filter: drop-shadow(0 1px 3px rgba(0,0,0,.35));
  filter: drop-shadow(0 1px 3px rgba(0,0,0,.35));
  -webkit-transition: -webkit-transform .15s ease;
  transition: -webkit-transform .15s ease;
  transition: transform .15s ease;
  transition: transform .15s ease, -webkit-transform .15s ease;
}

.card--listing__fav:hover {
  -webkit-transform: scale(1.2);
  -ms-transform: scale(1.2);
  transform: scale(1.2);
}

/* Body text */
.card--listing__body {
  /* Tailwind-3 output of: pt-2.5 pb-1 px-2 (tq-8177) */
  padding-left: 0.5rem;
  padding-right: 0.5rem;
  padding-top: 0.625rem;
  padding-bottom: 0.25rem;
}

.card--listing__title {
  /* Tailwind-3 output of: text-md font-medium leading-tight (tq-8177) */
  font-size: 0.875rem;
  line-height: 1.5rem;
  font-weight: 500;
  line-height: 1.25;
  color: var(--text-primary-solid);
}

.card--listing__title--placeholder {
  font-style: italic;
  color: var(--text-quaternary);
}

.card--listing__price {
  /* Tailwind-3 output of: text-sm font-semibold flex-shrink-0 (tq-8177) */
  -ms-flex-negative: 0;
  flex-shrink: 0;
  font-size: 0.8125rem;
  line-height: 1.5rem;
  font-weight: 600;
  color: var(--text-primary);
}

.card--listing__facts {
  /* Tailwind-3 output of: text-xs mt-0.5 (tq-8177) */
  margin-top: 0.125rem;
  font-size: 0.75rem;
  line-height: 1rem;
  color: var(--text-tertiary);
}

.card--listing__location {
  /* Tailwind-3 output of: text-xs mt-0.5 (tq-8177) */
  margin-top: 0.125rem;
  font-size: 0.75rem;
  line-height: 1rem;
  color: var(--text-tertiary);
}

.card--listing__meta {
  /* Tailwind-3 output of: flex items-center gap-3 mt-1.5 text-2xs (tq-8177) */
  margin-top: 0.375rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.75rem;
  font-size: 0.6875rem;
  line-height: 1rem;
  color: var(--text-quaternary);
}

.card--listing__meta span {
  /* Tailwind-3 output of: inline-flex items-center gap-1 (tq-8177) */
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
}

.card--listing__meta i {
  font-size: 0.6875rem;
}

/* Price-visibility pill — surfaces whether the asking price is
   shown on the public listing. Only rendered on the seller card. */
.card--listing__meta-badge {
  /* Tailwind-3 output of: inline-flex items-center gap-1 px-1.5 py-0.5 rounded-full font-medium (tq-8177) */
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  border-radius: 9999px;
  padding-left: 0.375rem;
  padding-right: 0.375rem;
  padding-top: 0.125rem;
  padding-bottom: 0.125rem;
  font-weight: 500;
  font-size: 0.625rem;
  line-height: 1;
}

/* The "Price shown" pill (a hidden price is the eye-slash beside the price instead: .card--listing__price-hidden). */
.card--listing__meta-badge--visible {
  background-color: var(--utility-neutral-100, #f3f4f6);
  color: var(--text-secondary);
}

.card--listing__meta-badge--visible i {
  color: var(--utility-emerald-800, #065f46);
}

/*
 * Owner price, hidden from buyers (tq-9577, A296; isabella 900076861): the compact eye-slash beside the owner's exact price
 * on the Manage surfaces. role="img" + aria-label + data-toggle="tooltip" / data-tooltip "Hidden from buyers" (the DS
 * tooltip: hover, keyboard focus and tap). Never on a public card.
 */
.card--listing__price-hidden {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  margin-left: 0.25rem;
  min-width: 1.25rem;
  min-height: 1.25rem;
  border-radius: 9999px;
  font-weight: 400;
  color: var(--text-tertiary);
  vertical-align: middle;
  cursor: default;
}

.card--listing__price-hidden[hidden] {
  display: none;
}

.card--listing__price-hidden:focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: 1px;
}

.card--listing__date {
  /* Tailwind-3 output of: text-2xs (tq-8177) */
  font-size: 0.6875rem;
  line-height: 1rem;
  color: var(--text-quaternary);
  margin: 0;
}

.card--listing__date-row {
  /* Tailwind-3 output of: flex items-center justify-between gap-2 mt-1 (tq-8177) */
  margin-top: 0.25rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 0.5rem;
} /* canonical DS component, imported in place (tq-8177) */
/* seller-listing-card.css: Reinly marketplace component (Reinly.Design OWNS it; reinly.webapp imports this file IN PLACE).
   tq-8177 (R4, one CSS pipeline): the rules are the served app's (src/reinly.webapp @ 09387252, the visual truth;
   isabella 900047450): every Tailwind apply rule expanded to the app's own Tailwind-3 output, plain CSS only (app-imported-plain-css test).
*/

/* ==========================================================================
   RNLY – Seller listing card modifier
   Extends base .card--listing with seller-specific overlays (action buttons,
   add-card variant). Uses .card--hover-surface for the hover effect.
   ========================================================================== */

/* tq-9432 (A259, isabella 900075007): the actions overlay is a child of the CARD (it was inside .card--listing__media, whose
   overflow:hidden clipped the menu to the photo). The seller card is its containing block: position relative and NO z-index,
   so it creates no stacking context (a card-level context would bring the cross-card case back). The buyer card is untouched. */
.card--listing-seller {
  position: relative;
}

/* ── Quick-action overlay (edit / preview, visible on hover) ── */
.card--listing-seller__actions {
  /* Tailwind-3 output of: absolute top-3 right-3 z-10 flex gap-1 opacity-0 pointer-events-none (tq-8177) */
  pointer-events: none;
  position: absolute;
  top: 0.75rem;
  right: 0.75rem;
  z-index: 10;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  gap: 0.25rem;
  opacity: 0;
  -webkit-transition: opacity 0.15s ease;
  transition: opacity 0.15s ease;
}

/* tq-9411 (A249, isabella 900074483; the A227 ladder): a floater's band follows where it renders. This overlay and the
   photo's carousel controls (arrows, dots) share the media's stacking context, and the arrows (12) sat above the overlay
   (10), so a card's own 'next' arrow painted over its OPEN menu ('Mark as sold' at 390 touch). While the menu is open
   (.is-menu-open, set from Bootstrap's shown / hidden.bs.dropdown in seller/listings.js) the overlay takes the in-page
   dropdown band, above every control in its host. Closed, nothing changes. tq-9432: out of the media, the overlay's 10
   already sits above every card's media (the arrows' 12 / dots' 9 stay inside their media), and this band wins across cards. */
.card--listing-seller__actions.is-menu-open {
  z-index: var(--z-dropdown);
}

/* tq-9158 (A162; THE HOVER-REVEAL RULE, isabella 900068581, design-system/foundations/accessibility.md): revealed on hover AND
   on keyboard focus; ALWAYS shown where there is no hover ((hover: none) or the coarse pointer, scoped like the touch floor:
   a fine-scope subtree keeps the hover reveal); inert while hidden. */
.card--listing-seller:hover .card--listing-seller__actions,
.card--listing-seller:focus-within .card--listing-seller__actions,
.card--listing-seller__actions.is-menu-open {   /* tq-9432: one writer for 'menu open' (was :has(.dropdown-menu.show)) */
  /* Tailwind-3 output of: opacity-100 pointer-events-auto (tq-8177) */
  pointer-events: auto;
  opacity: 1;
}

/* Touch / mobile: there's no hover state, so the action overlay
   would stay invisible — making the action menu unreachable.
   On mobile/touch we render the actions permanently visible.
   We also collapse to a SINGLE button (the kebab dropdown)
   instead of two — the standalone Edit pen is hidden and the
   Edit option moves INTO the dropdown menu as its first item. */
html.is-mobile .card--listing-seller__actions,
html.is-touch .card--listing-seller__actions {
  opacity: 1;
  pointer-events: auto;
}
/* tq-9158: the same without depending on the JS flags (a touch-first hybrid with a desktop UA) */
@media (hover: none), (pointer: coarse) {
  .card--listing-seller__actions:where(:not([data-pointer-scope="fine"] *)),
  :where([data-pointer-scope="device"]) .card--listing-seller__actions:where(:not([data-pointer-scope="device"] [data-pointer-scope="fine"] *)) {
    opacity: 1;
    pointer-events: auto;
  }
}

/* Default (desktop): standalone pen visible, in-dropdown Edit
   item hidden — the pen is a direct one-tap action on hover. */
.card--listing-seller__actions .rnly-card-edit-mobile { display: none; }

/* Mobile / touch: invert — hide the standalone pen, show the
   in-dropdown Edit item so the cards present a single
   action-menu surface (less visual clutter, larger tap
   targets on the kebab). */
html.is-mobile .card--listing-seller__actions .rnly-card-edit-desktop,
html.is-touch .card--listing-seller__actions .rnly-card-edit-desktop {
  display: none;
}
/* Mobile / touch: reveal the in-dropdown Edit entries.
   We restore the proper `display` per element type explicitly
   instead of using `revert` — `revert` rolled the button back
   to the browser default `inline-block`, which broke
   `.dropdown-item`'s `inline-flex` + `gap-2` and made the icon
   sit closer to the text than every other item in the menu. */
html.is-mobile .card--listing-seller__actions button.rnly-card-edit-mobile,
html.is-touch .card--listing-seller__actions button.rnly-card-edit-mobile {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
}
html.is-mobile .card--listing-seller__actions .dropdown-divider.rnly-card-edit-mobile,
html.is-touch .card--listing-seller__actions .dropdown-divider.rnly-card-edit-mobile {
  display: block;
}

/* ── "Add listing" placeholder card ── */
.card--listing-seller--add .card--listing__media {
  /* Tailwind-3 output of: flex items-center justify-center bg-none border-2 border-dashed (tq-8177) */
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-width: 2px;
  border-style: dashed;
  background-image: none;
  border-color: var(--border-primary);
  color: var(--text-tertiary);
}

.card--listing-seller--add:hover .card--listing__media {
  border-color: var(--text-secondary);
  background-color: var(--utility-neutral-50, var(--utility-neutral-100));
  color: var(--text-primary);
}

/* ── Dashboard listing card (carousel) ── */
.dashboard-listing-card {
  width: 200px;
  min-width: 200px;
  /* Extra bottom padding so hover-surface ::before (inset: -6px)
     has room below the card text */
  padding-bottom: 4px;
}

.dashboard-listing-card__media {
  aspect-ratio: 20 / 19;
  overflow: hidden;
  background-color: var(--bg-primary-subtle);
}

.dashboard-listing-card__media img {
  /* Tailwind-3 output of: w-full h-full object-cover (tq-8177) */
  height: 100%;
  width: 100%;
  -o-object-fit: cover;
  object-fit: cover;
}

/* Card text area — enough padding so hover bg doesn't crowd the text */
.dashboard-listing-card__body {
  /* Tailwind-3 output of: pt-2.5 pb-1 px-2 (tq-8177) */
  padding-left: 0.5rem;
  padding-right: 0.5rem;
  padding-top: 0.625rem;
  padding-bottom: 0.25rem;
}


/* ── Listing card grid ── */
.seller-card-grid {
  /* Tailwind-3 output of: grid p-6 (tq-8177) */
  display: grid;
  padding: 1.5rem;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  gap: 24px;
  padding-inline: 1.75rem;
}

/* ── Thumbnail click target ── */
.card--listing-seller:not(.card--listing-seller--add) .card--listing__media {
  cursor: pointer;
}

/* ── Skeleton shimmer while card refreshes ── */
.card--listing__media--loading {
  position: relative;
}

.card--listing__media--loading::after {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 5;
  border-radius: inherit;
  background: linear-gradient(
    90deg,
    var(--bg-skeleton, var(--bg-tertiary)) 25%,
    var(--bg-skeleton-highlight, var(--bg-secondary)) 37%,
    var(--bg-skeleton, var(--bg-tertiary)) 63%
  );
  background-size: 200% 100%;
  -webkit-animation: shimmer 1.5s ease-in-out infinite;
  animation: shimmer 1.5s ease-in-out infinite;
}

@keyframes shimmer {
  0% { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}

/* ── Card drag states ── */
body.seller-is-dragging,
body.seller-is-dragging * {
  cursor: -webkit-grabbing !important;
  cursor: grabbing !important;
}

.card--listing-seller--dragging {
  opacity: 0.3 !important;
  -webkit-transform: scale(0.97);
  -ms-transform: scale(0.97);
  transform: scale(0.97);
}

.card--listing-seller--mirror {
  opacity: 0.9;
  -webkit-box-shadow: 0 12px 28px rgba(0, 0, 0, 0.15), 0 4px 10px rgba(0, 0, 0, 0.1);
  box-shadow: 0 12px 28px rgba(0, 0, 0, 0.15), 0 4px 10px rgba(0, 0, 0, 0.1);
  border-radius: 0.75rem;
  z-index: 100;
  cursor: -webkit-grabbing !important;
  cursor: grabbing !important;
}

.card--listing-seller:not(.card--listing-seller--add) .card--listing__body {
  position: relative;
  cursor: -webkit-grab;
  cursor: grab;
}

body.seller-is-dragging .card--listing__body {
  cursor: -webkit-grabbing !important;
  cursor: grabbing !important;
} /* canonical DS component, imported in place (tq-8177) */
/* listing-carousel.css: Reinly marketplace component (Reinly.Design OWNS it; reinly.webapp imports this file IN PLACE).
   tq-8177 (R4, one CSS pipeline): the rules are the served app's (src/reinly.webapp @ 09387252, the visual truth;
   isabella 900047450): every Tailwind apply rule expanded to the app's own Tailwind-3 output, plain CSS only (app-imported-plain-css test).
   The canonical name is rnly-; the app's old class names are kept as grouped aliases until tq-8209 renames the markup.
*/

/* ==========================================================================
   REINLY – Listing card carousel (Airbnb-style image slider)
   Sits inside .card--listing__media for multi-image listing cards.
   ========================================================================== */

.rnly-listing-carousel {
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
}

/* ── Slide track ──
   Native horizontal scroll-snap. Switched from transform-based
   navigation because iOS Safari pointer events become non-cancelable
   inside a scroll-snap parent rail, breaking the JS swipe handler.
   Native scroll-snap is honored at the browser level and works
   consistently on iOS Safari, Android Chrome, and desktop browsers
   for both touch swipe and mouse drag-scroll.
*/
.rnly-listing-carousel__track {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
  height: 100%;
  overflow-x: auto;
  overflow-y: hidden;
  -ms-scroll-snap-type: x mandatory;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
  /* Stop overscroll chaining to the parent .card-rail__track */
  overscroll-behavior-x: contain;
  /* Allow BOTH horizontal pan (consumed by this element's own
     scroll-snap) AND vertical pan (passed through to the page
     scroll container). Without `pan-y` here a vertical drag that
     starts on the carousel was intercepted by the browser as a
     candidate horizontal pan and never reached the page scroller,
     producing a "dead zone" the user couldn't scroll out of. */
  -ms-touch-action: pan-x pan-y;
  touch-action: pan-x pan-y;
}
.rnly-listing-carousel__track::-webkit-scrollbar { display: none; }

.rnly-listing-carousel__slide {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 100%;
  flex: 0 0 100%;
  width: 100%;
  height: 100%;
  position: relative;
  scroll-snap-align: start;
  scroll-snap-stop: always;
  background: linear-gradient(
    90deg,
    var(--bg-skeleton, var(--bg-tertiary)) 25%,
    var(--bg-skeleton-highlight, var(--bg-secondary)) 37%,
    var(--bg-skeleton, var(--bg-tertiary)) 63%
  );
  background-size: 200% 100%;
  -webkit-animation: shimmer 1.5s ease-in-out infinite;
  animation: shimmer 1.5s ease-in-out infinite;
}

.rnly-listing-carousel__slide img,
.rnly-listing-carousel__slide video {
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
  object-fit: cover;
  position: relative;
  z-index: 1;
}

/* ── Navigation arrows ── */
.rnly-listing-carousel__arrow {
  position: absolute;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
  z-index: 12;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  border: none;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  background: rgba(255, 255, 255, 0.9);
  /* tq-9158 (A162): the disc is a FIXED white, so its glyph is a fixed dark (it was --text-primary: near-white on white in
     the dark theme, 1.09:1) */
  color: var(--utility-neutral-900, #171717);
  -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.12);
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.12);
  cursor: pointer;
  opacity: 0;
  pointer-events: none;   /* tq-9158: an invisible arrow takes no click (it changed the photo unseen) */
  -webkit-transition: opacity 0.15s ease, background 0.1s ease, -webkit-transform 0.15s ease;
  transition: opacity 0.15s ease, background 0.1s ease, -webkit-transform 0.15s ease;
  transition: opacity 0.15s ease, transform 0.15s ease, background 0.1s ease;
  transition: opacity 0.15s ease, transform 0.15s ease, background 0.1s ease, -webkit-transform 0.15s ease;
  -webkit-tap-highlight-color: transparent;
}

/* tq-9158 (A162; THE HOVER-REVEAL RULE, isabella 900068581, design-system/foundations/accessibility.md; group PREV / NEXT
   NAVIGATION): revealed on hover AND on keyboard focus (the carousel's :focus-within, the arrow's :focus-visible); ALWAYS
   shown where there is no hover ((hover: none) or the coarse pointer, scoped like the touch floor: a fine-scope subtree keeps
   the hover reveal), since swipe is neither discoverable nor available to assistive technology; inert while hidden. */
.rnly-listing-carousel:hover .rnly-listing-carousel__arrow,
.rnly-listing-carousel:focus-within .rnly-listing-carousel__arrow,
.rnly-listing-carousel__arrow:focus-visible,
.card--listing.is-active .rnly-listing-carousel__arrow,
.card--listing.is-tap-active .rnly-listing-carousel__arrow {
  opacity: 1;
  pointer-events: auto;
}
@media (hover: none), (pointer: coarse) {
  .rnly-listing-carousel__arrow:where(:not([data-pointer-scope="fine"] *)),
  :where([data-pointer-scope="device"]) .rnly-listing-carousel__arrow:where(:not([data-pointer-scope="device"] [data-pointer-scope="fine"] *)) {
    opacity: 1;
    pointer-events: auto;
    /* always visible over ANY photo: a 1px 50%-black ring keeps the disc >= 3:1 against a light image (the white disc is
       already 21:1 against a dark one); the fine pointer's hover look is unchanged */
    -webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.5), 0 1px 4px rgba(0, 0, 0, 0.12);
    box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.5), 0 1px 4px rgba(0, 0, 0, 0.12);
  }
}

/* Mobile tap-active state: matches desktop hover — green halo from
   .card--hover-surface.is-active::before plus surfaced carousel
   arrows. Set by Scripts/mobile.js when the user taps the image
   area; cleared on tap-outside or vertical scroll. */
.card--listing.is-tap-active .rnly-listing-carousel__dots {
  opacity: 1;
}

.rnly-listing-carousel__arrow:hover {
  background: #fff;
  -webkit-transform: translateY(-50%) scale(1.08);
  -ms-transform: translateY(-50%) scale(1.08);
  transform: translateY(-50%) scale(1.08);
  -webkit-box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
}

.rnly-listing-carousel__arrow:active {
  -webkit-transform: translateY(-50%) scale(0.95);
  -ms-transform: translateY(-50%) scale(0.95);
  transform: translateY(-50%) scale(0.95);
}

.rnly-listing-carousel__arrow--prev {
  left: 8px;
}

.rnly-listing-carousel__arrow--next {
  right: 8px;
}

/* Hide arrows when at boundaries */
.rnly-listing-carousel__arrow[disabled] {
  opacity: 0 !important;
  pointer-events: none;
}

/* ── Dot indicators ── */
.rnly-listing-carousel__dots {
  position: absolute;
  bottom: 8px;
  left: 50%;
  -webkit-transform: translateX(-50%);
  -ms-transform: translateX(-50%);
  transform: translateX(-50%);
  z-index: 9;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 4px;
  pointer-events: none;
}

.rnly-listing-carousel__dot {
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.4);
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1);
  transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1);
}

.rnly-listing-carousel__dot.is-active {
  width: 7px;
  height: 7px;
  background: #fff;
}

/* Edge dots shrink to hint at more slides beyond the window */
.rnly-listing-carousel__dot--small {
  width: 3px;
  height: 3px;
  background: rgba(255, 255, 255, 0.2);
}

/* ── Video slides ── */
.rnly-listing-carousel__slide {
  position: relative;
}

.rnly-listing-carousel__slide video {
  display: block;
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
  object-fit: cover;
}

.rnly-listing-carousel__play-badge {
  position: absolute;
  inset: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  z-index: 5;
  pointer-events: none;
  -webkit-transition: opacity 0.25s ease;
  transition: opacity 0.25s ease;
}

/* Fade out play badge when carousel is hovered and this is the visible video slide */
.rnly-listing-carousel:hover .rnly-listing-carousel__slide[data-media-type="1"] .rnly-listing-carousel__play-badge {
  opacity: 0;
}

/* ── Video loading spinner ── */
.rnly-listing-carousel__video-loader {
  position: absolute;
  inset: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  z-index: 4;
  pointer-events: none;
  opacity: 0;
  -webkit-transition: opacity 0.2s ease;
  transition: opacity 0.2s ease;
}

/* Show spinner when video is waiting/buffering */
.rnly-listing-carousel__slide.is-loading .rnly-listing-carousel__video-loader {
  opacity: 1;
}

/* Hide play badge while loading */
.rnly-listing-carousel__slide.is-loading .rnly-listing-carousel__play-badge {
  opacity: 0;
}

/* ── Reduced motion ── */
@media (prefers-reduced-motion: reduce) {
.rnly-listing-carousel__track {
    -webkit-transition: none;
    transition: none;
  }
} /* canonical DS component, imported in place (tq-8177) */
/* video-scrub.css: Reinly marketplace component (Reinly.Design OWNS it; reinly.webapp imports this file IN PLACE).
   tq-8177 (R4, one CSS pipeline): the rules are the served app's (src/reinly.webapp @ 09387252, the visual truth;
   isabella 900047450): every Tailwind apply rule expanded to the app's own Tailwind-3 output, plain CSS only (app-imported-plain-css test).
   tq-8242 (R3e): the markup now uses the canonical rnly- names, so the tq-8242 aliases are dropped.
*/

/* ==========================================================================
   REINLY – Video Scrub Preview
   Inline scrub bar with frame preview tooltip for video thumbnails.
   Used in listing card carousels and media grids.
   ========================================================================== */

/* ── Container ── */
.rnly-video-scrub {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  z-index: 8;
  padding: 0 10px 10px;
  opacity: 0;
  -webkit-transition: opacity 0.2s ease;
  transition: opacity 0.2s ease;
  pointer-events: none;
}

/* Show on parent hover (carousel slide, photo thumb, or detail grid) */
/* alias: app name kept until tq-8209 renames the markup */
.rnly-listing-carousel__slide:hover .rnly-video-scrub,
.rnly-listing-carousel:hover .rnly-listing-carousel__slide[data-media-type="1"] .rnly-video-scrub,
.pm-photo-thumb:hover .rnly-video-scrub,
.hd-photo-grid__hero:hover .rnly-video-scrub,
.hd-photo-grid__tile:hover .rnly-video-scrub,
.hd-photo-grid--hero-only:hover .rnly-video-scrub,
[data-lightbox-open][data-media-type="1"]:hover .rnly-video-scrub,
/* tq-9168 (A166; THE HOVER-REVEAL RULE, media exception, isabella 900068642): keyboard focus inside the host (its play / pause
   button) reveals the scrub too, and it stays shown while focus is inside */
.rnly-listing-carousel__slide:focus-within .rnly-video-scrub,
.pm-photo-thumb:focus-within .rnly-video-scrub,
.hd-photo-grid__hero:focus-within .rnly-video-scrub,
.hd-photo-grid__tile:focus-within .rnly-video-scrub,
[data-lightbox-open][data-media-type="1"]:focus-within .rnly-video-scrub,
/* tq-9178 (A169): shown by the shared module (Scripts/modules/video-scrub.js) after a tap; see the touch block below */
.rnly-video-scrub.is-shown {
  opacity: 1;
  pointer-events: auto;
}

/* In carousel context, position above the dots (dots are at bottom: 8px) */
/* alias: app name kept until tq-8209 renames the markup */
.rnly-listing-carousel__slide .rnly-video-scrub {
  padding-bottom: 24px;
}

/* ── Bottom gradient for legibility ── */
.rnly-video-scrub__gradient {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: 60px;
  background: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.4)), to(transparent));
  background: linear-gradient(to top, rgba(0, 0, 0, 0.4) 0%, transparent 100%);
  pointer-events: none;
  border-radius: 0 0 inherit inherit;
}

/* ── Visible time readout (tq-9178 A169): "0:12 / 1:05" whenever the controls are shown; written by the shared module,
   aria-hidden (the slider's aria-valuetext says it). White on 70% black: >= 8:1 over any frame. ── */
.rnly-video-scrub__readout {
  position: relative;
  z-index: 1;
  width: -webkit-fit-content;
  width: -moz-fit-content;
  width: fit-content;
  margin: 0 0 6px auto;
  padding: 1px 6px;
  border-radius: 4px;
  background: rgba(0, 0, 0, 0.7);
  color: #fff;
  font-size: 10px;
  font-weight: 500;
  font-variant-numeric: tabular-nums;
  line-height: 1.4;
  white-space: nowrap;
  pointer-events: none;
}
.rnly-video-scrub__readout:empty {
  display: none;
}

/* ── Track (tq-9178 A169: role="slider", focusable, pointer-driven; touch-action none so a touch drag seeks instead of
   scrolling or swiping) ── */
.rnly-video-scrub__track {
  position: relative;
  height: 4px;
  border-radius: 2px;
  background: rgba(255, 255, 255, 0.3);
  cursor: pointer;
  -webkit-transition: height 0.15s ease;
  transition: height 0.15s ease;
  z-index: 1;
  -ms-touch-action: none;
  touch-action: none;
}
/* keyboard focus: a white outline ring (2-4px out) inside a dark one (4-6px out, the ::after), so one of them reads >= 3:1
   over ANY frame; outline + border, never box-shadow (forced colors keep both; focus-ring lint); the handle shows as on hover */
.rnly-video-scrub__track:focus-visible {
  outline: 2px solid #fff;
  outline-offset: 2px;
}
.rnly-video-scrub__track:focus-visible::after {
  content: '';
  position: absolute;
  inset: -6px;
  border: 2px solid rgba(0, 0, 0, 0.75);
  border-radius: 6px;
  pointer-events: none;
}
.rnly-video-scrub__track:focus-visible .rnly-video-scrub__handle {
  -webkit-transform: translate(-50%, -50%) scale(1);
  -ms-transform: translate(-50%, -50%) scale(1);
  transform: translate(-50%, -50%) scale(1);
}
.rnly-video-scrub:hover .rnly-video-scrub__track,
.rnly-video-scrub.is-scrubbing .rnly-video-scrub__track {
  height: 6px;
  border-radius: 3px;
}

/* Expand hit area without visual change. tq-9178 (A169; the hit-slop approach, foundations/hit-slop.css): the slop is centred
   on the track and --control-h-xs tall, never less than the old 20 (4 + 2 x 8): 24 on a fine pointer, 44 under a finger.
   The token carries every pointer scope ([data-pointer-scope], .density-compact). */
.rnly-video-scrub__track::before {
  content: '';
  position: absolute;
  top: 50%;
  left: 0;
  right: 0;
  height: max(20px, var(--control-h-xs, 20px));
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
}

/* ── Fill ── */
.rnly-video-scrub__fill {
  height: 100%;
  width: 0%;
  border-radius: inherit;
  background: #fff;
  -webkit-transition: width 0.05s linear;
  transition: width 0.05s linear;
  pointer-events: none;
}

/* ── Handle dot ── */
.rnly-video-scrub__handle {
  position: absolute;
  top: 50%;
  left: 0%;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: #fff;
  -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
  -webkit-transform: translate(-50%, -50%) scale(0);
  -ms-transform: translate(-50%, -50%) scale(0);
  transform: translate(-50%, -50%) scale(0);
  -webkit-transition: -webkit-transform 0.15s ease;
  transition: -webkit-transform 0.15s ease;
  transition: transform 0.15s ease;
  transition: transform 0.15s ease, -webkit-transform 0.15s ease;
  pointer-events: none;
  z-index: 2;
}
.rnly-video-scrub:hover .rnly-video-scrub__handle,
.rnly-video-scrub.is-scrubbing .rnly-video-scrub__handle {
  -webkit-transform: translate(-50%, -50%) scale(1);
  -ms-transform: translate(-50%, -50%) scale(1);
  transform: translate(-50%, -50%) scale(1);
}

/* ── Frame preview tooltip ── */
.rnly-video-scrub__preview {
  position: absolute;
  bottom: calc(100% + 4px);
  left: 0;
  -webkit-transform: translateX(-50%);
  -ms-transform: translateX(-50%);
  transform: translateX(-50%);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  opacity: 0;
  pointer-events: none;
  -webkit-transition: opacity 0.15s ease;
  transition: opacity 0.15s ease;
  z-index: 11;
  -webkit-filter: drop-shadow(0 4px 12px rgba(0, 0, 0, 0.25));
  filter: drop-shadow(0 4px 12px rgba(0, 0, 0, 0.25));
}

/* Show preview on hover and scrubbing */
.rnly-video-scrub:hover .rnly-video-scrub__preview,
.rnly-video-scrub.is-scrubbing .rnly-video-scrub__preview {
  opacity: 1;
}

/* ── Canvas — default size (carousel cards) ── */
.rnly-video-scrub__canvas {
  width: 112px;
  height: 64px;
  border-radius: 5px;
  border: 2px solid rgba(255, 255, 255, 0.85);
  background: #000;
  -o-object-fit: cover;
  object-fit: cover;
}

/* ── Size: small (compact thumbnails / mini players) — time only, no frame ── */
.rnly-video-scrub--sm .rnly-video-scrub__canvas {
  display: none;
}

/* ── Size: medium (photo manager grid) ── */
.rnly-video-scrub--md .rnly-video-scrub__canvas {
  width: 140px;
  height: 80px;
  border-radius: 6px;
}

/* ── Size: large (expanded / detail views) ── */
.rnly-video-scrub--lg .rnly-video-scrub__canvas {
  width: 180px;
  height: 102px;
  border-radius: 8px;
  border-width: 2px;
}

/* ── Size: xl (fullscreen / lightbox) ── */
.rnly-video-scrub--xl .rnly-video-scrub__canvas {
  width: 220px;
  height: 124px;
  border-radius: 8px;
  border-width: 3px;
}
.rnly-video-scrub__time {
  display: inline-block;
  margin-top: 3px;
  padding: 1px 6px;
  border-radius: 4px;
  background: rgba(0, 0, 0, 0.7);
  color: #fff;
  font-size: 10px;
  font-weight: 500;
  font-variant-numeric: tabular-nums;
  line-height: 1.4;
  white-space: nowrap;
}

/* ══════════════════════════════════════════════════════════════════
   PLAY / PAUSE TOGGLE
   Centered button that shows when the mouse is moving over a video,
   hides after the mouse rests (idle timeout handled in JS).
   tq-8242: the app's rules ARE the canonical .rnly-video-playpause (the app look wins); the colours read the
   reinly-tokens.css tokens on /Design and fall back to the app's literal values in the app (which doesn't load them).
   ══════════════════════════════════════════════════════════════════ */

.rnly-video-playpause {
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%) scale(0.9);
  -ms-transform: translate(-50%, -50%) scale(0.9);
  transform: translate(-50%, -50%) scale(0.9);
  z-index: 9;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  border: none;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  background: var(--bg-rnly-video-playpause, rgba(0, 0, 0, 0.5));
  backdrop-filter: blur(4px);
  color: var(--fg-rnly-video-playpause, #fff);
  cursor: pointer;
  opacity: 0;
  pointer-events: none;
  -webkit-transition: opacity 0.2s ease, -webkit-transform 0.2s ease;
  transition: opacity 0.2s ease, -webkit-transform 0.2s ease;
  transition: opacity 0.2s ease, transform 0.2s ease;
  transition: opacity 0.2s ease, transform 0.2s ease, -webkit-transform 0.2s ease;
  -webkit-tap-highlight-color: transparent;
}

.rnly-video-playpause:hover {
  background: var(--bg-rnly-video-playpause-hover, rgba(0, 0, 0, 0.65));
  -webkit-transform: translate(-50%, -50%) scale(1);
  -ms-transform: translate(-50%, -50%) scale(1);
  transform: translate(-50%, -50%) scale(1);
}

.rnly-video-playpause:active {
  -webkit-transform: translate(-50%, -50%) scale(0.9);
  -ms-transform: translate(-50%, -50%) scale(0.9);
  transform: translate(-50%, -50%) scale(0.9);
}

/* Visible when mouse is moving (class toggled by JS); tq-9168 (A166): and on keyboard focus (it is the keyboard path to the
   video: a focused play / pause is never invisible) */
.rnly-video-playpause.is-visible,
.rnly-video-playpause:focus-visible {
  opacity: 1;
  pointer-events: auto;
  -webkit-transform: translate(-50%, -50%) scale(1);
  -ms-transform: translate(-50%, -50%) scale(1);
  transform: translate(-50%, -50%) scale(1);
}

/* tq-9168 (A166, isabella 900068922 (A); the media exception of THE HOVER-REVEAL RULE): ON TOUCH ((hover: none) or the coarse
   pointer, scoped like the touch floor: a fine-scope subtree keeps the hover behaviour) the PLAY / PAUSE is always visible (a
   real button: a tap plays / pauses), at least the 44 touch target, and readable over ANY frame: its 50%-black badge is ~4:1
   against a light frame, and a 1px 60%-white ring keeps it >= 3:1 against a dark one (the white glyph is >= 3.9:1 on the badge
   either way).
   tq-9178 (A169, isabella 900068923; replaces A166's "scrub hidden on touch"): the SCRUB is now an operable slider (touch drag,
   keys) and joins the media exception: it shows on a tap with the play / pause (.is-shown, set by Scripts/modules/video-scrub.js),
   hides again during playback, and stays while paused, while dragging, and while KEYBOARD focus is inside the host
   (:focus-visible: a tap that focuses a button does not pin it). A tap's sticky :hover alone never shows it. !important: the
   hover reveals above are up to (0,4,0). */
@media (hover: none), (pointer: coarse) {
  .rnly-video-playpause:where(:not([data-pointer-scope="fine"] *)),
  :where([data-pointer-scope="device"]) .rnly-video-playpause:where(:not([data-pointer-scope="device"] [data-pointer-scope="fine"] *)) {
    opacity: 1;
    pointer-events: auto;
    -webkit-transform: translate(-50%, -50%) scale(1);
    -ms-transform: translate(-50%, -50%) scale(1);
    transform: translate(-50%, -50%) scale(1);
    width: max(36px, var(--control-h-xs));
    height: max(36px, var(--control-h-xs));
    -webkit-box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.6);
    box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.6);
  }
  .rnly-video-scrub:not(.is-shown):where(:not([data-pointer-scope="fine"] *)),
  :where([data-pointer-scope="device"]) .rnly-video-scrub:not(.is-shown):where(:not([data-pointer-scope="device"] [data-pointer-scope="fine"] *)) {
    opacity: 0 !important;
    pointer-events: none !important;
  }
  :is(.rnly-listing-carousel__slide, .pm-photo-thumb, .hd-photo-grid__hero, .hd-photo-grid__tile, [data-lightbox-open][data-media-type="1"]):has(:focus-visible) .rnly-video-scrub {
    opacity: 1 !important;
    pointer-events: auto !important;
  }
}

/* ── Responsive ── */
@media (max-width: 480px) {
.rnly-video-scrub__preview {
    display: none;
  }
.rnly-video-scrub__canvas {
    width: 96px;
    height: 54px;
  }
}

/* ── Reduced motion ── */
@media (prefers-reduced-motion: reduce) {
.rnly-video-scrub,
.rnly-video-scrub__track,
.rnly-video-scrub__handle,
.rnly-video-scrub__preview,
.rnly-video-scrub__fill {
    -webkit-transition: none;
    transition: none;
  }
} /* canonical DS component, imported in place (tq-8177) */
/* ==========================================================================
   Card rail — a horizontally scrolling row of cards (home rails, the Seller
   Today rail, the "more horses" rail on Horses Details / the details modal).
   --------------------------------------------------------------------------
   Canonical Reinly.Design source since tq-8209 (R3b; isabella 900049051): a
   GENERIC primitive (not rnly-), distinct from the slide-viewer .carousel
   (components/data/carousel.css). The app imports it in place (tq-8177), so
   this file is PLAIN CSS + var() tokens.
   The track's flex / gap / snap come from utilities on the markup; the rail
   region, its arrows and the mobile snap live with their owners
   (.rnly-rail / .rnly-rail-arrow, the mobile stylesheets).
   ========================================================================== */

/* ── Scrollable track (hides the scrollbar across browsers) ── */
.card-rail__track {
  scrollbar-width: none;
  -ms-overflow-style: none;
  /* Padding inside the scroll container gives room for
     card--hover-surface ::before (inset: -6px) on edge cards. */
  padding: 10px;
  scroll-padding-inline: 10px;
}

.card-rail__track::-webkit-scrollbar {
  display: none;
} /* canonical DS component, imported in place (tq-8209) */
/* ==========================================================================
   REINLY – Wizard selectable cards (horse-type, listing-type, traits)
   ========================================================================== */

/* ── Base grid ── */
.wizard-card-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.75rem;
}
html.is-mobile #rnly-wizard-modal .wizard-card-grid.grid-cols-2 {
  grid-template-columns: minmax(0, 1fr);
  gap: 16px;
}
html.is-mobile #rnly-wizard-modal .grid.wizard-card-grid {
  grid-template-columns: minmax(0, 1fr);
  gap: 16px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] .wizard-card-grid {
  width: 100%;
  max-width: 100%;
}

@media (min-width: 768px) {
  .wizard-card-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

/* ── Base card ── */
.wizard-card {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  cursor: pointer;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 0.5rem;
  border-radius: 0.75rem;
  border-width: 1px;
  padding: 1rem;
  -webkit-transition-property: all;
  transition-property: all;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  -webkit-transition-duration: 150ms;
  transition-duration: 150ms;
}
.collapse.show.wizard-card {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .wizard-card {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.wizard-card.items-baseline { margin-bottom: 10px; }
html.is-mobile .wizard-card:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .wizard-card.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.wizard-card.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.wizard-card[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-card.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-card.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-card.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-card.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-card.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}
.wizard-card {
  border-color: var(--border-primary);
  background-color: var(--canvas-primary);
}

.wizard-card:hover {
  border-color: var(--border-input-hover);
}

.wizard-card[aria-checked="true"],
.wizard-card--selected {
  border-color: var(--utility-emerald-800);
  -webkit-box-shadow: inset 0 0 0 1px var(--utility-emerald-800);
  box-shadow: inset 0 0 0 1px var(--utility-emerald-800);
}

/* ── Disabled state (max selections reached) ── */
.wizard-card--disabled {
  opacity: 0.35;
  cursor: not-allowed !important;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-transition: opacity 0.2s ease;
  transition: opacity 0.2s ease;
}

.wizard-card--disabled:hover {
  -webkit-transform: none !important;
  -ms-transform: none !important;
  transform: none !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  border-color: var(--border-primary) !important;
}

/* ── Ranked variant (multi-select with numbered badge) ── */
.wizard-card--ranked {
  position: relative;
}

.wizard-card__rank {
  position: absolute;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 9999px;
  font-size: 0.6875rem;
  line-height: 1rem;
  font-weight: 700;
}

.collapse.show.wizard-card__rank {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .wizard-card__rank {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.wizard-card__rank.items-baseline { margin-bottom: 10px; }

html.is-mobile .wizard-card__rank:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .wizard-card__rank.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.wizard-card__rank[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-card__rank.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-card__rank.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-card__rank.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-card__rank.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-card__rank.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.wizard-card__rank {
  top: -6px;
  right: -6px;
  width: 20px;
  height: 20px;
  background-color: var(--utility-emerald-700);
  color: white;
  opacity: 0;
  -webkit-transform: scale(0.5);
  -ms-transform: scale(0.5);
  transform: scale(0.5);
  -webkit-transition: opacity 0.15s ease, -webkit-transform 0.15s ease;
  transition: opacity 0.15s ease, -webkit-transform 0.15s ease;
  transition: opacity 0.15s ease, transform 0.15s ease;
  transition: opacity 0.15s ease, transform 0.15s ease, -webkit-transform 0.15s ease;
  pointer-events: none;
}

.wizard-card--ranked[aria-checked="true"] .wizard-card__rank {
  opacity: 1;
  -webkit-transform: scale(1);
  -ms-transform: scale(1);
  transform: scale(1);
}

/* ── Row variant (listing-type cards) ── */
.wizard-card--row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  cursor: pointer;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
  -ms-flex-direction: row;
  flex-direction: row;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: start;
  -ms-flex-pack: start;
  justify-content: flex-start;
  gap: 0.75rem;
  padding: 1rem;
}
.collapse.show.wizard-card--row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .wizard-card--row {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.wizard-card--row.items-baseline { margin-bottom: 10px; }
html.is-mobile .wizard-card--row:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .wizard-card--row.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.wizard-card--row[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-card--row.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-card--row.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-card--row.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-card--row.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-card--row.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

/* ── Trait variant (compact) ── */

/* ── Large grid variant (horse-type step) ── */
.wizard-card-grid--lg {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
html.is-mobile #rnly-wizard-modal .grid.wizard-card-grid--lg {
  grid-template-columns: minmax(0, 1fr);
  gap: 16px;
}

@media (min-width: 768px) {
  .wizard-card-grid--lg {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
}

@media (min-width: 1024px) {
  .wizard-card-grid--lg {
    grid-template-columns: repeat(5, minmax(0, 1fr));
  }
}

/* ── Google Places suggestions (the listing wizard, the listing editor, the address modal) ──
   tq-8211 (R3c): moved here from the retired wizard select picker's classes (breed / color are the ONE combobox
   now), so the suggestion list keeps its look under a places-owned name. */
.rnly-places-dropdown {
  position: absolute;
  left: 0px;
  right: 0px;
  border-radius: 0.5rem;
  border-width: 1px;
  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  z-index: var(--z-dropdown);
  top: calc(100% + 4px);
  background-color: var(--bg-dropdown);
  border-color: var(--border-dropdown);
  max-height: 240px;
  overflow: hidden;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
}

.rnly-places-dropdown[hidden] {
  display: none;
}

.rnly-places-list {
  overflow-y: auto;
  padding-top: 0.25rem;
  padding-bottom: 0.25rem;
  max-height: 180px;
}

.rnly-places-list li {
  cursor: pointer;
  padding-left: 0.75rem;
  padding-right: 0.75rem;
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
  font-size: 0.8125rem;
  line-height: 1.5rem;
  color: var(--text-dropdown-item);
}

.rnly-places-list li:hover,
.rnly-places-list li.is-highlighted {
  background-color: var(--bg-dropdown-hover);
}
/* tq-9540 (A285): the edge swipe-back affordance (Scripts/mobile.js). It exists only in an iOS standalone PWA: a
   browser tab's native back owns the gesture, so nothing is drawn there. The chevron follows the finger from the
   left edge (the script writes its transform / opacity during the drag) and settles back on release. */
.rnly-edge-back {
  position: fixed;
  top: 50%;
  left: calc(env(safe-area-inset-left, 0px) + 4px);
  z-index: var(--z-edge-back);   /* tq-9596: the ladder token (layout.css :root), above the lightbox */
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  border-radius: 9999px;
  background: var(--bg-primary);
  color: var(--text-primary);
  -webkit-box-shadow: var(--shadow-md);
  box-shadow: var(--shadow-md);
  opacity: 0;
  -webkit-transform: translate3d(0, -50%, 0);
  transform: translate3d(0, -50%, 0);
  pointer-events: none;
}

/* Measures env(safe-area-inset-left) once, so the edge zone is 20px plus the inset. */
.rnly-edge-back__probe {
  position: fixed;
  visibility: hidden;
  padding-left: env(safe-area-inset-left, 0px);
}

/* tq-9581 (A300): every page's Back control ([data-rnly-back]: the labelled 'Back to {parent}', whose href the swipe-back above
   falls back to) is a 44px target on touch, whatever its size tier (the round 40 / 36 / 32px icon buttons, the help and
   support text links). A minimum, so a larger control keeps its size; a round icon button stays round (both sides 44). */
@media (pointer: coarse) {
  [data-rnly-back] {
    min-width: 44px;
    min-height: 44px;
  }
}

/* tq-9581 (A300): the phone back pill (.rnly-modal-back) placed over a full-bleed map, where a page's list header (and its Back) is
   hidden on phones (Buyer/Wishlists/Detail): pinned top-left like the map shell's pills, clear of the notch, on a solid chip. */
.rnly-map-back {
  position: absolute;
  top: calc(env(safe-area-inset-top, 0px) + 12px);
  left: 12px;
  z-index: 2;
  background: var(--bg-primary);
  -webkit-box-shadow: var(--shadow-md);
  box-shadow: var(--shadow-md);
} /* tq-9540: the iOS-standalone edge swipe-back affordance */
/* ==========================================================================
   Stepper layouts: .stepper--bar / .stepper--rail (tq-8324 R3a2)
   --------------------------------------------------------------------------
   The two stepper layouts reinly.webapp ships, carried on the DS part names
   (.step, .step-content, .step-number, .step-title, .step-connector,
   .step-connector-fill, .step__substeps, .step__substep, .step__body).
     --bar   horizontal segmented bar (listing wizard, editor header)
     --rail  vertical rail with nested sub-steps (editor sidebar)
   Plain CSS: the app imports this file in place (R4 guard), so no @apply,
   @utility or theme(). It is self-sufficient in the app (which does not
   import stepper.css) and, in the DS, wins over the stepper.css base by
   specificity (.stepper.stepper--x .part).
   Progress: the bar's fill reads --step-bar-progress and the rail's fill
   height defaults to --stepper-v-progress; the app's listings.js drives them
   inline (the var on the bar .step, style.height on the rail fill).
   The current step carries aria-current="step".
   ========================================================================== */

/* RESETS (isabella: only where specificity can't do it). In the DS, stepper.css's base part rules
   also match these elements and set properties the live looks never set; specificity can't unset a
   property, so each is put back to the value the app computes (measured: the DS docs markup rendered
   in the app vs on /Design). In the app these equal the defaults, so they change nothing there.
   They come first so the layout rules below still win. */
.stepper.stepper--bar .step,
.stepper.stepper--rail .step {
  position: static;          /* base: relative */
  margin-bottom: 0;          /* base: 8px */
  -webkit-box-align: normal;
  -ms-flex-align: normal;
  align-items: normal;       /* base: flex-start */
  -webkit-column-gap: normal;
  -moz-column-gap: normal;
  column-gap: normal;        /* base (rail): 12px */
  min-width: auto;           /* base (rail): 0 */
}

.stepper.stepper--bar .step-content,
.stepper.stepper--rail .step-content {
  position: static;          /* base: relative */
  z-index: auto;             /* base: 1 */
  min-width: auto;           /* base: 0 */
}

.stepper.stepper--bar .step-connector,
.stepper.stepper--rail .step-connector {
  position: static;          /* base: absolute */
  z-index: auto;             /* base: 0 */
  min-width: auto;           /* base: 0 */
  min-height: auto;          /* base: 0 */
  pointer-events: inherit;   /* base: none (an inherited property: inherit = the app's value) */
}

.stepper.stepper--bar .step-connector-fill,
.stepper.stepper--rail .step-connector-fill {
  pointer-events: inherit;   /* base: none */
}

.stepper.stepper--bar .step__substeps,
.stepper.stepper--rail .step__substeps {
  border-left-width: 0;      /* base: a 1px dashed guide line; longhands, so the */
  border-left-style: solid;  /* colour keeps its preflight value */
  margin-top: 0;             /* base (rail): 4px */
}

.stepper.stepper--bar .step__substep,
.stepper.stepper--rail .step__substep {
  position: static;          /* base: relative */
}

.stepper.stepper--bar {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
  gap: var(--gap-step-bar, 3px);
}

.stepper.stepper--bar .step {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  min-width: 0px;
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0%;
  flex: 1 1 0%;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
}

.stepper.stepper--bar .step-content {
  margin-bottom: 0.5rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.375rem;
  padding-left: 0.125rem;
  padding-right: 0.125rem;
}

.stepper.stepper--bar .step-number {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 9999px;
  font-size: 0.6875rem;
  line-height: 1rem;
  font-weight: 600;
  width: 18px;
  height: 18px;
  background-color: var(--bg-step-indicator);
  border: 1px solid var(--border-step-indicator);
  color: var(--text-step-indicator);
}

.stepper.stepper--bar .step-title {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 0.75rem;
  line-height: 1rem;
  font-weight: 500;
  color: var(--text-step-subtitle);
}

.stepper.stepper--bar .step__substeps {
  margin-top: 0.25rem;
  margin-bottom: 0.375rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  gap: 0.125rem;
  padding-left: 0.125rem;
  padding-right: 0.125rem;
}

.stepper.stepper--bar .step__substep {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0%;
  flex: 1 1 0%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 0.6875rem;
  line-height: 1rem;
  color: var(--text-step-subtitle);
}

.stepper.stepper--bar .step-connector {
  margin-top: auto;
  width: 100%;
  overflow: hidden;
  height: var(--h-step-bar, 4px);
  border-radius: var(--radius-step-bar, 999px);
  background-color: var(--bg-step-connector);
}

.stepper.stepper--bar .step-connector-fill {
  height: 100%;
  width: 0%;
  border-radius: inherit;
  background-color: var(--bg-step-bar-fill, var(--bg-step-connector-fill));
  -webkit-transition: width 300ms cubic-bezier(0.4, 0, 0.2, 1);
  transition: width 300ms cubic-bezier(0.4, 0, 0.2, 1);
}

.stepper.stepper--bar .step.is-completed .step-connector-fill {
  width: 100%;
}

.stepper.stepper--bar .step.is-completed .step-number {
  background-color: var(--bg-step-completed);
  border-color: var(--border-step-completed);
  color: var(--text-step-completed);
}

.stepper.stepper--bar .step.is-completed .step-title {
  color: var(--text-step-title);
}

.stepper.stepper--bar .step.is-current .step-connector-fill {
  width: var(--step-bar-progress, 50%);
}

.stepper.stepper--bar .step.is-current .step-number {
  background-color: var(--bg-step-current);
  border-color: var(--border-step-current);
  color: var(--text-step-current);
}

.stepper.stepper--bar .step.is-current .step-title {
  color: var(--text-step-title-current);
  font-weight: 600;
}

.stepper.stepper--bar .step__substep.is-completed {
  color: var(--text-step-title);
  font-weight: 500;
}

.stepper.stepper--bar .step__substep.is-current {
  color: var(--text-step-title-current);
  font-weight: 600;
}

@media (prefers-reduced-motion: reduce) {
  .stepper.stepper--bar .step-connector-fill {
    -webkit-transition: none;
    transition: none;
  }
}

.stepper.stepper--rail {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 0.25rem;
}

.stepper.stepper--rail .step {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
}

.stepper.stepper--rail .step-content {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  cursor: pointer;
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;   /* tq-9629 (A314): the marker sits on the title's FIRST line (the title may wrap) */
  gap: 0.5rem;
  border-radius: 0.375rem;
  padding: 4px 6px 4px 4px;
  margin: 0 -4px;
  -webkit-transition: background-color 0.12s ease;
  transition: background-color 0.12s ease;
}

.stepper.stepper--rail .step-content:hover {
  background-color: var(--bg-button-secondary-hover, var(--utility-neutral-100));
}

.stepper.stepper--rail .step-number {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 9999px;
  font-size: 0.6875rem;
  line-height: 1rem;
  font-weight: 600;
  width: 20px;
  height: 20px;
  background-color: var(--utility-neutral-200);
  color: var(--text-tertiary);
  -webkit-transition: background-color 0.15s ease, color 0.15s ease;
  transition: background-color 0.15s ease, color 0.15s ease;
}

/* tq-9629 (A314; isabella 900077777): a step title is meaning-bearing navigation, so it WRAPS, never ellipsizes ("wrap,
   never truncate"; touch has no hover for a title / aria fallback). Long single words (German compounds) break, hyphenated
   where the language allows, anywhere otherwise; balanced where supported. The rail keeps its width: titles grow down. The top margin is half the marker / line-height
   difference ((20px - 1rem) / 2), so the marker's centre is the first line's centre. */
.stepper.stepper--rail .step-title {
  min-width: 0;
  margin-top: calc((20px - 1rem) / 2);
  white-space: normal;
  overflow-wrap: anywhere;     /* a word too long for its line breaks at a syllable, with a hyphen, in the page language */
  -ms-hyphens: auto;
  hyphens: auto;
  text-wrap: balance;
  font-size: 0.75rem;
  line-height: 1rem;
  font-weight: 500;
  color: var(--text-tertiary);
  -webkit-transition: color 0.15s ease;
  transition: color 0.15s ease;
}

.stepper.stepper--rail .step__body {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  padding-left: 9px;
  gap: 0;
}

.stepper.stepper--rail .step-connector {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  overflow: hidden;
  border-radius: 9999px;
  width: 2px;
  background-color: var(--utility-neutral-200);
  margin: 2px 0;
}

.stepper.stepper--rail .step-connector-fill {
  width: 100%;
  border-radius: 9999px;
  height: var(--stepper-v-progress, 0%);
  background-color: var(--utility-neutral-400);
}

.stepper.stepper--rail.stepper--animate .step-connector-fill {
  -webkit-transition: height 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  transition: height 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.stepper.stepper--rail .step__substeps {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0%;
  flex: 1 1 0%;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 0px;
  padding-left: 8px;
}

.stepper.stepper--rail .step__substep {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.5rem;
  text-align: left;
  font-size: 0.75rem;
  line-height: 1rem;
  padding: 5px 8px 5px 6px;
  border-radius: 6px;
  color: var(--text-quaternary);
  -webkit-transition: color 0.12s ease, background-color 0.12s ease;
  transition: color 0.12s ease, background-color 0.12s ease;
  border: none;
  background: none;
}

.stepper.stepper--rail .step__substep:hover {
  color: var(--text-primary);
  background-color: var(--bg-button-secondary-hover, var(--utility-neutral-100));
}

.stepper.stepper--rail .step__substep::before {
  content: '';
  display: inline-block;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background-color: var(--utility-neutral-300);
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-transition: background-color 0.2s ease;
  transition: background-color 0.2s ease;
}

.stepper.stepper--rail .step.is-active .step-number {
  background-color: var(--text-primary);
  color: white;
}

.stepper.stepper--rail .step.is-active .step-title {
  color: var(--text-primary);
}

.stepper.stepper--rail .step.is-active .step-connector-fill {
  background-color: var(--text-primary);
}

.stepper.stepper--rail .step.is-active .step__substep {
  color: var(--text-tertiary);
}

.stepper.stepper--rail .step.is-active .step__substep:hover {
  color: var(--text-primary);
}

.stepper.stepper--rail .step.is-completed .step-number {
  background-color: var(--bg-accent-solid);
  color: var(--text-on-accent-solid);
}

.stepper.stepper--rail .step.is-completed .step-title {
  color: var(--text-secondary);
}

.stepper.stepper--rail .step.is-completed .step-connector-fill {
  height: 100%;
  background-color: var(--utility-emerald-500);
}

.stepper.stepper--rail .step.is-completed .step__substep {
  color: var(--text-tertiary);
}

.stepper.stepper--rail .step__substep.is-active {
  color: var(--text-primary);
  font-weight: 600;
  background-color: var(--bg-button-secondary-hover, var(--utility-neutral-100));
}

.stepper.stepper--rail .step__substep.is-active::before {
  background-color: var(--text-primary);
}

.stepper.stepper--rail .step__substep.is-completed::before {
  background-color: var(--utility-emerald-600);
}

.stepper.stepper--bar {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
  gap: 0.5rem;
}

.stepper.stepper--bar .step {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  min-width: 0px;
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0%;
  flex: 1 1 0%;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 0.125rem;
  --step-bar-progress: 0%;
}

.stepper.stepper--bar .step-content {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.375rem;
  border-radius: 0.375rem;
  text-decoration-line: none;
  padding: 2px 6px 2px 2px;
  margin: -2px -6px -2px -2px;
  -webkit-transition: background-color 0.12s ease;
  transition: background-color 0.12s ease;
}

.stepper.stepper--bar .step-content:hover {
  background-color: var(--bg-button-secondary-hover, var(--utility-neutral-100));
}

.stepper.stepper--bar .step-number {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 9999px;
  font-size: 0.6875rem;
  line-height: 1rem;
  font-weight: 600;
  width: 18px;
  height: 18px;
  background-color: var(--utility-neutral-200);
  color: var(--text-tertiary);
  -webkit-transition: background-color 0.2s ease, color 0.2s ease;
  transition: background-color 0.2s ease, color 0.2s ease;
}

.stepper.stepper--bar .step-title {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 0.75rem;
  line-height: 1rem;
  font-weight: 500;
  color: var(--text-tertiary);
  -webkit-transition: color 0.2s ease;
  transition: color 0.2s ease;
}

.stepper.stepper--bar .step-connector {
  width: 100%;
  overflow: hidden;
  border-radius: 9999px;
  height: 3px;
  background-color: var(--utility-neutral-200);
}

.stepper.stepper--bar .step-connector-fill {
  height: 100%;
  border-radius: 9999px;
  width: var(--step-bar-progress, 0%);
  background-color: var(--utility-neutral-400);
}

.stepper.stepper--bar.stepper--animate .step-connector-fill {
  -webkit-transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.stepper.stepper--bar .step.is-completed .step-number {
  background-color: var(--bg-accent-solid);
  color: var(--text-on-accent-solid);
}

.stepper.stepper--bar .step.is-completed .step-title {
  color: var(--text-secondary);
}

.stepper.stepper--bar .step.is-completed .step-connector-fill {
  width: 100%;
  background-color: var(--utility-emerald-500);
}

.stepper.stepper--bar .step.is-current .step-number {
  background-color: var(--text-primary);
  color: white;
}

.stepper.stepper--bar .step.is-current .step-title {
  color: var(--text-primary);
}

.stepper.stepper--bar .step.is-current .step-connector-fill {
  background-color: var(--text-primary);
}

.stepper.stepper--bar .step__substeps {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-column-gap: 0.125rem;
  -moz-column-gap: 0.125rem;
  column-gap: 0.125rem;
  row-gap: 0px;
}

.stepper.stepper--bar .step__substep {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  font-size: 0.6875rem;
  line-height: 1rem;
  text-decoration-line: none;
  padding: 1px 6px 1px 4px;
  border-radius: 4px;
  color: var(--text-quaternary);
  -webkit-transition: color 0.12s ease, background-color 0.12s ease;
  transition: color 0.12s ease, background-color 0.12s ease;
  line-height: 1.6;
}

.stepper.stepper--bar .step__substep:hover {
  color: var(--text-primary);
  background-color: var(--bg-button-secondary-hover, var(--utility-neutral-100));
}

.stepper.stepper--bar .step__substep::before {
  content: '';
  display: inline-block;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background-color: var(--utility-neutral-300);
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-transition: background-color 0.2s ease;
  transition: background-color 0.2s ease;
}

.stepper.stepper--bar .step.is-current .step__substep {
  color: var(--text-tertiary);
}

.stepper.stepper--bar .step.is-current .step__substep:hover {
  color: var(--text-primary);
}

.stepper.stepper--bar .step.is-completed .step__substep {
  color: var(--text-tertiary);
}

.stepper.stepper--bar .step.is-completed .step__substep:hover {
  color: var(--text-primary);
}

.stepper.stepper--bar .step__substep.is-active {
  color: var(--text-primary);
  font-weight: 500;
}

.stepper.stepper--bar .step__substep.is-active::before {
  background-color: var(--text-primary);
}

.stepper.stepper--bar .step__substep.is-completed::before {
  background-color: var(--utility-emerald-600);
}

@media (max-width: 480px) {
  .stepper.stepper--bar .step-title {
    display: none;
  }
  .stepper.stepper--bar .step__substeps {
    display: none;
  }
}

/* ==========================================================================
   Stepper shell: a --rail beside its content, collapsing to the bar layout when narrow (tq-8424 A39; isabella 900052823)
   --------------------------------------------------------------------------
     .stepper-shell            the container whose WIDTH decides (container-type: inline-size)
       .stepper-shell__body    the row: the nav column + the content
         .stepper-shell__nav   the rail's column (220px wide, a divider on its right)
           .stepper-shell__navlist   the rail .stepper (+ an optional trailing .stepper, e.g. History)
   When the shell is narrower than 48rem (a full-screen modal on a phone, or an editor squeezed by a side nav), the
   SAME rail markup is laid out as the bar: the groups in one row with their progress under them, and only the ACTIVE
   group's sub-steps below, as one horizontally scrolling row (snap; targets >= 44px); a trailing .stepper (History) sits
   at the end of that row. The JS keeps the active sub-step scrolled into view. One nav DOM, no mobile copy.
   Progress: the group's fill reads --stepper-v-progress (as a height on the rail, as a width here).
   Plain CSS (the app imports this file in place: R4).
   ========================================================================== */
.stepper-shell {
  container-type: inline-size;
}

.stepper-shell__nav {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  width: 220px;
  border-right: 1px solid var(--border-primary);
  overflow-y: auto;
}

@container (max-width: 48rem) {
  .stepper-shell__body {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }

  .stepper-shell__nav {
    width: auto;
    border-right: 0;
    border-bottom: 1px solid var(--border-primary);
    overflow: visible;
  }

  .stepper-shell__nav > .stepper-shell__navlist {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    -webkit-box-align: end;
    -ms-flex-align: end;
    align-items: end;
    -webkit-column-gap: 0.5rem;
    -moz-column-gap: 0.5rem;
    column-gap: 0.5rem;
    padding-top: 0.75rem;
    padding-bottom: 0.25rem;
  }

  /* the groups: one row of headers, their progress bars under them, then the active group's sub-steps */
  .stepper-shell .stepper.stepper--rail:has(> .step) {
    display: grid;
    grid-template-columns: repeat(var(--stepper-groups, 3), minmax(0, 1fr));
    -webkit-column-gap: var(--gap-step-bar, 3px);
    -moz-column-gap: var(--gap-step-bar, 3px);
    column-gap: var(--gap-step-bar, 3px);
    row-gap: 0;
  }

  .stepper-shell .stepper.stepper--rail .step,
  .stepper-shell .stepper.stepper--rail .step__body {
    display: contents;
  }

  .stepper-shell .stepper.stepper--rail .step-content {
    grid-row: 1;
    margin: 0 0 0.375rem;
    padding: 0 0.125rem;
    gap: 0.375rem;
    min-width: 0;
  }

  .stepper-shell .stepper.stepper--rail .step-content:hover {
    background-color: transparent;
  }

  .stepper-shell .stepper.stepper--rail .step-number {
    width: 18px;
    height: 18px;
  }

  /* tq-9629 (A314): the collapsed group headers wrap too; the 18px marker centres on the first line */
  .stepper-shell .stepper.stepper--rail .step-title {
    margin-top: calc((18px - 1rem) / 2);
  }

  .stepper-shell .stepper.stepper--rail .step-connector {
    grid-row: 2;
    width: 100%;
    height: var(--h-step-bar, 4px);
    margin: 0;
    border-radius: var(--radius-step-bar, 999px);
  }

  .stepper-shell .stepper.stepper--rail .step-connector-fill {
    width: var(--stepper-v-progress, 0%);
    height: 100%;
  }

  .stepper-shell .stepper.stepper--rail.stepper--animate .step-connector-fill {
    -webkit-transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  }

  /* only the active group's sub-steps, as one scrolling row under the whole bar */
  .stepper-shell .stepper.stepper--rail .step__substeps {
    display: none;
  }

  .stepper-shell .stepper.stepper--rail .step.is-active .step__substeps {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    grid-row: 3;
    grid-column: 1 / -1;
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
    -ms-flex-direction: row;
    flex-direction: row;
    gap: 0.25rem;
    margin-top: 0.25rem;
    padding-left: 0;
    overflow-x: auto;
    overflow-y: hidden;   /* x-auto alone coerces y to auto and can show a phantom vertical scrollbar */
    -ms-scroll-snap-type: x proximity;
    scroll-snap-type: x proximity;
    overscroll-behavior-x: contain;
  }

  .stepper-shell .stepper.stepper--rail .step__substep {
    -webkit-box-flex: 0;
    -ms-flex: 0 0 auto;
    flex: 0 0 auto;
    width: auto;
    min-height: 44px;
    white-space: nowrap;
    scroll-snap-align: start;
  }

  /* a trailing stepper (History): the end of the sub-step row */
  .stepper-shell__navlist > .stepper.stepper--rail:not(:has(> .step)) {
    margin-top: 0;
  }

  .stepper-shell__navlist > .stepper.stepper--rail:not(:has(> .step)) .step__substeps {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    margin: 0;
    padding-left: 0;
  }
} /* the ONE stepper: .stepper--bar / .stepper--rail, canonical DS companion imported in place (tq-8324 R3a2; was stepper-bar.css + input_group.css + stepper-vertical.css) */
/* ==========================================================================
   Quantity input (stepper) — Reinly.Design OWNS it; reinly.webapp imports this file IN PLACE (tq-8177 R4 pipeline).
   tq-8208 (R3a; isabella 900048923 / 900049204): moved out of forms-inputs-ex.css, plus the ONE round variant that
   carries the served Reinly app's listing-wizard / editor counter (@ 09387252) as a modifier. Generic DS names kept.
   PLAIN CSS + var() tokens only (app-imported-plain-css test).

   - .qty-input (default): an inset-ring box with square end buttons and a centred field.
   - .qty-input.qty-input--round: separate 40px round DS buttons (they keep .btn-secondary .btn-icon .btn-icon-sm for
     the button look) around a large editable field (the form-control look, 0.75rem radius, white).
     <div class="qty-input qty-input--round">
       <button type="button" class="btn-secondary btn-icon btn-icon-sm qty-input__btn" aria-label="Decrease age">…</button>
       <input type="text" inputmode="numeric" class="qty-input__field" aria-label="Age" … />
       <button type="button" class="btn-secondary btn-icon btn-icon-sm qty-input__btn" aria-label="Increase age">…</button>
     </div>
   - .qty-input.qty-input--compact (tq-8316 R3h; isabella 900049206 b): the served bookings counter (seller booking
     settings + appointment types): 28px round outlined buttons around a 64px boxed numeric field, centred in a row.
     <div class="qty-input qty-input--compact">
       <button type="button" class="qty-input__btn" aria-label="Decrease">…</button>
       <input type="text" inputmode="numeric" class="qty-input__field" aria-label="Duration" … />
       <button type="button" class="qty-input__btn" aria-label="Increase">…</button>
     </div>
   ========================================================================== */

/* --- default: the boxed stepper ------------------------------------------- */
.qty-input:not(.qty-input--round):not(.qty-input--compact) {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: stretch;
  -ms-flex-align: stretch;
  align-items: stretch;
  /* tq-9138 (A157): the box the finger hits floors at 44 under a finger. tq-9159 (A163, isabella 900068642): and at the xs
     rung (24, the WCAG 2.5.8 minimum) on a fine pointer too; its content alone made it ~20px. The one deliberate fine change. */
  min-height: var(--control-h-xs);
  border-radius: var(--radius-lg);
  background: var(--bg-input, var(--bg-primary));
  -webkit-box-shadow: inset 0 0 0 1px var(--border-input);
  box-shadow: inset 0 0 0 1px var(--border-input);
  overflow: hidden;
  -webkit-transition: -webkit-box-shadow var(--duration-fast) var(--ease-default);
  transition: -webkit-box-shadow var(--duration-fast) var(--ease-default);
  transition: box-shadow var(--duration-fast) var(--ease-default);
  transition: box-shadow var(--duration-fast) var(--ease-default), -webkit-box-shadow var(--duration-fast) var(--ease-default);
}
.qty-input:not(.qty-input--round):not(.qty-input--compact):focus-within { outline: 2px solid var(--focus-ring); outline-offset: -2px; }
.qty-input:not(.qty-input--round):not(.qty-input--compact) .qty-input__btn {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  /* tq-9138 (A157): -/+ stretch to the wrapper's 44 under a finger; their WIDTH floors on the same token (36 -> 44) instead
     of a hit-slop, because the wrapper clips (overflow: hidden, load-bearing for its radius) and a centred slop would cover
     the field: fine unchanged */
  width: max(2.25rem, var(--control-h-xs));
  border: 0;
  background: transparent;
  color: var(--text-secondary);
  cursor: pointer;
  font-size: 0.875rem;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -webkit-transition: background var(--duration-fast) var(--ease-default);
  transition: background var(--duration-fast) var(--ease-default);
}
.qty-input:not(.qty-input--round):not(.qty-input--compact) .qty-input__btn:hover { background: var(--bg-tertiary); }
.qty-input:not(.qty-input--round):not(.qty-input--compact) .qty-input__btn:disabled { color: var(--text-disabled); cursor: not-allowed; }
.qty-input:not(.qty-input--round):not(.qty-input--compact) .qty-input__btn:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: -2px; }
.qty-input:not(.qty-input--round):not(.qty-input--compact) .qty-input__field {
  width: 3.25rem;
  border: 0;
  background: transparent;
  outline: none;
  text-align: center;
  font: inherit;
  font-variant-numeric: tabular-nums;
  color: var(--text-primary);
}

/* sizes + states (default variant) */
.qty-input--sm .qty-input__btn { width: max(1.75rem, var(--control-h-xs)); font-size: 0.75rem; }   /* tq-9138: 44 under a finger */
.qty-input--sm .qty-input__field { width: 2.5rem; font-size: 0.8125rem; }
.qty-input--lg .qty-input__btn { width: 2.75rem; font-size: 1rem; }
.qty-input--lg .qty-input__field { width: 4rem; font-size: 1.0625rem; --ctl-fs: 1.0625rem; }   /* tq-9107 (A147): --ctl-fs declared for the touch font floor */
.qty-input.is-disabled { background: var(--bg-input-disabled); -webkit-box-shadow: inset 0 0 0 1px var(--border-input); box-shadow: inset 0 0 0 1px var(--border-input); }
.qty-input.is-disabled .qty-input__field { color: var(--text-disabled); pointer-events: none; }
.qty-input.is-error { -webkit-box-shadow: inset 0 0 0 1px var(--border-input-error); box-shadow: inset 0 0 0 1px var(--border-input-error); }

.qty-input__unit {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  padding: 0 0.625rem 0 0.25rem;
  font-size: 0.75rem;
  color: var(--text-tertiary);
}

/* the field is text (inputmode=numeric) — belt-and-suspenders if set to number */
.qty-input__field::-webkit-outer-spin-button,
.qty-input__field::-webkit-inner-spin-button { -webkit-appearance: none; appearance: none; margin: 0; }

/* --- round: the served Reinly wizard / editor counter ---------------------- */
.qty-input--round {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 0.75rem;
}

.qty-input--round .qty-input__btn {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 2.5rem;
  height: 2.5rem;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 9999px;
}

.qty-input--round .qty-input__field {
  display: block;
  width: 80px;
  min-height: 2.75rem;
  padding: 0.5rem;
  border-width: 1px;
  border-color: var(--border-input);
  border-radius: 0.75rem;
  outline: 2px solid transparent;
  outline-offset: 2px;
  background-color: #fff;
  -webkit-box-shadow: inset 0 0 0 1px var(--border-input);
  box-shadow: inset 0 0 0 1px var(--border-input);
  color: var(--text-primary);
  caret-color: var(--utility-emerald-800);
  font-size: 1.75rem;
  --ctl-fs: 1.75rem;   /* tq-9107 (A147): declared, so the coarse-pointer font floor's max() keeps this size */
  line-height: 2.5rem;
  letter-spacing: -0.01em;
  font-weight: 500;
  text-align: center;
  cursor: text;
  -moz-appearance: textfield;
  -webkit-tap-highlight-color: transparent;
  -webkit-transition: border-color 75ms ease-in-out, background-color 75ms ease-in-out, -webkit-box-shadow 75ms ease-in-out;
  transition: border-color 75ms ease-in-out, background-color 75ms ease-in-out, -webkit-box-shadow 75ms ease-in-out;
  transition: border-color 75ms ease-in-out, box-shadow 75ms ease-in-out, background-color 75ms ease-in-out;
  transition: border-color 75ms ease-in-out, box-shadow 75ms ease-in-out, background-color 75ms ease-in-out, -webkit-box-shadow 75ms ease-in-out;
}

.qty-input--round .qty-input__field:hover {
  border-color: var(--border-input-hover);
  -webkit-box-shadow: inset 0 0 0 1px var(--border-input-hover);
  box-shadow: inset 0 0 0 1px var(--border-input-hover);
}

.qty-input--round .qty-input__field:focus {
  border-color: var(--border-input-active);
  -webkit-box-shadow: inset 0 0 0 1px var(--border-input-active);
  box-shadow: inset 0 0 0 1px var(--border-input-active);
}

.qty-input--round .qty-input__field[readonly] {
  background-color: var(--bg-input-readonly, var(--utility-neutral-100));
  border-color: var(--border-input);
  -webkit-box-shadow: inset 0 0 0 1px var(--border-input);
  box-shadow: inset 0 0 0 1px var(--border-input);
}

.qty-input--round .qty-input__field:disabled {
  background-color: var(--bg-input-disabled);
  border-color: var(--border-input-disabled);
  -webkit-box-shadow: inset 0 0 0 1px var(--border-input-disabled);
  box-shadow: inset 0 0 0 1px var(--border-input-disabled);
  cursor: not-allowed;
  opacity: 0.75;
}

.qty-input--round .qty-input__field::-moz-selection {
  background-color: var(--bg-input-selection, var(--utility-blue-200));
  color: var(--text-input-selection, var(--text-primary));
}

.qty-input--round .qty-input__field::selection {
  background-color: var(--bg-input-selection, var(--utility-blue-200));
  color: var(--text-input-selection, var(--text-primary));
}

/* --- compact: the served Reinly bookings counter (tq-8316 R3h) -------------
   Moved verbatim from the app's flows/booking-center.css .bkg-types__counter-controls / -btn / -value (the served
   look, white surfaces included). The field layout around it (label above, unit suffix below) stays the app's. */
.qty-input--compact {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  /* tq-9138 (A157): the row floors at 44 under a finger (36 on a fine pointer); its 28px round buttons carry the 44px
     hit-slop (8px overhang), so the gap to the field opens to 8px under a finger: 6px on a fine pointer */
  min-height: var(--control-h-xs);
  gap: max(6px, calc((var(--control-h-xs) - 28px) / 2));
  width: 100%;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}

.qty-input--compact .qty-input__btn {
  width: 28px;
  height: 28px;
  border-radius: 9999px;
  border: 1px solid var(--border-primary);
  background: #fff;
  color: var(--text-secondary);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  cursor: pointer;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  font-size: 11px;
  -webkit-transition: border-color 120ms ease, color 120ms ease, background-color 120ms ease;
  transition: border-color 120ms ease, color 120ms ease, background-color 120ms ease;
}

.qty-input--compact .qty-input__btn:hover {
  border-color: var(--utility-emerald-800);
  color: var(--utility-emerald-800);
}

.qty-input--compact .qty-input__btn:disabled {
  opacity: 0.35;
  cursor: not-allowed;
}

.qty-input--compact .qty-input__field {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0px;
  flex: 1 1 0;
  min-width: 0;
  max-width: 64px;
  height: 36px;
  border: 1px solid var(--border-primary);
  background-color: #fff;
  border-radius: 8px;
  text-align: center;
  font-size: 16px;
  font-weight: 700;
  color: var(--text-primary);
  font-variant-numeric: tabular-nums;
  outline: none;
  padding: 0 6px;
  -moz-appearance: textfield;
  -webkit-transition: border-color 120ms ease;
  transition: border-color 120ms ease;
}

.qty-input--compact .qty-input__field:hover {
  border-color: var(--border-input-hover, var(--utility-emerald-800));
}

.qty-input--compact .qty-input__field:focus,
.qty-input--compact .qty-input__field:focus-visible {
  border-color: var(--border-input-active, var(--utility-emerald-800));
  -webkit-box-shadow: none;
  box-shadow: none;
  outline: none;
}

@media (prefers-reduced-motion: reduce) {
  .qty-input:not(.qty-input--round):not(.qty-input--compact), .qty-input:not(.qty-input--round):not(.qty-input--compact) .qty-input__btn { -webkit-transition: none; transition: none; }
} /* canonical DS quantity input, imported in place (tq-8208) */
/* =========================================================
   Chip — THE one chip (tq-8209 R3b; isabella 900049015 / 900049051)
   ---------------------------------------------------------
   Base .chip = the live Reinly filter pill (the served quick-filter
   chip). Everything that used to be its own chip is a variant of it:

     .chip--toggle      checkbox-backed / .is-active filter chip
                        (was .fd-chip / .qf-chip)
     .chip--selectable  role="checkbox" trait chip, .is-selected /
                        .is-disabled (was .feature-chip)
     .chip--primary / --success / --warning / --danger / --info / --muted
                        tones (the Payments status chips; tone text >= 4.5:1
                        on its fill in both themes)
     .chip--outline, --clickable, --filter, --selected, --removable +
     __dismiss, --md / --lg, --enter     (the /Design showcase variants)

   Placement differences live with the container, not here: the drawer's
   chips are `.fd-chip-group .chip` (filter-drawer.css), the price tiers
   `.rnly-price-tiers .chip` (the app).

   PLAIN CSS: the app's Tailwind-3 compile imports this file in place
   (tq-8177), so no Tailwind directives or functions (R4 guard).
   Interactivity (dismiss / toggle) for the showcase chips is driven by
   the delegated Scripts/chip-wire.js (window.HawkChip).
   ========================================================= */

/* Base — the live filter pill. Size is var-driven so a size rung
   (--md / --lg / --filter) can change it without touching the base. */
.chip {
  --chip-font: 13px;
  --chip-gap: 8px;
  --chip-pad-y: 10px;
  --chip-pad-x: 16px;
  --chip-min-h: 0;
  --chip-icon: 13px;
  --chip-dismiss: 16px;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: var(--chip-gap);
  padding: var(--chip-pad-y) var(--chip-pad-x);
  min-height: var(--chip-min-h);
  font-size: var(--chip-font);
  font-weight: 500;
  border-radius: 9999px;
  background-color: var(--chip-bg);
  color: var(--text-primary);
  border: 1px solid var(--border-primary);
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-transition: border-color var(--duration-fast) var(--ease-default), background-color var(--duration-fast) var(--ease-default), color var(--duration-fast) var(--ease-default);
  transition: border-color var(--duration-fast) var(--ease-default), background-color var(--duration-fast) var(--ease-default), color var(--duration-fast) var(--ease-default);   /* tq-9626: the shared tokens (was its own .12s) */
}

.chip__icon {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  font-size: var(--chip-icon);
  color: var(--text-tertiary);
}

.chip__dismiss {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: var(--chip-dismiss);
  height: var(--chip-dismiss);
  margin-right: -2px;
  padding: 0;
  border: 0;
  border-radius: 9999px;
  background-color: transparent;
  color: inherit;
  cursor: pointer;
  opacity: 0.55;
  font-size: calc(var(--chip-dismiss) - 4px);
  line-height: 1;
  -webkit-transition: background-color var(--duration-fast) var(--ease-default), opacity var(--duration-fast) var(--ease-default);
  transition: background-color var(--duration-fast) var(--ease-default), opacity var(--duration-fast) var(--ease-default);
}

.chip__dismiss:hover {
  opacity: 1;
  background-color: color-mix(in oklch, currentColor 18%, transparent);
}

.chip__dismiss:focus-visible {
  opacity: 1;
  outline: 2px solid var(--focus-ring);
  outline-offset: 1px;
}


/* ==========================================================================
   TOGGLE — a filter chip backed by a visually hidden checkbox / radio
   (:has(input:checked)) or toggled by script (.is-active).
   ========================================================================== */
.chip--toggle {
  cursor: pointer;
}

.chip--toggle:hover {
  border-color: var(--utility-emerald-600);
}

.chip--toggle input {
  /* Visually hide the actual input — the chip's :has() selector
     drives the visual selected state. */
  position: absolute;
  opacity: 0;
  pointer-events: none;
}

.chip--toggle:has(input:checked),
.chip--toggle.is-active {
  background-color: var(--bg-accent-solid);
  color: var(--text-on-accent-solid);
  border-color: var(--utility-emerald-600);
}

.chip--toggle:has(input:checked) .chip__icon {
  color: var(--text-on-accent-solid);
}


/* ==========================================================================
   SELECTABLE — a role="checkbox" trait chip (seller listing editor
   highlights). Lighter than a toggle: outline pill, secondary label,
   a neutral fill when selected; .is-disabled once the max is reached.
   ========================================================================== */
.chip--selectable {
  --chip-gap: 0.375rem;
  --chip-pad-y: 0.5rem;
  --chip-pad-x: 0.75rem;
  --chip-font: 0.8125rem;
  line-height: 1.5rem;
  font-weight: inherit;
  background-color: transparent;
  color: var(--text-secondary);
  cursor: pointer;
  -webkit-user-select: auto;
  -moz-user-select: auto;
  -ms-user-select: auto;
  user-select: auto;
  -webkit-transition-property: all;
  transition-property: all;
  -webkit-transition-timing-function: var(--ease-default);
  transition-timing-function: var(--ease-default);
  -webkit-transition-duration: var(--duration-fast);
  transition-duration: var(--duration-fast);   /* tq-9626: the shared token (was its own 150ms) */
}

.chip--selectable:hover {
  border-color: var(--text-primary);
  color: var(--text-primary);
}

.chip--selectable[aria-checked="true"],
.chip--selectable.is-selected {
  border-color: var(--text-primary);
  background-color: var(--chip-selectable-selected-bg);
  color: var(--text-primary);
  font-weight: 500;
}

.chip--selectable.is-disabled {
  opacity: 0.35;
  cursor: not-allowed !important;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-transition: opacity var(--duration-normal) var(--ease-default);
  transition: opacity var(--duration-normal) var(--ease-default);
}

.chip--selectable.is-disabled:hover {
  border-color: var(--border-primary);
  color: var(--text-secondary);
}


/* ==========================================================================
   SIZE RUNGS — opt-in sizes for the /Design showcase chips. The filter
   chip (--filter) adopts the md rung.
   ========================================================================== */
.chip--md,
.chip--filter {
  --chip-font: 0.8125rem;   /* 13px */
  --chip-gap: 5px;
  --chip-pad-y: 4px;
  --chip-pad-x: 10px;
  --chip-min-h: 1.75rem;    /* 28px */
  --chip-icon: 12px;
  --chip-dismiss: 16px;
}

.chip--lg {
  --chip-font: 0.875rem;    /* 14px */
  --chip-gap: 6px;
  --chip-pad-y: 6px;
  --chip-pad-x: 12px;
  --chip-min-h: 2rem;       /* 32px */
  --chip-icon: 14px;
  --chip-dismiss: 18px;
}


/* ==========================================================================
   TONES — fill / label / border through the --chip-<tone>-* tokens
   (theme-light / theme-dark), each label >= 4.5:1 on its fill.
   ========================================================================== */
.chip--primary {
  background-color: var(--chip-primary-bg);
  color: var(--chip-primary-fg);
  border-color: var(--chip-primary-border);
}

.chip--success {
  background-color: var(--chip-success-bg);
  color: var(--chip-success-fg);
  border-color: var(--chip-success-border);
}

.chip--warning {
  background-color: var(--chip-warning-bg);
  color: var(--chip-warning-fg);
  border-color: var(--chip-warning-border);
}

.chip--danger {
  background-color: var(--chip-danger-bg);
  color: var(--chip-danger-fg);
  border-color: var(--chip-danger-border);
}

.chip--info {
  background-color: var(--chip-info-bg);
  color: var(--chip-info-fg);
  border-color: var(--chip-info-border);
}

.chip--muted {
  background-color: var(--chip-muted-bg);
  color: var(--chip-muted-fg);
  border-color: var(--chip-muted-border);
}

.chip--outline {
  background-color: transparent;
}

.chip--outline.chip--primary,
.chip--outline.chip--success,
.chip--outline.chip--warning,
.chip--outline.chip--danger,
.chip--outline.chip--info,
.chip--outline.chip--muted {
  border-color: currentColor;
}


/* ==========================================================================
   CLICKABLE / FILTER / SELECTED — the showcase's interactive chips, driven by
   chip-wire.js (.chip--selected + aria-pressed). Colour-aware: the hover and
   selected fills tint the chip's own currentColor, so a toned or text-coloured
   chip keeps its hue.
   ========================================================================== */
.chip--clickable,
.chip--filter {
  cursor: pointer;
}

.chip--clickable:hover,
.chip--filter:hover {
  background-color: color-mix(in oklch, currentColor 18%, transparent);
}

.chip--clickable:active,
.chip--filter:active {
  -webkit-transform: scale(0.97);
  -ms-transform: scale(0.97);
  transform: scale(0.97);
}

.chip--selected,
.chip[aria-pressed="true"] {
  background-color: color-mix(in oklch, currentColor 22%, transparent);
  -webkit-box-shadow: inset 0 0 0 1px currentColor;
  box-shadow: inset 0 0 0 1px currentColor;
}

/* A filter that's ON reads at a glance: stronger fill, crisper hairline, heavier label. */
.chip--filter.chip--selected,
.chip--filter[aria-pressed="true"] {
  background-color: color-mix(in oklch, currentColor 26%, transparent);
  -webkit-box-shadow: inset 0 0 0 1.5px currentColor;
  box-shadow: inset 0 0 0 1.5px currentColor;
  font-weight: 600;
}


/* Disabled (a --selectable chip has its own .is-disabled: it stays clickable so the editor can explain the limit) */
.chip:disabled,
.chip.is-disabled:not(.chip--selectable),
.chip--disabled {
  pointer-events: none;
  opacity: 0.5;
  -webkit-filter: saturate(0.6);
  filter: saturate(0.6);
}


/* Focus — single 2px ring in the brand accent, offset 2px, no halo */
.chip:focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: 2px;
  -webkit-box-shadow: none;
  box-shadow: none;
}

/* tq-8912 (A131; isabella r2.1, origin Enodia tq-8915): ONE focus ring for every intent; the 2px offset gap keeps it readable against red / green. The per-intent tint is gone. */


/* Removable — tighter right padding so the × doesn't crowd the label */
.chip--removable {
  padding-right: calc(var(--chip-pad-x) - 2px);
}


/* Entrance — for newly-added chips, reduced-motion aware */
.chip--enter {
  -webkit-animation: chip-enter 200ms cubic-bezier(0.16, 1, 0.3, 1) both;
  animation: chip-enter 200ms cubic-bezier(0.16, 1, 0.3, 1) both;
}

@-webkit-keyframes chip-enter {
  from { opacity: 0; -webkit-transform: scale(0.85); transform: scale(0.85); }
  to   { opacity: 1; -webkit-transform: scale(1); transform: scale(1); }
}

@keyframes chip-enter {
  from { opacity: 0; -webkit-transform: scale(0.85); transform: scale(0.85); }
  to   { opacity: 1; -webkit-transform: scale(1); transform: scale(1); }
}


@media (prefers-reduced-motion: reduce) {
  .chip,
  .chip__dismiss,
  .chip--clickable:active,
  .chip--filter:active,
  .chip--enter {
    -webkit-transition: none;
    transition: none;
    -webkit-animation: none;
    animation: none;
    -webkit-transform: none;
    -ms-transform: none;
    transform: none;
  }
} /* the ONE chip: canonical DS component, imported in place (tq-8209) */
/* =============================================================================
 * forms-upload.css — Phase-4 · 06 Forms & Inputs · L3 (DERIVE)
 * -----------------------------------------------------------------------------
 * Net-new upload COMPOSITION views that extend the pilot uploader (uploader.css)
 * without redefining it: a large standalone dropzone, an attached-file list with
 * per-item progress + states, a circular avatar picker, and a multi-image gallery
 * grid (A125 tq-8863: the list and the grid are the ONE upload-row engine's documented
 * host examples on /Design; the compact inline attach is retired: no composer). SEMANTIC TOKENS ONLY. Interactions (drag-over,
 * preview, progress, remove) are enhancement — forms-upload-wire.js.
 * ========================================================================== */

/* --- standalone dropzone: THE drop target --------------------------------- */
/* tq-8351 (REINLY-DS R15, isabella 900049901 / 900050535): `.upload-dropzone` is the ONE drop-target surface. It
   takes the served Reinly photo-dropzone look (the generic-primitive rule, as for switch / range / chip): a dashed 2px
   `--border-primary` edge, rounded-xl, no fill, tertiary text, min-height 200px; hover lifts edge + text to
   `--text-secondary`; drag-over (`.is-dragover`) is the emerald edge on `--bg-primary-subtle`.
   The former `.photo-dropzone` (reinly/components/photo-dropzone.css, values as the app's Tailwind-3 build compiled
   them) is retired into these rules; the app's photo manager puts this class on its drop areas and toggles
   `.is-dragover` from its own handlers. Reinly.Design SOURCE imported IN PLACE by reinly.webapp (R4): PLAIN CSS. */
.upload-dropzone {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 0.75rem;
  padding: 2rem;
  border-radius: 0.75rem;
  border-width: 2px;
  border-style: dashed;
  border-color: var(--border-primary);
  color: var(--text-tertiary);
  min-height: 200px;
  cursor: pointer;
  -webkit-transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  -webkit-transition-duration: 150ms;
  transition-duration: 150ms;
}
.upload-dropzone:hover { border-color: var(--text-secondary); color: var(--text-secondary); }
.upload-dropzone:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 2px; }
.upload-dropzone.is-dragover,
.upload-dropzone.is-dragover:hover {
  border-color: var(--utility-emerald-600, #059669);
  background-color: var(--bg-primary-subtle);
  color: var(--utility-emerald-700);
}
/* The prompt parts keep their own colours on drag-over (as the app's photo-manager copy does): the cue is the edge +
   fill. The zone's emerald-700 `color` is the served value; it reaches only text that inherits it. */
/* Pavel #355 — dropzone error shown by the coloured title/icon + message, neutral surface. */
.upload-dropzone__icon {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 2.75rem;
  height: 2.75rem;
  border-radius: var(--radius-full);
  background: var(--bg-primary);
  -webkit-box-shadow: inset 0 0 0 1px var(--border-divider);
  box-shadow: inset 0 0 0 1px var(--border-divider);
  color: var(--text-tertiary);
  font-size: 1.125rem;
}
.upload-dropzone__title { font-size: 0.875rem; font-weight: 600; color: var(--text-primary); }
.upload-dropzone__title .upload-dropzone__browse { color: var(--text-link); }
.upload-dropzone__hint { font-size: 0.75rem; color: var(--text-tertiary); }
.upload-dropzone--compact { -webkit-box-orient: horizontal; -webkit-box-direction: normal; -ms-flex-direction: row; flex-direction: row; padding: 0.875rem 1rem; min-height: 0; text-align: left; gap: 0.75rem; }
.upload-dropzone--compact .upload-dropzone__icon { width: 2rem; height: 2rem; font-size: 0.9375rem; }

/* --- attached-file list --------------------------------------------------- */
.upload-list { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; gap: 0.5rem; }
.upload-item {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.75rem;
  padding: 0.625rem 0.75rem;
  border-radius: var(--radius-md);
  background: var(--bg-secondary);
  -webkit-box-shadow: inset 0 0 0 1px var(--border-divider);
  box-shadow: inset 0 0 0 1px var(--border-divider);
}
.upload-item__thumb {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 2.25rem;
  height: 2.25rem;
  border-radius: var(--radius-sm);
  background: var(--bg-primary);
  -webkit-box-shadow: inset 0 0 0 1px var(--border-divider);
  box-shadow: inset 0 0 0 1px var(--border-divider);
  color: var(--text-tertiary);
  font-size: 1rem;
  overflow: hidden;
}
.upload-item__thumb img { width: 100%; height: 100%; -o-object-fit: cover; object-fit: cover; }
.upload-item__body { -webkit-box-flex: 1; -ms-flex: 1 1 auto; flex: 1 1 auto; min-width: 0; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; gap: 0.25rem; }
.upload-item__name { font-size: 0.8125rem; font-weight: 500; color: var(--text-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.upload-item__meta { font-size: 0.6875rem; color: var(--text-tertiary); }
.upload-item__bar { height: 0.25rem; border-radius: var(--radius-full); background: var(--bg-tertiary); overflow: hidden; }
.upload-item__bar > span { display: block; height: 100%; border-radius: var(--radius-full); background: var(--bg-brand-solid); -webkit-transition: width var(--duration-normal) var(--ease-default); transition: width var(--duration-normal) var(--ease-default); }
.upload-item__status { -webkit-box-flex: 0; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 0.875rem; color: var(--text-tertiary); }
/* Our dynamic spinner (Pavel #268) reuses the item's state colour — info while
   uploading — the way the old currentColor icon did; green stays reserved for done. */
.upload-item__status .spinner { --spinner-ink: currentColor; }
.upload-item.is-uploading .upload-item__status { color: var(--text-info); }
.upload-item.is-done .upload-item__status { color: var(--text-success); }
/* Pavel #355 — .upload-item.is-error shown by the coloured status text/icon only. */
.upload-item.is-error .upload-item__status,
.upload-item.is-error .upload-item__meta { color: var(--text-danger); }
.upload-item.is-error .upload-item__bar > span { background: var(--bg-danger-solid); }
.upload-item__remove {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  width: 1.75rem; height: 1.75rem;
  border: 0; border-radius: var(--radius-md);
  background: transparent; color: var(--text-tertiary); cursor: pointer;
  -webkit-transition: background var(--duration-fast) var(--ease-default), color var(--duration-fast) var(--ease-default);
  transition: background var(--duration-fast) var(--ease-default), color var(--duration-fast) var(--ease-default);
}
.upload-item__remove:hover { background: var(--bg-danger-subtle); color: var(--text-danger); }
.upload-item__remove:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 2px; }

/* --- avatar picker -------------------------------------------------------- */
.upload-avatar { display: -webkit-inline-box; display: -ms-inline-flexbox; display: inline-flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; gap: 1rem; }
.upload-avatar__figure { position: relative; width: 4.5rem; height: 4.5rem; -webkit-box-flex: 0; -ms-flex: 0 0 auto; flex: 0 0 auto; }
.upload-avatar__img {
  width: 100%; height: 100%;
  border-radius: var(--radius-full);
  -o-object-fit: cover;
  object-fit: cover;
  background: var(--bg-tertiary);
  -webkit-box-shadow: inset 0 0 0 1px var(--border-divider);
  box-shadow: inset 0 0 0 1px var(--border-divider);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center;
  color: var(--text-tertiary); font-size: 1.5rem;
}
.upload-avatar__overlay {
  position: absolute; inset: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center;
  border-radius: var(--radius-full);
  background: var(--bg-brand-solid);
  color: var(--text-on-brand);
  opacity: 0; cursor: pointer;
  -webkit-transition: opacity var(--duration-fast) var(--ease-default);
  transition: opacity var(--duration-fast) var(--ease-default);
  font-size: 1rem;
}
.upload-avatar__figure:hover .upload-avatar__overlay,
.upload-avatar__figure:focus-within .upload-avatar__overlay { opacity: 1; }
.upload-avatar__actions { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; gap: 0.375rem; }
.upload-avatar__hint { font-size: 0.6875rem; color: var(--text-tertiary); }

/* --- gallery grid --------------------------------------------------------- */
.upload-gallery { display: grid; grid-template-columns: repeat(auto-fill, minmax(6rem, 1fr)); gap: 0.625rem; }
.upload-gallery__tile {
  position: relative;
  aspect-ratio: 1 / 1;
  border-radius: var(--radius-md);
  overflow: hidden;
  background: var(--bg-tertiary);
  -webkit-box-shadow: inset 0 0 0 1px var(--border-divider);
  box-shadow: inset 0 0 0 1px var(--border-divider);
}
.upload-gallery__tile img { width: 100%; height: 100%; -o-object-fit: cover; object-fit: cover; }
/* Pavel #269: the per-tile remove is an overlay ACTION, not a primary CTA —
   demote from solid brand to the canonical ghost overlay treatment (matches
   .gallery-item__action). Subtle translucent scrim; danger only on hover. */
.upload-gallery__tile-remove {
  position: absolute; top: 0.25rem; right: 0.25rem;
  width: 1.5rem; height: 1.5rem;
  border: 0; border-radius: var(--radius-full);
  background: var(--alpha-white-20); color: var(--alpha-white-100);
  backdrop-filter: blur(6px);
  cursor: pointer; font-size: 0.6875rem;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center;
  -webkit-transition: background var(--duration-fast) var(--ease-default), color var(--duration-fast) var(--ease-default);
  transition: background var(--duration-fast) var(--ease-default), color var(--duration-fast) var(--ease-default);
}
.upload-gallery__tile-remove:hover { background: var(--alpha-white-30); color: var(--text-danger); }
.upload-gallery__tile-remove:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 2px; }
/* A100 (tq-8721; the canonical upload contract, origin Hermanns tq-8713): a tile that is still an upload row of the ONE
   engine (upload-rows.js / upload-rows.css): its status strip along the bottom, its labelled control in the corner. */
.upload-gallery__tile-status {
  position: absolute; inset-inline: 0; bottom: 0;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap; gap: 0.25rem 0.5rem;
  padding: 0.25rem 0.375rem;
  background: var(--canvas-primary);
  border-top: 1px solid var(--border-divider);
}
.upload-gallery__tile-status .upload-row__track { -webkit-box-flex: 1; -ms-flex: 1 1 100%; flex: 1 1 100%; max-width: none; width: auto; }
.upload-gallery__tile[data-upload-state='failed'] .upload-gallery__tile-status { top: 0; -ms-flex-line-pack: start; align-content: flex-start; overflow-y: auto; padding-top: 2rem; border-top: 0; }
.upload-gallery__tile-actions { position: absolute; top: 0.25rem; right: 0.25rem; }
.upload-gallery__tile-actions .upload-row__btn { background: var(--canvas-primary); }
.upload-gallery__cover {
  position: absolute; bottom: 0.25rem; left: 0.25rem;
  padding: 0.0625rem 0.375rem;
  border-radius: var(--radius-full);
  background: var(--bg-brand-solid); color: var(--text-on-brand);
  font-size: 0.625rem; font-weight: 600;
}
.upload-gallery__add {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; gap: 0.25rem;
  aspect-ratio: 1 / 1;
  border-radius: var(--radius-md);
  background: var(--bg-secondary);
  -webkit-box-shadow: inset 0 0 0 1.5px var(--border-divider);
  box-shadow: inset 0 0 0 1.5px var(--border-divider);
  color: var(--text-tertiary); cursor: pointer; font-size: 1rem;
  -webkit-transition: background var(--duration-fast) var(--ease-default), -webkit-box-shadow var(--duration-fast) var(--ease-default);
  transition: background var(--duration-fast) var(--ease-default), -webkit-box-shadow var(--duration-fast) var(--ease-default);
  transition: background var(--duration-fast) var(--ease-default), box-shadow var(--duration-fast) var(--ease-default);
  transition: background var(--duration-fast) var(--ease-default), box-shadow var(--duration-fast) var(--ease-default), -webkit-box-shadow var(--duration-fast) var(--ease-default);
}
.upload-gallery__add:hover { background: var(--bg-tertiary); }
.upload-gallery__add:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 2px; }
.upload-gallery__add span { font-size: 0.6875rem; }

@media (prefers-reduced-motion: reduce) {
  .upload-dropzone, .upload-item__bar > span, .upload-avatar__overlay, .upload-gallery__add { -webkit-transition: none; transition: none; }
} /* the ONE drop target (.upload-dropzone): canonical DS component, imported in place (tq-8351 R15; was photo-dropzone.css) */
/* ==========================================================================
 * upload-rows.css — the ONE upload-row engine's status area + controls (tq-8713 §11; Scripts/components/upload-rows.js).
 * A host (the File Explorer table / grid, an attachments table, an image grid) gives each upload row a status slot
 * (.upload-row__status [data-upload-status]) and a controls slot (.upload-row__actions); the engine paints in them:
 * the DS .track/.bar progress (progress.css; indeterminate = .bar-indeterminate) + the status text (+ Retry when a transfer
 * failed), and the row's labelled icon button. Layout of the row itself (cells, tile) stays the host's.
 *
 * REINLY PORT (A100 tq-8721): Hermanns.Design 6d5d9efe, plus (each marked "A100"):
 *   - PLAIN CSS: reinly.webapp imports this file in place, and app-imported DS CSS must be plain (app-imported-plain-css test);
 *   - the bar's look, scoped to .upload-row__track: the DS progress.css can't be imported by the app (it uses @apply), so the
 *     same tokens are restated here (track --bg-progress, fill --bg-brand-solid, --radius-xs caps). On /Design, progress.css
 *     paints the same values;
 *   - the indeterminate sweep's own keyframe (upload-row-slide = progress.css's bar-indeterminate-slide);
 *   - the controls are Reinly's ghost icon buttons (btn-icon-xs, 28px; 40px on a coarse pointer).
 * ========================================================================== */
.upload-row__status {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; gap: 0.5rem; min-width: 0;
  font-size: 0.75rem; color: var(--text-tertiary);
}
  td.upload-row__status { display: table-cell; vertical-align: middle; }   /* a table cell stays a cell; its content runs inline */
  td.upload-row__status[hidden] { display: none; }
  td.upload-row__status > * { vertical-align: middle; }
  td.upload-row__status .upload-row__track { display: -webkit-inline-box; display: -ms-inline-flexbox; display: inline-flex; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; }
  .upload-row__track { -webkit-box-flex: 0; -ms-flex: 0 1 8rem; flex: 0 1 8rem; width: 8rem; max-width: 40%; min-width: 3rem; }
  /* A100: the DS .track / .bar look, restated in plain CSS for the app (same tokens as progress.css) */
  .upload-row__track {
    position: relative; display: -webkit-box; display: -ms-flexbox; display: flex; overflow: hidden;
    height: var(--height-progress-track, 4px);
    border-radius: var(--radius-xs);
    background-color: var(--bg-progress);
  }
  .upload-row__track > .bar {
    width: var(--progress, auto);
    border-radius: var(--radius-xs);
    background-color: var(--bg-brand-solid);
    -webkit-transition: width 120ms linear;
    transition: width 120ms linear;
  }
  .upload-row__track > .bar-indeterminate {
    position: absolute; top: 0; left: 0; height: 100%; width: 30%;
    -webkit-animation: upload-row-slide 1.2s infinite ease-in-out;
    animation: upload-row-slide 1.2s infinite ease-in-out;
  }
  .upload-row__text { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .upload-row__text.text-danger { color: var(--text-danger); white-space: normal; }
  .upload-row__retry { -webkit-box-flex: 0; -ms-flex: none; flex: none; font-size: 0.75rem; }
  .upload-row__actions { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-pack: end; -ms-flex-pack: end; justify-content: flex-end; -webkit-box-align: center; -ms-flex-align: center; align-items: center; }
  /* an upload row is not an item yet: no pointer (it isn't clickable) */
  .upload-row { cursor: default; }
  .upload-row[data-upload-state='failed'] .upload-row__name { color: var(--text-secondary); }
  /* phone / touch: the controls are icon buttons with a >= 40px hit area (the same labels) */
  @media (pointer: coarse) {
    .upload-row__btn, .upload-row__info { width: 2.5rem; height: 2.5rem; }   /* A125: the failed tile's info button too */
    .upload-row__retry { min-height: 2.5rem; padding-inline: 0.5rem; }
  }
  /* reduced motion: no width transition and no indeterminate sweep; a static bar + the status text */
  @media (prefers-reduced-motion: reduce) {
    .upload-row__track .bar { -webkit-transition: none; transition: none; }
    .upload-row__track .bar-indeterminate { -webkit-animation: none; animation: none; }
  }

/* A100: the indeterminate sweep (progress.css's bar-indeterminate-slide, which the app doesn't import) */
@-webkit-keyframes upload-row-slide {
  0% { left: -30%; }
  50% { left: 50%; }
  100% { left: 100%; }
}
@keyframes upload-row-slide {
  0% { left: -30%; }
  50% { left: 50%; }
  100% { left: 100%; }
} /* the ONE upload-row engine's status + controls (photo grid, pedigree tiles, message strips): canonical DS component, imported in place (A100 tq-8721) */
/* ==========================================================================
   Component: Tooltip  ·  ADS 13 Overlays · L2 · ADOPT (UUI base/tooltip)
   --------------------------------------------------------------------------
   Faithful 1:1 to Untitled UI's base/tooltip, expanded onto our taxonomy:

     UUI structure adopted →  rounded-lg surface, px-3 / py-2 (py-3 when a
     description is present), text-xs type, semibold title + muted supporting
     text, shadow-lg elevation, fade + zoom-95 + short directional slide, a
     300 ms open delay, and a small pointer arrow.

   TWO delivery paths share one token set (never narrowed — FAN-OUT-RULES §5):

     • Plugin path — `.tooltip` › `.tooltip-inner` (+ `.tooltip-title` /
       `.tooltip-text` for the rich variant) › `.tooltip-arrow`. Portaled to
       <body> and positioned by the delegated, framework-free driver
       Scripts/tooltip.js (no jQuery, no Bootstrap). Open state = `.tooltip.show`
       (mirrors the `.modal.show` convention of modal-wire.js).

     • CSS-only path — `[data-tooltip-position]` + `data-tooltip="…"`. Pure CSS
       `::before`/`::after`, hover/focus reveal, zero JS. Degrades everywhere.

   Surface is theme-adaptive by TOKEN decision (Lead-owned): `--bg-tooltip`
   is light in the light theme, dark in the dark theme; `--text-tooltip` tracks
   it. The component only ever consumes those semantics — it never hard-codes a
   hue, so a token flip re-themes both paths at once.
   ========================================================================== */

/* --------------------------------------------------------------------------
   Plugin path — portaled bubble
   -------------------------------------------------------------------------- */
.tooltip {
  position: absolute;
  top: 0;
  left: 0;
  z-index: var(--z-tooltip);
  margin: 0;
  padding: 0;
  opacity: 0;
  pointer-events: none;               /* transient, non-interactive — use popover for interactive content */
  -webkit-transform: translate(var(--tt-from-x, 0), var(--tt-from-y, 0.125rem)) scale(0.95);
  -ms-transform: translate(var(--tt-from-x, 0), var(--tt-from-y, 0.125rem)) scale(0.95);
  transform: translate(var(--tt-from-x, 0), var(--tt-from-y, 0.125rem)) scale(0.95);
  -webkit-transition:
    opacity var(--duration-fast, 100ms) var(--ease-out, ease),
    -webkit-transform var(--duration-fast, 100ms) var(--ease-out, ease);
  transition:
    opacity var(--duration-fast, 100ms) var(--ease-out, ease),
    -webkit-transform var(--duration-fast, 100ms) var(--ease-out, ease);
  transition:
    opacity var(--duration-fast, 100ms) var(--ease-out, ease),
    transform var(--duration-fast, 100ms) var(--ease-out, ease);
  transition:
    opacity var(--duration-fast, 100ms) var(--ease-out, ease),
    transform var(--duration-fast, 100ms) var(--ease-out, ease),
    -webkit-transform var(--duration-fast, 100ms) var(--ease-out, ease);
  will-change: transform, opacity;
}

.tooltip.show {
  opacity: 1;
  -webkit-transform: translate(0, 0) scale(1);
  -ms-transform: translate(0, 0) scale(1);
  transform: translate(0, 0) scale(1);
}

/* Directional origin for the zoom/slide — the bubble grows out of the trigger. */
.tooltip[data-placement^="top"]    { --tt-from-y:  0.125rem; --tt-from-x: 0; }
.tooltip[data-placement^="bottom"] { --tt-from-y: -0.125rem; --tt-from-x: 0; }
.tooltip[data-placement^="left"]   { --tt-from-x:  0.125rem; --tt-from-y: 0; }
.tooltip[data-placement^="right"]  { --tt-from-x: -0.125rem; --tt-from-y: 0; }

/* The bubble surface. */
.tooltip-inner {
  /* A125 (tq-8863): plain CSS (the values the former Tailwind utilities compiled to), so reinly.webapp can import this file in place */
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
  gap: 0.25rem;
  padding: 0.5rem 0.75rem;
  font-size: 0.75rem;
  line-height: 1.125rem;
  font-weight: 600;
  max-width: 20rem;                   /* UUI max-w-xs */
  border-radius: var(--radius-lg, 0.5rem);
  color: var(--text-tooltip, var(--alpha-white-100));
  background-color: var(--bg-tooltip, var(--utility-neutral-900));
  -webkit-box-shadow: var(--shadow-lg);
  box-shadow: var(--shadow-lg);
  text-align: left;
  overflow-wrap: break-word;
}

/* Simple (title-only) tooltips are single-line by default. */
.tooltip-inner:not(:has(.tooltip-text)) {
  white-space: normal;
}

/* Rich variant — title + supporting text (UUI's `description`). */
.tooltip-inner:has(.tooltip-text) {
  padding-block: 0.75rem;
}

.tooltip-title {
  font-size: 0.75rem;
  line-height: 1.125rem;
  font-weight: 600;
  color: var(--text-tooltip, var(--alpha-white-100));
}

.tooltip-text {
  font-size: 0.75rem;
  line-height: 1.125rem;
  font-weight: 500;
  /* Muted supporting tone derived from the title colour so it stays legible on
     BOTH the light and dark bubble without a second Lead-owned token. */
  color: color-mix(in oklab, var(--text-tooltip, var(--alpha-white-100)) 74%, transparent);
  white-space: pre-line;              /* honour literal line breaks in the description */
}

/* --------------------------------------------------------------------------
   Arrow (plugin path) — optional; on by default, hide with .tooltip--no-arrow
   -------------------------------------------------------------------------- */
.tooltip-arrow {
  position: absolute;
  width: 0;
  height: 0;
  border: 6px solid transparent;
  /* JS refines the cross-axis position; these keep it centred without JS. */
}

.tooltip--no-arrow .tooltip-arrow { display: none; }

.tooltip[data-placement^="top"] .tooltip-arrow {
  bottom: -6px;
  left: 50%;
  margin-left: -6px;
  border-bottom-width: 0;
  border-top-color: var(--bg-tooltip, var(--utility-neutral-900));
}

.tooltip[data-placement^="bottom"] .tooltip-arrow {
  top: -6px;
  left: 50%;
  margin-left: -6px;
  border-top-width: 0;
  border-bottom-color: var(--bg-tooltip, var(--utility-neutral-900));
}

.tooltip[data-placement^="left"] .tooltip-arrow {
  right: -6px;
  top: 50%;
  margin-top: -6px;
  border-right-width: 0;
  border-left-color: var(--bg-tooltip, var(--utility-neutral-900));
}

.tooltip[data-placement^="right"] .tooltip-arrow {
  left: -6px;
  top: 50%;
  margin-top: -6px;
  border-left-width: 0;
  border-right-color: var(--bg-tooltip, var(--utility-neutral-900));
}

/* --------------------------------------------------------------------------
   CSS-only path — `[data-tooltip-position]` + `data-tooltip`
   Pure CSS, no JS. Hover/focus reveal. Positioned relative to the trigger.
   -------------------------------------------------------------------------- */
[data-tooltip-position] {
  position: relative;
}

[data-tooltip-position]::after {
  content: attr(data-tooltip);
  padding: 0.5rem 0.75rem;
  font-size: 0.75rem;
  line-height: 1.125rem;
  font-weight: 600;
  position: absolute;
  z-index: var(--z-dropdown);
  white-space: nowrap;
  pointer-events: none;
  opacity: 0;
  border-radius: var(--radius-lg, 0.5rem);
  color: var(--text-tooltip, var(--alpha-white-100));
  background-color: var(--bg-tooltip, var(--utility-neutral-900));
  -webkit-box-shadow: var(--shadow-lg);
  box-shadow: var(--shadow-lg);
  -webkit-transform: scale(0.95);
  -ms-transform: scale(0.95);
  transform: scale(0.95);
  -webkit-transition:
    opacity var(--duration-fast, 100ms) var(--ease-out, ease),
    -webkit-transform var(--duration-fast, 100ms) var(--ease-out, ease);
  transition:
    opacity var(--duration-fast, 100ms) var(--ease-out, ease),
    -webkit-transform var(--duration-fast, 100ms) var(--ease-out, ease);
  transition:
    opacity var(--duration-fast, 100ms) var(--ease-out, ease),
    transform var(--duration-fast, 100ms) var(--ease-out, ease);
  transition:
    opacity var(--duration-fast, 100ms) var(--ease-out, ease),
    transform var(--duration-fast, 100ms) var(--ease-out, ease),
    -webkit-transform var(--duration-fast, 100ms) var(--ease-out, ease);
}

[data-tooltip-position]::before {
  content: "";
  position: absolute;
  z-index: var(--z-dropdown);
  pointer-events: none;
  opacity: 0;
  border: 6px solid transparent;
  -webkit-transition: opacity var(--duration-fast, 100ms) var(--ease-out, ease);
  transition: opacity var(--duration-fast, 100ms) var(--ease-out, ease);
}

[data-tooltip-position]:hover::after,
[data-tooltip-position]:hover::before,
[data-tooltip-position]:focus-visible::after,
[data-tooltip-position]:focus-visible::before {
  opacity: 1;
  -webkit-transform: scale(1);
  -ms-transform: scale(1);
  transform: scale(1);
}

/* Top (default) */
[data-tooltip-position="top"]::after {
  bottom: calc(100% + 8px);
  left: 50%;
  -webkit-transform: translateX(-50%) scale(0.95);
  -ms-transform: translateX(-50%) scale(0.95);
  transform: translateX(-50%) scale(0.95);
  -webkit-transform-origin: bottom center;
  -ms-transform-origin: bottom center;
  transform-origin: bottom center;
}
[data-tooltip-position="top"]:hover::after,
[data-tooltip-position="top"]:focus-visible::after {
  -webkit-transform: translateX(-50%) scale(1);
  -ms-transform: translateX(-50%) scale(1);
  transform: translateX(-50%) scale(1);
}
[data-tooltip-position="top"]::before {
  bottom: calc(100% + 2px);
  left: 50%;
  margin-left: -6px;
  border-bottom-width: 0;
  border-top-color: var(--bg-tooltip, var(--utility-neutral-900));
}

/* Bottom */
[data-tooltip-position="bottom"]::after {
  top: calc(100% + 8px);
  left: 50%;
  -webkit-transform: translateX(-50%) scale(0.95);
  -ms-transform: translateX(-50%) scale(0.95);
  transform: translateX(-50%) scale(0.95);
  -webkit-transform-origin: top center;
  -ms-transform-origin: top center;
  transform-origin: top center;
}
[data-tooltip-position="bottom"]:hover::after,
[data-tooltip-position="bottom"]:focus-visible::after {
  -webkit-transform: translateX(-50%) scale(1);
  -ms-transform: translateX(-50%) scale(1);
  transform: translateX(-50%) scale(1);
}
[data-tooltip-position="bottom"]::before {
  top: calc(100% + 2px);
  left: 50%;
  margin-left: -6px;
  border-top-width: 0;
  border-bottom-color: var(--bg-tooltip, var(--utility-neutral-900));
}

/* Left */
[data-tooltip-position="left"]::after {
  right: calc(100% + 8px);
  top: 50%;
  -webkit-transform: translateY(-50%) scale(0.95);
  -ms-transform: translateY(-50%) scale(0.95);
  transform: translateY(-50%) scale(0.95);
  -webkit-transform-origin: right center;
  -ms-transform-origin: right center;
  transform-origin: right center;
}
[data-tooltip-position="left"]:hover::after,
[data-tooltip-position="left"]:focus-visible::after {
  -webkit-transform: translateY(-50%) scale(1);
  -ms-transform: translateY(-50%) scale(1);
  transform: translateY(-50%) scale(1);
}
[data-tooltip-position="left"]::before {
  right: calc(100% + 2px);
  top: 50%;
  margin-top: -6px;
  border-right-width: 0;
  border-left-color: var(--bg-tooltip, var(--utility-neutral-900));
}

/* Right */
[data-tooltip-position="right"]::after {
  left: calc(100% + 8px);
  top: 50%;
  -webkit-transform: translateY(-50%) scale(0.95);
  -ms-transform: translateY(-50%) scale(0.95);
  transform: translateY(-50%) scale(0.95);
  -webkit-transform-origin: left center;
  -ms-transform-origin: left center;
  transform-origin: left center;
}
[data-tooltip-position="right"]:hover::after,
[data-tooltip-position="right"]:focus-visible::after {
  -webkit-transform: translateY(-50%) scale(1);
  -ms-transform: translateY(-50%) scale(1);
  transform: translateY(-50%) scale(1);
}
[data-tooltip-position="right"]::before {
  left: calc(100% + 2px);
  top: 50%;
  margin-top: -6px;
  border-left-width: 0;
  border-right-color: var(--bg-tooltip, var(--utility-neutral-900));
}

/* --------------------------------------------------------------------------
   Reduced motion — no slide/zoom; content still reveals (opacity only).
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  .tooltip {
    -webkit-transition: opacity var(--duration-fast, 100ms) var(--ease-default, ease);
    transition: opacity var(--duration-fast, 100ms) var(--ease-default, ease);
    -webkit-transform: none;
    -ms-transform: none;
    transform: none;
  }
  .tooltip.show { -webkit-transform: none; -ms-transform: none; transform: none; }

  [data-tooltip-position]::after {
    -webkit-transition: opacity var(--duration-fast, 100ms) var(--ease-default, ease);
    transition: opacity var(--duration-fast, 100ms) var(--ease-default, ease);
  }
  [data-tooltip-position="top"]::after,
  [data-tooltip-position="top"]:hover::after,
  [data-tooltip-position="top"]:focus-visible::after,
  [data-tooltip-position="bottom"]::after,
  [data-tooltip-position="bottom"]:hover::after,
  [data-tooltip-position="bottom"]:focus-visible::after { -webkit-transform: translateX(-50%); -ms-transform: translateX(-50%); transform: translateX(-50%); }
  [data-tooltip-position="left"]::after,
  [data-tooltip-position="left"]:hover::after,
  [data-tooltip-position="left"]:focus-visible::after,
  [data-tooltip-position="right"]::after,
  [data-tooltip-position="right"]:hover::after,
  [data-tooltip-position="right"]:focus-visible::after { -webkit-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%); }
} /* the DS tooltip (a failed upload tile's reason, the engine's info button): canonical DS component, imported in place (A125 tq-8863) */
/* ==========================================================================
 * Component: Uploader (drag & drop file upload)  ·  wave 3c/4.2  ·  ADOPT
 *
 * tq-8373 (REINLY-DS U1, isabella 900050831 point 2): ONE drop-zone look. The uploader's zone COMPOSES the standalone
 * `.upload-dropzone` (forms-upload.css, R15 tq-8351: the dashed edge, the emerald drag-over, the icon chip / title /
 * hint parts); uploader.js puts that class and its part classes on the zone it builds. This file no longer paints a
 * zone of its own (the former inset-ring surface): it keeps each VARIANT's geometry on top of the one look, the
 * file-item rows / tiles, and the state cues. The button variant is a button, not a drop-zone surface.
 * PLAIN CSS (no Tailwind directives): reinly.webapp imports this file IN PLACE (R4 guard,
 * tests/app-imported-plain-css.test.mjs). It must come AFTER forms-upload.css, in the same layer.
 *
 * Anatomy:
 *   .uploader
 *     .uploader__input              visually hidden native <input type="file"> (the real control)
 *     .uploader__zone.upload-dropzone   the drop target (click + drag surface)
 *       .uploader__icon.upload-dropzone__icon
 *       .uploader__title.upload-dropzone__title
 *       .uploader__subtitle.upload-dropzone__hint
 *       .uploader__action           inline affordance ("Browse" / "paste")
 *     .uploader__hint               side copy (avatar/banner layouts)
 *     .uploader__previews           queued/uploaded items (--grid for tiles)
 *       .uploader__item             one file (row · tile) + per-item states
 *         .uploader__thumb          image preview or file-type glyph
 *         .uploader__meta           name + detail + progress
 *           .uploader__name / .uploader__detail[data-upload-status]   (A100, origin tq-8779: the upload-row engine's
 *                                     status slot: the DS .track/.bar progressbar + .upload-row__text + Retry)
 *         .uploader__actions[data-upload-actions]   the engine's controls (.upload-row__btn: Cancel / Remove)
 *
 * Variants:  --inline · --avatar (+ --square, --no-chip, --drag-edge) · --banner · --button · --gallery  (+ default)
 * Sizes:     --sm · --md (default) · --lg      (avatar: 80 / 96 / 160 px)
 * Density:   --quiet (transparent until hover)
 * States:    .is-dragover · .is-uploading · .is-success · .is-error · .is-disabled
 * Per-item:  .is-queued · .is-uploading (+ .is-processing) · .is-success · .is-error (mirrored from the engine's state, A100)
 * ========================================================================== */

.uploader {
  --uploader-accent: var(--border-focus);
  --uploader-avatar-size: 96px;
  --uploader-avatar-radius: var(--radius-full);
  --uploader-tile-size: 140px;

  position: relative;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 12px;
  min-width: 0;
}

.uploader.is-success { --uploader-accent: var(--text-success); }
.uploader.is-error { --uploader-accent: var(--text-danger); }

.uploader.is-disabled,
.uploader[aria-disabled='true'] {
  opacity: 0.6;
  pointer-events: none;
}
.uploader.is-disabled .uploader__zone { cursor: not-allowed; }

/* ----- Zone: the .upload-dropzone look, plus what the uploader adds ------- */
.uploader__zone {
  position: relative;
  text-align: center;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
/* The native input is visually hidden; its keyboard focus is shown on the zone, as .upload-dropzone:focus-visible. */
.uploader:has(.uploader__input:focus-visible) > .uploader__zone {
  outline: 2px solid var(--focus-ring); outline-offset: 2px;
}
/* tq-5313 — drop:false: not a drop surface (uploader.js refuses the drop); the zone still opens the picker. */
.uploader--no-drop .uploader__zone.is-dragover { border-color: var(--border-primary); background-color: transparent; }

.uploader__input {
  /* Visually hidden but focusable + reachable by screen readers. The visible zone opens it (JS) and shows its focus;
     do NOT set aria-hidden on it: it is the real control. */
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.uploader__title strong { color: var(--text-link); font-weight: 600; }

/* Pavel #355 — a state shows on the coloured icon / title, the surface stays neutral. */
.uploader.is-success .uploader__icon { color: var(--text-success); }
.uploader.is-error .uploader__icon,
.uploader.is-error .uploader__title { color: var(--text-danger); }
.uploader.is-uploading .uploader__icon { -webkit-animation: uploader-pulse 1.4s ease-in-out infinite; animation: uploader-pulse 1.4s ease-in-out infinite; }

.uploader__action {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--text-link);
  pointer-events: none;
}

.uploader__hint {
  font-size: 12.5px;
  color: var(--text-tertiary);
  line-height: 1.5;
}

/* ==========================================================================
 * Previews + items
 * ========================================================================== */

.uploader__previews {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 8px;
}
.uploader__previews:empty { display: none; }

.uploader__item {
  /* Item (row layout, the default): inset ring, rounded-lg */
  position: relative;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 12px;
  padding: 12px;
  border: 0;
  border-radius: var(--radius-lg);
  background-color: var(--bg-primary);
  -webkit-box-shadow: inset 0 0 0 1px var(--border-secondary);
  box-shadow: inset 0 0 0 1px var(--border-secondary);
  min-width: 0;
  -webkit-transition: background-color 120ms ease, -webkit-box-shadow 120ms ease;
  transition: background-color 120ms ease, -webkit-box-shadow 120ms ease;
  transition: box-shadow 120ms ease, background-color 120ms ease;
  transition: box-shadow 120ms ease, background-color 120ms ease, -webkit-box-shadow 120ms ease;
}
.uploader__item.is-success { -webkit-box-shadow: inset 0 0 0 1px var(--border-success); box-shadow: inset 0 0 0 1px var(--border-success); }
.uploader__item.is-error {
  -webkit-box-shadow: inset 0 0 0 2px color-mix(in oklch, var(--text-danger) 55%, var(--border-secondary));
  box-shadow: inset 0 0 0 2px color-mix(in oklch, var(--text-danger) 55%, var(--border-secondary));
  background-color: color-mix(in oklch, var(--text-danger) 4%, var(--bg-primary));
}

.uploader__thumb {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  width: 40px;
  height: 40px;
  border-radius: var(--radius-md);
  background-color: var(--bg-secondary);
  color: var(--text-tertiary);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  overflow: hidden;
  font-size: 16px;
}
.uploader__thumb img {
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
  object-fit: cover;
  display: block;
}
.uploader__item.is-success .uploader__thumb { color: var(--text-success); background-color: var(--bg-success-subtle); }
.uploader__item.is-error .uploader__thumb { color: var(--text-danger); background-color: var(--bg-danger-subtle); }

.uploader__meta {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}

.uploader__name {
  font-size: 13px;
  font-weight: 500;
  color: var(--text-secondary);
  line-height: 1.3;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.uploader__detail {
  font-family: 'Space Mono', monospace;
  font-size: 11px;
  color: var(--text-tertiary);
  line-height: 1.3;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
}
/* a static size · status pair reads with a separator; the engine's status slot (bar + text + Retry) does not (tq-8779) */
.uploader__detail:not([data-upload-status]) > * + *::before {
  content: '·';
  margin-right: 6px;
  opacity: 0.6;
}
.uploader__item.is-success .uploader__detail { color: var(--text-success); }
.uploader__item.is-error .uploader__detail { color: var(--text-danger); }

/* A100 (origin tq-8779): the item's progress is the upload-row engine's DS .track/.bar in its [data-upload-status] slot
   (upload-rows.css); the uploader's own .uploader__progress bar is retired with its in-class painter. */

.uploader__actions {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 4px;
}

.uploader__btn {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border-radius: var(--radius-md);
  border: 0;
  background: transparent;
  color: var(--text-tertiary);
  cursor: pointer;
  -webkit-transition: background-color 120ms ease, color 120ms ease;
  transition: background-color 120ms ease, color 120ms ease;
}
.uploader__btn:hover { background-color: var(--bg-secondary); color: var(--text-secondary); }
.uploader__btn:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: -2px; }
.uploader__btn--danger:hover { background-color: var(--bg-danger-subtle); color: var(--text-danger); }

/* ----- Grid previews (tiles) --------------------------------------------- */
.uploader__previews--grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
  gap: 10px;
}
.uploader__previews--grid .uploader__item {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: stretch;
  -ms-flex-align: stretch;
  align-items: stretch;
  padding: 0;
  overflow: hidden;
}
.uploader__previews--grid .uploader__thumb {
  width: 100%;
  height: 110px;
  border-radius: 0;
  font-size: 28px;
}
.uploader__previews--grid .uploader__meta { padding: 8px 10px 10px; gap: 4px; }
.uploader__previews--grid .uploader__actions {
  position: absolute;
  top: 6px;
  right: 6px;
  opacity: 0;
  -webkit-transition: opacity 120ms ease;
  transition: opacity 120ms ease;
}
.uploader__previews--grid .uploader__item:hover .uploader__actions,
.uploader__previews--grid .uploader__item:focus-within .uploader__actions { opacity: 1; }
/* A100 (tq-8779): the tile's controls are the upload-row engine's (.upload-row__btn); a static tile may still use .uploader__btn */
.uploader__previews--grid :is(.uploader__btn, .upload-row__btn) {
  background-color: color-mix(in oklch, var(--bg-primary) 80%, transparent);
  backdrop-filter: blur(4px);
}

/* Success confirm on a tile: a check pinned top-left, balancing the top-right remove control. */
.uploader__previews--grid .uploader__item.is-success::before,
.uploader--gallery .uploader__previews .uploader__item.is-success::before {
  content: '\f00c'; /* fa-check */
  font-family: 'Font Awesome 7 Pro', 'Font Awesome 6 Pro', 'Font Awesome 6 Free', sans-serif;
  font-weight: 900;
  position: absolute;
  z-index: 1;
  top: 6px;
  left: 6px;
  width: 24px;
  height: 24px;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: var(--radius-full);
  /* A subtle success chip (not solid), so the check keeps AA contrast in both themes. */
  background-color: var(--bg-success-subtle);
  color: var(--text-success);
  font-size: 11px;
  line-height: 1;
  -webkit-box-shadow: inset 0 0 0 1px var(--border-success), var(--shadow-sm);
  box-shadow: inset 0 0 0 1px var(--border-success), var(--shadow-sm);
}

/* ==========================================================================
 * Variants: geometry on top of the one drop-zone look
 * ========================================================================== */

/* --inline: the zone is .upload-dropzone--compact (a slim row). */
.uploader--inline .uploader__action { margin-left: auto; }

/* --avatar: a circular cover target (a profile photo). The zone's icon fills it; a chosen image covers it. */
.uploader--avatar {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
  -ms-flex-direction: row;
  flex-direction: row;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 14px;
}
/* A127 tq-8886: while its file uploads or fails, a cover shows that file's row (the real progress; the reason + Retry), UNDER
   the cover and never beside it, so the cover keeps its place; at rest the previews are empty and nothing changes */
.uploader--avatar:has(> .uploader__previews:not(:empty)) {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
}
.uploader--avatar > .uploader__previews {
  width: 20rem;
  max-width: 100%;
}
.uploader--avatar .uploader__zone {
  width: var(--uploader-avatar-size);
  height: var(--uploader-avatar-size);
  min-height: 0;
  padding: 0;
  gap: 0;
  border-radius: var(--uploader-avatar-radius);
  /* The camera chip sits on the zone edge: clip the cover image, not the zone. */
  overflow: visible;
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
}
.uploader--avatar .uploader__zone .uploader__icon {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 100%;
  height: 100%;
  border-radius: inherit;
  background-color: var(--bg-secondary);
  color: var(--text-tertiary);
  font-size: 28px;
}
.uploader--avatar .uploader__zone .uploader__title,
.uploader--avatar .uploader__zone .uploader__subtitle,
.uploader--avatar .uploader__zone .uploader__action { display: none; }
.uploader--avatar .uploader__zone > img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
  object-fit: cover;
  border-radius: inherit;
}
.uploader--avatar .uploader__zone::after {
  content: '\f030'; /* fa-camera */
  font-family: 'Font Awesome 7 Pro', 'Font Awesome 6 Pro', 'Font Awesome 6 Free', sans-serif;
  font-weight: 300;
  position: absolute;
  right: 4px;
  bottom: 4px;
  width: 28px;
  height: 28px;
  border-radius: var(--radius-full);
  background-color: var(--bg-primary);
  color: var(--text-secondary);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  line-height: 1;
  /* A ring in the panel colour, so the chip reads as a control on the avatar edge. */
  -webkit-box-shadow: 0 0 0 2px var(--bg-primary), var(--shadow-sm);
  box-shadow: 0 0 0 2px var(--bg-primary), var(--shadow-sm);
  font-size: 13px;
}
.uploader--lg.uploader--avatar .uploader__zone::after { right: 10px; bottom: 10px; width: 36px; height: 36px; font-size: 15px; }
/* --square: a rounded-square cover tile (e.g. an achievement photo): no camera chip, the icon stacks over a label. */
.uploader--square { --uploader-avatar-radius: var(--radius-lg); }
.uploader--square .uploader__zone::after { content: none; }
.uploader--square .uploader__zone .uploader__icon {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 0.5rem;
  background-color: transparent;
  color: inherit;
  font-size: 14px;
}

/* --no-chip: no camera chip on the avatar edge (tq-8409: the profile photo keeps its pre-uploader look). */
.uploader--no-chip .uploader__zone::after { content: none; }
/* With no chip on its edge the avatar is a plain one: the zone clips its content, and a shown photo replaces the icon
   and fills the zone in flow (as a plain avatar's container lays out its photo), so it renders exactly as before. */
.uploader--avatar.uploader--no-chip .uploader__zone { overflow: hidden; }
.uploader--avatar.uploader--no-chip.has-preview .uploader__zone > .uploader__icon { display: none; }
.uploader--avatar.uploader--no-chip .uploader__zone > img {
  position: static;
  width: 100%;
  height: 100%;
  border-radius: 0;
}
/* --drag-edge: no edge at rest, so the photo / initials fill the zone exactly as a plain avatar does; the drop-zone edge
   (the emerald drag-over, R15) shows ONLY while a file is dragged over it. It is drawn as an outline just outside the
   zone, on the surface around it (where it reads; over a photo it would not), so nothing moves (tq-8409, isabella
   900051431). */
.uploader--drag-edge .uploader__zone { border-width: 0; }
.uploader--drag-edge .uploader__zone.is-dragover {
  outline: 2px dashed var(--utility-emerald-600, #059669);
  outline-offset: 3px;
}

/* --banner: a wide cover target (hero / cover image). */
.uploader--banner .uploader__zone {
  aspect-ratio: 4 / 1;
  /* A floor, so the icon + title + hint are never clipped where 4:1 would be too short. */
  min-height: 128px;
  padding: 16px;
  overflow: hidden;
}
.uploader--banner .uploader__zone > img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
  object-fit: cover;
}
.uploader--banner.has-preview .uploader__zone::before {
  content: '';
  position: absolute;
  inset: 0;
  background: -webkit-gradient(linear, left top, left bottom, color-stop(40%, rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.55)));
  background: linear-gradient(180deg, rgba(0, 0, 0, 0) 40%, rgba(0, 0, 0, 0.55) 100%);
  pointer-events: none;
}
.uploader--banner.has-preview .uploader__icon,
.uploader--banner.has-preview .uploader__title,
.uploader--banner.has-preview .uploader__subtitle {
  position: relative;
  z-index: 1;
  color: #fff;
}

/* --button: a button, not a drop-zone surface. Its zone composes the page's canonical button classes (uploader.js
   buttonClass, default "btn-secondary btn-sm"), so it is painted by the button system, not here. */
/* The root is a plain block, so the zone keeps the button's own display (a flex parent would blockify it). */
.uploader--button { display: block; }
.uploader--button .uploader__previews { margin-top: 12px; }
.uploader--button .uploader__zone { cursor: pointer; text-align: inherit; }
.uploader--button .uploader__zone.is-dragover { -webkit-box-shadow: 0 0 0 2px var(--border-focus); box-shadow: 0 0 0 2px var(--border-focus); }
.uploader--button .uploader__subtitle,
.uploader--button .uploader__action { display: none; }
.uploader--button.is-uploading .uploader__icon { -webkit-animation: none; animation: none; }

/* --gallery: a grid of tiles; the drop zone is the last ("add") tile. */
.uploader--gallery {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(var(--uploader-tile-size), 1fr));
  gap: 10px;
}
.uploader--gallery .uploader__zone {
  height: var(--uploader-tile-size);
  min-height: 0;
  padding: 10px;
  gap: 6px;
  -webkit-box-ordinal-group: 100;
  -ms-flex-order: 99;
  order: 99;
}
.uploader--gallery .uploader__subtitle { display: none; }
.uploader--gallery .uploader__previews { display: contents; }
.uploader--gallery .uploader__previews .uploader__item {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: stretch;
  -ms-flex-align: stretch;
  align-items: stretch;
  padding: 0;
  overflow: hidden;
  height: var(--uploader-tile-size);
}
.uploader--gallery .uploader__previews .uploader__thumb {
  width: 100%;
  height: 100%;
  border-radius: 0;
  font-size: 24px;
}
.uploader--gallery .uploader__previews .uploader__meta {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  padding: 6px 8px;
  background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.55)));
  background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.55) 100%);
  color: #fff;
}
.uploader--gallery .uploader__previews .uploader__name { color: #fff; font-size: 12px; }
.uploader--gallery .uploader__previews .uploader__detail { color: rgba(255, 255, 255, 0.8); font-size: 10.5px; }
.uploader--gallery .uploader__previews .uploader__actions {
  position: absolute;
  top: 4px;
  right: 4px;
}
.uploader--gallery .uploader__previews .uploader__item.is-success::before { top: 4px; left: 4px; }
.uploader--gallery .uploader__previews .uploader__btn { background-color: color-mix(in oklch, #000 50%, transparent); color: #fff; }
.uploader--gallery .uploader__previews .uploader__btn:hover { background-color: color-mix(in oklch, #000 70%, transparent); color: #fff; }

/* ==========================================================================
 * Sizes + density
 * ========================================================================== */

.uploader--sm { --uploader-avatar-size: 80px; }
.uploader--sm:not(.uploader--avatar):not(.uploader--button):not(.uploader--gallery) .uploader__zone { min-height: 120px; padding: 1rem; }
.uploader--lg { --uploader-avatar-size: 160px; }
.uploader--lg:not(.uploader--avatar):not(.uploader--button):not(.uploader--gallery) .uploader__zone { min-height: 240px; padding: 2.5rem 2rem; }

/* --quiet: no edge until hover / drag-over. */
.uploader--quiet .uploader__zone:not(:hover):not(.is-dragover) { border-color: transparent; }

@-webkit-keyframes uploader-pulse {
  0%, 100% { -webkit-transform: scale(1); transform: scale(1); }
  50% { -webkit-transform: scale(1.06); transform: scale(1.06); }
}

@keyframes uploader-pulse {
  0%, 100% { -webkit-transform: scale(1); transform: scale(1); }
  50% { -webkit-transform: scale(1.06); transform: scale(1.06); }
}

@media (prefers-reduced-motion: reduce) {
  .uploader.is-uploading .uploader__icon { -webkit-animation: none; animation: none; }
  .uploader__item,
  .uploader__btn,
  .uploader__previews--grid .uploader__actions { -webkit-transition: none; transition: none; }
} /* the DS uploader, composing .upload-dropzone (after it): canonical DS component, imported in place (tq-8373 U1) */
/* ==========================================================================
   REINLY – Photo Manager (listing wizard grouped photo management)
   ========================================================================== */

/* ── Stacked modals (category picker / assign) ──
   These open on top of the full-screen wizard modal.
   The wizard sits at z-index 70 with content at 100.
   These modals must layer above that entire stack. */

#pm-category-modal {
  z-index: var(--z-modal-stacked);
}

#pm-category-modal .modal-overlay {
  z-index: var(--z-modal-overlay);
}

#pm-category-modal .modal-dialog {
  z-index: var(--z-modal-dialog);
}

#pm-category-modal .modal-content {
  z-index: var(--z-modal-content);
}

/* ══════════════════════════════════════════════════════════════════
   SECTION CARDS
   ══════════════════════════════════════════════════════════════════ */

.pm-section {
  -webkit-transition: border-color 0.2s ease, background-color 0.2s ease, -webkit-box-shadow 0.2s ease;
  transition: border-color 0.2s ease, background-color 0.2s ease, -webkit-box-shadow 0.2s ease;
  transition: box-shadow 0.2s ease, border-color 0.2s ease, background-color 0.2s ease;
  transition: box-shadow 0.2s ease, border-color 0.2s ease, background-color 0.2s ease, -webkit-box-shadow 0.2s ease;
}

/* Section receives a dragged item (Sortable reorder or file drop) — elegant ring + tinted bg */
.pm-section.pm-drag-over,
.pm-section.pm-section--dragover {
  border-color: var(--utility-emerald-600) !important;
  -webkit-box-shadow: 0 0 0 3px color-mix(in srgb, var(--utility-emerald-600) 15%, transparent);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--utility-emerald-600) 15%, transparent);
  background-color: color-mix(in srgb, var(--utility-emerald-600) 3%, var(--canvas-primary)) !important;
}

/* ══════════════════════════════════════════════════════════════════
   PHOTO THUMBNAILS — resting state
   ══════════════════════════════════════════════════════════════════ */

.pm-photo-thumb {
  position: relative;
  border: 1px solid var(--border-primary);
  border-radius: 0.5rem;
  cursor: -webkit-grab;
  cursor: grab;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-user-select: none;
  -webkit-transition:
    opacity 0.15s ease,
    border-color 0.15s ease,
    -webkit-transform 0.18s cubic-bezier(0.2, 0, 0, 1),
    -webkit-box-shadow 0.18s cubic-bezier(0.2, 0, 0, 1);
  transition:
    opacity 0.15s ease,
    border-color 0.15s ease,
    -webkit-transform 0.18s cubic-bezier(0.2, 0, 0, 1),
    -webkit-box-shadow 0.18s cubic-bezier(0.2, 0, 0, 1);
  transition:
    transform 0.18s cubic-bezier(0.2, 0, 0, 1),
    box-shadow 0.18s cubic-bezier(0.2, 0, 0, 1),
    opacity 0.15s ease,
    border-color 0.15s ease;
  transition:
    transform 0.18s cubic-bezier(0.2, 0, 0, 1),
    box-shadow 0.18s cubic-bezier(0.2, 0, 0, 1),
    opacity 0.15s ease,
    border-color 0.15s ease,
    -webkit-transform 0.18s cubic-bezier(0.2, 0, 0, 1),
    -webkit-box-shadow 0.18s cubic-bezier(0.2, 0, 0, 1);
  will-change: transform;
}

/* ── Hover — subtle lift + shadow ── */
.pm-photo-thumb:hover {
  -webkit-transform: translateY(-1px);
  -ms-transform: translateY(-1px);
  transform: translateY(-1px);
  -webkit-box-shadow:
    0 2px 4px rgba(0, 0, 0, 0.04),
    0 4px 12px rgba(0, 0, 0, 0.06);
  box-shadow:
    0 2px 4px rgba(0, 0, 0, 0.04),
    0 4px 12px rgba(0, 0, 0, 0.06);
  border-color: var(--border-primary-hover, var(--border-primary));
}

/* ── Active press — smooth lift (only when grabbing the image, not clicking action buttons) ── */
.pm-photo-thumb:active:not(:has(button:active)) {
  cursor: -webkit-grabbing;
  cursor: grabbing;
  -webkit-transform: translateY(-3px);
  -ms-transform: translateY(-3px);
  transform: translateY(-3px);
  -webkit-box-shadow:
    0 6px 12px rgba(0, 0, 0, 0.1),
    0 12px 28px rgba(0, 0, 0, 0.08);
  box-shadow:
    0 6px 12px rgba(0, 0, 0, 0.1),
    0 12px 28px rgba(0, 0, 0, 0.08);
}

/* ── Skeleton shimmer underneath image ── */
.pm-thumb-skeleton {
  border-radius: inherit;
  z-index: 0;
  -webkit-transition: opacity 0.3s ease;
  transition: opacity 0.3s ease;
}

.pm-thumb-skeleton--hidden {
  display: none;
}

.pm-thumb-skeleton--error {
  -webkit-animation: none;
  animation: none;
  background: var(--bg-tertiary);
}

/* ── Image/video fade-in on load ── */
.pm-thumb-img {
  position: relative;
  z-index: 1;
  opacity: 0;
  -webkit-transition: opacity 0.35s cubic-bezier(0.2, 0, 0, 1);
  transition: opacity 0.35s cubic-bezier(0.2, 0, 0, 1);
}

.pm-thumb-img--loaded {
  opacity: 1;
}

/* ══════════════════════════════════════════════════════════════════
   VIDEO CARD — badge, hover preview progress, play indicator
   ══════════════════════════════════════════════════════════════════ */

/* Play badge — centered, fades out on hover when video plays */
.pm-video-badge {
  pointer-events: none;
  -webkit-transition: opacity 0.25s ease;
  transition: opacity 0.25s ease;
}

.pm-photo-thumb:hover .pm-video-badge {
  opacity: 0;
}

/* Progress track — thin bar at bottom of video thumbs */

/* Video loading spinner on thumbnails */
.pm-video-loader {
  pointer-events: none;
  opacity: 0;
  -webkit-transition: opacity 0.2s ease;
  transition: opacity 0.2s ease;
}

.pm-video-loader.is-active {
  opacity: 1;
}

/* Hide play badge while loading */
.pm-photo-thumb:has(.pm-video-loader.is-active) .pm-video-badge {
  opacity: 0 !important;
}

/* ── Drag handle indicator ──
   Subtle grip icon on hover to signal draggability */
.pm-photo-thumb::after {
  content: '';
  position: absolute;
  bottom: 4px;
  left: 50%;
  -webkit-transform: translateX(-50%);
  -ms-transform: translateX(-50%);
  transform: translateX(-50%);
  width: 20px;
  height: 3px;
  border-radius: 2px;
  background: rgba(255, 255, 255, 0.6);
  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
  opacity: 0;
  -webkit-transition: opacity 0.15s ease;
  transition: opacity 0.15s ease;
  z-index: 5;
  pointer-events: none;
}

.pm-photo-thumb:hover::after {
  opacity: 1;
}

/* ══════════════════════════════════════════════════════════════════
   DRAG STATES — Shopify Draggable
   ══════════════════════════════════════════════════════════════════ */

/* ── Source element (stays in place, ghosted) ── */
.pm-photo-thumb--dragging,
.draggable-source--is-dragging {
  opacity: 0.25 !important;
  -webkit-transform: scale(0.96) !important;
  -ms-transform: scale(0.96) !important;
  transform: scale(0.96) !important;
  border-style: dashed !important;
  border-color: var(--border-primary-solid) !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  pointer-events: none;
}

.pm-photo-thumb--dragging::after,
.draggable-source--is-dragging::after {
  opacity: 0 !important;
}

/* ── Mirror (the element the user drags) ──
   CRITICAL: No transitions — must track cursor with zero delay.
   Draggable sets position:absolute + top/left — do not override position. */
.pm-photo-thumb--mirror,
.draggable-mirror {
  z-index: var(--z-drag-mirror) !important;
  cursor: -webkit-grabbing !important;
  cursor: grabbing !important;
  border-radius: 0.5rem;
  border: 2px solid var(--utility-emerald-600) !important;
  -webkit-box-shadow:
    0 8px 16px rgba(0, 0, 0, 0.12),
    0 20px 40px rgba(0, 0, 0, 0.08),
    0 0 0 4px color-mix(in srgb, var(--utility-emerald-600) 20%, transparent) !important;
  box-shadow:
    0 8px 16px rgba(0, 0, 0, 0.12),
    0 20px 40px rgba(0, 0, 0, 0.08),
    0 0 0 4px color-mix(in srgb, var(--utility-emerald-600) 20%, transparent) !important;
  opacity: 0.92 !important;
  -webkit-transition: none !important;
  transition: none !important;
  pointer-events: none;
}

/* ══════════════════════════════════════════════════════════════════
   PHOTO GRID — layout animation
   ══════════════════════════════════════════════════════════════════ */

.pm-photo-grid {
  min-height: 40px;
}

/* During drag, sibling items animate smoothly to make room.
   The SortAnimation plugin applies transforms — this transition
   makes those transforms ease in/out instead of snapping. */
.pm-photo-grid--dragging .pm-photo-thumb:not(.pm-photo-thumb--dragging):not(.draggable-source--is-dragging) {
  -webkit-transition: -webkit-transform 0.25s cubic-bezier(0.2, 0, 0, 1);
  transition: -webkit-transform 0.25s cubic-bezier(0.2, 0, 0, 1);
  transition: transform 0.25s cubic-bezier(0.2, 0, 0, 1);
  transition: transform 0.25s cubic-bezier(0.2, 0, 0, 1), -webkit-transform 0.25s cubic-bezier(0.2, 0, 0, 1);
  /* Suppress hover lift during drag */
  -webkit-transform: none;
  -ms-transform: none;
  transform: none;
}

.pm-photo-grid--dragging .pm-photo-thumb:hover::after {
  opacity: 0;
}

/* ══════════════════════════════════════════════════════════════════
   EMPTY STATE DROP ZONES
   ══════════════════════════════════════════════════════════════════ */

.pm-empty-state {
  pointer-events: none;
  -webkit-transition: border-color 0.2s ease, background-color 0.2s ease, -webkit-transform 0.2s ease;
  transition: border-color 0.2s ease, background-color 0.2s ease, -webkit-transform 0.2s ease;
  transition: border-color 0.2s ease, background-color 0.2s ease, transform 0.2s ease;
  transition: border-color 0.2s ease, background-color 0.2s ease, transform 0.2s ease, -webkit-transform 0.2s ease;
}

/* When dragging over an empty section, make the empty state glow */
.pm-drag-over .pm-empty-state {
  border-color: var(--utility-emerald-600) !important;
  background-color: color-mix(in srgb, var(--utility-emerald-600) 6%, transparent) !important;
  -webkit-transform: scale(1.01);
  -ms-transform: scale(1.01);
  transform: scale(1.01);
}

.pm-drag-over .pm-empty-state i {
  color: var(--utility-emerald-600) !important;
}

.pm-drag-over .pm-empty-state p {
  color: var(--utility-emerald-700) !important;
}

/* Hide empty state when grid has real photo thumbs */
.pm-photo-grid:has(.pm-photo-thumb) .pm-empty-state {
  display: none;
}

/* ══════════════════════════════════════════════════════════════════
   GLOBAL DRAG ACTIVE — body-level class
   ══════════════════════════════════════════════════════════════════ */

/* Applied to body while any drag is in progress */
body.pm-is-dragging {
  cursor: -webkit-grabbing !important;
  cursor: grabbing !important;
}

body.pm-is-dragging * {
  cursor: -webkit-grabbing !important;
  cursor: grabbing !important;
}

/* Prevent text selection during drag */
body.pm-is-dragging {
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-user-select: none;
}

/* ══════════════════════════════════════════════════════════════════
   CATEGORY PICKER MODAL
   ══════════════════════════════════════════════════════════════════ */

/* ── Step dots ── */
.pm-step-dot {
  width: 100%;
  height: 3px;
  border-radius: 2px;
  background: var(--border-primary);
  -webkit-transition: background 0.25s ease;
  transition: background 0.25s ease;
}

.pm-step-dot.is-active {
  background: var(--utility-emerald-600);
}

.pm-category-option {
  cursor: pointer;
  -webkit-transition: border-color 0.15s ease, background 0.15s ease, -webkit-transform 0.1s ease;
  transition: border-color 0.15s ease, background 0.15s ease, -webkit-transform 0.1s ease;
  transition: border-color 0.15s ease, background 0.15s ease, transform 0.1s ease;
  transition: border-color 0.15s ease, background 0.15s ease, transform 0.1s ease, -webkit-transform 0.1s ease;
}

.pm-category-option:hover {
  border-color: var(--border-secondary) !important;
  background: var(--canvas-secondary) !important;
}

.pm-category-option:active {
  border-color: var(--utility-emerald-700) !important;
}

.pm-category-option--selected,
.pm-category-option--selected:hover {
  border-color: var(--utility-emerald-700) !important;
  background: var(--bg-primary-subtle) !important;
}

/* ══════════════════════════════════════════════════════════════════
   ASSIGN MODAL THUMBNAILS
   ══════════════════════════════════════════════════════════════════ */

.pm-assign-thumb {
  border: 2px solid transparent;
}

.pm-assign-thumb:hover {
  opacity: 0.85;
}

.pm-assign-thumb:active {
  border-color: var(--utility-emerald-700);
}

.pm-assign-thumb--selected {
  outline: 2px solid var(--utility-emerald-700);
  outline-offset: -2px;
}

.pm-assign-thumb--selected .pm-assign-check {
  opacity: 1 !important;
}

/* ══════════════════════════════════════════════════════════════════
   RESPONSIVE
   ══════════════════════════════════════════════════════════════════ */

@media (max-width: 480px) {
  .pm-photo-grid {
    grid-template-columns: repeat(3, 1fr) !important;
  }

  /* Disable hover lift on touch devices */
  .pm-photo-thumb:hover {
    -webkit-transform: none;
    -ms-transform: none;
    transform: none;
    -webkit-box-shadow: none;
    box-shadow: none;
  }

  .pm-photo-thumb:hover::after {
    opacity: 0;
  }
}

/* ══════════════════════════════════════════════════════════════════
   REDUCED MOTION
   ══════════════════════════════════════════════════════════════════ */

@media (prefers-reduced-motion: reduce) {
  .pm-photo-thumb,
  .pm-section,
  .pm-empty-state,
  .pm-photo-thumb--mirror,
  .draggable-mirror {
    -webkit-transition: none !important;
    transition: none !important;
    -webkit-transform: none !important;
    -ms-transform: none !important;
    transform: none !important;
  }
}
/* ══════════════════════════════════════════════════════════════════
   UPLOAD TILES — A100 tq-8721 (the canonical upload contract, origin Hermanns tq-8713 6d5d9efe): a picked / dropped file
   is a tile of the SAME grid at once (the listing photo grid, photo-manager.js; the pedigree document tiles,
   pedigree-editor.js); the DS upload-row engine (upload-rows.js / upload-rows.css) paints its status
   area (.upload-row__status: the bar + text [+ Retry]) and control (.upload-row__actions). Here only the tile's layout:
   the local preview, the status strip along the bottom, the control in the corner. On commit the same element becomes
   the host's real tile (no remove + re-insert); a photo tile isn't draggable until then (Sortable takes .pm-photo-thumb).
   ══════════════════════════════════════════════════════════════════ */

.rnly-upload-tile {
  border: 1px solid var(--border-primary);
  border-radius: 0.5rem;
  overflow: hidden;
  background: var(--bg-secondary);
}

.rnly-upload-tile[data-upload-state='transferring'],
.rnly-upload-tile[data-upload-state='processing'] {
  border-color: var(--utility-emerald-600);
}

.rnly-upload-tile[data-upload-state='failed'] {
  border-color: var(--utility-red-500, #ef4444);
}

/* the local preview (the picked file itself) under the status strip */
.rnly-upload-tile__preview {
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
  object-fit: cover;
  display: block;
}

.rnly-upload-tile__placeholder {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
  height: 100%;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  color: var(--text-tertiary);
}

.rnly-upload-tile[data-upload-state='failed'] .rnly-upload-tile__preview {
  opacity: 0.45;
}

/* the status strip: the engine's bar + text (+ Retry) on the canvas, legible over any photo */
.rnly-upload-tile__status {
  position: absolute;
  inset-inline: 0;
  bottom: 0;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  gap: 0.25rem 0.5rem;
  padding: 0.375rem 0.5rem;
  background: var(--canvas-primary);
  border-top: 1px solid var(--border-primary);
}

.rnly-upload-tile__status .upload-row__track {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  max-width: none;
  width: auto;
}

/* the tile's own control (Cancel / Remove) in its corner */
.rnly-upload-tile__actions {
  position: absolute;
  top: 0.25rem;
  inset-inline-end: 0.25rem;
  z-index: 2;
}

.rnly-upload-tile__actions .upload-row__btn {
  background: var(--canvas-primary);
}

/* A129 (tq-8902): the achievement photo (the DS uploader's square avatar variant, achievements.js) shows its upload as the
   SAME tile, laid OVER the square until the server confirms: the picked image (the item's thumb, full size), the engine's
   status strip, the control in the corner. The uploader keeps the avatar's item off the page; achievements.js puts it in
   the uploader's previews box, which covers the square here. */
.rnly-achievement-card__photo-upload.uploader {
  position: relative;
}

.rnly-achievement-card__photo-upload > .uploader__previews {
  position: absolute;
  inset: 0;
  z-index: 1;
  display: block;
}

.rnly-achievement-card__photo-upload > .uploader__previews:empty {
  display: none;
}

.rnly-achievement-card__photo-progress.uploader__item {
  position: absolute;
  inset: 0;
  display: block;
  padding: 0;
  -webkit-box-shadow: none;
  box-shadow: none;
}

.rnly-achievement-card__photo-progress .uploader__thumb {
  width: 100%;
  height: 100%;
  border-radius: 0;
}

.rnly-achievement-card__photo-progress[data-upload-state='failed'] .uploader__thumb img {
  opacity: 0.45;
}

.rnly-achievement-card__photo-progress .uploader__name {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}

/* the square is 80px: the strip's text wraps (never cut to "208.0 o…"), and a failure's reason + Retry fit under the
   corner control */
.rnly-achievement-card__photo-progress .rnly-upload-tile__status {
  gap: 0.125rem 0.25rem;
  padding: 0.25rem 0.375rem;
  font-size: 0.625rem;
  line-height: 1.2;
}

.rnly-achievement-card__photo-progress .upload-row__text {
  white-space: normal;
  overflow-wrap: anywhere;
}

.rnly-achievement-card__photo-progress[data-upload-state='failed'] .rnly-upload-tile__status {
  padding-top: 1.75rem;
}

.rnly-achievement-card__photo-progress .upload-row__retry {
  font-size: 0.625rem;
}

/* A125 (tq-8863): a failed tile's reason is the DS tooltip (the engine's info button), portaled over the listing editor /
   wizard MODALS (z-1050). The ONE z ladder (layout.css :root, tq-9381) puts --z-tooltip (1075) above the modal band, so the
   app's override that lived here (1085) is gone: one writer. */ /* A100 tq-8721: the upload-row engine's grid tile layout (listing photos, pedigree documents) */
/* status-badge.css: Reinly marketplace component (Reinly.Design OWNS it; reinly.webapp imports this file IN PLACE).
   tq-8177 (R4, one CSS pipeline): the rules are the served app's (src/reinly.webapp @ 09387252, the visual truth;
   isabella 900047450): plain CSS only (app-imported-plain-css test).
   tq-8209 (R3b): the markup uses the canonical rnly- name, so the app's old .status-badge alias is gone; the tone colours are
   Reinly component tokens (--status-badge-*), defined with the SAME values in theme-light AND theme-dark (theme-*.css), so
   both themes keep today's look (light pastel pills). No raw colour in this file.
   tq-8272 (R3f, USER: every status its own colour): paused -> fuchsia, expiring -> orange, ready -> teal; the rest unchanged.
*/

/* ==========================================================================
   REINLY – Status badge (10 listing statuses: draft / in-progress / published / paused / sold / ready / archived /
   expiring / expired / pending-sale)
   ========================================================================== */

.rnly-status-badge {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  border-radius: 9999px;
  padding-left: 0.5rem;
  padding-right: 0.5rem;
  padding-top: 0.125rem;
  padding-bottom: 0.125rem;
  font-size: 0.6875rem;
  line-height: 1rem;
  font-weight: 500;
}

/* Neutral: draft / published / archived (a light pill in both themes; tq-8209 fixed the unreadable dark text) */
.rnly-status-badge--draft {
  background-color: var(--status-badge-neutral-bg);
  color: var(--status-badge-neutral-fg);
}

.rnly-status-badge--archived {
  background-color: var(--status-badge-neutral-bg);
  color: var(--status-badge-neutral-muted-fg);
}

.rnly-status-badge--published {
  background-color: var(--status-badge-neutral-bg);
  color: var(--status-badge-neutral-fg);
  gap: 5px;
}

/* Green "live" dot prefix for Live listings — fades in/out to hint
   the listing is active without drawing too much attention. */
.rnly-status-badge--published::before {
  content: '';
  display: inline-block;
  width: 6px;
  height: 6px;
  border-radius: 9999px;
  background-color: var(--status-badge-live-dot);
  -webkit-animation: status-badge-live-fade 2s ease-in-out infinite;
  animation: status-badge-live-fade 2s ease-in-out infinite;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

@-webkit-keyframes status-badge-live-fade {
  0%,  100% { opacity: 1;   }
  50%       { opacity: 0.25; }
}

@keyframes status-badge-live-fade {
  0%,  100% { opacity: 1;   }
  50%       { opacity: 0.25; }
}

@media (prefers-reduced-motion: reduce) {
  .rnly-status-badge--published::before {
    -webkit-animation: none;
    animation: none;
  }
}

/* Amber: in-progress */
.rnly-status-badge--in-progress {
  background-color: var(--status-badge-amber-bg);
  color: var(--status-badge-amber-fg);
}

/* Fuchsia: paused (a held state, not a warning; tq-8272) */
.rnly-status-badge--paused {
  background-color: var(--status-badge-fuchsia-bg);
  color: var(--status-badge-fuchsia-fg);
}

/* Orange, one step deeper than amber: expiring (urgency between amber and red; tq-8272) */
.rnly-status-badge--expiring {
  background-color: var(--status-badge-orange-bg);
  color: var(--status-badge-orange-fg);
}

/* Blue: sold */
.rnly-status-badge--sold {
  background-color: var(--status-badge-blue-bg);
  color: var(--status-badge-blue-fg);
}

/* Teal: ready (tq-8272) */
.rnly-status-badge--ready {
  background-color: var(--status-badge-teal-bg);
  color: var(--status-badge-teal-fg);
}

/* Red: expired */
.rnly-status-badge--expired {
  background-color: var(--status-badge-red-bg);
  color: var(--status-badge-red-fg);
}

/* Violet: pending-sale */
.rnly-status-badge--pending-sale {
  background-color: var(--status-badge-violet-bg);
  color: var(--status-badge-violet-fg);
} /* canonical DS component, imported in place (tq-8177) */
/* verified-badge.css: Reinly marketplace component (Reinly.Design OWNS it; reinly.webapp imports this file IN PLACE).
   tq-8746 (A103, USER via john 900057213): ONE green verified badge for every REAL verification indicator in the app
   (sellers list / detail, home seller tiles, horse seller row / card, profile) and the avatar seal (avatar.css).
   Plain CSS only (app-imported-plain-css test). No raw colour: the green comes from the --fg-verified token below,
   defined for light AND dark here so this one file carries the whole treatment.
   Proportions are the indicators' existing ones: no fill, no padding, the size comes from the context's text-* class,
   so swapping the old blue icon for this badge moves nothing.
*/

/* ==========================================================================
   TOKEN  (>= 4.5:1 as text on the page and card surfaces, both themes)
   ========================================================================== */
:root,
[data-theme="theme-light"],
[data-theme="theme-mica-light"] {
  --fg-verified: var(--utility-green-700);
}

[data-theme="theme-dark"],
[data-theme="theme-mica-dark"] {
  --fg-verified: var(--utility-green-400);
}


/* ==========================================================================
   REINLY – Verified badge
   - labelled:  <span class="rnly-verified"><i class="fa-solid fa-badge-check" aria-hidden="true"></i>Verified seller</span>
   - icon-only: <span class="rnly-verified rnly-verified--icon" role="img" aria-label="Verified seller"
                      title="Verified seller"><i class="fa-solid fa-badge-check" aria-hidden="true"></i></span>
   ========================================================================== */
.rnly-verified {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  color: var(--fg-verified);
}

.rnly-verified > i {
  color: inherit;
}

/* icon-only: stays an inline glyph beside a name (the old <i>'s box), so the name's line doesn't move */
.rnly-verified--icon {
  display: inline;
}

/* the profile card's meta row spaces its icon 6px from the label (mobile-shell.css); the badge keeps that spacing */
.rnly-profile-card__meta > .rnly-verified {
  gap: inherit;
} /* the ONE verified badge: canonical DS component, imported in place (tq-8746 A103) */
/* ==========================================================================
   Switch (toggle) — Reinly.Design OWNS it; reinly.webapp imports this file IN PLACE (tq-8177 R4 pipeline).
   tq-8208 (R3a; isabella 900048923): the ONE switch. The live Reinly look (the served app's toggle-switch, @ 09387252)
   replaces the old DS look here. Generic DS names are kept (isabella: generic primitives keep generic names).
   PLAIN CSS + var() tokens only: the app's Tailwind-3 compile imports this file (app-imported-plain-css test).

   Two markups, one component:
   - a <label class="toggle"> wrapping a visually-hidden <input class="toggle-input"> + <span class="toggle-track">
     <span class="toggle-thumb"> (state = the input's :checked);
   - a <button type="button" class="toggle-track toggle-track--button" role="switch" aria-checked="false|true">
     <span class="toggle-thumb"> (state = aria-checked, toggled by the owning script; Space / Enter come from the
     native button). It needs an accessible name: aria-label, or aria-labelledby on the row label.
   ========================================================================== */

:root {
  --bg-toggle-off: var(--utility-neutral-200);
  --bg-toggle-on: var(--utility-emerald-600);
}

.toggle {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  cursor: pointer;
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
  gap: 0.5rem;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

.toggle-input {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
  border-width: 0;
}

/* Track — the live look: 44 x 24, a neutral off track, no ring. */
.toggle-track {
  position: relative;
  display: inline-block;
  width: 44px;
  height: 24px;
  border-radius: 12px;
  background-color: var(--bg-toggle-off);
  -ms-flex-negative: 0;
  flex-shrink: 0;
  vertical-align: middle;
  -webkit-transition: background-color 0.15s ease;
  transition: background-color 0.15s ease;
}

/* Thumb — white, 20px, 2px inset; slides 20px when on. */
.toggle-thumb {
  position: absolute;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background-color: #fff;
  top: 2px;
  left: 2px;
  -webkit-transition: -webkit-transform 0.15s ease;
  transition: -webkit-transform 0.15s ease;
  transition: transform 0.15s ease;
  transition: transform 0.15s ease, -webkit-transform 0.15s ease;
  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
}

/* On */
.toggle-input:checked ~ .toggle-track,
.toggle-track--button[aria-checked="true"] {
  background-color: var(--bg-toggle-on);
}

.toggle-input:checked ~ .toggle-track .toggle-thumb,
.toggle-track--button[aria-checked="true"] .toggle-thumb {
  -webkit-transform: translateX(20px);
  -ms-transform: translateX(20px);
  transform: translateX(20px);
}

/* The button-driven switch: a bare <button> as the track. */
.toggle-track--button {
  cursor: pointer;
  border: none;
  padding: 0;
  line-height: 0;
  font-size: 0;
}

/* Disabled */
.toggle:has(.toggle-input:disabled) {
  cursor: not-allowed;
  opacity: 50%;
  pointer-events: none;
}

  /* Allow label text selection even while the control is locked */
  .toggle:has(.toggle-input:disabled) .toggle-label,
  .toggle:has(.toggle-input:disabled) .toggle-text {
    pointer-events: auto;
  }

.toggle-track--button:disabled {
  cursor: not-allowed;
  opacity: 50%;
}

.toggle-label {
  font-size: 0.75rem;
  line-height: 1.125rem;
  font-weight: 500;
  color: var(--text-check-label);
}

/* Dynamic label text via data-on / data-off attributes */
.toggle-input ~ .toggle-label[data-on][data-off] {
  font-size: 0;
  line-height: 0;
}

  .toggle-input ~ .toggle-label[data-on][data-off]::after {
    font-size: 0.75rem;
    line-height: normal;
    content: attr(data-off);
  }

  .toggle-input:checked ~ .toggle-label[data-on][data-off]::after {
    content: attr(data-on);
  }

/* Sizes — xs / sm / lg (md is the default above); the thumb keeps its 2px inset. */
.toggle-xs .toggle-track { width: 32px; height: 18px; }
.toggle-xs .toggle-thumb { width: 14px; height: 14px; }
.toggle-xs .toggle-input:checked ~ .toggle-track .toggle-thumb { -webkit-transform: translateX(14px); -ms-transform: translateX(14px); transform: translateX(14px); }

.toggle-sm .toggle-track { width: 34px; height: 20px; }
.toggle-sm .toggle-thumb { width: 16px; height: 16px; }
.toggle-sm .toggle-input:checked ~ .toggle-track .toggle-thumb { -webkit-transform: translateX(14px); -ms-transform: translateX(14px); transform: translateX(14px); }

.toggle-lg .toggle-track { width: 46px; height: 26px; }
.toggle-lg .toggle-thumb { width: 22px; height: 22px; }
.toggle-lg .toggle-input:checked ~ .toggle-track .toggle-thumb { -webkit-transform: translateX(20px); -ms-transform: translateX(20px); transform: translateX(20px); }

/* Intent variants — change the ON track colour (never narrow: incl. info). */
.toggle-success .toggle-input:checked ~ .toggle-track { background-color: var(--bg-toggle-track-success); }
.toggle-warning .toggle-input:checked ~ .toggle-track { background-color: var(--bg-toggle-track-warning); }
.toggle-danger .toggle-input:checked ~ .toggle-track { background-color: var(--bg-toggle-track-danger); }
.toggle-info .toggle-input:checked ~ .toggle-track { background-color: var(--bg-toggle-track-info); }

/* Icon thumb — crisp ✓ / ✕ glyphs inside the track via SVG mask so the glyph
   colour tracks the active theme (background-color, not a baked stroke). */
.toggle-icon .toggle-track::before,
.toggle-icon .toggle-track::after {
  position: absolute;
  top: 50%;
  width: 10px;
  height: 10px;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
  content: "";
  pointer-events: none;
  -webkit-transition: opacity var(--duration-fast, 100ms) var(--ease-out, ease);
  transition: opacity var(--duration-fast, 100ms) var(--ease-out, ease);
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  -webkit-mask-position: center;
          mask-position: center;
  -webkit-mask-size: contain;
          mask-size: contain;
}

  /* OFF glyph (×) — visible by default, on the right (where the thumb is not) */
  .toggle-icon .toggle-track::before {
    right: 5px;
    opacity: 1;
    background-color: var(--text-toggle-thumb-icon);
    -webkit-mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round'><path d='M18 6L6 18M6 6l12 12'/></svg>");
            mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round'><path d='M18 6L6 18M6 6l12 12'/></svg>");
  }

  /* ON glyph (✓) — hidden by default, shown when checked, on the left */
  .toggle-icon .toggle-track::after {
    left: 5px;
    opacity: 0;
    background-color: var(--text-on-brand);
    -webkit-mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><path d='M20 6L9 17l-5-5'/></svg>");
            mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><path d='M20 6L9 17l-5-5'/></svg>");
  }

.toggle-icon .toggle-input:checked ~ .toggle-track::before { opacity: 0; }
.toggle-icon .toggle-input:checked ~ .toggle-track::after { opacity: 1; }

/* Label alignment — labels on the LEFT of the control (control on the right) */
.toggle-reverse { -webkit-box-orient: horizontal; -webkit-box-direction: reverse; -ms-flex-direction: row-reverse; flex-direction: row-reverse; }

/* Justified — push label to the far left, control to the far right (form rows) */
.toggle-justify { display: -webkit-box; display: -ms-flexbox; display: flex; width: 100%; -webkit-box-align: start; -ms-flex-align: start; align-items: flex-start; }
.toggle-justify .toggle-track { margin-left: auto; }

/* Toggle with description — primary label + secondary helper text */
.toggle-text { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; }

.toggle-text-title {
  font-size: 0.75rem;
  line-height: 1.125rem;
  font-weight: 500;
  color: var(--text-check-label);
}

.toggle-text-help {
  font-size: 0.6875rem;
  line-height: 1rem;
  letter-spacing: 0.01em;
  color: var(--text-check-label-muted);
}

/* Toggle card — entire surface is the click target (radio-style) */
.toggle-card {
  position: relative;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  cursor: pointer;
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
  gap: 0.75rem;
  border-radius: var(--radius-xl);
  padding: 1rem;
  background-color: var(--bg-primary);
  -webkit-box-shadow: inset 0 0 0 1px var(--border-secondary);
  box-shadow: inset 0 0 0 1px var(--border-secondary);
  -webkit-transition: background-color var(--duration-fast, 100ms) var(--ease-out, ease),
              -webkit-box-shadow var(--duration-fast, 100ms) var(--ease-out, ease);
  transition: background-color var(--duration-fast, 100ms) var(--ease-out, ease),
              -webkit-box-shadow var(--duration-fast, 100ms) var(--ease-out, ease);
  transition: box-shadow var(--duration-fast, 100ms) var(--ease-out, ease),
              background-color var(--duration-fast, 100ms) var(--ease-out, ease);
  transition: box-shadow var(--duration-fast, 100ms) var(--ease-out, ease),
              background-color var(--duration-fast, 100ms) var(--ease-out, ease),
              -webkit-box-shadow var(--duration-fast, 100ms) var(--ease-out, ease);
}

.toggle-card:hover { -webkit-box-shadow: inset 0 0 0 1px var(--border-primary-hover); box-shadow: inset 0 0 0 1px var(--border-primary-hover); }
.toggle-card:has(.toggle-input:checked) { -webkit-box-shadow: inset 0 0 0 2px var(--border-brand); box-shadow: inset 0 0 0 2px var(--border-brand); }
.toggle-card:has(.toggle-input:disabled) { cursor: not-allowed; opacity: 50%; }

/* Toggle list group — vertical stack with internal dividers */
.toggle-list {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  overflow: hidden;
  border-radius: var(--radius-xl);
  -webkit-box-shadow: inset 0 0 0 1px var(--border-secondary);
  box-shadow: inset 0 0 0 1px var(--border-secondary);
}

  /* Row — works whether it's a direct child or wrapped in <li> */
  .toggle-list-item {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    cursor: pointer;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    gap: 0.75rem;
    padding-inline: 1rem;
    padding-block: 0.75rem;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    border-bottom: 1px solid var(--border-secondary);
    -webkit-transition: background-color var(--duration-fast, 100ms) var(--ease-out, ease);
    transition: background-color var(--duration-fast, 100ms) var(--ease-out, ease);
  }

  /* Last row never paints a bottom border, whether direct or in <li> */
  .toggle-list > .toggle-list-item:last-child,
  .toggle-list > li:last-child > .toggle-list-item,
  .toggle-list > li:last-child {
    border-bottom: 0;
  }

  .toggle-list-item:hover { background-color: var(--bg-primary-hover); }
  .toggle-list-item .toggle-track { margin-left: auto; -ms-flex-negative: 0; flex-shrink: 0; }
  .toggle-list-item:has(.toggle-input:disabled) { cursor: not-allowed; opacity: 50%; }

/* Focus-visible — single keyboard-only ring on the label form (the button form keeps the browser's own ring, as
   the served app does). */
.toggle-input:focus-visible + .toggle-track {
  outline: 2px solid var(--focus-ring);
  outline-offset: 2px;
}

@media (prefers-reduced-motion: reduce) {
  .toggle-card, .toggle-list-item,
  .toggle-track, .toggle-thumb,
  .toggle-icon .toggle-track::before, .toggle-icon .toggle-track::after {
    -webkit-transition: none;
    transition: none;
  }
}

/* Touch density (DS standard DR-006): the label is the tap target. The toggle gets no pseudo: .toggle-icon uses both
   track pseudos for its glyphs. */
@media (pointer: coarse) {
  .toggle:not(:has(.check-text)):not(.toggle-card):not(.toggle-list-item) {
    min-height: 44px;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
  }

  .toggle:not(.toggle-card):not(.toggle-list-item) {
    min-width: 44px;
  }
} /* canonical DS switch, imported in place (tq-8208) */
/* youtube-link-card.css: Reinly marketplace component (Reinly.Design OWNS it; reinly.webapp imports this file IN PLACE).
   tq-8177 (R4, one CSS pipeline): the rules are the served app's (src/reinly.webapp @ 09387252, the visual truth;
   isabella 900047450): every Tailwind apply rule expanded to the app's own Tailwind-3 output, plain CSS only (app-imported-plain-css test).
   tq-8242 (R3e): the markup now uses the canonical rnly- names, so the tq-8242 aliases are dropped.
*/

/* ==========================================================================
   REINLY – YouTube Link Card
   Card component for adding/previewing YouTube video links in the wizard.
   ========================================================================== */
.rnly-youtube-link-card {
  -webkit-transition: opacity 0.2s ease, -webkit-transform 0.2s ease;
  transition: opacity 0.2s ease, -webkit-transform 0.2s ease;
  transition: opacity 0.2s ease, transform 0.2s ease;
  transition: opacity 0.2s ease, transform 0.2s ease, -webkit-transform 0.2s ease;
}
.rnly-youtube-link-card__title {
  outline: none;
}
.rnly-youtube-link-card__title:focus {
  border-color: var(--utility-emerald-600) !important;
}
.rnly-youtube-link-card__url {
  outline: none;
  -webkit-transition: border-color 0.15s ease;
  transition: border-color 0.15s ease;
}
.rnly-youtube-link-card__url:focus {
  border-color: var(--utility-emerald-600) !important;
}

/* Valid URL state */
.rnly-youtube-link-card__url[style*="emerald"] {
  -webkit-box-shadow: 0 0 0 2px color-mix(in srgb, var(--utility-emerald-600) 12%, transparent);
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--utility-emerald-600) 12%, transparent);
}
.rnly-youtube-link-card__preview {
  border: 1px solid var(--border-primary);
}
.rnly-youtube-link-card__preview iframe {
  display: block;
}
.rnly-youtube-link-card__error {
  line-height: 1.4;
} /* canonical DS component, imported in place (tq-8177) */
/* achievement-card.css: Reinly marketplace component (Reinly.Design OWNS it; reinly.webapp imports this file IN PLACE).
   tq-8177 (R4, one CSS pipeline): the rules are the served app's (src/reinly.webapp @ 09387252, the visual truth;
   isabella 900047450): every Tailwind apply rule expanded to the app's own Tailwind-3 output, plain CSS only (app-imported-plain-css test).
   tq-8242 (R3e): the markup now uses the canonical rnly- names, so the tq-8242 aliases are dropped.
*/

/* ==========================================================================
   REINLY – Achievement Card
   Card component for competition results & awards in the listing wizard.
   ========================================================================== */
.rnly-achievement-card {
  -webkit-transition: opacity 0.2s ease, -webkit-transform 0.2s ease;
  transition: opacity 0.2s ease, -webkit-transform 0.2s ease;
  transition: opacity 0.2s ease, transform 0.2s ease;
  transition: opacity 0.2s ease, transform 0.2s ease, -webkit-transform 0.2s ease;
}

/* Photo upload area: tq-8373 (REINLY-DS U1) the DS uploader (`.uploader.uploader--avatar.uploader--square.uploader--sm`),
   so the slot takes the ONE drop-zone look (.upload-dropzone: dashed edge, emerald drag-over); its former emerald hover
   is that look's hover now. */
.rnly-achievement-card__photo-upload.uploader {
  -ms-flex-item-align: start;
  align-self: flex-start; /* the slot sits at the card's top, as the label it replaces did (not stretched + centred) */
}

/* Select styling to match form-control */
.rnly-achievement-card__position {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%239ca3af' d='M2.5 4.5L6 8l3.5-3.5'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 8px center;
  padding-right: 24px;
}

/* tq-9530 (A279, USER): Result + Date wrap onto two lines when the card is narrow (no fixed 160px date, no squeezed Result),
   so neither value is cut off; Delete is a labelled button at the foot of EACH card; the photo's remove control is shown
   on a touch device (no hover there) and on keyboard focus, not on hover only. */
.rnly-achievement-card__result {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 10rem;
  flex: 1 1 10rem;
  min-width: 0;
}

.rnly-achievement-card__when {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 9rem;
  flex: 1 1 9rem;
  min-width: 8rem;
}

/* Room for the calendar icon on EVERY date field: on a phone flatpickr replaces the input with its own native date input,
   which doesn't carry the original's inline padding, so the icon sat on the date's first letters. */
.rnly-achievement-card__when .rnly-achievement-card__date {
  padding-left: 2rem;
}

/* The labelled Delete keeps the DS touch floor: --control-h-sm is 44px under a coarse pointer (the btn-sm padding alone made it
   30px), 32px on a fine pointer. */
.rnly-achievement-card__delete {
  min-height: var(--control-h-sm);
}

.rnly-achievement-card__foot {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
  margin-top: 0.75rem;
  padding-top: 0.75rem;
  border-top: 1px solid var(--border-primary);
}

.rnly-achievement-card__photo-remove {
  background: color-mix(in oklch, var(--bg-overlay) 40%, transparent);
  color: var(--text-on-brand);
  opacity: 0;
  -webkit-transition: opacity 150ms ease;
  transition: opacity 150ms ease;
}

.rnly-achievement-card__photo:hover .rnly-achievement-card__photo-remove,
.rnly-achievement-card__photo-remove:focus-visible {
  opacity: 1;
}

/* No hover under a finger: a round 36px remove button in the photo's corner, always shown, over the photo (not a scrim over
   all of it). Its target is 44px by expansion (::before, 4px all round), kept INSIDE the photo, whose overflow is clipped. */
@media (hover: none), (pointer: coarse) {
  .rnly-achievement-card__photo .rnly-achievement-card__photo-remove {
    inset: auto;
    top: 4px;
    right: 4px;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: color-mix(in oklch, var(--bg-overlay) 60%, transparent);
    opacity: 1;
  }

  .rnly-achievement-card__photo .rnly-achievement-card__photo-remove::before {
    content: '';
    position: absolute;
    inset: -4px;
  }
}

/* Responsive: stack photo above fields on very small screens */
@media (max-width: 420px) {
.rnly-achievement-card > .flex {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
.rnly-achievement-card__photo-upload,
.rnly-achievement-card__photo {
    width: 100% !important;
    height: 120px !important;
  }
.rnly-achievement-card__photo-upload .uploader__zone {
    width: 100%;
    height: 100%;
  }
} /* canonical DS component, imported in place (tq-8177) */
/* trait-picker.css: Reinly marketplace component (Reinly.Design OWNS it; reinly.webapp imports this file IN PLACE).
   tq-8177 (R4, one CSS pipeline): the rules are the served app's (src/reinly.webapp @ 09387252, the visual truth;
   isabella 900047450): every Tailwind apply rule expanded to the app's own Tailwind-3 output, plain CSS only (app-imported-plain-css test).
   The canonical name is rnly-. tq-8208 (R3a) renamed the app markup and dropped the old-name aliases.
*/

/* ==========================================================================
   REINLY – Trait Picker (autocomplete + ranked pills)
   Used in the personality & traits section of the listing wizard.
   ========================================================================== */

/* ── Trait picker panel ──
   The panel is appended to <body> by JS and positioned with
   position:fixed so it renders above everything without
   needing z-index hacks on parent cards or modal containers. */

.rnly-trait-panel {
  position: fixed;
  display: none;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  max-height: 320px;
  overflow: hidden;
  border-radius: 0.5rem;
  border: 1px solid var(--border-primary);
  background: #fff;
  -webkit-box-shadow: 0 4px 20px rgba(0, 0, 0, 0.12);
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.12);
  z-index: var(--z-popover);
}

/* Dark theme */
[data-theme="theme-dark"] .rnly-trait-panel {
  background: var(--canvas-secondary, #1f1f1f);
  border-color: var(--border-secondary);
}

.rnly-trait-panel.is-visible {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

.rnly-trait-panel__list {
  overflow-y: auto;
  padding: 0;
  margin: 0;
  list-style: none;
  scrollbar-width: thin;
}

.rnly-trait-panel__list li[role="option"] {
  padding: 7px 12px 7px 20px;
  font-size: 0.8125rem;
  color: var(--text-primary);
  cursor: pointer;
  -webkit-transition: background 0.08s ease;
  transition: background 0.08s ease;
}

.rnly-trait-panel__list li[role="option"]:hover,
.rnly-trait-panel__list li.is-highlighted {
  background: var(--bg-primary-subtle, #f5f5f5);
}

/* tq-9531 (A280): the field's wrap is the focus owner of a touch-opened panel (focused from script only, so the keyboard stays
   down); its :focus-within border already shows the state, so it draws no outline of its own. */
.rnly-trait-input:focus {
  outline: none;
}

/* tq-9531 (A280, rule 8 / the DS 44px touch contract): under a finger each option row is at least --control-h-xs (44px on a
   coarse pointer, tq-9138) tall and its text 16px; the search field's text is 16px too, so iOS does not zoom the page when the
   field takes focus. A fine pointer is unchanged. */
@media (pointer: coarse) {
  .rnly-trait-panel__list li[role="option"] {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    min-height: var(--control-h-xs);
    font-size: 1rem;
  }

  .rnly-trait-input__field {
    font-size: 1rem;
  }
}

/* Group header — sticky + emerald */
.rnly-trait-panel__group {
  position: sticky;
  top: 0;
  z-index: 1;
  margin: 0;
  padding: 8px 12px 4px;
  font-size: 0.625rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--utility-emerald-700);
  background: #fff;
  pointer-events: none;
  list-style: none;
  -webkit-box-shadow: 0 1px 0 var(--border-primary-subtle, var(--border-primary));
  box-shadow: 0 1px 0 var(--border-primary-subtle, var(--border-primary));
}

[data-theme="theme-dark"] .rnly-trait-panel__group {
  background: var(--canvas-secondary, #1f1f1f);
}

.rnly-trait-panel__group:not(:first-child) {
  margin-top: 4px;
}

/* ── Tag input container (looks like a form-control with tags inside) ── */
.rnly-trait-input {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  padding: 6px 8px;
  border-radius: var(--radius-input, 0.5rem);
  border: 1px solid var(--border-input, var(--border-primary));
  background-color: var(--bg-input, var(--canvas-primary));
  min-height: max(38px, var(--control-h-xs));   /* tq-9138 (A157): 44 under a finger, 38 on a fine pointer */
  cursor: text;
  -webkit-transition: border-color 0.15s ease;
  transition: border-color 0.15s ease;
}

.rnly-trait-input:focus-within {
  border-color: var(--border-input-active, var(--utility-emerald-600));
}


.rnly-trait-input__tags {
  display: contents;
}

.rnly-trait-input__field {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 80px;
  border: none;
  outline: none;
  -webkit-box-shadow: none;
  box-shadow: none;
  background: transparent;
  font-size: 0.8125rem;
  color: var(--text-primary);
  padding: 2px 0;
}

.rnly-trait-input__field:focus {
  outline: none;
  -webkit-box-shadow: none;
  box-shadow: none;
}

.rnly-trait-input__field::-webkit-input-placeholder {
  color: var(--text-input-placeholder, var(--text-tertiary));
}

.rnly-trait-input__field::-moz-placeholder {
  color: var(--text-input-placeholder, var(--text-tertiary));
}

.rnly-trait-input__field:-ms-input-placeholder {
  color: var(--text-input-placeholder, var(--text-tertiary));
}

.rnly-trait-input__field::-ms-input-placeholder {
  color: var(--text-input-placeholder, var(--text-tertiary));
}

.rnly-trait-input__field::placeholder {
  color: var(--text-input-placeholder, var(--text-tertiary));
}

.rnly-trait-input__field:disabled {
  cursor: default;
}

/* ── Selected trait tags ──
   tq-9531 (A280, SELECT-FIELD v1.1 rule 8e; isabella 900076416): a balanced ranked chip.
   - The rank circle and the remover are the SAME token-sized box (--rnly-trait-tag-mark: one chip line across, from the chip
     tokens), so the chip's inline padding is equal at both ends, measured to the circle and to the remover (the app's tag.css
     twin has no .tag--sm remover rule, which left an 18px remover in a small chip).
   - The rank circle is centred on the text (the chip is an inline-flex row, items centred).
   - The remover's hit area is EXPANDED by the shared hit-slop foundation (components/foundations/hit-slop.css lists
     .tag__dismiss: 24px, 44 under a coarse pointer, plus its no-overlap chip margin), never by growing the chip.
   - Tokens only: no !important (the .tag.rnly-trait-tag selector out-ranks .tag), no literal colours. The tag size tokens
     are theme-independent (base/scale-tokens.css, tq-9583), so they need no fallback here. */
.tag.rnly-trait-tag {
  --rnly-trait-tag-mark: calc(var(--text-tag-sm) + 2 * var(--padding-tag-sm-y));
  gap: var(--padding-tag-sm-y);
  padding-block: var(--padding-tag-sm-y);
  padding-inline: var(--padding-tag-sm-y);
  font-size: var(--text-tag-sm);
  background: var(--canvas-primary);
  border-color: var(--border-primary);
  color: var(--text-primary);
  max-width: none;
  cursor: default;
}

.rnly-trait-tag__rank {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: var(--rnly-trait-tag-mark);
  height: var(--rnly-trait-tag-mark);
  border-radius: 50%;
  background: var(--utility-emerald-700);
  color: var(--text-on-brand);
  font-size: 0.5625rem;
  font-weight: 700;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  line-height: 1;
}

.rnly-trait-tag__label {
  padding-inline: var(--padding-tag-sm-y);
}

.rnly-trait-tag .tag__dismiss {
  width: var(--rnly-trait-tag-mark);
  height: var(--rnly-trait-tag-mark);
  margin: 0;
  border-radius: 50%;
  font-size: 0.625rem;
} /* canonical DS component, imported in place (tq-8177) */
/* ==========================================================================
   RNLY – Google Maps embed + Advanced Marker styles
   ========================================================================== */

/* Base map container */

/* Detail-page variant (slightly shorter, softer radius) */

/* ── Marker enter / leave animations ──
   Pop-in keyframe used when a listing's marker first appears on the
   map (filter change, pan-in, geolocation reframe). Cubic-bezier
   overshoot gives a small bounce. */
@-webkit-keyframes rnlyMarkerPop {
  0%   { -webkit-transform: scale(0.4); transform: scale(0.4); opacity: 0; }
  60%  { -webkit-transform: scale(1.10); transform: scale(1.10); opacity: 1; }
  100% { -webkit-transform: scale(1); transform: scale(1);    opacity: 1; }
}
@keyframes rnlyMarkerPop {
  0%   { -webkit-transform: scale(0.4); transform: scale(0.4); opacity: 0; }
  60%  { -webkit-transform: scale(1.10); transform: scale(1.10); opacity: 1; }
  100% { -webkit-transform: scale(1); transform: scale(1);    opacity: 1; }
}

@-webkit-keyframes rnlyMarkerFade {
  0%   { -webkit-transform: scale(1); transform: scale(1);    opacity: 1; }
  100% { -webkit-transform: scale(0.85); transform: scale(0.85); opacity: 0; }
}

@keyframes rnlyMarkerFade {
  0%   { -webkit-transform: scale(1); transform: scale(1);    opacity: 1; }
  100% { -webkit-transform: scale(0.85); transform: scale(0.85); opacity: 0; }
}

.rnly-marker.rnly-marker--enter {
  -webkit-animation: rnlyMarkerPop .35s cubic-bezier(.34, 1.56, .64, 1) both;
  animation: rnlyMarkerPop .35s cubic-bezier(.34, 1.56, .64, 1) both;
  -webkit-transform-origin: center bottom;
  -ms-transform-origin: center bottom;
  transform-origin: center bottom;
}

.rnly-marker.rnly-marker--leave {
  -webkit-animation: rnlyMarkerFade .18s ease-in both;
  animation: rnlyMarkerFade .18s ease-in both;
  -webkit-transform-origin: center bottom;
  -ms-transform-origin: center bottom;
  transform-origin: center bottom;
  pointer-events: none;
}

/* ── Advanced Marker pill (white Airbnb-style) ── */
.rnly-marker {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  cursor: pointer;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  white-space: nowrap;
  border-radius: 9999px;
  border-width: 1px;
  font-family: inherit;
  font-size: 13px;
  font-weight: 600;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.rnly-marker[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
.rnly-marker {
  padding: 6px 12px;
  background-color: var(--bg-button-light, #fff);
  color: var(--text-primary, #111);
  -webkit-box-shadow: 0 6px 18px rgba(0,0,0,.15);
  box-shadow: 0 6px 18px rgba(0,0,0,.15);
  border-color: var(--border-primary-subtle, rgba(0,0,0,.08));
  -webkit-transform: translateY(-4px);
  -ms-transform: translateY(-4px);
  transform: translateY(-4px);
  -webkit-transition: -webkit-transform .18s ease, -webkit-box-shadow .18s ease;
  transition: -webkit-transform .18s ease, -webkit-box-shadow .18s ease;
  transition: transform .18s ease, box-shadow .18s ease;
  transition: transform .18s ease, box-shadow .18s ease, -webkit-transform .18s ease, -webkit-box-shadow .18s ease;
}

.rnly-marker:hover {
  -webkit-transform: translateY(-6px);
  -ms-transform: translateY(-6px);
  transform: translateY(-6px);
  background-color: var(--utility-emerald-800, #065f46);
  color: #fff;
  border-color: var(--utility-emerald-800, #065f46);
}

.rnly-marker--active,
.rnly-marker--active:hover {
  -webkit-transform: translateY(-6px);
  -ms-transform: translateY(-6px);
  transform: translateY(-6px);
  background-color: var(--utility-emerald-800, #065f46);
  color: #fff;
  border-color: var(--utility-emerald-800, #065f46);
}

/* Card-hover highlight — same dark emerald look as marker hover so the
   visual response feels symmetric whether the user hovers the card or
   the badge. */
.rnly-marker--highlighted {
  z-index: 5;
  -webkit-transform: translateY(-6px);
  -ms-transform: translateY(-6px);
  transform: translateY(-6px);
  background-color: var(--utility-emerald-800, #065f46);
  color: #fff;
  border-color: var(--utility-emerald-800, #065f46);
}

/* Saved-listing badge — small rose heart left of the price label
   so users can scan the map for their wishlisted horses at a
   glance. The heart hides by default and appears once the marker
   gains .is-saved (set by Scripts/buyer/wishlists.js). */
.rnly-marker__heart {
  display: none;
  font-size: 11px;
  margin-right: 6px;
  color: #e11d48;
  line-height: 1;
}
.rnly-marker.is-saved .rnly-marker__heart {
  display: inline-block;
}
/* When the marker is hovered/active/highlighted the pill turns
   emerald and white text — flip the heart to white so it stays
   readable against the dark fill. */
.rnly-marker:hover .rnly-marker__heart,
.rnly-marker--active .rnly-marker__heart,
.rnly-marker--highlighted .rnly-marker__heart {
  color: #fff;
}

/* ── Custom map controls (replaces default Google controls) ──
   Pill / circular buttons. The fullscreen button is a single circle and
   the zoom group is a vertical pill (rounded-full applied to both ends
   via overflow-hidden + border-radius). */
.rnly-map-controls {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  overflow: hidden;
}
.collapse.show.rnly-map-controls {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .rnly-map-controls {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.rnly-map-controls.items-baseline { margin-bottom: 10px; }
html.is-mobile .rnly-map-controls:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .rnly-map-controls.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.rnly-map-controls.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .rnly-map-controls.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .rnly-map-controls.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .rnly-map-controls.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .rnly-map-controls.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .rnly-map-controls.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}
.rnly-map-controls {
  border-radius: 9999px;
  /* Equal top + right offset so the controls sit symmetrically tucked
     into the corner of the map. */
  margin: 12px 12px 0 0;
  -webkit-box-shadow: 0 1px 4px rgba(0,0,0,.12);
  box-shadow: 0 1px 4px rgba(0,0,0,.12);
  background-color: var(--bg-button-light, #fff);
  border: 1px solid var(--border-primary, #e5e7eb);
}

/* When stacked separately, leave a small vertical gap between groups. */
.rnly-map-controls + .rnly-map-controls {
  margin-top: 8px;
}

.rnly-map-controls__btn {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  height: 2.25rem;
  width: 2.25rem;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-style: none;
  padding: 0px;
  font-size: 13px;
  line-height: 1;
  outline: 2px solid transparent;
  outline-offset: 2px;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.rnly-map-controls__btn[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

.rnly-map-controls__btn {
  color: var(--text-primary, #111);
  background-color: var(--bg-button-light, #fff);
  -webkit-transition: background-color .1s ease;
  transition: background-color .1s ease;
}

.rnly-map-controls__btn:hover {
  background-color: var(--bg-button-light-hover, #f9fafb);
}

.rnly-map-controls__btn:active {
  background-color: var(--bg-button-light-active, #f3f4f6);
}

/* Subtle divider between stacked buttons within the same group. */
.rnly-map-controls__btn + .rnly-map-controls__btn {
  border-top: 1px solid var(--border-primary, #e5e7eb);
}

/* Fullscreen-only Filters button — hidden until the map pill toggles
   its `.is-fullscreen` modifier (driven by the fullscreen button click).
   Lives inside the same pill as the fullscreen toggle so the pill just
   grows downward by one cell when filters are revealed. */
.rnly-map-controls__btn--filters {
  display: none;
}

.rnly-map-controls.is-fullscreen .rnly-map-controls__btn--filters {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
}

/* "Search this area" pill — appears at the top-center of the map after
   the user pans or zooms. Clicking it dispatches a custom event so the
   listings filter state can pick up the current bounds. */

/* ── Map popover card (Airbnb-style InfoWindow) ── */
.rnly-map-card {
  width: 340px;
  overflow: hidden;
  /* Always solid white — the card sits over a map and needs to read
     clearly regardless of light/dark theme. */
  background-color: #ffffff;
  color: #111;
  border-radius: 16px;
  -webkit-box-shadow: 0 20px 40px rgba(0,0,0,.18);
  box-shadow: 0 20px 40px rgba(0,0,0,.18);
}

/* Override the listing card's near-square aspect ratio (20/19) with a
   wider, more cinematic 4/3 ratio so the cover photo reads better in
   the popover context. Top corners are rounded to match the card's
   16px outer radius; the bottom is FLAT so the image meets the body
   cleanly with no visible curve between the photo and the meta block. */
.rnly-map-card .card--listing__media {
  aspect-ratio: 4 / 3;
  border-radius: 16px 16px 0 0;
}

.rnly-map-card__media {
  position: relative;
  width: 100%;
  overflow: hidden;
  aspect-ratio: 16 / 10;
  background-color: var(--bg-primary-subtle, #f9fafb);
}

.rnly-map-card__media img {
  height: 100%;
  width: 100%;
  -o-object-fit: cover;
  object-fit: cover;
}

/* Top-right action cluster (favorite + close) over the media area.
   Buttons share a 90% white pill background per design — minimal,
   sits cleanly on top of any cover photo. */
.rnly-map-card__actions {
  position: absolute;
  top: 0.5rem;
  right: 0.5rem;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.rnly-map-card__actions[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
.rnly-map-card__actions {
  gap: 6px;
}

.rnly-map-card__action {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  height: 1.75rem;
  width: 1.75rem;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 9999px;
  border-style: none;
  font-size: 0.8125rem;
  line-height: 1.5rem;
  line-height: 1;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.rnly-map-card__action[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

.rnly-map-card__action {
  background-color: rgba(255, 255, 255, 0.9);
  color: var(--text-primary, #111);
  -webkit-transition: background-color .1s ease;
  transition: background-color .1s ease;
}

.rnly-map-card__action:hover {
  background-color: #fff;
}

.rnly-map-card__action.is-favorited i {
  color: var(--utility-red-500, #ef4444);
}

/* Backwards-compat — old .rnly-map-card__close / __fav classes (still
   referenced by some legacy templates) keep working with the same look. */

/* Body uses the canonical .card--listing__body class from listing-card.css
   so the popover automatically inherits the same typography (title, facts,
   location, price) as the buyer listing cards on the left. */
.rnly-map-card .card--listing__body {
  background-color: #ffffff;
  /* More breathing room than the in-grid card since the popover floats
     in space and needs internal whitespace to read cleanly. */
  padding: 14px 16px 16px 16px;
}

/* Google's InfoWindow injects its own font-family on inner divs which
   stomps on font-weight inheritance. Force the rnly stack and inherit
   weights from the .card--listing__* classes — but exclude <i> elements
   so Font Awesome icons keep their own font-family and render correctly. */
.rnly-map-card,
.rnly-map-card *:not(i):not([class*="fa-"]) {
  font-family: inherit;
}

.rnly-map-card .card--listing__title {
  font-size: 0.95rem;
  font-weight: 500;
  line-height: 1.25;
}

.rnly-map-card .card--listing__facts {
  font-size: 0.8125rem;
  font-weight: 400;
  margin-top: 6px;
  color: var(--text-tertiary, #6b7280);
}

.rnly-map-card .card--listing__location {
  font-size: 0.8125rem;
  font-weight: 400;
  margin-top: 4px;
  color: var(--text-tertiary, #6b7280);
}

.rnly-map-card .card--listing__price {
  font-size: 0.9375rem;
  font-weight: 800;
  color: var(--text-primary, #111);
}

/* ── InfoWindow chrome overrides (strip Google defaults) ── */
/* The card itself has its own white background + shadow + radius. We strip
   Google's internal padding/scroll container so the card fills the popover
   edge-to-edge. Note: do NOT make this transparent — Google's tail (the
   arrow pointing at the marker) inherits this background, and a transparent
   tail looks broken. We give the wrapper the same solid white as the card. */
.gm-style-iw.gm-style-iw-c {
  padding: 0 !important;
  background: #ffffff !important;
  -webkit-box-shadow: 0 20px 40px rgba(0,0,0,.18) !important;
  box-shadow: 0 20px 40px rgba(0,0,0,.18) !important;
  border-radius: 16px !important;
  max-width: none !important;
  overflow: hidden !important;
}

/* Float the entire InfoWindow popover above all other map chrome
   (controls, markers, fullscreen toggle). Google's default z-index sits
   it under floating UI in some layouts. */
.gm-style .gm-style-iw-a {
  z-index: 1000 !important;
}

.gm-style-iw-d {
  overflow: hidden !important;
  max-height: none !important;
  background: #ffffff !important;
}

/* Hide the tail / triangle indicator that Google adds below the popover.
   The popover is positioned via pixelOffset to sit just above the marker,
   so the tail isn't needed and looks visually noisy. */
.gm-style-iw-tc,
.gm-style-iw-tc::after,
.gm-style .gm-style-iw-t::after {
  display: none !important;
}

/* Hide default close button (we use our own) */
.gm-style-iw button.gm-ui-hover-effect {
  display: none !important;
}

/* Hide default close button (we use our own) */
.gm-style-iw button.gm-ui-hover-effect {
  display: none !important;
}

/* ==========================================================================
   RNLY – Address Picker (map-first modal)
   ========================================================================== */

/* ── Search bar overlay (top-center of map) ── */

/* ── Suggestions dropdown ── */

.rnly-addr-picker__suggestion--active {
  background-color: var(--bg-secondary-subtle, #f5f5f5);
}

/* ── Locate (my location) button ── */

/* ── Zoom controls (inside map frame) ── */

/* ── Address summary panel (below map) ── */

/* ── Big black pin marker (draggable) ── */

/* ── Wizard Places Autocomplete dropdown (server-proxy based) ── */
.wizard-places-dropdown {
  overflow-y: auto;
  border-radius: 0.75rem;
  border-width: 1px;
  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  position: fixed;
  z-index: var(--z-dropdown);
  max-height: 280px;
  background-color: var(--bg-dropdown, #fff);
  border-color: var(--border-dropdown, var(--border-primary));
}

/* Hide Google's default pac-container since we use our own dropdown */
.pac-container {
  display: none !important;
}
/* ==========================================================================
   REINLY — Quick filter bar (sticky pill bar above the buyer card grid)
   --------------------------------------------------------------------------
   Canonical Reinly.Design source since tq-8209 (R3b); the app imports it in
   place (tq-8177). PLAIN CSS: the app's Tailwind-3 compile reads this file, so
   no Tailwind directives or functions (R4 guard). Surfaces use the --filter-* tokens
   (theme-light = the served colours, theme-dark = the DS dark surfaces).
   Used by:
     - Views/Shared/_FilterQuickBar.cshtml, Listings/Index, Home/Index
       (`.listings-split__quickbar`, `.qf-*`)
   Companion files:
     - reinly/components/preset.css        (preset row beneath this bar)
     - reinly/components/filter-drawer.css (advanced drawer launched from here)
     - the app's reinly/components/quick-filter-bar.css keeps the price /
       location / combobox filter rules (tq-8306 R3g, tq-8211 R3c)
   ========================================================================== */

/* ── The bar itself ──
   Wraps freely so every filter pill stays visible regardless of viewport
   width. The bar is sticky so it stays glued to the top of the
   scrollable list panel as the user pages through cards. */
/* Sticky header wrapper — encapsulates the toolbar AND the quick filter
   bar so they scroll-pin together as one unit. Default z-index is low
   enough that modals (Bootstrap default ~1050) and the All Filters
   drawer (9500+) paint over it. When a quick-filter popover opens we
   bump the layer to 9100 so the popover can paint above the body-level
   scrim — see the `:has()` rule below. */
.listings-split__header {
  position: sticky;
  top: 0;
  z-index: 30;
  background-color: var(--filter-bar-bg);
}

/* When any quick-filter pill popover is open, lift the entire header
   stacking context above the scrim (9040) so the popover stays
   visible. Modern browsers only — older browsers fall back to z-index
   30 which clips the popover behind the scrim (degraded but functional). */
.listings-split__header:has(.qf-pill-wrap.is-open) {
  z-index: var(--z-surface-raised);
}

.listings-split__quickbar {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
  padding-left: 1.5rem;
  padding-right: 1.5rem;
  gap: 8px;
  padding-top: .75rem;
  padding-bottom: .75rem;
  background-color: var(--filter-bar-bg);
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

/* Inner pills container — wraps independently of the reset button so
   the reset stays pinned to the top-right while filters wrap below it. */
.listings-split__quickbar-pills {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
  -webkit-box-flex: 1;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto;
  min-width: 0;
}

/* Toolbar right-side cluster — Sort, Presets, All filters live here so the
   filter-pill row below stays uncluttered. Wraps if the toolbar gets tight. */
.listings-split__toolbar-actions {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
}

/* ── Pill button ── */
.qf-pill {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.375rem;
  white-space: nowrap;
  border-radius: 9999px;
  padding-left: 0.875rem;
  padding-right: 0.875rem;
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
  font-size: 0.75rem;
  line-height: 1rem;
  font-weight: 500;
  background-color: var(--canvas-primary, #fff);
  color: var(--text-primary, #111);
  border: 1px solid var(--border-primary, #e5e7eb);
  cursor: pointer;
  -webkit-transition: border-color .15s ease, background-color .15s ease, color .15s ease, -webkit-box-shadow .15s ease;
  transition: border-color .15s ease, background-color .15s ease, color .15s ease, -webkit-box-shadow .15s ease;
  transition: border-color .15s ease, background-color .15s ease, color .15s ease, box-shadow .15s ease;
  transition: border-color .15s ease, background-color .15s ease, color .15s ease, box-shadow .15s ease, -webkit-box-shadow .15s ease;
}

.qf-pill:hover {
  border-color: var(--text-primary, #111);
}

.qf-pill[aria-expanded="true"] {
  border-color: var(--utility-emerald-600, #059669);
}

.qf-pill.is-active {
  background-color: var(--bg-accent-solid);
  color: var(--text-on-accent-solid);
  border-color: var(--utility-emerald-600, #059669);
}

.qf-pill.is-active:hover {
  background-color: var(--bg-accent-solid-hover);
  border-color: var(--utility-emerald-700, #047857);
}

.qf-pill__chev {
  font-size: 10px;
  -webkit-transition: -webkit-transform .15s ease;
  transition: -webkit-transform .15s ease;
  transition: transform .15s ease;
  transition: transform .15s ease, -webkit-transform .15s ease;
}

.qf-pill[aria-expanded="true"] .qf-pill__chev {
  -webkit-transform: rotate(180deg);
  -ms-transform: rotate(180deg);
  transform: rotate(180deg);
}

.qf-pill--ghost {
  border-color: transparent;
  background-color: transparent;
}

.qf-pill--ghost:hover {
  background-color: var(--bg-primary-subtle, #f9fafb);
  border-color: var(--border-primary, #e5e7eb);
}

/* "All filters" pill */
.qf-pill--all {
  border-color: var(--border-secondary, #d1d5db);
}

/* Icon-only pill (e.g. the reset button) — locked to a perfect 36×36
   circle that never squishes when siblings wrap or the row gets tight. */
.qf-pill--icon {
  width: 36px;
  height: 36px;
  min-width: 36px;
  min-height: 36px;
  max-width: 36px;
  max-height: 36px;
  padding: 0;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -webkit-box-flex: 0;
  -ms-flex: 0 0 36px;
  flex: 0 0 36px;
  border-radius: 9999px;
  font-size: 13px;
  color: var(--text-secondary, #4b5563);
}

.qf-pill--icon:hover {
  /* Match btn-secondary: only the bg subtly highlights — border + icon
     colour stay put. */
  background-color: var(--bg-button-secondary-hover, rgba(0, 0, 0, .05));
  border-color: var(--border-primary, #e5e7eb);
  color: var(--text-secondary, #4b5563);
}

/* Divider that precedes the reset icon — separates the wrapping
   pills container from the pinned reset button on the right. Pinned
   to the top alongside the reset icon. The geometric center math
   `(36 − 24) ÷ 2 = 6px` looks high because the FA icon's visual
   weight sits below the geometric center, so we nudge the divider
   down slightly to match the icon's optical center. */
.qf-divider--reset {
  -ms-flex-item-align: start;
  align-self: flex-start;
  /* 7px top + 22px height places the divider's center at y=18 within
     the 36px reset icon button (whose geometric center is also y=18). */
  margin-top: 7px;
  height: 22px;
}

.qf-pill__badge {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  font-size: 0.6875rem;
  line-height: 1rem;
  font-weight: 600;
  min-width: 18px;
  height: 18px;
  padding: 0 5px;
  border-radius: 9999px;
  background-color: var(--bg-accent-solid);
  color: var(--text-on-accent-solid);
}

/* Hard-override the [hidden] attribute — the `display: inline-flex` above wins
   over the user-agent rule that hides [hidden] elements, so the badge
   would otherwise stay visible even when JS sets `hidden = true`. */
.qf-pill__badge[hidden] { display: none !important; }

.qf-pill--all.is-active .qf-pill__badge {
  background-color: #ffffff;
  color: var(--utility-emerald-700, #047857);
}

/* ── Wrapper for popover positioning ── */
.qf-pill-wrap {
  position: relative;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

.qf-divider {
  width: 1px;
  height: 24px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  background-color: var(--border-primary, #e5e7eb);
  /* Use longhand horizontal margin so the shorthand doesn't reset
     margin-top set by modifier classes like .qf-divider--reset. */
  margin-left: .25rem;
  margin-right: .25rem;
}

/* ── Popover panel (full-width drop-down over the listings) ──
   Position: fixed. JS sizes it to span the .listings-split__list panel
   and anchors it just below the sticky quick-bar. A scrim covers the
   cards beneath to focus attention on the open filter. */
.qf-popover {
  position: fixed;
  z-index: var(--z-popover);
  /* top / left / width set by quick-bar.js openPopover() */
  top: 0;
  left: 0;
  width: 100%;
  background-color: var(--filter-panel-bg);
  border: 1px solid var(--border-primary, #e5e7eb);
  border-top: none;
  border-radius: 0;
  -webkit-box-shadow: 0 24px 48px rgba(0, 0, 0, 0.18);
  box-shadow: 0 24px 48px rgba(0, 0, 0, 0.18);
  padding: 1.25rem 2rem 1.5rem;
  display: none;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  max-height: 70vh;
  overflow-y: auto;
  -webkit-animation: qfPanelDown .22s cubic-bezier(.16, 1, .3, 1);
  animation: qfPanelDown .22s cubic-bezier(.16, 1, .3, 1);
}

@-webkit-keyframes qfPanelDown {
  from { opacity: 0; -webkit-transform: translateY(-8px); transform: translateY(-8px); }
  to   { opacity: 1; -webkit-transform: translateY(0); transform: translateY(0); }
}

@keyframes qfPanelDown {
  from { opacity: 0; -webkit-transform: translateY(-8px); transform: translateY(-8px); }
  to   { opacity: 1; -webkit-transform: translateY(0); transform: translateY(0); }
}

.qf-pill-wrap.is-open .qf-popover { display: -webkit-box; display: -ms-flexbox; display: flex; }

/* ── Mobile: Presets popover opens as a full-screen tray that
      slides in from the LEFT (mirrors the All-filters drawer
      direction + behaviour). Overrides the inline top / left /
      width that quick-bar.js's positionPanel() writes for
      desktop dropdown placement. Sits on top of every other
      surface (z-index 9700). */
/* (Mobile preset-popover hacks removed. The Presets pill on
   mobile now opens the dedicated `[data-preset-drawer]` instead
   — same `.filter-drawer` markup as All-filters. The qf-popover
   stays as the desktop dropdown only.) */

/* Modifier hooks kept for back-compat — all panels are now full-width
   so these mostly affect inner padding / max width of the content. */
.qf-popover--sm     { padding: 1.25rem 2rem 1.5rem; }
.qf-popover--lg     { padding: 1.5rem 2rem 1.75rem; }
.qf-popover--scroll { max-height: 70vh; }

.qf-popover__title {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary, #111);
  margin-bottom: 1rem;
}

/* Title row variant — title text on the left, secondary control (e.g.
   the height unit toggle) on the right. */
.rnly-popover-title-row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 12px;
}

/* ── Pill-style segmented unit toggle (hh / cm) ── */
.rnly-unit-toggle {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  background-color: var(--bg-primary-subtle, #f3f4f6);
  border-radius: 9999px;
  padding: 3px;
  gap: 2px;
}

.rnly-unit-toggle__btn {
  font-size: 11px;
  font-weight: 600;
  padding: 5px 12px;
  color: var(--text-secondary, #4b5563);
  background: none;
  border: none;
  border-radius: 9999px;
  cursor: pointer;
  text-transform: lowercase;
  -webkit-transition: background-color .12s ease, color .12s ease, -webkit-box-shadow .12s ease;
  transition: background-color .12s ease, color .12s ease, -webkit-box-shadow .12s ease;
  transition: background-color .12s ease, color .12s ease, box-shadow .12s ease;
  transition: background-color .12s ease, color .12s ease, box-shadow .12s ease, -webkit-box-shadow .12s ease;
}

.rnly-unit-toggle__btn:hover:not(.is-active) {
  color: var(--text-primary, #111);
}

.rnly-unit-toggle__btn.is-active {
  background-color: var(--filter-panel-bg);
  color: var(--text-primary, #111);
  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .08);
  box-shadow: 0 1px 3px rgba(0, 0, 0, .08);
}

/* Small Clear / Reset link injected by quick-bar.js into every
   multi/range filter popover. Sits at the bottom-right of the panel,
   hidden until that group has at least one selection. */
.qf-popover__clear {
  -ms-flex-item-align: end;
  align-self: flex-end;
  margin: 14px 0 0 auto;
  padding: 6px 10px;
  font-size: 12px;
  font-weight: 600;
  color: var(--utility-emerald-700, #047857);
  background: none;
  border: none;
  cursor: pointer;
  text-decoration: underline;
}

.qf-popover__clear:hover { opacity: .75; }

.qf-popover__clear[hidden] { display: none !important; }

/* Inline clear button — appears at the end of a chip-group filter
   (e.g. Type). Styled like the reset icon in the quick-bar: ghost
   button with subtle background-only hover. */
.qf-popover__clear-inline {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  padding: 0;
  font-size: 13px;
  color: var(--text-secondary, #4b5563);
  background: none;
  border: 1px solid transparent;
  border-radius: 9999px;
  cursor: pointer;
  -webkit-transition: background-color .12s ease;
  transition: background-color .12s ease;
}

.qf-popover__clear-inline:hover {
  background-color: var(--bg-button-secondary-hover, rgba(0, 0, 0, .05));
}

.qf-popover__clear-inline[hidden] { display: none !important; }

/* Search box inside scrollable popovers (Breed, etc.). Picks up the
   standard .form-control colours / borders / focus state from the
   design system; this rule only handles spacing for popover context. */
.qf-popover__search {
  margin-bottom: 14px;
}

/* Multi-column option list — looks great for breeds/disciplines/countries
   in the wide panel; single-col at narrow widths. */
/* Multi-column layout: items flow alphabetically TOP-TO-BOTTOM in
   column 1, then column 2, then column 3 — i.e. column-major reading
   order. Each column is ~200px wide; the browser auto-fills as many
   columns as the popover width allows. */
.qf-popover__list {
  -webkit-column-width: 200px;
  -moz-column-width: 200px;
  column-width: 200px;
  -webkit-column-gap: 1rem;
  -moz-column-gap: 1rem;
  column-gap: 1rem;
  max-height: 50vh;
  overflow-y: auto;
}

.qf-popover__list > * {
  -moz-column-break-inside: avoid;
  break-inside: avoid;
  -webkit-column-break-inside: avoid;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

.qf-popover__list::-webkit-scrollbar { width: var(--scroll-size-sm); }
.qf-popover__list::-webkit-scrollbar-thumb {
  background: var(--border-secondary, #d1d5db);
  border-radius: 3px;
}

.qf-popover__option {
  padding-left: 1rem;
  padding-right: 1rem;
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
  text-align: left;
  font-size: 0.75rem;
  line-height: 1rem;
  color: var(--text-primary, #111);
  background: none;
  border: none;
  cursor: pointer;
  -webkit-transition: background-color .1s ease;
  transition: background-color .1s ease;
}

.qf-popover__option:hover { background-color: var(--bg-primary-subtle, #f9fafb); }

.qf-popover__option.is-selected {
  background-color: var(--bg-primary-subtle, #f9fafb);
  font-weight: 600;
}

/* ── Checkbox row ── */
.qf-check {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  cursor: pointer;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.625rem;
  padding: 8px 12px;
  font-size: 13px;
  border-radius: 8px;
  color: var(--text-primary, #111);
  -webkit-transition: background-color .1s ease;
  transition: background-color .1s ease;
}

.qf-check:hover {
  background-color: var(--bg-primary-subtle, #f9fafb);
}

/* ── Custom checkbox / radio (no `accent-color`) ──
   We bypass the native control entirely so the green selected state can
   never be overridden by browser / Tailwind defaults. The checkmark and
   radio dot are drawn with a CSS pseudo-element. */
.qf-check input[type="checkbox"],
.qf-check input[type="radio"] {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  width: 16px;
  height: 16px;
  margin: 0;
  border: 1.5px solid var(--border-secondary, #d1d5db);
  border-radius: 4px;
  background-color: var(--filter-control-bg);
  cursor: pointer;
  position: relative;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-transition: background-color .12s ease, border-color .12s ease;
  transition: background-color .12s ease, border-color .12s ease;
}

.qf-check input[type="radio"] {
  border-radius: 50%;
}

.qf-check input[type="checkbox"]:hover,
.qf-check input[type="radio"]:hover {
  border-color: var(--utility-emerald-600, #059669);
}

/* Kill the browser's default blue focus / hover ring on these custom
   checkboxes — the green border is the only visible state we want. */
.qf-check input[type="checkbox"]:focus,
.qf-check input[type="checkbox"]:focus-visible,
.qf-check input[type="radio"]:focus,
.qf-check input[type="radio"]:focus-visible {
  outline: none;
  -webkit-box-shadow: none;
  box-shadow: none;
}

.qf-check input[type="checkbox"]:checked,
.qf-check input[type="radio"]:checked {
  background-color: var(--utility-emerald-600, #059669) !important;
  border-color: var(--utility-emerald-600, #059669) !important;
}

.qf-check input[type="checkbox"]:checked::after {
  content: '';
  position: absolute;
  width: 4px;
  height: 8px;
  border: solid #ffffff;
  border-width: 0 2px 2px 0;
  -webkit-transform: rotate(45deg) translate(-1px, -1px);
  -ms-transform: rotate(45deg) translate(-1px, -1px);
  transform: rotate(45deg) translate(-1px, -1px);
}

.qf-check input[type="radio"]:checked::after {
  content: '';
  position: absolute;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background-color: #ffffff;
}

/* Inline icon prefix for option rows that have one (e.g. listing type) */
.qf-check__icon {
  font-size: 12px;
  color: var(--text-tertiary, #9ca3af);
  width: 14px;
  text-align: center;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

.qf-check:has(input:checked) .qf-check__icon {
  color: var(--utility-emerald-700, #047857);
}

/* Catch-all so every checkbox / radio anywhere inside a filter surface
   uses the green accent — wins over the design-system default. */
.qf-popover input[type="checkbox"],
.qf-popover input[type="radio"],
.filter-drawer input[type="checkbox"],
.filter-drawer input[type="radio"] {
  accent-color: #059669 !important;
}

.qf-check:has(input:checked) {
  background-color: rgba(5, 150, 105, .08);
  color: var(--utility-emerald-700, #047857);
  font-weight: 600;
}

/* ── Chip-pill option group (used by Type filter) ──
   Lays out the ONE .chip (.chip--toggle, utility/chip.css): multi-select
   chips that highlight green when checked, no native checkbox visible. */
.qf-chip-group {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  gap: 8px;
}

@-webkit-keyframes rnlyComboMenuIn {
  from { opacity: 0; -webkit-transform: translateY(-4px); transform: translateY(-4px); }
  to   { opacity: 1; -webkit-transform: translateY(0); transform: translateY(0); }
}

@keyframes rnlyComboMenuIn {
  from { opacity: 0; -webkit-transform: translateY(-4px); transform: translateY(-4px); }
  to   { opacity: 1; -webkit-transform: translateY(0); transform: translateY(0); }
}

/* ── Scrim that covers the listings beneath the open panel ── */
.qf-scrim {
  position: fixed;
  z-index: var(--z-surface-backdrop);
  background-color: rgba(0, 0, 0, 0.18);
  opacity: 0;
  pointer-events: none;
  -webkit-transition: opacity .2s ease;
  transition: opacity .2s ease;
}

.qf-scrim.is-open {
  opacity: 1;
  pointer-events: auto;
}

/* Card hidden by filter */
.card--listing.is-filtered { display: none; }

/* ── Mobile: less padding, smaller pills ── */
@media (max-width: 767px) {
  .listings-split__quickbar {
    gap: 0.375rem;
    padding-left: 1rem;
    padding-right: 1rem;
  }
  .qf-pill {
    padding-left: 0.75rem;
    padding-right: 0.75rem;
    padding-top: 0.375rem;
    padding-bottom: 0.375rem;
  }
} /* canonical DS component, imported in place (tq-8209) */
/* ==========================================================================
   Component: Price filter  (tq-8306 REINLY-DS R3g; DS owner isabella)
   Reinly.Design source, imported IN PLACE by reinly.webapp (R4, tq-8177), so this file is PLAIN CSS: no Tailwind
   directives (Reinly.Design/tests/app-imported-plain-css.test.mjs guards it). Moved verbatim from the app's
   components/search-filters.css (the served look); the slider is the ONE .range / .range-field (R3a,
   tq-8208): .rnly-price-filter is a modifier on .range-field and never re-styles the slider. Tier pills are the ONE
   .chip (.chip--toggle). Behaviour: the app's Scripts/listings/modules/price-filter.js (+ home/search-filters.js).
   Docs: design-system/marketplace/price-filter.md, /Design/Page/price-filter.
   ========================================================================== */

/* When the Clear icon lives inside the price inputs row, scale it up
   to match the taller .form-control inputs alongside it. */
.rnly-price-filter__inputs .qf-popover__clear-inline {
  width: 50px;
  height: 50px;
  font-size: 14px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

/* Price tier pills (Fours / Fives / … / Custom) — tighter sizing
   than the standard `.chip`. Matches the home hero price filter
   exactly so the same pill UI shows up consistently across the
   quick-bar Price popover, the All Filters drawer Price section,
   and the homepage hero. */
.rnly-price-tiers .chip {
  padding: 6px 12px;
  font-size: 11px;
  font-weight: 500;
}

/* ── Price filter (large currency inputs + tier select) ── */
.rnly-price-filter {
  gap: 1.25rem;
}

.rnly-price-filter__title {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: baseline;
  -ms-flex-align: baseline;
  align-items: baseline;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
}

.rnly-price-filter__tier-label {
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: .04em;
  color: var(--utility-emerald-700, #047857);
}

.rnly-price-filter__inputs {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 10px;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
}

.rnly-price-filter__sep {
  color: var(--text-tertiary, #9ca3af);
  font-size: 18px;
  padding: 0 2px;
}

.rnly-price-input {
  position: relative;
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0px;
  flex: 1 1 0;
  min-width: 130px;
}

.rnly-price-input__currency {
  position: absolute;
  left: 14px;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
  font-size: 18px;
  font-weight: 500;
  color: var(--text-tertiary, #9ca3af);
  pointer-events: none;
  z-index: 1;
}

/* Larger price input — uses .form-control as the base (border, bg, focus
   come from the design system). We only override font-size + padding to
   match the wizard's pricing input feel. */
.rnly-price-input__field {
  font-size: 18px !important;
  --ctl-fs: 18px !important;   /* tq-9107 (A147): declared, so the coarse-pointer font floor's max() keeps this size */
  font-weight: 500 !important;
  padding-left: 32px !important;
  padding-top: 12px !important;
  padding-bottom: 12px !important;
  min-height: 50px;
}

.rnly-price-input__field:focus {
  border-color: var(--utility-emerald-600, #059669) !important;
}

/* tq-8413 (P1): the inline message under the inputs when the typed minimum is above the maximum (role="alert", created
   by modules/price-bands.js setPriceRangeError; the inverted range is never sent). */
.rnly-price-filter__error {
  margin: 0;
  font-size: 12px;
  line-height: 1.4;
  color: var(--text-danger-strong);
}

.rnly-price-filter__error[hidden] { display: none; } /* canonical DS component, imported in place (tq-8306 R3g) */
/* ==========================================================================
   Component: Location filter  (tq-8306 REINLY-DS R3g; DS owner isabella)
   Reinly.Design source, imported IN PLACE by reinly.webapp (R4, tq-8177), so this file is PLAIN CSS: no Tailwind
   directives (Reinly.Design/tests/app-imported-plain-css.test.mjs guards it). Moved verbatim from the app's
   components/search-filters.css (the served look); dark fixed: the radius options and the
   predictions menu were hard-coded #ffffff (light panels in dark); they now use the --filter-* tokens, whose light
   values are that same #ffffff. Behaviour: the app's Scripts/listings/modules/location-filter.js (Google Places).
   Docs: design-system/marketplace/location-filter.md, /Design/Page/location-filter.
   ========================================================================== */

/* ══════════════════════════════════════════════════════════════════
   LOCATION FILTER (address autocomplete + radius selector)
   ══════════════════════════════════════════════════════════════════ */
.rnly-location-filter {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 1.25rem;
}

/* ── Address input with leading icon + clear button ── */
.rnly-location-input {
  position: relative;
}

.rnly-location-input__icon {
  position: absolute;
  left: 14px;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
  color: var(--text-tertiary, #9ca3af);
  font-size: 14px;
  pointer-events: none;
  z-index: 1;
}

.rnly-location-input__field {
  font-size: 16px !important;
  font-weight: 500 !important;
  padding-left: 38px !important;
  padding-top: 12px !important;
  padding-bottom: 12px !important;
  padding-right: 36px !important;
  min-height: 50px;
}

.rnly-location-input__field:focus {
  border-color: var(--utility-emerald-600, #059669) !important;
}

.rnly-location-input__clear {
  position: absolute;
  right: 10px;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
  width: 26px;
  height: 26px;
  border-radius: 9999px;
  background: var(--bg-primary-subtle, #f3f4f6);
  border: none;
  cursor: pointer;
  color: var(--text-secondary, #4b5563);
  font-size: 11px;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -webkit-transition: background-color .12s ease;
  transition: background-color .12s ease;
}

.rnly-location-input__clear:hover {
  background: var(--border-secondary, #d1d5db);
}

.rnly-location-input__clear[hidden] { display: none !important; }

/* Predictions menu (Google Places autocomplete).
   JS portals this element to <body> on init and positions it via
   `position: fixed` + top/left/width from the input rect — that's why
   the rule below uses `position: fixed` (the element is no longer a
   child of .rnly-location-input). */
.rnly-location-input__menu {
  position: fixed;
  /* tq-8306: was #ffffff, a light panel in dark; --filter-panel-bg is #ffffff in light (unchanged), the DS modal
     surface in dark (the quick-filter popovers' token, R3b). */
  background-color: var(--filter-panel-bg);
  border: 1px solid var(--border-primary, #e5e7eb);
  border-radius: 12px;
  -webkit-box-shadow: 0 12px 32px rgba(0, 0, 0, .14);
  box-shadow: 0 12px 32px rgba(0, 0, 0, .14);
  padding: 6px;
  z-index: var(--z-popover);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  max-height: 320px;
  overflow-y: auto;
}

.rnly-location-input__menu[hidden] { display: none !important; }

.rnly-location-input__opt {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
  gap: 10px;
  padding: 9px 12px;
  border: none;
  background: none;
  border-radius: 8px;
  cursor: pointer;
  text-align: left;
  color: var(--text-primary, #111);
  -webkit-transition: background-color .1s ease;
  transition: background-color .1s ease;
}

.rnly-location-input__opt > i {
  color: var(--text-tertiary, #9ca3af);
  font-size: 12px;
  margin-top: 4px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

.rnly-location-input__opt-text {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  min-width: 0;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
}

.rnly-location-input__opt-main {
  font-size: 13px;
  font-weight: 500;
  color: var(--text-primary, #111);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.rnly-location-input__opt-sub {
  font-size: 11px;
  color: var(--text-tertiary, #9ca3af);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.rnly-location-input__opt:hover,
.rnly-location-input__opt.is-highlighted {
  background-color: var(--bg-primary-subtle, #f9fafb);
}

/* ── Radius selector ── */
.rnly-location-radius {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 8px;
}

.rnly-location-radius__label {
  font-size: 11px;
  font-weight: 500;
  color: var(--text-tertiary, #9ca3af);
}

.rnly-radius-options {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  gap: 8px;
}

.rnly-radius-option {
  font-size: 13px;
  font-weight: 500;
  padding: 9px 16px;
  border-radius: 9999px;
  /* tq-8306: was #ffffff, so the radius options rendered light in dark; --filter-control-bg is #ffffff in light
     (unchanged) and --bg-primary in dark (the quick-filter controls' token, R3b). */
  background-color: var(--filter-control-bg);
  color: var(--text-primary, #111);
  border: 1px solid var(--border-primary, #e5e7eb);
  cursor: pointer;
  -webkit-transition: all .12s ease;
  transition: all .12s ease;
}

.rnly-radius-option:hover {
  border-color: var(--utility-emerald-600, #059669);
}

.rnly-radius-option.is-selected {
  background-color: var(--bg-accent-solid);
  border-color: var(--utility-emerald-600, #059669);
  color: var(--text-on-accent-solid);
}

/* Custom radius input row */
.rnly-radius-custom {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 6px;
  margin-top: 6px;
}

.rnly-radius-custom__label {
  font-size: 11px;
  font-weight: 500;
  color: var(--text-tertiary, #9ca3af);
}

.rnly-radius-custom__field {
  position: relative;
}

.rnly-radius-custom__field .form-control {
  padding-right: 48px !important;
  font-size: 14px;
}

.rnly-radius-custom__field .form-control:focus {
  border-color: var(--utility-emerald-600, #059669) !important;
}

.rnly-radius-custom__unit {
  position: absolute;
  right: 14px;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
  font-size: 12px;
  font-weight: 600;
  color: var(--text-tertiary, #9ca3af);
  pointer-events: none;
  text-transform: lowercase;
}

.rnly-radius-custom__unit[hidden] { display: none !important; } /* canonical DS component, imported in place (tq-8306 R3g) */
/* preset.css: Reinly marketplace component (Reinly.Design OWNS it; reinly.webapp imports this file IN PLACE).
   tq-8177 (R4, one CSS pipeline): the rules are the served app's (src/reinly.webapp @ 09387252, the visual truth;
   isabella 900047450): every Tailwind apply rule expanded to the app's own Tailwind-3 output, plain CSS only (app-imported-plain-css test).
   The canonical name is rnly-; the app's old class names are kept as grouped aliases until tq-8209 renames the markup.
*/

/* ==========================================================================
   REINLY — Preset cards (live inside the Presets drop-down panel)
   --------------------------------------------------------------------------
   The horizontal preset chip row was removed in favour of a dedicated
   Presets pill in the quick-filter bar that opens a panel with two
   sections (smart presets + my custom presets) and an inline save form.
   ========================================================================== */

/* ── Section title (Smart presets / My presets) ── */
.rnly-preset-section-title {
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: .05em;
  color: var(--text-tertiary, #9ca3af);
  margin-top: 18px;
  margin-bottom: 10px;
}

.rnly-preset-section-title:first-child { margin-top: 0; }

/* ── Grid of preset cards ── */
.rnly-preset-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 10px;
}

/* Mobile: single-column list inside the drawer. Each preset
   card spans the full row, taller, easier touch target. */
html.is-mobile .filter-drawer--presets .rnly-preset-grid {
  grid-template-columns: 1fr;
  gap: 10px;
}

/* ── Single preset card ── */
.rnly-preset {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 12px;
  padding: 12px 14px;
  text-align: left;
  background-color: var(--filter-control-bg);
  color: var(--text-primary, #111);
  border: 1px solid var(--border-primary, #e5e7eb);
  border-radius: 14px;
  cursor: pointer;
  -webkit-transition: border-color .15s ease, background-color .15s ease, -webkit-transform .15s ease, -webkit-box-shadow .15s ease;
  transition: border-color .15s ease, background-color .15s ease, -webkit-transform .15s ease, -webkit-box-shadow .15s ease;
  transition: border-color .15s ease, transform .15s ease, box-shadow .15s ease, background-color .15s ease;
  transition: border-color .15s ease, transform .15s ease, box-shadow .15s ease, background-color .15s ease, -webkit-transform .15s ease, -webkit-box-shadow .15s ease;
  font: inherit;
}

.rnly-preset:hover {
  border-color: var(--utility-emerald-600, #059669);
  -webkit-transform: translateY(-1px);
  -ms-transform: translateY(-1px);
  transform: translateY(-1px);
  -webkit-box-shadow: 0 4px 12px rgba(0, 0, 0, .06);
  box-shadow: 0 4px 12px rgba(0, 0, 0, .06);
}

/* tq-9159 (A163, isabella 900068642; A154's row pattern): a card with a DELETE is a <div class="rnly-preset"> whose PRIMARY
   control is a .btn-bare button around the label, stretched over the card (::after), and whose delete is a SIBLING above it
   in z-order (with the shared hit-slop, foundations/hit-slop.css), never a button inside a button. Same look: the card rules
   above apply to the <div>; hover is the card's; the keyboard focus ring is drawn on the stretched box. A card without a delete
   stays a plain <button class="rnly-preset"> (preset-panel.js's built-in presets). */
.rnly-preset:has(.rnly-preset__hit) {
  position: relative;
}
.rnly-preset__hit {
  display: block;   /* a block box, so the label's line sits exactly as it does in a plain card (no inline-block baseline gap) */
  text-align: start;
}
.rnly-preset__hit::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
}
.rnly-preset__hit:focus-visible {
  outline: none;
}
.rnly-preset__hit:focus-visible::after {
  outline: 2px solid var(--focus-ring);
  outline-offset: 2px;
  border-radius: 14px;
}
.rnly-preset:has(.rnly-preset__hit) .rnly-preset__remove {
  position: relative;
  z-index: 1;
}

.rnly-preset.is-active {
  background-color: var(--bg-accent-solid);
  color: var(--text-on-accent-solid);
  border-color: var(--utility-emerald-600, #059669);
  -webkit-box-shadow: 0 4px 14px rgba(5, 150, 105, .28);
  box-shadow: 0 4px 14px rgba(5, 150, 105, .28);
}

.rnly-preset.is-active:hover {
  background-color: var(--bg-accent-solid-hover);
  border-color: var(--utility-emerald-700, #047857);
}

.rnly-preset__icon {
  font-size: 22px;
  line-height: 1;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

.rnly-preset__body {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto;
  min-width: 0;
}

.rnly-preset__label {
  display: block;
  font-size: 13px;
  font-weight: 600;
  color: inherit;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* Delete button on custom preset cards */
.rnly-preset__remove {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background-color: rgba(0, 0, 0, .06);
  color: var(--text-secondary, #4b5563);
  border: none;
  cursor: pointer;
  font-size: 10px;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -webkit-transition: background-color .12s ease, color .12s ease;
  transition: background-color .12s ease, color .12s ease;
}

.rnly-preset.is-active .rnly-preset__remove {
  background-color: rgba(255, 255, 255, .25);
  color: #ffffff;
}

.rnly-preset__remove:hover {
  background-color: rgba(0, 0, 0, .14);
}

.rnly-preset.is-active .rnly-preset__remove:hover {
  background-color: rgba(255, 255, 255, .4);
}

/* ── Empty / CTA copy ── */
.rnly-preset-empty {
  font-size: 12px;
  color: var(--text-tertiary, #9ca3af);
  font-style: italic;
  padding: 6px 0;
}

.rnly-preset-empty--cta {
  text-align: center;
  padding: 14px 0 4px;
}

/* ── Save current filters form ── */
.rnly-preset-save {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  gap: 8px;
  margin-top: 18px;
  padding: 12px;
  border: 1px dashed var(--border-secondary, #d1d5db);
  border-radius: 12px;
  background-color: var(--bg-primary-subtle, #f9fafb);
}

.rnly-preset-save input {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto;
  min-width: 0;
  font-size: 13px;
  padding: 9px 12px;
  border: 1px solid var(--border-primary, #e5e7eb);
  border-radius: 9px;
  background-color: var(--filter-control-bg);
}

.rnly-preset-save input:focus {
  outline: none;
  border-color: var(--utility-emerald-600, #059669);
}

.rnly-preset-save button {
  font-size: 13px;
  font-weight: 600;
  padding: 9px 18px;
  background-color: var(--bg-accent-solid);
  color: var(--text-on-accent-solid);
  border: none;
  border-radius: 9px;
  cursor: pointer;
  -webkit-transition: background-color .12s ease;
  transition: background-color .12s ease;
}

.rnly-preset-save button:hover:not(:disabled) {
  background-color: var(--bg-accent-solid-hover);
}

.rnly-preset-save button:disabled {
  opacity: .4;
  cursor: not-allowed;
} /* canonical DS component, imported in place (tq-8177) */
/* ==========================================================================
   Component: Range Slider           .range / .range__*   +   .range-field / .range-field__*
   Reinly.Design OWNS it; reinly.webapp imports this file IN PLACE (tq-8177 R4 pipeline).

   tq-8208 (R3a; isabella 900048923 / 900049215): the ONE range slider. The NATIVE implementation the served Reinly app
   uses (@ 09387252, was .rnly-range) is the canonical .range, with its live look; the old div-thumb implementation and
   its driver are retired (no parallel variant). Generic DS names are kept (isabella: generic primitives keep generic
   names). PLAIN CSS + var() tokens only (app-imported-plain-css test).

   Anatomy
     .range-field                      the composition: an optional Min / Max input pair, the slider, the bounds row
       .range-field__inputs              the input pair row
         label.range-field__block          one field
           .range-field__label               its caption ("Min" / "Max")
           input.form-control.range-field__input   the typed value
       .range                            the slider (track container)
         .range__track                     the rail
         .range__fill                      the selected span (its left / width are set by the owning script)
         input[type=range].range__thumb    one native thumb per handle; two stacked inputs make a dual slider
       .range-field__bounds              the slider's current min / max captions under the rail

   Native inputs bring keyboard, step and screen-reader value semantics; give each thumb an accessible name
   ("Minimum price" / "Maximum price"). The script (data-range-* hooks) keeps the fill, the thumbs and the typed inputs
   in sync; the min thumb sits above the max thumb so both stay grabbable when they meet.
   ========================================================================== */

/* --- the composition --------------------------------------------------------- */
.range-field {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 1rem;
  min-width: 260px;
}

.range-field__inputs {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: stretch;
  -ms-flex-align: stretch;
  align-items: stretch;
  gap: 0.75rem;
}

.range-field__block {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0%;
  flex: 1 1 0%;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 0.25rem;
}

.range-field__label {
  font-size: 11px;
  font-weight: 500;
  color: var(--text-tertiary, #9ca3af);
}

.range-field__block .form-control {
  font-size: 14px;
}

.range-field__block .form-control:focus {
  border-color: var(--utility-emerald-600, #059669) !important;
}

/* Larger, centred typed value (Age / Height / Price). */
.range-field__input {
  font-size: 18px !important;
  --ctl-fs: 18px !important;   /* tq-9107 (A147): declared, so the coarse-pointer font floor's max() keeps this size */
  font-weight: 500 !important;
  text-align: center !important;
  padding-top: 12px !important;
  padding-bottom: 12px !important;
  min-height: 50px;
}

.range-field__input::-webkit-input-placeholder {
  font-weight: 400;
}

.range-field__input::-moz-placeholder {
  font-weight: 400;
}

.range-field__input:-ms-input-placeholder {
  font-weight: 400;
}

.range-field__input::-ms-input-placeholder {
  font-weight: 400;
}

.range-field__input::placeholder {
  font-weight: 400;
}

/* The slider's effective draggable range, under the rail. */
.range-field__bounds {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  margin-top: 2px;
  font-size: 11px;
  font-weight: 500;
  color: var(--text-tertiary, #64748b);
  letter-spacing: 0.02em;
}

/* --- the slider -------------------------------------------------------------- */
.range {
  --bg-range-track: var(--border-primary, #e5e7eb);
  --bg-range-fill: var(--utility-emerald-600, #059669);
  --bg-range-thumb: var(--canvas-primary, #fff);
  --border-range-thumb: var(--border-secondary, #d1d5db);
  --shadow-range-thumb: 0 2px 6px rgba(0, 0, 0, .18);
  --shadow-range-thumb-hover: 0 4px 12px rgba(0, 0, 0, .22);

  position: relative;
  width: 100%;
  height: 28px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}

.range__track {
  position: absolute;
  left: 0px;
  right: 0px;
  height: 4px;
  background-color: var(--bg-range-track);
  border-radius: 9999px;
  pointer-events: none;
}

.range__fill {
  position: absolute;
  height: 4px;
  background-color: var(--bg-range-fill);
  border-radius: 9999px;
  pointer-events: none;
}

/* Native range inputs: stacked, transparent, only the thumb takes pointer events. */
.range__thumb {
  position: absolute;
  left: 0px;
  right: 0px;
  width: 100%;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  background: none;
  height: 28px;
  pointer-events: none;
}

.range__thumb::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: var(--bg-range-thumb);
  border: 1px solid var(--border-range-thumb);
  -webkit-box-shadow: var(--shadow-range-thumb);
  box-shadow: var(--shadow-range-thumb);
  pointer-events: auto;
  cursor: pointer;
  -webkit-transition: -webkit-transform .12s ease, -webkit-box-shadow .12s ease;
  transition: -webkit-transform .12s ease, -webkit-box-shadow .12s ease;
  transition: transform .12s ease, box-shadow .12s ease;
  transition: transform .12s ease, box-shadow .12s ease, -webkit-transform .12s ease, -webkit-box-shadow .12s ease;
}

.range__thumb::-webkit-slider-thumb:hover {
  -webkit-transform: scale(1.08);
  transform: scale(1.08);
  -webkit-box-shadow: var(--shadow-range-thumb-hover);
  box-shadow: var(--shadow-range-thumb-hover);
}

.range__thumb::-moz-range-thumb {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: var(--bg-range-thumb);
  border: 1px solid var(--border-range-thumb);
  box-shadow: var(--shadow-range-thumb);
  pointer-events: auto;
  cursor: pointer;
}

.range__thumb::-webkit-slider-runnable-track {
  background: transparent;
}

.range__thumb::-moz-range-track {
  background: transparent;
}

/* Touch: keep the 22px look but a 44px hit area (HIG) and 32px thumbs. */
@media (hover: none), (pointer: coarse) {
  .range__thumb { height: 44px; }
  .range__thumb::-webkit-slider-thumb { width: 32px; height: 32px; }
  .range__thumb::-moz-range-thumb { width: 32px; height: 32px; }
}

html.is-mobile .range__thumb { height: 44px; }
html.is-mobile .range__thumb::-webkit-slider-thumb { width: 32px; height: 32px; }
html.is-mobile .range__thumb::-moz-range-thumb { width: 32px; height: 32px; }

/* The min thumb above the max thumb, so both stay grabbable when they meet. */
.range__thumb[data-range-thumb-max] { z-index: 2; }
.range__thumb[data-range-thumb-min] { z-index: 3; } /* canonical DS range slider, imported in place (tq-8208) */
/* ==========================================================================
   REINLY — Advanced filter drawer (left slide-in)
   --------------------------------------------------------------------------
   Triggered by `[data-drawer-open]` and closed via `[data-drawer-close]` or
   the backdrop. Layout:
     header  (sticky)
     body    (scroll, accordion sections)
     footer  (sticky, Reset + Show N horses)
   Canonical Reinly.Design source since tq-8209 (R3b); the app imports it in
   place (tq-8177). PLAIN CSS (R4 guard). Surfaces use the --filter-* tokens:
   light = the served colours, dark = the DS dark surfaces (fixes the served
   light panel under near-white labels, isabella 900047451).
   ========================================================================== */

/* ── Backdrop ──
   Sits above the sticky quick-bar header (z-index 9100) so the
   listing area AND the filter row get dimmed when the drawer opens. */
.filter-drawer-backdrop {
  position: fixed;
  inset: 0;
  background-color: rgba(0, 0, 0, 0.32);
  z-index: var(--z-surface-backdrop);
  opacity: 0;
  -webkit-transition: opacity .25s ease;
  transition: opacity .25s ease;
  pointer-events: none;
}

.filter-drawer-backdrop[hidden] { display: none !important; }

.filter-drawer-backdrop.is-open {
  opacity: 1;
  pointer-events: auto;
}

/* ── Drawer panel ──
   z-index sits above the backdrop unambiguously. background-color is
   declared without a CSS-var fallback so it renders solid white even if
   the design-token CSS hasn't loaded yet. */
.filter-drawer {
  position: fixed;
  top: 0;
  left: 0;
  bottom: 0;
  width: min(440px, 92vw);
  background-color: var(--filter-panel-bg);
  color: var(--filter-panel-fg);
  z-index: var(--z-surface);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-shadow: 8px 0 32px rgba(0, 0, 0, 0.18);
  box-shadow: 8px 0 32px rgba(0, 0, 0, 0.18);
  -webkit-transform: translateX(-100%);
  -ms-transform: translateX(-100%);
  transform: translateX(-100%);
  -webkit-transition: -webkit-transform .28s cubic-bezier(.16, 1, .3, 1);
  transition: -webkit-transform .28s cubic-bezier(.16, 1, .3, 1);
  transition: transform .28s cubic-bezier(.16, 1, .3, 1);
  transition: transform .28s cubic-bezier(.16, 1, .3, 1), -webkit-transform .28s cubic-bezier(.16, 1, .3, 1);
}

/* Tablet drawer width — see the (min-width: 640px) block in the
   mobile section below. Kept here as a reminder; the actual rule
   lives below the html.is-mobile baseline so it overrides the
   100% phone width without specificity gymnastics. */

.filter-drawer[hidden] { display: none !important; }

.filter-drawer.is-open {
  -webkit-transform: translateX(0);
  -ms-transform: translateX(0);
  transform: translateX(0);
}

/* ── Sticky header ── */
.filter-drawer__header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  padding-left: 1.25rem;
  padding-right: 1.25rem;
  padding-top: 1rem;
  padding-bottom: 1rem;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

.filter-drawer__title {
  font-size: 1rem;
  line-height: 1.5rem;
  font-weight: 600;
  color: var(--text-primary, #111);
}

/* Header right-side cluster — holds the conditional Clear all
   pill and the close button side-by-side. */
.filter-drawer__header-actions {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
}

/* Conditional Clear all — only rendered when filter-state
   reports activeCount() > 0; advanced-drawer.js toggles the
   `hidden` attribute. Subtle text-style pill so the close icon
   stays the primary affordance. */
.filter-drawer__header-clear {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  padding: 8px 14px;
  height: 36px;
  border-radius: 9999px;
  background: var(--bg-primary-subtle, #f5f5f4);
  color: var(--text-primary, #18181b);
  border: 1px solid var(--border-primary, #e5e7eb);
  font-size: 13px;
  font-weight: 500;
  cursor: pointer;
  -webkit-transition: background-color .12s ease, border-color .12s ease;
  transition: background-color .12s ease, border-color .12s ease;
  white-space: nowrap;
}
.filter-drawer__header-clear:hover {
  background-color: var(--filter-hover-bg);
}
.filter-drawer__header-clear[hidden] {
  display: none !important;
}

.filter-drawer__close {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  border-radius: 9999px;
  background: none;
  border: 1px solid transparent;
  color: var(--text-primary, #111);
  cursor: pointer;
  font-size: 18px;
  -webkit-transition: background-color .12s ease, border-color .12s ease;
  transition: background-color .12s ease, border-color .12s ease;
}

.filter-drawer__close:hover {
  background-color: var(--bg-primary-subtle, #f9fafb);
  border-color: var(--border-primary, #e5e7eb);
}

.filter-drawer__reset {
  font-size: 0.75rem;
  line-height: 1rem;
  font-weight: 500;
  text-decoration-line: underline;
  color: var(--text-primary, #111);
  background: none;
  border: none;
  cursor: pointer;
}

.filter-drawer__reset:hover { opacity: .7; }

/* ── Scrollable body ── */
.filter-drawer__body {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0%;
  flex: 1 1 0%;
  overflow-y: auto;
  padding-left: 1.25rem;
  padding-right: 1.25rem;
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
  min-height: 0;
}

/* ── Section accordion ── */
.fd-section {
  padding-top: 1rem;
  padding-bottom: 1rem;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

.fd-section:last-child { border-bottom: none; }

.fd-section__head {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  padding-top: 0.25rem;
  padding-bottom: 0.25rem;
  font-size: 0.8125rem;
  line-height: 1.5rem;
  font-weight: 600;
  color: var(--text-primary, #111);
  background: none;
  border: none;
  cursor: pointer;
  text-align: left;
}

.fd-section__chev {
  font-size: 12px;
  -webkit-transition: -webkit-transform .15s ease;
  transition: -webkit-transform .15s ease;
  transition: transform .15s ease;
  transition: transform .15s ease, -webkit-transform .15s ease;
}

.fd-section.is-open .fd-section__chev {
  -webkit-transform: rotate(180deg);
  -ms-transform: rotate(180deg);
  transform: rotate(180deg);
}

.fd-section__body {
  margin-top: 0.75rem;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 1rem;
  display: none;
}

.fd-section.is-open .fd-section__body {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

/* ── Field within a section ── */
.fd-field {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 0.5rem;
}

.fd-field__label {
  font-size: 0.6875rem;
  line-height: 1rem;
  font-weight: 400;
  color: var(--text-tertiary, #9ca3af);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
}

/* Per-field count badge — green pill with embedded ✕ to clear that
   single filter without affecting any others. Padding is equal on
   top/right/bottom so the ✕ button sits flush against the right edge
   with the same breathing room as the top/bottom. */
.fd-field__badge {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  margin-left: 14px;
  padding: 3px 3px 3px 10px;
  border-radius: 9999px;
  background-color: var(--bg-accent-solid);
  color: var(--text-on-accent-solid);
  font-size: 11px;
  font-weight: 600;
  line-height: 1;
}

/* Inside the collapsible section header the badge needs even more
   breathing room from the title and a gap before the chevron. */
.fd-section__head .fd-field__badge {
  margin-left: 16px;
  margin-right: 8px;
}

.fd-field__badge[hidden] { display: none !important; }

.fd-field__badge-x {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 16px;
  height: 16px;
  padding: 0;
  border: none;
  border-radius: 9999px;
  background-color: rgba(255, 255, 255, 0.22);
  color: #ffffff;
  font-size: 9px;
  cursor: pointer;
  -webkit-transition: background-color .12s ease;
  transition: background-color .12s ease;
}

.fd-field__badge-x:hover {
  background-color: rgba(255, 255, 255, 0.45);
}

/* ── Multi-select chip group ── */
.fd-chip-group {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  gap: 0.5rem;
}

/* The drawer's chips: the ONE .chip (utility/chip.css) at the drawer's
   compact size, on the canvas surface. */
.fd-chip-group .chip {
  --chip-pad-y: 0.5rem;
  --chip-pad-x: 0.875rem;
  --chip-font: 0.75rem;
  line-height: 1rem;
  background-color: var(--canvas-primary);
  -webkit-transition: all .12s ease;
  transition: all .12s ease;
}

/* ── Toggle row (boolean filter) ── */
.fd-toggle {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.75rem;
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
  font-size: 0.8125rem;
  line-height: 1.5rem;
  color: var(--text-primary, #111);
}

/* Custom checkbox — bypasses browser accent-color so the green
   selected state always wins (matches .qf-check styling). */
.fd-toggle input[type="checkbox"] {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  width: 18px;
  height: 18px;
  margin: 0;
  border: 1.5px solid var(--border-secondary, #d1d5db);
  border-radius: 5px;
  background-color: var(--filter-control-bg);
  cursor: pointer;
  position: relative;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-transition: background-color .12s ease, border-color .12s ease;
  transition: background-color .12s ease, border-color .12s ease;
}

.fd-toggle input[type="checkbox"]:hover {
  border-color: var(--utility-emerald-600, #059669);
}

.fd-toggle input[type="checkbox"]:focus,
.fd-toggle input[type="checkbox"]:focus-visible {
  outline: none;
  -webkit-box-shadow: none;
  box-shadow: none;
}

.fd-toggle input[type="checkbox"]:checked {
  background-color: var(--utility-emerald-600, #059669) !important;
  border-color: var(--utility-emerald-600, #059669) !important;
}

.fd-toggle input[type="checkbox"]:checked::after {
  content: '';
  position: absolute;
  width: 5px;
  height: 9px;
  border: solid #ffffff;
  border-width: 0 2px 2px 0;
  -webkit-transform: rotate(45deg) translate(-1px, -1px);
  -ms-transform: rotate(45deg) translate(-1px, -1px);
  transform: rotate(45deg) translate(-1px, -1px);
}

/* ── Sticky footer ── */
.filter-drawer__footer {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  padding-left: 1.25rem;
  padding-right: 1.25rem;
  padding-top: 1rem;
  padding-bottom: 1rem;
  gap: 12px;
  border-top: 1px solid var(--border-primary, #e5e7eb);
  background-color: var(--canvas-primary, #fff);
}

/* Footer "Clear all" — uses the design system btn-secondary look so it
   pairs with the primary "Show N horses" button on the right. */
.filter-drawer__reset-btn {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  font-size: 14px;
  font-weight: 600;
  padding: 12px 20px;
  border-radius: 12px;
  cursor: pointer;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}

.filter-drawer__apply {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  text-align: center;
}

.filter-drawer__reset-link {
  font-size: 0.75rem;
  line-height: 1rem;
  font-weight: 500;
  text-decoration-line: underline;
  color: var(--text-primary, #111);
  background: none;
  border: none;
  cursor: pointer;
}

.filter-drawer__apply {
  border-radius: 0.75rem;
  padding-left: 1.25rem;
  padding-right: 1.25rem;
  padding-top: 0.75rem;
  padding-bottom: 0.75rem;
  font-size: 0.8125rem;
  line-height: 1.5rem;
  font-weight: 600;
  background-color: var(--bg-accent-solid);
  color: var(--text-on-accent-solid);
  border: none;
  cursor: pointer;
  -webkit-transition: background-color .12s ease;
  transition: background-color .12s ease;
}

.filter-drawer__apply:hover {
  background-color: var(--bg-accent-solid-hover);
}

/* ── Mobile: full-screen sheet (iOS-style) ──
   On phones the filter drawer takes the entire viewport so the
   user can focus on the task. Header is sticky with Cancel/Reset
   actions; footer is sticky with Apply N. Large touch targets +
   inputmode-aware fields handled by .form-mobile in mobile-components.
*/
/* Mobile: drawer slides in from the LEFT (full width) and sits on
   top of every other surface. Gated on html.is-mobile (set
   synchronously by Scripts/pwa.js) so it applies regardless of
   viewport width. */
html.is-mobile .filter-drawer {
  /* Phones: full-width takeover.
     Tablets: half the viewport width (overridden below at >=640px). */
  width: 100%;
  top: 0 !important;
  bottom: 0;
  height: 100dvh;
  border-radius: 0;
  -webkit-transform: translateX(-100%);
  -ms-transform: translateX(-100%);
  transform: translateX(-100%);
  /* No `padding-top: env(safe-area-inset-top)` — the drawer's header
     should sit flush with the very top of the panel tray. The user
     reported a persistent ~navbar-height offset which traced back to
     this inset firing on devices where env() returned non-zero (iPad
     PWA standalone, certain Android browsers in fullscreen). The
     trade-off is that in installed-PWA mode the OS status bar
     overlaps the drawer header by ~44px — accept that for now in
     exchange for the correct desktop / regular-browser layout. */
  padding-top: 0;
  /* safe area (tq-9355): B. The left-anchored drawer clears the notch side and the home indicator in landscape;
     the top keeps its deliberate 0 above. */
  padding-left: max(0px, env(safe-area-inset-left, 0px));
  padding-bottom: calc(0px + env(safe-area-inset-bottom, 0px));
  /* Above filter pills, count badge, carousel, and any popovers. */
  z-index: var(--z-surface);
}

/* Tablet PWA / wide-mobile-UA (≥640px): half-viewport width so the
   listings stay visible behind the drawer. The previous upper bound
   of 1023px excluded iPad landscape (1024–1366 wide) which still
   carries `html.is-mobile` because the UA is iOS, leaving the drawer
   full-width on the most common tablet orientation. Removing the
   upper bound covers all iPad orientations + Android tablets while
   leaving desktop (which doesn't set is-mobile) on the default
   440px / 92vw rule. */
@media (min-width: 640px) {
  html.is-mobile .filter-drawer {
    width: 50vw;
    min-width: 360px;
  }
}
html.is-mobile .filter-drawer.is-open { -webkit-transform: translateX(0); -ms-transform: translateX(0); transform: translateX(0); }
/* Backdrop above the carousel + pills. */
html.is-mobile .filter-drawer-backdrop {
  z-index: var(--z-surface-backdrop);
}
/* Suspend the slide transition while the user is actively
   dragging — JS adds .is-dragging during the gesture. */
html.is-mobile .filter-drawer.is-dragging {
  -webkit-transition: none;
  transition: none;
}

@media (max-width: 640px) {
  /* Drawer sizing for narrow viewports. Slide direction is now
     translateX (set by `html.is-mobile .filter-drawer` above) so
     this block no longer overrides the transform. */
  .filter-drawer {
    width: 100%;
    top: 0;
    bottom: 0;
    height: 100dvh;
    border-radius: 0;
    /* padding-top: env(safe-area-inset-top, 0px) was here; moved into
       the (display-mode: standalone) block above so the inset only
       applies in installed-PWA mode where the OS status bar actually
       overlaps the viewport. In regular mobile browsers the URL bar
       reserves that space, so adding the inset double-pads the drawer
       header — the symptom the user reported. */
  }

  .filter-drawer__header {
    position: sticky; top: 0; z-index: 5;
    background: var(--filter-panel-bg);
    padding: 12px 14px;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: justify; -ms-flex-pack: justify; justify-content: space-between;
    border-bottom: 1px solid var(--filter-divider);
    min-height: 52px;
  }
  .filter-drawer__title { font-size: 17px; font-weight: 600; }
  .filter-drawer__close {
    min-width: 44px; min-height: 44px;
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center;
  }

  .filter-drawer__body { padding-bottom: 96px; } /* reserve for footer */

  .filter-drawer__footer {
    position: fixed; left: 0; right: 0; bottom: 0;
    background: var(--filter-panel-bg-translucent);
    backdrop-filter: saturate(160%) blur(14px);
    border-top: 1px solid var(--filter-divider);
    padding: 12px 14px max(12px, env(safe-area-inset-bottom, 12px));
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex; gap: 10px;
    z-index: 6;
  }
  .filter-drawer__reset-btn,
  .filter-drawer__apply { min-height: 48px; -webkit-box-flex: 1; -ms-flex: 1 1 auto; flex: 1 1 auto; font-size: 15px; }
  .filter-drawer__apply { -webkit-box-flex: 2; -ms-flex: 2 1 auto; flex: 2 1 auto; }

  /* Larger pills inside the drawer on mobile */
  .filter-drawer .qf-chip-group .chip {
    min-height: 44px;
    padding: 10px 14px;
    font-size: 14px;
  }
} /* canonical DS component, imported in place (tq-8209) */
/* ==========================================================================
   Mobile shell — bottom nav, drawer, layout adjustments
   ==========================================================================

   Activated by `html.is-mobile` (set by Scripts/pwa.js). Desktop ignores
   everything in this file. We never use `display: none` on desktop because
   the partials below never get rendered when isMobile=false anyway — this
   sheet only ships behaviour for the mobile DOM that the layout emits.

   Naming: `.rnly-mb-*` (mb = mobile). Scoped this way so we never collide
   with existing `.app-*` desktop chrome.

   Canonical in Reinly.Design since tq-8210 (R3d); the app imports it in place (R4), PLAIN CSS (R4 guard). Carries C1's
   body/shell-flag anchors (tq-8220) and R7's dark-theme rules (tq-8217) unchanged.
   ========================================================================== */

/* ── Layout adjustments (mobile only) ──────────────────────────── */
html.is-mobile body { overscroll-behavior-y: contain; }

html.is-mobile .app-shell {
  /* Reserve room for the bottom nav so content never lives under it.
     56px nav + safe-area + 8px breathing room. The custom property
     is reused below by inner scroll containers. */
  --rnly-mb-nav-h: calc(56px + env(safe-area-inset-bottom, 0px));
  /* tq-9535 (A282): the floating '+' (.rnly-mb-fab, below): its size and its gap above the nav, used by the FAB itself, and
     the extra scroll clearance a page showing it adds on top of the nav reserve: the FAB, the gap under it and the same gap
     above it. Only the FAB's share: the nav / safe-area part stays --rnly-mb-nav-h, never counted twice. */
  --rnly-mb-fab-size: 56px;
  --rnly-mb-fab-gap: 16px;
  --rnly-mb-fab-clearance: calc(var(--rnly-mb-fab-size) + (2 * var(--rnly-mb-fab-gap)));
  padding-bottom: var(--rnly-mb-nav-h);
  /* safe area (tq-9365): 100vh resolves to iOS Safari's LARGE viewport while its toolbars show, so the shell overhung the
     visible screen by ~82pt and the reservation above was never reachable (the end of the scroll box sat under the nav /
     in the home-indicator band). svh = the toolbars-shown size: a constant, never keyed to the nav or toolbar state (no
     reflow mid-scroll; dvh would re-resolve). 100vh stays first as the fallback for engines without svh. */
  height: 100vh;
  height: 100svh;
}

/* Bottom-nav clearance is fully handled by the
   `.app-shell { padding-bottom: var(--rnly-mb-nav-h) }` rule
   above — the inner scroll container's bottom edge already
   lands flush with the top of the fixed bottom nav (or with
   the safe-area for guests). No additional bottom padding
   needed on the scroll container or its children; previous
   attempts painted as visible white space between the last
   content row and the bottom nav. We keep `scroll-padding-bottom`
   so keyboard / `scrollIntoView()` landing positions still
   account for the nav, but DON'T add any visible end-of-content
   padding. The ONE deliberate exception (tq-9535, A282): a populated
   seller listings grid on a page showing the floating '+' adds
   --rnly-mb-fab-clearance (see FLOATING ACTION BUTTON below), because
   the FAB sits ABOVE the nav and would otherwise cover the last card. */
html.is-mobile .panel-content,
html.is-mobile .frame-stage,
html.is-mobile [data-seller-content] {
  scroll-padding-bottom: var(--rnly-mb-nav-h, 0px);
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

/* Guests don't render the bottom nav, so the reserved bottom
   padding is unused dead space. Drop it for unauthenticated
   layouts (detected via the `body[data-signed-in="false"]` flag
   set by `_Layout.cshtml`). */
html.is-mobile body[data-signed-in="false"] .app-shell {
  padding-bottom: env(safe-area-inset-bottom, 0px);
}
html.is-mobile body[data-signed-in="false"] .panel-content,
html.is-mobile body[data-signed-in="false"] .frame-stage,
html.is-mobile body[data-signed-in="false"] [data-seller-content] {
  padding-bottom: env(safe-area-inset-bottom, 0px);
  scroll-padding-bottom: env(safe-area-inset-bottom, 0px);
}

/* When the device is in PWA standalone mode we trust the OS to draw the
   status bar — but we still need to push our chrome under the notch. */
html.is-pwa .app-chrome,
html.is-mobile .app-chrome { padding-top: env(safe-area-inset-top, 0px); }

/* ── Mobile header: logo only ──────────────────────────────────
   On phones the topbar collapses to just the brand mark — every
   other action (notifications, account, sell, search, etc.) lives
   in the bottom nav and the slide-out drawer. */

/* Standard topbar variant */
html.is-mobile .topbar {
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  padding-left: 12px;
  padding-right: 12px;
  min-height: 56px;
}
html.is-mobile .topbar-left {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  margin: 0 !important;
}
html.is-mobile .topbar-left > a[aria-label="Reinly home"] {
  margin-left: 0 !important;
}
html.is-mobile .topbar-left > a[aria-label="Reinly home"] img {
  height: 32px;
}
/* On phones the topbar collapses: only the home logo on the left,
   and the right cluster keeps any `.rnly-mb-only` items (currently
   just the Sign-In button for unauthenticated visitors). The
   `.topbar-right > * > :not(.rnly-mb-only)` rule below hides the
   non-mobile children — this rule must NOT hide `.topbar-right`
   itself, otherwise the mobile-only children are hidden too and
   the Sign-In button never renders on listings / map views. */
html.is-mobile .topbar-left > :not(a[aria-label="Reinly home"]),
html.is-mobile .topbar-center {
  display: none !important;
}

/* Hero variant — the hero nav strip overlays the image. Hide the
   center search affordance and the desktop right cluster (App menu,
   notification tray, user-menu component) on phones. The Sign In
   button gets `.rnly-mb-only` and stays visible inside nav-right
   for unauthenticated visitors. */
html.is-mobile .rnly-hero__nav-center {
  display: none !important;
}
html.is-mobile .rnly-hero__nav-right > :not(.rnly-mb-only) {
  display: none !important;
}
html.is-mobile .topbar-right > * > :not(.rnly-mb-only) {
  display: none !important;
}

/* Sign-in button — small white-glass pill that reads cleanly over
   the hero photo or standard topbar. */
.rnly-hero__signin,
.rnly-topbar__signin {
  display: none;
}
html.is-mobile .rnly-hero__signin,
html.is-mobile .rnly-topbar__signin {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  height: 36px;
  padding: 0 14px;
  border-radius: 9999px;
  font-size: 13px;
  font-weight: 600;
  letter-spacing: -0.005em;
  white-space: nowrap;
}

/* Topbar variant — used on inner pages (Listings, Sellers detail,
   wishlist detail, etc.) where the topbar background is solid white
   (`app-chrome--standard`). The base `btn-glass` styling is designed
   for the dark / hero photo overlay; on a white background it
   disappears. Override to a dark solid pill matching the dark-button
   treatment we use elsewhere on inner-page headers. */
html.is-mobile .rnly-topbar__signin {
  background-color: var(--text-primary, #18181b) !important;
  color: var(--alpha-white-100, #ffffff) !important;
  border: 1px solid var(--text-primary, #18181b) !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}
html.is-mobile .rnly-topbar__signin:hover {
  background-color: var(--text-primary-hover, #2a2a2e) !important;
  border-color: var(--text-primary-hover, #2a2a2e) !important;
}
html.is-mobile .rnly-topbar__signin:active {
  background-color: var(--text-primary, #000000) !important;
}
html.is-mobile .rnly-topbar__signin i {
  color: var(--alpha-white-100, #ffffff);
}

/* The app-shell reserves padding-bottom for the bottom nav when it
   exists. For guests (no bottom nav rendered) we drop the reservation
   so the listings don't end with a phantom gap above the safe-area. */
html.is-mobile body[data-signed-in="false"] .app-shell {
  padding-bottom: env(safe-area-inset-bottom, 0px);
}

/* Mobile-only home logo overlaid on hero pages so users have a
   tap-target to return to /. Hidden on desktop since the standard
   topbar isn't rendered on hero pages either way. Aligned to the
   same left edge as the search pill + hero titles (16px from the
   viewport — provided by the parent .rnly-hero__nav padding) and
   sized to match the inner-page topbar logo (32px tall). */
.rnly-hero__home { display: none; }
html.is-mobile .rnly-hero__home {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  margin-left: 0;
}
html.is-mobile .rnly-hero__home img { height: 32px; width: auto; display: block; }

/* On phones the hero collapses to: logo (in nav strip) + search pill +
   listings. Big title and subtitle copy hide so above-the-fold focuses
   on the search action. The hero strip itself shrinks to ~220px so the
   listings carousels start near the fold. */
html.is-mobile .rnly-hero__title,
html.is-mobile .rnly-hero__subtitle,
html.is-mobile .rnly-hero__credit { display: none !important; }

html.is-mobile .rnly-hero {
  min-height: 130px;
  -webkit-transition: min-height var(--rnly-dur-collapse, 320ms) var(--rnly-ease-ios, cubic-bezier(0.32, 0.72, 0, 1));
  transition: min-height var(--rnly-dur-collapse, 320ms) var(--rnly-ease-ios, cubic-bezier(0.32, 0.72, 0, 1));
}
/* Tighten the hero's internal vertical rhythm — the nav strip sits
   close to the search pill, but we leave a clear gap below the pill
   before the listings begin so the search action reads as anchored
   to the hero, not bumping the next section. */
/* Tightened top padding above the logo + sign-in row. The
   safe-area-inset-top still pushes content past the system
   status bar / notch, but the additional gap is small (8px) so
   the hero feels compact rather than top-heavy. */
html.is-mobile .rnly-hero__nav {
  padding-top: calc(env(safe-area-inset-top, 0) + 8px);
  padding-bottom: 0;
  /* safe area (tq-9361): B. Hero inner row: its 16px gutter plus the notch side (the hero chrome itself stays full-bleed). */
  padding-left: calc(16px + env(safe-area-inset-left, 0px));
  padding-right: calc(16px + env(safe-area-inset-right, 0px));
}
html.is-mobile .rnly-hero__content { padding-top: 0; padding-bottom: 20px; }
html.is-mobile .rnly-hero__body { margin-top: 0; margin-bottom: 0; }

/* Vertical rhythm for the home rails — leave a clear gap between
   the hero and the first section title (so the rails don't crowd
   the search pill), but keep the gaps between subsequent sections
   tight. */
html.is-mobile .panel-content > .mx-auto { padding-top: 32px !important; padding-bottom: 16px !important; }
html.is-mobile .rnly-rail { margin-bottom: 24px; }
html.is-mobile .rnly-rail > div.flex.items-baseline { margin-bottom: 10px !important; }
html.is-mobile .page-title {
  font-size: 24px;
  line-height: 1.15;
  letter-spacing: -0.035em;
  font-weight: 600;
}
/* Hide section subtitles on mobile — the main title carries the
   intent on its own, and stacking a caption underneath crowds the
   compact layout. */
html.is-mobile .rnly-rail .body { display: none !important; }
/* When the top chrome is collapsed (32px scroll), shrink the hero
   to just the logo nav strip. Higher specificity than the default
   above so it wins without `!important`. */
html.is-mobile[data-rnly-mb-top-collapsed] .rnly-hero,
html.is-mobile .rnly-hero.rnly-hero--collapsed {
  min-height: 0;
}

/* ── iOS hairline borders ──────────────────────────────────────
   Solid 1px borders render visibly darker on iOS Safari (and on most
   high-DPI Android Chrome devices) than design intent — a 1px stroke
   at #E7E5E4 reads closer to #C7C2BE because of how WebKit handles
   sub-pixel anti-aliasing on retina screens. We soften every mobile
   chrome border to ~96% white so they read as proper hairlines.
*/
html.is-mobile .rnly-mb-search-trigger,
html.is-mobile .rnly-rail-arrow,
html.is-mobile .filter-drawer__header,
html.is-mobile .filter-drawer__footer {
  border-color: rgb(244 244 245) !important;
}
html.is-mobile .rnly-search-shell .qf-pill-wrap + .qf-pill-wrap::before {
  background: rgb(244 244 245) !important;
}

/* ── Mobile gutter token ──────────────────────────────────────
   Single value used for the home logo's left gap and for every
   horizontally-scrolling rail / list container so the page reads
   visually flush. Pages key off `--rnly-mb-gutter`. */
html.is-mobile {
  --rnly-mb-gutter: 16px;
}

html.is-mobile .topbar { padding-left: var(--rnly-mb-gutter); padding-right: var(--rnly-mb-gutter); }
html.is-mobile .topbar-left > a[aria-label="Reinly home"] { margin-left: 0 !important; }

/* Tighten the home page content container to match the logo gutter. */
html.is-mobile .container-wrapper > .container-panel > .panel-body > .panel-content > .mx-auto {
  padding-left: var(--rnly-mb-gutter) !important;
  padding-right: var(--rnly-mb-gutter) !important;
}

/* Section headers + rail tracks bleed to the gutter on phones,
   but we keep enough horizontal padding (10px) for the
   `.card--hover-surface::before { inset: -6px }` green halo to
   render fully without being clipped on the leading/trailing card.
   The container itself already provides the gutter (16px) on the
   parent — the rail's 10px is purely hover breathing room. */
html.is-mobile .card-rail__track { padding-left: 10px; padding-right: 10px; }


/* ── Listing detail modal — mobile layout adjustments ────────
   On phones the desktop modal header is too wide to fit the title
   + Save/Share/View-full-page actions on a single line. We
   restructure to stack them: title on row 1, action cluster on
   row 2 (centred), Close button absolute in the top-right corner
   so it doesn't fight the row layout. The body padding aligns
   with the header/footer so all three regions share the same
   left/right gutter. The footer's primary CTAs centre instead of
   right-align so booking + message read as a paired call-to-action.
*/
/* Single-row mobile header: [Back] [Title…] [Save | Share | View | ✕]
   Save/Share/View are absorbed into a horizontally-scrollable
   action cluster so a long title doesn't push them off-screen. */
html.is-mobile #rnly-horse-detail-modal .modal-header {
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
  -ms-flex-direction: row;
  flex-direction: row;
  -ms-flex-wrap: nowrap;
  flex-wrap: nowrap;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
  padding: 10px 12px;
}
html.is-mobile #rnly-horse-detail-modal .modal-header > h2 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto;
  font-size: 17px;
  line-height: 1.25;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  margin: 0;
}
.rnly-modal-back { display: none; }
html.is-mobile .rnly-modal-back {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  height: 32px;
  padding: 0 12px 0 8px;
  font-size: 13px;
  font-weight: 500;
  line-height: 1;
  color: var(--text-primary, #18181b);
}
html.is-mobile .rnly-modal-back i {
  font-size: 14px;
  line-height: 1;
}
html.is-mobile .rnly-modal-back span {
  line-height: 1;
}

/* Block-level mobile-only utility — companion to `.rnly-mb-only`
   which uses `display: initial` (= inline) and so breaks block
   elements like h2/p. Use this when the mobile-only element must
   render as a block. */
.rnly-mb-block { display: none !important; }
html.is-mobile .rnly-mb-block { display: block !important; }

/* Home-page listing rails — on mobile match the bottom map
   carousel: cards are min(56vw, 320px) wide, snap to centre,
   with peek of prev/next on each side. Inactive cards scale
   to .96; the centred card gets `.is-active` and pops to 1.
   Inline `width: 280px` on each card wrapper is overridden via
   `!important` here. */
html.is-mobile [data-rnly-rail-track] {
  -ms-scroll-snap-type: x mandatory !important;
  scroll-snap-type: x mandatory !important;
  /* Asymmetric padding so the first card sits flush at the left
     edge (16px gutter), but the last card still has enough trail
     to scroll-snap fully to centre. */
  -webkit-padding-start: var(--rnly-mb-gutter, 16px) !important;
  padding-inline-start: var(--rnly-mb-gutter, 16px) !important;
  -webkit-padding-end: calc(50vw - min(28vw, 160px)) !important;
  padding-inline-end: calc(50vw - min(28vw, 160px)) !important;
  padding-bottom: 8px !important;
  gap: 10px !important;
}
html.is-mobile [data-rnly-rail-track] > * {
  -webkit-box-flex: 0 !important;
  -ms-flex: 0 0 min(56vw, 320px) !important;
  flex: 0 0 min(56vw, 320px) !important;
  width: min(56vw, 320px) !important;
  scroll-snap-align: center !important;
  scroll-snap-stop: always !important;
  -webkit-transform: scale(0.96);
  -ms-transform: scale(0.96);
  transform: scale(0.96);
  -webkit-transition:
    -webkit-transform 280ms cubic-bezier(0.4, 0, 0.2, 1),
    -webkit-box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
  transition:
    -webkit-transform 280ms cubic-bezier(0.4, 0, 0.2, 1),
    -webkit-box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
  transition:
    transform 280ms cubic-bezier(0.4, 0, 0.2, 1),
    box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
  transition:
    transform 280ms cubic-bezier(0.4, 0, 0.2, 1),
    box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1),
    -webkit-transform 280ms cubic-bezier(0.4, 0, 0.2, 1),
    -webkit-box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
}
html.is-mobile [data-rnly-rail-track] > .is-active {
  -webkit-transform: scale(1);
  -ms-transform: scale(1);
  transform: scale(1);
}

/* On mobile, the `.card--hover-surface` background-scale-in
   should ONLY trigger from our scroll-detection JS (which adds
   `.is-active`). Two corrections:
     1. The default `inset: -6px` on the ::before makes the
        scaled background extend 6px past every edge of the
        card — on touch devices that reads as a coloured border
        glow rather than a fill, so we pin it back to `inset: 0`.
     2. `:hover` and `:focus-within` fire when the user taps a
        card to open the detail modal, flashing the highlight
        on a NON-centred card. We disable both states on mobile
        so only the centred-via-scroll card lights up. */
html.is-mobile .card--hover-surface::before {
  /* Pull in slightly so the rounded background sits inside the
     card edges (the default `inset: -6px` made it bleed outside,
     reading as a border glow). Border-radius matches the card's
     media-area radius so the highlight reads as a proper rounded
     background. */
  inset: -8px;
  border-radius: var(--radius-card-hover, 1.25rem);
}
html.is-mobile .card--hover-surface:hover::before,
html.is-mobile .card--hover-surface:focus-within::before {
  opacity: 0;
  -webkit-transform: scale(0.96);
  -ms-transform: scale(0.96);
  transform: scale(0.96);
}
html.is-mobile .card--hover-surface.is-active::before {
  opacity: 1;
  -webkit-transform: scale(1);
  -ms-transform: scale(1);
  transform: scale(1);
}

/* `.card--listing.is-active` also paints a 2px outline on the
   article (used as a "linked card" indicator on desktop). On
   mobile that outline reads as a hard green border around the
   centred carousel card — we already convey active-state via
   the scaled background + `transform: scale(1)` on the wrapper,
   so suppress the outline here. */
html.is-mobile .card--listing.is-active {
  outline-color: transparent !important;
}

/* "Other listings by this seller" track — on mobile match the
   bottom map carousel: cards are min(56vw, 320px) wide, snap to
   centre, with peek of prev/next on each side. The non-active
   cards scale slightly down so the centred card is the visual
   focus, mirroring the map carousel's `is-active` treatment. */
html.is-mobile [data-other-listings-track] {
  -ms-scroll-snap-type: x mandatory !important;
  scroll-snap-type: x mandatory !important;
  padding-inline: calc(50vw - min(28vw, 160px)) !important;
  margin: 0 !important;
  scroll-padding-inline: 0 !important;
  gap: 10px !important;
}
html.is-mobile [data-other-listings-track] > * {
  -webkit-box-flex: 0 !important;
  -ms-flex: 0 0 min(56vw, 320px) !important;
  flex: 0 0 min(56vw, 320px) !important;
  width: min(56vw, 320px) !important;
  scroll-snap-align: center !important;
  scroll-snap-stop: always !important;
  -webkit-transform: scale(0.96);
  -ms-transform: scale(0.96);
  transform: scale(0.96);
  -webkit-transition:
    -webkit-transform 280ms cubic-bezier(0.4, 0, 0.2, 1),
    -webkit-box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
  transition:
    -webkit-transform 280ms cubic-bezier(0.4, 0, 0.2, 1),
    -webkit-box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
  transition:
    transform 280ms cubic-bezier(0.4, 0, 0.2, 1),
    box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
  transition:
    transform 280ms cubic-bezier(0.4, 0, 0.2, 1),
    box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1),
    -webkit-transform 280ms cubic-bezier(0.4, 0, 0.2, 1),
    -webkit-box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
  -webkit-box-shadow:
    0 4px 14px -8px rgba(15, 23, 42, 0.18),
    0 1px 3px -1px rgba(15, 23, 42, 0.06);
  box-shadow:
    0 4px 14px -8px rgba(15, 23, 42, 0.18),
    0 1px 3px -1px rgba(15, 23, 42, 0.06);
}
html.is-mobile [data-other-listings-track] > .is-active {
  -webkit-transform: scale(1);
  -ms-transform: scale(1);
  transform: scale(1);
  -webkit-box-shadow:
    0 14px 36px -10px rgba(15, 23, 42, 0.30),
    0 2px 6px -2px rgba(15, 23, 42, 0.10);
  box-shadow:
    0 14px 36px -10px rgba(15, 23, 42, 0.30),
    0 2px 6px -2px rgba(15, 23, 42, 0.10);
}

/* "Other listings by this seller" header — on mobile drop the
   View all + prev/next cluster to its own row beneath the title,
   so the section title and the count badge keep the full width
   of the first line. Desktop layout (single row, justify-between)
   is untouched. */
html.is-mobile [data-other-listings-section] > div:first-of-type {
  -ms-flex-wrap: wrap !important;
  flex-wrap: wrap !important;
  row-gap: 8px;
}
html.is-mobile [data-other-listings-section] > div:first-of-type > h3 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  min-width: 0;
}
html.is-mobile [data-other-listings-section] > div:first-of-type > div {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  -webkit-box-pack: start;
  -ms-flex-pack: start;
  justify-content: flex-start;
}
/* View all stays at the left edge; the prev/next carousel controls
   get pushed to the right edge by margin-left: auto on the first
   carousel button (next button rides along since it's a sibling). */
html.is-mobile [data-other-listings-section] > div:first-of-type > div > [data-other-listings-prev] {
  margin-left: auto;
}
/* Action row keeps Save / Share / View aligned to the right; the
   Close icon sits at the very end of that cluster. */
html.is-mobile #rnly-horse-detail-modal .modal-header > div[class~="flex"] {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  -ms-flex-wrap: nowrap;
  flex-wrap: nowrap;
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 4px;
}
/* tq-9439 (A264; isabella 900075125): Save and Share are icon-only here, as on the full page's phone-shell header (a 44px
   hit area, the aria-label as the name, the native title as the tooltip). Their labels (a wishlist name, at times) pushed
   the Close button off a 390 screen. Close stays icon-only at the end. */
html.is-mobile #rnly-horse-detail-modal .modal-header > div[class~="flex"] > .wl-save-inline,
html.is-mobile #rnly-horse-detail-modal .modal-header > div[class~="flex"] > [data-share-listing] {
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  padding: 0;
  font-size: 12px;
}
html.is-mobile #rnly-horse-detail-modal .modal-header .hd-header__action-label {
  display: none;
}

/* Photo grid on mobile is a horizontal scroll-snap carousel.
   `horses/detail.js#initBuyerModalInteractions` flattens any nested
   tile wrappers so every slide is a direct child of `.hd-photo-grid`
   — native scroll-snap requires direct-child snap targets. The
   "Show all N photos" badge (already wired to `data-gallery-open`)
   stays in its absolute corner and opens the full Photo Tour. */
html.is-mobile #rnly-horse-detail-modal .hd-photo-grid,
html.is-mobile #rnly-horse-detail-modal .hd-photo-grid--hero-only {
  border-radius: 12px;
}
html.is-mobile #rnly-horse-detail-modal .hd-photo-grid {
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
  -webkit-box-orient: horizontal !important;
  -webkit-box-direction: normal !important;
  -ms-flex-direction: row !important;
  flex-direction: row !important;
  -ms-flex-wrap: nowrap !important;
  flex-wrap: nowrap !important;
  overflow-x: auto;
  overflow-y: hidden;
  -ms-scroll-snap-type: x mandatory;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
  overscroll-behavior-x: contain;
  -ms-touch-action: pan-x pan-y;
  touch-action: pan-x pan-y;
  aspect-ratio: 4 / 3;
  height: auto;
  gap: 0 !important;
  position: relative;
}
html.is-mobile #rnly-horse-detail-modal .hd-photo-grid::-webkit-scrollbar {
  display: none;
}
/* Each direct child becomes a full-width snap slide. The
   `display: block !important` override is critical — `pages/horse-detail.css`
   has `@media (max-width: 767px) { .hd-photo-grid__tile { display: none } }`
   for its single-cover-only mobile mode, which would otherwise
   hide every slide except the hero. */
html.is-mobile #rnly-horse-detail-modal .hd-photo-grid > .hd-photo-grid__hero,
html.is-mobile #rnly-horse-detail-modal .hd-photo-grid > .hd-photo-grid__tile {
  display: block !important;
  -webkit-box-flex: 0 !important;
  -ms-flex: 0 0 100% !important;
  flex: 0 0 100% !important;
  width: 100% !important;
  height: 100% !important;
  min-width: 0;
  scroll-snap-align: start;
  scroll-snap-stop: always;
  position: relative;
}
html.is-mobile #rnly-horse-detail-modal .hd-photo-grid img,
html.is-mobile #rnly-horse-detail-modal .hd-photo-grid video {
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
  object-fit: cover;
  display: block;
}

/* ── Mobile carousel chrome (arrows + dots) ──
   The host wrapper sits around the grid so arrows + dots can be
   absolutely positioned over it. They're visible from first
   paint — no hover/tap-to-reveal. */
.hd-mb-carousel-host {
  position: relative;
}
.hd-mb-carousel-overlay {
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 5;
}
.hd-mb-carousel-arrow {
  position: absolute;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
  width: 32px;
  height: 32px;
  border-radius: 9999px;
  background: rgba(255, 255, 255, 0.92);
  border: 0;
  color: rgb(38 38 38);
  font-size: 13px;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -webkit-box-shadow: 0 2px 6px rgba(15, 23, 42, 0.18);
  box-shadow: 0 2px 6px rgba(15, 23, 42, 0.18);
  pointer-events: auto;
  -webkit-tap-highlight-color: transparent;
  -webkit-transition: opacity 120ms ease, -webkit-transform 120ms ease;
  transition: opacity 120ms ease, -webkit-transform 120ms ease;
  transition: opacity 120ms ease, transform 120ms ease;
  transition: opacity 120ms ease, transform 120ms ease, -webkit-transform 120ms ease;
}
.hd-mb-carousel-arrow:active { -webkit-transform: translateY(-50%) scale(0.92); -ms-transform: translateY(-50%) scale(0.92); transform: translateY(-50%) scale(0.92); }
.hd-mb-carousel-arrow--prev { left: 8px; }
.hd-mb-carousel-arrow--next { right: 8px; }
.hd-mb-carousel-arrow:disabled {
  opacity: 0.35;
  pointer-events: none;
}

.hd-mb-carousel-dots {
  position: absolute;
  bottom: 10px;
  left: 50%;
  -webkit-transform: translateX(-50%);
  -ms-transform: translateX(-50%);
  transform: translateX(-50%);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  gap: 5px;
  pointer-events: none;
  -webkit-filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.4));
  filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.4));
}
.hd-mb-carousel-dot {
  width: 6px;
  height: 6px;
  border-radius: 9999px;
  background: rgba(255, 255, 255, 0.55);
  -webkit-transition: all 0.25s ease;
  transition: all 0.25s ease;
}
.hd-mb-carousel-dot.is-active {
  width: 8px;
  height: 8px;
  background: #fff;
}

/* Body content gutters match the header/footer (16px) instead of
   the desktop 40-48px so every region of the modal aligns. */
html.is-mobile #rnly-horse-detail-modal .modal-body > div[class~="w-full"] {
  padding-left: 16px !important;
  padding-right: 16px !important;
  padding-top: 16px !important;
  padding-bottom: 16px !important;
}

/* ════════════════════════════════════════════════════════════════
   FULL-PAGE LISTING DETAIL on MOBILE — mirror the modal's mobile
   chrome 1:1 so /Horses/{slug} reads as the same surface as the
   in-modal detail view. Every override below is scoped to
   `html.is-mobile .horse-details` so desktop is untouched.
   ════════════════════════════════════════════════════════════════ */

/* Compact header — same proportions as the modal's mobile
   `.modal-header` (10px / 12px padding, 17px title, single row,
   long titles ellipsize so action buttons stay anchored right). */
html.is-mobile .horse-details .hd-header {
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
  -ms-flex-direction: row;
  flex-direction: row;
  -ms-flex-wrap: nowrap;
  flex-wrap: nowrap;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
  padding: 10px 0;
  /* Sticky so the title + actions stay visible as the user scrolls
     through the long-form content, matching the modal-header
     behaviour inside `.modal-content { overflow: hidden }`. */
  position: sticky;
  top: 0;
  z-index: 30;
  background: var(--bg-card, #fff);
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
  /* Counter-act `.hd-container`'s 16px horizontal padding so the
     sticky header runs edge-to-edge but its inner content respects
     the gutter. */
  margin-left: -16px;
  margin-right: -16px;
  padding-left: 12px;
  padding-right: 12px;
}
html.is-mobile .horse-details .hd-header__text {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto;
  min-width: 0;
  gap: 8px !important;
}
html.is-mobile .horse-details .hd-header__title {
  font-size: 17px !important;
  line-height: 1.25 !important;
  white-space: nowrap;
  overflow: hidden !important;   /* tq-9439: over the app's narrow-width overflow: visible !important (the name wraps there) */
  text-overflow: ellipsis;
  display: block !important; /* override the desktop -webkit-line-clamp:2 */
  -webkit-line-clamp: 1 !important;
}
html.is-mobile .horse-details .hd-header__actions {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  -ms-flex-wrap: nowrap;
  flex-wrap: nowrap;   /* tq-9439: the app's narrow-width rule wraps it; the phone shell stays ONE row */
  gap: 4px !important;
}

/* tq-9439 (A264; isabella 900075125, option b): the title keeps its room. Save / Share are icon-only here, each a 44px hit
   area with its accessible name (aria-label) and the native title as its tooltip; the labels show everywhere else. The
   booking chip leaves this sticky row: its copy on the line under the header (.hd-subline: chip, then Track) shows instead.
   The title is undone from the app's narrow-width wrap (horse-detail.css) back to one line with an ellipsis. */
html.is-mobile .horse-details .hd-header__text {
  -ms-flex-preferred-size: auto;
  flex-basis: auto;
}
html.is-mobile .horse-details .hd-header__action-label {
  display: none;
}
html.is-mobile .horse-details .hd-header__actions > .wl-save-inline,
html.is-mobile .horse-details .hd-header__actions > [data-share-listing] {
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  padding: 0 !important;
}
html.is-mobile .horse-details .hd-header__actions [data-bkg-header-indicator] {
  display: none !important;
}
html.is-mobile .horse-details .hd-subline:has(> .bkg-existing-indicator) {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
html.is-mobile .horse-details .hd-subline > .bkg-existing-indicator {
  display: -webkit-inline-box !important;
  display: -ms-inline-flexbox !important;
  display: inline-flex !important;
}

/* Photo grid → mobile scroll-snap carousel, exactly the modal
   pattern. Same flex / overflow / snap rules as
   `#rnly-horse-detail-modal .hd-photo-grid` above. The desktop
   CSS at lines 179-196 of horse-detail.css forces the photo
   grid to single-hero on mobile (`.hd-photo-grid__tile { hidden }`);
   we override here to match the modal's full-carousel display. */
html.is-mobile .horse-details .hd-photo-grid,
html.is-mobile .horse-details .hd-photo-grid--hero-only {
  border-radius: 12px;
  /* Counter the body's 16px gutter so the photo runs edge-to-edge. */
  margin-left: -16px;
  margin-right: -16px;
  border-radius: 0;
}
html.is-mobile .horse-details .hd-photo-grid {
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
  -webkit-box-orient: horizontal !important;
  -webkit-box-direction: normal !important;
  -ms-flex-direction: row !important;
  flex-direction: row !important;
  -ms-flex-wrap: nowrap !important;
  flex-wrap: nowrap !important;
  overflow-x: auto;
  overflow-y: hidden;
  -ms-scroll-snap-type: x mandatory;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
  overscroll-behavior-x: contain;
  -ms-touch-action: pan-x pan-y;
  touch-action: pan-x pan-y;
  aspect-ratio: 4 / 3;
  height: auto;
  gap: 0 !important;
  position: relative;
}
html.is-mobile .horse-details .hd-photo-grid::-webkit-scrollbar {
  display: none;
}
/* Direct-child slides are full-width snap targets. The
   `display: block !important` overrides the desktop hide
   (`@media (max-width: 767px) { .hd-photo-grid__tile { hidden } }`)
   that would otherwise leave only the hero visible. */
html.is-mobile .horse-details .hd-photo-grid > .hd-photo-grid__hero,
html.is-mobile .horse-details .hd-photo-grid > .hd-photo-grid__tile {
  display: block !important;
  -webkit-box-flex: 0 !important;
  -ms-flex: 0 0 100% !important;
  flex: 0 0 100% !important;
  width: 100% !important;
  height: 100% !important;
  min-width: 0;
  scroll-snap-align: start;
  scroll-snap-stop: always;
  position: relative;
  border-radius: 0;
}
html.is-mobile .horse-details .hd-photo-grid img,
html.is-mobile .horse-details .hd-photo-grid video {
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
  object-fit: cover;
  display: block;
}

/* Section spacing on mobile — match the modal's tighter rhythm.
   `.hd-section` desktop padding is 32px top/bottom; mobile gets
   24px to match the modal's `mb-14` (~56px between section titles
   and content boundaries). */
html.is-mobile .horse-details .hd-section {
  padding: 24px 0;
}

/* Footer actions centered as a pair. */
html.is-mobile #rnly-horse-detail-modal .modal-footer {
  padding: 12px 16px max(12px, env(safe-area-inset-bottom, 12px));
}
html.is-mobile #rnly-horse-detail-modal .modal-footer > div[class~="flex"] {
  -webkit-box-pack: center !important;
  -ms-flex-pack: center !important;
  justify-content: center !important;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
}

/* Tablet: there's enough horizontal room for the two CTAs to sit
   side-by-side at the bottom-right edge (Airbnb's listing modal
   pattern), so override the mobile centering above. Phones
   (<640px) keep the centered, wrap-friendly layout. */
@media (min-width: 640px) and (max-width: 1023px) {
  html.is-mobile #rnly-horse-detail-modal .modal-footer > div[class~="flex"] {
    -webkit-box-pack: end !important;
    -ms-flex-pack: end !important;
    justify-content: flex-end !important;
  }
}

/* ── Listing detail modal: scale from / to source card ─────────
   When the user taps a listing card, openHorseModal() captures the
   card's centre point + ratio and sets `--rnly-modal-from-x/y/scale`
   on the modal element. CSS uses those as the transform-origin and
   start scale so the modal appears to grow OUT of the card. On
   close (`hide.bs.modal`) the same vars are recomputed and the
   reverse animation runs.
   GPU-composited: only `transform` and `opacity` change; no layout
   work during the animation. */
#rnly-horse-detail-modal.is-scaling-from-card .modal-content {
  -webkit-transform-origin: var(--rnly-modal-from-x, 50%) var(--rnly-modal-from-y, 50%);
  -ms-transform-origin: var(--rnly-modal-from-x, 50%) var(--rnly-modal-from-y, 50%);
  transform-origin: var(--rnly-modal-from-x, 50%) var(--rnly-modal-from-y, 50%);
  -webkit-transition:
    opacity   240ms cubic-bezier(0.32, 0.72, 0, 1),
    -webkit-transform 320ms cubic-bezier(0.32, 0.72, 0, 1);
  transition:
    opacity   240ms cubic-bezier(0.32, 0.72, 0, 1),
    -webkit-transform 320ms cubic-bezier(0.32, 0.72, 0, 1);
  transition:
    transform 320ms cubic-bezier(0.32, 0.72, 0, 1),
    opacity   240ms cubic-bezier(0.32, 0.72, 0, 1);
  transition:
    transform 320ms cubic-bezier(0.32, 0.72, 0, 1),
    opacity   240ms cubic-bezier(0.32, 0.72, 0, 1),
    -webkit-transform 320ms cubic-bezier(0.32, 0.72, 0, 1);
  will-change: transform, opacity;
}
/* Closed / closing state (pre-show + post-hide) — modal-content
   shrunk to source card's footprint and faded. */
#rnly-horse-detail-modal.is-scaling-from-card:not(.show) .modal-content {
  -webkit-transform: scale(var(--rnly-modal-from-scale, 0.4));
  -ms-transform: scale(var(--rnly-modal-from-scale, 0.4));
  transform: scale(var(--rnly-modal-from-scale, 0.4));
  opacity: 0;
}
/* Open state — modal-content at identity. */
#rnly-horse-detail-modal.is-scaling-from-card.show .modal-content {
  -webkit-transform: scale(1);
  -ms-transform: scale(1);
  transform: scale(1);
  opacity: 1;
}
/* Backdrop fades alongside the content for a coherent open/close. */
#rnly-horse-detail-modal.is-scaling-from-card .modal-overlay {
  -webkit-transition: opacity 240ms cubic-bezier(0.32, 0.72, 0, 1);
  transition: opacity 240ms cubic-bezier(0.32, 0.72, 0, 1);
}

/* ── Listing modal — skeleton loaders + content fade-in ─────────
   Replaces the spinner with shimmering placeholders that mirror
   the modal's structure (hero photo, title + price, meta line,
   discipline chips, description lines). When the real HTML
   arrives the wrapper gets `.rnly-modal-content--entering`
   stripped on the next frame, triggering a soft fade-in.
   Uses the shared `.skeleton` shimmer keyframe from
   `components/status/skeleton.css`. */
.rnly-modal-skel {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  width: 100%;
}
.rnly-modal-skel__hero {
  width: 100%;
  aspect-ratio: 4 / 3;
  border-radius: 0;
}
.rnly-modal-skel__body {
  padding: 24px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 14px;
}
.rnly-modal-skel__title-row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 16px;
}
.rnly-modal-skel__title  { height: 22px; -webkit-box-flex: 1; -ms-flex: 1 1 auto; flex: 1 1 auto; max-width: 60%; border-radius: 6px; }
.rnly-modal-skel__price  { height: 26px; width: 96px; border-radius: 13px; -webkit-box-flex: 0; -ms-flex: 0 0 auto; flex: 0 0 auto; }
.rnly-modal-skel__meta   { height: 13px; width: 70%; border-radius: 5px; }
.rnly-modal-skel__chips  { display: -webkit-box; display: -ms-flexbox; display: flex; gap: 8px; -ms-flex-wrap: wrap; flex-wrap: wrap; }
.rnly-modal-skel__chip   { height: 26px; width: 92px; border-radius: 9999px; -webkit-box-flex: 0; -ms-flex: 0 0 auto; flex: 0 0 auto; }
.rnly-modal-skel__lines  { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; gap: 10px; padding-top: 6px; }
.rnly-modal-skel__line   { height: 12px; border-radius: 5px; }
.rnly-modal-skel__line--full { width: 100%; }
.rnly-modal-skel__line--3-4  { width: 75%; }
.rnly-modal-skel__line--1-2  { width: 50%; }

/* Real content arrives and fades in over the skeleton's spot.
   Two rAFs let the browser paint the `--entering` state at
   opacity:0 before we transition it back to 1. */
#rnly-horse-detail-content {
  -webkit-transition: opacity 260ms cubic-bezier(0.4, 0, 0.2, 1),
              -webkit-transform 360ms cubic-bezier(0.32, 0.72, 0, 1);
  transition: opacity 260ms cubic-bezier(0.4, 0, 0.2, 1),
              -webkit-transform 360ms cubic-bezier(0.32, 0.72, 0, 1);
  transition: opacity 260ms cubic-bezier(0.4, 0, 0.2, 1),
              transform 360ms cubic-bezier(0.32, 0.72, 0, 1);
  transition: opacity 260ms cubic-bezier(0.4, 0, 0.2, 1),
              transform 360ms cubic-bezier(0.32, 0.72, 0, 1),
              -webkit-transform 360ms cubic-bezier(0.32, 0.72, 0, 1);
  -webkit-transform: translateY(0);
  -ms-transform: translateY(0);
  transform: translateY(0);
  opacity: 1;
}
#rnly-horse-detail-content.rnly-modal-content--entering {
  opacity: 0;
  -webkit-transform: translateY(8px);
  -ms-transform: translateY(8px);
  transform: translateY(8px);
}

/* ── Delayed shimmer + content fade ──
   Loading model:
     1. User taps a card → modal opens, contentEl is empty.
     2. JS starts fetch + arms a 250 ms timer.
     3. Fast network: timer is cancelled, shimmer never appears.
        Content arrives, fades in over an empty box. No flicker.
     4. Slow network: timer fires, shimmer appears (absolute overlay
        on contentEl) and fades in. When content arrives, content
        fades in (in-flow) while shimmer cross-fades out, then the
        shimmer is removed from the DOM and the content layer
        unwraps so the modal-container's flex flow takes over.
   The shimmer is `position: absolute; inset: 0` so it doesn't push
   the in-flow content layer when both are present mid-cross-fade —
   they occupy the same box. */
#rnly-horse-detail-content {
  /* Anchor for the absolutely-positioned shimmer overlay. */
  position: relative;
}

.rnly-modal-skel-overlay {
  position: absolute;
  inset: 0;
  z-index: 2;
  opacity: 0;
  pointer-events: none;
  -webkit-transition: opacity 140ms ease-out;
  transition: opacity 140ms ease-out;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  background: var(--bg-modal, #fff);
}
.rnly-modal-skel-overlay.is-visible {
  opacity: 1;
}
.rnly-modal-skel-overlay.is-fading-out {
  opacity: 0;
}

.rnly-modal-content-fade {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  /* `flex: 1; min-height: 0` makes the layer grow to fill the
     modal-container's flex column without fighting it. The
     min-height: 0 is the standard "allow descendant overflow-y-auto
     to actually scroll" hack — without it modal-body would expand
     past the container instead of scrolling internally. */
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-height: 0;
  opacity: 0;
  /* Block taps on the still-invisible content so the user can't
     accidentally hit a transparent button mid-fade. */
  pointer-events: none;
  /* Tightened from 280ms → 180ms so even sub-100ms cache hits feel
     crisp instead of slow-fade-y. The user reported the modal felt
     "laggy" — most of the perceived lag was the skeleton-to-content
     fade taking too long after content was already in the DOM. */
  -webkit-transition: opacity 180ms cubic-bezier(0.4, 0, 0.2, 1);
  transition: opacity 180ms cubic-bezier(0.4, 0, 0.2, 1);
}
.rnly-modal-content-fade.is-visible {
  opacity: 1;
  pointer-events: auto;
}

/* ── Rail-scroll arrows (beside section titles) ─────────────────
   Tap-affordance for the horizontal carousel of cards. Visible on
   every breakpoint so phone users get them too — the JS checks
   scrollLeft to enable/disable each side. */
.rnly-rail-arrow {
  width: 36px; height: 36px;
  border-radius: 9999px;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  background: white;
  border: 1px solid rgb(244 244 245);
  color: rgb(38 38 38);
  font-size: 14px;
  -webkit-transition: opacity 120ms ease, background 120ms ease;
  transition: opacity 120ms ease, background 120ms ease;
  -webkit-tap-highlight-color: transparent;
}
.rnly-rail-arrow:hover { background: rgb(250 250 249); }
.rnly-rail-arrow:active { -webkit-transform: scale(0.94); -ms-transform: scale(0.94); transform: scale(0.94); }
.rnly-rail-arrow:disabled,
.rnly-rail-arrow.is-disabled {
  opacity: 0.35;
  cursor: not-allowed;
  pointer-events: none;
}

/* ── Mobile hero search: compacted desktop pill ────────────────
   Same multi-segment pill + popover interaction as desktop, just
   smaller and with the sub-line "hint" text dropped so the pill
   fits on a phone. The existing search-filters.js keeps working
   unchanged because we don't restructure the DOM.
*/

/* Match the search shell's horizontal extents to the listings
   gutter so the pill aligns visually with the section titles below
   ("Popular horses", etc.) instead of sitting indented inside its
   own narrower wrapper. */
/* Hero content gutter — keeps the search shell flush to the page
   gutter on mobile. The shell itself is restyled in the dedicated
   components/mobile-hero-search.css file. */
html.is-mobile .rnly-hero__content {
  /* safe area (tq-9361): B. Hero inner row (the "Start your search" pill): the gutter plus the notch side. */
  padding-left: calc(var(--rnly-mb-gutter, 16px) + env(safe-area-inset-left, 0px));
  padding-right: calc(var(--rnly-mb-gutter, 16px) + env(safe-area-inset-right, 0px));
}

/* ── Chrome collapse — transform-only, GPU-composited, no jank ──
   Smoothness rule: NEVER animate layout properties (height, padding,
   margin, border-width) during a scroll-driven state change. Layout
   transitions force a reflow on every animation frame; on iOS Safari
   the document height changes mid-scroll, which desyncs scrollTop
   and produces visible "page jumps".

   We use ONLY `transform` and `opacity` here — both are GPU-
   composited and never trigger layout/paint of the document. The
   IntersectionObserver in Scripts/mobile.js fires the state change
   once at threshold crossing (not per frame) so even the cheap
   transitions only run once per direction change.

   Compatible everywhere: iOS Safari 9+, Android Chrome, all
   evergreen desktops. The hero itself collapses via the existing
   .rnly-hero--collapsed system in hero-animation.css (driven by
   the same IO sentinel) — we don't add competing rules here.
*/

:root {
  --rnly-ease-ios: cubic-bezier(0.32, 0.72, 0, 1);
  --rnly-dur-collapse: 320ms;
}

/* Search pill: transform + opacity ONLY — no max-height/margin
   changes. The pill stays in the document at its full size; we just
   fade + slide it visually. Result: zero document-height change on
   collapse, zero scroll jump. The hero still uses its EXISTING
   .rnly-hero--collapsed transition from hero-animation.css (fired
   by the same IO threshold) which handles the visual height shrink
   at the hero level — and because that runs once per crossing
   (not per scroll frame) the layout shift is a single smooth move,
   not a per-frame thrash. */
html.is-mobile .rnly-search-shell {
  -webkit-transition:
    opacity   var(--rnly-dur-collapse) var(--rnly-ease-ios),
    -webkit-transform var(--rnly-dur-collapse) var(--rnly-ease-ios);
  transition:
    opacity   var(--rnly-dur-collapse) var(--rnly-ease-ios),
    -webkit-transform var(--rnly-dur-collapse) var(--rnly-ease-ios);
  transition:
    transform var(--rnly-dur-collapse) var(--rnly-ease-ios),
    opacity   var(--rnly-dur-collapse) var(--rnly-ease-ios);
  transition:
    transform var(--rnly-dur-collapse) var(--rnly-ease-ios),
    opacity   var(--rnly-dur-collapse) var(--rnly-ease-ios),
    -webkit-transform var(--rnly-dur-collapse) var(--rnly-ease-ios);
  will-change: transform, opacity;
  -webkit-transform-origin: top center;
  -ms-transform-origin: top center;
  transform-origin: top center;
}
html[data-rnly-mb-top-collapsed] .rnly-search-shell {
  -webkit-transform: translateY(-8px);
  -ms-transform: translateY(-8px);
  transform: translateY(-8px);
  opacity: 0;
  pointer-events: none;
}

/* ════════════════════════════════════════════════════════════════
   MOBILE TOP BAR
   ────────────────────────────────────────────────────────────────
   Fixed top header for mobile devices. Logo on the left, bell +
   hamburger on the right. Hidden on desktop — `html.is-mobile`
   gates display so the markup is a no-op outside mobile viewports.
   ════════════════════════════════════════════════════════════════ */

/* Top-bar height token — referenced by:
     • the body padding that reserves space below the fixed bar
     • the account nav-tabs strip's `top` anchor
     • any future fixed chrome that needs to clear the top-bar
   Single source of truth so geometry tweaks here propagate
   without manual edits everywhere. */
html.is-mobile {
  --rnly-mb-topbar-h: calc(64px + env(safe-area-inset-top, 0px));
}

/* Mobile chrome reconciliation:
     • Standard pages: hide the desktop app-chrome and reserve top
       space so the page content scrolls beneath the new fixed
       mobile top bar.
     • Hero pages (home, etc.): KEEP the hero chrome (it owns the
       page-specific search/credits/CTAs), and ALSO show the new
       mobile top bar — but in a transparent "glass" variant with
       white icons so it floats over the hero image. The in-hero
       nav's right-side actions (bell + avatar) are hidden on
       mobile so the two don't duplicate. */
html.is-mobile .app-chrome:not(.app-chrome--hero) { display: none; }
/* A203 tq-9342 (isabella 900073437): OPT-IN (.app-chrome--sr-title) for a page whose ONE h1 is the desktop chrome's
   h1.page-header-title and whose mobile top bar shows no title (Billing / Vendor). Instead of display:none, the chrome is
   visually hidden and visibility:hidden (no control in it is shown, focusable or announced), and only that h1 is
   visibility:visible: announced, never shown. Unopted pages keep display:none above. */
html.is-mobile .app-chrome.app-chrome--sr-title:not(.app-chrome--hero) {
  display: block;
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
  visibility: hidden;
}
/* !important: beats this file's html.is-mobile .topbar-left > :not(a[aria-label="Reinly home"]) { display: none !important } */
html.is-mobile .app-chrome.app-chrome--sr-title:not(.app-chrome--hero) .topbar-left .page-header-wrapper { display: block !important; }
html.is-mobile .app-chrome.app-chrome--sr-title:not(.app-chrome--hero) .page-header-breadcrumb { display: none; }
html.is-mobile .app-chrome.app-chrome--sr-title:not(.app-chrome--hero) h1.page-header-title { visibility: visible; }
html.is-mobile .app-shell:not(.has-hero-chrome) {
  padding-top: var(--rnly-mb-topbar-h);
}
/* Pages that render the mobile inner-tabs pill strip (seller +
   buyer area, account profile) reserve extra top space so the
   page content scrolls beneath BOTH the top bar AND the strip
   PLUS a comfortable 24px breathing band so the first row of
   content (typically a small uppercase eyebrow caption) isn't
   nipped at the strip's bottom edge. Strip height ≈ 49px
   (8 padding + 36 pill + 5 padding) → reserve 80px. */
html.is-mobile .app-shell.has-acct-nav {  /* tq-8210: a dead :has() partner selector (nothing rendered its target) was dropped from this list */
  padding-top: calc(var(--rnly-mb-topbar-h) + 80px);
}

/* Seller area on mobile: move the topbar / bottom-nav clearance from
   `.app-shell` (outer) to `[data-seller-content]` (the actual scroll
   container). Putting the offset on the scroll surface guarantees the
   first listing card and the last entry both sit fully between the
   fixed chrome — even when the content is swapped in via the seller
   tab-content fetch (which can otherwise bypass outer-shell padding
   briefly during the swap and let cards appear under the top bar). */
html.is-mobile .app-shell.has-seller-content {
  padding-top: 0;
  padding-bottom: 0;
}
html.is-mobile [data-seller-content] {
  padding-top: calc(var(--rnly-mb-topbar-h) + 8px);
  padding-bottom: calc(var(--rnly-mb-nav-h) + 8px);
}

/* Seller area: the desktop `_SellerHeader` ribbon (`.seller-topbar`
   with logo / nav-tabs / switch-to-buying / bell / avatar) is
   replaced on mobile by the new mobile top bar + bottom nav. Hide
   it entirely so the page content scrolls under the fixed mobile
   top bar without a duplicate header above. */
html.is-mobile .seller-topbar { display: none !important; }
/* Hide the in-hero left + right actions on mobile — the new
   mobile top bar takes over the brand surface (left) and the
   bell + account-menu surface (right). The hero nav's center
   (search pill) stays intact since it's the page's primary CTA. */
html.is-mobile .rnly-hero__nav-left,
html.is-mobile .rnly-hero__nav-right { display: none; }

/* ── Mobile-only utilities ─────────────────────────────────────── */
.rnly-mb-only { display: none; }
html.is-mobile .rnly-mb-only { display: initial; }
html.is-mobile .rnly-desktop-only { display: none !important; }

/* ════════════════════════════════════════════════════════════════
   ACCOUNT / PROFILE NAV — mobile-only accordion tab strip
   ────────────────────────────────────────────────────────────────
   Desktop renders the nav as a vertical sticky sidebar (default
   markup). On mobile we collapse it into a sticky horizontal row
   anchored to the RIGHT edge:
     • Idle items render as icon-only pills (36×36 circles).
     • The active item expands LEFTWARD, revealing its label to
       the left of its icon.
     • All other items collapse back to icon-only when the active
       changes — only one label is ever visible.
   Animation: the label has its own `max-width` transition so the
   pill width grows/shrinks smoothly as the active flips. The
   right edge of the strip is anchored via `justify-content:
   flex-end` so the active item's icon stays in the same x
   position when expanded; only its label slides out leftward.
   The same `.is-active` class the panel-switching JS toggles
   drives all of this — no JS change required.
   ════════════════════════════════════════════════════════════════ */
/* Strip wrapper — fixed-position bar pinned just below the
   mobile top bar. Visual treatment matches the existing
   `.nav-tabs-ribbon--pill` segmented-control pattern shipped
   in `tab.css`: subtle gray strip background, transparent idle
   pills that visually blend into the strip, and a white active
   pill with a soft shadow that lifts above the gray track.
   `position: fixed` anchors the strip to the viewport so it
   stays put regardless of which ancestor creates a scroll/clip
   context. */
html.is-mobile .rnly-acct-nav-wrap {
  position: fixed;
  top: var(--rnly-mb-topbar-h);
  left: 0;
  right: 0;
  /* Sits BELOW the mobile top bar (z-220) but ABOVE the chrome
     (z-200) so the account-tabs strip stays anchored visually
     beneath the top bar on every page. */
  z-index: var(--z-acct-nav);
  margin: 0;
  /* Optically balanced padding: 8px on top + sides, 5px on
     bottom. Even with `box-sizing: border-box` and matching
     numerical padding, the bottom of the strip reads as
     "heavier" because the gray bg ends abruptly into white
     content below — the eye perceives the gray-to-white edge
     as additional vertical weight. Roughly halving the bottom
     padding (5px) gives the strip a visually balanced
     appearance against the page beneath it. */
  padding: 8px 8px 5px;
  /* tq-9546 (A289): in landscape the strip clears the notch / Dynamic Island like the page content and the top bar
     (max(): 8px stays the floor, so portrait and desktop are unchanged). Its LEFT side is always the viewport's (left: 0). */
  padding-left: max(8px, env(safe-area-inset-left, 0px));
  background: var(--bg-tab-ribbon, #f5f5f4);
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
/* Its RIGHT side reaches the viewport's right edge only below the markup's md breakpoint: from 768px (`md:w-64` on the strip,
   every notched phone in landscape) it is 256px wide on the left, and a right inset would only squeeze its pills. */
@media (max-width: 767.98px) {
  html.is-mobile .rnly-acct-nav-wrap {
    padding-right: max(8px, env(safe-area-inset-right, 0px));
  }
}
/* Reserve space at the top of the page so the fixed strip
   doesn't overlap the panel content. The strip is roughly 52px
   tall (6 padding + 36 pill + 8 padding + 1 border + 1 buffer),
   and we add it on top of the existing top-bar padding the
   parent app-shell already reserves via mobile-shell. The
   panel content gets a `margin-top` instead of body padding so
   only the profile page is affected. */
html.is-mobile .rnly-acct-nav-wrap + main { margin-top: 64px; }
/* Reset the desktop `gap-10` (40px) on mobile so the panel content
   starts right under the strip instead of leaving a big empty
   band. ALSO clip horizontal overflow on the parent flex column
   so a wide child (e.g. a long list with no min-width: 0) can't
   force a body-level horizontal scroll. */
html.is-mobile .flex:has(> .rnly-acct-nav-wrap) {
  gap: 0 !important;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile .rnly-acct-nav-wrap + main {
  margin-top: 12px;
  min-width: 0;
  max-width: 100%;
  overflow-x: hidden;
}

html.is-mobile .rnly-acct-nav {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
  -ms-flex-direction: row;
  flex-direction: row;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  /* Right-anchor the cluster — that's the visual rule the user
     specced ("icons stacked on the right, expands toward the
     left"). The active label's reveal grows the active item to
     the LEFT, pushing siblings leftward without ever moving the
     active item's right edge. */
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
  gap: 2px;
  padding: 0;
}

html.is-mobile .rnly-acct-nav__item {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  /* `flex-direction: row` so the icon paints BEFORE the label
     (icon on the left, label on the right of the pill). Reading
     order matches DOM order. */
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
  -ms-flex-direction: row;
  flex-direction: row;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: start;
  -ms-flex-pack: start;
  justify-content: flex-start;
  /* Idle pill = perfect 36×36 circle, TRANSPARENT background so
     it visually blends into the gray strip (matches the
     `.nav-tabs-ribbon--pill` design — `--bg-tab-ribbon-item: 0`).
     Only the icon shows on idle; the white active pill is what
     marks the selection. */
  width: auto;
  height: 36px;
  padding: 0 9px;
  gap: 0;
  border-radius: 9999px;
  background: transparent;
  color: var(--text-secondary, rgb(82 82 82));
  text-decoration: none;
  border: 1px solid transparent;
  overflow: hidden;
  /* No padding transition — padding stays constant at 9px each
     side. The only thing that animates the pill's width is the
     label's `grid-template-columns`. Holding padding still means
     the icon's x-position never jitters during expand/collapse. */
  -webkit-transition:
    background-color 240ms cubic-bezier(0.32, 0.72, 0, 1),
    color 240ms cubic-bezier(0.32, 0.72, 0, 1),
    border-color 240ms cubic-bezier(0.32, 0.72, 0, 1),
    -webkit-box-shadow 240ms cubic-bezier(0.32, 0.72, 0, 1),
    -webkit-transform 160ms ease;
  transition:
    background-color 240ms cubic-bezier(0.32, 0.72, 0, 1),
    color 240ms cubic-bezier(0.32, 0.72, 0, 1),
    border-color 240ms cubic-bezier(0.32, 0.72, 0, 1),
    -webkit-box-shadow 240ms cubic-bezier(0.32, 0.72, 0, 1),
    -webkit-transform 160ms ease;
  transition:
    background-color 240ms cubic-bezier(0.32, 0.72, 0, 1),
    color 240ms cubic-bezier(0.32, 0.72, 0, 1),
    border-color 240ms cubic-bezier(0.32, 0.72, 0, 1),
    box-shadow 240ms cubic-bezier(0.32, 0.72, 0, 1),
    transform 160ms ease;
  transition:
    background-color 240ms cubic-bezier(0.32, 0.72, 0, 1),
    color 240ms cubic-bezier(0.32, 0.72, 0, 1),
    border-color 240ms cubic-bezier(0.32, 0.72, 0, 1),
    box-shadow 240ms cubic-bezier(0.32, 0.72, 0, 1),
    transform 160ms ease,
    -webkit-box-shadow 240ms cubic-bezier(0.32, 0.72, 0, 1),
    -webkit-transform 160ms ease;
}
html.is-mobile .rnly-acct-nav__item:active { -webkit-transform: scale(0.94); -ms-transform: scale(0.94); transform: scale(0.94); }
/* tq-9412 (A250, isabella 900074485 (a)): on a coarse pointer each tab gets a 44px-tall HIT AREA while its visible 36px pill
   stays exactly as designed (the A247 toggle pattern; NOT a widening of .dropdown-item, which A247 scoped to menus).
   Vertically it grows to 44 freely; sideways only to the midpoint of the gap to each neighbour (2px gap here, 6px on the
   tablet strip below), so neighbouring hit areas never overlap and a tap lands on the nearest tab. The pill's own
   `overflow: hidden` would clip that area: on a coarse pointer it is `visible` (measured: nothing inside a pill
   overflows it; the label clips itself in .rnly-acct-nav__label-text). Fine pointer unchanged. */
@media (pointer: coarse) {
  html.is-mobile .rnly-acct-nav__item {
    position: relative;
    overflow: visible;
  }
  html.is-mobile .rnly-acct-nav__item::before {
    content: "";
    position: absolute;
    /* measured from the PADDING box (inside the pill's 1px border): 4px above and 5px below the pill, so 44 clear
       pixels remain where the touch top bar (taller than --rnly-mb-topbar-h under a finger) covers the strip's first
       pixel; the bottom edge is the strip's own (its 5px padding). Sideways 1px + the border = half the 2px gap. */
    inset: calc((36px - 44px) / 2 - 1px) -2px calc((36px - 44px) / 2 - 2px);
  }
}
html.is-mobile .rnly-acct-nav__item .dropdown-icon {
  /* Icon is fixed-width and sits on the left of the pill. We
     zero out the surrounding margins so a collapsed pill has
     zero empty padding on either side of the icon beyond the
     pill's own 9px symmetric edge padding.
     `line-height: 1` is critical: the FontAwesome glyph ships
     with a default ~1.4 line-height which adds invisible
     descender padding BELOW the icon. With centered flex
     alignment, that descender padding optically pulls the icon
     UP (closer to the top edge of the pill), making the
     visible "padding below the pills" read as larger than
     the matching `padding-top`. Pinning to 1 collapses that
     phantom descender so the icon sits geometrically centered
     and the strip's 8/8 padding LOOKS 8/8. */
  margin: 0;
  width: 18px;
  text-align: center;
  font-size: 14px;
  line-height: 1;
  color: inherit;
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
}
html.is-mobile .rnly-acct-nav__item .dropdown-icon i { line-height: 1; }

/* Label cell uses the modern grid-template-columns trick:
     • Idle  → grid-template-columns: 0fr (cell is exactly 0 wide)
     • Active → grid-template-columns: 1fr (cell sizes to content)
   Interpolating between `0fr` and `1fr` gives a perfectly smooth
   width animation tied to the actual text content's intrinsic
   width — no `max-width` overshoot, no measurement JS, no
   per-frame layout cost beyond a single grid-track resize. */
html.is-mobile .rnly-acct-nav__label {
  display: grid;
  grid-template-columns: 0fr;
  margin: 0;
  padding: 0;
  -webkit-transition: grid-template-columns 320ms cubic-bezier(0.32, 0.72, 0, 1);
  transition: grid-template-columns 320ms cubic-bezier(0.32, 0.72, 0, 1);
  transition: grid-template-columns 320ms cubic-bezier(0.32, 0.72, 0, 1), -ms-grid-columns 320ms cubic-bezier(0.32, 0.72, 0, 1);
}
html.is-mobile .rnly-acct-nav__label-text {
  overflow: hidden;
  white-space: nowrap;
  min-width: 0;
  font-size: 13px;
  font-weight: 600;
  letter-spacing: -0.005em;
  line-height: 1;
  /* Idle: zero left padding so the inner cell is truly zero
     width. Active: 8px left pad gives breathing room between
     icon and label. The padding-left transition runs at the
     same duration/curve as the cell width above, so they tween
     together as one motion. */
  padding-left: 0;
  opacity: 0;
  -webkit-transition:
    padding-left 320ms cubic-bezier(0.32, 0.72, 0, 1),
    opacity 220ms cubic-bezier(0.32, 0.72, 0, 1);
  transition:
    padding-left 320ms cubic-bezier(0.32, 0.72, 0, 1),
    opacity 220ms cubic-bezier(0.32, 0.72, 0, 1);
}

/* Active: pill flips to a WHITE background that lifts above the
   gray strip via a soft shadow — exact same chrome the
   `.nav-tabs-ribbon--pill .nav-link.active` uses elsewhere in
   the app (`--bg-tab-ribbon-active`). Icon stays a regular
   color (no emerald accent) so the active pill reads as a
   clean iOS segmented-control selection, not a colored CTA.
   `flex: 1 1 auto` makes the active pill take ALL the remaining
   horizontal space in the strip — i.e. (strip width) minus (the
   four idle 36px circles + gaps). The other (icon-only) pills
   stay at their natural width and pack to the right; the active
   pill fills the leftover. */
html.is-mobile .rnly-acct-nav__item.is-active {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto;
  background: var(--bg-tab-ribbon-active, #fff);
  color: var(--text-primary, rgb(24 24 27));
  border-color: transparent;
  -webkit-box-shadow: 0 1px 3px rgba(15, 23, 42, 0.08), 0 1px 2px rgba(15, 23, 42, 0.04);
  box-shadow: 0 1px 3px rgba(15, 23, 42, 0.08), 0 1px 2px rgba(15, 23, 42, 0.04);
}
html.is-mobile .rnly-acct-nav__item.is-active .dropdown-icon {
  color: var(--text-primary, rgb(24 24 27));
}
html.is-mobile .rnly-acct-nav__item.is-active .rnly-acct-nav__label {
  grid-template-columns: 1fr;
}
html.is-mobile .rnly-acct-nav__item.is-active .rnly-acct-nav__label-text {
  padding-left: 8px;
  opacity: 1;
}

/* ════════════════════════════════════════════════════════════════
   PROFILE CARD — desktop & mobile layouts
   ────────────────────────────────────────────────────────────────
   Desktop: avatar + name on the left, Edit Profile pinned to the
            right of the same row (matches existing visual rhythm).
   Mobile : avatar + name + meta stack as one block at the top;
            Edit Profile moves BELOW them as a wider button so a
            long display name can't push the action into a wrap.
   ════════════════════════════════════════════════════════════════ */
.rnly-profile-card {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 20px;
}
.rnly-profile-card__id {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 20px;
  min-width: 0;
}
.rnly-profile-card__avatar {
  width: 80px;
  height: 80px;
  border-radius: 9999px;
  -o-object-fit: cover;
  object-fit: cover;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.rnly-profile-card__avatar--initials {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  font-size: 24px;
  font-weight: 600;
  background-color: var(--utility-emerald-800);
  color: var(--alpha-white-100);
}
.rnly-profile-card__text { min-width: 0; }
.rnly-profile-card__name {
  font-size: 24px;
  font-weight: 600;
  color: var(--text-primary);
  margin: 0;
  letter-spacing: -0.01em;
  line-height: 1.15;
}
.rnly-profile-card__meta {
  font-size: 14px;
  color: var(--text-secondary);
  font-weight: 500;
  margin: 4px 0 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
}
.rnly-profile-card__meta--muted { color: var(--text-tertiary); }
.rnly-profile-card__edit { -ms-flex-negative: 0; flex-shrink: 0; }

/* Mobile: stack the id block then the Edit Profile button below. */
html.is-mobile .rnly-profile-card {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: stretch;
  -ms-flex-align: stretch;
  align-items: stretch;
  gap: 16px;
}
html.is-mobile .rnly-profile-card__id { gap: 14px; }
html.is-mobile .rnly-profile-card__avatar {
  width: 64px;
  height: 64px;
}
html.is-mobile .rnly-profile-card__avatar--initials { font-size: 20px; }
html.is-mobile .rnly-profile-card__name { font-size: 20px; }
html.is-mobile .rnly-profile-card__edit {
  width: 100%;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}

/* Top padding on every detail panel so the first content row sits
   comfortably below the fixed nav-tabs strip. The panels are
   `<section id="panel-*">` siblings inside `<main>` — only the
   visible one paints, so adding generic top padding to all panels
   gives every section the same comfortable inset. */
html.is-mobile main > section[id^="panel-"] {
  padding-top: 24px;
}

/* ════════════════════════════════════════════════════════════════
   FLOATING ACTION BUTTON (FAB)
   ────────────────────────────────────────────────────────────────
   Mobile-only. Pinned to the bottom-right of the viewport,
   lifted ABOVE the bottom mobile nav so the action stays
   thumb-reachable while the page scrolls. White surface + emerald
   plus icon for the create-listing entry point on the seller
   listings page; reusable for any future "create" surface that
   needs a primary mobile-only CTA.
   ════════════════════════════════════════════════════════════════ */
.rnly-mb-fab {
  display: none; /* desktop hides it — inline card stays as the entry */
}
html.is-mobile .rnly-mb-fab {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  position: fixed;
  /* Sit just above the bottom mobile nav (var(--rnly-mb-nav-h) =
     56px + safe-area). +16px breathing band so the FAB doesn't
     kiss the nav's top edge. */
  right: 20px;
  bottom: calc(var(--rnly-mb-nav-h, 56px) + var(--rnly-mb-fab-gap, 16px));
  /* Above the bottom nav (z-215) but below modals (z-1050+) so
     opening a modal correctly covers the FAB. */
  z-index: var(--z-mobile-fab);
  width: var(--rnly-mb-fab-size, 56px);
  height: var(--rnly-mb-fab-size, 56px);
  border-radius: 9999px;
  border: 1px solid var(--border-primary, rgb(229 231 235));
  background: var(--bg-primary, #fff);
  color: var(--utility-emerald-700, rgb(4 120 87));
  font-size: 22px;
  cursor: pointer;
  -webkit-box-shadow:
    0 12px 24px -8px rgba(15, 23, 42, 0.18),
    0 4px 8px -2px rgba(15, 23, 42, 0.10);
  box-shadow:
    0 12px 24px -8px rgba(15, 23, 42, 0.18),
    0 4px 8px -2px rgba(15, 23, 42, 0.10);
  -webkit-transition:
    background-color 200ms ease,
    -webkit-transform 160ms cubic-bezier(0.32, 0.72, 0, 1),
    -webkit-box-shadow 200ms ease;
  transition:
    background-color 200ms ease,
    -webkit-transform 160ms cubic-bezier(0.32, 0.72, 0, 1),
    -webkit-box-shadow 200ms ease;
  transition:
    transform 160ms cubic-bezier(0.32, 0.72, 0, 1),
    box-shadow 200ms ease,
    background-color 200ms ease;
  transition:
    transform 160ms cubic-bezier(0.32, 0.72, 0, 1),
    box-shadow 200ms ease,
    background-color 200ms ease,
    -webkit-transform 160ms cubic-bezier(0.32, 0.72, 0, 1),
    -webkit-box-shadow 200ms ease;
  -webkit-tap-highlight-color: transparent;
}
html.is-mobile .rnly-mb-fab:hover {
  background: var(--bg-primary, #fff);
  -webkit-box-shadow:
    0 16px 32px -8px rgba(15, 23, 42, 0.22),
    0 6px 12px -2px rgba(15, 23, 42, 0.12);
  box-shadow:
    0 16px 32px -8px rgba(15, 23, 42, 0.22),
    0 6px 12px -2px rgba(15, 23, 42, 0.12);
}
html.is-mobile .rnly-mb-fab:active {
  -webkit-transform: scale(0.94);
  -ms-transform: scale(0.94);
  transform: scale(0.94);
}
html.is-mobile .rnly-mb-fab i { line-height: 1; }

/* If the bottom nav is hidden (keyboard up, page opt-out), drop
   the FAB further down so it doesn't float in dead space. */
html.is-mobile[data-rnly-mb-nav-hidden] .rnly-mb-fab,
html[data-rnly-mb-nav-collapsed].is-mobile .rnly-mb-fab {
  bottom: calc(env(safe-area-inset-bottom, 0px) + var(--rnly-mb-fab-gap, 16px));
}

/* tq-9535 (A282, USER bug): the FAB covered the LAST listing card's price / visibility row: the shell reserves only the nav,
   and the FAB floats --rnly-mb-fab-gap above it. A populated grid on a page that shows the FAB ends with the FAB's share
   (--rnly-mb-fab-clearance, in place of the grid's own 1.5rem bottom gutter) on top of the scroll container's nav reserve
   (nav-h + 8px, unchanged), so the last card ends gap + 8px (24px) above the FAB's top: its usual gutter, now above the FAB.
   With the nav hidden / collapsed the FAB drops lower (the rule above) and this clearance still clears it (the nav reserve
   is not animated away: see the bottom-nav comment). :has() follows the grid as record-committed re-renders it: an emptied
   grid (or one with only the Create card) gets no extra band, and no FAB (a seller not yet eligible) means no clearance.
   Owner: this shell file, because the FAB and the nav reserve it builds on live here (one rule, no app override). */
html.is-mobile [data-seller-content]:has(.rnly-mb-fab) .seller-card-grid:has(> .card--listing-seller:not(.card--listing-seller--add)) {
  padding-bottom: var(--rnly-mb-fab-clearance);
}

/* Hide the inline "Create listing" card on mobile — the FAB
   above replaces it as the primary entry point on PWA, so
   showing both is redundant clutter. The card stays visible
   on desktop where the FAB itself is hidden. */
html.is-mobile #btn-create-listing { display: none; }

/* ── Horse facts (breed / color / age / height / gender) ──────
   Desktop renders this list inline with `·` separators.
   Mobile stacks each fact on its own row so a long combination
   (e.g. breed + 17.0 hh height + age + color) doesn't wrap
   into a messy multi-line bullet list. The dot separators are
   hidden because they read as confusing leading punctuation
   when each fact is on its own line. */
html.is-mobile .rnly-horse-facts {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
  gap: 4px !important;
}
html.is-mobile .rnly-horse-facts__sep { display: none; }
html.is-mobile .rnly-horse-facts__item { line-height: 1.35; }

/* ════════════════════════════════════════════════════════════════
   CREATE-LISTING WIZARD — Step 1 mobile field stacking
   ────────────────────────────────────────────────────────────────
   On desktop the wizard's "Horse details" step pairs Breed +
   Color, then Age + Height, in 2-col grids so the form fits
   compactly inside the modal. On a phone-width viewport those
   2-col grids squeeze each input into ~half the modal width,
   making the breed dropdown / age counter feel cramped and
   the height column's left-border divider read as visual
   noise. We collapse both grids to a single column on mobile
   so each field sits on its own row.
   ════════════════════════════════════════════════════════════════ */
html.is-mobile #rnly-wizard-modal .grid.grid-cols-2 {
  grid-template-columns: minmax(0, 1fr);
  gap: 16px !important;
}
/* Strip the vertical divider that visually separated Age and
   Height when they sat side-by-side — once stacked, the line
   reads as orphan padding instead of a column rule. Padding
   resets too so the second field doesn't keep the desktop
   `padding-left: 2rem`. */
html.is-mobile #rnly-wizard-modal .flex.flex-col.items-center[style*="border-left"] {
  border-left: 0 !important;
  padding-left: 0 !important;
}

/* ════════════════════════════════════════════════════════════════
   CREATE-LISTING WIZARD — Stepper position responsive
   ────────────────────────────────────────────────────────────────
   The wizard's `.wizard-modal-stepper` lives in the DOM directly
   under the modal header so PWA/mobile users see their progress
   at the TOP of the modal (native iOS form-wizard pattern).
   On desktop + tablet we want it at the BOTTOM instead — the
   horizontal stepper visually anchors to the action footer.
   `.modal-container` is `display: flex; flex-direction: column`,
   so we just bump the stepper's `order` to push it past every
   sibling on non-mobile viewports. The DOM stays the same so
   the wizard JS bindings (`#wizard-stepper-bar`,
   `[data-stepper-section]`, etc.) don't change.
   ════════════════════════════════════════════════════════════════ */
html:not(.is-mobile) #rnly-wizard-modal .wizard-modal-stepper {
  -webkit-box-ordinal-group: 100;
  -ms-flex-order: 99;
  order: 99;
  /* Pull the bottom border to the TOP edge instead so it acts
     as a separator from the footer above it, matching the
     original visual hierarchy. */
  border-bottom: 0;
  border-top: 1px solid var(--border-primary);
}

/* ════════════════════════════════════════════════════════════════
   TABLET-WIDTH RESPONSIVE TUNING
   ────────────────────────────────────────────────────────────────
   Phones (≤640px): right-anchored accordion (icon-only idle, the
     active pill expands LEFTWARD revealing its label).
   Tablets (641-1024px): switch to a full-width strip — every
     pill carries icon + label permanently and the cluster
     distributes evenly across the strip so nothing gets clipped
     even with 5-6 tabs. Content panels also get a comfortable
     centered max-width on tablets so long lines don't sprawl.
   Desktop (≥1025px): existing sidebar / ribbon UI takes over;
     the mobile pill strip is hidden by `html.is-mobile` not
     matching.
   ════════════════════════════════════════════════════════════════ */
@media (min-width: 641px) and (max-width: 1024px) {
  html.is-mobile .rnly-acct-nav {
    /* Distribute pills evenly across the full strip width so
       none of them get clipped at the right edge. */
    -webkit-box-pack: stretch;
    -ms-flex-pack: stretch;
    justify-content: stretch;
    gap: 6px;
  }
  html.is-mobile .rnly-acct-nav__item {
    /* Each pill flexes to claim equal width across the strip.
       The label is always visible on tablet (no accordion
       collapse), so the pill doesn't need to grow on activation. */
    -webkit-box-flex: 1;
    -ms-flex: 1 1 0px;
    flex: 1 1 0;
    min-width: 0;
    padding: 0 12px;
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
  }
  html.is-mobile .rnly-acct-nav__label {
    /* Tablet: label always visible. Override the grid-template
       trick used on phones where idle = 0fr. */
    grid-template-columns: 1fr;
  }
  html.is-mobile .rnly-acct-nav__label-text {
    padding-left: 8px;
    opacity: 1;
    /* Tighten the font slightly so labels fit at tablet widths
       without truncation across 5-6 pills. */
    font-size: 12.5px;
  }
  /* Active pill no longer flex-grows past its sibling pills —
     each is already equal width. Just keep the white card +
     shadow + emerald icon treatment so the active is still
     distinguishable. */
  html.is-mobile .rnly-acct-nav__item.is-active {
    -webkit-box-flex: 1;
    -ms-flex: 1 1 0px;
    flex: 1 1 0;
  }
  /* tq-9412 (A250): the tablet strip's gap is 6px, so the hit area reaches 3px sideways (its midpoint) */
  @media (pointer: coarse) {
    html.is-mobile .rnly-acct-nav__item::before {
      inset: calc((36px - 44px) / 2 - 1px) -4px calc((36px - 44px) / 2 - 2px);   /* half the 6px gap + the 1px border */
    }
  }

  /* Centered content on tablet — ONLY for pages that opt-in via
     the account-nav-tabs pill strip (currently /Account/Profile).
     Earlier we centered every `.panel-content > *` globally, but
     that captured the home-page wrapper and clamped its
     listings rails to 760px, making cards appear cut off well
     before the natural carousel edge. Scope the rule via
     `body.has-acct-nav` (set by _Layout for Account/Profile) so the constraint only fires
     where it was originally intended. */
  html.is-mobile body.has-acct-nav .panel-content > *,
  html.is-mobile body.has-acct-nav main > section[id^="panel-"] {
    max-width: 760px;
    margin-left: auto;
    margin-right: auto;
  }
}

/* ════════════════════════════════════════════════════════════════
   PANEL FOOTER — sticky action bar (PWA / mobile only)
   ────────────────────────────────────────────────────────────────
   Mobile + PWA: the footer pins to the bottom of the panel scroll
   viewport via `position: sticky` so the primary save/update/
   confirm action stays in view while the user scrolls.
   Desktop : intentionally a no-op styling-wise — the footer
   markup renders as a plain block with the original border-top +
   spacing it always had on desktop, exactly as it was before.
   Every rule below is scoped under `html.is-mobile` so desktop
   layout is untouched.
   ════════════════════════════════════════════════════════════════ */

/* Desktop: match the original `pt-6 mt-6 border-t rnly-border-primary`
   look that the inline save block used before — so panels stay
   visually identical to before this refactor. */
.rnly-acct-panel-footer {
  margin-top: 24px;
  padding-top: 24px;
  border-top: 1px solid var(--border-primary, rgb(229 231 235));
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 10px;
}
.rnly-acct-panel-footer__hint {
  margin-right: auto;
  font-size: 12px;
  color: var(--text-tertiary);
}
.rnly-acct-panel-footer__error {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  padding: 8px 12px;
  border-radius: 8px;
  font-size: 12px;
  background-color: var(--bg-danger-subtle);
  color: var(--text-danger-solid);
  border: 1px solid var(--border-danger-subtle);
}
.rnly-acct-panel-footer__error[hidden] { display: none; }

/* Mobile / PWA: turn the footer into a sticky action tray pinned
   to the bottom of the panel scroll viewport. Edge-to-edge white
   bar with a top border + soft drop-shadow so it lifts off the
   content above. Safe-area-aware bottom padding clears the iOS
   home indicator. Action buttons flex to fill width so they're
   thumb-comfortable. */
html.is-mobile .rnly-acct-panel-footer {
  position: sticky;
  bottom: 0;
  left: 0;
  right: 0;
  z-index: 10;
  margin: 24px -16px 0;
  padding: 12px 16px calc(12px + env(safe-area-inset-bottom, 0px));
  background: var(--bg-primary, #fff);
  border-top: 1px solid var(--border-primary, rgb(244 244 245));
  -webkit-box-shadow: 0 -8px 24px -16px rgba(15, 23, 42, 0.08);
  box-shadow: 0 -8px 24px -16px rgba(15, 23, 42, 0.08);
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
}
html.is-mobile .rnly-acct-panel-footer > .btn-primary,
html.is-mobile .rnly-acct-panel-footer > .btn-secondary,
html.is-mobile .rnly-acct-panel-footer > .btn-ghost {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto;
  min-width: 0;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}

/* ════════════════════════════════════════════════════════════════
   PHOTO TOUR — Mobile layout
   ────────────────────────────────────────────────────────────────
   On mobile, the horizontal category strip at the top is replaced
   with a vertical left rail containing each category + a count
   badge. Tapping an item scrolls the right panel to that section
   (handled by the existing pt-category-chip click handler).
   Each section's title moves above its mosaic and becomes sticky
   so the user always knows which category they're looking at.
   ════════════════════════════════════════════════════════════════ */

/* Default — rail + toggles + backdrop + toolbar hidden on desktop.
   The horizontal category strip handles navigation there. */
.pt-mobile-rail,
.pt-mobile-rail-backdrop,
.pt-mobile-rail__toggle,
.pt-mobile-videos-toggle,
.pt-mobile-toolbar { display: none; }

/* Videos toggle button — visible on mobile only. Shares the same
   pill geometry as the Categories toggle. Active state uses the
   emerald palette so the user reads "filter is on" at a glance. */
html.is-mobile .pt-mobile-videos-toggle {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
}
html.is-mobile .pt-mobile-videos-toggle.is-active {
  background: var(--utility-emerald-50, #ecfdf5);
  color: var(--utility-emerald-700, #047857);
  border-color: var(--utility-emerald-200, #a7f3d0);
}

/* ── "Videos only" filter mode ──
   The body of the photo tour gets `.is-videos-only` from JS when
   the Videos button is active. CSS hides:
     • Sections that contain no [data-media-type="1"] items
     • Rail items that don't carry the .has-video class
     • Rail group labels that don't carry .has-video-group
   The :has() selector is supported in all evergreen browsers we
   target. */
html.is-mobile .is-videos-only [id^="pt-section-"]:not(:has([data-media-type="1"])) {
  display: none !important;
}
html.is-mobile .is-videos-only .pt-mobile-rail__item:not(.has-video) {
  display: none !important;
}
html.is-mobile .is-videos-only .pt-mobile-rail__group-label:not(.has-video-group) {
  display: none !important;
}

/* Mobile secondary toolbar — sits as a flex item directly below the
   modal-header inside the photo-tour overlay column. The overlay is
   `display: flex; flex-direction: column`, so the toolbar naturally
   stays fixed at the top while the modal-body scrolls underneath.
   Section titles inside the body use `position: sticky; top: 0` —
   that "top: 0" is relative to the scroll-body's viewport, which is
   already positioned below this toolbar. So sticky titles sit flush
   against the bottom edge of the toolbar as the user scrolls down,
   exactly the layered behaviour the user asked for. */
html.is-mobile .pt-mobile-toolbar {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
  padding: 8px 14px;
  background: #ffffff;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  z-index: 9;
}

html.is-mobile .pt-mobile-rail {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  /* 75vw with a sane min/max so the tray is comfortably wide on
     phones (~280px on a 375px screen) but doesn't take over the
     entire viewport on a tablet. */
  width: 75vw;
  min-width: 280px;
  max-width: 420px;
  background: #ffffff;
  border-right: 1px solid var(--border-primary, #e5e7eb);
  z-index: 12;
  /* Padding lives on the inner __body now so the sticky header
     sits flush at the top of the tray. */
  padding: 0;
  /* Slide-out tray: hidden off-screen by default, slides in when
     the toggle adds `.is-open`. Tap a category or the close button
     or the backdrop to close. */
  -webkit-transform: translateX(-100%);
  -ms-transform: translateX(-100%);
  transform: translateX(-100%);
  -webkit-transition: -webkit-transform 260ms cubic-bezier(0.32, 0.72, 0, 1);
  transition: -webkit-transform 260ms cubic-bezier(0.32, 0.72, 0, 1);
  transition: transform 260ms cubic-bezier(0.32, 0.72, 0, 1);
  transition: transform 260ms cubic-bezier(0.32, 0.72, 0, 1), -webkit-transform 260ms cubic-bezier(0.32, 0.72, 0, 1);
  -webkit-box-shadow: 4px 0 24px rgba(0, 0, 0, 0.12);
  box-shadow: 4px 0 24px rgba(0, 0, 0, 0.12);
}
html.is-mobile .pt-mobile-rail.is-open {
  -webkit-transform: translateX(0);
  -ms-transform: translateX(0);
  transform: translateX(0);
}

/* Tray header — modal-style strip with a centred title and a
   round X close button on the right. flex-none so it doesn't
   shrink under content; the body below scrolls independently. */
html.is-mobile .pt-mobile-rail__header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 12px;
  padding: 14px 14px 12px 18px;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
}
html.is-mobile .pt-mobile-rail__title {
  font-size: 15px;
  font-weight: 600;
  color: var(--text-primary, #18181b);
  margin: 0;
  letter-spacing: -0.005em;
}
html.is-mobile .pt-mobile-rail__close {
  width: 32px;
  height: 32px;
  border-radius: 9999px;
  border: 1px solid transparent;
  background: transparent;
  color: var(--text-primary, #18181b);
  cursor: pointer;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  font-size: 16px;
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  -webkit-transition: background-color 120ms ease, border-color 120ms ease;
  transition: background-color 120ms ease, border-color 120ms ease;
}
html.is-mobile .pt-mobile-rail__close:hover {
  background: var(--bg-primary-subtle, #f9fafb);
  border-color: var(--border-primary, #e5e7eb);
}

/* Tray body — scrolls within the tray; header stays put above. */
html.is-mobile .pt-mobile-rail__body {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  padding: 8px 0 16px;
  scrollbar-width: thin;
}

/* Backdrop scrim — dims the body content while the tray is open
   and closes the tray on tap. */
html.is-mobile .pt-mobile-rail-backdrop {
  display: block;
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, 0.32);
  opacity: 0;
  pointer-events: none;
  -webkit-transition: opacity 200ms ease;
  transition: opacity 200ms ease;
  z-index: 11;
}
html.is-mobile .pt-mobile-rail-backdrop[hidden] { display: none; }
html.is-mobile .pt-mobile-rail-backdrop.is-open {
  opacity: 1;
  pointer-events: auto;
}

/* Header toggle button — visible only on mobile. */
html.is-mobile .pt-mobile-rail__toggle {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
}

/* Hide the desktop horizontal strip on mobile (navigation moves to
   the slide-out tray). */
html.is-mobile #pt-category-strip { display: none; }

/* Body takes the FULL width on mobile — no margin-left for an
   always-visible rail; the rail floats over the body when open and
   the backdrop dims everything beneath it. */
html.is-mobile #pt-scroll-body {
  margin-left: 0;
}

/* Rail header line — small group label like "Movement & performance" */
.pt-mobile-rail__group-label {
  padding: 12px 12px 4px;
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-weight: 600;
  color: var(--text-quaternary, #9ca3af);
}
.pt-mobile-rail__group-label:first-child {
  padding-top: 6px;
}

/* Rail item — link wrapping label + count badge.
   `opacity: 1 !important` overrides the JS chip-active handler that
   writes inline `style.opacity = 0.55` on inactive chips (designed for
   the desktop horizontal strip where dimming reads as "muted thumbnail";
   the rail items don't need that fade — active state is communicated
   via background + left border + count-badge colour instead). */
.pt-mobile-rail__item {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 6px;
  padding: 9px 12px;
  font-size: 12.5px;
  color: var(--text-secondary, #4b5563);
  text-decoration: none;
  border-left: 3px solid transparent;
  -webkit-transition: background-color 0.15s ease, color 0.15s ease, border-left-color 0.15s ease;
  transition: background-color 0.15s ease, color 0.15s ease, border-left-color 0.15s ease;
  opacity: 1 !important;
}
.pt-mobile-rail__item:hover {
  background: var(--bg-primary-subtle, #f9fafb);
  color: var(--text-primary, #111);
}
.pt-mobile-rail__item.is-active {
  /* Active state communicates ONLY via the left border (matching
     the messages composer emerald) — no full-row background tint.
     Keeps the menu visually quiet while still flagging the
     selected category. The count pill below also picks up a
     soft emerald tint for a secondary cue. */
  background: transparent;
  color: var(--text-primary, #111);
  border-left-color: var(--utility-emerald-800, #065f46);
  font-weight: 600;
  /* Cancel the existing chip handler's inline opacity:1 push so the
     rail item visually wins over the desktop strip's hover state. */
  opacity: 1 !important;
}

.pt-mobile-rail__label {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* Sub-category items get extra left indent so the visual hierarchy
   reads as: GROUP HEADING / └ sub-category options. The 16px nudge
   is applied via padding-left on the link so the item's bg/border
   accent still spans the full width when active. */
html.is-mobile .pt-mobile-rail__item--sub {
  padding-left: 28px;
}

/* Single count pill — total media count for the category. Styled
   neutral by default; subtly tinted when the row is active (active
   state communicates primarily via the left border, not a full-row
   highlight). */
.pt-mobile-rail__count {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  font-size: 10.5px;
  font-weight: 600;
  background: var(--bg-secondary-subtle, #f3f4f6);
  color: var(--text-tertiary, #6b7280);
  padding: 2px 7px;
  border-radius: 9999px;
  min-width: 22px;
  text-align: center;
  line-height: 1.4;
}
.pt-mobile-rail__item.is-active .pt-mobile-rail__count {
  background: var(--alpha-emerald-900-10, rgba(6, 95, 70, 0.10));
  color: var(--utility-emerald-800, #065f46);
}

/* ── Section restructuring on mobile ──
   Existing markup wraps each section in `<div class="flex gap-8" style="align-items: flex-start;">`
   with the title column at width:38% + position:sticky + min-width:180px.
   On mobile we stack vertically: title above mosaic, title sticky to the
   top of the scroll body so it stays visible as the photos scroll past.
   Inline styles on the section need !important to win. */
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 {
  -webkit-box-orient: vertical !important;
  -webkit-box-direction: normal !important;
  -ms-flex-direction: column !important;
  flex-direction: column !important;
  gap: 10px !important;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-shrink-0:first-child {
  width: 100% !important;
  min-width: 0 !important;
  position: sticky !important;
  top: 0 !important;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

/* Body wrapper on mobile: zero side padding so the sticky category
   titles can run edge-to-edge. The photo mosaic gets its own
   left/right inset below — that's the "padding inset for images,
   edge-to-edge titles" split the user asked for. */
html.is-mobile #pt-scroll-body .max-w-5xl {
  padding-left: 0 !important;
  padding-right: 0 !important;
  padding-top: 0 !important;
  padding-bottom: 24px !important;
}

/* Reduce the bottom-padding gap between sections on mobile (default
   3rem reads as wasteful when stacked tightly). */
html.is-mobile #pt-scroll-body [id^="pt-section-"] {
  padding-bottom: 1.5rem !important;
  margin-bottom: 1rem !important;
}

/* Compact section title on mobile — h3 default is 2xl (24px) which is
   too big for a sticky header bar on a phone. */
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

/* Mosaic on mobile — ensure the existing collage logic in
   _PhotoTourMosaic.cshtml (1-up hero, 2-up grid, 3-up hero+stack,
   4+ alternating rows) renders cleanly inside the section's full
   content width. The mosaic column gets `flex: 1 1 100%; min-width: 0`
   so the inner Tailwind grids size correctly without overflowing the
   sticky title.
   Side padding (14px) lives on the mosaic column itself — NOT on the
   body wrapper — so the title bar above runs edge-to-edge while the
   photos sit nicely inset from the screen edges. Top padding (10px)
   gives the photos breathing room below the sticky title. */
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1 !important;
  -ms-flex: 1 1 100% !important;
  flex: 1 1 100% !important;
  width: 100% !important;
  min-width: 0 !important;
  padding: 10px 14px 0 !important;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

/* Single-photo sections become a proper hero on mobile — taller
   aspect ratio and full body width so the section reads as a
   "showcase" rather than a tiny thumbnail. The existing mosaic
   markup uses `aspect-ratio: 4/3` inline; we override with 16/11
   for the single-item case only via `:has()`. */
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11 !important;
}

/* Ensure mosaic grid items don't overflow horizontally on mobile —
   the inline `aspect-ratio: 4/3` they carry combined with grid
   columns can produce a 1-2px overshoot on narrow viewports. */
html.is-mobile #pt-scroll-body [id^="pt-section-"] .grid {
  width: 100%;
  max-width: 100%;
} /* canonical DS component, imported in place (tq-8210 R3d) */
/* ==========================================================================
   Mobile components — mobile form layer, table → card swap, animated hamburger, swipe-action row, mobile rails,
   full-screen mobile modal
   ==========================================================================

   Patterns used app-wide on phones. Canonical in Reinly.Design since tq-8210 (R3d); the app imports it in place (R4),
   PLAIN CSS (R4 guard). R3d dropped the blocks nothing rendered (proof in the tq-8210 land note): the bottom sheet
   (.rnly-bs, which duplicated the DS .bottom-sheet), swipe tabs (.rnly-stabs), the pull drawer (.rnly-pull), the
   sticky save bar (.rnly-form-savebar), the mobile stepper (.rnly-mstepper), and their script
   (Scripts/mobile-components.js, window.RnlyMb).
   ========================================================================== */

/* ── Mobile Form layer ─────────────────────────────────────────── */
html.is-mobile .form-mobile .form-row,
html.is-mobile .form-mobile .form-group {
  margin-bottom: 14px;
}
html.is-mobile .form-mobile label {
  display: block;
  font-size: 13px;
  font-weight: 600;
  color: rgb(64 64 64);
  margin-bottom: 6px;
}
html.is-mobile .form-mobile input[type="text"],
html.is-mobile .form-mobile input[type="email"],
html.is-mobile .form-mobile input[type="tel"],
html.is-mobile .form-mobile input[type="number"],
html.is-mobile .form-mobile input[type="search"],
html.is-mobile .form-mobile input[type="password"],
html.is-mobile .form-mobile select,
html.is-mobile .form-mobile textarea {
  width: 100%;
  min-height: 48px;
  font-size: 16px; /* iOS zoom-prevention threshold */
  padding: 12px 14px;
  border-radius: 12px;
  border: 1px solid rgb(214 211 209);
  background: white;
  color: rgb(23 23 23);
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
}
html.is-mobile .form-mobile input:focus,
html.is-mobile .form-mobile select:focus,
html.is-mobile .form-mobile textarea:focus {
  border-color: rgb(4 120 87);
  outline: 2px solid var(--focus-ring); outline-offset: 2px;
}

/* ── Mobile table → card swap ───────────────────────────────── */
@media (max-width: 768px) {
  .table-mobile-cards thead { display: none; }
  .table-mobile-cards tr {
    display: block;
    background: var(--bg-surface);  /* tq-8210 (R3d): was `white`; white in light (unchanged), the dark surface in dark */
    border: 1px solid var(--border-table);  /* tq-8334 (R11): was rgb(244 244 245); light rgb(245 245 245), dark the table border */
    border-radius: 14px;
    padding: 12px 14px;
    margin-bottom: 10px;
    -webkit-box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
    box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
  }
  .table-mobile-cards td {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-pack: justify;
    -ms-flex-pack: justify;
    justify-content: space-between;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    padding: 6px 0;
    border: 0;
    font-size: 14px;
  }
  .table-mobile-cards td::before {
    content: attr(data-label);
    font-size: 12px;
    font-weight: 600;
    color: rgb(115 115 115);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    margin-right: 12px;
    -webkit-box-flex: 0;
    -ms-flex: 0 0 auto;
    flex: 0 0 auto;
  }
  .table-mobile-cards td:not([data-label])::before { content: ''; }
}

/* ── Mobile carousels (scroll-snap, free-flowing rails) ───────
   Any horizontally-scrolling rail tagged `.rnly-rail` snaps each
   card to the start so the user always lands on a clean frame.
*/
html.is-mobile .rnly-rail,
html.is-mobile .rnly-listing-carousel__track,
html.is-mobile [data-rnly-rail] {
  -ms-scroll-snap-type: x mandatory;
  scroll-snap-type: x mandatory;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}
html.is-mobile .rnly-rail::-webkit-scrollbar,
html.is-mobile .rnly-listing-carousel__track::-webkit-scrollbar,
html.is-mobile [data-rnly-rail]::-webkit-scrollbar { display: none; }

html.is-mobile .rnly-rail > *,
html.is-mobile .rnly-listing-carousel__track > .rnly-listing-carousel__slide,
html.is-mobile [data-rnly-rail] > * {
  scroll-snap-align: start;
  scroll-snap-stop: always;
}

/* ── Mobile Modal (full-screen takeover for tall content) ────── */
html.is-mobile .modal-mobile-fullscreen .modal-dialog {
  position: fixed;
  inset: 0;
  margin: 0;
  max-width: none;
  width: 100vw;
  height: 100dvh;
}
html.is-mobile .modal-mobile-fullscreen .modal-content {
  border-radius: 0;
  height: 100dvh;
  max-height: none;
}
html.is-mobile .modal-mobile-fullscreen .modal-container {
  height: 100dvh;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column;
} /* canonical DS component, imported in place (tq-8210 R3d) */
/* ==========================================================================
   Component: Mobile chrome  ·  06 Navigation · L3 · ADOPT (tq-8612, REINLY-DS M2)
   --------------------------------------------------------------------------
   Reinly's phone chrome, adopted from the app INTO the DS (isabella 900054889):
     .mobile-topbar        the fixed top bar (logo · bell or Sign in · menu toggle)   — app _MobileTopBar
     .mobile-menu-toggle   the 3-bar toggle that morphs to an x on aria-expanded      — app _MobileTopBar
     .mobile-menu          the slide-out account menu (scrim + panel)                 — app MobileMenu view component
     .mobile-bottom-nav    the signed-in bottom nav                                   — app _MobileBottomNav
   The rules are the served app's, moved verbatim from reinly/components/mobile-shell.css and mobile-components.css
   (computed-style identical, 390 / 430, light + dark). Everything is gated by html.is-mobile.
   Behaviour stays ONE implementation in the app's Scripts/mobile.js (open / close / swipe / Escape / focus trap / inert).
   PLAIN CSS (the app imports this file in place: no @apply / @utility / theme()). Semantic tokens as served.

   tq-8628 (M4): the app markup + Scripts/mobile.js use these generic names; the rnly- aliases are gone.
   ========================================================================== */
/*  ── from reinly/components/mobile-shell.css ──  */
html.is-mobile .mobile-menu__header,
html.is-mobile .mobile-menu__footer {
  border-color: rgb(244 244 245) !important;
}

/* ── Bottom Nav ────────────────────────────────────────────────── */
.mobile-bottom-nav {
  position: fixed;
  inset: auto 0 0 0;
  /* Above `.app-chrome` (z-200) so the bottom nav stays visible
     over any hero or chrome surface that paints higher than the
     standard page content. */
  z-index: var(--z-mobile-bottom-nav);
  display: none;
  -webkit-box-align: stretch;
  -ms-flex-align: stretch;
  align-items: stretch;
  -ms-flex-pack: distribute;
  justify-content: space-around;
  background: rgba(255, 255, 255, 0.94);
  backdrop-filter: saturate(160%) blur(18px);
  -webkit-backdrop-filter: saturate(160%) blur(18px);
  /* On iOS the backdrop-filter darkens any rgba border because the
     blurred backdrop bleeds through. Use a near-white solid hairline
     instead so it reads as a soft separator rather than a dark line. */
  border-top: 0.5px solid rgb(244 244 245);
  padding-bottom: env(safe-area-inset-bottom, 0px);
  /* Soft top shadow lifts the nav off the content like iOS tab bars. */
  -webkit-box-shadow: 0 -8px 24px -16px rgba(15, 23, 42, 0.06);
  box-shadow: 0 -8px 24px -16px rgba(15, 23, 42, 0.06);
}
html.is-mobile .mobile-bottom-nav { display: -webkit-box; display: -ms-flexbox; display: flex; }
.mobile-bottom-nav__item {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0px;
  flex: 1 1 0;
  min-height: 56px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 2px;
  padding: 6px 4px 8px;
  color: rgb(82 82 82);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: -0.005em;
  text-decoration: none;
  position: relative;
  -webkit-transition: color 120ms ease;
  transition: color 120ms ease;
  -webkit-tap-highlight-color: transparent;
}
.mobile-bottom-nav__item:hover { color: rgb(38 38 38); }
.mobile-bottom-nav__item:active .mobile-bottom-nav__icon { -webkit-transform: scale(0.92); -ms-transform: scale(0.92); transform: scale(0.92); }

/* Active state: emerald icon + label color, plus a top accent
   bar so the user can spot the current section at a glance even
   when the bottom nav is glanced from the corner of their eye.
   The accent is a `::before` pseudo-element so it doesn't affect
   layout — sits at the top edge of the item, 24px wide, and
   animates in from a 4px slide for a subtle reveal. */
.mobile-bottom-nav__item.is-active { color: var(--utility-emerald-700, rgb(4 120 87)); }
.mobile-bottom-nav__item.is-active .mobile-bottom-nav__icon { color: var(--utility-emerald-700, rgb(4 120 87)); }
.mobile-bottom-nav__item::before {
  content: '';
  position: absolute;
  top: 0;
  left: 50%;
  -webkit-transform: translate(-50%, -4px);
  -ms-transform: translate(-50%, -4px);
  transform: translate(-50%, -4px);
  width: 24px;
  height: 3px;
  border-radius: 0 0 3px 3px;
  background: var(--utility-emerald-700, rgb(4 120 87));
  opacity: 0;
  -webkit-transition: opacity 160ms ease, -webkit-transform 200ms cubic-bezier(0.32, 0.72, 0, 1);
  transition: opacity 160ms ease, -webkit-transform 200ms cubic-bezier(0.32, 0.72, 0, 1);
  transition: opacity 160ms ease, transform 200ms cubic-bezier(0.32, 0.72, 0, 1);
  transition: opacity 160ms ease, transform 200ms cubic-bezier(0.32, 0.72, 0, 1), -webkit-transform 200ms cubic-bezier(0.32, 0.72, 0, 1);
  pointer-events: none;
}
.mobile-bottom-nav__item.is-active::before {
  opacity: 1;
  -webkit-transform: translate(-50%, 0);
  -ms-transform: translate(-50%, 0);
  transform: translate(-50%, 0);
}
.mobile-bottom-nav__icon {
  width: 24px; height: 24px;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -webkit-transition: -webkit-transform 120ms ease;
  transition: -webkit-transform 120ms ease;
  transition: transform 120ms ease;
  transition: transform 120ms ease, -webkit-transform 120ms ease;
}
.mobile-bottom-nav__icon svg { width: 24px; height: 24px; stroke-width: 1.6; }
.mobile-bottom-nav__label {
  font-size: 10.5px;
  line-height: 1.1;
  white-space: nowrap;
}
.mobile-bottom-nav__badge {
  position: absolute;
  top: 6px;
  right: calc(50% - 18px);
  min-width: 16px; height: 16px;
  padding: 0 4px;
  border-radius: 9999px;
  background: rgb(220 38 38);
  color: white;
  font-size: 10px;
  font-weight: 700;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}
/* `display: inline-flex` would normally override the HTML `hidden`
   attribute (which only sets `display: none` at user-agent
   priority). Re-assert `none` so the badge actually disappears
   when JS sets `hidden = true` (or count drops to 0). */
.mobile-bottom-nav__badge[hidden] { display: none; }

/* Hide bottom nav when an on-screen keyboard or full-screen overlay says
   so. Pages opt in by setting `data-rnly-mb-nav-hidden` on <html>. */
html[data-rnly-mb-nav-hidden] .mobile-bottom-nav { -webkit-transform: translateY(110%); -ms-transform: translateY(110%); transform: translateY(110%); -webkit-transition: -webkit-transform 200ms ease; transition: -webkit-transform 200ms ease; transition: transform 200ms ease; transition: transform 200ms ease, -webkit-transform 200ms ease; }

/* Bottom nav slides off-screen via transform only — `position: fixed`
   already keeps it OUT of document flow, so hiding it never affects
   the scroll container's height. We DO NOT animate the app-shell's
   padding-bottom, because that would shrink the document mid-scroll
   and force iOS Safari's scroll anchoring to chase the change,
   producing the visible jumping the user observed. The bottom nav
   just floats away — content underneath is briefly inaccessible
   until the user scrolls back up and the nav returns. */
html.is-mobile .mobile-bottom-nav {
  -webkit-transition:
    opacity   var(--rnly-dur-collapse) var(--rnly-ease-ios),
    -webkit-transform var(--rnly-dur-collapse) var(--rnly-ease-ios);
  transition:
    opacity   var(--rnly-dur-collapse) var(--rnly-ease-ios),
    -webkit-transform var(--rnly-dur-collapse) var(--rnly-ease-ios);
  transition:
    transform var(--rnly-dur-collapse) var(--rnly-ease-ios),
    opacity   var(--rnly-dur-collapse) var(--rnly-ease-ios);
  transition:
    transform var(--rnly-dur-collapse) var(--rnly-ease-ios),
    opacity   var(--rnly-dur-collapse) var(--rnly-ease-ios),
    -webkit-transform var(--rnly-dur-collapse) var(--rnly-ease-ios);
  will-change: transform, opacity;
}
html[data-rnly-mb-nav-collapsed] .mobile-bottom-nav {
  -webkit-transform: translateY(110%);
  -ms-transform: translateY(110%);
  transform: translateY(110%);
  opacity: 0;
  pointer-events: none;
}
.mobile-topbar {
  display: none;
  position: fixed;
  inset: 0 0 auto 0;
  /* Sits ABOVE `.app-chrome` (z-200 in layout.css) so on hero
     pages on mobile — where the chrome is left on as the hero
     surface — the top bar's logo, bell and hamburger still
     paint above the hero photo / nav. */
  z-index: var(--z-mobile-topbar);
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 12px;
  /* Even 14px padding on every side — earlier the bar shipped
     with `padding: 10px 14px` (asymmetric), which read as
     visually unbalanced against the account nav-tabs strip
     below it. 14px each side + 36px button height = 64px tall. */
  padding: 14px;
  padding-top: calc(14px + env(safe-area-inset-top, 0px));
  /* safe area (tq-9355): B. Landscape with viewport-fit=cover: the logo and the menu button clear the notch sides. */
  padding-left: max(14px, env(safe-area-inset-left, 0px));
  padding-right: max(14px, env(safe-area-inset-right, 0px));
  /* Solid surface background — flat, opaque header. */
  background: var(--bg-surface);  /* tq-8217 (R7): white in light (unchanged), the dark surface in dark */
  /* iOS Safari renders sub-pixel borders darker than expected
     because of how it composites the border edge. Use a softer
     near-white shade explicitly so the divider reads as a
     hairline instead of a black line on Retina displays. */
  border-bottom: 1px solid rgba(15, 23, 42, 0.06);
}
html.is-mobile .mobile-topbar { display: -webkit-box; display: -ms-flexbox; display: flex; }
.mobile-topbar__brand {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
}
/* Sizing only — `display` is set per-variant below so the unused
   variant stays hidden. Logo height matches across inner pages and
   the home hero so the brand has consistent presence regardless
   of background. */
.mobile-topbar__brand img { height: 36px; }

/* Logo variant swap: standard pages show the dark logo, hero pages
   show the light (white) logo so it reads over the hero image. Only
   one paints at any given time. */
.mobile-topbar__logo--dark  { display: block; }
.mobile-topbar__logo--light { display: none; }
html.is-mobile body.has-hero-chrome .mobile-topbar__logo--dark  { display: none; }
html.is-mobile body.has-hero-chrome .mobile-topbar__logo--light { display: block; }
/* tq-8217 (R7): the dark theme shows the light wordmark too (the bar is dark there); hero pages unchanged */
[data-theme="theme-dark"] .mobile-topbar__logo--dark  { display: none; }
[data-theme="theme-dark"] .mobile-topbar__logo--light { display: block; }
.mobile-topbar__actions {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
}
.mobile-topbar__signin {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  height: 36px;
  padding: 0 14px;
  border-radius: 9999px;
  /* Default (inner pages): emerald primary, matching the brand
     accent and the desktop btn-primary. The hero variant below
     overrides this to a glass treatment so the pill reads over
     the photo background instead of competing with it. */
  border: 1px solid var(--utility-emerald-700, rgb(4 120 87));
  background: var(--utility-emerald-700, rgb(4 120 87));
  color: white;
  font-size: 13px;
  font-weight: 600;
}
.mobile-topbar__signin:active { background: var(--utility-emerald-800, rgb(6 95 70)); }

/* Glass treatment for the Sign-in pill on the home hero — the
   default solid background reads as a hard chip over the photo,
   so on hero pages we shift to a translucent + blurred chip with
   a white outline + label, matching the desktop btn-glass pattern
   used on the in-hero nav. */
html.is-mobile body.has-hero-chrome .mobile-topbar__signin {
  background: var(--bg-button-glass, rgba(255, 255, 255, 0.16));
  border-color: var(--border-button-glass, rgba(255, 255, 255, 0.32));
  color: var(--alpha-white-100, white);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
}

/* Guest layout uses the SAME left-logo / right-actions split as the
   authed layout (logo on the left, Sign-in pill + hamburger on
   the right) — both children sit at the row ends via the parent's
   `justify-content: space-between`. No `--guest` override needed:
   an earlier version flipped to `flex-end` when there was no logo,
   which was leaving the logo pinned to the right after we
   re-introduced it. */
html.is-mobile body.has-hero-chrome .mobile-topbar__signin:active {
  background: var(--bg-button-glass-hover, rgba(255, 255, 255, 0.26));
}
.mobile-topbar__menu {
  /* 36px to match the Sign-in pill height — keeps every action in
     the top-bar row at the same vertical scale. The bell trigger
     (`.btn-icon-md`, 40px by default) is also clamped to 36 below
     via a scoped override so all three controls line up. */
  width: 36px; height: 36px;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border: 0;
  background: transparent;
  border-radius: 9999px;
  color: var(--text-primary, rgb(38 38 38));
}
.mobile-topbar__menu:active { background: var(--bg-secondary, rgb(245 245 244)); }

/* Notification bell sits inside the top bar via the shared
   NotificationTray component, which uses the design system's
   `.btn-icon-md` (40px). On mobile we want the row to read as a
   single horizontal scale, so override the trigger size to 36px
   inside the mobile top bar only — the desktop chrome's bell is
   left untouched. */
html.is-mobile .mobile-topbar .rnly-notif-trigger {
  width: 36px;
  height: 36px;
  min-width: 36px;
  min-height: 36px;
}

/* Hamburger ↔ X morph.
   The base bar layout + transitions live in mobile-components.css
   (pseudo-elements for top + bottom bars, `> span` for the middle).
   Here we ONLY tune the timing/easing so the morph reads as a
   deliberate transition that arrives in step with the menu's
   240ms slide-in. Without this, the bars whip to X in 220ms ease
   while the panel is still mid-slide, which feels disconnected.

   We also stage a brief mid-transition translate so the bars are
   visibly drawn together before they cross — the eye sees a
   "compress → cross → settle" arc rather than a one-shot snap. */
.mobile-menu-toggle__bars::before,
.mobile-menu-toggle__bars::after,
.mobile-menu-toggle__bars > span {
  -webkit-transition: opacity   180ms ease 60ms,
              top       280ms cubic-bezier(0.32, 0.72, 0, 1),
              -webkit-transform 280ms cubic-bezier(0.32, 0.72, 0, 1) !important;
  transition: opacity   180ms ease 60ms,
              top       280ms cubic-bezier(0.32, 0.72, 0, 1),
              -webkit-transform 280ms cubic-bezier(0.32, 0.72, 0, 1) !important;
  transition: transform 280ms cubic-bezier(0.32, 0.72, 0, 1),
              opacity   180ms ease 60ms,
              top       280ms cubic-bezier(0.32, 0.72, 0, 1) !important;
  transition: transform 280ms cubic-bezier(0.32, 0.72, 0, 1),
              opacity   180ms ease 60ms,
              top       280ms cubic-bezier(0.32, 0.72, 0, 1),
              -webkit-transform 280ms cubic-bezier(0.32, 0.72, 0, 1) !important;
  -webkit-transform-origin: 50% 50%;
  -ms-transform-origin: 50% 50%;
  transform-origin: 50% 50%;
}
/* When the menu is opening: top + bottom bars first slide to the
   middle (translateY(6px) / -6px) AND rotate ±45° in one tween.
   The middle bar fades + scales out so the user sees the X "draw
   itself" rather than appear instantly. */
.mobile-menu-toggle[aria-expanded="true"] .mobile-menu-toggle__bars > span {
  opacity: 0;
  -webkit-transform: scaleX(0.4);
  -ms-transform: scaleX(0.4);
  transform: scaleX(0.4);
}

/* Hero-page variant: transparent background, white text/icons.
   Picks up the same `body.has-hero-chrome` scope used for
   other hero-page tweaks elsewhere in the file. */
html.is-mobile body.has-hero-chrome .mobile-topbar {
  background: transparent;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  border-bottom: 0;
  color: var(--alpha-white-100, white);
}
html.is-mobile body.has-hero-chrome .mobile-topbar .mobile-topbar__menu,
html.is-mobile body.has-hero-chrome .mobile-topbar .rnly-notif-trigger {
  /* Glass chip — matches the desktop btn-glass treatment used on
     the hero nav. White stroke, white icon glyphs, semi-translucent
     fill that lets the hero image read through. */
  color: var(--alpha-white-100, white) !important;
  background-color: var(--bg-button-glass, rgba(255, 255, 255, 0.16));
  border: 1px solid var(--border-button-glass, rgba(255, 255, 255, 0.32));
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
}
html.is-mobile body.has-hero-chrome .mobile-topbar .mobile-topbar__menu:active,
html.is-mobile body.has-hero-chrome .mobile-topbar .rnly-notif-trigger:active {
  background-color: var(--bg-button-glass-hover, rgba(255, 255, 255, 0.26));
}
/* Burger bars + bell glyph stay white */
html.is-mobile body.has-hero-chrome .mobile-topbar .mobile-menu-toggle__bars,
html.is-mobile body.has-hero-chrome .mobile-topbar .rnly-notif-trigger i {
  color: var(--alpha-white-100, white);
}

/* ════════════════════════════════════════════════════════════════
   FULL-WIDTH MOBILE SLIDE-OUT MENU
   ────────────────────────────────────────────────────────────────
   Replaces the older 86vw .rnly-mb-drawer. Now covers 100vw on
   phones (max 420px on tablets) so the menu reads as a full app
   surface, not a peek panel. Owns the buyer/seller segmented
   toggle at the top — that's the one place mode-switching lives
   for authenticated users.
   ════════════════════════════════════════════════════════════════ */
.mobile-menu {
  position: fixed;
  inset: 0;
  /* Above `.app-chrome` (z-200) and above the mobile top bar
     (z-220) so the slide-out fully covers them when open. */
  z-index: var(--z-mobile-menu);
  pointer-events: none;
}
.mobile-menu[data-open="true"] { pointer-events: auto; }
.mobile-menu__scrim {
  position: absolute; inset: 0;
  background: rgba(15, 23, 42, 0);
  -webkit-transition: background 200ms ease;
  transition: background 200ms ease;
}
.mobile-menu[data-open="true"] .mobile-menu__scrim { background: rgba(15, 23, 42, 0.45); }
.mobile-menu__panel {
  position: absolute;
  top: 0; bottom: 0; left: 0;
  width: 100vw;
  max-width: 420px; /* tablet cap so it doesn't read as a fullscreen takeover on landscape */
  background: var(--bg-primary, white);
  -webkit-box-shadow: 24px 0 50px -20px rgba(15, 23, 42, 0.35);
  box-shadow: 24px 0 50px -20px rgba(15, 23, 42, 0.35);
  -webkit-transform: translateX(-105%);
  -ms-transform: translateX(-105%);
  transform: translateX(-105%);
  -webkit-transition: -webkit-transform 240ms cubic-bezier(0.32, 0.72, 0, 1);
  transition: -webkit-transform 240ms cubic-bezier(0.32, 0.72, 0, 1);
  transition: transform 240ms cubic-bezier(0.32, 0.72, 0, 1);
  transition: transform 240ms cubic-bezier(0.32, 0.72, 0, 1), -webkit-transform 240ms cubic-bezier(0.32, 0.72, 0, 1);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  padding-top: env(safe-area-inset-top, 0px);
  padding-bottom: env(safe-area-inset-bottom, 0px);
  /* safe area (tq-9355): B. The left-anchored panel's content clears the notch side in landscape. */
  padding-left: max(0px, env(safe-area-inset-left, 0px));
}
.mobile-menu[data-open="true"] .mobile-menu__panel { -webkit-transform: translateX(0); -ms-transform: translateX(0); transform: translateX(0); }

/* ── Header (avatar + name + email + segmented toggle + close X) ── */
.mobile-menu__header {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  /* Tightened bottom padding so the segmented toggle sits closer to
     the first menu group label below — they read as one block now
     instead of having an awkward 30px gap. */
  padding: 18px 20px 8px;
  border-bottom: 1px solid var(--border-primary, rgb(244 244 245));
  background: var(--bg-primary, white);
  /* Make the header sticky so the toggle stays visible while the
     section list scrolls. */
  top: 0;
  z-index: 2;
  /* Anchor for the absolutely-positioned close X. */
  position: sticky; /* duplicate intentional — keep the sticky binding */
}
.mobile-menu__header--guest {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  padding: 12px 16px;
}
.mobile-menu__brand img { height: 28px; }
.mobile-menu__close {
  width: 36px; height: 36px;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center;
  border: 0; background: transparent; border-radius: 9999px;
  color: var(--text-secondary, rgb(82 82 82));
  font-size: 18px;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.mobile-menu__close:active { background: var(--bg-secondary, rgb(245 245 244)); }

/* Inline variant — pinned to the top-right of the authenticated
   header at the EXACT same coordinates as the top-bar hamburger.
   When the user taps the hamburger and the menu slides in, the X
   appears where the burger used to be (rather than jumping to a
   different spot), so the open ↔ close pair reads as one
   continuous control. The size, top, and right values mirror the
   menu toggle `.mobile-topbar__menu.mobile-menu-toggle`. */
.mobile-menu__close--inline {
  position: absolute;
  top: calc(10px + env(safe-area-inset-top, 0px));
  right: 14px;
  width: 40px; height: 40px;
  font-size: 18px;
  z-index: 3;
}
.mobile-menu__id {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 12px;
  margin-bottom: 14px;
  /* Reserve room on the right so the avatar/name don't crash into
     the absolutely-positioned close X. */
  padding-right: 40px;
}
.mobile-menu__avatar {
  width: 48px; height: 48px;
  border-radius: 9999px;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  overflow: hidden;
  background: var(--utility-neutral-800, rgb(38 38 38));
  color: var(--alpha-white-100, white);
  font-size: 16px;
  font-weight: 700;
}
.mobile-menu__avatar img { width: 100%; height: 100%; -o-object-fit: cover; object-fit: cover; }
.mobile-menu__id-text { min-width: 0; -webkit-box-flex: 1; -ms-flex: 1 1 auto; flex: 1 1 auto; }
.mobile-menu__id-name {
  font-size: 16px;
  font-weight: 600;
  color: var(--text-primary, rgb(24 24 27));
  line-height: 1.2;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.mobile-menu__id-email {
  font-size: 13px;
  color: var(--text-tertiary, rgb(115 115 115));
  line-height: 1.3;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  margin-top: 2px;
}

/* ── Buyer / Seller segmented toggle ── */
.mobile-menu__toggle {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 4px;
  padding: 4px;
  border-radius: 12px;
  background: var(--bg-secondary, rgb(245 245 244));
  border: 1px solid var(--border-primary, rgb(229 231 235));
}
.mobile-menu__toggle-btn {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 8px;
  height: 38px;
  border: 0;
  border-radius: 9px;
  background: transparent;
  color: var(--text-secondary, rgb(82 82 82));
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
  -webkit-transition: background 160ms ease, color 160ms ease, -webkit-box-shadow 160ms ease;
  transition: background 160ms ease, color 160ms ease, -webkit-box-shadow 160ms ease;
  transition: background 160ms ease, color 160ms ease, box-shadow 160ms ease;
  transition: background 160ms ease, color 160ms ease, box-shadow 160ms ease, -webkit-box-shadow 160ms ease;
  -webkit-tap-highlight-color: transparent;
}
.mobile-menu__toggle-btn i { font-size: 14px; }
.mobile-menu__toggle-btn.is-active {
  background: var(--bg-primary, white);
  color: var(--utility-emerald-700, rgb(4 120 87));
  -webkit-box-shadow: 0 1px 3px rgba(15, 23, 42, 0.08);
  box-shadow: 0 1px 3px rgba(15, 23, 42, 0.08);
}
.mobile-menu__toggle-btn:disabled { opacity: 0.6; cursor: default; }

/* ── Body / sections / variants ── */
.mobile-menu__body {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  /* Tightened top padding so the first group sits close to the
     header's segmented toggle — visually they now read as part of
     the same anchored block at the top of the menu. */
  padding: 0 12px 12px;
}

/* Variant gating: only one of the two buyer/seller variant blocks
   is visible at any time, picked by the panel's [data-mode]. The
   shared sections (Support, Admin) live OUTSIDE the variant blocks
   so they render in both modes without duplication. */
.mobile-menu__variant { display: none; }
.mobile-menu__panel[data-mode="buying"]  .mobile-menu__variant[data-rnly-mb-variant="buying"]  { display: block; }
.mobile-menu__panel[data-mode="selling"] .mobile-menu__variant[data-rnly-mb-variant="selling"] { display: block; }
.mobile-menu__group { padding: 6px 6px; }
.mobile-menu__group-label {
  text-transform: uppercase;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.08em;
  color: var(--text-tertiary, rgb(115 115 115));
  padding: 12px 12px 4px;
}
.mobile-menu__link {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 14px;
  width: 100%;
  padding: 12px 12px;
  border: 0;
  border-radius: 12px;
  background: transparent;
  color: var(--text-primary, rgb(38 38 38));
  text-decoration: none;
  font-size: 15px;
  font-weight: 500;
  letter-spacing: -0.005em;
  line-height: 1.25;
  min-height: 48px;
  text-align: left;
  cursor: pointer;
}
.mobile-menu__link:active { background: var(--bg-secondary, rgb(245 245 244)); }
.mobile-menu__link i {
  width: 20px;
  font-size: 16px;
  text-align: center;
  color: var(--text-secondary, rgb(82 82 82));
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
}
.mobile-menu__link.is-active { background: var(--utility-emerald-50, rgb(236 253 245)); color: var(--utility-emerald-700, rgb(4 120 87)); }
.mobile-menu__link.is-active i { color: var(--utility-emerald-700, rgb(4 120 87)); }
.mobile-menu__link span { -webkit-box-flex: 1; -ms-flex: 1 1 auto; flex: 1 1 auto; min-width: 0; }
.mobile-menu__badge {
  min-width: 18px; height: 18px;
  padding: 0 6px;
  border-radius: 9999px;
  background: var(--utility-red-500, rgb(220 38 38));
  color: white;
  font-size: 11px;
  font-weight: 700;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}
.mobile-menu__badge[hidden] { display: none; }

/* ── Footer (log out / sign in) ── */
.mobile-menu__footer {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  border-top: 1px solid var(--border-primary, rgb(244 244 245));
  padding: 12px 16px calc(12px + env(safe-area-inset-bottom, 0px));
  background: var(--bg-primary, white);
}
.mobile-menu__logout,
.mobile-menu__signin {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 10px;
  width: 100%;
  height: 48px;
  border: 1px solid var(--border-primary, rgb(229 231 235));
  border-radius: 12px;
  background: var(--bg-secondary, rgb(245 245 244));
  color: var(--text-primary, rgb(38 38 38));
  font-size: 15px;
  font-weight: 600;
  cursor: pointer;
}
/* Logout reads as a normal action, not a destructive one — same
   neutral chrome as any other primary button. The "Are you sure"
   moment lives in the confirmation flow on the server side, not
   in the menu's color palette. */
.mobile-menu__logout:active { background: var(--bg-secondary-hover, rgb(231 229 228)); }
.mobile-menu__signin {
  background: var(--utility-emerald-700, rgb(4 120 87));
  color: white;
  border-color: var(--utility-emerald-700, rgb(4 120 87));
}
.mobile-menu__signin:active { background: var(--utility-emerald-800, rgb(6 95 70)); }

/* Reduced-motion: skip slide animations entirely. */
html.reduced-motion .mobile-menu__panel,
html.reduced-motion .mobile-menu__scrim,
html.reduced-motion .mobile-menu-toggle__bars span { -webkit-transition: none !important; transition: none !important; }

/* Reduce motion */
html.reduced-motion .mobile-menu__panel,
html.reduced-motion .mobile-menu__scrim,
html.reduced-motion .mobile-bottom-nav { -webkit-transition: none !important; transition: none !important; }
/*  ── from reinly/components/mobile-components.css ──  */

/* ── Animated Hamburger ────────────────────────────────────────
   Three bars that morph into an X when [aria-expanded="true"]. Drop
   into any header that controls a drawer or off-canvas panel.
*/
.mobile-menu-toggle {
  width: 40px; height: 40px;
  border: 0; background: transparent;
  border-radius: 9999px;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center;
  position: relative;
  -webkit-tap-highlight-color: transparent;
}
.mobile-menu-toggle:active { background: rgb(245 245 244); }
.mobile-menu-toggle__bars {
  position: relative;
  width: 22px; height: 14px;
}
.mobile-menu-toggle__bars::before,
.mobile-menu-toggle__bars::after,
.mobile-menu-toggle__bars > span {
  content: '';
  position: absolute;
  left: 0; right: 0;
  height: 2px;
  background: currentColor;
  border-radius: 2px;
  -webkit-transition: opacity   180ms ease,
              -webkit-transform 220ms cubic-bezier(0.32, 0.72, 0, 1);
  transition: opacity   180ms ease,
              -webkit-transform 220ms cubic-bezier(0.32, 0.72, 0, 1);
  transition: transform 220ms cubic-bezier(0.32, 0.72, 0, 1),
              opacity   180ms ease;
  transition: transform 220ms cubic-bezier(0.32, 0.72, 0, 1),
              opacity   180ms ease,
              -webkit-transform 220ms cubic-bezier(0.32, 0.72, 0, 1);
}
.mobile-menu-toggle__bars::before { top: 0; }
.mobile-menu-toggle__bars > span  { top: 6px; }
.mobile-menu-toggle__bars::after  { top: 12px; }
.mobile-menu-toggle[aria-expanded="true"] .mobile-menu-toggle__bars::before { -webkit-transform: translateY(6px) rotate(45deg); -ms-transform: translateY(6px) rotate(45deg); transform: translateY(6px) rotate(45deg); }
.mobile-menu-toggle[aria-expanded="true"] .mobile-menu-toggle__bars > span  { opacity: 0; }
.mobile-menu-toggle[aria-expanded="true"] .mobile-menu-toggle__bars::after  { -webkit-transform: translateY(-6px) rotate(-45deg); -ms-transform: translateY(-6px) rotate(-45deg); transform: translateY(-6px) rotate(-45deg); } /* tq-8612 (M2): THE phone chrome, adopted into the DS, imported in place */
/* ==========================================================================
   Mobile hero search — single Search CTA replacing desktop pill
   ==========================================================================
   On phones the multi-segment desktop pill is replaced with a single
   "Search" button (`.rnly-mb-search-cta`) that routes to /Listings,
   where the user has the full filter UI available. The desktop pill
   stays in the DOM for wider viewports — we just hide it on mobile.
   ========================================================================== */

/* Hide the multi-segment desktop pill entirely on mobile. */
html.is-mobile .rnly-search-shell {
  display: none !important;
}

/* ── Mobile Search CTA ──
   Compact white-glass pill that reads cleanly over the hero image.
   Auto-width pill (does NOT span the full hero), aligned center. */
.rnly-mb-search-cta { display: none; }
/* Sizing + layout only. The .btn-glass class on the markup already
   delivers the translucent fill, soft border, saturated backdrop
   blur, and grain texture (via .btn-glass::after) — same recipe as
   the header Sign-In button — so this rule just spaces things. */
html.is-mobile .rnly-mb-search-cta {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 8px;
  width: 100%;
  height: 44px;
  padding: 0 28px;
  margin: 0 auto;
  border-radius: 9999px;
  font-size: 14px;
  font-weight: 600;
  letter-spacing: -0.005em;
  text-decoration: none;
  white-space: nowrap;
  -webkit-tap-highlight-color: transparent;
}
html.is-mobile .rnly-mb-search-cta:active { -webkit-transform: scale(0.96); -ms-transform: scale(0.96); transform: scale(0.96); }
html.is-mobile .rnly-mb-search-cta i { font-size: 14px; }

/* Make the CTA visually solid on top of the hero photo — the
   default `.btn-glass` token (var(--bg-button-glass) = 20% white)
   reads as too washed-out against busy backgrounds. Override with
   a near-opaque white pill + dark text so the call-to-action
   stands out as the primary surface affordance. */
html.is-mobile .rnly-mb-search-cta {
  background-color: rgba(255, 255, 255, 0.92);
  color: var(--text-primary, #18181b);
  border-color: rgba(255, 255, 255, 0.6);
  -webkit-box-shadow: 0 8px 24px -10px rgba(15, 23, 42, 0.30);
  box-shadow: 0 8px 24px -10px rgba(15, 23, 42, 0.30);
}
html.is-mobile .rnly-mb-search-cta:hover {
  background-color: rgba(255, 255, 255, 1);
}

/* The wrapping `.rnly-hero__content` is `display: block`; centring
   the auto-width CTA needs an explicit text-align on mobile. */
html.is-mobile .rnly-hero__content {
  text-align: center;
}

/* Pages */
/* ==========================================================================
   REINLY – Split map view (Airbnb-style buyer listings page)
   ========================================================================== */

/* ── Split container ── */
.listings-split {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 100%;
  min-height: 0px;
  width: 100%;
  min-width: 0px;
}
.collapse.show.listings-split {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .listings-split {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.listings-split.items-baseline { margin-bottom: 10px; }
html.is-mobile .listings-split:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .listings-split.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-split.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-split.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-split.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-split.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.listings-split {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-split.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.listings-split > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}
.listings-split {
  background-color: var(--canvas-primary);
}

/* ── Left pane: scrollable list ── */
.listings-split__list {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 100%;
  min-height: 0px;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  overflow-y: auto;
}
.collapse.show.listings-split__list {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .listings-split__list {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.listings-split__list.items-baseline { margin-bottom: 10px; }
html.is-mobile .listings-split__list:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .listings-split__list.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.listings-split__list.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-split__list.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-split__list.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-split__list.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-split__list.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-split__list.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}
.listings-split__list {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 50%;
  flex: 1 1 50%;
}

/* ── Toolbar row ── */
.listings-split__toolbar {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  padding-left: 1.5rem;
  padding-right: 1.5rem;
  padding-top: 1rem;
  padding-bottom: 1rem;
}
.collapse.show.listings-split__toolbar {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .listings-split__toolbar {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.listings-split__toolbar.items-baseline { margin-bottom: 10px; }
html.is-mobile .listings-split__toolbar:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .listings-split__toolbar.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.listings-split__toolbar[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-split__toolbar.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-split__toolbar.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-split__toolbar.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-split__toolbar.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-split__toolbar.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}
.listings-split__toolbar {
  background-color: var(--bg-surface);  /* tq-8334 (R11): was #ffffff; white in light, the dark surface in dark */
}

/* Note: the legacy `.filter-pill` / `.filter-dropdown` / `.filter-option`
   classes were superseded by the `.qf-pill` family in
   components/quick-filter-bar.css. This page file no longer ships those
   styles — see that file for the active quick-bar styling. */

/* Card hidden because it sits beyond the pager's current window
   (filter-engine still considers it a match — it just isn't painted
   yet). Cleared as the user scrolls and the pager grows the window. */
.card--listing.is-virtual-hidden {
  display: none;
}

/* Sentinel + loading row that the IntersectionObserver watches.
   Spans the full grid width so it sits below the last visible row. */
.listings-split__sentinel {
  grid-column: 1 / -1;
  height: 1px;
  width: 100%;
}

.listings-split__loading {
  grid-column: 1 / -1;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 8px;
  padding: 16px 0 32px;
  color: var(--text-tertiary, #9ca3af);
}

.listings-split__loading.hidden {
  display: none !important;
}

/* Empty state shown when filters return zero results */
.listings-split__empty {
  grid-column: 1 / -1;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  padding-top: 4rem;
  padding-bottom: 4rem;
  padding-left: 1.5rem;
  padding-right: 1.5rem;
  text-align: center;
}
.collapse.show.listings-split__empty {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .listings-split__empty {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.listings-split__empty.items-baseline { margin-bottom: 10px; }
html.is-mobile .listings-split__empty:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .listings-split__empty.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.listings-split__empty.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.listings-split__empty[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-split__empty.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-split__empty.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-split__empty.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-split__empty.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-split__empty.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}
.listings-split__empty {
  display: none;
}

.listings-split.is-empty .listings-split__empty {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

.listings-split.is-empty .listings-split__grid {
  display: none;
}

/* ── Card grid ── */
.listings-split__grid {
  display: grid;
  -webkit-column-gap: 1.25rem;
  -moz-column-gap: 1.25rem;
  column-gap: 1.25rem;
  row-gap: 1.5rem;
}
html.is-mobile #rnly-wizard-modal .listings-split__grid.grid-cols-2 {
  grid-template-columns: minmax(0, 1fr);
  gap: 16px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] .listings-split__grid {
  width: 100%;
  max-width: 100%;
}
.listings-split__grid {
  grid-template-columns: repeat(2, minmax(0, 1fr));
  padding: 1.5rem 1.75rem;
}

@media (max-width: 1023px) {
  .listings-split__grid {
    grid-template-columns: minmax(0, 1fr);
  }
}

@media (min-width: 1440px) {
  .listings-split__grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

/* ── Right pane: map panel wrapper ──
   Edge-to-edge map (no padding, no rounded card chrome). */
.listings-split__map-panel {
  position: relative;
  height: 100%;
  min-height: 0px;
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
  -ms-flex: 0 0 50%;
  flex: 0 0 50%;
  background-color: var(--canvas-primary);
}

/* ── Map container (full-bleed inside panel) ── */
.listings-map {
  position: relative;
  height: 100%;
  width: 100%;
  overflow: hidden;
  background-color: var(--bg-map-panel, var(--bg-map, var(--bg-primary-subtle)));
}

/* ── Fullscreen map mode (Airbnb-style) ──
   Triggered by JS adding `is-map-fullscreen` to the .listings-split root.
   Hides the cards panel, expands the map to fill the entire split width
   and removes the panel's rounded corners for an edge-to-edge feel. */
.listings-split.is-map-fullscreen .listings-split__list {
  display: none;
}

.listings-split.is-map-fullscreen .listings-split__map-panel {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  padding: 0;
}

.listings-split.is-map-fullscreen .listings-map {
  border-radius: 0;
  border: none;
  -webkit-box-shadow: none;
  box-shadow: none;
}

/* ── Mobile: stack layout ── */
@media (max-width: 767px) {
  .listings-split {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
html.is-mobile #rnly-wizard-modal .flex.listings-split.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

  .listings-split__list {
    -webkit-box-flex: 1;
    -ms-flex: 1 1 auto;
    flex: 1 1 auto;
  }

  .listings-split__map-panel {
    display: none;
  }

.listings-split__loading.listings-split__map-panel {
  display: none;
}

  .listings-split__map-panel {
    -webkit-box-flex: 0;
    -ms-flex: none;
    flex: none;
    height: 50vh;
    border-left: none;
  }

  .listings-split__map-panel.is-map-visible {
    display: block;
  }
}

/* ── Map toggle button (mobile only) ── */
.listings-split__map-toggle {
  position: fixed;
  bottom: 1.5rem;
  left: 50%;
  z-index: 40;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  --tw-translate-x: -50%;
  -webkit-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  -ms-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  border-radius: 9999px;
  padding-left: 1rem;
  padding-right: 1rem;
  padding-top: 0.625rem;
  padding-bottom: 0.625rem;
  font-size: 0.8125rem;
  line-height: 1.5rem;
  font-weight: 500;
  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  -webkit-transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  -webkit-transition-duration: 150ms;
  transition-duration: 150ms;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.listings-split__map-toggle[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
.listings-split__map-toggle {
  background-color: var(--bg-primary-solid);
  color: var(--canvas-primary);
}

.listings-split__map-toggle:hover {
  opacity: 0.9;
}

@media (min-width: 768px) {
  .listings-split__map-toggle {
    display: none;
  }

.listings-split__loading.listings-split__map-toggle {
  display: none;
}
}

/* ── Placeholder overlay ── */
.listings-map__placeholder {
  position: absolute;
  inset: 0px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}
.collapse.show.listings-map__placeholder {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .listings-map__placeholder {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.listings-map__placeholder.items-baseline { margin-bottom: 10px; }
html.is-mobile .listings-map__placeholder:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .listings-map__placeholder.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.listings-map__placeholder.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.listings-map__placeholder[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-map__placeholder.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-map__placeholder.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-map__placeholder.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-map__placeholder.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .listings-map__placeholder.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}
.listings-map__placeholder {
  color: var(--text-quaternary);
  pointer-events: none;
}

/* ── Map pins ── */

/* ──────────────────────────────────────────────────────────────
   Mobile (split-map → bottom-sheet pattern)
   ──────────────────────────────────────────────────────────────
   On phones the side-by-side layout collapses to:
     • map fills the top area (height: 100dvh − var(--bottom-sheet-height))
     • listings sit in a draggable bottom sheet (--bottom-sheet-height)
     • a real DOM grab-bar is injected at the top of the sheet
   `--bottom-sheet-height` is set in pixels by
   Scripts/listings/index.js. Three snap states: collapsed (just
   header + filter row), default (~52dvh), expanded (almost full
   viewport).
*/
html.is-mobile .listings-split {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  height: 100vh;            /* fallback when dvh isn't supported */
  height: 100dvh;           /* let dvh take precedence */
  overflow: hidden;
  --bottom-sheet-height: 75dvh;
}

html.is-mobile .listings-split__map-panel {
  display: block !important;
  /* Map fills everything ABOVE the sheet. As the sheet's height
     changes during a drag, this shrinks/grows accordingly with
     no transition fighting the live update. */
  -webkit-box-flex: 1;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto;
  height: calc(100dvh - var(--bottom-sheet-height));
  min-height: 0;
  position: relative;
  -webkit-box-ordinal-group: 0;
  -ms-flex-order: -1;
  order: -1;
  overflow: hidden;
}

/* Crop the Google Maps wordmark + "Terms" links by oversizing the
   inner map element and clipping at the panel boundary. The map
   stays anchored at the top so panning/markers stay in view; the
   bottom 28px (where the credits sit) gets clipped. */
html.is-mobile .listings-split__map-panel .listings-map {
  width: 100%;
  height: calc(100% + 28px);
  margin-bottom: -28px;
  overflow: hidden;
}

/* Bottom-sheet panel — fixed height driven by the CSS var. The
   panel overlaps the map by 18px (margin-top: -18px) so the
   rounded top corners reveal the MAP through them, not whatever
   bg the parent .listings-split is painting (which produced a
   visible grey/canvas tint at the corners). */
html.is-mobile .listings-split__list {
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  height: var(--bottom-sheet-height);
  min-height: 0;
  overflow: hidden;
  background: white;
  border-top-left-radius: 18px;
  border-top-right-radius: 18px;
  -webkit-box-shadow: 0 -16px 40px -16px rgba(15, 23, 42, 0.18);
  box-shadow: 0 -16px 40px -16px rgba(15, 23, 42, 0.18);
  position: relative;
  margin-top: -18px;
  z-index: 2;
}

/* Strip the parent's background on mobile so the rounded corners
   of the sheet show the MAP underneath, not the canvas tint. */
html.is-mobile .listings-split {
  background: transparent !important;
}
html.is-mobile .listings-split__header {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
}
html.is-mobile .listings-split__grid {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  padding: 0 12px 16px;
}

/* Compact card on mobile listings — wider/shorter cover image so a
   full card fits in the bottom-sheet visible area without scroll.
   Only scoped to `.listings-split__grid`; home rails + other
   surfaces keep the default aspect ratio. */
html.is-mobile .listings-split__grid .card--listing__media {
  aspect-ratio: 16 / 10;
}
html.is-mobile .listings-split__grid .card--listing__body {
  padding-top: 8px;
  padding-bottom: 8px;
}
html.is-mobile .listings-split__grid .card--listing__title {
  font-size: 14px;
  line-height: 1.25;
}

/* Smooth snap-to-state animation — applied only WHEN the user
   isn't actively dragging. The drag handler removes the
   `is-snapping` modifier on touchstart and re-adds it on touchend
   so the live drag stays butter-smooth (no transition lag). */
html.is-mobile .listings-split.is-snapping .listings-split__list,
html.is-mobile .listings-split.is-snapping .listings-split__map-panel {
  -webkit-transition: height 280ms cubic-bezier(0.32, 0.72, 0, 1);
  transition: height 280ms cubic-bezier(0.32, 0.72, 0, 1);
}

/* Drag handle injected by Scripts/listings/index.js as the first
   child of `.listings-split__list`. We use a real DOM element so
   touch events can bind directly. The element is intentionally
   tall (28px) for an easy hit zone; the 44×5 pill bar is
   rendered via `::before`. `touch-action: none` tells the
   browser to hand all touch on this element to JS so our drag
   can preventDefault during the move. `z-index: 4` keeps the
   handle above everything else inside the panel. */
html.is-mobile .rnly-split-handle {
  display: block;
  position: relative;
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  height: 32px;
  width: 100%;
  cursor: -webkit-grab;
  cursor: grab;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-user-select: none;
  -webkit-tap-highlight-color: transparent;
  -ms-touch-action: none;
  touch-action: none;
  z-index: 10;
  background: white;
  /* Match the panel's rounded top corners — the handle paints
     OVER them, so it carries the radius itself. */
  border-top-left-radius: 18px;
  border-top-right-radius: 18px;
}
html.is-mobile .rnly-split-handle:active { cursor: -webkit-grabbing; cursor: grabbing; }
html.is-mobile .rnly-split-handle::before {
  content: '';
  position: absolute;
  top: 12px;
  left: 50%;
  -webkit-transform: translateX(-50%);
  -ms-transform: translateX(-50%);
  transform: translateX(-50%);
  width: 56px;
  height: 6px;
  border-radius: 9999px;
  background: rgb(160 155 150);
  pointer-events: none;
}

/* Mobile toolbar — two-line header:
     Row 1: result count ("68 Horses...")
     Row 2: presets + All-filters (LEFT) | Sort-by (RIGHT)
   The toolbar stays sticky and translucent like the desktop, just
   stacks its rows. */
html.is-mobile .listings-split__toolbar {
  position: sticky;
  top: 0;
  z-index: 4;
  padding: 10px 12px;
  background: color-mix(in srgb, var(--bg-surface) 96%, transparent);  /* tq-8334 (R11): was rgba(255,255,255,.96) */
  backdrop-filter: saturate(160%) blur(14px);
  /* iOS Safari renders 1px solid borders darker than the design
     intent because of how WebKit anti-aliases hairlines on top of
     a backdrop-filtered surface. Use a near-white solid colour
     and a 0.5px stroke so it reads as a soft separator instead
     of a dark line. Same fix used on the bottom-nav border. */
  border-bottom: 0.5px solid rgb(244 244 245);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: stretch;
  -ms-flex-align: stretch;
  align-items: stretch;
  gap: 10px;
  -ms-flex-wrap: nowrap;
  flex-wrap: nowrap;
  overflow: visible;
}
html.is-mobile .listings-split__toolbar > [data-result-count],
html.is-mobile .listings-split__toolbar > h1 {
  width: 100%;
  font-size: 17px;
  font-weight: 600;
  margin: 0;
  text-align: left;
}
html.is-mobile .listings-split__toolbar-actions {
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
  -ms-flex-direction: row;
  flex-direction: row;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  width: 100%;
  gap: 6px;
  -ms-flex-wrap: nowrap;
  flex-wrap: nowrap;
}
/* Left cluster: presets + All-filters; Right cluster: Sort-by.
   We use `margin-left: auto` on the Sort-by control to push it
   to the far right regardless of how many presets render. */
html.is-mobile .listings-split__toolbar-actions [data-qf-group="sort"],
html.is-mobile .listings-split__toolbar-actions :last-child {
  margin-left: auto;
}

/* The filter-toggle button on mobile (rendered into the toolbar
   on _MobileFiltersTrigger.cshtml). */

/* Hide the desktop quick-filter bar on mobile in favor of the
   single Filters button + sheet. */
html.is-mobile .listings-split__quickbar { display: none !important; }

/* Map/list toggle button — removed in favor of the drag-to-resize
   handle. The user can pull the listings panel up/down to size the
   map vs. list panes; no separate FAB needed. */

/* The legacy mobile floating "View map / View list" toggle is also
   superseded by the drag-handle interaction. */
html.is-mobile .listings-split__map-toggle { display: none !important; }
html.is-mobile [data-map-toggle] { display: none !important; }

/* When in "list" mode the map pane collapses — but we always keep
   a hairline so the user can pull it back up. */
/* "list" / expanded — sheet takes nearly the whole viewport.
   `--bottom-sheet-height` is overridden by JS to a measured
   value, but we set a CSS fallback in case JS hasn't run. */
html.is-mobile .listings-split[data-mb-mode="list"] {
  --bottom-sheet-height: calc(100dvh - 60px);
}

/* "map" / collapsed — sheet shrinks to just the header + filter
   row so the result count and Sort/Filter buttons stay reachable
   while the map fills everything above. The cards grid hides. */
html.is-mobile .listings-split[data-mb-mode="map"] .listings-split__grid {
  display: none !important;
}

/* tq-9559 (A291): the seller pill's colours as tokens (they were inline styles in Sellers/Detail.cshtml). */
.rnly-seller-pill__avatar {
  background-color: var(--utility-neutral-800);
  color: var(--alpha-white-100);
}
.rnly-seller-pill__name {
  color: var(--text-primary);
}
.rnly-seller-pill__meta {
  color: var(--text-tertiary);
  line-height: 1.3;
}
/* ════════════════════════════════════════════════════════════════════
   LISTINGS / MOBILE PWA SHELL
   Mobile-only full-viewport map with overlaid filter pills at the top
   and a horizontally-snapping listing carousel at the bottom.

   Gated on `html.is-mobile` ONLY — that class is set synchronously by
   Scripts/pwa.js during page boot, BEFORE the first paint, so the
   mobile layout is in place from the very first render. No FOUC of
   the legacy bottom-sheet layout while the JS shell loads.

   The shell module (Scripts/listings/modules/mobile-pwa-shell.js)
   still sets `data-pwa-shell` at runtime for JS-driven behaviours
   (drawer open/close dimming, etc.), but layout doesn't depend on it.

   This file is imported AFTER `pages/split-map.css` in `_index.css`,
   so on equal specificity our rules win the cascade vs. the legacy
   bottom-sheet rules.
   ════════════════════════════════════════════════════════════════════ */

/* ════════════════════════════════════════════════════════════════
   PULL-TO-REFRESH / SWIPE-BACK / SCROLL-TO-RELOAD LOCKDOWN
   ════════════════════════════════════════════════════════════════
   Pan-and-release on the Google Map was triggering a full page
   reload on Chrome Android and iOS. Two browser behaviours fight
   for the gesture:
     1. Chrome Android pull-to-refresh (location.reload())
     2. iOS Safari edge-swipe-back (history.back())
   When the gesture wins and a navigation fires mid-pan, the
   service worker intercepts; on flaky mobile network the fetch
   rejects, the SW returns its 503 "Offline" fallback, and the
   browser renders that as "Can't open this page".

   To stop the gestures from EVER reaching the browser:
     • Position-fixed the body so there's no scroll context for
       PTR to engage with.
     • overscroll-behavior: none on html + body for the spec-
       compliant blocker on browsers that honour it.
     • overflow: hidden + height: 100dvh as a backstop.
     • touch-action: none on html so the body's empty regions
       don't accept default browser touch actions. Children
       with their own touch-action (the Google Map, the
       carousel, the drawer body) override this.

   The class is set by mobile-pwa-shell.js on init. (The inline
   first-paint <script> lived in _Layout.Mobile.cshtml, which was never
   resolved and was deleted in tq-8582.) */

html.is-pwa-map {
  height: 100dvh !important;
  height: 100vh !important; /* legacy fallback */
  overflow: hidden !important;
  -ms-scroll-chaining: none !important;
  overscroll-behavior: none !important;
  -webkit-text-size-adjust: 100%;
  -ms-touch-action: none;
  touch-action: none;
  position: fixed;
  inset: 0;
  width: 100%;
}
html.is-pwa-map body {
  position: fixed !important;
  inset: 0 !important;
  width: 100% !important;
  height: 100% !important;
  overflow: hidden !important;
  -ms-scroll-chaining: none !important;
  overscroll-behavior: none !important;
  /* No touch-action here — children (map, carousel, drawer body)
     all have their own values; setting this would inherit and
     break their default scroll/pan handling. */
}

html.is-mobile .listings-split {
  --bottom-sheet-height: 0;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  /* tq-9579 (A298): the viewport BELOW the app header and above the shell's bottom reserve (the safe area for a guest; the
     nav, signed in: below), not 100dvh: 100dvh from under the header overhung the frame, which clipped the map's bottom
     edge and Google's attribution with it. The shell's own tokens and 100svh, as .app-shell (mobile-shell.css); the
     frame chain has no definite height to take a percentage of. */
  height: calc(100svh - var(--rnly-mb-topbar-h, 64px) - env(safe-area-inset-bottom, 0px));
  overflow: hidden;
  background: transparent !important;
  -ms-scroll-chaining: none;
  overscroll-behavior: none;
}

html.is-mobile body:not([data-signed-in="false"]) .listings-split {
  height: calc(100svh - var(--rnly-mb-topbar-h, 64px) - var(--rnly-mb-nav-h, 0px));   /* tq-9579: signed in, above the nav */
}

/* ─── Map fills the entire viewport (behind everything else) ─── */
html.is-mobile .listings-split__map-panel {
  position: absolute !important;
  inset: 0 !important;
  height: 100% !important;   /* tq-9579: the split's height (see above), so the attribution sits on screen */
  width: 100% !important;
  z-index: 1;
  -webkit-box-ordinal-group: 1;
  -ms-flex-order: 0;
  order: 0;
}
html.is-mobile .listings-split__map-panel .listings-map {
  width: 100%;
  height: 100%;
  margin-bottom: 0;
}

/* ─── Hide the legacy list panel (cards stay in DOM for the filter
       engine; visibility hidden + zero size keeps them out of layout
       while preserving the data-* attribute reads) ─── */
html.is-mobile .listings-split__list {
  position: absolute !important;
  inset: 0 !important;
  visibility: hidden !important;
  pointer-events: none !important;
  height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  background: transparent !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  overflow: hidden !important;
}

/* Bottom-sheet drag handle — child of the hidden list panel; force
   removed so it can't reappear if anything overrides visibility. */
html.is-mobile .rnly-split-handle {
  display: none !important;
}

/* ─── Filter cluster (Presets + All filters) overlaid on the map.
       The cluster is moved DOM-wise by mobile-pwa-shell.js out of
       the hidden list panel and into `.listings-split__map-panel`,
       then absolutely positioned at top:12px / left:12px so it
       sits at the exact same vertical level as Google's map
       controls (which Google places at top:12px right:12px). ─── */
html.is-mobile .listings-mobile-actions {
  position: absolute !important;
  top: calc(env(safe-area-inset-top, 0px) + 12px);   /* tq-9559: clear the notch in a standalone PWA */
  left: 12px;
  /* No z-index here — `position: absolute + z-index` would form
     a stacking context that traps descendant z-indexes (most
     importantly the Presets popover at z-index 9700, which was
     getting stuck behind the carousel). The cluster still
     renders above the map by source order (the map module
     appends it AFTER the map container). */
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
  -ms-flex-direction: row;
  flex-direction: row;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
  width: auto !important;
  margin: 0 !important;
  padding: 0 !important;
  background: transparent !important;
  -ms-flex-wrap: nowrap;
  flex-wrap: nowrap;
  visibility: visible !important;
  pointer-events: auto;
}
html.is-mobile .listings-mobile-actions * {
  visibility: visible;
}
html.is-mobile .listings-mobile-actions > * {
  margin: 0 !important;
}

/* Hide the Sort pill — only Presets + All filters belong on the
   floating overlay row. */
html.is-mobile .listings-mobile-actions [data-qf-group="sort"] {
  display: none !important;
}

/* Pill chrome — match the height + visual weight of Google's
   zoom-control buttons (36px square pills) so the two clusters
   sit at exactly the same vertical level on the map. */
html.is-mobile .listings-mobile-actions .qf-pill {
  background: color-mix(in srgb, var(--bg-surface) 96%, transparent);  /* tq-8334 (R11): was rgba(255,255,255,.96) */
  backdrop-filter: saturate(160%) blur(14px);
  -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.12);
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.12);
  border: 1px solid var(--border-primary, #e5e7eb);
  height: 36px;
  padding: 0 14px;
  font-size: 13px;
  font-weight: 600;
  line-height: 1;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
}
/* Active filter state — keep the desktop green/white identity on
   mobile too. Without this override, the white-glassy default
   above wins and the pill's text + icon turn invisible on white
   when filters are applied. */
html.is-mobile .listings-mobile-actions .qf-pill.is-active {
  background: var(--bg-accent-solid);
  color: var(--text-on-accent-solid);
  border-color: var(--utility-emerald-600, #059669);
  backdrop-filter: none;
}
html.is-mobile .listings-mobile-actions .qf-pill.is-active i {
  color: #ffffff;
}
/* The All-filters pill carries its `is-active` state via JS in
   initResultCount; the count badge inside flips to white-on-
   transparent so it stays legible against the green fill. */
html.is-mobile .listings-mobile-actions .qf-pill--all.is-active .qf-pill__badge {
  background: rgba(255, 255, 255, 0.22);
  color: #ffffff;
}

/* tq-9559 (A291): Presets + Filters are ICON-ONLY on phones: 44px touch targets; the names (aria-label) and the canonical
   tooltip come from mobile-pwa-shell.js. The text and the chevron hide; the active-filter count stays as a corner badge. */
html.is-mobile .listings-mobile-actions .qf-pill {
  position: relative;
  width: 44px;
  height: 44px;
  padding: 0;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 9999px;
}
html.is-mobile .listings-mobile-actions .qf-pill > span:not(.qf-pill__badge),
html.is-mobile .listings-mobile-actions .qf-pill .qf-pill__chev {
  display: none;
}
html.is-mobile .listings-mobile-actions .qf-pill > i:first-child {
  font-size: 16px;
}
html.is-mobile .listings-mobile-actions .qf-pill .qf-pill__badge {
  position: absolute;
  top: -4px;
  right: -4px;
}
/* The seller page's pill (the top overlay) takes the first row; the icon buttons sit beneath it. */
html.is-mobile .has-mobile-overlay .listings-mobile-actions {
  top: calc(env(safe-area-inset-top, 0px) + 12px + 44px + 8px);
}

/* Hide Google's fullscreen control on mobile — the PWA shell
   already renders full-viewport, so the toggle is meaningless. */
html.is-mobile .rnly-map-controls__btn[aria-label="Toggle fullscreen map"] {
  display: none !important;
}
/* The fullscreen-only Filters button inside the same pill is also
   irrelevant on mobile (we have our own All-filters button now). */
html.is-mobile .rnly-map-controls__btn--filters {
  display: none !important;
}
/* Once both children of the first map-controls wrap are hidden
   the wrap itself collapses but still takes space in Google's
   internal flex; hide it outright. */
html.is-mobile .rnly-map-controls:has(.rnly-map-controls__btn[aria-label="Toggle fullscreen map"]) {
  display: none !important;
}

/* Hide the standalone mobile filter trigger button (we use the
   floating cluster above instead). */

/* ════════════════════════════════════════════════════════════════
   BOTTOM STACK
   Wrapper that pins both the count badge and the carousel to the
   bottom of the viewport in a vertical column. Lets the badge
   sit naturally just above the cards without any carousel-height
   guesswork in CSS.
   ════════════════════════════════════════════════════════════════ */
html.is-mobile .listings-mobile-bottom {
  position: fixed;
  left: 0;
  right: 0;
  /* Lifted so Google's logo + "Terms / Report a problem" strip
     remains visible (Maps Platform ToS requires attribution stay
     unobstructed). The 24px buys headroom for the attribution bar;
     the safe-area-inset accounts for iOS home-indicator devices in
     PWA standalone mode. */
  bottom: calc(env(safe-area-inset-bottom, 0px) + 24px);
  z-index: 50;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  pointer-events: none;
}
html.is-mobile .listings-mobile-bottom > * {
  pointer-events: auto;
}
/* tq-9579 (A298): signed in, the stack sits above the VISIBLE bottom nav. --rnly-mb-nav-h (mobile-shell.css) already holds
   the nav AND the safe area, so it replaces the safe-area term (never both). A guest has no nav, and a hidden / collapsed
   nav gives its space back: both keep the safe-area offset above. The 24px still clears the map attribution, which now
   sits at the map's bottom edge, on screen (the split no longer overhangs). */
html.is-mobile body:not([data-signed-in="false"]) .listings-mobile-bottom {
  bottom: calc(var(--rnly-mb-nav-h, env(safe-area-inset-bottom, 0px)) + 24px);
}
html.is-mobile[data-rnly-mb-nav-hidden] body .listings-mobile-bottom,
html.is-mobile[data-rnly-mb-nav-collapsed] body .listings-mobile-bottom {
  bottom: calc(env(safe-area-inset-bottom, 0px) + 24px);
}
/* tq-9593 (A306): the scrollport stays HIT-TESTABLE. A298 (tq-9579) made it pointer-events:none so its paint gutter would
   not cover the map attribution; iOS WebKit then never touch-scrolled it (its overflow scrolling hit-tests the scroll
   view itself), so the cards would not swipe. The gutter now ends above the attribution instead (margin-bottom below). */

/* Count badge — small white pill, shown just above the carousel. */
.listings-mobile-count {
  margin: 0 0 6px 0;
  padding: 0 14px;
  height: 28px;
  display: none;            /* JS populates the text and flips display via :not(:empty) */
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  font-size: 12px;
  font-weight: 600;
  color: var(--text-primary, #18181b);
  background: color-mix(in srgb, var(--bg-surface) 96%, transparent);  /* tq-8334 (R11): was rgba(255,255,255,.96) */
  backdrop-filter: saturate(160%) blur(14px);
  -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.12);
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.12);
  border: 1px solid var(--border-primary, #e5e7eb);
  border-radius: 9999px;
  white-space: nowrap;
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
}
.listings-mobile-count:not(:empty) {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

/* Bottom pill — used by the seller detail page in place of the
   listings counter. Same vertical slot above the carousel; same
   white-glass chrome. The pill carries the seller's avatar + name
   + meta from Sellers/Detail.cshtml unchanged; this rule just gives
   it pill geometry once mobile-pwa-shell.js drops it into the
   bottom wrapper. */
.listings-mobile-bottom-pill {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
  margin: 0 0 6px 0;
  padding: 6px 14px 6px 6px;
  max-width: calc(100vw - 24px);
  background: color-mix(in srgb, var(--bg-surface) 96%, transparent);  /* tq-8334 (R11): was rgba(255,255,255,.96) */
  backdrop-filter: saturate(160%) blur(14px);
  -webkit-box-shadow: 0 2px 10px rgba(0, 0, 0, 0.14);
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.14);
  border: 1px solid var(--border-primary, #e5e7eb);
  border-radius: 9999px;
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
}
/* Strip the original "in-toolbar" min-width / chrome that the
   pill carried as part of the desktop seller header. */
.listings-mobile-bottom-pill h1 {
  font-size: 13px !important;
}
.listings-mobile-bottom-pill p {
  font-size: 11px !important;
}

/* ════════════════════════════════════════════════════════════════
   FLOATING OVERLAY (seller details card variant)
   The seller detail page lifts its profile-summary cluster into
   the map panel via [data-pwa-overlay]. Mounted as a small
   horizontal pill at the top, beside (not behind) the Google
   map controls. The .listings-mobile-actions filter cluster
   uses a different selector and stays at top-left independently.
   ════════════════════════════════════════════════════════════════ */
html.is-mobile .listings-mobile-overlay {
  position: absolute !important;
  top: calc(env(safe-area-inset-top, 0px) + 12px);   /* tq-9559: the seller pill's top row, clear of the notch */
  left: 12px;
  /* Leave 60px on the right for the Google zoom controls (36px
     button + 12px right margin + 12px breathing room). In
     landscape, also cap at 360px so the pill doesn't stretch
     across the full width and look stranded. */
  right: 60px;
  max-width: 360px;
  z-index: 5;
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
  -ms-flex-direction: row;
  flex-direction: row;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 10px;
  padding: 6px 14px 6px 6px;
  margin: 0 !important;
  min-height: 44px;
  background: color-mix(in srgb, var(--bg-surface) 96%, transparent);  /* tq-8334 (R11): was rgba(255,255,255,.96) */
  backdrop-filter: saturate(160%) blur(14px);
  -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.12);
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.12);
  border: 1px solid var(--border-primary, #e5e7eb);
  border-radius: 9999px;
  visibility: visible !important;
  pointer-events: auto;
  min-width: 0;
}
html.is-mobile .listings-mobile-overlay * {
  visibility: visible;
}

/* Compress the existing seller-summary children (Razor renders a
   36px back button, 48px avatar circle, and a two-line text
   block). Shrink them down so the pill stays on a single row. */
html.is-mobile .listings-mobile-overlay > a {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  width: 32px !important;
  height: 32px !important;
}
html.is-mobile .listings-mobile-overlay > a i {
  font-size: 14px;
}
/* The avatar circle (Razor: w-12 h-12). */
html.is-mobile .listings-mobile-overlay > div:nth-child(2) {
  width: 32px !important;
  height: 32px !important;
  font-size: 12px !important;
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
}
/* The text block (name + meta line). */
html.is-mobile .listings-mobile-overlay > div:last-child {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
}
html.is-mobile .listings-mobile-overlay h1 {
  font-size: 13px !important;
  line-height: 1.2;
  margin: 0;
}
html.is-mobile .listings-mobile-overlay h1 span {
  display: inline-block;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
html.is-mobile .listings-mobile-overlay p {
  font-size: 10.5px !important;
  line-height: 1.2;
  margin: 1px 0 0;
  -ms-flex-wrap: nowrap !important;
  flex-wrap: nowrap !important;
}
/* Drop the location and member-since spans on the small overlay —
   keep only the listings count (always the last span). */
html.is-mobile .listings-mobile-overlay p > span:not(:last-child) {
  display: none;
}

/* ════════════════════════════════════════════════════════════════
   BOTTOM CAROUSEL — fixed at the bottom of the viewport.
   ════════════════════════════════════════════════════════════════ */

.listings-mobile-carousel {
  display: none;
  position: relative;       /* sits inside .listings-mobile-bottom */
  width: 100%;
  overflow-x: auto;
  overflow-y: visible;
  -ms-scroll-snap-type: x mandatory;
  scroll-snap-type: x mandatory;
  -webkit-overflow-scrolling: touch;
  scroll-behavior: smooth;
  scrollbar-width: none;
  /* Inline padding = (viewport - cardWidth) / 2 so the first &
     last cards can scroll-snap fully to centre. Portrait phones
     get ~22vw of padding; landscape phones get ~240px. Replaces
     the previous fixed `12vw` which was too tight in landscape
     and left first/last cards stuck off-centre.
     Bottom padding is just 12px now — the safe-area inset is
     handled by .listings-mobile-bottom's `bottom` offset. */
  padding: 8px calc(50vw - min(28vw, 160px)) 12px;
  /* tq-9579 (A298): a shadow PAINT GUTTER. A scrollport clips at its padding box (overflow-x:auto makes overflow-y clip
     too), and the active card's shadow (0 14px 36px -10px) reaches 12px above and 40px below the card, more than the
     8px / 12px paint room: it was hard-cropped. The padding grows to cover it and negative margins give the same space
     back (all but 32px, which lift the cards so the whole shadow box stays on screen and the scrollport ends above the
     attribution; the snap and the next-card peek are unchanged). tq-9593: the scrollport keeps its pointer events (a
     pointer-events:none scroller doesn't touch-scroll on iOS). */
  padding-top: 12px;
  padding-bottom: 40px;
  margin-top: -4px;
  /* tq-9593: 32px less than the 40px gutter, lifting the cards so the scrollport's box (it takes touches) ends above the
     map attribution bar (~14px at the map's bottom edge); the shadow still paints in full, above the visible bottom. */
  margin-bottom: -8px;
  white-space: nowrap;
  /* Vertical pans/zooms on the map underneath fall through. The
     carousel only consumes horizontal touches inside its own bounds. */
  -ms-touch-action: pan-x;
  touch-action: pan-x;
}
.listings-mobile-carousel::-webkit-scrollbar {
  display: none;
}

html.is-mobile .listings-mobile-carousel {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

.listings-mobile-carousel__card {
  scroll-snap-align: center;
  scroll-snap-stop: always;
  /* `min(56vw, 320px)` keeps the card a comfortable phone-size in
     portrait but caps the width when the user rotates to
     landscape (where 56vw would balloon to ~450px and crowd the
     map underneath). Tablet sizes (>800px) also benefit from
     the cap. */
  -webkit-box-flex: 0;
  -ms-flex: 0 0 min(56vw, 320px);
  flex: 0 0 min(56vw, 320px);
  margin-right: 10px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: stretch;
  -ms-flex-align: stretch;
  align-items: stretch;
  background: var(--bg-surface);  /* tq-8374 (R11b): was #fff under token-coloured text (dark 1.09:1); white in light */
  border-radius: 14px;
  -webkit-box-shadow:
    0 8px 24px -10px rgba(15, 23, 42, 0.20),
    0 2px 4px -2px rgba(15, 23, 42, 0.08);
  box-shadow:
    0 8px 24px -10px rgba(15, 23, 42, 0.20),
    0 2px 4px -2px rgba(15, 23, 42, 0.08);
  overflow: hidden;
  text-decoration: none;
  color: inherit;
  cursor: pointer;
  white-space: normal;
  -webkit-transform: scale(0.96);
  -ms-transform: scale(0.96);
  transform: scale(0.96);
  -webkit-transition:
    -webkit-transform 280ms cubic-bezier(0.4, 0, 0.2, 1),
    -webkit-box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
  transition:
    -webkit-transform 280ms cubic-bezier(0.4, 0, 0.2, 1),
    -webkit-box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
  transition:
    transform 280ms cubic-bezier(0.4, 0, 0.2, 1),
    box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
  transition:
    transform 280ms cubic-bezier(0.4, 0, 0.2, 1),
    box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1),
    -webkit-transform 280ms cubic-bezier(0.4, 0, 0.2, 1),
    -webkit-box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
  will-change: transform;
  -webkit-tap-highlight-color: transparent;
}
.listings-mobile-carousel__card.is-active {
  -webkit-transform: scale(1);
  -ms-transform: scale(1);
  transform: scale(1);
  -webkit-box-shadow:
    0 14px 36px -10px rgba(15, 23, 42, 0.30),
    0 2px 6px -2px rgba(15, 23, 42, 0.10);
  box-shadow:
    0 14px 36px -10px rgba(15, 23, 42, 0.30),
    0 2px 6px -2px rgba(15, 23, 42, 0.10);
}
.listings-mobile-carousel__card.is-hidden {
  display: none;
}
.listings-mobile-carousel__card:last-child {
  margin-right: 0;
}

/* Cover image — sits ON TOP of the card. 4:3 ratio keeps the
   overall card height compact. */
.listings-mobile-carousel__media {
  position: relative;
  width: 100%;
  aspect-ratio: 4 / 3;
  background: rgb(244 244 245);
  overflow: hidden;
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
}
.listings-mobile-carousel__media img {
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
  object-fit: cover;
  display: block;
}
.listings-mobile-carousel__media-fallback {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 100%;
  height: 100%;
  color: rgb(168 162 158);
  font-size: 22px;
}

/* Wishlist heart overlay on the thumbnail — matches the desktop
   card position (top:12px right:12px, white icon with a soft
   drop-shadow, no background pill). The element ALSO carries
   `.card--listing__fav` so the desktop styles in
   `components/listing-card.css` apply too — the rules below just
   strip the background pill and ensure the inset matches. */
.listings-mobile-carousel__fav {
  position: absolute;
  top: 12px;
  right: 12px;
  width: auto;
  height: auto;
  border: 0;
  padding: 0;
  background: transparent;
  -webkit-box-shadow: none;
  box-shadow: none;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}

/* Detail strip — sits to the right of the thumbnail. Mirrors the
   _BuyerListingCard.cshtml row layout: title + price band on top,
   meta + asking price middle, location on the bottom. */
.listings-mobile-carousel__body {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  padding: 8px 10px 8px 12px;
  min-width: 0;
  gap: 2px;
}

/* Top row — title (left) + price band (right). Aligned on the
   baseline so the horse name sits on the same text baseline as
   the price-band label ("High 5's"); `flex-start` was anchoring
   tops, which left the smaller-font price label visually higher
   than the title. */
.listings-mobile-carousel__title-row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: baseline;
  -ms-flex-align: baseline;
  align-items: baseline;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 6px;
  min-width: 0;
}
.listings-mobile-carousel__title {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto;
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary, #18181b);
  line-height: 1.2;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  margin: 0;
  min-width: 0;
}

/* Price band cluster (icon + tier label + scale bar). Reuses the
   .rnly-price-scale styles from the listings page so the visual
   identity matches the desktop card. */
.listings-mobile-carousel__price-band {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 2px;
  min-width: 4.25rem;
}
.listings-mobile-carousel__price-band-row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
  gap: 4px;
  font-size: 10.5px;
  font-weight: 500;
  color: var(--text-secondary, #525252);
}
.listings-mobile-carousel__price-band-row i {
  font-size: 10px;
  color: var(--text-tertiary, #71717a);
}

/* Meta row — Age · Height · Discipline | Asking price (when shown).
   Sized to match the landing-page `.card--listing__facts`
   (text-xs / text-tertiary) so the mini cards read as the same
   visual family as the home rail. */
.listings-mobile-carousel__meta-row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: baseline;
  -ms-flex-align: baseline;
  align-items: baseline;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 6px;
  min-width: 0;
  margin-top: 2px;
}
.listings-mobile-carousel__meta {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto;
  font-size: 12px;
  color: var(--text-tertiary, #71717a);
  line-height: 1.3;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  min-width: 0;
}
.listings-mobile-carousel__price {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary, #18181b);
  white-space: nowrap;
}

/* Location — matches `.card--listing__location` on the home rail
   (text-xs / text-tertiary, no icon, plain block). */
.listings-mobile-carousel__location {
  font-size: 12px;
  color: var(--text-tertiary, #71717a);
  margin: 2px 0 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* ── Landscape phones (short viewport) ──
   The default 4:3 cover image + full body makes the card eat ~80%
   of a 400px-tall landscape phone. Tighten the card width and use
   a 16:9 cover so the carousel sits comfortably without crowding
   the map. Tablet landscape (wider AND taller) keeps the default. */
@media (orientation: landscape) and (max-height: 520px) {
  .listings-mobile-carousel__card {
    -webkit-box-flex: 0;
    -ms-flex: 0 0 280px;
    flex: 0 0 280px;
  }
  .listings-mobile-carousel__media {
    aspect-ratio: 16 / 9;
  }
  .listings-mobile-carousel {
    padding-inline: calc(50vw - 140px);
  }
}

/* tq-9559 (A291): on a short landscape phone the seller page has no height for a second top row. The icon buttons move
   to the right of the pill (left of the 60px zoom zone), and the cards use a wider cover so the carousel starts below
   that row. Only the seller page (the shell carries .has-mobile-overlay); /Listings keeps its landscape layout. */
@media (orientation: landscape) and (max-height: 520px) {
  html.is-mobile .has-mobile-overlay .listings-mobile-actions {
    top: calc(env(safe-area-inset-top, 0px) + 12px);
    left: auto;
    right: 60px;
  }
  html.is-mobile .has-mobile-overlay .listings-mobile-overlay {
    right: calc(60px + 44px + 8px + 44px + 8px);
  }
  .has-mobile-overlay .listings-mobile-carousel__media {
    aspect-ratio: 21 / 9;
  }
}

/* Empty-state slide — shown when no listings match the active filters. */
.listings-mobile-carousel__empty {
  display: none;
  scroll-snap-align: center;
  -webkit-box-flex: 0;
  -ms-flex: 0 0 76vw;
  flex: 0 0 76vw;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  padding: 18px 22px;
  background: rgba(255, 255, 255, 0.94);
  border-radius: 14px;
  -webkit-box-shadow: 0 8px 24px -10px rgba(15, 23, 42, 0.20);
  box-shadow: 0 8px 24px -10px rgba(15, 23, 42, 0.20);
  text-align: center;
  color: var(--text-secondary, #525252);
  font-size: 13px;
  white-space: normal;
}
.listings-mobile-carousel__empty i {
  font-size: 22px;
  margin-bottom: 6px;
  color: rgb(168 162 158);
}
.listings-mobile-carousel--empty .listings-mobile-carousel__empty {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

/* When the user has the filter drawer open we don't want the carousel
   floating on top of the drawer. The drawer dims everything beneath
   via its own backdrop; nudge the carousel out of the way visually. */
html.is-mobile [data-pwa-shell].is-drawer-open .listings-mobile-carousel {
  opacity: 0.0;
  pointer-events: none;
  -webkit-transition: opacity 160ms ease;
  transition: opacity 160ms ease;
}
/* ==========================================================================
   Horse Detail – Airbnb-inspired listing detail page
   Scoped under .horse-details to avoid global impact.
   ========================================================================== */

/* ── Container ── */
.horse-details {
  background-color: var(--bg-card, #fff);
  min-height: 100vh;
}

.hd-container {
  margin-left: auto;
  margin-right: auto;
}

html.is-mobile .panel-content > .hd-container { padding-top: 32px; padding-bottom: 16px; }

html.is-mobile .container-wrapper > .container-panel > .panel-body > .panel-content > .hd-container {
  padding-left: var(--rnly-mb-gutter);
  padding-right: var(--rnly-mb-gutter);
}

.hd-container {
  max-width: 1120px;
  /* Mobile padding mirrors the listing-detail modal's body on
     mobile, which gets forced to 16px on all sides via
     `mobile-shell.css` (`html.is-mobile #rnly-horse-detail-modal
     .modal-body > div[class~="w-full"] { padding: 16px !important }`).
     Matching here gives the full-page mobile view the same content
     gutters as the modal. */
  padding: 16px 16px 48px;
}

@media (min-width: 768px) {
  /* Tablet+: jump to the modal's `md:px-12` (48px horizontal,
     24px vertical) so the wider surface reads as the same
     content well as the desktop modal. */
  .hd-container {
    padding: 24px 48px 64px;
  }
}

@media (min-width: 1024px) {
  /* Desktop: same gutter as tablet (the modal stays at
     `md:px-12`); bump the bottom padding for the longer-form
     full page. */
  .hd-container {
    padding: 24px 48px 64px;
  }
}

/* ── Header: title + Share/Save ── */
.hd-header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 1rem;
}
.collapse.show.hd-header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .hd-header {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.hd-header.items-baseline { margin-bottom: 10px; }
html.is-mobile .hd-header:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .hd-header.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-header.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-header.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-header.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-header.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-header.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}
.hd-header {
  padding: 24px 0 16px;
}

.hd-header__title {
  margin: 0px;
  font-size: 1.625rem;
  font-weight: 600;
  line-height: 1.25;
  color: var(--text-primary);
}

.hd-header__actions {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.25rem;
  padding-top: 0.25rem;
}

.collapse.show.hd-header__actions {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .hd-header__actions {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.hd-header__actions.items-baseline { margin-bottom: 10px; }

html.is-mobile .hd-header__actions:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .hd-header__actions.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.hd-header__actions[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-header__actions.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-header__actions.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .hd-header__actions:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-header__actions.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .hd-header__actions:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-header__actions.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-header__actions.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

/* ── Photo Grid (Airbnb 1+4 layout) ── */
/* ── Base grid ── */
.hd-photo-grid {
  position: relative;
  display: grid;
  overflow: hidden;
}
html.is-mobile #rnly-wizard-modal .hd-photo-grid.grid-cols-2 {
  grid-template-columns: minmax(0, 1fr);
  gap: 16px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] .hd-photo-grid {
  width: 100%;
  max-width: 100%;
}
.hd-photo-grid {
  gap: 3px;
  border-radius: 12px;
  aspect-ratio: 2 / 1;
}

/* 5+ items: cover left 50% full height, 4 tiles in 2×2 on right */

/* 4 items: cover left 50% full height, 3 tiles stacked on right (top 2, bottom 1 full) */

/* 3 items: cover left 50% full height, 2 tiles stacked on right */

/* 2 items: cover left 50% full height, 1 tile right */

/* 1 item: full-width hero */
.hd-photo-grid--hero-only {
  position: relative;
  display: block;
  overflow: hidden;
  border-radius: 12px;
  aspect-ratio: 16 / 9;
}

.hd-photo-grid--hero-only .hd-photo-grid__hero {
  height: 100%;
  width: 100%;
}

.hd-photo-grid--hero-only .hd-photo-grid__tile {
  display: none;
}

.listings-split__loading.hd-photo-grid--hero-only .hd-photo-grid__tile {
  display: none;
}

.hd-photo-grid img {
  display: block;
  height: 100%;
  width: 100%;
  cursor: pointer;
  -o-object-fit: cover;
  object-fit: cover;
  -webkit-transition: -webkit-filter 0.2s ease;
  transition: -webkit-filter 0.2s ease;
  transition: filter 0.2s ease;
  transition: filter 0.2s ease, -webkit-filter 0.2s ease;
}

.hd-photo-grid__open:hover ~ img {
  -webkit-filter: brightness(0.92);
  filter: brightness(0.92);
}

/* Shimmer loading background for media containers */
.hd-photo-grid__hero,
.hd-photo-grid__tile,
.hd-photo-grid--hero-only .hd-photo-grid__hero,
[data-lightbox-open] {
  background: linear-gradient(
    90deg,
    var(--bg-skeleton, var(--bg-tertiary)) 25%,
    var(--bg-skeleton-highlight, var(--bg-secondary)) 37%,
    var(--bg-skeleton, var(--bg-tertiary)) 63%
  );
  background-size: 200% 100%;
  -webkit-animation: shimmer 1.5s ease-in-out infinite;
  animation: shimmer 1.5s ease-in-out infinite;
}

@media (prefers-reduced-motion: reduce) {
  .hd-photo-grid__hero,
  .hd-photo-grid__tile,
  [data-lightbox-open] {
    -webkit-animation: none;
    animation: none;
  }
}

.hd-photo-grid__hero {
  position: relative;
  overflow: hidden;
  grid-column: 1 / 3;
  grid-row: 1 / 3;
}

.hd-photo-grid__tile {
  position: relative;
  overflow: hidden;
}

/* tq-9458 (A268, isabella 900075628): the item's own open button, stretched over it. The item is its own stacking context, so a
   video's play badge / scrub / play-pause (z 5 / 8 / 9) stay ABOVE the button and hit-test as themselves; the image and video
   paint below it (one step above the base, because the image's hover filter makes it a stacking context of its own). The focus ring is the canonical one, inset, so the grid's rounded clip never cuts it. */
.hd-photo-grid__hero,
.hd-photo-grid__tile {
  isolation: isolate;
}

.hd-photo-grid__open {
  position: absolute;
  inset: 0;
  z-index: calc(var(--z-base) + 1);   /* over the image even when its hover filter makes it a stacking context of its own */
  padding: 0;
  border: 0;
  background: transparent;
  cursor: pointer;
}

.hd-photo-grid__open:focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: -2px;
}

.hd-photo-grid__show-all {
  position: absolute;
  bottom: 1rem;
  right: 1rem;
  z-index: 2;
  cursor: pointer;
  border-radius: 0.5rem;
  border-width: 1px;
  font-size: 0.8125rem;
  font-weight: 500;
  padding: 7px 15px;
  border-color: var(--text-primary);
  background-color: var(--bg-card, #fff);
  color: var(--text-primary);
  -webkit-transition: background-color 0.15s ease;
  transition: background-color 0.15s ease;
}

.hd-photo-grid__show-all:hover {
  background-color: var(--bg-primary-subtle, #f7f7f7);
}

/* Mobile: stack to single hero */
@media (max-width: 767px) {
  .hd-photo-grid {
    display: block;
    border-radius: 0px;
    aspect-ratio: 4 / 3;
  }

  .hd-photo-grid__hero {
    height: 100%;
  }

  .hd-photo-grid__tile {
    display: none;
  }

.listings-split__loading.hd-photo-grid__tile {
  display: none;
}

  .hd-photo-grid__show-all {
    bottom: 0.75rem;
    right: 0.75rem;
    font-size: 0.75rem;
    line-height: 1rem;
    padding: 6px 12px;
  }

  .hd-header {
    padding: 16px 0 12px;
  }

  .hd-header__title {
    font-size: 1.375rem;
  }
}

/* ── Facts row ── */

/* ── Two-column layout ── */
.hd-layout {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
.collapse.show.hd-layout {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .hd-layout {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.hd-layout.items-baseline { margin-bottom: 10px; }
html.is-mobile .hd-layout:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .hd-layout.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-layout.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-layout.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-layout.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-layout.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-layout.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}
.hd-layout {
  gap: 72px;
}

.hd-layout__content {
  min-width: 0px;
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0%;
  flex: 1 1 0%;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .hd-layout__content.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.hd-layout__content {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .hd-layout__content.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.hd-layout__content > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.hd-layout__sidebar {
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .hd-layout__sidebar:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .hd-layout__sidebar:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

.hd-layout__sidebar {
  width: 372px;
}

@media (max-width: 1023px) {
  .hd-layout {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
    gap: 0px;
  }
html.is-mobile #rnly-wizard-modal .flex.hd-layout.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

  .hd-layout__sidebar {
    display: none;
    width: 100%;
  }

.listings-split__loading.hd-layout__sidebar {
  display: none;
}

  .hd-layout__sidebar { /* Mobile uses bottom CTA bar */
  }
}

/* ── Section rhythm ── */
.hd-section {
  border-top-width: 1px;
  padding: 32px 0;
  border-color: var(--border-primary);
}

/* Seller row section (no heading, just border) */
.hd-section__row {
  border-top-width: 1px;
  padding: 24px 0;
  border-color: var(--border-primary);
}

.hd-section__heading {
  margin: 0px;
  margin-bottom: 1.25rem;
  font-weight: 600;
  color: var(--text-primary);
}

/* ── Modal section spacing (tighter) ── */

/* ── Offers grid (amenities-style) ── */
.hd-offers-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
html.is-mobile #rnly-wizard-modal .hd-offers-grid.grid-cols-2 {
  grid-template-columns: minmax(0, 1fr);
  gap: 16px;
}
html.is-mobile #rnly-wizard-modal .grid.hd-offers-grid {
  grid-template-columns: minmax(0, 1fr);
  gap: 16px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] .hd-offers-grid {
  width: 100%;
  max-width: 100%;
}
.hd-offers-grid {
  gap: 16px 24px;
}

.hd-offers-grid__item {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 1rem;
  padding-top: 0.25rem;
  padding-bottom: 0.25rem;
  font-size: 0.8125rem;
  line-height: 1.5rem;
}

.collapse.show.hd-offers-grid__item {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .hd-offers-grid__item {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.hd-offers-grid__item.items-baseline { margin-bottom: 10px; }

html.is-mobile .hd-offers-grid__item:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .hd-offers-grid__item.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.hd-offers-grid__item[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-offers-grid__item.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-offers-grid__item.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-offers-grid__item.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-offers-grid__item.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-offers-grid__item.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.hd-offers-grid__item {
  color: var(--text-secondary);
}

.hd-offers-grid__icon {
  width: 1.5rem;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  text-align: center;
  font-size: 1.125rem;
  line-height: 2rem;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .hd-offers-grid__icon:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .hd-offers-grid__icon:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

.hd-offers-grid__icon {
  color: var(--text-primary);
}

/* tq-8629 (A79): two columns on phones too (isabella): a tighter gap, and long labels wrap inside their column */
@media (max-width: 639px) {
  .hd-offers-grid {
    gap: 12px 16px;
  }

  .hd-offers-grid__item {
    min-width: 0px;
    gap: 0.75rem;
  }
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.hd-offers-grid__item {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .flex-1.hd-offers-grid__item > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}
}

/* ── Details grid ── */
.hd-details-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
html.is-mobile #rnly-wizard-modal .hd-details-grid.grid-cols-2 {
  grid-template-columns: minmax(0, 1fr);
  gap: 16px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] .hd-details-grid {
  width: 100%;
  max-width: 100%;
}
.hd-details-grid {
  gap: 20px 24px;
}

.hd-details-grid__label {
  font-size: 0.6875rem;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.025em;
  color: var(--text-tertiary);
  margin-bottom: 2px;
}

.hd-details-grid__value {
  font-size: 0.8125rem;
  line-height: 1.5rem;
  color: var(--text-primary);
}

@media (max-width: 639px) {
  .hd-details-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
html.is-mobile #rnly-wizard-modal .grid.hd-details-grid {
  grid-template-columns: minmax(0, 1fr);
  gap: 16px;
}
}

/* ── Pedigree ── */
.hd-pedigree {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  gap: 2rem;
}
.collapse.show.hd-pedigree {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .hd-pedigree {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.hd-pedigree.items-baseline { margin-bottom: 10px; }
html.is-mobile .hd-pedigree:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .hd-pedigree.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.hd-pedigree {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.hd-pedigree > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.hd-pedigree > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.hd-pedigree > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.hd-pedigree > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.hd-pedigree__item {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 0.125rem;
}

.collapse.show.hd-pedigree__item {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .hd-pedigree__item {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.hd-pedigree__item.items-baseline { margin-bottom: 10px; }

html.is-mobile .hd-pedigree__item:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .hd-pedigree__item.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.hd-pedigree__item.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree__item.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree__item.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree__item.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree__item.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree__item.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.hd-pedigree__label {
  font-size: 0.6875rem;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.025em;
  color: var(--text-tertiary);
}

.hd-pedigree__value {
  font-size: 0.9375rem;
  font-weight: 500;
  color: var(--text-primary);
}

/* ── Structured pedigree tree (vertical genealogy chart) ── */
.hd-pedigree-tree {
  margin-top: 0.5rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 1rem;
}
.collapse.show.hd-pedigree-tree {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .hd-pedigree-tree {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.hd-pedigree-tree.items-baseline { margin-bottom: 10px; }
html.is-mobile .hd-pedigree-tree:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .hd-pedigree-tree.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.hd-pedigree-tree.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-tree.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-tree.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-tree.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-tree.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-tree.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.hd-pedigree-tree__gen.is-hidden-gen {
  display: none;
}

.hd-pedigree-tree__gen-label {
  margin-bottom: 0.5rem;
  font-size: 0.6875rem;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.025em;
  color: var(--text-tertiary);
}

.hd-pedigree-tree__row {
  display: grid;
  grid-template-columns: repeat(1, minmax(0, 1fr));
  gap: 0.75rem;
}

html.is-mobile #rnly-wizard-modal .hd-pedigree-tree__row.grid-cols-2 {
  grid-template-columns: minmax(0, 1fr);
  gap: 16px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] .hd-pedigree-tree__row {
  width: 100%;
  max-width: 100%;
}

@media (min-width: 640px) {
  .hd-pedigree-tree__row {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

.hd-pedigree-card {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 0.25rem;
  border-radius: 0.75rem;
  border-width: 1px;
  padding: 0.75rem;
}

.collapse.show.hd-pedigree-card {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .hd-pedigree-card {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.hd-pedigree-card.items-baseline { margin-bottom: 10px; }

html.is-mobile .hd-pedigree-card:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .hd-pedigree-card.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.hd-pedigree-card.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-card.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-card.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-card.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-card.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-card.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.hd-pedigree-card {
  border-color: var(--border-primary);
  background: var(--canvas-primary);
}

.hd-pedigree-card[data-rel="sire"] {
  border-left: 3px solid var(--utility-blue-500, #3b82f6);
}
.hd-pedigree-card[data-rel="dam"] {
  border-left: 3px solid var(--utility-rose-500, #f43f5e);
}
.hd-pedigree-card[data-rel="custom"] {
  border-left: 3px solid var(--utility-amber-400, #fbbf24);
}

.hd-pedigree-card__rel {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.375rem;
  font-size: 0.6875rem;
  line-height: 1rem;
  text-transform: uppercase;
  letter-spacing: 0.025em;
}

.collapse.show.hd-pedigree-card__rel {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .hd-pedigree-card__rel {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.hd-pedigree-card__rel.items-baseline { margin-bottom: 10px; }

html.is-mobile .hd-pedigree-card__rel:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .hd-pedigree-card__rel.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.hd-pedigree-card__rel[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-card__rel.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-card__rel.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-card__rel.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-card__rel.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-card__rel.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.hd-pedigree-card__rel {
  color: var(--text-tertiary);
}

.hd-pedigree-card__name {
  font-size: 0.8125rem;
  line-height: 1.5rem;
  font-weight: 600;
  color: var(--text-primary);
}

.hd-pedigree-card__meta {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  -webkit-column-gap: 0.5rem;
  -moz-column-gap: 0.5rem;
  column-gap: 0.5rem;
  font-size: 0.75rem;
  line-height: 1rem;
}

.collapse.show.hd-pedigree-card__meta {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .hd-pedigree-card__meta {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.hd-pedigree-card__meta.items-baseline { margin-bottom: 10px; }

html.is-mobile .hd-pedigree-card__meta:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .hd-pedigree-card__meta.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-card__meta.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-card__meta.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-card__meta.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-card__meta.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-card__meta.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.hd-pedigree-card__meta {
  color: var(--text-secondary);
}

.hd-pedigree-card__reg {
  margin-top: 0.125rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.375rem;
  font-size: 0.6875rem;
  line-height: 1rem;
}

.collapse.show.hd-pedigree-card__reg {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .hd-pedigree-card__reg {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.hd-pedigree-card__reg.items-baseline { margin-bottom: 10px; }

html.is-mobile .hd-pedigree-card__reg:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .hd-pedigree-card__reg.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.hd-pedigree-card__reg[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-card__reg.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-card__reg.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-card__reg.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-card__reg.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-card__reg.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.hd-pedigree-card__reg {
  color: var(--text-tertiary);
}

.hd-pedigree-card__src {
  margin-top: 0.25rem;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.375rem;
  font-size: 0.6875rem;
  line-height: 1rem;
  font-weight: 500;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.hd-pedigree-card__src[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

.hd-pedigree-card__src {
  color: var(--text-info, #2563eb);
}

.hd-pedigree-card__src:hover {
  text-decoration: underline;
}

/* ── Pedigree documents grid ── */
.hd-pedigree-docs {
  margin-top: 1rem;
  border-top-width: 1px;
  padding-top: 1rem;
  border-color: var(--border-primary-subtle, var(--border-primary));
}

.hd-pedigree-docs__heading {
  margin-bottom: 0.5rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 0.375rem;
  font-size: 0.6875rem;
  line-height: 1rem;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.025em;
}

.collapse.show.hd-pedigree-docs__heading {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .hd-pedigree-docs__heading {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.hd-pedigree-docs__heading.items-baseline { margin-bottom: 10px; }

html.is-mobile .hd-pedigree-docs__heading:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .hd-pedigree-docs__heading.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.hd-pedigree-docs__heading[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-docs__heading.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-docs__heading.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-docs__heading.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-docs__heading.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-docs__heading.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.hd-pedigree-docs__heading {
  color: var(--text-tertiary);
}

.hd-pedigree-docs__grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0.5rem;
}

html.is-mobile #rnly-wizard-modal .hd-pedigree-docs__grid.grid-cols-2 {
  grid-template-columns: minmax(0, 1fr);
  gap: 16px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] .hd-pedigree-docs__grid {
  width: 100%;
  max-width: 100%;
}

@media (min-width: 640px) {
  .hd-pedigree-docs__grid {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
}

@media (min-width: 768px) {
  .hd-pedigree-docs__grid {
    grid-template-columns: repeat(5, minmax(0, 1fr));
  }
}

.hd-pedigree-docs__tile {
  position: relative;
  display: block;
  overflow: hidden;
  border-radius: 0.5rem;
  border-width: 1px;
  aspect-ratio: 1 / 1;
  border-color: var(--border-primary);
  background: var(--bg-secondary, #f5f5f4);
  -webkit-transition: border-color 0.15s ease;
  transition: border-color 0.15s ease;
}

.hd-pedigree-docs__tile:hover {
  border-color: var(--text-secondary);
}

.hd-pedigree-docs__tile img {
  height: 100%;
  width: 100%;
  -o-object-fit: cover;
  object-fit: cover;
}

.hd-pedigree-docs__placeholder {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 100%;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  padding: 0.5rem;
  text-align: center;
}

.collapse.show.hd-pedigree-docs__placeholder {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .hd-pedigree-docs__placeholder {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.hd-pedigree-docs__placeholder.items-baseline { margin-bottom: 10px; }

html.is-mobile .hd-pedigree-docs__placeholder:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .hd-pedigree-docs__placeholder.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.hd-pedigree-docs__placeholder.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.hd-pedigree-docs__placeholder[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-docs__placeholder.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-docs__placeholder.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-docs__placeholder.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-docs__placeholder.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-pedigree-docs__placeholder.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.hd-pedigree-docs__placeholder {
  color: var(--text-tertiary);
}

.hd-pedigree-docs__filename {
  margin-top: 0.25rem;
  width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 0.6875rem;
  line-height: 1rem;
  color: var(--text-secondary);
}

/* ── Seller card ── */
.hd-seller-card {
  border-radius: 0.75rem;
  border-width: 1px;
  padding: 1.5rem;
  border-color: var(--border-primary);
}

.hd-seller-card__meta {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 0.5rem;
  padding-top: 1rem;
  font-size: 0.8125rem;
}

.collapse.show.hd-seller-card__meta {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .hd-seller-card__meta {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.hd-seller-card__meta.items-baseline { margin-bottom: 10px; }

html.is-mobile .hd-seller-card__meta:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .hd-seller-card__meta.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.hd-seller-card__meta.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-seller-card__meta.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-seller-card__meta.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-seller-card__meta.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-seller-card__meta.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-seller-card__meta.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.hd-seller-card__meta {
  color: var(--text-secondary);
}

/* ── Map placeholder ── */

/* ── Media placeholder ── */

/* ── Sticky CTA sidebar ── */
.hd-sidebar {
  position: sticky;
  top: 5rem;
}

.hd-cta-card {
  border-radius: 0.75rem;
  border-width: 1px;
  padding: 1.5rem;
  border-color: var(--border-primary);
  -webkit-box-shadow: 0 6px 16px rgba(0, 0, 0, 0.08);
  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.08);
}

/* Price band bar inside CTA card */
.hd-cta-card__band {
  margin-bottom: 1.25rem;
}

.hd-cta-card__tier {
  font-size: 1.375rem;
  font-weight: 600;
  color: var(--text-primary);
}

.hd-cta-card__primary {
  margin-bottom: 0.625rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 0.5rem;
  border-style: none;
  font-size: 0.8125rem;
  line-height: 1.5rem;
  font-weight: 500;
}

.collapse.show.hd-cta-card__primary {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .hd-cta-card__primary {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.hd-cta-card__primary.items-baseline { margin-bottom: 10px; }

html.is-mobile .hd-cta-card__primary:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .hd-cta-card__primary.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.hd-cta-card__primary[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-cta-card__primary.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-cta-card__primary.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-cta-card__primary.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-cta-card__primary.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-cta-card__primary.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.hd-cta-card__primary {
  padding: 12px 20px;
  background-color: var(--text-primary);
  color: var(--bg-modal, #fff);
  -webkit-transition: opacity 0.15s ease;
  transition: opacity 0.15s ease;
}

.hd-cta-card__primary:hover {
  opacity: 0.88;
}

.hd-cta-card__secondary {
  margin-bottom: 0.625rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 0.5rem;
  border-width: 1px;
  background-color: transparent;
  font-size: 0.8125rem;
  line-height: 1.5rem;
  font-weight: 500;
}

.collapse.show.hd-cta-card__secondary {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .hd-cta-card__secondary {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.hd-cta-card__secondary.items-baseline { margin-bottom: 10px; }

html.is-mobile .hd-cta-card__secondary:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .hd-cta-card__secondary.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.hd-cta-card__secondary[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-cta-card__secondary.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-cta-card__secondary.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-cta-card__secondary.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-cta-card__secondary.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-cta-card__secondary.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.hd-cta-card__secondary {
  padding: 12px 20px;
  border-color: var(--text-primary);
  color: var(--text-primary);
  -webkit-transition: background-color 0.15s ease;
  transition: background-color 0.15s ease;
}

.hd-cta-card__secondary:hover {
  background-color: var(--bg-primary-subtle, #f7f7f7);
}

/* The card's "done" states on the accent fill (tq-8324; layout.js setAccentState): "Manage Booking"
   and "View Messages". The page's own shape stays; the .btn-* buttons use .btn-accent instead. */
.hd-cta-card__secondary.is-booked,
.hd-cta-card__primary.is-messaged {
  background-color: var(--bg-accent-solid);
  color: var(--text-on-accent-solid);
  border-color: var(--alpha-0);
}

.hd-cta-card__secondary.is-booked:hover,
.hd-cta-card__primary.is-messaged:hover {
  background-color: var(--bg-accent-solid-hover);
}

.hd-cta-card__report {
  margin-top: 1rem;
  text-align: center;
}

.hd-cta-card__report button {
  cursor: pointer;
  border-style: none;
  background-image: none;
  font-size: 0.75rem;
  line-height: 1rem;
  text-decoration-line: underline;
  color: var(--text-tertiary);
}

.hd-cta-card__report button:hover {
  color: var(--text-secondary);
}

@media (max-width: 1023px) {
  .hd-sidebar {
    position: static;
  }
}

/* tq-9434 (A261; isabella 900075119): the Track toggle below lg, under the header row (Details.cshtml). The CTA card's
   secondary look, sized to its label and left-aligned; display:none at lg+, where the card's own toggle is the one control. */
.hd-track-inline {
  display: none;
}

@media (max-width: 1023px) {
  .hd-track-inline {
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    width: auto;
    margin: 0;
  }
}

/* tq-9439 (A264; isabella 900075120 / 900075125): the line directly under the header row: the booking chip (in the phone
   shell only; mobile-shell.css shows it there and hides the header's copy), then Track. It wraps when they don't fit. It
   shows only when it has something to show: Track below lg (here), or the filled chip in the phone shell (mobile-shell.css). */
.hd-subline {
  display: none;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
  margin: 12px 0;
}

.hd-subline > [data-bkg-header-indicator] {
  display: none !important;   /* outside the phone shell the chip stays in the header */
}

@media (max-width: 1023px) {
  .hd-subline:has(> .hd-track-inline) {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
  }

  /* tq-9439: below lg (outside the phone shell, which keeps its one compact row) the header WRAPS: the name takes its own
     full line, never truncated (it may run to 2+ lines); Save / Share / the chip go under it, left-aligned, wrapping again
     if needed. lg+ is unchanged. (The h1's inline line clamp needs the !important.) */
  .hd-header {
    -ms-flex-wrap: wrap;
    flex-wrap: wrap;
  }

  .hd-header__text {
    -webkit-box-flex: 1;
    -ms-flex: 1 1 100%;
    flex: 1 1 100%;
  }

  .hd-header__title {
    -webkit-box-flex: 1;
    -ms-flex: 1 1 auto;
    flex: 1 1 auto;   /* the rest of its line, beside Back */
    display: block !important;
    -webkit-line-clamp: unset !important;
    overflow: visible !important;
    overflow-wrap: anywhere;
  }

  .hd-header__actions {
    -ms-flex-wrap: wrap;
    flex-wrap: wrap;
    -webkit-box-pack: start;
    -ms-flex-pack: start;
    justify-content: flex-start;
  }
}

@media (max-width: 1023px) and (pointer: coarse) {
  .hd-track-inline {
    min-height: 44px;
  }
}

/* ── Mobile sticky CTA bar ── */
.hd-mobile-cta {
  display: none;
}
.listings-split__loading.hd-mobile-cta {
  display: none;
}

@media (max-width: 1023px) {
  .hd-mobile-cta {
    position: fixed;
    bottom: 0px;
    left: 0px;
    right: 0px;
    z-index: 50;
    display: block;
    border-top-width: 1px;
    background-color: var(--bg-card, #fff);
    border-color: var(--border-primary);
    padding: 12px 16px;
    padding-bottom: max(12px, env(safe-area-inset-bottom));
  }

  .hd-mobile-cta__inner {
    margin-left: auto;
    margin-right: auto;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    -webkit-box-pack: justify;
    -ms-flex-pack: justify;
    justify-content: space-between;
  }
.collapse.show.hd-mobile-cta__inner {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .hd-mobile-cta__inner {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .panel-content > .hd-mobile-cta__inner { padding-top: 32px; padding-bottom: 16px; }
html.is-mobile .rnly-rail > div.hd-mobile-cta__inner.items-baseline { margin-bottom: 10px; }
html.is-mobile .container-wrapper > .container-panel > .panel-body > .panel-content > .hd-mobile-cta__inner {
  padding-left: var(--rnly-mb-gutter);
  padding-right: var(--rnly-mb-gutter);
}
html.is-mobile .hd-mobile-cta__inner:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .hd-mobile-cta__inner.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.hd-mobile-cta__inner[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-mobile-cta__inner.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-mobile-cta__inner.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-mobile-cta__inner.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-mobile-cta__inner.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .hd-mobile-cta__inner.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

  .hd-mobile-cta__inner {
    max-width: 1120px;
  }

  .hd-mobile-cta__btn {
    margin-bottom: 0px;
    width: auto;
    padding: 10px 20px;
  }

  /* Add bottom padding to page so CTA bar doesn't cover content */
  .horse-details {
    padding-bottom: 5rem;
  }

  /* tq-9578 (A297, USER bug): on a phone with the app's bottom nav, the bar sat UNDER the nav (z 215 over its 50): only the
     tops of Message / Book (or the owner's Manage) showed, and a tap hit a nav item. It now stands ON the nav, through the
     shell's own contract: --rnly-mb-nav-h (.app-shell, mobile-shell.css) is the nav's height WITH the safe area, so the
     bar's own bottom padding drops to 12px (never the inset twice). While the nav is hidden (keyboard / overlay) or
     collapsed (scrolled away) the bar follows it down, at the nav's own pace. No nav rendered (a guest's detail page)
     = bottom 0, as before. Scroll room: the shell already reserves the nav; .horse-details' pb-20 (80px) clears the bar
     (12 + 46 + 12 + 1 = 71px). The labels share the row and wrap rather than overflow at 320. */
  html.is-mobile:has(.mobile-bottom-nav) .hd-mobile-cta {
    bottom: var(--rnly-mb-nav-h, calc(56px + env(safe-area-inset-bottom, 0px)));
    padding-bottom: 12px;
    -webkit-transition: bottom var(--rnly-dur-collapse, 320ms) var(--rnly-ease-ios, ease);
    transition: bottom var(--rnly-dur-collapse, 320ms) var(--rnly-ease-ios, ease);
  }

  html.is-mobile[data-rnly-mb-nav-hidden]:has(.mobile-bottom-nav) .hd-mobile-cta,
  html.is-mobile[data-rnly-mb-nav-collapsed]:has(.mobile-bottom-nav) .hd-mobile-cta {
    bottom: 0;
    padding-bottom: max(12px, env(safe-area-inset-bottom, 0px));
  }

  html.reduced-motion .hd-mobile-cta {
    -webkit-transition: none;
    transition: none;
  }

  .hd-mobile-cta__inner {
    gap: 8px;
  }

  .hd-mobile-cta__btn {
    -webkit-box-flex: 1;
    -ms-flex: 1 1 0px;
    flex: 1 1 0;
    min-width: 0;
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
    text-align: center;
    white-space: normal;
  }
}

/* ── Gallery overlay ── */

/* ── About text ── */

/* ── Modal hero image ── */
/* ==========================================================================
   RNLY – Home page styles
   ========================================================================== */

/* ════════════════════════════════════════════════════════════════════
   HERO SEARCH PILL
   ────────────────────────────────────────────────────────────────────
   Architecture:
     • Bar is a flex pill (`.rnly-search` from search-pill.css gives the
       white background + border + shadow that we already ship).
       `.rnly-search-bar` adds equal-width segments via display:flex.
     • Each segment is a `.qf-pill-wrap` (the SAME wrapper the buyer
       Listings quick-filter bar uses) with a trigger button + a
       `.qf-popover`. The popover container is styled by
       `quick-filter-bar.css`; we add light `.rnly-search-pop`
       overrides to match the floating hero context (rounded all
       around, top border restored).
     • Search button at the far right is an icon-only circular button.
   ════════════════════════════════════════════════════════════════════ */

.rnly-search-shell {
  position: relative;
  width: 100%;
  max-width: 580px;
  margin: 0 auto;
}

/* The bar — `.rnly-search` provides the white-pill chrome (background,
   border, soft shadow). We add flex layout + 4px padding so the active
   segment's hover background sits visually inside the pill. */
.rnly-search-bar {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: stretch;
  -ms-flex-align: stretch;
  align-items: stretch;
  padding: 4px 4px 4px 4px;
  /* No overflow:hidden — the qf-popover anchors via JS coords with
     position:fixed and lives at body-level visually, but it's a
     descendant of the bar in DOM, so any clip on the bar would also
     clip the popover. Keep the bar visually clean via the pill chrome. */
}

/* Segment wrapper — fills 1/N of the bar (flex:1). Position:relative
   so the popover anchors correctly even before JS runs. */
.rnly-seg-wrap {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0px;
  flex: 1 1 0;
  min-width: 0;
}

/* The actual segment trigger button. */
.rnly-seg {
  width: 100%;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 2px;
  padding: 12px 18px;
  background: transparent;
  border: 0;
  cursor: pointer;
  text-align: left;
  font: inherit;
  color: inherit;
  min-width: 0;
  overflow: hidden;
  border-radius: 9999px;
  -webkit-transition: background-color 140ms ease, -webkit-box-shadow 140ms ease;
  transition: background-color 140ms ease, -webkit-box-shadow 140ms ease;
  transition: background-color 140ms ease, box-shadow 140ms ease;
  transition: background-color 140ms ease, box-shadow 140ms ease, -webkit-box-shadow 140ms ease;
}
.rnly-seg:hover,
.rnly-seg:focus-visible {
  background-color: var(--bg-primary-subtle, rgba(15, 23, 42, 0.04));
  outline: none;
}
/* The active segment has NO direct background — the sliding pill
   indicator (below) renders the white "active pill" behind it.
   Without removing the segment background, both the static
   background and the moving indicator would overlap (creating a
   "no movement" visual since both are white). */
.qf-pill-wrap.is-open .rnly-seg {
  background-color: transparent;
}

/* Sliding pill indicator — single absolutely-positioned element that
   tracks the active segment. JS sets `transform` + `width` based on
   the active wrap's offsetLeft/offsetWidth; CSS animates the slide
   via the transform + width transition. Same pattern as
   `.nav-tabs-pill-indicator` in `tab.css`. */
.rnly-search-bar__indicator {
  position: absolute;
  top: 4px;
  bottom: 4px;
  left: 0;
  width: 0;
  pointer-events: none;
  background-color: var(--bg-modal, #fff);
  border-radius: 9999px;
  -webkit-box-shadow: 0 6px 18px -8px rgba(15, 23, 42, 0.22),
              0 1px 2px rgba(15, 23, 42, 0.08);
  box-shadow: 0 6px 18px -8px rgba(15, 23, 42, 0.22),
              0 1px 2px rgba(15, 23, 42, 0.08);
  opacity: 0;
  -webkit-transition: width 280ms cubic-bezier(.4, 0, .2, 1),
              opacity 200ms ease,
              -webkit-transform 280ms cubic-bezier(.4, 0, .2, 1);
  transition: width 280ms cubic-bezier(.4, 0, .2, 1),
              opacity 200ms ease,
              -webkit-transform 280ms cubic-bezier(.4, 0, .2, 1);
  transition: transform 280ms cubic-bezier(.4, 0, .2, 1),
              width 280ms cubic-bezier(.4, 0, .2, 1),
              opacity 200ms ease;
  transition: transform 280ms cubic-bezier(.4, 0, .2, 1),
              width 280ms cubic-bezier(.4, 0, .2, 1),
              opacity 200ms ease,
              -webkit-transform 280ms cubic-bezier(.4, 0, .2, 1);
  z-index: 0;
}
/* Segments must sit ABOVE the indicator so labels/values render on
   top of the white pill, not behind it. */
.rnly-seg-wrap, .rnly-search-btn {
  position: relative;
  z-index: 1;
}

/* When any segment is open, the BAR background shifts to a soft gray
   so the active (white) segment reads as a card lifted out of it —
   same behavior as our `.nav-tabs-ribbon--pill` tab strip. The
   `:has()` selector targets the bar when ANY descendant
   `.qf-pill-wrap` is in the `.is-open` state. */
.rnly-search-bar:has(.qf-pill-wrap.is-open) {
  background-color: var(--bg-tab-ribbon, #f5f5f4) !important;
  -webkit-transition: background-color 160ms cubic-bezier(.4, 0, .2, 1);
  transition: background-color 160ms cubic-bezier(.4, 0, .2, 1);
}
/* Dividers fade out when the bar is in its "active" gray mode — the
   contrast between gray bar and white pill is enough visual
   separation; vertical lines just add noise. */
.rnly-search-bar:has(.qf-pill-wrap.is-open) .rnly-seg-divider {
  opacity: 0;
}

/* Airbnb-style divider behavior: dividers FLANKING the hovered or
   active segment fade out, so the active segment reads as cleanly
   detached. The divider is the .rnly-seg-divider element placed
   between segments in DOM. */
.rnly-seg-divider {
  -webkit-transition: opacity 140ms ease;
  transition: opacity 140ms ease;
  /* Shorter divider to match the shorter pill (was h-8). */
  height: 24px !important;
}
.qf-pill-wrap:hover + .rnly-seg-divider,
.qf-pill-wrap.is-open + .rnly-seg-divider,
.rnly-seg-divider:has(+ .qf-pill-wrap:hover),
.rnly-seg-divider:has(+ .qf-pill-wrap.is-open) {
  opacity: 0;
}

/* Label + hint typography — display:block + nowrap + ellipsis is what
   makes long content clip cleanly instead of wrapping. ellipsis only
   works on block-level elements; default-inline <span> silently no-ops. */
.rnly-seg__label {
  display: block;
  width: 100%;
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.05em;
  color: var(--text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  line-height: 1.2;
  text-align: center;
}
.rnly-seg__hint {
  display: block;
  width: 100%;
  font-size: 13px;
  color: var(--text-tertiary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  line-height: 1.3;
  text-align: center;
}
.rnly-seg {
  -webkit-box-align: center !important;
  -ms-flex-align: center !important;
  align-items: center !important;
}

/* Search button (icon-only, sits on the far right of the pill). */
.rnly-search-btn {
  width: 52px;
  height: 52px;
  padding: 0;
  border-radius: 9999px;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  margin-left: 4px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.rnly-search-btn i { font-size: 18px; }

/* ── Hero-context popover overrides ─────────────────────────────
   `.qf-popover` (from quick-filter-bar.css) renders flush-to-bar.
   For the hero we want a floating card with rounded corners. We
   also portal the popover to <body> on open (to escape the hero's
   transformed stacking context), which breaks the
   `.qf-pill-wrap.is-open .qf-popover` ancestor chain — so we need
   a self-targeted display rule on the popover itself. */
.rnly-search-pop {
  /* Restore the top border that quick-filter-bar.css drops (since
     its popover sits flush below a sticky bar). For the floating
     hero context we want a fully bordered card. */
  border-top: 1px solid var(--border-primary, #e5e7eb) !important;
  /* Soft rounded edges on all four corners. */
  border-radius: 18px !important;
  padding: 18px 22px !important;
  max-height: 70vh;
  /* overflow:hidden clips any inner content that would otherwise
     square-edge the rounded corners. The body uses overflow:auto on
     a child container instead of the outer popover. */
  overflow: hidden;
  /* Crank z-index well above any page-content stacking context — the
     listing cards and their hover transforms create their own
     contexts, so the base qf-popover z-index (9050) wasn't always
     winning. 99999 ensures the dropdown always sits on top. */
  z-index: var(--z-popover) !important;
  /* Slightly more pronounced shadow now that the panel is smaller and
     proportional — it needs a clearer sense of elevation. */
  -webkit-box-shadow: 0 24px 56px -16px rgba(15, 23, 42, 0.32),
              0 4px 14px -4px rgba(15, 23, 42, 0.12) !important;
  box-shadow: 0 24px 56px -16px rgba(15, 23, 42, 0.32),
              0 4px 14px -4px rgba(15, 23, 42, 0.12) !important;
}
/* Popover visible when its OWN .is-open class is set — works whether
   it's still inside the .qf-pill-wrap or portaled to <body>. */
.qf-popover.is-open { display: -webkit-box; display: -ms-flexbox; display: flex; }

/* Field stacking inside the popover. */
.rnly-search-pop__field {
  margin-bottom: 14px;
}
.rnly-search-pop__field:last-child {
  margin-bottom: 0;
}

/* Label + unit row */
.rnly-search-pop__label {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 8px;
  margin: 0 0 8px;
  font-size: 12px;
  font-weight: 600;
  color: var(--text-secondary);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  white-space: nowrap;
}
.rnly-search-pop__unit {
  font-weight: 500;
  color: var(--text-tertiary);
  text-transform: none;
  letter-spacing: 0;
}

/* Min – Max range row */

.rnly-search-pop__hint {
  margin: 6px 0 0;
  font-size: 12px;
  color: var(--text-tertiary);
}

/* Apply button footer — injected by search-filters.js into every
   popover. Gives users an explicit "done" target instead of having
   to tap outside to commit selections. */
.rnly-search-pop__actions {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
  margin-top: 14px;
  padding-top: 12px;
  border-top: 1px solid rgb(244 244 245);
}
.rnly-search-pop__apply {
  min-width: 96px;
  height: 36px;
  padding: 0 18px;
  border-radius: 9999px;
  font-size: 13px;
  font-weight: 600;
}
html.is-mobile .rnly-search-pop__actions {
  margin-top: 16px;
}
html.is-mobile .rnly-search-pop__apply {
  width: 100%;
  height: 44px;
  font-size: 15px;
}
html.is-mobile .rnly-search-pop__actions { -webkit-box-pack: stretch; -ms-flex-pack: stretch; justify-content: stretch; }

/* Inline link-style action ("Use my location"). */
.rnly-link-btn {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 4px;
  border: 0;
  background: transparent;
  color: var(--utility-emerald-800, #047857);
  font-size: 12px;
  font-weight: 600;
  text-transform: none;
  letter-spacing: 0;
  cursor: pointer;
  padding: 2px 8px;
  border-radius: 9999px;
  white-space: nowrap;
  -webkit-transition: background-color 120ms ease;
  transition: background-color 120ms ease;
}
.rnly-link-btn:hover {
  background-color: var(--alpha-emerald-900-10, rgba(6, 95, 70, 0.10));
}

/* Segment hint — `.is-filled` switches the placeholder gray to a
   bigger, primary-black state so users can see at a glance which
   filters they've actually set. JS toggles `.is-filled` when the
   underlying state has a value. */
.rnly-seg__hint.is-filled {
  color: var(--text-primary, #0f172a) !important;
  font-weight: 600;
  /* Bumped from the default text-xs (12px) so the selected state
     reads visibly heavier than the placeholder line. */
  font-size: 14px;
}

/* Price tier pill row — sits above the min/max inputs. Uses the
   ONE `.chip` (`.chip--toggle`, Reinly.Design utility/chip.css) (same pill
   the listings breed / type / discipline filters use), but tightened
   sizing for the hero context — the pill bar is denser so we want
   smaller pills here than on the full-page listings filter. */
.rnly-price-tiers {
  margin-bottom: 12px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  gap: 6px;
}
/* All `.chip` pills inside any home-search popover — covers both
   the price tier pills (Fours/Fives/…/Custom) AND the location radius
   pills (5/10/25/…/500). One ruleset, one consistent visual.
   Selected state: solid emerald-600 fill + white text — same as the
   `.chip--toggle:has(input:checked)` styling on the listings drawer's
   breed/personality filters. */
.rnly-search-pop .chip {
  padding: 6px 12px;
  font-size: 11px;
  font-weight: 500;
  border: 1px solid var(--border-primary, #e5e7eb);
  background-color: var(--bg-surface);  /* tq-8334 (R11): was #ffffff; white in light, the dark surface in dark */
  color: var(--text-primary, #111);
  border-radius: 9999px;
  cursor: pointer;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  white-space: nowrap;
  -webkit-transition: background-color .12s ease, border-color .12s ease, color .12s ease;
  transition: background-color .12s ease, border-color .12s ease, color .12s ease;
}
.rnly-search-pop .chip:hover {
  border-color: var(--utility-emerald-600, #059669);
}
.rnly-search-pop .chip.is-active {
  background-color: var(--bg-accent-solid) !important;
  color: var(--text-on-accent-solid) !important;
  border-color: var(--utility-emerald-600, #059669) !important;
}

/* The slider bounds row is the DS .range-field__bounds (inputs/range-slider.css, tq-8208). */


/* Radius chips */
.rnly-radius-chips {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  gap: 6px;
}

/* Search button — sized to match the now-shorter pill. */
.rnly-search-btn {
  width: 44px;
  height: 44px;
  padding: 0;
}
.rnly-search-btn i { font-size: 15px; }

/* ── Responsive: tablet & mobile ───────────────────────────────── */
@media (max-width: 720px) {
  .rnly-search-bar {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
    border-radius: 18px;
    padding: 6px;
    gap: 2px;
  }
  .rnly-seg-wrap {
    -webkit-box-flex: 1;
    -ms-flex: 1 1 auto;
    flex: 1 1 auto;
    width: 100%;
  }
  .rnly-seg {
    border-radius: 12px;
    padding: 12px 16px !important;
  }
  /* Hide vertical dividers when stacked (no longer between segments). */
  .rnly-seg-divider {
    display: none;
  }
  .rnly-search-btn {
    width: 100% !important;
    height: 48px !important;
    border-radius: 12px !important;
    margin-left: 0 !important;
  }
}

/* Flows */
/* ==========================================================================
   REINLY – Listing wizard flow
   Centered content layout, intro screens, section rhythm.
   ========================================================================== */

/* ── Centered content wrapper ──
   Sits inside .modal-body so header/footer remain full-width while
   step content is constrained and horizontally centered.            */
.wizard__content {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 100%;
  width: 100%;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  overflow: visible;
}
.collapse.show.wizard__content {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .wizard__content {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.wizard__content.items-baseline { margin-bottom: 10px; }
html.is-mobile .wizard__content:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .wizard__content.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard__content.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard__content.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard__content.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard__content.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard__content.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.wizard__content-inner {
  width: 100%;
  padding-top: 2rem;
  padding-bottom: 2rem;
  max-width: 640px;
  padding-inline: 2rem;
}

@media (max-width: 639px) {
  .wizard__content-inner {
    padding-inline: 1.25rem;
    padding-top: 1.5rem;
  }

  /* Extra breathing room at the bottom of every wizard sub-panel on mobile
     so content doesn't crowd the sticky nav / device chrome. */
  [data-wizard-sub] {
    padding-bottom: 3rem;
  }
}

/* ── Wizard intro screen ── */
.wizard-intro {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 2rem;
  padding-top: 3rem;
  padding-bottom: 3rem;
}
.collapse.show.wizard-intro {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .wizard-intro {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.wizard-intro.items-baseline { margin-bottom: 10px; }
html.is-mobile .wizard-intro:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .wizard-intro.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.wizard-intro[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-intro.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.wizard-intro {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-intro.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.wizard-intro > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-intro.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.wizard-intro > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-intro.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.wizard-intro > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-intro.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.wizard-intro > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.wizard-intro__text {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0%;
  flex: 1 1 0%;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .wizard-intro__text.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .wizard-intro__text.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.wizard-intro__graphic {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 7rem;
  width: 7rem;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 1rem;
}

.collapse.show.wizard-intro__graphic {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .wizard-intro__graphic {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.wizard-intro__graphic.items-baseline { margin-bottom: 10px; }

html.is-mobile .wizard-intro__graphic:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .wizard-intro__graphic.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.wizard-intro__graphic[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-intro__graphic.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-intro__graphic.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .wizard-intro__graphic:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-intro__graphic.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flex.gap-8 > .wizard-intro__graphic:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-intro__graphic.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .wizard-intro__graphic.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.wizard-intro__graphic {
  background-color: var(--utility-neutral-50);
  color: var(--text-quaternary);
}

/* Centered variant: icon on top, title + caption below, all centered */
.wizard-intro--centered {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  text-align: center;
}
html.is-mobile #rnly-wizard-modal .flex.wizard-intro--centered.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.wizard-intro--centered[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

.wizard-intro--centered .wizard-intro__graphic {
  -webkit-box-ordinal-group: -9998;
  -ms-flex-order: -9999;
  order: -9999;
  margin-bottom: 1rem;
}

.wizard-intro--centered .wizard-intro__text {
  -webkit-box-ordinal-group: 10000;
  -ms-flex-order: 9999;
  order: 9999;
}

@media (max-width: 639px) {
  .wizard-intro {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
    gap: 1rem;
    padding-top: 2rem;
    padding-bottom: 2rem;
    text-align: center;
  }
html.is-mobile #rnly-wizard-modal .flex.wizard-intro.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

  .wizard-intro__graphic {
    height: 5rem;
    width: 5rem;
  }
}

/* ── Wizard modal header ── */
.wizard-modal-header {
  gap: 0.75rem;
}

/* ── Vertical rhythm for wizard step sections ── */
.wizard-section {
  margin-top: 2rem;
}



.wizard-section:first-child {
  margin-top: 0px;
}

/* ── Clearable input — X button inside form-controls ── */
.input-clearable {
  position: relative;
}

.input-clearable .form-control {
  padding-right: 2rem;
}

.input-clear-btn {
  position: absolute;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  cursor: pointer;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-radius: 9999px;
}

.collapse.show.input-clear-btn {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

@media (max-width: 420px) {
.rnly-achievement-card > .input-clear-btn {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}

html.is-mobile .rnly-rail > div.input-clear-btn.items-baseline { margin-bottom: 10px; }

html.is-mobile .input-clear-btn:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}

html.is-mobile #rnly-wizard-modal .input-clear-btn.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #rnly-wizard-modal .flex.flex-col.input-clear-btn[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .input-clear-btn.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .input-clear-btn.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .input-clear-btn.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .input-clear-btn.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html.is-mobile #pt-scroll-body [id^="pt-section-"] > .input-clear-btn.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.input-clear-btn {
  right: 8px;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
  width: 18px;
  height: 18px;
  color: var(--text-tertiary);
  background: none;
  border: none;
  padding: 0;
  opacity: 0;
  pointer-events: none;
  -webkit-transition: opacity 0.1s ease, color 0.1s ease;
  transition: opacity 0.1s ease, color 0.1s ease;
}

.input-clear-btn:hover {
  color: var(--text-primary);
}

/* Show the clear button when input has value AND parent is focused-within */
.input-clearable:focus-within .input-clear-btn.is-visible {
  opacity: 1;
  pointer-events: auto;
}

/* ── Country combobox — green sticky group headers ── */
.combobox:has(#wizard-location-country) .combobox__group,
.combobox:has(#rnly-addr-country) .combobox__group,
.combobox:has(#wizard-location-province) .combobox__group,
.combobox:has(#rnly-addr-province) .combobox__group {
  position: sticky;
  top: 0;
  z-index: 1;
  color: var(--utility-emerald-700);
  background: var(--bg-combobox-listbox, #fff);
  padding: 8px 12px 4px;
  font-size: 0.625rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

[data-theme="theme-dark"] .combobox:has(#wizard-location-country) .combobox__group,
[data-theme="theme-dark"] .combobox:has(#rnly-addr-country) .combobox__group,
[data-theme="theme-dark"] .combobox:has(#wizard-location-province) .combobox__group,
[data-theme="theme-dark"] .combobox:has(#rnly-addr-province) .combobox__group {
  background: var(--bg-combobox-listbox, var(--canvas-secondary));
}

/* ── Green checkbox variant ── */
.checkbox-green:checked,
.checkbox-green:checked:hover,
.checkbox-green:checked:active,
.checkbox-green:checked:focus {
  background-color: var(--utility-emerald-600) !important;
  border-color: var(--utility-emerald-600) !important;
}
/* ==========================================================================
   REINLY – Listing editor
   Uses the vertical stepper component (.stepper.stepper--rail) in the sidebar.
   ========================================================================== */

/* ── Centered content wrapper ──
   Mirrors the wizard's .wizard__content / .wizard__content-inner so that
   editor section panels are constrained and horizontally centered.       */
.editor__content {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}
.collapse.show.editor__content {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .editor__content {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.editor__content.items-baseline { margin-bottom: 10px; }
html.is-mobile .editor__content:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .editor__content.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .editor__content.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .editor__content.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .editor__content.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .editor__content.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .editor__content.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}

.editor__content-inner {
  width: 100%;
  padding-top: 2rem;
  padding-bottom: 2rem;
  max-width: 640px;
  padding-inline: 2rem;
}

@media (max-width: 639px) {
  .editor__content-inner {
    padding-inline: 1.25rem;
    padding-top: 1.5rem;
  }
}
/* ==========================================================================
   REINLY – Seller listings page (tabs, panels, empty state)
   ========================================================================== */

/* ── Listing tabs bar ── */

.seller-tab {
  cursor: pointer;
  white-space: nowrap;
  border-top-left-radius: 0.5rem;
  border-top-right-radius: 0.5rem;
  border-bottom-width: 2px;
  padding-left: 1rem;
  padding-right: 1rem;
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
  font-size: 0.8125rem;
  line-height: 1.5rem;
  font-weight: 500;
  -webkit-transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  -webkit-transition-duration: 150ms;
  transition-duration: 150ms;
  color: var(--text-secondary);
  border-color: transparent;
  background: none;
}

.seller-tab:hover {
  color: var(--text-primary);
}

.seller-tab[aria-selected="true"] {
  color: var(--text-primary);
  border-color: var(--text-primary);
  font-weight: 600;
}

/* ── Listing panel ── */

/* ── Empty state ── */
.seller-empty-state {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  padding-top: 4rem;
  padding-bottom: 4rem;
  padding-left: 2rem;
  padding-right: 2rem;
  text-align: center;
}
.collapse.show.seller-empty-state {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .seller-empty-state {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.seller-empty-state.items-baseline { margin-bottom: 10px; }
html.is-mobile .seller-empty-state:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .seller-empty-state.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.seller-empty-state.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #rnly-wizard-modal .flex.flex-col.seller-empty-state[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .seller-empty-state.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .seller-empty-state.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .seller-empty-state.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .seller-empty-state.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .seller-empty-state.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}
.seller-empty-state {
  color: var(--text-tertiary);
}

.seller-empty-state__icon {
  margin-bottom: 1rem;
  font-size: 2rem;
  line-height: 3rem;
  letter-spacing: -0.015em;
  color: var(--utility-emerald-600, #059669);
}

.seller-empty-state__title {
  margin-bottom: 0.5rem;
  font-size: 1.125rem;
  line-height: 2rem;
  font-weight: 600;
  color: var(--text-primary);
}

.seller-empty-state__text {
  max-width: 28rem;
  font-size: 0.8125rem;
  line-height: 1.5rem;
}

/* TODO: Add future seller listing page styles here (e.g. bulk actions toolbar, analytics cards) */


/* ── Mark-as-Sold modal — buyer typeahead ──────────────────────
   Small dropdown anchored to the buyer search input. Each row
   surfaces the matching user's display name + email. Selecting
   a row collapses the field into a "selected" pill the seller
   can clear. Reuses the same border/elevation tokens the rest
   of the seller dashboard uses. */
.rnly-mark-sold-results {
  position: absolute;
  top: calc(100% + 4px);
  left: 0;
  right: 0;
  z-index: 50;
  max-height: 220px;
  overflow-y: auto;
  background-color: var(--bg-modal, #fff);
  border: 1px solid var(--border-primary);
  border-radius: 8px;
  -webkit-box-shadow: 0 12px 28px -10px rgba(15, 23, 42, 0.28);
  box-shadow: 0 12px 28px -10px rgba(15, 23, 42, 0.28);
  padding: 4px;
}
.rnly-mark-sold-results[hidden] { display: none; }
.rnly-mark-sold-results__item {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 2px;
  padding: 8px 10px;
  border-radius: 6px;
  cursor: pointer;
}
.rnly-mark-sold-results__item:hover {
  background-color: var(--bg-primary-subtle);
}
.rnly-mark-sold-results__name {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary);
}
.rnly-mark-sold-results__email {
  font-size: 11.5px;
  color: var(--text-tertiary);
}
.rnly-mark-sold-results__empty {
  padding: 10px;
  font-size: 12.5px;
  color: var(--text-tertiary);
  text-align: center;
}
.rnly-mark-sold-selected {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  padding: 4px 4px 4px 10px;
  background-color: var(--bg-primary-subtle);
  border-radius: 9999px;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--text-primary);
  margin-top: 6px;
}
.rnly-mark-sold-selected[hidden] { display: none; }

/* tq-8424 (A39): the editor's Age + Height counters. Side by side (a divider between) as before; when the editor shell
   (.stepper-shell, the modal) is narrower than 24rem, e.g. a 320px phone, they stack, since two round counters (184px
   each) can't fit side by side there. The wizard's copy of this panel is outside the shell, so it is unchanged. */
.rnly-editor-counters__height {
  border-left: 1px solid var(--border-primary);
  padding-left: 2rem;
}

@container (max-width: 24rem) {
  .stepper-shell .rnly-editor-counters {
    grid-template-columns: minmax(0, 1fr);
    row-gap: 1.5rem;
  }

  .stepper-shell .rnly-editor-counters__height {
    border-left: 0;
    padding-left: 0;
    border-top: 1px solid var(--border-primary);
    padding-top: 1.5rem;
  }
}
/* ════════════════════════════════════════════════════════════════════
   Seller Today dashboard — metric cards + section shells
   ────────────────────────────────────────────────────────────────────
   Mirrors the buyer dashboard visual language on purpose, but kept
   fully independent so each side can evolve without cross-impact.
   ──────────────────────────────────────────────────────────────────── */

/* ── Today dashboard layout ──────────────────────────────────────── */

.seller-today {
  padding: 32px clamp(20px, 4vw, 48px);
  max-width: 1280px;
  margin: 0 auto;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 16px;
}

.seller-today__header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  -webkit-box-align: end;
  -ms-flex-align: end;
  align-items: flex-end;
  gap: 24px;
  margin-bottom: 12px;
}

.seller-today__eyebrow {
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--utility-emerald-800);
  margin: 0 0 4px;
}

.seller-today__title {
  font-size: 28px;
  font-weight: 700;
  color: var(--text-primary);
  margin: 0 0 6px;
  letter-spacing: -0.01em;
}

.seller-today__subtitle {
  font-size: 14px;
  color: var(--text-secondary);
  margin: 0;
}

.seller-today__actions {
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

/* ── Mobile / PWA simplification ──────────────────────────────────
   On mobile we strip the page subtitle and the per-card hint
   lines to declutter the dashboard — the green eyebrows and
   page title remain so the user still has clear visual
   hierarchy. We also stack the header vertically so the
   "Manage listings" CTA sits BELOW the title (cleaner thumb
   reach + matches the iOS app section-header pattern).
   Desktop layout is untouched. */
html.is-mobile .seller-today__subtitle,
html.is-mobile .seller-today-card__hint {
  display: none;
}
html.is-mobile .seller-today__header {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: stretch;
  -ms-flex-align: stretch;
  align-items: stretch;
  gap: 12px;
}
html.is-mobile .seller-today__actions {
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
html.is-mobile .seller-today__actions .btn-primary {
  width: 100%;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}

/* ── Metric cards grid ───────────────────────────────────────────── */

.seller-today__grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 16px;
}

.seller-today-card {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 16px;
  padding: 20px 22px;
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 16px;
  text-decoration: none;
  color: inherit;
  -webkit-transition: border-color 120ms ease, background-color 120ms ease, -webkit-transform 120ms ease;
  transition: border-color 120ms ease, background-color 120ms ease, -webkit-transform 120ms ease;
  transition: border-color 120ms ease, background-color 120ms ease, transform 120ms ease;
  transition: border-color 120ms ease, background-color 120ms ease, transform 120ms ease, -webkit-transform 120ms ease;
}

.seller-today-card--linked:hover {
  border-color: var(--alpha-emerald-800-20);
  background-color: var(--bg-card-hover-surface, var(--alpha-emerald-900-10));
  -webkit-transform: translateY(-1px);
  -ms-transform: translateY(-1px);
  transform: translateY(-1px);
}

.seller-today-card__icon {
  width: 44px;
  height: 44px;
  border-radius: 12px;
  background-color: var(--alpha-emerald-900-10);
  color: var(--utility-emerald-800);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  font-size: 18px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

.seller-today-card__body {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
}

.seller-today-card__eyebrow {
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--text-tertiary);
  margin: 0 0 4px;
}

.seller-today-card__metric {
  font-size: 20px;
  font-weight: 700;
  color: var(--text-primary);
  margin: 0 0 4px;
  letter-spacing: -0.01em;
}

.seller-today-card__metric span {
  color: var(--utility-emerald-800);
}

.seller-today-card__hint {
  font-size: 12px;
  color: var(--text-secondary);
  margin: 0;
}

.seller-today-card__chevron {
  font-size: 12px;
  color: var(--text-tertiary);
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

.seller-today-card--linked:hover .seller-today-card__chevron {
  color: var(--utility-emerald-800);
  -webkit-transform: translateX(2px);
  -ms-transform: translateX(2px);
  transform: translateX(2px);
}

/* ── Section shell (listings carousel + activity feed) ───────────── */

.seller-today__section {
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 16px;
  padding: 24px;
}

.seller-today__section-header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: end;
  -ms-flex-align: end;
  align-items: flex-end;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 16px;
}

.seller-today__section-title {
  font-size: 16px;
  font-weight: 600;
  color: var(--text-primary);
  margin: 0;
}

.seller-today__section-sub {
  font-size: 13px;
  color: var(--text-secondary);
  margin: 4px 0 0;
}

.seller-today__feed {
  min-height: 200px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}

/* tq-9499 (A276): the centring above is for the EMPTY state only. A populated feed is the DS activity-feed list
   (Scripts/modules/today-activity-feed.js): a block at the top of the card's content box, its rows on the card's own
   surface (the DS row fill is for a standalone panel; in dark it painted a lighter band on this card). */
.seller-today__feed:has(> .activity-feed) {
  display: block;
  min-height: 0;
  --bg-activity-feed-item: transparent;
}

/* ── Seller bookings section shell (Calendar page) ───────────────── */

.seller-section {
  padding: 32px clamp(20px, 4vw, 48px);
  max-width: 1280px;
  margin: 0 auto;
}

.seller-section__header {
  margin-bottom: 20px;
}

.seller-section__title {
  font-size: 24px;
  font-weight: 700;
  color: var(--text-primary);
  margin: 0 0 4px;
  letter-spacing: -0.01em;
}

.seller-section__subtitle {
  font-size: 14px;
  color: var(--text-secondary);
  margin: 0;
}

.seller-section__tabs {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  gap: 4px;
  border-bottom: 1px solid var(--border-primary);
  margin-bottom: 24px;
}

.seller-section__tab {
  background: transparent;
  border: none;
  padding: 10px 16px;
  font-size: 13px;
  font-weight: 500;
  color: var(--text-secondary);
  cursor: pointer;
  border-bottom: 2px solid transparent;
  margin-bottom: -1px;
  -webkit-transition: color 120ms ease, border-color 120ms ease;
  transition: color 120ms ease, border-color 120ms ease;
}

.seller-section__tab:hover {
  color: var(--text-primary);
}

.seller-section__tab.is-active {
  color: var(--utility-emerald-800);
  border-bottom-color: var(--utility-emerald-800);
}

.seller-section__tab-count {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  min-width: 20px;
  height: 18px;
  padding: 0 6px;
  margin-left: 6px;
  border-radius: 9999px;
  background-color: var(--bg-muted, #eef2f1);
  color: var(--text-tertiary);
  font-size: 11px;
  font-weight: 600;
  line-height: 1;
}

.seller-section__tab.is-active .seller-section__tab-count {
  background-color: var(--utility-emerald-100, #d1fae5);
  color: var(--utility-emerald-800);
}

.seller-section__body {
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 16px;
  padding: 24px;
  min-height: 320px;
}

.seller-loading {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  min-height: 200px;
  font-size: 24px;
  color: var(--utility-emerald-800);
}

/* ── Archives tab panels ─────────────────────────────────────────── */

.seller-archives-panel[hidden] {
  display: none;
}

/* ── Bookings list (reused by Calendar + Archives → Bookings) ───── */

.seller-bookings-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 12px;
}

.seller-booking-card {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  gap: 14px;
  padding: 14px;
  background-color: var(--canvas-primary);
  border: 1px solid var(--border-primary);
  border-radius: 12px;
}

.seller-booking-card__thumb {
  width: 72px;
  height: 72px;
  border-radius: 10px;
  background-color: var(--bg-muted, #eef2f1);
  background-size: cover;
  background-position: center;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

.seller-booking-card__body {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
}

.seller-booking-card__row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 4px;
}

.seller-booking-card__title {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-primary);
  margin: 0;
}

.seller-booking-card__status {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  padding: 2px 10px;
  border-radius: 9999px;
  font-size: 11px;
  font-weight: 600;
}

.seller-booking-card__status--pending    { background: #fef3c7; color: #92400e; }
.seller-booking-card__status--confirmed  { background: #d1fae5; color: #065f46; }
.seller-booking-card__status--declined,
.seller-booking-card__status--cancelled  { background: #fee2e2; color: #991b1b; }
.seller-booking-card__status--completed  { background: #e0e7ff; color: #3730a3; }
.seller-booking-card__status--no-show    { background: #f3f4f6; color: #374151; }

.seller-booking-card__meta {
  font-size: 12px;
  color: var(--text-secondary);
  margin: 0 0 4px;
}

.seller-booking-card__user {
  font-size: 12px;
  color: var(--text-secondary);
  margin: 0 0 6px;
}

.seller-booking-card__note {
  font-size: 12px;
  color: var(--text-primary);
  margin: 6px 0 0;
  padding: 8px 10px;
  background: var(--bg-muted, #eef2f1);
  border-radius: 8px;
}

.seller-booking-card__actions {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  gap: 8px;
  margin-top: 10px;
}

/* ── Archive conversation rows ────────────────────────────────────── */

.seller-archive-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 8px;
}

.seller-archive-row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 14px;
  padding: 14px;
  background-color: var(--canvas-primary);
  border: 1px solid var(--border-primary);
  border-radius: 12px;
}

.seller-archive-row__body {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
}

.seller-archive-row__name {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary);
  margin: 0 0 2px;
}

.seller-archive-row__sub {
  font-size: 12px;
  color: var(--text-tertiary);
  margin: 0 0 4px;
}

.seller-archive-row__preview {
  font-size: 12px;
  color: var(--text-secondary);
  margin: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
/* ════════════════════════════════════════════════════════════════════
   Messaging center — 3-pane shell
   ────────────────────────────────────────────────────────────────────
   Layout:
     [ left pane: 280px ][ middle pane: 320px ][ right pane: 1fr ]
   At < 1024px collapses to 2 panes (left+middle hide on thread open).
   At < 720px collapses to 1 pane that swaps via data-msg-mobile state.

   All colors come from the shared design-system tokens (theme-light /
   theme-dark CSS custom properties) so the messaging center stays in
   sync with light/dark mode automatically.
   ──────────────────────────────────────────────────────────────────── */

.msg-shell {
  display: grid;
  grid-template-columns: 300px 340px 1fr;
  height: 100%;
  min-height: 0;
  background-color: var(--canvas-primary);
  overflow: hidden;
  /* Align with the seller-listings layout — same border treatment
     so the messaging center feels native to the seller area. */
}

/* Buyer variant — collapses the middle "conversations" pane since
   a buyer has exactly one thread per listing. Topics pane widens
   to be the inbox list; right pane stays the thread. This keeps
   the same msg-* component vocabulary for zero styling divergence. */
.msg-shell--buyer {
  grid-template-columns: 360px 1fr;
}

.msg-shell--buyer .msg-shell__pane--conversations {
  display: none;
}

.msg-shell__pane {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  min-height: 0;
  min-width: 0;
  border-right: 1px solid var(--border-primary);
  background-color: var(--canvas-secondary, var(--bg-surface));
}

.msg-shell__pane--thread {
  border-right: none;
  background-color: var(--canvas-primary);
}

/* ── Pane headers ──────────────────────────────────────────────── */
/* Every pane header (topics / conversations / thread) renders at the
   same 56px row height so the three columns line up on their top
   edges. The conversations pane adds a search row below its header,
   which gives it an additional 56px strip — that's expected, only
   the header rows need to match. */
.msg-pane__header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  padding: 7px 18px;
  height: 70px;
  min-height: 70px;
  border-bottom: 1px solid var(--border-primary);
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

.msg-pane__title {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-primary);
  margin: 0;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
}
.msg-pane__title > i {
  color: var(--utility-emerald-800);
  font-size: 14px;
}

.msg-pane__count {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  min-width: 20px;
  height: 20px;
  padding: 0 6px;
  border-radius: 9999px;
  background-color: var(--utility-emerald-800);
  color: var(--utility-white, #fff);
  font-size: 11px;
  font-weight: 600;
}

.msg-pane__body {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-height: 0;
  overflow-y: auto;
}

/* ── Topic list rows (left pane) ───────────────────────────────── */
.msg-topic {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 12px;
  padding: 14px 18px;
  min-height: 72px;
  border-bottom: 1px solid var(--border-primary-subtle);
  cursor: pointer;
  -webkit-transition: background-color 120ms ease;
  transition: background-color 120ms ease;
  position: relative;
}

.msg-topic:hover {
  background-color: var(--bg-primary-subtle);
}

.msg-topic.is-active {
  background-color: var(--bg-card-hover-surface, var(--alpha-emerald-900-10));
}

.msg-topic.is-active::before {
  content: "";
  position: absolute;
  left: 0; top: 8px; bottom: 8px;
  width: 3px;
  border-radius: 0 2px 2px 0;
  background-color: var(--utility-emerald-800);
}

.msg-topic__thumb {
  width: 42px;
  height: 42px;
  border-radius: 10px;
  background-color: var(--bg-primary-subtle);
  background-size: cover;
  background-position: center;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  border: 1px solid var(--border-primary-subtle);
}

.msg-topic__thumb--general {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  font-size: 14px;
  width: 34px;
  height: 34px;
  border-radius: 8px;
  color: var(--utility-emerald-800);
  background-color: var(--alpha-emerald-900-10);
  border-color: var(--alpha-emerald-800-20);
}

/* The synthetic "General Inbox" row sits at the top of the topics
   pane and must exactly match the .msg-pane__search row height on
   the conversations pane so the two pane bodies start at the same
   Y coordinate. Both use box-sizing: border-box and a fixed 57px
   height (56px content + 1px border-bottom). */
.msg-topic:has(.msg-topic__thumb--general) {
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  height: 57px;
  min-height: 57px;
  padding-top: 0;
  padding-bottom: 0;
}

.msg-topic:has(.msg-topic__thumb--general) .msg-topic__body {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  line-height: 1.15;
}

.msg-topic:has(.msg-topic__thumb--general) .msg-topic__title {
  margin: 0;
  font-size: 13px;
  line-height: 1.15;
}

.msg-topic:has(.msg-topic__thumb--general) .msg-topic__meta {
  margin: 0;
  font-size: 11px;
  line-height: 1.15;
}

.msg-topic__body {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 2px;
  line-height: 1.15;
}

.msg-topic__title {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  margin: 0;
  line-height: 1.15;
}

/* tq-9132 (A154 scope 4, isabella 900068424): each list row's PRIMARY control is a native <button> around its label
   (rowControl.js), so the mouse-only rows are keyboard-operable and carry their unread state in the accessible name.
   No visual change at rest: preflight already resets the button's font / colour / padding / background / border (it
   inherits the title's style); the label keeps the title's ellipsis. Its ::after is stretched over the row (the rows are
   position: relative), so the whole row still clicks; the keyboard focus ring is drawn on that box, inside the row.
   tq-9155 (A161): the reset is the DS .btn-bare (A160 tq-9151); only the row layout stays here. */
.msg-row__hit {
  display: block;
  width: 100%;
}
.msg-row__hit::after {
  content: "";
  position: absolute;
  inset: 0;
}
.msg-row__hit:focus-visible {
  outline: none;
}
.msg-row__hit:focus-visible::after {
  outline: 2px solid var(--focus-ring);
  outline-offset: -2px;
}
.msg-row__label {
  display: block;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.msg-topic.is-active .msg-topic__title {
  color: var(--text-primary);
}

.msg-topic__meta {
  font-size: 11px;
  color: var(--text-tertiary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  margin: 0;
  line-height: 1.15;
}

.msg-topic__badge {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  min-width: 20px;
  height: 20px;
  padding: 0 6px;
  border-radius: 9999px;
  background-color: var(--utility-emerald-800);
  color: var(--utility-white, #fff);
  font-size: 11px;
  font-weight: 600;
}

/* Buyer inbox listing rows: taller card with title + meta + price on
   the left, and a right column carrying the relative time on top and
   the unread badge below it. */
.msg-topic--listing {
  -webkit-box-align: stretch;
  -ms-flex-align: stretch;
  align-items: stretch;
  min-height: 88px;
  padding: 12px 18px;
}

.msg-topic--listing .msg-topic__thumb {
  width: 56px;
  height: 56px;
  border-radius: 12px;
  -ms-flex-item-align: center;
  align-self: center;
}

/* ── Support topic row variant ───────────────────────────────────
   A support ticket conversation surfaces in the inbox as its own
   standalone row. Uses the same chrome as a listing row but with
   a life-ring icon in place of the cover image and a "Support"
   tag + ticket number + status pill in the meta line. */
.msg-topic--support {
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  min-height: 84px;
  padding: 16px 20px;
  gap: 14px;
}
.msg-topic--support .msg-topic__body {
  gap: 4px;
}
.msg-topic__thumb--support {
  width: 48px;
  height: 48px;
  border-radius: 12px;
  -ms-flex-item-align: center;
  align-self: center;
  display: -webkit-inline-box !important;
  display: -ms-inline-flexbox !important;
  display: inline-flex !important;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  background: var(--bg-primary, #ffffff);
  border: 1px solid var(--border-primary-subtle, #e7e5e4);
  color: var(--utility-blue-600, #2563eb);
  font-size: 20px;
  background-image: none !important;
  overflow: hidden;
  padding: 6px;
}
.msg-topic__thumb--support img {
  width: 100%;
  height: 100%;
  -o-object-fit: contain;
  object-fit: contain;
  display: block;
}
.msg-topic__thumb--support i {
  display: inline-block;
}
.msg-topic__support-tag {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  padding: 2px 8px;
  border-radius: 9999px;
  background: var(--utility-blue-50, #eff6ff);
  color: var(--utility-blue-700, #1d4ed8);
}
.msg-thread__header-meta-subject {
  color: var(--text-primary);
  font-weight: 500;
}
.msg-topic__support-status {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  font-size: 11px;
  font-weight: 600;
  padding: 1px 6px;
  border-radius: 6px;
  background: var(--bg-primary-subtle, #f5f5f4);
  color: var(--text-secondary);
}
.msg-topic__support-status.is-open    { color: var(--utility-emerald-700, #047857); }
.msg-topic__support-status.is-pending { color: var(--utility-amber-700, #b45309);   }
.msg-topic__support-status.is-closed  { color: var(--text-tertiary);                }

/* ── System (status / priority) message bubble ───────────────────
   Centered status chip used inline with the thread for ambient
   timeline events: status changed, priority changed, ticket
   closed, etc. Rendered by the messages.js renderer when
   m.isSystem === true. */
.msg.msg--system {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  margin: 8px 0;
}
.msg__system-chip {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  color: var(--text-tertiary);
  background: var(--bg-primary-subtle, #f5f5f4);
  border: 1px solid var(--border-primary-subtle, #e7e5e4);
  border-radius: 9999px;
  padding: 4px 12px;
  max-width: 80%;
  text-align: center;
}
.msg__system-time {
  margin-left: 4px;
  font-size: 11px;
  color: var(--text-quaternary);
}

.msg-topic--listing .msg-topic__body {
  gap: 3px;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}

.msg-topic__price {
  font-size: 12px;
  font-weight: 600;
  color: var(--text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  margin: 0;
  line-height: 1.15;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 4px;
  -ms-flex-wrap: nowrap;
  flex-wrap: nowrap;
}

.msg-topic__price-amount {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}

/* Price visibility icon — pulled away from the amount so it reads as
   a status badge rather than part of the number. Color coded to
   match the rest of the seller meta system: light gray when the
   price is hidden from buyers, emerald green when visible. */
.msg-topic__price-icon {
  font-size: 11px;
  margin-left: 10px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

.msg-topic__price-icon--hidden {
  color: var(--text-tertiary);
}

.msg-topic__price-icon--visible {
  color: var(--utility-emerald-800);
}

.msg-topic__conv-count {
  margin: 0;
  font-weight: 400;
  font-size: 11px;
  color: var(--text-tertiary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  line-height: 1.15;
}

.msg-topic__aside {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: end;
  -ms-flex-align: end;
  align-items: flex-end;
  -webkit-box-pack: start;
  -ms-flex-pack: start;
  justify-content: flex-start;
  gap: 6px;
  padding: 2px 0;
  min-width: 36px;
  -ms-flex-item-align: stretch;
  align-self: stretch;
}

.msg-topic__time {
  font-size: 10px;
  color: var(--text-tertiary);
  white-space: nowrap;
  line-height: 1;
}

.msg-topic__aside .msg-topic__badge {
  margin-top: auto;
}

/* Two-line meta block in the buyer thread header card. */
.msg-thread__header-meta-line,
.msg-thread__header-meta-price {
  display: block;
  line-height: 1.2;
}

.msg-thread__header-meta-price {
  font-weight: 600;
  color: var(--text-primary);
  margin-top: 2px;
}

/* ── Conversation list rows (middle pane) ──────────────────────── */
/* Matches .msg-topic row height so the topics and conversations
   bodies stay in horizontal alignment across the three panes. */
.msg-conv {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 12px;
  padding: 14px 18px;
  min-height: 72px;
  border-bottom: 1px solid var(--border-primary-subtle);
  cursor: pointer;
  -webkit-transition: background-color 120ms ease;
  transition: background-color 120ms ease;
  position: relative;
}

.msg-conv:hover {
  background-color: var(--bg-primary-subtle);
}

.msg-conv.is-active {
  background-color: var(--bg-card-hover-surface, var(--alpha-emerald-900-10));
}

.msg-conv.is-active::before {
  content: "";
  position: absolute;
  left: 0; top: 8px; bottom: 8px;
  width: 3px;
  border-radius: 0 2px 2px 0;
  background-color: var(--utility-emerald-800);
}

.msg-conv__avatar { -ms-flex-negative: 0; flex-shrink: 0; }

.msg-conv__body {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 2px;
  line-height: 1.15;
}

.msg-conv__row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  -webkit-box-align: baseline;
  -ms-flex-align: baseline;
  align-items: baseline;
  gap: 8px;
  margin-bottom: 0;
  line-height: 1.15;
}

.msg-conv__name {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  margin: 0;
  line-height: 1.15;
}

.msg-conv__time {
  font-size: 10px;
  color: var(--text-tertiary);
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

.msg-conv__preview {
  font-size: 12px;
  color: var(--text-secondary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  margin: 0;
  line-height: 1.15;
}

.msg-conv__preview--unread {
  font-weight: 600;
  color: var(--text-primary);
}

.msg-conv__badge {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  min-width: 18px;
  height: 18px;
  padding: 0 5px;
  border-radius: 9999px;
  background-color: var(--utility-emerald-800);
  color: var(--utility-white, #fff);
  font-size: 10px;
  font-weight: 600;
  margin-left: 6px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

/* ── Thread (right pane) ───────────────────────────────────────── */
.msg-shell__empty {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  height: 100%;
}

.msg-thread {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  height: 100%;
  min-height: 0;
}

/* Thread header — 70px by default (matches all pane headers and
   the buyer-side listing thumbnail row). */
.msg-thread__header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  padding: 7px 22px;
  height: 70px;
  min-height: 70px;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  border-bottom: 1px solid var(--border-primary);
  background-color: var(--canvas-secondary, var(--bg-surface));
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

/* Seller-only: the person-avatar header (non-listing) is compact
   at 51px to match the search row beside it. The buyer side keeps
   the full 70px because its single header shows the horse
   thumbnail which needs the breathing room. */
.msg-shell:not(.msg-shell--buyer) .msg-thread__header:not(.msg-thread__header--listing) {
  padding: 0 16px;
  height: 51px;
  min-height: 51px;
}

.msg-thread__header-user {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 10px;
  min-width: 0;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
}

.msg-thread__header-text {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  min-width: 0;
  line-height: 1.15;
}

.msg-thread__header-name {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.msg-thread__header-meta {
  font-size: 11px;
  color: var(--text-tertiary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* Listing header thumb — keeps the original 56px size. */
.msg-thread__header--listing .msg-topic__thumb {
  width: 56px;
  height: 56px;
  border-radius: 12px;
}

/* Seller person-avatar row — compact 32px avatar so it fits the
   51px header. Buyer side keeps the default avatar/thumb size
   from the 70px row. */
.msg-shell:not(.msg-shell--buyer) .msg-thread__header:not(.msg-thread__header--listing) .msg-topic__thumb,
.msg-shell:not(.msg-shell--buyer) .msg-thread__header:not(.msg-thread__header--listing) .avatar {
  width: 32px;
  height: 32px;
  min-width: 32px;
  min-height: 32px;
  font-size: 12px;
  border-radius: 9999px;
}

/* ── Listing context strip (seller thread) ──────────────────────── */
/* Sits directly below the thread header, above the scroll pane.
   Gives the seller instant visual context on which horse the buyer
   is asking about — cover thumb + title + price/status + a link to
   the public listing page. */

/* ── History scroll surface (extends existing .msg-panel) ──────── */
.msg-panel--scroll {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  background-color: var(--canvas-primary);
  position: relative;
}

/* Day separator (rendered between message groups by JS) */
.msg-day {
  text-align: center;
  font-size: 11px;
  color: var(--text-tertiary);
  margin: 16px 0 8px;
  position: relative;
}

.msg-day::before,
.msg-day::after {
  content: "";
  position: absolute;
  top: 50%;
  width: calc(50% - 60px);
  height: 1px;
  background-color: var(--border-primary-subtle);
}
.msg-day::before { left: 0; }
.msg-day::after  { right: 0; }

/* Failed-send retry button */
.msg__retry {
  font-size: 11px;
  color: var(--text-danger, #dc2626);
  cursor: pointer;
  padding: 2px 6px;
  border-radius: 4px;
  margin-left: 6px;
}
.msg__retry:hover {
  background-color: var(--bg-danger-subtle, #fee2e2);
}

/* Timestamp / state row — right-aligned for outbound, left-aligned
   for inbound so each row visually belongs to its sender's column.
   The .msg__state--top variant is rendered ABOVE the bubble (used
   for the "Sent · HH:MM" label on outbound messages) so the
   timestamp sits right next to the user's own avatar column. */
.msg__state {
  font-size: 10px;
  color: var(--text-tertiary);
  margin-top: 2px;
  text-align: right;
}
.msg--inbound .msg__state {
  text-align: left;
}
.msg__state--top {
  margin-top: 0;
  margin-bottom: 2px;
}
/* Inbound timestamp sitting above the bubble hugs the right edge of
   the bubble column so it visually anchors to the far side of the
   content, matching the outbound "Sent · HH:MM" row alignment. */
.msg--inbound .msg__state--top {
  text-align: right;
}

/* WhatsApp/iMessage-style delivery checkmarks next to the outbound
   timestamp. Single ✓ = sent but not yet read; double ✓✓ in emerald
   = read by the other party. */
.msg__state-check {
  display: inline-block;
  font-size: 10px;
  margin-left: 3px;
  color: var(--text-tertiary);
  vertical-align: baseline;
}
.msg__state-check--read {
  color: var(--utility-emerald-800);
}
.msg__state--sending { opacity: 0.6; }
.msg__state--failed  { color: var(--text-danger, #dc2626); }

/* Message column wrapper.
   The renderer (seller + buyer) emits `<div class="msg__col">` as
   the vertical stack inside each .msg row. The base messaging.css
   only styles `.msg__body` so this class lands without any
   layout — by default it falls back to `display: block`, which
   stretches the bubble to fill the column and lets the reactions
   cluster collapse to the LEFT edge of the column (visually
   detached from outbound bubbles that are right-aligned).

   Making .msg__col an explicit flex column with side-aware
   alignment fixes both:
     • outbound rows: children align to the RIGHT (flex-end), so
       the bubble, attachments, reactions, and state row all line
       up under the right-aligned outbound bubble.
     • inbound rows: children align to the LEFT (flex-start), so
       everything sits flush against the avatar.
   The bubble itself loses its "stretch to column width" behaviour
   and instead sizes to its own content (capped at the row's
   max-w-[85%] from the base .msg rule), which is the conventional
   chat-bubble shape. */
.msg__col {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  min-width: 0;
  gap: 2px;
}

.msg--outbound .msg__col {
  -webkit-box-align: end;
  -ms-flex-align: end;
  align-items: flex-end;
}

.msg--inbound .msg__col {
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
}

/* Reaction cluster — sits below the bubble. The flex column
   alignment above already handles left/right placement; this rule
   just controls the chip-to-chip layout inside the cluster. */
.msg-reaction.is-mine {
  background-color: var(--bg-card-hover-surface, var(--alpha-emerald-900-10));
  border-color: var(--utility-emerald-800);
  color: var(--utility-emerald-800);
}

/* Typing indicator — pinned above the composer, always visible
   regardless of scroll position inside the history pane. */

@keyframes msg-typing-bounce {
  0%, 60%, 100% { -webkit-transform: translateY(0); transform: translateY(0); opacity: 0.4; }
  30%           { -webkit-transform: translateY(-3px); transform: translateY(-3px); opacity: 1; }
}

/* ── Composer ──────────────────────────────────────────────────── */
/* Override the components/data/messaging.css .msg-composer rule so
   the only visible element is the pill-shaped .msg-composer__inner.
   No wrapping background, no outer border, no shadow. */
[data-msg-shell] .msg-composer {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  padding: 12px 18px 16px;
  background-color: transparent;
  border: none;
  border-radius: 0;
  -webkit-box-shadow: none;
  box-shadow: none;
  overflow: visible;
  position: relative;
}

[data-msg-shell] .msg-composer:focus-within {
  -webkit-box-shadow: none;
  box-shadow: none;
  border: none;
}

.msg-composer__inner {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
  border: 1px solid var(--border-input);
  border-radius: 24px;
  padding: 4px 4px 4px 16px;
  background-color: var(--bg-msg-composer-field, var(--bg-input));   /* tq-9106 (A146): a theme token (was #ffffff in both themes) */
  -webkit-transition: border-color 120ms ease;
  transition: border-color 120ms ease;
}

.msg-composer__inner:hover {
  border-color: var(--border-input-hover);
}

/* Only the outer pill border reacts to focus — the inner textarea
   must not leak any blue browser-default focus ring or shadow. */
.msg-composer__inner:focus-within {
  border-color: var(--utility-emerald-800);
  -webkit-box-shadow: none;
  box-shadow: none;
}

[data-msg-shell] .msg-composer__textarea,
[data-msg-shell] .msg-composer__textarea:focus,
[data-msg-shell] .msg-composer__textarea:focus-visible {
  outline: none !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  border: none !important;
  background: transparent !important;
}

/* Hide the Chrome/WebKit phantom scrollbar on the composer textarea.
   The textarea auto-grows via JS up to max-height; below that cap it
   doesn't need a scrollbar at all. Above it, we still allow scrolling
   but keep the scrollbar visually suppressed (Slack/iMessage style). */
[data-msg-shell] .msg-composer__textarea {
  overflow-y: auto;
  scrollbar-width: none;         /* Firefox */
  -ms-overflow-style: none;      /* IE/Edge */
}
[data-msg-shell] .msg-composer__textarea::-webkit-scrollbar {
  width: 0;
  height: 0;
  display: none;                 /* WebKit (Chrome/Safari) */
}

/* ── Emoji popover (composer insert picker) ──────────────────── */
/* Default state is closed: hidden via display:none. Open state
   adds .is-open which shows the grid above the composer. JS
   toggles BOTH the [hidden] attribute (semantic) and the
   .is-open class (display gate) — `[hidden]` alone wasn't
   reliable across all parent layouts. */

/* ── Pending attachment chip strip (above composer pill) ──────── */

.msg-composer__attachments[hidden] { display: none; }

.msg-composer__field {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}

/* The textarea carries no vertical padding — its line-height defines
   the single-line intrinsic height, and the flex-centered parent
   (.msg-composer__field + .msg-composer__inner, both align-items:
   center) places that single line in the middle of the 44px pill.
   Chrome's default textarea top-bias gets neutralized this way. */
.msg-composer__textarea {
  display: block;
  width: 100%;
  border: none;
  outline: none;
  resize: none;
  background: transparent;
  font-family: inherit;
  font-size: 14px;
  line-height: 20px;
  min-height: 20px;
  color: var(--text-primary);
  max-height: 140px;
  padding: 0;
  margin: 0;
}

.msg-composer__textarea::-webkit-input-placeholder {
  color: var(--text-placeholder, #9ca3af);
}

.msg-composer__textarea::-moz-placeholder {
  color: var(--text-placeholder, #9ca3af);
}

.msg-composer__textarea:-ms-input-placeholder {
  color: var(--text-placeholder, #9ca3af);
}

.msg-composer__textarea::-ms-input-placeholder {
  color: var(--text-placeholder, #9ca3af);
}

.msg-composer__textarea::placeholder {
  color: var(--text-placeholder, #9ca3af);
}

.msg-composer__icon-btn {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  min-width: 36px;
  min-height: 36px;
  padding: 0;
  margin: 0;
  border-radius: 9999px;
  border: none;
  background: transparent;
  color: var(--text-secondary);
  cursor: pointer;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  line-height: 1;
  font-size: 14px;
  -webkit-transition: background-color 100ms ease;
  transition: background-color 100ms ease;
}

.msg-composer__icon-btn i {
  display: block;
  line-height: 1;
}
.msg-composer__icon-btn:hover {
  background-color: var(--bg-primary-subtle);
}

/* ── Responsive collapsing ─────────────────────────────────────── */
@media (max-width: 1023px) {
  .msg-shell {
    grid-template-columns: 240px 280px 1fr;
  }
  .msg-shell--buyer {
    grid-template-columns: 300px 1fr;
  }
}

@media (max-width: 720px) {
  .msg-shell,
  .msg-shell--buyer {
    grid-template-columns: 1fr;
  }
  .msg-shell[data-msg-mobile-pane="topics"] .msg-shell__pane--conversations,
  .msg-shell[data-msg-mobile-pane="topics"] .msg-shell__pane--thread,
  .msg-shell[data-msg-mobile-pane="conversations"] .msg-shell__pane--topics,
  .msg-shell[data-msg-mobile-pane="conversations"] .msg-shell__pane--thread,
  .msg-shell[data-msg-mobile-pane="thread"] .msg-shell__pane--topics,
  .msg-shell[data-msg-mobile-pane="thread"] .msg-shell__pane--conversations {
    display: none;
  }
  .msg-pane__back {
    display: -webkit-inline-box !important;
    display: -ms-inline-flexbox !important;
    display: inline-flex !important;
  }
}

/* ──────────────────────────────────────────────────────────────────
   Mobile back-arrow buttons in pane headers
   Hidden on desktop, revealed on the < 720px breakpoint above.
   ────────────────────────────────────────────────────────────────── */
.msg-pane__back {
  display: none;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 9999px;
  border: none;
  background: transparent;
  color: var(--text-secondary);
  cursor: pointer;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  margin-right: 8px;
}
.msg-pane__back:hover {
  background-color: var(--bg-primary-subtle);
}

.msg-thread__back {
  margin-right: 4px;
}

/* ──────────────────────────────────────────────────────────────────
   Search box (cross-conversation message search)
   ────────────────────────────────────────────────────────────────── */
/* Fixed at 51px so the search row, the Inbox/Archived tab strip,
   and the thread person-avatar header all share the same height
   — the pane bodies start at the same Y coordinate. */
.msg-pane__search {
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  height: 51px;
  min-height: 51px;
  padding: 0 12px;
  border-bottom: 1px solid var(--border-primary-subtle);
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.msg-pane__search .msg-search {
  width: 100%;
}
.msg-search {
  position: relative;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}
.msg-search__icon {
  position: absolute;
  left: 12px;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
  font-size: 13px;
  color: var(--text-tertiary);
  pointer-events: none;
}
/* Height is kept compact — padding reduced to 5px so the input
   matches the visual height of the Inbox / Archived tab buttons
   (which use padding: 6px 12px at font-size 12px). */
.msg-search__input {
  width: 100%;
  padding: 5px 32px 5px 32px;
  border: 1px solid var(--border-input);
  border-radius: 9999px;
  background-color: var(--bg-input);
  color: var(--text-input, var(--text-primary));
  font-size: 12px;
  outline: none;
  -webkit-transition: border-color 120ms ease;
  transition: border-color 120ms ease;
}
.msg-search__input::-webkit-input-placeholder { color: var(--text-placeholder, #9ca3af); }
.msg-search__input::-moz-placeholder { color: var(--text-placeholder, #9ca3af); }
.msg-search__input:-ms-input-placeholder { color: var(--text-placeholder, #9ca3af); }
.msg-search__input::-ms-input-placeholder { color: var(--text-placeholder, #9ca3af); }
.msg-search__input::placeholder { color: var(--text-placeholder, #9ca3af); }
.msg-search__input:hover {
  border-color: var(--border-input-hover);
}
.msg-search__input:focus {
  border-color: var(--border-input-active);
  -webkit-box-shadow: none;
  box-shadow: none;
}
.msg-search__clear {
  position: absolute;
  right: 8px;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
  width: 22px;
  height: 22px;
  border-radius: 9999px;
  border: none;
  background: transparent;
  color: var(--text-tertiary);
  cursor: pointer;
}
.msg-search__clear:hover { background-color: var(--bg-primary-subtle); }

/* Search result rows — drop straight into the middle pane body */
.msg-pane__body--search { display: none; }
.msg-pane__body--search[data-active="1"] { display: block; }

.msg-search-hit {
  padding: 12px 18px;
  border-bottom: 1px solid var(--border-primary-subtle);
  cursor: pointer;
}
.msg-search-hit:hover { background-color: var(--bg-primary-subtle); }
.msg-search-hit__name {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary);
}
.msg-search-hit__excerpt {
  font-size: 12px;
  color: var(--text-secondary);
  margin-top: 2px;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.msg-search-hit__meta {
  font-size: 10px;
  color: var(--text-tertiary);
  margin-top: 4px;
}
.msg-search-hit mark {
  background-color: var(--bg-warning-subtle, #fef3c7);
  color: inherit;
  padding: 0 2px;
  border-radius: 2px;
}

/* ──────────────────────────────────────────────────────────────────
   Composer — reply chip + attachment strip
   ────────────────────────────────────────────────────────────────── */
.msg-composer__reply-icon {
  font-size: 12px;
  color: var(--utility-emerald-800);
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.msg-composer__reply-name {
  font-size: 11px;
  font-weight: 600;
  color: var(--utility-emerald-800);
}
.msg-composer__reply-body {
  font-size: 12px;
  color: var(--text-secondary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.msg-composer__reply-cancel {
  width: 24px;
  height: 24px;
  border-radius: 9999px;
  border: none;
  background: transparent;
  color: var(--text-tertiary);
  cursor: pointer;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.msg-composer__reply-cancel:hover {
  background-color: rgba(0,0,0,0.05);
}
.msg-attach-chip {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
  padding: 6px 6px 6px 10px;
  border-radius: 8px;
  background-color: var(--bg-primary-subtle);
  border: 1px solid var(--border-primary);
  font-size: 12px;
  color: var(--text-primary);
  max-width: 280px;
  min-width: 0;
}
.msg-attach-chip > i { color: var(--text-tertiary); -webkit-box-flex: 0; -ms-flex: none; flex: none; }
/* A100 tq-8721: a chip is an upload row of the DS engine (upload-rows.css): the name, then its status line (the bar + text
   [+ Retry]), and its own control (Cancel / Remove) */
.msg-attach-chip__body {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
  -webkit-box-flex: 1;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto;
}
.msg-attach-chip__name {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.msg-attach-chip__status { font-size: 11px; }
.msg-attach-chip__status:empty { display: none; }
.msg-attach-chip__status .upload-row__track { width: 60px; -webkit-box-flex: 0; -ms-flex: 0 0 60px; flex: 0 0 60px; }
.msg-attach-chip[data-upload-state='failed'] { border-color: var(--utility-red-500, #ef4444); }

/* ──────────────────────────────────────────────────────────────────
   Reply preview rendered above bubbles
   ────────────────────────────────────────────────────────────────── */
.msg__reply {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  padding: 6px 10px;
  margin-bottom: 4px;
  border-left: 3px solid var(--text-tertiary);
  background-color: rgba(0,0,0,0.04);
  border-radius: 4px;
  max-width: 100%;
}
.msg__reply-name {
  font-size: 10px;
  font-weight: 600;
  color: var(--text-secondary);
}
.msg__reply-body {
  font-size: 11px;
  color: var(--text-tertiary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 280px;
}

/* ──────────────────────────────────────────────────────────────────
   Attachment bubbles inside the message stream
   ────────────────────────────────────────────────────────────────── */
.msg-att {
  display: block;
  border-radius: 12px;
  overflow: hidden;
  cursor: pointer;
  background-color: var(--bg-primary-subtle);
  border: 1px solid var(--border-primary);
}
.msg-att--image img {
  display: block;
  max-width: 100%;
  max-height: 280px;
  -o-object-fit: cover;
  object-fit: cover;
}
.msg-att--doc {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
}
.msg-att--doc .msg-att__icon {
  width: 32px;
  height: 32px;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  background-color: var(--bg-card-hover-surface, var(--alpha-emerald-900-10));
  color: var(--utility-emerald-800);
  border-radius: 8px;
}
.msg-att--doc .msg-att__name {
  font-size: 12px;
  font-weight: 600;
  color: var(--text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.msg-att--doc .msg-att__size {
  font-size: 10px;
  color: var(--text-tertiary);
}
.msg-att__lock {
  font-size: 10px;
  color: var(--text-tertiary);
  margin-left: 6px;
}

/* ──────────────────────────────────────────────────────────────────
   Hover action menu on bubbles
   ────────────────────────────────────────────────────────────────── */
.msg-action-menu {
  position: absolute;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  gap: 2px;
  padding: 4px;
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 9999px;
  -webkit-box-shadow: 0 4px 14px rgba(0,0,0,0.10);
  box-shadow: 0 4px 14px rgba(0,0,0,0.10);
  z-index: 50;
}
.msg-action-menu button {
  width: 32px;
  height: 32px;
  border-radius: 9999px;
  border: none;
  background: transparent;
  color: var(--text-secondary);
  cursor: pointer;
  font-size: 13px;
  -webkit-transition: background-color 80ms ease;
  transition: background-color 80ms ease;
}
.msg-action-menu button:hover {
  background-color: var(--bg-primary-subtle);
  color: var(--text-primary);
}

/* ──────────────────────────────────────────────────────────────────
   Reaction picker popover (anchored to a bubble's reaction button)
   ────────────────────────────────────────────────────────────────── */
.msg-reaction-picker button {
  width: 30px;
  height: 30px;
  border-radius: 9999px;
  border: none;
  background: transparent;
  cursor: pointer;
  font-size: 18px;
  line-height: 1;
  -webkit-transition: background-color 80ms ease, -webkit-transform 80ms ease;
  transition: background-color 80ms ease, -webkit-transform 80ms ease;
  transition: transform 80ms ease, background-color 80ms ease;
  transition: transform 80ms ease, background-color 80ms ease, -webkit-transform 80ms ease;
}
.msg-reaction-picker button:hover {
  -webkit-transform: scale(1.2);
  -ms-transform: scale(1.2);
  transform: scale(1.2);
  background-color: var(--bg-primary-subtle);
}

/* ──────────────────────────────────────────────────────────────────
   Edit-in-place input — DEPRECATED ruleset.
   The shared messageActionsKit now renders the edit textarea with
   the same .msg__edit-input class, but it expects no chrome at
   all (no border, no background, transparent typography that
   inherits from the surrounding bubble). The newer ruleset further
   down in this file (INLINE EDIT-IN-BUBBLE block) overrides every
   property here, so this block is effectively unused. Left in
   place to keep diffs minimal — can be removed in a follow-up.
   ────────────────────────────────────────────────────────────────── */
.msg__edit-input {
  display: block;
  width: 100%;
  font-family: inherit;
  font-size: 13px;
  color: var(--text-primary);
  outline: none;
}
.msg__edited-mark {
  font-size: 9px;
  color: var(--text-tertiary);
  margin-left: 4px;
}

/* ──────────────────────────────────────────────────────────────────
   Attachment viewer modal
   ────────────────────────────────────────────────────────────────── */
.msg-viewer {
  position: fixed;
  inset: 0;
  z-index: var(--z-modal);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  /* safe area (tq-9355): B. A centred modal: the overlay root pads the insets, so the viewer shell clears them. */
  padding: calc(0px + env(safe-area-inset-top, 0px)) max(0px, env(safe-area-inset-right, 0px))
           calc(0px + env(safe-area-inset-bottom, 0px)) max(0px, env(safe-area-inset-left, 0px));
}
/* ══════════════════════════════════════════════════════════════════
   CONTACT SELLER MODAL — inline compose flow opened from any
   "Message seller" button across the listing surfaces.
   ──────────────────────────────────────────────────────────────────
   We now use Bootstrap Modal v5 (bootstrap.Modal API) so the modal
   stacks correctly on top of any other open Bootstrap modal (e.g.
   the buyer detail modal). Bootstrap manages positioning, backdrop,
   focus trap, z-index, and dismissal — we only override the visual
   styling of the dialog + content to match the Reinly emerald theme.
   ══════════════════════════════════════════════════════════════════ */

#rnly-contact-seller-modal {
  /* Bootstrap Modal default class .modal sets position: fixed, etc.
     We bump z-index well above everything else (Bootstrap defaults:
     modal=1055, modal-backdrop=1050) to guarantee stacking above
     the buyer detail modal which uses the same default. */
  z-index: var(--z-modal-stacked);
}
#rnly-contact-seller-modal .modal-dialog {
  width: 100%;
  max-width: 560px;
  margin: auto;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  min-height: calc(100% - 2rem);
}
#rnly-contact-seller-modal .modal-content {
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 16px;
  overflow: hidden;
  -webkit-box-shadow: 0 24px 64px rgba(15, 23, 42, 0.24);
  box-shadow: 0 24px 64px rgba(15, 23, 42, 0.24);
  width: 100%;
}
/* tq-8302 (R10): the stacked-modal z-index rule that lived here is gone. Modal stacking is the DS modal driver's
   (Reinly.Design Scripts/components/modal.js): every open modal, Bootstrap-opened ones included (its shown/hidden
   bridge), is ordered on ONE stack, each STEP above the one beneath and never below its own CSS layer (z-1050). */

#rnly-contact-seller-modal .modal-header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  padding: 20px 22px 16px;
  border-bottom: 1px solid var(--border-primary-subtle);
}

.cs-modal__header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 14px;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
}

.cs-modal__thumb {
  width: 52px;
  height: 52px;
  border-radius: 12px;
  background-color: var(--bg-primary-subtle);
  background-size: cover;
  background-position: center;
  border: 1px solid var(--border-primary-subtle);
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.cs-modal__thumb:not([style*="background-image"])::before {
  content: "\f7ab"; /* fa-horse-head */
  font-family: "Font Awesome 6 Pro";
  font-weight: 300;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  height: 100%;
  color: var(--text-quaternary);
  font-size: 22px;
}

.cs-modal__header-text { min-width: 0; -webkit-box-flex: 1; -ms-flex: 1; flex: 1; }

.cs-modal__eyebrow {
  font-size: 11px;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--text-tertiary);
}

.cs-modal__title {
  margin: 2px 0 0;
  font-size: 16px;
  font-weight: 600;
  color: var(--text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

#rnly-contact-seller-modal .modal__close-btn {
  width: 32px;
  height: 32px;
  border-radius: 9999px;
  border: none;
  background: transparent;
  color: var(--text-secondary);
  cursor: pointer;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  margin-left: 12px;
}
#rnly-contact-seller-modal .modal__close-btn:hover {
  background-color: var(--bg-primary-subtle);
}

.cs-modal__body {
  padding: 18px 22px 8px;
}

.cs-modal__body--centered {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  text-align: center;
  padding: 36px 22px 16px;
  gap: 8px;
}

.cs-modal__lead {
  font-size: 13px;
  color: var(--text-secondary);
  margin: 0 0 14px;
  line-height: 1.5;
}
.cs-modal__lead strong {
  color: var(--text-primary);
  font-weight: 600;
}

.cs-modal__chips {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  gap: 6px;
  margin-bottom: 14px;
}
.cs-modal__chip {
  font-size: 12px;
  padding: 6px 12px;
  border-radius: 9999px;
  border: 1px solid var(--border-primary);
  background-color: var(--bg-primary-subtle);
  color: var(--text-secondary);
  cursor: pointer;
  -webkit-transition: background-color 100ms ease, border-color 100ms ease, color 100ms ease;
  transition: background-color 100ms ease, border-color 100ms ease, color 100ms ease;
}
.cs-modal__chip:hover {
  background-color: var(--alpha-emerald-900-10);
  border-color: var(--alpha-emerald-800-20);
  color: var(--utility-emerald-800);
}

.cs-modal__label {
  display: block;
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--text-tertiary);
  margin-bottom: 6px;
}

.cs-modal__textarea {
  width: 100%;
  min-height: 130px;
  resize: vertical;
  padding: 12px 14px;
  border: 1px solid var(--border-primary);
  border-radius: 12px;
  background-color: var(--canvas-secondary, var(--bg-surface));
  color: var(--text-primary);
  font-family: inherit;
  font-size: 14px;
  line-height: 1.5;
  outline: none;
  -webkit-transition: border-color 120ms ease, -webkit-box-shadow 120ms ease;
  transition: border-color 120ms ease, -webkit-box-shadow 120ms ease;
  transition: border-color 120ms ease, box-shadow 120ms ease;
  transition: border-color 120ms ease, box-shadow 120ms ease, -webkit-box-shadow 120ms ease;
}
.cs-modal__textarea::-webkit-input-placeholder { color: var(--text-placeholder, var(--text-quaternary)); }
.cs-modal__textarea::-moz-placeholder { color: var(--text-placeholder, var(--text-quaternary)); }
.cs-modal__textarea:-ms-input-placeholder { color: var(--text-placeholder, var(--text-quaternary)); }
.cs-modal__textarea::-ms-input-placeholder { color: var(--text-placeholder, var(--text-quaternary)); }
.cs-modal__textarea::placeholder { color: var(--text-placeholder, var(--text-quaternary)); }
.cs-modal__textarea:focus {
  border-color: var(--utility-emerald-800);
}

/* tq-9030 (A141): the DS's ONE focus ring (A131), not a translucent 3px tint (~1.2:1, unpainted in forced colors) */
.cs-modal__textarea:focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: 2px;
}

.cs-modal__counter {
  font-size: 11px;
  color: var(--text-tertiary);
  text-align: right;
  margin-top: 4px;
}

.cs-modal__error {
  margin-top: 12px;
  padding: 10px 12px;
  border-radius: 8px;
  background-color: var(--bg-danger-subtle, #fee2e2);
  color: var(--text-danger, #dc2626);
  font-size: 12px;
}
.cs-modal__error[hidden] { display: none !important; }

.cs-modal__spinner {
  font-size: 28px;
  color: var(--utility-emerald-800);
  margin-bottom: 4px;
}

.cs-modal__success-icon {
  font-size: 44px;
  color: var(--utility-emerald-800);
  margin-bottom: 4px;
}
.cs-modal__success-title {
  font-size: 18px;
  font-weight: 600;
  color: var(--text-primary);
  margin: 0;
}
.cs-modal__success-body {
  font-size: 13px;
  color: var(--text-secondary);
  margin: 0;
  max-width: 360px;
}
.cs-modal__success-body strong {
  color: var(--text-primary);
  font-weight: 600;
}

.cs-modal__footer {
  padding: 14px 22px 18px;
  border-top: 1px solid var(--border-primary-subtle);
}
.cs-modal__actions {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
  gap: 8px;
}
.cs-modal__actions[hidden] { display: none !important; }

#rnly-contact-seller-modal [data-cs-state][hidden] { display: none !important; }

#rnly-contact-seller-modal .btn-primary {
  background-color: var(--utility-emerald-800);
  color: var(--utility-white, #fff);
  border: 1px solid var(--utility-emerald-800);
}
#rnly-contact-seller-modal .btn-primary:hover:not([disabled]) {
  background-color: var(--utility-emerald-900, var(--utility-emerald-800));
  border-color: var(--utility-emerald-900, var(--utility-emerald-800));
}
#rnly-contact-seller-modal .btn-primary[disabled] {
  opacity: 0.5;
  cursor: not-allowed;
}

/* ──────────────────────────────────────────────────────────────────
   Bubble palette override — point at emerald instead of the default
   blue from components/data/messaging.css. The base classes already
   emit `var(--bg-msg-outbound, var(--bg-primary-solid))` so we just
   re-pin those tokens scoped to the messaging center.
   ────────────────────────────────────────────────────────────────── */
[data-msg-shell] .msg--outbound .msg__bubble,
[data-msg-shell] .msg--outbound + .msg--outbound .msg__bubble {
  background-color: var(--utility-emerald-800);
  color: var(--utility-white, #fff);
  border-radius: 14px 14px 4px 14px;
}
[data-msg-shell] .msg--inbound .msg__bubble,
[data-msg-shell] .msg + .msg--inbound .msg__bubble,
[data-msg-shell] .msg + .msg:not(.msg--outbound) .msg__bubble {
  background-color: #ffffff;
  color: var(--text-primary);
  border: 1px solid var(--border-primary);
  border-radius: 14px 14px 14px 4px;
}

/* Reply preview inside an outbound bubble needs to invert against
   the dark emerald background for legibility. */
[data-msg-shell] .msg--outbound .msg__reply {
  background-color: rgba(255, 255, 255, 0.16);
  border-left-color: rgba(255, 255, 255, 0.5);
}
[data-msg-shell] .msg--outbound .msg__reply-name {
  color: rgba(255, 255, 255, 0.95);
}
[data-msg-shell] .msg--outbound .msg__reply-body {
  color: rgba(255, 255, 255, 0.78);
}
[data-msg-shell] .msg--outbound .msg__edited-mark {
  color: rgba(255, 255, 255, 0.6);
}

/* ──────────────────────────────────────────────────────────────────
   GLOBAL [hidden] OVERRIDE for messaging-center elements
   ────────────────────────────────────────────────────────────────────
   The HTML `hidden` attribute is supposed to map to `display: none`
   but ANY explicit `display:` rule in CSS wins specificity over it.
   Every messaging-center element with an explicit display style
   needs an explicit hidden override here. Catches all of:
     • .msg-thread             (display: flex)   — right-pane chrome
     • .msg-thread[hidden]     should be hidden until a conv opens
     • .msg-pane__count        (display: inline-flex) — blue badges
     • .msg-typing             (display: flex)
     • .msg-search__clear      (display: inline-flex via .msg-search)
     • .msg-viewer / __locked  (display: flex / inline-flex)
     • .msg-action-menu        (display: flex)
     • .msg-reaction-picker    (display: flex)
     • .msg-composer__reply    (display: flex)
     • .msg-composer__attachments (display: flex)
     • .msg-pane__body--search (already display: none, but be explicit)
   ────────────────────────────────────────────────────────────────── */
[data-msg-shell] [hidden],
.msg-viewer[hidden],
.msg-action-menu[hidden],
.msg-thread[hidden],
.msg-typing[hidden],
.msg-pane__count[hidden],
.msg-search__clear[hidden],
.msg-viewer__locked[hidden],
.msg-composer__reply[hidden],
.msg-composer__attachments[hidden],
.msg-pane__body--search[hidden] {
  display: none !important;
}
.msg-viewer__backdrop {
  position: absolute;
  inset: 0;
  background-color: rgba(15, 23, 42, 0.85);
  cursor: -webkit-zoom-out;
  cursor: zoom-out;
}
.msg-viewer__shell {
  position: relative;
  z-index: 1;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  background-color: var(--canvas-secondary, var(--bg-surface));
  border-radius: 16px;
  -webkit-box-shadow: 0 24px 64px rgba(0,0,0,0.4);
  box-shadow: 0 24px 64px rgba(0,0,0,0.4);
  width: min(92vw, 1100px);
  max-height: 90vh;
  overflow: hidden;
}
.msg-viewer__header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  padding: 14px 22px;
  border-bottom: 1px solid var(--border-primary);
}
.msg-viewer__title {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.msg-viewer__close {
  width: 32px;
  height: 32px;
  border-radius: 9999px;
  border: none;
  background: transparent;
  color: var(--text-secondary);
  cursor: pointer;
}
.msg-viewer__close:hover { background-color: var(--bg-primary-subtle); }

.msg-viewer__body {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-height: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  padding: 16px;
  background-color: #0f172a;
  overflow: auto;
}
.msg-viewer__body img,
.msg-viewer__body iframe {
  max-width: 100%;
  max-height: 75vh;
  -o-object-fit: contain;
  object-fit: contain;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-user-select: none;
  pointer-events: auto;
}
.msg-viewer__body iframe {
  width: 100%;
  height: 75vh;
  border: none;
  background: #fff;
}
.msg-viewer__footer {
  padding: 10px 22px;
  border-top: 1px solid var(--border-primary);
  font-size: 11px;
  color: var(--text-tertiary);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
}
.msg-viewer__locked {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
}

/* Block right-click on locked attachments — small UX deterrent */
.msg-viewer[data-locked="1"] .msg-viewer__body img,
.msg-viewer[data-locked="1"] .msg-viewer__body iframe {
  -webkit-user-drag: none;
}

/* ──────────────────────────────────────────────────────────────────
   Avatar badge override for inline presence indicator
   (extends the existing .avatar-badge from avatar.css)
   ────────────────────────────────────────────────────────────────── */
.msg-conv__avatar .avatar { position: relative; }

/* ──────────────────────────────────────────────────────────────────
   Right-pane header presence dot
   ────────────────────────────────────────────────────────────────── */
.msg-thread__header-user .avatar { position: relative; }

/* ──────────────────────────────────────────────────────────────────
   Skeleton polish for the conversation list (middle pane)
   ────────────────────────────────────────────────────────────────── */

/* ══════════════════════════════════════════════════════════════════
   INBOX / ARCHIVED TAB STRIP — sits between the pane header and
   the search bar in the topics column. Two buttons that swap the
   underlying topic-list query between live and archived buckets.
   ══════════════════════════════════════════════════════════════════ */
.msg-pane__tabs {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  gap: 4px;
  padding: 6px 12px 8px;
  border-bottom: 1px solid var(--border-primary-subtle);
  background-color: var(--canvas-secondary, var(--bg-surface));
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

.msg-pane__tab {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  padding: 6px 12px;
  border: 0;
  background: transparent;
  color: var(--text-secondary);
  font-size: 12px;
  font-weight: 600;
  border-radius: 9999px;
  cursor: pointer;
  -webkit-transition: background-color 120ms ease, color 120ms ease;
  transition: background-color 120ms ease, color 120ms ease;
}

.msg-pane__tab:hover {
  background-color: var(--bg-primary-subtle);
  color: var(--text-primary);
}

.msg-pane__tab.is-active {
  background-color: var(--utility-emerald-800, #065f46);
  color: var(--utility-white, #fff);
}

.msg-pane__tab.is-active:hover {
  background-color: var(--utility-emerald-800, #065f46);
}

/* ══════════════════════════════════════════════════════════════════
   COPY / ACTION TOAST — transient feedback for messageActionsKit.
   Mounted into [data-*-msg-toast-host] (or document.body) and
   fades in / out without pulling in a toast library.
   ══════════════════════════════════════════════════════════════════ */
.msg-toast-host {
  position: fixed;
  bottom: 24px;
  left: 50%;
  -webkit-transform: translateX(-50%);
  -ms-transform: translateX(-50%);
  transform: translateX(-50%);
  z-index: var(--z-toast);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
  pointer-events: none;
}

.msg-toast {
  background-color: var(--text-primary, #0f172a);
  color: var(--utility-white, #fff);
  font-size: 12px;
  font-weight: 500;
  padding: 8px 14px;
  border-radius: 9999px;
  -webkit-box-shadow: 0 8px 24px -8px rgba(15, 23, 42, 0.4);
  box-shadow: 0 8px 24px -8px rgba(15, 23, 42, 0.4);
  opacity: 0;
  -webkit-transform: translateY(8px);
  -ms-transform: translateY(8px);
  transform: translateY(8px);
  -webkit-transition: opacity 200ms ease, -webkit-transform 200ms ease;
  transition: opacity 200ms ease, -webkit-transform 200ms ease;
  transition: opacity 200ms ease, transform 200ms ease;
  transition: opacity 200ms ease, transform 200ms ease, -webkit-transform 200ms ease;
  pointer-events: auto;
}

.msg-toast--visible {
  opacity: 1;
  -webkit-transform: translateY(0);
  -ms-transform: translateY(0);
  transform: translateY(0);
}

/* ══════════════════════════════════════════════════════════════════
   INLINE EDIT-IN-BUBBLE — when the user picks "Edit" from the
   action menu, the bubble's .msg__content gets replaced with this
   form. The textarea reuses the bubble's typography exactly so the
   edit mode looks like the same message, just with an input cursor.
   ══════════════════════════════════════════════════════════════════ */
.msg__edit-form {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 8px;
  min-width: 180px;
}

.msg__edit-input {
  width: 100%;
  border: 0;
  background: transparent;
  color: inherit;
  font: inherit;
  line-height: inherit;
  resize: none;
  outline: none;
  padding: 0;
  margin: 0;
  min-height: 1em;
  max-height: 320px;
  overflow-y: auto;
  font-family: inherit;
  -webkit-box-shadow: none;
  box-shadow: none;
}

/* Suppress every browser focus chrome variant — outline, border,
   and box-shadow. The bubble itself is the visual focus indicator
   (the .msg__edit-form sits inside it) so the textarea should be
   chromeless to keep the inline-edit feeling like the message
   itself rather than a form field. */
.msg__edit-input:focus,
.msg__edit-input:focus-visible {
  outline: none !important;
  border: 0 !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
}

.msg--outbound .msg__edit-input {
  color: var(--utility-white, #fff);
}

.msg--outbound .msg__edit-input::-webkit-input-placeholder {
  color: rgba(255, 255, 255, 0.6);
}

.msg--outbound .msg__edit-input::-moz-placeholder {
  color: rgba(255, 255, 255, 0.6);
}

.msg--outbound .msg__edit-input:-ms-input-placeholder {
  color: rgba(255, 255, 255, 0.6);
}

.msg--outbound .msg__edit-input::-ms-input-placeholder {
  color: rgba(255, 255, 255, 0.6);
}

.msg--outbound .msg__edit-input::placeholder {
  color: rgba(255, 255, 255, 0.6);
}

.msg__edit-actions {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  gap: 6px;
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
  padding-top: 4px;
  border-top: 1px solid rgba(0, 0, 0, 0.08);
}

.msg--outbound .msg__edit-actions {
  border-top-color: rgba(255, 255, 255, 0.2);
}

.msg__edit-cancel,
.msg__edit-save {
  border: 0;
  background: transparent;
  color: inherit;
  font-size: 11px;
  font-weight: 600;
  padding: 4px 10px;
  border-radius: 9999px;
  cursor: pointer;
  opacity: 0.85;
  -webkit-transition: opacity 120ms ease, background-color 120ms ease;
  transition: opacity 120ms ease, background-color 120ms ease;
}

.msg__edit-cancel:hover,
.msg__edit-save:hover {
  opacity: 1;
  background-color: rgba(0, 0, 0, 0.06);
}

.msg--outbound .msg__edit-cancel:hover,
.msg--outbound .msg__edit-save:hover {
  background-color: rgba(255, 255, 255, 0.15);
}

.msg__edit-save {
  color: var(--utility-emerald-800, #065f46);
}

.msg--outbound .msg__edit-save {
  color: var(--utility-white, #fff);
  font-weight: 700;
}

.msg__edit-cancel:disabled,
.msg__edit-save:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

/* ══════════════════════════════════════════════════════════════════
   DELETION TOMBSTONE — soft-deleted messages keep their bubble
   shell so reply chains remain visually intact, but the body is
   replaced with a muted "(message deleted)" placeholder.
   ══════════════════════════════════════════════════════════════════ */
.msg__content--deleted {
  font-style: italic;
  opacity: 0.65;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
}

.msg__content--deleted i {
  font-size: 10px;
}

/* Disable hover affordance on tombstones — there's nothing to do
   with a deleted message and the action menu intentionally skips
   it via data-msg-deleted="1". The cursor cue reinforces that. */
.msg[data-msg-deleted="1"] .msg__bubble {
  cursor: default;
}

/* ══════════════════════════════════════════════════════════════════
   HOVER STATE on bubbles + active-menu emphasis — gives the user a
   subtle "this is the message I'm acting on" cue without flashing
   the bubble's background or causing layout shift.
   ══════════════════════════════════════════════════════════════════ */
.msg .msg__bubble {
  -webkit-transition: -webkit-filter 160ms ease, -webkit-box-shadow 160ms ease;
  transition: -webkit-filter 160ms ease, -webkit-box-shadow 160ms ease;
  transition: filter 160ms ease, box-shadow 160ms ease;
  transition: filter 160ms ease, box-shadow 160ms ease, -webkit-filter 160ms ease, -webkit-box-shadow 160ms ease;
}

/* Hover the actual chat bubble — not the wider row container —
   so the brightness cue lines up exactly with the visible
   bubble shape rather than firing whenever the cursor is in
   the row's horizontal whitespace. */
.msg__bubble:hover {
  -webkit-filter: brightness(0.985);
  filter: brightness(0.985);
}

.msg--menu-open .msg__bubble {
  -webkit-box-shadow: 0 0 0 2px rgba(6, 95, 70, 0.18);
  box-shadow: 0 0 0 2px rgba(6, 95, 70, 0.18);
}

/* Floating action menu + reaction picker.
   The kit sets position:fixed inline so the menu lives in its own
   stacking context regardless of where it's mounted in the DOM
   tree, and the coordinates from getBoundingClientRect() apply
   directly without any container offset math.

   Animation strategy:
     • The element stays in the layout permanently — we override
       the user-agent `[hidden] { display: none }` so the kit's
       `el.hidden = true/false` toggles a STATE rather than
       removing the element from the layout.
     • Hidden state: opacity 0 + 6px upward slide + pointer-events
       none. Visible state: opacity 1 + translate 0 + pointer-events
       auto. Both transition over 200 ms with a soft cubic-bezier.
     • Because the element never leaves the layout,
       getBoundingClientRect() always returns real dimensions
       (the kit needs this to position the menu and picker), and
       the transition runs cleanly on every show/hide. */
.msg-action-menu {
  position: fixed;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  pointer-events: auto;
  opacity: 1;
  -webkit-transform: translateY(0);
  -ms-transform: translateY(0);
  transform: translateY(0);
  -webkit-transition: opacity 200ms cubic-bezier(0.16, 1, 0.3, 1),
              -webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1);
  transition: opacity 200ms cubic-bezier(0.16, 1, 0.3, 1),
              -webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1);
  transition: opacity 200ms cubic-bezier(0.16, 1, 0.3, 1),
              transform 200ms cubic-bezier(0.16, 1, 0.3, 1);
  transition: opacity 200ms cubic-bezier(0.16, 1, 0.3, 1),
              transform 200ms cubic-bezier(0.16, 1, 0.3, 1),
              -webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1);
}

.msg-action-menu[hidden] {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;        /* override UA [hidden] { display: none } */
  pointer-events: none;
  opacity: 0;
  -webkit-transform: translateY(6px);
  -ms-transform: translateY(6px);
  transform: translateY(6px);
}

.msg-action-menu {
  z-index: var(--z-dropdown);
}

/* Quick-row of 8 default reactions + the "more" expand button.
   This stays visible even when the picker is expanded so the
   user can fire a one-click reaction without scrolling the grid. */
.msg-reaction-picker__quick {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 2px;
  padding: 6px 8px;
}

.msg-reaction-picker__quick button {
  width: 30px;
  height: 30px;
  border-radius: 9999px;
  border: none;
  background: transparent;
  cursor: pointer;
  font-size: 18px;
  line-height: 1;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -webkit-transition: background-color 80ms ease, -webkit-transform 80ms ease;
  transition: background-color 80ms ease, -webkit-transform 80ms ease;
  transition: transform 80ms ease, background-color 80ms ease;
  transition: transform 80ms ease, background-color 80ms ease, -webkit-transform 80ms ease;
}

.msg-reaction-picker__quick button:hover {
  -webkit-transform: scale(1.2);
  -ms-transform: scale(1.2);
  transform: scale(1.2);
  background-color: var(--bg-primary-subtle);
}

/* Expand button — sits at the right end of the quick row. The
   icon flips between plus and minus via the .is-expanded modifier
   on the picker root. */
.msg-reaction-picker__more {
  margin-left: 4px;
  color: var(--text-tertiary);
  font-size: 12px !important;
  border: 1px dashed var(--border-primary) !important;
}

.msg-reaction-picker.is-expanded .msg-reaction-picker__more {
  background-color: var(--bg-primary-subtle) !important;
  color: var(--utility-emerald-800);
  border-style: solid !important;
}

/* Expanded panel — search + grid. Sits below the quick row with
   a soft divider between them. The grid scrolls vertically when
   it overflows the picker's max height. */
.msg-reaction-picker__expanded {
  border-top: 1px solid var(--border-primary-subtle);
  padding: 8px 8px 10px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 8px;
  width: 320px;
}

.msg-reaction-picker__expanded[hidden] {
  display: none;
}

.msg-reaction-picker__search-input {
  width: 100%;
  padding: 7px 12px;
  border: 1px solid var(--border-primary);
  border-radius: 9999px;
  background-color: var(--canvas-primary, #fff);
  color: var(--text-primary);
  font-size: 12px;
  outline: none;
  -webkit-transition: border-color 120ms ease, -webkit-box-shadow 120ms ease;
  transition: border-color 120ms ease, -webkit-box-shadow 120ms ease;
  transition: border-color 120ms ease, box-shadow 120ms ease;
  transition: border-color 120ms ease, box-shadow 120ms ease, -webkit-box-shadow 120ms ease;
}

.msg-reaction-picker__search-input:focus {
  border-color: var(--utility-emerald-800);
}

/* tq-9030 (A141): the DS's ONE focus ring, INSET: the picker clips (overflow: hidden, no padding), so an outside ring is cut */
.msg-reaction-picker__search-input:focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: -2px;
}

/* Grid buttons stay SQUARE (not pill / circle) and do NOT scale
   on hover. The legacy `.msg-reaction-picker button` rule applies
   `border-radius: 9999px; transform: scale(1.2)` which produces
   a circle visually smaller than the underlying square hit area —
   when the cursor moves toward the visual edge of the circle it
   exits the picker entirely (the layout box is still square but
   the visible circle is shrunk inside it), causing the picker to
   close mid-aim. We override both, with extra specificity, so the
   visible shape matches the hit area exactly and cursor tracking
   stays predictable. */
.msg-reaction-picker .msg-reaction-picker__grid button,
.msg-reaction-picker__grid button {
  width: 30px;
  height: 30px;
  border-radius: 6px;
  border: none;
  background: transparent;
  cursor: pointer;
  font-size: 18px;
  line-height: 1;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -webkit-transform: none;
  -ms-transform: none;
  transform: none;
  -webkit-transition: background-color 80ms ease;
  transition: background-color 80ms ease;
}

.msg-reaction-picker .msg-reaction-picker__grid button:hover,
.msg-reaction-picker__grid button:hover {
  -webkit-transform: none;
  -ms-transform: none;
  transform: none;
  background-color: var(--bg-primary-subtle);
}

.msg-reaction-picker__grid button[hidden] {
  display: none;
}

.msg-reaction-picker__empty {
  text-align: center;
  font-size: 11px;
  color: var(--text-tertiary);
  padding: 12px 0;
}

.msg-reaction-picker__empty[hidden] {
  display: none;
}

/* Slim, custom scrollbar for the grid so it doesn't dominate the
   compact picker visually. */
.msg-reaction-picker__grid::-webkit-scrollbar {
  width: var(--scroll-size-sm);
}
.msg-reaction-picker__grid::-webkit-scrollbar-thumb {
  background-color: var(--border-primary);
  border-radius: 9999px;
}

/* ── tq-9118 (A148, isabella 900068013 / 900068016): the keyboard path to a message's actions ───────────────────────────
   The kit (Scripts/modules/messaging/messageActionsKit.js) adds a "Message actions" button to every message row. It stays in
   the DOM and focusable (NOT display:none) and is revealed on hover, on the message's :focus-within and while its menu is
   open; it sits beside the bubble (absolute: no layout shift). The row is the thread's roving item: the canonical focus ring,
   inset (the thread scroller clips). */
.msg[data-msg-bubble-id] .msg__col {
  position: relative;
}

.msg__actions-btn {
  position: absolute;
  top: 0;
  opacity: 0;
  -webkit-transition: opacity 120ms ease;
  transition: opacity 120ms ease;
}

.msg--outbound .msg__actions-btn {
  inset-inline-end: calc(100% + 0.25rem);
}

.msg--inbound .msg__actions-btn {
  inset-inline-start: calc(100% + 0.25rem);
}

.msg:hover .msg__actions-btn,
.msg:focus-within .msg__actions-btn,
.msg.msg--menu-open .msg__actions-btn {
  opacity: 1;
}

.msg[role="article"]:focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: -2px;
  border-radius: var(--radius-md);
}

@media (prefers-reduced-motion: reduce) {
  .msg__actions-btn {
    -webkit-transition: none;
    transition: none;
  }
}
/* ════════════════════════════════════════════════════════════════════
   Buyer Area — shell, dashboard cards, section headers/tabs
   ────────────────────────────────────────────────────────────────────
   Mirrors the seller area's spacing and rhythm so the buyer hub
   feels like a sibling product surface. Uses the same design-system
   tokens (emerald active state, neutral typography, list-item
   hover treatment) as messaging-center.css.
   ──────────────────────────────────────────────────────────────────── */

/* ── Today dashboard ──────────────────────────────────────────────── */

.buyer-today {
  padding: 32px clamp(20px, 4vw, 48px);
  max-width: 1280px;
  margin: 0 auto;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 16px;
}

.buyer-today__header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  -webkit-box-align: end;
  -ms-flex-align: end;
  align-items: flex-end;
  gap: 24px;
  margin-bottom: 12px;
}

.buyer-today__eyebrow {
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--utility-emerald-800);
  margin: 0 0 4px;
}

.buyer-today__title {
  font-size: 28px;
  font-weight: 700;
  color: var(--text-primary);
  margin: 0 0 6px;
  letter-spacing: -0.01em;
}

.buyer-today__subtitle {
  font-size: 14px;
  color: var(--text-secondary);
  margin: 0;
}

.buyer-today__actions {
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

/* ── Metric cards grid ────────────────────────────────────────────── */

.buyer-today__grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 16px;
}

.buyer-card {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 16px;
  padding: 20px 22px;
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 16px;
  text-decoration: none;
  color: inherit;
  -webkit-transition: border-color 120ms ease, background-color 120ms ease, -webkit-transform 120ms ease;
  transition: border-color 120ms ease, background-color 120ms ease, -webkit-transform 120ms ease;
  transition: border-color 120ms ease, background-color 120ms ease, transform 120ms ease;
  transition: border-color 120ms ease, background-color 120ms ease, transform 120ms ease, -webkit-transform 120ms ease;
}

.buyer-card--linked:hover {
  border-color: var(--alpha-emerald-800-20);
  background-color: var(--bg-card-hover-surface, var(--alpha-emerald-900-10));
  -webkit-transform: translateY(-1px);
  -ms-transform: translateY(-1px);
  transform: translateY(-1px);
}

.buyer-card__icon {
  width: 44px;
  height: 44px;
  border-radius: 12px;
  background-color: var(--alpha-emerald-900-10);
  color: var(--utility-emerald-800);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  font-size: 18px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

.buyer-card__body {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
}

.buyer-card__eyebrow {
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--text-tertiary);
  margin: 0 0 4px;
}

.buyer-card__metric {
  font-size: 20px;
  font-weight: 700;
  color: var(--text-primary);
  margin: 0 0 4px;
  letter-spacing: -0.01em;
}

.buyer-card__metric span {
  color: var(--utility-emerald-800);
}

.buyer-card__hint {
  font-size: 12px;
  color: var(--text-secondary);
  margin: 0;
}

.buyer-card__chevron {
  font-size: 12px;
  color: var(--text-tertiary);
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

.buyer-card--linked:hover .buyer-card__chevron {
  color: var(--utility-emerald-800);
  -webkit-transform: translateX(2px);
  -ms-transform: translateX(2px);
  transform: translateX(2px);
}

/* ── Section underneath the metric grid ──────────────────────────── */

.buyer-today__section {
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 16px;
  padding: 24px;
}

.buyer-today__section-header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: end;
  -ms-flex-align: end;
  align-items: flex-end;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 16px;
}

.buyer-today__section-title {
  font-size: 16px;
  font-weight: 600;
  color: var(--text-primary);
  margin: 0;
}

.buyer-feed {
  min-height: 200px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}

/* tq-9499 (A276): the centring above is for the EMPTY state only. A populated feed is the DS activity-feed list
   (Scripts/modules/today-activity-feed.js): a block at the top of the card's content box, its rows on the card's own
   surface (the DS row fill is for a standalone panel; in dark it painted a lighter band on this card). */
.buyer-feed:has(> .activity-feed) {
  display: block;
  min-height: 0;
  --bg-activity-feed-item: transparent;
}

/* ── Generic buyer-section shell (used by Wishlists / Bookings /
       My Horses / Archives) ───────────────────────────────────── */

.buyer-section {
  padding: 32px clamp(20px, 4vw, 48px);
  max-width: 1280px;
  margin: 0 auto;
}

.buyer-section__header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  -webkit-box-align: end;
  -ms-flex-align: end;
  align-items: flex-end;
  gap: 24px;
  margin-bottom: 24px;
}

.buyer-section__title {
  font-size: 24px;
  font-weight: 700;
  color: var(--text-primary);
  margin: 0;
  letter-spacing: -0.01em;
  line-height: 1.15;
}

.buyer-section__subtitle {
  font-size: 13px;
  color: var(--text-secondary);
  margin: 2px 0 0;
  line-height: 1.3;
}

/* Back-arrow sitting above the section title — small bottom
   gap so it reads as a separate row without crowding the H1. */
.buyer-section__back {
  margin-bottom: 8px;
}

/* ── Inline tabs inside a buyer section (Bookings, MyHorses, etc.) */

.buyer-section__tabs {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  gap: 4px;
  border-bottom: 1px solid var(--border-primary);
  margin-bottom: 24px;
}

.buyer-section__tab {
  background: transparent;
  border: none;
  padding: 10px 16px;
  font-size: 13px;
  font-weight: 500;
  color: var(--text-secondary);
  cursor: pointer;
  border-bottom: 2px solid transparent;
  margin-bottom: -1px;
  -webkit-transition: color 120ms ease, border-color 120ms ease;
  transition: color 120ms ease, border-color 120ms ease;
}

.buyer-section__tab:hover {
  color: var(--text-primary);
}

.buyer-section__tab.is-active {
  color: var(--utility-emerald-800);
  border-bottom-color: var(--utility-emerald-800);
}

.buyer-section__tab-count {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  min-width: 20px;
  height: 18px;
  padding: 0 6px;
  margin-left: 6px;
  border-radius: 9999px;
  background-color: var(--bg-muted, #eef2f1);
  color: var(--text-tertiary);
  font-size: 11px;
  font-weight: 600;
  line-height: 1;
}

.buyer-section__tab.is-active .buyer-section__tab-count {
  background-color: var(--utility-emerald-100, #d1fae5);
  color: var(--utility-emerald-800);
}

.buyer-section__body {
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 16px;
  padding: 24px;
  min-height: 320px;
}

/* ── Wishlists card grid ──────────────────────────────────────────── */

.buyer-wishlist-card {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  text-decoration: none;
  color: inherit;
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 14px;
  overflow: hidden;
  -webkit-transition: border-color 120ms ease, -webkit-transform 120ms ease;
  transition: border-color 120ms ease, -webkit-transform 120ms ease;
  transition: border-color 120ms ease, transform 120ms ease;
  transition: border-color 120ms ease, transform 120ms ease, -webkit-transform 120ms ease;
}
.buyer-wishlist-card:hover {
  border-color: var(--alpha-emerald-800-20);
  -webkit-transform: translateY(-2px);
  -ms-transform: translateY(-2px);
  transform: translateY(-2px);
}
.buyer-wishlist-card__thumb {
  aspect-ratio: 4 / 3;
  background-color: var(--bg-primary-subtle);
  background-size: cover;
  background-position: center;
}
.buyer-wishlist-card__body {
  padding: 14px 14px 16px;
}
.buyer-wishlist-card__title {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-primary);
  margin: 0 0 4px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.buyer-wishlist-card__meta {
  font-size: 12px;
  color: var(--text-secondary);
  margin: 0 0 4px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.buyer-wishlist-card__loc {
  font-size: 11px;
  color: var(--text-tertiary);
  margin: 0 0 8px;
}
.buyer-wishlist-card__loc i { margin-right: 4px; }
.buyer-wishlist-card__row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  -webkit-box-align: baseline;
  -ms-flex-align: baseline;
  align-items: baseline;
  gap: 8px;
}
.buyer-wishlist-card__price {
  font-size: 14px;
  font-weight: 700;
  color: var(--utility-emerald-800);
}
.buyer-wishlist-card__saved {
  font-size: 10px;
  color: var(--text-tertiary);
}

/* ── Recently saved widget on Today ──────────────────────────────── */

.buyer-recent-saved {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
  gap: 12px;
}
.buyer-recent-saved__card {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  text-decoration: none;
  color: inherit;
  background-color: var(--canvas-primary);
  border: 1px solid var(--border-primary-subtle);
  border-radius: 12px;
  overflow: hidden;
  -webkit-transition: border-color 120ms ease, -webkit-transform 120ms ease;
  transition: border-color 120ms ease, -webkit-transform 120ms ease;
  transition: border-color 120ms ease, transform 120ms ease;
  transition: border-color 120ms ease, transform 120ms ease, -webkit-transform 120ms ease;
}
.buyer-recent-saved__card:hover {
  border-color: var(--alpha-emerald-800-20);
  -webkit-transform: translateY(-1px);
  -ms-transform: translateY(-1px);
  transform: translateY(-1px);
}
.buyer-recent-saved__thumb {
  aspect-ratio: 4 / 3;
  background-color: var(--bg-primary-subtle);
  background-size: cover;
  background-position: center;
}
.buyer-recent-saved__body { padding: 10px 12px 12px; }
.buyer-recent-saved__title {
  font-size: 12px;
  font-weight: 600;
  color: var(--text-primary);
  margin: 0 0 2px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.buyer-recent-saved__meta {
  font-size: 10px;
  color: var(--text-secondary);
  margin: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.buyer-recent-saved__price {
  font-size: 11px;
  font-weight: 600;
  color: var(--utility-emerald-800);
  margin: 4px 0 0;
}

/* ── Bookings list ───────────────────────────────────────────────── */

.buyer-bookings {
  list-style: none;
  margin: 0;
  padding: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 12px;
}
.buyer-booking-card {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  gap: 16px;
  padding: 16px;
  background-color: var(--canvas-primary);
  border: 1px solid var(--border-primary);
  border-radius: 12px;
}
.buyer-booking-card__thumb {
  width: 88px;
  height: 88px;
  border-radius: 10px;
  background-color: var(--bg-primary-subtle);
  background-size: cover;
  background-position: center;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.buyer-booking-card__body { -webkit-box-flex: 1; -ms-flex: 1; flex: 1; min-width: 0; }
.buyer-booking-card__row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  -webkit-box-align: baseline;
  -ms-flex-align: baseline;
  align-items: baseline;
  gap: 8px;
}
.buyer-booking-card__title {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-primary);
  margin: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.buyer-booking-card__meta {
  font-size: 12px;
  color: var(--text-secondary);
  margin: 4px 0;
}
.buyer-booking-card__user {
  font-size: 11px;
  color: var(--text-tertiary);
  margin: 0 0 6px;
}
.buyer-booking-card__user strong { color: var(--text-secondary); }
.buyer-booking-card__note {
  font-size: 12px;
  color: var(--text-secondary);
  background-color: var(--bg-primary-subtle);
  border-radius: 6px;
  padding: 6px 10px;
  margin: 6px 0 0;
}
.buyer-booking-card__status {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  font-size: 10px;
  font-weight: 600;
  padding: 4px 10px;
  border-radius: 9999px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.buyer-booking-card__status--pending   { background-color: #fef3c7; color: #92400e; }
.buyer-booking-card__status--confirmed { background-color: var(--alpha-emerald-900-10); color: var(--utility-emerald-800); }
.buyer-booking-card__status--declined  { background-color: #fee2e2; color: #991b1b; }
.buyer-booking-card__status--cancelled { background-color: #f1f5f9; color: #475569; }
.buyer-booking-card__status--completed { background-color: #dbeafe; color: #1e40af; }
.buyer-booking-card__status--no-show   { background-color: #fee2e2; color: #991b1b; }

/* ── My Horses grid ──────────────────────────────────────────────── */

.buyer-horse-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: 16px;
}
.buyer-horse-card {
  background-color: var(--canvas-primary);
  border: 1px solid var(--border-primary);
  border-radius: 14px;
  overflow: hidden;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
}
.buyer-horse-card__thumb {
  aspect-ratio: 4 / 3;
  background-color: var(--bg-primary-subtle);
  background-size: cover;
  background-position: center;
}
.buyer-horse-card__body { padding: 14px; }
.buyer-horse-card__name {
  font-size: 16px;
  font-weight: 700;
  color: var(--text-primary);
  margin: 0 0 4px;
}
.buyer-horse-card__meta {
  font-size: 12px;
  color: var(--text-secondary);
  margin: 0 0 8px;
}
.buyer-horse-card__notes {
  font-size: 12px;
  color: var(--text-tertiary);
  margin: 0 0 8px;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.buyer-horse-card__badge {
  display: inline-block;
  font-size: 10px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  padding: 4px 10px;
  border-radius: 9999px;
  background-color: var(--alpha-emerald-900-10);
  color: var(--utility-emerald-800);
}

/* ── Archive list ────────────────────────────────────────────────── */

.buyer-archive-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
}
.buyer-archive-row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 16px;
  padding: 14px 0;
  border-bottom: 1px solid var(--border-primary-subtle);
}
.buyer-archive-row:last-child { border-bottom: none; }
.buyer-archive-row__body { -webkit-box-flex: 1; -ms-flex: 1; flex: 1; min-width: 0; }
.buyer-archive-row__name {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-primary);
  margin: 0 0 2px;
}
.buyer-archive-row__sub {
  font-size: 11px;
  color: var(--text-tertiary);
  margin: 0 0 2px;
}
.buyer-archive-row__preview {
  font-size: 12px;
  color: var(--text-secondary);
  margin: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* ── Loading shimmer ─────────────────────────────────────────────── */

.buyer-loading {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  min-height: 200px;
  font-size: 24px;
  color: var(--utility-emerald-800);
}

/* ── First-visit onboarding tour ─────────────────────────────────── */

.buyer-tour-overlay {
  position: fixed;
  inset: 0;
  background-color: rgba(15, 23, 23, 0.55);
  backdrop-filter: blur(2px);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  z-index: var(--z-tour);
  -webkit-animation: buyer-tour-fade 200ms ease;
  animation: buyer-tour-fade 200ms ease;
}

@-webkit-keyframes buyer-tour-fade {
  from { opacity: 0; }
  to   { opacity: 1; }
}

@keyframes buyer-tour-fade {
  from { opacity: 0; }
  to   { opacity: 1; }
}

.buyer-tour-card {
  background-color: var(--bg-surface, #fff);
  border: 1px solid var(--border-primary);
  border-radius: 16px;
  padding: 28px 28px 24px;
  max-width: 440px;
  width: calc(100% - 40px);
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  -webkit-box-shadow: 0 20px 60px rgba(15, 23, 23, 0.35);
  box-shadow: 0 20px 60px rgba(15, 23, 23, 0.35);
}

.buyer-tour-card__eyebrow {
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--utility-emerald-800);
  margin: 0 0 8px;
}

.buyer-tour-card__title {
  font-size: 20px;
  font-weight: 700;
  color: var(--text-primary);
  margin: 0 0 10px;
}

.buyer-tour-card__body {
  font-size: 14px;
  line-height: 1.5;
  color: var(--text-secondary);
  margin: 0 0 24px;
}

.buyer-tour-card__actions {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  gap: 12px;
}

.buyer-tour-highlight {
  position: relative;
  z-index: var(--z-tour-highlight);
  -webkit-box-shadow: 0 0 0 4px rgba(16, 185, 129, 0.35), 0 0 0 8px rgba(16, 185, 129, 0.15);
  box-shadow: 0 0 0 4px rgba(16, 185, 129, 0.35), 0 0 0 8px rgba(16, 185, 129, 0.15);
  border-radius: 8px;
  -webkit-transition: -webkit-box-shadow 200ms ease;
  transition: -webkit-box-shadow 200ms ease;
  transition: box-shadow 200ms ease;
  transition: box-shadow 200ms ease, -webkit-box-shadow 200ms ease;
}


/* ── Buyer stable grid (Owned / Leasing / Tracking) ─────────────
   Mirrors the wishlists tile collage spacing so the buyer area
   feels visually consistent. Three responsive columns, square-ish
   thumbs, name + meta in a stacked body. */
.buyer-stable-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 18px;
  padding: 8px clamp(20px, 4vw, 48px) 32px;
}
.buyer-stable-card {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
.buyer-stable-card__thumb {
  display: block;
  position: relative;
  aspect-ratio: 1 / 1;
  border-radius: 14px;
  overflow: hidden;
  background-color: var(--bg-primary-subtle);
  background-size: cover;
  background-position: center;
  border: 1px solid var(--border-primary-subtle, var(--border-primary));
  text-decoration: none;
  color: inherit;
}
.buyer-stable-card__thumb--empty {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  color: var(--text-quaternary, var(--text-tertiary));
  font-size: 28px;
}
.buyer-stable-card__name {
  margin: 0;
  font-size: 14.5px;
  font-weight: 700;
  color: var(--text-primary);
  letter-spacing: -0.005em;
}
.buyer-stable-card__meta {
  margin: 0;
  font-size: 12.5px;
  color: var(--text-secondary);
}
.buyer-stable-card__sub {
  margin: 0;
  font-size: 11.5px;
  color: var(--text-tertiary);
}
.buyer-section__tab-count {
  display: inline-block;
  margin-left: 4px;
  padding: 0 6px;
  font-size: 11px;
  border-radius: 9999px;
  background-color: var(--bg-primary-subtle);
  color: var(--text-tertiary);
}
.buyer-section__tab.is-active .buyer-section__tab-count {
  background-color: var(--utility-emerald-100, var(--bg-primary-subtle));
  color: var(--utility-emerald-800, var(--text-primary));
}
/* ════════════════════════════════════════════════════════════════════
   BOOKING CENTER
   ────────────────────────────────────────────────────────────────────
   Aligned with the canonical Reinly design language (Today / Messaging
   / Buyer Area / Seller Listings). Every padding, border, radius, and
   typography token mirrors the patterns established in seller-today.css
   and buyer-area.css so the booking surfaces feel like a sibling of
   the rest of the app rather than a separate subsystem.

   Conventions used here:
     • Page shell:    32px clamp(20px, 4vw, 48px) padding, max-width 1280px
     • Section panel: padding 24px, border-radius 16px, --canvas-secondary,
                      1px solid --border-primary
     • Card row:      padding 16px, border-radius 14px, --canvas-secondary,
                      1px solid --border-primary
     • Tab strip:     underline pattern (10px 16px, 13/500, border-bottom-2)
     • Metric card:   horizontal, 44px emerald-tint icon, 11px uppercase
                      eyebrow → 20px/700 metric → 12px hint
     • Typography:    28/700 page title, 16/600 section, 14/600 row,
                      13/500 body, 12 meta, 11/600 label, 10–11 time
     • Tokens:        --text-primary / --text-secondary / --text-tertiary,
                      --border-primary / --border-primary-subtle,
                      --canvas-primary / --canvas-secondary,
                      --utility-emerald-800 / --alpha-emerald-900-10 /
                      --alpha-emerald-800-20
     • Hover/active:  120ms ease, border + bg tint, no heavy shadows
   ════════════════════════════════════════════════════════════════════ */

/* ── Page shell ──────────────────────────────────────────────── */

/* The shell fills the full height of its parent scroll cell
   (.panel-content in the app-frame). Header + tabs are flex-none
   so they stay pinned at the top; the body is the only flex item
   that grows and hosts its own scroll, so the chrome never scrolls
   away with the content. */
.bkg-shell {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  width: 100%;
  height: 100%;
  min-height: 0;
  padding: 32px 0 0;
}

/* Content-width constraint applied to the chrome (header + tabs)
   and to each panel's inner host. The scroll container itself
   (.bkg-shell__panel) stretches edge-to-edge so the scrollbar
   hugs the viewport. */
.bkg-shell__header,
.bkg-shell__tabs,
.bkg-shell__panel > [data-bkg-overview],
.bkg-shell__panel > [data-bkg-list],
.bkg-shell__panel > [data-bkg-cal-host],
.bkg-shell__panel > .bkg-settings-layout {
  width: 100%;
  max-width: 1280px;
  margin-left: auto;
  margin-right: auto;
  padding-left: clamp(20px, 4vw, 48px);
  padding-right: clamp(20px, 4vw, 48px);
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

.bkg-shell__header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: end;
  -ms-flex-align: end;
  align-items: flex-end;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 24px;
  margin-bottom: 16px;
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
}

.bkg-shell__eyebrow {
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--utility-emerald-800);
  margin: 0 0 4px;
}

.bkg-shell__title {
  font-size: 28px;
  font-weight: 700;
  color: var(--text-primary);
  letter-spacing: -0.01em;
  margin: 0 0 6px;
  line-height: 1.2;
}

.bkg-shell__title:last-child {
  margin-bottom: 0;   /* tq-9538 (A283): its 6px only separated it from a .bkg-shell__sub (seller Bookings has none now) */
}

.bkg-shell__sub {
  font-size: 14px;
  color: var(--text-secondary);
  margin: 0;
  max-width: 640px;
  line-height: 1.5;
}

/* ── Tab strip — canonical underline pattern ─────────────────── */

.bkg-shell__tabs {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 4px;
  border-bottom: 1px solid var(--border-primary);
  /* DON'T zero out horizontal padding here — the shared content-
     width rule above sets `padding-left/right: clamp(20px, 4vw,
     48px)` so the tab strip aligns flush with the header title
     and the panel content below. Only manage vertical padding. */
  padding-top: 0;
  padding-bottom: 0;
  overflow-x: auto;
  overflow-y: hidden;
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
  -ms-flex-wrap: nowrap;
  flex-wrap: nowrap;
  scrollbar-width: thin;
  margin-bottom: 16px;
}

.bkg-shell__tabs::-webkit-scrollbar { height: var(--scroll-size-xs); }
.bkg-shell__tabs::-webkit-scrollbar-thumb {
  background-color: var(--border-primary);
  border-radius: 9999px;
}

.bkg-shell__tab {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  padding: 10px 14px;
  background: transparent;
  border: 0;
  border-bottom: 2px solid transparent;
  margin-bottom: -1px;
  color: var(--text-secondary);
  font-size: 13px;
  font-weight: 500;
  white-space: nowrap;
  cursor: pointer;
  -webkit-transition: color 120ms ease, border-color 120ms ease;
  transition: color 120ms ease, border-color 120ms ease;
}

.bkg-shell__tab i {
  font-size: 12px;
  opacity: 0.85;
}

.bkg-shell__tab:hover {
  color: var(--text-primary);
}

.bkg-shell__tab.is-active {
  color: var(--utility-emerald-800);
  border-bottom-color: var(--utility-emerald-800);
}

/* Matches the top navbar .seller-tab-badge treatment exactly:
   neutral gray pill, 18px high, :empty collapse, consistent across
   active / inactive tabs. Hydration uses the same pattern as the
   header badges — toggle the `hidden` attribute AND clear textContent
   so the :empty rule folds the pill out of layout when the count is 0. */
.bkg-shell__tab-count {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  min-width: 18px;
  height: 18px;
  padding: 0 5px;
  margin-left: 4px;
  border-radius: 9999px;
  background-color: var(--utility-neutral-200, #e5e5e5);
  color: var(--text-secondary);
  font-size: 10px;
  font-weight: 600;
  line-height: 1;
  -webkit-transition: opacity 0.15s ease;
  transition: opacity 0.15s ease;
}

/* Action-required variant — solid green notification dot */
.bkg-shell__tab-count--action {
  background-color: var(--utility-emerald-800);
  color: #fff;
}
.bkg-shell__tab-count:empty {
  display: none;
}

/* ── Body + panels ──────────────────────────────────────────── */

/* The body is the single flex-grow region — it hosts the active
   panel and nothing else. It does NOT scroll itself; instead each
   panel is h-full and owns its own overflow so the tab chrome can
   stay anchored at the top regardless of which tab is active. */
.bkg-shell__body {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-height: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  position: relative;
}

/* Each visible panel fills the full body height and scrolls
   vertically on its own. [hidden] panels collapse completely.
   The calendar panel overrides this to suppress scrolling because
   the inner .bkg-cal__body is the real scroll container there. */
.bkg-shell__panel {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-height: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  overflow-y: auto;
  padding-bottom: 32px;
}

/* ── Short viewports: let the page scroll instead of pinning (tq-9372, A218) ──
   The pinned layout (header + tabs fixed, the body scrolling inside .bkg-shell__panel) needs room for the panel. Measured on
   an iPhone 15 Pro (Seller Bookings, phone shell): the pinned stack above the panel is 285px ([data-seller-content]
   padding-top 72 = top bar 64 + 8, .bkg-shell padding-top 32, header 103 + 16, tabs 46 + 16), plus the 64px bottom
   reservation, plus a ~240px minimum useful panel (the TODAY / TOMORROW cards and one row) = 589px, rounded to 600px.
   Below that (landscape phone, split screen, short window) the panel had ~0 height and its cards were unreachable.
   isabella 900074100: trigger on HEIGHT, not orientation. Here .bkg-shell sizes to its content and the page scrolls in
   [data-seller-content]; the tab strip stays sticky at the scroller's top (under the top bar) (46px tall, under the 56px limit) on the same
   background as the file's other sticky strips, so switching tabs stays one tap away. Taller viewports are unchanged. */
@media (max-height: 600px) {
  html:not(.is-mobile) [data-seller-content] .bkg-shell {
    height: auto;
  }
  html:not(.is-mobile) [data-seller-content] .bkg-shell__panel {
    -webkit-box-flex: 0;
    -ms-flex: none;
    flex: none;
    min-height: auto;
    overflow-y: visible;
  }
  html:not(.is-mobile) [data-seller-content] .bkg-shell__tabs {
    position: sticky;
    top: 0; /* sticks at the scroller's padding edge, which html:not(.is-mobile) [data-seller-content]'s padding-top already puts under the top bar */
    z-index: 3;
    background-color: var(--canvas-secondary, var(--bg-surface));
  }
}
/* tq-9598 (A309): on a phone the eyebrow + title block and the shell's 32px top are gone (above: 135px less chrome), so the
   pinned layout keeps a useful panel down to ~480px tall (top bar 72 + tabs 46 + 64 bottom nav + ~280 of calendar or cards);
   desktop keeps the 600px trigger. */
@media (max-height: 480px) {
  html.is-mobile [data-seller-content] .bkg-shell {
    height: auto;
  }
  html.is-mobile [data-seller-content] .bkg-shell__panel {
    -webkit-box-flex: 0;
    -ms-flex: none;
    flex: none;
    min-height: auto;
    overflow-y: visible;
  }
  html.is-mobile [data-seller-content] .bkg-shell__tabs {
    position: sticky;
    top: 0; /* sticks at the scroller's padding edge, which html.is-mobile [data-seller-content]'s padding-top already puts under the top bar */
    z-index: 3;
    background-color: var(--canvas-secondary, var(--bg-surface));
  }
}

.bkg-shell__panel[hidden] {
  display: none;
}

.bkg-shell__panel[data-bkg-panel="calendar"] {
  overflow: hidden;
  padding-bottom: clamp(16px, 3vw, 32px);
}

/* Settings panel scrolls like the bookings list so its content
   can grow freely. The sidebar inside is made sticky below so
   the nav stays put as the body scrolls. */
.bkg-shell__panel[data-bkg-panel="settings"] {
  overflow-y: auto;
}

/* The calendar host fills the panel so .bkg-cal can be h-full. */
.bkg-shell__panel[data-bkg-panel="calendar"] > [data-bkg-cal-host] {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-height: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
}

/* ── Settings two-column layout ─────────────────────────────
   The settings tab uses a sticky left sidebar (vertical link
   menu) paired with a scrolling content area. The panel itself
   is the scroll container (set above) and the sidebar stays
   pinned via `position: sticky` so the nav remains visible
   while the active sub-panel scrolls. */
.bkg-settings-layout {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
  gap: 32px;
  padding-top: 8px;
}

.bkg-settings-sidebar {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 220px;
  flex: 0 0 220px;
  width: 220px;
  position: sticky;
  top: 0;
  -ms-flex-item-align: start;
  align-self: flex-start;
  padding: 4px 0;
}

.bkg-settings-panels {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
}

.bkg-settings-panel {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
}
.bkg-settings-panel[hidden] {
  display: none;
}

.bkg-settings-panel > [data-bkg-availability-host],
.bkg-settings-panel > [data-bkg-types-host],
.bkg-settings-panel > [data-bkg-settings-host] {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
}

@media (max-width: 720px) {
  .bkg-settings-layout {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
    /* tq-9538 (A283): stretch, not flex-start: in a column flex-start sized the panels to their intrinsic width, so the
       Weekly availability card and its text ran past the viewport */
    -webkit-box-align: stretch;
    -ms-flex-align: stretch;
    align-items: stretch;
    gap: 16px;
  }
  .bkg-settings-sidebar {
    -webkit-box-flex: 0;
    -ms-flex: 0 0 auto;
    flex: 0 0 auto;
    width: 100%;
    position: static;
  }
  .bkg-settings-sidebar .nav-vertical {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
    -ms-flex-direction: row;
    flex-direction: row;
    overflow-x: auto;
    gap: 4px;
  }
  .bkg-settings-sidebar .nav-vertical__heading {
    display: none;
  }
  .bkg-settings-sidebar .nav-vertical__link {
    width: auto;
    white-space: nowrap;
    /* tq-9538 (A283): the row of links scrolls inside the nav (overflow-x above); a link never shrinks below its label,
       which overlapped the next link's icon */
    -webkit-box-flex: 0;
    -ms-flex: none;
    flex: none;
  }

}

/* tq-9538 (A283): the CALENDAR tab runs edge to edge on a phone (html.is-mobile, the app's phone switch: portrait and
   landscape): its host drops the shell's content gutter, the card its side frame, and it sits right under the tab strip
   (only while the calendar tab is shown; the other tabs keep their gutters and the strip's 16px). The panel's bottom
   padding (bottom nav / safe area) is unchanged. */
html.is-mobile .bkg-shell__panel[data-bkg-panel="calendar"] > [data-bkg-cal-host] {
  padding-left: 0;
  padding-right: 0;
}
html.is-mobile .bkg-shell__panel[data-bkg-panel="calendar"] .bkg-cal {
  border-width: 0 0 1px;
  border-radius: 0;
}
html.is-mobile .bkg-shell:has(> .bkg-shell__body > [data-bkg-panel="calendar"]:not([hidden])) .bkg-shell__tabs {
  margin-bottom: 0;
}

/* tq-9598 (A309, the USER via John 900077211; supersedes A283's "keep the eyebrow + h1"): on a phone the grid gets the room.
   1. The 'Bookings center' eyebrow + 'Bookings' title block is VISUALLY hidden on every Bookings tab (its h1 stays the
      page heading for assistive tech), and the shell's 32px top padding goes: the tab strip sits right under the top bar.
   2. The calendar toolbar is TWO compact rows: the date range (abbreviated, in the page's language: bookingCalendar.js
      _compactLabel) + Month / Week / Day, then the five date controls spread across the width. The controls keep their
      look (32px) and take the 44px touch target through THE hit-slop (.hit-slop, --control-h-xs: 44 on a coarse pointer):
      the row gap and the toolbar padding are the slop's 6px each side, so no two targets overlap and none leaves the bar.
   3. The grid (.bkg-cal__body, its own scroll) takes the rest down to the bottom nav. */
html.is-mobile .bkg-shell {
  padding-top: 0;
}
html.is-mobile .bkg-shell__header {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}
html.is-mobile .bkg-cal__head {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  grid-template-areas: "label views" "nav nav";
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 12px 8px;
  padding: 6px 12px;
}
html.is-mobile .bkg-cal__label {
  grid-area: label;
  min-width: 0;
  font-size: 15px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
html.is-mobile .bkg-cal__head [data-bkg-cal-tabs] {
  grid-area: views;
  padding: 2px;
}
html.is-mobile .bkg-cal__head [data-bkg-cal-tabs] .nav-link {
  min-height: 0;
  padding: 5px 12px;
  font-size: 13px;
  line-height: 20px;
}
html.is-mobile .bkg-cal__nav {
  grid-area: nav;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
}
html.is-mobile .bkg-cal__nav > button {
  min-width: 0;   /* the 44px target is the .hit-slop's, not a 44px button */
  min-height: 0;
}
html.is-mobile .bkg-shell__panel[data-bkg-panel="calendar"] {
  padding-bottom: 0;   /* the grid runs down to the bottom nav: the scroller's own bottom reservation clears the nav */
}
html.is-mobile .bkg-shell__panel[data-bkg-panel="calendar"] .bkg-cal {
  margin-bottom: 0;
}

.bkg-shell__loading {
  padding: 48px 20px;
  text-align: center;
  color: var(--text-tertiary);
  font-size: 13px;
}

/* ── Status chip — token-aligned, no RGBA ───────────────────── */

.bkg-status {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 4px;
  padding: 3px 9px;
  border-radius: 9999px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.01em;
  white-space: nowrap;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  line-height: 1.4;
}
.bkg-status--pending     { background-color: #fef3c7; color: #92400e; }
.bkg-status--confirmed   { background-color: var(--alpha-emerald-900-10); color: var(--utility-emerald-800); }
.bkg-status--declined    { background-color: #fee2e2; color: #991b1b; }
.bkg-status--cancelled   { background-color: #f1f5f9; color: #475569; }
.bkg-status--completed   { background-color: #dbeafe; color: #1e40af; }
.bkg-status--no-show     { background-color: #f3f4f6; color: #374151; }
.bkg-status--reschedule  { background-color: #ede9fe; color: #6b21a8; }
.bkg-status--expired     { background-color: #f1f5f9; color: #475569; }

/* ── Type chip ──────────────────────────────────────────────── */

.bkg-type-chip {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  padding: 3px 10px;
  border-radius: 9999px;
  font-size: 11px;
  font-weight: 600;
  background-color: var(--alpha-emerald-900-10);
  color: var(--utility-emerald-800);
  border: 1px solid var(--alpha-emerald-800-20);
}
.bkg-type-chip__dot {
  width: 8px;
  height: 8px;
  border-radius: 9999px;
  background-color: currentColor;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

/* When the consumer supplies a per-type color, layer it on top of
   the base emerald tint. We use color-mix so the chip background
   stays soft regardless of the source color. */
.bkg-type-chip[style*="--bkg-type-color"] {
  background-color: color-mix(in srgb, var(--bkg-type-color) 14%, transparent);
  color: var(--bkg-type-color);
  border-color: color-mix(in srgb, var(--bkg-type-color) 28%, transparent);
}

/* ── Booking card (list row) ──────────────────────────────────
   The card follows the same panelled treatment as the appointment
   type and settings cards elsewhere in the booking center: white
   surface, 14px radius, a subtle left accent bar driven by the
   appointment-type color (seller only), and a two-zone split —
   main row (time · thumb · body) on top, footer (note + actions)
   below. Grouping by day is handled by .bkg-day-group so the card
   itself no longer needs to render the date. */

.bkg-card {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 0;
  padding: 0;
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 12px;
  cursor: pointer;
  overflow: hidden;
  -webkit-transition: border-color 120ms ease, background-color 120ms ease, -webkit-box-shadow 120ms ease;
  transition: border-color 120ms ease, background-color 120ms ease, -webkit-box-shadow 120ms ease;
  transition: border-color 120ms ease, background-color 120ms ease, box-shadow 120ms ease;
  transition: border-color 120ms ease, background-color 120ms ease, box-shadow 120ms ease, -webkit-box-shadow 120ms ease;
}

.bkg-card:hover {
  border-color: var(--utility-emerald-800);
}

.bkg-card--muted {
  opacity: 0.72;
}

/* Thumbnail — width fixed, height stretches to match the body's
   vertical extent (title + meta + avatar) so the image reads as
   a full side panel rather than a floating square. */
.bkg-card__thumb {
  width: 64px;
  -ms-flex-item-align: stretch;
  align-self: stretch;
  min-height: 64px;
  border-radius: 10px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  background-color: var(--bg-primary-subtle);
  background-size: cover;
  background-position: center;
  border: 1px solid var(--border-primary-subtle);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}
.bkg-card__thumb--placeholder {
  color: var(--text-tertiary);
  font-size: 22px;
}

/* Main zone — 3-column layout: lead · middle · buyer · note.
   The buyer column is offset from the middle by a subtle
   vertical divider so the persona block reads as its own unit,
   and the note sits alongside the buyer with a constrained
   width. All columns stretch vertically so the thumb and
   dividers align. */
.bkg-card__main {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
  padding: 12px 14px;
  gap: 14px;
}

/* Middle column — the listing image + title stack. Sized to its
   content (with a sensible max) so the buyer column can sit
   snug right next to it instead of being pushed to the far
   right by slack space. */
.bkg-card__middle {
  -webkit-box-flex: 0;
  -ms-flex: 0 1 340px;
  flex: 0 1 340px;
  min-width: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
  gap: 12px;
}

/* Leading column — appointment type (top) · time · date/duration.
   Fixed width so the lead section aligns vertically card-to-card
   regardless of how long the appointment type name is. */
.bkg-card__lead {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
  -webkit-box-pack: start;
  -ms-flex-pack: start;
  justify-content: flex-start;
  gap: 3px;
  -webkit-box-flex: 0;
  -ms-flex: 0 0 144px;
  flex: 0 0 144px;
  width: 144px;
  padding-right: 12px;
  border-right: 1px solid var(--border-primary-subtle, var(--border-primary));
  -ms-flex-item-align: stretch;
  align-self: stretch;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
.bkg-card__lead-type {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  max-width: 100%;
}
.bkg-card__lead-type .bkg-card__type {
  max-width: 100%;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.bkg-card__lead-time {
  font-size: 15px;
  font-weight: 700;
  color: var(--text-primary);
  line-height: 1.1;
  letter-spacing: -0.01em;
  white-space: nowrap;
}
.bkg-card__lead-sub {
  font-size: 12px;
  color: var(--text-secondary);
  font-weight: 500;
  line-height: 1.3;
  white-space: nowrap;
}
.bkg-card__lead-sep {
  margin: 0 2px;
  color: var(--text-quaternary, var(--text-tertiary));
  opacity: 0.6;
}

.bkg-card__body {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-pack: start;
  -ms-flex-pack: start;
  justify-content: flex-start;
  gap: 4px;
}
.bkg-card__title {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-primary);
  margin: 0;
  line-height: 1.2;
  letter-spacing: -0.005em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  min-width: 0;
}

/* Listing meta line — age · height · discipline · location.
   Sits tight against the title since they read as one unit. */
.bkg-card__listing-meta {
  font-size: 13.5px;
  color: var(--text-secondary);
  display: block;
  line-height: 1.45;
}

/* Appointment type — dot + plain text, sits below the date/time
   in the lead column. The dot picks up --bkg-type-color when the
   seller has assigned one, otherwise falls back to emerald. */
.bkg-card__type {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  font-size: 12.5px;
  font-weight: 500;
  color: var(--text-secondary);
  line-height: 1.3;
  min-width: 0;
  max-width: 100%;
}
.bkg-card__type-dot {
  width: 7px;
  height: 7px;
  border-radius: 9999px;
  background-color: var(--bkg-type-color, var(--utility-emerald-800));
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.bkg-card__type-text {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* Persona block — stacked counterpart name + contact lines.
   Email/phone only render when the backend returns them, so the
   block gracefully collapses to just the name for users without
   published contact info. */
.bkg-card__person-info {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  min-width: 0;
  line-height: 1.25;
  gap: 1px;
}
.bkg-card__person-link {
  cursor: pointer;
  text-decoration: none;
  border-bottom: 1px dashed var(--border-primary);
  -webkit-transition: color 120ms ease, border-color 120ms ease;
  transition: color 120ms ease, border-color 120ms ease;
}
.bkg-card__person-link:hover {
  color: var(--utility-emerald-800);
  border-color: var(--utility-emerald-800);
}
.bkg-card__person-name {
  font-size: 13.5px;
  font-weight: 600;
  color: var(--text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  line-height: 1.3;
}
.bkg-card__person-contact {
  font-size: 12.5px;
  color: var(--text-tertiary);
  text-decoration: none;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 5px;
  line-height: 1.35;
  -webkit-transition: color 120ms ease;
  transition: color 120ms ease;
}
.bkg-card__person-contact i {
  font-size: 11px;
  color: var(--text-quaternary, var(--text-tertiary));
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.bkg-card__person-contact:hover {
  color: var(--utility-emerald-800);
}
.bkg-card__person-contact:hover i {
  color: var(--utility-emerald-800);
}

/* Buyer column — avatar + stacked contact details, offset from
   the middle by a subtle vertical divider. Kept compact (tight
   min/max width and small padding) so it sits close to the
   middle rather than drifting to the far right. */
.bkg-card__buyer {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  min-width: 180px;
  max-width: 280px;
  padding-left: 10px;
  border-left: 1px solid var(--border-primary-subtle, var(--border-primary));
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
  gap: 8px;
  -ms-flex-item-align: stretch;
  align-self: stretch;
}
.bkg-card__buyer .bkg-card__note {
  width: 100%;
}
.bkg-card__buyer .bkg-card__person-info {
  width: 100%;
  min-width: 0;
}


/* Status column — pushed to the far right edge of the main
   row so the state chip reads as a first-class indicator
   separate from the listing title. */
.bkg-card__status {
  -webkit-box-flex: 0;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  margin-left: auto;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
  padding-left: 8px;
}

/* Footer — actions only. Sits below the main row with a soft
   top divider so the action buttons read as a supporting zone. */
.bkg-card__footer {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 8px;
  padding: 10px 14px 12px;
  border-top: 1px solid var(--border-primary-subtle, var(--border-primary));
  background-color: color-mix(in srgb, var(--bg-primary-subtle) 40%, transparent);
}

/* ── Buyer profile popover ─────────────────────────────────── */
.bkg-profile {
  padding: 16px;
}
.bkg-profile__head {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 12px;
  margin-bottom: 12px;
}
.bkg-profile__avatar {
  width: 42px;
  height: 42px;
  border-radius: 9999px;
  -o-object-fit: cover;
  object-fit: cover;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.bkg-profile__avatar--init {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  background-color: var(--bg-primary-subtle);
  color: var(--text-secondary);
  font-size: 16px;
  font-weight: 600;
  border: 1px solid var(--border-primary);
}
.bkg-profile__info {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
}
.bkg-profile__name {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-primary);
  line-height: 1.2;
}
.bkg-profile__about {
  font-size: 12px;
  color: var(--text-secondary);
  line-height: 1.5;
  margin: 0 0 10px;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.bkg-profile__details {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 5px;
}
.bkg-profile__detail {
  font-size: 11px;
  color: var(--text-secondary);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
}
.bkg-profile__detail i {
  font-size: 11px;
  color: var(--text-tertiary);
  width: 14px;
  text-align: center;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
/* Buyer note — plain prose with a leading quote icon. No card
   treatment; reads as quiet secondary text beside the buyer
   column. */
.bkg-card__note {
  font-size: 12px;
  color: var(--text-secondary);
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  line-height: 1.45;
  font-style: italic;
}
.bkg-card__note i {
  color: var(--text-tertiary);
  font-size: 10px;
  margin-right: 4px;
  font-style: normal;
}

.bkg-card__actions {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
}
.bkg-card__actions-left,
.bkg-card__actions-right {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  gap: 6px;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
}
.bkg-card__actions-right {
  margin-left: auto;
}

/* ── Action buttons ─────────────────────────────────────────── */

/* Action buttons — text-only treatment (no border, no fill at
   rest). On hover they pick up a soft background tint, mirroring
   the btn-secondary pattern from components/buttons/buttons.css.
   Tone modifiers only shift the text color. */
.bkg-action-btn {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  padding: 6px 10px;
  border-radius: 8px;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  border: 0;
  background-color: transparent;
  color: var(--text-primary);
  -webkit-transition: background-color 120ms ease, color 120ms ease;
  transition: background-color 120ms ease, color 120ms ease;
  line-height: 1.4;
}

.bkg-action-btn:hover {
  background-color: var(--bg-button-secondary-hover, var(--bg-primary-subtle));
  color: var(--text-primary);
}

.bkg-action-btn--primary {
  color: var(--utility-emerald-800);
}
.bkg-action-btn--primary:hover {
  background-color: var(--alpha-emerald-900-10);
  color: var(--utility-emerald-800);
}

.bkg-action-btn--danger {
  color: #b91c1c;
}
.bkg-action-btn--danger:hover {
  background-color: rgba(220, 38, 38, 0.08);
  color: #991b1b;
}

.bkg-action-btn--success {
  color: var(--utility-emerald-800);
}
.bkg-action-btn--success:hover {
  background-color: var(--alpha-emerald-900-10);
  color: var(--utility-emerald-800);
}

/* ── Loading + empty (use shared .empty-state) ──────────────── */

.bkg-empty {
  /* Drop-in passthrough so existing markup that uses .bkg-empty
     gets the canonical .empty-state look without changing the JS.
     The shared .empty-state primitive in components/data/empty-state.css
     is the source of truth — anything not covered there falls through
     to these defaults. */
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  text-align: center;
  padding: 24px 16px;
  gap: 8px;
  color: var(--text-tertiary);
  background-color: transparent;
  border: 0;
  border-radius: 0;
}
.bkg-empty i {
  display: block;
  font-size: 24px;
  color: var(--text-quaternary, var(--text-tertiary));
  margin-bottom: 4px;
}
.bkg-empty p {
  margin: 0;
  font-size: 13px;
  color: var(--text-secondary);
}

/* ── Overview tab — metric strip + columns ──────────────────── */

.bkg-overview {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 16px;
}

/* Metric grid mirrors the canonical Today metric grid:
   responsive auto-fit, 16px gaps, no fixed column count. */
.bkg-overview__metrics {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 16px;
}

/* Single metric tile — horizontal layout (icon + text column) so
   it reads at a glance. Mirrors .seller-today-card / .buyer-card
   exactly so a metric strip drops in to the booking center
   without looking like a different module. */
.bkg-metric {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 16px;
  padding: 20px 22px;
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 16px;
  -webkit-transition: border-color 120ms ease, background-color 120ms ease, -webkit-transform 120ms ease;
  transition: border-color 120ms ease, background-color 120ms ease, -webkit-transform 120ms ease;
  transition: border-color 120ms ease, background-color 120ms ease, transform 120ms ease;
  transition: border-color 120ms ease, background-color 120ms ease, transform 120ms ease, -webkit-transform 120ms ease;
}

.bkg-metric:hover {
  border-color: var(--alpha-emerald-800-20);
  background-color: var(--bg-card-hover-surface, var(--alpha-emerald-900-10));
  -webkit-transform: translateY(-1px);
  -ms-transform: translateY(-1px);
  transform: translateY(-1px);
}

.bkg-metric__icon {
  width: 44px;
  height: 44px;
  border-radius: 12px;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  font-size: 18px;
  background-color: var(--alpha-emerald-900-10);
  color: var(--utility-emerald-800);
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

.bkg-metric__body {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  min-width: 0;
}

/* 11px uppercase eyebrow — same rhythm as .seller-today-card__eyebrow */
.bkg-metric__label {
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--text-tertiary);
  margin: 0 0 4px;
}

/* The big number — emerald by default to mirror the Today cards'
   accented metric values. The "past" tone modifier overrides this
   to neutral gray since past bookings are historical chrome and
   shouldn't compete with the live amber/emerald metrics. */
.bkg-metric__count {
  font-size: 20px;
  font-weight: 700;
  color: var(--utility-emerald-800);
  letter-spacing: -0.01em;
  line-height: 1.1;
  margin: 0;
}

/* Small hint line under the metric — matches the .seller-today-card__hint
   pattern: 12px secondary text that explains what the number means. */
.bkg-metric__hint {
  font-size: 12px;
  color: var(--text-secondary);
  margin: 4px 0 0;
  line-height: 1.4;
}

/* Tone modifiers — subtle accent on the metric icon only by default.
   The card body and number stay neutral so the page reads calm.
   "Past" / completed bookings get a neutral gray treatment so the
   tile reads as historical rather than competing with the
   live amber (pending) and emerald (upcoming) tiles for attention. */
.bkg-metric--pending .bkg-metric__icon {
  background-color: #fef3c7;
  color: #92400e;
}
.bkg-metric--confirmed .bkg-metric__icon {
  background-color: var(--alpha-emerald-900-10);
  color: var(--utility-emerald-800);
}
.bkg-metric--completed .bkg-metric__icon {
  background-color: var(--bg-muted, #eef2f1);
  color: var(--text-tertiary);
}
.bkg-metric--completed .bkg-metric__count {
  color: var(--text-tertiary);
}

/* Full-width "Recent activity" feed under the metrics. Mirrors the
   Today page's feed section: a single section-panel surface with a
   header (title + optional sub) and a stacked list of booking
   cards beneath it. */
.bkg-overview__activity {
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 16px;
  padding: 24px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 16px;
}

.bkg-overview__activity-head {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: baseline;
  -ms-flex-align: baseline;
  align-items: baseline;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 12px;
}

.bkg-overview__activity-title {
  font-size: 16px;
  font-weight: 600;
  color: var(--text-primary);
  margin: 0;
}

.bkg-overview__activity-sub {
  font-size: 12px;
  color: var(--text-secondary);
  margin: 0;
}

.bkg-overview__activity-list {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 12px;
}

/* ── Bucket lists (Upcoming / Pending / Past) ───────────────── */

.bkg-list {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 28px;
}

.bkg-list-section {
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 16px;
  padding: 24px;
}

.bkg-list-section__head {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: end;
  -ms-flex-align: end;
  align-items: flex-end;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 20px;
  padding-bottom: 16px;
  border-bottom: 1px solid var(--border-primary-subtle, var(--border-primary));
}

.bkg-list-section__title {
  font-size: 16px;
  font-weight: 600;
  color: var(--text-primary);
  margin: 0;
  letter-spacing: -0.005em;
}

.bkg-list-section__sub {
  font-size: 13px;
  color: var(--text-secondary);
  margin: 4px 0 0;
}

/* ── Date-grouped day sections ────────────────────────────────
   Each day is its own listing with a prominent header that shows
   the date as a first-class title and a pill with the total count
   of bookings on that date. The items stack beneath on a tight
   10px grid so the card surfaces do the visual heavy-lifting. */
.bkg-day-group {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 14px;
}
.bkg-day-group + .bkg-day-group {
  margin-top: 8px;
}
.bkg-day-group__header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: baseline;
  -ms-flex-align: baseline;
  align-items: baseline;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 12px;
  padding: 8px 12px;
  background-color: var(--bg-primary-subtle);
  border: 1px solid var(--border-primary-subtle, var(--border-primary));
  border-radius: 10px;
}
.bkg-day-group__label {
  font-size: 14px;
  font-weight: 700;
  letter-spacing: -0.005em;
  color: var(--text-primary);
  line-height: 1.2;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.bkg-day-group__count {
  font-size: 11px;
  font-weight: 600;
  color: var(--text-secondary);
  padding: 3px 10px;
  border-radius: 9999px;
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary-subtle, var(--border-primary));
  -ms-flex-negative: 0;
  flex-shrink: 0;
  letter-spacing: 0.01em;
}
.bkg-day-group__items {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}

/* ── Responsive — narrow viewports ────────────────────────────
   On small screens the leading time column sits above the thumb
   row so the card still reads cleanly at ≤480px. Actions fall
   onto their own line and stretch to fill width. */
@media (max-width: 640px) {
  .bkg-card__main {
    -ms-flex-wrap: wrap;
    flex-wrap: wrap;
    padding: 12px;
    gap: 10px;
  }
  .bkg-card__middle {
    -webkit-box-flex: 1;
    -ms-flex: 1 1 100%;
    flex: 1 1 100%;
  }
  .bkg-card__buyer {
    -webkit-box-flex: 1;
    -ms-flex: 1 1 100%;
    flex: 1 1 100%;
    min-width: 0;
    max-width: none;
    padding-left: 0;
    padding-top: 10px;
    border-left: 0;
    border-top: 1px solid var(--border-primary-subtle, var(--border-primary));
  }
  .bkg-card__lead {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
    -ms-flex-direction: row;
    flex-direction: row;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    gap: 8px;
    min-width: 0;
    padding-right: 0;
    border-right: 0;
    padding-top: 0;
    padding-bottom: 8px;
    border-bottom: 1px solid var(--border-primary-subtle, var(--border-primary));
    width: 100%;
  }
  .bkg-card__lead-sub {
    margin-top: 0;
    margin-left: auto;
  }
  .bkg-card__footer {
    padding: 10px 12px 12px;
  }
  .bkg-card__actions {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
    -webkit-box-align: stretch;
    -ms-flex-align: stretch;
    align-items: stretch;
  }
  .bkg-card__actions-left,
  .bkg-card__actions-right {
    width: 100%;
  }
  .bkg-card__actions-right {
    margin-left: 0;
  }
  .bkg-action-btn {
    -webkit-box-flex: 1;
    -ms-flex: 1;
    flex: 1;
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
  }
  .bkg-list-section {
    padding: 16px;
  }
}

/* ── Mini booking widget overlay ────────────────────────────── */

.bkg-modal {
  position: fixed;
  inset: 0;
  z-index: var(--z-modal);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  opacity: 0;
  pointer-events: none;
  -webkit-transition: opacity 200ms ease;
  transition: opacity 200ms ease;
}
.bkg-modal--visible {
  opacity: 1;
  pointer-events: auto;
}
.bkg-modal__backdrop {
  position: absolute;
  inset: 0;
  background-color: rgba(15, 23, 42, 0.55);
}
.bkg-modal__panel {
  position: relative;
  background-color: var(--canvas-secondary, var(--bg-surface));
  border-radius: 16px;
  -webkit-box-shadow: 0 24px 60px -12px rgba(15, 23, 42, 0.45);
  box-shadow: 0 24px 60px -12px rgba(15, 23, 42, 0.45);
  width: calc(100% - 48px);
  max-width: 460px;
  max-height: calc(100vh - 48px);
  overflow-y: auto;
  -webkit-transform: translateY(8px) scale(0.985);
  -ms-transform: translateY(8px) scale(0.985);
  transform: translateY(8px) scale(0.985);
  -webkit-transition: -webkit-transform 240ms cubic-bezier(0.16, 1, 0.3, 1);
  transition: -webkit-transform 240ms cubic-bezier(0.16, 1, 0.3, 1);
  transition: transform 240ms cubic-bezier(0.16, 1, 0.3, 1);
  transition: transform 240ms cubic-bezier(0.16, 1, 0.3, 1), -webkit-transform 240ms cubic-bezier(0.16, 1, 0.3, 1);
}
.bkg-modal--visible .bkg-modal__panel {
  -webkit-transform: translateY(0) scale(1);
  -ms-transform: translateY(0) scale(1);
  transform: translateY(0) scale(1);
}

/* "You have a booking" indicator — a clickable pill that links
   to the buyer's bookings page filtered to that listing. Shown
   beside the Request Booking button when the buyer already has
   an active booking for that horse. */
.bkg-existing-indicator {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  font-weight: 600;
  color: var(--utility-emerald-800);
  padding: 6px 14px;
  background-color: var(--alpha-emerald-900-10);
  border: 1px solid var(--alpha-emerald-800-20);
  border-radius: 9999px;
  white-space: nowrap;
  text-decoration: none;
  cursor: pointer;
  -webkit-transition: background-color 120ms ease, border-color 120ms ease;
  transition: background-color 120ms ease, border-color 120ms ease;
}
.bkg-existing-indicator:hover {
  background-color: var(--alpha-emerald-800-20);
  border-color: var(--utility-emerald-800);
  color: var(--utility-emerald-800);
}
.bkg-existing-indicator i {
  font-size: 12px;
}
/* Compact variant for the listing header bar */
.bkg-existing-indicator--sm {
  font-size: 11px;
  padding: 4px 10px;
  gap: 5px;
}
.bkg-existing-indicator--sm i {
  font-size: 11px;
}
/* Pending/requested variant — amber tint instead of emerald
   so the buyer can distinguish at a glance between confirmed
   bookings and pending requests. */
.bkg-existing-indicator--pending {
  color: var(--utility-amber-800, #92400e);
  background-color: var(--alpha-amber-900-10, rgba(146, 64, 14, 0.08));
  border-color: var(--alpha-amber-800-20, rgba(146, 64, 14, 0.15));
}
.bkg-existing-indicator--pending:hover {
  background-color: var(--alpha-amber-800-20, rgba(146, 64, 14, 0.15));
  border-color: var(--utility-amber-800, #92400e);
  color: var(--utility-amber-800, #92400e);
}
/* Header — uses the standard .modal-header position so
   modal-dialog-scrollable keeps it pinned at the top. */
.bkg-mini__header {
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
/* Scrollable body — all form sections live here so the
   header + footer stay fixed. */
.bkg-mini__body {
  padding: 0;
}

/* Listing card — thumbnail + title + meta details so the buyer
   can confirm which horse the booking is for. Mirrors the
   listing cards used elsewhere in the app. */
/* Listing card — mirrors the messaging app thread header
   treatment: thumbnail on the left, stacked title + meta in
   the middle (same line-height/spacing), price on the right. */
.bkg-mini__listing {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 14px;
  padding: 14px 20px;
  border-bottom: 1px solid var(--border-primary-subtle);
  background-color: var(--canvas-secondary, var(--bg-surface));
}
.bkg-mini__listing-thumb {
  width: 52px;
  height: 52px;
  border-radius: 12px;
  overflow: hidden;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  background-color: var(--bg-primary-subtle);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  color: var(--text-tertiary);
  font-size: 20px;
  border: 1px solid var(--border-primary-subtle);
}
.bkg-mini__listing-thumb-img {
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
  object-fit: cover;
  display: block;
}
.bkg-mini__listing-text {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 3px;
  line-height: 1.15;
}
.bkg-mini__listing-title {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.bkg-mini__listing-meta {
  font-size: 11px;
  color: var(--text-tertiary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  line-height: 1.15;
}

/* Month label above the date strip */
.bkg-mini__date-month {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary);
  text-align: center;
  margin-bottom: 8px;
}

/* Skeleton slot grid — preserves the same height as the real
   grid so the layout doesn't jump while loading. */
.bkg-mini__slot-grid--skeleton {
  min-height: 76px;
  opacity: 0.5;
}

/* Sections — uniform padding + vertical rhythm. Fixed min-heights
   on the dynamic sections prevent layout jumps while content
   loads asynchronously. */
.bkg-mini__section {
  margin-bottom: 16px;
  padding: 0 20px;
}
.bkg-mini__section:first-of-type {
  padding-top: 20px;
}
.bkg-mini__section:last-child {
  margin-bottom: 0;
}
.bkg-mini__section--types {
  min-height: 52px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  gap: 8px;
  -ms-flex-line-pack: start;
  align-content: flex-start;
}
/* Label above the type chips */
.bkg-mini__section--types::before {
  content: 'Appointment type';
  display: block;
  width: 100%;
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--text-tertiary);
  margin-bottom: 4px;
  padding-top: 4px;
}
.bkg-mini__section--dates {
  min-height: 90px;
}
.bkg-mini__section--slots {
  min-height: 80px;
}

/* Type pickers — no ring, just border-color shift on select
   (same treatment as the appointment type cards in the settings
   tab). Generous spacing via the section's gap. */
.bkg-type-pick {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
  gap: 2px;
  padding: 10px 16px;
  border-radius: 12px;
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  cursor: pointer;
  -webkit-transition: border-color 120ms ease, background-color 120ms ease;
  transition: border-color 120ms ease, background-color 120ms ease;
}
.bkg-type-pick:hover {
  border-color: var(--alpha-emerald-800-20);
  background-color: var(--bg-card-hover-surface, var(--alpha-emerald-900-10));
}
.bkg-type-pick.is-active {
  background-color: var(--alpha-emerald-900-10);
  border-color: var(--utility-emerald-800);
}
.bkg-type-pick__name {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary);
}
.bkg-type-pick__dur {
  font-size: 12px;
  font-weight: 600;
  color: var(--text-secondary);
  white-space: nowrap;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 4px;
}
.bkg-type-pick__dur i {
  font-size: 11px;
  color: var(--text-tertiary);
}

/* Date strip */
.bkg-mini__date-strip {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
}
.bkg-mini__nav {
  border: 1px solid var(--border-primary);
  background: transparent;
  width: 32px;
  height: 32px;
  border-radius: 9999px;
  cursor: pointer;
  color: var(--text-secondary);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -webkit-transition: background-color 120ms ease, color 120ms ease;
  transition: background-color 120ms ease, color 120ms ease;
}
.bkg-mini__nav:hover {
  background-color: var(--bg-primary-subtle);
  color: var(--text-primary);
}
.bkg-mini__nav[disabled] { opacity: 0.4; cursor: not-allowed; }

.bkg-mini__date-cells {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 6px;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
}
.bkg-mini__date {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  padding: 8px 0;
  border-radius: 10px;
  border: 1px solid var(--border-primary);
  background: transparent;
  cursor: pointer;
  -webkit-transition: background-color 120ms ease, border-color 120ms ease;
  transition: background-color 120ms ease, border-color 120ms ease;
}
.bkg-mini__date:hover {
  background-color: var(--bg-primary-subtle);
}
.bkg-mini__date.is-active {
  background-color: var(--utility-emerald-800);
  border-color: var(--utility-emerald-800);
  color: #fff;
}
.bkg-mini__date.is-active .bkg-mini__date-dow,
.bkg-mini__date.is-active .bkg-mini__date-num { color: #fff; }
.bkg-mini__date-dow {
  font-size: 10px;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--text-tertiary);
  letter-spacing: 0.04em;
}
.bkg-mini__date-num {
  font-size: 16px;
  font-weight: 700;
  color: var(--text-primary);
}

/* Availability dot — small colored circle below the day number
   that shows how open the seller's calendar is that day.
   Green = 80%+ slots free, Amber = 30–80%, Red = <30%. */
.bkg-mini__date-dot {
  width: 6px;
  height: 6px;
  border-radius: 9999px;
  margin-top: 2px;
}
.bkg-mini__date-dot--green {
  background-color: #10b981;
}
.bkg-mini__date-dot--amber {
  background-color: #f59e0b;
}
.bkg-mini__date-dot--red {
  background-color: #ef4444;
}
/* No-availability ban icon — light gray so it reads as
   "nothing here" without competing with the colored dots. */
.bkg-mini__date-ban {
  font-size: 10px;
  color: var(--utility-neutral-300, #d4d4d4);
  margin-top: 2px;
  line-height: 1;
}
/* Shimmer placeholder while slot counts are loading. */
.bkg-mini__date-dot--shimmer {
  background-color: var(--utility-neutral-200, #e5e5e5);
  -webkit-animation: bkg-dot-shimmer 1.2s ease-in-out infinite;
  animation: bkg-dot-shimmer 1.2s ease-in-out infinite;
}
@-webkit-keyframes bkg-dot-shimmer {
  0%, 100% { opacity: 0.4; }
  50% { opacity: 1; }
}
@keyframes bkg-dot-shimmer {
  0%, 100% { opacity: 0.4; }
  50% { opacity: 1; }
}

/* Slot count label + scrollable container */
.bkg-mini__slot-count {
  font-size: 11px;
  font-weight: 600;
  color: var(--text-tertiary);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  margin-bottom: 8px;
}
.bkg-mini__slot-scroll {
  max-height: 260px;
  overflow-y: auto;
  scrollbar-width: thin;
}

/* Slot grid */
.bkg-mini__slot-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 6px;
}
.bkg-mini__slot {
  padding: 8px 4px;
  border-radius: 10px;
  background: transparent;
  border: 1px solid var(--border-primary);
  font-size: 12px;
  font-weight: 600;
  color: var(--text-primary);
  cursor: pointer;
  -webkit-transition: background-color 120ms ease, border-color 120ms ease;
  transition: background-color 120ms ease, border-color 120ms ease;
}
.bkg-mini__slot:hover {
  background-color: var(--bg-primary-subtle);
}
.bkg-mini__slot.is-active {
  background-color: var(--utility-emerald-800);
  color: #fff;
  border-color: var(--utility-emerald-800);
}
/* Unavailable slots — greyed-out with a strikethrough so the
   buyer can see the full schedule and understand which times
   exist but aren't bookable (e.g. within the lead-time window
   or already taken). */
.bkg-mini__slot--unavailable {
  opacity: 0.4;
  cursor: not-allowed;
  text-decoration: line-through;
  pointer-events: none;
}
.bkg-mini__empty {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  text-align: center;
  min-height: 80px;
  padding: 24px 16px;
  color: var(--text-tertiary);
  font-size: 12px;
  line-height: 1.5;
}
.bkg-mini__empty i {
  font-size: 24px;
  margin-bottom: 8px;
  color: var(--text-quaternary, var(--text-tertiary));
}

/* Notes textarea */
.bkg-mini__note-label {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 6px;
}
.bkg-mini__note-label > span {
  font-size: 11px;
  font-weight: 600;
  color: var(--text-tertiary);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
/* Mini-widget note textarea inherits its visual treatment from
   the shared .form-control.form-control-md class on the markup. */
.bkg-mini__note-input {
  resize: vertical;
}

/* Footer — inherits sticky bottom from .modal-footer via
   modal-dialog-scrollable. Just override the gap/alignment. */
.bkg-mini__footer {
  gap: 10px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

.bkg-mini__error {
  background-color: #fee2e2;
  color: #991b1b;
  font-size: 12px;
  padding: 8px 12px;
  border-radius: 8px;
  border: 1px solid #fecaca;
  margin: 0 20px 12px;
}

/* ── Availability editor ────────────────────────────────────── */

/* White panel that fills the availability tab. Head is pinned;
   the body is the single scroll container so the whole card has
   the same overall height/behaviour as the calendar panel. */
.bkg-availability {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 16px;
  overflow: hidden;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-height: 0;
  margin-bottom: 16px;
}
.bkg-availability__head {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: end;
  -ms-flex-align: end;
  align-items: flex-end;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 16px;
  padding: 24px 24px 16px;
  border-bottom: 1px solid var(--border-primary);
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
}

/* Scrollable interior: days + exceptions. */
.bkg-availability__body {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 20px 24px 24px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 16px;
}
.bkg-availability__title {
  font-size: 16px;
  font-weight: 600;
  color: var(--text-primary);
  margin: 0 0 4px;
}
.bkg-availability__sub {
  font-size: 13px;
  color: var(--text-secondary);
  margin: 0;
  max-width: 540px;
  line-height: 1.5;
}
.bkg-availability__error {
  background-color: #fee2e2;
  color: #991b1b;
  font-size: 12px;
  padding: 10px 14px;
  border-radius: 10px;
  border: 1px solid #fecaca;
}
.bkg-availability__saved-mark {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 4px;
  color: var(--text-tertiary);
  font-size: 12px;
}
.bkg-availability__saved-mark i {
  color: var(--utility-emerald-800);
}

.bkg-availability__days {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 12px;
}

.bkg-avl-day {
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 14px;
  padding: 16px;
  -webkit-transition: border-color 120ms ease;
  transition: border-color 120ms ease;
}
.bkg-avl-day:hover {
  border-color: var(--alpha-emerald-800-20);
}
.bkg-avl-day--off {
  opacity: 0.7;
}

.bkg-avl-day__head {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  margin-bottom: 12px;
}
.bkg-avl-day__name {
  font-size: 14px;
  font-weight: 600;
  margin: 0;
  color: var(--text-primary);
}

.bkg-avl-day__menu {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
}
.bkg-avl-day__more {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 4px;
  opacity: 0;
  -webkit-transition: opacity 120ms ease;
  transition: opacity 120ms ease;
}
.bkg-avl-day:hover .bkg-avl-day__more {
  opacity: 1;
}

.bkg-avl-day__btn {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 4px;
  background: transparent;
  border: 1px solid var(--border-primary);
  color: var(--text-secondary);
  font-size: 11px;
  font-weight: 600;
  padding: 5px 10px;
  border-radius: 9999px;
  cursor: pointer;
  -webkit-transition: background-color 120ms ease, color 120ms ease;
  transition: background-color 120ms ease, color 120ms ease;
}
.bkg-avl-day__btn:hover {
  background-color: var(--bg-primary-subtle);
  color: var(--text-primary);
}
.bkg-avl-day__btn--ghost {
  border-style: dashed;
}

/* Icon-only variant — fully round circular button, sized to
   match the height of the text copy-action pills beside it.
   Uses 1:1 aspect-ratio so width = height stays in lock-step
   regardless of font metrics. */
.bkg-avl-day__btn--icon {
  padding: 5px;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  aspect-ratio: 1 / 1;
  border-radius: 9999px;
}
.bkg-avl-day__btn--icon > i {
  font-size: 14px;
}
/* tq-9538 (A283): a time range's add / remove controls reach the touch floor through the DS ladder (--control-h-xs: 44px
   on a coarse pointer; 24px on a fine one, under their 28-30px, so desktop is unchanged) */
.bkg-avl-day__btn--icon,
.bkg-avl-block [data-bkg-remove] {
  min-width: var(--control-h-xs);
  min-height: var(--control-h-xs);
}

/* tq-9538 (A283): phone layout of a day card (after its base rules so it wins; the settings layout's 720px switch). The day's
   name and its + share the first row; the copy actions (weekdays / weekend / all days / clear) wrap onto their own row
   inside the card, VISIBLE: they are hover-only above, and a phone has no hover (at opacity 0 they ran past the viewport;
   revealing them on press reflowed the row under the finger). */
@media (max-width: 720px) {
  .bkg-avl-day__head {
    -ms-flex-wrap: wrap;
    flex-wrap: wrap;
    row-gap: 8px;
  }
  .bkg-avl-day__menu {
    display: contents;
  }
  .bkg-avl-day__more {
    -webkit-box-flex: 1;
    -ms-flex: 1 1 100%;
    flex: 1 1 100%;
    -ms-flex-wrap: wrap;
    flex-wrap: wrap;
    row-gap: 8px;
    opacity: 1;
  }
}

.bkg-avl-day__off {
  font-size: 12px;
  color: var(--text-tertiary);
  font-style: italic;
}

.bkg-avl-day__blocks {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 8px;
}

.bkg-avl-block {
  position: relative;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 12px;
  background-color: var(--alpha-emerald-900-10);
  border: 1px solid var(--alpha-emerald-800-20);
  border-radius: 10px;
}
.bkg-avl-block__times {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
}
/* Time inputs inherit padding/border/colors from the shared
   .form-control.form-control-md. We only override font weight
   so the start/end times read as bold values inside each block. */
.bkg-avl-block__time {
  font-weight: 600;
  width: auto;
}
.bkg-avl-block__sep {
  color: var(--text-tertiary);
  font-size: 13px;
}

/* Drag-resize handles. Invisible by default, visible on hover so
   the affordance is discoverable but doesn't clutter the resting
   state. */
.bkg-avl-block__handle {
  position: absolute;
  top: 0;
  bottom: 0;
  width: 6px;
  cursor: ew-resize;
  background-color: transparent;
  -webkit-transition: background-color 120ms ease;
  transition: background-color 120ms ease;
}
.bkg-avl-block__handle--left {
  left: 0;
  border-top-left-radius: 10px;
  border-bottom-left-radius: 10px;
}
.bkg-avl-block__handle--right {
  right: 0;
  border-top-right-radius: 10px;
  border-bottom-right-radius: 10px;
}
.bkg-avl-block:hover .bkg-avl-block__handle {
  background-color: var(--utility-emerald-800);
  opacity: 0.35;
}
.bkg-avl-block--resizing {
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-box-shadow: 0 0 0 3px var(--alpha-emerald-800-20);
  box-shadow: 0 0 0 3px var(--alpha-emerald-800-20);
}
.bkg-avl-block--resizing .bkg-avl-block__handle {
  background-color: var(--utility-emerald-800);
  opacity: 1;
}

/* Exceptions panel — sits below the weekly editor in its own
   section card so adding a few exceptions doesn't push the weekly
   editor out of view. */
.bkg-availability__exceptions {
  margin-top: 0;
  padding: 24px;
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 16px;
}
.bkg-availability__exceptions-head {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: end;
  -ms-flex-align: end;
  align-items: flex-end;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 16px;
}

.bkg-availability__exception-list {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 8px;
}
/* Blackout date row — icon tile + date stack + delete affordance.
   Reads as a compact date badge instead of a plain text row so
   the exceptions list is easy to scan. */
.bkg-availability__exception {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 12px;
  padding: 12px 14px;
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 12px;
  -webkit-transition: border-color 120ms ease, background-color 120ms ease;
  transition: border-color 120ms ease, background-color 120ms ease;
}
.bkg-availability__exception:hover {
  border-color: var(--alpha-emerald-800-20);
  background-color: var(--alpha-emerald-900-10);
}
.bkg-availability__exception-icon {
  width: 36px;
  height: 36px;
  border-radius: 10px;
  background-color: var(--alpha-emerald-900-10);
  color: var(--utility-emerald-800);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  font-size: 15px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.bkg-availability__exception-text {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 2px;
}
.bkg-availability__exception-date {
  font-weight: 600;
  font-size: 13px;
  color: var(--text-primary);
  line-height: 1.3;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
}
.bkg-availability__exception-date-leg {
  white-space: nowrap;
}
.bkg-availability__exception-date-arrow {
  font-size: 11px;
  color: var(--text-tertiary);
  margin: 0 2px;
}

/* Day-count badge — shown only on range cards so the seller can
   see how many days are blocked at a glance. Sits between the
   date/reason text and the trash button. */
.bkg-availability__exception-count {
  font-size: 11px;
  font-weight: 600;
  color: var(--utility-emerald-900);
  background-color: var(--alpha-emerald-900-10);
  border: 1px solid var(--alpha-emerald-800-20);
  padding: 3px 10px;
  border-radius: 9999px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  letter-spacing: 0.01em;
}
.bkg-availability__exception-reason {
  font-size: 12px;
  color: var(--text-tertiary);
  line-height: 1.3;
}

/* Time range line — shows the blocked hours when the exception
   is partial-day (overrideStartMin / overrideEndMin set). */
.bkg-availability__exception-time {
  font-size: 11px;
  color: var(--utility-emerald-800);
  font-weight: 500;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 4px;
}
.bkg-availability__exception-time i { font-size: 10px; }
.bkg-availability__exception-time--allday {
  color: var(--text-tertiary);
}

/* Hint below the time inputs in the modal */
.bkg-availability__modal-time-hint {
  font-size: 11px;
  color: var(--text-tertiary);
  margin: -4px 0 4px;
  text-align: left;
}

/* Time from-to row in the modal */
.bkg-availability__modal-time-row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: stretch;
  -ms-flex-align: stretch;
  align-items: stretch;
  gap: 8px;
}
.bkg-availability__modal-time-cell {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  margin-bottom: 0;
}
.bkg-availability__modal-time-cell input[type="time"] {
  text-align: center;
}


/* When the inline empty falls inside a section card, drop the
   bkg-empty's own padding so the parent's 24px breathes through. */
.bkg-empty--inline {
  padding: 24px 12px;
}
.bkg-empty--inline i {
  font-size: 22px;
  margin-bottom: 6px;
}

/* ── Calendar grid ──────────────────────────────────────────── */

.bkg-cal {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 16px;
  overflow: hidden;
  /* Fill the calendar panel so the card stretches to the bottom of
     the viewport instead of being a 720px slab. The inner body is
     the single scroll container. */
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-height: 0;
  margin-bottom: 16px;
}

.bkg-cal__head {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  padding: 16px 20px;
  border-bottom: 1px solid var(--border-primary);
  background-color: var(--canvas-secondary, var(--bg-surface));
  gap: 12px;
}
.bkg-cal__nav {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
}
/* tq-9538 (A283): the touch floor through the DS ladder (--control-h-xs: 44px on a coarse pointer; 24px on a fine one,
   under these 30-32px buttons, so desktop is unchanged) */
.bkg-cal__nav > button {
  min-width: var(--control-h-xs);
  min-height: var(--control-h-xs);
}
/* tq-9598 (A309): the toolbar's controls carry THE hit-slop (.hit-slop); its no-overlap rule grows the PARENT's margin for a chip
   remover (10px / 14px under a finger, 0 on a fine pointer). This toolbar spaces its controls itself (the phone rows below: a
   12px row gap and 6px padding = the slop's overhang), so its rows take no such margin. */
.bkg-cal .bkg-cal__head > .bkg-cal__nav,
.bkg-cal__head [data-bkg-cal-tabs] .nav-item {
  margin: 0;   /* (0,3,0): hit-slop.css comes later in the bundle at (0,2,0) */
}
.bkg-cal__label {
  font-size: 16px;
  font-weight: 600;
  color: var(--text-primary);
  margin: 0;
  letter-spacing: -0.01em;
}
/* The calendar view switcher runs its own sliding
   .nav-tabs-pill-indicator inside .nav-tabs — the indicator is
   what provides the white pill highlight. Leave the active
   nav-link with a transparent background (inherited from the
   shared .nav-tabs-ribbon--pill .nav-link.active rule) so the
   indicator can slide behind it; only swap the text color so
   the label reads correctly on the white pill. */
.bkg-cal__head .nav-tabs-ribbon--pill .nav-link.active {
  color: var(--text-tab-ribbon-active);
}

.bkg-cal__body {
  position: relative;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-height: 0;
  overflow-y: auto;
}
.bkg-cal__loading {
  padding: 60px 20px;
  text-align: center;
  color: var(--text-tertiary);
  font-size: 13px;
}

/* ── Month view ─────────────────────────────────────────────── */

/* The day-of-week strip sticks to the top of .bkg-cal__body so it
   stays visible while the month grid scrolls underneath it. */
.bkg-cal-month__dow {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  border-bottom: 1px solid var(--border-primary);
  background-color: var(--canvas-secondary, var(--bg-surface));
  position: sticky;
  top: 0;
  z-index: 3;
}
.bkg-cal-month__dow-cell {
  padding: 10px 12px;
  font-size: 11px;
  font-weight: 600;
  color: var(--text-tertiary);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  text-align: center;
}

.bkg-cal-month__grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  grid-auto-rows: minmax(110px, auto);
}

.bkg-cal-month__day {
  border-right: 1px solid var(--border-primary-subtle);
  border-bottom: 1px solid var(--border-primary-subtle);
  padding: 8px;
  cursor: pointer;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 4px;
  -webkit-transition: background-color 120ms ease;
  transition: background-color 120ms ease;
}
.bkg-cal-month__day:hover { background-color: var(--bg-primary-subtle); }
.bkg-cal-month__day--other {
  background-color: var(--canvas-primary);
  opacity: 0.55;
}
.bkg-cal-month__day--today {
  background-color: var(--alpha-emerald-900-10);
}

.bkg-cal-month__day-num {
  font-size: 12px;
  font-weight: 600;
  color: var(--text-secondary);
}
.bkg-cal-month__day--today .bkg-cal-month__day-num {
  color: var(--utility-emerald-800);
  font-weight: 700;
}

.bkg-cal-month__chip {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 4px;
  padding: 2px 5px;
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  color: var(--text-primary);
  border-radius: 8px;
  font-size: 10px;
  font-weight: 500;
  cursor: pointer;
  text-align: left;
  line-height: 1.3;
  min-width: 0;
  -webkit-transition: background-color 100ms ease;
  transition: background-color 100ms ease;
}
.bkg-cal-month__chip:hover {
  background-color: var(--bg-primary-subtle);
}
/* Status dot — small colored circle at the left of each chip */
.bkg-cal-month__chip-dot {
  width: 5px;
  height: 5px;
  border-radius: 9999px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  background-color: var(--utility-emerald-800);
}
.bkg-cal-month__chip--pending .bkg-cal-month__chip-dot   { background-color: #f59e0b; }
.bkg-cal-month__chip--confirmed .bkg-cal-month__chip-dot { background-color: #10b981; }
.bkg-cal-month__chip--reschedule .bkg-cal-month__chip-dot { background-color: #a855f7; }
.bkg-cal-month__chip--cancelled .bkg-cal-month__chip-dot { background-color: #94a3b8; }
.bkg-cal-month__chip--completed .bkg-cal-month__chip-dot { background-color: #3b82f6; }
.bkg-cal-month__chip--cancelled { opacity: 0.6; }
.bkg-cal-month__chip-time {
  font-weight: 700;
  color: var(--text-secondary);
  white-space: nowrap;
}
.bkg-cal-month__chip-title {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  min-width: 0;
}

/* Blocked-out day — subtle diagonal-stripe pattern using an
   emerald tint so blocked days are visible without dominating
   the calendar. The "Blocked" chip sits below the day number. */
.bkg-cal-month__day--blocked {
  background-image: repeating-linear-gradient(
    -45deg,
    var(--alpha-emerald-900-10),
    var(--alpha-emerald-900-10) 4px,
    transparent 4px,
    transparent 10px
  );
}
.bkg-cal-month__blocked {
  font-size: 9px;
  font-weight: 600;
  color: var(--utility-emerald-800);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 3px;
  opacity: 0.8;
}
.bkg-cal-month__blocked i { font-size: 9px; }

.bkg-cal-month__more {
  font-size: 10px;
  color: var(--text-tertiary);
  font-weight: 600;
}

/* ── Week view ──────────────────────────────────────────────── */

/* The week-view day header row sticks to the top of .bkg-cal__body
   so the date labels stay visible while the hour grid scrolls.
   z-index sits above events (which are absolutely positioned
   inside day columns) so nothing bleeds through. */
.bkg-cal-week__header {
  display: grid;
  grid-template-columns: 56px repeat(7, 1fr);
  border-bottom: 1px solid var(--border-primary);
  background-color: var(--canvas-secondary, var(--bg-surface));
  position: sticky;
  top: 0;
  z-index: 3;
}
.bkg-cal-week__gutter {
  border-right: 1px solid var(--border-primary-subtle);
}
.bkg-cal-week__day-head {
  padding: 10px 6px;
  text-align: center;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 2px;
  border-right: 1px solid var(--border-primary-subtle);
}
.bkg-cal-week__day-head:last-child { border-right: 0; }
.bkg-cal-week__day-head.is-today {
  background-color: var(--alpha-emerald-900-10);
}
.bkg-cal-week__day-head.is-blocked {
  background-image: repeating-linear-gradient(
    -45deg,
    var(--alpha-emerald-900-10),
    var(--alpha-emerald-900-10) 4px,
    transparent 4px,
    transparent 10px
  );
}
.bkg-cal-week__blocked-label {
  font-size: 9px;
  font-weight: 600;
  color: var(--utility-emerald-800);
  opacity: 0.7;
}
/* Blocked day column — subtle stripe background behind all
   24 hour cells so the entire column reads as unavailable. */
.bkg-cal-week__day-col--blocked {
  background-image: repeating-linear-gradient(
    -45deg,
    var(--alpha-emerald-900-10),
    var(--alpha-emerald-900-10) 4px,
    transparent 4px,
    transparent 10px
  );
}
.bkg-cal-week__dow {
  font-size: 10px;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--text-tertiary);
  letter-spacing: 0.04em;
}
.bkg-cal-week__num {
  font-size: 16px;
  font-weight: 700;
  color: var(--text-primary);
  letter-spacing: -0.01em;
}

.bkg-cal-week__body {
  display: grid;
  grid-template-columns: 56px repeat(7, 1fr);
}
.bkg-cal-week__time-col {
  border-right: 1px solid var(--border-primary-subtle);
  background-color: var(--canvas-primary);
}
.bkg-cal-week__time-row {
  height: var(--bkg-cal-hour-h, 56px);
  font-size: 10px;
  color: var(--text-tertiary);
  padding: 4px 6px;
  text-align: right;
  border-bottom: 1px solid var(--border-primary-subtle);
  font-weight: 500;
}

.bkg-cal-week__day-col {
  position: relative;
  border-right: 1px solid var(--border-primary-subtle);
}
.bkg-cal-week__day-col:last-child { border-right: 0; }
.bkg-cal-week__hour {
  height: var(--bkg-cal-hour-h, 56px);
  border-bottom: 1px solid var(--border-primary-subtle);
}

/* ── Calendar event card ──────────────────────────────────────
   Block-style card with a top color strip from the appointment
   type, a status dot in the top-right corner, and a tight
   typography hierarchy optimized for dense calendar grids.
   Tighter radius (4px) for a structured, Linear/Notion feel. */
.bkg-cal-event {
  position: absolute;
  left: 3px;
  right: 3px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 1px;
  padding: 4px 7px 4px 8px;
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-top: 2px solid var(--bkg-type-color, var(--utility-emerald-800));
  border-radius: 8px;
  font-size: 11px;
  cursor: -webkit-grab;
  cursor: grab;
  text-align: left;
  color: var(--text-primary);
  overflow: hidden;
  -webkit-transition: background-color 120ms ease, -webkit-box-shadow 120ms ease;
  transition: background-color 120ms ease, -webkit-box-shadow 120ms ease;
  transition: background-color 120ms ease, box-shadow 120ms ease;
  transition: background-color 120ms ease, box-shadow 120ms ease, -webkit-box-shadow 120ms ease;
}
.bkg-cal-event:hover {
  background-color: var(--bg-primary-subtle);
  -webkit-box-shadow: 0 2px 8px -2px rgba(15, 23, 42, 0.12);
  box-shadow: 0 2px 8px -2px rgba(15, 23, 42, 0.12);
}
/* Day view — slightly more room */
.bkg-cal-event--lg {
  font-size: 12px;
  padding: 6px 10px 6px 10px;
  gap: 2px;
}

/* Status dot — top-right corner, color-coded */
.bkg-cal-event__status-dot {
  position: absolute;
  top: 5px;
  right: 5px;
  width: 6px;
  height: 6px;
  border-radius: 9999px;
  background-color: var(--utility-emerald-800);
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.bkg-cal-event--pending .bkg-cal-event__status-dot { background-color: #f59e0b; }
.bkg-cal-event--confirmed .bkg-cal-event__status-dot { background-color: #10b981; }
.bkg-cal-event--reschedule .bkg-cal-event__status-dot { background-color: #a855f7; }
.bkg-cal-event--cancelled .bkg-cal-event__status-dot { background-color: #94a3b8; }
.bkg-cal-event--completed .bkg-cal-event__status-dot { background-color: #3b82f6; }
.bkg-cal-event--cancelled { opacity: 0.6; }

/* Head row — time + appointment type on one line */
.bkg-cal-event__head {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: baseline;
  -ms-flex-align: baseline;
  align-items: baseline;
  gap: 4px;
  min-width: 0;
}
.bkg-cal-event__time {
  font-weight: 700;
  font-size: 10px;
  color: var(--text-secondary);
  letter-spacing: 0.01em;
  white-space: nowrap;
}
.bkg-cal-event--lg .bkg-cal-event__time { font-size: 11px; }
.bkg-cal-event__type {
  font-size: 9px;
  font-weight: 600;
  color: var(--text-tertiary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.bkg-cal-event--lg .bkg-cal-event__type { font-size: 10px; }

/* Title — horse/listing name, most prominent */
.bkg-cal-event__title {
  font-weight: 600;
  font-size: 11px;
  line-height: 1.2;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.bkg-cal-event--lg .bkg-cal-event__title { font-size: 12px; }

/* Person — visitor name */
.bkg-cal-event__person {
  font-size: 10px;
  color: var(--text-tertiary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.bkg-cal-event--dragging {
  opacity: 0.85;
  cursor: -webkit-grabbing;
  cursor: grabbing;
  -webkit-box-shadow: 0 8px 24px -8px rgba(15, 23, 42, 0.35);
  box-shadow: 0 8px 24px -8px rgba(15, 23, 42, 0.35);
  z-index: 10;
}

.bkg-cal-event--conflict {
  background-color: #fee2e2 !important;
  border-color: #dc2626 !important;
  border-left-color: #dc2626 !important;
  -webkit-box-shadow: 0 0 0 2px rgba(220, 38, 38, 0.35),
              0 12px 32px -10px rgba(220, 38, 38, 0.45) !important;
  box-shadow: 0 0 0 2px rgba(220, 38, 38, 0.35),
              0 12px 32px -10px rgba(220, 38, 38, 0.45) !important;
  cursor: not-allowed;
}

/* Floating drop-time label that follows the cursor while a calendar
   event is being dragged. Lives on document.body so it floats above
   the calendar's scroll container and never gets clipped. */
.bkg-cal-drop-label {
  position: fixed;
  z-index: var(--z-drag-mirror);
  pointer-events: none;
  padding: 6px 10px;
  border-radius: 8px;
  background-color: var(--text-primary, #0f172a);
  color: #fff;
  font-size: 12px;
  font-weight: 600;
  line-height: 1.2;
  letter-spacing: -0.005em;
  white-space: nowrap;
  -webkit-box-shadow: 0 8px 24px -10px rgba(15, 23, 42, 0.55);
  box-shadow: 0 8px 24px -10px rgba(15, 23, 42, 0.55);
}

.bkg-cal-drop-label--conflict {
  background-color: #b91c1c;
}

/* ── Day view ───────────────────────────────────────────────── */

.bkg-cal-day {
  display: grid;
  grid-template-columns: 64px 1fr;
}
.bkg-cal-day--blocked {
  background-image: repeating-linear-gradient(
    -45deg,
    var(--alpha-emerald-900-10),
    var(--alpha-emerald-900-10) 4px,
    transparent 4px,
    transparent 10px
  );
}

/* Partial-day blocked overlay — positioned absolutely inside a
   day column (week or day view) like an event, but with a subtle
   emerald stripe pattern + a small "Blocked" label so the seller
   can see exactly which hours are unavailable. */
.bkg-cal-blocked-span {
  position: absolute;
  left: 2px;
  right: 2px;
  border-radius: 6px;
  pointer-events: none;
  z-index: 1;
  background-image: repeating-linear-gradient(
    -45deg,
    var(--alpha-emerald-900-10),
    var(--alpha-emerald-900-10) 3px,
    transparent 3px,
    transparent 8px
  );
  border: 1px solid var(--alpha-emerald-800-20);
  overflow: hidden;
}
.bkg-cal-blocked-span__label {
  display: block;
  padding: 3px 6px;
  font-size: 10px;
  font-weight: 600;
  color: var(--utility-emerald-800);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.bkg-cal-blocked-span--lg .bkg-cal-blocked-span__label {
  font-size: 12px;
  padding: 6px 10px;
}
.bkg-cal-day__time-col {
  border-right: 1px solid var(--border-primary-subtle);
  background-color: var(--canvas-primary);
}
.bkg-cal-day__time-row {
  height: var(--bkg-cal-hour-h, 56px);
  font-size: 11px;
  color: var(--text-tertiary);
  padding: 4px 8px;
  text-align: right;
  border-bottom: 1px solid var(--border-primary-subtle);
  font-weight: 500;
}
.bkg-cal-day__col {
  position: relative;
}
.bkg-cal-day__hour {
  height: var(--bkg-cal-hour-h, 56px);
  border-bottom: 1px solid var(--border-primary-subtle);
}

/* ── Detail panel (slide-in) ────────────────────────────────── */

.bkg-detail {
  position: fixed;
  inset: 0;
  z-index: var(--z-modal-stacked);
  opacity: 0;
  pointer-events: none;
  -webkit-transition: opacity 200ms ease;
  transition: opacity 200ms ease;
}

/* Fixed header — title left, close right */

/* Scrollable body */

/* Fixed footer — actions pinned at bottom */
/* Status badge pushed right within the listing row */
.bkg-detail__thumb {
  width: 72px;
  height: 72px;
  border-radius: 12px;
  background-color: var(--bg-primary-subtle);
  background-size: cover;
  background-position: center;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}
.bkg-detail__thumb--placeholder {
  color: var(--text-tertiary);
  font-size: 22px;
}
.bkg-detail__listing-meta {
  font-size: 11px;
  color: var(--text-tertiary);
  line-height: 1.1;
  margin-top: 1px;
}

.bkg-detail__section {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 2px;
}

.bkg-detail__section-title {
  font-size: 10px;
  font-weight: 600;
  text-transform: uppercase;
  color: var(--text-tertiary);
  letter-spacing: 0.04em;
  margin: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 5px;
}
.bkg-detail__section-title i {
  font-size: 10px;
  color: var(--text-tertiary);
}
/* Live Google Map — same styling as the listing detail page */
.bkg-detail__map {
  border-radius: 10px;
  overflow: hidden;
  border: 1px solid var(--border-primary);
  margin-bottom: 8px;
  aspect-ratio: 4 / 3;
  background-color: var(--bg-primary-subtle);
}

/* Address line — pin icon + text + copy button */
.bkg-detail__address {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  font-size: 13px;
  color: var(--text-primary);
  font-weight: 500;
}
.bkg-detail__address i {
  color: var(--utility-emerald-800);
  font-size: 13px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.bkg-detail__address-link {
  color: var(--text-primary);
  text-decoration: none;
  border-bottom: 1px dashed var(--border-primary);
  -webkit-transition: color 120ms ease, border-color 120ms ease;
  transition: color 120ms ease, border-color 120ms ease;
}
.bkg-detail__address-link:hover {
  color: var(--utility-emerald-800);
  border-color: var(--utility-emerald-800);
}
.bkg-detail__address--approx {
  color: var(--text-secondary);
  font-weight: 400;
}
.bkg-detail__address--approx i {
  color: var(--text-tertiary);
}
.bkg-detail__copy-btn {
  background: transparent;
  border: 0;
  color: var(--text-tertiary);
  cursor: pointer;
  font-size: 13px;
  padding: 2px 4px;
  border-radius: 4px;
  -webkit-transition: color 120ms ease, background-color 120ms ease;
  transition: color 120ms ease, background-color 120ms ease;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.bkg-detail__copy-btn:hover {
  color: var(--text-primary);
  background-color: var(--bg-primary-subtle);
}

/* Address note badge — light green background */
.bkg-detail__address-badge {
  font-size: 11px;
  font-weight: 500;
  color: var(--utility-emerald-800);
  background-color: var(--alpha-emerald-900-10);
  border: 1px solid var(--alpha-emerald-800-20);
  border-radius: 8px;
  padding: 6px 10px;
  margin-top: 8px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  line-height: 1.4;
}
.bkg-detail__address-badge i {
  font-size: 11px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

/* Appointment type — colored dot (seller) or plain text (buyer) */
.bkg-detail__appt-type {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary);
  margin: 0;
}
.bkg-detail__appt-type-plain {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary);
  margin: 0;
}
.bkg-detail__appt-dot {
  width: 8px;
  height: 8px;
  border-radius: 9999px;
  background-color: var(--utility-emerald-800);
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.bkg-detail__appt-type[style*="--bkg-type-color"] .bkg-detail__appt-dot {
  background-color: var(--bkg-type-color);
}

.bkg-detail__when {
  font-size: 13px;
  font-weight: 500;
  color: var(--text-secondary);
  margin: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
}
.bkg-detail__when i {
  color: var(--text-tertiary);
}

.bkg-detail__person {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
}
.bkg-detail__person .avatar {
  width: 30px;
  height: 30px;
  font-size: 12px;
}
.bkg-detail__person-name {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary);
}

.bkg-detail__note {
  font-size: 13px;
  color: var(--text-secondary);
  margin: 0;
  padding: 12px 14px;
  background-color: var(--bg-primary-subtle);
  border-radius: 10px;
  border-left: 3px solid var(--border-primary);
  line-height: 1.5;
}
.bkg-detail__note--muted {
  background-color: #fee2e2;
  border-left-color: rgba(220, 38, 38, 0.5);
  color: #991b1b;
}

/* Quick action strip — iCal download + discuss handoff. Sits in
   its own subtle panel between the data sections and the timeline. */

.bkg-detail__actions {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 8px;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
}

/* ══════════════════════════════════════════════════════════════════
   BOOKING DETAIL MODAL — two-column layout
   Left:  main appointment details (scrollable)
   Right: activity timeline (scrollable independently)
   ══════════════════════════════════════════════════════════════════ */

/* Header — listing card with thumbnail, title, meta, quick actions */
.bkg-dm__header {
  gap: 12px;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}
.bkg-dm__header-loading {
  font-size: 13px;
  color: var(--text-tertiary);
  padding: 8px 0;
}
.bkg-dm__header-card {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 12px;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
}
.bkg-dm__header-thumb {
  width: 48px;
  height: 48px;
  border-radius: 10px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.bkg-dm__header-info {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 1px;
}
.bkg-dm__header-title {
  font-size: 15px;
  font-weight: 600;
  color: var(--text-primary);
  margin: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  line-height: 1.2;
}
.bkg-dm__header-info .bkg-detail__listing-meta {
  margin-top: 0;
}
/* Header action icons — calendar, message, close grouped together */
.bkg-dm__header-actions {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 4px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

/* Status row */
.bkg-dm__status-row {
  padding-bottom: 10px;
  border-bottom: 1px solid var(--border-primary);
}

/* 2×2 summary grid — Type|When / Where|Who */
.bkg-dm__summary-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
  padding: 14px 0;
  border-bottom: 1px solid var(--border-primary);
}
.bkg-dm__summary-cell {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 4px;
}
.bkg-dm__when-value {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary);
}
.bkg-dm__when-dur {
  font-size: 11px;
  color: var(--text-tertiary);
}
.bkg-dm__where-value {
  font-size: 13px;
  font-weight: 500;
  color: var(--text-primary);
  line-height: 1.3;
}
@media (max-width: 480px) {
  .bkg-dm__summary-grid {
    grid-template-columns: 1fr;
  }
}

/* Body — single column */
.bkg-dm__body {
  padding: 0;
  min-height: 0;
}
.bkg-dm__main {
  padding: 20px 24px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 14px;
}

/* Footer */
.bkg-dm__footer {
  gap: 8px;
}

/* ── Appointment types ──────────────────────────────────────────
   Two-zone white panel (same treatment as .bkg-availability and
   .bkg-cal): pinned header with the "New type" action, scrollable
   body below that hosts a 4:3 card grid. Cards replace the old
   long horizontal rows so the palette is scan-friendly. */

.bkg-types {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 16px;
  overflow: hidden;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-height: 0;
  margin-bottom: 16px;
}
.bkg-types__head {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  -webkit-box-align: end;
  -ms-flex-align: end;
  align-items: flex-end;
  gap: 16px;
  padding: 24px 24px 16px;
  border-bottom: 1px solid var(--border-primary);
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
}

/* ── Appointment type editor modal ──────────────────────────── */

.bkg-types__modal-body {
  padding: 18px 20px 4px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 14px;
  text-align: left;
}
.bkg-types__modal-body .bkg-form__field {
  margin-bottom: 0;
  width: 100%;
  text-align: left;
}
/* Top-level field labels (Name, Description, Restrict to listing)
   always read on the left. The nested counter fields inside the
   Session block keep their centered labels via their own scoped
   .bkg-types__counter rule. */
.bkg-types__modal-body > .bkg-form__field > .bkg-form__label {
  text-align: left;
  display: block;
  width: 100%;
}
/* Force every text-style input + textarea inside the modal body
   to fill its field's width, so Name and Description span the
   full modal regardless of the browser's default input sizing. */
.bkg-types__modal-body > .bkg-form__field > input[type="text"],
.bkg-types__modal-body > .bkg-form__field > input[type="number"],
.bkg-types__modal-body > .bkg-form__field > textarea,
.bkg-types__modal-body > .bkg-form__field > select {
  width: 100%;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

/* Session block — wraps Duration + Buffer Before + Buffer After
   in a single bordered panel with a header that hosts the color
   swatch on the right. */
.bkg-types__modal-counters {
  background-color: var(--bg-primary-subtle);
  border: 1px solid var(--border-primary);
  border-radius: 14px;
  padding: 14px 16px 16px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 12px;
}
.bkg-types__modal-counters-head {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 12px;
}
.bkg-types__modal-counters-title {
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--text-tertiary);
}
.bkg-types__modal-counters-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 12px;
}

/* Counter field — label on top, then the .qty-input--compact row
   ([-] [white input] [+]), then a small unit suffix UNDER the value. */
.bkg-types__counter {
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  text-align: center;
}
.bkg-types__counter > .bkg-form__label {
  text-align: center;
  width: 100%;
  margin: 0;
}
/* The [-] [value] [+] row itself is the ONE DS quantity input now: .qty-input.qty-input--compact
   (Reinly.Design components/inputs/qty-input.css, tq-8316 R3h). The label above and the unit suffix below stay here. */
.bkg-types__counter-suffix {
  font-size: 11px;
  font-weight: 500;
  color: var(--text-tertiary);
  text-transform: lowercase;
  letter-spacing: 0.02em;
}

/* Color swatch in the session block header — small native color
   picker dressed up as a circular tile that previews the type's
   color, with a thin border so it sits cleanly on the soft
   panel background. */
.bkg-types__modal-color-pick {
  position: relative;
  width: 28px;
  height: 28px;
  border-radius: 9999px;
  overflow: hidden;
  cursor: pointer;
  border: 2px solid #fff;
  -webkit-box-shadow: 0 0 0 1px var(--border-primary), 0 1px 2px rgba(15, 23, 42, 0.06);
  box-shadow: 0 0 0 1px var(--border-primary), 0 1px 2px rgba(15, 23, 42, 0.06);
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.bkg-types__modal-color-pick input[type="color"] {
  position: absolute;
  inset: -4px;
  width: calc(100% + 8px);
  height: calc(100% + 8px);
  border: 0;
  padding: 0;
  background: transparent;
  cursor: pointer;
}
.bkg-types__modal-color-pick input[type="color"]::-webkit-color-swatch-wrapper {
  padding: 0;
}
.bkg-types__modal-color-pick input[type="color"]::-webkit-color-swatch {
  border: 0;
}

/* Approval toggle row — label/hint stack on the left, toggle on
   the right. Same soft panel treatment as the counter block so
   the modal reads as two consistent grouped surfaces. */
.bkg-types__modal-toggle-row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 12px;
  background-color: var(--bg-primary-subtle);
  border: 1px solid var(--border-primary);
  border-radius: 12px;
  padding: 12px 14px;
}
.bkg-types__modal-toggle-text {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
}
.bkg-types__modal-toggle-label {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary);
  margin-bottom: 2px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
}
.bkg-types__modal-toggle-label i {
  color: var(--utility-emerald-800);
  font-size: 12px;
}
.bkg-types__modal-toggle-hint {
  font-size: 11px;
  color: var(--text-secondary);
  line-height: 1.4;
}

/* Listing combobox option — thumbnail tile + title + meta line,
   so each row in the dropdown reads as a mini listing card. */
.bkg-types__listing-option {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 10px;
  width: 100%;
  min-width: 0;
}
.bkg-types__listing-option-thumb {
  width: 32px;
  height: 32px;
  border-radius: 8px;
  background-color: var(--bg-primary-subtle);
  -ms-flex-negative: 0;
  flex-shrink: 0;
  overflow: hidden;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  color: var(--text-tertiary);
  font-size: 13px;
}
.bkg-types__listing-option-thumb img {
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
  object-fit: cover;
  display: block;
}
.bkg-types__listing-option-text {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 2px;
  line-height: 1.2;
}
.bkg-types__listing-option-label {
  font-size: 13px;
  font-weight: 500;
  color: var(--text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.bkg-types__listing-option-meta {
  font-size: 11px;
  color: var(--text-tertiary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* Emerald variant of the New type button — overrides the default
   neutral-900 .btn-primary fill so this CTA reads in the booking
   center's emerald palette. */
.bkg-types__new-btn.btn-primary {
  background-color: var(--utility-emerald-800);
  border-color: var(--utility-emerald-800);
  color: #fff;
}
.bkg-types__new-btn.btn-primary:hover {
  background-color: var(--utility-emerald-900);
  border-color: var(--utility-emerald-900);
}
.bkg-types__new-btn.btn-primary:active {
  background-color: var(--utility-emerald-900);
  border-color: var(--utility-emerald-900);
}
.bkg-types__title {
  font-size: 16px;
  font-weight: 600;
  color: var(--text-primary);
  margin: 0 0 4px;
}
.bkg-types__sub {
  font-size: 13px;
  color: var(--text-secondary);
  margin: 0;
  max-width: 540px;
  line-height: 1.5;
}

/* Scrollable body */
.bkg-types__body {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 20px 24px 24px;
}

/* Responsive 4:3 card grid — smaller cards fit more per row so
   sellers can scan their whole palette without scrolling. */
.bkg-types__grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 16px;
}

/* Horizontal card: 4px color strip on the left, a flex column
   main area with header (icon + name + duration), description,
   meta, and footer. No fixed aspect ratio — cards grow with
   content and align to the row height. */
.bkg-types__card {
  --bkg-type-color: var(--utility-emerald-800);
  position: relative;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 14px;
  overflow: hidden;
  -webkit-transition: border-color 120ms ease;
  transition: border-color 120ms ease;
  cursor: pointer;
  min-height: 170px;
}
.bkg-types__card:hover {
  border-color: var(--bkg-type-color);
}

/* Drag handle — the only part of the card that starts a drag.
   Sits on the left edge between the color strip and the main
   content, initially subtle and more visible on hover. */
.bkg-types__card-drag {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 18px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  color: var(--text-tertiary);
  font-size: 12px;
  cursor: -webkit-grab;
  cursor: grab;
  opacity: 0.35;
  -webkit-transition: opacity 120ms ease, color 120ms ease;
  transition: opacity 120ms ease, color 120ms ease;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.bkg-types__card:hover .bkg-types__card-drag {
  opacity: 0.7;
}
.bkg-types__card-drag:hover {
  opacity: 1 !important;
  color: var(--text-secondary);
}
.bkg-types__card-drag:active {
  cursor: -webkit-grabbing;
  cursor: grabbing;
}

/* Dragging state — the source card fades to 40% so the user can
   see where it came from while the browser draws the drag ghost. */
.bkg-types__card--dragging {
  opacity: 0.4;
}

/* 4px color strip on the left edge — the only brand element on
   the card so the rest of the layout reads neutral. */
.bkg-types__card-strip {
  width: 4px;
  background-color: var(--bkg-type-color);
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

.bkg-types__card-main {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  padding: 14px 16px;
  gap: 10px;
}

/* Header: icon chip + name + duration all on one row, centered
   vertically so the three elements sit on the same baseline. */
.bkg-types__card-header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 12px;
}

.bkg-types__card-accent-chip {
  width: 38px;
  height: 38px;
  border-radius: 10px;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  background-color: color-mix(in srgb, var(--bkg-type-color) 14%, transparent);
  color: var(--bkg-type-color);
  font-size: 16px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

.bkg-types__card-title-stack {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 1px;
  line-height: 1.1;
}

/* Tags row — sits under the appointment name in the title stack. */
.bkg-types__card-tags {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  gap: 4px;
}

/* Duration — plain text aligned to the right side of the header
   row. Sits on the same baseline as the icon chip and name so
   the three elements read as a single horizontal headline. */
.bkg-types__card-duration {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  margin-left: auto;
  font-size: 15px;
  font-weight: 700;
  color: var(--text-primary);
  letter-spacing: -0.01em;
  line-height: 1.1;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
  text-align: right;
}

.bkg-types__tag {
  background-color: rgba(255, 255, 255, 0.75);
  color: var(--text-tertiary);
  font-size: 9px;
  padding: 2px 8px;
  border-radius: 9999px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  line-height: 1.4;
  backdrop-filter: blur(2px);
}
/* Plain text variant — used for the "Default" label so it reads
   as quiet metadata under the appointment name. Light weight,
   tight line-height so it sits flush against the title above. */
.bkg-types__tag-plain {
  font-size: 11px;
  font-weight: 300;
  color: var(--text-tertiary);
  line-height: 1.1;
  text-transform: none;
  letter-spacing: 0;
}
.bkg-types__tag--listing {
  background-color: rgba(219, 234, 254, 0.9);
  color: #1e40af;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 4px;
}
.bkg-types__tag--listing i {
  font-size: 9px;
}

.bkg-types__card-name {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
  font-size: 15px;
  font-weight: 600;
  color: var(--text-primary);
  margin: 0;
  letter-spacing: -0.01em;
  line-height: 1.2;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.bkg-types__card-desc {
  font-size: 12px;
  color: var(--text-secondary);
  margin: 0;
  line-height: 1.5;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.bkg-types__card-meta {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 2px;
  font-size: 11px;
  line-height: 1.2;
  color: var(--text-secondary);
}
.bkg-types__card-meta-item {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 5px;
  line-height: 1.2;
}
.bkg-types__card-meta-item i {
  font-size: 11px;
  color: var(--text-tertiary);
}

/* Card footer — stacked rows. Top row: meta details + visibility
   toggle. Bottom row (only when the type is seller-owned):
   Edit + Delete buttons. `margin-top: auto` pushes the footer to
   the bottom so every card in the grid ends on the same baseline. */
.bkg-types__card-actions {
  margin-top: auto;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 8px;
  padding-top: 10px;
  border-top: 1px solid var(--border-primary-subtle);
}

.bkg-types__card-actions-row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 10px;
}

/* Bottom row — Edit + Delete buttons. Pinned to the right edge
   so the meta line above stays the visual anchor. */
.bkg-types__card-actions-row--buttons {
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
  gap: 4px;
  padding-top: 6px;
  border-top: 1px dashed var(--border-primary-subtle, var(--border-primary));
}
.bkg-types__card-actions-row--buttons .bkg-action-btn {
  padding: 4px 10px;
  font-size: 12px;
}

/* Compact toggle variant — sized to match the small footer
   meta row. 28×16 with a 12px thumb. */
.bkg-types__card-actions .toggle-track--button {
  width: 28px;
  height: 16px;
  border-radius: 9999px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.bkg-types__card-actions .toggle-thumb {
  width: 12px;
  height: 12px;
  top: 2px;
  left: 2px;
}
.bkg-types__card-actions .toggle-track--button[aria-checked="true"] .toggle-thumb {
  -webkit-transform: translateX(12px);
  -ms-transform: translateX(12px);
  transform: translateX(12px);
}

/* When the toggle is off, dim the whole card so the visual
   weight matches the disabled state. The :has() selector lets us
   key off the toggle's aria-checked attribute without adding a
   second class on the article. The footer itself stays at full
   opacity so the toggle remains clearly tappable to turn it
   back on. */
.bkg-types__card:has(.toggle-track--button[aria-checked="false"]) .bkg-types__card-strip,
.bkg-types__card:has(.toggle-track--button[aria-checked="false"]) .bkg-types__card-header,
.bkg-types__card:has(.toggle-track--button[aria-checked="false"]) .bkg-types__card-desc,
.bkg-types__card:has(.toggle-track--button[aria-checked="false"]) .bkg-types__card-meta {
  opacity: 0.5;
  -webkit-transition: opacity 150ms ease;
  transition: opacity 150ms ease;
}
.bkg-types__card:has(.toggle-track--button[aria-checked="false"]) {
  background-color: var(--bg-primary-subtle, var(--bg-muted, #f7f9f8));
}

/* ── Settings panel ──────────────────────────────────────────
   Same white-panel treatment as .bkg-availability and .bkg-cal:
   pinned head (title + save indicator) and a scrollable body
   hosting each labelled section. */

.bkg-settings {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 16px;
  overflow: hidden;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-height: 0;
  margin-bottom: 16px;
}
.bkg-settings__head {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 16px;
  padding: 24px 24px 16px;
  border-bottom: 1px solid var(--border-primary);
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
}
.bkg-settings__title {
  font-size: 16px;
  font-weight: 600;
  color: var(--text-primary);
  margin: 0 0 4px;
}
.bkg-settings__sub {
  font-size: 13px;
  color: var(--text-secondary);
  margin: 0;
  max-width: 580px;
  line-height: 1.5;
}
.bkg-settings__savebar {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  padding-top: 2px;
}

.bkg-settings__body {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 20px 24px 24px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 20px;
}

/* Section — group of related controls. Each section is its own
   flex column with a small header (icon + title + hint) and the
   stacked controls below. Sections are separated by whitespace
   and a subtle top border — no heavy card nesting. */
.bkg-settings__section {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 14px;
  padding-top: 20px;
  border-top: 1px solid var(--border-primary-subtle);
}
.bkg-settings__section:first-child {
  padding-top: 0;
  border-top: 0;
}
.bkg-settings__section-head {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 4px;
}
.bkg-settings__section-title {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-primary);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
}
.bkg-settings__section-title i {
  color: var(--utility-emerald-800);
  font-size: 13px;
}
.bkg-settings__section-sub {
  font-size: 12px;
  color: var(--text-secondary);
  margin: 0;
  line-height: 1.5;
  max-width: 620px;
}

/* Responsive grid of wizard-style counter fields — same
   counter component used inside the appointment type modal. */
.bkg-settings__counter-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
  gap: 12px;
  background-color: var(--bg-primary-subtle);
  border: 1px solid var(--border-primary);
  border-radius: 14px;
  padding: 16px;
}
.bkg-settings__counter-grid--single {
  grid-template-columns: 1fr;
  max-width: 320px;
}

/* Toggle stack — each row is a settings toggle with an icon +
   label + hint on the left and the switch on the right. */
.bkg-settings__toggle-stack {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  border: 1px solid var(--border-primary);
  border-radius: 14px;
  overflow: hidden;
  background-color: var(--canvas-secondary, var(--bg-surface));
}
.bkg-settings__toggle {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 14px;
  padding: 14px 16px;
  border-bottom: 1px solid var(--border-primary-subtle);
}
.bkg-settings__toggle:last-child {
  border-bottom: 0;
}
.bkg-settings__toggle-text {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
}
.bkg-settings__toggle-label {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary);
  margin-bottom: 2px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
}
.bkg-settings__toggle-label i {
  color: var(--utility-emerald-800);
  font-size: 12px;
}
.bkg-settings__toggle-hint {
  font-size: 11px;
  color: var(--text-secondary);
  line-height: 1.4;
}

/* Reminder lead-time field — wizard-style counter (+/- buttons
   matching every other setting counter) + a nav-tabs-ribbon--pill
   unit selector so the seller can pick Min / Hrs / Days. Sits
   inside a soft counter-grid panel like the other settings. */
.bkg-settings__lead-field {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 10px;
  background-color: var(--bg-primary-subtle);
  border: 1px solid var(--border-primary);
  border-radius: 14px;
  padding: 16px;
}
.bkg-settings__lead-field > .bkg-form__label {
  text-align: center;
  width: 100%;
}
.bkg-settings__lead-counter {
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}
/* The pill strip inherits the shared nav-tabs-ribbon--pill
   treatment so it matches the calendar Month/Week/Day switcher
   and the seller header tab ribbon. Active tab uses the emerald
   fill via the .nav-link.active override below. */
.bkg-settings__lead-pills {
  -ms-flex-item-align: center;
  align-self: center;
}
.bkg-settings__lead-pills .nav-link.active {
  background-color: var(--bg-tab-ribbon-active);
  -webkit-box-shadow: var(--shadow-sm);
  box-shadow: var(--shadow-sm);
  color: var(--text-tab-ribbon-active);
}

.bkg-form__field {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 6px;
  margin-bottom: 12px;
}
.bkg-form__field:last-child {
  margin-bottom: 0;
}
.bkg-form__label {
  font-size: 11px;
  font-weight: 600;
  color: var(--text-tertiary);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.bkg-form__label-hint {
  font-weight: 500;
  text-transform: none;
  letter-spacing: 0;
  color: var(--text-tertiary);
  opacity: 0.8;
}

/* ── Shared booking modal chrome ────────────────────────────────
   Mirrors the Contact-Seller modal layout exactly: icon chip +
   eyebrow + 16px title in the header, 18/22 body padding, 13px
   lead paragraph. Used by both the blackout-date modal and the
   appointment type editor so every booking-center modal reads
   as a single family. */
.bkg-modal__header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 14px;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
}

/* Close button shared across booking-center modals — same size,
   shape, and hover treatment as the Contact-seller modal close
   so every modal in the app reads as one family. align-self
   keeps it centered vertically against the icon-chip-anchored
   header content even when that content is taller. */
.modal-header .modal__close-btn {
  width: 32px;
  height: 32px;
  border-radius: 9999px;
  border: none;
  background: transparent;
  color: var(--text-secondary);
  cursor: pointer;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  margin-left: 12px;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  font-size: 16px;
  -ms-flex-item-align: center;
  align-self: center;
  -webkit-transition: background-color 120ms ease, color 120ms ease;
  transition: background-color 120ms ease, color 120ms ease;
}
.modal-header .modal__close-btn:hover {
  background-color: var(--bg-primary-subtle);
  color: var(--text-primary);
}
.modal-header .modal__close-btn:focus-visible {
  outline: none;
  background-color: var(--bg-primary-subtle);
}
.bkg-modal__header-icon {
  width: 44px;
  height: 44px;
  border-radius: 12px;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  background-color: var(--alpha-emerald-900-10);
  color: var(--utility-emerald-800);
  font-size: 18px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.bkg-modal__header-text {
  min-width: 0;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  gap: 2px;
  line-height: 1.1;
}
.bkg-modal__eyebrow {
  font-size: 11px;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--text-tertiary);
  line-height: 1.1;
}
.bkg-modal__title {
  margin: 0;
  font-size: 16px;
  font-weight: 600;
  color: var(--text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  line-height: 1.2;
}

/* Body padding matches the modal-header (p-4 pb-2) and
   modal-footer (p-4) so the body content lines up flush with
   the chrome above and below. */
.bkg-availability__modal-body {
  padding: 16px;
}

/* Plain-text lead — no callout box, just well-spaced copy so the
   description reads as context, not an alert. */
.bkg-availability__modal-lead {
  font-size: 13px;
  color: var(--text-secondary);
  line-height: 1.5;
  margin: 0 0 18px;
  padding: 0;
  background: transparent;
  border: 0;
}

/* Date range block — wraps the From and To inputs inside a
   single bordered surface with a small arrow between them, so
   the pair reads as one "from → to" range. */
.bkg-availability__modal-range {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: stretch;
  -ms-flex-align: stretch;
  align-items: stretch;
  background-color: var(--bg-input, var(--canvas-secondary, var(--bg-surface)));
  border: 1px solid var(--border-input, var(--border-primary));
  border-radius: 12px;
  padding: 4px;
  /* Explicit gap to the reason input below — matches the 18px
     used between the lead copy and this range block so the
     vertical rhythm reads as balanced. */
  margin-bottom: 18px;
  -webkit-transition: border-color 120ms ease;
  transition: border-color 120ms ease;
}
.bkg-availability__modal-range:hover {
  border-color: var(--border-input-hover, var(--utility-emerald-800));
}
.bkg-availability__modal-range:focus-within {
  border-color: var(--border-input-active, var(--utility-emerald-800));
}
.bkg-availability__modal-range-cell {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0px;
  flex: 1 1 0;
  min-width: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 2px;
  padding: 6px 10px;
  cursor: pointer;
}
.bkg-availability__modal-range-cell .bkg-form__label {
  text-align: center;
  font-size: 10px;
  color: var(--text-tertiary);
}
.bkg-availability__modal-range-cell input,
.bkg-availability__modal-range-cell input.flatpickr-input {
  width: 100%;
  min-width: 0;
  border: 0;
  background: transparent;
  padding: 0;
  font-size: 14px;
  font-weight: 600;
  color: var(--text-primary);
  outline: none;
  -webkit-box-shadow: none;
  box-shadow: none;
  cursor: pointer;
  text-align: center;
}
.bkg-availability__modal-range-cell input:focus,
.bkg-availability__modal-range-cell input:focus-visible {
  outline: none;
  -webkit-box-shadow: none;
  box-shadow: none;
  border: 0;
}
.bkg-availability__modal-range-arrow {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  padding: 0 8px;
  /* Push the arrow down so it sits on the same baseline as the
     input value (skipping the 10px label row + 2px gap above). */
  padding-top: 16px;
  color: var(--text-tertiary);
  font-size: 13px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}

/* Blackout-date flatpickr — scoped via the .bkg-blackout-cal
   class added in onReady. Days inside the selected range fill
   with a light emerald tint instead of the default neutral
   hover color, so the range reads as a clear "from → to" sweep
   in the booking emerald palette. The start/end days keep the
   solid emerald fill defined globally. */
.flatpickr-calendar.bkg-blackout-cal .flatpickr-day.inRange,
.flatpickr-calendar.bkg-blackout-cal .flatpickr-day.inRange:hover,
.flatpickr-calendar.bkg-blackout-cal .flatpickr-day.inRange:focus {
  background-color: var(--alpha-emerald-900-10);
  border-color: var(--alpha-emerald-800-20);
  color: var(--utility-emerald-900);
  -webkit-box-shadow: -5px 0 0 var(--alpha-emerald-900-10),
              5px 0 0 var(--alpha-emerald-900-10);
  box-shadow: -5px 0 0 var(--alpha-emerald-900-10),
              5px 0 0 var(--alpha-emerald-900-10);
}

/* Reason input — full-width, label always reads on the left
   regardless of any inherited centering from sibling fields. */
.bkg-availability__modal-reason {
  margin-bottom: 0;
  text-align: left;
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
}
.bkg-availability__modal-reason .bkg-form__label {
  text-align: left;
  width: 100%;
  display: block;
}
.bkg-availability__modal-reason input {
  width: 100%;
  text-align: left;
}

/* (Legacy row layout — kept for any other inline forms in the
   booking center that still use it.) */
/* Labels always read on the left, regardless of which column
   they're in. */
/* The date input's value is short and visually nicer centered;
   the reason input's text is freeform so it stays left-aligned
   (default). */

.bkg-availability__modal-error {
  margin-top: 12px;
  background-color: #fee2e2;
  color: #991b1b;
  font-size: 12px;
  padding: 10px 14px;
  border-radius: 10px;
  border: 1px solid #fecaca;
}
/* Inputs in the booking-center forms inherit their visual
   treatment from the shared .form-control / .form-control-md
   classes (Assets/css/components/inputs/input.css). The markup
   carries those classes directly, so we only handle the special
   cases here: color picker, and pseudo-element selectors. */
.bkg-form__field input[type="color"] {
  width: 48px;
  height: 36px;
  padding: 2px;
  border: 1px solid var(--border-primary);
  border-radius: 8px;
  background: transparent;
  cursor: pointer;
}
.bkg-form__check {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 10px;
  font-size: 13px;
  color: var(--text-primary);
  margin-bottom: 10px;
  cursor: pointer;
}
.bkg-form__check:last-child {
  margin-bottom: 0;
}
.bkg-form__check input {
  margin: 0;
  accent-color: var(--utility-emerald-800);
}

/* ── Buyer notification preferences card ────────────────────── */

.bkg-notif-card {
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 16px;
  padding: 24px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 12px;
}

.bkg-notif-card__head {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
  gap: 14px;
}
.bkg-notif-card__head > i {
  width: 44px;
  height: 44px;
  border-radius: 12px;
  background-color: var(--alpha-emerald-900-10);
  color: var(--utility-emerald-800);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  font-size: 18px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.bkg-notif-card__title {
  font-size: 14px;
  font-weight: 600;
  margin: 0 0 4px;
  color: var(--text-primary);
}
.bkg-notif-card__sub {
  font-size: 12px;
  color: var(--text-secondary);
  margin: 0;
  line-height: 1.5;
}

.bkg-notif-card__body {
  padding-left: 58px;
}

/* ── Reminder toast variant ─────────────────────────────────── */

.bkg-toast--reminder {
  background-color: var(--text-primary, #0f172a);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
}
.bkg-toast--reminder i {
  font-size: 13px;
  color: rgba(255, 255, 255, 0.85);
}
/* ══════════════════════════════════════════════════════════════════
   Notification center — top-nav bell + right-side slide-over panel.
   Tokens follow the existing booking-center / messaging-center
   conventions (rounded surfaces, calm spacing, no busy colors).
   ══════════════════════════════════════════════════════════════════ */

/* ── Bell trigger (header) ──────────────────────────────────────
   The button itself adopts the standard btn-glass / btn-secondary
   chrome (matched with the UserMenu sibling), so this rule only
   handles bell-specific layout: positioning the badge and sizing
   the icon. Everything else inherits from the .btn-* classes. */

.rnly-notif-trigger {
  position: relative;
  /* The shared btn-glass / btn-icon classes set overflow:hidden so
     their internal grain layer doesn't bleed past the rounded
     edge — but that also clips our badge, which intentionally sits
     outside the button bounds. Re-open clipping just for the bell
     trigger so the badge stays visible. */
  overflow: visible !important;
}
.rnly-notif-trigger i {
  font-size: 16px;
}
.rnly-notif-trigger__badge {
  position: absolute;
  top: -4px;
  right: -4px;
  min-width: 16px;
  height: 16px;
  padding: 0 4px;
  border-radius: 9999px;
  background-color: #dc2626;
  color: #fff;
  font-size: 10px;
  font-weight: 700;
  line-height: 16px;
  text-align: center;
  letter-spacing: 0.02em;
  pointer-events: none;
}

/* ── Slide-over panel ─────────────────────────────────────────── */

/* Container is anchored to the right edge but does NOT cover the
   page — pointer events pass through everywhere except the drawer
   itself, so the rest of the app stays interactive while the panel
   is open. No overlay, no dim — calmer than a modal. */
.rnly-notif-panel {
  position: fixed;
  inset: 0;
  z-index: var(--z-surface);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
  pointer-events: none;
}
.rnly-notif-panel[hidden] { display: none; }

/* Backdrop element. On desktop the panel is 420px and floats
   alongside the page — no dim, calmer than a modal (the JS module
   owns click-outside-to-close). On mobile the drawer covers
   100vw, so we DO show a brief fade-in dim layer underneath
   during the slide so the user reads "an overlay just took over",
   not "the bell did nothing". The dim only shows on mobile via
   the `html.is-mobile` scope. */
.rnly-notif-panel__backdrop { display: none; }
html.is-mobile .rnly-notif-panel__backdrop {
  display: block;
  position: absolute;
  inset: 0;
  background: rgba(15, 23, 42, 0);
  -webkit-transition: background 220ms ease;
  transition: background 220ms ease;
  pointer-events: none;
}
html.is-mobile .rnly-notif-panel.is-open .rnly-notif-panel__backdrop {
  background: rgba(15, 23, 42, 0.45);
  pointer-events: auto;
}

.rnly-notif-panel__drawer {
  position: relative;
  width: 420px;
  max-width: 100vw;
  height: 100%;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  background-color: var(--bg-modal, #fff);
  border-left: 1px solid var(--border-primary);
  -webkit-box-shadow: -12px 0 40px -18px rgba(15, 23, 42, 0.22);
  box-shadow: -12px 0 40px -18px rgba(15, 23, 42, 0.22);
  -webkit-transform: translateX(100%);
  -ms-transform: translateX(100%);
  transform: translateX(100%);
  -webkit-transition: -webkit-transform 240ms cubic-bezier(0.22, 1, 0.36, 1);
  transition: -webkit-transform 240ms cubic-bezier(0.22, 1, 0.36, 1);
  transition: transform 240ms cubic-bezier(0.22, 1, 0.36, 1);
  transition: transform 240ms cubic-bezier(0.22, 1, 0.36, 1), -webkit-transform 240ms cubic-bezier(0.22, 1, 0.36, 1);
  pointer-events: auto;
  will-change: transform;
  /* safe area (tq-9355): B. The right-anchored, full-height drawer clears the notch side and the home indicator. */
  padding-top: calc(0px + env(safe-area-inset-top, 0px));
  padding-right: max(0px, env(safe-area-inset-right, 0px));
  padding-bottom: calc(0px + env(safe-area-inset-bottom, 0px));
}
.rnly-notif-panel.is-open .rnly-notif-panel__drawer {
  -webkit-transform: translateX(0);
  -ms-transform: translateX(0);
  transform: translateX(0);
}

@media (max-width: 640px) {
  /* safe area (tq-9355): B. Full width here, so it touches the left edge too. */
  .rnly-notif-panel__drawer { width: 100vw; padding-left: max(0px, env(safe-area-inset-left, 0px)); }
}

/* 2-col grid header: title (col 1, fills row 1) + close X (col 2,
   fixed-width, row 1). The bulk-action sub-row spans columns 1-2
   on row 2 so "Mark all as read" right-aligns to the same edge as
   the close X (and beyond, since the close has no margin past it).
   Earlier the sub-row lived inside a `.head-text` wrapper that
   stopped where the close button started, so the action text
   couldn't reach the panel's right edge. */
.rnly-notif-panel__head {
  display: grid;
  grid-template-columns: 1fr auto;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-column-gap: 12px;
  -moz-column-gap: 12px;
  column-gap: 12px;
  row-gap: 4px;
  padding: 18px 20px 12px;
  border-bottom: 1px solid var(--border-primary-subtle, var(--border-primary));
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
}
.rnly-notif-panel__head .rnly-notif-panel__sub-row {
  grid-column: 1 / -1;
}
.rnly-notif-panel__title {
  font-size: 17px;
  font-weight: 700;
  color: var(--text-primary);
  margin: 0;
  letter-spacing: -0.01em;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
}
/* Small emerald dot beside the title — indicates "you have unread"
   without a verbose sub-line. JS toggles `hidden` off the same
   unreadCount the bell badge uses. */
.rnly-notif-panel__title-dot {
  width: 8px;
  height: 8px;
  border-radius: 9999px;
  background-color: var(--utility-emerald-800);
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.rnly-notif-panel__title-dot[hidden] { display: none; }
/* Compact "X selected" caption that lives in the action row when
   selection mode is active. Slightly muted so it doesn't compete
   with the Clear / Select-all buttons next to it. */
.rnly-notif-panel__select-info {
  font-size: 12px;
  color: var(--text-tertiary);
  font-weight: 500;
}
/* Inline sub-row: "1 unread" on the left, "Mark all as read" on the
   right of the same line so the bulk action is one glance away. */
.rnly-notif-panel__sub-row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: baseline;
  -ms-flex-align: baseline;
  align-items: baseline;
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
  gap: 12px;
  margin-top: 4px;
  min-height: 22px; /* keep the row's vertical rhythm even when empty */
}
/* The "X selected" caption pushes against the right edge alongside
   the action links so the whole cluster reads as one toolbar. */
.rnly-notif-panel__sub-row > [data-rnly-notif-select-info] {
  margin-right: auto;
}
.rnly-notif-panel__close {
  width: 30px;
  height: 30px;
  border-radius: 9999px;
  border: 0;
  background: transparent;
  color: var(--text-secondary);
  cursor: pointer;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -webkit-transition: background-color 120ms ease, color 120ms ease;
  transition: background-color 120ms ease, color 120ms ease;
}
.rnly-notif-panel__close:hover {
  background-color: var(--bg-button-secondary-hover, var(--bg-primary-subtle));
  color: var(--text-primary);
}

/* Pill filter — All vs Unread on the left, "Mark all as read"
   on the right, all in one tidy header row. Inactive pills sit
   on the panel surface as ghost buttons; the active one fills
   with the emerald accent. */
.rnly-notif-panel__pills {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 12px;
  padding: 12px 20px 10px;
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
}
.rnly-notif-panel__pills-group {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  gap: 6px;
}

.rnly-notif-pill {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  padding: 5px 12px;
  border-radius: 9999px;
  border: 1px solid var(--border-primary-subtle, var(--border-primary));
  background: transparent;
  color: var(--text-secondary);
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  -webkit-transition: background-color 120ms ease, color 120ms ease, border-color 120ms ease;
  transition: background-color 120ms ease, color 120ms ease, border-color 120ms ease;
  white-space: nowrap;
}
.rnly-notif-pill:hover {
  background-color: var(--bg-button-secondary-hover, var(--bg-primary-subtle));
  color: var(--text-primary);
}
.rnly-notif-pill.is-active {
  background-color: var(--utility-emerald-800);
  color: #fff;
  border-color: var(--utility-emerald-800);
}
.rnly-notif-pill__count {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  min-width: 18px;
  height: 16px;
  padding: 0 5px;
  border-radius: 9999px;
  background-color: var(--bg-primary-subtle);
  color: var(--text-secondary);
  font-size: 10px;
  font-weight: 700;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  letter-spacing: 0.02em;
}
.rnly-notif-pill.is-active .rnly-notif-pill__count {
  background-color: rgba(255, 255, 255, 0.22);
  color: #fff;
}
/* Mirror the dashboard tab-badge pattern: empty textContent
   collapses the badge entirely, so the pill reads as just
   "Unread" until there's actually something to show. */
.rnly-notif-pill__count:empty { display: none; }

.rnly-notif-link {
  border: 0;
  background: transparent;
  color: var(--utility-emerald-800);
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  padding: 4px 6px;
  border-radius: 6px;
  -webkit-transition: background-color 120ms ease;
  transition: background-color 120ms ease;
  text-decoration: none;
}
.rnly-notif-link:hover {
  background-color: var(--alpha-emerald-900-10);
}
/* Danger variant — the "Clear" action archives the selected rows.
   Using the warning red lets the destructive intent register at a
   glance vs. the calmer emerald link variant. */
.rnly-notif-link--danger {
  color: #b91c1c;
}
.rnly-notif-link--danger:hover {
  background-color: rgba(220, 38, 38, 0.1);
}

.rnly-notif-panel__list {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 4px 12px 16px;
  /* Column flex so the empty / loading / error states can use
     flex:1 and centre vertically inside the available space. The
     card list (block-level <article>s) renders normally inside a
     column flex too — `margin-top` on subsequent cards still
     produces the same 4px rhythm. */
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
}

/* Empty / loading / error states fill the entire scroll area
   (flex:1 + 100% via the list container) and center their
   contents both axes. Without the explicit flex centering the
   message hugged the top of the panel and looked off-balance,
   especially on the Unread filter where the list height varies
   based on what's been read. */
.rnly-notif-panel__loading,
.rnly-notif-panel__empty,
.rnly-notif-panel__error {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  min-height: 280px;
  padding: 24px 20px;
  text-align: center;
  color: var(--text-tertiary);
  font-size: 13px;
}
.rnly-notif-panel__empty i,
.rnly-notif-panel__error i {
  font-size: 28px;
  color: var(--text-quaternary, var(--text-tertiary));
  margin-bottom: 8px;
}
.rnly-notif-panel__empty p,
.rnly-notif-panel__error p { margin: 0 0 6px; }

.rnly-notif-panel__foot {
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
  padding: 10px 20px 14px;
  border-top: 1px solid var(--border-primary-subtle, var(--border-primary));
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}

/* ── Notification card ──────────────────────────────────────────
   Layout: avatar + category-coloured pill badge on the left, then
   a body column (title row → optional snippet → footer with the
   timestamp). The badge sits on a tinted disc tied to the
   category color — calmer than the previous white-ringed circle
   and puts the icon on a surface that contrasts cleanly. */

.rnly-notif-card {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  gap: 12px;
  padding: 12px;
  border-radius: 12px;
  border: 1px solid transparent;
  cursor: pointer;
  -webkit-transition: background-color 120ms ease, border-color 120ms ease;
  transition: background-color 120ms ease, border-color 120ms ease;
  position: relative;
}
.rnly-notif-card + .rnly-notif-card { margin-top: 4px; }
.rnly-notif-card:hover {
  background-color: var(--bg-primary-subtle);
}
.rnly-notif-card:not(.is-read) {
  background-color: var(--alpha-emerald-900-10);
}
.rnly-notif-card.is-selected {
  background-color: var(--alpha-emerald-900-10);
  border-color: var(--utility-emerald-800);
}

/* ── Selection checkbox ─────────────────────────────────────────
   A 20px custom-drawn checkbox at the far left of every notification
   card. The native input is visually hidden but stays in the tab
   order; the visible square is driven by `:checked` on its preceding
   sibling. Default state is muted (Gmail-style "appears on hover")
   so the checkboxes don't compete with the avatar / title for
   attention until the user actually wants to act on rows.
   ─────────────────────────────────────────────────────────────── */
.rnly-notif-card__check {
  position: relative;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -ms-flex-item-align: center;
  align-self: center;
  width: 20px;
  height: 20px;
  cursor: pointer;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  /* Faded by default; the card's :hover (and any selection state) lifts
     the box into full opacity. Keeps the row clean while idle. */
  opacity: 0.5;
  -webkit-transition: opacity 140ms ease;
  transition: opacity 140ms ease;
}
.rnly-notif-card:hover .rnly-notif-card__check,
.rnly-notif-card.is-selected .rnly-notif-card__check,
.rnly-notif-card__check:focus-within {
  opacity: 1;
}
.rnly-notif-card__check input {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  margin: 0;
  opacity: 0;
  cursor: pointer;
  z-index: 1;
}
.rnly-notif-card__check-box {
  width: 20px;
  height: 20px;
  border-radius: 6px;
  border: 1.5px solid var(--border-primary);
  background-color: var(--bg-modal, #fff);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -webkit-transition: background-color 160ms cubic-bezier(.4, 0, .2, 1),
              border-color 160ms cubic-bezier(.4, 0, .2, 1),
              -webkit-box-shadow 160ms cubic-bezier(.4, 0, .2, 1);
  transition: background-color 160ms cubic-bezier(.4, 0, .2, 1),
              border-color 160ms cubic-bezier(.4, 0, .2, 1),
              -webkit-box-shadow 160ms cubic-bezier(.4, 0, .2, 1);
  transition: background-color 160ms cubic-bezier(.4, 0, .2, 1),
              border-color 160ms cubic-bezier(.4, 0, .2, 1),
              box-shadow 160ms cubic-bezier(.4, 0, .2, 1);
  transition: background-color 160ms cubic-bezier(.4, 0, .2, 1),
              border-color 160ms cubic-bezier(.4, 0, .2, 1),
              box-shadow 160ms cubic-bezier(.4, 0, .2, 1),
              -webkit-box-shadow 160ms cubic-bezier(.4, 0, .2, 1);
}
/* Hover on the empty box: emerald hint so the user knows it's live. */
.rnly-notif-card__check:hover .rnly-notif-card__check-box {
  border-color: var(--utility-emerald-800);
  background-color: var(--alpha-emerald-900-10, rgba(6, 95, 70, 0.06));
}
/* The tick — drawn with rotated borders so we don't ship an SVG icon
   per row. Starts at scale(0.6) and pops to scale(1) on check via a
   slight spring easing — the bounce reads as "selected" rather than
   the dead opacity-fade the prior version used. */
.rnly-notif-card__check-box::after {
  content: '';
  width: 11px;
  height: 6px;
  border-left: 2px solid #fff;
  border-bottom: 2px solid #fff;
  border-radius: 1px;
  -webkit-transform: rotate(-45deg) translate(1px, -1px) scale(0.6);
  -ms-transform: rotate(-45deg) translate(1px, -1px) scale(0.6);
  transform: rotate(-45deg) translate(1px, -1px) scale(0.6);
  opacity: 0;
  -webkit-transition: opacity 140ms cubic-bezier(.4, 0, .2, 1),
              -webkit-transform 220ms cubic-bezier(.34, 1.56, .64, 1);
  transition: opacity 140ms cubic-bezier(.4, 0, .2, 1),
              -webkit-transform 220ms cubic-bezier(.34, 1.56, .64, 1);
  transition: opacity 140ms cubic-bezier(.4, 0, .2, 1),
              transform 220ms cubic-bezier(.34, 1.56, .64, 1);
  transition: opacity 140ms cubic-bezier(.4, 0, .2, 1),
              transform 220ms cubic-bezier(.34, 1.56, .64, 1),
              -webkit-transform 220ms cubic-bezier(.34, 1.56, .64, 1);
}
.rnly-notif-card__check input:checked ~ .rnly-notif-card__check-box {
  background-color: var(--utility-emerald-800);
  border-color: var(--utility-emerald-800);
}
.rnly-notif-card__check input:checked ~ .rnly-notif-card__check-box::after {
  opacity: 1;
  -webkit-transform: rotate(-45deg) translate(1px, -1px) scale(1);
  -ms-transform: rotate(-45deg) translate(1px, -1px) scale(1);
  transform: rotate(-45deg) translate(1px, -1px) scale(1);
}
/* tq-9030 (A141): the DS checkbox's focus (A131): ONE outline in --focus-ring, 2px off the box; no border recolour, no tint */
.rnly-notif-card__check input:focus-visible ~ .rnly-notif-card__check-box {
  outline: 2px solid var(--focus-ring);
  outline-offset: 2px;
}

.rnly-notif-card__left {
  position: relative;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -ms-flex-item-align: start;
  align-self: flex-start;
}
.rnly-notif-card__avatar {
  width: 40px;
  height: 40px;
  border-radius: 9999px;
  -o-object-fit: cover;
  object-fit: cover;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  background-color: var(--bg-primary-subtle);
  color: var(--text-secondary);
  font-size: 14px;
  font-weight: 700;
  border: 1px solid var(--border-primary-subtle, var(--border-primary));
}
.rnly-notif-card__avatar--initials { font-style: normal; }

/* Category badge — a tinted disc that hangs off the avatar's
   bottom-right. Bumped to 24px with a 13px outlined glyph so the
   category icon (calendar / message / tag / shield) is clearly
   readable at a glance — the smaller solid version was hard to
   distinguish in a long list. The white ring keeps it visually
   detached from the avatar at any background colour. */
.rnly-notif-card__badge {
  position: absolute;
  bottom: -4px;
  right: -4px;
  width: 24px;
  height: 24px;
  border-radius: 9999px;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  font-size: 13px;
  border: 2px solid var(--bg-modal, #fff);
  -webkit-box-shadow: 0 1px 2px rgba(15, 23, 42, 0.12);
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.12);
}
.rnly-notif-card__badge i {
  line-height: 1;
  font-weight: 300;
}
/* Unified emerald palette across every category — the bell badge
   is the single source of truth for "you have something to look
   at" so the in-panel disc colours stay consistent with that
   brand cue instead of fanning into category-specific tones. */
.rnly-notif-card__badge--booking,
.rnly-notif-card__badge--message,
.rnly-notif-card__badge--listing,
.rnly-notif-card__badge--system {
  background-color: var(--alpha-emerald-900-10, #ecfdf5);
  color: var(--utility-emerald-800);
}

.rnly-notif-card__body-wrap {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 3px;
}
.rnly-notif-card__head {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 8px;
}
.rnly-notif-card__title {
  margin: 0;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--text-primary);
  line-height: 1.35;
  letter-spacing: -0.005em;
}
.rnly-notif-card__dot {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  width: 8px;
  height: 8px;
  border-radius: 9999px;
  background-color: var(--utility-emerald-800);
  margin-top: 6px;
}
.rnly-notif-card__body {
  font-size: 12.5px;
  color: var(--text-secondary);
  line-height: 1.45;
  margin: 0;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
/* Meta footer — clock icon + relative time. inline-flex with a
   small gap puts the icon and text on a single baseline so the
   line reads as one element instead of two stacked. */
.rnly-notif-card__meta {
  margin: 4px 0 0;
  font-size: 11px;
  color: var(--text-tertiary);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 5px;
  line-height: 1;
}
.rnly-notif-card__meta i {
  font-size: 10px;
  color: var(--text-quaternary, var(--text-tertiary));
  line-height: 1;
}
.rnly-notif-card__meta time { line-height: 1; }
/* Role label — just plain green text inline with the timestamp.
   Same emerald for Buyer + Seller (the word itself carries the
   meaning); no pill, no leading dot, no background. Keeps the
   meta row visually quiet while still surfacing the side. */
.rnly-notif-card__role {
  font-size: 11px;
  font-weight: 600;
  color: var(--utility-emerald-800);
  letter-spacing: 0;
  line-height: 1;
}
.rnly-notif-card.is-read .rnly-notif-card__title { color: var(--text-secondary); font-weight: 500; }

/* ── Per-row actions menu ─────────────────────────────────────
   Quiet kebab button in the card header that opens a small
   popover with read/unread + archive/unarchive choices. The
   popover is absolutely positioned relative to the menu, anchored
   to the right edge so it never clips the panel's right border. */
.rnly-notif-card__menu {
  position: relative;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.rnly-notif-card__menu-trigger {
  width: 24px;
  height: 24px;
  border: 0;
  background: transparent;
  border-radius: 9999px;
  color: var(--text-tertiary);
  cursor: pointer;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  font-size: 12px;
  line-height: 1;
  -webkit-transition: background-color 120ms ease, color 120ms ease;
  transition: background-color 120ms ease, color 120ms ease;
}
.rnly-notif-card__menu-trigger:hover {
  background-color: var(--bg-primary-subtle);
  color: var(--text-primary);
}
.rnly-notif-card__menu-pop {
  position: absolute;
  top: calc(100% + 4px);
  right: 0;
  min-width: 180px;
  padding: 4px;
  background-color: var(--bg-modal, #fff);
  border: 1px solid var(--border-primary);
  border-radius: 10px;
  -webkit-box-shadow: 0 12px 28px -10px rgba(15, 23, 42, 0.28);
  box-shadow: 0 12px 28px -10px rgba(15, 23, 42, 0.28);
  z-index: 30;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 2px;
}
.rnly-notif-card__menu-pop[hidden] { display: none; }
.rnly-notif-card__menu-item {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
  padding: 8px 10px;
  border: 0;
  background: transparent;
  border-radius: 6px;
  color: var(--text-primary);
  font-size: 13px;
  font-weight: 500;
  cursor: pointer;
  text-align: left;
  white-space: nowrap;
}
.rnly-notif-card__menu-item:hover {
  background-color: var(--bg-primary-subtle);
}
.rnly-notif-card__menu-item i {
  font-size: 12px;
  color: var(--text-tertiary);
  width: 14px;
  text-align: center;
}

/* Faded look for archived rows still appearing in the panel
   (typically only the Archived tab now, but defensive). */
.rnly-notif-card.is-archived { opacity: 0.78; }

/* Bulk action group — Mark all read + Archive read share the
   right-side slot in the pills row. The JS toggles their hidden
   attribute based on the active bucket. */

/* ── Notif redirect flash banner ────────────────────────────────
   Pinned to the top of the viewport when the user clicks a
   notification whose related entity has been deleted/archived.
   Uses standard toast easing — fades + slides down on mount,
   click-to-dismiss, auto-dismiss after 4s. */
.rnly-notif-flash {
  position: fixed;
  top: 16px;
  left: 50%;
  -webkit-transform: translate(-50%, -8px);
  -ms-transform: translate(-50%, -8px);
  transform: translate(-50%, -8px);
  z-index: var(--z-toast);
  padding: 10px 16px;
  border-radius: 9999px;
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary);
  background-color: var(--bg-modal, #fff);
  border: 1px solid var(--border-primary);
  -webkit-box-shadow: 0 8px 24px -10px rgba(15, 23, 42, 0.18);
  box-shadow: 0 8px 24px -10px rgba(15, 23, 42, 0.18);
  cursor: pointer;
  opacity: 0;
  pointer-events: none;
  -webkit-transition: opacity 200ms ease, -webkit-transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
  transition: opacity 200ms ease, -webkit-transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
  transition: opacity 200ms ease, transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
  transition: opacity 200ms ease, transform 220ms cubic-bezier(0.22, 1, 0.36, 1), -webkit-transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
  max-width: calc(100vw - 32px);
}
.rnly-notif-flash.is-visible {
  opacity: 1;
  pointer-events: auto;
  -webkit-transform: translate(-50%, 0);
  -ms-transform: translate(-50%, 0);
  transform: translate(-50%, 0);
}
.rnly-notif-flash--missing  { color: #b91c1c; border-color: rgba(220, 38, 38, 0.25); }
.rnly-notif-flash--archived { color: var(--text-secondary); }

/* ════════════════════════════════════════════════════════════════
   GENERIC TOAST COMPONENT (`.rnly-toast`)
   ────────────────────────────────────────────────────────────────
   Bottom-centered pill toast — same chrome family as the wishlist
   "saved to {list}" toast (`.rnly-wl-toast`), generalised so any
   surface can fire transient confirmations without re-implementing
   the slide-in animation, dismissal logic, or visual treatment.
   Two variants:
     • .rnly-toast--dark   (default)   — dark slate pill, white text
     • .rnly-toast--light              — white pill, dark text + shadow
   Tone helpers (success / error / info) tint the leading icon
   only — the body stays neutral so the toast reads consistently
   regardless of the underlying outcome.
   Drive it from JS via `window.RnlyToast.show({ message, variant, tone, duration })`.
   ════════════════════════════════════════════════════════════════ */
.rnly-toast {
  position: fixed;
  left: 50%;
  bottom: 24px;
  -webkit-transform: translate(-50%, 12px);
  -ms-transform: translate(-50%, 12px);
  transform: translate(-50%, 12px);
  z-index: var(--z-toast);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 10px;
  padding: 10px 16px 10px 14px;
  border-radius: 9999px;
  font-size: 13.5px;
  font-weight: 500;
  letter-spacing: -0.005em;
  opacity: 0;
  pointer-events: none;
  max-width: calc(100vw - 32px);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  -webkit-transition: opacity 200ms ease, -webkit-transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
  transition: opacity 200ms ease, -webkit-transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
  transition: opacity 200ms ease, transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
  transition: opacity 200ms ease, transform 220ms cubic-bezier(0.22, 1, 0.36, 1), -webkit-transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
}
.rnly-toast.is-visible {
  opacity: 1;
  pointer-events: auto;
  -webkit-transform: translate(-50%, 0);
  -ms-transform: translate(-50%, 0);
  transform: translate(-50%, 0);
}

/* Dark variant — default. Slate pill, white text. */
.rnly-toast--dark {
  background-color: #0f172a;
  color: #fff;
  -webkit-box-shadow: 0 12px 32px -10px rgba(15, 23, 42, 0.55);
  box-shadow: 0 12px 32px -10px rgba(15, 23, 42, 0.55);
}

/* Light variant — white surface, primary text, subtle border for
   separation against light backgrounds. */
.rnly-toast--light {
  background-color: var(--bg-primary, #fff);
  color: var(--text-primary, #18181b);
  border: 1px solid var(--border-primary, rgb(229 231 235));
  -webkit-box-shadow: 0 12px 32px -10px rgba(15, 23, 42, 0.18),
              0 2px 6px -2px rgba(15, 23, 42, 0.08);
  box-shadow: 0 12px 32px -10px rgba(15, 23, 42, 0.18),
              0 2px 6px -2px rgba(15, 23, 42, 0.08);
}

/* Tone tints — lead-icon only, body chrome stays variant-driven. */
.rnly-toast__icon {
  font-size: 14px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.rnly-toast--success .rnly-toast__icon { color: var(--utility-emerald-500, #10b981); }
.rnly-toast--error   .rnly-toast__icon { color: var(--utility-red-500, #ef4444); }
.rnly-toast--info    .rnly-toast__icon { color: var(--utility-blue-500, #3b82f6); }

.rnly-toast__msg {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.rnly-toast__msg strong { font-weight: 700; }

/* Reduced-motion: drop the slide, keep the fade. */
html.reduced-motion .rnly-toast { -webkit-transition: opacity 120ms ease !important; transition: opacity 120ms ease !important; }
html.reduced-motion .rnly-toast,
html.reduced-motion .rnly-toast.is-visible { -webkit-transform: translate(-50%, 0); -ms-transform: translate(-50%, 0); transform: translate(-50%, 0); }

/* ── Preferences page ─────────────────────────────────────────
   Mounted inside Account > Profile. Three columns: label, email
   toggle, in-app toggle. Critical types render the in-app toggle
   as disabled+checked + a "Critical" pill so users understand
   why they can't disable it. */

.rnly-notif-prefs { max-width: 720px; }

.rnly-notif-prefs__head {
  display: grid;
  grid-template-columns: 1fr 60px 60px;
  -webkit-box-align: end;
  -ms-flex-align: end;
  align-items: end;
  gap: 16px;
  padding-bottom: 8px;
  margin-bottom: 12px;
  border-bottom: 1px solid var(--border-primary-subtle, var(--border-primary));
}
.rnly-notif-prefs__col {
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--text-tertiary);
  text-align: center;
}

/* Master row — sits between the column headers and the per-type
   groups. Same grid layout, same horizontal inset (zero), same
   gap as the per-type rows below, so the email + in-app toggles
   line up VERTICALLY with every per-type toggle. The previous
   tinted-card treatment (padding: 12px 16px) shifted the master
   toggles 16px to the left of the per-type toggles, breaking
   that alignment. We keep a thicker top + bottom border to
   visually mark it as the master without offsetting the grid. */
.rnly-notif-prefs__master {
  display: grid;
  grid-template-columns: 1fr 60px 60px;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 16px;
  padding: 14px 0;
  margin-bottom: 16px;
  border-top: 1px solid var(--border-primary-subtle, var(--border-primary));
  border-bottom: 1px solid var(--border-primary-subtle, var(--border-primary));
  background: transparent;
}
.rnly-notif-prefs__master-label {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}
.rnly-notif-prefs__master-label strong {
  font-size: 14px;
  font-weight: 700;
  color: var(--text-primary);
}
.rnly-notif-prefs__master-sub {
  font-size: 12px;
  color: var(--text-tertiary);
  line-height: 1.35;
}

.rnly-notif-prefs__group { margin-bottom: 24px; }
.rnly-notif-prefs__group-title {
  font-size: 13px;
  font-weight: 700;
  color: var(--text-primary);
  margin: 0 0 8px;
  letter-spacing: -0.005em;
}
.rnly-notif-prefs__row {
  display: grid;
  grid-template-columns: 1fr 60px 60px;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 16px;
  padding: 8px 0;
  border-top: 1px solid var(--border-primary-subtle, var(--border-primary));
}
.rnly-notif-prefs__row:first-of-type { border-top: 0; }
.rnly-notif-prefs__label {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  color: var(--text-secondary);
}
.rnly-notif-prefs__toggle {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  cursor: pointer;
  position: relative;
}
.rnly-notif-prefs__toggle input { position: absolute; opacity: 0; pointer-events: none; }
.rnly-notif-prefs__sw {
  width: 32px;
  height: 18px;
  border-radius: 9999px;
  background-color: var(--border-primary);
  position: relative;
  -webkit-transition: background-color 120ms ease;
  transition: background-color 120ms ease;
}
.rnly-notif-prefs__sw::after {
  content: '';
  position: absolute;
  top: 2px;
  left: 2px;
  width: 14px;
  height: 14px;
  border-radius: 9999px;
  background-color: #fff;
  -webkit-transition: -webkit-transform 140ms cubic-bezier(0.16, 1, 0.3, 1);
  transition: -webkit-transform 140ms cubic-bezier(0.16, 1, 0.3, 1);
  transition: transform 140ms cubic-bezier(0.16, 1, 0.3, 1);
  transition: transform 140ms cubic-bezier(0.16, 1, 0.3, 1), -webkit-transform 140ms cubic-bezier(0.16, 1, 0.3, 1);
}
.rnly-notif-prefs__toggle input:checked + .rnly-notif-prefs__sw {
  background-color: var(--utility-emerald-800);
}
.rnly-notif-prefs__toggle input:checked + .rnly-notif-prefs__sw::after {
  -webkit-transform: translateX(14px);
  -ms-transform: translateX(14px);
  transform: translateX(14px);
}
.rnly-notif-prefs__toggle input:disabled + .rnly-notif-prefs__sw {
  opacity: 0.55;
  cursor: not-allowed;
}


/* ── Live notification toast ──────────────────────────────────
   Pops up at the bottom-center of the viewport whenever a new
   notification lands via SignalR while the tray itself is closed.
   Multiple toasts stack upward (newest at the bottom), each
   auto-dismisses after 5s. Clicking the body opens the tray;
   clicking the X dismisses.
   ─────────────────────────────────────────────────────────── */
.rnly-notif-live-host {
  position: fixed;
  left: 50%;
  bottom: 24px;
  -webkit-transform: translateX(-50%);
  -ms-transform: translateX(-50%);
  transform: translateX(-50%);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: reverse;
  -ms-flex-direction: column-reverse;
  flex-direction: column-reverse; /* newest sits at the bottom */
  gap: 10px;
  z-index: var(--z-toast);
  pointer-events: none; /* host is invisible; children claim pointer */
  max-width: calc(100vw - 24px);
}

.rnly-notif-live {
  position: relative;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 12px;
  width: 380px;
  max-width: 100%;
  padding: 12px 14px 12px 12px;
  background-color: var(--bg-modal, #fff);
  border: 1px solid var(--border-primary-subtle, var(--border-primary));
  border-radius: 14px;
  -webkit-box-shadow: 0 18px 40px -14px rgba(15, 23, 42, 0.32),
              0 2px 6px rgba(15, 23, 42, 0.08);
  box-shadow: 0 18px 40px -14px rgba(15, 23, 42, 0.32),
              0 2px 6px rgba(15, 23, 42, 0.08);
  cursor: pointer;
  pointer-events: auto;
  opacity: 0;
  -webkit-transform: translateY(12px) scale(0.98);
  -ms-transform: translateY(12px) scale(0.98);
  transform: translateY(12px) scale(0.98);
  -webkit-transition: opacity 220ms cubic-bezier(.4, 0, .2, 1),
              -webkit-transform 240ms cubic-bezier(.4, 0, .2, 1);
  transition: opacity 220ms cubic-bezier(.4, 0, .2, 1),
              -webkit-transform 240ms cubic-bezier(.4, 0, .2, 1);
  transition: opacity 220ms cubic-bezier(.4, 0, .2, 1),
              transform 240ms cubic-bezier(.4, 0, .2, 1);
  transition: opacity 220ms cubic-bezier(.4, 0, .2, 1),
              transform 240ms cubic-bezier(.4, 0, .2, 1),
              -webkit-transform 240ms cubic-bezier(.4, 0, .2, 1);
}
.rnly-notif-live.is-visible {
  opacity: 1;
  -webkit-transform: translateY(0) scale(1);
  -ms-transform: translateY(0) scale(1);
  transform: translateY(0) scale(1);
}
.rnly-notif-live:hover {
  border-color: var(--border-primary);
}

/* Avatar — matches the in-tray card style (40px disc, ringed). */
.rnly-notif-live__avatar {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  width: 36px;
  height: 36px;
  border-radius: 9999px;
  background-color: var(--bg-primary-subtle);
  background-size: cover;
  background-position: center;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  font-size: 13px;
  font-weight: 700;
  color: var(--text-secondary);
  border: 1px solid var(--border-primary-subtle, var(--border-primary));
}
.rnly-notif-live__avatar--initials::before {
  /* Initials sit naturally in the avatar via inline-flex; no extra rule */
}

/* Category badge (small disc bottom-right of avatar) */
.rnly-notif-live__cat {
  position: absolute;
  left: 32px;
  top: 30px;
  width: 18px;
  height: 18px;
  border-radius: 9999px;
  background-color: var(--alpha-emerald-900-10, #ecfdf5);
  color: var(--utility-emerald-800);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  font-size: 10px;
  border: 2px solid var(--bg-modal, #fff);
}

.rnly-notif-live__body {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 2px;
}
.rnly-notif-live__title {
  margin: 0;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--text-primary);
  line-height: 1.35;
  letter-spacing: -0.005em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.rnly-notif-live__sub {
  margin: 0;
  font-size: 12px;
  color: var(--text-secondary);
  line-height: 1.4;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.rnly-notif-live__close {
  -ms-flex-negative: 0;
  flex-shrink: 0;
  width: 24px;
  height: 24px;
  border: 0;
  background: transparent;
  color: var(--text-tertiary);
  cursor: pointer;
  border-radius: 9999px;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  font-size: 11px;
  -webkit-transition: background-color 120ms ease, color 120ms ease;
  transition: background-color 120ms ease, color 120ms ease;
}
.rnly-notif-live__close:hover {
  background-color: var(--bg-primary-subtle);
  color: var(--text-primary);
}

/* Mobile — pin the host nearer the top edge so it sits above iOS
   home-indicator chrome and reduce padding so toasts hug viewport. */
@media (max-width: 640px) {
  .rnly-notif-live-host {
    left: 12px;
    right: 12px;
    bottom: 16px;
    -webkit-transform: none;
    -ms-transform: none;
    transform: none;
    max-width: none;
  }
  .rnly-notif-live { width: auto; }
}
/* ══════════════════════════════════════════════════════════════════
   Wishlist manager — Airbnb-style "Save to wishlist" picker modal,
   square-tile index, and saved-items detail grid. Buyer-only.
   ══════════════════════════════════════════════════════════════════ */

:root {
  --bg-wishlist-card:        var(--canvas-secondary, #fff);
  --bg-wishlist-card-hover:  var(--bg-primary-subtle, #f5f5f4);
  --border-wishlist-card:    var(--border-primary-subtle, var(--border-primary, #e7e5e4));
  --text-wishlist-title:     var(--text-primary, #0f172a);
  --text-wishlist-muted:     var(--text-tertiary, #78716c);
  --bg-wishlist-overlay:     rgba(15, 23, 42, 0.55);
  --text-wishlist-overlay:   #ffffff;
}

/* ── Heart button (lives on _BuyerListingCard) ───────────────────
   Single solid heart icon with a 2px white text-stroke for the
   crisp outline + a translucent fill so the heart still reads as
   a "filled chip" against any photo. When saved the fill swaps
   to red while the white outline stays — gives a clean ringed
   pin look. The fa-regular line icon in the markup is hidden
   (kept for graceful degradation in browsers without
   -webkit-text-stroke). Position + drop-shadow inherit from
   components/listing-card.css. */
.card--listing__fav {
  border: 0;
  background: transparent;
  padding: 0;
  cursor: pointer;
  font-size: 22px;
}
/* Hide the line layer — the solid icon's text-stroke draws the
   outline now. Keeping the markup so the original DOM still
   parses if a user has -webkit-text-stroke disabled. */
.card--listing__fav .card--listing__fav-line { display: none; }
.card--listing__fav .card--listing__fav-fill {
  display: inline-block;
  color: rgba(15, 23, 42, 0.32);     /* slightly grey/translucent fill */
  -webkit-text-stroke: 2px #ffffff;  /* crisp white outline */
  paint-order: stroke fill;
  line-height: 1;
}
.card--listing__fav.is-saved .card--listing__fav-fill {
  /* Slightly-desaturated rose — closer to Airbnb's #FF385C than
     a flat red. Reads as warm + intentional, not alert. */
  color: #e11d48; /* rose-600 */
}

/* ── Inline Save button (e.g. listing detail modal header) ───────
   Non-card variant: shows outline heart by default, swaps to a
   filled rose heart when the listing is saved. */
.wl-save-inline .wl-save-inline__fill { display: none; }
.wl-save-inline.is-saved .wl-save-inline__line { display: none; }
.wl-save-inline.is-saved .wl-save-inline__fill {
  display: inline-block;
  color: #e11d48;
}


/* ── Save confirmation toast ───────────────────────────────────
   Bottom-center pill that pops after a smart-save. Carries the
   destination wishlist name + a Change link that re-opens the
   picker for the same listing. Auto-dismisses; click anywhere
   on the body (not the link) to dismiss sooner. */
.rnly-wl-toast {
  position: fixed;
  left: 50%;
  bottom: 24px;
  -webkit-transform: translate(-50%, 12px);
  -ms-transform: translate(-50%, 12px);
  transform: translate(-50%, 12px);
  z-index: var(--z-toast);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 12px;
  padding: 10px 16px 10px 14px;
  border-radius: 9999px;
  background-color: #0f172a;
  color: #fff;
  font-size: 13.5px;
  font-weight: 500;
  -webkit-box-shadow: 0 12px 32px -10px rgba(15, 23, 42, 0.55);
  box-shadow: 0 12px 32px -10px rgba(15, 23, 42, 0.55);
  opacity: 0;
  pointer-events: none;
  -webkit-transition: opacity 200ms ease, -webkit-transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
  transition: opacity 200ms ease, -webkit-transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
  transition: opacity 200ms ease, transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
  transition: opacity 200ms ease, transform 220ms cubic-bezier(0.22, 1, 0.36, 1), -webkit-transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
  max-width: calc(100vw - 32px);
}
.rnly-wl-toast.is-visible {
  opacity: 1;
  pointer-events: auto;
  -webkit-transform: translate(-50%, 0);
  -ms-transform: translate(-50%, 0);
  transform: translate(-50%, 0);
}
.rnly-wl-toast__icon { color: #e11d48; font-size: 14px; }
.rnly-wl-toast__msg  { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.rnly-wl-toast__msg strong { font-weight: 700; color: #fff; }
.rnly-wl-toast__action {
  border: 0;
  background: transparent;
  color: #fff;
  font-size: 13px;
  font-weight: 700;
  text-decoration: underline;
  text-underline-offset: 2px;
  cursor: pointer;
  padding: 4px 4px 4px 8px;
  border-left: 1px solid rgba(255, 255, 255, 0.18);
  margin-left: 4px;
}
.rnly-wl-toast__action:hover { color: #fca5a5; }

/* ── Picker modal ─────────────────────────────────────────────── */

.rnly-wl-modal {
  position: fixed;
  inset: 0;
  z-index: var(--z-modal);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  pointer-events: none;
  /* safe area (tq-9355): B. A centred modal: the overlay root pads the insets, so the dialog clears them. */
  padding: calc(0px + env(safe-area-inset-top, 0px)) max(0px, env(safe-area-inset-right, 0px))
           calc(0px + env(safe-area-inset-bottom, 0px)) max(0px, env(safe-area-inset-left, 0px));
}
.rnly-wl-modal[hidden] { display: none; }

.rnly-wl-modal__backdrop {
  position: absolute;
  inset: 0;
  background-color: rgba(15, 23, 42, 0.45);
  opacity: 0;
  -webkit-transition: opacity 200ms ease;
  transition: opacity 200ms ease;
  pointer-events: none;
}
.rnly-wl-modal.is-open .rnly-wl-modal__backdrop { opacity: 1; pointer-events: auto; }

.rnly-wl-modal__dialog {
  position: relative;
  width: 580px;
  max-width: calc(100vw - 32px);
  max-height: calc(100vh - 64px);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  background-color: var(--bg-modal, #fff);
  border-radius: 16px;
  border: 1px solid var(--border-primary);
  -webkit-box-shadow: 0 24px 60px -12px rgba(15, 23, 42, 0.45);
  box-shadow: 0 24px 60px -12px rgba(15, 23, 42, 0.45);
  -webkit-transform: translateY(8px);
  -ms-transform: translateY(8px);
  transform: translateY(8px);
  opacity: 0;
  -webkit-transition: opacity 200ms ease, -webkit-transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
  transition: opacity 200ms ease, -webkit-transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
  transition: transform 220ms cubic-bezier(0.22, 1, 0.36, 1), opacity 200ms ease;
  transition: transform 220ms cubic-bezier(0.22, 1, 0.36, 1), opacity 200ms ease, -webkit-transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
  pointer-events: auto;
  overflow: hidden;
}
.rnly-wl-modal.is-open .rnly-wl-modal__dialog {
  -webkit-transform: translateY(0);
  -ms-transform: translateY(0);
  transform: translateY(0);
  opacity: 1;
}
/* Smaller dialog variant — used by the Create-wishlist modal so
   the create form feels purpose-built rather than picker-sized. */
.rnly-wl-modal__dialog--sm { width: 440px; }

/* Create-wishlist modal stacks above the picker so clicks land on
   its dialog (not the picker's backdrop sitting at the same
   z-index in DOM order). Two-level bump keeps it above the
   wishlist toast (1085) too. */
.rnly-wl-modal--create { z-index: var(--z-modal-stacked); }

.rnly-wl-modal__head {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 12px;
  padding: 20px 22px 14px;
  border-bottom: 1px solid var(--border-primary-subtle, var(--border-primary));
}
.rnly-wl-modal__title {
  margin: 0;
  font-size: 17px;
  font-weight: 700;
  color: var(--text-primary);
  letter-spacing: -0.01em;
}
.rnly-wl-modal__sub {
  margin: 4px 0 0;
  font-size: 12.5px;
  color: var(--text-tertiary);
}
.rnly-wl-modal__close {
  width: 30px;
  height: 30px;
  border-radius: 9999px;
  border: 0;
  background: transparent;
  color: var(--text-secondary);
  cursor: pointer;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}
.rnly-wl-modal__close:hover {
  background-color: var(--bg-primary-subtle);
  color: var(--text-primary);
}

/* Create-wishlist modal — body + footer layout. Body holds the
   form-control inputs; footer holds the Cancel/Create button row.
   Both use design-system tokens via the shared form-control +
   btn-* classes — we only own the layout (padding, gap, label
   rhythm). */
.rnly-wl-modal__create-body {
  padding: 18px 22px 6px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
}
.rnly-wl-modal__create-label {
  display: block;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--text-tertiary);
  margin-bottom: 6px;
}
.rnly-wl-modal__create-label--mt { margin-top: 14px; }
.rnly-wl-modal__optional {
  font-weight: 500;
  text-transform: none;
  letter-spacing: 0;
  color: var(--text-quaternary, var(--text-tertiary));
  margin-left: 2px;
}
.rnly-wl-modal__create-foot {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
  gap: 6px;
  padding: 14px 22px 18px;
  border-top: 1px solid var(--border-primary-subtle, var(--border-primary));
}

.rnly-wl-modal__list {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-height: 240px;
  max-height: 60vh;
  overflow-y: auto;
  padding: 12px 16px;
}

.rnly-wl-modal__loading,
.rnly-wl-modal__empty,
.rnly-wl-modal__error {
  padding: 24px 16px;
  text-align: center;
  color: var(--text-tertiary);
  font-size: 13px;
}
.rnly-wl-modal__empty p { margin: 0 0 4px; }
.rnly-wl-modal__empty-sub { color: var(--text-quaternary, var(--text-tertiary)); font-size: 12px; }

/* Empty-state CTA — centered icon + title + sub + primary button.
   Replaces the footer actions for first-time users so the only path
   forward is to create their first wishlist. */
.rnly-wl-modal__empty--cta {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  padding: 36px 24px 32px;
  min-height: 240px;
}
.rnly-wl-modal__empty-icon {
  width: 48px;
  height: 48px;
  border-radius: 9999px;
  background-color: var(--bg-primary-subtle);
  color: var(--text-secondary);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  font-size: 20px;
  margin-bottom: 12px;
}
.rnly-wl-modal__empty-title {
  margin: 0 0 4px;
  font-size: 14px;
  font-weight: 700;
  color: var(--text-primary);
}
.rnly-wl-modal__empty--cta .rnly-wl-modal__empty-sub { margin-bottom: 16px; }
.rnly-wl-modal__empty-cta {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
}
.rnly-wl-modal__error { color: #b91c1c; }

.rnly-wl-modal__foot {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 12px;
  padding: 14px 22px 18px;
  border-top: 1px solid var(--border-primary-subtle, var(--border-primary));
}
.rnly-wl-modal__foot-actions {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
}
.rnly-wl-modal__new-btn {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  padding: 6px 10px;
  border: 0;
  border-radius: 8px;
  background: transparent;
  color: var(--text-primary);
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  -webkit-transition: background-color 120ms ease;
  transition: background-color 120ms ease;
}
.rnly-wl-modal__new-btn:hover {
  background-color: var(--bg-primary-subtle);
}

/* ── Picker row ───────────────────────────────────────────────── */

.rnly-wl-row {
  width: 100%;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 12px;
  padding: 8px 10px;
  border: 0;
  border-radius: 10px;
  background: transparent;
  cursor: pointer;
  text-align: left;
  -webkit-transition: background-color 120ms ease;
  transition: background-color 120ms ease;
}
.rnly-wl-row + .rnly-wl-row { margin-top: 2px; }
.rnly-wl-row:hover { background-color: var(--bg-primary-subtle); }
.rnly-wl-row__thumb {
  position: relative;
  width: 64px;
  height: 64px;
  border-radius: 8px;
  border: 1px solid var(--border-primary-subtle, var(--border-primary));
  background-color: var(--bg-primary-subtle);
  -ms-flex-negative: 0;
  flex-shrink: 0;
  overflow: hidden;
  display: grid;
  gap: 1px;
}
.rnly-wl-row__thumb-cell {
  background-size: cover;
  background-position: center;
  background-color: var(--bg-primary-subtle);
}
.rnly-wl-row__thumb-cell--empty {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  color: var(--text-quaternary, var(--text-tertiary));
  font-size: 22px;
  background-image: linear-gradient(135deg,
    var(--alpha-emerald-900-10, rgba(6, 95, 70, 0.06)) 0%,
    var(--bg-primary-subtle, #f5f5f4) 100%);
}
/* Collage variants — drive the grid via the thumb count class. */
.rnly-wl-row__thumb--n0 { grid-template: 1fr / 1fr; }
.rnly-wl-row__thumb--n1 { grid-template: 1fr / 1fr; }
.rnly-wl-row__thumb--n2 { grid-template: 1fr / 1fr 1fr; }
.rnly-wl-row__thumb--n3 { grid-template: 1fr 1fr / 1fr 1fr; }
.rnly-wl-row__thumb--n3 .rnly-wl-row__thumb-cell:first-child { grid-row: 1 / span 2; }
.rnly-wl-row__thumb--n4plus { grid-template: 1fr 1fr / 1fr 1fr; }

/* +N overlay — clipped to the bottom-right cell so the user can
   still see the other 3 thumbs through the collage. */
.rnly-wl-row__more {
  position: absolute;
  inset: 0;
  background-color: rgba(15, 23, 42, 0.55);
  color: #fff;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: end;
  -ms-flex-align: end;
  align-items: flex-end;
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
  padding: 3px 5px;
  font-size: 9.5px;
  font-weight: 700;
  letter-spacing: 0.02em;
  pointer-events: none;
  clip-path: inset(50% 0 0 50%);
}
.rnly-wl-row__body { -webkit-box-flex: 1; -ms-flex: 1; flex: 1; min-width: 0; }
.rnly-wl-row__name {
  font-size: 13.5px;
  font-weight: 600;
  color: var(--text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.rnly-wl-row__meta {
  font-size: 11.5px;
  color: var(--text-tertiary);
  margin-top: 2px;
}
.rnly-wl-row__check {
  width: 22px;
  height: 22px;
  border-radius: 9999px;
  border: 1.5px solid var(--border-primary);
  background-color: var(--bg-modal, #fff);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  color: transparent;
  -ms-flex-negative: 0;
  flex-shrink: 0;
  -webkit-transition: background-color 120ms ease, border-color 120ms ease, color 120ms ease;
  transition: background-color 120ms ease, border-color 120ms ease, color 120ms ease;
}
.rnly-wl-row__check.is-on {
  background-color: var(--utility-emerald-800);
  border-color: var(--utility-emerald-800);
  color: #fff;
}
.rnly-wl-row__check i { font-size: 11px; }

/* ── Wishlists index page ─────────────────────────────────────── */

.rnly-wl-index {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 18px;
  /* Horizontal padding intentionally omitted — the parent
     .buyer-section already supplies clamp(20px, 4vw, 48px), so
     the grid sits flush with the section title above it. Adding
     padding here pushes the first card inward and breaks the
     left-edge alignment with the header. */
  padding: 16px 0 32px;
}

.rnly-wl-tile {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
  text-decoration: none;
  color: inherit;
  cursor: pointer;
}
.rnly-wl-tile__thumb {
  position: relative;
  aspect-ratio: 1 / 1;
  border-radius: 14px;
  overflow: hidden;
  background-color: var(--bg-primary-subtle);
  border: 1px solid var(--border-wishlist-card);
  display: grid;
  gap: 2px;
}
.rnly-wl-tile__thumb-cell {
  background-size: cover;
  background-position: center;
  background-color: var(--bg-primary-subtle);
}
.rnly-wl-tile__thumb-cell--empty {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  color: var(--text-quaternary, var(--text-tertiary));
  font-size: 28px;
}

/* Collage variants — drive the grid via the thumb count class. */
.rnly-wl-tile__thumb--n0 { grid-template: 1fr / 1fr; }
.rnly-wl-tile__thumb--n1 { grid-template: 1fr / 1fr; }
.rnly-wl-tile__thumb--n2 { grid-template: 1fr / 1fr 1fr; }
.rnly-wl-tile__thumb--n3 { grid-template: 1fr 1fr / 1fr 1fr; }
.rnly-wl-tile__thumb--n3 .rnly-wl-tile__thumb-cell:first-child { grid-row: 1 / span 2; }
.rnly-wl-tile__thumb--n4plus { grid-template: 1fr 1fr / 1fr 1fr; }

.rnly-wl-tile__more {
  position: absolute;
  inset: 0;
  background-color: var(--bg-wishlist-overlay);
  color: var(--text-wishlist-overlay);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: end;
  -ms-flex-align: end;
  align-items: flex-end;
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
  padding: 12px;
  font-size: 14px;
  font-weight: 700;
  letter-spacing: 0.01em;
  pointer-events: none;
  /* Cover only the bottom-right cell. */
  clip-path: inset(50% 0 0 50%);
}

.rnly-wl-tile__name {
  font-size: 14.5px;
  font-weight: 700;
  color: var(--text-wishlist-title);
  letter-spacing: -0.005em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.rnly-wl-tile__count {
  font-size: 12.5px;
  color: var(--text-wishlist-muted);
  margin-top: -4px;
}

/* "Create new wishlist" tile — visually mirrors the seller's
   `card--listing-seller--add` button (see seller-listing-card.css):
   dashed neutral border on a transparent surface, tertiary text +
   icon, then a neutral hover state instead of an emerald accent.
   Keeps the create affordance calm + consistent with the create-
   listing pattern users already know from the seller side. */
.rnly-wl-tile--create {
  border: 0;
  background: transparent;
  text-align: left;
  cursor: pointer;
  padding: 0;
  font: inherit;
  color: inherit;
}
.rnly-wl-tile--create .rnly-wl-tile__thumb {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  border-width: 2px;
  border-style: dashed;
  border-color: var(--border-primary);
  background-color: transparent;
  color: var(--text-tertiary);
  -webkit-transition: border-color 160ms ease, background-color 160ms ease, color 160ms ease;
  transition: border-color 160ms ease, background-color 160ms ease, color 160ms ease;
}
.rnly-wl-tile--create:hover .rnly-wl-tile__thumb {
  border-color: var(--text-secondary);
  background-color: var(--utility-neutral-50, var(--bg-primary-subtle));
  color: var(--text-primary);
}

.rnly-wl-index__empty {
  grid-column: 1 / -1;
  padding: 64px 20px;
  text-align: center;
  color: var(--text-tertiary);
}
.rnly-wl-index__empty i {
  display: block;
  font-size: 36px;
  margin-bottom: 10px;
  color: var(--text-quaternary, var(--text-tertiary));
}

/* ── Wishlist detail page ─────────────────────────────────────── */

.rnly-wl-detail {
  padding: 16px clamp(20px, 4vw, 48px) 32px;
}

.rnly-wl-detail__empty {
  padding: 64px 20px;
  text-align: center;
  color: var(--text-tertiary);
}
.rnly-wl-detail__empty i {
  display: block;
  font-size: 36px;
  margin-bottom: 10px;
  color: var(--text-quaternary, var(--text-tertiary));
}
/* ==========================================================================
   RNLY — Reviews flow
   Star-rating widget (used inside the leave-a-review modal),
   review cards (used on listing detail + the /Reviews page),
   pending-review row CTA, and the small summary line.
   ========================================================================== */

/* ── Star widget ─────────────────────────────────────────────── */
.rnly-review-row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  gap: 12px;
  padding: 8px 0;
  border-bottom: 1px solid var(--border-primary-subtle, var(--border-primary));
}
.rnly-review-row:last-of-type { border-bottom: 0; }
.rnly-review-label {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary);
}
.rnly-review-stars {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 4px;
}
.rnly-review-star {
  border: 0;
  background: transparent;
  padding: 2px;
  cursor: pointer;
  font-size: 18px;
  color: var(--text-quaternary, var(--text-tertiary));
  line-height: 1;
  -webkit-transition: color 80ms ease;
  transition: color 80ms ease;
}
.rnly-review-star:hover { color: #f59e0b; }
.rnly-review-star.is-on { color: #f59e0b; }
.rnly-review-stars[role="radiogroup"]:hover .rnly-review-star { color: var(--text-quaternary); }
.rnly-review-stars[role="radiogroup"]:hover .rnly-review-star:hover,
.rnly-review-stars[role="radiogroup"]:hover .rnly-review-star:hover ~ .rnly-review-star { color: var(--text-quaternary); }
/* Reverse-order trick: when hovering, paint the hovered star + every
   star BEFORE it solid. Stars are in document order so we use sibling
   selectors with a flex-direction: row-reverse pattern. Skipping for
   v1 — straight click-to-set works fine. */

/* ── Inline summary (4.8 · 23 reviews) ─────────────────────── */
.rnly-review-summary {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  font-size: 13px;
  color: var(--text-primary);
}
.rnly-review-summary i { color: #f59e0b; font-size: 12px; }
.rnly-review-summary__count { color: var(--text-tertiary); font-weight: 500; }

/* ── Review card (listing detail + /Reviews page) ──────────── */
.rnly-review-card {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 8px;
  padding: 14px;
  border: 1px solid var(--border-primary-subtle, var(--border-primary));
  border-radius: 12px;
  background-color: var(--bg-modal, #fff);
}
.rnly-review-card__head {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 10px;
}
.rnly-review-card__avatar {
  width: 36px;
  height: 36px;
  border-radius: 9999px;
  background-color: var(--bg-primary-subtle);
  background-size: cover;
  background-position: center;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  font-size: 13px;
  font-weight: 700;
  color: var(--text-secondary);
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.rnly-review-card__name {
  font-size: 13.5px;
  font-weight: 700;
  color: var(--text-primary);
}
.rnly-review-card__meta {
  font-size: 11.5px;
  color: var(--text-tertiary);
}
.rnly-review-card__stars {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 2px;
  margin-left: auto;
  color: #f59e0b;
  font-size: 12px;
  line-height: 1;
}
.rnly-review-card__stars i { color: #f59e0b; }
.rnly-review-card__stars i.is-empty { color: var(--text-quaternary, var(--text-tertiary)); }
.rnly-review-card__body {
  margin: 0;
  font-size: 13px;
  color: var(--text-primary);
  line-height: 1.5;
  white-space: pre-wrap;
}

/* ── Reviews section grid (listing detail) ─────────────────── */
.rnly-review-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: 12px;
}
.rnly-review-empty {
  padding: 32px 20px;
  text-align: center;
  border: 1px dashed var(--border-primary);
  border-radius: 14px;
  background-color: var(--bg-primary-subtle);
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
}
.rnly-review-empty__stars {
  color: var(--utility-amber-500, #f59e0b);
  font-size: 22px;
  letter-spacing: 4px;
  line-height: 1;
  margin-bottom: 6px;
  opacity: 0.7;
}
.rnly-review-empty__title {
  margin: 0;
  font-size: 15px;
  font-weight: 700;
  color: var(--text-primary);
}
.rnly-review-empty__sub {
  margin: 0;
  font-size: 13px;
  color: var(--text-tertiary);
  max-width: 360px;
  line-height: 1.5;
}

/* ── Pending review row (on /Reviews Pending tab + CTAs) ───── */
.rnly-review-pending {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 12px;
  padding: 14px;
  border: 1px solid var(--border-primary-subtle, var(--border-primary));
  border-radius: 12px;
  background-color: var(--bg-modal, #fff);
}
.rnly-review-pending__body {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 0;
}
.rnly-review-pending__name {
  font-size: 13.5px;
  font-weight: 700;
  color: var(--text-primary);
}
.rnly-review-pending__sub {
  font-size: 12px;
  color: var(--text-tertiary);
}
/* ==========================================================================
   RNLY — admin shell
   The /admin/* surface now uses the standard app-shell + sidebar +
   page-header + table + detail-section primitives, so this file is
   intentionally tiny. Only utility classes that ALSO leak into a few
   non-admin pages (Help Centre, Support modal) live here.
   ========================================================================== */

/* Compact link variant — used in the Help Centre and Support modal
   for "View my tickets" / "Clear search" / "Contact support" links.
   Despite the name, this is not admin-specific anymore. */
.rnly-admin-link {
  color: var(--utility-emerald-800, #065f46);
  font-weight: 600;
  text-decoration: none;
  font-size: 13px;
}
.rnly-admin-link:hover { text-decoration: underline; }

/* Lightweight empty-state row — small, centered tertiary text.
   Used by the Help Centre's user-facing ticket list. */
.rnly-admin-empty {
  text-align: center;
  color: var(--text-tertiary);
  padding: 24px;
  font-size: 13px;
}
/* ==========================================================================
   RNLY — Public Help Centre (/Help and /Help/Articles/{slug})
   Editorial-leaning hero + category cards + article reading layout
   with a "What's on this page" sidebar.
   ========================================================================== */

/* The frame-stage has overflow:hidden by design (the layout
   expects each page to own its scroll region), so the help page
   itself becomes the scroll container. We let it span the full
   frame-stage width so the scrollbar sits at the browser edge,
   and center the content via inner wrappers (.rnly-help-page > *). */
.rnly-help-page {
  height: 100%;
  overflow-y: auto;
  padding: 32px 0 64px;
}
.rnly-help-page > * {
  max-width: 1100px;
  margin-left: auto;
  margin-right: auto;
  padding-left: clamp(20px, 4vw, 48px);
  padding-right: clamp(20px, 4vw, 48px);
}

/* Compact hero — the help page doesn't need a marketing-sized
   hero, just a slim header band with the search pill on top.
   Keyed off body.is-help-page (_Layout sets it for Help/Index; tq-8220
   replaced a body:has()) so we only override .rnly-hero on a help page;
   no global hero size change. */
body.is-help-page .rnly-hero { min-height: 180px; }
body.is-help-page .rnly-hero__title {
  font-size: 1.625rem;
  margin-bottom: 0.125rem;
}
body.is-help-page .rnly-hero__subtitle {
  font-size: 0.8125rem;
  margin-bottom: 0.75rem;
}
body.is-help-page .rnly-hero__body-inner { padding: 0.25rem 1rem 0; }
body.is-help-page .rnly-hero__content { padding: 0 1rem 2rem; }


/* Search bar that sits on top of the Unsplash hero — same pill +
   white-elevated treatment as the home page's search, but with a
   single input + dropdown instead of the segmented search. */
.rnly-help-hero__search {
  position: relative;
  background-color: #fff;
  border-radius: 9999px;
  padding: 6px 14px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 10px;
  width: min(640px, 92vw);
  -webkit-box-shadow: 0 12px 32px -8px rgba(0,0,0,0.25);
  box-shadow: 0 12px 32px -8px rgba(0,0,0,0.25);
}
.rnly-help-hero__clear {
  border: 0;
  background: transparent;
  color: var(--text-tertiary);
  cursor: pointer;
  padding: 4px;
  font-size: 14px;
  line-height: 1;
  border-radius: 9999px;
}
.rnly-help-hero__clear:hover { color: var(--text-primary); }
.rnly-help-search-results { margin-bottom: 32px; }
.rnly-help-hero__search i { color: var(--text-tertiary); }
.rnly-help-hero__search input {
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  border: 0;
  outline: none !important;
  background: transparent;
  padding: 10px 0;
  font-size: 15px;
  color: var(--text-primary);
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
}
.rnly-help-hero__search input:focus,
.rnly-help-hero__search input:focus-visible {
  outline: none !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  border: 0 !important;
}
.rnly-help-hero__search input::-webkit-search-decoration,
.rnly-help-hero__search input::-webkit-search-cancel-button,
.rnly-help-hero__search input::-webkit-search-results-button,
.rnly-help-hero__search input::-webkit-search-results-decoration {
  -webkit-appearance: none;
  appearance: none;
}

.rnly-help-section__title {
  font-size: 13px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--text-tertiary);
  margin: 0 0 14px;
}

.rnly-help-categories { margin-bottom: 40px; }
.rnly-help-categories .rnly-help-section__title { text-align: center; }
.rnly-help-category-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: 12px;
}
.rnly-help-category-card {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 14px;
  padding: 16px;
  border-radius: 12px;
  background-color: #fff;
  border: 1px solid var(--border-primary-subtle, var(--border-primary));
  text-decoration: none;
  color: var(--text-primary);
  -webkit-transition: border-color 120ms ease;
  transition: border-color 120ms ease;
}
.rnly-help-category-card:hover {
  border-color: var(--utility-emerald-800);
}
.rnly-help-category-card.is-active {
  border-color: var(--utility-emerald-800);
  background-color: var(--bg-card-hover-surface);
  -webkit-box-shadow: var(--shadow-sm);
  box-shadow: var(--shadow-sm);
}
.rnly-help-category-card__icon {
  width: 40px; height: 40px;
  border-radius: 10px;
  background-color: var(--bg-primary-subtle);
  color: var(--utility-emerald-800);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center;
  font-size: 16px;
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.rnly-help-category-card__name {
  margin: 0;
  font-size: 14.5px;
  font-weight: 700;
  line-height: 1.2;
}
.rnly-help-category-card__count {
  margin: 0;
  font-size: 12px;
  color: var(--text-tertiary);
  line-height: 1.2;
}

.rnly-help-articles { margin-bottom: 40px; }
.rnly-help-article-list {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: 12px;
}
.rnly-help-article-card {
  display: block;
  padding: 16px;
  border-radius: 12px;
  background-color: #fff;
  border: 1px solid var(--border-primary-subtle, var(--border-primary));
  text-decoration: none;
  color: var(--text-primary);
  -webkit-transition: border-color 120ms ease;
  transition: border-color 120ms ease;
}
.rnly-help-article-card:hover { border-color: var(--utility-emerald-800); }
.rnly-help-article-card__title { margin: 0 0 6px; font-size: 14.5px; font-weight: 700; }
.rnly-help-article-card__summary { margin: 0 0 6px; font-size: 12.5px; color: var(--text-secondary); }
.rnly-help-article-card__meta { margin: 0; font-size: 11px; color: var(--text-tertiary); }
.rnly-help-empty {
  padding: 32px;
  text-align: center;
  color: var(--text-tertiary);
  border: 1px dashed var(--border-primary);
  border-radius: 12px;
}
.rnly-help-empty i { font-size: 28px; margin-bottom: 10px; display: block; }
.rnly-help-empty__sub { margin: 6px 0 0; font-size: 13px; }

.rnly-help-cta {
  margin-top: 32px;
  padding: 32px;
  border-radius: 18px;
  background-color: var(--bg-primary-subtle);
  text-align: center;
}
.rnly-help-cta__title { margin: 0 0 6px; font-size: 18px; font-weight: 800; }
.rnly-help-cta__sub { margin: 0 0 14px; font-size: 13.5px; color: var(--text-tertiary); }

/* ==========================================================================
   SUPPORT + FLAG MODALS — shared sizing/padding so the form fields
   breathe inside the modal frame. Mirrors _ContactSellerModal.
   ========================================================================== */
#rnly-support-modal .modal-dialog,
#rnly-flag-modal .modal-dialog {
  width: 100%;
  max-width: 520px;
  margin: auto;
}
#rnly-support-modal .modal-content,
#rnly-flag-modal .modal-content {
  background-color: var(--canvas-secondary, var(--bg-surface));
  border: 1px solid var(--border-primary);
  border-radius: 16px;
  overflow: hidden;
  -webkit-box-shadow: 0 24px 64px rgba(15, 23, 42, 0.24);
  box-shadow: 0 24px 64px rgba(15, 23, 42, 0.24);
}
#rnly-support-modal .modal-header,
#rnly-flag-modal .modal-header {
  padding: 20px 24px 14px;
  border-bottom: 1px solid var(--border-primary-subtle, var(--border-primary));
}
#rnly-support-modal .modal-body,
#rnly-flag-modal .modal-body {
  padding: 18px 24px 8px;
}
#rnly-support-modal .modal-body label.form-label,
#rnly-flag-modal .modal-body label.form-label {
  display: block;
  margin-top: 14px;
  margin-bottom: 6px;
}
#rnly-support-modal .modal-body label.form-label:first-of-type,
#rnly-flag-modal .modal-body label.form-label:first-of-type {
  margin-top: 0;
}
#rnly-support-modal .modal-footer,
#rnly-flag-modal .modal-footer {
  padding: 14px 24px 20px;
  border-top: 1px solid var(--border-primary-subtle, var(--border-primary));
}

/* Hero block — large green lifesaver disc + reassurance line, sat
   above the form fields. Replaces the previous one-line inline
   icon + "View my tickets" link so the modal opens with a calm,
   centered "we've got you" beat before the form work begins. */
.rnly-support-hero {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 12px;
  padding: 4px 0 18px;
  text-align: center;
}
.rnly-support-hero__icon {
  width: 64px;
  height: 64px;
  border-radius: 9999px;
  background-color: var(--alpha-emerald-900-10, rgba(6, 95, 70, 0.10));
  color: var(--utility-emerald-800);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  font-size: 30px;
  line-height: 1;
}
.rnly-support-hero__msg {
  margin: 0;
  font-size: 13px;
  color: var(--text-secondary);
  max-width: 320px;
  line-height: 1.45;
}

/* ==========================================================================
   DOCS-STYLE ARTICLE SHELL — /Help/Articles/{slug}
   3-column shell that sits inside the standard app-frame:
     LEFT     col-span-2  (search + nav)
     CONTENT  col-span-8  (#rnly-help-scrollspy / .panel-content)
     RIGHT    col-span-2  (On this page TOC)
   Mirrors Areas/Design/Views/Home/Index.cshtml visually (search at top,
   muted uppercase category labels, blue left-border active indicator).
   ========================================================================== */

/* Search row — same look as the design-docs left rail header. */
.rnly-help-docs__search-row {
  background-color: var(--bg-surface);
}
.rnly-help-docs__search-icon { color: var(--text-tertiary); }
.rnly-help-docs__search-clear { color: var(--text-tertiary); }

/* Left rail nav list. Tailwind-friendly resets first, then the
   category-label / nav-link primitives. */
.rnly-help-docs__nav {
  list-style: none;
  margin: 0;
  padding: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 2px;
}
.rnly-help-docs__nav-home {
  margin-bottom: 4px;
}
.rnly-help-docs__nav-home-link {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  padding: 4px 8px;
  border-radius: 6px;
  font-size: 13px;
  color: var(--text-secondary);
  text-decoration: none;
}
.rnly-help-docs__nav-home-link i { font-size: 12px; }
.rnly-help-docs__nav-home-link:hover {
  background-color: var(--bg-primary-subtle);
  color: var(--text-primary);
}

/* Muted uppercase group labels — match design-docs typography. */
.rnly-help-docs__nav-cat {
  padding: 14px 0 4px 16px;
  margin-left: 2px;
  font-size: 0.625rem;            /* ~text-2xs */
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--text-tertiary);
  opacity: 0.7;
  list-style: none;
}

/* Article links — thin left bar that turns blue when active. */
.rnly-help-docs__nav-link {
  display: block;
  padding: 4px 8px 4px 16px;
  margin-left: 2px;
  font-size: 13px;
  line-height: 1.4;
  color: var(--text-secondary);
  text-decoration: none;
  border-left: 2px solid transparent;
  -webkit-transition: color 150ms ease, border-color 150ms ease, background-color 150ms ease;
  transition: color 150ms ease, border-color 150ms ease, background-color 150ms ease;
}
.rnly-help-docs__nav-link:hover {
  color: var(--text-primary);
  background-color: var(--bg-primary-subtle);
}
.rnly-help-docs__nav-link.is-active {
  color: var(--text-primary);
  font-weight: 600;
  border-left-color: var(--utility-emerald-800);
  background-color: transparent;
}

/* Main reading column. .panel-content already does overflow-y:auto;
   we just give it comfortable horizontal padding and a top scroll
   margin so anchor jumps clear the top edge. */
.rnly-help-docs__main { background-color: var(--bg-canvas, #fff); }
.rnly-help-docs__scroll {
  padding: 32px clamp(24px, 4vw, 56px) 96px;
}
.rnly-help-docs__article {
  max-width: 760px;
  margin: 0 auto;
}
.rnly-help-docs__back {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  margin-bottom: 14px;
  padding: 6px 10px 6px 8px;
  border-radius: 8px;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--text-secondary);
  text-decoration: none;
  -webkit-transition: background-color 120ms ease, color 120ms ease;
  transition: background-color 120ms ease, color 120ms ease;
}
.rnly-help-docs__back:hover {
  background-color: var(--bg-primary-subtle);
  color: var(--utility-emerald-800);
}
.rnly-help-docs__back i { font-size: 11px; }

.rnly-help-docs__crumb {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  gap: 6px;
  margin-bottom: 14px;
  font-size: 12px;
  color: var(--text-tertiary);
}
.rnly-help-docs__crumb a {
  color: var(--text-tertiary);
  text-decoration: none;
}
.rnly-help-docs__crumb a:hover { color: var(--text-primary); }
.rnly-help-docs__crumb-sep { color: var(--text-quaternary, var(--text-tertiary)); }

.rnly-help-docs__title {
  font-size: clamp(28px, 3.5vw, 38px);
  font-weight: 800;
  letter-spacing: -0.02em;
  margin: 0 0 12px;
  color: var(--text-primary);
  line-height: 1.15;
}
.rnly-help-docs__summary {
  font-size: 16px;
  color: var(--text-secondary);
  margin: 0 0 28px;
  line-height: 1.55;
}

/* Article body typography. Each h2/h3 gets scroll-margin-top so
   anchored navigation lands below the panel's invisible scroll-top. */
.rnly-help-docs__body {
  font-size: 15.5px;
  color: var(--text-primary);
  line-height: 1.7;
}
.rnly-help-docs__body h2,
.rnly-help-docs__body h3 { scroll-margin-top: 24px; }
.rnly-help-docs__body h2 {
  font-size: 22px;
  font-weight: 800;
  margin: 36px 0 12px;
  letter-spacing: -0.01em;
}
.rnly-help-docs__body h3 {
  font-size: 17px;
  font-weight: 700;
  margin: 26px 0 8px;
}
.rnly-help-docs__body p { margin: 0 0 14px; }
.rnly-help-docs__body ul,
.rnly-help-docs__body ol { margin: 0 0 14px 24px; }
.rnly-help-docs__body li { margin: 4px 0; }
.rnly-help-docs__body code {
  font-size: 13px;
  background-color: var(--bg-primary-subtle);
  padding: 2px 6px;
  border-radius: 4px;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
.rnly-help-docs__body pre {
  background-color: var(--bg-primary-subtle);
  padding: 14px 16px;
  border-radius: 8px;
  overflow-x: auto;
  font-size: 13px;
  margin: 0 0 14px;
}
.rnly-help-docs__body a {
  color: var(--utility-emerald-800);
  text-decoration: underline;
}

/* Related-articles block — sits below the support CTA. */
.rnly-help-docs__related {
  margin-top: 32px;
  padding-top: 20px;
  border-top: 1px solid var(--border-primary-subtle, var(--border-primary));
}
.rnly-help-docs__related h3 {
  font-size: 11px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--text-tertiary);
  margin: 0 0 10px;
}
.rnly-help-docs__related ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 4px;
}
.rnly-help-docs__related a {
  font-size: 14px;
  color: var(--text-secondary);
  text-decoration: none;
}
.rnly-help-docs__related a:hover { color: var(--utility-emerald-800); }

/* Right rail — On this page. */
.rnly-help-docs__toc-wrap { padding: 24px 16px; }
.rnly-help-docs__toc-label {
  font-size: 0.625rem;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--text-tertiary);
  opacity: 0.7;
  margin-bottom: 12px;
}
.rnly-help-docs__toc {
  list-style: none;
  margin: 0;
  padding: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 2px;
}
.rnly-help-docs__toc-link {
  display: block;
  padding: 4px 8px 4px 12px;
  font-size: 12.5px;
  line-height: 1.45;
  color: var(--text-secondary);
  text-decoration: none;
  border-left: 2px solid transparent;
  -webkit-transition: color 150ms ease, border-color 150ms ease;
  transition: color 150ms ease, border-color 150ms ease;
}
.rnly-help-docs__toc-link:hover { color: var(--text-primary); }
.rnly-help-docs__toc-link--sub { padding-left: 24px; font-size: 12px; }
.rnly-help-docs__toc-link.is-active {
  color: var(--text-primary);
  font-weight: 600;
  border-left-color: var(--utility-emerald-800);
}

/* Responsive — collapse the rails on narrower viewports. */
@media (max-width: 1024px) {
  .rnly-help-docs__right { display: none; }
  .rnly-help-docs__main { grid-column: span 10 / span 10; }
}
@media (max-width: 768px) {
  .rnly-help-docs__left { display: none; }
  .rnly-help-docs__main { grid-column: span 12 / span 12; }
  .rnly-help-docs__scroll { padding: 24px 16px 80px; }
}
.rnly-help-article__cta {
  margin-top: 40px;
  padding: 20px;
  border-radius: 12px;
  background-color: var(--bg-primary-subtle);
  border: 1px solid var(--border-primary-subtle, var(--border-primary));
}
.rnly-help-article__cta h3 { margin: 0 0 4px; font-size: 16px; font-weight: 800; }
.rnly-help-article__cta p { margin: 0 0 12px; font-size: 13.5px; color: var(--text-secondary); }

/* Prev / Next pager — full-width row at the bottom of the article
   body. Two-column grid; either cell can be empty when the article
   sits at the edge of its category. */
.rnly-help-article__pager {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
  margin-top: 28px;
}
.rnly-help-article__pager-link {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 4px;
  padding: 14px 16px;
  border: 1px solid var(--border-primary-subtle, var(--border-primary));
  border-radius: 12px;
  text-decoration: none;
  color: var(--text-primary);
  background-color: #fff;
  -webkit-transition: border-color 120ms ease, background-color 120ms ease;
  transition: border-color 120ms ease, background-color 120ms ease;
}
.rnly-help-article__pager-link:hover {
  border-color: var(--utility-emerald-800);
  background-color: var(--bg-primary-subtle);
}
.rnly-help-article__pager-link--prev { text-align: left;  }
.rnly-help-article__pager-link--next { text-align: right; }
.rnly-help-article__pager-label {
  font-size: 11.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--text-tertiary);
}
.rnly-help-article__pager-title {
  font-size: 14px;
  font-weight: 700;
  color: var(--text-primary);
}
/* ==========================================================================
   RNLY — Onboarding modal (Views/Shared/_OnboardingModals.cshtml)
   ========================================================================== */

/* tq-9362 (A209): each step wraps its header / body / footer in div.rnly-step, between .modal-container (flex column) and
   .modal-body (flex-grow, overflow-y auto). A block step takes its content's height, so the body never gets a bounded height:
   at short viewport heights (a phone in landscape) the step overflowed the clipped modal, the body never scrolled and
   'Continue' could be unreachable. The shown step joins the flex chain instead, so the body scrolls and the footer stays.
   onboarding.js hides the other steps with the .hidden class, which this display must not override. The class is matched as an
   ATTRIBUTE token on purpose: Tailwind's @apply copies every rule whose selector names .hidden into each `@apply hidden` site. */
#rnly-onboarding-modal .rnly-step:not([class~="hidden"]) {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-flex: 1;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto;
  min-height: 0;
}

/* The body shrinks (and scrolls) when the step runs out of room, but never grows: the footer keeps following the content as it
   did, rather than dropping to the bottom of a fullscreen phone modal. */
#rnly-onboarding-modal .rnly-step > .modal-body {
  -webkit-box-flex: 0;
  -ms-flex-positive: 0;
  flex-grow: 0;
} /* tq-9362 (A209): the onboarding modal's step joins the modal's flex chain */

/* Utilities / scoped overrides */
/* ==========================================================================
   RNLY – Design-token utility classes
   ==========================================================================
   Single-purpose helpers that map HTML elements to CSS custom properties
   (design tokens). Use these instead of inline style="color: var(--...)"
   ========================================================================== */

/* ── Text colours ── */
.rnly-text-primary     { color: var(--text-primary); }
.rnly-text-secondary   { color: var(--text-secondary); }
.rnly-text-tertiary    { color: var(--text-tertiary); }
.rnly-text-emerald     { color: var(--utility-emerald-500); }

/* ── Border colours ── */
/* Works with elements that already carry a border (e.g. class="border rounded-xl rnly-border-primary") */
.rnly-border-primary   { border-color: var(--border-primary); }

/* Adds a bottom border using the primary border token */

/* Adds a right border using the primary border token */

/* ── Tab active state ── */
/* Pill/segment-style toggle — active tab gets primary text + subtle bg */

/* ── Avatar placeholder ── */
/* Neutral dark background + white text for initials avatars */

/* ── Canvas background ── */
/* Primary canvas background (used on <body>) */

/* Subtle background (used on icon circles, info cards, etc.) */
.rnly-bg-subtle {
  background-color: var(--bg-primary-subtle);
}

/* ── Seller editor sidebar ── */
/* ==========================================================================
   RNLY – Scoped overrides
   ==========================================================================
   Overrides that must be scoped to a Reinly page/feature wrapper so they
   never leak globally. Use parent selectors like:
     .rnly-app, .seller-app, .listings-split
   ========================================================================== */

/* Split-map view: suppress outline on active listing card;
   hover surface handles the feedback instead. */
.listings-split .card--listing.is-active {
  outline-color: transparent;
}

.listings-split .card--listing:focus-visible {
  outline-color: var(--text-info);
}

/* TODO: Add future scoped overrides here (e.g. .seller-app .card { … }) */

/* === Flatpickr Calendar Container === */
.flatpickr-calendar {
  border-radius: 0.375rem;
  border-width: 1px;
  font-size: 0.8125rem;
  line-height: 1.5rem;
  font-weight: 500;
  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  background-color: var(--bg-flatpickr-calendar);
  border-color: var(--border-flatpickr-calendar);
  opacity: 0;
  display: none;
  visibility: hidden;
  text-align: center;
  position: absolute;
  width: 307.875px;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  direction: ltr;
  padding: 0;
}

/* === Header Navigation Arrows === */
.flatpickr-months .flatpickr-prev-month,
.flatpickr-months .flatpickr-next-month {
  position: absolute;
  top: 0.25rem;
  z-index: 30;
  height: 34px;
  cursor: pointer;
  fill: currentColor;
  padding: 0.5rem;
  color: var(--text-flatpickr-months);
}

  .flatpickr-months .flatpickr-prev-month:hover,
  .flatpickr-months .flatpickr-next-month:hover {
    color: var(--text-flatpickr-months-hover);
  }

/* === Month Selector === */
.flatpickr-months .flatpickr-month {
  background-color: var(--alpha-0);
  color: var(--text-flatpickr-primary);
}

/* === Current Month Display === */
.flatpickr-current-month {
  position: absolute;
  left: 12.5%;
  width: 75%;
  padding-top: 7.5px;
  text-align: center;
  font-size: 1rem;
  line-height: 1.5rem;
  font-weight: 300;
}

  .flatpickr-monthDropdown-months,
  .flatpickr-current-month input.cur-year {
    background-color: var(--bg-flatpickr-primary);
    color: var(--text-flatpickr-primary);
    border: none;
    padding-left: 0.5ch;
    font-weight: 300;
  }

/* === Weekday Labels === */
.flatpickr-weekdays span.flatpickr-weekday {
  font-size: 0.625rem;
  line-height: 0.875rem;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--text-flatpickr-primary);
  background: transparent;
}

/* === Day Cell === */
.flatpickr-day {
  border-radius: 9999px;
  text-align: center;
  font-size: 0.8125rem;
  line-height: 1.5rem;
  font-weight: 500;
  color: var(--text-flatpickr);
  background-color: var(--bg-flatpickr);
  border: 1px solid transparent;
  width: 14.2857143%;
  max-width: 39px;
  height: 39px;
  line-height: 37px;
  cursor: pointer;
}

  /* === Day Hover, Focus, InRange === */
  .flatpickr-day:hover,
  .flatpickr-day:focus,
  .flatpickr-day.inRange {
    background-color: var(--bg-flatpickr-hover);
    border-color: var(--border-flatpickr-hover);
    color: var(--text-flatpickr-hover);
  }

  /* === Day Disabled === */
  .flatpickr-day.flatpickr-disabled,
  .flatpickr-day.prevMonthDay,
  .flatpickr-day.nextMonthDay {
    color: var(--text-flatpickr-disabled);
    background-color: transparent;
    border-color: transparent;
    cursor: default;
  }

  /* === Day Selected === */
  .flatpickr-day.selected,
  .flatpickr-day.startRange,
  .flatpickr-day.endRange {
    background-color: var(--bg-flatpickr-selected);
    border-color: var(--border-flatpickr-selected);
    color: var(--text-flatpickr-selected);
  }

    .flatpickr-day.selected:hover,
    .flatpickr-day.startRange:hover,
    .flatpickr-day.endRange:hover {
      background-color: var(--bg-flatpickr-selected-hover);
      border-color: var(--border-flatpickr-selected-hover);
      color: var(--text-flatpickr-selected-hover);
    }

/* === Time Picker === */
.flatpickr-calendar.hasTime .flatpickr-time {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  border-top-width: 1px;
}
.collapse.show.flatpickr-calendar.hasTime .flatpickr-time {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media (max-width: 420px) {
.rnly-achievement-card > .flatpickr-calendar.hasTime .flatpickr-time {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
html.is-mobile .rnly-rail > div.flatpickr-calendar.hasTime .flatpickr-time.items-baseline { margin-bottom: 10px; }
html.is-mobile .flatpickr-calendar.hasTime .flatpickr-time:has(> .rnly-acct-nav-wrap) {
  gap: 0;
  overflow-x: hidden;
  max-width: 100%;
  min-width: 0;
}
html.is-mobile #rnly-wizard-modal .flatpickr-calendar.hasTime .flatpickr-time.flex-col.items-center[style*="border-left"] {
  border-left: 0;
  padding-left: 0;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flatpickr-calendar.hasTime .flatpickr-time.gap-8 {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 10px;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flatpickr-calendar.hasTime .flatpickr-time.gap-8 > .flex-shrink-0:first-child {
  width: 100%;
  min-width: 0;
  position: sticky;
  top: 0;
  z-index: 6;
  /* Solid white (no transparency) so photos sliding underneath
     during scroll never bleed through the title bar. */
  background: #ffffff;
  /* Title bar is edge-to-edge (zero side margin / outer padding) so
     the white background runs flush with the screen edges as photos
     scroll past beneath it. Inner padding (14px) keeps the actual
     text from kissing the screen edge. */
  padding: 12px 14px 10px;
  margin: 0;
  border-bottom: 1px solid var(--border-primary, #e5e7eb);
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flatpickr-calendar.hasTime .flatpickr-time.gap-8 > .flex-shrink-0:first-child h3 {
  font-size: 18px;
  line-height: 1.25;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flatpickr-calendar.hasTime .flatpickr-time.gap-8 > .flex-1.min-w-0 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 100%;
  flex: 1 1 100%;
  width: 100%;
  min-width: 0;
  padding: 10px 14px 0;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
html.is-mobile #pt-scroll-body [id^="pt-section-"] > .flatpickr-calendar.hasTime .flatpickr-time.gap-8 > .flex-1.min-w-0 > div:only-child[style*="4/3"] {
  aspect-ratio: 16 / 11;
}
.flatpickr-calendar.hasTime .flatpickr-time {
  border-color: var(--border-flatpickr-time);
  height: 40px;
}

.flatpickr-time input,
.flatpickr-time .flatpickr-am-pm {
  background-color: transparent;
  font-size: 0.8125rem;
  line-height: 1.5rem;
  color: var(--text-flatpickr-time);
}

  .flatpickr-time input:hover,
  .flatpickr-time input:focus,
  .flatpickr-time .flatpickr-am-pm:hover {
    background-color: var(--bg-flatpickr-time-hover);
  }
/* ============================================================================
 * HIT-SLOP — one shared, token-driven touch target for small remove / dismiss controls
 * (tq-9140 A158, isabella 900068253, DR-006; ported from origin tq-9133 a8c914d0).
 *
 * A chip / tag / token remove × is ~16-20px by design. Its TARGET grows, its look never does: an invisible ::before,
 * centred on the control, max(100%, var(--control-h-xs)) square — 44px under a finger, 24px on a fine pointer (the WCAG
 * 2.5.8 minimum; nothing visible changes). --control-h-xs carries every scope: the coarse ladder on :root, the
 * [data-pointer-scope="fine"] / nested "device" pair, and the DR-006 hatch .density-compact (24 again under touch).
 *
 * THE REUSABLE TOKEN is --control-h-xs itself, read where the remover is; there is deliberately no --hit-slop custom
 * property: one declared on :root would resolve there (44 on touch) and inherit that value into a fine scope /
 * .density-compact, like the chrome token A155 had to restate. New small inner buttons opt in with the `.hit-slop` hook
 * (A157 tq-9138: qty-input -/+, search clear, palette close) rather than a per-component expander.
 *
 * Reinly's remover list: the origin's list mapped to the classes Reinly renders (the trait picker's remover is the .tag__dismiss
 * since tq-9531; tq-9582 removed the dead .trait-input__tag-remove). NOT here: .msg-composer__attachment-remove (an absolutely positioned corner badge over a
 * file preview, hidden until hover: not an inline chip remover) and .rnly-preset__remove (a delete button on a preset
 * CARD; the chip margin rule would move the cards): both are inner buttons for A157's family / findings. An element
 * that draws its glyph in its OWN ::before (an <i class="fa-…"> used as the remover, as the static /Design combobox chip
 * specimens do) is excluded: the slop would displace the glyph; such a remover is not a button anyway.
 * position: relative sits in :where() (specificity 0): it only gives the ::before a containing block, and a component that
 * positions its remover itself keeps its own value.
 *
 * INNER BUTTONS of own-box inputs (tq-9138 A157, isabella 900068263): .search-field__clear, .inline-edit__btn and the compact
 * qty-input's round -/+ take the same slop, but NOT the chip margin rule below: their wrapper is floored at 44 and holds the
 * slop vertically, and each component spaces its buttons on the token (search-input.css, inline-edit.css, qty-input.css).
 * Also (brief r4 3b) the composer attachment's corner remove badge (messaging.css makes room above the strip) and the preset
 * card's delete. Their own position (absolute / flex) wins over the :where() position: relative.
 *
 * NO OVERLAP: a slop must never cover another control's target. The chip that carries a remover grows its MARGIN under
 * coarse (the rule at the end), never the slop shrinks. This replaces badge.css's fixed 44px ::before and its DR-029
 * coarse margin-block, which covered .badge only.
 * ========================================================================== */
:where(
  .hit-slop,
  .badge > .badge-close, .badge > [data-badge-dismiss],
  .tag__dismiss, .chip__dismiss, .combobox__chip-dismiss, .dm-chip__remove, .active-filter__remove,
  .signal-pill__close, .mail-filter-chip__remove, .mail-recipient__dismiss, .cal-booking__multi-chip-remove,
  .ai-attach__remove,
  .search-field__clear, .inline-edit__btn, .qty-input--compact .qty-input__btn,
  .msg-composer__attachment-remove, .rnly-preset__remove
):where(:not([class*="fa-"])) {
  position: relative;
}

:is(
  .hit-slop,
  .badge > .badge-close, .badge > [data-badge-dismiss],
  .tag__dismiss, .chip__dismiss, .combobox__chip-dismiss, .dm-chip__remove, .active-filter__remove,
  .signal-pill__close, .mail-filter-chip__remove, .mail-recipient__dismiss, .cal-booking__multi-chip-remove,
  .ai-attach__remove,
  .search-field__clear, .inline-edit__btn, .qty-input--compact .qty-input__btn,
  .msg-composer__attachment-remove, .rnly-preset__remove
):where(:not([class*="fa-"]))::before {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: max(100%, var(--control-h-xs));
  height: max(100%, var(--control-h-xs));
  -webkit-transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
  /* target area only — nothing painted */
}

/* NO OVERLAP — the chip that carries a remover makes room for its slop. The slop is centred on the remover, so it
   overhangs the chip by up to (44 - chip height) / 2 above and below and, at the trailing edge, by up to (44 - 16) / 2
   past it. The chip keeps its size; its MARGIN grows: block (token - 1.5rem) / 2 and inline-end (token - 1.5rem) x 0.7,
   i.e. 10px / 14px under a finger and exactly 0 wherever --control-h-xs is 24 (a fine pointer, a fine scope,
   .density-compact) — so nothing moves on desktop. (The :has() argument gives this rule its remover's specificity.)
   The fa- guard sits in :where() everywhere, so every rule keeps the origin's specificity. */
:where(*):has(> :is(
  .hit-slop,
  .badge > .badge-close, .badge > [data-badge-dismiss],
  .tag__dismiss, .chip__dismiss, .combobox__chip-dismiss, .dm-chip__remove, .active-filter__remove,
  .signal-pill__close, .mail-filter-chip__remove, .mail-recipient__dismiss, .cal-booking__multi-chip-remove,
  .ai-attach__remove
):where(:not([class*="fa-"]))) {
  margin-block: max(0px, calc((var(--control-h-xs) - 1.5rem) / 2));
  -webkit-margin-end: max(0px, calc((var(--control-h-xs) - 1.5rem) * 0.7));
  margin-inline-end: max(0px, calc((var(--control-h-xs) - 1.5rem) * 0.7));
}   /* tq-9140 (A158): THE remover hit-slop, imported in place after every component */


/*Tailwind Utilities*/
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}
.pointer-events-none {
  pointer-events: none;
}
.pointer-events-auto {
  pointer-events: auto;
}
.\!visible {
  visibility: visible !important;
}
.visible {
  visibility: visible;
}
.invisible {
  visibility: hidden;
}
.collapse {
  visibility: collapse;
}
.static {
  position: static;
}
.fixed {
  position: fixed;
}
.absolute {
  position: absolute;
}
.relative {
  position: relative;
}
.sticky {
  position: sticky;
}
.inset-0 {
  inset: 0px;
}
.inset-y-0 {
  top: 0px;
  bottom: 0px;
}
.bottom-1 {
  bottom: 0.25rem;
}
.bottom-5 {
  bottom: 1.25rem;
}
.left-0 {
  left: 0px;
}
.left-1 {
  left: 0.25rem;
}
.left-2 {
  left: 0.5rem;
}
.left-2\.5 {
  left: 0.625rem;
}
.left-3 {
  left: 0.75rem;
}
.left-4 {
  left: 1rem;
}
.right-0 {
  right: 0px;
}
.right-1 {
  right: 0.25rem;
}
.right-2 {
  right: 0.5rem;
}
.right-4 {
  right: 1rem;
}
.top-0 {
  top: 0px;
}
.top-1 {
  top: 0.25rem;
}
.top-1\/2 {
  top: 50%;
}
.top-2 {
  top: 0.5rem;
}
.-z-\[9999\] {
  z-index: -9999;
}
.z-10 {
  z-index: 10;
}
.z-50 {
  z-index: 50;
}
.col-span-12 {
  grid-column: span 12 / span 12;
}
.col-span-2 {
  grid-column: span 2 / span 2;
}
.col-span-8 {
  grid-column: span 8 / span 8;
}
.col-span-full {
  grid-column: 1 / -1;
}
.m-0 {
  margin: 0px;
}
.mx-4 {
  margin-left: 1rem;
  margin-right: 1rem;
}
.mx-auto {
  margin-left: auto;
  margin-right: auto;
}
.my-2 {
  margin-top: 0.5rem;
  margin-bottom: 0.5rem;
}
.my-4 {
  margin-top: 1rem;
  margin-bottom: 1rem;
}
.-mt-1 {
  margin-top: -0.25rem;
}
.mb-0 {
  margin-bottom: 0px;
}
.mb-0\.5 {
  margin-bottom: 0.125rem;
}
.mb-1 {
  margin-bottom: 0.25rem;
}
.mb-1\.5 {
  margin-bottom: 0.375rem;
}
.mb-10 {
  margin-bottom: 2.5rem;
}
.mb-12 {
  margin-bottom: 3rem;
}
.mb-14 {
  margin-bottom: 3.5rem;
}
.mb-2 {
  margin-bottom: 0.5rem;
}
.mb-2\.5 {
  margin-bottom: 0.625rem;
}
.mb-20 {
  margin-bottom: 5rem;
}
.mb-3 {
  margin-bottom: 0.75rem;
}
.mb-4 {
  margin-bottom: 1rem;
}
.mb-5 {
  margin-bottom: 1.25rem;
}
.mb-6 {
  margin-bottom: 1.5rem;
}
.mb-8 {
  margin-bottom: 2rem;
}
.ml-1 {
  margin-left: 0.25rem;
}
.ml-2 {
  margin-left: 0.5rem;
}
.ml-24 {
  margin-left: 6rem;
}
.ml-3 {
  margin-left: 0.75rem;
}
.ml-4 {
  margin-left: 1rem;
}
.ml-auto {
  margin-left: auto;
}
.mr-1 {
  margin-right: 0.25rem;
}
.mr-1\.5 {
  margin-right: 0.375rem;
}
.mr-2 {
  margin-right: 0.5rem;
}
.mr-auto {
  margin-right: auto;
}
.mt-0\.5 {
  margin-top: 0.125rem;
}
.mt-1 {
  margin-top: 0.25rem;
}
.mt-1\.5 {
  margin-top: 0.375rem;
}
.mt-10 {
  margin-top: 2.5rem;
}
.mt-2 {
  margin-top: 0.5rem;
}
.mt-3 {
  margin-top: 0.75rem;
}
.mt-4 {
  margin-top: 1rem;
}
.mt-40 {
  margin-top: 10rem;
}
.mt-5 {
  margin-top: 1.25rem;
}
.mt-6 {
  margin-top: 1.5rem;
}
.mt-8 {
  margin-top: 2rem;
}
.mt-auto {
  margin-top: auto;
}
.\!block {
  display: block !important;
}
.block {
  display: block;
}
.inline-block {
  display: inline-block;
}
.inline {
  display: inline;
}
.flex {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
.inline-flex {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
}
.table {
  display: table;
}
.\!grid {
  display: grid !important;
}
.grid {
  display: grid;
}
.contents {
  display: contents;
}
.\!hidden {
  display: none !important;
}
.hidden {
  display: none;
}
.h-10 {
  height: 2.5rem;
}
.h-11 {
  height: 2.75rem;
}
.h-12 {
  height: 3rem;
}
.h-14 {
  height: 3.5rem;
}
.h-16 {
  height: 4rem;
}
.h-20 {
  height: 5rem;
}
.h-24 {
  height: 6rem;
}
.h-28 {
  height: 7rem;
}
.h-44 {
  height: 11rem;
}
.h-5 {
  height: 1.25rem;
}
.h-6 {
  height: 1.5rem;
}
.h-7 {
  height: 1.75rem;
}
.h-8 {
  height: 2rem;
}
.h-9 {
  height: 2.25rem;
}
.h-\[250px\] {
  height: 250px;
}
.h-\[28px\] {
  height: 28px;
}
.h-\[48px\] {
  height: 48px;
}
.h-full {
  height: 100%;
}
.h-screen {
  height: 100vh;
}
.w-10 {
  width: 2.5rem;
}
.w-11 {
  width: 2.75rem;
}
.w-12 {
  width: 3rem;
}
.w-14 {
  width: 3.5rem;
}
.w-16 {
  width: 4rem;
}
.w-20 {
  width: 5rem;
}
.w-24 {
  width: 6rem;
}
.w-28 {
  width: 7rem;
}
.w-36 {
  width: 9rem;
}
.w-5 {
  width: 1.25rem;
}
.w-6 {
  width: 1.5rem;
}
.w-7 {
  width: 1.75rem;
}
.w-8 {
  width: 2rem;
}
.w-9 {
  width: 2.25rem;
}
.w-full {
  width: 100%;
}
.w-px {
  width: 1px;
}
.w-screen {
  width: 100vw;
}
.min-w-0 {
  min-width: 0px;
}
.min-w-\[1\.5rem\] {
  min-width: 1.5rem;
}
.max-w-2xl {
  max-width: 42rem;
}
.max-w-3xl {
  max-width: 48rem;
}
.max-w-5xl {
  max-width: 64rem;
}
.max-w-7xl {
  max-width: 80rem;
}
.max-w-\[480px\] {
  max-width: 480px;
}
.max-w-\[760px\] {
  max-width: 760px;
}
.max-w-\[800px\] {
  max-width: 800px;
}
.max-w-full {
  max-width: 100%;
}
.max-w-lg {
  max-width: 32rem;
}
.max-w-md {
  max-width: 28rem;
}
.max-w-xl {
  max-width: 36rem;
}
.flex-1 {
  -webkit-box-flex: 1;
  -ms-flex: 1 1 0%;
  flex: 1 1 0%;
}
.flex-none {
  -webkit-box-flex: 0;
  -ms-flex: none;
  flex: none;
}
.flex-shrink {
  -ms-flex-negative: 1;
  flex-shrink: 1;
}
.flex-shrink-0 {
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.shrink {
  -ms-flex-negative: 1;
  flex-shrink: 1;
}
.shrink-0 {
  -ms-flex-negative: 0;
  flex-shrink: 0;
}
.flex-grow {
  -webkit-box-flex: 1;
  -ms-flex-positive: 1;
  flex-grow: 1;
}
.grow {
  -webkit-box-flex: 1;
  -ms-flex-positive: 1;
  flex-grow: 1;
}
.-translate-x-4 {
  --tw-translate-x: -1rem;
  -webkit-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  -ms-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.-translate-y-1\/2 {
  --tw-translate-y: -50%;
  -webkit-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  -ms-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.transform {
  -webkit-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  -ms-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.cursor-pointer {
  cursor: pointer;
}
.resize {
  resize: both;
}
.snap-x {
  -ms-scroll-snap-type: x var(--tw-scroll-snap-strictness);
  scroll-snap-type: x var(--tw-scroll-snap-strictness);
}
.snap-mandatory {
  --tw-scroll-snap-strictness: mandatory;
}
.snap-start {
  scroll-snap-align: start;
}
.list-none {
  list-style-type: none;
}
.grid-cols-1 {
  grid-template-columns: repeat(1, minmax(0, 1fr));
}
.grid-cols-12 {
  grid-template-columns: repeat(12, minmax(0, 1fr));
}
.grid-cols-2 {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
.grid-cols-3 {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
.flex-col {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
}
.flex-wrap {
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
}
.flex-nowrap {
  -ms-flex-wrap: nowrap;
  flex-wrap: nowrap;
}
.items-start {
  -webkit-box-align: start;
  -ms-flex-align: start;
  align-items: flex-start;
}
.items-end {
  -webkit-box-align: end;
  -ms-flex-align: end;
  align-items: flex-end;
}
.items-center {
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}
.items-baseline {
  -webkit-box-align: baseline;
  -ms-flex-align: baseline;
  align-items: baseline;
}
.items-stretch {
  -webkit-box-align: stretch;
  -ms-flex-align: stretch;
  align-items: stretch;
}
.justify-end {
  -webkit-box-pack: end;
  -ms-flex-pack: end;
  justify-content: flex-end;
}
.justify-center {
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}
.\!justify-between {
  -webkit-box-pack: justify !important;
  -ms-flex-pack: justify !important;
  justify-content: space-between !important;
}
.justify-between {
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
}
.justify-around {
  -ms-flex-pack: distribute;
  justify-content: space-around;
}
.gap-0\.5 {
  gap: 0.125rem;
}
.gap-1 {
  gap: 0.25rem;
}
.gap-1\.5 {
  gap: 0.375rem;
}
.gap-10 {
  gap: 2.5rem;
}
.gap-2 {
  gap: 0.5rem;
}
.gap-2\.5 {
  gap: 0.625rem;
}
.gap-3 {
  gap: 0.75rem;
}
.gap-4 {
  gap: 1rem;
}
.gap-5 {
  gap: 1.25rem;
}
.gap-6 {
  gap: 1.5rem;
}
.gap-8 {
  gap: 2rem;
}
.space-y-1 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));
}
.space-y-2 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));
}
.space-y-3 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
}
.space-y-4 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(1rem * var(--tw-space-y-reverse));
}
.space-y-5 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(1.25rem * var(--tw-space-y-reverse));
}
.space-y-6 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));
}
.self-start {
  -ms-flex-item-align: start;
  align-self: flex-start;
}
.self-center {
  -ms-flex-item-align: center;
  align-self: center;
}
.overflow-auto {
  overflow: auto;
}
.overflow-hidden {
  overflow: hidden;
}
.overflow-x-auto {
  overflow-x: auto;
}
.overflow-y-auto {
  overflow-y: auto;
}
.truncate {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.whitespace-nowrap {
  white-space: nowrap;
}
.text-wrap {
  text-wrap: wrap;
}
.rounded {
  border-radius: 0.25rem;
}
.rounded-2xl {
  border-radius: 1rem;
}
.rounded-full {
  border-radius: 9999px;
}
.rounded-lg {
  border-radius: 0.5rem;
}
.rounded-none {
  border-radius: 0px;
}
.rounded-xl {
  border-radius: 0.75rem;
}
.rounded-l-full {
  border-top-left-radius: 9999px;
  border-bottom-left-radius: 9999px;
}
.rounded-l-lg {
  border-top-left-radius: 0.5rem;
  border-bottom-left-radius: 0.5rem;
}
.rounded-l-none {
  border-top-left-radius: 0px;
  border-bottom-left-radius: 0px;
}
.border {
  border-width: 1px;
}
.border-0 {
  border-width: 0px;
}
.border-2 {
  border-width: 2px;
}
.border-b {
  border-bottom-width: 1px;
}
.border-l {
  border-left-width: 1px;
}
.border-r {
  border-right-width: 1px;
}
.border-r-0 {
  border-right-width: 0px;
}
.border-t {
  border-top-width: 1px;
}
.border-dashed {
  border-style: dashed;
}
.border-none {
  border-style: none;
}
.border-amber-200 {
  --tw-border-opacity: 1;
  border-color: rgb(255 230 158 / var(--tw-border-opacity, 1));
}
.border-green-200 {
  --tw-border-opacity: 1;
  border-color: rgb(187 255 208 / var(--tw-border-opacity, 1));
}
.bg-amber-50 {
  --tw-bg-opacity: 1;
  background-color: rgb(255 253 245 / var(--tw-bg-opacity, 1));
}
.bg-gray-200 {
  --tw-bg-opacity: 1;
  background-color: rgb(222 225 230 / var(--tw-bg-opacity, 1));
}
.bg-green-50 {
  --tw-bg-opacity: 1;
  background-color: rgb(243 255 246 / var(--tw-bg-opacity, 1));
}
.bg-indigo-500 {
  --tw-bg-opacity: 1;
  background-color: rgb(70 86 233 / var(--tw-bg-opacity, 1));
}
.bg-neutral-900 {
  --tw-bg-opacity: 1;
  background-color: rgb(33 33 33 / var(--tw-bg-opacity, 1));
}
.bg-orange-400 {
  --tw-bg-opacity: 1;
  background-color: rgb(231 138 50 / var(--tw-bg-opacity, 1));
}
.bg-purple-500 {
  --tw-bg-opacity: 1;
  background-color: rgb(131 55 226 / var(--tw-bg-opacity, 1));
}
.bg-teal-500 {
  --tw-bg-opacity: 1;
  background-color: rgb(41 158 155 / var(--tw-bg-opacity, 1));
}
.bg-transparent {
  background-color: transparent;
}
.bg-white {
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
}
.bg-cover {
  background-size: cover;
}
.bg-center {
  background-position: center;
}
.object-cover {
  -o-object-fit: cover;
  object-fit: cover;
}
.p-0 {
  padding: 0px;
}
.p-1 {
  padding: 0.25rem;
}
.p-16 {
  padding: 4rem;
}
.p-2 {
  padding: 0.5rem;
}
.p-3 {
  padding: 0.75rem;
}
.p-4 {
  padding: 1rem;
}
.p-5 {
  padding: 1.25rem;
}
.p-6 {
  padding: 1.5rem;
}
.p-8 {
  padding: 2rem;
}
.px-1 {
  padding-left: 0.25rem;
  padding-right: 0.25rem;
}
.px-1\.5 {
  padding-left: 0.375rem;
  padding-right: 0.375rem;
}
.px-10 {
  padding-left: 2.5rem;
  padding-right: 2.5rem;
}
.px-2 {
  padding-left: 0.5rem;
  padding-right: 0.5rem;
}
.px-2\.5 {
  padding-left: 0.625rem;
  padding-right: 0.625rem;
}
.px-3 {
  padding-left: 0.75rem;
  padding-right: 0.75rem;
}
.px-3\.5 {
  padding-left: 0.875rem;
  padding-right: 0.875rem;
}
.px-4 {
  padding-left: 1rem;
  padding-right: 1rem;
}
.px-5 {
  padding-left: 1.25rem;
  padding-right: 1.25rem;
}
.px-6 {
  padding-left: 1.5rem;
  padding-right: 1.5rem;
}
.px-7 {
  padding-left: 1.75rem;
  padding-right: 1.75rem;
}
.py-0\.5 {
  padding-top: 0.125rem;
  padding-bottom: 0.125rem;
}
.py-1 {
  padding-top: 0.25rem;
  padding-bottom: 0.25rem;
}
.py-1\.5 {
  padding-top: 0.375rem;
  padding-bottom: 0.375rem;
}
.py-10 {
  padding-top: 2.5rem;
  padding-bottom: 2.5rem;
}
.py-16 {
  padding-top: 4rem;
  padding-bottom: 4rem;
}
.py-2 {
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
}
.py-20 {
  padding-top: 5rem;
  padding-bottom: 5rem;
}
.py-3 {
  padding-top: 0.75rem;
  padding-bottom: 0.75rem;
}
.py-4 {
  padding-top: 1rem;
  padding-bottom: 1rem;
}
.py-5 {
  padding-top: 1.25rem;
  padding-bottom: 1.25rem;
}
.py-6 {
  padding-top: 1.5rem;
  padding-bottom: 1.5rem;
}
.py-8 {
  padding-top: 2rem;
  padding-bottom: 2rem;
}
.\!pl-8 {
  padding-left: 2rem !important;
}
.pb-0 {
  padding-bottom: 0px;
}
.pb-10 {
  padding-bottom: 2.5rem;
}
.pb-16 {
  padding-bottom: 4rem;
}
.pb-3 {
  padding-bottom: 0.75rem;
}
.pb-4 {
  padding-bottom: 1rem;
}
.pb-5 {
  padding-bottom: 1.25rem;
}
.pb-8 {
  padding-bottom: 2rem;
}
.pl-10 {
  padding-left: 2.5rem;
}
.pl-3 {
  padding-left: 0.75rem;
}
.pl-5 {
  padding-left: 1.25rem;
}
.pl-8 {
  padding-left: 2rem;
}
.pr-0\.5 {
  padding-right: 0.125rem;
}
.pr-10 {
  padding-right: 2.5rem;
}
.pr-3 {
  padding-right: 0.75rem;
}
.pr-8 {
  padding-right: 2rem;
}
.pt-1 {
  padding-top: 0.25rem;
}
.pt-2 {
  padding-top: 0.5rem;
}
.pt-4 {
  padding-top: 1rem;
}
.pt-5 {
  padding-top: 1.25rem;
}
.pt-6 {
  padding-top: 1.5rem;
}
.text-left {
  text-align: left;
}
.\!text-center {
  text-align: center !important;
}
.text-center {
  text-align: center;
}
.text-right {
  text-align: right;
}
.font-Inter {
  font-family: 'Inter', sans-serif;
}
.font-mono {
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}
.\!text-2xl {
  font-size: 1.5rem !important;
  line-height: 2rem !important;
  letter-spacing: -0.01em !important;
}
.text-2xl {
  font-size: 1.5rem;
  line-height: 2rem;
  letter-spacing: -0.01em;
}
.text-2xs {
  font-size: 0.6875rem;
  line-height: 1rem;
}
.text-3xl {
  font-size: 1.75rem;
  line-height: 2.5rem;
  letter-spacing: -0.01em;
}
.text-4xl {
  font-size: 2rem;
  line-height: 3rem;
  letter-spacing: -0.015em;
}
.text-5xl {
  font-size: 2.5rem;
  line-height: 3.5rem;
  letter-spacing: -0.02em;
}
.text-6xl {
  font-size: 3rem;
  line-height: 4rem;
  letter-spacing: -0.02em;
}
.text-\[\.875rem\] {
  font-size: .875rem;
}
.text-\[8px\] {
  font-size: 8px;
}
.text-base {
  font-size: 1rem;
  line-height: 1.5rem;
}
.text-lg {
  font-size: 1.125rem;
  line-height: 2rem;
}
.text-sm {
  font-size: 0.8125rem;
  line-height: 1.5rem;
}
.text-xl {
  font-size: 1.25rem;
  line-height: 2rem;
}
.text-xs {
  font-size: 0.75rem;
  line-height: 1rem;
}
.text-xxs {
  font-size: 0.625rem;
  line-height: 0.875rem;
}
.\!font-normal {
  font-weight: 400 !important;
}
.font-bold {
  font-weight: 700;
}
.font-light {
  font-weight: 300;
}
.font-medium {
  font-weight: 500;
}
.font-semibold {
  font-weight: 600;
}
.uppercase {
  text-transform: uppercase;
}
.lowercase {
  text-transform: lowercase;
}
.leading-none {
  line-height: 1;
}
.leading-relaxed {
  line-height: 1.625;
}
.leading-tight {
  line-height: 1.25;
}
.tracking-\[\.5em\] {
  letter-spacing: .5em;
}
.tracking-normal {
  letter-spacing: 0em;
}
.tracking-tight {
  letter-spacing: -0.025em;
}
.tracking-tighter {
  letter-spacing: -0.05em;
}
.tracking-wide {
  letter-spacing: 0.025em;
}
.tracking-wider {
  letter-spacing: 0.05em;
}
.\!text-white {
  --tw-text-opacity: 1 !important;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1)) !important;
}
.text-amber-600 {
  --tw-text-opacity: 1;
  color: rgb(212 135 0 / var(--tw-text-opacity, 1));
}
.text-amber-700 {
  --tw-text-opacity: 1;
  color: rgb(171 109 2 / var(--tw-text-opacity, 1));
}
.text-blue-500 {
  --tw-text-opacity: 1;
  color: rgb(47 111 228 / var(--tw-text-opacity, 1));
}
.text-emerald-800 {
  --tw-text-opacity: 1;
  color: rgb(25 93 66 / var(--tw-text-opacity, 1));
}
.text-gray-400 {
  --tw-text-opacity: 1;
  color: rgb(145 150 164 / var(--tw-text-opacity, 1));
}
.text-green-700 {
  --tw-text-opacity: 1;
  color: rgb(40 124 57 / var(--tw-text-opacity, 1));
}
.text-red-500 {
  --tw-text-opacity: 1;
  color: rgb(236 76 60 / var(--tw-text-opacity, 1));
}
.text-red-600 {
  --tw-text-opacity: 1;
  color: rgb(221 60 45 / var(--tw-text-opacity, 1));
}
.underline {
  text-decoration-line: underline;
}
.no-underline {
  text-decoration-line: none;
}
.antialiased {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.opacity-0 {
  opacity: 0;
}
.opacity-100 {
  opacity: 1;
}
.opacity-30 {
  opacity: 0.3;
}
.opacity-40 {
  opacity: 0.4;
}
.opacity-50 {
  opacity: 0.5;
}
.opacity-60 {
  opacity: 0.6;
}
.opacity-70 {
  opacity: 0.7;
}
.opacity-80 {
  opacity: 0.8;
}
.shadow-lg {
  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-xl {
  --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.outline {
  outline-style: solid;
}
.blur {
  --tw-blur: blur(8px);
  -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}
.invert {
  --tw-invert: invert(100%);
  -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}
.filter {
  -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}
.backdrop-blur {
  --tw-backdrop-blur: blur(8px);
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.backdrop-filter {
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.transition {
  -webkit-transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, backdrop-filter, -webkit-box-shadow, -webkit-transform, -webkit-filter;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, backdrop-filter, -webkit-box-shadow, -webkit-transform, -webkit-filter;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-box-shadow, -webkit-transform, -webkit-filter;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  -webkit-transition-duration: 150ms;
  transition-duration: 150ms;
}
.transition-all {
  -webkit-transition-property: all;
  transition-property: all;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  -webkit-transition-duration: 150ms;
  transition-duration: 150ms;
}
.transition-colors {
  -webkit-transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  -webkit-transition-duration: 150ms;
  transition-duration: 150ms;
}
.transition-opacity {
  -webkit-transition-property: opacity;
  transition-property: opacity;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  -webkit-transition-duration: 150ms;
  transition-duration: 150ms;
}
.transition-shadow {
  -webkit-transition-property: -webkit-box-shadow;
  transition-property: -webkit-box-shadow;
  transition-property: box-shadow;
  transition-property: box-shadow, -webkit-box-shadow;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  -webkit-transition-duration: 150ms;
  transition-duration: 150ms;
}
.duration-200 {
  -webkit-transition-duration: 200ms;
  transition-duration: 200ms;
}
.duration-300 {
  -webkit-transition-duration: 300ms;
  transition-duration: 300ms;
}
.placeholder\:text-2xl::-webkit-input-placeholder {
  font-size: 1.5rem;
  line-height: 2rem;
  letter-spacing: -0.01em;
}
.placeholder\:text-2xl::-moz-placeholder {
  font-size: 1.5rem;
  line-height: 2rem;
  letter-spacing: -0.01em;
}
.placeholder\:text-2xl:-ms-input-placeholder {
  font-size: 1.5rem;
  line-height: 2rem;
  letter-spacing: -0.01em;
}
.placeholder\:text-2xl::-ms-input-placeholder {
  font-size: 1.5rem;
  line-height: 2rem;
  letter-spacing: -0.01em;
}
.placeholder\:text-2xl::placeholder {
  font-size: 1.5rem;
  line-height: 2rem;
  letter-spacing: -0.01em;
}
.last\:mb-0:last-child {
  margin-bottom: 0px;
}
.hover\:bg-gray-50:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));
}
.hover\:shadow-sm:hover {
  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.focus\:outline-none:focus {
  outline: 2px solid transparent;
  outline-offset: 2px;
}
.focus-visible\:ring-2:focus-visible {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  -webkit-box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}
.focus-visible\:ring-emerald-500:focus-visible {
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(40 179 126 / var(--tw-ring-opacity, 1));
}
.group:hover .group-hover\:translate-x-0 {
  --tw-translate-x: 0px;
  -webkit-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  -ms-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.group:hover .group-hover\:opacity-100 {
  opacity: 1;
}
.dark\:bg-indigo-300:is(.dark *) {
  --tw-bg-opacity: 1;
  background-color: rgb(176 189 252 / var(--tw-bg-opacity, 1));
}
.dark\:bg-orange-300:is(.dark *) {
  --tw-bg-opacity: 1;
  background-color: rgb(246 170 106 / var(--tw-bg-opacity, 1));
}
.dark\:bg-purple-300:is(.dark *) {
  --tw-bg-opacity: 1;
  background-color: rgb(193 136 244 / var(--tw-bg-opacity, 1));
}
.dark\:bg-teal-300:is(.dark *) {
  --tw-bg-opacity: 1;
  background-color: rgb(104 224 225 / var(--tw-bg-opacity, 1));
}
.dark\:text-blue-300:is(.dark *) {
  --tw-text-opacity: 1;
  color: rgb(145 181 255 / var(--tw-text-opacity, 1));
}
.dark\:text-indigo-200:is(.dark *) {
  --tw-text-opacity: 1;
  color: rgb(176 189 252 / var(--tw-text-opacity, 1));
}
.dark\:text-white:is(.dark *) {
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}
@media (min-width: 640px) {
  .sm\:ml-16 {
    margin-left: 4rem;
  }
  .sm\:mt-0 {
    margin-top: 0px;
  }
  .sm\:block {
    display: block;
  }
  .sm\:grid-cols-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
  .sm\:grid-cols-4 {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
  .sm\:p-16 {
    padding: 4rem;
  }
  .sm\:p-3 {
    padding: 0.75rem;
  }
  .sm\:p-4 {
    padding: 1rem;
  }
  .sm\:p-6 {
    padding: 1.5rem;
  }
  .sm\:p-8 {
    padding: 2rem;
  }
  .sm\:px-8 {
    padding-left: 2rem;
    padding-right: 2rem;
  }
  .sm\:\!text-\[2rem\] {
    font-size: 2rem !important;
  }
}
@media (min-width: 768px) {
  .md\:sticky {
    position: sticky;
  }
  .md\:top-10 {
    top: 2.5rem;
  }
  .md\:col-span-2 {
    grid-column: span 2 / span 2;
  }
  .md\:flex {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
  }
  .md\:inline-flex {
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
  }
  .md\:w-64 {
    width: 16rem;
  }
  .md\:min-w-\[220px\] {
    min-width: 220px;
  }
  .md\:grid-cols-2 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .md\:grid-cols-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
  .md\:grid-cols-4 {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
  .md\:grid-cols-5 {
    grid-template-columns: repeat(5, minmax(0, 1fr));
  }
  .md\:flex-row {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
    -ms-flex-direction: row;
    flex-direction: row;
  }
  .md\:flex-col {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
  }
  .md\:items-start {
    -webkit-box-align: start;
    -ms-flex-align: start;
    align-items: flex-start;
  }
  .md\:justify-between {
    -webkit-box-pack: justify;
    -ms-flex-pack: justify;
    justify-content: space-between;
  }
  .md\:gap-1 {
    gap: 0.25rem;
  }
  .md\:self-start {
    -ms-flex-item-align: start;
    align-self: flex-start;
  }
  .md\:px-10 {
    padding-left: 2.5rem;
    padding-right: 2.5rem;
  }
  .md\:px-12 {
    padding-left: 3rem;
    padding-right: 3rem;
  }
  .md\:text-right {
    text-align: right;
  }
}
@media (min-width: 1024px) {
  .lg\:grid-cols-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
  .lg\:grid-cols-5 {
    grid-template-columns: repeat(5, minmax(0, 1fr));
  }
  .lg\:px-16 {
    padding-left: 4rem;
    padding-right: 4rem;
  }
}

/*# sourceMappingURL=site.css.map */
