@snacky/ui 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,68 @@ How `@snacky/ui` got to its current state. The README documents what the
4
4
  package *is*; this documents how it got there, including the mistakes, so the
5
5
  verification claims in the README can be taken at face value.
6
6
 
7
+ ## Semantic tokens reference their primitive again, instead of copying it (0.9.0)
8
+
9
+ `tokens.css` shipped every semantic token as a frozen literal:
10
+ `--bg-action-primary: #f8b732`, with nothing tying it back to
11
+ `--color-primary-500`. `tokens.json` had the relationship right all along
12
+ (`"$value": "{color.primitive.primary.500}"`), but both generators ran that
13
+ alias through a `resolveRef()` that walked it down to the raw value before
14
+ emitting.
15
+
16
+ The colors were never wrong, which is why this survived a long time. What it
17
+ broke was everything the primitive/semantic split is for. Devtools showed a
18
+ flat hex with no trace of where it came from, so the layer that exists to
19
+ answer "which primitive is this, and why" answered nothing. And overriding
20
+ `--color-primary-500` alone - the obvious way to re-skin the system for a
21
+ white-label build or a theme block - changed nothing at all, because each
22
+ semantic token carried its own private copy of the value. A design system
23
+ whose stated first problem is "colors get hardcoded per component" was doing
24
+ exactly that, one layer up.
25
+
26
+ Semantic tokens now emit `var(--color-primary-500)`, and compose-ui emits
27
+ `SnackyColorPrimitive.Primary.c500` rather than `Color(0xFFF8B732)`. Kotlin
28
+ has no runtime cascade the way CSS custom properties do, so that side
29
+ propagates at compile time, but it keeps the primitive as the single place a
30
+ value is written and makes the mapping visible to anyone reading `Tokens.kt`.
31
+
32
+ Verified rather than assumed, since this touches every color in the system:
33
+ all 175 CSS custom properties were resolved in a browser before and after and
34
+ compared - 0 differences, with 63 of them now resolving through a reference.
35
+ The same 63/1 split holds on the Kotlin side (63 references, 1 literal), each
36
+ checked against the value it previously carried. `bgOverlayDim` is that one
37
+ literal: a raw `rgba(51,51,51,0.8)` with no primitive behind it, so it stays
38
+ as it was. Confirmed the references survive the tsup build into the published
39
+ `dist/index.css`, and that overriding one primitive now cascades to every
40
+ semantic token pointing at it.
41
+
42
+ ## PointBalanceBanner's two halves now share the row equally (0.8.1)
43
+
44
+ `.snacky-banner-point-balance__item` (the Points group and the Balance group
45
+ either side of the hairline divider) never had a `flex` value, so each one
46
+ just hugged its own content width and both packed against the left edge.
47
+ That was invisible in the docs site's own Live Preview, which always renders
48
+ this component inside a hardcoded `width: 312` wrapper matching Figma's exact
49
+ frame size - the one width where there's barely any slack to expose the bug.
50
+ It showed up once the component was dropped into a genuinely wider container
51
+ (the Claude Design gallery's story card, auto-sized well past 312px): the
52
+ divider landed right after the first group instead of at the midpoint, and
53
+ the row's tinted, bordered background kept stretching to `width: 100%` with
54
+ nothing in the empty half but its own surface colour.
55
+
56
+ Figma's own auto-layout already has both item columns set to fill-container,
57
+ splitting the row 50/50 around the divider - confirmed directly in Figma's
58
+ dev-mode inspect view, not inferred. Added `flex: 1` to both items (`weight
59
+ (1f)` in compose-ui), so each column now grows to take an equal share of
60
+ whatever width the row fills, with its icon/label/value left-aligned inside
61
+ that half. Verified by rendering the real package at 312px (Figma spec, where
62
+ nothing changes visually - the two halves were already close to equal there),
63
+ and at 400px (matching the gallery card's rough width): the divider sits at
64
+ 49.8-49.9% of the row's width in both cases, and a "LowBalance" sibling
65
+ ("0" / "Rp 0") now measures pixel-identical to "Default" at the same
66
+ container width, which is exactly the sibling-mismatch problem `width: 100%`
67
+ was introduced to solve in 0.7.1 in the first place.
68
+
7
69
  ## VariantBadge renamed to InfoBadge, with an icon slot (0.8.0)
8
70
 
9
71
  The badge that renders `Variant: 75 Grams` turned out to have a second use in
package/dist/index.css CHANGED
@@ -33,55 +33,55 @@
33
33
  --color-red-700: #a73e3e;
34
34
  --color-red-800: #813030;
35
35
  --color-red-900: #632525;
36
- --bg-app: #f7f7f7;
37
- --bg-surface: #ffffff;
38
- --bg-surface-primary: #f8b732;
39
- --bg-surface-accent: #eb5757;
40
- --bg-surface-variant: #f3f3f3;
41
- --bg-surface-field: #ffffff;
42
- --bg-surface-highlight: #fef8eb;
43
- --bg-action-primary: #f8b732;
44
- --bg-action-primary-hover: #e2a72e;
45
- --bg-action-primary-pressed: #b08224;
46
- --bg-action-secondary: #ffffff;
47
- --bg-action-secondary-hover: #f3f3f3;
48
- --bg-action-secondary-pressed: #e0e0e0;
49
- --bg-action-disabled: #cccccc;
50
- --bg-action-primary-danger: #eb5757;
51
- --bg-action-primary-danger-hovered: #d64f4f;
52
- --bg-action-primary-danger-pressed: #a73e3e;
36
+ --bg-app: var(--color-neutral-20);
37
+ --bg-surface: var(--color-neutral-0);
38
+ --bg-surface-primary: var(--color-primary-500);
39
+ --bg-surface-accent: var(--color-red-500);
40
+ --bg-surface-variant: var(--color-neutral-50);
41
+ --bg-surface-field: var(--color-neutral-0);
42
+ --bg-surface-highlight: var(--color-primary-50);
43
+ --bg-action-primary: var(--color-primary-500);
44
+ --bg-action-primary-hover: var(--color-primary-600);
45
+ --bg-action-primary-pressed: var(--color-primary-700);
46
+ --bg-action-secondary: var(--color-neutral-0);
47
+ --bg-action-secondary-hover: var(--color-neutral-50);
48
+ --bg-action-secondary-pressed: var(--color-neutral-100);
49
+ --bg-action-disabled: var(--color-neutral-200);
50
+ --bg-action-primary-danger: var(--color-red-500);
51
+ --bg-action-primary-danger-hovered: var(--color-red-600);
52
+ --bg-action-primary-danger-pressed: var(--color-red-700);
53
53
  --bg-overlay-dim: rgba(51,51,51,0.8);
54
- --border-main: #cccccc;
55
- --border-highlight: #fcdea1;
56
- --border-input-default: #cccccc;
57
- --border-input-active: #f8b732;
58
- --border-input-error: #eb5757;
59
- --border-action-secondary: #cccccc;
60
- --border-action-secondary-pressed: #a3a3a3;
61
- --border-action-danger: #eb5757;
62
- --border-action-disabled: #cccccc;
63
- --text-primary: #333333;
64
- --text-secondary: #7a7a7a;
65
- --text-placeholder: #7a7a7a;
66
- --text-disabled: #a3a3a3;
67
- --text-link: #88651c;
68
- --text-error: #a73e3e;
69
- --text-inverse: #ffffff;
70
- --text-on-action-primary: #333333;
71
- --text-on-action-secondary: #333333;
72
- --text-on-action-tertiary: #b08224;
73
- --text-on-action-tertiary-hovered: #88651c;
74
- --text-on-action-tertiary-pressed: #684d15;
75
- --text-action-danger: #d64f4f;
76
- --text-action-danger-hovered: #a73e3e;
77
- --text-action-danger-pressed: #813030;
78
- --text-action-disabled: #a3a3a3;
79
- --icon-primary: #333333;
80
- --icon-secondary: #525252;
81
- --icon-brand: #f8b732;
82
- --icon-disabled: #a3a3a3;
83
- --icon-active: #eb5757;
84
- --icon-on-accent: #ffffff;
54
+ --border-main: var(--color-neutral-200);
55
+ --border-highlight: var(--color-primary-200);
56
+ --border-input-default: var(--color-neutral-200);
57
+ --border-input-active: var(--color-primary-500);
58
+ --border-input-error: var(--color-red-500);
59
+ --border-action-secondary: var(--color-neutral-200);
60
+ --border-action-secondary-pressed: var(--color-neutral-400);
61
+ --border-action-danger: var(--color-red-500);
62
+ --border-action-disabled: var(--color-neutral-200);
63
+ --text-primary: var(--color-neutral-950);
64
+ --text-secondary: var(--color-neutral-500);
65
+ --text-placeholder: var(--color-neutral-500);
66
+ --text-disabled: var(--color-neutral-400);
67
+ --text-link: var(--color-primary-800);
68
+ --text-error: var(--color-red-700);
69
+ --text-inverse: var(--color-neutral-0);
70
+ --text-on-action-primary: var(--color-neutral-950);
71
+ --text-on-action-secondary: var(--color-neutral-950);
72
+ --text-on-action-tertiary: var(--color-primary-700);
73
+ --text-on-action-tertiary-hovered: var(--color-primary-800);
74
+ --text-on-action-tertiary-pressed: var(--color-primary-900);
75
+ --text-action-danger: var(--color-red-600);
76
+ --text-action-danger-hovered: var(--color-red-700);
77
+ --text-action-danger-pressed: var(--color-red-800);
78
+ --text-action-disabled: var(--color-neutral-400);
79
+ --icon-primary: var(--color-neutral-950);
80
+ --icon-secondary: var(--color-neutral-700);
81
+ --icon-brand: var(--color-primary-500);
82
+ --icon-disabled: var(--color-neutral-400);
83
+ --icon-active: var(--color-red-500);
84
+ --icon-on-accent: var(--color-neutral-0);
85
85
  --spacing-2: 2px;
86
86
  --spacing-4: 4px;
87
87
  --spacing-8: 8px;
@@ -89,15 +89,15 @@
89
89
  --spacing-16: 16px;
90
90
  --spacing-24: 24px;
91
91
  --spacing-32: 32px;
92
- --gap-icon-label: 4px;
93
- --gap-cell: 4px;
94
- --gap-text-icon: 8px;
95
- --gap-text-underline: 16px;
96
- --gap-layout-section-list: 8px;
97
- --gap-layout-block: 16px;
98
- --gap-layout-stack: 24px;
99
- --gap-layout-page: 32px;
100
- --margin-screen: 16px;
92
+ --gap-icon-label: var(--spacing-4);
93
+ --gap-cell: var(--spacing-4);
94
+ --gap-text-icon: var(--spacing-8);
95
+ --gap-text-underline: var(--spacing-16);
96
+ --gap-layout-section-list: var(--spacing-8);
97
+ --gap-layout-block: var(--spacing-16);
98
+ --gap-layout-stack: var(--spacing-24);
99
+ --gap-layout-page: var(--spacing-32);
100
+ --margin-screen: var(--spacing-16);
101
101
  --radius-4: 4px;
102
102
  --radius-6: 6px;
103
103
  --radius-8: 8px;
@@ -105,12 +105,12 @@
105
105
  --radius-20: 20px;
106
106
  --radius-100: 100px;
107
107
  --radius-999: 999px;
108
- --radius-field: 4px;
109
- --radius-tag: 6px;
110
- --radius-bubble: 8px;
111
- --radius-card: 10px;
112
- --radius-sheet-top: 20px;
113
- --radius-full: 100px;
108
+ --radius-field: var(--radius-4);
109
+ --radius-tag: var(--radius-6);
110
+ --radius-bubble: var(--radius-8);
111
+ --radius-card: var(--radius-10);
112
+ --radius-sheet-top: var(--radius-20);
113
+ --radius-full: var(--radius-100);
114
114
  --size-icon-sm: 16px;
115
115
  --size-icon-md: 20px;
116
116
  --size-icon-lg: 24px;
@@ -1077,6 +1077,7 @@
1077
1077
  .snacky-banner-point-balance__item {
1078
1078
  display: flex;
1079
1079
  align-items: center;
1080
+ flex: 1;
1080
1081
  gap: var(--spacing-12);
1081
1082
  }
1082
1083
  .snacky-banner-point-balance__icon {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/theme/tokens.css","../src/theme/base.css","../src/components/Button/Button.css","../src/components/IconButton/IconButton.css","../src/components/IconButton/UploadButton.css","../src/components/Input/TextField.css","../src/components/Input/SearchField.css","../src/components/Input/OtpField.css","../src/components/Input/CopyField.css","../src/components/Input/ChatInput.css","../src/components/Input/AddressResult.css","../src/components/Chips/Chips.css","../src/components/RadioButton/RadioButton.css","../src/components/Checkbox/Checkbox.css","../src/components/Toggle/Toggle.css","../src/components/Navbar/Navbar.css","../src/components/Tab/Tab.css","../src/components/Header/Header.css","../src/components/Banner/Banner.css","../src/components/Badge/Badge.css","../src/components/Callout/Callout.css","../src/components/List/List.css","../src/components/Accordion/Accordion.css","../src/components/Modal/BottomSheet.css","../src/components/Section/Section.css","../src/components/Stepper/Stepper.css","../src/components/Calendar/Calendar.css","../src/components/Avatar/Avatar.css","../src/components/Illustration/Illustration.css","../src/components/ProductImage/ProductImage.css","../src/components/ProductCard/ProductCard.css","../src/components/ImagePlaceholder/ImagePlaceholder.css"],"sourcesContent":["/* Generated from tokens.json by scripts/generate-react-tokens.js - do not hand-edit. */\n:root {\n --color-primary-50: #fef8eb;\n --color-primary-100: #fde9bf;\n --color-primary-200: #fcdea1;\n --color-primary-300: #facf76;\n --color-primary-400: #f9c55b;\n --color-primary-500: #f8b732;\n --color-primary-600: #e2a72e;\n --color-primary-700: #b08224;\n --color-primary-800: #88651c;\n --color-primary-900: #684d15;\n --color-neutral-0: #ffffff;\n --color-neutral-10: #fdfdfd;\n --color-neutral-20: #f7f7f7;\n --color-neutral-50: #f3f3f3;\n --color-neutral-100: #e0e0e0;\n --color-neutral-200: #cccccc;\n --color-neutral-400: #a3a3a3;\n --color-neutral-500: #7a7a7a;\n --color-neutral-600: #6a6a6a;\n --color-neutral-700: #525252;\n --color-neutral-800: #4b4b4b;\n --color-neutral-900: #434343;\n --color-neutral-950: #333333;\n --color-red-50: #fdeeee;\n --color-red-100: #f9cbcb;\n --color-red-200: #f6b2b2;\n --color-red-300: #f28e8e;\n --color-red-400: #ef7979;\n --color-red-500: #eb5757;\n --color-red-600: #d64f4f;\n --color-red-700: #a73e3e;\n --color-red-800: #813030;\n --color-red-900: #632525;\n --bg-app: #f7f7f7;\n --bg-surface: #ffffff;\n --bg-surface-primary: #f8b732;\n --bg-surface-accent: #eb5757;\n --bg-surface-variant: #f3f3f3;\n --bg-surface-field: #ffffff;\n --bg-surface-highlight: #fef8eb;\n --bg-action-primary: #f8b732;\n --bg-action-primary-hover: #e2a72e;\n --bg-action-primary-pressed: #b08224;\n --bg-action-secondary: #ffffff;\n --bg-action-secondary-hover: #f3f3f3;\n --bg-action-secondary-pressed: #e0e0e0;\n --bg-action-disabled: #cccccc;\n --bg-action-primary-danger: #eb5757;\n --bg-action-primary-danger-hovered: #d64f4f;\n --bg-action-primary-danger-pressed: #a73e3e;\n --bg-overlay-dim: rgba(51,51,51,0.8);\n --border-main: #cccccc;\n --border-highlight: #fcdea1;\n --border-input-default: #cccccc;\n --border-input-active: #f8b732;\n --border-input-error: #eb5757;\n --border-action-secondary: #cccccc;\n --border-action-secondary-pressed: #a3a3a3;\n --border-action-danger: #eb5757;\n --border-action-disabled: #cccccc;\n --text-primary: #333333;\n --text-secondary: #7a7a7a;\n --text-placeholder: #7a7a7a;\n --text-disabled: #a3a3a3;\n --text-link: #88651c;\n --text-error: #a73e3e;\n --text-inverse: #ffffff;\n --text-on-action-primary: #333333;\n --text-on-action-secondary: #333333;\n --text-on-action-tertiary: #b08224;\n --text-on-action-tertiary-hovered: #88651c;\n --text-on-action-tertiary-pressed: #684d15;\n --text-action-danger: #d64f4f;\n --text-action-danger-hovered: #a73e3e;\n --text-action-danger-pressed: #813030;\n --text-action-disabled: #a3a3a3;\n --icon-primary: #333333;\n --icon-secondary: #525252;\n --icon-brand: #f8b732;\n --icon-disabled: #a3a3a3;\n --icon-active: #eb5757;\n --icon-on-accent: #ffffff;\n --spacing-2: 2px;\n --spacing-4: 4px;\n --spacing-8: 8px;\n --spacing-12: 12px;\n --spacing-16: 16px;\n --spacing-24: 24px;\n --spacing-32: 32px;\n --gap-icon-label: 4px;\n --gap-cell: 4px;\n --gap-text-icon: 8px;\n --gap-text-underline: 16px;\n --gap-layout-section-list: 8px;\n --gap-layout-block: 16px;\n --gap-layout-stack: 24px;\n --gap-layout-page: 32px;\n --margin-screen: 16px;\n --radius-4: 4px;\n --radius-6: 6px;\n --radius-8: 8px;\n --radius-10: 10px;\n --radius-20: 20px;\n --radius-100: 100px;\n --radius-999: 999px;\n --radius-field: 4px;\n --radius-tag: 6px;\n --radius-bubble: 8px;\n --radius-card: 10px;\n --radius-sheet-top: 20px;\n --radius-full: 100px;\n --size-icon-sm: 16px;\n --size-icon-md: 20px;\n --size-icon-lg: 24px;\n --size-avatar-sm: 32px;\n --size-avatar-md: 56px;\n --size-avatar-lg: 72px;\n --shadow-md: 0 4px 8px rgba(0,0,0,0.08);\n --shadow-lg: 0 10px 30px rgba(0,0,0,0.1);\n --shadow-top: 0 -4px 10px rgba(0,0,0,0.08);\n --font-h1-bold-family: 'Poppins', sans-serif;\n --font-h1-bold-size: 32px;\n --font-h1-bold-weight: 700;\n --font-h1-bold-line-height: 36px;\n --font-h1-bold-letter-spacing: 0.01em;\n --font-h2-bold-family: 'Poppins', sans-serif;\n --font-h2-bold-size: 20px;\n --font-h2-bold-weight: 700;\n --font-h2-bold-line-height: 36px;\n --font-h2-bold-letter-spacing: 0.01em;\n --font-h3-bold-family: 'Poppins', sans-serif;\n --font-h3-bold-size: 16px;\n --font-h3-bold-weight: 700;\n --font-h3-bold-line-height: 36px;\n --font-h3-bold-letter-spacing: 0.01em;\n --font-h3-regular-family: 'Poppins', sans-serif;\n --font-h3-regular-size: 16px;\n --font-h3-regular-weight: 400;\n --font-h3-regular-line-height: 36px;\n --font-h3-regular-letter-spacing: normal;\n --font-body-semibold-family: 'Poppins', sans-serif;\n --font-body-semibold-size: 14px;\n --font-body-semibold-weight: 600;\n --font-body-semibold-line-height: 24px;\n --font-body-semibold-letter-spacing: normal;\n --font-body-regular-family: 'Poppins', sans-serif;\n --font-body-regular-size: 14px;\n --font-body-regular-weight: 400;\n --font-body-regular-line-height: 24px;\n --font-body-regular-letter-spacing: normal;\n --font-small-semibold-family: 'Poppins', sans-serif;\n --font-small-semibold-size: 12px;\n --font-small-semibold-weight: 600;\n --font-small-semibold-line-height: 24px;\n --font-small-semibold-letter-spacing: normal;\n --font-small-bold-family: 'Poppins', sans-serif;\n --font-small-bold-size: 12px;\n --font-small-bold-weight: 700;\n --font-small-bold-line-height: 24px;\n --font-small-bold-letter-spacing: 0.01em;\n --font-small-regular-family: 'Poppins', sans-serif;\n --font-small-regular-size: 12px;\n --font-small-regular-weight: 400;\n --font-small-regular-line-height: 24px;\n --font-small-regular-letter-spacing: normal;\n --font-caption-semibold-family: 'Poppins', sans-serif;\n --font-caption-semibold-size: 10px;\n --font-caption-semibold-weight: 600;\n --font-caption-semibold-line-height: 23px;\n --font-caption-semibold-letter-spacing: 0.01em;\n --font-caption-regular-family: 'Poppins', sans-serif;\n --font-caption-regular-size: 10px;\n --font-caption-regular-weight: 400;\n --font-caption-regular-line-height: 16px;\n --font-caption-regular-letter-spacing: 0.01em;\n}\n","/* Base rules every Snacky component depends on.\n *\n * The docs site (../../index.html) opens with a global\n * `*,*::before,*::after{box-sizing:border-box}` reset, so its Live Preview has\n * always rendered components at their spec sizes. The package ships no reset,\n * and only some of its own selectors set the property, so on a host page\n * without one every fixed-size component with padding came out oversized:\n * `.snacky-product-card--list` measured 168px instead of 152, and\n * `.snacky-iconbtn--primary` 48px instead of 32.\n *\n * Scoped to `snacky-*` rather than `*` so it never touches the host page's own\n * elements, or the content a caller passes into a component's slot.\n */\n[class^='snacky-'],\n[class*=' snacky-'],\n[class^='snacky-']::before,\n[class^='snacky-']::after,\n[class*=' snacky-']::before,\n[class*=' snacky-']::after {\n box-sizing: border-box;\n}\n",".snacky-btn {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n /* Figma gives every variant a fixed 48 (large) / 40 (small) height and draws\n Secondary's stroke INSIDE it. Without an explicit height the box grew from\n padding alone, so Secondary's 1px border pushed it to 50 while every other\n variant sat at 48. */\n height: 48px;\n padding: var(--spacing-12) var(--spacing-8);\n border-radius: var(--radius-field);\n border: none;\n font-family: var(--font-small-semibold-family);\n font-size: var(--font-small-semibold-size);\n font-weight: var(--font-small-semibold-weight);\n line-height: var(--font-small-semibold-line-height);\n cursor: pointer;\n white-space: nowrap;\n transition: background-color 0.12s ease, border-color 0.12s ease, color 0.12s ease;\n letter-spacing: var(--font-small-semibold-letter-spacing);\n}\n\n.snacky-btn:disabled {\n cursor: not-allowed;\n}\n\n.snacky-btn--small {\n height: 40px;\n padding: var(--spacing-8) var(--spacing-8);\n}\n/* The slot itself is documented as a generic 24x24 (size.icon.lg), but that\n reads oversized next to Small's 12px label - scaled down to size.icon.md\n (20x20) to stay proportional. */\n.snacky-btn--small .snacky-btn__icon {\n width: var(--size-icon-md);\n height: var(--size-icon-md);\n}\n\n/* The icon is absolutely positioned (out of flow, per Figma's own \"Slot\n Usage\" guideline) so a hug-width button never reserves space for it on its\n own - without this, the label centers across the button's full width and\n the icon sits on top of it. Reserve exactly the space the icon occupies\n (its left offset + its own size) plus a text-icon gap, so the label starts\n right after the icon instead of overlapping it. */\n.snacky-btn--with-icon {\n padding-left: calc(var(--spacing-8) + var(--size-icon-lg) + var(--gap-text-icon));\n}\n.snacky-btn--small.snacky-btn--with-icon {\n padding-left: calc(var(--spacing-8) + var(--size-icon-md) + var(--gap-text-icon));\n}\n\n/* Primary */\n.snacky-btn--primary {\n background: var(--bg-action-primary);\n color: var(--text-on-action-primary);\n}\n.snacky-btn--primary:hover:not(:disabled) { background: var(--bg-action-primary-hover); }\n.snacky-btn--primary:active:not(:disabled) { background: var(--bg-action-primary-pressed); }\n.snacky-btn--primary:disabled { background: var(--bg-action-disabled); color: var(--text-action-disabled); }\n\n/* Primary + Danger */\n.snacky-btn--primary.snacky-btn--danger {\n background: var(--bg-action-primary-danger);\n color: var(--text-on-action-primary);\n}\n.snacky-btn--primary.snacky-btn--danger:hover:not(:disabled) { background: var(--bg-action-primary-danger-hovered); }\n.snacky-btn--primary.snacky-btn--danger:active:not(:disabled) { background: var(--bg-action-primary-danger-pressed); }\n/* Flagged asymmetry, confirmed against the site's own live implementation:\n Primary+Danger's disabled state carries a border that plain Primary's\n disabled state does not. */\n.snacky-btn--primary.snacky-btn--danger:disabled { background: var(--bg-action-disabled); color: var(--text-action-disabled); border: 1px solid var(--border-action-disabled); }\n\n/* Secondary */\n.snacky-btn--secondary {\n background: var(--bg-action-secondary);\n border: 1px solid var(--border-action-secondary);\n color: var(--text-on-action-primary);\n}\n.snacky-btn--secondary:hover:not(:disabled) { background: var(--bg-action-secondary-hover); }\n.snacky-btn--secondary:active:not(:disabled) { background: var(--bg-action-secondary-pressed); }\n.snacky-btn--secondary:disabled { color: var(--text-action-disabled); }\n\n/* Secondary + Danger */\n.snacky-btn--secondary.snacky-btn--danger {\n border-color: var(--border-action-danger);\n color: var(--text-action-danger);\n}\n.snacky-btn--secondary.snacky-btn--danger:hover:not(:disabled) { background: var(--bg-action-secondary-hover); }\n.snacky-btn--secondary.snacky-btn--danger:active:not(:disabled) { background: var(--bg-action-secondary-pressed); }\n.snacky-btn--secondary.snacky-btn--danger:disabled { border-color: var(--border-action-disabled); color: var(--text-action-disabled); }\n\n/* Tertiary - ghost, never a fill or border, including disabled */\n.snacky-btn--tertiary {\n background: transparent;\n color: var(--text-on-action-tertiary);\n}\n.snacky-btn--tertiary:hover:not(:disabled) { color: var(--text-on-action-tertiary-hovered); }\n.snacky-btn--tertiary:active:not(:disabled) { color: var(--text-on-action-tertiary-pressed); }\n.snacky-btn--tertiary:disabled { color: var(--text-action-disabled); }\n\n/* Tertiary + Danger */\n.snacky-btn--tertiary.snacky-btn--danger { color: var(--text-action-danger); }\n.snacky-btn--tertiary.snacky-btn--danger:hover:not(:disabled) { color: var(--text-action-danger-hovered); }\n.snacky-btn--tertiary.snacky-btn--danger:active:not(:disabled) { color: var(--text-action-danger-pressed); }\n.snacky-btn--tertiary.snacky-btn--danger:disabled { color: var(--text-action-disabled); }\n\n.snacky-btn__icon {\n position: absolute;\n left: var(--spacing-8);\n top: 50%;\n transform: translateY(-50%);\n display: inline-flex;\n width: var(--size-icon-lg);\n height: var(--size-icon-lg);\n flex-shrink: 0;\n}\n",".snacky-iconbtn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n border: none;\n border-radius: var(--radius-full);\n cursor: pointer;\n transition: background-color 0.12s ease;\n}\n.snacky-iconbtn:disabled { cursor: not-allowed; }\n.snacky-iconbtn svg,\n.snacky-iconbtn img { width: 100%; height: 100%; }\n\n/* Primary - 32px default, 24px small */\n.snacky-iconbtn--primary {\n width: 32px;\n height: 32px;\n padding: var(--spacing-8);\n background: var(--bg-action-primary);\n}\n/* Figma binds every icon-button glyph to an icon/* variable, not a text/* one.\n Same #333333 either way, but the icon token is the one that is actually\n specced, so a future retint of icon/icon-primary reaches these. */\n.snacky-iconbtn--primary .snacky-iconbtn__icon { width: 16px; height: 16px; color: var(--icon-primary); }\n.snacky-iconbtn--primary:hover:not(:disabled) { background: var(--bg-action-primary-hover); }\n.snacky-iconbtn--primary:active:not(:disabled) { background: var(--bg-action-primary-pressed); }\n.snacky-iconbtn--primary:disabled { background: var(--bg-action-disabled); border: 1px solid var(--border-action-disabled); }\n.snacky-iconbtn--primary:disabled .snacky-iconbtn__icon { color: var(--icon-disabled); }\n\n.snacky-iconbtn--primary.snacky-iconbtn--small {\n width: 24px;\n height: 24px;\n padding: var(--spacing-4);\n}\n\n/* Secondary - 40px, elevated, can act as a toggle via `selected` */\n.snacky-iconbtn--secondary {\n width: 40px;\n height: 40px;\n padding: var(--spacing-8);\n background: var(--bg-action-secondary);\n box-shadow: var(--shadow-md);\n}\n/* icon-primary (#333333), NOT icon-secondary. Figma's secondary set binds\n default/hovered/pressed all to icon/icon-primary; icon-secondary (#525252)\n appears only on the tertiary variant's hover. */\n.snacky-iconbtn--secondary .snacky-iconbtn__icon { width: 20px; height: 20px; color: var(--icon-primary); }\n.snacky-iconbtn--secondary:hover:not(:disabled) { background: var(--bg-action-secondary-hover); }\n.snacky-iconbtn--secondary:active:not(:disabled) { background: var(--bg-action-secondary-pressed); }\n.snacky-iconbtn--secondary:disabled { background: var(--bg-action-disabled); box-shadow: none; }\n.snacky-iconbtn--secondary:disabled .snacky-iconbtn__icon { color: var(--icon-disabled); }\n.snacky-iconbtn--secondary.snacky-iconbtn--selected .snacky-iconbtn__icon { color: var(--icon-active); }\n\n/* Tertiary - 40px, no resting fill, only a transient state-layer overlay */\n.snacky-iconbtn--tertiary {\n width: 40px;\n height: 40px;\n padding: var(--spacing-8);\n background: transparent;\n}\n.snacky-iconbtn--tertiary .snacky-iconbtn__icon { width: 24px; height: 24px; color: var(--icon-primary); }\n.snacky-iconbtn--tertiary:hover:not(:disabled) { background: rgba(0, 0, 0, 0.08); }\n.snacky-iconbtn--tertiary:hover:not(:disabled) .snacky-iconbtn__icon { color: var(--icon-secondary); }\n.snacky-iconbtn--tertiary:active:not(:disabled) { background: rgba(0, 0, 0, 0.12); }\n.snacky-iconbtn--tertiary:disabled .snacky-iconbtn__icon { color: var(--icon-disabled); }\n",".snacky-upload {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 72px;\n height: 72px;\n padding: var(--spacing-24);\n border-radius: var(--radius-full);\n background: var(--bg-surface);\n border: 1px dashed var(--border-main);\n cursor: pointer;\n transition: background-color 0.12s ease;\n}\n.snacky-upload svg,\n.snacky-upload img { width: 100%; height: 100%; }\n.snacky-upload:hover { background: var(--bg-action-secondary-hover); }\n.snacky-upload:active { background: var(--bg-action-secondary-pressed); }\n",".snacky-field {\n display: flex;\n align-items: center;\n gap: var(--gap-text-icon);\n width: 100%;\n height: 48px;\n padding: var(--spacing-12) var(--spacing-8);\n background: var(--bg-surface-field);\n border: 1px solid var(--border-input-default);\n border-radius: var(--radius-field);\n box-sizing: border-box;\n transition: border-color 0.12s ease;\n}\n\n.snacky-field:focus-within {\n border-color: var(--border-input-active);\n}\n\n.snacky-field--error {\n border-color: var(--border-input-error) !important;\n}\n\n.snacky-field--disabled {\n background: var(--bg-surface-variant);\n cursor: not-allowed;\n}\n\n.snacky-field__input {\n flex: 1;\n min-width: 0;\n border: none;\n outline: none;\n background: transparent;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n color: var(--text-primary);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n\n.snacky-field__input::placeholder {\n color: var(--text-placeholder);\n}\n\n.snacky-field__input:disabled {\n cursor: not-allowed;\n color: var(--text-disabled);\n}\n\n.snacky-field__icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 20px;\n height: 20px;\n /* Figma binds the resting glyph to text/text-placeholder and the focused one\n to text/text-primary, not icon-secondary. */\n color: var(--text-placeholder);\n}\n.snacky-field:focus-within .snacky-field__icon { color: var(--text-primary); }\n\n.snacky-field__icon--button {\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n color: inherit;\n}\n\n.snacky-field-label {\n display: block;\n margin-bottom: var(--spacing-4);\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n color: var(--text-primary);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n\n.snacky-field-error {\n display: block;\n margin-top: var(--spacing-4);\n font-family: var(--font-caption-regular-family);\n font-size: var(--font-caption-regular-size);\n color: var(--text-error);\n font-weight: var(--font-caption-regular-weight);\n line-height: var(--font-caption-regular-line-height);\n letter-spacing: var(--font-caption-regular-letter-spacing);\n}\n",".snacky-search {\n display: flex;\n align-items: center;\n gap: var(--spacing-12);\n /* Animates 260px -> 312px on focus, matching the site's own verified\n implementation - not a fluid 100% field. */\n width: 260px;\n height: 40px;\n padding: var(--spacing-8) var(--spacing-12);\n background: var(--bg-surface-variant);\n border: 1px solid transparent;\n border-radius: var(--radius-field);\n box-sizing: border-box;\n transition: border-color 0.12s ease, width 0.15s ease;\n}\n.snacky-search:focus-within {\n width: 312px;\n border-color: var(--border-input-active);\n}\n.snacky-search__input {\n flex: 1;\n min-width: 0;\n border: none;\n outline: none;\n background: transparent;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n color: var(--text-primary);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-search__input::placeholder {\n color: var(--text-placeholder);\n}\n.snacky-search__icon {\n display: inline-flex;\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n color: var(--text-placeholder);\n}\n.snacky-search__clear {\n display: inline-flex;\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n color: var(--text-placeholder);\n}\n",".snacky-otp {\n display: flex;\n gap: var(--spacing-4);\n}\n.snacky-otp__cell {\n width: 48px;\n height: 48px;\n padding: 0;\n box-sizing: border-box;\n text-align: center;\n border: 1px solid transparent;\n border-radius: var(--radius-field);\n background: var(--bg-surface-variant);\n font-family: var(--font-h3-bold-family);\n font-size: var(--font-h3-bold-size);\n font-weight: var(--font-h3-bold-weight);\n /* 46px, not the h3Bold token's 36px - specifically tuned to center a\n single digit in the 48px cell, per the site's own implementation. */\n line-height: 46px;\n letter-spacing: 0.16px;\n color: var(--text-primary);\n outline: none;\n transition: border-color 0.1s ease;\n}\n.snacky-otp__cell:focus {\n border-color: var(--border-input-active);\n}\n/* Figma defines no disabled OTP variant (only default/active/filled), so this\n is not a spec value: it reuses the disabled text colour TextField already\n uses, so the prop is at least visible. Without it a disabled field rendered\n identically to an enabled one and the prop looked broken. */\n.snacky-otp__cell:disabled {\n cursor: not-allowed;\n color: var(--text-disabled);\n}\n",".snacky-copy {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n /* Figma has two heights here: 64 by default, because the Copy action sits in\n its own 8px-padded 40px-tall frame, and 48 once copied, where the action\n collapses to plain text. The package was pinned at 48 for both. */\n height: 64px;\n padding: var(--spacing-12);\n background: var(--bg-surface-variant);\n border-radius: var(--radius-field);\n box-sizing: border-box;\n}\n.snacky-copy__value {\n font-family: var(--font-body-semibold-family);\n font-size: var(--font-body-semibold-size);\n font-weight: var(--font-body-semibold-weight);\n color: var(--text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n line-height: var(--font-body-semibold-line-height);\n letter-spacing: var(--font-body-semibold-letter-spacing);\n}\n.snacky-copy__action {\n flex-shrink: 0;\n margin-left: var(--spacing-12);\n background: none;\n border: none;\n padding: var(--spacing-8);\n cursor: pointer;\n font-family: var(--font-small-bold-family);\n font-size: var(--font-small-bold-size);\n font-weight: var(--font-small-bold-weight);\n color: var(--text-link);\n line-height: var(--font-small-bold-line-height);\n letter-spacing: var(--font-small-bold-letter-spacing);\n}\n.snacky-copy__action--copied {\n color: var(--text-secondary);\n /* the copied state is plain text, not a padded button */\n padding: 0;\n}\n.snacky-copy:has(.snacky-copy__action--copied) {\n height: 48px;\n}\n",".snacky-chatfield {\n display: flex;\n align-items: center;\n gap: var(--gap-text-icon);\n width: 100%;\n height: 72px;\n padding: var(--spacing-12);\n background: var(--bg-surface);\n border: 1px solid var(--border-input-default);\n border-radius: var(--radius-field);\n box-sizing: border-box;\n transition: border-color 0.12s ease;\n}\n.snacky-chatfield:focus-within {\n border-color: var(--border-input-active);\n}\n.snacky-chatfield__input {\n flex: 1;\n min-width: 0;\n border: none;\n outline: none;\n background: transparent;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n color: var(--text-primary);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-chatfield__input::placeholder {\n color: var(--text-placeholder);\n}\n.snacky-chatfield__send {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 48px;\n height: 48px;\n border: none;\n border-radius: var(--radius-full);\n /* Transparent with a muted icon when empty, not a grayed-out disabled\n circle - it only fills once there's something to send. */\n background: transparent;\n /* Figma binds the resting send glyph to text/text-placeholder (#7a7a7a). */\n color: var(--text-placeholder);\n cursor: default;\n transition: background-color 0.15s ease, color 0.15s ease;\n}\n.snacky-chatfield__send--active {\n background: var(--bg-action-primary);\n /* White on the accent circle. Figma binds this to background/surface/bg-surface,\n which is the same #ffffff but an odd name for an icon colour, so the\n equivalent icon token is used here. It is NOT the dark text-on-action-primary\n that a labelled button would use. */\n color: var(--icon-on-accent);\n cursor: pointer;\n}\n.snacky-chatfield__send--active:hover { background: var(--bg-action-primary-hover); }\n",".snacky-address-result {\n display: flex;\n align-items: flex-start;\n gap: var(--gap-text-icon);\n width: 100%;\n /* Figma's \"Address, Search (Selected)\" is 72: 12/12 padding around a 24 title\n and a 24 subtitle, with the stroke drawn INSIDE. box-sizing:border-box\n plus this explicit height already absorbs a real border into the 72px\n total (verified: both render 72px), so a plain border is correct here -\n unlike Tab, which has no explicit height for box-sizing to apply to. */\n height: 72px;\n padding: var(--spacing-12) var(--spacing-8);\n background: var(--bg-surface);\n border: 1px solid var(--border-input-default);\n border-radius: var(--radius-field);\n box-sizing: border-box;\n cursor: pointer;\n text-align: left;\n}\n.snacky-address-result__icon {\n display: inline-flex;\n flex-shrink: 0;\n width: 20px;\n height: 20px;\n color: var(--text-placeholder);\n margin-top: 2px;\n}\n.snacky-address-result__title {\n margin: 0;\n font-family: var(--font-small-bold-family);\n font-size: var(--font-small-bold-size);\n font-weight: var(--font-small-bold-weight);\n color: var(--text-primary);\n line-height: var(--font-small-bold-line-height);\n letter-spacing: var(--font-small-bold-letter-spacing);\n}\n.snacky-address-result__subtitle {\n margin: 0;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n color: var(--text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n",".snacky-chip {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-4);\n /* Figma gives both chip types a fixed 40 with the stroke inside. Without an\n explicit height the 1px border stacked on 8 + 24 + 8 and made it 42. */\n height: 40px;\n padding: var(--spacing-8);\n border-radius: var(--radius-full);\n background: var(--bg-surface);\n border: 1px solid var(--border-main);\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n color: var(--text-primary);\n cursor: pointer;\n white-space: nowrap;\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-chip--selected {\n background: var(--bg-surface-highlight);\n border-color: var(--color-primary-500);\n}\n.snacky-chip__thumb {\n width: 24px;\n height: 24px;\n flex-shrink: 0;\n object-fit: contain;\n}\n",".snacky-radio-option {\n display: inline-flex;\n align-items: center;\n gap: var(--gap-icon-label);\n cursor: pointer;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n color: var(--text-primary);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-radio-option--disabled {\n cursor: not-allowed;\n}\n.snacky-radio {\n appearance: none;\n width: 24px;\n height: 24px;\n margin: 0;\n flex-shrink: 0;\n box-sizing: border-box;\n border-radius: 999px;\n border: 1px solid var(--border-main);\n background: transparent;\n cursor: pointer;\n position: relative;\n}\n.snacky-radio:checked {\n /* Figma binds both the ring and the dot to background/action/bg-action-primary\n (same #f8b732 as the primary-500 primitive this used before, but the real\n semantic token the file actually references). */\n border-color: var(--bg-action-primary);\n}\n.snacky-radio:checked::after {\n content: '';\n position: absolute;\n inset: 0;\n margin: auto;\n width: 12px;\n height: 12px;\n border-radius: 999px;\n background: var(--bg-action-primary);\n}\n.snacky-radio:disabled {\n cursor: not-allowed;\n border-color: var(--border-main);\n background: var(--bg-surface-variant);\n}\n/* Disabled suppresses the selected dot entirely, even if checked - matches\n the site's own verified implementation exactly. */\n.snacky-radio:disabled::after {\n display: none;\n}\n",".snacky-checkbox-option {\n display: inline-flex;\n align-items: center;\n gap: var(--gap-icon-label);\n cursor: pointer;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n color: var(--text-primary);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-checkbox {\n appearance: none;\n width: 24px;\n height: 24px;\n margin: 0;\n box-sizing: border-box;\n flex-shrink: 0;\n /* Off state is a white field surface with an outline - updated in Figma\n (node 444:11084) from an earlier solid neutral-500 fill to this outline\n style. Figma binds the stroke to border/border-main, not the\n border-input-default this used before (same #cccccc either way). */\n border: 1px solid var(--border-main);\n border-radius: var(--radius-field);\n cursor: pointer;\n position: relative;\n background: var(--bg-surface-field);\n}\n.snacky-checkbox:checked {\n background: var(--color-primary-500);\n border-color: var(--color-primary-500);\n}\n.snacky-checkbox:checked::after {\n content: '';\n position: absolute;\n inset: 3px;\n /* Confirmed against Figma: the checkmark is white (icon-on-accent), not\n text-primary - it reads as a white cutout in the compound icon path, not a\n dark mark layered on top. */\n background: var(--icon-on-accent);\n -webkit-mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E\") center / contain no-repeat;\n mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E\") center / contain no-repeat;\n}\n",".snacky-toggle {\n position: relative;\n display: inline-block;\n width: 56px;\n height: 32px;\n margin: 0;\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n appearance: none;\n}\n.snacky-toggle:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n.snacky-toggle__track {\n position: absolute;\n left: 0;\n top: 4px;\n width: 56px;\n height: 24px;\n border-radius: 12px;\n /* Bound to bg-action-disabled in Figma (same #cccccc as neutral-200, this\n just matches the actual token binding, confirmed via the file's variables). */\n background: var(--bg-action-disabled);\n transition: background-color 0.2s ease;\n}\n.snacky-toggle--on .snacky-toggle__track {\n /* \"Accent tint\" per Figma - a light wash, not the solid accent color. Figma's\n actual paint (#fffbe9) isn't bound to any variable and isn't quite\n bg-surface-highlight/primary-50 (#fef8eb) either, close enough (a few\n values out of 255 per channel) that this token is used rather than a new\n one-off raw color for an likely-untokenized value in Figma itself. */\n background: var(--bg-surface-highlight);\n}\n.snacky-toggle__thumb {\n position: absolute;\n top: 0;\n left: 0;\n width: 32px;\n height: 32px;\n border-radius: 999px;\n /* Confirmed against Figma (bound to the icon-disabled variable): #a3a3a3,\n not neutral-500 (#7a7a7a). */\n background: var(--icon-disabled);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n transition: left 0.2s ease, background-color 0.2s ease;\n}\n.snacky-toggle--on .snacky-toggle__thumb {\n left: 24px;\n background: var(--color-primary-500);\n}\n",".snacky-navbar {\n display: flex;\n width: 100%;\n background: var(--bg-surface);\n box-shadow: var(--shadow-top);\n}\n.snacky-navbar__item {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--gap-icon-label);\n padding: var(--spacing-12) 0;\n background: none;\n border: none;\n cursor: pointer;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n color: var(--text-secondary);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-navbar__item--active {\n font-family: var(--font-small-bold-family);\n font-weight: var(--font-small-bold-weight);\n color: var(--text-primary);\n font-size: var(--font-small-bold-size);\n line-height: var(--font-small-bold-line-height);\n letter-spacing: var(--font-small-bold-letter-spacing);\n}\n.snacky-navbar__icon {\n display: inline-flex;\n width: 20px;\n height: 20px;\n /* Icon and label use different inactive colors in the site's own\n verified implementation - icon-secondary, not text-secondary. */\n color: var(--icon-secondary);\n}\n.snacky-navbar__item--active .snacky-navbar__icon {\n color: var(--color-primary-500);\n}\n",".snacky-tabrow {\n display: flex;\n gap: var(--spacing-24);\n border-bottom: 1px solid var(--border-main);\n}\n.snacky-tab {\n background: none;\n border: none;\n /* Figma's own token for this exact gap is gap.text-underline (16px,\n documented as \"Text → underline indicator gap (Tab)\"), not spacing-12.\n The accent line is painted as an inset box-shadow rather than a real\n border so it doesn't add its own 2px on top - a real border pushed the\n tab to 38 against Figma's declared 40 (24 text + 16 gap, no extra). The\n transparent/coloured swap below still reserves the same space either\n way, so switching tabs causes no layout shift. */\n box-shadow: inset 0 -2px 0 0 transparent;\n padding: 0 0 var(--gap-text-underline) 0;\n cursor: pointer;\n font-family: var(--font-body-regular-family);\n font-size: 14px;\n line-height: var(--font-body-regular-line-height);\n color: var(--text-primary);\n transition: color 0.15s ease;\n font-weight: var(--font-body-regular-weight);\n letter-spacing: var(--font-body-regular-letter-spacing);\n}\n.snacky-tab--active {\n font-family: var(--font-body-semibold-family);\n font-weight: var(--font-body-semibold-weight);\n /* Re-verified against Figma's actual bound variables (an earlier pass\n read this as the raw primary-700 primitive): the active label's text\n fill is bound to text/on-action/text-on-action-tertiary (#b08224,\n same value as primary-700, but the real semantic token, matching the\n Tertiary button's default label color). The underline's stroke is\n bound to border/input/border-input-active (#f8b732) - an input-focus\n token reused here, which reads as incidental Figma variable reuse\n rather than an intentional shared role, so this keeps the primitive\n --color-primary-500 instead of adopting a misleading token name. */\n color: var(--text-on-action-tertiary);\n box-shadow: inset 0 -2px 0 0 var(--color-primary-500);\n font-size: var(--font-body-semibold-size);\n line-height: var(--font-body-semibold-line-height);\n letter-spacing: var(--font-body-semibold-letter-spacing);\n}\n",".snacky-header {\n display: flex;\n align-items: center;\n width: 100%;\n box-sizing: border-box;\n padding: var(--spacing-16) var(--spacing-8);\n background: var(--bg-surface);\n}\n.snacky-header__icon-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 40px;\n height: 40px;\n padding: 0;\n border: none;\n border-radius: var(--radius-full);\n background: transparent;\n color: var(--icon-primary);\n cursor: pointer;\n}\n.snacky-header__title-row {\n flex: 1;\n min-width: 0;\n display: flex;\n justify-content: center;\n}\n/* When a leading icon is present but there's no trailing action, the title\n row gets matching right padding so the text stays optically centered\n against the whole bar, not just the leftover space next to the icon. */\n.snacky-header__title-row--balance {\n padding-right: 40px;\n}\n.snacky-header__title {\n font-family: var(--font-h3-bold-family);\n font-weight: var(--font-h3-bold-weight);\n font-size: var(--font-h3-bold-size);\n line-height: var(--font-h3-bold-line-height);\n letter-spacing: var(--font-h3-bold-letter-spacing);\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n",".snacky-banner-hero {\n display: block;\n width: 100%;\n /* Its two siblings below both pin an aspect-ratio; this one did not, so the\n artwork's own proportions decided the height and a 6.4:1 strip rendered the\n banner 49 tall instead of Figma's 312x128. */\n aspect-ratio: 312 / 128;\n border-radius: var(--radius-field);\n box-shadow: var(--shadow-md);\n object-fit: cover;\n}\n.snacky-banner-square {\n display: block;\n width: 100%;\n aspect-ratio: 360 / 334;\n border-radius: var(--radius-bubble);\n object-fit: cover;\n}\n.snacky-banner-full {\n display: block;\n width: 100%;\n aspect-ratio: 360 / 176;\n object-fit: cover;\n}\n.snacky-banner-point-balance {\n /* Figma's own frame is 312 wide and hugs its content, which is why this was\n briefly `display: inline-flex` with no width. That reads fine in\n isolation, but real usage sits this next to a sibling of the same width\n (the \"Default\"/\"LowBalance\" pair in the docs gallery), and hugging made a\n low-balance \"0\" / \"Rp 0\" row collapse to a fraction of the width its\n sibling used, stranded inside whatever wider container held it. Filling\n the container keeps the banner a consistent width regardless of content\n length; `justify-content` stays at its flex-start default (not\n space-between) so the two item groups still stay grouped on the left\n with a plain `gap`, they just no longer get spread across the full\n width the way the original space-between bug did. */\n display: flex;\n width: 100%;\n align-items: center;\n padding: var(--spacing-8) var(--spacing-16);\n /* 8px, per Figma's `Property 1=point-balance` frame. Primitive rather than a\n semantic gap token because none covers this: gap.text-icon is also 8px but\n is documented as a field row's text-to-icon gap, not the split between the\n banner's two halves. */\n gap: var(--spacing-8);\n background: var(--bg-surface-highlight);\n /* Figma draws this stroke INSIDE a 60-tall frame. There's no explicit height\n on this rule, so box-sizing:border-box alone can't absorb a real border -\n unlike AddressResult, which has a fixed height and uses a plain border.\n An inset shadow paints the same 1px line without adding to the box, so the\n row's own content (56px: 20 padding + 36 item) plus this 8+8 padding\n still lands on 60 rather than 62. */\n box-shadow: inset 0 0 0 1px var(--color-primary-500);\n border-radius: var(--radius-card);\n box-sizing: border-box;\n}\n.snacky-banner-point-balance__item {\n display: flex;\n align-items: center;\n /* 12px, per Figma's \"Points and Balance Container\". This was gap.icon-label\n (4px), which is documented as a *vertical* navbar/menu icon-to-label gap,\n so it was wrong on both the axis and the value and left the icon jammed\n against the text. No semantic gap token is 12px, hence the primitive. */\n gap: var(--spacing-12);\n}\n.snacky-banner-point-balance__icon {\n /* Figma binds both icons to icon/icon-brand and draws them at 16x16. Without\n an explicit colour the icons render currentColor, which inherits the row's\n dark label colour instead of the accent. */\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n color: var(--icon-brand);\n}\n.snacky-banner-point-balance__label {\n margin: 0;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n color: var(--text-primary);\n font-weight: var(--font-small-regular-weight);\n /* Figma authors this label node at 20 tall even though its line-height reads\n 24, and 20 + the value's 24 is what makes the banner exactly 60. Deliberate\n override of the token's 24. */\n line-height: 20px;\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-banner-point-balance__value {\n margin: 0;\n font-family: var(--font-small-bold-family);\n font-weight: var(--font-small-bold-weight);\n color: var(--text-primary);\n font-size: var(--font-small-bold-size);\n line-height: var(--font-small-bold-line-height);\n letter-spacing: var(--font-small-bold-letter-spacing);\n}\n.snacky-banner-point-balance__divider {\n width: 1px;\n align-self: stretch;\n background: var(--color-primary-500);\n}\n\n.snacky-banner-alert {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n /* 40 is Figma's single-line sample, not a cap - a fixed height clipped any\n message long enough to wrap onto a second line. min-height keeps the\n 40px default and lets the row hug taller wrapped content instead. */\n min-height: 40px;\n padding: var(--spacing-8) var(--spacing-24);\n gap: var(--spacing-4);\n background: var(--bg-surface-accent);\n box-sizing: border-box;\n}\n.snacky-banner-alert__message {\n margin: 0;\n /* Lets the message shrink and wrap within the row instead of pushing the\n countdown out or overflowing sideways - a flex item's default min-width\n is its unwrapped content width, which defeats wrapping. */\n flex: 1 1 auto;\n min-width: 0;\n font-family: var(--font-body-regular-family);\n font-size: var(--font-body-regular-size);\n color: var(--text-inverse);\n font-weight: var(--font-body-regular-weight);\n line-height: var(--font-body-regular-line-height);\n letter-spacing: var(--font-body-regular-letter-spacing);\n}\n.snacky-banner-alert__countdown {\n margin: 0;\n font-family: var(--font-body-semibold-family);\n font-weight: var(--font-body-semibold-weight);\n color: var(--text-inverse);\n font-size: var(--font-body-semibold-size);\n line-height: var(--font-body-semibold-line-height);\n letter-spacing: var(--font-body-semibold-letter-spacing);\n}\n",".snacky-badge-wrap {\n position: relative;\n display: inline-flex;\n}\n.snacky-badge-notification {\n position: absolute;\n top: -8px;\n right: -10px;\n min-width: 20px;\n height: 19px;\n padding: var(--spacing-2) var(--spacing-4);\n border-radius: 999px;\n background: var(--bg-surface-accent);\n color: var(--text-inverse);\n font-family: var(--font-caption-semibold-family);\n font-size: var(--font-caption-semibold-size);\n font-weight: var(--font-caption-semibold-weight);\n display: flex;\n align-items: center;\n justify-content: center;\n line-height: 1;\n letter-spacing: var(--font-caption-semibold-letter-spacing);\n}\n.snacky-discount-tag {\n /* Figma: 24 tall. The 16px caption line box plus 2/4 padding only made 20. */\n height: 24px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: var(--spacing-2) var(--spacing-4);\n border-radius: var(--radius-tag);\n background: var(--bg-surface-accent);\n color: var(--text-inverse);\n font-family: var(--font-caption-semibold-family);\n font-size: var(--font-caption-semibold-size);\n font-weight: var(--font-caption-semibold-weight);\n line-height: var(--font-caption-semibold-line-height);\n letter-spacing: var(--font-caption-semibold-letter-spacing);\n}\n.snacky-soldout-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: var(--spacing-12) var(--spacing-8);\n border-radius: 999px;\n background: rgba(51, 51, 51, 0.8);\n color: var(--text-inverse);\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-info-badge {\n display: inline-flex;\n align-items: center;\n /* Icon -> label gap. Only applies when the optional icon slot is filled;\n with no icon the badge is a single text node and the gap collapses. */\n gap: var(--gap-text-icon);\n /* Figma: 32 tall with the stroke inside; the 1px border was stacking on top. */\n height: 32px;\n padding: var(--spacing-8);\n border-radius: var(--radius-field);\n background: var(--bg-surface-highlight);\n border: 1px solid var(--color-primary-500);\n color: var(--text-primary);\n font-family: var(--font-caption-regular-family);\n font-size: var(--font-caption-regular-size);\n font-weight: var(--font-caption-regular-weight);\n line-height: var(--font-caption-regular-line-height);\n letter-spacing: var(--font-caption-regular-letter-spacing);\n}\n.snacky-info-badge__icon {\n display: inline-flex;\n flex-shrink: 0;\n /* Figma binds this glyph to icon/icon-brand, and the icons render\n currentColor, so tint the slot rather than making every caller pass a\n color prop. Matches SnackyInfoBadge's LocalContentColor in compose-ui. */\n color: var(--icon-brand);\n /* 12x12, raw rather than a token on purpose: the icon size scale is\n 16/20/24 (size.icon.sm/md/lg) and Figma draws this one at 12, below the\n smallest step. Sized here rather than left to the caller so the badge\n stays 32 tall whatever icon is passed in. */\n width: 12px;\n height: 12px;\n}\n.snacky-info-badge__icon svg {\n width: 100%;\n height: 100%;\n}\n",".snacky-callout {\n display: inline-flex;\n flex-direction: column;\n gap: var(--spacing-4);\n max-width: 200px;\n padding: var(--spacing-12) var(--spacing-8);\n border-radius: var(--radius-bubble);\n font-family: var(--font-body-regular-family);\n font-size: var(--font-body-regular-size);\n color: var(--text-primary);\n font-weight: var(--font-body-regular-weight);\n line-height: var(--font-body-regular-line-height);\n letter-spacing: var(--font-body-regular-letter-spacing);\n}\n.snacky-callout--received {\n align-self: flex-start;\n background: var(--bg-surface);\n /* No box-shadow: confirmed against Figma (node 8690:7424), the Received\n bubble has an empty effects array, flat like Sent/Pending. */\n}\n.snacky-callout--sent,\n.snacky-callout--pending {\n align-self: flex-end;\n background: var(--color-primary-500);\n}\n.snacky-callout__message {\n margin: 0;\n width: 100%;\n}\n.snacky-callout__meta {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--spacing-4);\n width: 100%;\n font-family: var(--font-caption-regular-family);\n font-size: var(--font-caption-regular-size);\n color: var(--text-primary);\n text-align: right;\n font-weight: var(--font-caption-regular-weight);\n line-height: var(--font-caption-regular-line-height);\n letter-spacing: var(--font-caption-regular-letter-spacing);\n}\n.snacky-callout__meta-icon {\n width: 16px;\n height: 16px;\n display: inline-flex;\n}\n",".snacky-order-item {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-8);\n width: 100%;\n padding: var(--spacing-8) var(--spacing-12);\n background: var(--bg-surface);\n border-radius: var(--radius-field);\n box-shadow: var(--shadow-md);\n box-sizing: border-box;\n text-align: left;\n}\n.snacky-order-item__top {\n display: flex;\n gap: var(--spacing-8);\n width: 100%;\n}\n.snacky-order-item__thumb-box {\n width: 56px;\n height: 56px;\n flex-shrink: 0;\n border-radius: var(--radius-field);\n /* No background: Figma's Image component set (usage=list) has no fill and no\n stroke on the 56x56 frame, it only holds the 48x48 photo. An earlier pass\n invented #f4f4f5 here, which is also 1-2 values off bg-surface-variant and\n contradicted ProductImage's own usage=\"list\", which correctly has none. */\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n}\n.snacky-order-item__thumb {\n width: 48px;\n height: 48px;\n object-fit: contain;\n}\n.snacky-order-item__info {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n}\n.snacky-order-item__status {\n font-family: var(--font-small-semibold-family);\n font-weight: var(--font-small-semibold-weight);\n font-size: var(--font-small-semibold-size);\n line-height: 24px;\n color: var(--text-primary);\n letter-spacing: var(--font-small-semibold-letter-spacing);\n}\n.snacky-order-item__status--cancelled {\n color: var(--text-error);\n}\n.snacky-order-item__name {\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n line-height: 24px;\n color: var(--text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-weight: var(--font-small-regular-weight);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-order-item__details {\n display: flex;\n align-items: center;\n gap: var(--spacing-8);\n width: 100%;\n /* Figma's \"Details Container\" is padded 8/0. Without it every order variant\n came out exactly 16px short. */\n padding: var(--spacing-8) 0;\n}\n.snacky-order-item__count {\n flex: 1;\n min-width: 0;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n line-height: 24px;\n color: var(--text-secondary);\n font-weight: var(--font-small-regular-weight);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-order-item__total {\n flex: 1;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n line-height: 24px;\n color: var(--text-primary);\n text-align: right;\n white-space: nowrap;\n font-weight: var(--font-small-regular-weight);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-order-item__total b {\n font-weight: var(--font-small-bold-weight);\n letter-spacing: 0.12px;\n font-family: var(--font-small-bold-family);\n font-size: var(--font-small-bold-size);\n line-height: var(--font-small-bold-line-height);\n}\n.snacky-order-item__total--cod {\n flex: 0 1 auto;\n}\n.snacky-order-item__cod {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n /* Figma's \"COD Container\" is 24 tall with its stroke inside. Without an\n explicit height the 1px border stacked on the 24px line box and pushed the\n whole card to 122 instead of 120. */\n height: 24px;\n padding: 0 var(--spacing-8);\n border-radius: var(--radius-field);\n border: 1px solid var(--border-main);\n background: var(--bg-surface);\n font-family: var(--font-small-bold-family);\n font-weight: var(--font-small-bold-weight);\n font-size: var(--font-small-bold-size);\n line-height: 24px;\n letter-spacing: 0.12px;\n color: var(--text-secondary);\n}\n.snacky-order-item__deadline {\n width: 100%;\n background: var(--bg-surface-highlight);\n text-align: center;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n line-height: 24px;\n color: var(--text-primary);\n font-weight: var(--font-small-regular-weight);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-order-item__action-row {\n display: flex;\n justify-content: flex-end;\n width: 100%;\n}\n\n.snacky-notif-item {\n display: flex;\n flex-direction: column;\n gap: 0;\n width: 100%;\n box-sizing: border-box;\n padding: var(--spacing-8) var(--spacing-12);\n background: var(--bg-surface);\n border: 1px solid var(--border-main);\n border-radius: var(--radius-field);\n text-align: left;\n}\n.snacky-notif-item--unread {\n background: var(--bg-surface-highlight);\n}\n.snacky-notif-item__title {\n font-family: var(--font-small-semibold-family);\n font-weight: var(--font-small-semibold-weight);\n font-size: var(--font-small-semibold-size);\n line-height: 24px;\n color: var(--text-primary);\n letter-spacing: var(--font-small-semibold-letter-spacing);\n}\n.snacky-notif-item__message {\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n line-height: 24px;\n color: var(--text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-weight: var(--font-small-regular-weight);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n",".snacky-accordion {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-4);\n width: 100%;\n}\n.snacky-accordion__header {\n display: flex;\n align-items: center;\n gap: var(--gap-text-icon);\n width: 100%;\n padding: var(--spacing-12) var(--spacing-8);\n background: var(--bg-surface);\n border: none;\n border-radius: var(--radius-field);\n box-shadow: var(--shadow-md);\n cursor: pointer;\n text-align: left;\n color: var(--text-primary);\n}\n.snacky-accordion__icon {\n width: 24px;\n height: 24px;\n flex-shrink: 0;\n}\n.snacky-accordion__title {\n flex: 1;\n font-family: var(--font-body-semibold-family);\n font-size: 14px;\n font-weight: var(--font-body-semibold-weight);\n line-height: var(--font-body-semibold-line-height);\n letter-spacing: var(--font-body-semibold-letter-spacing);\n}\n.snacky-accordion--icon .snacky-accordion__title {\n font-family: var(--font-small-semibold-family);\n font-size: var(--font-small-semibold-size);\n font-weight: var(--font-small-semibold-weight);\n line-height: var(--font-small-semibold-line-height);\n letter-spacing: var(--font-small-semibold-letter-spacing);\n}\n.snacky-accordion__chevron {\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n /* Confirmed against Figma: icon-secondary in both open and closed states,\n not inherited text-primary. */\n color: var(--icon-secondary);\n transition: transform 0.15s ease;\n}\n.snacky-accordion__chevron--open {\n transform: rotate(180deg);\n}\n/* Confirmed against Figma (node 8696:6572): the expanded panel is its own\n separate elevated card (own radius-field + shadow-md), not a padding-only\n section merged into the header's card, and there is no bordered variant\n at all - Figma never draws a border on either the icon or no-icon case. */\n.snacky-accordion__panel {\n padding: var(--spacing-12);\n background: var(--bg-surface);\n border-radius: var(--radius-field);\n box-shadow: var(--shadow-md);\n /* Figma's \"Content Text\" is 14/24 (body-regular), not the 12px small-regular\n the header uses. At 12px the copy re-wrapped and the expanded card came out\n 292 tall instead of 340. */\n font-family: var(--font-body-regular-family);\n font-size: var(--font-body-regular-size);\n color: var(--text-primary);\n font-weight: var(--font-body-regular-weight);\n line-height: var(--font-body-regular-line-height);\n letter-spacing: var(--font-body-regular-letter-spacing);\n}\n",".snacky-sheet-overlay {\n position: fixed;\n inset: 0;\n background: var(--bg-overlay-dim);\n display: flex;\n align-items: flex-end;\n justify-content: center;\n z-index: 1000;\n}\n.snacky-sheet {\n width: 100%;\n max-width: 480px;\n max-height: 90vh;\n overflow-y: auto;\n background: var(--bg-surface);\n border-radius: var(--radius-sheet-top) var(--radius-sheet-top) 0 0;\n padding: var(--spacing-24);\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--gap-layout-block);\n}\n.snacky-sheet__handle {\n width: 36px;\n height: 4px;\n border-radius: 999px;\n background: var(--color-neutral-200);\n margin: 0 auto var(--spacing-8);\n}\n",".snacky-section {\n width: 100%;\n padding: var(--spacing-16) var(--spacing-24);\n background: var(--bg-surface);\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--gap-layout-block);\n}\n.snacky-section__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n.snacky-section__title {\n margin: 0;\n font-family: var(--font-h3-bold-family);\n font-size: var(--font-h3-bold-size);\n font-weight: var(--font-h3-bold-weight);\n color: var(--text-primary);\n line-height: var(--font-h3-bold-line-height);\n letter-spacing: var(--font-h3-bold-letter-spacing);\n}\n.snacky-section__action {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 24px;\n height: 24px;\n padding: var(--spacing-4);\n border: none;\n border-radius: var(--radius-full);\n background: var(--bg-action-primary);\n /* Re-verified against Figma's actual bound variable on the chevron vector\n (not the icon instance's own unrelated white frame fill, which was\n mistakenly read as the icon color in an earlier pass): text/text-primary,\n #333333 - same rendered color as --text-on-action-primary, which is what\n this originally was, but --text-primary is the variable Figma actually\n binds here. */\n color: var(--text-primary);\n cursor: pointer;\n}\n.snacky-section__action:hover { background: var(--bg-action-primary-hover); }\n",".snacky-stepper {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n /* Figma \"Order status progress\": VERTICAL, 32 between steps. */\n gap: var(--spacing-32);\n}\n\n.snacky-stepper__step {\n position: relative;\n display: flex;\n align-items: flex-start;\n /* Figma \"Order status step\": HORIZONTAL, gap 16. The height follows the\n content - 48 with a timestamp, 24 without - which is what makes the four\n documented progress frames land on 288 / 264 / 216 / 216. Forcing 48 on\n every step made all four 288. */\n gap: var(--gap-layout-block);\n}\n\n/* The connector is one -90deg-rotated dashed LINE spanning the whole stepper in\n Figma. Drawing it per-step instead survives any number of steps, and the\n dashes line up either way. Starts below the 24px dot and runs into the 32px\n gap to the next one. */\n.snacky-stepper__step::before {\n content: '';\n position: absolute;\n left: 12px;\n top: 24px;\n bottom: calc(-1 * var(--spacing-32));\n border-left: 1px dashed var(--border-main);\n}\n.snacky-stepper__step--last::before {\n content: none;\n}\n\n/* 24x24 slot holding a 16x16 circle, per Figma's \"Progress dot/*\" frames. */\n.snacky-stepper__dot {\n position: relative;\n z-index: 1;\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n}\n.snacky-stepper__dot::before {\n content: '';\n position: absolute;\n width: 16px;\n height: 16px;\n border-radius: var(--radius-full);\n}\n.snacky-stepper__dot--done::before {\n background: var(--icon-brand);\n}\n.snacky-stepper__dot--pending::before {\n background: var(--bg-action-disabled);\n}\n.snacky-stepper__dot--cancelled::before {\n background: var(--bg-surface-accent);\n}\n/* The X only appears on the cancelled dot, drawn on the accent circle. */\n.snacky-stepper__dot--cancelled svg {\n position: relative;\n z-index: 1;\n color: var(--icon-on-accent);\n}\n\n.snacky-stepper__body {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.snacky-stepper__label {\n font-family: var(--font-small-bold-family);\n font-size: var(--font-small-bold-size);\n font-weight: var(--font-small-bold-weight);\n line-height: var(--font-small-bold-line-height);\n letter-spacing: var(--font-small-bold-letter-spacing);\n}\n.snacky-stepper__label--done {\n color: var(--text-primary);\n}\n.snacky-stepper__label--pending {\n color: var(--text-secondary);\n}\n.snacky-stepper__label--cancelled {\n color: var(--text-error);\n}\n\n.snacky-stepper__time {\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n color: var(--text-secondary);\n}\n","/* Figma \"Property 1=Calendar\": 360 wide, VERTICAL, 24 gap, 24 padding. */\n.snacky-calendar {\n width: 100%;\n max-width: 360px;\n display: flex;\n flex-direction: column;\n gap: var(--spacing-24);\n padding: var(--spacing-24);\n background: var(--bg-surface);\n box-sizing: border-box;\n}\n\n/* \"Calendar Header Container\": 312x36, prev/next 24x24 either side of the label. */\n.snacky-calendar__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--spacing-8);\n}\n.snacky-calendar__nav {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n padding: 0;\n border: none;\n background: none;\n color: var(--icon-primary);\n cursor: pointer;\n}\n/* One back glyph serves both arrows - the set has no forward twin, and Figma\n uses the same instance mirrored. */\n.snacky-calendar__nav--next {\n transform: scaleX(-1);\n}\n.snacky-calendar__label {\n flex: 1;\n text-align: center;\n font-family: var(--font-h3-bold-family);\n font-size: var(--font-h3-bold-size);\n font-weight: var(--font-h3-bold-weight);\n line-height: var(--font-h3-bold-line-height);\n letter-spacing: var(--font-h3-bold-letter-spacing);\n color: var(--text-primary);\n}\n\n/* Figma hugs each date cell, so its row gaps vary (39/36/33/30/29). A seven\n column grid is the faithful translation: same even distribution, no\n per-row magic numbers. */\n.snacky-calendar__grid {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n justify-items: center;\n align-items: center;\n /* Figma's row pitch is 59: a 36-tall date row plus a 23 gap. The cell here is\n 40 rather than 36 because the selected day's circle is 40 (Figma's\n \"selected\" frame) and would otherwise overflow its row, so the gap is\n 59 - 40 = 19 to keep the same pitch. Not a token: 59 is not on the scale. */\n row-gap: 19px;\n}\n\n.snacky-calendar__weekday {\n height: 30px;\n display: inline-flex;\n align-items: center;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n color: var(--text-primary);\n}\n\n.snacky-calendar__day {\n position: relative;\n width: 100%;\n height: 40px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: none;\n padding: 0;\n cursor: pointer;\n font-family: var(--font-h3-regular-family, var(--font-h3-bold-family));\n font-size: 16px;\n line-height: 36px;\n color: var(--text-primary);\n}\n.snacky-calendar__day--outside {\n color: var(--text-disabled);\n cursor: default;\n}\n\n/* The range band sits behind the row; the two ends get the filled circle. */\n.snacky-calendar__day--in-range {\n background: var(--bg-surface-highlight);\n}\n.snacky-calendar__day-number {\n position: relative;\n z-index: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n border-radius: var(--radius-full);\n}\n.snacky-calendar__day--selected .snacky-calendar__day-number {\n background: var(--bg-action-primary);\n font-weight: 700;\n}\n.snacky-calendar__day--selected {\n background: var(--bg-surface-highlight);\n}\n\n/* Figma \"Ellipse 38\": an 8px accent dot under a marked day. */\n.snacky-calendar__marker {\n position: absolute;\n bottom: 2px;\n width: 8px;\n height: 8px;\n border-radius: var(--radius-full);\n background: var(--bg-action-primary);\n}\n",".snacky-avatar {\n display: block;\n border-radius: 999px;\n object-fit: cover;\n flex-shrink: 0;\n}\n.snacky-avatar--sm { width: 32px; height: 32px; }\n.snacky-avatar--md { width: 56px; height: 56px; }\n.snacky-avatar--lg { width: 72px; height: 72px; }\n",".snacky-illustration {\n display: block;\n max-width: 100%;\n /* The per-variant canvas is the spec, so the artwork is fitted into it rather\n than allowed to set its own height. `height: auto` let the file's aspect win,\n and two of the shipped PNGs do not match their canvas\n (illus-discount-referral is 1076x892, i.e. 1.206, against a 268x200 / 1.340\n canvas), which rendered discountReferral 22px too tall. contain keeps the\n canvas exact without distorting the artwork. */\n object-fit: contain;\n}\n",".snacky-product-image-wrap {\n position: relative;\n display: inline-flex;\n flex-shrink: 0;\n}\n.snacky-product-image {\n display: block;\n object-fit: contain;\n}\n/* These must match the `usage` prop values verbatim, since the class name is\n built as `--${usage}`. They read `--card`/`--details` before, so the\n product-card and product-details usages, the two most common ones, silently\n matched no rule at all and rendered unsized. */\n.snacky-product-image--product-card,\n.snacky-product-image--product-details {\n width: 100%;\n height: 100%;\n background: transparent;\n}\n.snacky-product-image-wrap--product-card { width: 128px; height: 128px; }\n.snacky-product-image-wrap--product-details { width: 200px; height: 200px; }\n\n.snacky-product-image-wrap--list {\n width: 56px;\n height: 56px;\n padding: var(--spacing-4);\n border-radius: var(--radius-field);\n box-sizing: border-box;\n}\n.snacky-product-image-wrap--review {\n width: 48px;\n height: 48px;\n padding: var(--spacing-4);\n border: 1px solid var(--border-main);\n border-radius: var(--radius-field);\n box-sizing: border-box;\n}\n.snacky-product-image-wrap--variant {\n width: 88px;\n height: 88px;\n padding: var(--spacing-4);\n border: 1px solid var(--border-main);\n border-radius: var(--radius-field);\n box-sizing: border-box;\n}\n.snacky-product-image-wrap--accordion-modal { width: 24px; height: 24px; }\n\n.snacky-product-image-sold-overlay {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.46);\n border-radius: inherit;\n}\n.snacky-product-image-sold-label {\n padding: var(--spacing-12) 7px;\n border-radius: 999px;\n background: rgba(51, 51, 51, 0.8);\n color: var(--text-inverse);\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n",".snacky-product-card {\n position: relative;\n display: flex;\n flex-direction: column;\n gap: var(--spacing-12);\n background: var(--bg-surface);\n text-align: left;\n border: none;\n cursor: pointer;\n font-family: inherit;\n}\n.snacky-product-card--list {\n width: 152px;\n /* 152px is a spec width, not a hint. This card's documented home is a\n horizontal carousel, where a flex parent would otherwise shrink it below\n spec rather than letting the row scroll. */\n flex-shrink: 0;\n padding: var(--spacing-12) var(--spacing-8);\n border-radius: var(--radius-field);\n box-shadow: var(--shadow-lg);\n}\n/* Figma node \"Property 1=details\": the card itself has no padding and no gap.\n Its two child frames carry all of it. */\n.snacky-product-card--details {\n width: 100%;\n padding: 0;\n gap: 0;\n}\n/* \"Image\" frame - 12/8 padding around the 200px image, 224 tall. */\n.snacky-product-card__image-block {\n display: flex;\n justify-content: center;\n padding: var(--spacing-12) var(--spacing-8);\n}\n/* \"Product details container\" - 16/24 padding, 8px gap, 148 tall. */\n.snacky-product-card__details-body {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-8);\n padding: var(--spacing-16) var(--spacing-24);\n}\n.snacky-product-card__image-wrap {\n position: relative;\n}\n.snacky-product-card--list .snacky-product-card__image-wrap { width: 128px; height: 128px; }\n.snacky-product-card--details .snacky-product-card__image-wrap { width: 200px; height: 200px; margin: 0 auto; }\n.snacky-product-card__image {\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n.snacky-product-card__discount {\n position: absolute;\n top: 0;\n right: 0;\n}\n/* Sold Out is a centred scrim over the whole image, not a corner tag. It used\n to reuse __discount above, which pinned the pill to the top-right with no\n scrim at all. index.html's preview and ProductImage's\n .snacky-product-image-sold-overlay both centre it; this matches them. */\n.snacky-product-card__sold-overlay {\n position: absolute;\n inset: 0;\n margin: var(--spacing-12) var(--spacing-8);\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.46);\n}\n.snacky-product-card__name {\n margin: 0;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n color: var(--text-primary);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-product-card--details .snacky-product-card__name {\n font-size: 14px;\n}\n.snacky-product-card__price-row {\n display: flex;\n /* Figma's \"Price container\" is CENTER with a 5px gap, and 5 is not on the\n spacing scale, so this is a literal on purpose. Was baseline + 4px, which\n made the row 25px instead of the specced 24px. */\n align-items: center;\n gap: 5px;\n}\n.snacky-product-card--details .snacky-product-card__price-row {\n align-items: flex-start;\n gap: var(--spacing-8);\n}\n.snacky-product-card__price {\n font-family: var(--font-small-bold-family);\n font-weight: var(--font-small-bold-weight);\n color: var(--text-primary);\n font-size: var(--font-small-bold-size);\n line-height: var(--font-small-bold-line-height);\n letter-spacing: var(--font-small-bold-letter-spacing);\n}\n.snacky-product-card--details .snacky-product-card__price {\n /* Figma: 20px on a 36px line, which is what makes the price row 36 tall.\n Without the line-height it inherited small-bold's 24 and the row came out\n 27. */\n font-size: 20px;\n font-weight: 700;\n line-height: 36px;\n}\n.snacky-product-card__original-price {\n font-family: var(--font-small-bold-family);\n font-weight: var(--font-small-bold-weight);\n font-size: 10px;\n color: var(--text-secondary);\n text-decoration: line-through;\n /* Figma authors this one at AUTO line height, not the token's 24px - it is\n the only text in the card that does, so it stays a literal. */\n line-height: normal;\n letter-spacing: var(--font-small-bold-letter-spacing);\n}\n.snacky-product-card--details .snacky-product-card__original-price {\n font-size: 16px;\n font-weight: 700;\n line-height: 36px;\n}\n.snacky-product-card__footer-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--spacing-8);\n}\n.snacky-product-card__rating {\n display: inline-flex;\n align-items: center;\n gap: var(--gap-icon-label);\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n color: var(--text-secondary);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-product-card__rating-icon {\n width: 16px;\n height: 16px;\n color: var(--icon-brand);\n}\n.snacky-product-card__actions {\n display: flex;\n gap: var(--gap-cell);\n}\n/* Details page's Favorite/Share/Chat icon buttons use a slightly softer\n shadow than the standard Secondary icon-button elevation. */\n.snacky-product-card__actions--details button {\n box-shadow: 0 4px 4px rgba(0, 0, 0, 0.08);\n}\n",".snacky-image-placeholder {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: var(--bg-surface-variant);\n color: var(--icon-disabled);\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/theme/tokens.css","../src/theme/base.css","../src/components/Button/Button.css","../src/components/IconButton/IconButton.css","../src/components/IconButton/UploadButton.css","../src/components/Input/TextField.css","../src/components/Input/SearchField.css","../src/components/Input/OtpField.css","../src/components/Input/CopyField.css","../src/components/Input/ChatInput.css","../src/components/Input/AddressResult.css","../src/components/Chips/Chips.css","../src/components/RadioButton/RadioButton.css","../src/components/Checkbox/Checkbox.css","../src/components/Toggle/Toggle.css","../src/components/Navbar/Navbar.css","../src/components/Tab/Tab.css","../src/components/Header/Header.css","../src/components/Banner/Banner.css","../src/components/Badge/Badge.css","../src/components/Callout/Callout.css","../src/components/List/List.css","../src/components/Accordion/Accordion.css","../src/components/Modal/BottomSheet.css","../src/components/Section/Section.css","../src/components/Stepper/Stepper.css","../src/components/Calendar/Calendar.css","../src/components/Avatar/Avatar.css","../src/components/Illustration/Illustration.css","../src/components/ProductImage/ProductImage.css","../src/components/ProductCard/ProductCard.css","../src/components/ImagePlaceholder/ImagePlaceholder.css"],"sourcesContent":["/* Generated from tokens.json by scripts/generate-react-tokens.js - do not hand-edit. */\n:root {\n --color-primary-50: #fef8eb;\n --color-primary-100: #fde9bf;\n --color-primary-200: #fcdea1;\n --color-primary-300: #facf76;\n --color-primary-400: #f9c55b;\n --color-primary-500: #f8b732;\n --color-primary-600: #e2a72e;\n --color-primary-700: #b08224;\n --color-primary-800: #88651c;\n --color-primary-900: #684d15;\n --color-neutral-0: #ffffff;\n --color-neutral-10: #fdfdfd;\n --color-neutral-20: #f7f7f7;\n --color-neutral-50: #f3f3f3;\n --color-neutral-100: #e0e0e0;\n --color-neutral-200: #cccccc;\n --color-neutral-400: #a3a3a3;\n --color-neutral-500: #7a7a7a;\n --color-neutral-600: #6a6a6a;\n --color-neutral-700: #525252;\n --color-neutral-800: #4b4b4b;\n --color-neutral-900: #434343;\n --color-neutral-950: #333333;\n --color-red-50: #fdeeee;\n --color-red-100: #f9cbcb;\n --color-red-200: #f6b2b2;\n --color-red-300: #f28e8e;\n --color-red-400: #ef7979;\n --color-red-500: #eb5757;\n --color-red-600: #d64f4f;\n --color-red-700: #a73e3e;\n --color-red-800: #813030;\n --color-red-900: #632525;\n --bg-app: var(--color-neutral-20);\n --bg-surface: var(--color-neutral-0);\n --bg-surface-primary: var(--color-primary-500);\n --bg-surface-accent: var(--color-red-500);\n --bg-surface-variant: var(--color-neutral-50);\n --bg-surface-field: var(--color-neutral-0);\n --bg-surface-highlight: var(--color-primary-50);\n --bg-action-primary: var(--color-primary-500);\n --bg-action-primary-hover: var(--color-primary-600);\n --bg-action-primary-pressed: var(--color-primary-700);\n --bg-action-secondary: var(--color-neutral-0);\n --bg-action-secondary-hover: var(--color-neutral-50);\n --bg-action-secondary-pressed: var(--color-neutral-100);\n --bg-action-disabled: var(--color-neutral-200);\n --bg-action-primary-danger: var(--color-red-500);\n --bg-action-primary-danger-hovered: var(--color-red-600);\n --bg-action-primary-danger-pressed: var(--color-red-700);\n --bg-overlay-dim: rgba(51,51,51,0.8);\n --border-main: var(--color-neutral-200);\n --border-highlight: var(--color-primary-200);\n --border-input-default: var(--color-neutral-200);\n --border-input-active: var(--color-primary-500);\n --border-input-error: var(--color-red-500);\n --border-action-secondary: var(--color-neutral-200);\n --border-action-secondary-pressed: var(--color-neutral-400);\n --border-action-danger: var(--color-red-500);\n --border-action-disabled: var(--color-neutral-200);\n --text-primary: var(--color-neutral-950);\n --text-secondary: var(--color-neutral-500);\n --text-placeholder: var(--color-neutral-500);\n --text-disabled: var(--color-neutral-400);\n --text-link: var(--color-primary-800);\n --text-error: var(--color-red-700);\n --text-inverse: var(--color-neutral-0);\n --text-on-action-primary: var(--color-neutral-950);\n --text-on-action-secondary: var(--color-neutral-950);\n --text-on-action-tertiary: var(--color-primary-700);\n --text-on-action-tertiary-hovered: var(--color-primary-800);\n --text-on-action-tertiary-pressed: var(--color-primary-900);\n --text-action-danger: var(--color-red-600);\n --text-action-danger-hovered: var(--color-red-700);\n --text-action-danger-pressed: var(--color-red-800);\n --text-action-disabled: var(--color-neutral-400);\n --icon-primary: var(--color-neutral-950);\n --icon-secondary: var(--color-neutral-700);\n --icon-brand: var(--color-primary-500);\n --icon-disabled: var(--color-neutral-400);\n --icon-active: var(--color-red-500);\n --icon-on-accent: var(--color-neutral-0);\n --spacing-2: 2px;\n --spacing-4: 4px;\n --spacing-8: 8px;\n --spacing-12: 12px;\n --spacing-16: 16px;\n --spacing-24: 24px;\n --spacing-32: 32px;\n --gap-icon-label: var(--spacing-4);\n --gap-cell: var(--spacing-4);\n --gap-text-icon: var(--spacing-8);\n --gap-text-underline: var(--spacing-16);\n --gap-layout-section-list: var(--spacing-8);\n --gap-layout-block: var(--spacing-16);\n --gap-layout-stack: var(--spacing-24);\n --gap-layout-page: var(--spacing-32);\n --margin-screen: var(--spacing-16);\n --radius-4: 4px;\n --radius-6: 6px;\n --radius-8: 8px;\n --radius-10: 10px;\n --radius-20: 20px;\n --radius-100: 100px;\n --radius-999: 999px;\n --radius-field: var(--radius-4);\n --radius-tag: var(--radius-6);\n --radius-bubble: var(--radius-8);\n --radius-card: var(--radius-10);\n --radius-sheet-top: var(--radius-20);\n --radius-full: var(--radius-100);\n --size-icon-sm: 16px;\n --size-icon-md: 20px;\n --size-icon-lg: 24px;\n --size-avatar-sm: 32px;\n --size-avatar-md: 56px;\n --size-avatar-lg: 72px;\n --shadow-md: 0 4px 8px rgba(0,0,0,0.08);\n --shadow-lg: 0 10px 30px rgba(0,0,0,0.1);\n --shadow-top: 0 -4px 10px rgba(0,0,0,0.08);\n --font-h1-bold-family: 'Poppins', sans-serif;\n --font-h1-bold-size: 32px;\n --font-h1-bold-weight: 700;\n --font-h1-bold-line-height: 36px;\n --font-h1-bold-letter-spacing: 0.01em;\n --font-h2-bold-family: 'Poppins', sans-serif;\n --font-h2-bold-size: 20px;\n --font-h2-bold-weight: 700;\n --font-h2-bold-line-height: 36px;\n --font-h2-bold-letter-spacing: 0.01em;\n --font-h3-bold-family: 'Poppins', sans-serif;\n --font-h3-bold-size: 16px;\n --font-h3-bold-weight: 700;\n --font-h3-bold-line-height: 36px;\n --font-h3-bold-letter-spacing: 0.01em;\n --font-h3-regular-family: 'Poppins', sans-serif;\n --font-h3-regular-size: 16px;\n --font-h3-regular-weight: 400;\n --font-h3-regular-line-height: 36px;\n --font-h3-regular-letter-spacing: normal;\n --font-body-semibold-family: 'Poppins', sans-serif;\n --font-body-semibold-size: 14px;\n --font-body-semibold-weight: 600;\n --font-body-semibold-line-height: 24px;\n --font-body-semibold-letter-spacing: normal;\n --font-body-regular-family: 'Poppins', sans-serif;\n --font-body-regular-size: 14px;\n --font-body-regular-weight: 400;\n --font-body-regular-line-height: 24px;\n --font-body-regular-letter-spacing: normal;\n --font-small-semibold-family: 'Poppins', sans-serif;\n --font-small-semibold-size: 12px;\n --font-small-semibold-weight: 600;\n --font-small-semibold-line-height: 24px;\n --font-small-semibold-letter-spacing: normal;\n --font-small-bold-family: 'Poppins', sans-serif;\n --font-small-bold-size: 12px;\n --font-small-bold-weight: 700;\n --font-small-bold-line-height: 24px;\n --font-small-bold-letter-spacing: 0.01em;\n --font-small-regular-family: 'Poppins', sans-serif;\n --font-small-regular-size: 12px;\n --font-small-regular-weight: 400;\n --font-small-regular-line-height: 24px;\n --font-small-regular-letter-spacing: normal;\n --font-caption-semibold-family: 'Poppins', sans-serif;\n --font-caption-semibold-size: 10px;\n --font-caption-semibold-weight: 600;\n --font-caption-semibold-line-height: 23px;\n --font-caption-semibold-letter-spacing: 0.01em;\n --font-caption-regular-family: 'Poppins', sans-serif;\n --font-caption-regular-size: 10px;\n --font-caption-regular-weight: 400;\n --font-caption-regular-line-height: 16px;\n --font-caption-regular-letter-spacing: 0.01em;\n}\n","/* Base rules every Snacky component depends on.\n *\n * The docs site (../../index.html) opens with a global\n * `*,*::before,*::after{box-sizing:border-box}` reset, so its Live Preview has\n * always rendered components at their spec sizes. The package ships no reset,\n * and only some of its own selectors set the property, so on a host page\n * without one every fixed-size component with padding came out oversized:\n * `.snacky-product-card--list` measured 168px instead of 152, and\n * `.snacky-iconbtn--primary` 48px instead of 32.\n *\n * Scoped to `snacky-*` rather than `*` so it never touches the host page's own\n * elements, or the content a caller passes into a component's slot.\n */\n[class^='snacky-'],\n[class*=' snacky-'],\n[class^='snacky-']::before,\n[class^='snacky-']::after,\n[class*=' snacky-']::before,\n[class*=' snacky-']::after {\n box-sizing: border-box;\n}\n",".snacky-btn {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n /* Figma gives every variant a fixed 48 (large) / 40 (small) height and draws\n Secondary's stroke INSIDE it. Without an explicit height the box grew from\n padding alone, so Secondary's 1px border pushed it to 50 while every other\n variant sat at 48. */\n height: 48px;\n padding: var(--spacing-12) var(--spacing-8);\n border-radius: var(--radius-field);\n border: none;\n font-family: var(--font-small-semibold-family);\n font-size: var(--font-small-semibold-size);\n font-weight: var(--font-small-semibold-weight);\n line-height: var(--font-small-semibold-line-height);\n cursor: pointer;\n white-space: nowrap;\n transition: background-color 0.12s ease, border-color 0.12s ease, color 0.12s ease;\n letter-spacing: var(--font-small-semibold-letter-spacing);\n}\n\n.snacky-btn:disabled {\n cursor: not-allowed;\n}\n\n.snacky-btn--small {\n height: 40px;\n padding: var(--spacing-8) var(--spacing-8);\n}\n/* The slot itself is documented as a generic 24x24 (size.icon.lg), but that\n reads oversized next to Small's 12px label - scaled down to size.icon.md\n (20x20) to stay proportional. */\n.snacky-btn--small .snacky-btn__icon {\n width: var(--size-icon-md);\n height: var(--size-icon-md);\n}\n\n/* The icon is absolutely positioned (out of flow, per Figma's own \"Slot\n Usage\" guideline) so a hug-width button never reserves space for it on its\n own - without this, the label centers across the button's full width and\n the icon sits on top of it. Reserve exactly the space the icon occupies\n (its left offset + its own size) plus a text-icon gap, so the label starts\n right after the icon instead of overlapping it. */\n.snacky-btn--with-icon {\n padding-left: calc(var(--spacing-8) + var(--size-icon-lg) + var(--gap-text-icon));\n}\n.snacky-btn--small.snacky-btn--with-icon {\n padding-left: calc(var(--spacing-8) + var(--size-icon-md) + var(--gap-text-icon));\n}\n\n/* Primary */\n.snacky-btn--primary {\n background: var(--bg-action-primary);\n color: var(--text-on-action-primary);\n}\n.snacky-btn--primary:hover:not(:disabled) { background: var(--bg-action-primary-hover); }\n.snacky-btn--primary:active:not(:disabled) { background: var(--bg-action-primary-pressed); }\n.snacky-btn--primary:disabled { background: var(--bg-action-disabled); color: var(--text-action-disabled); }\n\n/* Primary + Danger */\n.snacky-btn--primary.snacky-btn--danger {\n background: var(--bg-action-primary-danger);\n color: var(--text-on-action-primary);\n}\n.snacky-btn--primary.snacky-btn--danger:hover:not(:disabled) { background: var(--bg-action-primary-danger-hovered); }\n.snacky-btn--primary.snacky-btn--danger:active:not(:disabled) { background: var(--bg-action-primary-danger-pressed); }\n/* Flagged asymmetry, confirmed against the site's own live implementation:\n Primary+Danger's disabled state carries a border that plain Primary's\n disabled state does not. */\n.snacky-btn--primary.snacky-btn--danger:disabled { background: var(--bg-action-disabled); color: var(--text-action-disabled); border: 1px solid var(--border-action-disabled); }\n\n/* Secondary */\n.snacky-btn--secondary {\n background: var(--bg-action-secondary);\n border: 1px solid var(--border-action-secondary);\n color: var(--text-on-action-primary);\n}\n.snacky-btn--secondary:hover:not(:disabled) { background: var(--bg-action-secondary-hover); }\n.snacky-btn--secondary:active:not(:disabled) { background: var(--bg-action-secondary-pressed); }\n.snacky-btn--secondary:disabled { color: var(--text-action-disabled); }\n\n/* Secondary + Danger */\n.snacky-btn--secondary.snacky-btn--danger {\n border-color: var(--border-action-danger);\n color: var(--text-action-danger);\n}\n.snacky-btn--secondary.snacky-btn--danger:hover:not(:disabled) { background: var(--bg-action-secondary-hover); }\n.snacky-btn--secondary.snacky-btn--danger:active:not(:disabled) { background: var(--bg-action-secondary-pressed); }\n.snacky-btn--secondary.snacky-btn--danger:disabled { border-color: var(--border-action-disabled); color: var(--text-action-disabled); }\n\n/* Tertiary - ghost, never a fill or border, including disabled */\n.snacky-btn--tertiary {\n background: transparent;\n color: var(--text-on-action-tertiary);\n}\n.snacky-btn--tertiary:hover:not(:disabled) { color: var(--text-on-action-tertiary-hovered); }\n.snacky-btn--tertiary:active:not(:disabled) { color: var(--text-on-action-tertiary-pressed); }\n.snacky-btn--tertiary:disabled { color: var(--text-action-disabled); }\n\n/* Tertiary + Danger */\n.snacky-btn--tertiary.snacky-btn--danger { color: var(--text-action-danger); }\n.snacky-btn--tertiary.snacky-btn--danger:hover:not(:disabled) { color: var(--text-action-danger-hovered); }\n.snacky-btn--tertiary.snacky-btn--danger:active:not(:disabled) { color: var(--text-action-danger-pressed); }\n.snacky-btn--tertiary.snacky-btn--danger:disabled { color: var(--text-action-disabled); }\n\n.snacky-btn__icon {\n position: absolute;\n left: var(--spacing-8);\n top: 50%;\n transform: translateY(-50%);\n display: inline-flex;\n width: var(--size-icon-lg);\n height: var(--size-icon-lg);\n flex-shrink: 0;\n}\n",".snacky-iconbtn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n border: none;\n border-radius: var(--radius-full);\n cursor: pointer;\n transition: background-color 0.12s ease;\n}\n.snacky-iconbtn:disabled { cursor: not-allowed; }\n.snacky-iconbtn svg,\n.snacky-iconbtn img { width: 100%; height: 100%; }\n\n/* Primary - 32px default, 24px small */\n.snacky-iconbtn--primary {\n width: 32px;\n height: 32px;\n padding: var(--spacing-8);\n background: var(--bg-action-primary);\n}\n/* Figma binds every icon-button glyph to an icon/* variable, not a text/* one.\n Same #333333 either way, but the icon token is the one that is actually\n specced, so a future retint of icon/icon-primary reaches these. */\n.snacky-iconbtn--primary .snacky-iconbtn__icon { width: 16px; height: 16px; color: var(--icon-primary); }\n.snacky-iconbtn--primary:hover:not(:disabled) { background: var(--bg-action-primary-hover); }\n.snacky-iconbtn--primary:active:not(:disabled) { background: var(--bg-action-primary-pressed); }\n.snacky-iconbtn--primary:disabled { background: var(--bg-action-disabled); border: 1px solid var(--border-action-disabled); }\n.snacky-iconbtn--primary:disabled .snacky-iconbtn__icon { color: var(--icon-disabled); }\n\n.snacky-iconbtn--primary.snacky-iconbtn--small {\n width: 24px;\n height: 24px;\n padding: var(--spacing-4);\n}\n\n/* Secondary - 40px, elevated, can act as a toggle via `selected` */\n.snacky-iconbtn--secondary {\n width: 40px;\n height: 40px;\n padding: var(--spacing-8);\n background: var(--bg-action-secondary);\n box-shadow: var(--shadow-md);\n}\n/* icon-primary (#333333), NOT icon-secondary. Figma's secondary set binds\n default/hovered/pressed all to icon/icon-primary; icon-secondary (#525252)\n appears only on the tertiary variant's hover. */\n.snacky-iconbtn--secondary .snacky-iconbtn__icon { width: 20px; height: 20px; color: var(--icon-primary); }\n.snacky-iconbtn--secondary:hover:not(:disabled) { background: var(--bg-action-secondary-hover); }\n.snacky-iconbtn--secondary:active:not(:disabled) { background: var(--bg-action-secondary-pressed); }\n.snacky-iconbtn--secondary:disabled { background: var(--bg-action-disabled); box-shadow: none; }\n.snacky-iconbtn--secondary:disabled .snacky-iconbtn__icon { color: var(--icon-disabled); }\n.snacky-iconbtn--secondary.snacky-iconbtn--selected .snacky-iconbtn__icon { color: var(--icon-active); }\n\n/* Tertiary - 40px, no resting fill, only a transient state-layer overlay */\n.snacky-iconbtn--tertiary {\n width: 40px;\n height: 40px;\n padding: var(--spacing-8);\n background: transparent;\n}\n.snacky-iconbtn--tertiary .snacky-iconbtn__icon { width: 24px; height: 24px; color: var(--icon-primary); }\n.snacky-iconbtn--tertiary:hover:not(:disabled) { background: rgba(0, 0, 0, 0.08); }\n.snacky-iconbtn--tertiary:hover:not(:disabled) .snacky-iconbtn__icon { color: var(--icon-secondary); }\n.snacky-iconbtn--tertiary:active:not(:disabled) { background: rgba(0, 0, 0, 0.12); }\n.snacky-iconbtn--tertiary:disabled .snacky-iconbtn__icon { color: var(--icon-disabled); }\n",".snacky-upload {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 72px;\n height: 72px;\n padding: var(--spacing-24);\n border-radius: var(--radius-full);\n background: var(--bg-surface);\n border: 1px dashed var(--border-main);\n cursor: pointer;\n transition: background-color 0.12s ease;\n}\n.snacky-upload svg,\n.snacky-upload img { width: 100%; height: 100%; }\n.snacky-upload:hover { background: var(--bg-action-secondary-hover); }\n.snacky-upload:active { background: var(--bg-action-secondary-pressed); }\n",".snacky-field {\n display: flex;\n align-items: center;\n gap: var(--gap-text-icon);\n width: 100%;\n height: 48px;\n padding: var(--spacing-12) var(--spacing-8);\n background: var(--bg-surface-field);\n border: 1px solid var(--border-input-default);\n border-radius: var(--radius-field);\n box-sizing: border-box;\n transition: border-color 0.12s ease;\n}\n\n.snacky-field:focus-within {\n border-color: var(--border-input-active);\n}\n\n.snacky-field--error {\n border-color: var(--border-input-error) !important;\n}\n\n.snacky-field--disabled {\n background: var(--bg-surface-variant);\n cursor: not-allowed;\n}\n\n.snacky-field__input {\n flex: 1;\n min-width: 0;\n border: none;\n outline: none;\n background: transparent;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n color: var(--text-primary);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n\n.snacky-field__input::placeholder {\n color: var(--text-placeholder);\n}\n\n.snacky-field__input:disabled {\n cursor: not-allowed;\n color: var(--text-disabled);\n}\n\n.snacky-field__icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 20px;\n height: 20px;\n /* Figma binds the resting glyph to text/text-placeholder and the focused one\n to text/text-primary, not icon-secondary. */\n color: var(--text-placeholder);\n}\n.snacky-field:focus-within .snacky-field__icon { color: var(--text-primary); }\n\n.snacky-field__icon--button {\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n color: inherit;\n}\n\n.snacky-field-label {\n display: block;\n margin-bottom: var(--spacing-4);\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n color: var(--text-primary);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n\n.snacky-field-error {\n display: block;\n margin-top: var(--spacing-4);\n font-family: var(--font-caption-regular-family);\n font-size: var(--font-caption-regular-size);\n color: var(--text-error);\n font-weight: var(--font-caption-regular-weight);\n line-height: var(--font-caption-regular-line-height);\n letter-spacing: var(--font-caption-regular-letter-spacing);\n}\n",".snacky-search {\n display: flex;\n align-items: center;\n gap: var(--spacing-12);\n /* Animates 260px -> 312px on focus, matching the site's own verified\n implementation - not a fluid 100% field. */\n width: 260px;\n height: 40px;\n padding: var(--spacing-8) var(--spacing-12);\n background: var(--bg-surface-variant);\n border: 1px solid transparent;\n border-radius: var(--radius-field);\n box-sizing: border-box;\n transition: border-color 0.12s ease, width 0.15s ease;\n}\n.snacky-search:focus-within {\n width: 312px;\n border-color: var(--border-input-active);\n}\n.snacky-search__input {\n flex: 1;\n min-width: 0;\n border: none;\n outline: none;\n background: transparent;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n color: var(--text-primary);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-search__input::placeholder {\n color: var(--text-placeholder);\n}\n.snacky-search__icon {\n display: inline-flex;\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n color: var(--text-placeholder);\n}\n.snacky-search__clear {\n display: inline-flex;\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n color: var(--text-placeholder);\n}\n",".snacky-otp {\n display: flex;\n gap: var(--spacing-4);\n}\n.snacky-otp__cell {\n width: 48px;\n height: 48px;\n padding: 0;\n box-sizing: border-box;\n text-align: center;\n border: 1px solid transparent;\n border-radius: var(--radius-field);\n background: var(--bg-surface-variant);\n font-family: var(--font-h3-bold-family);\n font-size: var(--font-h3-bold-size);\n font-weight: var(--font-h3-bold-weight);\n /* 46px, not the h3Bold token's 36px - specifically tuned to center a\n single digit in the 48px cell, per the site's own implementation. */\n line-height: 46px;\n letter-spacing: 0.16px;\n color: var(--text-primary);\n outline: none;\n transition: border-color 0.1s ease;\n}\n.snacky-otp__cell:focus {\n border-color: var(--border-input-active);\n}\n/* Figma defines no disabled OTP variant (only default/active/filled), so this\n is not a spec value: it reuses the disabled text colour TextField already\n uses, so the prop is at least visible. Without it a disabled field rendered\n identically to an enabled one and the prop looked broken. */\n.snacky-otp__cell:disabled {\n cursor: not-allowed;\n color: var(--text-disabled);\n}\n",".snacky-copy {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n /* Figma has two heights here: 64 by default, because the Copy action sits in\n its own 8px-padded 40px-tall frame, and 48 once copied, where the action\n collapses to plain text. The package was pinned at 48 for both. */\n height: 64px;\n padding: var(--spacing-12);\n background: var(--bg-surface-variant);\n border-radius: var(--radius-field);\n box-sizing: border-box;\n}\n.snacky-copy__value {\n font-family: var(--font-body-semibold-family);\n font-size: var(--font-body-semibold-size);\n font-weight: var(--font-body-semibold-weight);\n color: var(--text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n line-height: var(--font-body-semibold-line-height);\n letter-spacing: var(--font-body-semibold-letter-spacing);\n}\n.snacky-copy__action {\n flex-shrink: 0;\n margin-left: var(--spacing-12);\n background: none;\n border: none;\n padding: var(--spacing-8);\n cursor: pointer;\n font-family: var(--font-small-bold-family);\n font-size: var(--font-small-bold-size);\n font-weight: var(--font-small-bold-weight);\n color: var(--text-link);\n line-height: var(--font-small-bold-line-height);\n letter-spacing: var(--font-small-bold-letter-spacing);\n}\n.snacky-copy__action--copied {\n color: var(--text-secondary);\n /* the copied state is plain text, not a padded button */\n padding: 0;\n}\n.snacky-copy:has(.snacky-copy__action--copied) {\n height: 48px;\n}\n",".snacky-chatfield {\n display: flex;\n align-items: center;\n gap: var(--gap-text-icon);\n width: 100%;\n height: 72px;\n padding: var(--spacing-12);\n background: var(--bg-surface);\n border: 1px solid var(--border-input-default);\n border-radius: var(--radius-field);\n box-sizing: border-box;\n transition: border-color 0.12s ease;\n}\n.snacky-chatfield:focus-within {\n border-color: var(--border-input-active);\n}\n.snacky-chatfield__input {\n flex: 1;\n min-width: 0;\n border: none;\n outline: none;\n background: transparent;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n color: var(--text-primary);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-chatfield__input::placeholder {\n color: var(--text-placeholder);\n}\n.snacky-chatfield__send {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 48px;\n height: 48px;\n border: none;\n border-radius: var(--radius-full);\n /* Transparent with a muted icon when empty, not a grayed-out disabled\n circle - it only fills once there's something to send. */\n background: transparent;\n /* Figma binds the resting send glyph to text/text-placeholder (#7a7a7a). */\n color: var(--text-placeholder);\n cursor: default;\n transition: background-color 0.15s ease, color 0.15s ease;\n}\n.snacky-chatfield__send--active {\n background: var(--bg-action-primary);\n /* White on the accent circle. Figma binds this to background/surface/bg-surface,\n which is the same #ffffff but an odd name for an icon colour, so the\n equivalent icon token is used here. It is NOT the dark text-on-action-primary\n that a labelled button would use. */\n color: var(--icon-on-accent);\n cursor: pointer;\n}\n.snacky-chatfield__send--active:hover { background: var(--bg-action-primary-hover); }\n",".snacky-address-result {\n display: flex;\n align-items: flex-start;\n gap: var(--gap-text-icon);\n width: 100%;\n /* Figma's \"Address, Search (Selected)\" is 72: 12/12 padding around a 24 title\n and a 24 subtitle, with the stroke drawn INSIDE. box-sizing:border-box\n plus this explicit height already absorbs a real border into the 72px\n total (verified: both render 72px), so a plain border is correct here -\n unlike Tab, which has no explicit height for box-sizing to apply to. */\n height: 72px;\n padding: var(--spacing-12) var(--spacing-8);\n background: var(--bg-surface);\n border: 1px solid var(--border-input-default);\n border-radius: var(--radius-field);\n box-sizing: border-box;\n cursor: pointer;\n text-align: left;\n}\n.snacky-address-result__icon {\n display: inline-flex;\n flex-shrink: 0;\n width: 20px;\n height: 20px;\n color: var(--text-placeholder);\n margin-top: 2px;\n}\n.snacky-address-result__title {\n margin: 0;\n font-family: var(--font-small-bold-family);\n font-size: var(--font-small-bold-size);\n font-weight: var(--font-small-bold-weight);\n color: var(--text-primary);\n line-height: var(--font-small-bold-line-height);\n letter-spacing: var(--font-small-bold-letter-spacing);\n}\n.snacky-address-result__subtitle {\n margin: 0;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n color: var(--text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n",".snacky-chip {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-4);\n /* Figma gives both chip types a fixed 40 with the stroke inside. Without an\n explicit height the 1px border stacked on 8 + 24 + 8 and made it 42. */\n height: 40px;\n padding: var(--spacing-8);\n border-radius: var(--radius-full);\n background: var(--bg-surface);\n border: 1px solid var(--border-main);\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n color: var(--text-primary);\n cursor: pointer;\n white-space: nowrap;\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-chip--selected {\n background: var(--bg-surface-highlight);\n border-color: var(--color-primary-500);\n}\n.snacky-chip__thumb {\n width: 24px;\n height: 24px;\n flex-shrink: 0;\n object-fit: contain;\n}\n",".snacky-radio-option {\n display: inline-flex;\n align-items: center;\n gap: var(--gap-icon-label);\n cursor: pointer;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n color: var(--text-primary);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-radio-option--disabled {\n cursor: not-allowed;\n}\n.snacky-radio {\n appearance: none;\n width: 24px;\n height: 24px;\n margin: 0;\n flex-shrink: 0;\n box-sizing: border-box;\n border-radius: 999px;\n border: 1px solid var(--border-main);\n background: transparent;\n cursor: pointer;\n position: relative;\n}\n.snacky-radio:checked {\n /* Figma binds both the ring and the dot to background/action/bg-action-primary\n (same #f8b732 as the primary-500 primitive this used before, but the real\n semantic token the file actually references). */\n border-color: var(--bg-action-primary);\n}\n.snacky-radio:checked::after {\n content: '';\n position: absolute;\n inset: 0;\n margin: auto;\n width: 12px;\n height: 12px;\n border-radius: 999px;\n background: var(--bg-action-primary);\n}\n.snacky-radio:disabled {\n cursor: not-allowed;\n border-color: var(--border-main);\n background: var(--bg-surface-variant);\n}\n/* Disabled suppresses the selected dot entirely, even if checked - matches\n the site's own verified implementation exactly. */\n.snacky-radio:disabled::after {\n display: none;\n}\n",".snacky-checkbox-option {\n display: inline-flex;\n align-items: center;\n gap: var(--gap-icon-label);\n cursor: pointer;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n color: var(--text-primary);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-checkbox {\n appearance: none;\n width: 24px;\n height: 24px;\n margin: 0;\n box-sizing: border-box;\n flex-shrink: 0;\n /* Off state is a white field surface with an outline - updated in Figma\n (node 444:11084) from an earlier solid neutral-500 fill to this outline\n style. Figma binds the stroke to border/border-main, not the\n border-input-default this used before (same #cccccc either way). */\n border: 1px solid var(--border-main);\n border-radius: var(--radius-field);\n cursor: pointer;\n position: relative;\n background: var(--bg-surface-field);\n}\n.snacky-checkbox:checked {\n background: var(--color-primary-500);\n border-color: var(--color-primary-500);\n}\n.snacky-checkbox:checked::after {\n content: '';\n position: absolute;\n inset: 3px;\n /* Confirmed against Figma: the checkmark is white (icon-on-accent), not\n text-primary - it reads as a white cutout in the compound icon path, not a\n dark mark layered on top. */\n background: var(--icon-on-accent);\n -webkit-mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E\") center / contain no-repeat;\n mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E\") center / contain no-repeat;\n}\n",".snacky-toggle {\n position: relative;\n display: inline-block;\n width: 56px;\n height: 32px;\n margin: 0;\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n appearance: none;\n}\n.snacky-toggle:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n.snacky-toggle__track {\n position: absolute;\n left: 0;\n top: 4px;\n width: 56px;\n height: 24px;\n border-radius: 12px;\n /* Bound to bg-action-disabled in Figma (same #cccccc as neutral-200, this\n just matches the actual token binding, confirmed via the file's variables). */\n background: var(--bg-action-disabled);\n transition: background-color 0.2s ease;\n}\n.snacky-toggle--on .snacky-toggle__track {\n /* \"Accent tint\" per Figma - a light wash, not the solid accent color. Figma's\n actual paint (#fffbe9) isn't bound to any variable and isn't quite\n bg-surface-highlight/primary-50 (#fef8eb) either, close enough (a few\n values out of 255 per channel) that this token is used rather than a new\n one-off raw color for an likely-untokenized value in Figma itself. */\n background: var(--bg-surface-highlight);\n}\n.snacky-toggle__thumb {\n position: absolute;\n top: 0;\n left: 0;\n width: 32px;\n height: 32px;\n border-radius: 999px;\n /* Confirmed against Figma (bound to the icon-disabled variable): #a3a3a3,\n not neutral-500 (#7a7a7a). */\n background: var(--icon-disabled);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n transition: left 0.2s ease, background-color 0.2s ease;\n}\n.snacky-toggle--on .snacky-toggle__thumb {\n left: 24px;\n background: var(--color-primary-500);\n}\n",".snacky-navbar {\n display: flex;\n width: 100%;\n background: var(--bg-surface);\n box-shadow: var(--shadow-top);\n}\n.snacky-navbar__item {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--gap-icon-label);\n padding: var(--spacing-12) 0;\n background: none;\n border: none;\n cursor: pointer;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n color: var(--text-secondary);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-navbar__item--active {\n font-family: var(--font-small-bold-family);\n font-weight: var(--font-small-bold-weight);\n color: var(--text-primary);\n font-size: var(--font-small-bold-size);\n line-height: var(--font-small-bold-line-height);\n letter-spacing: var(--font-small-bold-letter-spacing);\n}\n.snacky-navbar__icon {\n display: inline-flex;\n width: 20px;\n height: 20px;\n /* Icon and label use different inactive colors in the site's own\n verified implementation - icon-secondary, not text-secondary. */\n color: var(--icon-secondary);\n}\n.snacky-navbar__item--active .snacky-navbar__icon {\n color: var(--color-primary-500);\n}\n",".snacky-tabrow {\n display: flex;\n gap: var(--spacing-24);\n border-bottom: 1px solid var(--border-main);\n}\n.snacky-tab {\n background: none;\n border: none;\n /* Figma's own token for this exact gap is gap.text-underline (16px,\n documented as \"Text → underline indicator gap (Tab)\"), not spacing-12.\n The accent line is painted as an inset box-shadow rather than a real\n border so it doesn't add its own 2px on top - a real border pushed the\n tab to 38 against Figma's declared 40 (24 text + 16 gap, no extra). The\n transparent/coloured swap below still reserves the same space either\n way, so switching tabs causes no layout shift. */\n box-shadow: inset 0 -2px 0 0 transparent;\n padding: 0 0 var(--gap-text-underline) 0;\n cursor: pointer;\n font-family: var(--font-body-regular-family);\n font-size: 14px;\n line-height: var(--font-body-regular-line-height);\n color: var(--text-primary);\n transition: color 0.15s ease;\n font-weight: var(--font-body-regular-weight);\n letter-spacing: var(--font-body-regular-letter-spacing);\n}\n.snacky-tab--active {\n font-family: var(--font-body-semibold-family);\n font-weight: var(--font-body-semibold-weight);\n /* Re-verified against Figma's actual bound variables (an earlier pass\n read this as the raw primary-700 primitive): the active label's text\n fill is bound to text/on-action/text-on-action-tertiary (#b08224,\n same value as primary-700, but the real semantic token, matching the\n Tertiary button's default label color). The underline's stroke is\n bound to border/input/border-input-active (#f8b732) - an input-focus\n token reused here, which reads as incidental Figma variable reuse\n rather than an intentional shared role, so this keeps the primitive\n --color-primary-500 instead of adopting a misleading token name. */\n color: var(--text-on-action-tertiary);\n box-shadow: inset 0 -2px 0 0 var(--color-primary-500);\n font-size: var(--font-body-semibold-size);\n line-height: var(--font-body-semibold-line-height);\n letter-spacing: var(--font-body-semibold-letter-spacing);\n}\n",".snacky-header {\n display: flex;\n align-items: center;\n width: 100%;\n box-sizing: border-box;\n padding: var(--spacing-16) var(--spacing-8);\n background: var(--bg-surface);\n}\n.snacky-header__icon-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 40px;\n height: 40px;\n padding: 0;\n border: none;\n border-radius: var(--radius-full);\n background: transparent;\n color: var(--icon-primary);\n cursor: pointer;\n}\n.snacky-header__title-row {\n flex: 1;\n min-width: 0;\n display: flex;\n justify-content: center;\n}\n/* When a leading icon is present but there's no trailing action, the title\n row gets matching right padding so the text stays optically centered\n against the whole bar, not just the leftover space next to the icon. */\n.snacky-header__title-row--balance {\n padding-right: 40px;\n}\n.snacky-header__title {\n font-family: var(--font-h3-bold-family);\n font-weight: var(--font-h3-bold-weight);\n font-size: var(--font-h3-bold-size);\n line-height: var(--font-h3-bold-line-height);\n letter-spacing: var(--font-h3-bold-letter-spacing);\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n",".snacky-banner-hero {\n display: block;\n width: 100%;\n /* Its two siblings below both pin an aspect-ratio; this one did not, so the\n artwork's own proportions decided the height and a 6.4:1 strip rendered the\n banner 49 tall instead of Figma's 312x128. */\n aspect-ratio: 312 / 128;\n border-radius: var(--radius-field);\n box-shadow: var(--shadow-md);\n object-fit: cover;\n}\n.snacky-banner-square {\n display: block;\n width: 100%;\n aspect-ratio: 360 / 334;\n border-radius: var(--radius-bubble);\n object-fit: cover;\n}\n.snacky-banner-full {\n display: block;\n width: 100%;\n aspect-ratio: 360 / 176;\n object-fit: cover;\n}\n.snacky-banner-point-balance {\n /* Figma's own frame is 312 wide and hugs its content, which is why this was\n briefly `display: inline-flex` with no width. That reads fine in\n isolation, but real usage sits this next to a sibling of the same width\n (the \"Default\"/\"LowBalance\" pair in the docs gallery), and hugging made a\n low-balance \"0\" / \"Rp 0\" row collapse to a fraction of the width its\n sibling used, stranded inside whatever wider container held it. Filling\n the container keeps the banner a consistent width regardless of content\n length; `justify-content` stays at its flex-start default (not\n space-between) so the two item groups still stay grouped on the left\n with a plain `gap`, they just no longer get spread across the full\n width the way the original space-between bug did. */\n display: flex;\n width: 100%;\n align-items: center;\n padding: var(--spacing-8) var(--spacing-16);\n /* 8px, per Figma's `Property 1=point-balance` frame. Primitive rather than a\n semantic gap token because none covers this: gap.text-icon is also 8px but\n is documented as a field row's text-to-icon gap, not the split between the\n banner's two halves. */\n gap: var(--spacing-8);\n background: var(--bg-surface-highlight);\n /* Figma draws this stroke INSIDE a 60-tall frame. There's no explicit height\n on this rule, so box-sizing:border-box alone can't absorb a real border -\n unlike AddressResult, which has a fixed height and uses a plain border.\n An inset shadow paints the same 1px line without adding to the box, so the\n row's own content (56px: 20 padding + 36 item) plus this 8+8 padding\n still lands on 60 rather than 62. */\n box-shadow: inset 0 0 0 1px var(--color-primary-500);\n border-radius: var(--radius-card);\n box-sizing: border-box;\n}\n.snacky-banner-point-balance__item {\n display: flex;\n align-items: center;\n /* Figma's own auto-layout sets both item columns to fill-container, splitting\n the row 50/50 around the divider (confirmed in dev-mode inspect) - without\n this, the two hug-width groups just packed against the left edge, leaving\n the divider stranded right after the first group instead of centred, and a\n growing empty band of surface colour on the right in any container wider\n than the content (as wide as any real usage beyond a ~312px mobile screen). */\n flex: 1;\n /* 12px, per Figma's \"Points and Balance Container\". This was gap.icon-label\n (4px), which is documented as a *vertical* navbar/menu icon-to-label gap,\n so it was wrong on both the axis and the value and left the icon jammed\n against the text. No semantic gap token is 12px, hence the primitive. */\n gap: var(--spacing-12);\n}\n.snacky-banner-point-balance__icon {\n /* Figma binds both icons to icon/icon-brand and draws them at 16x16. Without\n an explicit colour the icons render currentColor, which inherits the row's\n dark label colour instead of the accent. */\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n color: var(--icon-brand);\n}\n.snacky-banner-point-balance__label {\n margin: 0;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n color: var(--text-primary);\n font-weight: var(--font-small-regular-weight);\n /* Figma authors this label node at 20 tall even though its line-height reads\n 24, and 20 + the value's 24 is what makes the banner exactly 60. Deliberate\n override of the token's 24. */\n line-height: 20px;\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-banner-point-balance__value {\n margin: 0;\n font-family: var(--font-small-bold-family);\n font-weight: var(--font-small-bold-weight);\n color: var(--text-primary);\n font-size: var(--font-small-bold-size);\n line-height: var(--font-small-bold-line-height);\n letter-spacing: var(--font-small-bold-letter-spacing);\n}\n.snacky-banner-point-balance__divider {\n width: 1px;\n align-self: stretch;\n background: var(--color-primary-500);\n}\n\n.snacky-banner-alert {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n /* 40 is Figma's single-line sample, not a cap - a fixed height clipped any\n message long enough to wrap onto a second line. min-height keeps the\n 40px default and lets the row hug taller wrapped content instead. */\n min-height: 40px;\n padding: var(--spacing-8) var(--spacing-24);\n gap: var(--spacing-4);\n background: var(--bg-surface-accent);\n box-sizing: border-box;\n}\n.snacky-banner-alert__message {\n margin: 0;\n /* Lets the message shrink and wrap within the row instead of pushing the\n countdown out or overflowing sideways - a flex item's default min-width\n is its unwrapped content width, which defeats wrapping. */\n flex: 1 1 auto;\n min-width: 0;\n font-family: var(--font-body-regular-family);\n font-size: var(--font-body-regular-size);\n color: var(--text-inverse);\n font-weight: var(--font-body-regular-weight);\n line-height: var(--font-body-regular-line-height);\n letter-spacing: var(--font-body-regular-letter-spacing);\n}\n.snacky-banner-alert__countdown {\n margin: 0;\n font-family: var(--font-body-semibold-family);\n font-weight: var(--font-body-semibold-weight);\n color: var(--text-inverse);\n font-size: var(--font-body-semibold-size);\n line-height: var(--font-body-semibold-line-height);\n letter-spacing: var(--font-body-semibold-letter-spacing);\n}\n",".snacky-badge-wrap {\n position: relative;\n display: inline-flex;\n}\n.snacky-badge-notification {\n position: absolute;\n top: -8px;\n right: -10px;\n min-width: 20px;\n height: 19px;\n padding: var(--spacing-2) var(--spacing-4);\n border-radius: 999px;\n background: var(--bg-surface-accent);\n color: var(--text-inverse);\n font-family: var(--font-caption-semibold-family);\n font-size: var(--font-caption-semibold-size);\n font-weight: var(--font-caption-semibold-weight);\n display: flex;\n align-items: center;\n justify-content: center;\n line-height: 1;\n letter-spacing: var(--font-caption-semibold-letter-spacing);\n}\n.snacky-discount-tag {\n /* Figma: 24 tall. The 16px caption line box plus 2/4 padding only made 20. */\n height: 24px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: var(--spacing-2) var(--spacing-4);\n border-radius: var(--radius-tag);\n background: var(--bg-surface-accent);\n color: var(--text-inverse);\n font-family: var(--font-caption-semibold-family);\n font-size: var(--font-caption-semibold-size);\n font-weight: var(--font-caption-semibold-weight);\n line-height: var(--font-caption-semibold-line-height);\n letter-spacing: var(--font-caption-semibold-letter-spacing);\n}\n.snacky-soldout-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: var(--spacing-12) var(--spacing-8);\n border-radius: 999px;\n background: rgba(51, 51, 51, 0.8);\n color: var(--text-inverse);\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-info-badge {\n display: inline-flex;\n align-items: center;\n /* Icon -> label gap. Only applies when the optional icon slot is filled;\n with no icon the badge is a single text node and the gap collapses. */\n gap: var(--gap-text-icon);\n /* Figma: 32 tall with the stroke inside; the 1px border was stacking on top. */\n height: 32px;\n padding: var(--spacing-8);\n border-radius: var(--radius-field);\n background: var(--bg-surface-highlight);\n border: 1px solid var(--color-primary-500);\n color: var(--text-primary);\n font-family: var(--font-caption-regular-family);\n font-size: var(--font-caption-regular-size);\n font-weight: var(--font-caption-regular-weight);\n line-height: var(--font-caption-regular-line-height);\n letter-spacing: var(--font-caption-regular-letter-spacing);\n}\n.snacky-info-badge__icon {\n display: inline-flex;\n flex-shrink: 0;\n /* Figma binds this glyph to icon/icon-brand, and the icons render\n currentColor, so tint the slot rather than making every caller pass a\n color prop. Matches SnackyInfoBadge's LocalContentColor in compose-ui. */\n color: var(--icon-brand);\n /* 12x12, raw rather than a token on purpose: the icon size scale is\n 16/20/24 (size.icon.sm/md/lg) and Figma draws this one at 12, below the\n smallest step. Sized here rather than left to the caller so the badge\n stays 32 tall whatever icon is passed in. */\n width: 12px;\n height: 12px;\n}\n.snacky-info-badge__icon svg {\n width: 100%;\n height: 100%;\n}\n",".snacky-callout {\n display: inline-flex;\n flex-direction: column;\n gap: var(--spacing-4);\n max-width: 200px;\n padding: var(--spacing-12) var(--spacing-8);\n border-radius: var(--radius-bubble);\n font-family: var(--font-body-regular-family);\n font-size: var(--font-body-regular-size);\n color: var(--text-primary);\n font-weight: var(--font-body-regular-weight);\n line-height: var(--font-body-regular-line-height);\n letter-spacing: var(--font-body-regular-letter-spacing);\n}\n.snacky-callout--received {\n align-self: flex-start;\n background: var(--bg-surface);\n /* No box-shadow: confirmed against Figma (node 8690:7424), the Received\n bubble has an empty effects array, flat like Sent/Pending. */\n}\n.snacky-callout--sent,\n.snacky-callout--pending {\n align-self: flex-end;\n background: var(--color-primary-500);\n}\n.snacky-callout__message {\n margin: 0;\n width: 100%;\n}\n.snacky-callout__meta {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--spacing-4);\n width: 100%;\n font-family: var(--font-caption-regular-family);\n font-size: var(--font-caption-regular-size);\n color: var(--text-primary);\n text-align: right;\n font-weight: var(--font-caption-regular-weight);\n line-height: var(--font-caption-regular-line-height);\n letter-spacing: var(--font-caption-regular-letter-spacing);\n}\n.snacky-callout__meta-icon {\n width: 16px;\n height: 16px;\n display: inline-flex;\n}\n",".snacky-order-item {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-8);\n width: 100%;\n padding: var(--spacing-8) var(--spacing-12);\n background: var(--bg-surface);\n border-radius: var(--radius-field);\n box-shadow: var(--shadow-md);\n box-sizing: border-box;\n text-align: left;\n}\n.snacky-order-item__top {\n display: flex;\n gap: var(--spacing-8);\n width: 100%;\n}\n.snacky-order-item__thumb-box {\n width: 56px;\n height: 56px;\n flex-shrink: 0;\n border-radius: var(--radius-field);\n /* No background: Figma's Image component set (usage=list) has no fill and no\n stroke on the 56x56 frame, it only holds the 48x48 photo. An earlier pass\n invented #f4f4f5 here, which is also 1-2 values off bg-surface-variant and\n contradicted ProductImage's own usage=\"list\", which correctly has none. */\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n}\n.snacky-order-item__thumb {\n width: 48px;\n height: 48px;\n object-fit: contain;\n}\n.snacky-order-item__info {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n}\n.snacky-order-item__status {\n font-family: var(--font-small-semibold-family);\n font-weight: var(--font-small-semibold-weight);\n font-size: var(--font-small-semibold-size);\n line-height: 24px;\n color: var(--text-primary);\n letter-spacing: var(--font-small-semibold-letter-spacing);\n}\n.snacky-order-item__status--cancelled {\n color: var(--text-error);\n}\n.snacky-order-item__name {\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n line-height: 24px;\n color: var(--text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-weight: var(--font-small-regular-weight);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-order-item__details {\n display: flex;\n align-items: center;\n gap: var(--spacing-8);\n width: 100%;\n /* Figma's \"Details Container\" is padded 8/0. Without it every order variant\n came out exactly 16px short. */\n padding: var(--spacing-8) 0;\n}\n.snacky-order-item__count {\n flex: 1;\n min-width: 0;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n line-height: 24px;\n color: var(--text-secondary);\n font-weight: var(--font-small-regular-weight);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-order-item__total {\n flex: 1;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n line-height: 24px;\n color: var(--text-primary);\n text-align: right;\n white-space: nowrap;\n font-weight: var(--font-small-regular-weight);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-order-item__total b {\n font-weight: var(--font-small-bold-weight);\n letter-spacing: 0.12px;\n font-family: var(--font-small-bold-family);\n font-size: var(--font-small-bold-size);\n line-height: var(--font-small-bold-line-height);\n}\n.snacky-order-item__total--cod {\n flex: 0 1 auto;\n}\n.snacky-order-item__cod {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n /* Figma's \"COD Container\" is 24 tall with its stroke inside. Without an\n explicit height the 1px border stacked on the 24px line box and pushed the\n whole card to 122 instead of 120. */\n height: 24px;\n padding: 0 var(--spacing-8);\n border-radius: var(--radius-field);\n border: 1px solid var(--border-main);\n background: var(--bg-surface);\n font-family: var(--font-small-bold-family);\n font-weight: var(--font-small-bold-weight);\n font-size: var(--font-small-bold-size);\n line-height: 24px;\n letter-spacing: 0.12px;\n color: var(--text-secondary);\n}\n.snacky-order-item__deadline {\n width: 100%;\n background: var(--bg-surface-highlight);\n text-align: center;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n line-height: 24px;\n color: var(--text-primary);\n font-weight: var(--font-small-regular-weight);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-order-item__action-row {\n display: flex;\n justify-content: flex-end;\n width: 100%;\n}\n\n.snacky-notif-item {\n display: flex;\n flex-direction: column;\n gap: 0;\n width: 100%;\n box-sizing: border-box;\n padding: var(--spacing-8) var(--spacing-12);\n background: var(--bg-surface);\n border: 1px solid var(--border-main);\n border-radius: var(--radius-field);\n text-align: left;\n}\n.snacky-notif-item--unread {\n background: var(--bg-surface-highlight);\n}\n.snacky-notif-item__title {\n font-family: var(--font-small-semibold-family);\n font-weight: var(--font-small-semibold-weight);\n font-size: var(--font-small-semibold-size);\n line-height: 24px;\n color: var(--text-primary);\n letter-spacing: var(--font-small-semibold-letter-spacing);\n}\n.snacky-notif-item__message {\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n line-height: 24px;\n color: var(--text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-weight: var(--font-small-regular-weight);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n",".snacky-accordion {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-4);\n width: 100%;\n}\n.snacky-accordion__header {\n display: flex;\n align-items: center;\n gap: var(--gap-text-icon);\n width: 100%;\n padding: var(--spacing-12) var(--spacing-8);\n background: var(--bg-surface);\n border: none;\n border-radius: var(--radius-field);\n box-shadow: var(--shadow-md);\n cursor: pointer;\n text-align: left;\n color: var(--text-primary);\n}\n.snacky-accordion__icon {\n width: 24px;\n height: 24px;\n flex-shrink: 0;\n}\n.snacky-accordion__title {\n flex: 1;\n font-family: var(--font-body-semibold-family);\n font-size: 14px;\n font-weight: var(--font-body-semibold-weight);\n line-height: var(--font-body-semibold-line-height);\n letter-spacing: var(--font-body-semibold-letter-spacing);\n}\n.snacky-accordion--icon .snacky-accordion__title {\n font-family: var(--font-small-semibold-family);\n font-size: var(--font-small-semibold-size);\n font-weight: var(--font-small-semibold-weight);\n line-height: var(--font-small-semibold-line-height);\n letter-spacing: var(--font-small-semibold-letter-spacing);\n}\n.snacky-accordion__chevron {\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n /* Confirmed against Figma: icon-secondary in both open and closed states,\n not inherited text-primary. */\n color: var(--icon-secondary);\n transition: transform 0.15s ease;\n}\n.snacky-accordion__chevron--open {\n transform: rotate(180deg);\n}\n/* Confirmed against Figma (node 8696:6572): the expanded panel is its own\n separate elevated card (own radius-field + shadow-md), not a padding-only\n section merged into the header's card, and there is no bordered variant\n at all - Figma never draws a border on either the icon or no-icon case. */\n.snacky-accordion__panel {\n padding: var(--spacing-12);\n background: var(--bg-surface);\n border-radius: var(--radius-field);\n box-shadow: var(--shadow-md);\n /* Figma's \"Content Text\" is 14/24 (body-regular), not the 12px small-regular\n the header uses. At 12px the copy re-wrapped and the expanded card came out\n 292 tall instead of 340. */\n font-family: var(--font-body-regular-family);\n font-size: var(--font-body-regular-size);\n color: var(--text-primary);\n font-weight: var(--font-body-regular-weight);\n line-height: var(--font-body-regular-line-height);\n letter-spacing: var(--font-body-regular-letter-spacing);\n}\n",".snacky-sheet-overlay {\n position: fixed;\n inset: 0;\n background: var(--bg-overlay-dim);\n display: flex;\n align-items: flex-end;\n justify-content: center;\n z-index: 1000;\n}\n.snacky-sheet {\n width: 100%;\n max-width: 480px;\n max-height: 90vh;\n overflow-y: auto;\n background: var(--bg-surface);\n border-radius: var(--radius-sheet-top) var(--radius-sheet-top) 0 0;\n padding: var(--spacing-24);\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--gap-layout-block);\n}\n.snacky-sheet__handle {\n width: 36px;\n height: 4px;\n border-radius: 999px;\n background: var(--color-neutral-200);\n margin: 0 auto var(--spacing-8);\n}\n",".snacky-section {\n width: 100%;\n padding: var(--spacing-16) var(--spacing-24);\n background: var(--bg-surface);\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--gap-layout-block);\n}\n.snacky-section__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n.snacky-section__title {\n margin: 0;\n font-family: var(--font-h3-bold-family);\n font-size: var(--font-h3-bold-size);\n font-weight: var(--font-h3-bold-weight);\n color: var(--text-primary);\n line-height: var(--font-h3-bold-line-height);\n letter-spacing: var(--font-h3-bold-letter-spacing);\n}\n.snacky-section__action {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 24px;\n height: 24px;\n padding: var(--spacing-4);\n border: none;\n border-radius: var(--radius-full);\n background: var(--bg-action-primary);\n /* Re-verified against Figma's actual bound variable on the chevron vector\n (not the icon instance's own unrelated white frame fill, which was\n mistakenly read as the icon color in an earlier pass): text/text-primary,\n #333333 - same rendered color as --text-on-action-primary, which is what\n this originally was, but --text-primary is the variable Figma actually\n binds here. */\n color: var(--text-primary);\n cursor: pointer;\n}\n.snacky-section__action:hover { background: var(--bg-action-primary-hover); }\n",".snacky-stepper {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n /* Figma \"Order status progress\": VERTICAL, 32 between steps. */\n gap: var(--spacing-32);\n}\n\n.snacky-stepper__step {\n position: relative;\n display: flex;\n align-items: flex-start;\n /* Figma \"Order status step\": HORIZONTAL, gap 16. The height follows the\n content - 48 with a timestamp, 24 without - which is what makes the four\n documented progress frames land on 288 / 264 / 216 / 216. Forcing 48 on\n every step made all four 288. */\n gap: var(--gap-layout-block);\n}\n\n/* The connector is one -90deg-rotated dashed LINE spanning the whole stepper in\n Figma. Drawing it per-step instead survives any number of steps, and the\n dashes line up either way. Starts below the 24px dot and runs into the 32px\n gap to the next one. */\n.snacky-stepper__step::before {\n content: '';\n position: absolute;\n left: 12px;\n top: 24px;\n bottom: calc(-1 * var(--spacing-32));\n border-left: 1px dashed var(--border-main);\n}\n.snacky-stepper__step--last::before {\n content: none;\n}\n\n/* 24x24 slot holding a 16x16 circle, per Figma's \"Progress dot/*\" frames. */\n.snacky-stepper__dot {\n position: relative;\n z-index: 1;\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n}\n.snacky-stepper__dot::before {\n content: '';\n position: absolute;\n width: 16px;\n height: 16px;\n border-radius: var(--radius-full);\n}\n.snacky-stepper__dot--done::before {\n background: var(--icon-brand);\n}\n.snacky-stepper__dot--pending::before {\n background: var(--bg-action-disabled);\n}\n.snacky-stepper__dot--cancelled::before {\n background: var(--bg-surface-accent);\n}\n/* The X only appears on the cancelled dot, drawn on the accent circle. */\n.snacky-stepper__dot--cancelled svg {\n position: relative;\n z-index: 1;\n color: var(--icon-on-accent);\n}\n\n.snacky-stepper__body {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.snacky-stepper__label {\n font-family: var(--font-small-bold-family);\n font-size: var(--font-small-bold-size);\n font-weight: var(--font-small-bold-weight);\n line-height: var(--font-small-bold-line-height);\n letter-spacing: var(--font-small-bold-letter-spacing);\n}\n.snacky-stepper__label--done {\n color: var(--text-primary);\n}\n.snacky-stepper__label--pending {\n color: var(--text-secondary);\n}\n.snacky-stepper__label--cancelled {\n color: var(--text-error);\n}\n\n.snacky-stepper__time {\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n color: var(--text-secondary);\n}\n","/* Figma \"Property 1=Calendar\": 360 wide, VERTICAL, 24 gap, 24 padding. */\n.snacky-calendar {\n width: 100%;\n max-width: 360px;\n display: flex;\n flex-direction: column;\n gap: var(--spacing-24);\n padding: var(--spacing-24);\n background: var(--bg-surface);\n box-sizing: border-box;\n}\n\n/* \"Calendar Header Container\": 312x36, prev/next 24x24 either side of the label. */\n.snacky-calendar__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--spacing-8);\n}\n.snacky-calendar__nav {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n padding: 0;\n border: none;\n background: none;\n color: var(--icon-primary);\n cursor: pointer;\n}\n/* One back glyph serves both arrows - the set has no forward twin, and Figma\n uses the same instance mirrored. */\n.snacky-calendar__nav--next {\n transform: scaleX(-1);\n}\n.snacky-calendar__label {\n flex: 1;\n text-align: center;\n font-family: var(--font-h3-bold-family);\n font-size: var(--font-h3-bold-size);\n font-weight: var(--font-h3-bold-weight);\n line-height: var(--font-h3-bold-line-height);\n letter-spacing: var(--font-h3-bold-letter-spacing);\n color: var(--text-primary);\n}\n\n/* Figma hugs each date cell, so its row gaps vary (39/36/33/30/29). A seven\n column grid is the faithful translation: same even distribution, no\n per-row magic numbers. */\n.snacky-calendar__grid {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n justify-items: center;\n align-items: center;\n /* Figma's row pitch is 59: a 36-tall date row plus a 23 gap. The cell here is\n 40 rather than 36 because the selected day's circle is 40 (Figma's\n \"selected\" frame) and would otherwise overflow its row, so the gap is\n 59 - 40 = 19 to keep the same pitch. Not a token: 59 is not on the scale. */\n row-gap: 19px;\n}\n\n.snacky-calendar__weekday {\n height: 30px;\n display: inline-flex;\n align-items: center;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n color: var(--text-primary);\n}\n\n.snacky-calendar__day {\n position: relative;\n width: 100%;\n height: 40px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: none;\n padding: 0;\n cursor: pointer;\n font-family: var(--font-h3-regular-family, var(--font-h3-bold-family));\n font-size: 16px;\n line-height: 36px;\n color: var(--text-primary);\n}\n.snacky-calendar__day--outside {\n color: var(--text-disabled);\n cursor: default;\n}\n\n/* The range band sits behind the row; the two ends get the filled circle. */\n.snacky-calendar__day--in-range {\n background: var(--bg-surface-highlight);\n}\n.snacky-calendar__day-number {\n position: relative;\n z-index: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n border-radius: var(--radius-full);\n}\n.snacky-calendar__day--selected .snacky-calendar__day-number {\n background: var(--bg-action-primary);\n font-weight: 700;\n}\n.snacky-calendar__day--selected {\n background: var(--bg-surface-highlight);\n}\n\n/* Figma \"Ellipse 38\": an 8px accent dot under a marked day. */\n.snacky-calendar__marker {\n position: absolute;\n bottom: 2px;\n width: 8px;\n height: 8px;\n border-radius: var(--radius-full);\n background: var(--bg-action-primary);\n}\n",".snacky-avatar {\n display: block;\n border-radius: 999px;\n object-fit: cover;\n flex-shrink: 0;\n}\n.snacky-avatar--sm { width: 32px; height: 32px; }\n.snacky-avatar--md { width: 56px; height: 56px; }\n.snacky-avatar--lg { width: 72px; height: 72px; }\n",".snacky-illustration {\n display: block;\n max-width: 100%;\n /* The per-variant canvas is the spec, so the artwork is fitted into it rather\n than allowed to set its own height. `height: auto` let the file's aspect win,\n and two of the shipped PNGs do not match their canvas\n (illus-discount-referral is 1076x892, i.e. 1.206, against a 268x200 / 1.340\n canvas), which rendered discountReferral 22px too tall. contain keeps the\n canvas exact without distorting the artwork. */\n object-fit: contain;\n}\n",".snacky-product-image-wrap {\n position: relative;\n display: inline-flex;\n flex-shrink: 0;\n}\n.snacky-product-image {\n display: block;\n object-fit: contain;\n}\n/* These must match the `usage` prop values verbatim, since the class name is\n built as `--${usage}`. They read `--card`/`--details` before, so the\n product-card and product-details usages, the two most common ones, silently\n matched no rule at all and rendered unsized. */\n.snacky-product-image--product-card,\n.snacky-product-image--product-details {\n width: 100%;\n height: 100%;\n background: transparent;\n}\n.snacky-product-image-wrap--product-card { width: 128px; height: 128px; }\n.snacky-product-image-wrap--product-details { width: 200px; height: 200px; }\n\n.snacky-product-image-wrap--list {\n width: 56px;\n height: 56px;\n padding: var(--spacing-4);\n border-radius: var(--radius-field);\n box-sizing: border-box;\n}\n.snacky-product-image-wrap--review {\n width: 48px;\n height: 48px;\n padding: var(--spacing-4);\n border: 1px solid var(--border-main);\n border-radius: var(--radius-field);\n box-sizing: border-box;\n}\n.snacky-product-image-wrap--variant {\n width: 88px;\n height: 88px;\n padding: var(--spacing-4);\n border: 1px solid var(--border-main);\n border-radius: var(--radius-field);\n box-sizing: border-box;\n}\n.snacky-product-image-wrap--accordion-modal { width: 24px; height: 24px; }\n\n.snacky-product-image-sold-overlay {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.46);\n border-radius: inherit;\n}\n.snacky-product-image-sold-label {\n padding: var(--spacing-12) 7px;\n border-radius: 999px;\n background: rgba(51, 51, 51, 0.8);\n color: var(--text-inverse);\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n",".snacky-product-card {\n position: relative;\n display: flex;\n flex-direction: column;\n gap: var(--spacing-12);\n background: var(--bg-surface);\n text-align: left;\n border: none;\n cursor: pointer;\n font-family: inherit;\n}\n.snacky-product-card--list {\n width: 152px;\n /* 152px is a spec width, not a hint. This card's documented home is a\n horizontal carousel, where a flex parent would otherwise shrink it below\n spec rather than letting the row scroll. */\n flex-shrink: 0;\n padding: var(--spacing-12) var(--spacing-8);\n border-radius: var(--radius-field);\n box-shadow: var(--shadow-lg);\n}\n/* Figma node \"Property 1=details\": the card itself has no padding and no gap.\n Its two child frames carry all of it. */\n.snacky-product-card--details {\n width: 100%;\n padding: 0;\n gap: 0;\n}\n/* \"Image\" frame - 12/8 padding around the 200px image, 224 tall. */\n.snacky-product-card__image-block {\n display: flex;\n justify-content: center;\n padding: var(--spacing-12) var(--spacing-8);\n}\n/* \"Product details container\" - 16/24 padding, 8px gap, 148 tall. */\n.snacky-product-card__details-body {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-8);\n padding: var(--spacing-16) var(--spacing-24);\n}\n.snacky-product-card__image-wrap {\n position: relative;\n}\n.snacky-product-card--list .snacky-product-card__image-wrap { width: 128px; height: 128px; }\n.snacky-product-card--details .snacky-product-card__image-wrap { width: 200px; height: 200px; margin: 0 auto; }\n.snacky-product-card__image {\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n.snacky-product-card__discount {\n position: absolute;\n top: 0;\n right: 0;\n}\n/* Sold Out is a centred scrim over the whole image, not a corner tag. It used\n to reuse __discount above, which pinned the pill to the top-right with no\n scrim at all. index.html's preview and ProductImage's\n .snacky-product-image-sold-overlay both centre it; this matches them. */\n.snacky-product-card__sold-overlay {\n position: absolute;\n inset: 0;\n margin: var(--spacing-12) var(--spacing-8);\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.46);\n}\n.snacky-product-card__name {\n margin: 0;\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n color: var(--text-primary);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-product-card--details .snacky-product-card__name {\n font-size: 14px;\n}\n.snacky-product-card__price-row {\n display: flex;\n /* Figma's \"Price container\" is CENTER with a 5px gap, and 5 is not on the\n spacing scale, so this is a literal on purpose. Was baseline + 4px, which\n made the row 25px instead of the specced 24px. */\n align-items: center;\n gap: 5px;\n}\n.snacky-product-card--details .snacky-product-card__price-row {\n align-items: flex-start;\n gap: var(--spacing-8);\n}\n.snacky-product-card__price {\n font-family: var(--font-small-bold-family);\n font-weight: var(--font-small-bold-weight);\n color: var(--text-primary);\n font-size: var(--font-small-bold-size);\n line-height: var(--font-small-bold-line-height);\n letter-spacing: var(--font-small-bold-letter-spacing);\n}\n.snacky-product-card--details .snacky-product-card__price {\n /* Figma: 20px on a 36px line, which is what makes the price row 36 tall.\n Without the line-height it inherited small-bold's 24 and the row came out\n 27. */\n font-size: 20px;\n font-weight: 700;\n line-height: 36px;\n}\n.snacky-product-card__original-price {\n font-family: var(--font-small-bold-family);\n font-weight: var(--font-small-bold-weight);\n font-size: 10px;\n color: var(--text-secondary);\n text-decoration: line-through;\n /* Figma authors this one at AUTO line height, not the token's 24px - it is\n the only text in the card that does, so it stays a literal. */\n line-height: normal;\n letter-spacing: var(--font-small-bold-letter-spacing);\n}\n.snacky-product-card--details .snacky-product-card__original-price {\n font-size: 16px;\n font-weight: 700;\n line-height: 36px;\n}\n.snacky-product-card__footer-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--spacing-8);\n}\n.snacky-product-card__rating {\n display: inline-flex;\n align-items: center;\n gap: var(--gap-icon-label);\n font-family: var(--font-small-regular-family);\n font-size: var(--font-small-regular-size);\n color: var(--text-secondary);\n font-weight: var(--font-small-regular-weight);\n line-height: var(--font-small-regular-line-height);\n letter-spacing: var(--font-small-regular-letter-spacing);\n}\n.snacky-product-card__rating-icon {\n width: 16px;\n height: 16px;\n color: var(--icon-brand);\n}\n.snacky-product-card__actions {\n display: flex;\n gap: var(--gap-cell);\n}\n/* Details page's Favorite/Share/Chat icon buttons use a slightly softer\n shadow than the standard Secondary icon-button elevation. */\n.snacky-product-card__actions--details button {\n box-shadow: 0 4px 4px rgba(0, 0, 0, 0.08);\n}\n",".snacky-image-placeholder {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: var(--bg-surface-variant);\n color: var(--icon-disabled);\n}\n"],"mappings":";AACA;AACE,sBAAoB;AACpB,uBAAqB;AACrB,uBAAqB;AACrB,uBAAqB;AACrB,uBAAqB;AACrB,uBAAqB;AACrB,uBAAqB;AACrB,uBAAqB;AACrB,uBAAqB;AACrB,uBAAqB;AACrB,qBAAmB;AACnB,sBAAoB;AACpB,sBAAoB;AACpB,sBAAoB;AACpB,uBAAqB;AACrB,uBAAqB;AACrB,uBAAqB;AACrB,uBAAqB;AACrB,uBAAqB;AACrB,uBAAqB;AACrB,uBAAqB;AACrB,uBAAqB;AACrB,uBAAqB;AACrB,kBAAgB;AAChB,mBAAiB;AACjB,mBAAiB;AACjB,mBAAiB;AACjB,mBAAiB;AACjB,mBAAiB;AACjB,mBAAiB;AACjB,mBAAiB;AACjB,mBAAiB;AACjB,mBAAiB;AACjB,YAAU,IAAI;AACd,gBAAc,IAAI;AAClB,wBAAsB,IAAI;AAC1B,uBAAqB,IAAI;AACzB,wBAAsB,IAAI;AAC1B,sBAAoB,IAAI;AACxB,0BAAwB,IAAI;AAC5B,uBAAqB,IAAI;AACzB,6BAA2B,IAAI;AAC/B,+BAA6B,IAAI;AACjC,yBAAuB,IAAI;AAC3B,+BAA6B,IAAI;AACjC,iCAA+B,IAAI;AACnC,wBAAsB,IAAI;AAC1B,8BAA4B,IAAI;AAChC,sCAAoC,IAAI;AACxC,sCAAoC,IAAI;AACxC,oBAAkB,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAChC,iBAAe,IAAI;AACnB,sBAAoB,IAAI;AACxB,0BAAwB,IAAI;AAC5B,yBAAuB,IAAI;AAC3B,wBAAsB,IAAI;AAC1B,6BAA2B,IAAI;AAC/B,qCAAmC,IAAI;AACvC,0BAAwB,IAAI;AAC5B,4BAA0B,IAAI;AAC9B,kBAAgB,IAAI;AACpB,oBAAkB,IAAI;AACtB,sBAAoB,IAAI;AACxB,mBAAiB,IAAI;AACrB,eAAa,IAAI;AACjB,gBAAc,IAAI;AAClB,kBAAgB,IAAI;AACpB,4BAA0B,IAAI;AAC9B,8BAA4B,IAAI;AAChC,6BAA2B,IAAI;AAC/B,qCAAmC,IAAI;AACvC,qCAAmC,IAAI;AACvC,wBAAsB,IAAI;AAC1B,gCAA8B,IAAI;AAClC,gCAA8B,IAAI;AAClC,0BAAwB,IAAI;AAC5B,kBAAgB,IAAI;AACpB,oBAAkB,IAAI;AACtB,gBAAc,IAAI;AAClB,mBAAiB,IAAI;AACrB,iBAAe,IAAI;AACnB,oBAAkB,IAAI;AACtB,eAAa;AACb,eAAa;AACb,eAAa;AACb,gBAAc;AACd,gBAAc;AACd,gBAAc;AACd,gBAAc;AACd,oBAAkB,IAAI;AACtB,cAAY,IAAI;AAChB,mBAAiB,IAAI;AACrB,wBAAsB,IAAI;AAC1B,6BAA2B,IAAI;AAC/B,sBAAoB,IAAI;AACxB,sBAAoB,IAAI;AACxB,qBAAmB,IAAI;AACvB,mBAAiB,IAAI;AACrB,cAAY;AACZ,cAAY;AACZ,cAAY;AACZ,eAAa;AACb,eAAa;AACb,gBAAc;AACd,gBAAc;AACd,kBAAgB,IAAI;AACpB,gBAAc,IAAI;AAClB,mBAAiB,IAAI;AACrB,iBAAe,IAAI;AACnB,sBAAoB,IAAI;AACxB,iBAAe,IAAI;AACnB,kBAAgB;AAChB,kBAAgB;AAChB,kBAAgB;AAChB,oBAAkB;AAClB,oBAAkB;AAClB,oBAAkB;AAClB,eAAa,EAAE,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,eAAa,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,gBAAc,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,yBAAuB,SAAS,EAAE;AAClC,uBAAqB;AACrB,yBAAuB;AACvB,8BAA4B;AAC5B,iCAA+B;AAC/B,yBAAuB,SAAS,EAAE;AAClC,uBAAqB;AACrB,yBAAuB;AACvB,8BAA4B;AAC5B,iCAA+B;AAC/B,yBAAuB,SAAS,EAAE;AAClC,uBAAqB;AACrB,yBAAuB;AACvB,8BAA4B;AAC5B,iCAA+B;AAC/B,4BAA0B,SAAS,EAAE;AACrC,0BAAwB;AACxB,4BAA0B;AAC1B,iCAA+B;AAC/B,oCAAkC;AAClC,+BAA6B,SAAS,EAAE;AACxC,6BAA2B;AAC3B,+BAA6B;AAC7B,oCAAkC;AAClC,uCAAqC;AACrC,8BAA4B,SAAS,EAAE;AACvC,4BAA0B;AAC1B,8BAA4B;AAC5B,mCAAiC;AACjC,sCAAoC;AACpC,gCAA8B,SAAS,EAAE;AACzC,8BAA4B;AAC5B,gCAA8B;AAC9B,qCAAmC;AACnC,wCAAsC;AACtC,4BAA0B,SAAS,EAAE;AACrC,0BAAwB;AACxB,4BAA0B;AAC1B,iCAA+B;AAC/B,oCAAkC;AAClC,+BAA6B,SAAS,EAAE;AACxC,6BAA2B;AAC3B,+BAA6B;AAC7B,oCAAkC;AAClC,uCAAqC;AACrC,kCAAgC,SAAS,EAAE;AAC3C,gCAA8B;AAC9B,kCAAgC;AAChC,uCAAqC;AACrC,0CAAwC;AACxC,iCAA+B,SAAS,EAAE;AAC1C,+BAA6B;AAC7B,iCAA+B;AAC/B,sCAAoC;AACpC,yCAAuC;AACzC;;;ACpKA,CAAC;AACD,CAAC;AACD,CAAC,eAAiB;AAClB,CAAC,eAAiB;AAClB,CAAC,kBAAkB;AACnB,CAAC,kBAAkB;AACjB,cAAY;AACd;;;ACpBA,CAAC;AACC,YAAU;AACV,WAAS;AACT,eAAa;AACb,mBAAiB;AAKjB,UAAQ;AACR,WAAS,IAAI,cAAc,IAAI;AAC/B,iBAAe,IAAI;AACnB,UAAQ;AACR,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,UAAQ;AACR,eAAa;AACb;AAAA,IAAY,iBAAiB,MAAM,IAAI;AAAA,IAAE,aAAa,MAAM,IAAI;AAAA,IAAE,MAAM,MAAM;AAC9E,kBAAgB,IAAI;AACtB;AAEA,CAvBC,UAuBU;AACT,UAAQ;AACV;AAEA,CAAC;AACC,UAAQ;AACR,WAAS,IAAI,aAAa,IAAI;AAChC;AAIA,CAPC,kBAOkB,CAAC;AAClB,SAAO,IAAI;AACX,UAAQ,IAAI;AACd;AAQA,CAAC;AACC,gBAAc,KAAK,IAAI,aAAa,EAAE,IAAI,gBAAgB,EAAE,IAAI;AAClE;AACA,CArBC,iBAqBiB,CAHjB;AAIC,gBAAc,KAAK,IAAI,aAAa,EAAE,IAAI,gBAAgB,EAAE,IAAI;AAClE;AAGA,CAAC;AACC,cAAY,IAAI;AAChB,SAAO,IAAI;AACb;AACA,CAJC,mBAImB,MAAM,KAAK;AAAa,cAAY,IAAI;AAA4B;AACxF,CALC,mBAKmB,OAAO,KAAK;AAAa,cAAY,IAAI;AAA8B;AAC3F,CANC,mBAMmB;AAAY,cAAY,IAAI;AAAuB,SAAO,IAAI;AAAyB;AAG3G,CATC,mBASmB,CAAC;AACnB,cAAY,IAAI;AAChB,SAAO,IAAI;AACb;AACA,CAbC,mBAamB,CAJC,kBAIkB,MAAM,KAAK;AAAa,cAAY,IAAI;AAAqC;AACpH,CAdC,mBAcmB,CALC,kBAKkB,OAAO,KAAK;AAAa,cAAY,IAAI;AAAqC;AAIrH,CAlBC,mBAkBmB,CATC,kBASkB;AAAY,cAAY,IAAI;AAAuB,SAAO,IAAI;AAAyB,UAAQ,IAAI,MAAM,IAAI;AAA2B;AAG/K,CAAC;AACC,cAAY,IAAI;AAChB,UAAQ,IAAI,MAAM,IAAI;AACtB,SAAO,IAAI;AACb;AACA,CALC,qBAKqB,MAAM,KAAK;AAAa,cAAY,IAAI;AAA8B;AAC5F,CANC,qBAMqB,OAAO,KAAK;AAAa,cAAY,IAAI;AAAgC;AAC/F,CAPC,qBAOqB;AAAY,SAAO,IAAI;AAAyB;AAGtE,CAVC,qBAUqB,CAtBD;AAuBnB,gBAAc,IAAI;AAClB,SAAO,IAAI;AACb;AACA,CAdC,qBAcqB,CA1BD,kBA0BoB,MAAM,KAAK;AAAa,cAAY,IAAI;AAA8B;AAC/G,CAfC,qBAeqB,CA3BD,kBA2BoB,OAAO,KAAK;AAAa,cAAY,IAAI;AAAgC;AAClH,CAhBC,qBAgBqB,CA5BD,kBA4BoB;AAAY,gBAAc,IAAI;AAA2B,SAAO,IAAI;AAAyB;AAGtI,CAAC;AACC,cAAY;AACZ,SAAO,IAAI;AACb;AACA,CAJC,oBAIoB,MAAM,KAAK;AAAa,SAAO,IAAI;AAAoC;AAC5F,CALC,oBAKoB,OAAO,KAAK;AAAa,SAAO,IAAI;AAAoC;AAC7F,CANC,oBAMoB;AAAY,SAAO,IAAI;AAAyB;AAGrE,CATC,oBASoB,CAxCA;AAwCsB,SAAO,IAAI;AAAuB;AAC7E,CAVC,oBAUoB,CAzCA,kBAyCmB,MAAM,KAAK;AAAa,SAAO,IAAI;AAA+B;AAC1G,CAXC,oBAWoB,CA1CA,kBA0CmB,OAAO,KAAK;AAAa,SAAO,IAAI;AAA+B;AAC3G,CAZC,oBAYoB,CA3CA,kBA2CmB;AAAY,SAAO,IAAI;AAAyB;AAExF,CAzEoB;AA0ElB,YAAU;AACV,QAAM,IAAI;AACV,OAAK;AACL,aAAW,WAAW;AACtB,WAAS;AACT,SAAO,IAAI;AACX,UAAQ,IAAI;AACZ,eAAa;AACf;;;ACpHA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,eAAa;AACb,UAAQ;AACR,iBAAe,IAAI;AACnB,UAAQ;AACR,cAAY,iBAAiB,MAAM;AACrC;AACA,CAVC,cAUc;AAAY,UAAQ;AAAa;AAChD,CAXC,eAWe;AAChB,CAZC,eAYe;AAAM,SAAO;AAAM,UAAQ;AAAM;AAGjD,CAAC;AACC,SAAO;AACP,UAAQ;AACR,WAAS,IAAI;AACb,cAAY,IAAI;AAClB;AAIA,CATC,wBASwB,CAAC;AAAuB,SAAO;AAAM,UAAQ;AAAM,SAAO,IAAI;AAAiB;AACxG,CAVC,uBAUuB,MAAM,KAAK;AAAa,cAAY,IAAI;AAA4B;AAC5F,CAXC,uBAWuB,OAAO,KAAK;AAAa,cAAY,IAAI;AAA8B;AAC/F,CAZC,uBAYuB;AAAY,cAAY,IAAI;AAAuB,UAAQ,IAAI,MAAM,IAAI;AAA2B;AAC5H,CAbC,uBAauB,UAAU,CAJR;AAIgC,SAAO,IAAI;AAAkB;AAEvF,CAfC,uBAeuB,CAAC;AACvB,SAAO;AACP,UAAQ;AACR,WAAS,IAAI;AACf;AAGA,CAAC;AACC,SAAO;AACP,UAAQ;AACR,WAAS,IAAI;AACb,cAAY,IAAI;AAChB,cAAY,IAAI;AAClB;AAIA,CAVC,0BAU0B,CAvBD;AAuByB,SAAO;AAAM,UAAQ;AAAM,SAAO,IAAI;AAAiB;AAC1G,CAXC,yBAWyB,MAAM,KAAK;AAAa,cAAY,IAAI;AAA8B;AAChG,CAZC,yBAYyB,OAAO,KAAK;AAAa,cAAY,IAAI;AAAgC;AACnG,CAbC,yBAayB;AAAY,cAAY,IAAI;AAAuB,cAAY;AAAM;AAC/F,CAdC,yBAcyB,UAAU,CA3BV;AA2BkC,SAAO,IAAI;AAAkB;AACzF,CAfC,yBAeyB,CAAC,yBAAyB,CA5B1B;AA4BkD,SAAO,IAAI;AAAgB;AAGvG,CAAC;AACC,SAAO;AACP,UAAQ;AACR,WAAS,IAAI;AACb,cAAY;AACd;AACA,CANC,yBAMyB,CArCA;AAqCwB,SAAO;AAAM,UAAQ;AAAM,SAAO,IAAI;AAAiB;AACzG,CAPC,wBAOwB,MAAM,KAAK;AAAa,cAAY,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAAO;AAClF,CARC,wBAQwB,MAAM,KAAK,WAAW,CAvCrB;AAuC6C,SAAO,IAAI;AAAmB;AACrG,CATC,wBASwB,OAAO,KAAK;AAAa,cAAY,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAAO;AACnF,CAVC,wBAUwB,UAAU,CAzCT;AAyCiC,SAAO,IAAI;AAAkB;;;ACjExF,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,SAAO;AACP,UAAQ;AACR,WAAS,IAAI;AACb,iBAAe,IAAI;AACnB,cAAY,IAAI;AAChB,UAAQ,IAAI,OAAO,IAAI;AACvB,UAAQ;AACR,cAAY,iBAAiB,MAAM;AACrC;AACA,CAbC,cAac;AACf,CAdC,cAcc;AAAM,SAAO;AAAM,UAAQ;AAAM;AAChD,CAfC,aAea;AAAS,cAAY,IAAI;AAA8B;AACrE,CAhBC,aAgBa;AAAU,cAAY,IAAI;AAAgC;;;AChBxE,CAAC;AACC,WAAS;AACT,eAAa;AACb,OAAK,IAAI;AACT,SAAO;AACP,UAAQ;AACR,WAAS,IAAI,cAAc,IAAI;AAC/B,cAAY,IAAI;AAChB,UAAQ,IAAI,MAAM,IAAI;AACtB,iBAAe,IAAI;AACnB,cAAY;AACZ,cAAY,aAAa,MAAM;AACjC;AAEA,CAdC,YAcY;AACX,gBAAc,IAAI;AACpB;AAEA,CAAC;AACC,gBAAc,IAAI;AACpB;AAEA,CAAC;AACC,cAAY,IAAI;AAChB,UAAQ;AACV;AAEA,CAAC;AACC,QAAM;AACN,aAAW;AACX,UAAQ;AACR,WAAS;AACT,cAAY;AACZ,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,SAAO,IAAI;AACX,kBAAgB,IAAI;AACtB;AAEA,CAdC,mBAcmB;AAClB,SAAO,IAAI;AACb;AAEA,CAlBC,mBAkBmB;AAClB,UAAQ;AACR,SAAO,IAAI;AACb;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,eAAa;AACb,SAAO;AACP,UAAQ;AAGR,SAAO,IAAI;AACb;AACA,CA7DC,YA6DY,cAAc,CAX1B;AAWgD,SAAO,IAAI;AAAiB;AAE7E,CAAC;AACC,cAAY;AACZ,UAAQ;AACR,WAAS;AACT,UAAQ;AACR,SAAO;AACT;AAEA,CAAC;AACC,WAAS;AACT,iBAAe,IAAI;AACnB,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,SAAO,IAAI;AACX,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AAEA,CAAC;AACC,WAAS;AACT,cAAY,IAAI;AAChB,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,SAAO,IAAI;AACX,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;;;AC3FA,CAAC;AACC,WAAS;AACT,eAAa;AACb,OAAK,IAAI;AAGT,SAAO;AACP,UAAQ;AACR,WAAS,IAAI,aAAa,IAAI;AAC9B,cAAY,IAAI;AAChB,UAAQ,IAAI,MAAM;AAClB,iBAAe,IAAI;AACnB,cAAY;AACZ,cAAY,aAAa,MAAM,IAAI,EAAE,MAAM,MAAM;AACnD;AACA,CAfC,aAea;AACZ,SAAO;AACP,gBAAc,IAAI;AACpB;AACA,CAAC;AACC,QAAM;AACN,aAAW;AACX,UAAQ;AACR,WAAS;AACT,cAAY;AACZ,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,SAAO,IAAI;AACX,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAbC,oBAaoB;AACnB,SAAO,IAAI;AACb;AACA,CAAC;AACC,WAAS;AACT,eAAa;AACb,SAAO;AACP,UAAQ;AACR,SAAO,IAAI;AACb;AACA,CAAC;AACC,WAAS;AACT,eAAa;AACb,SAAO;AACP,UAAQ;AACR,cAAY;AACZ,UAAQ;AACR,WAAS;AACT,UAAQ;AACR,SAAO,IAAI;AACb;;;ACpDA,CAAC;AACC,WAAS;AACT,OAAK,IAAI;AACX;AACA,CAAC;AACC,SAAO;AACP,UAAQ;AACR,WAAS;AACT,cAAY;AACZ,cAAY;AACZ,UAAQ,IAAI,MAAM;AAClB,iBAAe,IAAI;AACnB,cAAY,IAAI;AAChB,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa,IAAI;AAGjB,eAAa;AACb,kBAAgB;AAChB,SAAO,IAAI;AACX,WAAS;AACT,cAAY,aAAa,KAAK;AAChC;AACA,CApBC,gBAoBgB;AACf,gBAAc,IAAI;AACpB;AAKA,CA3BC,gBA2BgB;AACf,UAAQ;AACR,SAAO,IAAI;AACb;;;AClCA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,SAAO;AAIP,UAAQ;AACR,WAAS,IAAI;AACb,cAAY,IAAI;AAChB,iBAAe,IAAI;AACnB,cAAY;AACd;AACA,CAAC;AACC,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,SAAO,IAAI;AACX,YAAU;AACV,iBAAe;AACf,eAAa;AACb,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,eAAa;AACb,eAAa,IAAI;AACjB,cAAY;AACZ,UAAQ;AACR,WAAS,IAAI;AACb,UAAQ;AACR,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,SAAO,IAAI;AACX,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,SAAO,IAAI;AAEX,WAAS;AACX;AACA,CA5CC,WA4CW,KAAK,CALhB;AAMC,UAAQ;AACV;;;AC9CA,CAAC;AACC,WAAS;AACT,eAAa;AACb,OAAK,IAAI;AACT,SAAO;AACP,UAAQ;AACR,WAAS,IAAI;AACb,cAAY,IAAI;AAChB,UAAQ,IAAI,MAAM,IAAI;AACtB,iBAAe,IAAI;AACnB,cAAY;AACZ,cAAY,aAAa,MAAM;AACjC;AACA,CAbC,gBAagB;AACf,gBAAc,IAAI;AACpB;AACA,CAAC;AACC,QAAM;AACN,aAAW;AACX,UAAQ;AACR,WAAS;AACT,cAAY;AACZ,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,SAAO,IAAI;AACX,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAbC,uBAauB;AACtB,SAAO,IAAI;AACb;AACA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,eAAa;AACb,SAAO;AACP,UAAQ;AACR,UAAQ;AACR,iBAAe,IAAI;AAGnB,cAAY;AAEZ,SAAO,IAAI;AACX,UAAQ;AACR,cAAY,iBAAiB,MAAM,IAAI,EAAE,MAAM,MAAM;AACvD;AACA,CAAC;AACC,cAAY,IAAI;AAKhB,SAAO,IAAI;AACX,UAAQ;AACV;AACA,CATC,8BAS8B;AAAS,cAAY,IAAI;AAA4B;;;AC1DpF,CAAC;AACC,WAAS;AACT,eAAa;AACb,OAAK,IAAI;AACT,SAAO;AAMP,UAAQ;AACR,WAAS,IAAI,cAAc,IAAI;AAC/B,cAAY,IAAI;AAChB,UAAQ,IAAI,MAAM,IAAI;AACtB,iBAAe,IAAI;AACnB,cAAY;AACZ,UAAQ;AACR,cAAY;AACd;AACA,CAAC;AACC,WAAS;AACT,eAAa;AACb,SAAO;AACP,UAAQ;AACR,SAAO,IAAI;AACX,cAAY;AACd;AACA,CAAC;AACC,UAAQ;AACR,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,SAAO,IAAI;AACX,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,UAAQ;AACR,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,SAAO,IAAI;AACX,YAAU;AACV,iBAAe;AACf,eAAa;AACb,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;;;AC/CA,CAAC;AACC,WAAS;AACT,eAAa;AACb,OAAK,IAAI;AAGT,UAAQ;AACR,WAAS,IAAI;AACb,iBAAe,IAAI;AACnB,cAAY,IAAI;AAChB,UAAQ,IAAI,MAAM,IAAI;AACtB,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,SAAO,IAAI;AACX,UAAQ;AACR,eAAa;AACb,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,cAAY,IAAI;AAChB,gBAAc,IAAI;AACpB;AACA,CAAC;AACC,SAAO;AACP,UAAQ;AACR,eAAa;AACb,cAAY;AACd;;;AC7BA,CAAC;AACC,WAAS;AACT,eAAa;AACb,OAAK,IAAI;AACT,UAAQ;AACR,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,SAAO,IAAI;AACX,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,UAAQ;AACV;AACA,CAAC;AACC,cAAY;AACZ,SAAO;AACP,UAAQ;AACR,UAAQ;AACR,eAAa;AACb,cAAY;AACZ,iBAAe;AACf,UAAQ,IAAI,MAAM,IAAI;AACtB,cAAY;AACZ,UAAQ;AACR,YAAU;AACZ;AACA,CAbC,YAaY;AAIX,gBAAc,IAAI;AACpB;AACA,CAnBC,YAmBY,QAAQ;AACnB,WAAS;AACT,YAAU;AACV,SAAO;AACP,UAAQ;AACR,SAAO;AACP,UAAQ;AACR,iBAAe;AACf,cAAY,IAAI;AAClB;AACA,CA7BC,YA6BY;AACX,UAAQ;AACR,gBAAc,IAAI;AAClB,cAAY,IAAI;AAClB;AAGA,CApCC,YAoCY,SAAS;AACpB,WAAS;AACX;;;ACrDA,CAAC;AACC,WAAS;AACT,eAAa;AACb,OAAK,IAAI;AACT,UAAQ;AACR,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,SAAO,IAAI;AACX,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,cAAY;AACZ,SAAO;AACP,UAAQ;AACR,UAAQ;AACR,cAAY;AACZ,eAAa;AAKb,UAAQ,IAAI,MAAM,IAAI;AACtB,iBAAe,IAAI;AACnB,UAAQ;AACR,YAAU;AACV,cAAY,IAAI;AAClB;AACA,CAjBC,eAiBe;AACd,cAAY,IAAI;AAChB,gBAAc,IAAI;AACpB;AACA,CArBC,eAqBe,QAAQ;AACtB,WAAS;AACT,YAAU;AACV,SAAO;AAIP,cAAY,IAAI;AAChB,gBAAc,yOAAyO,OAAO,EAAE,QAAQ;AACxQ,QAAM,yOAAyO,OAAO,EAAE,QAAQ;AAClQ;;;AC3CA,CAAC;AACC,YAAU;AACV,WAAS;AACT,SAAO;AACP,UAAQ;AACR,UAAQ;AACR,WAAS;AACT,UAAQ;AACR,cAAY;AACZ,UAAQ;AACR,cAAY;AACd;AACA,CAZC,aAYa;AACZ,UAAQ;AACR,WAAS;AACX;AACA,CAAC;AACC,YAAU;AACV,QAAM;AACN,OAAK;AACL,SAAO;AACP,UAAQ;AACR,iBAAe;AAGf,cAAY,IAAI;AAChB,cAAY,iBAAiB,KAAK;AACpC;AACA,CAAC,kBAAkB,CAZlB;AAkBC,cAAY,IAAI;AAClB;AACA,CAAC;AACC,YAAU;AACV,OAAK;AACL,QAAM;AACN,SAAO;AACP,UAAQ;AACR,iBAAe;AAGf,cAAY,IAAI;AAChB,cAAY,EAAE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACpC,cAAY,KAAK,KAAK,IAAI,EAAE,iBAAiB,KAAK;AACpD;AACA,CArBC,kBAqBkB,CAblB;AAcC,QAAM;AACN,cAAY,IAAI;AAClB;;;ACpDA,CAAC;AACC,WAAS;AACT,SAAO;AACP,cAAY,IAAI;AAChB,cAAY,IAAI;AAClB;AACA,CAAC;AACC,QAAM;AACN,WAAS;AACT,kBAAgB;AAChB,eAAa;AACb,OAAK,IAAI;AACT,WAAS,IAAI,cAAc;AAC3B,cAAY;AACZ,UAAQ;AACR,UAAQ;AACR,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,SAAO,IAAI;AACX,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,SAAO,IAAI;AACX,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,WAAS;AACT,SAAO;AACP,UAAQ;AAGR,SAAO,IAAI;AACb;AACA,CAhBC,4BAgB4B,CAR5B;AASC,SAAO,IAAI;AACb;;;ACzCA,CAAC;AACC,WAAS;AACT,OAAK,IAAI;AACT,iBAAe,IAAI,MAAM,IAAI;AAC/B;AACA,CAAC;AACC,cAAY;AACZ,UAAQ;AAQR,cAAY,MAAM,EAAE,KAAK,EAAE,EAAE;AAC7B,WAAS,EAAE,EAAE,IAAI,sBAAsB;AACvC,UAAQ;AACR,eAAa,IAAI;AACjB,aAAW;AACX,eAAa,IAAI;AACjB,SAAO,IAAI;AACX,cAAY,MAAM,MAAM;AACxB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,eAAa,IAAI;AACjB,eAAa,IAAI;AAUjB,SAAO,IAAI;AACX,cAAY,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI;AACjC,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;;;AC3CA,CAAC;AACC,WAAS;AACT,eAAa;AACb,SAAO;AACP,cAAY;AACZ,WAAS,IAAI,cAAc,IAAI;AAC/B,cAAY,IAAI;AAClB;AACA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,eAAa;AACb,SAAO;AACP,UAAQ;AACR,WAAS;AACT,UAAQ;AACR,iBAAe,IAAI;AACnB,cAAY;AACZ,SAAO,IAAI;AACX,UAAQ;AACV;AACA,CAAC;AACC,QAAM;AACN,aAAW;AACX,WAAS;AACT,mBAAiB;AACnB;AAIA,CAAC;AACC,iBAAe;AACjB;AACA,CAAC;AACC,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACpB,SAAO,IAAI;AACX,eAAa;AACb,YAAU;AACV,iBAAe;AACjB;;;AC5CA,CAAC;AACC,WAAS;AACT,SAAO;AAIP,gBAAc,IAAI,EAAE;AACpB,iBAAe,IAAI;AACnB,cAAY,IAAI;AAChB,cAAY;AACd;AACA,CAAC;AACC,WAAS;AACT,SAAO;AACP,gBAAc,IAAI,EAAE;AACpB,iBAAe,IAAI;AACnB,cAAY;AACd;AACA,CAAC;AACC,WAAS;AACT,SAAO;AACP,gBAAc,IAAI,EAAE;AACpB,cAAY;AACd;AACA,CAAC;AAYC,WAAS;AACT,SAAO;AACP,eAAa;AACb,WAAS,IAAI,aAAa,IAAI;AAK9B,OAAK,IAAI;AACT,cAAY,IAAI;AAOhB,cAAY,MAAM,EAAE,EAAE,EAAE,IAAI,IAAI;AAChC,iBAAe,IAAI;AACnB,cAAY;AACd;AACA,CAAC;AACC,WAAS;AACT,eAAa;AAOb,QAAM;AAKN,OAAK,IAAI;AACX;AACA,CAAC;AAIC,SAAO;AACP,UAAQ;AACR,eAAa;AACb,SAAO,IAAI;AACb;AACA,CAAC;AACC,UAAQ;AACR,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,SAAO,IAAI;AACX,eAAa,IAAI;AAIjB,eAAa;AACb,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,UAAQ;AACR,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,SAAO,IAAI;AACX,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,SAAO;AACP,cAAY;AACZ,cAAY,IAAI;AAClB;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,SAAO;AAIP,cAAY;AACZ,WAAS,IAAI,aAAa,IAAI;AAC9B,OAAK,IAAI;AACT,cAAY,IAAI;AAChB,cAAY;AACd;AACA,CAAC;AACC,UAAQ;AAIR,QAAM,EAAE,EAAE;AACV,aAAW;AACX,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,SAAO,IAAI;AACX,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,UAAQ;AACR,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,SAAO,IAAI;AACX,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;;;AChJA,CAAC;AACC,YAAU;AACV,WAAS;AACX;AACA,CAAC;AACC,YAAU;AACV,OAAK;AACL,SAAO;AACP,aAAW;AACX,UAAQ;AACR,WAAS,IAAI,aAAa,IAAI;AAC9B,iBAAe;AACf,cAAY,IAAI;AAChB,SAAO,IAAI;AACX,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,eAAa;AACb,kBAAgB,IAAI;AACtB;AACA,CAAC;AAEC,UAAQ;AACR,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,WAAS,IAAI,aAAa,IAAI;AAC9B,iBAAe,IAAI;AACnB,cAAY,IAAI;AAChB,SAAO,IAAI;AACX,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,WAAS,IAAI,cAAc,IAAI;AAC/B,iBAAe;AACf,cAAY,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC7B,SAAO,IAAI;AACX,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,WAAS;AACT,eAAa;AAGb,OAAK,IAAI;AAET,UAAQ;AACR,WAAS,IAAI;AACb,iBAAe,IAAI;AACnB,cAAY,IAAI;AAChB,UAAQ,IAAI,MAAM,IAAI;AACtB,SAAO,IAAI;AACX,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,WAAS;AACT,eAAa;AAIb,SAAO,IAAI;AAKX,SAAO;AACP,UAAQ;AACV;AACA,CAdC,wBAcwB;AACvB,SAAO;AACP,UAAQ;AACV;;;ACzFA,CAAC;AACC,WAAS;AACT,kBAAgB;AAChB,OAAK,IAAI;AACT,aAAW;AACX,WAAS,IAAI,cAAc,IAAI;AAC/B,iBAAe,IAAI;AACnB,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,SAAO,IAAI;AACX,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,cAAY;AACZ,cAAY,IAAI;AAGlB;AACA,CAAC;AACD,CAAC;AACC,cAAY;AACZ,cAAY,IAAI;AAClB;AACA,CAAC;AACC,UAAQ;AACR,SAAO;AACT;AACA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,OAAK,IAAI;AACT,SAAO;AACP,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,SAAO,IAAI;AACX,cAAY;AACZ,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,SAAO;AACP,UAAQ;AACR,WAAS;AACX;;;AC/CA,CAAC;AACC,WAAS;AACT,kBAAgB;AAChB,OAAK,IAAI;AACT,SAAO;AACP,WAAS,IAAI,aAAa,IAAI;AAC9B,cAAY,IAAI;AAChB,iBAAe,IAAI;AACnB,cAAY,IAAI;AAChB,cAAY;AACZ,cAAY;AACd;AACA,CAAC;AACC,WAAS;AACT,OAAK,IAAI;AACT,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACP,UAAQ;AACR,eAAa;AACb,iBAAe,IAAI;AAKnB,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,YAAU;AACZ;AACA,CAAC;AACC,SAAO;AACP,UAAQ;AACR,cAAY;AACd;AACA,CAAC;AACC,QAAM;AACN,aAAW;AACX,WAAS;AACT,kBAAgB;AAClB;AACA,CAAC;AACC,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa;AACb,SAAO,IAAI;AACX,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,SAAO,IAAI;AACb;AACA,CAAC;AACC,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa;AACb,SAAO,IAAI;AACX,YAAU;AACV,iBAAe;AACf,eAAa;AACb,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,WAAS;AACT,eAAa;AACb,OAAK,IAAI;AACT,SAAO;AAGP,WAAS,IAAI,aAAa;AAC5B;AACA,CAAC;AACC,QAAM;AACN,aAAW;AACX,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa;AACb,SAAO,IAAI;AACX,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,QAAM;AACN,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa;AACb,SAAO,IAAI;AACX,cAAY;AACZ,eAAa;AACb,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAXC,yBAWyB;AACxB,eAAa,IAAI;AACjB,kBAAgB;AAChB,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa,IAAI;AACnB;AACA,CAAC;AACC,QAAM,EAAE,EAAE;AACZ;AACA,CAAC;AACC,eAAa;AACb,WAAS;AACT,eAAa;AACb,mBAAiB;AAIjB,UAAQ;AACR,WAAS,EAAE,IAAI;AACf,iBAAe,IAAI;AACnB,UAAQ,IAAI,MAAM,IAAI;AACtB,cAAY,IAAI;AAChB,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa;AACb,kBAAgB;AAChB,SAAO,IAAI;AACb;AACA,CAAC;AACC,SAAO;AACP,cAAY,IAAI;AAChB,cAAY;AACZ,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa;AACb,SAAO,IAAI;AACX,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,WAAS;AACT,mBAAiB;AACjB,SAAO;AACT;AAEA,CAAC;AACC,WAAS;AACT,kBAAgB;AAChB,OAAK;AACL,SAAO;AACP,cAAY;AACZ,WAAS,IAAI,aAAa,IAAI;AAC9B,cAAY,IAAI;AAChB,UAAQ,IAAI,MAAM,IAAI;AACtB,iBAAe,IAAI;AACnB,cAAY;AACd;AACA,CAAC;AACC,cAAY,IAAI;AAClB;AACA,CAAC;AACC,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa;AACb,SAAO,IAAI;AACX,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa;AACb,SAAO,IAAI;AACX,YAAU;AACV,iBAAe;AACf,eAAa;AACb,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;;;AC9KA,CAAC;AACC,WAAS;AACT,kBAAgB;AAChB,OAAK,IAAI;AACT,SAAO;AACT;AACA,CAAC;AACC,WAAS;AACT,eAAa;AACb,OAAK,IAAI;AACT,SAAO;AACP,WAAS,IAAI,cAAc,IAAI;AAC/B,cAAY,IAAI;AAChB,UAAQ;AACR,iBAAe,IAAI;AACnB,cAAY,IAAI;AAChB,UAAQ;AACR,cAAY;AACZ,SAAO,IAAI;AACb;AACA,CAAC;AACC,SAAO;AACP,UAAQ;AACR,eAAa;AACf;AACA,CAAC;AACC,QAAM;AACN,eAAa,IAAI;AACjB,aAAW;AACX,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC,uBAAuB,CARvB;AASC,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,SAAO;AACP,UAAQ;AACR,eAAa;AAGb,SAAO,IAAI;AACX,cAAY,UAAU,MAAM;AAC9B;AACA,CAAC;AACC,aAAW,OAAO;AACpB;AAKA,CAAC;AACC,WAAS,IAAI;AACb,cAAY,IAAI;AAChB,iBAAe,IAAI;AACnB,cAAY,IAAI;AAIhB,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,SAAO,IAAI;AACX,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;;;ACtEA,CAAC;AACC,YAAU;AACV,SAAO;AACP,cAAY,IAAI;AAChB,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,WAAS;AACX;AACA,CAAC;AACC,SAAO;AACP,aAAW;AACX,cAAY;AACZ,cAAY;AACZ,cAAY,IAAI;AAChB,iBAAe,IAAI,oBAAoB,IAAI,oBAAoB,EAAE;AACjE,WAAS,IAAI;AACb,cAAY;AACZ,WAAS;AACT,kBAAgB;AAChB,OAAK,IAAI;AACX;AACA,CAAC;AACC,SAAO;AACP,UAAQ;AACR,iBAAe;AACf,cAAY,IAAI;AAChB,UAAQ,EAAE,KAAK,IAAI;AACrB;;;AC5BA,CAAC;AACC,SAAO;AACP,WAAS,IAAI,cAAc,IAAI;AAC/B,cAAY,IAAI;AAChB,cAAY;AACZ,WAAS;AACT,kBAAgB;AAChB,OAAK,IAAI;AACX;AACA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACnB;AACA,CAAC;AACC,UAAQ;AACR,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,SAAO,IAAI;AACX,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,eAAa;AACb,SAAO;AACP,UAAQ;AACR,WAAS,IAAI;AACb,UAAQ;AACR,iBAAe,IAAI;AACnB,cAAY,IAAI;AAOhB,SAAO,IAAI;AACX,UAAQ;AACV;AACA,CApBC,sBAoBsB;AAAS,cAAY,IAAI;AAA4B;;;AC3C5E,CAAC;AACC,cAAY;AACZ,UAAQ;AACR,WAAS;AACT,WAAS;AACT,kBAAgB;AAEhB,OAAK,IAAI;AACX;AAEA,CAAC;AACC,YAAU;AACV,WAAS;AACT,eAAa;AAKb,OAAK,IAAI;AACX;AAMA,CAfC,oBAeoB;AACnB,WAAS;AACT,YAAU;AACV,QAAM;AACN,OAAK;AACL,UAAQ,KAAK,GAAG,EAAE,IAAI;AACtB,eAAa,IAAI,OAAO,IAAI;AAC9B;AACA,CAAC,0BAA0B;AACzB,WAAS;AACX;AAGA,CAAC;AACC,YAAU;AACV,WAAS;AACT,eAAa;AACb,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,SAAO;AACP,UAAQ;AACV;AACA,CAVC,mBAUmB;AAClB,WAAS;AACT,YAAU;AACV,SAAO;AACP,UAAQ;AACR,iBAAe,IAAI;AACrB;AACA,CAAC,yBAAyB;AACxB,cAAY,IAAI;AAClB;AACA,CAAC,4BAA4B;AAC3B,cAAY,IAAI;AAClB;AACA,CAAC,8BAA8B;AAC7B,cAAY,IAAI;AAClB;AAEA,CAJC,+BAI+B;AAC9B,YAAU;AACV,WAAS;AACT,SAAO,IAAI;AACb;AAEA,CAAC;AACC,WAAS;AACT,kBAAgB;AAChB,aAAW;AACb;AAEA,CAAC;AACC,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,SAAO,IAAI;AACb;AACA,CAAC;AACC,SAAO,IAAI;AACb;AACA,CAAC;AACC,SAAO,IAAI;AACb;AAEA,CAAC;AACC,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACpB,SAAO,IAAI;AACb;;;ACpGA,CAAC;AACC,SAAO;AACP,aAAW;AACX,WAAS;AACT,kBAAgB;AAChB,OAAK,IAAI;AACT,WAAS,IAAI;AACb,cAAY,IAAI;AAChB,cAAY;AACd;AAGA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,OAAK,IAAI;AACX;AACA,CAAC;AACC,eAAa;AACb,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,SAAO;AACP,UAAQ;AACR,WAAS;AACT,UAAQ;AACR,cAAY;AACZ,SAAO,IAAI;AACX,UAAQ;AACV;AAGA,CAAC;AACC,aAAW,OAAO;AACpB;AACA,CAAC;AACC,QAAM;AACN,cAAY;AACZ,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACpB,SAAO,IAAI;AACb;AAKA,CAAC;AACC,WAAS;AACT,yBAAuB,OAAO,CAAC,EAAE;AACjC,iBAAe;AACf,eAAa;AAKb,WAAS;AACX;AAEA,CAAC;AACC,UAAQ;AACR,WAAS;AACT,eAAa;AACb,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACpB,SAAO,IAAI;AACb;AAEA,CAAC;AACC,YAAU;AACV,SAAO;AACP,UAAQ;AACR,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,UAAQ;AACR,cAAY;AACZ,WAAS;AACT,UAAQ;AACR,eAAa,IAAI,wBAAwB,EAAE,IAAI;AAC/C,aAAW;AACX,eAAa;AACb,SAAO,IAAI;AACb;AACA,CAAC;AACC,SAAO,IAAI;AACX,UAAQ;AACV;AAGA,CAAC;AACC,cAAY,IAAI;AAClB;AACA,CAAC;AACC,YAAU;AACV,WAAS;AACT,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,SAAO;AACP,UAAQ;AACR,iBAAe,IAAI;AACrB;AACA,CAAC,+BAA+B,CAV/B;AAWC,cAAY,IAAI;AAChB,eAAa;AACf;AACA,CAJC;AAKC,cAAY,IAAI;AAClB;AAGA,CAAC;AACC,YAAU;AACV,UAAQ;AACR,SAAO;AACP,UAAQ;AACR,iBAAe,IAAI;AACnB,cAAY,IAAI;AAClB;;;AC9HA,CAAC;AACC,WAAS;AACT,iBAAe;AACf,cAAY;AACZ,eAAa;AACf;AACA,CAAC;AAAoB,SAAO;AAAM,UAAQ;AAAM;AAChD,CAAC;AAAoB,SAAO;AAAM,UAAQ;AAAM;AAChD,CAAC;AAAoB,SAAO;AAAM,UAAQ;AAAM;;;ACRhD,CAAC;AACC,WAAS;AACT,aAAW;AAOX,cAAY;AACd;;;ACVA,CAAC;AACC,YAAU;AACV,WAAS;AACT,eAAa;AACf;AACA,CAAC;AACC,WAAS;AACT,cAAY;AACd;AAKA,CAAC;AACD,CAAC;AACC,SAAO;AACP,UAAQ;AACR,cAAY;AACd;AACA,CAAC;AAA0C,SAAO;AAAO,UAAQ;AAAO;AACxE,CAAC;AAA6C,SAAO;AAAO,UAAQ;AAAO;AAE3E,CAAC;AACC,SAAO;AACP,UAAQ;AACR,WAAS,IAAI;AACb,iBAAe,IAAI;AACnB,cAAY;AACd;AACA,CAAC;AACC,SAAO;AACP,UAAQ;AACR,WAAS,IAAI;AACb,UAAQ,IAAI,MAAM,IAAI;AACtB,iBAAe,IAAI;AACnB,cAAY;AACd;AACA,CAAC;AACC,SAAO;AACP,UAAQ;AACR,WAAS,IAAI;AACb,UAAQ,IAAI,MAAM,IAAI;AACtB,iBAAe,IAAI;AACnB,cAAY;AACd;AACA,CAAC;AAA6C,SAAO;AAAM,UAAQ;AAAM;AAEzE,CAAC;AACC,YAAU;AACV,SAAO;AACP,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,cAAY,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAChC,iBAAe;AACjB;AACA,CAAC;AACC,WAAS,IAAI,cAAc;AAC3B,iBAAe;AACf,cAAY,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC7B,SAAO,IAAI;AACX,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;;;AClEA,CAAC;AACC,YAAU;AACV,WAAS;AACT,kBAAgB;AAChB,OAAK,IAAI;AACT,cAAY,IAAI;AAChB,cAAY;AACZ,UAAQ;AACR,UAAQ;AACR,eAAa;AACf;AACA,CAAC;AACC,SAAO;AAIP,eAAa;AACb,WAAS,IAAI,cAAc,IAAI;AAC/B,iBAAe,IAAI;AACnB,cAAY,IAAI;AAClB;AAGA,CAAC;AACC,SAAO;AACP,WAAS;AACT,OAAK;AACP;AAEA,CAAC;AACC,WAAS;AACT,mBAAiB;AACjB,WAAS,IAAI,cAAc,IAAI;AACjC;AAEA,CAAC;AACC,WAAS;AACT,kBAAgB;AAChB,OAAK,IAAI;AACT,WAAS,IAAI,cAAc,IAAI;AACjC;AACA,CAAC;AACC,YAAU;AACZ;AACA,CAjCC,0BAiC0B,CAH1B;AAG6D,SAAO;AAAO,UAAQ;AAAO;AAC3F,CAtBC,6BAsB6B,CAJ7B;AAIgE,SAAO;AAAO,UAAQ;AAAO,UAAQ,EAAE;AAAM;AAC9G,CAAC;AACC,SAAO;AACP,UAAQ;AACR,cAAY;AACd;AACA,CAAC;AACC,YAAU;AACV,OAAK;AACL,SAAO;AACT;AAKA,CAAC;AACC,YAAU;AACV,SAAO;AACP,UAAQ,IAAI,cAAc,IAAI;AAC9B,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,cAAY,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAClC;AACA,CAAC;AACC,UAAQ;AACR,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,SAAO,IAAI;AACX,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAvDC,6BAuD6B,CAT7B;AAUC,aAAW;AACb;AACA,CAAC;AACC,WAAS;AAIT,eAAa;AACb,OAAK;AACP;AACA,CAlEC,6BAkE6B,CAR7B;AASC,eAAa;AACb,OAAK,IAAI;AACX;AACA,CAAC;AACC,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,SAAO,IAAI;AACX,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CA9EC,6BA8E6B,CAR7B;AAYC,aAAW;AACX,eAAa;AACb,eAAa;AACf;AACA,CAAC;AACC,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,aAAW;AACX,SAAO,IAAI;AACX,mBAAiB;AAGjB,eAAa;AACb,kBAAgB,IAAI;AACtB;AACA,CAjGC,6BAiG6B,CAX7B;AAYC,aAAW;AACX,eAAa;AACb,eAAa;AACf;AACA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,OAAK,IAAI;AACX;AACA,CAAC;AACC,WAAS;AACT,eAAa;AACb,OAAK,IAAI;AACT,eAAa,IAAI;AACjB,aAAW,IAAI;AACf,SAAO,IAAI;AACX,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACtB;AACA,CAAC;AACC,SAAO;AACP,UAAQ;AACR,SAAO,IAAI;AACb;AACA,CAAC;AACC,WAAS;AACT,OAAK,IAAI;AACX;AAGA,CAAC,sCAAsC;AACrC,cAAY,EAAE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACtC;;;AC3JA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,eAAa;AACb,cAAY,IAAI;AAChB,SAAO,IAAI;AACb;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snacky/ui",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "Snacky App design system - React component library. Generated from the source-of-truth design system at ../../index.html, pixel-accurate to Figma.",
5
5
  "license": "MIT",
6
6
  "author": "rezatresnas",