/* Spot Me design tokens v1.0 · GENERATED by build_tokens.py from design-tokens.json. Do not edit by hand. */

/* Primitives */
:root {
  --sm-color-white: #FFFFFF;
  --sm-color-rose-600: #E11D48;
  --sm-color-rose-700: #BE123C;
  --sm-color-pink-400: #FB7185;
  --sm-color-blush-50: #FFF1F2;
  --sm-color-wine-900: #881337;
  --sm-color-mauve-700: #7A4A5B;
  --sm-color-border-200: #FECDD3;
  --sm-color-cream-100: #FFE4EA;
  --sm-color-plum-950: #2B0F24;
  --sm-color-plum-900: #3D1733;
  --sm-color-plum-800: #4A1C3F;
  --sm-color-plum-700: #5A2550;
  --sm-color-plum-ink: #1A0915;
  --sm-color-glow-300: #FF8FB1;
  --sm-color-lilac-400: #C9A3B4;
  --sm-color-mint-300: #5EEAD4;
  --sm-color-teal-700: #0F766E;
  --sm-color-amber-700: #B45309;
  --sm-color-amber-300: #FDBA74;
  --sm-color-gold-400: #FDB913;
  --sm-color-alpha-glow-halo: rgba(255,143,177,.45);
  --sm-color-alpha-glow-dots: rgba(255,143,177,.28);
  --sm-color-alpha-wine-shadow: rgba(136,19,55,.18);
  --sm-color-alpha-plum-shadow: rgba(43,15,36,.25);
  --sm-color-alpha-ink-shadow: rgba(26,9,21,.5);
  --sm-color-alpha-plum-scrim: rgba(43,15,36,.55);
  --sm-font-display: "Nunito", ui-rounded, system-ui, sans-serif;
  --sm-font-body: "DM Sans", system-ui, sans-serif;
  --sm-font-weight-regular: 400;
  --sm-font-weight-medium: 500;
  --sm-font-weight-bold: 700;
  --sm-font-weight-heavy: 800;
  --sm-font-weight-black: 900;
  --sm-type-display-family: var(--sm-font-display);
  --sm-type-display-weight: var(--sm-font-weight-black);
  --sm-type-display-size: 40px;
  --sm-type-display-line: 44px;
  --sm-type-h1-family: var(--sm-font-display);
  --sm-type-h1-weight: var(--sm-font-weight-black);
  --sm-type-h1-size: 30px;
  --sm-type-h1-line: 36px;
  --sm-type-h2-family: var(--sm-font-display);
  --sm-type-h2-weight: var(--sm-font-weight-heavy);
  --sm-type-h2-size: 22px;
  --sm-type-h2-line: 28px;
  --sm-type-button-family: var(--sm-font-display);
  --sm-type-button-weight: var(--sm-font-weight-heavy);
  --sm-type-button-size: 17px;
  --sm-type-button-line: 24px;
  --sm-type-ring-label-family: var(--sm-font-display);
  --sm-type-ring-label-weight: var(--sm-font-weight-heavy);
  --sm-type-ring-label-size: 15px;
  --sm-type-ring-label-line: 20px;
  --sm-type-body-family: var(--sm-font-body);
  --sm-type-body-weight: var(--sm-font-weight-regular);
  --sm-type-body-size: 16px;
  --sm-type-body-line: 24px;
  --sm-type-label-family: var(--sm-font-body);
  --sm-type-label-weight: var(--sm-font-weight-medium);
  --sm-type-label-size: 14px;
  --sm-type-label-line: 20px;
  --sm-type-caption-family: var(--sm-font-body);
  --sm-type-caption-weight: var(--sm-font-weight-regular);
  --sm-type-caption-size: 12px;
  --sm-type-caption-line: 16px;
  --sm-space-0: 0px;
  --sm-space-1: 4px;
  --sm-space-2: 8px;
  --sm-space-3: 12px;
  --sm-space-4: 16px;
  --sm-space-5: 20px;
  --sm-space-6: 24px;
  --sm-space-8: 32px;
  --sm-space-10: 40px;
  --sm-space-12: 48px;
  --sm-space-16: 64px;
  --sm-radius-key: 12px;
  --sm-radius-card: 22px;
  --sm-radius-sheet: 28px;
  --sm-radius-pill: 999px;
  --sm-radius-round: 50%;
  --sm-size-touch-min: 44px;
  --sm-size-touch-min-android: 48px;
  --sm-size-gap-min: 8px;
  --sm-size-button-height: 48px;
  --sm-size-tab-bar: 64px;
  --sm-size-pin-key: 58px;
  --sm-size-pin-dot: 14px;
  --sm-size-avatar-hero: 150px;
  --sm-size-avatar-card: 56px;
  --sm-size-icon: 24px;
  --sm-size-arc-stroke: 10px;
  --sm-border-width-hairline: 1px;
  --sm-border-width-dare-card: 1.5px;
  --sm-border-width-control: 2px;
  --sm-border-width-focus: 3px;
  --sm-duration-squish: 120ms;
  --sm-duration-calm: 300ms;
  --sm-duration-fill: 600ms;
  --sm-duration-celebrate: 900ms;
  --sm-duration-ignite: 1600ms;
  --sm-easing-spring: cubic-bezier(.3,1.5,.5,1);
  --sm-easing-calm: ease;
  --sm-easing-fill: ease-out;
  --sm-easing-pulse: ease-in-out;
  --sm-scale-squish: 0.94;
}

