jaml-ui 0.22.5 → 0.24.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/DESIGN.md CHANGED
@@ -1,236 +1,236 @@
1
- ---
2
- name: Jimbo
3
- description: Balatro-inspired design system for JAML seed finder tools. Eyedropped from actual game shader output — not Lua hex values.
4
- colors:
5
- red: "#ff4c40"
6
- blue: "#0093ff"
7
- green: "#429f79"
8
- orange: "#ff9800"
9
- gold: "#e4b643"
10
- purple: "#9e74ce"
11
- dark-red: "#a02721"
12
- dark-blue: "#0057a1"
13
- dark-orange: "#a05b00"
14
- dark-green: "#215f46"
15
- dark-purple: "#5e437e"
16
- dark-grey: "#3a5055"
17
- darkest: "#1e2b2d"
18
- grey: "#708386"
19
- teal-grey: "#404c4e"
20
- panel-edge: "#1e2e32"
21
- inner-border: "#334461"
22
- border-silver: "#b9c2d2"
23
- border-south: "#777e89"
24
- gold-text: "#e4b643"
25
- green-text: "#35bd86"
26
- orange-text: "#ff8f00"
27
- white: "#ffffff"
28
- black: "#000000"
29
- tarot-button: "#9e74ce"
30
- planet-button: "#00a7ca"
31
- spectral-button: "#2e76fd"
32
- typography:
33
- display:
34
- fontFamily: m6x11plus, monospace
35
- fontSize: 26px
36
- fontWeight: 400
37
- lineHeight: 1
38
- letterSpacing: 0.04em
39
- heading:
40
- fontFamily: m6x11plus, monospace
41
- fontSize: 14px
42
- fontWeight: 400
43
- lineHeight: 1.2
44
- letterSpacing: 0.08em
45
- body:
46
- fontFamily: m6x11plus, monospace
47
- fontSize: 11px
48
- fontWeight: 400
49
- lineHeight: 1.3
50
- letterSpacing: 0.05em
51
- label:
52
- fontFamily: m6x11plus, monospace
53
- fontSize: 9px
54
- fontWeight: 400
55
- lineHeight: 1
56
- letterSpacing: 0.1em
57
- micro:
58
- fontFamily: m6x11plus, monospace
59
- fontSize: 8px
60
- fontWeight: 400
61
- lineHeight: 1
62
- letterSpacing: 0.08em
63
- rounded:
64
- sm: 4px
65
- md: 6px
66
- lg: 8px
67
- pill: 10px
68
- spacing:
69
- xs: 2px
70
- sm: 4px
71
- md: 8px
72
- lg: 12px
73
- xl: 16px
74
- components:
75
- panel:
76
- backgroundColor: "{colors.dark-grey}"
77
- rounded: "{rounded.md}"
78
- panel-edge:
79
- backgroundColor: "{colors.panel-edge}"
80
- panel-darkest:
81
- backgroundColor: "{colors.darkest}"
82
- rounded: "{rounded.md}"
83
- button-primary:
84
- backgroundColor: "{colors.red}"
85
- textColor: "{colors.white}"
86
- rounded: "{rounded.md}"
87
- padding: 8px
88
- button-primary-hover:
89
- backgroundColor: "{colors.dark-red}"
90
- button-secondary:
91
- backgroundColor: "{colors.blue}"
92
- textColor: "{colors.white}"
93
- rounded: "{rounded.md}"
94
- padding: 8px
95
- button-secondary-hover:
96
- backgroundColor: "{colors.dark-blue}"
97
- button-back:
98
- backgroundColor: "{colors.orange}"
99
- textColor: "{colors.white}"
100
- rounded: "{rounded.md}"
101
- padding: 8px
102
- button-back-hover:
103
- backgroundColor: "{colors.dark-orange}"
104
- tab-active:
105
- backgroundColor: "{colors.gold}"
106
- textColor: "{colors.black}"
107
- rounded: "{rounded.sm}"
108
- tab-inactive:
109
- backgroundColor: "transparent"
110
- textColor: "{colors.grey}"
111
- score-must:
112
- backgroundColor: "{colors.blue}"
113
- textColor: "{colors.white}"
114
- score-should:
115
- backgroundColor: "{colors.red}"
116
- textColor: "{colors.white}"
117
- glow-must:
118
- backgroundColor: "{colors.gold}"
119
- glow-should:
120
- backgroundColor: "{colors.green-text}"
121
- ---
122
-
123
- ## Overview
124
-
125
- Jimbo is the design system for Balatro seed finder tools (JAML-UI, WeeJoker, Seed Finder). It recreates the cozy, tactile, chunky feel of LocalThunk's Balatro — dark panels with silver borders, 3D-press buttons, pixel typography, juice animations. Everything feels like a physical object you can poke.
126
-
127
- The system is built **Mobile First** for the **iPhone SE viewport: 375×667px**. This is a HARD constraint — not a minimum, it is THE target. All app screens must fit within 375×667 with **NO SCROLLING**. Content must be designed to fit, not overflow. No fat padding, no bloated margins — every pixel earns its place. If content doesn't fit, redesign it to be more compact or split it into a separate view.
128
-
129
- ## Colors
130
-
131
- All colors are eyedropped from Balatro's actual rendered shader output. Do NOT substitute with Lua source hex values — the game's shader pipeline transforms them.
132
-
133
- - **Red (#ff4c40):** Primary action, mult scoring, should-clause hits. The "play" color.
134
- - **Blue (#0093ff):** Secondary action, chips scoring, must-clause gates. The "requirement" color.
135
- - **Green (#429f79):** Success, positive state, money.
136
- - **Orange (#ff9800):** Back/return actions, warning, configuration, misc.
137
- - **Gold (#e4b643):** Seed text, premium highlights, active tab. The "treasure" color.
138
- - **Purple (#9e74ce):** Joker rarity, tarot cards.
139
- - **Dark Grey (#3a5055):** Panel backgrounds — the primary surface.
140
- - **Darkest (#1e2b2d):** Deepest background, inset areas.
141
- - **Grey (#708386):** Disabled text, labels.
142
- - **Border Silver (#b9c2d2):** Panel top/side borders — the "silver frame."
143
- - **Border South (#777e89):** Panel bottom border — creates the 3D depth illusion.
144
- - **Panel Edge (#1e2e32):** Thin outer edge on panels.
145
-
146
- Must-clause items glow blue. Should-clause items glow gold/green. Non-matching items render at 40-60% opacity with slight grayscale.
147
-
148
- ## Typography
149
-
150
- m6x11plus (m6x11plusplus.otf) is the ONLY font. It is a single-weight pixel font. NEVER apply font-weight bold, semibold, or any weight other than 400. Bold makes it look muddy. NEVER USE HEAVY!
151
-
152
- Text is NEVER ALL CAPS. Use proper Title Case or Sentence case. Seed codes use the display size (26px) in gold (#e4b643).
153
-
154
- Contrast is critical. NEVER make grey text on top of a grey background. If using a dark grey background, use white or light contrasting text.
155
-
156
- ## Layout
157
-
158
- Hard target: **375×667px (iPhone SE portrait)**. No scrolling on app-level screens. Components must fit within the viewport. Snap-scrolling is ONLY allowed for internal content areas that are explicitly paginated (e.g., ante pages within a fullscreen analyzer). Top-level app views must never scroll.
159
-
160
- **Thumb Zone Rule:** Back buttons, navigation buttons, and primary actions ALWAYS go at the **bottom** of the screen. Users hold their phone with one hand and tap with their thumb — bottom-positioned buttons are always in reach. NEVER put back/nav buttons at the top of a mobile screen. Back buttons are ALWAYS orange and labeled "Back".
161
-
162
- **Button Consistency:** All footer buttons use `lg` size across every screen. No mixing sizes in footers.
163
-
164
- Horizontal swipe for seed navigation. NO visible scrollbars globally — use `::-webkit-scrollbar { display: none; }` and `-ms-overflow-style: none`.
165
-
166
- Panels use 2px solid borders with border-silver on top/sides and border-south on bottom, creating a subtle 3D card effect. Inner shadow: `inset 0 0 0 1px rgba(255,255,255,0.04)`. Outer shadow: `0 2px 0 #000`.
167
-
168
- ### Responsive Breakpoints (Container Queries)
169
-
170
- The j-app shell uses CSS **container queries** (not media queries) because it may live inside a mobile browser, a Claude MCP artifact, or a centered desktop preview. The container determines the layout, not the viewport.
171
-
172
- | Name | Container Width | Height | Scroll | Usage |
173
- |---|---|---|---|---|
174
- | `compact` | ≤ 400px | Fixed 667px | Never | iPhone SE. Default. |
175
- | `cozy` | 401–750px | Flexible | Vertical OK | MCP inline artifacts, wider phones. |
176
- | `wide` | 751px+ | Flexible | Vertical OK | Tablet/desktop (future). |
177
-
178
- Default is `compact` (375×667 locked). Add `<JimboApp fluid>` or `.j-app--fluid` to unlock for MCP/desktop contexts. This lets the container stretch to fill its parent (up to 750px) and activates `@container jimbo` queries in CSS.
179
-
180
- **What changes compact → cozy:**
181
- - Height constraint lifts — content determines height
182
- - Vertical scroll becomes OK (host manages scroll)
183
- - Padding bumps from `--j-space-lg` to `--j-space-xl`
184
- - Stat grid values bump to 20px
185
- - Info card titles bump to 14px
186
- - Section header tags bump to 12px
187
- - Buttons STAY `lg` — thumb zone rule still applies
188
- - Footer STAYS bottom-anchored
189
-
190
- **What does NOT change:** Colors, fonts, components, spacing tokens, button behavior, animation. The design language is identical — only density shifts.
191
-
192
- ## Elevation & Depth
193
-
194
- Buttons have a colored "underside" via box-shadow (not blur). On press, translateY increases by 2-3px and the shadow collapses — the button physically sinks. On hover, apply a tiny brightness bump (no lift).
195
-
196
- Panels sit on a dark south-shadow (`0 3px 0 rgba(0,0,0,0.55)`). Translucent panels (for swirl-background contexts) use `rgba(15, 24, 26, 0.78)` with `backdrop-filter: blur(2px)`.
197
-
198
- JAML-hit items get a GlowRing: `box-shadow: 0 0 0 2px [color], 0 0 10px [color]` with a 1.6s pulse animation. Must = blue glow, should = gold/green glow.
199
-
200
- **Button:** Chunky 3D press. DO NOT ADD A COLORED EDGE/BORDER. Buttons rely entirely on a solid `box-shadow` to create the colored "underside" depth. Hover brightness bump. Press sinks +2-3px and the box-shadow collapses to 0. Variants: primary (red), secondary (blue), back (orange), default (grey). NO GOLD BUTTONS. Sizes via padding, not font-size. Easing: `cubic-bezier(0.34, 1.56, 0.64, 1)`.
201
-
202
- **Badge (JimboBadge):** Badges indicate status and DO NOT CLICK. They are strictly flat. They have a colored background and flat borders, but NO 3D BOX-SHADOW and NO PRESS ANIMATIONS. Variants: dark, blue, red, green, orange, purple, grey. NO GOLD BADGES.
203
-
204
- **Panel:** Dark grey (#3a5055) background, 2px solid border (silver top/sides, south bottom), border-radius 6px. Inner highlight: `inset 0 0 0 1px rgba(255,255,255,0.04)`. Drop: `0 2px 0 #000`.
205
-
206
- **Tabs (JimboTabs):** Active tab = gold background + black text. Inactive = transparent + grey text. No bold. Small radius (4px). Tabs are the ONLY navigation — no hamburger menus, no sidebars on mobile.
207
-
208
- **ScoreCol:** Must-clauses show as blue-framed boxes with checkmark/cross badge. Should-clauses show as bare sprites with a red corner count badge (x2, x3...). Unlit = 40% opacity + grayscale.
209
-
210
- **ShopTape:** Horizontal grab-scrollable strip of item sprites. Edge fades (linear-gradient masks) on left/right. Hidden scrollbar. Cursor: grab/grabbing.
211
-
212
- **PackCell:** Tap to fan — cards explode out with springy stagger (40ms delay, juice easing). Tap again to collapse. Closed state = single pack sprite with type label.
213
-
214
- **GlowRing:** Pulsing outline around JAML-hit items. `0 0 0 2px [color], 0 0 10px [color]`. Animation: opacity 0.55 → 1.0 over 1.6s ease-in-out infinite.
215
-
216
- **Card Hover Juice:** Cards receive a 3D magnetic tilt plus a "juice-up" scale animation (`scale(1.05) translateY(-2px)`) on hover to mimic a physical interaction.
217
-
218
- **Font Dance:** Text can be made to wiggle with a staggered `translateY` offset animation across characters (`.j-font-dance-char`), creating a cozy pixel font animation.
219
-
220
- **SeedPagerHeader:** Three columns: [left stride arrow] [identity panel with seed + copy + deck/stake] [right stride arrow]. Stride arrows are tall red bars with dark-red inset shadow. Identity panel is translucent with counter pip.
221
-
222
- ## Do's and Don'ts
223
-
224
- - DO use m6x11plus for everything except code/monospace.
225
- - DO design for 375×667px (iPhone SE). Everything must fit — no scrolling.
226
- - DO use translateY + box-shadow for button depth. Not CSS 3D transforms.
227
- - DO put back buttons and nav actions at the **bottom** of the screen (thumb zone).
228
- - DON'T use font-weight bold or heavy. m6x11plus is single-weight.
229
- - DON'T use ALL CAPS. It is considered an embellishment and ruins the aesthetic.
230
- - DON'T put grey text on top of a grey background.
231
- - DON'T use fat padding or margins. Balatro UI is dense and cozy.
232
- - DON'T add visible scrollbars. Vertical magnetic snap-scroll + horizontal swipe only.
233
- - DON'T use rounded corners larger than 10px. Balatro is chunky, not bubbly.
234
- - DON'T use blur-based shadows for depth. Use solid colored box-shadows 80% opaque.
235
- - DON'T put back/nav buttons at the top of a screen. They go at the BOTTOM.
236
- - DON'T use redundant JS wrappers for `motely-wasm`. Import globally and `motely.boot()` once. Use `?worker&inline` for search workers rather than blob strings, and do not prop-drill `motelyWasmUrl`.
1
+ ---
2
+ name: Jimbo
3
+ description: Balatro-inspired design system for JAML seed finder tools. Eyedropped from actual game shader output — not Lua hex values.
4
+ colors:
5
+ red: "#ff4c40"
6
+ blue: "#0093ff"
7
+ green: "#429f79"
8
+ orange: "#ff9800"
9
+ gold: "#e4b643"
10
+ purple: "#9e74ce"
11
+ dark-red: "#a02721"
12
+ dark-blue: "#0057a1"
13
+ dark-orange: "#a05b00"
14
+ dark-green: "#215f46"
15
+ dark-purple: "#5e437e"
16
+ dark-grey: "#3a5055"
17
+ darkest: "#1e2b2d"
18
+ grey: "#708386"
19
+ teal-grey: "#404c4e"
20
+ panel-edge: "#1e2e32"
21
+ inner-border: "#334461"
22
+ border-silver: "#b9c2d2"
23
+ border-south: "#777e89"
24
+ gold-text: "#e4b643"
25
+ green-text: "#35bd86"
26
+ orange-text: "#ff8f00"
27
+ white: "#ffffff"
28
+ black: "#000000"
29
+ tarot-button: "#9e74ce"
30
+ planet-button: "#00a7ca"
31
+ spectral-button: "#2e76fd"
32
+ typography:
33
+ display:
34
+ fontFamily: m6x11plus, monospace
35
+ fontSize: 26px
36
+ fontWeight: 400
37
+ lineHeight: 1
38
+ letterSpacing: 0.04em
39
+ heading:
40
+ fontFamily: m6x11plus, monospace
41
+ fontSize: 14px
42
+ fontWeight: 400
43
+ lineHeight: 1.2
44
+ letterSpacing: 0.08em
45
+ body:
46
+ fontFamily: m6x11plus, monospace
47
+ fontSize: 11px
48
+ fontWeight: 400
49
+ lineHeight: 1.3
50
+ letterSpacing: 0.05em
51
+ label:
52
+ fontFamily: m6x11plus, monospace
53
+ fontSize: 9px
54
+ fontWeight: 400
55
+ lineHeight: 1
56
+ letterSpacing: 0.1em
57
+ micro:
58
+ fontFamily: m6x11plus, monospace
59
+ fontSize: 8px
60
+ fontWeight: 400
61
+ lineHeight: 1
62
+ letterSpacing: 0.08em
63
+ rounded:
64
+ sm: 4px
65
+ md: 6px
66
+ lg: 8px
67
+ pill: 10px
68
+ spacing:
69
+ xs: 2px
70
+ sm: 4px
71
+ md: 8px
72
+ lg: 12px
73
+ xl: 16px
74
+ components:
75
+ panel:
76
+ backgroundColor: "{colors.dark-grey}"
77
+ rounded: "{rounded.md}"
78
+ panel-edge:
79
+ backgroundColor: "{colors.panel-edge}"
80
+ panel-darkest:
81
+ backgroundColor: "{colors.darkest}"
82
+ rounded: "{rounded.md}"
83
+ button-primary:
84
+ backgroundColor: "{colors.red}"
85
+ textColor: "{colors.white}"
86
+ rounded: "{rounded.md}"
87
+ padding: 8px
88
+ button-primary-hover:
89
+ backgroundColor: "{colors.dark-red}"
90
+ button-secondary:
91
+ backgroundColor: "{colors.blue}"
92
+ textColor: "{colors.white}"
93
+ rounded: "{rounded.md}"
94
+ padding: 8px
95
+ button-secondary-hover:
96
+ backgroundColor: "{colors.dark-blue}"
97
+ button-back:
98
+ backgroundColor: "{colors.orange}"
99
+ textColor: "{colors.white}"
100
+ rounded: "{rounded.md}"
101
+ padding: 8px
102
+ button-back-hover:
103
+ backgroundColor: "{colors.dark-orange}"
104
+ tab-active:
105
+ backgroundColor: "{colors.gold}"
106
+ textColor: "{colors.black}"
107
+ rounded: "{rounded.sm}"
108
+ tab-inactive:
109
+ backgroundColor: "transparent"
110
+ textColor: "{colors.grey}"
111
+ score-must:
112
+ backgroundColor: "{colors.blue}"
113
+ textColor: "{colors.white}"
114
+ score-should:
115
+ backgroundColor: "{colors.red}"
116
+ textColor: "{colors.white}"
117
+ glow-must:
118
+ backgroundColor: "{colors.gold}"
119
+ glow-should:
120
+ backgroundColor: "{colors.green-text}"
121
+ ---
122
+
123
+ ## Overview
124
+
125
+ Jimbo is the design system for Balatro seed finder tools (JAML-UI, WeeJoker, Seed Finder). It recreates the cozy, tactile, chunky feel of LocalThunk's Balatro — dark panels with silver borders, 3D-press buttons, pixel typography, juice animations. Everything feels like a physical object you can poke.
126
+
127
+ The system is built **Mobile First** for the **iPhone SE viewport: 375×667px**. This is a HARD constraint — not a minimum, it is THE target. All app screens must fit within 375×667 with **NO SCROLLING**. Content must be designed to fit, not overflow. No fat padding, no bloated margins — every pixel earns its place. If content doesn't fit, redesign it to be more compact or split it into a separate view.
128
+
129
+ ## Colors
130
+
131
+ All colors are eyedropped from Balatro's actual rendered shader output. Do NOT substitute with Lua source hex values — the game's shader pipeline transforms them.
132
+
133
+ - **Red (#ff4c40):** Primary action, mult scoring, should-clause hits. The "play" color.
134
+ - **Blue (#0093ff):** Secondary action, chips scoring, must-clause gates. The "requirement" color.
135
+ - **Green (#429f79):** Success, positive state, money.
136
+ - **Orange (#ff9800):** Back/return actions, warning, configuration, misc.
137
+ - **Gold (#e4b643):** Seed text, premium highlights, active tab. The "treasure" color.
138
+ - **Purple (#9e74ce):** Joker rarity, tarot cards.
139
+ - **Dark Grey (#3a5055):** Panel backgrounds — the primary surface.
140
+ - **Darkest (#1e2b2d):** Deepest background, inset areas.
141
+ - **Grey (#708386):** Disabled text, labels.
142
+ - **Border Silver (#b9c2d2):** Panel top/side borders — the "silver frame."
143
+ - **Border South (#777e89):** Panel bottom border — creates the 3D depth illusion.
144
+ - **Panel Edge (#1e2e32):** Thin outer edge on panels.
145
+
146
+ Must-clause items glow blue. Should-clause items glow gold/green. Non-matching items render at 40-60% opacity with slight grayscale.
147
+
148
+ ## Typography
149
+
150
+ m6x11plus (m6x11plusplus.otf) is the ONLY font. It is a single-weight pixel font. NEVER apply font-weight bold, semibold, or any weight other than 400. Bold makes it look muddy. NEVER USE HEAVY!
151
+
152
+ Text is NEVER ALL CAPS. Use proper Title Case or Sentence case. Seed codes use the display size (26px) in gold (#e4b643).
153
+
154
+ Contrast is critical. NEVER make grey text on top of a grey background. If using a dark grey background, use white or light contrasting text.
155
+
156
+ ## Layout
157
+
158
+ Hard target: **375×667px (iPhone SE portrait)**. No scrolling on app-level screens. Components must fit within the viewport. Snap-scrolling is ONLY allowed for internal content areas that are explicitly paginated (e.g., ante pages within a fullscreen analyzer). Top-level app views must never scroll.
159
+
160
+ **Thumb Zone Rule:** Back buttons, navigation buttons, and primary actions ALWAYS go at the **bottom** of the screen. Users hold their phone with one hand and tap with their thumb — bottom-positioned buttons are always in reach. NEVER put back/nav buttons at the top of a mobile screen. Back buttons are ALWAYS orange and labeled "Back".
161
+
162
+ **Button Consistency:** All footer buttons use `lg` size across every screen. No mixing sizes in footers.
163
+
164
+ Horizontal swipe for seed navigation. NO visible scrollbars globally — use `::-webkit-scrollbar { display: none; }` and `-ms-overflow-style: none`.
165
+
166
+ Panels use 2px solid borders with border-silver on top/sides and border-south on bottom, creating a subtle 3D card effect. Inner shadow: `inset 0 0 0 1px rgba(255,255,255,0.04)`. Outer shadow: `0 2px 0 #000`.
167
+
168
+ ### Responsive Breakpoints (Container Queries)
169
+
170
+ The j-app shell uses CSS **container queries** (not media queries) because it may live inside a mobile browser, a Claude MCP artifact, or a centered desktop preview. The container determines the layout, not the viewport.
171
+
172
+ | Name | Container Width | Height | Scroll | Usage |
173
+ |---|---|---|---|---|
174
+ | `compact` | ≤ 400px | Fixed 667px | Never | iPhone SE. Default. |
175
+ | `cozy` | 401–750px | Flexible | Vertical OK | MCP inline artifacts, wider phones. |
176
+ | `wide` | 751px+ | Flexible | Vertical OK | Tablet/desktop (future). |
177
+
178
+ Default is `compact` (375×667 locked). Add `<JimboApp fluid>` or `.j-app--fluid` to unlock for MCP/desktop contexts. This lets the container stretch to fill its parent (up to 750px) and activates `@container jimbo` queries in CSS.
179
+
180
+ **What changes compact → cozy:**
181
+ - Height constraint lifts — content determines height
182
+ - Vertical scroll becomes OK (host manages scroll)
183
+ - Padding bumps from `--j-space-lg` to `--j-space-xl`
184
+ - Stat grid values bump to 20px
185
+ - Info card titles bump to 14px
186
+ - Section header tags bump to 12px
187
+ - Buttons STAY `lg` — thumb zone rule still applies
188
+ - Footer STAYS bottom-anchored
189
+
190
+ **What does NOT change:** Colors, fonts, components, spacing tokens, button behavior, animation. The design language is identical — only density shifts.
191
+
192
+ ## Elevation & Depth
193
+
194
+ Buttons have a colored "underside" via box-shadow (not blur). On press, translateY increases by 2-3px and the shadow collapses — the button physically sinks. On hover, apply a tiny brightness bump (no lift).
195
+
196
+ Panels sit on a dark south-shadow (`0 3px 0 rgba(0,0,0,0.55)`). Translucent panels (for swirl-background contexts) use `rgba(15, 24, 26, 0.78)` with `backdrop-filter: blur(2px)`.
197
+
198
+ JAML-hit items get a GlowRing: `box-shadow: 0 0 0 2px [color], 0 0 10px [color]` with a 1.6s pulse animation. Must = blue glow, should = gold/green glow.
199
+
200
+ **Button:** Chunky 3D press. DO NOT ADD A COLORED EDGE/BORDER. Buttons rely entirely on a solid `box-shadow` to create the colored "underside" depth. Hover brightness bump. Press sinks +2-3px and the box-shadow collapses to 0. Variants: primary (red), secondary (blue), back (orange), default (grey). NO GOLD BUTTONS. Sizes via padding, not font-size. Easing: `cubic-bezier(0.34, 1.56, 0.64, 1)`.
201
+
202
+ **Badge (JimboBadge):** Badges indicate status and DO NOT CLICK. They are strictly flat. They have a colored background and flat borders, but NO 3D BOX-SHADOW and NO PRESS ANIMATIONS. Variants: dark, blue, red, green, orange, purple, grey. NO GOLD BADGES.
203
+
204
+ **Panel:** Dark grey (#3a5055) background, 2px solid border (silver top/sides, south bottom), border-radius 6px. Inner highlight: `inset 0 0 0 1px rgba(255,255,255,0.04)`. Drop: `0 2px 0 #000`.
205
+
206
+ **Tabs (JimboTabs):** Active tab = gold background + black text. Inactive = transparent + grey text. No bold. Small radius (4px). Tabs are the ONLY navigation — no hamburger menus, no sidebars on mobile.
207
+
208
+ **ScoreCol:** Must-clauses show as blue-framed boxes with checkmark/cross badge. Should-clauses show as bare sprites with a red corner count badge (x2, x3...). Unlit = 40% opacity + grayscale.
209
+
210
+ **ShopTape:** Horizontal grab-scrollable strip of item sprites. Edge fades (linear-gradient masks) on left/right. Hidden scrollbar. Cursor: grab/grabbing.
211
+
212
+ **PackCell:** Tap to fan — cards explode out with springy stagger (40ms delay, juice easing). Tap again to collapse. Closed state = single pack sprite with type label.
213
+
214
+ **GlowRing:** Pulsing outline around JAML-hit items. `0 0 0 2px [color], 0 0 10px [color]`. Animation: opacity 0.55 → 1.0 over 1.6s ease-in-out infinite.
215
+
216
+ **Card Hover Juice:** Cards receive a 3D magnetic tilt plus a "juice-up" scale animation (`scale(1.05) translateY(-2px)`) on hover to mimic a physical interaction.
217
+
218
+ **Font Dance:** Text can be made to wiggle with a staggered `translateY` offset animation across characters (`.j-font-dance-char`), creating a cozy pixel font animation.
219
+
220
+ **SeedPagerHeader:** Three columns: [left stride arrow] [identity panel with seed + copy + deck/stake] [right stride arrow]. Stride arrows are tall red bars with dark-red inset shadow. Identity panel is translucent with counter pip.
221
+
222
+ ## Do's and Don'ts
223
+
224
+ - DO use m6x11plus for everything except code/monospace.
225
+ - DO design for 375×667px (iPhone SE). Everything must fit — no scrolling.
226
+ - DO use translateY + box-shadow for button depth. Not CSS 3D transforms.
227
+ - DO put back buttons and nav actions at the **bottom** of the screen (thumb zone).
228
+ - DON'T use font-weight bold or heavy. m6x11plus is single-weight.
229
+ - DON'T use ALL CAPS. It is considered an embellishment and ruins the aesthetic.
230
+ - DON'T put grey text on top of a grey background.
231
+ - DON'T use fat padding or margins. Balatro UI is dense and cozy.
232
+ - DON'T add visible scrollbars. Vertical magnetic snap-scroll + horizontal swipe only.
233
+ - DON'T use rounded corners larger than 10px. Balatro is chunky, not bubbly.
234
+ - DON'T use blur-based shadows for depth. Use solid colored box-shadows 80% opaque.
235
+ - DON'T put back/nav buttons at the top of a screen. They go at the BOTTOM.
236
+ - DON'T use redundant JS wrappers for `motely-wasm`. Import globally and `motely.boot()` once. Use `?worker&inline` for search workers rather than blob strings, and do not prop-drill `motelyWasmUrl`.