@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+Display&display=swap');/* LumeeUI — client.css — GENERATED, do not edit.
 * Source: tokens/*.tokens.json. Regenerate: pnpm build:tokens.
 * Self-contained — import exactly ONE mode file (client | admin | smartest-minds). */

:root {
  /* primitives — internal; never reference directly in UI */
  --btly-color-base-white: #FFFFFF;
  --btly-color-base-black: #000000;
  --btly-color-gray-50: #FAFAFA;
  --btly-color-gray-100: #F0F0F0;
  --btly-color-gray-200: #DEDEDE;
  --btly-color-gray-300: #BEBEBE;
  --btly-color-gray-400: #949494;
  --btly-color-gray-500: #737373;
  --btly-color-gray-600: #636363;
  --btly-color-gray-700: #4F4F4F;
  --btly-color-gray-800: #3D3D3D;
  --btly-color-gray-900: #303030;
  --btly-color-gray-950: #1F1F1F;
  --btly-color-ultraviolet-50: #F9F9FF;
  --btly-color-ultraviolet-100: #EFEFFF;
  --btly-color-ultraviolet-200: #DBDBFF;
  --btly-color-ultraviolet-300: #B9B8FF;
  --btly-color-ultraviolet-400: #9085FF;
  --btly-color-ultraviolet-500: #7352FC;
  --btly-color-ultraviolet-600: #6435EE;
  --btly-color-ultraviolet-700: #5216CF;
  --btly-color-ultraviolet-800: #3E11A1;
  --btly-color-ultraviolet-900: #30147B;
  --btly-color-ultraviolet-950: #1D124B;
  --btly-color-blue-50: #EFF6FF;
  --btly-color-blue-100: #DBEAFE;
  --btly-color-blue-200: #BEDBFF;
  --btly-color-blue-300: #8EC5FF;
  --btly-color-blue-400: #51A2FF;
  --btly-color-blue-500: #2B7FFF;
  --btly-color-blue-600: #155DFC;
  --btly-color-blue-700: #1447E6;
  --btly-color-blue-800: #193CB8;
  --btly-color-blue-900: #1C398E;
  --btly-color-blue-950: #162456;
  --btly-color-sky-50: #EDF9FF;
  --btly-color-sky-100: #D7F1FF;
  --btly-color-sky-200: #AFE4FF;
  --btly-color-sky-300: #7FCDFF;
  --btly-color-sky-400: #5CBDFF;
  --btly-color-sky-500: #46B0F7;
  --btly-color-sky-600: #0491D9;
  --btly-color-sky-700: #006DAF;
  --btly-color-sky-800: #004E7F;
  --btly-color-sky-900: #003858;
  --btly-color-sky-950: #00212E;
  --btly-color-emerald-50: #ECFDF5;
  --btly-color-emerald-100: #D0FAE5;
  --btly-color-emerald-200: #A4F4CF;
  --btly-color-emerald-300: #5EE9B5;
  --btly-color-emerald-400: #00D492;
  --btly-color-emerald-500: #00BC7D;
  --btly-color-emerald-600: #009966;
  --btly-color-emerald-700: #007A55;
  --btly-color-emerald-800: #006045;
  --btly-color-emerald-900: #004F3B;
  --btly-color-emerald-950: #002C22;
  --btly-color-green-50: #ECFCEF;
  --btly-color-green-100: #D3F8DB;
  --btly-color-green-200: #A6F1B9;
  --btly-color-green-300: #6CE090;
  --btly-color-green-400: #3CD677;
  --btly-color-green-500: #0ACC68;
  --btly-color-green-600: #00AC44;
  --btly-color-green-700: #008522;
  --btly-color-green-800: #005F16;
  --btly-color-green-900: #004314;
  --btly-color-green-950: #002609;
  --btly-color-sunshine-50: #FFFBE2;
  --btly-color-sunshine-100: #FFF8D2;
  --btly-color-sunshine-200: #FFF0B5;
  --btly-color-sunshine-300: #FFE284;
  --btly-color-sunshine-400: #FFCE2B;
  --btly-color-sunshine-500: #FFB900;
  --btly-color-sunshine-600: #D49900;
  --btly-color-sunshine-700: #A27300;
  --btly-color-sunshine-800: #734F01;
  --btly-color-sunshine-900: #523704;
  --btly-color-sunshine-950: #271903;
  --btly-color-orange-50: #FFF2EC;
  --btly-color-orange-100: #FFE2D4;
  --btly-color-orange-200: #FFC6AB;
  --btly-color-orange-300: #FFA17B;
  --btly-color-orange-400: #FF8658;
  --btly-color-orange-500: #FF7342;
  --btly-color-orange-600: #E04F10;
  --btly-color-orange-700: #B52C00;
  --btly-color-orange-800: #831F00;
  --btly-color-orange-900: #5C1B02;
  --btly-color-orange-950: #390D00;
  --btly-color-amber-50: #FFF7ED;
  --btly-color-amber-100: #FFEDD5;
  --btly-color-amber-200: #FED7AA;
  --btly-color-amber-300: #FDBA74;
  --btly-color-amber-400: #FB923C;
  --btly-color-amber-500: #F97316;
  --btly-color-amber-600: #EA580C;
  --btly-color-amber-700: #C2410C;
  --btly-color-amber-800: #9A3412;
  --btly-color-amber-900: #7C2D12;
  --btly-color-amber-950: #431407;
  --btly-color-red-50: #FFF8F7;
  --btly-color-red-100: #FFEDEB;
  --btly-color-red-200: #FFD7D4;
  --btly-color-red-300: #FBB2AA;
  --btly-color-red-400: #FA766E;
  --btly-color-red-500: #ED3E3E;
  --btly-color-red-600: #D40A24;
  --btly-color-red-700: #AD0719;
  --btly-color-red-800: #830711;
  --btly-color-red-900: #680009;
  --btly-color-red-950: #400506;
  --btly-color-pink-50: #FFF8FA;
  --btly-color-pink-100: #FFF0F4;
  --btly-color-pink-200: #FFDFEA;
  --btly-color-pink-300: #FFC2D6;
  --btly-color-pink-400: #FC9ABE;
  --btly-color-pink-500: #FF6DA9;
  --btly-color-pink-600: #E14B8E;
  --btly-color-pink-700: #BA276E;
  --btly-color-pink-800: #8A144F;
  --btly-color-pink-900: #671039;
  --btly-color-pink-950: #38081E;
  --btly-color-purple-50: #FAF5FF;
  --btly-color-purple-100: #F3E8FF;
  --btly-color-purple-200: #E9D4FF;
  --btly-color-purple-300: #DAB2FF;
  --btly-color-purple-400: #C27AFF;
  --btly-color-purple-500: #AD46FF;
  --btly-color-purple-600: #9810FA;
  --btly-color-purple-700: #8200DB;
  --btly-color-purple-800: #6E11B0;
  --btly-color-purple-900: #59168B;
  --btly-color-purple-950: #3C0366;
  --btly-font-family-mona-sans: "Mona Sans";
  --btly-font-family-inter: Inter;
  --btly-font-family-roboto: Roboto;
  --btly-font-weight-bold: 700;
  --btly-font-weight-semibold: 600;
  --btly-font-weight-medium: 500;
  --btly-font-weight-regular: 400;
  --btly-font-weight-semibold-compact: 600;
  --btly-number-0: 0;
  --btly-number-1: 1px;
  --btly-number-2: 2px;
  --btly-number-4: 4px;
  --btly-number-6: 6px;
  --btly-number-8: 8px;
  --btly-number-10: 10px;
  --btly-number-12: 12px;
  --btly-number-14: 14px;
  --btly-number-16: 16px;
  --btly-number-18: 18px;
  --btly-number-20: 20px;
  --btly-number-24: 24px;
  --btly-number-28: 28px;
  --btly-number-32: 32px;
  --btly-number-36: 36px;
  --btly-number-40: 40px;
  --btly-number-48: 48px;
  --btly-number-56: 56px;
  --btly-number-64: 64px;
  --btly-number-72: 72px;
  --btly-number-80: 80px;
  --btly-number-88: 88px;
  --btly-number-96: 96px;
  --btly-number-112: 112px;
  --btly-number-128: 128px;
  --btly-number-160: 160px;
  --btly-number-1-5: 1.5px;
  --btly-number-full: 9999px;

  /* semantic (client) — the public surface for ALL UI */
  --btly-text-primary: var(--btly-color-gray-950);
  --btly-text-secondary: var(--btly-color-gray-800);
  --btly-text-tertiary: var(--btly-color-gray-500);
  --btly-text-disabled: var(--btly-color-gray-300);
  --btly-text-placeholder: var(--btly-color-gray-300);
  --btly-text-inverse: var(--btly-color-base-white);
  --btly-text-brand: var(--btly-color-ultraviolet-500);
  --btly-action-primary-default: var(--btly-color-ultraviolet-500);
  --btly-action-primary-hover: var(--btly-color-ultraviolet-600);
  --btly-action-primary-pressed: var(--btly-color-ultraviolet-700);
  --btly-action-primary-disabled: var(--btly-color-gray-200);
  --btly-action-primary-disabled-text: var(--btly-color-gray-400);
  --btly-action-accent-default: var(--btly-color-sunshine-400);
  --btly-action-accent-hover: var(--btly-color-sunshine-500);
  --btly-action-accent-pressed: var(--btly-color-sunshine-600);
  --btly-action-accent-disabled: var(--btly-color-gray-200);
  --btly-action-accent-disabled-text: var(--btly-color-gray-400);
  --btly-action-secondary-default: var(--btly-color-gray-700);
  --btly-action-secondary-hover: var(--btly-color-gray-800);
  --btly-action-secondary-pressed: var(--btly-color-gray-700);
  --btly-action-secondary-disabled: var(--btly-color-gray-200);
  --btly-action-secondary-disabled-text: var(--btly-color-gray-400);
  --btly-action-tertiary-default: var(--btly-color-gray-500);
  --btly-action-tertiary-hover: var(--btly-color-gray-600);
  --btly-action-tertiary-pressed: var(--btly-color-gray-700);
  --btly-action-tertiary-disabled: var(--btly-color-gray-200);
  --btly-action-tertiary-disabled-text: var(--btly-color-gray-400);
  --btly-action-destructive-default: var(--btly-color-red-500);
  --btly-action-destructive-hover: var(--btly-color-red-600);
  --btly-action-destructive-pressed: var(--btly-color-red-700);
  --btly-action-destructive-disabled: var(--btly-color-gray-200);
  --btly-action-destructive-disabled-text: var(--btly-color-gray-400);
  --btly-action-inverse-default: var(--btly-color-base-white);
  --btly-action-inverse-hover: var(--btly-color-ultraviolet-300);
  --btly-action-inverse-pressed: var(--btly-color-ultraviolet-400);
  --btly-action-inverse-disabled: var(--btly-color-ultraviolet-600);
  --btly-action-inverse-disabled-text: var(--btly-color-gray-400);
  --btly-surface-canvas: var(--btly-color-base-white);
  --btly-surface-card: var(--btly-color-base-white);
  --btly-surface-secondary: var(--btly-color-gray-50);
  --btly-surface-tertiary: var(--btly-color-gray-100);
  --btly-surface-brand: var(--btly-color-ultraviolet-100);
  --btly-surface-inverse: var(--btly-color-gray-700);
  --btly-surface-blackout: rgba(31, 31, 31, 0.4);
  --btly-surface-blackout-subtle: rgba(31, 31, 31, 0.2);
  --btly-border-default: var(--btly-color-gray-200);
  --btly-border-strong: var(--btly-color-gray-300);
  --btly-border-brand: var(--btly-color-ultraviolet-500);
  --btly-border-brand-subtle: var(--btly-color-ultraviolet-300);
  --btly-border-focus-halo: rgba(115, 82, 252, 0.25);
  --btly-border-inverse: var(--btly-color-base-white);
  --btly-icon-default: var(--btly-color-gray-500);
  --btly-icon-muted: var(--btly-color-gray-400);
  --btly-icon-disabled: var(--btly-color-gray-400);
  --btly-icon-brand: var(--btly-color-ultraviolet-500);
  --btly-icon-inverse: var(--btly-color-base-white);
  --btly-status-error-text: var(--btly-color-red-500);
  --btly-status-error-bg: var(--btly-color-red-50);
  --btly-status-error-bg-strong: var(--btly-color-red-100);
  --btly-status-error-border: var(--btly-color-red-200);
  --btly-status-error-accent: var(--btly-color-red-500);
  --btly-status-attention-text: var(--btly-color-amber-500);
  --btly-status-attention-bg: var(--btly-color-amber-50);
  --btly-status-attention-bg-strong: var(--btly-color-amber-100);
  --btly-status-attention-border: var(--btly-color-amber-200);
  --btly-status-attention-accent: var(--btly-color-amber-500);
  --btly-status-warning-text: var(--btly-color-sunshine-600);
  --btly-status-warning-bg: var(--btly-color-sunshine-50);
  --btly-status-warning-bg-strong: var(--btly-color-sunshine-100);
  --btly-status-warning-border: var(--btly-color-sunshine-200);
  --btly-status-warning-accent: var(--btly-color-sunshine-500);
  --btly-status-info-text: var(--btly-color-sky-600);
  --btly-status-info-bg: var(--btly-color-sky-50);
  --btly-status-info-bg-strong: var(--btly-color-sky-100);
  --btly-status-info-border: var(--btly-color-sky-200);
  --btly-status-info-accent: var(--btly-color-sky-500);
  --btly-status-success-text: var(--btly-color-green-600);
  --btly-status-success-bg: var(--btly-color-green-50);
  --btly-status-success-bg-strong: var(--btly-color-green-100);
  --btly-status-success-border: var(--btly-color-green-200);
  --btly-status-success-accent: var(--btly-color-green-500);
  --btly-status-neutral-text: var(--btly-color-gray-500);
  --btly-status-neutral-bg: var(--btly-color-gray-50);
  --btly-status-neutral-bg-strong: var(--btly-color-gray-100);
  --btly-status-neutral-border: var(--btly-color-gray-200);
  --btly-status-neutral-accent: var(--btly-color-gray-500);
  --btly-space-0: var(--btly-number-0);
  --btly-space-1: var(--btly-number-1);
  --btly-space-2: var(--btly-number-2);
  --btly-space-4: var(--btly-number-4);
  --btly-space-6: var(--btly-number-6);
  --btly-space-8: var(--btly-number-8);
  --btly-space-10: var(--btly-number-10);
  --btly-space-12: var(--btly-number-12);
  --btly-space-16: var(--btly-number-16);
  --btly-space-20: var(--btly-number-20);
  --btly-space-24: var(--btly-number-24);
  --btly-space-32: var(--btly-number-32);
  --btly-space-36: var(--btly-number-36);
  --btly-space-40: var(--btly-number-40);
  --btly-space-48: var(--btly-number-48);
  --btly-space-56: var(--btly-number-56);
  --btly-space-64: var(--btly-number-64);
  --btly-space-72: var(--btly-number-72);
  --btly-space-80: var(--btly-number-80);
  --btly-space-96: var(--btly-number-96);
  --btly-space-112: var(--btly-number-112);
  --btly-space-128: var(--btly-number-128);
  --btly-radius-0: var(--btly-number-0);
  --btly-radius-1: var(--btly-number-1);
  --btly-radius-2: var(--btly-number-2);
  --btly-radius-4: var(--btly-number-4);
  --btly-radius-6: var(--btly-number-6);
  --btly-radius-8: var(--btly-number-8);
  --btly-radius-10: var(--btly-number-10);
  --btly-radius-12: var(--btly-number-12);
  --btly-radius-16: var(--btly-number-16);
  --btly-radius-20: var(--btly-number-20);
  --btly-radius-24: var(--btly-number-24);
  --btly-radius-32: var(--btly-number-32);
  --btly-radius-40: var(--btly-number-40);
  --btly-radius-48: var(--btly-number-48);
  --btly-radius-80: var(--btly-number-80);
  --btly-radius-full: var(--btly-number-full);
  --btly-border-width-0: var(--btly-number-0);
  --btly-border-width-1: var(--btly-number-1);
  --btly-border-width-2: var(--btly-number-2);
  --btly-border-width-4: var(--btly-number-4);
  --btly-border-width-1-5: var(--btly-number-1-5);
  --btly-typography-display-xl-font: var(--btly-font-family-mona-sans);
  --btly-typography-display-xl-weight: var(--btly-font-weight-bold);
  --btly-typography-display-xl-size: var(--btly-number-88);
  --btly-typography-display-xl-line-height: var(--btly-number-96);
  --btly-typography-display-xl-letter-spacing: var(--btly-number-0);
  --btly-typography-display-l-font: var(--btly-font-family-mona-sans);
  --btly-typography-display-l-weight: var(--btly-font-weight-bold);
  --btly-typography-display-l-size: var(--btly-number-72);
  --btly-typography-display-l-line-height: var(--btly-number-80);
  --btly-typography-display-l-letter-spacing: var(--btly-number-0);
  --btly-typography-display-m-font: var(--btly-font-family-mona-sans);
  --btly-typography-display-m-weight: var(--btly-font-weight-bold);
  --btly-typography-display-m-size: var(--btly-number-64);
  --btly-typography-display-m-line-height: var(--btly-number-72);
  --btly-typography-display-m-letter-spacing: var(--btly-number-0);
  --btly-typography-heading-xl-font: var(--btly-font-family-mona-sans);
  --btly-typography-heading-xl-weight: var(--btly-font-weight-bold);
  --btly-typography-heading-xl-size: var(--btly-number-48);
  --btly-typography-heading-xl-line-height: var(--btly-number-56);
  --btly-typography-heading-xl-letter-spacing: var(--btly-number-0);
  --btly-typography-heading-l-font: var(--btly-font-family-mona-sans);
  --btly-typography-heading-l-weight: var(--btly-font-weight-bold);
  --btly-typography-heading-l-size: var(--btly-number-32);
  --btly-typography-heading-l-line-height: var(--btly-number-40);
  --btly-typography-heading-l-letter-spacing: var(--btly-number-0);
  --btly-typography-heading-m-font: var(--btly-font-family-mona-sans);
  --btly-typography-heading-m-weight: var(--btly-font-weight-bold);
  --btly-typography-heading-m-size: var(--btly-number-28);
  --btly-typography-heading-m-line-height: var(--btly-number-36);
  --btly-typography-heading-m-letter-spacing: var(--btly-number-0);
  --btly-typography-heading-s-font: var(--btly-font-family-mona-sans);
  --btly-typography-heading-s-weight: var(--btly-font-weight-bold);
  --btly-typography-heading-s-size: var(--btly-number-24);
  --btly-typography-heading-s-line-height: var(--btly-number-32);
  --btly-typography-heading-s-letter-spacing: var(--btly-number-0);
  --btly-typography-title-xl-font: var(--btly-font-family-inter);
  --btly-typography-title-xl-weight: var(--btly-font-weight-semibold);
  --btly-typography-title-xl-size: var(--btly-number-20);
  --btly-typography-title-xl-line-height: var(--btly-number-24);
  --btly-typography-title-xl-letter-spacing: var(--btly-number-0);
  --btly-typography-title-l-font: var(--btly-font-family-inter);
  --btly-typography-title-l-weight: var(--btly-font-weight-semibold);
  --btly-typography-title-l-size: var(--btly-number-18);
  --btly-typography-title-l-line-height: var(--btly-number-24);
  --btly-typography-title-l-letter-spacing: var(--btly-number-0);
  --btly-typography-title-m-font: var(--btly-font-family-inter);
  --btly-typography-title-m-weight: var(--btly-font-weight-semibold);
  --btly-typography-title-m-size: var(--btly-number-16);
  --btly-typography-title-m-line-height: var(--btly-number-24);
  --btly-typography-title-m-letter-spacing: var(--btly-number-0);
  --btly-typography-title-s-font: var(--btly-font-family-inter);
  --btly-typography-title-s-weight: var(--btly-font-weight-semibold);
  --btly-typography-title-s-size: var(--btly-number-14);
  --btly-typography-title-s-line-height: var(--btly-number-20);
  --btly-typography-title-s-letter-spacing: var(--btly-number-0);
  --btly-typography-body-xl-font: var(--btly-font-family-inter);
  --btly-typography-body-xl-weight: var(--btly-font-weight-regular);
  --btly-typography-body-xl-size: var(--btly-number-18);
  --btly-typography-body-xl-line-height: var(--btly-number-24);
  --btly-typography-body-xl-letter-spacing: var(--btly-number-0);
  --btly-typography-body-l-font: var(--btly-font-family-inter);
  --btly-typography-body-l-weight: var(--btly-font-weight-regular);
  --btly-typography-body-l-size: var(--btly-number-16);
  --btly-typography-body-l-line-height: var(--btly-number-24);
  --btly-typography-body-l-letter-spacing: var(--btly-number-0);
  --btly-typography-body-m-font: var(--btly-font-family-inter);
  --btly-typography-body-m-weight: var(--btly-font-weight-regular);
  --btly-typography-body-m-size: var(--btly-number-14);
  --btly-typography-body-m-line-height: var(--btly-number-20);
  --btly-typography-body-m-letter-spacing: var(--btly-number-0);
  --btly-typography-body-s-font: var(--btly-font-family-inter);
  --btly-typography-body-s-weight: var(--btly-font-weight-regular);
  --btly-typography-body-s-size: var(--btly-number-12);
  --btly-typography-body-s-line-height: var(--btly-number-16);
  --btly-typography-body-s-letter-spacing: var(--btly-number-0);
  --btly-typography-label-m-font: var(--btly-font-family-inter);
  --btly-typography-label-m-weight: var(--btly-font-weight-medium);
  --btly-typography-label-m-size: var(--btly-number-12);
  --btly-typography-label-m-line-height: var(--btly-number-16);
  --btly-typography-label-m-letter-spacing: var(--btly-number-0);
  --btly-typography-label-s-font: var(--btly-font-family-inter);
  --btly-typography-label-s-weight: var(--btly-font-weight-medium);
  --btly-typography-label-s-size: var(--btly-number-10);
  --btly-typography-label-s-line-height: var(--btly-number-12);
  --btly-typography-label-s-letter-spacing: var(--btly-number-0);
  --btly-discipline-math-surface: var(--btly-color-ultraviolet-50);
  --btly-discipline-math-surface-strong: var(--btly-color-ultraviolet-100);
  --btly-discipline-math-border: var(--btly-color-ultraviolet-200);
  --btly-discipline-math-accent: var(--btly-color-ultraviolet-500);
  --btly-discipline-math-text: var(--btly-color-ultraviolet-600);
  --btly-discipline-ela-surface: var(--btly-color-sky-50);
  --btly-discipline-ela-surface-strong: var(--btly-color-sky-100);
  --btly-discipline-ela-border: var(--btly-color-sky-200);
  --btly-discipline-ela-accent: var(--btly-color-sky-500);
  --btly-discipline-ela-text: var(--btly-color-sky-700);
  --btly-base-white: var(--btly-color-base-white);
  --btly-base-black: var(--btly-color-base-black);
  --btly-base-transparent: rgba(0, 0, 0, 0);
  --btly-effects-shadow: rgba(31, 31, 31, 0.08);
  --btly-effects-glass-dark: rgba(31, 31, 31, 0.2);
  --btly-effects-glass-light: rgba(255, 255, 255, 0.8);

  /* brand palette — illustration / marketing ONLY */
  --btly-brand-ultraviolet-50: var(--btly-color-ultraviolet-50);
  --btly-brand-ultraviolet-100: var(--btly-color-ultraviolet-100);
  --btly-brand-ultraviolet-200: var(--btly-color-ultraviolet-200);
  --btly-brand-ultraviolet-300: var(--btly-color-ultraviolet-300);
  --btly-brand-ultraviolet-400: var(--btly-color-ultraviolet-400);
  --btly-brand-ultraviolet-600: var(--btly-color-ultraviolet-600);
  --btly-brand-ultraviolet-800: var(--btly-color-ultraviolet-800);
  --btly-brand-ultraviolet-950: var(--btly-color-ultraviolet-950);
  --btly-brand-ultraviolet-500-primary: var(--btly-color-ultraviolet-500);
  --btly-brand-green-50: var(--btly-color-green-50);
  --btly-brand-green-100: var(--btly-color-green-100);
  --btly-brand-green-200: var(--btly-color-green-200);
  --btly-brand-green-300: var(--btly-color-green-300);
  --btly-brand-green-400: var(--btly-color-green-400);
  --btly-brand-green-600: var(--btly-color-green-600);
  --btly-brand-green-800: var(--btly-color-green-800);
  --btly-brand-green-950: var(--btly-color-green-950);
  --btly-brand-green-500-primary: var(--btly-color-green-500);
  --btly-brand-sky-50: var(--btly-color-sky-50);
  --btly-brand-sky-100: var(--btly-color-sky-100);
  --btly-brand-sky-200: var(--btly-color-sky-200);
  --btly-brand-sky-300: var(--btly-color-sky-300);
  --btly-brand-sky-400: var(--btly-color-sky-400);
  --btly-brand-sky-600: var(--btly-color-sky-600);
  --btly-brand-sky-800: var(--btly-color-sky-800);
  --btly-brand-sky-950: var(--btly-color-sky-950);
  --btly-brand-sky-500-primary: var(--btly-color-sky-500);
  --btly-brand-pink-50: var(--btly-color-pink-50);
  --btly-brand-pink-100: var(--btly-color-pink-100);
  --btly-brand-pink-200: var(--btly-color-pink-200);
  --btly-brand-pink-300: var(--btly-color-pink-300);
  --btly-brand-pink-400: var(--btly-color-pink-400);
  --btly-brand-pink-600: var(--btly-color-pink-600);
  --btly-brand-pink-800: var(--btly-color-pink-800);
  --btly-brand-pink-950: var(--btly-color-pink-950);
  --btly-brand-pink-500-primary: var(--btly-color-pink-500);
  --btly-brand-orange-50: var(--btly-color-orange-50);
  --btly-brand-orange-100: var(--btly-color-orange-100);
  --btly-brand-orange-200: var(--btly-color-orange-200);
  --btly-brand-orange-300: var(--btly-color-orange-300);
  --btly-brand-orange-400: var(--btly-color-orange-400);
  --btly-brand-orange-600: var(--btly-color-orange-600);
  --btly-brand-orange-800: var(--btly-color-orange-800);
  --btly-brand-orange-950: var(--btly-color-orange-950);
  --btly-brand-orange-500-primary: var(--btly-color-orange-500);
  --btly-brand-sunshine-50: var(--btly-color-sunshine-50);
  --btly-brand-sunshine-100: var(--btly-color-sunshine-100);
  --btly-brand-sunshine-200: var(--btly-color-sunshine-200);
  --btly-brand-sunshine-300: var(--btly-color-sunshine-300);
  --btly-brand-sunshine-400: var(--btly-color-sunshine-400);
  --btly-brand-sunshine-600: var(--btly-color-sunshine-600);
  --btly-brand-sunshine-800: var(--btly-color-sunshine-800);
  --btly-brand-sunshine-950: var(--btly-color-sunshine-950);
  --btly-brand-sunshine-500-primary: var(--btly-color-sunshine-500);
  --btly-brand-gray-50: var(--btly-color-gray-50);
  --btly-brand-gray-100: var(--btly-color-gray-100);
  --btly-brand-gray-200: var(--btly-color-gray-200);
  --btly-brand-gray-300: var(--btly-color-gray-300);
  --btly-brand-gray-400: var(--btly-color-gray-400);
  --btly-brand-gray-500: var(--btly-color-gray-500);
  --btly-brand-gray-600: var(--btly-color-gray-600);
  --btly-brand-gray-800: var(--btly-color-gray-800);
  --btly-brand-gray-950: var(--btly-color-gray-950);
  --btly-brand-purple-50: var(--btly-color-purple-50);
  --btly-brand-purple-100: var(--btly-color-purple-100);
  --btly-brand-purple-200: var(--btly-color-purple-200);
  --btly-brand-purple-300: var(--btly-color-purple-300);
  --btly-brand-purple-400: var(--btly-color-purple-400);
  --btly-brand-purple-600: var(--btly-color-purple-600);
  --btly-brand-purple-800: var(--btly-color-purple-800);
  --btly-brand-purple-950: var(--btly-color-purple-950);
  --btly-brand-purple-500-primary: var(--btly-color-purple-500);
}

/* typography — apply a whole text style via one class */
.btly-text-display-xl {
  font-family: var(--btly-typography-display-xl-font);
  font-weight: var(--btly-typography-display-xl-weight);
  font-size: var(--btly-typography-display-xl-size);
  line-height: var(--btly-typography-display-xl-line-height);
  letter-spacing: var(--btly-typography-display-xl-letter-spacing);
}

.btly-text-display-l {
  font-family: var(--btly-typography-display-l-font);
  font-weight: var(--btly-typography-display-l-weight);
  font-size: var(--btly-typography-display-l-size);
  line-height: var(--btly-typography-display-l-line-height);
  letter-spacing: var(--btly-typography-display-l-letter-spacing);
}

.btly-text-display-m {
  font-family: var(--btly-typography-display-m-font);
  font-weight: var(--btly-typography-display-m-weight);
  font-size: var(--btly-typography-display-m-size);
  line-height: var(--btly-typography-display-m-line-height);
  letter-spacing: var(--btly-typography-display-m-letter-spacing);
}

.btly-text-heading-xl {
  font-family: var(--btly-typography-heading-xl-font);
  font-weight: var(--btly-typography-heading-xl-weight);
  font-size: var(--btly-typography-heading-xl-size);
  line-height: var(--btly-typography-heading-xl-line-height);
  letter-spacing: var(--btly-typography-heading-xl-letter-spacing);
}

.btly-text-heading-l {
  font-family: var(--btly-typography-heading-l-font);
  font-weight: var(--btly-typography-heading-l-weight);
  font-size: var(--btly-typography-heading-l-size);
  line-height: var(--btly-typography-heading-l-line-height);
  letter-spacing: var(--btly-typography-heading-l-letter-spacing);
}

.btly-text-heading-m {
  font-family: var(--btly-typography-heading-m-font);
  font-weight: var(--btly-typography-heading-m-weight);
  font-size: var(--btly-typography-heading-m-size);
  line-height: var(--btly-typography-heading-m-line-height);
  letter-spacing: var(--btly-typography-heading-m-letter-spacing);
}

.btly-text-heading-s {
  font-family: var(--btly-typography-heading-s-font);
  font-weight: var(--btly-typography-heading-s-weight);
  font-size: var(--btly-typography-heading-s-size);
  line-height: var(--btly-typography-heading-s-line-height);
  letter-spacing: var(--btly-typography-heading-s-letter-spacing);
}

.btly-text-title-xl {
  font-family: var(--btly-typography-title-xl-font);
  font-weight: var(--btly-typography-title-xl-weight);
  font-size: var(--btly-typography-title-xl-size);
  line-height: var(--btly-typography-title-xl-line-height);
  letter-spacing: var(--btly-typography-title-xl-letter-spacing);
}

.btly-text-title-l {
  font-family: var(--btly-typography-title-l-font);
  font-weight: var(--btly-typography-title-l-weight);
  font-size: var(--btly-typography-title-l-size);
  line-height: var(--btly-typography-title-l-line-height);
  letter-spacing: var(--btly-typography-title-l-letter-spacing);
}

.btly-text-title-m {
  font-family: var(--btly-typography-title-m-font);
  font-weight: var(--btly-typography-title-m-weight);
  font-size: var(--btly-typography-title-m-size);
  line-height: var(--btly-typography-title-m-line-height);
  letter-spacing: var(--btly-typography-title-m-letter-spacing);
}

.btly-text-title-s {
  font-family: var(--btly-typography-title-s-font);
  font-weight: var(--btly-typography-title-s-weight);
  font-size: var(--btly-typography-title-s-size);
  line-height: var(--btly-typography-title-s-line-height);
  letter-spacing: var(--btly-typography-title-s-letter-spacing);
}

.btly-text-body-xl {
  font-family: var(--btly-typography-body-xl-font);
  font-weight: var(--btly-typography-body-xl-weight);
  font-size: var(--btly-typography-body-xl-size);
  line-height: var(--btly-typography-body-xl-line-height);
  letter-spacing: var(--btly-typography-body-xl-letter-spacing);
}

.btly-text-body-l {
  font-family: var(--btly-typography-body-l-font);
  font-weight: var(--btly-typography-body-l-weight);
  font-size: var(--btly-typography-body-l-size);
  line-height: var(--btly-typography-body-l-line-height);
  letter-spacing: var(--btly-typography-body-l-letter-spacing);
}

.btly-text-body-m {
  font-family: var(--btly-typography-body-m-font);
  font-weight: var(--btly-typography-body-m-weight);
  font-size: var(--btly-typography-body-m-size);
  line-height: var(--btly-typography-body-m-line-height);
  letter-spacing: var(--btly-typography-body-m-letter-spacing);
}

.btly-text-body-s {
  font-family: var(--btly-typography-body-s-font);
  font-weight: var(--btly-typography-body-s-weight);
  font-size: var(--btly-typography-body-s-size);
  line-height: var(--btly-typography-body-s-line-height);
  letter-spacing: var(--btly-typography-body-s-letter-spacing);
}

.btly-text-label-m {
  font-family: var(--btly-typography-label-m-font);
  font-weight: var(--btly-typography-label-m-weight);
  font-size: var(--btly-typography-label-m-size);
  line-height: var(--btly-typography-label-m-line-height);
  letter-spacing: var(--btly-typography-label-m-letter-spacing);
}

.btly-text-label-s {
  font-family: var(--btly-typography-label-s-font);
  font-weight: var(--btly-typography-label-s-weight);
  font-size: var(--btly-typography-label-s-size);
  line-height: var(--btly-typography-label-s-line-height);
  letter-spacing: var(--btly-typography-label-s-letter-spacing);
}

/* responsive typography — up-breakpoint role overrides: `md:btly-text-<role>` etc. */
@media (min-width: 740px) {
  .md\:btly-text-display-xl {
    font-family: var(--btly-typography-display-xl-font);
    font-weight: var(--btly-typography-display-xl-weight);
    font-size: var(--btly-typography-display-xl-size);
    line-height: var(--btly-typography-display-xl-line-height);
    letter-spacing: var(--btly-typography-display-xl-letter-spacing);
  }
  .md\:btly-text-display-l {
    font-family: var(--btly-typography-display-l-font);
    font-weight: var(--btly-typography-display-l-weight);
    font-size: var(--btly-typography-display-l-size);
    line-height: var(--btly-typography-display-l-line-height);
    letter-spacing: var(--btly-typography-display-l-letter-spacing);
  }
  .md\:btly-text-display-m {
    font-family: var(--btly-typography-display-m-font);
    font-weight: var(--btly-typography-display-m-weight);
    font-size: var(--btly-typography-display-m-size);
    line-height: var(--btly-typography-display-m-line-height);
    letter-spacing: var(--btly-typography-display-m-letter-spacing);
  }
  .md\:btly-text-heading-xl {
    font-family: var(--btly-typography-heading-xl-font);
    font-weight: var(--btly-typography-heading-xl-weight);
    font-size: var(--btly-typography-heading-xl-size);
    line-height: var(--btly-typography-heading-xl-line-height);
    letter-spacing: var(--btly-typography-heading-xl-letter-spacing);
  }
  .md\:btly-text-heading-l {
    font-family: var(--btly-typography-heading-l-font);
    font-weight: var(--btly-typography-heading-l-weight);
    font-size: var(--btly-typography-heading-l-size);
    line-height: var(--btly-typography-heading-l-line-height);
    letter-spacing: var(--btly-typography-heading-l-letter-spacing);
  }
  .md\:btly-text-heading-m {
    font-family: var(--btly-typography-heading-m-font);
    font-weight: var(--btly-typography-heading-m-weight);
    font-size: var(--btly-typography-heading-m-size);
    line-height: var(--btly-typography-heading-m-line-height);
    letter-spacing: var(--btly-typography-heading-m-letter-spacing);
  }
  .md\:btly-text-heading-s {
    font-family: var(--btly-typography-heading-s-font);
    font-weight: var(--btly-typography-heading-s-weight);
    font-size: var(--btly-typography-heading-s-size);
    line-height: var(--btly-typography-heading-s-line-height);
    letter-spacing: var(--btly-typography-heading-s-letter-spacing);
  }
  .md\:btly-text-title-xl {
    font-family: var(--btly-typography-title-xl-font);
    font-weight: var(--btly-typography-title-xl-weight);
    font-size: var(--btly-typography-title-xl-size);
    line-height: var(--btly-typography-title-xl-line-height);
    letter-spacing: var(--btly-typography-title-xl-letter-spacing);
  }
  .md\:btly-text-title-l {
    font-family: var(--btly-typography-title-l-font);
    font-weight: var(--btly-typography-title-l-weight);
    font-size: var(--btly-typography-title-l-size);
    line-height: var(--btly-typography-title-l-line-height);
    letter-spacing: var(--btly-typography-title-l-letter-spacing);
  }
  .md\:btly-text-title-m {
    font-family: var(--btly-typography-title-m-font);
    font-weight: var(--btly-typography-title-m-weight);
    font-size: var(--btly-typography-title-m-size);
    line-height: var(--btly-typography-title-m-line-height);
    letter-spacing: var(--btly-typography-title-m-letter-spacing);
  }
  .md\:btly-text-title-s {
    font-family: var(--btly-typography-title-s-font);
    font-weight: var(--btly-typography-title-s-weight);
    font-size: var(--btly-typography-title-s-size);
    line-height: var(--btly-typography-title-s-line-height);
    letter-spacing: var(--btly-typography-title-s-letter-spacing);
  }
  .md\:btly-text-body-xl {
    font-family: var(--btly-typography-body-xl-font);
    font-weight: var(--btly-typography-body-xl-weight);
    font-size: var(--btly-typography-body-xl-size);
    line-height: var(--btly-typography-body-xl-line-height);
    letter-spacing: var(--btly-typography-body-xl-letter-spacing);
  }
  .md\:btly-text-body-l {
    font-family: var(--btly-typography-body-l-font);
    font-weight: var(--btly-typography-body-l-weight);
    font-size: var(--btly-typography-body-l-size);
    line-height: var(--btly-typography-body-l-line-height);
    letter-spacing: var(--btly-typography-body-l-letter-spacing);
  }
  .md\:btly-text-body-m {
    font-family: var(--btly-typography-body-m-font);
    font-weight: var(--btly-typography-body-m-weight);
    font-size: var(--btly-typography-body-m-size);
    line-height: var(--btly-typography-body-m-line-height);
    letter-spacing: var(--btly-typography-body-m-letter-spacing);
  }
  .md\:btly-text-body-s {
    font-family: var(--btly-typography-body-s-font);
    font-weight: var(--btly-typography-body-s-weight);
    font-size: var(--btly-typography-body-s-size);
    line-height: var(--btly-typography-body-s-line-height);
    letter-spacing: var(--btly-typography-body-s-letter-spacing);
  }
  .md\:btly-text-label-m {
    font-family: var(--btly-typography-label-m-font);
    font-weight: var(--btly-typography-label-m-weight);
    font-size: var(--btly-typography-label-m-size);
    line-height: var(--btly-typography-label-m-line-height);
    letter-spacing: var(--btly-typography-label-m-letter-spacing);
  }
  .md\:btly-text-label-s {
    font-family: var(--btly-typography-label-s-font);
    font-weight: var(--btly-typography-label-s-weight);
    font-size: var(--btly-typography-label-s-size);
    line-height: var(--btly-typography-label-s-line-height);
    letter-spacing: var(--btly-typography-label-s-letter-spacing);
  }
}

@media (min-width: 1024px) {
  .lg\:btly-text-display-xl {
    font-family: var(--btly-typography-display-xl-font);
    font-weight: var(--btly-typography-display-xl-weight);
    font-size: var(--btly-typography-display-xl-size);
    line-height: var(--btly-typography-display-xl-line-height);
    letter-spacing: var(--btly-typography-display-xl-letter-spacing);
  }
  .lg\:btly-text-display-l {
    font-family: var(--btly-typography-display-l-font);
    font-weight: var(--btly-typography-display-l-weight);
    font-size: var(--btly-typography-display-l-size);
    line-height: var(--btly-typography-display-l-line-height);
    letter-spacing: var(--btly-typography-display-l-letter-spacing);
  }
  .lg\:btly-text-display-m {
    font-family: var(--btly-typography-display-m-font);
    font-weight: var(--btly-typography-display-m-weight);
    font-size: var(--btly-typography-display-m-size);
    line-height: var(--btly-typography-display-m-line-height);
    letter-spacing: var(--btly-typography-display-m-letter-spacing);
  }
  .lg\:btly-text-heading-xl {
    font-family: var(--btly-typography-heading-xl-font);
    font-weight: var(--btly-typography-heading-xl-weight);
    font-size: var(--btly-typography-heading-xl-size);
    line-height: var(--btly-typography-heading-xl-line-height);
    letter-spacing: var(--btly-typography-heading-xl-letter-spacing);
  }
  .lg\:btly-text-heading-l {
    font-family: var(--btly-typography-heading-l-font);
    font-weight: var(--btly-typography-heading-l-weight);
    font-size: var(--btly-typography-heading-l-size);
    line-height: var(--btly-typography-heading-l-line-height);
    letter-spacing: var(--btly-typography-heading-l-letter-spacing);
  }
  .lg\:btly-text-heading-m {
    font-family: var(--btly-typography-heading-m-font);
    font-weight: var(--btly-typography-heading-m-weight);
    font-size: var(--btly-typography-heading-m-size);
    line-height: var(--btly-typography-heading-m-line-height);
    letter-spacing: var(--btly-typography-heading-m-letter-spacing);
  }
  .lg\:btly-text-heading-s {
    font-family: var(--btly-typography-heading-s-font);
    font-weight: var(--btly-typography-heading-s-weight);
    font-size: var(--btly-typography-heading-s-size);
    line-height: var(--btly-typography-heading-s-line-height);
    letter-spacing: var(--btly-typography-heading-s-letter-spacing);
  }
  .lg\:btly-text-title-xl {
    font-family: var(--btly-typography-title-xl-font);
    font-weight: var(--btly-typography-title-xl-weight);
    font-size: var(--btly-typography-title-xl-size);
    line-height: var(--btly-typography-title-xl-line-height);
    letter-spacing: var(--btly-typography-title-xl-letter-spacing);
  }
  .lg\:btly-text-title-l {
    font-family: var(--btly-typography-title-l-font);
    font-weight: var(--btly-typography-title-l-weight);
    font-size: var(--btly-typography-title-l-size);
    line-height: var(--btly-typography-title-l-line-height);
    letter-spacing: var(--btly-typography-title-l-letter-spacing);
  }
  .lg\:btly-text-title-m {
    font-family: var(--btly-typography-title-m-font);
    font-weight: var(--btly-typography-title-m-weight);
    font-size: var(--btly-typography-title-m-size);
    line-height: var(--btly-typography-title-m-line-height);
    letter-spacing: var(--btly-typography-title-m-letter-spacing);
  }
  .lg\:btly-text-title-s {
    font-family: var(--btly-typography-title-s-font);
    font-weight: var(--btly-typography-title-s-weight);
    font-size: var(--btly-typography-title-s-size);
    line-height: var(--btly-typography-title-s-line-height);
    letter-spacing: var(--btly-typography-title-s-letter-spacing);
  }
  .lg\:btly-text-body-xl {
    font-family: var(--btly-typography-body-xl-font);
    font-weight: var(--btly-typography-body-xl-weight);
    font-size: var(--btly-typography-body-xl-size);
    line-height: var(--btly-typography-body-xl-line-height);
    letter-spacing: var(--btly-typography-body-xl-letter-spacing);
  }
  .lg\:btly-text-body-l {
    font-family: var(--btly-typography-body-l-font);
    font-weight: var(--btly-typography-body-l-weight);
    font-size: var(--btly-typography-body-l-size);
    line-height: var(--btly-typography-body-l-line-height);
    letter-spacing: var(--btly-typography-body-l-letter-spacing);
  }
  .lg\:btly-text-body-m {
    font-family: var(--btly-typography-body-m-font);
    font-weight: var(--btly-typography-body-m-weight);
    font-size: var(--btly-typography-body-m-size);
    line-height: var(--btly-typography-body-m-line-height);
    letter-spacing: var(--btly-typography-body-m-letter-spacing);
  }
  .lg\:btly-text-body-s {
    font-family: var(--btly-typography-body-s-font);
    font-weight: var(--btly-typography-body-s-weight);
    font-size: var(--btly-typography-body-s-size);
    line-height: var(--btly-typography-body-s-line-height);
    letter-spacing: var(--btly-typography-body-s-letter-spacing);
  }
  .lg\:btly-text-label-m {
    font-family: var(--btly-typography-label-m-font);
    font-weight: var(--btly-typography-label-m-weight);
    font-size: var(--btly-typography-label-m-size);
    line-height: var(--btly-typography-label-m-line-height);
    letter-spacing: var(--btly-typography-label-m-letter-spacing);
  }
  .lg\:btly-text-label-s {
    font-family: var(--btly-typography-label-s-font);
    font-weight: var(--btly-typography-label-s-weight);
    font-size: var(--btly-typography-label-s-size);
    line-height: var(--btly-typography-label-s-line-height);
    letter-spacing: var(--btly-typography-label-s-letter-spacing);
  }
}

@media (min-width: 1280px) {
  .xl\:btly-text-display-xl {
    font-family: var(--btly-typography-display-xl-font);
    font-weight: var(--btly-typography-display-xl-weight);
    font-size: var(--btly-typography-display-xl-size);
    line-height: var(--btly-typography-display-xl-line-height);
    letter-spacing: var(--btly-typography-display-xl-letter-spacing);
  }
  .xl\:btly-text-display-l {
    font-family: var(--btly-typography-display-l-font);
    font-weight: var(--btly-typography-display-l-weight);
    font-size: var(--btly-typography-display-l-size);
    line-height: var(--btly-typography-display-l-line-height);
    letter-spacing: var(--btly-typography-display-l-letter-spacing);
  }
  .xl\:btly-text-display-m {
    font-family: var(--btly-typography-display-m-font);
    font-weight: var(--btly-typography-display-m-weight);
    font-size: var(--btly-typography-display-m-size);
    line-height: var(--btly-typography-display-m-line-height);
    letter-spacing: var(--btly-typography-display-m-letter-spacing);
  }
  .xl\:btly-text-heading-xl {
    font-family: var(--btly-typography-heading-xl-font);
    font-weight: var(--btly-typography-heading-xl-weight);
    font-size: var(--btly-typography-heading-xl-size);
    line-height: var(--btly-typography-heading-xl-line-height);
    letter-spacing: var(--btly-typography-heading-xl-letter-spacing);
  }
  .xl\:btly-text-heading-l {
    font-family: var(--btly-typography-heading-l-font);
    font-weight: var(--btly-typography-heading-l-weight);
    font-size: var(--btly-typography-heading-l-size);
    line-height: var(--btly-typography-heading-l-line-height);
    letter-spacing: var(--btly-typography-heading-l-letter-spacing);
  }
  .xl\:btly-text-heading-m {
    font-family: var(--btly-typography-heading-m-font);
    font-weight: var(--btly-typography-heading-m-weight);
    font-size: var(--btly-typography-heading-m-size);
    line-height: var(--btly-typography-heading-m-line-height);
    letter-spacing: var(--btly-typography-heading-m-letter-spacing);
  }
  .xl\:btly-text-heading-s {
    font-family: var(--btly-typography-heading-s-font);
    font-weight: var(--btly-typography-heading-s-weight);
    font-size: var(--btly-typography-heading-s-size);
    line-height: var(--btly-typography-heading-s-line-height);
    letter-spacing: var(--btly-typography-heading-s-letter-spacing);
  }
  .xl\:btly-text-title-xl {
    font-family: var(--btly-typography-title-xl-font);
    font-weight: var(--btly-typography-title-xl-weight);
    font-size: var(--btly-typography-title-xl-size);
    line-height: var(--btly-typography-title-xl-line-height);
    letter-spacing: var(--btly-typography-title-xl-letter-spacing);
  }
  .xl\:btly-text-title-l {
    font-family: var(--btly-typography-title-l-font);
    font-weight: var(--btly-typography-title-l-weight);
    font-size: var(--btly-typography-title-l-size);
    line-height: var(--btly-typography-title-l-line-height);
    letter-spacing: var(--btly-typography-title-l-letter-spacing);
  }
  .xl\:btly-text-title-m {
    font-family: var(--btly-typography-title-m-font);
    font-weight: var(--btly-typography-title-m-weight);
    font-size: var(--btly-typography-title-m-size);
    line-height: var(--btly-typography-title-m-line-height);
    letter-spacing: var(--btly-typography-title-m-letter-spacing);
  }
  .xl\:btly-text-title-s {
    font-family: var(--btly-typography-title-s-font);
    font-weight: var(--btly-typography-title-s-weight);
    font-size: var(--btly-typography-title-s-size);
    line-height: var(--btly-typography-title-s-line-height);
    letter-spacing: var(--btly-typography-title-s-letter-spacing);
  }
  .xl\:btly-text-body-xl {
    font-family: var(--btly-typography-body-xl-font);
    font-weight: var(--btly-typography-body-xl-weight);
    font-size: var(--btly-typography-body-xl-size);
    line-height: var(--btly-typography-body-xl-line-height);
    letter-spacing: var(--btly-typography-body-xl-letter-spacing);
  }
  .xl\:btly-text-body-l {
    font-family: var(--btly-typography-body-l-font);
    font-weight: var(--btly-typography-body-l-weight);
    font-size: var(--btly-typography-body-l-size);
    line-height: var(--btly-typography-body-l-line-height);
    letter-spacing: var(--btly-typography-body-l-letter-spacing);
  }
  .xl\:btly-text-body-m {
    font-family: var(--btly-typography-body-m-font);
    font-weight: var(--btly-typography-body-m-weight);
    font-size: var(--btly-typography-body-m-size);
    line-height: var(--btly-typography-body-m-line-height);
    letter-spacing: var(--btly-typography-body-m-letter-spacing);
  }
  .xl\:btly-text-body-s {
    font-family: var(--btly-typography-body-s-font);
    font-weight: var(--btly-typography-body-s-weight);
    font-size: var(--btly-typography-body-s-size);
    line-height: var(--btly-typography-body-s-line-height);
    letter-spacing: var(--btly-typography-body-s-letter-spacing);
  }
  .xl\:btly-text-label-m {
    font-family: var(--btly-typography-label-m-font);
    font-weight: var(--btly-typography-label-m-weight);
    font-size: var(--btly-typography-label-m-size);
    line-height: var(--btly-typography-label-m-line-height);
    letter-spacing: var(--btly-typography-label-m-letter-spacing);
  }
  .xl\:btly-text-label-s {
    font-family: var(--btly-typography-label-s-font);
    font-weight: var(--btly-typography-label-s-weight);
    font-size: var(--btly-typography-label-s-size);
    line-height: var(--btly-typography-label-s-line-height);
    letter-spacing: var(--btly-typography-label-s-letter-spacing);
  }
}
/* Histoire playground frame — base typography + .story-page/.story-section layout. */

/* No `body { background }` here — Histoire forces body to transparent.
 * Canvas paint lives on .canvas-wrapper (see CanvasWrapper.vue). */
html,
body {
  margin: 0;
  padding: 0;
  font-family: var(--btly-font-family-inter), system-ui, sans-serif;
  font-size: 14px;
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  color: var(--btly-color-gray-900);
}

/* NO global reset here — the playground is the hostile-environment canary: DS components
 * must own their box (see docs/ARCHITECTURE.md). Playground chrome resets itself locally. */

/* Histoire renders each story's `#controls` slot by mounting the story component through the global
 * CanvasWrapper (addWrapper in histoire.setup.ts). That wrapper paints the canvas white + gray-900
 * text for the STORY, but the same paint lands INSIDE the Controls panel too — white control rows,
 * dark-on-dark hover text, invisible white checkboxes, mis-themed dropdowns. Neutralise it there.
 * `!important` is required: this selector ties on specificity (0,2,0) with CanvasWrapper's own scoped
 * rule `.canvas-wrapper[data-v-*]`, so without it the component style wins the source-order tie and
 * the panel stays white. `.histoire-story-controls` is Histoire-internal (like `.bind-preview-bg`) —
 * re-check on a Histoire upgrade. Never touches the real canvas (no `.histoire-story-controls` there). */
.histoire-story-controls .canvas-wrapper {
  min-height: 0 !important;
  background: transparent !important;
  color: inherit !important;
}

/* HstSelect's option list is a floating-vue dropdown (`CustomSelect`, not a native <select>)
 * teleported to <body>, OUTSIDE .histoire-story-controls — so the wrapper neutralisation above never
 * reaches it and its options render dark-on-dark. The option rows set their OWN dark colour, so an
 * inherited rule on the container loses — force every text node in the popup light with a descendant
 * selector + !important. Controls chrome only; the real story canvas is an iframe, so DS dropdowns
 * are untouched. */
.v-popper__inner,
.v-popper__inner * {
  color: var(--btly-color-base-white) !important;
}

.story-page {
  box-sizing: border-box;
  padding: 32px 40px 64px;
  max-width: 1280px;
}

.story-page__title {
  font-family: var(--btly-font-family-mona-sans);
  font-size: 32px;
  font-weight: var(--btly-font-weight-bold);
  letter-spacing: -0.4px;
  color: var(--btly-color-gray-900);
  margin: 0 0 8px;
  line-height: 1.15;
}

.story-page__subtitle {
  font-size: 13px;
  color: var(--btly-color-gray-500);
  margin: 0 0 32px;
  max-width: 760px;
  line-height: 1.55;
}

.story-page__subtitle code {
  font-family: ui-monospace, 'SF Mono', Menlo, monospace;
  font-size: 12px;
  padding: 1px 5px;
  border-radius: 3px;
  background: var(--btly-color-gray-100);
  color: var(--btly-color-gray-800);
}

.story-section {
  margin: 32px 0 0;
  padding-top: 24px;
  border-top: 1px solid var(--btly-color-gray-100);
}

.story-section:first-of-type {
  border-top: 0;
  padding-top: 0;
  margin-top: 0;
}

.story-section__title {
  font-family: var(--btly-font-family-mona-sans);
  font-size: 18px;
  font-weight: var(--btly-font-weight-bold);
  color: var(--btly-color-gray-900);
  margin: 0 0 20px;
  letter-spacing: -0.2px;
}

.story-section__hint {
  font-size: 13px;
  color: var(--btly-color-gray-500);
  margin: -16px 0 20px;
  line-height: 1.55;
  max-width: 760px;
}

.story-section__hint code {
  font-family: ui-monospace, 'SF Mono', Menlo, monospace;
  font-size: 12px;
  padding: 1px 5px;
  border-radius: 3px;
  background: var(--btly-color-gray-100);
  color: var(--btly-color-gray-800);
}
/* LumeeUI fonts — self-hosted via @fontsource; the weight set is derived from the typography tokens.
 * Consumer setup: import this file ONCE alongside your mode file (client / admin / smartest-minds .css) + style.css.
 * Family names stay pure (no fallback stacks) — a deliberate Figma-faithfulness decision (2026-07-31).
 * verify:ai keeps this list in sync with the tokens: a missing or extra weight fails the build. */
/* inter-cyrillic-ext-400-normal */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(/assets/inter-cyrillic-ext-400-normal-BQZuk6qB.woff2) format('woff2'), url(/assets/inter-cyrillic-ext-400-normal-DQukG94-.woff) format('woff');
  unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
}

/* inter-cyrillic-400-normal */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(/assets/inter-cyrillic-400-normal-obahsSVq.woff2) format('woff2'), url(/assets/inter-cyrillic-400-normal-HOLc17fK.woff) format('woff');
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}

/* inter-greek-ext-400-normal */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(/assets/inter-greek-ext-400-normal-DGGRlc-M.woff2) format('woff2'), url(/assets/inter-greek-ext-400-normal-KugGGMne.woff) format('woff');
  unicode-range: U+1F00-1FFF;
}

/* inter-greek-400-normal */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(/assets/inter-greek-400-normal-B4URO6DV.woff2) format('woff2'), url(/assets/inter-greek-400-normal-q2sYcFCs.woff) format('woff');
  unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;
}

/* inter-vietnamese-400-normal */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(/assets/inter-vietnamese-400-normal-DMkecbls.woff2) format('woff2'), url(/assets/inter-vietnamese-400-normal-Bbgyi5SW.woff) format('woff');
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}

/* inter-latin-ext-400-normal */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(/assets/inter-latin-ext-400-normal-C1nco2VV.woff2) format('woff2'), url(/assets/inter-latin-ext-400-normal-77YHD8bZ.woff) format('woff');
  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;
}

/* inter-latin-400-normal */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(/assets/inter-latin-400-normal-C38fXH4l.woff2) format('woff2'), url(/assets/inter-latin-400-normal-CyCys3Eg.woff) format('woff');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
/* inter-cyrillic-ext-500-normal */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(/assets/inter-cyrillic-ext-500-normal-B0yAr1jD.woff2) format('woff2'), url(/assets/inter-cyrillic-ext-500-normal-BmqWE9Dz.woff) format('woff');
  unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
}

/* inter-cyrillic-500-normal */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(/assets/inter-cyrillic-500-normal-BasfLYem.woff2) format('woff2'), url(/assets/inter-cyrillic-500-normal-CxZf_p3X.woff) format('woff');
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}

/* inter-greek-ext-500-normal */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(/assets/inter-greek-ext-500-normal-C4iEst2y.woff2) format('woff2'), url(/assets/inter-greek-ext-500-normal-2j5mBUwD.woff) format('woff');
  unicode-range: U+1F00-1FFF;
}

/* inter-greek-500-normal */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(/assets/inter-greek-500-normal-BIZE56-Y.woff2) format('woff2'), url(/assets/inter-greek-500-normal-Xzm54t5V.woff) format('woff');
  unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;
}

/* inter-vietnamese-500-normal */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(/assets/inter-vietnamese-500-normal-DOriooB6.woff2) format('woff2'), url(/assets/inter-vietnamese-500-normal-mJboJaSs.woff) format('woff');
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}

/* inter-latin-ext-500-normal */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(/assets/inter-latin-ext-500-normal-CV4jyFjo.woff2) format('woff2'), url(/assets/inter-latin-ext-500-normal-BxGbmqWO.woff) format('woff');
  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;
}

/* inter-latin-500-normal */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(/assets/inter-latin-500-normal-Cerq10X2.woff2) format('woff2'), url(/assets/inter-latin-500-normal-BL9OpVg8.woff) format('woff');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
/* inter-cyrillic-ext-600-normal */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url(/assets/inter-cyrillic-ext-600-normal-Dfes3d0z.woff2) format('woff2'), url(/assets/inter-cyrillic-ext-600-normal-Bcila6Z-.woff) format('woff');
  unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
}

/* inter-cyrillic-600-normal */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url(/assets/inter-cyrillic-600-normal-CWCymEST.woff2) format('woff2'), url(/assets/inter-cyrillic-600-normal-4D_pXhcN.woff) format('woff');
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}

/* inter-greek-ext-600-normal */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url(/assets/inter-greek-ext-600-normal-DRtmH8MT.woff2) format('woff2'), url(/assets/inter-greek-ext-600-normal-B8X0CLgF.woff) format('woff');
  unicode-range: U+1F00-1FFF;
}

/* inter-greek-600-normal */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url(/assets/inter-greek-600-normal-plRanbMR.woff2) format('woff2'), url(/assets/inter-greek-600-normal-BZpKdvQh.woff) format('woff');
  unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;
}

/* inter-vietnamese-600-normal */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url(/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2) format('woff2'), url(/assets/inter-vietnamese-600-normal-BuLX-rYi.woff) format('woff');
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}

/* inter-latin-ext-600-normal */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url(/assets/inter-latin-ext-600-normal-D2bJ5OIk.woff2) format('woff2'), url(/assets/inter-latin-ext-600-normal-CIVaiw4L.woff) format('woff');
  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;
}

/* inter-latin-600-normal */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url(/assets/inter-latin-600-normal-LgqL8muc.woff2) format('woff2'), url(/assets/inter-latin-600-normal-CiBQ2DWP.woff) format('woff');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
/* mona-sans-vietnamese-700-normal */
@font-face {
  font-family: 'Mona Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(/assets/mona-sans-vietnamese-700-normal-W-GorIPQ.woff2) format('woff2'), url(/assets/mona-sans-vietnamese-700-normal-BZbN4BnZ.woff) format('woff');
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}

/* mona-sans-latin-ext-700-normal */
@font-face {
  font-family: 'Mona Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(/assets/mona-sans-latin-ext-700-normal-D6dAc81M.woff2) format('woff2'), url(/assets/mona-sans-latin-ext-700-normal-ClZsQsLm.woff) format('woff');
  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;
}

/* mona-sans-latin-700-normal */
@font-face {
  font-family: 'Mona Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(/assets/mona-sans-latin-700-normal-8_gKyUBn.woff2) format('woff2'), url(/assets/mona-sans-latin-700-normal-Cfm70JW0.woff) format('woff');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
/* roboto-cyrillic-ext-400-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(/assets/roboto-cyrillic-ext-400-normal-qHufge6k.woff2) format('woff2'), url(/assets/roboto-cyrillic-ext-400-normal-DhDk0Xwi.woff) format('woff');
  unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
}

/* roboto-cyrillic-400-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(/assets/roboto-cyrillic-400-normal-CBPI_iaY.woff2) format('woff2'), url(/assets/roboto-cyrillic-400-normal-BepgbcUK.woff) format('woff');
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}

/* roboto-greek-ext-400-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(data:font/woff2;base64,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) format('woff2'), url(data:font/woff;base64,d09GRgABAAAAAAXAAA8AAAAABwAAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABWAAAABQAAAAUAA8ACUdQT1MAAAFsAAAAHgAAAB5EdEx1R1NVQgAAAYwAAAAzAAAANJMNggJPUy8yAAABwAAAAE0AAABgdArg2VNUQVQAAAIQAAAASwAAAF5fnUM1Y21hcAAAAlwAAABAAAAAXj5j4n9nYXNwAAACnAAAAAwAAAAMAAgAGWdseWYAAAKoAAABNgAAATZnhEGkaGVhZAAAA+AAAAA2AAAANgz5sE5oaGVhAAAEGAAAAB8AAAAkCroNqWhtdHgAAAQ4AAAAHwAAACQX6f/DbG9jYQAABFgAAAATAAAAFAFZAbFtYXhwAAAEbAAAABwAAAAgACkBIW5hbWUAAASIAAABIgAAAmI2jl6RcG9zdAAABawAAAATAAAAIP9tAGQAAQAAAAwAAAAAAAAAAQAIAAEAAQABAAAACgAcABwAAURGTFQACAAEAAAAAP//AAAAAAAAeNpjYGRgYOBiMAJCFhc3nxAGueTKohwGqfSi1GwGqZzEkjwGKQYQYAER//+DSADdjQkeAHjaY2BhaWecwMDKwMA6i9WYgYFRHkIzX2RIY2JgYABiKHAACjIgAXd/f3eQoLwvG8M/BoY09llMDAoMjPNBcixWrBuAlAIDMwDj2QowAAAAeNoNx7EBAUAQALDcPWhhAQCoTAQAOrCGgQxHugihoaCjYCHfu8cphryPp0dMxPmxvsVSqmnpCWSM7VCEjEV8yC+K/H8Cgh/DnghvAHjaY2BgYAJiZiAWAZKMYJqFwQtI8zFwAOXYwCp4GRQYFsj7/v8P5KHwQTr+f/v/5H/6g91g3TwMCMAEANCmDfkAAQACAAgACP//AA8ABQBkAAADKAWwAAMABgAJAAwADwAAAREhEQUBASUJAyEJAgMo/TwCjv7vARH9qAEN/vMBKv7+AgP9/QECAQEFsPpQBbBU/Xz9fAwCeAJ4/UT9ogVE/aICXgAAAgB3/+wFCgXEABUAKwAAARUUAgYGIyImJgI1NTQSNjYzMhYWEgM1NC4CIyIOAhUVFB4CMzI+AgUKUprXhYHXnVZVnNeBhdebU781ZpNdWpFnODhpkVpekmU0AwZcpP78tmBgtgEEpFykAQO3YGC3/v3/AF6CyIhGRojIgl6DyYlGRonJAAACAHAEcQLJBdcABQAPAAABNRMzFQMlNTMVFBYXByYmAZJ0w9/+hqcqKklWXASEEQFCFf7C/lVPSGgtOi2P///+eP/sBVAF1gAmAAVGAAAHAAb+CP//AAAAAQAAAAMD16RtfYpfDzz1ABsIAAAAAADE8BEuAAAAAOWNUAP6Gv3VCTEIcwAAAAkAAgAAAAAAAHjaY2BkYGDP+cfDwMDp9UvqnxenIQcDGuAEAHAbBHkAeNpj7mFIYYACxj8QzNrIUM6syFAAZh//VwEAaU4HvgB42mNgYNCFwwKGfiCcDQATpAMLAHjaY2BkYGDgZFjJIMpQxsAO5iEAMwMjAB3kAUt42izGNQHDAABFwRfmrMWtzFxFFVIrRQGREE3Zg/+mAxLeWBh2AGRGqhvEhqmbpBS6xZlctxnz1x3mPHWXMQ895c6+uzEjZKoviOnry/qxvq36IIusCIIgCgY36R3uDhvcXbfj7j63J4Bxe+WRv9L6sea2pHBLjTA50kT5Ju6ZJCV7okiFPNr4lsaoybU4SlQ5Yt1R9B6nQMJbgVrHj0RFnDVphSRvnhFXzbXqKy6rqw1r/fJVUZ1GDwRs+2uDTXY59rXlfYu9IQ/BsIehH9c8O669zYg5/BpSnrtKtKWdPnRy2HQEfEjinsPZvFDxzGiJop5T6p4pmXX5XhjrWlLvKqjrZY2oyjxSio4kOeK9flbllaFKotrDcjvmffEHVntaWwAAeNpjYGYAg/9ZDCkMWAAAKh8B0QA=) format('woff');
  unicode-range: U+1F00-1FFF;
}

/* roboto-greek-400-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(/assets/roboto-greek-400-normal-ai2Z1K3C.woff2) format('woff2'), url(/assets/roboto-greek-400-normal-D904r64h.woff) format('woff');
  unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;
}

/* roboto-math-400-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(/assets/roboto-math-400-normal-BEFej5gc.woff2) format('woff2'), url(/assets/roboto-math-400-normal-D6sS4O5l.woff) format('woff');
  unicode-range: U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF;
}

/* roboto-symbols-400-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(/assets/roboto-symbols-400-normal-CB1Ce4Gk.woff2) format('woff2'), url(/assets/roboto-symbols-400-normal-C7tGlxgb.woff) format('woff');
  unicode-range: U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF;
}

/* roboto-vietnamese-400-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(/assets/roboto-vietnamese-400-normal-D2PTxGxD.woff2) format('woff2'), url(/assets/roboto-vietnamese-400-normal-Bf76hAzZ.woff) format('woff');
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}

/* roboto-latin-ext-400-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(/assets/roboto-latin-ext-400-normal-C3tdtHj3.woff2) format('woff2'), url(/assets/roboto-latin-ext-400-normal-CIveymTr.woff) format('woff');
  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-latin-400-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(/assets/roboto-latin-400-normal-BqEyEoaF.woff2) format('woff2'), url(/assets/roboto-latin-400-normal-D27F5sTu.woff) format('woff');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
/* roboto-cyrillic-ext-500-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(/assets/roboto-cyrillic-ext-500-normal-BWC_xYeb.woff2) format('woff2'), url(/assets/roboto-cyrillic-ext-500-normal-SCgicl0l.woff) format('woff');
  unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
}

/* roboto-cyrillic-500-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(/assets/roboto-cyrillic-500-normal-CLao9AfR.woff2) format('woff2'), url(/assets/roboto-cyrillic-500-normal-C8ZOEKN4.woff) format('woff');
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}

/* roboto-greek-ext-500-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(data:font/woff2;base64,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) format('woff2'), url(data:font/woff;base64,d09GRgABAAAAAAW0AA8AAAAABvAAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABWAAAABQAAAAUAA8ACUdQT1MAAAFsAAAAHgAAAB5EdEx1R1NVQgAAAYwAAAAzAAAANJMNggJPUy8yAAABwAAAAE0AAABgdG7g5lNUQVQAAAIQAAAASAAAAFpfmkDZY21hcAAAAlgAAABAAAAAXj5j4n9nYXNwAAACmAAAAAwAAAAMAAgAGWdseWYAAAKkAAABNAAAATRvqliEaGVhZAAAA9gAAAA2AAAANg01sE5oaGVhAAAEEAAAAB8AAAAkCvYNwWhtdHgAAAQwAAAAHwAAACQX6v+ZbG9jYQAABFAAAAATAAAAFAFXAa9tYXhwAAAEZAAAABwAAAAgACkBIW5hbWUAAASAAAABIAAAAlw0y15acG9zdAAABaAAAAATAAAAIP9tAGQAAQAAAAwAAAAAAAAAAQAIAAEAAQABAAAACgAcABwAAURGTFQACAAEAAAAAP//AAAAAAAAeNpjYGRgYOBiMAJCFhc3nxAGueTKohwGqfSi1GwGqZzEkjwGKQYQYAER//+DSADdjQkeAHjaY2BhmcL4hYGVgYF1FqsxAwOjPIRmvsiQxsTAwADEUOAAFGRAAu7+/u4gQXlfNoZ/DAxp7LOYGBQYGOeD5FisWDcAKQUGZgAMLQqhAAAAeNoFwbWBAlEABcB5f8/SA2Ii3KEi3DOscQpgRsSfCg0VRsprez+mzetwvKcnp/vqmoXiR01TUNK1RYSM80alKOmB8AGd+wgOeNpjYGBgAmJmIBYBkoxgmoXBC0jzMXAA5djAKngZFBgWyPv+/w/kofBBOv5/+//kf/qD3WDdPAwIwAQA0KYN+QABAAIACAAI//8ADwAFAGQAAAMoBbAAAwAGAAkADAAPAAABESERBQEBJQkDIQkCAyj9PAKO/u8BEf2oAQ3+8wEq/v4CA/39AQIBAQWw+lAFsFT9fP18DAJ4Anj9RP2iBUT9ogJeAAACAGX/7AUdBcQAFQArAAABFRQCBgYjIiYmAjU1NBI2NjMyFhYSBzU0LgIjIg4CFRUUHgIzMj4CBR1Wn96Hht2iWVih3YaH3qBX+y9bhFNTglswMF2CU1SCWi8DAFCl/vq4YWG4AQalUKUBBblhYbn++/VSert/QUF/u3pSeryBQUGBvAACAGQEcALGBdcABQAPAAABNRMzFQMlNTMVFBYXByYmAYtyyeL+gKgmKk1PXASEFAE/Ff7C+VpUQmInSCiN///+bP/sBWMF1gAmAAVGAAAHAAb+CP//AAEAAAADA9eV91UeXw889QAbCAAAAAAAxPARLgAAAADljVAD+ib91QlhCHMAAAAJAAIAAAAAAAB42mNgZGBgz/nHw8DAmfdL7Z8dZyIHAxrgBAB3RwTNAHjaY+5hSGGAAsa/EMzazJDKLM2QAmaf/JcDAGf/B5UAeNpjYGDQhcN8hj4gnAUAE5QDBwB42mNgZGBg4GRYySDKUMbADuYhADMDIwAd5AFLeNp1kMVRBTAURQ/ubJEN7u62wd11C9/dtQXKoAGkIiqgBu5kgnyb2Ml9lhegjRdqqKptEn9UNVquopsvy9W082m5hlneLNf+86ljmGfL9dJjlttZZh3DVUM0M2t5hFYGLY+KOy1PiVstz4vgiBRPhPDj5Aw3LlGaMA+4RV58sp8TJSFNftL98klJl0UjRpJ1ZjSiYjcRPKIIKZtTijzcTJscXq51OrRSWlMFFe/FCfn6TXwvC4qZZY4lNnSbF8+zXKAecKFxIKqc9VrsFYV4IlHg11vgt2Pen5eP7drWnNPo5VaKW2dh/CUJnQFZnMZ/i7ROn+k0qftoyR958RuPtLJM45Rn2KhRDS8h3L+/l5SeKOjKaXpIavjFY99C5llgeNpjYGYAg/9ZDCkMWAAAKh8B0QA=) format('woff');
  unicode-range: U+1F00-1FFF;
}

/* roboto-greek-500-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(/assets/roboto-greek-500-normal-C9AnhcmC.woff2) format('woff2'), url(/assets/roboto-greek-500-normal-XBIQOowA.woff) format('woff');
  unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;
}

/* roboto-math-500-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(/assets/roboto-math-500-normal-C4NU9gLX.woff2) format('woff2'), url(/assets/roboto-math-500-normal-BNGXE_xU.woff) format('woff');
  unicode-range: U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF;
}

/* roboto-symbols-500-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(/assets/roboto-symbols-500-normal-B_CZKVJS.woff2) format('woff2'), url(/assets/roboto-symbols-500-normal-DFnofPUt.woff) format('woff');
  unicode-range: U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF;
}

/* roboto-vietnamese-500-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(/assets/roboto-vietnamese-500-normal-B3ncpOoB.woff2) format('woff2'), url(/assets/roboto-vietnamese-500-normal-BgoYVz-9.woff) format('woff');
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}

/* roboto-latin-ext-500-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(/assets/roboto-latin-ext-500-normal-pMCM9Ixg.woff2) format('woff2'), url(/assets/roboto-latin-ext-500-normal-C1cK9xmS.woff) format('woff');
  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-latin-500-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(/assets/roboto-latin-500-normal-7RbcRiD8.woff2) format('woff2'), url(/assets/roboto-latin-500-normal-fsTFPL3E.woff) format('woff');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
/* roboto-cyrillic-ext-700-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(/assets/roboto-cyrillic-ext-700-normal-DmFxo5wj.woff2) format('woff2'), url(/assets/roboto-cyrillic-ext-700-normal-BWOtdzfy.woff) format('woff');
  unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
}

/* roboto-cyrillic-700-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(/assets/roboto-cyrillic-700-normal-C2o7G-SM.woff2) format('woff2'), url(/assets/roboto-cyrillic-700-normal-D8g9KsRf.woff) format('woff');
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}

/* roboto-greek-ext-700-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(data:font/woff2;base64,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) format('woff2'), url(data:font/woff;base64,d09GRgABAAAAAAWsAA8AAAAABuQAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABWAAAABQAAAAUAA8ACUdQT1MAAAFsAAAAHgAAAB5EdEx1R1NVQgAAAYwAAAAzAAAANJMNggJPUy8yAAABwAAAAEsAAABgdTbg0VNUQVQAAAIMAAAARwAAAFpfnEGhY21hcAAAAlQAAABAAAAAXj5j4n9nYXNwAAAClAAAAAwAAAAMAAgAGWdseWYAAAKgAAABMQAAATZvegfsaGVhZAAAA9QAAAA2AAAANg1psE5oaGVhAAAEDAAAAB8AAAAkCykN1GhtdHgAAAQsAAAAHwAAACQX6P92bG9jYQAABEwAAAATAAAAFAFZAbFtYXhwAAAEYAAAABwAAAAgACkBIW5hbWUAAAR8AAABGwAAAkozllu+cG9zdAAABZgAAAATAAAAIP9tAGQAAQAAAAwAAAAAAAAAAQAIAAEAAQABAAAACgAcABwAAURGTFQACAAEAAAAAP//AAAAAAAAeNpjYGRgYOBiMAJCFhc3nxAGueTKohwGqfSi1GwGqZzEkjwGKQYQYAER//+DSADdjQkeAHjaTcW7DUBAAADQ5z6M4XbQqXQqsYWhNLeCASxhIVGIxGuelGo4ZfKeB5r+PV62gOAzEf3M6zor9EvrZuv2oGgqpDEfKOID+HEKVQB42gXBsQEBARAAsNw9aKFWAQAmAgAdWM5wnwihoUBHgZn8Hd/X6PO7XN8xErf37hkbqaalK5AxdEQIYpl/FFLGCAQlmhEH2QB42mNgYGACYmYgFgGSjGCahcELSPMxcADl2MAqeBkUGBbI+/7/D+Sh8EE6/n/7/+R/+oPdYN08DAjABADQpg35AAEAAgAIAAj//wAPeNodjzVUA0EURf/8ZRLcIw3uTrSJNLi7+x563Klw71ucclMmFdbi1p/Q4a47izytL1BoBeBiqQAcyMANPMEHgPiF+VFCoty4MDfkYkUzLrA74iduEC/2ROIZQ04UCRJChc9iKpSLw+KwJ/Zjv5guLtHfYiMAQqV0TZPpLiggAYAoAlEmiwiPjkaDQe9vNOq0SqU/NeiTMSLcGxWKwGDUaa1Ik2tXnDPTzrW62lXn9IxztY4dxZf25uf3lMT/f29xPH5mrLF3O8/bietaxjqRO3jewT6us7qFfoulX+jO6rINWK0DNgCEWpd23KUXQP/JDAE6BRdl0CkClSp5dDQZ79i/ZIMbEQml2fUuo2piVrCt18Zqa0NYWeS0JDH+l6GbnkM00EwAOciYmyT9AMF6YZEAAAAAAQAAAAMD15Zf+khfDzz1ABsIAAAAAADE8BEuAAAAAOWNUAP6Mf3VCYkIcwABAAkAAgAAAAAAAHjaY2BkYGDP+cfDwMDZ88vwnzFnJwcDGuAEAH1DBRMAeNpj7mFIYYACxr8QzNrCEMYszhAFZp/6lwQAZr4HcAB42mNgYNCFwwKGfiCcDQATpAMLAHjaY2BkYGDgZFjJIMpQxsAO5iEAMwMjAB3kAUt42m2QA24FQBRFT+2GRVjbVlDbjFPr29hMsYNyQY27gMZJbyYv+MjTmYcRUMMrRRQUVwDv/BkXUM2vcSHl/BgX0c+3cTH1PBuX0EnauFT5a+NaJhnEcUEHlbQbd1FNo3G3uNp4CJ1lPKosbBDlAi8PXHHGjeId98rtEiCMz9XOlL0mqrwqkiARZhmSBMQ3+LkV+YnaPsoQkR90e9xxqHgpi8oGWJT3cs0pN6pGeHCzzYwxyDAjTDCn1ah4lMmM2WZsNqN3jT3Jmij/ORYzqkvu5inC2HvtxBFJM8fK3Chmnr1PWPFRlSvXv0DM/UlA+YjW3Tm/c8eD64hxySBXBPC5bEByh5cb7N+IKB/OuP2V6hdEJA/inn+ATFaOAHjaY2BmAIP/WQwpDFgAACofAdEA) format('woff');
  unicode-range: U+1F00-1FFF;
}

/* roboto-greek-700-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(/assets/roboto-greek-700-normal-0aHWxGLu.woff2) format('woff2'), url(/assets/roboto-greek-700-normal-xQsEWSIA.woff) format('woff');
  unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;
}

/* roboto-math-700-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(/assets/roboto-math-700-normal-B8YqGHVc.woff2) format('woff2'), url(/assets/roboto-math-700-normal-DbhUef31.woff) format('woff');
  unicode-range: U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF;
}

/* roboto-symbols-700-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(/assets/roboto-symbols-700-normal-BiFDindJ.woff2) format('woff2'), url(/assets/roboto-symbols-700-normal-C59U6HqI.woff) format('woff');
  unicode-range: U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF;
}

/* roboto-vietnamese-700-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(/assets/roboto-vietnamese-700-normal-BEVeWqJt.woff2) format('woff2'), url(/assets/roboto-vietnamese-700-normal-kpkdMgbf.woff) format('woff');
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}

/* roboto-latin-ext-700-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(/assets/roboto-latin-ext-700-normal-DSBUz0N1.woff2) format('woff2'), url(/assets/roboto-latin-ext-700-normal-BDePAh3g.woff) format('woff');
  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-latin-700-normal */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(/assets/roboto-latin-700-normal-BZpUvMxY.woff2) format('woff2'), url(/assets/roboto-latin-700-normal-YuyVweIx.woff) format('woff');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}

.canvas-wrapper[data-v-194acd5d] {
  min-height: 100vh;
  background: var(--btly-color-base-white);
  color: var(--btly-color-gray-900);
}
*, ::before, ::after {--_histoire-color-primary-50: 249 249 255;--_histoire-color-primary-100: 239 239 255;--_histoire-color-primary-200: 219 219 255;--_histoire-color-primary-300: 185 184 255;--_histoire-color-primary-400: 144 133 255;--_histoire-color-primary-500: 115 82 252;--_histoire-color-primary-600: 100 53 238;--_histoire-color-primary-700: 82 22 207;--_histoire-color-primary-800: 62 17 161;--_histoire-color-primary-900: 48 20 123;--_histoire-color-gray-50: 250 250 250;--_histoire-color-gray-100: 245 245 245;--_histoire-color-gray-200: 229 229 229;--_histoire-color-gray-300: 212 212 212;--_histoire-color-gray-400: 163 163 163;--_histoire-color-gray-500: 115 115 115;--_histoire-color-gray-600: 82 82 82;--_histoire-color-gray-700: 44 44 44;--_histoire-color-gray-750: 38 38 38;--_histoire-color-gray-800: 30 30 30;--_histoire-color-gray-850: 24 24 24;--_histoire-color-gray-900: 20 20 20;--_histoire-color-gray-950: 13 13 13;}

@scope (:root) to (.__histoire-render-story:not(.__histoire-render-custom-controls)){

.resize-observer[data-v-b329ee4c]{
  position:absolute;
  top:0;
  left:0;
  z-index:-1;
  width:100%;
  height:100%;
  border:none;
  background-color:transparent;
  pointer-events:none;
  display:block;
  overflow:hidden;
  opacity:0
}

.resize-observer[data-v-b329ee4c] object{
  display:block;
  position:absolute;
  top:0;
  left:0;
  height:100%;
  width:100%;
  overflow:hidden;
  pointer-events:none;
  z-index:-1
}

.v-popper__popper{
  z-index:10000;
  top:0;
  left:0;
  outline:none
}

.v-popper__popper.v-popper__popper--hidden{
  visibility:hidden;
  opacity:0;
  transition:opacity .15s,visibility .15s;
  pointer-events:none
}

.v-popper__popper.v-popper__popper--shown{
  visibility:visible;
  opacity:1;
  transition:opacity .15s
}

.v-popper__popper.v-popper__popper--skip-transition,.v-popper__popper.v-popper__popper--skip-transition>.v-popper__wrapper{
  transition:none!important
}

.v-popper__backdrop{
  position:absolute;
  top:0;
  left:0;
  width:100%;
  height:100%;
  display:none
}

.v-popper__inner{
  position:relative;
  box-sizing:border-box;
  overflow-y:auto
}

.v-popper__inner>div{
  position:relative;
  z-index:1;
  max-width:inherit;
  max-height:inherit
}

.v-popper__arrow-container{
  position:absolute;
  width:10px;
  height:10px
}

.v-popper__popper--arrow-overflow .v-popper__arrow-container,.v-popper__popper--no-positioning .v-popper__arrow-container{
  display:none
}

.v-popper__arrow-inner,.v-popper__arrow-outer{
  border-style:solid;
  position:absolute;
  top:0;
  left:0;
  width:0;
  height:0
}

.v-popper__arrow-inner{
  visibility:hidden;
  border-width:7px
}

.v-popper__arrow-outer{
  border-width:6px
}

.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-inner{
  left:-2px
}

.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-outer,.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-outer{
  left:-1px
}

.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-outer{
  border-bottom-width:0;
  border-left-color:transparent!important;
  border-right-color:transparent!important;
  border-bottom-color:transparent!important
}

.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-inner{
  top:-2px
}

.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-container{
  top:0
}

.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-outer{
  border-top-width:0;
  border-left-color:transparent!important;
  border-right-color:transparent!important;
  border-top-color:transparent!important
}

.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-inner{
  top:-4px
}

.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-outer{
  top:-6px
}

.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-inner{
  top:-2px
}

.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-outer,.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-outer{
  top:-1px
}

.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-outer{
  border-left-width:0;
  border-left-color:transparent!important;
  border-top-color:transparent!important;
  border-bottom-color:transparent!important
}

.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-inner{
  left:-4px
}

.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-outer{
  left:-6px
}

.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-container{
  right:-10px
}

.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-outer{
  border-right-width:0;
  border-top-color:transparent!important;
  border-right-color:transparent!important;
  border-bottom-color:transparent!important
}

.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-inner{
  left:-2px
}

.v-popper--theme-tooltip .v-popper__inner{
  background:rgba(0,0,0,.8);
  color:#fff;
  border-radius:6px;
  padding:7px 12px 6px
}

.v-popper--theme-tooltip .v-popper__arrow-outer{
  border-color:#000c
}

.v-popper--theme-dropdown .v-popper__inner{
  background:#fff;
  color:#000;
  border-radius:6px;
  border:1px solid #ddd;
  box-shadow:0 6px 30px #0000001a
}

.v-popper--theme-dropdown .v-popper__arrow-inner{
  visibility:visible;
  border-color:#fff
}

.v-popper--theme-dropdown .v-popper__arrow-outer{
  border-color:#ddd
}

.htw-bind-col-size{
  grid-template-columns:repeat(auto-fill,minmax(var(--histoire-col-size),1fr))
}

.__histoire-json-code[data-v-d4369e5a] .cm-editor{
  height:100%;
  min-width:280px
}

.v-popper{
  line-height:0
}

.htw-dark .v-popper--theme-dropdown .v-popper__inner{
  --tw-border-opacity: 1;
  border-color:rgb(31 31 33 / var(--tw-border-opacity, 1));
  --tw-bg-opacity: 1;
  background-color:rgb(63 63 70 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color:rgb(244 244 245 / var(--tw-text-opacity, 1))
}

.htw-dark .v-popper--theme-dropdown .v-popper__arrow-inner{
  --tw-border-opacity: 1;
  border-color:rgb(63 63 70 / var(--tw-border-opacity, 1))
}

.htw-dark .v-popper--theme-dropdown .v-popper__arrow-outer{
  --tw-border-opacity: 1;
  border-color:rgb(31 31 33 / var(--tw-border-opacity, 1))
}

.v-popper--theme-dropdown.v-popper__popper--show-from .v-popper__wrapper{
  transform:scale(.75)
}

.v-popper--theme-dropdown.v-popper__popper--show-to .v-popper__wrapper{
  transform:none;
  transition:transform .15s cubic-bezier(0,1,.5,1)
}

.v-popper__popper:focus-visible{
  outline:none
}

.htw-range-input::-webkit-slider-thumb{
  height:.75rem;
  width:.75rem;
  -webkit-appearance:none;
  appearance:none;
  border-radius:9999px;
  border-width:1px;
  border-style:solid;
  border-color:#00000040;
  --tw-bg-opacity: 1;
  background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))
}

.htw-range-input:is(.htw-dark *)::-webkit-slider-thumb{
  border-color:#ffffff40;
  --tw-bg-opacity: 1;
  background-color:rgb(63 63 70 / var(--tw-bg-opacity, 1))
}

.htw-range-input:hover::-webkit-slider-thumb{
  --tw-border-opacity: 1 !important;
  border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))!important;
  --tw-bg-opacity: 1 !important;
  background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))!important
}

.htw-range-input::-moz-range-thumb{
  height:.75rem;
  width:.75rem;
  -moz-appearance:none;
  appearance:none;
  border-radius:9999px;
  border-width:1px;
  border-style:solid;
  border-color:#00000040;
  --tw-bg-opacity: 1;
  background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))
}

.htw-range-input:is(.htw-dark *)::-moz-range-thumb{
  border-color:#ffffff40;
  --tw-bg-opacity: 1;
  background-color:rgb(63 63 70 / var(--tw-bg-opacity, 1))
}

.htw-range-input:hover::-moz-range-thumb{
  --tw-border-opacity: 1 !important;
  border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))!important;
  --tw-bg-opacity: 1 !important;
  background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))!important
}

/* @TODO custom themes */

.v-popper {
  line-height: 0;
}

.htw-dark .v-popper--theme-dropdown .v-popper__inner{
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-gray-850) / var(--tw-border-opacity, 1));
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-gray-700) / var(--tw-bg-opacity, 1));
  --tw-text-opacity:1;
  color:rgb(var(--_histoire-color-gray-100) / var(--tw-text-opacity, 1))
}

.htw-dark .v-popper--theme-dropdown .v-popper__arrow-inner{
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-gray-700) / var(--tw-border-opacity, 1))
}

.htw-dark .v-popper--theme-dropdown .v-popper__arrow-outer{
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-gray-850) / var(--tw-border-opacity, 1))
}

.v-popper--theme-dropdown.v-popper__popper--show-from .v-popper__wrapper {
  transform: scale(.75);
}

.v-popper--theme-dropdown.v-popper__popper--show-to .v-popper__wrapper {
  transform: none;
  transition: transform .15s cubic-bezier(0, 1, .5, 1);
}

.v-popper__popper:focus-visible {
  outline: none;
}

.__histoire-scale-x-enter-active,
  .__histoire-scale-x-leave-active {
  transition: transform .15s, opacity .15s;
}

.__histoire-scale-x-enter-from,
  .__histoire-scale-x-leave-to {
  transform: scaleX(0);
  opacity: 0;
}

.__histoire-scale-y-enter-active,
  .__histoire-scale-y-leave-active {
  transition: transform .15s, opacity .15s;
}

.__histoire-scale-y-enter-from,
  .__histoire-scale-y-leave-to {
  transform: scaleY(0);
  opacity: 0;
}

.__histoire-fade-enter-active,
  .__histoire-fade-leave-active {
  transition: opacity .15s;
}

.__histoire-fade-enter-from,
  .__histoire-fade-leave-to {
  opacity: 0;
}

.__histoire-fade-bottom-enter-active,
  .__histoire-fade-bottom-leave-active {
  transition: transform .15s, opacity .15s;
  transform: translateY(0px);
}

.__histoire-fade-bottom-enter-from,
  .__histoire-fade-bottom-leave-to {
  transform: translateY(32px);
  opacity: 0;
}

*,
::before,
::after {
  box-sizing: border-box;
  border-width: 0;
  border-style: solid;
  border-color: #e5e7eb;
}

a,
input,
button {
  color: inherit;
}

a {
  text-decoration: inherit;
}

input, button {
  font-family: inherit;
}

a,
button {
  -webkit-user-select: none;
     -moz-user-select: none;
          user-select: none;
}

*, ::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(59 130 246 / 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(59 130 246 / 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: 
}

body,
  pre {
  margin: 0;
}

:scope,
  body,
  #app {
  height: 100%;
}

:scope {
  font-family: 'Noto Sans Display', system-ui, sans-serif;
  font-size: 1rem;
}

body {
  font-size: 1.125rem;
}

@media (min-width: 640px) {
  body {
    font-size: .875rem;
  }
}

.__histoire-render-story:not(.__histoire-render-custom-controls) {
  overflow: auto;
  min-height: 100%;
}

.__histoire-code .shiki {
  background: transparent !important;
}

.htw-prose h1:not(:hover) .header-anchor[aria-hidden="true"], .htw-prose h2:not(:hover) .header-anchor[aria-hidden="true"], .htw-prose h3:not(:hover) .header-anchor[aria-hidden="true"], .htw-prose h4:not(:hover) .header-anchor[aria-hidden="true"] {
  visibility: hidden;
}

.htw-prose hr {
  margin: 1rem 0;
}

.__histoire-pane-shadow-from-right {
  background-image: linear-gradient(to left, rgba(0, 0, 0, 0.02), rgba(0, 0, 0, 0));
  background-size: 24px;
  background-repeat: no-repeat;
  background-position: right;
}

.htw-dark .__histoire-pane-shadow-from-right {
  background-image: linear-gradient(to left, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));
}

.htw-prose{
  color:var(--tw-prose-body);
  max-width:65ch;
}

.htw-prose :where(p):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  margin-top:1.25em;
  margin-bottom:1.25em
}

.htw-prose :where([class~="lead"]):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  color:var(--tw-prose-lead);
  font-size:1.25em;
  line-height:1.6;
  margin-top:1.2em;
  margin-bottom:1.2em
}

.htw-prose :where(a):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  color:rgb(var(--_histoire-color-primary-500));
  text-decoration:none;
  font-weight:500;
}

.htw-prose :where(a):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)):hover{
  text-decoration:underline
}

.htw-prose :where(strong):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  color:var(--tw-prose-bold);
  font-weight:600
}

.htw-prose :where(a strong):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  color:inherit
}

.htw-prose :where(blockquote strong):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  color:inherit
}

.htw-prose :where(thead th strong):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  color:inherit
}

.htw-prose :where(ol):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  list-style-type:decimal;
  margin-top:1.25em;
  margin-bottom:1.25em;
  padding-inline-start:1.625em
}

.htw-prose :where(ol[type="A"]):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  list-style-type:upper-alpha
}

.htw-prose :where(ol[type="a"]):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  list-style-type:lower-alpha
}

.htw-prose :where(ol[type="A" s]):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  list-style-type:upper-alpha
}

.htw-prose :where(ol[type="a" s]):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  list-style-type:lower-alpha
}

.htw-prose :where(ol[type="I"]):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  list-style-type:upper-roman
}

.htw-prose :where(ol[type="i"]):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  list-style-type:lower-roman
}

.htw-prose :where(ol[type="I" s]):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  list-style-type:upper-roman
}

.htw-prose :where(ol[type="i" s]):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  list-style-type:lower-roman
}

.htw-prose :where(ol[type="1"]):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  list-style-type:decimal
}

.htw-prose :where(ul):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  list-style-type:disc;
  margin-top:1.25em;
  margin-bottom:1.25em;
  padding-inline-start:1.625em
}

.htw-prose :where(ol > li):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *))::marker{
  font-weight:400;
  color:var(--tw-prose-counters)
}

.htw-prose :where(ul > li):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *))::marker{
  color:var(--tw-prose-bullets)
}

.htw-prose :where(dt):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  color:var(--tw-prose-headings);
  font-weight:600;
  margin-top:1.25em
}

.htw-prose :where(hr):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  border-color:var(--tw-prose-hr);
  border-top-width:1px;
  margin-top:3em;
  margin-bottom:3em
}

.htw-prose :where(blockquote):not(:where([class~="htw-not-prose"],[class~="htw-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;
  padding-inline-start:1em;
  margin-left:0;
  margin-right:0;
  background-color:rgb(var(--_histoire-color-gray-100));
  padding:.25rem .375rem;
}

.htw-prose :where(blockquote):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)) p:first-child{
  margin-top:0
}

.htw-prose :where(blockquote):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)) p:last-child{
  margin-bottom:0
}

.htw-dark .htw-prose :where(blockquote):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  background-color:rgb(var(--_histoire-color-gray-750))
}

.htw-prose :where(blockquote p:first-of-type):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *))::before{
  content:open-quote
}

.htw-prose :where(blockquote p:last-of-type):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *))::after{
  content:close-quote
}

.htw-prose :where(h1):not(:where([class~="htw-not-prose"],[class~="htw-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
}

.htw-prose :where(h1 strong):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  font-weight:900;
  color:inherit
}

.htw-prose :where(h2):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  color:var(--tw-prose-headings);
  font-weight:700;
  font-size:1.5em;
  margin-top:2em;
  margin-bottom:1em;
  line-height:1.3333333
}

.htw-prose :where(h2 strong):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  font-weight:800;
  color:inherit
}

.htw-prose :where(h3):not(:where([class~="htw-not-prose"],[class~="htw-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
}

.htw-prose :where(h3 strong):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  font-weight:700;
  color:inherit
}

.htw-prose :where(h4):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  color:var(--tw-prose-headings);
  font-weight:600;
  margin-top:1.5em;
  margin-bottom:0.5em;
  line-height:1.5
}

.htw-prose :where(h4 strong):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  font-weight:700;
  color:inherit
}

.htw-prose :where(img):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  margin-top:2em;
  margin-bottom:2em
}

.htw-prose :where(picture):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  display:block;
  margin-top:2em;
  margin-bottom:2em
}

.htw-prose :where(video):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  margin-top:2em;
  margin-bottom:2em
}

.htw-prose :where(kbd):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  font-weight:500;
  font-family:inherit;
  color:var(--tw-prose-kbd);
  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;
  padding-inline-end:0.375em;
  padding-bottom:0.1875em;
  padding-inline-start:0.375em
}

.htw-prose :where(code):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  color:var(--tw-prose-code);
  font-weight:normal;
  font-size:0.8rem;
  background-color:rgb(var(--_histoire-color-gray-500) / 20%);
  padding:0.05rem 0.5rem;
  border-radius:0.25rem;
}

.htw-prose :where(code):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *))::before,.htw-prose :where(code):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *))::after{
  display:none
}

.htw-prose :where(code):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *))::before{
  content:"`"
}

.htw-prose :where(code):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *))::after{
  content:"`"
}

.htw-prose :where(a code):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  color:inherit
}

.htw-prose :where(h1 code):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  color:inherit
}

.htw-prose :where(h2 code):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  color:inherit;
  font-size:0.875em
}

.htw-prose :where(h3 code):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  color:inherit;
  font-size:0.9em
}

.htw-prose :where(h4 code):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  color:inherit
}

.htw-prose :where(blockquote code):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  color:inherit
}

.htw-prose :where(thead th code):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  color:inherit
}

.htw-prose :where(pre):not(:where([class~="htw-not-prose"],[class~="htw-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;
  padding-inline-end:1.1428571em;
  padding-bottom:0.8571429em;
  padding-inline-start:1.1428571em
}

.htw-prose :where(pre code):not(:where([class~="htw-not-prose"],[class~="htw-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
}

.htw-prose :where(pre code):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *))::before{
  content:none
}

.htw-prose :where(pre code):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *))::after{
  content:none
}

.htw-prose :where(table):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  width:100%;
  table-layout:auto;
  margin-top:2em;
  margin-bottom:2em;
  font-size:0.875em;
  line-height:1.7142857
}

.htw-prose :where(thead):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  border-bottom-width:1px;
  border-bottom-color:var(--tw-prose-th-borders)
}

.htw-prose :where(thead th):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  color:var(--tw-prose-headings);
  font-weight:600;
  vertical-align:bottom;
  padding-inline-end:0.5714286em;
  padding-bottom:0.5714286em;
  padding-inline-start:0.5714286em
}

.htw-prose :where(tbody tr):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  border-bottom-width:1px;
  border-bottom-color:var(--tw-prose-td-borders)
}

.htw-prose :where(tbody tr:last-child):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  border-bottom-width:0
}

.htw-prose :where(tbody td):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  vertical-align:baseline
}

.htw-prose :where(tfoot):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  border-top-width:1px;
  border-top-color:var(--tw-prose-th-borders)
}

.htw-prose :where(tfoot td):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  vertical-align:top
}

.htw-prose :where(th, td):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  text-align:start
}

.htw-prose :where(figure > *):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  margin-top:0;
  margin-bottom:0
}

.htw-prose :where(figcaption):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  color:var(--tw-prose-captions);
  font-size:0.875em;
  line-height:1.4285714;
  margin-top:0.8571429em
}

.htw-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:rgb(var(--_histoire-color-gray-500));
  --tw-prose-invert-hr:rgb(var(--_histoire-color-gray-800));
  --tw-prose-invert-quotes:#f3f4f6;
  --tw-prose-invert-quote-borders:rgb(var(--_histoire-color-gray-800));
  --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
}

.htw-prose :where(picture > img):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  margin-top:0;
  margin-bottom:0
}

.htw-prose :where(li):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  margin-top:0.1rem;
  margin-bottom:0.1rem
}

.htw-prose :where(ol > li):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  padding-inline-start:0.375em
}

.htw-prose :where(ul > li):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  padding-inline-start:0.375em
}

.htw-prose :where(.htw-prose > ul > li p):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  margin-top:0.75em;
  margin-bottom:0.75em
}

.htw-prose :where(.htw-prose > ul > li > p:first-child):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  margin-top:1.25em
}

.htw-prose :where(.htw-prose > ul > li > p:last-child):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  margin-bottom:1.25em
}

.htw-prose :where(.htw-prose > ol > li > p:first-child):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  margin-top:1.25em
}

.htw-prose :where(.htw-prose > ol > li > p:last-child):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  margin-bottom:1.25em
}

.htw-prose :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  margin-top:0.75em;
  margin-bottom:0.75em
}

.htw-prose :where(dl):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  margin-top:1.25em;
  margin-bottom:1.25em
}

.htw-prose :where(dd):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  margin-top:0.5em;
  padding-inline-start:1.625em
}

.htw-prose :where(hr + *):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  margin-top:0
}

.htw-prose :where(h2 + *):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  margin-top:0
}

.htw-prose :where(h3 + *):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  margin-top:0
}

.htw-prose :where(h4 + *):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  margin-top:0
}

.htw-prose :where(thead th:first-child):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  padding-inline-start:0
}

.htw-prose :where(thead th:last-child):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  padding-inline-end:0
}

.htw-prose :where(tbody td, tfoot td):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  padding-top:0.5714286em;
  padding-inline-end:0.5714286em;
  padding-bottom:0.5714286em;
  padding-inline-start:0.5714286em
}

.htw-prose :where(tbody td:first-child, tfoot td:first-child):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  padding-inline-start:0
}

.htw-prose :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  padding-inline-end:0
}

.htw-prose :where(figure):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  margin-top:2em;
  margin-bottom:2em
}

.htw-prose :where(.htw-prose > :first-child):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  margin-top:0
}

.htw-prose :where(.htw-prose > :last-child):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  margin-bottom:0
}

.htw-prose :where(h1, h2, h3, h4, th):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)){
  margin-bottom:0.75rem;
}

.htw-prose :where(h1, h2, h3, h4, th):not(:where([class~="htw-not-prose"],[class~="htw-not-prose"] *)):not(:first-child){
  margin-top:1.25rem
}

.htw-pointer-events-none{
  pointer-events:none
}

.htw-invisible{
  visibility:hidden
}

.htw-fixed{
  position:fixed
}

.htw-absolute{
  position:absolute
}

.htw-relative{
  position:relative
}

.htw-inset-0{
  inset:0px
}

.htw-bottom-0{
  bottom:0px
}

.htw-bottom-4{
  bottom:1rem
}

.htw-bottom-5{
  bottom:1.25rem
}

.htw-bottom-8{
  bottom:2rem
}

.htw-left-0{
  left:0px
}

.htw-left-5{
  left:1.25rem
}

.htw-left-8{
  left:2rem
}

.htw-right-0{
  right:0px
}

.htw-right-4{
  right:1rem
}

.htw-right-5{
  right:1.25rem
}

.htw-right-8{
  right:2rem
}

.htw-top-0{
  top:0px
}

.htw-top-5{
  top:1.25rem
}

.htw-top-8{
  top:2rem
}

.htw-isolate{
  isolation:isolate
}

.htw-z-10{
  z-index:10
}

.htw-z-20{
  z-index:20
}

.htw-m-0{
  margin:0px
}

.htw-m-1{
  margin:0.25rem
}

.htw-m-4{
  margin:1rem
}

.htw-m-auto{
  margin:auto
}

.-htw-my-1{
  margin-top:-0.25rem;
  margin-bottom:-0.25rem
}

.htw-mx-1{
  margin-left:0.25rem;
  margin-right:0.25rem
}

.htw-mx-2{
  margin-left:0.5rem;
  margin-right:0.5rem
}

.htw-mx-4{
  margin-left:1rem;
  margin-right:1rem
}

.htw-mx-6{
  margin-left:1.5rem;
  margin-right:1.5rem
}

.htw-my-0{
  margin-top:0px;
  margin-bottom:0px
}

.htw-my-2{
  margin-top:0.5rem;
  margin-bottom:0.5rem
}

.htw-my-4{
  margin-top:1rem;
  margin-bottom:1rem
}

.htw-my-8{
  margin-top:2rem;
  margin-bottom:2rem
}

.-htw-mt-1{
  margin-top:-0.25rem
}

.htw-mb-2{
  margin-bottom:0.5rem
}

.htw-mb-6{
  margin-bottom:1.5rem
}

.htw-mb-8{
  margin-bottom:2rem
}

.htw-ml-4{
  margin-left:1rem
}

.htw-ml-auto{
  margin-left:auto
}

.htw-mr-2{
  margin-right:0.5rem
}

.htw-mr-auto{
  margin-right:auto
}

.htw-mt-0\.5{
  margin-top:0.125rem
}

.htw-mt-1{
  margin-top:0.25rem
}

.htw-mt-2{
  margin-top:0.5rem
}

.htw-box-border{
  box-sizing:border-box
}

.htw-block{
  display:block
}

.htw-flex{
  display:flex
}

.htw-inline-flex{
  display:inline-flex
}

.htw-grid{
  display:grid
}

.\!htw-hidden{
  display:none !important
}

.htw-hidden{
  display:none
}

.htw-h-1{
  height:0.25rem
}

.htw-h-10{
  height:2.5rem
}

.htw-h-12{
  height:3rem
}

.htw-h-16{
  height:4rem
}

.htw-h-2{
  height:0.5rem
}

.htw-h-20{
  height:5rem
}

.htw-h-3{
  height:0.75rem
}

.htw-h-32{
  height:8rem
}

.htw-h-4{
  height:1rem
}

.htw-h-48{
  height:12rem
}

.htw-h-5{
  height:1.25rem
}

.htw-h-6{
  height:1.5rem
}

.htw-h-64{
  height:16rem
}

.htw-h-8{
  height:2rem
}

.htw-h-9{
  height:2.25rem
}

.htw-h-\[100px\]{
  height:100px
}

.htw-h-\[16px\]{
  height:16px
}

.htw-h-\[1px\]{
  height:1px
}

.htw-h-\[22px\]{
  height:22px
}

.htw-h-\[27px\]{
  height:27px
}

.htw-h-\[2px\]{
  height:2px
}

.htw-h-\[51px\]{
  height:51px
}

.htw-h-fit{
  height:-moz-fit-content;
  height:fit-content
}

.htw-h-full{
  height:100%
}

.htw-h-px{
  height:1px
}

.htw-h-screen{
  height:100vh
}

.htw-max-h-\[400px\]{
  max-height:400px
}

.htw-max-h-\[80vh\]{
  max-height:80vh
}

.htw-max-h-full{
  max-height:100%
}

.htw-min-h-32{
  min-height:8rem
}

.htw-min-h-\[26px\]{
  min-height:26px
}

.htw-w-0{
  width:0px
}

.htw-w-16{
  width:4rem
}

.htw-w-2{
  width:0.5rem
}

.htw-w-20{
  width:5rem
}

.htw-w-28{
  width:7rem
}

.htw-w-3{
  width:0.75rem
}

.htw-w-32{
  width:8rem
}

.htw-w-4{
  width:1rem
}

.htw-w-5{
  width:1.25rem
}

.htw-w-6{
  width:1.5rem
}

.htw-w-64{
  width:16rem
}

.htw-w-8{
  width:2rem
}

.htw-w-\[16px\]{
  width:16px
}

.htw-w-\[2px\]{
  width:2px
}

.htw-w-fit{
  width:-moz-fit-content;
  width:fit-content
}

.htw-w-full{
  width:100%
}

.htw-w-max{
  width:-moz-max-content;
  width:max-content
}

.htw-w-px{
  width:1px
}

.htw-w-screen{
  width:100vw
}

.htw-min-w-0{
  min-width:0px
}

.htw-min-w-16{
  min-width:4rem
}

.htw-min-w-4{
  min-width:1rem
}

.htw-min-w-\[150px\]{
  min-width:150px
}

.htw-min-w-\[80px\]{
  min-width:80px
}

.htw-max-w-6{
  max-width:1.5rem
}

.htw-max-w-\[400px\]{
  max-width:400px
}

.htw-max-w-\[512px\]{
  max-width:512px
}

.htw-max-w-\[63px\]{
  max-width:63px
}

.htw-max-w-\[82px\]{
  max-width:82px
}

.htw-max-w-full{
  max-width:100%
}

.htw-max-w-none{
  max-width:none
}

.htw-flex-1{
  flex:1 1 0%
}

.htw-flex-none{
  flex:none
}

.htw-flex-shrink{
  flex-shrink:1
}

.htw-shrink{
  flex-shrink:1
}

.htw-shrink-0{
  flex-shrink:0
}

.htw-grow{
  flex-grow:1
}

.htw-rotate-90{
  --tw-rotate:90deg;
  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))
}

.htw-scale-0{
  --tw-scale-x:0;
  --tw-scale-y:0;
  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))
}

.htw-cursor-default{
  cursor:default
}

.htw-cursor-ew-resize{
  cursor:ew-resize
}

.htw-cursor-ns-resize{
  cursor:ns-resize
}

.htw-cursor-nwse-resize{
  cursor:nwse-resize
}

.htw-cursor-pointer{
  cursor:pointer
}

.htw-cursor-text{
  cursor:text
}

.htw-select-none{
  -webkit-user-select:none;
     -moz-user-select:none;
          user-select:none
}

.htw-resize-none{
  resize:none
}

.htw-resize-y{
  resize:vertical
}

.htw-appearance-none{
  -webkit-appearance:none;
     -moz-appearance:none;
          appearance:none
}

.htw-grid-cols-\[repeat\(auto-fill\,minmax\(200px\,1fr\)\)\]{
  grid-template-columns:repeat(auto-fill,minmax(200px,1fr))
}

.htw-flex-row{
  flex-direction:row
}

.htw-flex-col{
  flex-direction:column
}

.htw-flex-wrap{
  flex-wrap:wrap
}

.htw-flex-nowrap{
  flex-wrap:nowrap
}

.htw-place-content-between{
  place-content:space-between
}

.htw-items-start{
  align-items:flex-start
}

.htw-items-end{
  align-items:flex-end
}

.htw-items-center{
  align-items:center
}

.htw-items-baseline{
  align-items:baseline
}

.htw-items-stretch{
  align-items:stretch
}

.htw-justify-end{
  justify-content:flex-end
}

.htw-justify-center{
  justify-content:center
}

.htw-justify-evenly{
  justify-content:space-evenly
}

.htw-gap-0\.5{
  gap:0.125rem
}

.htw-gap-1{
  gap:0.25rem
}

.htw-gap-12{
  gap:3rem
}

.htw-gap-2{
  gap:0.5rem
}

.htw-gap-4{
  gap:1rem
}

.htw-gap-6{
  gap:1.5rem
}

.htw-gap-px{
  gap:1px
}

.htw-gap-x-2{
  -moz-column-gap:0.5rem;
       column-gap:0.5rem
}

.htw-gap-y-1{
  row-gap:0.25rem
}

.htw-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))
}

.htw-divide-y > :not([hidden]) ~ :not([hidden]){
  --tw-divide-y-reverse:0;
  border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));
  border-bottom-width:calc(1px * var(--tw-divide-y-reverse))
}

.htw-divide-gray-100 > :not([hidden]) ~ :not([hidden]){
  --tw-divide-opacity:1;
  border-color:rgb(var(--_histoire-color-gray-100) / var(--tw-divide-opacity, 1))
}

.htw-divide-gray-200 > :not([hidden]) ~ :not([hidden]){
  --tw-divide-opacity:1;
  border-color:rgb(var(--_histoire-color-gray-200) / var(--tw-divide-opacity, 1))
}

.htw-overflow-auto{
  overflow:auto
}

.htw-overflow-hidden{
  overflow:hidden
}

.htw-overflow-y-auto{
  overflow-y:auto
}

.htw-overflow-y-scroll{
  overflow-y:scroll
}

.htw-scroll-smooth{
  scroll-behavior:smooth
}

.htw-truncate{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap
}

.htw-text-ellipsis{
  text-overflow:ellipsis
}

.htw-whitespace-nowrap{
  white-space:nowrap
}

.\!htw-rounded-\[3px\]{
  border-radius:3px !important
}

.htw-rounded{
  border-radius:0.375rem
}

.htw-rounded-full{
  border-radius:9999px
}

.htw-rounded-lg{
  border-radius:0.75rem
}

.htw-rounded-sm{
  border-radius:0.25rem
}

.htw-rounded-b-lg{
  border-bottom-right-radius:0.75rem;
  border-bottom-left-radius:0.75rem
}

.htw-rounded-l{
  border-top-left-radius:0.375rem;
  border-bottom-left-radius:0.375rem
}

.htw-rounded-r{
  border-top-right-radius:0.375rem;
  border-bottom-right-radius:0.375rem
}

.htw-rounded-r-lg{
  border-top-right-radius:0.75rem;
  border-bottom-right-radius:0.75rem
}

.htw-border{
  border-width:1px
}

.htw-border-0{
  border-width:0px
}

.htw-border-2{
  border-width:2px
}

.htw-border-8{
  border-width:8px
}

.htw-border-b{
  border-bottom-width:1px
}

.htw-border-l-2{
  border-left-width:2px
}

.htw-border-r{
  border-right-width:1px
}

.htw-border-t{
  border-top-width:1px
}

.htw-border-solid{
  border-style:solid
}

.htw-border-none{
  border-style:none
}

.htw-border-black\/20{
  border-color:rgb(0 0 0 / 0.2)
}

.htw-border-black\/25{
  border-color:rgb(0 0 0 / 0.25)
}

.htw-border-black\/50{
  border-color:rgb(0 0 0 / 0.5)
}

.htw-border-current{
  border-color:currentColor
}

.htw-border-gray-100{
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-gray-100) / var(--tw-border-opacity, 1))
}

.htw-border-gray-200{
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-gray-200) / var(--tw-border-opacity, 1))
}

.htw-border-gray-300\/30{
  border-color:rgb(var(--_histoire-color-gray-300) / 0.3)
}

.htw-border-gray-500\/10{
  border-color:rgb(var(--_histoire-color-gray-500) / 0.1)
}

.htw-border-gray-500\/30{
  border-color:rgb(var(--_histoire-color-gray-500) / 0.3)
}

.htw-border-gray-500\/40{
  border-color:rgb(var(--_histoire-color-gray-500) / 0.4)
}

.htw-border-gray-500\/5{
  border-color:rgb(var(--_histoire-color-gray-500) / 0.05)
}

.htw-border-gray-500\/50{
  border-color:rgb(var(--_histoire-color-gray-500) / 0.5)
}

.htw-border-gray-600{
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-gray-600) / var(--tw-border-opacity, 1))
}

.htw-border-gray-800{
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-gray-800) / var(--tw-border-opacity, 1))
}

.htw-border-gray-850{
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-gray-850) / var(--tw-border-opacity, 1))
}

.htw-border-primary-200{
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-primary-200) / var(--tw-border-opacity, 1))
}

.htw-border-primary-500{
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-primary-500) / var(--tw-border-opacity, 1))
}

.htw-border-primary-900{
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-primary-900) / var(--tw-border-opacity, 1))
}

.htw-border-transparent{
  border-color:transparent
}

.\!htw-bg-primary-500{
  --tw-bg-opacity:1 !important;
  background-color:rgb(var(--_histoire-color-primary-500) / var(--tw-bg-opacity, 1)) !important
}

.htw-bg-gray-100{
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-gray-100) / var(--tw-bg-opacity, 1))
}

.htw-bg-gray-200{
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-gray-200) / var(--tw-bg-opacity, 1))
}

.htw-bg-gray-400\/25{
  background-color:rgb(var(--_histoire-color-gray-400) / 0.25)
}

.htw-bg-gray-50{
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-gray-50) / var(--tw-bg-opacity, 1))
}

.htw-bg-gray-500\/10{
  background-color:rgb(var(--_histoire-color-gray-500) / 0.1)
}

.htw-bg-gray-500\/50{
  background-color:rgb(var(--_histoire-color-gray-500) / 0.5)
}

.htw-bg-gray-700{
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-gray-700) / var(--tw-bg-opacity, 1))
}

.htw-bg-gray-800{
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-gray-800) / var(--tw-bg-opacity, 1))
}

.htw-bg-primary-200{
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-primary-200) / var(--tw-bg-opacity, 1))
}

.htw-bg-primary-50{
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-primary-50) / var(--tw-bg-opacity, 1))
}

.htw-bg-primary-500{
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-primary-500) / var(--tw-bg-opacity, 1))
}

.htw-bg-primary-500\/10{
  background-color:rgb(var(--_histoire-color-primary-500) / 0.1)
}

.htw-bg-primary-500\/20{
  background-color:rgb(var(--_histoire-color-primary-500) / 0.2)
}

.htw-bg-primary-500\/25{
  background-color:rgb(var(--_histoire-color-primary-500) / 0.25)
}

.htw-bg-primary-700{
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-primary-700) / var(--tw-bg-opacity, 1))
}

.htw-bg-primary-800{
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-primary-800) / var(--tw-bg-opacity, 1))
}

.htw-bg-transparent{
  background-color:transparent
}

.htw-bg-white{
  --tw-bg-opacity:1;
  background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))
}

.htw-bg-white\/80{
  background-color:rgb(255 255 255 / 0.8)
}

.htw-fill-primary-500{
  fill:rgb(var(--_histoire-color-primary-500))
}

.htw-fill-transparent{
  fill:transparent
}

.htw-stroke-white{
  stroke:#fff
}

.htw-stroke-2{
  stroke-width:2
}

.htw-p-1{
  padding:0.25rem
}

.htw-p-2{
  padding:0.5rem
}

.htw-p-4{
  padding:1rem
}

.htw-p-8{
  padding:2rem
}

.htw-p-px{
  padding:1px
}

.htw-px-0\.5{
  padding-left:0.125rem;
  padding-right:0.125rem
}

.htw-px-1{
  padding-left:0.25rem;
  padding-right:0.25rem
}

.htw-px-2{
  padding-left:0.5rem;
  padding-right:0.5rem
}

.htw-px-4{
  padding-left:1rem;
  padding-right:1rem
}

.htw-px-6{
  padding-left:1.5rem;
  padding-right:1.5rem
}

.htw-py-0\.5{
  padding-top:0.125rem;
  padding-bottom:0.125rem
}

.htw-py-1{
  padding-top:0.25rem;
  padding-bottom:0.25rem
}

.htw-py-12{
  padding-top:3rem;
  padding-bottom:3rem
}

.htw-py-2{
  padding-top:0.5rem;
  padding-bottom:0.5rem
}

.htw-py-3{
  padding-top:0.75rem;
  padding-bottom:0.75rem
}

.htw-py-4{
  padding-top:1rem;
  padding-bottom:1rem
}

.htw-pl-0{
  padding-left:0px
}

.htw-pl-0\.5{
  padding-left:0.125rem
}

.htw-pl-2{
  padding-left:0.5rem
}

.htw-pl-4{
  padding-left:1rem
}

.htw-pl-6{
  padding-left:1.5rem
}

.htw-pr-2{
  padding-right:0.5rem
}

.htw-pr-6{
  padding-right:1.5rem
}

.htw-pt-4{
  padding-top:1rem
}

.htw-text-left{
  text-align:left
}

.htw-text-center{
  text-align:center
}

.htw-font-mono{
  font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace
}

.htw-text-2xl{
  font-size:1.5rem;
  line-height:2rem
}

.htw-text-5xl{
  font-size:3rem;
  line-height:1
}

.htw-text-lg{
  font-size:1.125rem;
  line-height:1.75rem
}

.htw-text-sm{
  font-size:0.875rem;
  line-height:1.25rem
}

.htw-text-xs{
  font-size:0.75rem;
  line-height:1rem
}

.htw-font-bold{
  font-weight:700
}

.htw-uppercase{
  text-transform:uppercase
}

.htw-leading-none{
  line-height:1
}

.htw-leading-normal{
  line-height:1.5
}

.htw-text-black\/\[1\%\]{
  color:rgb(0 0 0 / 1%)
}

.htw-text-gray-400{
  --tw-text-opacity:1;
  color:rgb(var(--_histoire-color-gray-400) / var(--tw-text-opacity, 1))
}

.htw-text-gray-500{
  --tw-text-opacity:1;
  color:rgb(var(--_histoire-color-gray-500) / var(--tw-text-opacity, 1))
}

.htw-text-gray-500\/20{
  color:rgb(var(--_histoire-color-gray-500) / 0.2)
}

.htw-text-gray-700{
  --tw-text-opacity:1;
  color:rgb(var(--_histoire-color-gray-700) / var(--tw-text-opacity, 1))
}

.htw-text-gray-900{
  --tw-text-opacity:1;
  color:rgb(var(--_histoire-color-gray-900) / var(--tw-text-opacity, 1))
}

.htw-text-inherit{
  color:inherit
}

.htw-text-orange-500{
  --tw-text-opacity:1;
  color:rgb(249 115 22 / var(--tw-text-opacity, 1))
}

.htw-text-primary-200{
  --tw-text-opacity:1;
  color:rgb(var(--_histoire-color-primary-200) / var(--tw-text-opacity, 1))
}

.htw-text-primary-400{
  --tw-text-opacity:1;
  color:rgb(var(--_histoire-color-primary-400) / var(--tw-text-opacity, 1))
}

.htw-text-primary-500{
  --tw-text-opacity:1;
  color:rgb(var(--_histoire-color-primary-500) / var(--tw-text-opacity, 1))
}

.htw-text-primary-600{
  --tw-text-opacity:1;
  color:rgb(var(--_histoire-color-primary-600) / var(--tw-text-opacity, 1))
}

.htw-text-primary-800{
  --tw-text-opacity:1;
  color:rgb(var(--_histoire-color-primary-800) / var(--tw-text-opacity, 1))
}

.htw-text-red-500{
  --tw-text-opacity:1;
  color:rgb(239 68 68 / var(--tw-text-opacity, 1))
}

.htw-text-white{
  --tw-text-opacity:1;
  color:rgb(255 255 255 / var(--tw-text-opacity, 1))
}

.htw-opacity-0{
  opacity:0
}

.htw-opacity-20{
  opacity:0.2
}

.htw-opacity-25{
  opacity:0.25
}

.htw-opacity-30{
  opacity:0.3
}

.htw-opacity-40{
  opacity:0.4
}

.htw-opacity-50{
  opacity:0.5
}

.htw-opacity-60{
  opacity:0.6
}

.htw-opacity-70{
  opacity:0.7
}

.htw-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);
  box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
}

.htw-outline-none{
  outline:2px solid transparent;
  outline-offset:2px
}

.htw-transition-all{
  transition-property:all;
  transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration:150ms
}

.htw-transition-border{
  transition-property:border;
  transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration:150ms
}

.htw-transition-colors{
  transition-property:color, background-color, border-color, text-decoration-color, fill, stroke;
  transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration:150ms
}

.htw-transition-none{
  transition-property:none
}

.htw-transition-transform{
  transition-property:transform;
  transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration:150ms
}

.htw-delay-150{
  transition-delay:150ms
}

.htw-duration-150{
  transition-duration:150ms
}

.htw-duration-200{
  transition-duration:200ms
}

.htw-duration-300{
  transition-duration:300ms
}

.htw-ease-\[cubic-bezier\(0\,1\,\.6\,1\)\]{
  transition-timing-function:cubic-bezier(0,1,.6,1)
}

.htw-ease-in-out{
  transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1)
}

.htw-ease-out{
  transition-timing-function:cubic-bezier(0, 0, 0.2, 1)
}

.htw-will-change-transform{
  will-change:transform
}

.dark\:htw-prose-invert:is(.htw-dark *){
  --tw-prose-body:var(--tw-prose-invert-body);
  --tw-prose-headings:var(--tw-prose-invert-headings);
  --tw-prose-lead:var(--tw-prose-invert-lead);
  --tw-prose-links:var(--tw-prose-invert-links);
  --tw-prose-bold:var(--tw-prose-invert-bold);
  --tw-prose-counters:var(--tw-prose-invert-counters);
  --tw-prose-bullets:var(--tw-prose-invert-bullets);
  --tw-prose-hr:var(--tw-prose-invert-hr);
  --tw-prose-quotes:var(--tw-prose-invert-quotes);
  --tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);
  --tw-prose-captions:var(--tw-prose-invert-captions);
  --tw-prose-kbd:var(--tw-prose-invert-kbd);
  --tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);
  --tw-prose-code:var(--tw-prose-invert-code);
  --tw-prose-pre-code:var(--tw-prose-invert-pre-code);
  --tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);
  --tw-prose-th-borders:var(--tw-prose-invert-th-borders);
  --tw-prose-td-borders:var(--tw-prose-invert-td-borders)
}

.first\:htw-mt-0:first-child{
  margin-top:0px
}

.last\:htw-mb-0:last-child{
  margin-bottom:0px
}

.focus-within\:htw-border-primary-500:focus-within{
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-primary-500) / var(--tw-border-opacity, 1))
}

.focus-within\:htw-bg-gray-500\/5:focus-within{
  background-color:rgb(var(--_histoire-color-gray-500) / 0.05)
}

.hover\:htw-border-primary-500:hover{
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-primary-500) / var(--tw-border-opacity, 1))
}

.hover\:htw-bg-gray-200:hover{
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-gray-200) / var(--tw-bg-opacity, 1))
}

.hover\:htw-bg-gray-500\/10:hover{
  background-color:rgb(var(--_histoire-color-gray-500) / 0.1)
}

.hover\:htw-bg-gray-500\/20:hover{
  background-color:rgb(var(--_histoire-color-gray-500) / 0.2)
}

.hover\:htw-bg-gray-500\/30:hover{
  background-color:rgb(var(--_histoire-color-gray-500) / 0.3)
}

.hover\:htw-bg-primary-100:hover{
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-primary-100) / var(--tw-bg-opacity, 1))
}

.hover\:htw-bg-primary-200:hover{
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-primary-200) / var(--tw-bg-opacity, 1))
}

.hover\:htw-bg-primary-300:hover{
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-primary-300) / var(--tw-bg-opacity, 1))
}

.hover\:htw-bg-primary-50:hover{
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-primary-50) / var(--tw-bg-opacity, 1))
}

.hover\:htw-bg-primary-500\/10:hover{
  background-color:rgb(var(--_histoire-color-primary-500) / 0.1)
}

.hover\:htw-bg-primary-500\/30:hover{
  background-color:rgb(var(--_histoire-color-primary-500) / 0.3)
}

.hover\:htw-bg-primary-500\/50:hover{
  background-color:rgb(var(--_histoire-color-primary-500) / 0.5)
}

.hover\:htw-bg-primary-600:hover{
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-primary-600) / var(--tw-bg-opacity, 1))
}

.hover\:htw-text-primary-500:hover{
  --tw-text-opacity:1;
  color:rgb(var(--_histoire-color-primary-500) / var(--tw-text-opacity, 1))
}

.hover\:htw-opacity-100:hover{
  opacity:1
}

.focus\:htw-border-primary-500:focus{
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-primary-500) / var(--tw-border-opacity, 1))
}

.focus\:htw-border-primary-500\/50:focus{
  border-color:rgb(var(--_histoire-color-primary-500) / 0.5)
}

.focus\:htw-opacity-100:focus{
  opacity:1
}

.focus-visible\:htw-border-primary-500:focus-visible{
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-primary-500) / var(--tw-border-opacity, 1))
}

.active\:htw-bg-gray-600\/50:active{
  background-color:rgb(var(--_histoire-color-gray-600) / 0.5)
}

.htw-group:first-child .group-first\:htw-hidden{
  display:none
}

.htw-group:nth-child(odd) .group-odd\:htw-bg-gray-100\/50{
  background-color:rgb(var(--_histoire-color-gray-100) / 0.5)
}

.htw-group:focus-within .group-focus-within\:htw-visible{
  visibility:visible
}

.htw-group:hover .group-hover\:htw-flex{
  display:flex
}

.htw-group:hover .group-hover\:htw-border-primary-500{
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-primary-500) / var(--tw-border-opacity, 1))
}

.htw-group:hover .group-hover\:htw-bg-primary-100{
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-primary-100) / var(--tw-bg-opacity, 1))
}

.htw-group:hover .group-hover\:htw-opacity-100{
  opacity:1
}

.htw-group:hover .group-hover\:htw-opacity-90{
  opacity:0.9
}

.htw-group:active .group-active\:htw-bg-gray-500\/20{
  background-color:rgb(var(--_histoire-color-gray-500) / 0.2)
}

.dark\:htw-divide-gray-750:is(.htw-dark *) > :not([hidden]) ~ :not([hidden]){
  --tw-divide-opacity:1;
  border-color:rgb(var(--_histoire-color-gray-750) / var(--tw-divide-opacity, 1))
}

.dark\:htw-divide-gray-800:is(.htw-dark *) > :not([hidden]) ~ :not([hidden]){
  --tw-divide-opacity:1;
  border-color:rgb(var(--_histoire-color-gray-800) / var(--tw-divide-opacity, 1))
}

.dark\:htw-divide-gray-850:is(.htw-dark *) > :not([hidden]) ~ :not([hidden]){
  --tw-divide-opacity:1;
  border-color:rgb(var(--_histoire-color-gray-850) / var(--tw-divide-opacity, 1))
}

.dark\:htw-border-gray-700\/30:is(.htw-dark *){
  border-color:rgb(var(--_histoire-color-gray-700) / 0.3)
}

.dark\:htw-border-gray-750:is(.htw-dark *){
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-gray-750) / var(--tw-border-opacity, 1))
}

.dark\:htw-border-gray-800:is(.htw-dark *){
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-gray-800) / var(--tw-border-opacity, 1))
}

.dark\:htw-border-gray-850:is(.htw-dark *){
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-gray-850) / var(--tw-border-opacity, 1))
}

.dark\:htw-border-primary-900:is(.htw-dark *){
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-primary-900) / var(--tw-border-opacity, 1))
}

.dark\:htw-border-white\/20:is(.htw-dark *){
  border-color:rgb(255 255 255 / 0.2)
}

.dark\:htw-border-white\/25:is(.htw-dark *){
  border-color:rgb(255 255 255 / 0.25)
}

.dark\:htw-border-white\/50:is(.htw-dark *){
  border-color:rgb(255 255 255 / 0.5)
}

.dark\:htw-bg-black:is(.htw-dark *){
  --tw-bg-opacity:1;
  background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))
}

.dark\:htw-bg-gray-600:is(.htw-dark *){
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-gray-600) / var(--tw-bg-opacity, 1))
}

.dark\:htw-bg-gray-700:is(.htw-dark *){
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-gray-700) / var(--tw-bg-opacity, 1))
}

.dark\:htw-bg-gray-750:is(.htw-dark *){
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-gray-750) / var(--tw-bg-opacity, 1))
}

.dark\:htw-bg-gray-900:is(.htw-dark *){
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-gray-900) / var(--tw-bg-opacity, 1))
}

.dark\:htw-bg-gray-900\/80:is(.htw-dark *){
  background-color:rgb(var(--_histoire-color-gray-900) / 0.8)
}

.dark\:htw-bg-primary-400:is(.htw-dark *){
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-primary-400) / var(--tw-bg-opacity, 1))
}

.dark\:htw-bg-primary-600:is(.htw-dark *){
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-primary-600) / var(--tw-bg-opacity, 1))
}

.dark\:htw-bg-primary-700:is(.htw-dark *){
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-primary-700) / var(--tw-bg-opacity, 1))
}

.dark\:htw-bg-primary-800:is(.htw-dark *){
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-primary-800) / var(--tw-bg-opacity, 1))
}

.dark\:htw-text-black:is(.htw-dark *){
  --tw-text-opacity:1;
  color:rgb(0 0 0 / var(--tw-text-opacity, 1))
}

.dark\:htw-text-gray-100:is(.htw-dark *){
  --tw-text-opacity:1;
  color:rgb(var(--_histoire-color-gray-100) / var(--tw-text-opacity, 1))
}

.dark\:htw-text-gray-300:is(.htw-dark *){
  --tw-text-opacity:1;
  color:rgb(var(--_histoire-color-gray-300) / var(--tw-text-opacity, 1))
}

.dark\:htw-text-primary-200:is(.htw-dark *){
  --tw-text-opacity:1;
  color:rgb(var(--_histoire-color-primary-200) / var(--tw-text-opacity, 1))
}

.dark\:htw-text-primary-400:is(.htw-dark *){
  --tw-text-opacity:1;
  color:rgb(var(--_histoire-color-primary-400) / var(--tw-text-opacity, 1))
}

.dark\:htw-text-white\/\[1\%\]:is(.htw-dark *){
  color:rgb(255 255 255 / 1%)
}

.dark\:focus-within\:htw-border-primary-500:focus-within:is(.htw-dark *){
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-primary-500) / var(--tw-border-opacity, 1))
}

.dark\:hover\:htw-border-primary-500:hover:is(.htw-dark *){
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-primary-500) / var(--tw-border-opacity, 1))
}

.dark\:hover\:htw-bg-gray-800:hover:is(.htw-dark *){
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-gray-800) / var(--tw-bg-opacity, 1))
}

.dark\:hover\:htw-bg-primary-700:hover:is(.htw-dark *){
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-primary-700) / var(--tw-bg-opacity, 1))
}

.dark\:hover\:htw-bg-primary-800:hover:is(.htw-dark *){
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-primary-800) / var(--tw-bg-opacity, 1))
}

.dark\:hover\:htw-bg-primary-900:hover:is(.htw-dark *){
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-primary-900) / var(--tw-bg-opacity, 1))
}

.dark\:hover\:htw-text-primary-400:hover:is(.htw-dark *){
  --tw-text-opacity:1;
  color:rgb(var(--_histoire-color-primary-400) / var(--tw-text-opacity, 1))
}

.dark\:focus\:htw-border-primary-500:focus:is(.htw-dark *){
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-primary-500) / var(--tw-border-opacity, 1))
}

.htw-group:nth-child(odd) .dark\:group-odd\:htw-bg-gray-750\/40:is(.htw-dark *){
  background-color:rgb(var(--_histoire-color-gray-750) / 0.4)
}

.htw-group:hover .group-hover\:dark\:htw-border-primary-500:is(.htw-dark *){
  --tw-border-opacity:1;
  border-color:rgb(var(--_histoire-color-primary-500) / var(--tw-border-opacity, 1))
}

.htw-group:hover .dark\:group-hover\:htw-bg-primary-700:is(.htw-dark *){
  --tw-bg-opacity:1;
  background-color:rgb(var(--_histoire-color-primary-700) / var(--tw-bg-opacity, 1))
}

@media (min-width: 640px){
  .sm\:htw-h-4{
    height:1rem
  }

  .sm\:htw-w-4{
    width:1rem
  }

  .sm\:htw-p-1{
    padding:0.25rem
  }

  .sm\:htw-py-4{
    padding-top:1rem;
    padding-bottom:1rem
  }
}

@media (min-width: 768px){
  .md\:htw-mx-auto{
    margin-left:auto;
    margin-right:auto
  }

  .md\:htw-mt-16{
    margin-top:4rem
  }

  .md\:htw-block{
    display:block
  }

  .md\:htw-max-w-\[600px\]{
    max-width:600px
  }

  .md\:htw-flex-col{
    flex-direction:column
  }

  .md\:htw-p-12{
    padding:3rem
  }

  .md\:htw-py-1\.5{
    padding-top:0.375rem;
    padding-bottom:0.375rem
  }
}

@media (min-width: 1024px){
  .lg\:htw-max-w-\[800px\]{
    max-width:800px
  }
}

@media (min-width: 1280px){
  .xl\:htw-max-w-\[900px\]{
    max-width:900px
  }
}

@media (max-width: 767px){
  .\!md\:htw-flex-col{
    flex-direction:column
  }
}

.histoire-story-list-folder-button:hover .\[\.histoire-story-list-folder-button\:hover_\&\]\:htw-opacity-100{
  opacity:1
}
}
@scope (:root) to (.__histoire-render-story:not(.__histoire-render-custom-controls)) {
.bind-tree-margin[data-v-64c2458f] {
  margin-left: var(--v2562213a);
}
.bind-icon-color[data-v-64c2458f] {
  color: var(--v1eff521f);
}
}
@scope (:root) to (.__histoire-render-story:not(.__histoire-render-custom-controls)) {
.bind-tree-padding[data-v-ee932a0c] {
  padding-left: var(--v5352bb71);
}
}
@scope (:root) to (.__histoire-render-story:not(.__histoire-render-custom-controls)) {
.bind-icon-color[data-v-d15ecb89] {
  color: var(--a3f02f4e);
}
}
@scope (:root) to (.__histoire-render-story:not(.__histoire-render-custom-controls)) {
.landscape > div > .dragger[data-v-4f40a1bb] {
  width: .625rem;
}
.portrait > div > .dragger[data-v-4f40a1bb] {
  height: .625rem;
}
.landscape > div > .dragger.dragger-offset-before[data-v-4f40a1bb] {
  right: 0;
}
.portrait > div > .dragger.dragger-offset-before[data-v-4f40a1bb] {
  bottom: 0;
}
.landscape > div > .dragger.dragger-offset-center[data-v-4f40a1bb] {
  right: -.3125rem;
}
.portrait > div > .dragger.dragger-offset-center[data-v-4f40a1bb] {
  bottom: -.3125rem;
}
.landscape > div > .dragger.dragger-offset-after[data-v-4f40a1bb] {
  right: -.625rem;
}
.portrait > div > .dragger.dragger-offset-after[data-v-4f40a1bb] {
  bottom: -.625rem;
}
}
@scope (:root) to (.__histoire-render-story:not(.__histoire-render-custom-controls)) {
.htw-base-empty[data-v-c5ecfead]:not(.no-animation) {
  animation: htw-base-empty-c5ecfead .15s .2s both;
}
@keyframes htw-base-empty-c5ecfead {
0% {
    opacity: 0;
}
100% {
    opacity: 1;
}
}
}
@scope (:root) to (.__histoire-render-story:not(.__histoire-render-custom-controls)) {
.__histoire-code-placeholder[data-v-96af7f40] {
  color: inherit;
  font-size: inherit;
}
}
@scope (:root) to (.__histoire-render-story:not(.__histoire-render-custom-controls)) {
.bind-preview-bg[data-v-c48fb2b2] {
  background-color: var(--v627bec82);
  color: var(--v35068428);
}
}
@scope (:root) to (.__histoire-render-story:not(.__histoire-render-custom-controls)) {
.bind-icon-color[data-v-feff9239] {
  color: var(--v60afaf4d);
}
.bind-preview-bg[data-v-feff9239] {
  background-color: var(--v3bd99e7e);
}
}
@scope (:root) to (.__histoire-render-story:not(.__histoire-render-custom-controls)) {
.bind-icon-color[data-v-1b279b85] {
  color: var(--ab2181a2);
}
}
@scope (:root) to (.__histoire-render-story:not(.__histoire-render-custom-controls)) {
.__histoire-hatched-pattern[data-v-91561117] {
  background: repeating-linear-gradient(135deg,
  transparent 0px,
  transparent 32px,
  currentColor 32px,
  currentColor 64px);
}
}
@scope (:root) to (.__histoire-render-story:not(.__histoire-render-custom-controls)) {
.bind-preview-bg[data-v-18122333] {
  background-color: var(--v5f6f4ee9);
}
}
@scope (:root) to (.__histoire-render-story:not(.__histoire-render-custom-controls)) {
.bind-icon-color[data-v-c2a43485] {
  color: var(--v41c4d268);
}
}
@scope (:root) to (.__histoire-render-story:not(.__histoire-render-custom-controls)) {
.bind-icon-color[data-v-096f6d6e] {
  color: var(--v0f021d3c);
}
}
@scope (:root) to (.__histoire-render-story:not(.__histoire-render-custom-controls)) {
img.colorize-black[data-v-2114f510] {
  filter: grayscale(100) brightness(0);
}
}
@scope (:root) to (.__histoire-render-story:not(.__histoire-render-custom-controls)) {
.bind-icon-color[data-v-9f94ad2b] {
  color: var(--v1f9aa6ca);
}
}
.htw-bind-col-size{grid-template-columns:repeat(auto-fill,minmax(var(--histoire-col-size),1fr))}.__histoire-json-code[data-v-d4369e5a] .cm-editor{height:100%;min-width:280px}.v-popper{line-height:0}.htw-dark .v-popper--theme-dropdown .v-popper__inner{--tw-border-opacity: 1;border-color:rgb(31 31 33 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(63 63 70 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(244 244 245 / var(--tw-text-opacity, 1))}.htw-dark .v-popper--theme-dropdown .v-popper__arrow-inner{--tw-border-opacity: 1;border-color:rgb(63 63 70 / var(--tw-border-opacity, 1))}.htw-dark .v-popper--theme-dropdown .v-popper__arrow-outer{--tw-border-opacity: 1;border-color:rgb(31 31 33 / var(--tw-border-opacity, 1))}.v-popper--theme-dropdown.v-popper__popper--show-from .v-popper__wrapper{transform:scale(.75)}.v-popper--theme-dropdown.v-popper__popper--show-to .v-popper__wrapper{transform:none;transition:transform .15s cubic-bezier(0,1,.5,1)}.v-popper__popper:focus-visible{outline:none}.htw-range-input::-webkit-slider-thumb{height:.75rem;width:.75rem;-webkit-appearance:none;appearance:none;border-radius:9999px;border-width:1px;border-style:solid;border-color:#00000040;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.htw-range-input:is(.htw-dark *)::-webkit-slider-thumb{border-color:#ffffff40;--tw-bg-opacity: 1;background-color:rgb(63 63 70 / var(--tw-bg-opacity, 1))}.htw-range-input:hover::-webkit-slider-thumb{--tw-border-opacity: 1 !important;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))!important;--tw-bg-opacity: 1 !important;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))!important}.htw-range-input::-moz-range-thumb{height:.75rem;width:.75rem;-moz-appearance:none;appearance:none;border-radius:9999px;border-width:1px;border-style:solid;border-color:#00000040;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.htw-range-input:is(.htw-dark *)::-moz-range-thumb{border-color:#ffffff40;--tw-bg-opacity: 1;background-color:rgb(63 63 70 / var(--tw-bg-opacity, 1))}.htw-range-input:hover::-moz-range-thumb{--tw-border-opacity: 1 !important;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))!important;--tw-bg-opacity: 1 !important;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))!important}

html,
body {
  background: transparent !important;
}

body {
  margin: 0;
}

html {
  font-size: 1rem;
  font-family: 'Noto Sans Display', system-ui, sans-serif;
}

.htw-sandbox-hidden {
  display: none;
}

.__histoire-render-story:not(.__histoire-render-custom-controls) {
  overflow: auto;
  min-height: 100%;
}
/* BookingDetails — a transparent booking layout: a wrapping row of date options above a Select.
   Tokens only; the 311/475 px are raw Figma constants (container min/max width, unbound). */
.booking-details[data-v-a5237ebc], .booking-details[data-v-a5237ebc] * {
    box-sizing: border-box;
}
.booking-details[data-v-a5237ebc] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--btly-space-16);
    width: 100%;
    min-width: 311px;
    max-width: 475px;
}
.row[data-v-a5237ebc] {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-start;
    gap: var(--btly-space-8);
    width: 100%;
}

/* Figma: the date options fill the row equally; grow from their natural width so extras wrap.
   `:deep` (not `:slotted`) — a `\3c style scoped src>` block leaves `:slotted` dead. */
.row[data-v-a5237ebc] >  * {
    flex: 1 0 auto;
}
.btly-icon[data-v-8c9d50ed], .btly-icon[data-v-8c9d50ed] * {
  box-sizing: border-box;
}
.btly-icon[data-v-8c9d50ed] {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  overflow: hidden;
  color: var(--btly-icon-default);
}

/* Size the svg ourselves (1em) — no dependency on FontAwesome's global CSS. */
.btly-icon[data-v-8c9d50ed] svg {
  display: block;
  height: 1em;
  width: auto;
}
.btly-icon--xs[data-v-8c9d50ed] { width: var(--btly-space-16); height: var(--btly-space-16); font-size: 12px;
}
.btly-icon--sm[data-v-8c9d50ed] { width: var(--btly-space-20); height: var(--btly-space-20); font-size: 14px;
}
.btly-icon--md[data-v-8c9d50ed] { width: var(--btly-space-24); height: var(--btly-space-24); font-size: 16px;
}
.btly-icon--lg[data-v-8c9d50ed] { width: var(--btly-space-32); height: var(--btly-space-32); font-size: 20px;
}
.btly-icon--xl[data-v-8c9d50ed] { width: var(--btly-space-48); height: var(--btly-space-48); font-size: 32px;
}
.btly-icon--default[data-v-8c9d50ed] { color: var(--btly-icon-default);
}
.btly-icon--muted[data-v-8c9d50ed] { color: var(--btly-icon-muted);
}
.btly-icon--brand[data-v-8c9d50ed] { color: var(--btly-icon-brand);
}
.btly-icon--inverse[data-v-8c9d50ed] { color: var(--btly-icon-inverse);
}
.btly-icon--disabled[data-v-8c9d50ed] { color: var(--btly-icon-disabled);
}
.btly-icon--inherit[data-v-8c9d50ed] { color: inherit;
}
.btn[data-v-87b24c88], .btn[data-v-87b24c88] * {
    box-sizing: border-box;
}
.btn[data-v-87b24c88] {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--btly-space-4);
    margin: 0;
    border: var(--btly-border-width-1-5) solid var(--btly-border-default);
    background: var(--btly-surface-card);
    appearance: none;
    font: inherit;
    color: inherit;
    cursor: pointer;
    text-align: center;
    white-space: nowrap;
    overflow: hidden;
}

/* 98/68 are raw Figma constants with no bound token (like ItemAnswerVertical's 165×88). */
.btn.vertical[data-v-87b24c88] {
    flex-direction: column;
    width: 98px;
    height: 68px;
    padding: var(--btly-space-12);
    border-radius: var(--btly-radius-16);
}

/* 153 is a raw Figma constant with no bound token. */
.btn.horizontal[data-v-87b24c88] {
    width: 153px;
    padding: var(--btly-space-16) var(--btly-space-12);
    border-radius: var(--btly-radius-12);
}

/* Hover fades, press is instant — the convention + why lives in ARCHITECTURE.md "States". */
@media (hover: hover) {
.btn[data-v-87b24c88] {
        transition:
            background-color 80ms ease-in-out,
            border-color 80ms ease-in-out,
            color 80ms ease-in-out;
}
.btn[data-v-87b24c88]:active {
        transition: none;
}
}
@media (prefers-reduced-motion: reduce) {
.btn[data-v-87b24c88] {
        transition: none;
}
}
@media (hover: hover) {
.btn[data-v-87b24c88]:hover {
        background: var(--btly-surface-brand);
}
}
.btn[data-v-87b24c88]:active {
    background: var(--btly-surface-brand);
    border-color: var(--btly-border-brand);
}
.btn.selected[data-v-87b24c88] {
    background: var(--btly-surface-brand);
    border-color: var(--btly-border-brand);
    box-shadow: 0 0 0 2px var(--btly-border-focus-halo);
}
.btn[data-v-87b24c88]:focus-visible {
    outline: 2px solid transparent;
    border-color: var(--btly-border-brand);
    box-shadow: 0 0 0 2px var(--btly-border-focus-halo);
}

/* Placed last so it wins on equal specificity even while hovered/pressed. */
.btn.error[data-v-87b24c88],
.btn.error[data-v-87b24c88]:hover,
.btn.error[data-v-87b24c88]:active {
    background: var(--btly-base-white);
    border-color: var(--btly-status-error-accent);
    box-shadow: none;
}

/* Keep a visible focus ring on error for keyboard a11y — the shared halo, not a solid accent. */
.btn.error[data-v-87b24c88]:focus-visible {
    border-color: var(--btly-status-error-accent);
    box-shadow: 0 0 0 2px var(--btly-border-focus-halo);
}
.title[data-v-87b24c88] {
    color: var(--btly-text-primary);
}
.meta[data-v-87b24c88] {
    display: inline-flex;
    align-items: center;
    gap: var(--btly-space-4);
}
.description[data-v-87b24c88] {
    color: var(--btly-text-tertiary);
}

/* ✓ — Icon uses color:inherit, so pin the exact Figma colour here. */
.check[data-v-87b24c88] {
    flex-shrink: 0;
    color: var(--btly-action-primary-default);
}

/* Horizontal: pin the ✓ to the top-right corner (absolute, out of flow) so it does not
   push or wrap the title + description. Figma node 14582-4965: icon left 134.5 / top 3.5
   in the 153px box → right 2.5. Vertical keeps the ✓ inline in the .meta row. */
.btn.horizontal .check[data-v-87b24c88] {
    position: absolute;
    top: 3.5px;
    right: 2.5px;
}
.btn[data-v-be89d63e], .btn[data-v-be89d63e] * {
    box-sizing: border-box;
}

/* font comes from the btly-text-title-s utility on the element itself — no `font: inherit` here
 * (the scoped rule would outweigh the global utility class). */
.btn[data-v-be89d63e] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--btly-space-2);
    /* Figma padding (asymmetric — tuned for the input's right slot): py-2, pr-6, pl-16. */
    padding: var(--btly-space-2) var(--btly-space-6) var(--btly-space-2) var(--btly-space-16);
    margin: 0;
    border: 0;
    appearance: none;
    /* invisible (transparent bg) — only shapes the focus ring */
    border-radius: var(--btly-radius-8);
    background: transparent;
    color: var(--btly-action-primary-default);
    cursor: pointer;
    white-space: nowrap;
}

/* Hover fades, press is instant — the convention + why lives in ARCHITECTURE.md "States". */
@media (hover: hover) {
.btn[data-v-be89d63e] {
        transition:
            background-color 80ms ease-in-out,
            border-color 80ms ease-in-out,
            color 80ms ease-in-out;
}
.btn[data-v-be89d63e]:active {
        transition: none;
}
}
@media (prefers-reduced-motion: reduce) {
.btn[data-v-be89d63e] {
        transition: none;
}
}
@media (hover: hover) {
.btn[data-v-be89d63e]:not(:disabled):hover { color: var(--btly-action-primary-hover);
}
}

/* after the hover media query so it wins while pressing during hover */
.btn[data-v-be89d63e]:not(:disabled):active { color: var(--btly-action-primary-pressed);
}
.btn[data-v-be89d63e]:disabled {
    color: var(--btly-action-primary-disabled-text);
    cursor: not-allowed;
}
.btn[data-v-be89d63e]:focus-visible {
    outline: 2px solid transparent;
    box-shadow: 0 0 0 2px var(--btly-border-focus-halo);
}
.dropdown-item[data-v-e18393c1], .dropdown-item[data-v-e18393c1] * {
    box-sizing: border-box;
}
.dropdown-item[data-v-e18393c1] {
    display: flex;
    align-items: flex-start;
    gap: var(--btly-space-4);
    width: 100%;
    min-height: var(--btly-space-40);
    margin: 0;
    padding: var(--btly-space-8);
    border: 0;
    border-radius: var(--btly-radius-8);
    background: transparent;
    appearance: none;
    font: inherit;
    color: inherit;
    cursor: pointer;
    text-align: left;
}
@media (hover: hover) {
.dropdown-item[data-v-e18393c1]:not(:disabled):hover { background: var(--btly-surface-tertiary);
}
    /* Selected stays brand on hover — Figma has no selected+hover variant (designer flag #5). */
.dropdown-item.selected[data-v-e18393c1]:hover { background: var(--btly-surface-brand);
}
}
.dropdown-item.selected[data-v-e18393c1] { background: var(--btly-surface-brand);
}
.dropdown-item[data-v-e18393c1]:disabled { cursor: not-allowed;
}

/* 24px icon boxes; colors follow the Figma per-state bindings. */
.checkbox[data-v-e18393c1],
.lead[data-v-e18393c1],
.trail[data-v-e18393c1] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: var(--btly-space-24);
    height: var(--btly-space-24);
}
.avatar[data-v-e18393c1] { flex-shrink: 0;
}
.checkbox[data-v-e18393c1] { color: var(--btly-icon-muted);
}
/* Figma binds the ACTION token on the checked glyph — followed literally. */
.dropdown-item.selected .checkbox[data-v-e18393c1] { color: var(--btly-action-primary-default);
}
.lead[data-v-e18393c1] { color: var(--btly-icon-default);
}
.dropdown-item.selected .lead[data-v-e18393c1] { color: var(--btly-icon-brand);
}
/* Figma binds the TEXT token on the disabled leading icon (designer flag #1) — followed literally. */
.dropdown-item:disabled .lead[data-v-e18393c1] { color: var(--btly-text-disabled);
}
.trail[data-v-e18393c1] { color: var(--btly-icon-brand);
}
.dropdown-item:disabled .trail[data-v-e18393c1] { color: var(--btly-icon-disabled);
}
.text[data-v-e18393c1] {
    display: flex;
    flex: 1 1 auto;
    flex-direction: column;
    gap: var(--btly-space-2);
    min-width: 0;
    padding: var(--btly-space-2) 0;
}
.title[data-v-e18393c1] { color: var(--btly-text-secondary);
}
.dropdown-item:disabled .title[data-v-e18393c1] { color: var(--btly-text-disabled);
}
.desc[data-v-e18393c1] { color: var(--btly-text-tertiary);
}
.dropdown-item:disabled .desc[data-v-e18393c1] { color: var(--btly-text-disabled);
}
.dropdown[data-v-0d60e232], .dropdown[data-v-0d60e232] * {
    box-sizing: border-box;
}
.dropdown[data-v-0d60e232] {
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-2);
    padding: var(--btly-space-4);
    border: var(--btly-border-width-1) solid var(--btly-border-default);
    border-radius: var(--btly-radius-8);
    background: var(--btly-surface-canvas);
    /* Figma "1dp shadow" effect style — effects are not in the token export (designer flagged). */
    box-shadow: 0 1px 2px 0 rgba(15, 23, 43, 0.05);
}
.title[data-v-0d60e232] {
    display: flex;
    align-items: center;
    max-height: var(--btly-space-40);
    padding: var(--btly-space-12);
    color: var(--btly-text-secondary);
}
.list[data-v-0d60e232] {
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-2);
    min-height: 0;
}

/* Scroll appears only when maxHeight caps the panel (set inline from the prop).
 * gray-200 has no semantic alias → brand token (the approved exception). */
.dropdown.scrollable .list[data-v-0d60e232] {
    overflow-y: auto;
}

/* Standard scrollbar props DISABLE ::-webkit-scrollbar* in modern Chromium/Safari, so they
 * are scoped to engines without the webkit pseudo (Firefox) — each engine gets its 4px bar. */
@supports not selector(::-webkit-scrollbar) {
.dropdown.scrollable .list[data-v-0d60e232] {
        scrollbar-width: thin;
        scrollbar-color: var(--btly-brand-gray-200) transparent;
}
}

/* The node's anatomy (3713:7631): a 4px thumb INSET by space/4 on every side — the wrapper is
 * base/transparent with padding space/4, so the reserved gutter is 4+4+4 = 12px, thumb centred.
 * WebKit has no thumb padding: the inset is a transparent border + `background-clip` (the classic
 * trick), so the painted pill is the middle 4px. The visible radius must stay radius/4, and
 * border-radius applies to the BORDER box — add the border back on (radius/4 + space/4). The
 * vertical inset is the track's block margin. iOS is the point of all of this: iPhones hide the
 * native overlay scrollbar until the first scroll, and a styled ::-webkit-scrollbar renders
 * always-visible — which is exactly what the design draws. */
.dropdown.scrollable .list[data-v-0d60e232]::-webkit-scrollbar {
    width: calc(var(--btly-space-4) * 3);
}
.dropdown.scrollable .list[data-v-0d60e232]::-webkit-scrollbar-thumb {
    background: var(--btly-brand-gray-200);
    background-clip: padding-box;
    border: var(--btly-space-4) solid transparent;
    border-radius: calc(var(--btly-radius-4) + var(--btly-space-4));
}
.dropdown.scrollable .list[data-v-0d60e232]::-webkit-scrollbar-track {
    margin-block: var(--btly-space-4);
    background: transparent;
}
.select[data-v-9ed96492], .select[data-v-9ed96492] * {
    box-sizing: border-box;
}
.select[data-v-9ed96492] {
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-2);
    width: 100%;
}
.label-row[data-v-9ed96492] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--btly-space-8);
}
.label-row .label[data-v-9ed96492] { color: var(--btly-text-secondary);
}
.req[data-v-9ed96492] { margin-left: var(--btly-space-2); color: var(--btly-text-brand);
}
.optional[data-v-9ed96492] { color: var(--btly-text-tertiary);
}
.field[data-v-9ed96492] {
    position: relative;
    display: flex;
    align-items: center;
    gap: var(--btly-space-4);
    padding: var(--btly-space-10) var(--btly-space-8);
    /* Select's Figma resting border = border/strong (heavier than Input's border/default; spec §9). */
    border: var(--btly-border-width-1) solid var(--btly-border-strong);
    border-radius: var(--btly-radius-8);
    background: var(--btly-surface-canvas);
    box-shadow: 0 1px 2px 0 rgba(15, 23, 43, 0.05);
}
@media (hover: hover) {
.field[data-v-9ed96492]:hover { border-color: var(--btly-border-brand);
}
}
.field[data-v-9ed96492]:focus-within {
    border-color: var(--btly-border-brand);
    box-shadow: 0 0 0 2px var(--btly-border-focus-halo);
}
.trigger[data-v-9ed96492] {
    display: flex;
    flex: 1 1 auto;
    align-items: center;
    gap: var(--btly-space-4);
    min-width: 0;
    margin: 0;
    padding: 0;
    border: 0;
    outline: 0;
    background: transparent;
    appearance: none;
    font: inherit;
    text-align: left;
    cursor: pointer;
    color: var(--btly-text-primary);
}
.value[data-v-9ed96492] {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: var(--btly-text-primary);
}
.value.placeholder[data-v-9ed96492] { color: var(--btly-text-placeholder);
}
.lead[data-v-9ed96492],
.trail[data-v-9ed96492] {
    display: inline-flex;
    align-items: center;
    flex-shrink: 0;
    color: var(--btly-icon-muted);
}
.chevron[data-v-9ed96492] {
    display: inline-flex;
    align-items: center;
    flex-shrink: 0;
    color: var(--btly-icon-default);
    transition: transform 0.15s ease;
}
.select.open .chevron[data-v-9ed96492] { transform: rotate(180deg);
}
.action[data-v-9ed96492] { flex-shrink: 0;
}
.select.error .field[data-v-9ed96492] { border-color: var(--btly-status-error-accent);
}
.select.success .field[data-v-9ed96492] { border-color: var(--btly-status-success-accent);
}

/* No shadow in these states — neither the 1dp resting one nor the focus halo (beats `:focus-within`). */
.select.error .field[data-v-9ed96492],
.select.success .field[data-v-9ed96492] {
    box-shadow: none;
}
.select.disabled .field[data-v-9ed96492] {
    background: var(--btly-surface-secondary);
    border-color: var(--btly-border-default);
    cursor: not-allowed;
}
.select.disabled .trigger[data-v-9ed96492] { cursor: not-allowed;
}
.select.disabled .value[data-v-9ed96492],
.select.disabled .value.placeholder[data-v-9ed96492] { color: var(--btly-text-disabled);
}
.select.disabled .lead[data-v-9ed96492],
.select.disabled .trail[data-v-9ed96492],
.select.disabled .chevron[data-v-9ed96492] { color: var(--btly-icon-disabled);
}
.select.disabled .label-row .label[data-v-9ed96492] { color: var(--btly-text-tertiary);
}
.select.disabled .req[data-v-9ed96492],
.select.disabled .optional[data-v-9ed96492] { color: var(--btly-text-disabled);
}

/* <p> carries a UA margin-block:1em — reset it; the field→description spacing is the root gap only. */
.description[data-v-9ed96492] { margin: 0; color: var(--btly-text-tertiary);
}
.description.is-error[data-v-9ed96492] { color: var(--btly-status-error-text);
}

/* Positioning only — the visual panel is the DS Dropdown inside. */
.panel[data-v-9ed96492] {
    position: absolute;
    top: calc(100% + var(--btly-space-4));
    left: 0;
    right: 0;
    z-index: 10;
}

/* Flipped above the trigger when only the top side fits the list (reka-ui flip semantics —
   `use-adaptive-panel.ts` decides; this class only places). Same gap, mirrored. */
.panel.up[data-v-9ed96492] {
    top: auto;
    bottom: calc(100% + var(--btly-space-4));
}

.frame-wrap[data-v-f96c7b94] {
  display: flex;
  flex-direction: column;
  gap: 12px;
  width: fit-content;
  max-width: 100%;
}
.frame-title[data-v-f96c7b94] {
  margin: 0;
  font-size: 16px;
  font-weight: 600;
  line-height: 1.2;
  color: var(--btly-text-primary);
}
.gallery-frame[data-v-f96c7b94] {
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  gap: 16px;
  width: 100%;
  max-width: 100%;
  padding: 24px;
  border: 1px dashed #9747ff;
  border-radius: 4px;
  background: transparent;
}

.frame-wrap[data-v-4115d24b] {
  display: flex;
  flex-direction: column;
  gap: 12px;
  width: fit-content;
  max-width: 100%;
}
.frame-title[data-v-4115d24b] {
  margin: 0;
  font-size: 16px;
  font-weight: 600;
  line-height: 1.2;
  color: var(--btly-text-primary);
}
.playground-frame[data-v-4115d24b] {
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  gap: 16px;
  width: 100%;
  max-width: 100%;
  padding: 24px;
  border: 1px dashed #0491D9;
  border-radius: 4px;
  background: transparent;
}

.story-frames[data-v-206bfcd4] {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 32px;
}

.pg[data-v-e69afe85] {
  width: 475px;
}
.btn-wrap[data-v-30f1a192], .btn-wrap[data-v-30f1a192] * {
    box-sizing: border-box;
}
.btn-wrap[data-v-30f1a192] {
    display: contents;
}
/* Figma binds space/2 on the caption column (node 1914:76816) — deliberately tight. */
.btn-wrap.has-caption[data-v-30f1a192] {
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    gap: var(--btly-space-2);
}
/* The column is as wide as the control, so a long caption overflows instead of stretching it. */
.btn-wrap.has-caption.sz-md[data-v-30f1a192] { width: 48px;
}
.btn-wrap.has-caption.sz-sm[data-v-30f1a192] { width: 44px;
}
.caption[data-v-30f1a192] {
    color: var(--btly-text-tertiary);
    text-align: center;
    white-space: nowrap;
}

/* UA <button> reset remainder (padding/background/color come from the always-present sz- and view- rules). */
.btn[data-v-30f1a192] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--btly-space-2);
    /* Figma's stroke is inside-aligned, so it must not grow the box — subtract it from the padding. */
    padding: calc(var(--btn-pad-y) - var(--btly-border-width-1)) calc(var(--btn-pad-x) - var(--btly-border-width-1));
    max-width: 480px;
    margin: 0;
    border: var(--btly-border-width-1) solid transparent;
    appearance: none;
    font: inherit;
    color: inherit;
    cursor: pointer;
}
.btn[data-v-30f1a192]:disabled {
    cursor: not-allowed;
}
.btn[data-v-30f1a192]:focus-visible {
    outline: 2px solid transparent;
    box-shadow: 0 0 0 2px var(--btly-border-focus-halo);
}
.label[data-v-30f1a192] {
    padding: 0 var(--btly-space-2);
}
.ico[data-v-30f1a192] {
    display: inline-flex;
    flex-shrink: 0;
}

/* Height is derived, never typed: Figma hugs both axes so a wrapped label grows the button instead
   of clipping it (lg 16+24=56, md 12+24=48, sm 12+20=44). */
.btn.sz-lg[data-v-30f1a192] { --btn-pad-y: var(--btly-space-16); --btn-pad-x: var(--btly-space-24); border-radius: var(--btly-radius-16);
}
.btn.sz-md[data-v-30f1a192] { --btn-pad-y: var(--btly-space-12); --btn-pad-x: var(--btly-space-24); border-radius: var(--btly-radius-12);
}
.btn.sz-sm[data-v-30f1a192] { --btn-pad-y: var(--btly-space-12); --btn-pad-x: var(--btly-space-16); border-radius: var(--btly-radius-12);
}
.btn.sz-xs[data-v-30f1a192] { border-radius: var(--btly-radius-8);
}

/* Icon-only is a fixed square — both axes are the control's, not derived. Figma draws it for
   secondary (md/sm) and tertiary/tertiary-accent (sm/xs) only; lg is here so a square never breaks
   if the type is ever widened. */
.btn.icon-only[data-v-30f1a192] { padding: 0;
}
.btn.icon-only.sz-lg[data-v-30f1a192] { width: 56px; height: 56px;
}
.btn.icon-only.sz-md[data-v-30f1a192] { width: 48px; height: 48px;
}
.btn.icon-only.sz-sm[data-v-30f1a192] { width: 44px; height: 44px;
}
.btn.icon-only.sz-xs[data-v-30f1a192] { width: 24px; height: 24px;
}

/* Icon-only radius is per-VIEW in Figma, not per-size: tertiary/tertiary-accent bind radius/8
   (nodes 1834:129088, 1914:76794), secondary keeps radius/12 (1914:76819, 18783:5597). */
.btn.icon-only.view-tertiary[data-v-30f1a192],
.btn.icon-only.view-tertiary-accent[data-v-30f1a192] {
    border-radius: var(--btly-radius-8);
}
/* On the ghost views the square is only the hit area: Figma paints the state on a hug-size inner
   chip — space/4 around the 20px icon = 28×28, radius/8. `xs` has no inner frame, hence no chip. */
.btn.icon-only.sz-sm.view-tertiary > .ico[data-v-30f1a192],
.btn.icon-only.sz-sm.view-tertiary-accent > .ico[data-v-30f1a192] {
    padding: var(--btly-space-4);
    border-radius: var(--btly-radius-8);
}
.btn.view-primary[data-v-30f1a192] { background: var(--btly-action-primary-default); color: var(--btly-text-inverse);
}
.btn.view-accent[data-v-30f1a192] { background: var(--btly-action-accent-default); color: var(--btly-text-primary);
}
.btn.view-destructive[data-v-30f1a192] { background: var(--btly-action-destructive-default); color: var(--btly-text-inverse);
}
.btn.view-secondary[data-v-30f1a192] {
    background: var(--btly-surface-canvas);
    color: var(--btly-action-secondary-default);
    border-color: var(--btly-border-strong);
}
.btn.view-tertiary[data-v-30f1a192] { background: transparent; color: var(--btly-action-tertiary-default);
}
.btn.view-tertiary-accent[data-v-30f1a192] { background: transparent; color: var(--btly-action-primary-default);
}

/* Hover fades, press is instant — the convention + why lives in ARCHITECTURE.md "States". */
@media (hover: hover) {
.btn[data-v-30f1a192],
    .btn > .ico[data-v-30f1a192] {
        transition:
            background-color 80ms ease-in-out,
            border-color 80ms ease-in-out,
            color 80ms ease-in-out;
}
.btn[data-v-30f1a192]:active,
    .btn:active > .ico[data-v-30f1a192] {
        transition: none;
}
}
@media (prefers-reduced-motion: reduce) {
.btn[data-v-30f1a192],
    .btn > .ico[data-v-30f1a192] {
        transition: none;
}
}
@media (hover: hover) {
.btn.view-primary[data-v-30f1a192]:not(:disabled):hover { background: var(--btly-action-primary-hover);
}
.btn.view-accent[data-v-30f1a192]:not(:disabled):hover { background: var(--btly-action-accent-hover);
}
.btn.view-destructive[data-v-30f1a192]:not(:disabled):hover { background: var(--btly-action-destructive-hover);
}
.btn.view-secondary[data-v-30f1a192]:not(:disabled):hover {
        background: var(--btly-surface-secondary);
        color: var(--btly-action-secondary-hover);
}
    /* Ghost fills go on the root when labelled and on the chip when icon-only; `:not(.icon-only)`
       also excludes xs, whose hover/press keep a transparent background in Figma
       (nodes 9406:12650 / 9406:12665 / 9406:12645) — only the glyph colour changes. */
.btn.view-tertiary[data-v-30f1a192]:not(.icon-only):not(:disabled):hover {
        background: var(--btly-surface-tertiary);
}
.btn.view-tertiary.icon-only.sz-sm:not(:disabled):hover > .ico[data-v-30f1a192] {
        background: var(--btly-surface-tertiary);
}
.btn.view-tertiary[data-v-30f1a192]:not(:disabled):hover {
        color: var(--btly-action-tertiary-hover);
}
.btn.view-tertiary-accent[data-v-30f1a192]:not(.icon-only):not(:disabled):hover {
        background: var(--btly-surface-brand);
}
.btn.view-tertiary-accent.icon-only.sz-sm:not(:disabled):hover > .ico[data-v-30f1a192] {
        background: var(--btly-surface-brand);
}
.btn.view-tertiary-accent[data-v-30f1a192]:not(:disabled):hover {
        color: var(--btly-action-primary-hover);
}
}

/* Pressed rules come after the hover media query so they win while pressing during hover. */
.btn.view-primary[data-v-30f1a192]:not(:disabled):active { background: var(--btly-action-primary-pressed);
}
.btn.view-accent[data-v-30f1a192]:not(:disabled):active { background: var(--btly-action-accent-pressed);
}
.btn.view-destructive[data-v-30f1a192]:not(:disabled):active { background: var(--btly-action-destructive-pressed);
}
.btn.view-secondary[data-v-30f1a192]:not(:disabled):active {
    background: var(--btly-surface-secondary);
    color: var(--btly-action-secondary-pressed);
}
.btn.view-tertiary[data-v-30f1a192]:not(.icon-only):not(:disabled):active {
    background: var(--btly-surface-tertiary);
}
.btn.view-tertiary.icon-only.sz-sm:not(:disabled):active > .ico[data-v-30f1a192] {
    background: var(--btly-surface-tertiary);
}
.btn.view-tertiary[data-v-30f1a192]:not(:disabled):active {
    color: var(--btly-action-tertiary-pressed);
}
.btn.view-tertiary-accent[data-v-30f1a192]:not(.icon-only):not(:disabled):active {
    background: var(--btly-surface-brand);
}
.btn.view-tertiary-accent.icon-only.sz-sm:not(:disabled):active > .ico[data-v-30f1a192] {
    background: var(--btly-surface-brand);
}
.btn.view-tertiary-accent[data-v-30f1a192]:not(:disabled):active {
    color: var(--btly-action-primary-pressed);
}
.btn.view-primary[data-v-30f1a192]:disabled { background: var(--btly-action-primary-disabled); color: var(--btly-action-primary-disabled-text);
}
.btn.view-accent[data-v-30f1a192]:disabled { background: var(--btly-action-accent-disabled); color: var(--btly-action-accent-disabled-text);
}
.btn.view-destructive[data-v-30f1a192]:disabled { background: var(--btly-action-destructive-disabled); color: var(--btly-action-destructive-disabled-text);
}
/* Figma disable binds surface/secondary, NOT surface/canvas (node 11126:3782). The two coincide in
   admin mode (#fafafa) and diverge in client (canvas = #fff) — which is why this read as correct. */
.btn.view-secondary[data-v-30f1a192]:disabled {
    background: var(--btly-surface-secondary);
    color: var(--btly-action-secondary-disabled-text);
    border-color: var(--btly-border-default);
}
.btn.view-tertiary[data-v-30f1a192]:disabled { background: transparent; color: var(--btly-action-tertiary-disabled-text);
}
.btn.view-tertiary-accent[data-v-30f1a192]:disabled { background: transparent; color: var(--btly-action-primary-disabled-text);
}

.stack[data-v-7085750c] {
  display: flex;
  flex-direction: column;
  gap: 24px;
  padding: 16px;
}
.cell[data-v-7085750c] {
  display: flex;
  flex-direction: column;
  gap: 8px;
  align-items: flex-start;
}
.cap[data-v-7085750c] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
.row[data-v-7085750c] {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 16px;
}
/* Only view=rounded is styled here (plus sm's tap-target size). default renders `Button` and must
   not restate its internals. */
.back-rounded[data-v-15561180], .back-rounded[data-v-15561180] * {
    box-sizing: border-box;
}

/* 40x40 = the 24x24 chip + space/8 on all sides. The outer ring is transparent hit area, NOT fill —
   painting a 40x40 box would be wrong. Hugging keeps 40 token-derived instead of hardcoded. */
.back-rounded[data-v-15561180] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    margin: 0;
    padding: var(--btly-space-8);
    border: none;
    background: transparent;
    appearance: none;
    font: inherit;
    color: var(--btly-icon-inverse);
    cursor: pointer;
}
.back-rounded[data-v-15561180]:disabled {
    color: var(--btly-icon-disabled);
    cursor: not-allowed;
}
.back-rounded[data-v-15561180]:focus-visible {
    outline: 2px solid transparent;
    box-shadow: 0 0 0 2px var(--btly-border-focus-halo);
}

/* radius/16 on a 24x24 box clamps to a full circle — that is the design, do not "correct" it to
   radius/full. The blur is the Figma `glass` effect style (BACKGROUND_BLUR radius 8, which Figma's
   own export halves into CSS): un-tokenized by design, no token group covers effect geometry —
   see docs/OPEN-QUESTIONS.md. */
.chip[data-v-15561180] {
    display: flex;
    align-items: center;
    justify-content: center;
    width: var(--btly-space-24);
    height: var(--btly-space-24);
    border-radius: var(--btly-radius-16);
    overflow: hidden;
    background: var(--btly-surface-blackout-subtle);
    -webkit-backdrop-filter: blur(4px);
    backdrop-filter: blur(4px);
}

/* Hover fades, press is instant — the convention + why lives in ARCHITECTURE.md "States". */
@media (hover: hover) {
.chip[data-v-15561180] {
        transition:
            background-color 80ms ease-in-out,
            border-color 80ms ease-in-out,
            color 80ms ease-in-out;
}
.back-rounded:active .chip[data-v-15561180] {
        transition: none;
}
}
@media (prefers-reduced-motion: reduce) {
.chip[data-v-15561180] {
        transition: none;
}
}
@media (hover: hover) {
.back-rounded:not(:disabled):hover .chip[data-v-15561180] {
        background: var(--btly-surface-blackout);
}
}

/* Pressed is identical to hover by design (rounded draws no press feedback, unlike the default
   view). Kept as its own rule so a designer answer lands in one place. */
.back-rounded:not(:disabled):active .chip[data-v-15561180] {
    background: var(--btly-surface-blackout);
}
.back-rounded:disabled .chip[data-v-15561180] {
    background: var(--btly-surface-tertiary);
}

/* sm: Figma pads the 24x24 Button to a 32x32 tap target. The size sits on the button element itself
   so all 32x32 is clickable — a wrapper's padding would be dead area. The lone padding-right is the
   designed optical alignment (space/0 left, space/8 right seats the arrow against the parent's edge —
   the mirror of ButtonClose's flush-right sm). */
[data-v-15561180] .btn.back-sm.sz-xs {
    width: var(--btly-space-32);
    height: var(--btly-space-32);
    padding-right: var(--btly-space-8);
}
/* Only view=rounded is styled here (plus sm's tap-target size). default renders `Button` and must
   not restate its internals. */
.close-rounded[data-v-805a8986], .close-rounded[data-v-805a8986] * {
    box-sizing: border-box;
}

/* 40x40 = the 24x24 chip + space/8 on all sides. The outer ring is transparent hit area, NOT fill —
   painting a 40x40 box would be wrong. Hugging keeps 40 token-derived instead of hardcoded. */
.close-rounded[data-v-805a8986] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    margin: 0;
    padding: var(--btly-space-8);
    border: none;
    background: transparent;
    appearance: none;
    font: inherit;
    color: var(--btly-icon-inverse);
    cursor: pointer;
}
.close-rounded[data-v-805a8986]:disabled {
    color: var(--btly-icon-disabled);
    cursor: not-allowed;
}
.close-rounded[data-v-805a8986]:focus-visible {
    outline: 2px solid transparent;
    box-shadow: 0 0 0 2px var(--btly-border-focus-halo);
}

/* radius/16 on a 24x24 box clamps to a full circle — that is the design, do not "correct" it to
   radius/full. blur(4px) = Figma's `glass` effect (radius 8 halves into CSS): a SANCTIONED raw
   constant — designers keep effect geometry un-tokenized by design, maintainer approved the
   exception 2026-08-12 (docs/OPEN-QUESTIONS.md). Not precedent for tokenizable values. */
.chip[data-v-805a8986] {
    display: flex;
    align-items: center;
    justify-content: center;
    width: var(--btly-space-24);
    height: var(--btly-space-24);
    border-radius: var(--btly-radius-16);
    overflow: hidden;
    background: var(--btly-surface-blackout-subtle);
    -webkit-backdrop-filter: blur(4px);
    backdrop-filter: blur(4px);
}

/* Hover fades, press is instant — the convention + why lives in ARCHITECTURE.md "States". */
@media (hover: hover) {
.chip[data-v-805a8986] {
        transition:
            background-color 80ms ease-in-out,
            border-color 80ms ease-in-out,
            color 80ms ease-in-out;
}
.close-rounded:active .chip[data-v-805a8986] {
        transition: none;
}
}
@media (prefers-reduced-motion: reduce) {
.chip[data-v-805a8986] {
        transition: none;
}
}
@media (hover: hover) {
.close-rounded:not(:disabled):hover .chip[data-v-805a8986] {
        background: var(--btly-surface-blackout);
}
}

/* Pressed is identical to hover by design (rounded draws no press feedback, unlike the default
   view). Kept as its own rule so a designer answer lands in one place. */
.close-rounded:not(:disabled):active .chip[data-v-805a8986] {
    background: var(--btly-surface-blackout);
}
.close-rounded:disabled .chip[data-v-805a8986] {
    background: var(--btly-surface-tertiary);
}

/* sm: Figma pads the 24x24 Button to a 32x32 tap target. The size sits on the button element itself
   so all 32x32 is clickable — a wrapper's padding would be dead area. The lone padding-left is the
   designed optical alignment (space/8 left, space/0 right seats the X against the parent's edge). */
[data-v-805a8986] .btn.close-sm.sz-xs {
    width: var(--btly-space-32);
    height: var(--btly-space-32);
    padding-left: var(--btly-space-8);
}

.gallery[data-v-37b8e797] {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  gap: 24px;
}
.cell[data-v-37b8e797] {
  display: flex;
  flex-direction: column;
  align-items: flex-start; /* otherwise the button stretches to the caption width */
  gap: 8px;
}
.cap[data-v-37b8e797] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}

.col[data-v-452b546c] {
  display: flex;
  gap: 24px;
}
.cell[data-v-452b546c] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-452b546c] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}

.cell[data-v-a3b86901] {
  display: flex;
  flex-direction: column;
  gap: 8px;
  align-items: flex-start;
}
.cap[data-v-a3b86901] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
/* Figma's `deviceWidth` axis is the VIEWPORT, not a prop: `mobile` is the base and `desktop` is the
   DS `md` breakpoint (>= 740, docs/TOKENS.md) — the designer's own "for tablet — use desktop
   deviceWidth" puts the switch exactly there. Mobile-first, `min-width` only, and the CSS writes the
   breakpoint NAME, never the number. Same resolution as `ModalLayout`, for the same axis.

   No size is declared anywhere below: Figma's 48 and 64 are padding + the icon box, so the button
   HUGS exactly as the frame does. Centring it over a poster belongs to the host. */
.play[data-v-b268c945], .play[data-v-b268c945] * {
    box-sizing: border-box;
}

/* Full UA button reset — the DS ships no global one. The glyph colour lives HERE (both Icons are
   `color="inherit"`), so the two colours the design draws for it are one declaration each. */
.play[data-v-b268c945] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    margin: 0;
    padding: var(--btly-space-12);
    border: none;
    border-radius: var(--btly-radius-full);
    background: var(--btly-action-primary-default);
    appearance: none;
    font: inherit;
    color: var(--btly-icon-inverse);
    cursor: pointer;
}

/* Hover fades, press is instant — the convention + why lives in ARCHITECTURE.md "States". */
@media (hover: hover) {
.play[data-v-b268c945] {
        transition:
            background-color 80ms ease-in-out,
            color 80ms ease-in-out;
}
.play[data-v-b268c945]:active {
        transition: none;
}
}
@media (prefers-reduced-motion: reduce) {
.play[data-v-b268c945] {
        transition: none;
}
}
@media (hover: hover) {
.play[data-v-b268c945]:not(:disabled):hover {
        background: var(--btly-action-primary-hover);
}
}
.play[data-v-b268c945]:not(:disabled):active {
    background: var(--btly-action-primary-pressed);
}

/* The only state that changes more than the fill: the glyph goes from inverse to disabled. */
.play[data-v-b268c945]:disabled {
    background: var(--btly-action-primary-disabled);
    color: var(--btly-icon-disabled);
    cursor: not-allowed;
}
.play[data-v-b268c945]:focus-visible {
    outline: 2px solid transparent;
    box-shadow: 0 0 0 2px var(--btly-border-focus-halo);
}

/* One glyph per band (see the SFC). `.btly-icon` is in each selector only to outrank `Icon`'s own
   `display` rule, which at equal specificity the cascade would settle by stylesheet order. */
.glyph-desktop.btly-icon[data-v-b268c945] {
    display: none;
}
@media (min-width: 740px) {
.play[data-v-b268c945] {
        padding: var(--btly-space-16);
}
.glyph-mobile.btly-icon[data-v-b268c945] {
        display: none;
}
.glyph-desktop.btly-icon[data-v-b268c945] {
        display: inline-flex;
}
}

.gallery[data-v-a69c4cde] {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  gap: 24px;
}
.cell[data-v-a69c4cde] {
  display: flex;
  flex-direction: column;
  align-items: flex-start; /* otherwise the button stretches to the caption width */
  gap: 8px;
}
.cap[data-v-a69c4cde] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}

/* Stand-in for the video thumbnail the button always overlays — the DS ships no media component. */
.demo-poster[data-v-a69c4cde] {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 240px;
  height: 135px;
  border-radius: var(--btly-radius-16);
  background: var(--btly-surface-secondary);
}
.btn[data-v-0f578b5f], .btn[data-v-0f578b5f] * {
    box-sizing: border-box;
}
.btn[data-v-0f578b5f] {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    margin: 0;
    gap: var(--btly-space-12);
    height: 48px;
    padding: 0 var(--btly-space-24);
    border: var(--btly-border-width-1) solid var(--btly-border-default);
    appearance: none;
    font: inherit;
    border-radius: var(--btly-radius-12);
    background: var(--btly-surface-card);
    color: var(--btly-action-secondary-default);
    cursor: pointer;
}

/* disable: border + label shift to action/secondary/disabled(-text); bg stays surface/card. */
.btn[data-v-0f578b5f]:disabled {
    border-color: var(--btly-action-secondary-disabled);
    color: var(--btly-action-secondary-disabled-text);
    cursor: not-allowed;
}

/* Figma's disable variant ships the logo dimmed to 40% — reproduced with opacity. */
.btn:disabled .logo[data-v-0f578b5f] {
    opacity: 0.4;
}

/* Hover fades, press is instant — the convention + why lives in ARCHITECTURE.md "States". */
@media (hover: hover) {
.btn[data-v-0f578b5f] {
        transition:
            background-color 80ms ease-in-out,
            border-color 80ms ease-in-out,
            color 80ms ease-in-out;
}
.btn[data-v-0f578b5f]:not(:disabled):active {
        transition: none;
}
}
@media (prefers-reduced-motion: reduce) {
.btn[data-v-0f578b5f] {
        transition: none;
}
}

/* hover-capable pointers only — on touch, :hover would stick after a tap */
@media (hover: hover) {
.btn[data-v-0f578b5f]:not(:disabled):hover {
        background: var(--btly-surface-brand);
        border-color: var(--btly-border-brand);
        color: var(--btly-action-primary-hover);
}
}
.btn[data-v-0f578b5f]:not(:disabled):active {
    background: var(--btly-surface-brand);
    border-color: var(--btly-border-brand);
    color: var(--btly-action-primary-pressed);
}

/* No Focus state in Figma yet — system focus-halo ring meanwhile.
 * Transparent outline (not none) so it still renders in forced-colors mode. */
.btn[data-v-0f578b5f]:focus-visible {
    outline: 2px solid transparent;
    border-color: var(--btly-border-brand);
    box-shadow: 0 0 0 2px var(--btly-border-focus-halo);
}
.logo[data-v-0f578b5f] {
    display: inline-flex;
    flex-shrink: 0;
    width: var(--btly-space-24);
    height: var(--btly-space-24);
}
.logo[data-v-0f578b5f] svg {
    display: block;
    width: 100%;
    height: 100%;
}

/* Playground: the button at its natural width, unframed (per the gallery-frame convention). */
.pg[data-v-54354416] {
  width: 400px;
}
.progress[data-v-a517b947], .progress[data-v-a517b947] * {
    box-sizing: border-box;
}
.progress[data-v-a517b947] {
    position: relative;
    width: 100%;
    height: 4px;
    border-radius: var(--btly-radius-4);
    overflow: hidden;
    background: var(--btly-surface-tertiary);
}
.fill[data-v-a517b947] {
    height: 100%;
    border-radius: var(--btly-radius-4);
    background: var(--btly-brand-ultraviolet-400);
    transition: width 190ms ease-in-out;
}

/* The caller drives `value` every frame, so the updates already ARE the animation. Easing on top of
   them restarts a 190ms curve each frame and the fill trails the number by most of a second — see
   `continuous` in types.ts. Zeroing the transition also makes the mount catch-up bail on its own,
   because it reads its duration off this rule. */
.fill.continuous[data-v-a517b947] {
    transition: none;
}
@media (prefers-reduced-motion: reduce) {
.fill[data-v-a517b947] {
        transition: none;
}
}
.cpb[data-v-af1445e8], .cpb[data-v-af1445e8] * {
    box-sizing: border-box;
}
.cpb[data-v-af1445e8] {
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-8);
    width: 100%;
}

/* Completed has no bar — a 1.5px bottom hairline replaces it; the row stays 32px like the others. */
.cpb.completed[data-v-af1445e8] {
    min-height: var(--btly-space-32);
    border-bottom: var(--btly-border-width-1-5) solid var(--btly-border-default);
}
.title[data-v-af1445e8] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--btly-space-8);
}
.label[data-v-af1445e8] {
    color: var(--btly-text-primary);
}
.value[data-v-af1445e8] {
    flex-shrink: 0;
    color: var(--btly-text-tertiary);
}

/* Icon uses color="inherit" and picks up this success color. */
.check[data-v-af1445e8] {
    display: inline-flex;
    flex-shrink: 0;
    color: var(--btly-status-success-accent);
}

.cell[data-v-d8a03ecf] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-d8a03ecf] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}

/* Playground: give the (unframed) full-width bar a demo width. */
.pg[data-v-d8a03ecf] {
  width: 372px;
}
/* min-width 343px is a raw component constant — unbound in Figma, off the space scale. */
.card-booking-details[data-v-2ff845e2], .card-booking-details[data-v-2ff845e2] * {
    box-sizing: border-box;
}
.card-booking-details[data-v-2ff845e2] {
    display: flex;
    flex-direction: column;
    min-width: 343px;
    padding: var(--btly-space-4);
    border-radius: var(--btly-radius-16);
}
.card-booking-details.math[data-v-2ff845e2] { background: var(--btly-discipline-math-surface-strong);
}
/* Figma prop value "reading" ↔ token axis "ela" (designer flag #2) — followed literally. */
.card-booking-details.reading[data-v-2ff845e2] { background: var(--btly-discipline-ela-surface-strong);
}

/* Rendered as <button> when interactive — carry the full UA button reset either way. */
.header[data-v-2ff845e2] {
    display: flex;
    align-items: center;
    gap: var(--btly-space-4);
    width: 100%;
    margin: 0;
    padding: var(--btly-space-12);
    border: 0;
    background: transparent;
    appearance: none;
    font: inherit;
    color: inherit;
    text-align: left;
}
button.header[data-v-2ff845e2] { cursor: pointer;
}
.head-icon[data-v-2ff845e2] {
    display: inline-flex;
    flex-shrink: 0;
}
.card-booking-details.math .head-icon[data-v-2ff845e2] { color: var(--btly-discipline-math-accent);
}
.card-booking-details.reading .head-icon[data-v-2ff845e2] { color: var(--btly-discipline-ela-accent);
}
.title[data-v-2ff845e2] {
    flex: 1 1 auto;
    min-width: 0;
    color: var(--btly-text-primary);
}
.trail-icon[data-v-2ff845e2] {
    display: inline-flex;
    flex-shrink: 0;
}
/* plus (collapsed) uses the action token; chevron uses icon-default (Figma binds a stale raw
 * $slate-500 here — outside the token system; designer flag #1). */
.card-booking-details.collapsed .trail-icon[data-v-2ff845e2] { color: var(--btly-action-primary-default);
}
.card-booking-details:not(.collapsed) .trail-icon[data-v-2ff845e2] { color: var(--btly-icon-default);
}
.content[data-v-2ff845e2] {
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-8);
    width: 100%;
    padding: var(--btly-space-12);
    border-radius: var(--btly-radius-12);
    background: var(--btly-surface-card);
}
.link[data-v-02a27411], .link[data-v-02a27411] * {
    box-sizing: border-box;
}
.link[data-v-02a27411] {
    text-decoration: underline;
    text-decoration-thickness: from-font;
    text-underline-position: from-font;
    cursor: pointer;
}
.link[data-v-02a27411]:focus-visible {
    outline: 2px solid var(--btly-border-focus-halo);
    outline-offset: 2px;
    border-radius: var(--btly-radius-2);
}
.link.p-default[data-v-02a27411] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
}
.link.p-default.sz-sm[data-v-02a27411] { padding: var(--btly-space-12);
}
.link.p-default.sz-lg[data-v-02a27411] { padding: var(--btly-space-12) var(--btly-space-16);
}
.link.c-secondary[data-v-02a27411] { color: var(--btly-action-tertiary-default);
}
.link.c-primary[data-v-02a27411] { color: var(--btly-action-primary-default);
}
.link.c-inverse[data-v-02a27411] { color: var(--btly-action-inverse-default);
}

/* Hover fades, press is instant — the convention + why lives in ARCHITECTURE.md "States". */
@media (hover: hover) {
.link[data-v-02a27411] {
        transition:
            background-color 80ms ease-in-out,
            border-color 80ms ease-in-out,
            color 80ms ease-in-out;
}
.link[data-v-02a27411]:active {
        transition: none;
}
}
@media (prefers-reduced-motion: reduce) {
.link[data-v-02a27411] {
        transition: none;
}
}
@media (hover: hover) {
.link.c-secondary[data-v-02a27411]:not(.is-disabled):hover { color: var(--btly-action-tertiary-hover);
}
.link.c-primary[data-v-02a27411]:not(.is-disabled):hover { color: var(--btly-action-primary-hover);
}
.link.c-inverse[data-v-02a27411]:not(.is-disabled):hover { color: var(--btly-action-inverse-hover);
}
}

/* Pressed rules come after the hover media query so they win while pressing during hover. */
.link.c-secondary[data-v-02a27411]:not(.is-disabled):active { color: var(--btly-action-tertiary-pressed);
}
.link.c-primary[data-v-02a27411]:not(.is-disabled):active { color: var(--btly-action-primary-pressed);
}
.link.c-inverse[data-v-02a27411]:not(.is-disabled):active { color: var(--btly-action-inverse-pressed);
}

/* Shared for the light colors; last so it wins over the color rules. */
.link.is-disabled[data-v-02a27411] {
    color: var(--btly-text-disabled);
    pointer-events: none;
    cursor: default;
}
.link.c-inverse.is-disabled[data-v-02a27411] { color: var(--btly-action-inverse-disabled);
}

.cell[data-v-f53ebde5] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-f53ebde5] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
.pg[data-v-f53ebde5] {
  display: flex;
  flex-direction: column;
  gap: 16px;
  width: 343px;
}
.card-review-avatar[data-v-4922d5ee], .card-review-avatar[data-v-4922d5ee] * {
    box-sizing: border-box;
}
.card-review-avatar[data-v-4922d5ee] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 20px;
    height: 20px;
    overflow: hidden;
    border-radius: var(--btly-radius-full);
}
.initial[data-v-4922d5ee] {
    color: var(--btly-text-primary);
}
.photo[data-v-4922d5ee] {
    width: 100%;
    height: 100%;
    object-fit: cover;
}
/* The common slot usage is a bare <img> — same fill/cover treatment. */
.card-review-avatar img[data-v-4922d5ee-s] {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/* Background tint per hue (brand palette — decorative surface). */
.card-review-avatar.is-pink[data-v-4922d5ee] { background: var(--btly-brand-pink-200);
}
.card-review-avatar.is-sky[data-v-4922d5ee] { background: var(--btly-brand-sky-200);
}
.card-review-avatar.is-green[data-v-4922d5ee] { background: var(--btly-brand-green-200);
}
.card-review-avatar.is-sunshine[data-v-4922d5ee] { background: var(--btly-brand-sunshine-200);
}
.card-review-avatar.is-orange[data-v-4922d5ee] { background: var(--btly-brand-orange-200);
}
.card-review-avatar.is-ultraviolet[data-v-4922d5ee] { background: var(--btly-brand-ultraviolet-200);
}
/* 16×16 brand-green square with a centered white IconStar. */
.tp-star[data-v-e0eab306], .tp-star[data-v-e0eab306] * {
    box-sizing: border-box;
}
.tp-star[data-v-e0eab306] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: var(--btly-space-16);
    height: var(--btly-space-16);
    background: var(--btly-brand-green-500-primary);
}

/* Half: left 50% green (filled), right 50% gray (empty). The star stays fully white on top.
 * Brand tokens — no appropriate semantic exists for this decorative fill (see spec §5). */
.tp-star.is-half[data-v-e0eab306] {
    background: linear-gradient(
        to right,
        var(--btly-brand-green-500-primary) 50%,
        var(--btly-brand-gray-200) 50%
    );
}
.tp-star.is-sharp[data-v-e0eab306] {
    border-radius: var(--btly-radius-0);
}
.tp-star.is-rounded[data-v-e0eab306] {
    border-radius: var(--btly-radius-4);
}
/* TrustpilotRating — a hugging row of five TrustpilotStars. Tokens only. */
.tp-rating[data-v-5bac3fa1], .tp-rating[data-v-5bac3fa1] * {
    box-sizing: border-box;
}
.tp-rating[data-v-5bac3fa1] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--btly-space-2);
}
/* CardReview — a fixed-size testimonial card (311x190 are raw Figma constants). Tokens only. */
.card-review[data-v-0d769d01], .card-review[data-v-0d769d01] * {
    box-sizing: border-box;
}
.card-review[data-v-0d769d01] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    width: 311px;
    height: 190px;
    background: var(--btly-surface-card);
    border: var(--btly-border-width-1) solid var(--btly-border-default);
    border-radius: var(--btly-radius-16);
    overflow: hidden;
}
.header[data-v-0d769d01] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--btly-space-8);
    width: 100%;
    padding: var(--btly-space-12) var(--btly-space-16) var(--btly-space-8);
}
.user[data-v-0d769d01] {
    display: flex;
    align-items: center;
    gap: var(--btly-space-4);
    min-width: 0;
}
.name-loc[data-v-0d769d01] {
    display: flex;
    align-items: center;
    gap: var(--btly-space-8);
    min-width: 0;
}
.name[data-v-0d769d01] {
    overflow: hidden;
    color: var(--btly-text-secondary);
    text-overflow: ellipsis;
    white-space: nowrap;
}
.country[data-v-0d769d01] {
    display: flex;
    flex-shrink: 0;
    align-items: center;
    gap: var(--btly-space-2);
    color: var(--btly-text-tertiary);
    white-space: nowrap;
}
.body[data-v-0d769d01] {
    display: flex;
    flex: 1 1 0;
    min-height: 0;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--btly-space-4);
    width: 100%;
    padding: var(--btly-space-8) var(--btly-space-16) var(--btly-space-16);
}
/* Both are <p>s carrying a UA margin-block:1em — reset it; title→description spacing is the .body gap only. */
.title[data-v-0d769d01] {
    display: -webkit-box;
    overflow: hidden;
    margin: 0;
    color: var(--btly-text-primary);
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
}
.description[data-v-0d769d01] {
    flex: 1 1 0;
    min-height: 0;
    overflow: hidden;
    margin: 0;
    color: var(--btly-text-tertiary);
}

.rows[data-v-648c6c9e] {
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
}

.row[data-v-bf0f290d] {
  display: flex;
  align-items: center;
  gap: 12px;
}
.cell[data-v-bf0f290d] {
  display: flex;
  flex-direction: column;
  gap: 8px;
  align-items: flex-start;
}
.cap[data-v-bf0f290d] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
/* Box: 24px (md) / 20px (sm); 16px glyph; 24px hover/focus halo — Figma raw values.
 * `size` changes only the box/tap area, not the glyph (Figma glyph is 16px for both). */
.btly-checkbox[data-v-ed135165], .btly-checkbox[data-v-ed135165] * {
  box-sizing: border-box;
}
.btly-checkbox[data-v-ed135165] {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.btly-checkbox.sz-md[data-v-ed135165] {
  width: 24px;
  height: 24px;
  min-width: 24px;
  min-height: 24px;
}
.btly-checkbox.sz-sm[data-v-ed135165] {
  width: 20px;
  height: 20px;
}
.native[data-v-ed135165] {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 24px;
  height: 24px;
  transform: translate(-50%, -50%);
  margin: 0;
  opacity: 0;
  cursor: pointer;
}
.native[data-v-ed135165]:disabled {
  cursor: not-allowed;
}
.box[data-v-ed135165] {
  position: relative; /* paints above the hover halo without needing z-index */
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
  color: var(--btly-icon-muted);
  pointer-events: none;
}
.box[data-v-ed135165] svg {
  display: block;
  height: 1em;
  width: auto;
}
.btly-checkbox.is-checked .box[data-v-ed135165] {
  color: var(--btly-action-primary-default);
}
.btly-checkbox[data-v-ed135165]::before {
  content: '';
  position: absolute;
  left: 50%;
  top: 50%;
  width: 24px;
  height: 24px;
  transform: translate(-50%, -50%);
  border-radius: 50%;
  background: var(--btly-surface-brand);
  opacity: 0;
}
.btly-checkbox[data-v-ed135165]:not(.is-disabled):has(.native:focus-visible)::before {
  opacity: 1;
}
@media (hover: hover) {
.btly-checkbox[data-v-ed135165]:not(.is-disabled):hover::before {
    opacity: 1;
}
.btly-checkbox:not(.is-disabled).is-checked:hover .box[data-v-ed135165] {
    color: var(--btly-action-primary-hover);
}
}
.btly-checkbox.is-disabled .box[data-v-ed135165] {
  color: var(--btly-action-tertiary-disabled);
}
.btly-checkbox.is-disabled.is-checked .box[data-v-ed135165] {
  color: var(--btly-action-secondary-disabled);
}

/* Gallery = static, non-interactive samples (no toggling). */
.grid[data-v-a392c9ab] {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
  pointer-events: none;
}
.cell[data-v-a392c9ab] {
  display: flex;
  flex-direction: column;
  gap: 8px;
  align-items: flex-start;
}
.row[data-v-a392c9ab] {
  display: flex;
  align-items: center;
  gap: 12px;
}
.cap[data-v-a392c9ab] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
.counter[data-v-2b70aaf0], .counter[data-v-2b70aaf0] * {
    box-sizing: border-box;
}
.counter[data-v-2b70aaf0] {
    white-space: nowrap;
}
.current[data-v-2b70aaf0] {
    color: var(--btly-text-brand);
}
.rest[data-v-2b70aaf0] {
    color: var(--btly-text-tertiary);
}

.cell[data-v-4bbe712e] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-4bbe712e] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}

.cell[data-v-fc4172fc] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-fc4172fc] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
.pg[data-v-fc4172fc] {
  display: flex;
  flex-direction: column;
  gap: 16px;
  width: 280px;
}

.cell[data-v-5e9c77af] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-5e9c77af] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
.pg[data-v-5e9c77af] {
  width: 272px;
}
.demo-avatar[data-v-5e9c77af] {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  background: var(--btly-brand-pink-500-primary);
  color: var(--btly-text-inverse);
}
.input[data-v-41dabd09], .input[data-v-41dabd09] * {
    box-sizing: border-box;
}
.input[data-v-41dabd09] {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-2);
    width: 100%;
}

/* The suggestion panel overlays what follows instead of pushing it: the list grows and shrinks on
   every keystroke, and a form that reflows under the cursor is unusable. Anchored to the control's
   full height so it clears the validation message, like the reference does. z-index matches Select's
   own panel — both are field popovers and must not fight each other. */
.suggestions[data-v-41dabd09] {
    position: absolute;
    top: calc(100% + var(--btly-space-4));
    right: 0;
    left: 0;
    z-index: 10;
}
.suggestion-list[data-v-41dabd09] {
    margin: 0;
    padding: 0;
    list-style: none;
}
.label-row[data-v-41dabd09] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--btly-space-8);
}
.label-row label[data-v-41dabd09] { color: var(--btly-text-secondary);
}
.req[data-v-41dabd09] { margin-left: var(--btly-space-2); color: var(--btly-text-brand);
}
.optional[data-v-41dabd09] { color: var(--btly-text-tertiary);
}
.field[data-v-41dabd09] {
    display: flex;
    align-items: center;
    /* Asymmetric padding (py space-10, px space-8) confirmed against Figma — not a mistake. */
    gap: var(--btly-space-4);
    padding: var(--btly-space-10) var(--btly-space-8);
    border: var(--btly-border-width-1) solid var(--btly-border-strong);
    border-radius: var(--btly-radius-8);
    background: var(--btly-surface-canvas);
    /* Figma "1dp shadow" effect style — effects are not in the token export (designer flagged). */
    box-shadow: 0 1px 2px 0 rgba(15, 23, 43, 0.05);
}
@media (hover: hover) {
.field[data-v-41dabd09]:hover { border-color: var(--btly-border-brand);
}
}
.field[data-v-41dabd09]:focus-within {
    border-color: var(--btly-border-brand);
    box-shadow: 0 0 0 2px var(--btly-border-focus-halo);
}
.field input[data-v-41dabd09] {
    flex: 1 1 auto;
    min-width: 0;
    margin: 0;
    padding: 0;
    border: 0;
    outline: 0;
    background: transparent;
    color: var(--btly-text-primary);
}
.field input[data-v-41dabd09]::placeholder { color: var(--btly-text-placeholder);
}
.lead[data-v-41dabd09],
.trail[data-v-41dabd09] {
    display: inline-flex;
    align-items: center;
    flex-shrink: 0;
    color: var(--btly-icon-muted);
}
.action[data-v-41dabd09] { flex-shrink: 0;
}

/* Status rules override the hover/focus border colour above. */
.input.error .field[data-v-41dabd09] { border-color: var(--btly-status-error-accent);
}
.input.success .field[data-v-41dabd09] { border-color: var(--btly-status-success-accent);
}

/* No shadow in these states — neither the 1dp resting one nor the focus halo (beats `:focus-within`). */
.input.error .field[data-v-41dabd09],
.input.success .field[data-v-41dabd09] {
    box-shadow: none;
}
.input.disabled .field[data-v-41dabd09] {
    background: var(--btly-surface-secondary);
    border-color: var(--btly-border-default);
    cursor: not-allowed;
}
/* Figma's `disabled (populated)` state — the placeholder keeps its own lighter rule. */
.input.disabled .field input[data-v-41dabd09] { color: var(--btly-text-tertiary); cursor: not-allowed;
}
.input.disabled .lead[data-v-41dabd09],
.input.disabled .trail[data-v-41dabd09] { color: var(--btly-icon-disabled);
}
.input.disabled .label-row label[data-v-41dabd09] { color: var(--btly-text-tertiary);
}
.input.disabled .optional[data-v-41dabd09] { color: var(--btly-text-disabled);
}
/* Safety net: even if the consumer ignores the #action slot's `disabled` prop, clicks are blocked. */
.input.disabled .action[data-v-41dabd09] { pointer-events: none;
}

/* <p> carries a UA margin-block:1em — reset it; the field→description spacing is the root gap only. */
.description[data-v-41dabd09] { margin: 0; color: var(--btly-text-tertiary);
}
.description.is-error[data-v-41dabd09] { color: var(--btly-status-error-text);
}
/* FormAuthSocial — social + email sign-up section. Nested layout (Figma node 14547-4892):
   alternative-login{buttons,divider} + input-caption{Input,caption}. Tokens only. */
.form-auth-social[data-v-6e26b253], .form-auth-social[data-v-6e26b253] * {
    box-sizing: border-box;
}
.form-auth-social[data-v-6e26b253] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--btly-space-16);
    width: 100%;
}
.alternative-login[data-v-6e26b253] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--btly-space-16);
    width: 100%;
}
.buttons[data-v-6e26b253] {
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-12);
    width: 100%;
}
.divider[data-v-6e26b253] {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--btly-space-8);
    width: 100%;
}
.line[data-v-6e26b253] {
    flex: 1 0 0;
    min-width: 1px;
    height: var(--btly-border-width-1);
    background: var(--btly-border-default);
}
.or[data-v-6e26b253] {
    color: var(--btly-text-tertiary);
}
.input-caption[data-v-6e26b253] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--btly-space-12);
    width: 100%;
}
/* <p> carries a UA margin-block:1em — reset it; Input→caption spacing is the .input-caption gap only. */
.caption[data-v-6e26b253] {
    display: flex;
    align-items: flex-start;
    gap: var(--btly-space-8);
    margin: 0;
    color: var(--btly-text-tertiary);
    width: 100%;
}
.lock[data-v-6e26b253] {
    flex-shrink: 0;
}

.pg[data-v-3c0ff9bf] {
  width: 343px;
}
.evt[data-v-3c0ff9bf] {
  margin-top: 16px;
  color: #737373;
  font-size: 12px;
}
/* FormBookingList — a transparent booking block: a BookingDetails above an optional bottom band.
   Fluid width; 475px is a raw Figma constant (max width, unbound) — see README "Notes". */
.form-booking-list[data-v-92ac81b3], .form-booking-list[data-v-92ac81b3] * {
    box-sizing: border-box;
}
.form-booking-list[data-v-92ac81b3] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--btly-space-8);
    width: 100%;
    max-width: 475px;
}

/* stretch, not Figma's flex-start: its band child is width:100% (the Link fills and centres its own
   text) and slotted content cannot declare that for itself. */
.bottom[data-v-92ac81b3] {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: var(--btly-space-8);
    width: 100%;
}
/* FormBooking — a transparent booking-step column. Fluid width: Figma's raw min-width:343px is the
   canvas frame and the nested CardBookingDetails already carries that floor — see README "Notes". */
.form-booking[data-v-e31b9caf], .form-booking[data-v-e31b9caf] * {
    box-sizing: border-box;
}

/* No overflow:hidden (Figma has it): nothing overflows, and it would clip the DS focus ring of the
   fields and of the slotted CTAs. */
.form-booking[data-v-e31b9caf] {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: var(--btly-space-12);
    width: 100%;
}

/* stretch, not Figma's centre: the slotted CTAs are full-width children there, and slotted content
   cannot declare that for itself (Button caps its own width at 480px). */
.actions[data-v-e31b9caf] {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: var(--btly-space-8);
    width: 100%;
}
/* FormBookingDetails — a transparent booking form: a BookingDetails above two stacked CTAs.
   Fluid width; 475px is a raw Figma constant (max width). Tokens only. */
.form-booking-details[data-v-3a942281], .form-booking-details[data-v-3a942281] * {
    box-sizing: border-box;
}
.form-booking-details[data-v-3a942281] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--btly-space-16);
    width: 100%;
    max-width: 475px;
}
.actions[data-v-3a942281] {
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-8);
    width: 100%;
}

/* The composed Buttons fill the row. Button's .btn-wrap is `display: contents`, so its inner
   `.btn` is a direct flex child of .actions — width:100% stretches it full-width. */
.actions[data-v-3a942281] .btn {
    width: 100%;
}

.pg[data-v-334e3fc0] {
  width: 475px;
}
.evt[data-v-334e3fc0] {
  margin-top: 16px;
  color: #737373;
  font-size: 12px;
}

.cell[data-v-a0e36d7f] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-a0e36d7f] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
.pg[data-v-a0e36d7f] {
  width: 311px;
}
.hint[data-v-c7ab374b], .hint[data-v-c7ab374b] * {
    box-sizing: border-box;
}

/* Width is the container's: Figma's 292 is a canvas convenience the designer already declared, and the
 * min 280 / max 343 beside it are unbound raw px still awaiting a binding — see docs/OPEN-QUESTIONS.md. */
.hint[data-v-c7ab374b] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    justify-content: center;
    width: 100%;
    gap: var(--btly-space-2);
    padding: var(--btly-space-12);
    border-radius: var(--btly-radius-12);
    overflow: hidden;
}

/* `semantic` varies the background and nothing else: the status border and status text roles exist in
   the tokens but are deliberately unused, so no outline, and both rows stay text-primary on every wash. */
.hint.semantic-success[data-v-c7ab374b] {
    background: var(--btly-status-success-bg-strong);
}
.hint.semantic-warning[data-v-c7ab374b] {
    background: var(--btly-status-warning-bg-strong);
}
.hint.semantic-error[data-v-c7ab374b] {
    background: var(--btly-status-error-bg-strong);
}
.hint.semantic-info[data-v-c7ab374b] {
    background: var(--btly-status-info-bg-strong);
}
.hint.semantic-neutral[data-v-c7ab374b] {
    background: var(--btly-status-neutral-bg-strong);
}
.title[data-v-c7ab374b],
.description[data-v-c7ab374b],
.bottom[data-v-c7ab374b] {
    width: 100%;
    flex-shrink: 0;
}

/* Slot content owns its own colour, so the text colour sits on the rows that bind it, not on the root. */
.title[data-v-c7ab374b],
.description[data-v-c7ab374b] {
    color: var(--btly-text-primary);
    overflow-wrap: break-word;
}

.gallery[data-v-3e54eb25] {
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.cell[data-v-3e54eb25] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-3e54eb25] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}

/* Demo stand-in: the DS has no inline text link yet, and the slot needs *some* content to show. */
.demo-link[data-v-3e54eb25] {
  color: var(--btly-text-brand);
  text-decoration: underline;
}

.matrix[data-v-4018ff29] {
  display: grid;
  grid-template-columns: repeat(5, 56px);
  /* 56, not 48: the xl box IS 48, so a 48 row would leave it edge-to-edge while every other size
     keeps margin. */
  grid-auto-rows: 56px;
  align-items: center;
  justify-items: center;
  gap: 12px;
}
.axis[data-v-4018ff29] {
  display: grid;
  grid-template-columns: repeat(4, 56px);
  gap: 12px;
  justify-items: center;
}
.lbl[data-v-4018ff29] {
  font-size: 11px;
  color: var(--btly-text-tertiary);
}
.extra[data-v-4018ff29] {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
  margin-top: 24px;
}
.cell[data-v-4018ff29] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.row[data-v-4018ff29] {
  display: flex;
  align-items: center;
  gap: 16px;
}
.cap[data-v-4018ff29] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}

.cell[data-v-dd8309a0] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-dd8309a0] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}

/* `padding-bottom` is Playground-only room for the suggestion panel: it is an absolute overlay, and
   in a bare frame it would otherwise hang over the edge. A real screen has the form underneath. */
.pg[data-v-dd8309a0] {
  display: flex;
  flex-direction: column;
  gap: 24px;
  width: 360px;
  padding-bottom: 260px;
}
.input-otp[data-v-786d8f87], .input-otp[data-v-786d8f87] * {
    box-sizing: border-box;
}
.input-otp[data-v-786d8f87] {
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-2);
    width: 100%;
}

/* The box styles live on the <input> itself — no .field wrapper (no icons/slots). The scoped
 * element selector outweighs the global .btly-text-heading-s class, so the letter-spacing
 * below wins over the text style's 0 (Figma: 4px gap between the digit glyphs). */
.input-otp input[data-v-786d8f87] {
    width: 100%;
    margin: 0;
    padding: var(--btly-space-12);
    border: var(--btly-border-width-1) solid var(--btly-border-strong);
    border-radius: var(--btly-radius-12);
    background: var(--btly-surface-canvas);
    /* Figma "1dp shadow" effect style — effects are not in the token export (designer flagged). */
    box-shadow: 0 1px 2px 0 rgba(15, 23, 43, 0.05);
    color: var(--btly-text-primary);
    text-align: center;
    letter-spacing: var(--btly-space-4);
    outline: 0;
}
.input-otp input[data-v-786d8f87]::placeholder { color: var(--btly-text-placeholder);
}
@media (hover: hover) {
.input-otp:not(.error):not(.success) input[data-v-786d8f87]:hover { border-color: var(--btly-border-brand);
}
}

/* Scoped to "no status": a red/green field must keep its own colour and show no halo. Guarding the
   rule beats overriding it — the unguarded form tied `.input-otp.error input` on specificity and
   only lost by sitting earlier in the file. */
.input-otp:not(.error):not(.success) input[data-v-786d8f87]:focus {
    border-color: var(--btly-border-brand);
    box-shadow: 0 0 0 2px var(--btly-border-focus-halo);
}
.input-otp.error input[data-v-786d8f87] { border-color: var(--btly-status-error-accent);
}
.input-otp.success input[data-v-786d8f87] { border-color: var(--btly-status-success-accent);
}

/* No shadow in these states — neither the 1dp resting one nor the focus halo. */
.input-otp.error input[data-v-786d8f87],
.input-otp.success input[data-v-786d8f87] {
    box-shadow: none;
}
.input-otp.disabled input[data-v-786d8f87] {
    background: var(--btly-surface-secondary);
    border-color: var(--btly-border-default);
    color: var(--btly-text-disabled);
    cursor: not-allowed;
}

/* <p> carries a UA margin-block:1em — reset it; the field→description spacing is the root gap only. */
.description[data-v-786d8f87] { margin: 0; color: var(--btly-text-tertiary);
}
.description.is-error[data-v-786d8f87] { color: var(--btly-status-error-text);
}

.cell[data-v-9a4af4d5] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-9a4af4d5] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
.pg[data-v-9a4af4d5] {
  display: flex;
  flex-direction: column;
  gap: 16px;
  width: 260px;
}
/* InputPhone — geometry from the InputPhone instance in StepRegistration screenType=StepPhoneNumber.
   Field chrome mirrors Input/Select; the internal split ([flag ⌄] | +1 | number) is this component's
   own, with the asymmetric paddings Figma draws. Tokens only. */
.input-phone[data-v-5691ff8e], .input-phone[data-v-5691ff8e] * {
    box-sizing: border-box;
}
.input-phone[data-v-5691ff8e] {
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-2);
    width: 100%;
}
.label-row[data-v-5691ff8e] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--btly-space-8);
}
.label-row label[data-v-5691ff8e] { color: var(--btly-text-secondary);
}
.req[data-v-5691ff8e] { margin-left: var(--btly-space-2); color: var(--btly-text-brand);
}
.optional[data-v-5691ff8e] { color: var(--btly-text-tertiary);
}

/* Figma clips this box; we do not — the country panel is a child and clipping would hide it,
   and a 2px focus halo would be cut at the edge. Nothing else here overflows. */
.field[data-v-5691ff8e] {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: space-between;
    width: 100%;
    border: var(--btly-border-width-1) solid var(--btly-border-strong);
    border-radius: var(--btly-radius-10);
    background: var(--btly-surface-canvas);
    box-shadow: 0 1px 2px 0 rgba(15, 23, 43, 0.05);
}
@media (hover: hover) {
.field[data-v-5691ff8e]:hover { border-color: var(--btly-border-brand);
}
}
.field[data-v-5691ff8e]:focus-within {
    border-color: var(--btly-border-brand);
    box-shadow: 0 0 0 2px var(--btly-border-focus-halo);
}

/* Country trigger: pl space-12 / pr space-4, gap space-4 (Figma `prependIcon`). */
.country[data-v-5691ff8e] {
    display: inline-flex;
    align-items: center;
    flex-shrink: 0;
    gap: var(--btly-space-4);
    margin: 0;
    padding: var(--btly-space-10) var(--btly-space-4) var(--btly-space-10) var(--btly-space-12);
    border: 0;
    background: transparent;
    appearance: none;
    font: inherit;
    color: var(--btly-icon-muted);
    cursor: pointer;
}
.country[data-v-5691ff8e]:disabled { cursor: default; color: var(--btly-icon-disabled);
}

/* The focus ring belongs to the whole field; the trigger only needs to not draw a second one. */
.country[data-v-5691ff8e]:focus-visible { outline: 0;
}

/* 24x24 emoji box (Figma `flags` instance). Font-size drives the glyph; the box keeps the
   row height stable when a platform falls back to the two ISO letters. */
.flag[data-v-5691ff8e] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: var(--btly-space-24);
    height: var(--btly-space-24);
    font-size: 18px;
    line-height: 1;
}
.chevron[data-v-5691ff8e] { flex-shrink: 0;
}

/* Number area: pl space-4 / pr space-8, gap space-8 (Figma `Frame 1813`). */
.number[data-v-5691ff8e] {
    display: flex;
    align-items: center;
    align-self: stretch;
    flex: 1 0 0;
    min-width: 0;
    gap: var(--btly-space-8);
    padding: var(--btly-space-10) var(--btly-space-8) var(--btly-space-10) var(--btly-space-4);
}
.dial[data-v-5691ff8e] {
    flex-shrink: 0;
    color: var(--btly-text-tertiary);
}
.number input[data-v-5691ff8e] {
    flex: 1 1 auto;
    min-width: 0;
    margin: 0;
    padding: 0;
    border: 0;
    outline: 0;
    background: transparent;
    color: var(--btly-text-primary);
}
.number input[data-v-5691ff8e]::placeholder { color: var(--btly-text-placeholder);
}

/* Figma binds `status/<x>/accent` here, not `status/<x>/border` — the latter is the pale -200 tint. */
.input-phone.error .field[data-v-5691ff8e] { border-color: var(--btly-status-error-accent);
}
.input-phone.success .field[data-v-5691ff8e] { border-color: var(--btly-status-success-accent);
}

/* No shadow at all in these states — neither the 1dp resting shadow nor the focus halo. Beats
   `.field:focus-within` on specificity (0,3,0 vs 0,2,0), so focusing an errored field adds nothing. */
.input-phone.error .field[data-v-5691ff8e],
.input-phone.success .field[data-v-5691ff8e] {
    box-shadow: none;
}
.input-phone.disabled .field[data-v-5691ff8e] {
    border-color: var(--btly-border-default);
    background: var(--btly-surface-secondary);
}
.input-phone.disabled .dial[data-v-5691ff8e],
.input-phone.disabled .number input[data-v-5691ff8e] { color: var(--btly-text-disabled);
}
.input-phone.disabled .label-row label[data-v-5691ff8e] { color: var(--btly-text-tertiary);
}

/* <p> carries a UA margin-block:1em — reset it; field→hint spacing is the root gap only. */
.description[data-v-5691ff8e] { margin: 0; color: var(--btly-text-tertiary);
}
.description.is-error[data-v-5691ff8e] { color: var(--btly-status-error-text);
}

/* Rule closing the pinned-countries group. */
.sep[data-v-5691ff8e] {
    display: block;
    height: var(--btly-border-width-1);
    margin: var(--btly-space-4) 0;
    background: var(--btly-border-default);
}

/* Positioning only — the visual panel is the DS Dropdown inside. */
.panel[data-v-5691ff8e] {
    position: absolute;
    top: calc(100% + var(--btly-space-4));
    left: 0;
    right: 0;
    z-index: 10;
}

.pg[data-v-6ecffa0a] {
  width: 343px;
}
.evt[data-v-6ecffa0a] {
  margin-top: 8px;
  color: #737373;
  font-size: 12px;
  word-break: break-all;
}
.item[data-v-b61e85e2], .item[data-v-b61e85e2] * {
    box-sizing: border-box;
}

/* Figma draws the stroke INSIDE the 148x48 frame, where it costs no layout space. Reproduced the way
   `ItemAnswerHorizontal.css` and `Button.css` do it: a REAL border with its width SUBTRACTED FROM THE
   PADDING, so 10.5 + 1.5 = the drawn 12 and the box still measures 48 tall. A real border also makes
   the stroke a `border-color`, i.e. a property that TRANSITIONS — an inset box-shadow could not fade
   without fading the ring it shares.
   1.5 in EVERY state, deliberately: the design binds `border-width/1-5` only on selected/pressed and
   leaves static/hover on a raw 1, which would shift the content 0.5px on select (brief §9-1).
   The ring stays in `box-shadow`, where it must never fade. */
.item[data-v-b61e85e2] {
    --item-ring: 0 0 0 0 transparent;

    display: inline-flex;
    align-items: center;
    gap: var(--btly-space-8);
    min-height: 48px;
    margin: 0;
    padding: calc(var(--btly-space-12) - var(--btly-border-width-1-5));
    border: var(--btly-border-width-1-5) solid var(--btly-border-default);
    border-radius: var(--btly-radius-12);
    background: var(--btly-base-white);
    box-shadow: var(--item-ring);
    appearance: none;
    font: inherit;
    color: inherit;
    cursor: pointer;
    text-align: left;
    overflow: hidden;
}

/* Hover fades, press is instant — the convention + why lives in ARCHITECTURE.md "States".
   `box-shadow` stays out of the property list: it carries the ring, and a focus ring that fades in
   is an a11y regression. */
@media (hover: hover) {
.item[data-v-b61e85e2] {
        transition:
            background-color 80ms ease-in-out,
            border-color 80ms ease-in-out;
}

    /* A tap must land instantly; `.selected` arrives while `:active` still holds, so a selection is
       instant end-to-end. */
.item[data-v-b61e85e2]:active {
        transition: none;
}
}
@media (prefers-reduced-motion: reduce) {
.item[data-v-b61e85e2] {
        transition: none;
}
}

/* Hover keeps the default stroke — only the fill changes, as drawn. */
@media (hover: hover) {
.item[data-v-b61e85e2]:hover {
        background: var(--btly-surface-brand);
}
}

/* The design gives `selected` the same 2px halo the DS uses for focus, so the two agree by
   construction rather than by coincidence — no separate glow is drawn here. */
.item[data-v-b61e85e2]:active,
.item.selected[data-v-b61e85e2],
.item[data-v-b61e85e2]:focus-visible {
    border-color: var(--btly-border-brand);
    --item-ring: 0 0 0 2px var(--btly-border-focus-halo);
}
.item[data-v-b61e85e2]:active,
.item.selected[data-v-b61e85e2] {
    background: var(--btly-surface-brand);
}
.item[data-v-b61e85e2]:focus-visible {
    outline: 2px solid transparent;
}
@media (forced-colors: active) {
.item[data-v-b61e85e2] {
        outline: 1px solid;
        outline-offset: -1px;
}
}

/* Present only when it has something to show — consumer content, or the check on `selected`. NOT
   reserved the way ItemAnswerHorizontal reserves it: an unchosen pill would otherwise carry 24px of
   dead space on its right, and a row of them is meant to pack tight. `min-width` rather than `width`
   so a taller/wider swapped-in instance can grow the box. */
.slot-box[data-v-b61e85e2] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    min-width: var(--btly-space-24);
    height: var(--btly-space-24);
}

/* A colour emoji paints from its own font, so this is inert for the drawn glyph — it exists for a
   text-presentation character. The design fills this layer `pink/400`, a brand entry with no visual
   effect (brief §9-2); black is what the sibling component ships. */
.emoji[data-v-b61e85e2] {
    flex-shrink: 0;
    color: var(--btly-base-black);
    white-space: nowrap;
}

/* One line, never two: the pill takes its width from the copy, and that is what makes a row of them
   wrap like chips instead of stacking. */
.title[data-v-b61e85e2] {
    color: var(--btly-text-primary);
    white-space: nowrap;
}

/* No opacity trick here: the box itself only exists once there is a check to put in it. */
.check[data-v-b61e85e2] {
    font-size: 16px;
    color: var(--btly-icon-brand);
}

.gallery[data-v-ebc71494] {
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-24);
}
.cell[data-v-ebc71494] {
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-8);
}
.cap[data-v-ebc71494] {
    margin: 0;
    font-size: 12px;
    color: var(--btly-text-tertiary);
}
.row[data-v-ebc71494] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--btly-space-8);
}

/* The wrapping, centred row the design lays a question out in. */
.answers[data-v-ebc71494] {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: var(--btly-space-8);
}

/* Demo stand-ins for slot content the DS does not own — token-built, playground only. */
.demo-leading[data-v-ebc71494] {
    width: 24px;
    height: 24px;
    border-radius: var(--btly-radius-8);
    background: var(--btly-surface-tertiary);
}
.demo-trailing[data-v-ebc71494] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 24px;
    height: 24px;
    border-radius: var(--btly-radius-full);
    background: var(--btly-surface-brand);
    color: var(--btly-text-brand);
    font-size: 12px;
}
.item[data-v-a4eaed5a], .item[data-v-a4eaed5a] * {
    box-sizing: border-box;
}

/* Figma draws the 1.5px stroke INSIDE the 343x72 frame, where it costs no layout space. This was an
   inset `box-shadow` until 2026-08-21 for exactly that reason — a plain `border` grew the auto height
   to 75 and shrank the text box, wrapping answers that fit in the design.
   It is a REAL border now, with the growth SUBTRACTED FROM THE PADDING — the trick `Button.css`
   already uses for the same inside-aligned stroke. Both axes come out identical to the shadow version
   (18.5 + 1.5 = the drawn 20; content 343 - 3 - 25 = the same 315), and the stroke becomes a
   `border-color`, i.e. a property that TRANSITIONS. Under the inset shadow it could not: the colour
   lived inside a `box-shadow` that also carries the focus ring, so fading it would have faded the
   ring — which is why this row felt abrupt on select while ItemAnswerVertical (a real border all
   along) felt smooth. The two are structurally the same component now.
   Ring and glow stay in `box-shadow`, where they belong: they must never fade. */
.item[data-v-a4eaed5a] {
    --item-ring: 0 0 0 0 transparent;
    --item-glow: 0 0 0 0 transparent;

    display: flex;
    align-items: center;
    width: 100%;
    margin: 0;
    gap: var(--btly-space-12);
    padding:
            calc(var(--btly-space-20) - var(--btly-border-width-1-5))
            calc(var(--btly-space-12) - var(--btly-border-width-1-5))
            calc(var(--btly-space-20) - var(--btly-border-width-1-5))
            calc(var(--btly-space-16) - var(--btly-border-width-1-5));
    border: var(--btly-border-width-1-5) solid var(--btly-border-default);
    border-radius: var(--btly-radius-16);
    background: var(--btly-base-white);
    box-shadow: var(--item-ring), var(--item-glow);
    appearance: none;
    font: inherit;
    color: inherit;
    cursor: pointer;
    text-align: left;
    overflow: hidden;
}

/* Hover fades, press is instant — the convention + why lives in ARCHITECTURE.md "States".
   `box-shadow` stays OUT of the property list, as everywhere: it carries the focus ring and the
   selected glow, and a focus ring that fades in is an a11y regression. Since 2026-08-21 that costs
   nothing here — the stroke moved to a real `border`, so `border-color` fades with the fill exactly
   as in ItemAnswerVertical. */
@media (hover: hover) {
.item[data-v-a4eaed5a] {
        transition:
            background-color 80ms ease-in-out,
            border-color 80ms ease-in-out,
            color 80ms ease-in-out;
}

    /* A tap must land instantly; `.selected` arrives while `:active` still holds, so a selection is
       instant end-to-end. */
.item[data-v-a4eaed5a]:active {
        transition: none;
}
}
@media (prefers-reduced-motion: reduce) {
.item[data-v-a4eaed5a] {
        transition: none;
}
}

/* Hover keeps the default stroke — only the fill changes, as drawn. */
@media (hover: hover) {
.item[data-v-a4eaed5a]:hover {
        background: var(--btly-surface-brand);
}
}
.item[data-v-a4eaed5a]:active,
.item.selected[data-v-a4eaed5a],
.item[data-v-a4eaed5a]:focus-visible {
    border-color: var(--btly-border-brand);
    --item-ring: 0 0 0 2px var(--btly-border-focus-halo);
}
.item[data-v-a4eaed5a]:active,
.item.selected[data-v-a4eaed5a] {
    background: var(--btly-surface-brand);
}
.item.selected[data-v-a4eaed5a] {
    --item-glow: 0 0 8px 0 var(--btly-border-focus-halo);
}
.item[data-v-a4eaed5a]:focus-visible {
    outline: 2px solid transparent;
}

/* Kept from the inset-shadow era, when forced-colors dropped the edge entirely. A real `border`
   survives that mode (it takes a system colour), so this is a second guarantee now rather than the
   only one — harmless, costs no layout, left in place deliberately. */
@media (forced-colors: active) {
.item[data-v-a4eaed5a] {
        outline: 1px solid;
        outline-offset: -1px;
}
}

/* Hugs the slot content with the check's 24px box as the FLOOR — Figma's trailing box is an
   auto-layout hug, so swapping the instance (the reading-level step puts a 64px LevelDiagram here)
   widens the box. A fixed 24 crushed that diagram to 7px bars. */
.slot-box[data-v-a4eaed5a] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    min-width: var(--btly-space-24);
    height: var(--btly-space-24);
}
.emoji[data-v-a4eaed5a] {
    flex-shrink: 0;
    color: var(--btly-base-black);
    white-space: nowrap;
}
.text[data-v-a4eaed5a] {
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-2);
    flex: 1 0 0;
    min-width: 1px;
}
.title[data-v-a4eaed5a] {
    color: var(--btly-text-primary);
}
.description[data-v-a4eaed5a] {
    color: var(--btly-text-secondary);
}
.check[data-v-a4eaed5a] {
    font-size: 16px;
    color: var(--btly-action-primary-default);
    opacity: 0;
}
.item:active .check[data-v-a4eaed5a],
.item.selected .check[data-v-a4eaed5a] {
    opacity: 1;
}

/* Flex-wrap grid: ~2 cards per row (capped via max-width), wrapping to 1 on a
 * narrow pane. The frame's padding gives the selected/pressed focus-halo shadow
 * room so it isn't clipped. */
.gallery[data-v-2055417e] {
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
  max-width: 760px;
}
.cell[data-v-2055417e] {
  display: flex;
  flex-direction: column;
  gap: 8px;
  flex: 1 1 280px;
  min-width: 0;
  max-width: 360px;
}
.cap[data-v-2055417e] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
/* width:165px / height:88px are raw Figma values with no bound token (component
 * constants, like the Checkbox's 20px box). */
.item[data-v-00f4278d], .item[data-v-00f4278d] * {
    box-sizing: border-box;
}
.item[data-v-00f4278d] {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    width: 165px;
    min-height: 72px;
    margin: 0;
    gap: var(--btly-space-8);
    padding: var(--btly-space-16);
    border: var(--btly-border-width-1-5) solid var(--btly-border-default);
    border-radius: var(--btly-radius-20);
    background: var(--btly-base-white);
    appearance: none;
    font: inherit;
    color: inherit;
    cursor: pointer;
    text-align: center;
    overflow: hidden;
}

/* Hover fades, press is instant — the convention + why lives in ARCHITECTURE.md "States".
   `box-shadow` stays OUT of the property list, as everywhere else: it also carries the focus ring and the
   selected glow, and a focus ring that fades in is an a11y regression. Nothing is lost on the hover
   path — hover moves the FILL only. On deselect the tint fades while the ring leaves at once; at
   80ms that reads as one snap. */
@media (hover: hover) {
.item[data-v-00f4278d] {
        transition:
            background-color 80ms ease-in-out,
            border-color 80ms ease-in-out,
            color 80ms ease-in-out;
}

    /* A tap must land instantly; `.selected` arrives while `:active` still holds, so a selection is
       instant end-to-end. */
.item[data-v-00f4278d]:active {
        transition: none;
}
}
@media (prefers-reduced-motion: reduce) {
.item[data-v-00f4278d] {
        transition: none;
}
}
@media (hover: hover) {
.item[data-v-00f4278d]:hover {
        background: var(--btly-surface-brand);
}
}

/* :active and .selected share styling — matches the Figma Pressed/Selected variants. */
.item[data-v-00f4278d]:active,
.item.selected[data-v-00f4278d] {
    background: var(--btly-surface-brand);
    border-color: var(--btly-border-brand);
    box-shadow:
            0 0 0 2px var(--btly-border-focus-halo),
            0 0 8px 0 var(--btly-border-focus-halo);
}

/* Radius stays 20 in ALL states. Figma's Selected variant still shows radius/16 — judged a
 * designer oversight (Pressed/Selected share every other style; the corner would visibly
 * morph on select). Maintainer decision 2026-07-07; flagged to the designer to fix in Figma. */
.item[data-v-00f4278d]:focus-visible {
    outline: 2px solid transparent;
    border-color: var(--btly-border-brand);
    box-shadow:
            0 0 0 2px var(--btly-border-focus-halo),
            0 0 8px 0 var(--btly-border-focus-halo);
}

/* Background uses brand palette — no semantic token exists for this decorative
 * surface, and primitives are forbidden (maintainer decision, see spec §5).
 * The base rule pins the `pink` default so an out-of-contract `color` (plain-JS
 * consumers) degrades to the default tint instead of a transparent box.
 *
 * `min-height`, not `height`: Figma models this box as the `emojiContainer` SLOT, and a slot hugs
 * what the consumer puts in it — the drawn 88 is padding 16 + the emoji's 56 line box, i.e. the
 * FLOOR, not a cap. With a glyph the box still resolves to exactly 88 (the line box is shorter, so
 * the floor wins), so every emoji call site is pixel-identical; a taller media child — a photo
 * answer tile, drawn 127 — now grows the box instead of being squashed.
 * `overflow: hidden` makes the declared radius load-bearing: `.item`'s own clip is the outer
 * radius/20 card, so without this a slot image would paint over these rounded corners. */
.emoji[data-v-00f4278d] {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    min-height: 88px;
    border-radius: var(--btly-radius-16);
    background: var(--btly-brand-pink-200);
    overflow: hidden;
}
.emoji.is-pink[data-v-00f4278d] { background: var(--btly-brand-pink-200);
}
.emoji.is-sky[data-v-00f4278d] { background: var(--btly-brand-sky-200);
}
.emoji.is-green[data-v-00f4278d] { background: var(--btly-brand-green-200);
}
.emoji.is-sunshine[data-v-00f4278d] { background: var(--btly-brand-sunshine-200);
}
.emoji.is-orange[data-v-00f4278d] { background: var(--btly-brand-orange-200);
}
.emoji.is-ultraviolet[data-v-00f4278d] { background: var(--btly-brand-ultraviolet-200);
}
.emoji.is-gray[data-v-00f4278d] { background: var(--btly-brand-gray-200);
}

/* No gap — title/description line-heights provide the spacing (Figma gap-0). */
.text[data-v-00f4278d] {
    display: flex;
    flex-direction: column;
    align-items: center;
    width: 100%;
}
.title[data-v-00f4278d] {
    color: var(--btly-text-primary);
}
.description[data-v-00f4278d] {
    color: var(--btly-text-tertiary);
}

/* The frame's padding gives the selected/pressed focus-halo shadow room so it isn't clipped. */
.gallery[data-v-a0b278e7] {
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
  max-width: 760px;
}
.cell[data-v-a0b278e7] {
  display: flex;
  flex-direction: column;
  gap: 8px;
  flex: 0 0 auto;
}
.cell.wide[data-v-a0b278e7] {
  flex: 1 1 100%;
}
.row[data-v-a0b278e7] {
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
}
.cap[data-v-a0b278e7] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}

/* Demo stand-in for media the DS does not ship: a 127-tall silhouette, the height the exp-139
   reading tiles draw. Tokens only — it exists to make the box's hug visible, nothing else. */
.demo-photo[data-v-a0b278e7] {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  gap: 6px;
  width: 100%;
  height: 127px;
  padding-top: 16px;
}
.demo-photo__head[data-v-a0b278e7] {
  width: 40px;
  height: 40px;
  border-radius: var(--btly-radius-full);
  background: var(--btly-icon-muted);
}
.demo-photo__body[data-v-a0b278e7] {
  width: 72px;
  height: 56px;
  border-radius: var(--btly-radius-16) var(--btly-radius-16) 0 0;
  background: var(--btly-icon-muted);
}
/* 32/26 are raw component constants — unbound in Figma, not on the space scale
   (like TutorAvatar's 42 and CardReviewAvatar's 20). Figma binds radius/full directly. */
.kid-avatar[data-v-b0032a78], .kid-avatar[data-v-b0032a78] * {
    box-sizing: border-box;
}
.kid-avatar[data-v-b0032a78] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    margin: 0;
    padding: 0;
    border: none;
    border-radius: var(--btly-radius-full);
    appearance: none;
    font: inherit;
    color: var(--btly-text-inverse);
    cursor: pointer;
    overflow: hidden;
}
.kid-avatar.is-lg[data-v-b0032a78] {
    width: 32px;
    height: 32px;
    border: var(--btly-border-width-2) solid var(--btly-border-inverse);
}

/* sm ships without the ring border in Figma (which draws sm/default only); the state rings below
   still apply to sm — maintainer's a11y decision re-confirmed 2026-07-30. */
.kid-avatar.is-sm[data-v-b0032a78] {
    width: 26px;
    height: 26px;
}
.initials[data-v-b0032a78] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
@media (hover: hover) {
.kid-avatar[data-v-b0032a78]:hover {
        border-color: var(--btly-brand-ultraviolet-100);
        /* Figma "1dp shadow" effect style — effects are not in the token export (designer flagged). */
        box-shadow: 0 1px 2px 0 rgba(15, 23, 43, 0.05);
}
.kid-avatar.selected[data-v-b0032a78]:hover {
        border-color: var(--btly-border-inverse);
}
}
.kid-avatar[data-v-b0032a78]:active {
    box-shadow: 0 0 0 2px var(--btly-brand-ultraviolet-200);
}
.kid-avatar.selected[data-v-b0032a78] {
    box-shadow: 0 0 0 2px var(--btly-brand-ultraviolet-400);
}
.kid-avatar[data-v-b0032a78]:focus-visible {
    outline: 2px solid transparent;
    box-shadow: 0 0 0 2px var(--btly-border-focus-halo);
}

/* Circle fill per hue (brand palette — decorative surface; all bind 500-primary except gray). */
.kid-avatar.is-pink[data-v-b0032a78] { background: var(--btly-brand-pink-500-primary);
}
.kid-avatar.is-sky[data-v-b0032a78] { background: var(--btly-brand-sky-500-primary);
}
.kid-avatar.is-sunshine[data-v-b0032a78] { background: var(--btly-brand-sunshine-500-primary);
}
.kid-avatar.is-green[data-v-b0032a78] { background: var(--btly-brand-green-500-primary);
}
.kid-avatar.is-orange[data-v-b0032a78] { background: var(--btly-brand-orange-500-primary);
}
.kid-avatar.is-ultraviolet[data-v-b0032a78] { background: var(--btly-brand-ultraviolet-500-primary);
}
.kid-avatar.is-gray[data-v-b0032a78] { background: var(--btly-brand-gray-500);
}

.row[data-v-f083e6dc] {
  display: flex;
  align-items: center;
  gap: 12px;
}
.cell[data-v-f083e6dc] {
  display: flex;
  flex-direction: column;
  gap: 8px;
  align-items: flex-start;
}
.cap[data-v-f083e6dc] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
.level[data-v-3eb35b53], .level[data-v-3eb35b53] * {
    box-sizing: border-box;
}
.level[data-v-3eb35b53] {
    /* Intrinsic geometry, like an icon glyph: it must never shrink to a host box — squeezed bars
       read as a different diagram. The host is expected to hug (ItemAnswerHorizontal's slot-box). */
    flex-shrink: 0;
    display: inline-flex;
    align-items: flex-end;
    justify-content: center;
    gap: var(--btly-space-2);
    width: 64px;
    height: 24px;
    background: var(--btly-base-transparent);
}
.bar[data-v-3eb35b53] {
    flex: 1 0 0;
    min-width: 1px;
    border-radius:
        var(--btly-radius-4) var(--btly-radius-4)
        var(--btly-radius-2) var(--btly-radius-2);
}

/* Intrinsic diagram geometry (like an icon glyph size) — Figma binds these as raw px. */
.bar[data-v-3eb35b53]:nth-child(1) { height: 10px;
}
.bar[data-v-3eb35b53]:nth-child(2) { height: 18px;
}
.bar[data-v-3eb35b53]:nth-child(3) { height: 24px;
}
.bar.empty[data-v-3eb35b53] {
    background: var(--btly-action-primary-disabled);
}
.bar.filled[data-v-3eb35b53] {
    background: var(--btly-action-accent-default);
}
.level.full .bar.filled[data-v-3eb35b53] {
    background: var(--btly-status-success-accent);
}

.stack[data-v-ee97f1bf] {
  display: flex;
  flex-direction: column;
  gap: 16px;
  padding: 16px;
}
.row[data-v-ee97f1bf] {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 24px;
}
.row.dark[data-v-ee97f1bf],
.stack.dark[data-v-ee97f1bf] {
  background: var(--btly-brand-gray-950);
  border-radius: 8px;
}
.list-answers[data-v-7f269f64], .list-answers[data-v-7f269f64] * {
    box-sizing: border-box;
}
.list-answers[data-v-7f269f64] {
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-12);
}
.description[data-v-7f269f64] {
    color: var(--btly-text-secondary);
    text-align: center;
}
.answers[data-v-7f269f64] {
    display: flex;
    gap: var(--btly-space-12);
}
.answers.list[data-v-7f269f64] {
    flex-direction: column;
}
.answers.grid[data-v-7f269f64] {
    flex-wrap: wrap;
    justify-content: center;
}
.disclaimer[data-v-7f269f64] {
    color: var(--btly-text-secondary);
    text-align: center;
}

/* Consumer-provided links inside the disclaimer get the brand link style. */
.disclaimer[data-v-7f269f64] a {
    color: var(--btly-text-brand);
    text-decoration: underline;
}
/* One <p>: the sentence is inline text, the links row is a block-level child. 292px in Figma is a
 * canvas convenience — the block fills its parent (16+2+16 = 34 at one line, 32+2+16 = 50 at two). */
.agreement[data-v-e35ea88c], .agreement[data-v-e35ea88c] * {
    box-sizing: border-box;
}
.agreement[data-v-e35ea88c] {
    margin: 0;
    width: 100%;
    color: var(--btly-text-secondary);
    text-align: center;
    word-break: break-word;
}

/* Own line, centred, carrying the root's vertical space/2 as the separation from the sentence. */
.links[data-v-e35ea88c] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: var(--btly-space-4);
    margin-top: var(--btly-space-2);
}

.cell[data-v-19188f7d] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-19188f7d] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}

/* Playground: give the (unframed) full-width list a demo width. */
.pg[data-v-19188f7d] {
  width: 400px;
}

/* Placeholder standing in for ItemAnswerVertical (not built yet) — mirrors its Figma
 * frame (165px card, radius/20) so the grid layout reads correctly. Playground-only. */
.placeholder-card[data-v-19188f7d] {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 165px;
  min-height: 72px;
  padding: var(--btly-space-16);
  border: var(--btly-border-width-1-5) solid var(--btly-border-default);
  border-radius: var(--btly-radius-20);
  background: var(--btly-base-white);
  color: var(--btly-text-primary);
  text-align: center;
}
.pill[data-v-99abb7ee], .pill[data-v-99abb7ee] * {
    box-sizing: border-box;
}
.pill[data-v-99abb7ee] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--btly-space-4);
    padding: var(--btly-space-4) var(--btly-space-8);
    border-radius: var(--btly-radius-full);
}

/* Brand, not semantic: the design binds {hue}/100 here (DS skill, decision-tree step 3). */
.pill.is-green[data-v-99abb7ee] { background: var(--btly-brand-green-100);
}
.pill.is-pink[data-v-99abb7ee] { background: var(--btly-brand-pink-100);
}
.pill.is-sky[data-v-99abb7ee] { background: var(--btly-brand-sky-100);
}
.pill.is-ultraviolet[data-v-99abb7ee] { background: var(--btly-brand-ultraviolet-100);
}
.pill.is-sunshine[data-v-99abb7ee] { background: var(--btly-brand-sunshine-100);
}

/* `space/16` per the set description; the MCP read no binding on the hidden slot (brief §9-1). */
.slot-box[data-v-99abb7ee] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: var(--btly-space-16);
    height: var(--btly-space-16);
}

/* Colour sits on the text, not the root, so a slotted icon keeps its own fill. */
.emoji[data-v-99abb7ee],
.description[data-v-99abb7ee] {
    flex-shrink: 0;
    color: var(--btly-text-secondary);
    white-space: nowrap;
}
.pill-list[data-v-4d568852], .pill-list[data-v-4d568852] * {
    box-sizing: border-box;
}
.pill-list[data-v-4d568852] {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
    align-content: center;
    gap: var(--btly-space-8);
    width: 100%; /* Figma's FILL, in any host: a root that hugs has no width to wrap against */
    overflow: hidden; /* not `clip`: Safari 16+ only — support-floor rule (2026-08-18) */
}

.gallery[data-v-d4bf3748] {
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-24);
}

/* `flex-start`, not the default stretch: each host keeps its fixed width under a wider caption. */
.cell[data-v-d4bf3748] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--btly-space-8);
}
.cap[data-v-d4bf3748] {
    margin: 0;
    font-size: 12px;
    color: var(--btly-text-tertiary);
}

/* Story-only hosts. The list is FILL, so the host width is its wrap point; 327 is the drawn default. */
.host.is-327[data-v-d4bf3748] {
    width: 327px;
}
.host.is-480[data-v-d4bf3748] {
    width: 480px;
}
.list-progress-bar[data-v-f398906c], .list-progress-bar[data-v-f398906c] * {
    box-sizing: border-box;
}
.list-progress-bar[data-v-f398906c] {
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-24);
}

.row[data-v-0d18bdd8] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.row-head[data-v-0d18bdd8] {
  display: flex;
  justify-content: space-between;
  font-size: 14px;
  color: var(--btly-text-primary);
}

/* Playground: fill the framed width (PlaygroundFrame is 380px, matching the Gallery). */
.pg[data-v-0d18bdd8] {
  width: 100%;
}
.logo[data-v-a1fee6a6], .logo[data-v-a1fee6a6] * {
    box-sizing: border-box;
}
.logo[data-v-a1fee6a6] {
    display: inline-flex;
}

/* v-html'd SVG carries its own colours + intrinsic size; :deep reaches it. */
.logo[data-v-a1fee6a6] svg {
    display: block;
    flex: none;
}

/* Brand-asset dimensions from the Figma set — no token covers a logo box. */

/* The wrapper frame; the `main` glyph (48.24) overhangs it, as in Figma. */
.logo[data-brand='old'][data-type='mark'][data-v-a1fee6a6] {
    width: 48px;
}
.logo[data-brand='old'][data-type='mark'][data-size='md'][data-v-a1fee6a6] {
    padding-block: var(--btly-space-10);
}

/* `sm` cells served by the `md` drawing resized (exact scale). */
.logo[data-brand='new'][data-type='mark'][data-size='sm'][data-v-a1fee6a6] svg {
    width: 24px;
    height: 24px;
}
.logo[data-brand='lumee'][data-type='full'][data-size='sm'][data-v-a1fee6a6] svg {
    width: 96px;
    height: 21px;
}
.logo[data-brand='smartest-minds'][data-type='full'][data-size='sm'][data-v-a1fee6a6] svg {
    width: 92px;
    height: 23px;
}

.cap[data-v-90f05430] {
  margin: 0;
  color: var(--btly-text-secondary);
}

/* Constant inset, so toggling `color` never resizes the Playground frame. */
.row[data-v-90f05430] {
  display: flex;
  align-items: center;
  padding: 24px;
  border-radius: var(--btly-radius-16);
}

/* Brand backdrop so the inverse variants are visible. */
.backdrop[data-v-90f05430] {
  background: var(--btly-action-primary-default);
}

/* One grid for the whole Gallery, so the four Figma columns line up across every row. */
.matrix[data-v-90f05430] {
  display: grid;
  grid-template-columns: repeat(4, max-content);
  gap: 16px 48px;
  overflow-x: auto;
}
.matrix .cell[data-v-90f05430],
.matrix .row[data-v-90f05430] {
  display: grid;
  grid-column: 1 / -1;
  grid-template-columns: subgrid;
  justify-items: start;
}
.matrix .cell[data-v-90f05430] {
  row-gap: 8px;
}
.matrix .cap[data-v-90f05430] {
  grid-column: 1 / -1;
}

/* The legacy set draws no `full sm` — its `mark sm` keeps the last column. */
.matrix .legacy[data-v-90f05430] > :last-child {
  grid-column: 4;
}
/* Figma's `deviceWidth` axis is the VIEWPORT, not a prop: `mobile` is the base and the design's two other
   frames are DS breakpoints — `(--md)` (tablet) and `(--xl)` (desktop), docs/TOKENS.md. Mobile-first,
   `min-width` only. The two breakpoints do different jobs: md switches the shell from sheet to dialog,
   xl unlocks `view` — the modal's orientation, a desktop-only axis (horizontal fits nowhere narrower).

   The unbound geometry below — 448 / 920 / 440 / 32 — carries no Figma variable and no `space/*`
   step matches it (brief §7). It is layout geometry, not spacing. The old pixel height clamps
   (664 / 482 / 800 / 400) are GONE: the designer's height contract (17.08.2026) hugs content and
   clamps only the scroll region — see the sections below. */
.scrim[data-v-1a7b2265], .scrim[data-v-1a7b2265] * {
    box-sizing: border-box;
}

/* Type's half of the reset above: both properties inherit, so a host's own `font-kerning: none`
   would lay Mona Sans out unkerned and wider than Figma draws it. Rationale in QuizLayout.css. */
.scrim[data-v-1a7b2265], .scrim[data-v-1a7b2265] * {
    font-kerning: normal;
    font-feature-settings: normal;
}

/* ---------- scrim ---------- */

/* A full-viewport overlay: Figma's 375 / 768 / 1440 frames are the design's viewport, not component
   sizes — only the padding is a contract. `surface/blackout` already carries the 40% alpha, so no
   `opacity` here. No z-index: the DS has no elevation scale, so stacking is the consumer's call
   (mount last, or teleport to <body>) — see README. */
.scrim[data-v-1a7b2265] {
    position: fixed;
    inset: 0;
    display: flex;
    flex-direction: column;
    align-items: center;

    /* Bottom sheet: the pop-up is flush to the bottom edge with a 24px sliver of scrim above it.
       The other three sides bind space/0, so nothing is declared for them. `--modal-inset` names
       the contract's padding once; the md block overrides it. */
    --modal-inset: var(--btly-space-24);

    /* Read by the SFC to gate swipe-to-dismiss: 1 = the bottom sheet is active. The breakpoint
       number stays in CSS alone — JS reading a flag can never drift from the md block below. */
    --modal-sheet: 1;

    justify-content: flex-end;

    /* The designer's height contract (17.08.2026) sizes the card as a PERCENTAGE of this box, so
       the box itself must be the SMALL viewport: `inset: 0` alone resolves against the large one,
       and with a mobile toolbar showing the sheet would hide under the chrome. The contract says
       dvh, svh allowed where the toolbar reflow is unacceptable — svh is this repo's standing
       choice (the card must not resize while the toolbar animates). */
    height: 100vh; /* pre-svh fallback (Safari <15.4) */
    height: 100svh;
    padding-top: var(--modal-inset);
    overflow: hidden; /* not `clip`: Safari 16+ only — support-floor rule (2026-08-18) */
    background: var(--btly-surface-blackout);
}

/* ---------- pop-up ---------- */

/* Full-bleed sheet: top corners only. HUGS its content — the designer's height contract
   (17.08.2026): "the sheet hugs its content when there is little of it, stops growing at the
   visible viewport when there is a lot, scrolls the body, and never lets the action row be pushed
   out". `max-height: 100%` is the whole clamp — the percentage resolves against the scrim's CONTENT
   box, so the inset is already subtracted and every old pixel cap (664/482/800) is retired: "do not
   port the pixel values". A clamp with pixels on the card was tried in Figma and removed after it
   clipped the action row. Shadow geometry is raw by design (the DS tokenizes effect COLOUR only,
   brief §4). `position: relative` anchors the two controls. */
.popup[data-v-1a7b2265] {
    position: relative;
    display: flex;
    flex: 0 1 auto;
    flex-direction: column;
    align-items: center;
    width: 100%;
    max-height: 100%;
    padding: var(--btly-space-8) var(--btly-space-8) 0;
    overflow: hidden; /* not `clip`: Safari 16+ only — support-floor rule (2026-08-18) */
    border-radius: var(--btly-radius-24) var(--btly-radius-24) 0 0;
    background: var(--btly-surface-card);
    box-shadow: 0 -2px 40px 0 var(--btly-effects-shadow);
}

/* ---------- entrance & swipe (reference: reka-ui Drawer) ---------- */

/* Ported from the reka-ui Drawer demo (docs/components/demo/Drawer/css/styles.css), the maintainer's
   chosen reference (2026-08-18) — SUPERSEDES two earlier entrances: the sequenced scrim-then-sheet
   slide (2026-08-16) and the cs-app `pop`/`fadeIn` pair at md (the overlay half of it; the card's pop
   survives below). One curve everywhere: 450ms cubic-bezier(0.32, 0.72, 0, 1), overlay and sheet
   CONCURRENT — the reference runs no delay between them.

   The sheet keyframes animate the standalone `translate` property, NOT `transform` — the reference's
   own trick, kept with its comment: the inline `transform` carries the live drag offset, and the two
   properties compose, so an entrance and a drag cannot fight over one value. */
@keyframes btly-modal-overlay-in-1a7b2265 {
from { opacity: 0;
}
}
@keyframes btly-modal-sheet-in-1a7b2265 {
from { translate: 0 100%;
}
}
.scrim[data-v-1a7b2265] {
    animation: btly-modal-overlay-in-1a7b2265 450ms cubic-bezier(0.32, 0.72, 0, 1);
}

/* Swipe-to-dismiss carries the sheet through this var (mobile only — the SFC gates on
   `--modal-sheet`). At md+ the var never changes, so transform/transition sit inert under the pop. */
.popup[data-v-1a7b2265] {
    transform: translateY(var(--modal-drag-y, 0));
    transition: transform 450ms cubic-bezier(0.32, 0.72, 0, 1);
    will-change: transform;
    animation: btly-modal-sheet-in-1a7b2265 450ms cubic-bezier(0.32, 0.72, 0, 1);
}

/* While the finger is down the sheet tracks it 1:1 — the 450ms curve would lag it (reference:
   `.DrawerContent[data-swiping]`). */
.popup[data-swiping][data-v-1a7b2265] {
    transition-duration: 0ms;
    user-select: none;
}

/* The exit, set by EVERY close path — ✕, Escape, swipe (reference: `drawerOverlayHide` +
   `drawerSlideBottomOut`). Opacity on the scrim fades the whole subtree, dialog included, at every
   width; on the sheet the SFC also drives `--modal-drag-y` to full height, so it slides out while
   fading. `close` fires only when this transition ends. Cancelling the entrance keyframes hands the
   frame to the exit even when close is requested mid-entrance. */
.scrim[data-dismissing][data-v-1a7b2265],
.scrim[data-dismissing] .popup[data-v-1a7b2265] {
    animation: none;
}
.scrim[data-dismissing][data-v-1a7b2265] {
    opacity: 0;
    transition: opacity 450ms cubic-bezier(0.32, 0.72, 0, 1);
}

/* From md up the card has no edge to travel from, so it POPS instead — kept verbatim from cs-app
   (`DefaultModal.scss`), as before. Its overlay half (`fadeIn` from .8) is retired: the reference
   overlay above now runs at every width. */
@keyframes btly-modal-pop-1a7b2265 {
from { opacity: 0.85; transform: scale(0.98);
}
40% { opacity: 1; transform: scale(1.02);
}
to { opacity: 1; transform: scale(1);
}
}

/* ---------- mobile, position=default — centred dialog ---------- */

/* Figma deviceWidth=mobile, position=default: scrim pt space/24, px space/16, pb 0, children centred;
   the pop-up keeps its 8/8/0 padding, rounds all four corners and lands at 343 (375 − 2×16).
   `--modal-sheet: 0` is the entire behavioural switch — the SFC reads it to drop swipe-to-dismiss
   and to fade rather than slide on exit. */
.scrim.pos-default[data-v-1a7b2265] {
    --modal-sheet: 0;

    justify-content: center;
    padding: var(--btly-space-24) var(--btly-space-16) 0;
}

/* A centred dialog has no edge to travel from, so it pops like the md+ card. */
.pos-default .popup[data-v-1a7b2265] {
    border-radius: var(--btly-radius-24);
    animation: btly-modal-pop-1a7b2265 280ms ease-in;
}

/* ---------- content column ---------- */

/* Figma's `content` wrapper exists only in the horizontal tree; elsewhere the body and the action
   row are direct pop-up children. */
.column[data-v-1a7b2265] {
    display: contents;
}

/* ---------- slots ---------- */

/* The master's 40 (top) and 136 (bottom) are empty-placeholder heights, not contracts (brief §7):
   both bands hug their content. The 32 floor is the only height the design states. */
.top[data-v-1a7b2265] {
    flex-shrink: 0;
    width: 100%;
    min-height: 32px;
    border-radius: var(--btly-radius-20);
    background: var(--btly-base-transparent);
}

/* Always rendered — Figma gives contentSlot no visibility boolean. Padding space/12 applies at
   EVERY width (settled by arithmetic on 2026-08-13: the design's 335 content column = 359 − 2×12). */
/* THIS is the sheet's scroll region — the band that gives way when the content is taller than the
   pop-up. `flex-basis: 0` already caps it at the leftover space, so without an `overflow` its content
   simply painted out of the box and the opaque action row below covered whatever spilled: at 375x812
   this modal's offer column needed 336px against the 317px it was given, so 19px vanished under the
   buttons, and more on a shorter phone. The action row's upward white fade documents that content is
   meant to scroll UNDER it — the scroll container it needed was just never declared.
   `hidden` on x, because `overflow-y: auto` alone forces x to `auto` too and any child a hair too wide
   would add a horizontal bar. `contain` so a sheet at its scroll end never pans the page behind it. */
.body[data-v-1a7b2265] {
    /* HUG, not grow (height contract 17.08.2026): the card hugs, so the body takes its natural
       height and SHRINKS first when the card hits its 100% clamp — `min-height: 0` is what lets a
       flex child shrink below its content so the scroll can engage at all (the contract calls it
       mandatory). The bands above and below are shrink-0, so the clamp can only ever eat this box. */
    flex: 0 1 auto;
    display: flex;
    flex-direction: column;
    /* Bound in Figma on 17.08.2026 (mobile). Tablet/desktop still draw the unbound 47 — a listed
       KNOWN ISSUE, so md+ INHERITS space/32 rather than hardcoding a number off the scale. */
    gap: var(--btly-space-32);
    min-height: 0;
    width: 100%;
    padding: var(--btly-space-12);
    /* Longhands, not the `overflow: hidden auto` shorthand: two-value overflow is Safari 15.4+,
       and on older WebKit the shorthand drops WHOLE — taking the scroll region with it. */
    overflow-x: hidden;
    overflow-y: auto;
    overscroll-behavior: contain;
    background: var(--btly-base-transparent);
}

/* The only opaque slot — the designer flags the inconsistency with the two transparent ones as a
   known issue. Padding/gap moved to the BASE on 17.08.2026 (they lived only in the horizontal
   override before): the contract states them for the slot itself, and adds the safe-area floor so
   the action row clears the iPhone home indicator on the flush-to-bottom sheet. */
.bottom[data-v-1a7b2265] {
    display: flex;
    flex-direction: column;
    align-items: center;
    flex-shrink: 0;
    gap: var(--btly-space-12);
    width: 100%;
    padding: var(--btly-space-16) var(--btly-space-8);
    padding-bottom: max(var(--btly-space-16), env(safe-area-inset-bottom));
    background: var(--btly-surface-canvas);
}

/* The upward white fade (`scrollFade` style, tokenized colour + raw geometry, brief §4) marks that
   content SCROLLS under the action row — so per the contract it is on only while the body actually
   scrolls; on short content it is "a decorative smudge". The SFC measures and sets the attribute. */
.popup[data-body-scrollable] .bottom[data-v-1a7b2265] {
    box-shadow: 0 -4px 24px 0 var(--btly-base-white);
}

/* ---------- dismiss controls ---------- */

/* Every offset is space/8 — the controls sit on the pop-up's own padding box. */
.ctrl[data-v-1a7b2265] {
    position: absolute;
    top: var(--btly-space-8);
    display: flex;
}

/* Mobile draws this as `left: 327` (= 375 - 40 - 8) only because the constraint was left at
   horizontal=MIN there; tablet and desktop use MAX. Deliberate divergence: `right` everywhere, so
   the control tracks the edge as the sheet resizes — README records it. */
.ctrl-close[data-v-1a7b2265] {
    right: var(--btly-space-8);
}
.ctrl-back[data-v-1a7b2265] {
    left: var(--btly-space-8);
}

/* ---------- md — centred dialog ---------- */

/* Tablet and desktop draw the SAME 448 dialog; only the scrim grows, so the design needs no second
   breakpoint for the vertical tree. Every mobile-only declaration is reset here, not just added to:
   in a cascade the bottom sheet is the floor, not a sibling. */
@media (min-width: 740px) {
    /* `.pos-default` is named too: it matches at (0,2,0) and a media query adds no specificity, so
       without it the mobile dialog's padding would outrank this block from tablet up. */
.scrim[data-v-1a7b2265],
    .scrim.pos-default[data-v-1a7b2265] {
        --modal-inset: var(--btly-space-80);

        --modal-sheet: 0;

        justify-content: center;
        padding: var(--modal-inset);
}

    /* `max-width` is code's own guard so the fixed width can never overflow a narrow viewport; at
       the designed sizes it is inert. The dialog HUGS like the sheet (height contract 17.08.2026):
       the old 482 floor, 800 cap and the body's FIXED 400 are all retired — `max-height: 100%`
       (inherited from the base rule) is the only clamp, and the base `.body` hug/scroll applies
       unchanged, so no `.body` override remains here at all. */
    /* Figma: space/8 sides on mobile, space/12 from tablet. */
.bottom[data-v-1a7b2265] {
        padding-right: var(--btly-space-12);
        padding-left: var(--btly-space-12);
}
.popup[data-v-1a7b2265] {
        flex: 0 0 auto;
        /* No fill-mode: `to` is the resting state, so nothing needs holding once it ends. */
        animation: btly-modal-pop-1a7b2265 280ms ease-in;
        gap: var(--btly-space-8);
        width: 448px;
        max-width: 100%;
        padding: var(--btly-space-8);
        border-radius: var(--btly-radius-24);
}
}

/* ---------- xl + view=horizontal — two columns ---------- */

/* The right column is a fixed 440 and the left one takes what is left of the 904 inner width
   (920 - 2x8) minus the 24 gap — i.e. 440 as well. */
@media (min-width: 1280px) {
.view-horizontal .popup[data-v-1a7b2265] {
        --modal-column-w: 440px;

        flex-direction: row;
        align-items: flex-start;
        justify-content: center;
        gap: var(--btly-space-24);
        width: 920px;
}
.view-horizontal .column[data-v-1a7b2265] {
        display: flex;
        flex-direction: column;
        align-items: flex-start;
        flex-shrink: 0;
        gap: var(--btly-space-8);
        width: var(--modal-column-w);
}

    /* The full-height left column. */
.view-horizontal .top[data-v-1a7b2265] {
        flex: 1 0 0;
        align-self: stretch;
        width: auto;
        min-width: 0;
}
.view-horizontal .body[data-v-1a7b2265] {
        display: flex;
        flex-direction: column;
        align-items: flex-start;
}

    /* Anchored to the RIGHT column's left edge (Figma's x=472 = 8 + 440 + 24), expressed against the
       pop-up's box so it survives a width change. */
.view-horizontal .ctrl-back[data-v-1a7b2265] {
        left: calc(100% - var(--btly-space-8) - var(--modal-column-w));
}
}

/* Last, so it wins at every width: motion is opt-out, and an entrance is exactly what a reduced
   -motion setting is asking us to skip. The modal still appears, it just does not travel. */
@media (prefers-reduced-motion: reduce) {
.scrim[data-v-1a7b2265],
    .popup[data-v-1a7b2265] {
        animation: none;
        transition: none;
}
}
/* ModalClarify owns two subtrees: the copy column in `contentSlot` and the answer row in
   `bottomSlot`. The scrim, the sheet, the slot wrappers and both buttons are delegated (brief §4) —
   nothing from those tables is restated here. Hence two box-sizing roots rather than one. */
.text[data-v-c56bf3ba], .text[data-v-c56bf3ba] * {
    box-sizing: border-box;
}
.actions[data-v-c56bf3ba], .actions[data-v-c56bf3ba] * {
    box-sizing: border-box;
}

/* ---------- copy ---------- */

/* Figma centres the frame and its copy; the pair sits at gap space/8 with space/8 below it. */
.text[data-v-c56bf3ba] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--btly-space-8);
    width: 100%;
    padding-bottom: var(--btly-space-8);
    text-align: center;
}

/* UA margins on <p>/<h2>: the DS ships no reset, so the flex gap above is the only spacing. Width
   stays 100%, never the drawn 335 — that is 359 - 2x12, the column measured inside ModalLayout's own
   contentSlot padding (ModalLayout README gap 7). */
.eyebrow[data-v-c56bf3ba] {
    margin: 0;
    color: var(--btly-text-brand);
}
.question[data-v-c56bf3ba] {
    margin: 0;
    color: var(--btly-text-primary);
}

/* ---------- answers (bottomSlot) ---------- */

/* Equal halves, never the metadata's 161.5: the design gives both instances `flex: 1 0 0` inside a
   12px gap, which two `minmax(0, 1fr)` columns express without reaching into `Button` — its root is
   `display: contents`, so the two <button>s are the grid items and stretch to their column. Their
   480px cap is Button's own rule and is deliberately not restated.
   Padding is NOT restated: the shell's `.bottom` supplies it at every width (height rework
   17.08.2026). It used to be applied here too, which doubled it. The gap below is this row's own —
   it spaces the two CTAs, not the shell's slot children. */
.actions[data-v-c56bf3ba] {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--btly-space-12);
    width: 100%;
}

/* Each CTA fills its track; past 480 the Button's label-wrap cap stopped the stretch — lift it,
   as in ModalSecondDiscipline. */
.actions[data-v-c56bf3ba] .btn {
    max-width: none;
}

.modal-viewport[data-v-3e10aa40] {
  position: relative;
  transform: translateZ(0);
  overflow: hidden;
  width: 100%;
  height: var(--3e10aa40-cssHeight);
}

/* Point 3 above: re-bind the scrim to this fake viewport. */
.modal-viewport[data-v-3e10aa40] .scrim {
  height: 100%;
}

/* The box itself is `shared/ModalViewport.vue`; only the WIDTH is this story's call. 375 is the
   design's mobile frame, and the Playground instance stays fluid on purpose: the shell keys its
   breakpoints off the iframe, not off this box, so pinning 375 there would render the md dialog
   squeezed into a phone — a state no real screen has. */
.vp-fixed[data-v-046762aa] {
  width: 375px;
}

/* PlaygroundFrame hugs (`width: fit-content`) and a `position: fixed` child contributes no
   intrinsic width, so the frame would collapse to its padding. Force the chain full-width. */
.pg-wrap[data-v-046762aa] {
  width: 100%;
}
.pg-wrap[data-v-046762aa] .frame-wrap {
  width: 100%;
}
.pg[data-v-046762aa] {
  display: flex;
  flex-direction: column;
  gap: 16px;
}

/* The opener sits centred where the modal will appear — same shape as the ModalLayout story. */
.stage[data-v-046762aa] {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100%;
}
.gallery[data-v-046762aa] {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
}
.cell[data-v-046762aa] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-046762aa] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}


/* Both frames hug (`width: fit-content`) and a `position: fixed` child gives them no intrinsic
   width, so they would collapse to their padding. Force the chain full-width. */
.wide[data-v-821cbb32] {
  width: 100%;
}
.wide[data-v-821cbb32] .frame-wrap {
  width: 100%;
}
.stack[data-v-821cbb32] {
  display: flex;
  flex-direction: column;
  gap: 16px;
}

/* The opener sits centred where the modal will appear — the reference demo's "Open Drawer". */
.stage[data-v-821cbb32] {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100%;
}

/* Stand-in for the media the DS has no component for — tokens only, never shipped. */
.demo-hero[data-v-821cbb32] {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 120px;
  border-radius: var(--btly-radius-20);
  background: var(--btly-surface-brand);
  color: var(--btly-text-secondary);
  font-size: 12px;
}
.demo-hero-fill[data-v-821cbb32] {
  height: 100%;
}
.demo-title[data-v-821cbb32] {
  margin: 0;
  color: var(--btly-text-primary);
}
.demo-body[data-v-821cbb32] {
  margin: 8px 0 0;
  color: var(--btly-text-secondary);
}
.cap[data-v-821cbb32] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
/* ModalOtp owns ONLY the OTP block inside ModalLayout's `contentSlot`. The scrim, the card, the close
   control, the field and both buttons are delegated and already ship their own visuals (brief §4b–§4d)
   — nothing from those tables is restated here. The three `base/transparent` fills of §4a are the
   initial value, so this component paints no background at all. */
.otp[data-v-ed8b7aab], .otp[data-v-ed8b7aab] * {
    box-sizing: border-box;
}

/* Figma's OTP root: one column. The 17.08.2026 compact keyboard composition tightened the gap from
   the OTP master's 64 to 16 (the instance draws a raw 16; space/16 is the sanctioned same value).
   `padding-bottom` is the KEYBOARD INSET — drawn as a raw 244/300 in Figma with the instruction
   "NEVER ship the number": the SFC computes it from visualViewport and it is 0 with the keyboard
   closed, so the sheet is a plain hugging bottom sheet again. */
.otp[data-v-ed8b7aab] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--btly-space-16);
    width: 100%;
    padding-bottom: var(--keyboard-inset, 0);
}

/* "otp top row" — the copy above the field. space/16 since the compact composition (was 24). */
.prompt[data-v-ed8b7aab] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--btly-space-16);
    width: 100%;
}

/* "text header" — headline + description. */
.copy[data-v-ed8b7aab] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--btly-space-8);
    width: 100%;
}

/* UA margins on <h2>/<p>: the DS ships no reset, so the flex gap above is the only spacing.
   Figma's `text-align: center` on the headline is inert there (the node hugs its own text inside an
   items-start column) and is deliberately not transcribed — brief §5. */
.title[data-v-ed8b7aab] {
    margin: 0;
    color: var(--btly-text-primary);
}

/* The old fixed 267px measure (§9-3) was RESOLVED on 17.08.2026: the description now fills its
   column and is one line by design. */
.description[data-v-ed8b7aab] {
    margin: 0;
    color: var(--btly-text-secondary);
}

/* Both buttons fill the column. `Button`'s own root is `display: contents`, so the `<button>` itself
   is the flex item here and `stretch` sizes it — no reaching into the child. Its label stays centred
   (`.btn` is `justify-content: center`). Figma's `justify-end` is inert in a column that hugs. */
.actions[data-v-ed8b7aab] {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: var(--btly-space-16);
    width: 100%;
}

/* Sheet-wide CTAs: past 480 the Button's label-wrap cap stopped the stretch — lift it, as in
   ModalSecondDiscipline. */
.actions[data-v-ed8b7aab] .btn {
    max-width: none;
}

/* The box itself is `shared/ModalViewport.vue`; only the WIDTH is this story's call. 375 is the
   design's mobile frame, and the Playground instance stays fluid on purpose: the shell keys its
   breakpoints off the iframe, not off this box, so pinning 375 there would render the md dialog
   squeezed into a phone — a state no real screen has. */
.vp-fixed[data-v-f726fadd] {
  width: 375px;
}

/* PlaygroundFrame hugs (`width: fit-content`) and a `position: fixed` child contributes no
   intrinsic width, so the frame would collapse to its padding. Force the chain full-width. */
.pg-wrap[data-v-f726fadd] {
  width: 100%;
}
.pg-wrap[data-v-f726fadd] .frame-wrap {
  width: 100%;
}
.pg[data-v-f726fadd] {
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.gallery[data-v-f726fadd] {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
}
.cell[data-v-f726fadd] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-f726fadd] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
/* ModalSecondDiscipline owns three subtrees only: the hero block, the offer column and the action
   stack. The scrim, the pop-up, the slot wrappers, the close control and both buttons are delegated
   (brief §4) — nothing from those tables is restated here.

   Per-variant delta is exactly ONE token: the hero accent. Everything else that differs between math
   and ela is copy. */
.second-discipline[data-v-104b3fac], .second-discipline[data-v-104b3fac] * {
    box-sizing: border-box;
}

/* Adds no box of its own — it IS the ModalLayout (same as StepBooking / StepRegistration). The
   `math` / `ela` modifier rides here so the DOM says which variant is on screen. */
.second-discipline[data-v-104b3fac] {
    display: contents;
}

/* ---------- hero (topSlot) ---------- */

/* "Extra practice": the illustration frame. The set's master still draws the block EMPTY (brief
   §9-2), but the funnel flow has since drawn the real hero (Design System: Client, funnel/test,
   pop-up `pic` 20982:4206): a 300-tier tint, the illustration inset 24 top / 28 right / 29 left, and
   a FIXED 191 height that crops the artwork at the bottom edge (padding-bottom 0, clipped). So:
   `height`, not the earlier `min-height` — grow-with-content was this file's own interim call from
   before the frame existed, and the drawn contract is bleed-and-crop: the 302x191 artwork inside the
   184-tall frame loses its bottom 31px. (The master's empty block was 191 tall — that number now
   belongs to the ILLUSTRATION's height, not the frame's.) 184 / 28 / 29 are layout geometry (no
   space/* step matches; 24 alone would bind, but the four sides are one drawn inset and are kept
   together). `#hero` stays a passthrough; the empty default renders the same flat tint. */
.hero[data-v-104b3fac] {
    display: flex;
    align-items: flex-start;
    width: 100%;
    height: 184px;
    padding: var(--btly-space-24) 28px 0 29px;
    overflow: hidden; /* not `clip`: Safari 16+ only — support-floor rule (2026-08-18) */
    /* Figma leaves this radius UNBOUND, and the ModalLayout wrapper it sits in binds radius/20. Bound
       to the identical-valued radius/16 rather than hardcoded, and recorded as a divergence: which of
       the two is the contract is a designer question (brief §9-3, README, docs/OPEN-QUESTIONS.md). */
    border-radius: var(--btly-radius-16);
}

/* The 300-tier tints the drawn hero uses. The discipline/* semantic family has no 300 step
   (surface 50 / surface-strong 100 / border 200 / accent 500 / text 600), and the frame binds the
   PRIMITIVE ultraviolet-300 — so these bind the brand tier directly (ProgressBar precedent) and the
   missing `discipline/{d}/accent-soft` token is a designer/token question (docs/OPEN-QUESTIONS.md).
   The math value is drawn (pic 20982:4206); ela mirrors it by the set's own one-token-delta rule —
   its frame is not drawn yet. */
.second-discipline.math .hero[data-v-104b3fac] { background: var(--btly-brand-ultraviolet-300);
}
.second-discipline.ela .hero[data-v-104b3fac] { background: var(--btly-brand-sky-300);
}

/* ---------- offer column (contentSlot) ---------- */

/* Gap is UNBOUND in Figma and identical to space/12 — bound here rather than left flush, and recorded
   as a divergence (brief §9-3). Same for `.benefits` below. */
.offer[data-v-104b3fac] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--btly-space-12);
    width: 100%;
}

/* UA margins on <h2>/<h3>/<p>/<ul>: the DS ships no reset, so the flex gaps are the only spacing. */
.headline[data-v-104b3fac] {
    margin: 0;
    color: var(--btly-text-primary);
}

/* text/brand in BOTH variants, as drawn and evidenced (brief §4) — in ela that reads purple against a
   blue hero, which is a designer question, not a code decision (brief §9-4). */
.accent[data-v-104b3fac] {
    color: var(--btly-text-brand);
}

/* `width: 100%`, never the drawn 335: that number is 359 − 2×12, i.e. the card measured inside
   ModalLayout's own contentSlot padding, so hardcoding it would apply that padding twice (brief §7). */
.card[data-v-104b3fac] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--btly-space-12);
    width: 100%;
    padding: var(--btly-space-16);
    overflow: hidden; /* not `clip`: Safari 16+ only — support-floor rule (2026-08-18) */
    /* border-width 1 is unbound too — same recorded divergence as the gaps above. */
    border: var(--btly-border-width-1) solid var(--btly-border-default);
    border-radius: var(--btly-radius-16);
    background: var(--btly-surface-secondary);
}
.card-title[data-v-104b3fac] {
    margin: 0;
    color: var(--btly-text-primary);
}

/* A real list — three benefits — so the UA list styling is reset here. */
.benefits[data-v-104b3fac] {
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-12);
    width: 100%;
    margin: 0;
    padding: 0;
    list-style: none;
}
.benefit[data-v-104b3fac] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--btly-space-2);
}
.benefit-title[data-v-104b3fac] {
    margin: 0;
    color: var(--btly-text-primary);
}
.benefit-text[data-v-104b3fac] {
    margin: 0;
    color: var(--btly-text-secondary);
}

/* ---------- actions (bottomSlot) ---------- */

/* Padding is NOT restated: the shell's `.bottom` supplies it at every width (height rework
   17.08.2026). It used to be applied here too, which doubled it. The gap below is this stack's own.
   Both fill the column: `Button`'s root is `display: contents`, so the <button> is the flex item and
   `stretch` sizes it — no reaching into the child. */
.actions[data-v-104b3fac] {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: var(--btly-space-12);
    width: 100%;
}

/* The sheet is viewport-wide, so past 480 the Button's own label-wrap cap started to bite and the
   CTAs stopped short of the drawn full-bleed row — lift it here, as the drawn intent is "fill the
   sheet" (same release as QuizStep's `.cta`). */
.actions[data-v-104b3fac] .btn {
    max-width: none;
}

/* PlaygroundFrame hugs (`width: fit-content`) and `ModalViewport`'s only child is a
   `position: fixed` scrim, which contributes no intrinsic width — so the frame would collapse to
   its padding. Force the chain full-width. */
.pg-wrap[data-v-dc525d28] {
  width: 100%;
}
.pg-wrap[data-v-dc525d28] .frame-wrap {
  width: 100%;
}

/* The Playground stays fluid on purpose: the shell keys its breakpoints off the IFRAME, not off this
   box, so pinning 375 there would draw the md dialog squeezed into a phone. The Gallery is a static
   showcase at the design's mobile frame, same as ModalOtp / ModalClarify. */
.vp-fixed[data-v-dc525d28] {
  width: 375px;
}

.gallery[data-v-8baffb8c] {
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-24);
}

/* `flex-start`, not the default stretch: a stretched pill would hide that it hugs its copy. */
.cell[data-v-8baffb8c] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--btly-space-8);
}
.cap[data-v-8baffb8c] {
    margin: 0;
    font-size: 12px;
    color: var(--btly-text-tertiary);
}
.row[data-v-8baffb8c] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--btly-space-8);
}
.preference-progress-bar[data-v-68261f86], .preference-progress-bar[data-v-68261f86] * {
    box-sizing: border-box;
}

/* One themed trio per variant — {c}/100 the row, {c}/200 the track, {c}/400 the badge and the fill.
   These are BRAND tokens because the design binds them there (the designer's call, per the DS skill);
   they are the whole difference between the five variants, so they are declared once, here, and every
   rule below reads them. Adding a hue = one block, nothing else. */
.preference-progress-bar.is-sunshine[data-v-68261f86] {
    --ppb-surface: var(--btly-brand-sunshine-100);
    --ppb-track: var(--btly-brand-sunshine-200);
    --ppb-accent: var(--btly-brand-sunshine-400);
}
.preference-progress-bar.is-green[data-v-68261f86] {
    --ppb-surface: var(--btly-brand-green-100);
    --ppb-track: var(--btly-brand-green-200);
    --ppb-accent: var(--btly-brand-green-400);
}
.preference-progress-bar.is-pink[data-v-68261f86] {
    --ppb-surface: var(--btly-brand-pink-100);
    --ppb-track: var(--btly-brand-pink-200);
    --ppb-accent: var(--btly-brand-pink-400);
}
.preference-progress-bar.is-sky[data-v-68261f86] {
    --ppb-surface: var(--btly-brand-sky-100);
    --ppb-track: var(--btly-brand-sky-200);
    --ppb-accent: var(--btly-brand-sky-400);
}
.preference-progress-bar.is-ultraviolet[data-v-68261f86] {
    --ppb-surface: var(--btly-brand-ultraviolet-100);
    --ppb-track: var(--btly-brand-ultraviolet-200);
    --ppb-accent: var(--btly-brand-ultraviolet-400);
}
.preference-progress-bar[data-v-68261f86] {
    display: flex;
    align-items: center;
    gap: var(--btly-space-12);
    width: 100%;
    padding: var(--btly-space-12);
    border-radius: var(--btly-radius-16);
    background: var(--ppb-surface);
}

/* 44x44 is drawn geometry, not a token — Figma binds no space variable to it, and the design's
   pitfalls forbid resizing it locally. Same convention as ProgressBar's raw 4px height. */
.badge[data-v-68261f86] {
    display: flex;
    flex-shrink: 0;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    border-radius: var(--btly-radius-12);
    background: var(--ppb-accent);
    color: var(--btly-icon-inverse);
}
.info[data-v-68261f86] {
    display: flex;
    flex: 1;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--btly-space-12);
    min-width: 0;
    padding-bottom: var(--btly-space-4);
}

/* The DS ships no UA reset, so the paragraph's margin is ours to clear. `nowrap` is the design's:
   the row height is fixed at 70 and the pitfalls forbid varying it, so the line must not wrap. */
.label[data-v-68261f86] {
    display: flex;
    align-items: center;
    gap: var(--btly-space-2);
    width: 100%;
    margin: 0;
    overflow: hidden;
    white-space: nowrap;
}
.label-text[data-v-68261f86] {
    flex-shrink: 0;
    color: var(--btly-text-secondary);
}

/* Truncating the VALUE rather than the label: the label is fixed copy the host chose, the value is
   data it cannot bound. Nothing in the design covers an overlong value — this keeps the drawn row
   height instead of blowing the card's width open. */
.label-value[data-v-68261f86] {
    min-width: 0;
    overflow: hidden;
    color: var(--btly-text-primary);
    text-overflow: ellipsis;
}
.track[data-v-68261f86] {
    position: relative;
    width: 100%;
    height: 6px;
    border-radius: var(--btly-radius-full);
    background: var(--ppb-track);
}
.fill[data-v-68261f86] {
    position: relative;
    height: 100%;
    border-radius: var(--btly-radius-full);
    background: var(--ppb-accent);
    transition: width 190ms ease-in-out;
}

/* The handle. A pseudo-element of the fill, pinned to its right edge — one width drives both, so
   the two can never be positioned independently. 12x12 is drawn geometry, like the badge. */
.fill[data-v-68261f86]::after {
    content: '';
    position: absolute;
    top: 50%;
    right: 0;
    width: 12px;
    height: 12px;
    border-radius: var(--btly-radius-full);
    background: var(--ppb-accent);
    transform: translate(50%, -50%);
}

/* The reveal — the control funnel's ScreenPlanChanges cascade, opt-in via `reveal`: the fill is painted at
   its value and plays the grow-from-zero once on mount, 900ms ease-out. `backwards` holds it at zero through
   `--ppb-reveal-delay` (row n of a list waits n × the list's stagger), so the rows fill one after another.
   The 190ms transition above still governs later value changes. */
.fill.is-reveal[data-v-68261f86] {
    animation: ppb-reveal-68261f86 900ms ease-out var(--ppb-reveal-delay, 0ms) backwards;
}
@keyframes ppb-reveal-68261f86 {
from {
        width: 0;
}
}
@media (prefers-reduced-motion: reduce) {
.fill[data-v-68261f86] {
        transition: none;
}
.fill.is-reveal[data-v-68261f86] {
        animation: none;
}
}

.gallery[data-v-5098f083] {
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-12);
}
.cap[data-v-5098f083] {
    margin: var(--btly-space-8) 0 0;
    font-size: 12px;
    color: var(--btly-text-tertiary);
}
.preference-progress-bar-list[data-v-7744dbba], .preference-progress-bar-list[data-v-7744dbba] * {
    box-sizing: border-box;
}

/* One declaration is the whole component. `space/12` is the shared rhythm across every place this
   list is used — the design's pitfalls forbid overriding it per usage. The wrapper paints nothing
   else: no surface, no padding, no radius, and the height follows the rows. */
.preference-progress-bar-list[data-v-7744dbba] {
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-12);
    width: 100%;
}

/* Bars are full-width, so the gallery is a vertical stack; the frame gives it a width. */
.gallery[data-v-78050bb1] {
  display: flex;
  flex-direction: column;
  gap: 16px;
}

/* Playground: fill the framed width (PlaygroundFrame is 380px, matching the Gallery). */
.gallery.pg[data-v-78050bb1] {
  width: 100%;
}
.cell[data-v-78050bb1] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-78050bb1] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}

/* Demo-only trigger (playground/ never ships) — PLAYGROUND.md rule 6: mark it demo-*, build it from
   tokens. It lives in the frame because #controls is not rendered inside __sandbox.html. */
.demo-next[data-v-78050bb1] {
  align-self: flex-start;
  padding: var(--btly-space-4) var(--btly-space-8);
  border: 1px solid var(--btly-border-default);
  border-radius: var(--btly-radius-8);
  background: var(--btly-surface-card);
  font-size: 12px;
  color: var(--btly-text-primary);
  cursor: pointer;
}
.quiz-header[data-v-5f406621], .quiz-header[data-v-5f406621] * {
    box-sizing: border-box;
}

/* Height hugs: 40px band + each rendered strip (8 by default, taller when its content is). */
.quiz-header[data-v-5f406621] {
    display: flex;
    flex-direction: column;
    align-items: center;
    width: 100%;
}
.top[data-v-5f406621],
.bottom[data-v-5f406621] {
    display: flex;
    align-items: center;
    gap: var(--btly-space-8);
    width: 100%;
    min-height: var(--btly-space-8);
    padding-inline: var(--btly-space-4);
}

/* Fixed 40 in Figma (min = max); SPACE_BETWEEN centres the logo between the side slots. */
.header[data-v-5f406621] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    width: 100%;
    height: var(--btly-space-40);
}

/* Side boxes render only when their slot is filled; a missing box lets justify-between shift the
   logo toward that edge (Figma: showLeadingSlot=false → logo left, showTrailingSlot=false → right).
   56 is a minimum — the slot hugs wider content (Figma: TrustpilotBadge, min-w 56). */
.leading[data-v-5f406621],
.trailing[data-v-5f406621] {
    display: inline-flex;
    align-items: center;
    flex-shrink: 0;
    gap: var(--btly-space-4);
    min-width: var(--btly-space-56);
    height: var(--btly-space-40);
}
.trailing[data-v-5f406621] {
    justify-content: flex-end;
}
.segmented-progress-bar[data-v-c0075695], .segmented-progress-bar[data-v-c0075695] * {
    box-sizing: border-box;
}

/* `width: 100%` for the same reason ProgressBar sets it: this component's home is QuizHeader's
   top/bottom strip, which is a FLEX ROW — as a flex item it would size to its content (`flex: 0 1
   auto`) and the bars would occupy ~82 of the 322 available, measured. Harmless anywhere else. */
.segmented-progress-bar[data-v-c0075695] {
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-6);
    width: 100%;
}
.bars[data-v-c0075695] {
    display: grid;
    grid-auto-flow: column;
    grid-auto-columns: 1fr;
    gap: var(--btly-space-4);
}
.title[data-v-c0075695] {
    margin: 0;
    color: var(--btly-text-tertiary);
    text-align: center;
}

.cell[data-v-eea8471d] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-eea8471d] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
.counter[data-v-eea8471d] {
  color: var(--btly-text-tertiary);
}

/* Playground: fill the framed width (PlaygroundFrame is 380px, matching the Gallery). */
.pg[data-v-eea8471d] {
  width: 100%;
}
.quiz-layout[data-v-4f214934], .quiz-layout[data-v-4f214934] * {
    box-sizing: border-box;
}

/* The same defence one line up, for type instead of layout. `font-kerning` and `font-feature-settings`
   inherit, so a host reset that turns them off — legacy `div { font-kerning: none }` rules written for
   another family are common — reaches every node the DS renders, slotted content included, and lays
   Mona Sans out unkerned: ~0.4% wider than Figma draws it. That overflowed QuizStep's 320px headline
   box by 2px and broke a drawn two-line title onto a third (nuxt-land-app, 2026-09-17). No DS
   component sets either property, so restoring the browser defaults costs nothing. */
.quiz-layout[data-v-4f214934], .quiz-layout[data-v-4f214934] * {
    font-kerning: normal;
    font-feature-settings: normal;
}

/* Fluid shell: Figma's fixed 375x655 is the reference canvas, not a size to emit (README gaps).
   The shell owns the device height (svh; vh = pre-2022 fallback) and GROWS with its content — the
   document is the scroller. `overflow: clip` is Figma's `clipsContent: true` without making the shell
   a scroll container: `auto` did (any value but visible/clip does), and since the shell never scrolled
   itself, all it ever did was trap `position: sticky` descendants — QuizStep's `#bottomSlot` CTA stuck
   to the end of the content instead of the screen (measured 2026-09-16, spec
   2026-09-16-quiz-step-sticky-bottom-design.md). Padding is bound to space/0, so none is declared. */
.quiz-layout[data-v-4f214934] {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: center;
    width: 100%;
    min-height: 100vh;
    min-height: 100svh;
    gap: var(--btly-space-16);
    overflow: clip;
    background: var(--btly-surface-secondary);
}

/* The band owns the side inset: the slot frame `19084:7595` binds padding 4/16/0 + gap 8, which
   get_design_context hides (it renders slots as bare boxes) — read from Figma dev mode instead.
   Height stays content-driven; the design's fixed 56 is 4 + a 52px header, see README gap 3. */
.header[data-v-4f214934] {
    display: flex;
    align-items: flex-start;
    flex-shrink: 0;
    gap: var(--btly-space-8);
    width: 100%;
    /* 482 is raw in Figma (no width tokens exist) — the designer's column cap for wide screens. */
    max-width: 482px;
    min-height: var(--btly-space-56);
    padding: var(--btly-space-4) var(--btly-space-16) var(--btly-space-0);
}

/* min-height: 0 is what Figma's min-h-px on a flexible auto-layout child means in code.
   A flex COLUMN, so a step that must fill the region (view=magic) grows by `flex` — growth carried
   by flex survives engines where a percentage min-height against a flex-sized parent resolves to
   auto (the WebKit family that collapsed StepMagic's card to a sliver on a real iPhone, 2026-08-18).
   Steps that hug (view=answer) are unaffected: their basis is auto and nothing makes them grow. */
.content[data-v-4f214934] {
    display: flex;
    flex-direction: column;
    /* `auto` basis, not `0`: identical on a healthy engine (this is the only grower), but where the
       engine fails to hand out free space `0` collapses the WHOLE content region to nothing, while
       `auto` degrades to hugging the steps — the same insurance the steps themselves carry. */
    flex: 1 0 auto;
    min-height: 0;
    width: 100%;
    max-width: 482px;
    /* Entrance: the content band fades in on every mount — the scrim's own `btly-modal-overlay-in`
       values (450ms, the ModalLayout sheet curve), so screens and sheets speak one motion language.
       The header band stays static: the brand chrome does not jump between steps. In the funnel a
       step change mounts a fresh QuizLayout, which makes this the de-facto step transition. It
       lives HERE because this is the body's only real box — every Step* shell above is
       `display: contents`. Opacity only, no transform: the band can never become the containing
       block for a position:fixed descendant, and the default fill-mode leaves nothing behind. */
    animation: btly-quiz-content-enter-4f214934 450ms cubic-bezier(0.32, 0.72, 0, 1);
}
@keyframes btly-quiz-content-enter-4f214934 {
from {
        opacity: 0;
}
}

/* Motion is a preference, not chrome: reduced-motion visitors get a static mount. */
@media (prefers-reduced-motion: reduce) {
.content[data-v-4f214934] {
        animation: none;
}
}
.quiz-step[data-v-33c92125], .quiz-step[data-v-33c92125] * {
    box-sizing: border-box;
}

/* Fluid: Figma's 375x390 (answer) / 375x583 (magic) are the reference canvas, not sizes to emit.
   Root padding-block, radius and fill are bound to space/0 / radius/0 / none, so none are declared. */
.quiz-step[data-v-33c92125] {
    display: flex;
    flex-direction: column;
    align-items: center;
    width: 100%;
}

/* ---------- view=answer ---------- */

/* `position: relative` + `min-height` are what the floating `.bottom` pins against; with no definite
   height from the parent the step hugs its content and the bottom area lands under it. */
.quiz-step.view-answer[data-v-33c92125] {
    position: relative;
    /* `flex` is the primary fill carrier (QuizLayout's content region is a flex column); the
       min-height stays as the fallback for non-flex hosts. Same rule as view-magic below — on
       engines where the percentage resolves to auto the step hugged and the floating `.bottom`
       band rode up onto the content. */
    flex: 1 0 auto;
    gap: var(--btly-space-24);
    min-height: 100%;
    padding-inline: var(--btly-space-16);
}
.headline[data-v-33c92125] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--btly-space-8);
    width: 100%;
}

/* max-width / min-height are unbound design constants (no token covers 320/32). Figma's max-height 96
   + truncate is deliberately NOT implemented — the question must never be cut (maintainer, 2026-08-13). */
.title[data-v-33c92125] {
    margin: 0;
    width: 100%;
    max-width: 320px;
    min-height: 32px;
    color: var(--btly-text-primary);
    text-align: center;
}

/* Figma's `description` slot is a centred row with gap space/8; with its single text child the gap
   never applies, so the slot wrapper is the text box itself (its own rows bring their own gap). */
.description[data-v-33c92125] {
    margin: 0 auto;
    max-width: 312px;
    min-height: 24px;
    color: var(--btly-text-tertiary);
    text-align: center;
}

/* Figma's 246px is a placeholder box (brief §9-5) — the body sizes to its content. */
.content[data-v-33c92125] {
    width: 100%;
}

/* Sticks to the SCREEN's bottom edge, in flow, as the last child of the column. Figma pins the band
   "absolute" at the artboard's bottom — on the 375×655 canvas the step's edge IS the screen's edge, but a
   7-row list scrolls: an absolute band travelled below the fold with the step and covered the last row
   once reached (spec 2026-09-16-quiz-step-sticky-bottom-design.md). Sticky keeps the CTA in view while the
   body scrolls and settles under the last content at the end; with short content `margin-top: auto`
   sends it to the column's end, exactly where the absolute band sat, so every drawn screen is unchanged.
   The step's own padding-inline gives the drawn 343 CTA; padding-bottom is the answer variant's drawn
   bottom inset (0/16/16/16). Transparent, as drawn — a scrim is a design call. */
.bottom[data-v-33c92125] {
    position: sticky;
    z-index: 1;
    bottom: 0;
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-12);
    width: 100%;
    margin-top: auto;
    padding-bottom: var(--btly-space-16);
}

/* ---------- view=magic ---------- */

/* Still fills the height QuizLayout gives it, but since the 19.08.2026 rework the children HUG and
   the stack is pinned to the BOTTOM (`justify-content: flex-end`): on a tall viewport the canvas
   shows above the illustration, and the CTA always sits at the screen's bottom. `flex` is the
   primary carrier — QuizLayout's content region is a flex column; the min-height stays as the
   fallback for non-flex hosts (bounded demo frames). */
.quiz-step.view-magic[data-v-33c92125] {
    flex: 1 0 auto;
    justify-content: flex-end;
    min-height: 100%;
}

/* 320px is a real contract, not a placeholder: the deliberate -32px bleed below only works against
   a known image height (brief §9-5; 240/-12 → 320/-32 per Figma master, 2026-08-17). Unbound in Figma — no token covers 320. */
.image[data-v-33c92125] {
    flex-shrink: 0;
    width: 100%;
    height: 320px;
    margin-bottom: calc(-1 * var(--btly-space-32));
    /* The band is a fixed window, never a growable box: whatever a consumer puts in the slot, it
       cannot paint outside — the part that slides under the card was never visible anyway (the card
       is opaque and paints above). `hidden`, not `clip`: the funnels serve ad traffic on ANY device,
       and `clip` is Safari 16+ — on older WebKit the whole declaration drops and the band opens up
       (maintainer's support-floor call, 2026-08-18). */
    overflow: hidden;
}

/* `position: relative` is load-bearing: it paints the card and its upward shadow ABOVE the image
   that bleeds under it. Shadow geometry is the named Figma effect `shadow`; only its colour is a
   token (the DS has no composite shadow token). Top radius should be bound to radius/32 in Figma. */
.card[data-v-33c92125] {
    position: relative;
    display: flex;
    /* HUG (19.08.2026 rework): the card follows its content instead of stretching — free height goes
       ABOVE the image band, not into the card. */
    flex: 0 0 auto;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--btly-space-24);
    width: 100%;
    padding: var(--btly-space-24) var(--btly-space-16) var(--btly-space-16);
    /* `hidden`, not `clip` — same support-floor rule as `.image` above. */
    overflow: hidden;
    border-radius: var(--btly-radius-32) var(--btly-radius-32) 0 0;
    background: var(--btly-surface-card);
    box-shadow: 0 -2px 40px 0 var(--btly-effects-shadow);
}

/* HUG (19.08.2026 rework, was the card's free-height absorber). The slot's own rhythm is the
   design's: gap space/16, side padding 8 (space/8 — the drawn raw 8's sanctioned value). */
.view-magic .content[data-v-33c92125] {
    display: flex;
    flex-direction: column;
    flex: 0 0 auto;
    gap: var(--btly-space-16);
    padding-inline: var(--btly-space-8);
}

/* actionSlot (19.08.2026): fill x hug, gap space/8 — caption or social proof stacks above the CTA.
   Button's `.btn-wrap` is `display: contents`, so its inner `.btn` is the child that must stretch;
   the deep rule covers a consumer's own Button in the slot the same way. */
.action[data-v-33c92125] {
    display: flex;
    flex-direction: column;
    flex-shrink: 0;
    gap: var(--btly-space-8);
    width: 100%;
}
.action[data-v-33c92125] .btn {
    width: 100%;
}

/* Figma's reference canvas — the definite height #content's flex: 1 0 0 needs to divide. */
.screen[data-v-e6661dda] {
  width: 375px;
  height: 655px;
  overflow: hidden;
  border: 1px solid var(--btly-border-default);
  border-radius: 12px;
}

/* The box IS the device viewport here, so the shell's 100svh yields to it. */
.screen[data-v-e6661dda] .quiz-layout {
  min-height: 100%;
}
.row[data-v-e6661dda] {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
}
.cell[data-v-e6661dda] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-e6661dda] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
.counter[data-v-e6661dda] {
  color: var(--btly-text-tertiary);
}

/* Demo stand-ins for slotted DS components. */
.demo-content[data-v-e6661dda] {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 246px;
  color: var(--btly-text-tertiary);
  background: var(--btly-surface-tertiary);
  border-radius: 12px;
}
.demo-line[data-v-e6661dda] {
  color: var(--btly-text-tertiary);
}

/* The full 375x655 reference canvas for the entrance cell — here the SHELL is real, so the box is
   the device viewport and QuizLayout's 100svh yields to it (same override as the QuizLayout story). */
.shell[data-v-2955cd7a] {
  width: 375px;
  height: 655px;
  overflow: hidden;
  border: 1px solid var(--btly-border-default);
  border-radius: 12px;
}
.shell[data-v-2955cd7a] .quiz-layout {
  min-height: 100%;
}
.counter[data-v-2955cd7a] {
  color: var(--btly-text-tertiary);
}

/* Same replay control the ProgressBar / StepQuestion stories use. */
.demo-next[data-v-2955cd7a] {
  align-self: flex-start;
  padding: var(--btly-space-4) var(--btly-space-8);
  border: 1px solid var(--btly-border-default);
  border-radius: var(--btly-radius-8);
  background: var(--btly-surface-card);
  font-size: 12px;
  color: var(--btly-text-primary);
  cursor: pointer;
}

/* The box QuizLayout's content slot gives a step on the 375x655 reference canvas. */
.screen[data-v-2955cd7a] {
  width: 375px;
  height: 583px;
  overflow: hidden;
  background: var(--btly-surface-secondary);
}
.row[data-v-2955cd7a] {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
}
.cell[data-v-2955cd7a] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-2955cd7a] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}

/* Slot demo: the caption centres above the full-width CTA. */
.demo-action-note[data-v-2955cd7a] {
  align-self: center;
}

/* Schematic slot box for the Playground: shows WHERE a slot sits without pulling in real content. */
.demo-slot[data-v-2955cd7a] {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100%;
  min-height: 96px;
  border: 1px dashed var(--btly-border-default);
  border-radius: 12px;
  color: var(--btly-text-tertiary);
  font-size: 12px;
}

/* Stand-in for the magic illustration — the DS ships no component for it. No background:
   Figma's imageSlot is transparent; the dashed box just marks the band, like .demo-slot. */
.demo-image[data-v-2955cd7a] {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100%;
  border: 1px dashed var(--btly-border-default);
  border-radius: 12px;
  color: var(--btly-text-tertiary);
  font-size: 12px;
}
.btly-radio[data-v-8c124371], .btly-radio[data-v-8c124371] * {
  box-sizing: border-box;
}
.btly-radio[data-v-8c124371] {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 20px;
  height: 20px;
  font-size: 12px;
  color: var(--btly-action-tertiary-default);
}
.native[data-v-8c124371] {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 24px;
  height: 24px;
  transform: translate(-50%, -50%);
  margin: 0;
  opacity: 0;
  cursor: pointer;
}
.native[data-v-8c124371]:disabled {
  cursor: not-allowed;
}
.box[data-v-8c124371] {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  pointer-events: none;
}
.box[data-v-8c124371] svg {
  display: block;
  height: 1em;
  width: auto;
}
.btly-radio.is-checked .box[data-v-8c124371] {
  color: var(--btly-action-primary-default);
}
.btly-radio[data-v-8c124371]::before {
  content: '';
  position: absolute;
  left: 50%;
  top: 50%;
  width: 24px;
  height: 24px;
  transform: translate(-50%, -50%);
  border-radius: 50%;
  background: var(--btly-surface-brand);
  opacity: 0;
}
.btly-radio[data-v-8c124371]:not(.is-disabled):has(.native:focus-visible)::before {
  opacity: 1;
}
@media (hover: hover) {
.btly-radio[data-v-8c124371]:not(.is-disabled):hover::before {
    opacity: 1;
}
.btly-radio:not(.is-disabled):hover .box[data-v-8c124371] {
    color: var(--btly-action-tertiary-hover);
}
.btly-radio:not(.is-disabled).is-checked:hover .box[data-v-8c124371] {
    color: var(--btly-action-primary-hover);
}
}
.btly-radio.is-disabled .box[data-v-8c124371] {
  color: var(--btly-action-tertiary-disabled);
}

.demo[data-v-a179cafc] {
  display: inline-flex;
  cursor: pointer;
}

/* Gallery = static, non-interactive samples. */
.grid[data-v-a179cafc] {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
  pointer-events: none;
}
.cell[data-v-a179cafc] {
  display: flex;
  flex-direction: column;
  gap: 8px;
  align-items: flex-start;
}
.cap[data-v-a179cafc] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}

/* Playground: fill the framed width (PlaygroundFrame is 380px, matching the Gallery). */
.pg[data-v-caa58e5e] {
  width: 100%;
}

.cell[data-v-fc0e869b] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-fc0e869b] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
.pg[data-v-fc0e869b] {
  width: 360px;
}
.model[data-v-fc0e869b] {
  margin: 12px 0 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}

/* Demo-only trigger (playground/ never ships) — PLAYGROUND.md rule 6: mark it demo-*, build it from
   tokens. Stands in for the funnel's own "Need a better date?" strip. */
.demo-footer[data-v-fc0e869b] {
  width: 100%;
  padding: var(--btly-space-8) var(--btly-space-12);
  border: none;
  border-radius: var(--btly-radius-8);
  background: var(--btly-surface-brand);
  font-size: 12px;
  text-align: left;
  color: var(--btly-text-primary);
  cursor: pointer;
}
/* Row: [avatar stack] gap-8 [sentence]. Height hugs its content (24px in Figma), so nothing is fixed here. */
.social-proof[data-v-3eb80b4d], .social-proof[data-v-3eb80b4d] * {
    box-sizing: border-box;
}
.social-proof[data-v-3eb80b4d] {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--btly-space-8);
}

/* The -7px avatar overlap is unbound and off the space scale — not shipped; see docs/OPEN-QUESTIONS.md. */
.photos[data-v-3eb80b4d] {
    display: flex;
    flex-shrink: 0;
    align-items: center;
}

/* Figma has white-space: nowrap; dropped so a narrow viewport wraps instead of overflowing (README). */
.text[data-v-3eb80b4d] {
    margin: 0;
    color: var(--btly-text-primary);
    text-align: center;
}

.gallery[data-v-8eeefbf2] {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 24px;
}
.cell[data-v-8eeefbf2] {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 8px;
}
.cap[data-v-8eeefbf2] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
/* Vendor logo fills, token-bound per the node's variable refs (brief §4.2; see §9-1 for the
 * description-vs-binding conflict the bindings win). The wordmark was re-bound in Figma on 2026-09-16
 * from `icon/default` (grey) to `base/black`; the star keeps its two greens. */
.tp-logo[data-v-806e07d4], .tp-logo[data-v-806e07d4] * {
    box-sizing: border-box;
}
.tp-logo[data-v-806e07d4] {
    display: block;
}
.star-primary[data-v-806e07d4] {
    fill: var(--btly-brand-green-500-primary);
}
.star-deep[data-v-806e07d4] {
    fill: var(--btly-brand-green-800);
}
.wordmark[data-v-806e07d4] {
    fill: var(--btly-base-black);
}
/* TrustpilotScore — one hugging 20px row: vendor logo · five pinned stars · score. Tokens only. */
.tp-score[data-v-ffd6d23d], .tp-score[data-v-ffd6d23d] * {
    box-sizing: border-box;
}
.tp-score[data-v-ffd6d23d] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--btly-space-10);
}

/* Figma marks every child shrink-0: the row never compresses. */
.logo[data-v-ffd6d23d] {
    flex-shrink: 0;
}
.rating-score[data-v-ffd6d23d] {
    display: inline-flex;
    flex-shrink: 0;
    align-items: center;
    gap: var(--btly-space-6);
}
.value[data-v-ffd6d23d] {
    color: var(--btly-text-primary);
    text-align: center;
    white-space: nowrap;
}
/* Figma binds the leaf to `gray/200` — the brand palette's gray, as TrustpilotStar's empty half
 * already does for art; no semantic role exists for ornament (brief §9-4, docs/OPEN-QUESTIONS.md). */
.laurel-leaf[data-v-80070469], .laurel-leaf[data-v-80070469] * {
    box-sizing: border-box;
}
.laurel-leaf[data-v-80070469] {
    display: block;
}
.leaf[data-v-80070469] {
    fill: var(--btly-brand-gray-200);
}
/* Static badge: laurel · [slot + title + subtitle] · laurel. The laurels are fixed art that never
 * shrinks, so they over/underhang the column exactly as drawn (brief §7). */
.proof-badge[data-v-f8757541], .proof-badge[data-v-f8757541] * {
    box-sizing: border-box;
}
.proof-badge[data-v-f8757541] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--btly-space-10);
}

/* One asset twice; the left copy is the mirror Figma draws with scaleY(-1) + rotate(180deg). */
.laurel[data-v-f8757541] {
    flex-shrink: 0;
}
.laurel.is-mirrored[data-v-f8757541] {
    transform: scaleX(-1);
}
.content[data-v-f8757541] {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: var(--btly-space-10);
}

/* FILL width in both variants. `awards` also fixes 44px with no token behind it — left out rather
 * than hardcoded, so the box hugs what fills the slot instead (brief §9-3). */
.top-slot[data-v-f8757541] {
    display: flex;
    align-self: stretch;
    align-items: center;
    justify-content: center;
    gap: var(--btly-space-10);
}
.text-group[data-v-f8757541] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--btly-space-2);
}

/* Both lines HUG and never wrap in Figma: long copy widens the badge, it does not break. */
.title[data-v-f8757541], .subtitle[data-v-f8757541] {
    margin: 0;
    white-space: nowrap;
}
.title[data-v-f8757541] {
    color: var(--btly-text-secondary);
}
.subtitle[data-v-f8757541] {
    color: var(--btly-text-tertiary);
    text-align: center;
}

.gallery[data-v-8b4afe5e] {
  display: flex;
  flex-direction: column;
  gap: 24px;
  align-items: center;
}
.cell[data-v-8b4afe5e] {
  display: flex;
  flex-direction: column;
  gap: 8px;
  align-items: center;
}
.cap[data-v-8b4afe5e] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
.toast[data-v-b88f0c8e], .toast[data-v-b88f0c8e] * {
    box-sizing: border-box;
}

/* Width is the container's: Figma's 292 is the set frame, and its min 280 / max 343 are unbound raw
 * px whose owner (toast vs toast stack) is still open — see docs/OPEN-QUESTIONS.md. */
.toast[data-v-b88f0c8e] {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    width: 100%;
    gap: var(--btly-space-2);
    border-radius: var(--btly-radius-8);
    overflow: hidden;
}

/* --toast-accent is the one value that varies with `type`; the glyph, the progress fill and the
 * derived track colour all read it. */
.toast.type-success[data-v-b88f0c8e] {
    --toast-accent: var(--btly-status-success-accent);
    background: var(--btly-status-success-bg-strong);
}
.toast.type-warning[data-v-b88f0c8e] {
    --toast-accent: var(--btly-status-warning-accent);
    background: var(--btly-status-warning-bg-strong);
}
.toast.type-error[data-v-b88f0c8e] {
    --toast-accent: var(--btly-status-error-accent);
    background: var(--btly-status-error-bg-strong);
}
.toast.type-info[data-v-b88f0c8e] {
    --toast-accent: var(--btly-status-info-accent);
    background: var(--btly-status-info-bg-strong);
}

/* Right padding (16) is narrower than the 32px close button, so a long one-line title can slide
 * under it — shipped as drawn, see docs/OPEN-QUESTIONS.md. */
.row[data-v-b88f0c8e] {
    display: flex;
    align-items: flex-start;
    width: 100%;
    gap: var(--btly-space-4);
    padding: var(--btly-space-4) var(--btly-space-16) var(--btly-space-4) var(--btly-space-4);
    background: var(--btly-base-transparent);
}
.glyph[data-v-b88f0c8e] {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: var(--btly-space-24);
    height: var(--btly-space-24);
    padding: var(--btly-space-2);
    color: var(--toast-accent);
    overflow: hidden;
}

/* Both texts inherit their colour from here — neither text node binds its own in Figma. */
.text[data-v-b88f0c8e] {
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-2);
    flex: 1 0 0;
    min-width: 0;
    padding-top: var(--btly-space-2);
    color: var(--btly-text-primary);
    background: var(--btly-base-transparent);
}
.close[data-v-b88f0c8e] {
    position: absolute;
    top: 0;
    right: 0;
}

/* Figma leaves the track an unbound rgba = the accent at 24% alpha; derived rather than hardcoded so
 * it still themes per mode — see docs/OPEN-QUESTIONS.md. */
.track[data-v-b88f0c8e] {
    width: 100%;
    height: var(--btly-space-2);
    border-radius: var(--btly-radius-2);
    background: color-mix(in srgb, var(--toast-accent) 24%, transparent);
    overflow: hidden;
}

/* Fill width is set inline from the clamped `progress`. The default timing mirrors ProgressBar's
 * `.fill`, so a caller stepping `progress` in jumps gets the same easing as every other DS bar.
 *
 * A caller that instead rewrites `progress` every frame must set `--toast-bar-transition: none` on any
 * ancestor (ToastProvider's ToastItem does). Easing a per-frame value makes the paint trail the real
 * value permanently, and the trail cashes out as a visible jump forward the instant the value stops —
 * which is exactly what a hover-to-pause does. The fallback lives in the `var()` and NOT in a `.toast`
 * declaration on purpose: a property set on the element itself would outrank the ancestor's override. */
.bar[data-v-b88f0c8e] {
    height: 100%;
    border-radius: var(--btly-radius-2);
    background: var(--toast-accent);
    transition: var(--toast-bar-transition, width 190ms ease-in-out);
}
@media (prefers-reduced-motion: reduce) {
.bar[data-v-b88f0c8e] {
        transition: none;
}
}
.step-booking[data-v-2f0a5847], .step-booking[data-v-2f0a5847] * {
    box-sizing: border-box;
}

/* StepBooking adds no box of its own — it IS the QuizLayout. `contents` lets QuizLayout's
   min-height resolve against the screen instead of collapsing (same as StepRegistration/StepMagic). */
.step-booking[data-v-2f0a5847] {
    display: contents;
}

/* QuizStep's content slot: FormBooking, then the consent row as its sibling (Figma: gap space/16). */
.body[data-v-2f0a5847] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--btly-space-16);
    width: 100%;
}

/* Figma aligns the 24px box to the START, i.e. to the sentence's first line, not to its 3-line block.
   A <label>, so the whole sentence is the tap target the 24px box alone would not give on mobile. */
.consent[data-v-2f0a5847] {
    display: flex;
    align-items: flex-start;
    gap: var(--btly-space-4);
    width: 100%;
    margin: 0;
    cursor: pointer;
}

/* The plain legal line (second-kid screen) has no box to toggle, so it is not a pointer target. */
.consent.no-box[data-v-2f0a5847] {
    cursor: auto;
}

/* Loading stands in for the whole form, so it holds the column's width and centres the caller's
   animation. Height is content-driven: the DS ships no spinner and must not reserve a size for one. */
.loader[data-v-2f0a5847] {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    padding: var(--btly-space-32) var(--btly-space-0);
}

/* The box must keep its drawn size when the sentence wraps. */
.consent[data-v-2f0a5847] .btly-checkbox {
    flex-shrink: 0;
}

/* flex + min-width:0 is what Figma's FILL means for a text node that wraps (brief §7). */
.text[data-v-2f0a5847] {
    flex: 1;
    min-width: 0;
    color: var(--btly-text-secondary);
}

/* Fixed mobile frame — the Figma frame size — so the inner QuizLayout has a bounded height. */
.frame[data-v-be79ec5b] {
  box-sizing: border-box;
  width: 375px;
  height: 690px;
  overflow: hidden;
}

/* The box IS the device viewport here, so the shell's 100svh yields to it — and QuizLayout's own
   `overflow: auto` becomes the real scroll container, which is what this screen expects (§3: the
   consent paragraph ends at the frame edge and the screen scrolls rather than fitting). */
.frame[data-v-be79ec5b] .quiz-layout {
  min-height: 100%;
}
.row[data-v-be79ec5b] {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
}
.cell[data-v-be79ec5b] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-be79ec5b] {
  margin: 0;
  max-width: 375px;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
/* White pill: [star + rating + caption] | divider | [count + caption], 24px tall.
 * All values are Figma-bound semantic tokens; the two heights use the space scale
 * (repo precedent: TrustPilotStar's 16×16 box = --btly-space-16). */
.tp-badge[data-v-71707d34], .tp-badge[data-v-71707d34] * {
    box-sizing: border-box;
}
.tp-badge[data-v-71707d34] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--btly-space-6);
    height: var(--btly-space-24);
    padding: var(--btly-space-0) var(--btly-space-6) var(--btly-space-0) var(--btly-space-4);
    border: var(--btly-border-width-1) solid var(--btly-border-default);
    border-radius: var(--btly-radius-8);
    background: var(--btly-surface-card);
    color: var(--btly-text-secondary);
    white-space: nowrap;
}
.group[data-v-71707d34] {
    display: inline-flex;
    align-items: center;
    gap: var(--btly-space-4);
}
.divider[data-v-71707d34] {
    flex-shrink: 0;
    width: var(--btly-border-width-1);
    height: var(--btly-space-16);
    background: var(--btly-border-default);
}
.step-first[data-v-3ca57509], .step-first[data-v-3ca57509] * {
    box-sizing: border-box;
}

/* StepFirst adds no box of its own — it IS the QuizLayout. `contents` lets QuizLayout's
   min-height:100% resolve against StepFirst's parent (the screen), instead of collapsing. */
.step-first[data-v-3ca57509] {
    display: contents;
}

/* Two-tone title: the brand-coloured lead words (rest inherits QuizStep's text/primary). */
.step-first .brand[data-v-3ca57509] {
    color: var(--btly-text-brand);
}


/* Fixed mobile frame so the inner QuizLayout has a bounded height.
   708 = the Figma StepFirst screen (19899-6911) — 655 clipped the disclaimer. */
.frame[data-v-5c09cd8e] {
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  gap: 8px;
  width: 375px;
  height: 708px;
  overflow: hidden;
}

/* Media tiles hug at 127 instead of 88, so the grid is 39px taller per row (two rows here).
   760 = the Figma exp-139 screen (18551:43750, 728) plus headroom for the wrapped third tile. */
.frame--tall[data-v-5c09cd8e] {
  height: 760px;
}

/* The box IS the device viewport here, so the shell's 100svh yields to it. */
.frame[data-v-5c09cd8e] .quiz-layout {
  min-height: 100%;
}
.row[data-v-5c09cd8e] {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
}

/* Captions sit outside .frame so the fixed 708px box holds only the screen. */
.cap[data-v-5c09cd8e] {
  margin: 0 0 8px;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
.brand[data-v-5c09cd8e] {
  color: var(--btly-text-brand);
}

/* Demo stand-in for the age artwork the DS does not ship: a 127-tall silhouette that makes the
   media hug visible. Tokens only — a real tile carries a cut-out photo on a transparent background. */
.demo-photo[data-v-5c09cd8e] {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  gap: 6px;
  width: 100%;
  height: 127px;
  padding-top: 16px;
}
.demo-photo__head[data-v-5c09cd8e] {
  width: 40px;
  height: 40px;
  border-radius: var(--btly-radius-full);
  background: var(--btly-icon-muted);
}
.demo-photo__body[data-v-5c09cd8e] {
  width: 72px;
  height: 56px;
  border-radius: var(--btly-radius-16) var(--btly-radius-16) 0 0;
  background: var(--btly-icon-muted);
}
.step-magic[data-v-256e3d26], .step-magic[data-v-256e3d26] * {
    box-sizing: border-box;
}

/* StepMagic adds no box of its own — it IS the QuizLayout. `contents` keeps this wrapper out of the
   layout entirely, so QuizLayout's own device height (svh) and scrolling stay intact. */
.step-magic[data-v-256e3d26] {
    display: contents;
}

/* No other rule belongs here: every painted pixel of this screen comes from a nested DS component
   (QuizLayout's surface, QuizStep's card + shadow + image bleed, Button's CTA, ButtonBack's glyph),
   and a preset must not restate a nested component's tokens. */

/* Fixed mobile frame — the Figma frame size — so the inner QuizLayout has a bounded height. */
.frame[data-v-35443b6f] {
  box-sizing: border-box;
  width: 375px;
  height: 655px;
  overflow: hidden;
}

/* The box IS the device viewport here, so the shell's 100svh yields to it. */
.frame[data-v-35443b6f] .quiz-layout {
  min-height: 100%;
}

/* Stand-in for the per-usage artwork: the slot reserves 320px whether or not it is filled. */
.demo-illustration[data-v-35443b6f] {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100%;
  font-size: 64px;
  background: var(--btly-surface-brand);
  border-radius: var(--btly-radius-16);
}
.demo-copy[data-v-35443b6f] {
  margin: 0;
  text-align: center;
  color: var(--btly-text-primary);
}
.row[data-v-35443b6f] {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
}
.cell[data-v-35443b6f] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-35443b6f] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
/* StepProgress owns one subtree: the content column (headline + progress rows + review strip). The
   shell, the header, every progress row, every card and the whole overlay are delegated (brief §4),
   so none of their tokens is restated here. */
.step-progress[data-v-c512aa46], .step-progress[data-v-c512aa46] * {
    box-sizing: border-box;
}

/* Adds no box of its own — it IS the QuizLayout, plus a fixed overlay. `contents` lets QuizLayout's
   min-height resolve against the screen instead of collapsing (same as StepMagic / StepBooking). */
.step-progress[data-v-c512aa46] {
    display: contents;
}

/* Figma's unnamed `Frame 2147203646`, filling QuizLayout's content area: rows at the top, review strip
   at the bottom. `min-height: 100%` is this repo's translation of a FILL child (QuizStep does the
   same). Its drawn cross-axis CENTER is inert — both children are full-width — so `stretch` stands. */
.body[data-v-c512aa46] {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    /* `flex` is the primary fill carrier (QuizLayout's content region is a flex column); the
       min-height stays as the fallback for non-flex hosts. Without it, on engines where the
       percentage resolves to auto, the column hugged and `space-between` had no space to give —
       the review strip sat right under the rows instead of the bottom (real device, 2026-08-18). */
    flex: 1 0 auto;
    min-height: 100%;
    padding-bottom: var(--btly-space-16);
}

/* topContent. The 16px side inset that other screens inherit from QuizStep is this frame's own
   padding here, on all four sides. Both children stretch to the column, which is the drawn 343
   (= 375 - 2x16), so no width is emitted. */
.top[data-v-c512aa46] {
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-24);
    padding: var(--btly-space-16);
}

/* UA heading margin: the DS ships no reset, so the gap above is the only spacing. Figma authors
   `overflow: hidden` + an ellipsis on this node and it is deliberately NOT implemented — the same
   maintainer ruling QuizStep records for its headline (a question must never be cut); see README. */
.title[data-v-c512aa46] {
    margin: 0;
    color: var(--btly-text-primary);
    text-align: center;
}

/* bottomContent: hugs the 190-tall cards. The band no longer clips — the strip inside it is its own
   scrollport now — and it must NOT centre its child: flex centring of an overflowing item is what
   browsers cut off at the start edge, which is exactly why the strip does the centring via scroll
   snapping instead. `flex-shrink: 0` keeps the band at its drawn height when the viewport is shorter
   than the design (QuizLayout then scrolls). */
.reviews[data-v-c512aa46] {
    display: flex;
    flex-direction: column;
    flex-shrink: 0;
}

/* The drawn 957 (3x311 + 2x12) inside a 375 viewport, built as a SWIPEABLE strip: CSS scroll-snap,
   INFINITE, no autoplay (maintainer's call — brief §9-3 left the interaction undrawn). The strip is
   the scrollport, the cards overflow it, and `scroll-snap-align: center` per card reproduces the drawn
   rest state: one card whole and centred, its neighbours peeking 20px. Still no library: the loop is
   clone-and-teleport over this very scroll container — see `review-loop.ts`. */
.strip[data-v-c512aa46] {
    display: flex;
    align-items: center;
    gap: var(--btly-space-12);
    overflow-x: auto;
    overflow-y: hidden;
    scroll-snap-type: x mandatory;
    /* Keeps a horizontal swipe out of the page's scroll chain and off the browser's back gesture. */
    overscroll-behavior-x: contain;
    /* Leading/trailing room so the FIRST and LAST card can still reach the centre of the scrollport:
       (375 - 311) / 2 = the very inset the drawn centred card has. Derived geometry, not a spacing
       decision, so it stays a calc() of the two drawn widths rather than borrowing space/32. Kept
       under the loop, which never reaches those ends — it is what the single-review case still needs. */
    padding-inline: calc((375px - 311px) / 2);
    /* The design draws no scroll affordance and no dots (brief §9-3), so the bar is hidden wherever
       one would sit permanently. Touch and keyboard both still work. */
    scrollbar-width: none;
}
.strip[data-v-c512aa46]::-webkit-scrollbar {
    display: none;
}

/* CardReview is a fixed 311 wide: never let the flex container shrink it to fit the scrollport. */
.strip[data-v-c512aa46] > * {
    flex: 0 0 auto;
    scroll-snap-align: center;
}

/* Fixed mobile frame — the Figma frame size — so the inner QuizLayout has a bounded height.
   `contain: paint` makes the box a containing block for ModalClarify's fixed scrim, which would
   otherwise escape to the iframe viewport and cover the Gallery too. */
.frame[data-v-2e5d0d96] {
  box-sizing: border-box;
  width: 375px;
  height: 655px;
  overflow: hidden;
  contain: paint;
}

/* The box IS the device viewport here, so the shell's 100svh yields to it — for the screen layout
   and for ModalClarify's scrim alike; without the second rule the overlay is clipped out of view. */
.frame[data-v-2e5d0d96] .quiz-layout {
  min-height: 100%;
}
.frame[data-v-2e5d0d96] .scrim {
  height: 100%;
}

/* Playground-only exception, same one ModalOtp and ModalClarify take: the overlay's shell is
   breakpoint-driven off the IFRAME viewport, not off this box, so pinning 375 here would draw the md
   dialog inside a phone frame. Full width keeps the box and the media query agreeing; the Gallery stays
   at 375 because it shows the screen only, with no overlay to misrepresent. */
.frame-fluid[data-v-2e5d0d96] {
  width: 100%;
}

/* PlaygroundFrame hugs (`width: fit-content`), and a `position: fixed` child contributes no intrinsic
   width, so the frame would collapse to its padding. Force the chain full-width. */
.pg-wrap[data-v-2e5d0d96] {
  width: 100%;
}
.pg-wrap[data-v-2e5d0d96] .frame-wrap {
  width: 100%;
}
.pg[data-v-2e5d0d96] {
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.row[data-v-2e5d0d96] {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
}
.cell[data-v-2e5d0d96] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-2e5d0d96] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
.step-question[data-v-3f8aac19], .step-question[data-v-3f8aac19] * {
    box-sizing: border-box;
}

/* StepQuestion adds no box of its own — it IS the QuizLayout. `contents` lets QuizLayout's
   min-height:100% resolve against the screen, instead of collapsing (same as StepFirst). */
.step-question[data-v-3f8aac19] {
    display: contents;
}

/* Sibling of the answer list inside QuizStep's content box. The gap is a margin rather than a flex
   gap on a wrapper so the DOM of every step that does not use the slot stays untouched. */
.after-answers[data-v-3f8aac19] {
    margin-top: var(--btly-space-24);
}

/* Fixed mobile frame — the Figma frame size — so the inner QuizLayout has a bounded height. */
.frame[data-v-4ad890bf] {
  box-sizing: border-box;
  width: 375px;
  height: 655px;
  overflow: hidden;
}

/* The box IS the device viewport here, so the shell's 100svh yields to it. */
.frame[data-v-4ad890bf] .quiz-layout {
  min-height: 100%;
}
.row[data-v-4ad890bf] {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
}
.cell[data-v-4ad890bf] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-4ad890bf] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}

/* Demo-only trigger (playground/ never ships) — PLAYGROUND.md rule 6: mark it demo-*, build it from
   tokens. It lives in the frame because #controls is not rendered inside __sandbox.html. */
.demo-next[data-v-4ad890bf] {
  align-self: flex-start;
  padding: var(--btly-space-4) var(--btly-space-8);
  border: 1px solid var(--btly-border-default);
  border-radius: var(--btly-radius-8);
  background: var(--btly-surface-card);
  font-size: 12px;
  color: var(--btly-text-primary);
  cursor: pointer;
}
.step-registration[data-v-4c54b886], .step-registration[data-v-4c54b886] * {
    box-sizing: border-box;
}

/* StepRegistration adds no box of its own — it IS the QuizLayout. `contents` lets QuizLayout's
   min-height:100% resolve against the screen, instead of collapsing (same as StepFirst). */
.step-registration[data-v-4c54b886] {
    display: contents;
}

/* QuizStep's content slot: field then CTA, one rhythm for every screen (Figma: gap space/24). */
.form[data-v-4c54b886] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--btly-space-24);
    width: 100%;
}

/* Button's `.btn-wrap` is `display: contents`, so its inner `.btn` is the child that must stretch;
   the drawn 480px cap is Button's own rule and is deliberately not restated. */
.cta[data-v-4c54b886] {
    display: flex;
    width: 100%;
}
.cta[data-v-4c54b886] .btn {
    width: 100%;
}

/* SMS-consent paragraph (StepPhoneNumber). Its 24px offset from the CTA is the `.form` gap;
   Figma leaves the colour unbound at #737373 — that is text/tertiary. */
.consent[data-v-4c54b886] {
    width: 100%;
    margin: 0;
    color: var(--btly-text-tertiary);
}

/* Fixed mobile frame — the Figma variant size — so the inner QuizLayout has a bounded height. */
.frame[data-v-e4566751] {
  box-sizing: border-box;
  width: 375px;
  height: 655px;
  overflow: hidden;
}

/* The box IS the device viewport here, so the shell's 100svh yields to it. */
.frame[data-v-e4566751] .quiz-layout {
  min-height: 100%;
}
.row[data-v-e4566751] {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
}
.cell[data-v-e4566751] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-e4566751] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
.item[data-v-21024f4f], .item[data-v-21024f4f] * {
    box-sizing: border-box;
}

/* Drag affordance only. Layout, stacking and the enter/leave/move motion belong to the viewport and
 * live in ToastProvider.css — a child component's root carries the parent's scope id, so those rules
 * still reach this <li>. `pan-y` keeps vertical page scrolling while we claim the horizontal axis. */
/* The countdown rewrites ToastAlert's `progress` every frame, which is already sub-pixel smooth on its
 * own. Easing it as well would leave the bar permanently trailing the clock, and every hover-to-pause
 * would cash that trail in as a jump forward. Overridden here rather than dropped from ToastAlert, so a
 * consumer driving `progress` in discrete steps still gets the ProgressBar easing. */
.item[data-v-21024f4f] {
    --toast-bar-transition: none;

    cursor: grab;
    user-select: none;
    touch-action: pan-y;
}
.item[data-v-21024f4f]:active {
    cursor: grabbing;
}
.toast-viewport[data-v-b160c0f3], .toast-viewport[data-v-b160c0f3] * {
    box-sizing: border-box;
}

/* Type's half of the reset above: both properties inherit, so a host's own `font-kerning: none`
   would lay Mona Sans out unkerned and wider than Figma draws it. Rationale in QuizLayout.css. */
.toast-viewport[data-v-b160c0f3], .toast-viewport[data-v-b160c0f3] * {
    font-kerning: normal;
    font-feature-settings: normal;
}

/* z-index and the motion curve are raw values: no layer or easing token exists yet — see
 * docs/OPEN-QUESTIONS.md. Every colour, space and radius below is token-driven. */
.toast-viewport[data-v-b160c0f3] {
    --toast-ease: cubic-bezier(0.16, 1, 0.3, 1);

    position: fixed;
    z-index: 500;
    padding: var(--btly-space-16);
    pointer-events: none;
}
@media (min-width: 1024px) {
.toast-viewport[data-v-b160c0f3] {
        padding: var(--btly-space-24);
}
}
.toast-viewport.at-top-right[data-v-b160c0f3] { top: 0; right: 0;
}
.toast-viewport.at-bottom-right[data-v-b160c0f3] { bottom: 0; right: 0;
}
.toast-viewport.at-top-center[data-v-b160c0f3] {
    top: 0;
    left: 50%;
    transform: translateX(-50%);
}
.toast-viewport.at-bottom-center[data-v-b160c0f3] {
    bottom: 0;
    left: 50%;
    transform: translateX(-50%);
}

/* 343 is Figma's max-width for the toast (§9-3, an unbound raw px there). Owning it here is the
 * resolution that §9-3 predicted: the viewport constrains the width, the toast stays width: 100%. */
.list[data-v-b160c0f3] {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: var(--btly-space-8);
    width: 343px;
    max-width: calc(100vw - 2 * var(--btly-space-16));
    margin: 0;
    padding: 0;
    list-style: none;
    pointer-events: auto;
}
@media (min-width: 1024px) {
.list[data-v-b160c0f3] {
        max-width: calc(100vw - 2 * var(--btly-space-24));
}
}

/* Newest nearest the screen edge: down from the top, up from the bottom. */
.at-bottom-right .list[data-v-b160c0f3], .at-bottom-center .list[data-v-b160c0f3] {
    flex-direction: column-reverse;
}

/* `.item`'s own drag affordance lives in ToastItem.css. The transition classes below still reach that
 * <li>: TransitionGroup puts them on the child's root, which carries this component's scope id too. */

/* Enter/exit motion is unspecified in Figma (§9-5): chosen to slide in from the nearest edge. */
.toast-enter-active[data-v-b160c0f3] {
    transition: opacity 0.3s var(--toast-ease), transform 0.4s var(--toast-ease);
}
.toast-leave-active[data-v-b160c0f3] {
    position: absolute;
    width: 100%;
    transition: opacity 0.2s ease-in, transform 0.3s ease-in;
}
.toast-move[data-v-b160c0f3] {
    transition: transform 0.3s var(--toast-ease);
}
.toast-enter-from[data-v-b160c0f3], .toast-leave-to[data-v-b160c0f3] {
    opacity: 0;
}
.at-top-right .toast-enter-from[data-v-b160c0f3], .at-bottom-right .toast-enter-from[data-v-b160c0f3] {
    transform: translateX(100%);
}
.at-top-right .toast-leave-to[data-v-b160c0f3], .at-bottom-right .toast-leave-to[data-v-b160c0f3] {
    transform: translateX(100%) scale(0.95);
}
.at-top-center .toast-enter-from[data-v-b160c0f3], .at-top-center .toast-leave-to[data-v-b160c0f3] {
    transform: translateY(-100%);
}
.at-bottom-center .toast-enter-from[data-v-b160c0f3], .at-bottom-center .toast-leave-to[data-v-b160c0f3] {
    transform: translateY(100%);
}
@media (prefers-reduced-motion: reduce) {
.toast-enter-active[data-v-b160c0f3], .toast-leave-active[data-v-b160c0f3], .toast-move[data-v-b160c0f3] {
        transition: none;
}
.toast-enter-from[data-v-b160c0f3], .toast-leave-to[data-v-b160c0f3] {
        transform: none;
}
}

.gallery[data-v-66c25643] {
  display: flex;
  flex-direction: column;
  gap: 24px;
}
.cell[data-v-66c25643] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.row[data-v-66c25643] {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.cap[data-v-66c25643] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}

.gallery[data-v-49fc479e] {
  display: flex;
  flex-direction: column;
  gap: 24px;
}
.cell[data-v-49fc479e] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.row[data-v-49fc479e] {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.cap[data-v-49fc479e] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}

.gallery[data-v-c208c0c2] {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
}
.cell[data-v-c208c0c2] {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 8px;
}
.cap[data-v-c208c0c2] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
.backdrop[data-v-c208c0c2] {
  padding: 16px;
  border-radius: 8px;
  background: var(--btly-surface-brand);
}

.rows[data-v-20b0200a] {
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.gallery[data-v-caea0f13] {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
}
.cell[data-v-caea0f13] {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
}
.cap[data-v-caea0f13] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
/* 42×42 is a raw component constant — unbound in Figma and not on the space scale. */
.tutor-avatar[data-v-afd48f95], .tutor-avatar[data-v-afd48f95] * {
    box-sizing: border-box;
}
.tutor-avatar[data-v-afd48f95] {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 42px;
    height: 42px;
    overflow: hidden;
    border-radius: var(--btly-radius-12);
    background: var(--btly-surface-tertiary);
}
.photo[data-v-afd48f95] {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/* The common slot usage is a bare <img> — give it the same fill/cover treatment. */
.tutor-avatar img[data-v-afd48f95-s] {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.row[data-v-c42bad15] {
  display: flex;
  gap: 24px;
}
.cell[data-v-c42bad15] {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 8px;
}
.cap[data-v-c42bad15] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
.demo-initials[data-v-c42bad15] {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 100%;
  background: var(--btly-brand-sky-200);
  color: var(--btly-text-secondary);
}
.video-fake-gif[data-v-0f4b9d9e],
.video-fake-gif[data-v-0f4b9d9e] * {
    box-sizing: border-box;
}
.video-fake-gif[data-v-0f4b9d9e] {
    display: block;
    max-width: 100%;
    height: auto;   /* hugs content: scales to the video's intrinsic aspect ratio */
}

.demo[data-v-153d4f72] {
  width: 320px;
  max-width: 100%;
}
.cell[data-v-153d4f72] {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap[data-v-153d4f72] {
  margin: 0;
  font-size: 12px;
  color: var(--btly-text-tertiary);
}
/*$vite$:1*/