/* Semantic · Blush Diary (light, default) */
:root,
[data-theme="light"] {
  --sm-bg: var(--sm-color-blush-50);
  --sm-surface: var(--sm-color-white);
  --sm-surface-soft: var(--sm-color-cream-100);
  --sm-text: var(--sm-color-wine-900);
  --sm-text-muted: var(--sm-color-mauve-700);
  --sm-primary: var(--sm-color-rose-600);
  --sm-primary-strong: var(--sm-color-rose-700);
  --sm-primary-pressed: var(--sm-color-rose-700);
  --sm-on-primary: var(--sm-color-white);
  --sm-soft: var(--sm-color-pink-400);
  --sm-line: var(--sm-color-border-200);
  --sm-success: var(--sm-color-teal-700);
  --sm-warning: var(--sm-color-amber-700);
  --sm-focus: var(--sm-color-rose-600);
  --sm-glow: var(--sm-color-alpha-glow-halo);
  --sm-inverse-surface: var(--sm-color-wine-900);
  --sm-inverse-text: var(--sm-color-blush-50);
  --sm-on-success: var(--sm-color-white);
  --sm-tier-lowkey: var(--sm-color-lilac-400);
  --sm-tier-cute: var(--sm-color-glow-300);
  --sm-tier-dreamy: var(--sm-color-mint-300);
  --sm-tier-iconic: var(--sm-color-amber-300);
  --sm-star: var(--sm-color-gold-400);
  --sm-scrim: var(--sm-color-alpha-plum-scrim);
  --sm-elevation-raised: 0 10px 30px var(--sm-color-alpha-wine-shadow);
  --sm-elevation-overlay: 0 20px 50px var(--sm-color-alpha-plum-shadow);
}

/* Semantic · After Hours (dark) */
[data-theme="dark"] {
  --sm-bg: var(--sm-color-plum-950);
  --sm-surface: var(--sm-color-plum-900);
  --sm-surface-soft: var(--sm-color-plum-800);
  --sm-text: var(--sm-color-cream-100);
  --sm-text-muted: var(--sm-color-lilac-400);
  --sm-primary: var(--sm-color-glow-300);
  --sm-primary-strong: var(--sm-color-glow-300);
  --sm-primary-pressed: var(--sm-color-pink-400);
  --sm-on-primary: var(--sm-color-plum-950);
  --sm-soft: var(--sm-color-pink-400);
  --sm-line: var(--sm-color-plum-700);
  --sm-success: var(--sm-color-mint-300);
  --sm-warning: var(--sm-color-amber-300);
  --sm-focus: var(--sm-color-glow-300);
  --sm-glow: var(--sm-color-alpha-glow-halo);
  --sm-inverse-surface: var(--sm-color-cream-100);
  --sm-inverse-text: var(--sm-color-plum-950);
  --sm-on-success: var(--sm-color-plum-950);
  --sm-tier-lowkey: var(--sm-color-lilac-400);
  --sm-tier-cute: var(--sm-color-glow-300);
  --sm-tier-dreamy: var(--sm-color-mint-300);
  --sm-tier-iconic: var(--sm-color-amber-300);
  --sm-star: var(--sm-color-gold-400);
  --sm-scrim: var(--sm-color-alpha-plum-scrim);
  --sm-elevation-raised: 0 10px 30px var(--sm-color-alpha-ink-shadow);
  --sm-elevation-overlay: 0 20px 50px var(--sm-color-alpha-ink-shadow);
}

@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --sm-bg: var(--sm-color-plum-950);
    --sm-surface: var(--sm-color-plum-900);
    --sm-surface-soft: var(--sm-color-plum-800);
    --sm-text: var(--sm-color-cream-100);
    --sm-text-muted: var(--sm-color-lilac-400);
    --sm-primary: var(--sm-color-glow-300);
    --sm-primary-strong: var(--sm-color-glow-300);
    --sm-primary-pressed: var(--sm-color-pink-400);
    --sm-on-primary: var(--sm-color-plum-950);
    --sm-soft: var(--sm-color-pink-400);
    --sm-line: var(--sm-color-plum-700);
    --sm-success: var(--sm-color-mint-300);
    --sm-warning: var(--sm-color-amber-300);
    --sm-focus: var(--sm-color-glow-300);
    --sm-glow: var(--sm-color-alpha-glow-halo);
    --sm-inverse-surface: var(--sm-color-cream-100);
    --sm-inverse-text: var(--sm-color-plum-950);
    --sm-on-success: var(--sm-color-plum-950);
    --sm-tier-lowkey: var(--sm-color-lilac-400);
    --sm-tier-cute: var(--sm-color-glow-300);
    --sm-tier-dreamy: var(--sm-color-mint-300);
    --sm-tier-iconic: var(--sm-color-amber-300);
    --sm-star: var(--sm-color-gold-400);
    --sm-scrim: var(--sm-color-alpha-plum-scrim);
    --sm-elevation-raised: 0 10px 30px var(--sm-color-alpha-ink-shadow);
    --sm-elevation-overlay: 0 20px 50px var(--sm-color-alpha-ink-shadow);
  }
}

/* Components · re-declared on every themed element so a dark panel inside a light page resolves correctly */
:root,
[data-theme] {
  --sm-ring-button-height: var(--sm-size-touch-min);
  --sm-ring-button-padding-x: var(--sm-space-4);
  --sm-ring-button-radius: var(--sm-radius-pill);
  --sm-ring-button-compact-height: 28px;
  --sm-ring-button-compact-padding-x: 10px;
  --sm-ring-button-border-width: var(--sm-border-width-control);
  --sm-ring-button-idle-bg: var(--sm-surface);
  --sm-ring-button-idle-border: var(--sm-line);
  --sm-ring-button-idle-label: var(--sm-text);
  --sm-ring-button-logged-bg: var(--sm-primary);
  --sm-ring-button-logged-border: var(--sm-primary);
  --sm-ring-button-logged-label: var(--sm-on-primary);
  --sm-ring-button-dare-bg: var(--sm-surface);
  --sm-ring-button-dare-border: var(--sm-primary);
  --sm-ring-button-dare-label: var(--sm-primary-strong);
  --sm-ring-button-dare-halo: var(--sm-glow);
  --sm-ring-toggle-size: var(--sm-size-touch-min);
  --sm-ring-toggle-bg: var(--sm-primary);
  --sm-ring-toggle-icon: var(--sm-on-primary);
  --sm-ring-toggle-halo: var(--sm-glow);
  --sm-ring-toggle-open-bg: var(--sm-surface);
  --sm-ring-toggle-open-icon: var(--sm-text);
  --sm-ring-toggle-open-border: var(--sm-line);
  --sm-hint-bubble-radius: var(--sm-radius-card);
  --sm-hint-bubble-bg: var(--sm-inverse-surface);
  --sm-hint-bubble-text: var(--sm-inverse-text);
  --sm-hint-bubble-shadow: var(--sm-elevation-raised);
  --sm-recent-moments-icon: var(--sm-text);
  --sm-recent-moments-label: var(--sm-text);
  --sm-recent-moments-when: var(--sm-text-muted);
  --sm-button-height: var(--sm-size-button-height);
  --sm-button-padding-x: var(--sm-space-6);
  --sm-button-radius: var(--sm-radius-pill);
  --sm-button-primary-bg: var(--sm-primary);
  --sm-button-primary-bg-pressed: var(--sm-primary-pressed);
  --sm-button-primary-label: var(--sm-on-primary);
  --sm-button-secondary-bg: var(--sm-surface);
  --sm-button-secondary-border: var(--sm-line);
  --sm-button-secondary-label: var(--sm-text);
  --sm-button-quiet-label: var(--sm-primary-strong);
  --sm-button-disabled-bg: var(--sm-line);
  --sm-button-disabled-label: var(--sm-text-muted);
  --sm-chip-radius: var(--sm-radius-pill);
  --sm-chip-padding-y: 6px;
  --sm-chip-padding-x: 14px;
  --sm-chip-bg: var(--sm-surface-soft);
  --sm-chip-label: var(--sm-text);
  --sm-chip-at-risk-bg: var(--sm-surface);
  --sm-chip-at-risk-border: var(--sm-line);
  --sm-chip-warning-label: var(--sm-warning);
  --sm-toast-radius: var(--sm-radius-card);
  --sm-toast-padding-y: 14px;
  --sm-toast-padding-x: 18px;
  --sm-toast-max-width: 360px;
  --sm-toast-bg: var(--sm-inverse-surface);
  --sm-toast-text: var(--sm-inverse-text);
  --sm-toast-shadow: var(--sm-elevation-raised);
  --sm-dare-card-radius: var(--sm-radius-card);
  --sm-dare-card-padding-y: var(--sm-space-3);
  --sm-dare-card-padding-x: 14px;
  --sm-dare-card-bg: var(--sm-surface);
  --sm-dare-card-border: var(--sm-primary);
  --sm-dare-card-title: var(--sm-primary-strong);
  --sm-dare-card-text: var(--sm-text);
  --sm-dare-card-close-icon: var(--sm-text-muted);
  --sm-confirm-dialog-radius: var(--sm-radius-card);
  --sm-confirm-dialog-padding: var(--sm-space-5);
  --sm-confirm-dialog-max-width: 320px;
  --sm-confirm-dialog-bg: var(--sm-surface);
  --sm-confirm-dialog-title: var(--sm-text);
  --sm-confirm-dialog-text: var(--sm-text-muted);
  --sm-confirm-dialog-scrim: var(--sm-scrim);
  --sm-confirm-dialog-shadow: var(--sm-elevation-overlay);
  --sm-hearts-chip-bg: var(--sm-surface-soft);
  --sm-hearts-chip-icon: var(--sm-primary-strong);
  --sm-hearts-chip-label: var(--sm-text);
  --sm-item-tile-radius: var(--sm-radius-card);
  --sm-item-tile-bg: var(--sm-surface);
  --sm-item-tile-border: var(--sm-line);
  --sm-item-tile-border-selected: var(--sm-primary);
  --sm-item-tile-art-bg: var(--sm-surface-soft);
  --sm-item-tile-name: var(--sm-text);
  --sm-item-tile-price: var(--sm-primary-strong);
  --sm-rarity-strip-height: 4px;
  --sm-rarity-lowkey: var(--sm-tier-lowkey);
  --sm-rarity-cute: var(--sm-tier-cute);
  --sm-rarity-dreamy: var(--sm-tier-dreamy);
  --sm-rarity-iconic: var(--sm-tier-iconic);
  --sm-owned-tape-bg: var(--sm-success);
  --sm-owned-tape-text: var(--sm-on-success);
  --sm-price-chip-bg: var(--sm-surface);
  --sm-price-chip-icon: var(--sm-primary-strong);
  --sm-price-chip-text: var(--sm-text);
  --sm-info-card-radius: var(--sm-radius-card);
  --sm-info-card-bg: var(--sm-surface);
  --sm-info-card-border: var(--sm-line);
  --sm-info-card-text: var(--sm-text);
  --sm-comment-bubble-radius: var(--sm-radius-card);
  --sm-comment-bubble-bg: var(--sm-surface-soft);
  --sm-comment-bubble-text: var(--sm-text);
  --sm-comment-bubble-sender-bg: var(--sm-primary);
  --sm-comment-bubble-sender-icon: var(--sm-on-primary);
  --sm-pack-tile-radius: var(--sm-radius-card);
  --sm-pack-tile-bg: var(--sm-surface);
  --sm-pack-tile-border: var(--sm-line);
  --sm-pack-tile-hearts: var(--sm-text);
  --sm-pack-tile-bonus-bg: var(--sm-surface-soft);
  --sm-pack-tile-bonus: var(--sm-primary-strong);
  --sm-pack-tile-price: var(--sm-text);
  --sm-tag-radius: var(--sm-radius-pill);
  --sm-tag-new-bg: var(--sm-primary);
  --sm-tag-new-label: var(--sm-on-primary);
  --sm-tag-new-shadow: var(--sm-surface);
  --sm-crush-card-radius: var(--sm-radius-card);
  --sm-crush-card-padding: 14px;
  --sm-crush-card-gap: 14px;
  --sm-crush-card-bg: var(--sm-surface);
  --sm-crush-card-border: var(--sm-line);
  --sm-crush-card-name: var(--sm-text);
  --sm-crush-card-meta: var(--sm-text-muted);
  --sm-yearbook-card-went-somewhere: var(--sm-success);
  --sm-yearbook-card-moved-on: var(--sm-text-muted);
  --sm-avatar-bg: var(--sm-surface-soft);
  --sm-progress-arc-stroke: var(--sm-size-arc-stroke);
  --sm-progress-arc-track: var(--sm-line);
  --sm-progress-arc-fill: var(--sm-primary);
  --sm-pin-pad-row-gap: var(--sm-space-3);
  --sm-pin-pad-column-gap: 22px;
  --sm-pin-pad-key-bg: var(--sm-surface);
  --sm-pin-pad-key-label: var(--sm-text);
  --sm-pin-pad-dot-empty: var(--sm-primary);
  --sm-pin-pad-dot-filled: var(--sm-primary);
  --sm-pin-pad-error: var(--sm-text);
  --sm-tab-bar-height: var(--sm-size-tab-bar);
  --sm-tab-bar-bg: var(--sm-surface);
  --sm-tab-bar-border: var(--sm-line);
  --sm-tab-bar-icon: var(--sm-text-muted);
  --sm-tab-bar-icon-active: var(--sm-primary-strong);
  --sm-focus-ring: var(--sm-focus);
  --sm-focus-width: var(--sm-border-width-focus);
  --sm-focus-offset: var(--sm-border-width-focus);
  --sm-text-field-height: var(--sm-size-button-height);
  --sm-text-field-radius: var(--sm-radius-key);
  --sm-text-field-bg: var(--sm-surface);
  --sm-text-field-border: var(--sm-text-muted);
  --sm-text-field-border-focus: var(--sm-focus);
  --sm-text-field-border-error: var(--sm-primary-strong);
  --sm-text-field-text: var(--sm-text);
  --sm-text-field-label: var(--sm-text);
  --sm-text-field-helper: var(--sm-text-muted);
  --sm-text-field-error: var(--sm-primary-strong);
  --sm-option-tile-radius: var(--sm-radius-card);
  --sm-option-tile-bg: var(--sm-surface);
  --sm-option-tile-border: var(--sm-line);
  --sm-option-tile-border-selected: var(--sm-primary);
  --sm-option-tile-check-bg: var(--sm-primary);
  --sm-option-tile-check: var(--sm-on-primary);
  --sm-option-tile-label: var(--sm-text);
  --sm-switch-width: 52px;
  --sm-switch-height: 32px;
  --sm-switch-track-off: var(--sm-line);
  --sm-switch-thumb-off: var(--sm-text-muted);
  --sm-switch-track-on: var(--sm-primary);
  --sm-switch-thumb-on: var(--sm-on-primary);
  --sm-sheet-radius: var(--sm-radius-sheet);
  --sm-sheet-bg: var(--sm-surface);
  --sm-sheet-handle: var(--sm-text-muted);
  --sm-sheet-scrim: var(--sm-scrim);
  --sm-sheet-shadow: var(--sm-elevation-overlay);
  --sm-spinner-size: 20px;
  --sm-spinner-color: var(--sm-on-primary);
  --sm-spinner-color-on-surface: var(--sm-primary);
  --sm-destructive-bg: var(--sm-surface);
  --sm-destructive-border: var(--sm-primary-strong);
  --sm-destructive-label: var(--sm-primary-strong);
  --sm-share-card-bg: var(--sm-color-plum-950);
  --sm-share-card-text: var(--sm-color-cream-100);
  --sm-share-card-muted: var(--sm-color-lilac-400);
  --sm-share-card-accent: var(--sm-color-glow-300);
  --sm-share-card-dots: var(--sm-color-alpha-glow-dots);
  --sm-share-card-dot-grid: 9px;
}

/* Visual System v1.0 names, kept working */
:root {
  --sm-touch-min: var(--sm-size-touch-min);
  --sm-gap-min: var(--sm-size-gap-min);
  --sm-squish: var(--sm-duration-squish) var(--sm-easing-spring);
  --sm-ignite: var(--sm-duration-ignite) var(--sm-easing-pulse) 3;
  --sm-calm: var(--sm-duration-calm) var(--sm-easing-calm);
}

/* Reduced motion: loops become static states, no squish bounce */
@media (prefers-reduced-motion: reduce) {
  :root,
  [data-theme] {
    --sm-duration-squish: 0ms;
    --sm-duration-fill: 0ms;
    --sm-duration-celebrate: 0ms;
    --sm-duration-ignite: 0ms;
    --sm-scale-squish: 1;
  }
}
