jaml-ui 0.24.20 → 0.25.2

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.
Files changed (233) hide show
  1. package/README.md +0 -13
  2. package/assets/WeeJokerExampleDAilyGame.png +0 -0
  3. package/assets/balatro-stake-chips.png +0 -0
  4. package/dist/assets.d.ts +1 -2
  5. package/dist/chunks/Layer-BBPJFHfs.js +17 -0
  6. package/dist/chunks/Layer-BBPJFHfs.js.map +1 -0
  7. package/dist/chunks/assets-RWUiFSTc.js +37 -0
  8. package/dist/chunks/assets-RWUiFSTc.js.map +1 -0
  9. package/dist/chunks/motelyItemDecoder-CueyZ0XD.js +6039 -0
  10. package/dist/chunks/motelyItemDecoder-CueyZ0XD.js.map +1 -0
  11. package/dist/chunks/spriteMapper-CFjN0_TV.js +2415 -0
  12. package/dist/chunks/spriteMapper-CFjN0_TV.js.map +1 -0
  13. package/dist/chunks/tokens-B65Fzble.js +57 -0
  14. package/dist/chunks/tokens-B65Fzble.js.map +1 -0
  15. package/dist/chunks/ui-5cBy3zAm.js +1387 -0
  16. package/dist/chunks/ui-5cBy3zAm.js.map +1 -0
  17. package/dist/components/AnalyzerExplorer.d.ts +1 -1
  18. package/dist/components/CardFan.d.ts +1 -1
  19. package/dist/components/CardList.d.ts +1 -1
  20. package/dist/components/DeckSprite.d.ts +1 -1
  21. package/dist/components/JamlAestheticSelector.d.ts +1 -1
  22. package/dist/components/JamlAnalyzerFullscreen.d.ts +5 -5
  23. package/dist/components/JamlCurator.d.ts +1 -6
  24. package/dist/components/JamlIde.d.ts +5 -5
  25. package/dist/components/JamlSeedInput.d.ts +1 -1
  26. package/dist/components/JamlSpeedometer.d.ts +1 -1
  27. package/dist/components/MotelyVersionBadge.d.ts +1 -1
  28. package/dist/components/Standardcard.d.ts +1 -1
  29. package/dist/components/jamlMap/CategoryPicker.d.ts +3 -3
  30. package/dist/components/jamlMap/JamlMapEditor.d.ts +1 -1
  31. package/dist/components/jamlMap/JokerPicker.d.ts +1 -1
  32. package/dist/components/jamlMap/MysterySlot.d.ts +2 -2
  33. package/dist/components/jamlMap/index.d.ts +4 -4
  34. package/dist/core.d.ts +5 -5
  35. package/dist/core.js +27 -5
  36. package/dist/core.js.map +1 -0
  37. package/dist/decode/motelyItemDecoder.d.ts +0 -10
  38. package/dist/decode/motelySprite.d.ts +1 -1
  39. package/dist/fonts/m6x11plus.otf +0 -0
  40. package/dist/hooks/analyzerStreamRegistry.d.ts +2 -2
  41. package/dist/hooks/useAnalyzer.d.ts +3 -3
  42. package/dist/hooks/useSearch.d.ts +2 -2
  43. package/dist/index.d.ts +29 -31
  44. package/dist/index.js +16721 -34
  45. package/dist/index.js.map +1 -0
  46. package/dist/lib/const.d.ts +2 -2
  47. package/dist/lib/hooks/useDragScroll.d.ts +1 -1
  48. package/dist/lib/hooks/useJamlFilter.d.ts +2 -2
  49. package/dist/lib/hooks/useSeedAnalyzer.d.ts +2 -2
  50. package/dist/lib/utils.d.ts +1 -1
  51. package/dist/motely.d.ts +4 -3
  52. package/dist/motely.js +65 -3
  53. package/dist/motely.js.map +1 -0
  54. package/dist/motelyBoot.d.ts +2 -0
  55. package/dist/motelyDisplay.d.ts +0 -2
  56. package/dist/r3f/Card3D.d.ts +2 -2
  57. package/dist/r3f/JimboBillboard.d.ts +1 -1
  58. package/dist/r3f.js +235 -3
  59. package/dist/r3f.js.map +1 -0
  60. package/dist/render/CanvasRenderer.d.ts +1 -1
  61. package/dist/sprites/spriteData.d.ts +1 -6
  62. package/dist/sprites/spriteMapper.d.ts +1 -1
  63. package/dist/ui/JimboBadge.d.ts +1 -1
  64. package/dist/ui/JimboFloating.d.ts +1 -1
  65. package/dist/ui/JimboIconButton.d.ts +1 -1
  66. package/dist/ui/JimboSelect.d.ts +1 -1
  67. package/dist/ui/footer.d.ts +2 -3
  68. package/dist/ui/hooks.d.ts +1 -1
  69. package/dist/ui/ide/DeckSprite.d.ts +1 -1
  70. package/dist/ui/jimbo.css +2 -1856
  71. package/dist/ui/jimboApp.d.ts +1 -1
  72. package/dist/ui/jimboFilterBar.d.ts +1 -1
  73. package/dist/ui/jimboFlankNav.d.ts +1 -1
  74. package/dist/ui/jimboInfoCard.d.ts +1 -1
  75. package/dist/ui/jimboInset.d.ts +1 -1
  76. package/dist/ui/jimboStatGrid.d.ts +1 -1
  77. package/dist/ui/jimboText.d.ts +1 -1
  78. package/dist/ui/jimboTooltip.d.ts +2 -2
  79. package/dist/ui/mascot/SeedMascot.d.ts +2 -2
  80. package/dist/ui/panel.d.ts +1 -1
  81. package/dist/ui/radial/RadialBadge.d.ts +1 -2
  82. package/dist/ui/radial/RadialButton.d.ts +1 -2
  83. package/dist/ui/radial/RadialMenu.d.ts +2 -2
  84. package/dist/ui/radial/RadialPill.d.ts +1 -2
  85. package/dist/ui/radial/index.d.ts +16 -16
  86. package/dist/ui/radial/radialMenuStore.d.ts +1 -1
  87. package/dist/ui/showcase.d.ts +1 -1
  88. package/dist/ui/sprites.d.ts +2 -2
  89. package/dist/ui.d.ts +0 -1
  90. package/dist/ui.js +3 -36
  91. package/dist/utils/gameCardUtils.d.ts +1 -1
  92. package/dist/utils/jamlVisualFilter.d.ts +1 -7
  93. package/package.json +13 -25
  94. package/dist/assets.js +0 -48
  95. package/dist/components/AnalyzerExplorer.js +0 -391
  96. package/dist/components/CardFan.js +0 -80
  97. package/dist/components/CardList.js +0 -5
  98. package/dist/components/DeckSprite.js +0 -75
  99. package/dist/components/GameCard.js +0 -355
  100. package/dist/components/JamlAestheticSelector.js +0 -22
  101. package/dist/components/JamlAnalyzerFullscreen.js +0 -263
  102. package/dist/components/JamlCodeEditor.js +0 -137
  103. package/dist/components/JamlCurator.js +0 -64
  104. package/dist/components/JamlCurator.stories.d.ts +0 -6
  105. package/dist/components/JamlCurator.stories.js +0 -14
  106. package/dist/components/JamlIde.js +0 -193
  107. package/dist/components/JamlIdeToolbar.js +0 -23
  108. package/dist/components/JamlIdeVisual.js +0 -218
  109. package/dist/components/JamlMapPreview.js +0 -121
  110. package/dist/components/JamlSeedInput.js +0 -26
  111. package/dist/components/JamlSpeedometer.js +0 -70
  112. package/dist/components/Jimbolate.js +0 -17
  113. package/dist/components/MotelyVersionBadge.js +0 -19
  114. package/dist/components/PaginatedFilterBrowser.js +0 -54
  115. package/dist/components/RunConfigModal.js +0 -59
  116. package/dist/components/Standardcard.js +0 -80
  117. package/dist/components/jamlMap/CategoryPicker.js +0 -135
  118. package/dist/components/jamlMap/JamlMapEditor.js +0 -304
  119. package/dist/components/jamlMap/JamlMapEditor.stories.d.ts +0 -7
  120. package/dist/components/jamlMap/JamlMapEditor.stories.js +0 -26
  121. package/dist/components/jamlMap/JamlMapEditorDemo.d.ts +0 -8
  122. package/dist/components/jamlMap/JamlMapEditorDemo.js +0 -323
  123. package/dist/components/jamlMap/JokerPicker.js +0 -113
  124. package/dist/components/jamlMap/MysterySlot.js +0 -128
  125. package/dist/components/jamlMap/MysterySlot.stories.d.ts +0 -7
  126. package/dist/components/jamlMap/MysterySlot.stories.js +0 -31
  127. package/dist/components/jamlMap/index.js +0 -4
  128. package/dist/decode/motelyItemDecoder.js +0 -164
  129. package/dist/decode/motelySprite.js +0 -84
  130. package/dist/hooks/analyzerStreamRegistry.js +0 -96
  131. package/dist/hooks/searchWorker.d.ts +0 -1
  132. package/dist/hooks/searchWorker.js +0 -119
  133. package/dist/hooks/searchWorkerCode.d.ts +0 -1
  134. package/dist/hooks/searchWorkerCode.js +0 -85
  135. package/dist/hooks/useAnalyzer.js +0 -91
  136. package/dist/hooks/useIntersectionObserver.js +0 -52
  137. package/dist/hooks/useSearch.js +0 -161
  138. package/dist/hooks/useShopStream.js +0 -85
  139. package/dist/lib/SpriteMapper.js +0 -48
  140. package/dist/lib/cardParser.js +0 -67
  141. package/dist/lib/classes/BuyMetaData.js +0 -1
  142. package/dist/lib/config.js +0 -15
  143. package/dist/lib/const.js +0 -521
  144. package/dist/lib/data/constants.js +0 -14
  145. package/dist/lib/hooks/useDragScroll.js +0 -48
  146. package/dist/lib/hooks/useJamlFilter.js +0 -219
  147. package/dist/lib/hooks/useSeedAnalyzer.js +0 -50
  148. package/dist/lib/jaml/jamlCompletion.js +0 -13
  149. package/dist/lib/jaml/jamlData.js +0 -6
  150. package/dist/lib/jaml/jamlObjectives.js +0 -97
  151. package/dist/lib/jaml/jamlParser.js +0 -47
  152. package/dist/lib/jaml/jamlPresets.js +0 -61
  153. package/dist/lib/jaml/jamlSchema.js +0 -91
  154. package/dist/lib/parseDailyRitual.js +0 -70
  155. package/dist/lib/tts/getRevealPos.js +0 -16
  156. package/dist/lib/tts/splitTtsDisplay.js +0 -35
  157. package/dist/lib/types.js +0 -1
  158. package/dist/lib/utils.js +0 -5
  159. package/dist/motelyDisplay.js +0 -59
  160. package/dist/r3f/Card3D.js +0 -72
  161. package/dist/r3f/JimboBillboard.js +0 -32
  162. package/dist/r3f/JimboText3D.js +0 -8
  163. package/dist/render/CanvasRenderer.js +0 -11
  164. package/dist/render/Layer.js +0 -18
  165. package/dist/sprites/spriteData.js +0 -100
  166. package/dist/sprites/spriteMapper.js +0 -75
  167. package/dist/stories/Button.d.ts +0 -15
  168. package/dist/stories/Button.js +0 -7
  169. package/dist/stories/Button.stories.d.ts +0 -24
  170. package/dist/stories/Button.stories.js +0 -50
  171. package/dist/stories/Header.d.ts +0 -12
  172. package/dist/stories/Header.js +0 -4
  173. package/dist/stories/Header.stories.d.ts +0 -18
  174. package/dist/stories/Header.stories.js +0 -26
  175. package/dist/stories/Page.d.ts +0 -3
  176. package/dist/stories/Page.js +0 -8
  177. package/dist/stories/Page.stories.d.ts +0 -12
  178. package/dist/stories/Page.stories.js +0 -24
  179. package/dist/ui/Jimbo.stories.d.ts +0 -7
  180. package/dist/ui/Jimbo.stories.js +0 -28
  181. package/dist/ui/JimboBadge.js +0 -8
  182. package/dist/ui/JimboFloating.js +0 -17
  183. package/dist/ui/JimboIconButton.js +0 -28
  184. package/dist/ui/JimboInputModal.js +0 -66
  185. package/dist/ui/JimboSelect.js +0 -43
  186. package/dist/ui/JimboToggleList.js +0 -5
  187. package/dist/ui/PanelSplitter.js +0 -78
  188. package/dist/ui/codeBlock.js +0 -14
  189. package/dist/ui/footer.js +0 -20
  190. package/dist/ui/hooks.js +0 -634
  191. package/dist/ui/ide/AgnosticSeedCard.d.ts +0 -19
  192. package/dist/ui/ide/AgnosticSeedCard.js +0 -48
  193. package/dist/ui/ide/DeckSprite.js +0 -2
  194. package/dist/ui/ide/JamlBuilder.d.ts +0 -1
  195. package/dist/ui/ide/JamlBuilder.js +0 -112
  196. package/dist/ui/ide/JamlEditor.js +0 -486
  197. package/dist/ui/ide/JamlEditorMonaco.d.ts +0 -8
  198. package/dist/ui/ide/JamlEditorMonaco.js +0 -78
  199. package/dist/ui/ide/WasmStatus.d.ts +0 -1
  200. package/dist/ui/ide/WasmStatus.js +0 -42
  201. package/dist/ui/jimboApp.js +0 -15
  202. package/dist/ui/jimboBackground.js +0 -27
  203. package/dist/ui/jimboCopyRow.js +0 -18
  204. package/dist/ui/jimboFilterBar.js +0 -16
  205. package/dist/ui/jimboFlankNav.js +0 -18
  206. package/dist/ui/jimboInfoCard.js +0 -26
  207. package/dist/ui/jimboInset.js +0 -9
  208. package/dist/ui/jimboSectionHeader.js +0 -9
  209. package/dist/ui/jimboStatGrid.js +0 -9
  210. package/dist/ui/jimboTabs.js +0 -22
  211. package/dist/ui/jimboText.js +0 -33
  212. package/dist/ui/jimboTooltip.js +0 -39
  213. package/dist/ui/jimboWordmark.js +0 -9
  214. package/dist/ui/mascot/JammySpeechBox.js +0 -30
  215. package/dist/ui/mascot/SeedMascot.js +0 -17
  216. package/dist/ui/mascot/index.js +0 -3
  217. package/dist/ui/mascot/menuConfig.js +0 -12
  218. package/dist/ui/panel.js +0 -24
  219. package/dist/ui/radial/RadialBadge.js +0 -43
  220. package/dist/ui/radial/RadialBreadcrumb.js +0 -18
  221. package/dist/ui/radial/RadialButton.js +0 -102
  222. package/dist/ui/radial/RadialMenu.js +0 -168
  223. package/dist/ui/radial/RadialPill.js +0 -15
  224. package/dist/ui/radial/index.js +0 -18
  225. package/dist/ui/radial/radialMenuStore.js +0 -122
  226. package/dist/ui/radial/radialMenuViewport.js +0 -59
  227. package/dist/ui/radial/useRadialMenu.js +0 -107
  228. package/dist/ui/showcase.js +0 -20
  229. package/dist/ui/sprites.js +0 -77
  230. package/dist/ui/tokens.js +0 -64
  231. package/dist/utils/gameCardUtils.js +0 -15
  232. package/dist/utils/jamlMapPreview.js +0 -106
  233. package/dist/utils/jamlVisualFilter.js +0 -210
package/dist/ui/jimbo.css CHANGED
@@ -1,1856 +1,2 @@
1
- /* ═══════════════════════════════════════════════════════════════════════════
2
- jimbo.css — Jimbo Design System
3
- Balatro-inspired design tokens + component classes.
4
- Eyedropped from actual game shader output — not Lua hex values.
5
- ═══════════════════════════════════════════════════════════════════════════ */
6
-
7
- @font-face {
8
- font-family: 'm6x11plus';
9
- src: local('m6x11plus'), local('m6x11plusplus'),
10
- url('../../assets/fonts/m6x11plusplus.otf') format('opentype');
11
- font-weight: normal;
12
- font-style: normal;
13
- font-display: swap;
14
- }
15
-
16
- /* Global Scrollbar Hide */
17
- * {
18
- scrollbar-width: none !important;
19
- -ms-overflow-style: none !important;
20
- }
21
-
22
- *::-webkit-scrollbar {
23
- display: none !important;
24
- }
25
-
26
- /* ── Design Tokens (CSS Custom Properties) ─────────────────────────────── */
27
-
28
- :root {
29
- /* Colors — eyedropped from Balatro's rendered shader output */
30
- --j-red: #fe5148;
31
- --j-blue: #0093ff;
32
- --j-green: #429f79;
33
- --j-orange: #ff9800;
34
- --j-gold: #e4b643;
35
- --j-purple: #9e74ce;
36
-
37
- --j-dark-red: #a02721;
38
- --j-dark-blue: #0057a1;
39
- --j-dark-orange: #a05b00;
40
- --j-dark-green: #215f46;
41
- --j-dark-purple: #5e437e;
42
-
43
- --j-dark-grey: #3a5055;
44
- --j-darkest: #1e2b2d;
45
- --j-grey: #708386;
46
- --j-teal-grey: #404c4e;
47
-
48
- --j-panel-edge: #1e2e32;
49
- --j-inner-border: #334461;
50
- --j-border-silver: #b9c2d2;
51
- --j-border-south: #777e89;
52
-
53
- --j-gold-text: #e4b643;
54
- --j-green-text: #35bd86;
55
- --j-orange-text: #ff8f00;
56
- --j-white: #ffffff;
57
- --j-black: #000000;
58
-
59
- --j-tarot-btn: #9e74ce;
60
- --j-planet-btn: #00a7ca;
61
- --j-spectral-btn: #2e76fd;
62
- --j-tarot-btn-dark: #5e437e;
63
- --j-planet-btn-dark: #00657c;
64
- --j-spectral-btn-dark: #14449e;
65
-
66
- /* Typography */
67
- --j-font: 'm6x11plus', 'Courier New', monospace;
68
- /* Coding font — used by JamlCodeEditor and .j-code-block. JetBrains Mono
69
- with a long OS-native fallback chain so the UI still reads as code even
70
- when the Google Fonts stylesheet fails to load. */
71
- --j-font-code: 'JetBrains Mono', 'Cascadia Code', 'Fira Code', 'SF Mono', SFMono-Regular, Menlo, Consolas, ui-monospace, 'Courier New', monospace;
72
- --j-text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.8);
73
-
74
- /* Spacing */
75
- --j-space-xs: 2px;
76
- --j-space-sm: 4px;
77
- --j-space-md: 8px;
78
- --j-space-lg: 12px;
79
- --j-space-xl: 16px;
80
-
81
- /* Radii — Balatro is chunky, not bubbly. Never > 10px. */
82
- --j-radius-sm: 4px;
83
- --j-radius-md: 6px;
84
- --j-radius-lg: 8px;
85
- --j-radius-pill: 10px;
86
-
87
- /* Animation */
88
- --j-ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
89
- --j-press-y: 3px;
90
- --j-press-speed: 55ms;
91
- }
92
-
93
-
94
- /* ── Base Text ─────────────────────────────────────────────────────────── */
95
-
96
- .j-text {
97
- font-family: var(--j-font);
98
- font-weight: 400;
99
- line-height: 1.2;
100
- text-shadow: var(--j-text-shadow);
101
- color: var(--j-white);
102
- }
103
-
104
- .j-text--no-shadow {
105
- text-shadow: none;
106
- }
107
-
108
- .j-text--upper {
109
- text-transform: uppercase;
110
- letter-spacing: 0.08em;
111
- }
112
-
113
- /* Font Dance Animation */
114
- .j-text--dance-container {
115
- display: inline-block;
116
- white-space: pre-wrap;
117
- }
118
-
119
- .j-font-dance-char {
120
- display: inline-block;
121
- animation: j-font-dance 1.5s infinite steps(2, end);
122
- }
123
-
124
- @keyframes j-font-dance {
125
-
126
- 0%,
127
- 100% {
128
- transform: translate(0, 0);
129
- }
130
-
131
- 25% {
132
- transform: translate(1px, -1px);
133
- }
134
-
135
- 50% {
136
- transform: translate(0, -2px);
137
- }
138
-
139
- 75% {
140
- transform: translate(-1px, -1px);
141
- }
142
- }
143
-
144
- /* Sizes (from DESIGN.md typography scale) */
145
- .j-text--display {
146
- font-size: 26px;
147
- letter-spacing: 0.04em;
148
- line-height: 1;
149
- }
150
-
151
- .j-text--xl {
152
- font-size: 24px;
153
- letter-spacing: 0.04em;
154
- }
155
-
156
- .j-text--lg {
157
- font-size: 18px;
158
- letter-spacing: 0.04em;
159
- }
160
-
161
- .j-text--heading {
162
- font-size: 14px;
163
- letter-spacing: 0.08em;
164
- line-height: 1.2;
165
- }
166
-
167
- .j-text--md {
168
- font-size: 14px;
169
- }
170
-
171
- .j-text--sm {
172
- font-size: 12px;
173
- }
174
-
175
- .j-text--body {
176
- font-size: 11px;
177
- letter-spacing: 0.05em;
178
- line-height: 1.3;
179
- }
180
-
181
- .j-text--xs {
182
- font-size: 10px;
183
- }
184
-
185
- .j-text--label {
186
- font-size: 9px;
187
- letter-spacing: 0.1em;
188
- line-height: 1;
189
- text-transform: uppercase;
190
- }
191
-
192
- .j-text--micro {
193
- font-size: 8px;
194
- letter-spacing: 0.08em;
195
- line-height: 1;
196
- }
197
-
198
- /* Tones */
199
- .j-text--default {
200
- color: var(--j-white);
201
- }
202
-
203
- .j-text--mult,
204
- .j-text--red {
205
- color: var(--j-red);
206
- }
207
-
208
- .j-text--chips,
209
- .j-text--blue {
210
- color: var(--j-blue);
211
- }
212
-
213
- .j-text--gold {
214
- color: var(--j-gold-text);
215
- }
216
-
217
- .j-text--green {
218
- color: var(--j-green-text);
219
- }
220
-
221
- .j-text--orange {
222
- color: var(--j-orange-text);
223
- }
224
-
225
- .j-text--purple {
226
- color: var(--j-purple);
227
- }
228
-
229
- .j-text--grey {
230
- color: var(--j-grey);
231
- }
232
-
233
-
234
- /* ── Panel ─────────────────────────────────────────────────────────────── */
235
-
236
- .j-panel {
237
- background-color: var(--j-dark-grey);
238
- border: 2px solid var(--j-border-silver);
239
- border-bottom-color: var(--j-border-south);
240
- border-radius: var(--j-radius-md);
241
- box-shadow: 0 3px 0 0 rgba(0, 0, 0, 0.55),
242
- inset 0 0 0 1px rgba(255, 255, 255, 0.04);
243
- padding: var(--j-space-lg);
244
- display: flex;
245
- flex-direction: column;
246
- align-items: stretch;
247
- overflow: visible;
248
- position: relative;
249
- }
250
-
251
- .j-panel__body {
252
- flex: 1;
253
- overflow: auto;
254
- }
255
-
256
- .j-panel__back {
257
- margin-top: var(--j-space-lg);
258
- padding-top: var(--j-space-md);
259
- flex-shrink: 0;
260
- }
261
-
262
- .j-back-btn .j-btn__face {
263
- padding-top: 8px;
264
- padding-bottom: 8px;
265
- }
266
-
267
- .j-inner-panel {
268
- background-color: var(--j-inner-border);
269
- border: 2px solid var(--j-panel-edge);
270
- border-radius: var(--j-radius-md);
271
- padding: var(--j-space-lg);
272
- }
273
-
274
-
275
- /* ── Button ────────────────────────────────────────────────────────────── */
276
- /* Chunky 3D press: black underside via drop shadow,
277
- press sinks the face +3px and collapses the shadow. */
278
-
279
- .j-btn {
280
- appearance: none;
281
- -webkit-appearance: none;
282
- display: inline-block;
283
- position: relative;
284
- cursor: pointer;
285
- border: none;
286
- padding: 0;
287
- background: transparent;
288
- -webkit-user-select: none;
289
- user-select: none;
290
- }
291
-
292
- /* Invisible stable hit target to prevent hover jitter when the child transforms */
293
- .j-btn::after {
294
- content: '';
295
- position: absolute;
296
- inset: 0;
297
- background: transparent;
298
- z-index: 10;
299
- }
300
-
301
- .j-btn--full {
302
- width: 100%;
303
- }
304
-
305
- .j-btn--disabled {
306
- opacity: 0.55;
307
- cursor: not-allowed;
308
- }
309
-
310
- .j-btn__face {
311
- position: relative;
312
- border-radius: var(--j-radius-md);
313
- background: var(--j-btn-face-color, var(--j-orange));
314
- text-align: center;
315
- text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.8);
316
- box-shadow: 0 var(--j-press-y) 0 0 rgba(0, 0, 0, 0.6);
317
- transform: translate(0, 0);
318
- transition: transform var(--j-press-speed) linear, box-shadow var(--j-press-speed) linear;
319
- }
320
-
321
- .j-btn[data-pressed="true"] .j-btn__face,
322
- .j-btn:active:not(:disabled):not(.j-btn--disabled) .j-btn__face {
323
- transform: translateY(var(--j-press-y));
324
- box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.6);
325
- }
326
-
327
- .j-btn:not(.j-btn--disabled):hover .j-btn__face {
328
- background: var(--j-btn-hover-color, var(--j-btn-face-color));
329
- }
330
-
331
- /* Sizes */
332
- .j-btn--xs .j-btn__face {
333
- padding: 4px 8px;
334
- font-size: 11px;
335
- }
336
-
337
- .j-btn--sm .j-btn__face {
338
- padding: 6px 12px;
339
- font-size: 13px;
340
- }
341
-
342
- .j-btn--md .j-btn__face {
343
- padding: 10px 18px;
344
- font-size: 16px;
345
- }
346
-
347
- .j-btn--lg .j-btn__face {
348
- padding: 8px 18px;
349
- font-size: 20px;
350
- }
351
-
352
- /* Tone colors — set via CSS custom properties */
353
- .j-btn--orange {
354
- --j-btn-face-color: var(--j-orange);
355
- --j-btn-hover-color: var(--j-dark-orange);
356
- }
357
-
358
- .j-btn--red {
359
- --j-btn-face-color: var(--j-red);
360
- --j-btn-hover-color: var(--j-dark-red);
361
- }
362
-
363
- .j-btn--blue {
364
- --j-btn-face-color: var(--j-blue);
365
- --j-btn-hover-color: var(--j-dark-blue);
366
- }
367
-
368
- .j-btn--green {
369
- --j-btn-face-color: var(--j-green);
370
- --j-btn-hover-color: var(--j-dark-green);
371
- }
372
-
373
- .j-btn--tarot {
374
- --j-btn-face-color: var(--j-tarot-btn);
375
- --j-btn-hover-color: var(--j-tarot-btn-dark);
376
- }
377
-
378
- .j-btn--planet {
379
- --j-btn-face-color: var(--j-planet-btn);
380
- --j-btn-hover-color: var(--j-planet-btn-dark);
381
- }
382
-
383
- .j-btn--spectral {
384
- --j-btn-face-color: var(--j-spectral-btn);
385
- --j-btn-hover-color: var(--j-spectral-btn-dark);
386
- }
387
-
388
-
389
- /* ── Badge ─────────────────────────────────────────────────────────────── */
390
-
391
- .j-badge {
392
- display: inline-flex;
393
- align-items: center;
394
- border-radius: var(--j-radius-sm);
395
- font-family: var(--j-font);
396
- font-weight: 400;
397
- letter-spacing: 0.04em;
398
- white-space: nowrap;
399
- text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.8);
400
- border: none;
401
- }
402
-
403
- .j-badge--sm {
404
- padding: 2px 6px;
405
- font-size: 10px;
406
- }
407
-
408
- .j-badge--md {
409
- padding: 4px 8px;
410
- font-size: 12px;
411
- }
412
-
413
- /* Badge tones — flat, no shadow, no edges */
414
- .j-badge--dark {
415
- background: var(--j-darkest);
416
- color: var(--j-white);
417
- }
418
-
419
- .j-badge--blue {
420
- background: var(--j-blue);
421
- color: var(--j-white);
422
- }
423
-
424
- .j-badge--red {
425
- background: var(--j-red);
426
- color: var(--j-white);
427
- }
428
-
429
- .j-badge--green {
430
- background: var(--j-green);
431
- color: var(--j-white);
432
- }
433
-
434
- .j-badge--orange {
435
- background: var(--j-orange);
436
- color: var(--j-white);
437
- }
438
-
439
- .j-badge--purple {
440
- background: var(--j-purple);
441
- color: var(--j-white);
442
- }
443
-
444
-
445
- /* ── Tabs ──────────────────────────────────────────────────────────────── */
446
-
447
- .j-tabs {
448
- display: flex;
449
- gap: var(--j-space-sm);
450
- align-items: flex-end;
451
- justify-content: center;
452
- flex-wrap: nowrap;
453
- width: 100%;
454
- overflow-x: auto;
455
- scrollbar-width: none;
456
- }
457
- .j-tabs::-webkit-scrollbar { display: none; }
458
-
459
- .j-tab {
460
- display: flex;
461
- flex-direction: column;
462
- align-items: center;
463
- position: relative;
464
- flex: 0 0 auto;
465
- }
466
-
467
- .j-tab__indicator {
468
- height: 10px;
469
- margin-bottom: 3px;
470
- display: flex;
471
- justify-content: center;
472
- align-items: flex-end;
473
- }
474
-
475
- .j-tab__indicator svg {
476
- fill: var(--j-red);
477
- display: block;
478
- }
479
-
480
- .j-tab__indicator[data-active="true"] {
481
- animation: jimbo-bounce 0.7s ease-in-out infinite;
482
- }
483
-
484
- .j-tab__indicator[data-active="false"] {
485
- visibility: hidden;
486
- }
487
-
488
- .j-tab__btn {
489
- appearance: none;
490
- -webkit-appearance: none;
491
- border: none;
492
- cursor: pointer;
493
- border-radius: var(--j-radius-sm);
494
- padding: 6px 14px;
495
- min-height: 28px;
496
- background: var(--j-red);
497
- box-shadow: 0 3px 0 0 rgba(0, 0, 0, 0.6);
498
- color: var(--j-white);
499
- text-align: center;
500
- text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.8);
501
- transition: background var(--j-press-speed) linear;
502
- outline: none;
503
- }
504
-
505
- .j-tab__btn .j-text {
506
- color: inherit;
507
- text-shadow: inherit;
508
- }
509
-
510
- .j-tab__btn:hover {
511
- background: var(--j-dark-red);
512
- }
513
-
514
- .j-tab__btn:active {
515
- background: var(--j-dark-red);
516
- }
517
-
518
-
519
- @keyframes jimbo-bounce {
520
- 0% {
521
- transform: translateY(0);
522
- animation-timing-function: ease-out;
523
- }
524
- 45% {
525
- transform: translateY(-5px);
526
- animation-timing-function: ease-in;
527
- }
528
- 100% {
529
- transform: translateY(0);
530
- }
531
- }
532
-
533
- /* Vertical tabs */
534
- .j-vtabs {
535
- display: flex;
536
- flex-direction: column;
537
- gap: var(--j-space-sm);
538
- }
539
-
540
- .j-vtab {
541
- border: none;
542
- cursor: pointer;
543
- border-radius: 8px 0 0 8px;
544
- padding: 16px 8px;
545
- background-color: transparent;
546
- writing-mode: vertical-rl;
547
- text-orientation: mixed;
548
- transform: rotate(180deg);
549
- transition: none;
550
- }
551
-
552
- .j-vtab[data-active="true"] {
553
- background-color: var(--j-gold, #e4b643);
554
- color: var(--j-black, #000000);
555
- }
556
-
557
-
558
- /* ── Toggle List ──────────────────────────────────────────────────────── */
559
-
560
- .j-toggle-list {
561
- display: flex;
562
- flex-direction: column;
563
- gap: var(--j-space-sm);
564
- }
565
-
566
- .j-toggle-list__title {
567
- font-family: var(--j-font);
568
- font-size: 12px;
569
- color: var(--j-grey);
570
- text-transform: uppercase;
571
- letter-spacing: 0.04em;
572
- margin-bottom: var(--j-space-sm);
573
- }
574
-
575
- .j-toggle-item {
576
- display: flex;
577
- align-items: center;
578
- gap: var(--j-space-md);
579
- padding: 6px 8px;
580
- background: rgba(255, 255, 255, 0.05);
581
- border: 1px solid rgba(0, 0, 0, 0.2);
582
- border-radius: var(--j-radius-sm);
583
- cursor: pointer;
584
- font-family: var(--j-font);
585
- color: var(--j-white);
586
- text-transform: uppercase;
587
- letter-spacing: 0.04em;
588
- text-align: left;
589
- justify-content: flex-start;
590
- }
591
-
592
- .j-toggle-check {
593
- width: 10px;
594
- height: 10px;
595
- flex-shrink: 0;
596
- border: 1px solid var(--j-dark-grey);
597
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.5);
598
- }
599
-
600
- .j-toggle-check[data-on="true"] {
601
- background: var(--j-orange);
602
- }
603
-
604
- .j-toggle-check[data-on="false"] {
605
- background: var(--j-darkest);
606
- }
607
-
608
-
609
- /* ── Tooltip ──────────────────────────────────────────────────────────── */
610
-
611
- .j-tooltip {
612
- position: fixed;
613
- max-width: 280px;
614
- padding: 6px 10px;
615
- border-radius: var(--j-radius-md);
616
- background: var(--j-darkest);
617
- border: 2px solid var(--j-border-silver);
618
- box-shadow: 0 2px 0 rgba(0, 0, 0, 0.8);
619
- color: var(--j-white);
620
- pointer-events: none;
621
- z-index: 9999;
622
- transition: opacity 120ms ease;
623
- }
624
-
625
-
626
-
627
- /* ── Layout Utilities ─────────────────────────────────────────────────── */
628
-
629
- .j-flex {
630
- display: flex;
631
- }
632
-
633
- .j-flex-col {
634
- display: flex;
635
- flex-direction: column;
636
- }
637
-
638
- .j-items-center {
639
- align-items: center;
640
- }
641
-
642
- .j-items-start {
643
- align-items: flex-start;
644
- }
645
-
646
- .j-justify-center {
647
- justify-content: center;
648
- }
649
-
650
- .j-justify-between {
651
- justify-content: space-between;
652
- }
653
-
654
- .j-gap-xs { gap: var(--j-space-xs); }
655
- .j-gap-sm { gap: var(--j-space-sm); }
656
- .j-gap-md { gap: var(--j-space-md); }
657
- .j-gap-lg { gap: var(--j-space-lg); }
658
-
659
- .j-w-full { width: 100%; }
660
- .j-h-full { height: 100%; }
661
-
662
- .j-text-center { text-align: center; }
663
-
664
-
665
- /* ── Flank Nav ────────────────────────────────────────────────────────── */
666
-
667
- .j-flank {
668
- display: flex;
669
- align-items: stretch;
670
- justify-content: center;
671
- gap: var(--j-space-md);
672
- width: 100%;
673
- position: relative;
674
- }
675
-
676
- .j-flank__content {
677
- position: relative;
678
- flex: 1;
679
- min-width: 0;
680
- display: flex;
681
- flex-direction: column;
682
- }
683
-
684
- .j-flank__btn {
685
- flex-shrink: 0;
686
- width: 40px;
687
- margin: var(--j-press-y) 0;
688
- border: none;
689
- border-radius: var(--j-radius-lg);
690
- cursor: pointer;
691
- background-color: var(--j-red);
692
- color: var(--j-white);
693
- text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.8);
694
- display: flex;
695
- align-items: center;
696
- justify-content: center;
697
- box-shadow: 0 var(--j-press-y) 0 0 var(--j-dark-red);
698
- transition: transform var(--j-press-speed) ease,
699
- box-shadow var(--j-press-speed) ease,
700
- background-color var(--j-press-speed) ease;
701
- }
702
-
703
- .j-flank__btn[data-pressed="true"] {
704
- transform: translateY(var(--j-press-y));
705
- box-shadow: none;
706
- }
707
-
708
- .j-flank__btn:disabled {
709
- background-color: var(--j-dark-red);
710
- cursor: default;
711
- box-shadow: none;
712
- }
713
-
714
-
715
- /* ── Copy Row ─────────────────────────────────────────────────────────── */
716
-
717
- .j-copy-row {
718
- display: flex;
719
- flex-direction: column;
720
- gap: var(--j-space-sm);
721
- }
722
-
723
- .j-copy-row__field {
724
- display: flex;
725
- align-items: center;
726
- gap: var(--j-space-md);
727
- }
728
-
729
- .j-copy-row__value {
730
- flex: 1;
731
- padding: 6px 10px;
732
- background: var(--j-darkest);
733
- border: 2px solid var(--j-panel-edge);
734
- border-radius: var(--j-radius-sm);
735
- word-break: break-all;
736
- }
737
-
738
- .j-copy-row__btn {
739
- font-family: var(--j-font);
740
- font-size: 11px;
741
- letter-spacing: 0.08em;
742
- border-radius: var(--j-radius-sm);
743
- padding: 4px 12px;
744
- cursor: pointer;
745
- flex-shrink: 0;
746
- transition: color 0.15s, background 0.15s, border-color 0.15s;
747
- }
748
-
749
- .j-copy-row__btn[data-copied="false"] {
750
- color: var(--j-gold-text);
751
- background: rgba(228, 182, 67, 0.12);
752
- border: 1px solid var(--j-gold-text);
753
- }
754
-
755
- .j-copy-row__btn[data-copied="true"] {
756
- color: var(--j-green-text);
757
- background: rgba(53, 189, 134, 0.12);
758
- border: 1px solid var(--j-green-text);
759
- }
760
-
761
-
762
- /* ── Code Block ───────────────────────────────────────────────────────── */
763
-
764
- .j-code-block {
765
- background-color: var(--j-darkest);
766
- border: 2px solid var(--j-panel-edge);
767
- border-radius: var(--j-radius-lg);
768
- box-shadow: 0 3px 0 0 rgba(0, 0, 0, 0.5);
769
- overflow: hidden;
770
- display: flex;
771
- flex-direction: column;
772
- }
773
-
774
- .j-code-block__header {
775
- padding: 8px 12px;
776
- display: flex;
777
- align-items: center;
778
- justify-content: space-between;
779
- border-bottom: 1px solid var(--j-inner-border);
780
- }
781
-
782
- .j-code-block__meta {
783
- display: flex;
784
- gap: 8px;
785
- align-items: center;
786
- }
787
-
788
- .j-code-block__filename {
789
- font-size: 10px;
790
- opacity: 0.6;
791
- }
792
-
793
- .j-code-block__lang {
794
- font-size: 9px;
795
- padding: 1px 6px;
796
- border-radius: 3px;
797
- background: rgba(0, 0, 0, 0.4);
798
- color: #60a5fa;
799
- }
800
-
801
- .j-code-block__copy {
802
- padding: 4px;
803
- background: none;
804
- border: none;
805
- cursor: pointer;
806
- display: flex;
807
- }
808
-
809
- .j-code-block__copy[data-copied="false"] {
810
- color: rgba(255, 255, 255, 0.5);
811
- }
812
-
813
- .j-code-block__copy[data-copied="true"] {
814
- color: #4ade80;
815
- }
816
-
817
- .j-code-block__pre {
818
- padding: 12px;
819
- overflow-x: auto;
820
- font-family: var(--j-font-code);
821
- font-size: 0.875rem;
822
- line-height: 1.6;
823
- color: #f6f0d5;
824
- margin: 0;
825
- }
826
-
827
-
828
- /* ── Filter Bar ───────────────────────────────────────────────────────── */
829
-
830
- .j-filter-bar {
831
- display: flex;
832
- gap: 24px;
833
- padding: var(--j-space-xl);
834
- background-color: var(--j-dark-grey);
835
- border: 4px solid var(--j-border-silver);
836
- box-shadow: 0 3px 0 0 var(--j-border-south);
837
- border-radius: var(--j-radius-lg);
838
- position: relative;
839
- flex-wrap: wrap;
840
- }
841
-
842
- .j-filter-bar__field {
843
- flex: 1;
844
- min-width: 200px;
845
- position: relative;
846
- margin-top: 10px;
847
- }
848
-
849
- .j-filter-bar__pill {
850
- position: absolute;
851
- top: -14px;
852
- left: 16px;
853
- background-color: var(--j-red);
854
- border: 2px solid var(--j-dark-red);
855
- border-radius: var(--j-radius-md);
856
- padding: 4px 12px;
857
- z-index: 2;
858
- }
859
-
860
- .j-filter-bar__input {
861
- width: 100%;
862
- padding: 14px 16px 14px 48px;
863
- background-color: var(--j-darkest);
864
- border: none;
865
- border-bottom: 4px solid var(--j-panel-edge);
866
- border-radius: var(--j-radius-lg);
867
- color: var(--j-white);
868
- font-family: var(--j-font);
869
- font-size: 20px;
870
- letter-spacing: 0.08em;
871
- outline: none;
872
- }
873
-
874
- .j-filter-bar__search-icon {
875
- position: absolute;
876
- left: 0;
877
- top: 0;
878
- bottom: 0;
879
- width: 48px;
880
- display: flex;
881
- align-items: center;
882
- justify-content: center;
883
- pointer-events: none;
884
- color: var(--j-blue);
885
- z-index: 1;
886
- }
887
-
888
- .j-filter-bar__select {
889
- appearance: none;
890
- -webkit-appearance: none;
891
- -moz-appearance: none;
892
- background-color: var(--j-orange);
893
- color: var(--j-white);
894
- border: none;
895
- border-bottom: 4px solid var(--j-dark-orange);
896
- border-radius: var(--j-radius-lg);
897
- cursor: pointer;
898
- font-family: var(--j-font);
899
- font-size: 18px;
900
- letter-spacing: 0.08em;
901
- padding: 14px 48px 14px 24px;
902
- min-width: 200px;
903
- text-align: center;
904
- outline: none;
905
- }
906
-
907
- .j-filter-bar__sort-icon {
908
- position: absolute;
909
- right: 16px;
910
- top: 50%;
911
- transform: translateY(-50%);
912
- pointer-events: none;
913
- color: var(--j-white);
914
- opacity: 0.85;
915
- }
916
-
917
- /* ── FlankNav ───────────────────────────────────────────────────────────── */
918
-
919
- .j-flank {
920
- display: flex;
921
- align-items: center;
922
- justify-content: center;
923
- gap: var(--j-space-md);
924
- width: 100%;
925
- }
926
-
927
- .j-flank__content {
928
- flex: 1;
929
- display: flex;
930
- justify-content: center;
931
- }
932
-
933
- .j-flank__btn {
934
- background: var(--j-red);
935
- color: var(--j-white);
936
- border: none;
937
- border-radius: var(--j-radius-sm);
938
- padding: var(--j-space-sm) var(--j-space-xs);
939
- cursor: pointer;
940
- box-shadow: 0 var(--j-press-y) 0 var(--j-dark-grey);
941
- transition: transform 0.05s ease, box-shadow 0.05s ease, opacity 0.2s ease;
942
- display: flex;
943
- align-items: center;
944
- justify-content: center;
945
- }
946
-
947
- .j-flank__btn[data-pressed="true"] {
948
- transform: translateY(var(--j-press-y));
949
- box-shadow: 0 0 0 var(--j-dark-grey);
950
- }
951
-
952
- .j-flank__btn:disabled {
953
- opacity: 0.5;
954
- cursor: not-allowed;
955
- transform: none;
956
- box-shadow: 0 var(--j-press-y) 0 var(--j-dark-grey);
957
- }
958
-
959
-
960
- /* ── Modal ────────────────────────────────────────────────────────────── */
961
-
962
- @keyframes jimbo-modal-in {
963
- from { transform: scale(0.88); opacity: 0; }
964
- to { transform: scale(1); opacity: 1; }
965
- }
966
-
967
- .j-modal-overlay {
968
- position: absolute;
969
- inset: 0;
970
- z-index: 1000;
971
- display: flex;
972
- align-items: center;
973
- justify-content: center;
974
- padding: var(--j-space-md);
975
- background: rgba(0, 0, 0, 0.82);
976
- }
977
-
978
- .j-modal {
979
- width: 100%;
980
- max-width: 345px;
981
- max-height: calc(100% - 32px);
982
- display: flex;
983
- flex-direction: column;
984
- overflow: hidden;
985
- border-radius: 12px;
986
- animation: jimbo-modal-in 140ms cubic-bezier(0.2, 0, 0.2, 1.4) both;
987
- }
988
-
989
- .j-modal .j-panel__body {
990
- overflow-y: auto;
991
- min-height: 0;
992
- }
993
-
994
- .j-modal__title {
995
- text-align: center;
996
- margin: 0 0 var(--j-space-xl);
997
- flex-shrink: 0;
998
- }
999
-
1000
-
1001
- /* ── Footer ───────────────────────────────────────────────────────────── */
1002
-
1003
- .j-footer {
1004
- position: fixed;
1005
- bottom: 0;
1006
- left: 0;
1007
- right: 0;
1008
- z-index: 100;
1009
- transition: opacity 200ms;
1010
- }
1011
-
1012
- .j-footer--hidden {
1013
- pointer-events: none;
1014
- opacity: 0;
1015
- }
1016
-
1017
- .j-footer__bar {
1018
- width: 100%;
1019
- border-top: 1px solid rgba(255, 255, 255, 0.1);
1020
- background: rgba(0, 0, 0, 0.9);
1021
- padding: 0 1rem 3px;
1022
- text-align: center;
1023
- }
1024
-
1025
- .j-footer__text {
1026
- font-family: var(--j-font);
1027
- font-size: clamp(11px, 0.8vw + 8px, 14px);
1028
- display: flex;
1029
- flex-wrap: wrap;
1030
- align-items: center;
1031
- justify-content: center;
1032
- gap: 0 0.5rem;
1033
- color: white;
1034
- margin: 0;
1035
- }
1036
-
1037
- .j-footer__link {
1038
- color: var(--j-gold);
1039
- text-decoration: none;
1040
- }
1041
-
1042
-
1043
- /* ── Floating ─────────────────────────────────────────────────────────── */
1044
-
1045
- .j-floating {
1046
- position: absolute;
1047
- z-index: 20;
1048
- }
1049
-
1050
-
1051
- /* ── Background (canvas is styled inline because it's fixed fullscreen) ── */
1052
-
1053
-
1054
- /* ── GlowRing ─────────────────────────────────────────────────────────── */
1055
-
1056
- .j-glow--must {
1057
- box-shadow: 0 0 0 2px var(--j-blue), 0 0 10px var(--j-blue);
1058
- animation: j-glow-pulse 1.6s ease-in-out infinite;
1059
- }
1060
-
1061
- .j-glow--should {
1062
- box-shadow: 0 0 0 2px var(--j-gold), 0 0 10px var(--j-gold);
1063
- animation: j-glow-pulse 1.6s ease-in-out infinite;
1064
- }
1065
-
1066
- @keyframes j-glow-pulse {
1067
-
1068
- 0%,
1069
- 100% {
1070
- opacity: 0.55;
1071
- }
1072
-
1073
- 50% {
1074
- opacity: 1;
1075
- }
1076
- }
1077
-
1078
-
1079
- /* ── Utility ──────────────────────────────────────────────────────────── */
1080
-
1081
- .j-flex {
1082
- display: flex;
1083
- }
1084
-
1085
- .j-flex-col {
1086
- display: flex;
1087
- flex-direction: column;
1088
- }
1089
-
1090
- .j-flex-wrap {
1091
- flex-wrap: wrap;
1092
- }
1093
-
1094
- .j-items-center {
1095
- align-items: center;
1096
- }
1097
-
1098
- .j-justify-center {
1099
- justify-content: center;
1100
- }
1101
-
1102
- .j-gap-xs {
1103
- gap: var(--j-space-xs);
1104
- }
1105
-
1106
- .j-gap-sm {
1107
- gap: var(--j-space-sm);
1108
- }
1109
-
1110
- .j-gap-md {
1111
- gap: var(--j-space-md);
1112
- }
1113
-
1114
- .j-gap-lg {
1115
- gap: var(--j-space-lg);
1116
- }
1117
-
1118
- .j-gap-xl {
1119
- gap: var(--j-space-xl);
1120
- }
1121
-
1122
- .j-w-full {
1123
- width: 100%;
1124
- }
1125
-
1126
- .j-shrink-0 {
1127
- flex-shrink: 0;
1128
- }
1129
-
1130
- .j-flex-1 {
1131
- flex: 1;
1132
- }
1133
-
1134
- .j-min-w-0 {
1135
- min-width: 0;
1136
- }
1137
-
1138
- .j-text-center {
1139
- text-align: center;
1140
- }
1141
-
1142
- .j-overflow-hidden {
1143
- overflow: hidden;
1144
- }
1145
-
1146
- .j-overflow-auto {
1147
- overflow: auto;
1148
- }
1149
-
1150
- .j-relative {
1151
- position: relative;
1152
- }
1153
-
1154
- /* Tone border utilities */
1155
- .j-border--red {
1156
- border-color: var(--j-red);
1157
- }
1158
-
1159
- .j-border--blue {
1160
- border-color: var(--j-blue);
1161
- }
1162
-
1163
- .j-border--green {
1164
- border-color: var(--j-green);
1165
- }
1166
-
1167
- .j-border--gold {
1168
- border-color: var(--j-gold);
1169
- }
1170
-
1171
- .j-border--orange {
1172
- border-color: var(--j-orange);
1173
- }
1174
-
1175
- .j-border--purple {
1176
- border-color: var(--j-purple);
1177
- }
1178
-
1179
- /* Tone background utilities */
1180
- .j-bg--red {
1181
- background-color: var(--j-red);
1182
- }
1183
-
1184
- .j-bg--blue {
1185
- background-color: var(--j-blue);
1186
- }
1187
-
1188
- .j-bg--green {
1189
- background-color: var(--j-green);
1190
- }
1191
-
1192
- .j-bg--gold {
1193
- background-color: var(--j-gold);
1194
- }
1195
-
1196
- .j-bg--orange {
1197
- background-color: var(--j-orange);
1198
- }
1199
-
1200
- .j-bg--purple {
1201
- background-color: var(--j-purple);
1202
- }
1203
-
1204
- .j-bg--dark-grey {
1205
- background-color: var(--j-dark-grey);
1206
- }
1207
-
1208
- .j-bg--darkest {
1209
- background-color: var(--j-darkest);
1210
- }
1211
-
1212
- /* ── App Shell ────────────────────────────────────────────────────────── */
1213
- /* Mobile-first 320px layout container for ALL Jimbo UI screens.
1214
- * Supports container queries for responsive breakpoints:
1215
- * compact ≤400px — iPhone SE, fixed 568px height, NO scroll
1216
- * cozy 401-750px — MCP inline / wider phones, flexible height, scroll OK
1217
- * wide 751px+ — tablet/desktop, two-column layouts (future)
1218
- *
1219
- * Default = compact (hard lock). Add .j-app--fluid to unlock for MCP/desktop.
1220
- */
1221
-
1222
- .j-app {
1223
- container-type: inline-size;
1224
- container-name: jimbo;
1225
- width: 375px;
1226
- max-width: 375px;
1227
- height: 667px;
1228
- max-height: 667px;
1229
- margin: 0 auto;
1230
- display: flex;
1231
- flex-direction: column;
1232
- background: var(--j-darkest);
1233
- font-family: var(--j-font);
1234
- color: var(--j-white);
1235
- overflow: hidden;
1236
- position: relative;
1237
- }
1238
-
1239
- /* Fluid modifier — unlocks the container for MCP / desktop contexts. */
1240
- .j-app--fluid {
1241
- width: 100%;
1242
- max-width: 750px;
1243
- height: auto;
1244
- max-height: none;
1245
- min-height: 400px;
1246
- }
1247
-
1248
- .j-app__content {
1249
- flex: 1;
1250
- min-height: 0;
1251
- overflow: hidden;
1252
- padding: var(--j-space-lg) var(--j-space-lg) var(--j-space-md);
1253
- display: flex;
1254
- flex-direction: column;
1255
- }
1256
-
1257
- .j-app__scroll {
1258
- flex: 1;
1259
- min-height: 0;
1260
- overflow-y: auto;
1261
- overflow-x: hidden;
1262
- padding: var(--j-space-lg) var(--j-space-lg) var(--j-space-md);
1263
- scrollbar-width: none;
1264
- -ms-overflow-style: none;
1265
- scroll-snap-type: y mandatory;
1266
- }
1267
-
1268
- .j-app__scroll > * {
1269
- scroll-snap-align: start;
1270
- }
1271
-
1272
- .j-app__scroll::-webkit-scrollbar {
1273
- display: none;
1274
- }
1275
-
1276
- .j-app__footer {
1277
- flex-shrink: 0;
1278
- padding: var(--j-space-md) var(--j-space-lg) var(--j-space-md);
1279
- border-top: 2px solid var(--j-black);
1280
- background: var(--j-dark-grey);
1281
- display: flex;
1282
- flex-direction: column;
1283
- gap: var(--j-space-sm);
1284
- }
1285
-
1286
- /* ── Cozy Breakpoint (401px+) ──────────────────────────────────────── */
1287
- /* Only activates when j-app--fluid is used AND container is wide enough. */
1288
-
1289
- @container jimbo (min-width: 401px) {
1290
- .j-app__content {
1291
- padding: var(--j-space-xl) var(--j-space-xl) var(--j-space-lg);
1292
- }
1293
-
1294
- .j-app__scroll {
1295
- padding: var(--j-space-xl) var(--j-space-xl) var(--j-space-lg);
1296
- }
1297
-
1298
- .j-app__footer {
1299
- padding: var(--j-space-md) var(--j-space-xl) var(--j-space-lg);
1300
- }
1301
- }
1302
-
1303
- @container jimbo (min-width: 401px) {
1304
- .j-stat-grid__value {
1305
- font-size: 20px;
1306
- }
1307
-
1308
- .j-info-card {
1309
- padding: var(--j-space-md) var(--j-space-lg);
1310
- }
1311
-
1312
- .j-info-card__title {
1313
- font-size: 14px;
1314
- }
1315
-
1316
- .j-section-header__tag {
1317
- font-size: 12px;
1318
- }
1319
- }
1320
-
1321
-
1322
- /* ── Section Header ──────────────────────────────────────────────────── */
1323
- /* Colored tag + horizontal rule — reusable section divider. */
1324
-
1325
- .j-section-header {
1326
- display: flex;
1327
- align-items: center;
1328
- gap: var(--j-space-md);
1329
- margin-bottom: var(--j-space-md);
1330
- }
1331
-
1332
- .j-section-header__tag {
1333
- font-family: var(--j-font);
1334
- font-size: 11px;
1335
- letter-spacing: 2px;
1336
- padding: 2px 8px;
1337
- color: var(--j-white);
1338
- border-radius: 3px;
1339
- text-shadow: var(--j-text-shadow);
1340
- flex-shrink: 0;
1341
- }
1342
-
1343
- .j-section-header__rule {
1344
- flex: 1;
1345
- height: 2px;
1346
- border-radius: 1px;
1347
- opacity: 0.33;
1348
- }
1349
-
1350
-
1351
- /* ── Stat Grid ───────────────────────────────────────────────────────── */
1352
- /* 3-column stat bar — reusable primitive. */
1353
-
1354
- .j-stat-grid {
1355
- background: var(--j-dark-grey);
1356
- border-radius: var(--j-radius-md);
1357
- padding: var(--j-space-md);
1358
- border: 2px solid var(--j-panel-edge);
1359
- box-shadow: 0 2px 0 var(--j-black);
1360
- display: grid;
1361
- grid-template-columns: 1fr 1fr 1fr;
1362
- gap: var(--j-space-md);
1363
- text-align: center;
1364
- }
1365
-
1366
- .j-stat-grid__value {
1367
- font-family: var(--j-font);
1368
- font-size: 16px;
1369
- color: var(--j-gold-text);
1370
- text-shadow: var(--j-text-shadow);
1371
- }
1372
-
1373
- .j-stat-grid__label {
1374
- font-family: var(--j-font);
1375
- font-size: 9px;
1376
- color: var(--j-grey);
1377
- letter-spacing: 2px;
1378
- margin-top: 2px;
1379
- }
1380
-
1381
-
1382
- /* ── Info Card ───────────────────────────────────────────────────────── */
1383
- /* Generic clickable row card — used for filter lists, seed lists, etc. */
1384
-
1385
- .j-info-card {
1386
- background: var(--j-dark-grey);
1387
- border-radius: var(--j-radius-md);
1388
- padding: var(--j-space-md);
1389
- box-shadow: 0 2px 0 var(--j-black);
1390
- display: flex;
1391
- align-items: center;
1392
- gap: var(--j-space-md);
1393
- cursor: pointer;
1394
- border: 2px solid transparent;
1395
- }
1396
-
1397
- .j-info-card:hover {
1398
- filter: brightness(1.08);
1399
- }
1400
-
1401
- .j-info-card__body {
1402
- flex: 1;
1403
- min-width: 0;
1404
- }
1405
-
1406
- .j-info-card__title {
1407
- font-family: var(--j-font);
1408
- font-size: 13px;
1409
- color: var(--j-white);
1410
- letter-spacing: 1px;
1411
- text-shadow: var(--j-text-shadow);
1412
- overflow: hidden;
1413
- text-overflow: ellipsis;
1414
- white-space: nowrap;
1415
- }
1416
-
1417
- .j-info-card__sub {
1418
- font-family: var(--j-font);
1419
- font-size: 9px;
1420
- color: var(--j-gold-text);
1421
- letter-spacing: 1px;
1422
- margin-top: 2px;
1423
- }
1424
-
1425
- .j-info-card__aside {
1426
- text-align: right;
1427
- flex-shrink: 0;
1428
- }
1429
-
1430
-
1431
- /* ── Inset Box ───────────────────────────────────────────────────────── */
1432
- /* Dark recessed content area — for log output, recent finds, etc. */
1433
-
1434
- .j-inset {
1435
- background: var(--j-dark-grey);
1436
- border-radius: var(--j-radius-md);
1437
- padding: var(--j-space-md) var(--j-space-md);
1438
- border: 2px solid var(--j-panel-edge);
1439
- box-shadow: 0 2px 0 var(--j-black);
1440
- font-family: var(--j-font);
1441
- font-size: 11px;
1442
- color: var(--j-grey);
1443
- letter-spacing: 1px;
1444
- line-height: 1.7;
1445
- }
1446
-
1447
-
1448
- /* ── Wordmark ────────────────────────────────────────────────────────── */
1449
- /* Title + subtitle hero block. */
1450
-
1451
- .j-wordmark {
1452
- text-align: center;
1453
- margin-bottom: var(--j-space-xl);
1454
- }
1455
-
1456
- .j-wordmark__title {
1457
- font-family: var(--j-font);
1458
- font-size: 32px;
1459
- letter-spacing: 3px;
1460
- line-height: 1;
1461
- color: var(--j-gold-text);
1462
- text-shadow: 2px 2px 0 rgba(0, 0, 0, 0.8);
1463
- }
1464
-
1465
- .j-wordmark__sub {
1466
- font-family: var(--j-font);
1467
- font-size: 14px;
1468
- letter-spacing: 4px;
1469
- color: var(--j-grey);
1470
- margin-top: 4px;
1471
- text-shadow: var(--j-text-shadow);
1472
- }
1473
-
1474
-
1475
- /* ── Seed Input ───────────────────────────────────────────────────────── */
1476
-
1477
- .j-seed-input {
1478
- display: flex;
1479
- flex-direction: column;
1480
- gap: var(--j-space-sm);
1481
- }
1482
-
1483
- .j-seed-input__field {
1484
- width: 100%;
1485
- padding: 8px 12px;
1486
- border-radius: var(--j-radius-md);
1487
- border: 2px solid var(--j-panel-edge);
1488
- background: var(--j-darkest);
1489
- color: var(--j-gold-text);
1490
- font-size: 18px;
1491
- font-family: var(--j-font);
1492
- font-weight: 400;
1493
- letter-spacing: 0.12em;
1494
- text-transform: uppercase;
1495
- text-shadow: var(--j-text-shadow);
1496
- outline: none;
1497
- transition: border-color 100ms ease;
1498
- box-sizing: border-box;
1499
- }
1500
-
1501
- .j-seed-input__field::placeholder {
1502
- color: var(--j-grey);
1503
- opacity: 0.6;
1504
- text-transform: uppercase;
1505
- letter-spacing: 0.06em;
1506
- font-size: 12px;
1507
- }
1508
-
1509
- .j-seed-input__field:focus {
1510
- border-color: var(--j-gold);
1511
- }
1512
-
1513
- .j-seed-input__field[data-valid="true"] {
1514
- border-color: var(--j-green);
1515
- }
1516
-
1517
- .j-seed-input__field[data-valid="false"] {
1518
- border-color: var(--j-red);
1519
- }
1520
-
1521
- .j-seed-input__field[data-valid="partial"] {
1522
- border-color: var(--j-panel-edge);
1523
- }
1524
-
1525
- .j-seed-input__hint {
1526
- font-family: var(--j-font);
1527
- font-size: 9px;
1528
- letter-spacing: 0.08em;
1529
- color: var(--j-grey);
1530
- text-shadow: var(--j-text-shadow);
1531
- }
1532
-
1533
-
1534
- /* ── Aesthetic Selector ──────────────────────────────────────────────── */
1535
-
1536
- .j-aesthetic-selector {
1537
- display: flex;
1538
- flex-direction: column;
1539
- gap: var(--j-space-sm);
1540
- }
1541
-
1542
- .j-aesthetic-selector__list {
1543
- display: flex;
1544
- flex-wrap: wrap;
1545
- gap: var(--j-space-sm);
1546
- }
1547
-
1548
- .j-aesthetic-pill {
1549
- padding: 4px 10px;
1550
- border-radius: var(--j-radius-md);
1551
- border: 2px solid var(--j-panel-edge);
1552
- background: var(--j-darkest);
1553
- color: var(--j-grey);
1554
- cursor: pointer;
1555
- font-size: 11px;
1556
- font-family: var(--j-font);
1557
- font-weight: 400;
1558
- letter-spacing: 0.04em;
1559
- text-shadow: var(--j-text-shadow);
1560
- transition: border-color 100ms ease, background 100ms ease, color 100ms ease;
1561
- box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.3);
1562
- }
1563
-
1564
- .j-aesthetic-pill:hover {
1565
- border-color: var(--j-gold);
1566
- color: var(--j-gold-text);
1567
- }
1568
-
1569
- .j-aesthetic-pill[data-active="true"] {
1570
- border-color: var(--j-gold);
1571
- background: rgba(228, 182, 67, 0.13);
1572
- color: var(--j-gold-text);
1573
- box-shadow: 0 0 0 1px var(--j-gold), 0 2px 0 0 rgba(0, 0, 0, 0.3);
1574
- }
1575
-
1576
-
1577
- /* ── Showcase ─────────────────────────────────────────────────────────── */
1578
-
1579
- .j-showcase {
1580
- width: 100%;
1581
- height: 100%;
1582
- background: var(--j-darkest);
1583
- display: flex;
1584
- flex-direction: column;
1585
- font-family: var(--j-font);
1586
- color: var(--j-white);
1587
- overflow: hidden;
1588
- }
1589
-
1590
- .j-showcase__scroll {
1591
- flex: 1;
1592
- min-height: 0;
1593
- overflow-y: auto;
1594
- padding: 18px 14px 10px;
1595
- }
1596
-
1597
- .j-showcase__wordmark {
1598
- text-align: center;
1599
- margin-bottom: 18px;
1600
- }
1601
-
1602
- .j-showcase__wordmark-title {
1603
- font-size: 32px;
1604
- letter-spacing: 3px;
1605
- line-height: 1;
1606
- color: var(--j-gold-text);
1607
- text-shadow: 2px 2px 0 rgba(0, 0, 0, 0.8);
1608
- }
1609
-
1610
- .j-showcase__wordmark-sub {
1611
- font-size: 14px;
1612
- letter-spacing: 4px;
1613
- color: var(--j-grey);
1614
- margin-top: 4px;
1615
- text-shadow: var(--j-text-shadow);
1616
- }
1617
-
1618
- .j-showcase__stats {
1619
- background: var(--j-dark-grey);
1620
- border-radius: var(--j-radius-md);
1621
- padding: 10px;
1622
- border: 2px solid var(--j-panel-edge);
1623
- box-shadow: 0 2px 0 var(--j-black);
1624
- display: grid;
1625
- grid-template-columns: 1fr 1fr 1fr;
1626
- gap: var(--j-space-md);
1627
- text-align: center;
1628
- margin-bottom: var(--j-space-xl);
1629
- }
1630
-
1631
- .j-showcase__stat-value {
1632
- font-size: 16px;
1633
- color: var(--j-gold-text);
1634
- text-shadow: var(--j-text-shadow);
1635
- }
1636
-
1637
- .j-showcase__stat-label {
1638
- font-size: 9px;
1639
- color: var(--j-grey);
1640
- letter-spacing: 2px;
1641
- margin-top: 2px;
1642
- }
1643
-
1644
- .j-showcase__section-header {
1645
- display: flex;
1646
- align-items: center;
1647
- gap: var(--j-space-md);
1648
- margin-bottom: var(--j-space-md);
1649
- }
1650
-
1651
- .j-showcase__section-tag {
1652
- font-size: 11px;
1653
- letter-spacing: 2px;
1654
- padding: 2px 8px;
1655
- color: var(--j-white);
1656
- border-radius: 3px;
1657
- text-shadow: var(--j-text-shadow);
1658
- }
1659
-
1660
- .j-showcase__section-rule {
1661
- flex: 1;
1662
- height: 2px;
1663
- border-radius: 1px;
1664
- }
1665
-
1666
- .j-showcase__filter-list {
1667
- display: flex;
1668
- flex-direction: column;
1669
- gap: var(--j-space-md);
1670
- margin-bottom: var(--j-space-xl);
1671
- }
1672
-
1673
- .j-showcase__filter-card {
1674
- background: var(--j-dark-grey);
1675
- border-radius: var(--j-radius-md);
1676
- padding: 10px;
1677
- box-shadow: 0 2px 0 var(--j-black);
1678
- display: flex;
1679
- align-items: center;
1680
- gap: 10px;
1681
- cursor: pointer;
1682
- }
1683
-
1684
- .j-showcase__filter-sprites {
1685
- display: flex;
1686
- gap: 2px;
1687
- }
1688
-
1689
- .j-showcase__filter-sprite {
1690
- width: 30px;
1691
- height: 40px;
1692
- display: flex;
1693
- align-items: center;
1694
- justify-content: center;
1695
- }
1696
-
1697
- .j-showcase__filter-info {
1698
- flex: 1;
1699
- min-width: 0;
1700
- }
1701
-
1702
- .j-showcase__filter-name {
1703
- font-size: 13px;
1704
- color: var(--j-white);
1705
- letter-spacing: 1px;
1706
- text-shadow: var(--j-text-shadow);
1707
- overflow: hidden;
1708
- text-overflow: ellipsis;
1709
- white-space: nowrap;
1710
- }
1711
-
1712
- .j-showcase__filter-author {
1713
- font-size: 9px;
1714
- color: var(--j-gold-text);
1715
- letter-spacing: 1px;
1716
- margin-top: 2px;
1717
- }
1718
-
1719
- .j-showcase__filter-hits {
1720
- text-align: right;
1721
- }
1722
-
1723
- .j-showcase__filter-hits-value {
1724
- font-size: 14px;
1725
- text-shadow: var(--j-text-shadow);
1726
- }
1727
-
1728
- .j-showcase__filter-hits-label {
1729
- font-size: 8px;
1730
- color: var(--j-grey);
1731
- letter-spacing: 1px;
1732
- }
1733
-
1734
- .j-showcase__recent {
1735
- background: var(--j-dark-grey);
1736
- border-radius: var(--j-radius-md);
1737
- padding: 8px 10px;
1738
- border: 2px solid var(--j-panel-edge);
1739
- box-shadow: 0 2px 0 var(--j-black);
1740
- font-size: 11px;
1741
- color: var(--j-grey);
1742
- letter-spacing: 1px;
1743
- line-height: 1.7;
1744
- }
1745
-
1746
- .j-showcase__actions {
1747
- padding: 8px 10px 10px;
1748
- border-top: 2px solid var(--j-black);
1749
- background: var(--j-dark-grey);
1750
- display: flex;
1751
- flex-direction: column;
1752
- gap: 6px;
1753
- }
1754
-
1755
-
1756
- /* ── Footer suit animation ────────────────────────────────────────────── */
1757
-
1758
- .j-footer__suits {
1759
- display: inline-flex;
1760
- align-items: center;
1761
- }
1762
-
1763
- .j-footer__suit-stage {
1764
- position: relative;
1765
- display: inline-block;
1766
- width: 1.5em;
1767
- height: 1em;
1768
- vertical-align: middle;
1769
- }
1770
-
1771
- .j-footer__suit-char {
1772
- position: absolute;
1773
- inset: 0;
1774
- display: inline-flex;
1775
- align-items: center;
1776
- justify-content: center;
1777
- opacity: 0;
1778
- animation-duration: 5s;
1779
- animation-delay: 0s;
1780
- animation-iteration-count: infinite;
1781
- animation-timing-function: ease-out;
1782
- }
1783
-
1784
-
1785
- /* ── Copy row label ───────────────────────────────────────────────────── */
1786
-
1787
- .j-copy-row__label {
1788
- letter-spacing: 2px;
1789
- }
1790
-
1791
-
1792
- /* ── Motely version badge ─────────────────────────────────────────────── */
1793
-
1794
- .j-motely-badge {
1795
- display: inline-flex;
1796
- align-items: center;
1797
- gap: 6px;
1798
- }
1799
-
1800
- .j-motely-badge--chip {
1801
- padding: 3px 8px;
1802
- border-radius: var(--j-radius-sm);
1803
- background: var(--j-darkest);
1804
- border: 1px solid var(--j-panel-edge);
1805
- }
1806
-
1807
- /* ── Font Dance Animation ─────────────────────────────────────────────── */
1808
-
1809
- @keyframes j-font-dance {
1810
- 0% {
1811
- transform: translateY(0);
1812
- }
1813
-
1814
- 25% {
1815
- transform: translateY(-1px);
1816
- }
1817
-
1818
- 50% {
1819
- transform: translateY(0);
1820
- }
1821
-
1822
- 75% {
1823
- transform: translateY(1px);
1824
- }
1825
-
1826
- 100% {
1827
- transform: translateY(0);
1828
- }
1829
- }
1830
-
1831
- .j-text--dance-container {
1832
- display: inline-flex;
1833
- }
1834
-
1835
- .j-font-dance-char {
1836
- display: inline-block;
1837
- animation: j-font-dance 3s infinite ease-in-out;
1838
- }
1839
-
1840
- .hide-scrollbar {
1841
- scrollbar-width: none;
1842
- -ms-overflow-style: none;
1843
- }
1844
-
1845
- .hide-scrollbar::-webkit-scrollbar {
1846
- display: none;
1847
- }
1848
-
1849
- .j-juice-hover {
1850
- transition: transform 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
1851
- }
1852
-
1853
- .j-juice-hover:hover {
1854
- transform: scale(1.05) translateY(-2px);
1855
- z-index: 5;
1856
- }
1
+ @font-face{font-family:m6x11plus;src:url(/fonts/m6x11plus.otf)format("opentype");font-weight:400;font-style:normal;font-display:swap}*{scrollbar-width:none!important;-ms-overflow-style:none!important}::-webkit-scrollbar{display:none!important}:root{--j-red:#fe5148;--j-blue:#0093ff;--j-green:#429f79;--j-orange:#ff9800;--j-gold:#e4b643;--j-purple:#9e74ce;--j-dark-red:#a02721;--j-dark-blue:#0057a1;--j-dark-orange:#a05b00;--j-dark-green:#215f46;--j-dark-purple:#5e437e;--j-dark-grey:#3a5055;--j-darkest:#1e2b2d;--j-grey:#708386;--j-teal-grey:#404c4e;--j-panel-edge:#1e2e32;--j-inner-border:#334461;--j-border-silver:#b9c2d2;--j-border-south:#777e89;--j-gold-text:#e4b643;--j-green-text:#35bd86;--j-orange-text:#ff8f00;--j-white:#fff;--j-black:#000;--j-tarot-btn:#9e74ce;--j-planet-btn:#00a7ca;--j-spectral-btn:#2e76fd;--j-tarot-btn-dark:#5e437e;--j-planet-btn-dark:#00657c;--j-spectral-btn-dark:#14449e;--j-font:"m6x11plus", "Courier New", monospace;--j-font-code:"JetBrains Mono", "Cascadia Code", "Fira Code", "SF Mono", SFMono-Regular, Menlo, Consolas, ui-monospace, "Courier New", monospace;--j-text-shadow:1px 1px 0 #000c;--j-space-xs:2px;--j-space-sm:4px;--j-space-md:8px;--j-space-lg:12px;--j-space-xl:16px;--j-radius-sm:4px;--j-radius-md:6px;--j-radius-lg:8px;--j-radius-pill:10px;--j-ease-bounce:cubic-bezier(.34, 1.56, .64, 1);--j-press-y:3px;--j-press-speed:55ms}.j-text{font-family:var(--j-font);text-shadow:var(--j-text-shadow);color:var(--j-white);font-weight:400;line-height:1.2}.j-text--no-shadow{text-shadow:none}.j-text--upper{text-transform:uppercase;letter-spacing:.08em}.j-text--dance-container{white-space:pre-wrap;display:inline-block}@keyframes j-font-dance{0%{transform:translateY(0)}25%{transform:translateY(-1px)}50%{transform:translateY(0)}75%{transform:translateY(1px)}to{transform:translateY(0)}}.j-text--display{letter-spacing:.04em;font-size:26px;line-height:1}.j-text--xl{letter-spacing:.04em;font-size:24px}.j-text--lg{letter-spacing:.04em;font-size:18px}.j-text--heading{letter-spacing:.08em;font-size:14px;line-height:1.2}.j-text--md{font-size:14px}.j-text--sm{font-size:12px}.j-text--body{letter-spacing:.05em;font-size:11px;line-height:1.3}.j-text--xs{font-size:10px}.j-text--label{letter-spacing:.1em;text-transform:uppercase;font-size:9px;line-height:1}.j-text--micro{letter-spacing:.08em;font-size:8px;line-height:1}.j-text--default{color:var(--j-white)}.j-text--mult,.j-text--red{color:var(--j-red)}.j-text--chips,.j-text--blue{color:var(--j-blue)}.j-text--gold{color:var(--j-gold-text)}.j-text--green{color:var(--j-green-text)}.j-text--orange{color:var(--j-orange-text)}.j-text--purple{color:var(--j-purple)}.j-text--grey{color:var(--j-grey)}.j-panel{background-color:var(--j-dark-grey);border:2px solid var(--j-border-silver);border-bottom-color:var(--j-border-south);border-radius:var(--j-radius-md);padding:var(--j-space-lg);flex-direction:column;align-items:stretch;display:flex;position:relative;overflow:visible;box-shadow:0 3px #0000008c,inset 0 0 0 1px #ffffff0a}.j-panel__body{flex:1;overflow:auto}.j-panel__back{margin-top:var(--j-space-lg);padding-top:var(--j-space-md);flex-shrink:0}.j-back-btn .j-btn__face{padding-top:8px;padding-bottom:8px}.j-inner-panel{background-color:var(--j-inner-border);border:2px solid var(--j-panel-edge);border-radius:var(--j-radius-md);padding:var(--j-space-lg)}.j-btn{appearance:none;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;padding:0;display:inline-block;position:relative}.j-btn:after{content:"";z-index:10;background:0 0;position:absolute;inset:0}.j-btn--full{width:100%}.j-btn--disabled{opacity:.55;cursor:not-allowed}.j-btn__face{border-radius:var(--j-radius-md);background:var(--j-btn-face-color,var(--j-orange));text-align:center;text-shadow:1px 1px #000c;box-shadow:0 var(--j-press-y) 0 0 #0009;transition:transform var(--j-press-speed) linear, box-shadow var(--j-press-speed) linear;position:relative;transform:translate(0)}.j-btn[data-pressed=true] .j-btn__face,.j-btn:active:not(:disabled):not(.j-btn--disabled) .j-btn__face{transform:translateY(var(--j-press-y));box-shadow:0 0 #0009}.j-btn:not(.j-btn--disabled):hover .j-btn__face{filter:brightness(1.1)}.j-btn--xs .j-btn__face{padding:4px 8px;font-size:11px}.j-btn--sm .j-btn__face{padding:6px 12px;font-size:13px}.j-btn--md .j-btn__face{padding:10px 18px;font-size:16px}.j-btn--lg .j-btn__face{padding:8px 18px;font-size:20px}.j-btn--orange{--j-btn-face-color:var(--j-orange)}.j-btn--red{--j-btn-face-color:var(--j-red)}.j-btn--blue{--j-btn-face-color:var(--j-blue)}.j-btn--green{--j-btn-face-color:var(--j-green)}.j-btn--tarot{--j-btn-face-color:var(--j-tarot-btn)}.j-btn--planet{--j-btn-face-color:var(--j-planet-btn)}.j-btn--spectral{--j-btn-face-color:var(--j-spectral-btn)}.j-badge{border-radius:var(--j-radius-sm);font-family:var(--j-font);letter-spacing:.04em;white-space:nowrap;text-shadow:1px 1px #000c;border:none;align-items:center;font-weight:400;display:inline-flex}.j-badge--sm{padding:2px 6px;font-size:10px}.j-badge--md{padding:4px 8px;font-size:12px}.j-badge--dark{background:var(--j-darkest);color:var(--j-white)}.j-badge--blue{background:var(--j-blue);color:var(--j-white)}.j-badge--red{background:var(--j-red);color:var(--j-white)}.j-badge--green{background:var(--j-green);color:var(--j-white)}.j-badge--orange{background:var(--j-orange);color:var(--j-white)}.j-badge--purple{background:var(--j-purple);color:var(--j-white)}.j-tabs{gap:var(--j-space-sm);scrollbar-width:none;flex-wrap:nowrap;justify-content:center;align-items:flex-end;width:100%;display:flex;overflow-x:auto}.j-tabs::-webkit-scrollbar{display:none}.j-tab{flex-direction:column;flex:none;align-items:center;display:flex;position:relative}.j-tab__indicator{justify-content:center;align-items:flex-end;height:10px;margin-bottom:3px;display:flex}.j-tab__indicator svg{fill:var(--j-red);display:block}.j-tab__indicator[data-active=true]{animation:.6s ease-in-out infinite jimbo-bounce}.j-tab__indicator[data-active=false]{visibility:hidden}.j-tab__btn{appearance:none;cursor:pointer;border-radius:var(--j-radius-md);background:var(--j-red);min-height:28px;color:var(--j-white);text-align:center;text-shadow:1px 1px #000c;border:none;outline:none;padding:6px 14px;transition:filter 80ms linear,opacity 80ms linear;box-shadow:0 3px #0009}.j-tab__btn[data-active=true]{opacity:1}.j-tab__btn[data-active=true]:hover{background:var(--j-red)}.j-tab__btn[data-active=false]:hover{background:var(--j-red);filter:brightness(1.08)}@keyframes jimbo-bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}.j-vtabs{gap:var(--j-space-sm);flex-direction:column;display:flex}.j-vtab{cursor:pointer;writing-mode:vertical-rl;text-orientation:mixed;background-color:#0000;border:none;border-radius:8px 0 0 8px;padding:16px 8px;transition:none;transform:rotate(180deg)}.j-vtab[data-active=true]{background-color:var(--j-gold,#e4b643);color:var(--j-black,#000)}.j-toggle-list{gap:var(--j-space-sm);flex-direction:column;display:flex}.j-toggle-list__title{font-family:var(--j-font);color:var(--j-grey);text-transform:uppercase;letter-spacing:.04em;margin-bottom:var(--j-space-sm);font-size:12px}.j-toggle-item{align-items:center;gap:var(--j-space-md);border-radius:var(--j-radius-sm);cursor:pointer;font-family:var(--j-font);color:var(--j-white);text-transform:uppercase;letter-spacing:.04em;text-align:left;background:#ffffff0d;border:1px solid #0003;justify-content:flex-start;padding:6px 8px;display:flex}.j-toggle-check{border:1px solid var(--j-dark-grey);flex-shrink:0;width:10px;height:10px;box-shadow:inset 0 1px 2px #00000080}.j-toggle-check[data-on=true]{background:var(--j-orange)}.j-toggle-check[data-on=false]{background:var(--j-darkest)}.j-tooltip{border-radius:var(--j-radius-md);background:var(--j-darkest);border:2px solid var(--j-border-silver);max-width:280px;color:var(--j-white);pointer-events:none;z-index:9999;padding:6px 10px;transition:opacity .12s;position:fixed;box-shadow:0 2px #000c}.j-items-start{align-items:flex-start}.j-justify-between{justify-content:space-between}.j-h-full{height:100%}.j-flank{justify-content:center;align-items:stretch;gap:var(--j-space-md);width:100%;display:flex;position:relative}.j-flank__content{flex-direction:column;flex:1;min-width:0;display:flex;position:relative}.j-flank__btn{width:40px;margin:var(--j-press-y) 0;border-radius:var(--j-radius-lg);cursor:pointer;background-color:var(--j-red);color:var(--j-white);text-shadow:1px 1px #000c;box-shadow:0 var(--j-press-y) 0 0 var(--j-dark-red);transition:transform var(--j-press-speed) ease, box-shadow var(--j-press-speed) ease, background-color var(--j-press-speed) ease;border:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.j-flank__btn:disabled{background-color:var(--j-dark-red);cursor:default;box-shadow:none}.j-copy-row{gap:var(--j-space-sm);flex-direction:column;display:flex}.j-copy-row__field{align-items:center;gap:var(--j-space-md);display:flex}.j-copy-row__value{background:var(--j-darkest);border:2px solid var(--j-panel-edge);border-radius:var(--j-radius-sm);word-break:break-all;flex:1;padding:6px 10px}.j-copy-row__btn{font-family:var(--j-font);letter-spacing:.08em;border-radius:var(--j-radius-sm);cursor:pointer;flex-shrink:0;padding:4px 12px;font-size:11px;transition:color .15s,background .15s,border-color .15s}.j-copy-row__btn[data-copied=false]{color:var(--j-gold-text);border:1px solid var(--j-gold-text);background:#e4b6431f}.j-copy-row__btn[data-copied=true]{color:var(--j-green-text);border:1px solid var(--j-green-text);background:#35bd861f}.j-code-block{background-color:var(--j-darkest);border:2px solid var(--j-panel-edge);border-radius:var(--j-radius-lg);flex-direction:column;display:flex;overflow:hidden;box-shadow:0 3px #00000080}.j-code-block__header{border-bottom:1px solid var(--j-inner-border);justify-content:space-between;align-items:center;padding:8px 12px;display:flex}.j-code-block__meta{align-items:center;gap:8px;display:flex}.j-code-block__filename{opacity:.6;font-size:10px}.j-code-block__lang{color:#60a5fa;background:#0006;border-radius:3px;padding:1px 6px;font-size:9px}.j-code-block__copy{cursor:pointer;background:0 0;border:none;padding:4px;display:flex}.j-code-block__copy[data-copied=false]{color:#ffffff80}.j-code-block__copy[data-copied=true]{color:#4ade80}.j-code-block__pre{font-family:var(--j-font-code);color:#f6f0d5;margin:0;padding:12px;font-size:.875rem;line-height:1.6;overflow-x:auto}.j-filter-bar{padding:var(--j-space-xl);background-color:var(--j-dark-grey);border:4px solid var(--j-border-silver);box-shadow:0 3px 0 0 var(--j-border-south);border-radius:var(--j-radius-lg);flex-wrap:wrap;gap:24px;display:flex;position:relative}.j-filter-bar__field{flex:1;min-width:200px;margin-top:10px;position:relative}.j-filter-bar__pill{background-color:var(--j-red);border:2px solid var(--j-dark-red);border-radius:var(--j-radius-md);z-index:2;padding:4px 12px;position:absolute;top:-14px;left:16px}.j-filter-bar__input{background-color:var(--j-darkest);border:none;border-bottom:4px solid var(--j-panel-edge);border-radius:var(--j-radius-lg);width:100%;color:var(--j-white);font-family:var(--j-font);letter-spacing:.08em;outline:none;padding:14px 16px 14px 48px;font-size:20px}.j-filter-bar__search-icon{pointer-events:none;width:48px;color:var(--j-blue);z-index:1;justify-content:center;align-items:center;display:flex;position:absolute;top:0;bottom:0;left:0}.j-filter-bar__select{appearance:none;background-color:var(--j-orange);color:var(--j-white);border:none;border-bottom:4px solid var(--j-dark-orange);border-radius:var(--j-radius-lg);cursor:pointer;font-family:var(--j-font);letter-spacing:.08em;text-align:center;outline:none;min-width:200px;padding:14px 48px 14px 24px;font-size:18px}.j-filter-bar__sort-icon{pointer-events:none;color:var(--j-white);opacity:.85;position:absolute;top:50%;right:16px;transform:translateY(-50%)}.j-flank{justify-content:center;align-items:center;gap:var(--j-space-md);width:100%;display:flex}.j-flank__content{flex:1;justify-content:center;display:flex}.j-flank__btn{background:var(--j-red);color:var(--j-white);border-radius:var(--j-radius-sm);padding:var(--j-space-sm) var(--j-space-xs);cursor:pointer;box-shadow:0 var(--j-press-y) 0 var(--j-dark-grey);border:none;justify-content:center;align-items:center;transition:transform 50ms,box-shadow 50ms,opacity .2s;display:flex}.j-flank__btn[data-pressed=true]{transform:translateY(var(--j-press-y));box-shadow:0 0 0 var(--j-dark-grey)}.j-flank__btn:disabled{opacity:.5;cursor:not-allowed;box-shadow:0 var(--j-press-y) 0 var(--j-dark-grey);transform:none}@keyframes jimbo-modal-in{0%{opacity:0;transform:scale(.88)}to{opacity:1;transform:scale(1)}}.j-modal-overlay{z-index:1000;padding:var(--j-space-md);background:#000000d1;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.j-modal{border-radius:12px;flex-direction:column;width:100%;max-width:345px;max-height:calc(100% - 32px);animation:.14s cubic-bezier(.2,0,.2,1.4) both jimbo-modal-in;display:flex;overflow:hidden}.j-modal .j-panel__body{min-height:0;overflow-y:auto}.j-modal__title{text-align:center;margin:0 0 var(--j-space-xl);flex-shrink:0}.j-footer{z-index:9998;pointer-events:auto;width:100%;position:fixed;bottom:0;left:0;right:0}.j-footer__bar{text-align:center;background:#000000e6;border-top:1px solid #ffffff1a;width:100%;padding:0 1rem 3px}.j-footer__text{font-family:var(--j-font);color:#fff;flex-wrap:wrap;justify-content:center;align-items:center;gap:0 .5rem;margin:0;font-size:clamp(11px,.8vw + 8px,14px);display:flex}.j-footer__link{color:var(--j-gold);text-decoration:none}.j-floating{z-index:20;position:absolute}.j-glow--must{box-shadow:0 0 0 2px var(--j-blue), 0 0 10px var(--j-blue);animation:1.6s ease-in-out infinite j-glow-pulse}.j-glow--should{box-shadow:0 0 0 2px var(--j-gold), 0 0 10px var(--j-gold);animation:1.6s ease-in-out infinite j-glow-pulse}@keyframes j-glow-pulse{0%,to{opacity:.55}50%{opacity:1}}.j-flex{display:flex}.j-flex-col{flex-direction:column;display:flex}.j-flex-wrap{flex-wrap:wrap}.j-items-center{align-items:center}.j-justify-center{justify-content:center}.j-gap-xs{gap:var(--j-space-xs)}.j-gap-sm{gap:var(--j-space-sm)}.j-gap-md{gap:var(--j-space-md)}.j-gap-lg{gap:var(--j-space-lg)}.j-gap-xl{gap:var(--j-space-xl)}.j-w-full{width:100%}.j-shrink-0{flex-shrink:0}.j-flex-1{flex:1}.j-min-w-0{min-width:0}.j-text-center{text-align:center}.j-overflow-hidden{overflow:hidden}.j-overflow-auto{overflow:auto}.j-relative{position:relative}.j-border--red{border-color:var(--j-red)}.j-border--blue{border-color:var(--j-blue)}.j-border--green{border-color:var(--j-green)}.j-border--gold{border-color:var(--j-gold)}.j-border--orange{border-color:var(--j-orange)}.j-border--purple{border-color:var(--j-purple)}.j-bg--red{background-color:var(--j-red)}.j-bg--blue{background-color:var(--j-blue)}.j-bg--green{background-color:var(--j-green)}.j-bg--gold{background-color:var(--j-gold)}.j-bg--orange{background-color:var(--j-orange)}.j-bg--purple{background-color:var(--j-purple)}.j-bg--dark-grey{background-color:var(--j-dark-grey)}.j-bg--darkest{background-color:var(--j-darkest)}.j-app{background:var(--j-darkest);width:375px;max-width:375px;height:667px;max-height:667px;font-family:var(--j-font);color:var(--j-white);flex-direction:column;margin:0 auto;display:flex;position:relative;overflow:hidden;container:jimbo/inline-size}.j-app--fluid{width:100%;max-width:750px;height:auto;min-height:400px;max-height:none}.j-app__content{min-height:0;padding:var(--j-space-lg) var(--j-space-lg) var(--j-space-md);flex-direction:column;flex:1;display:flex;overflow:hidden}.j-app__scroll{min-height:0;padding:var(--j-space-lg) var(--j-space-lg) var(--j-space-md);scrollbar-width:none;-ms-overflow-style:none;flex:1;overflow:hidden auto}.j-app__scroll::-webkit-scrollbar{display:none}.j-app__footer{padding:var(--j-space-md) var(--j-space-lg) var(--j-space-md);border-top:2px solid var(--j-black);background:var(--j-dark-grey);gap:var(--j-space-sm);flex-direction:column;flex-shrink:0;display:flex}@container jimbo (width>=401px){.j-app__content,.j-app__scroll{padding:var(--j-space-xl) var(--j-space-xl) var(--j-space-lg)}.j-app__footer{padding:var(--j-space-md) var(--j-space-xl) var(--j-space-lg)}.j-stat-grid__value{font-size:20px}.j-info-card{padding:var(--j-space-md) var(--j-space-lg)}.j-info-card__title{font-size:14px}.j-section-header__tag{font-size:12px}}.j-section-header{align-items:center;gap:var(--j-space-md);margin-bottom:var(--j-space-md);display:flex}.j-section-header__tag{font-family:var(--j-font);letter-spacing:2px;color:var(--j-white);text-shadow:var(--j-text-shadow);border-radius:3px;flex-shrink:0;padding:2px 8px;font-size:11px}.j-section-header__rule{opacity:.33;border-radius:1px;flex:1;height:2px}.j-stat-grid{background:var(--j-dark-grey);border-radius:var(--j-radius-md);padding:var(--j-space-md);border:2px solid var(--j-panel-edge);box-shadow:0 2px 0 var(--j-black);gap:var(--j-space-md);text-align:center;grid-template-columns:1fr 1fr 1fr;display:grid}.j-stat-grid__value{font-family:var(--j-font);color:var(--j-gold-text);text-shadow:var(--j-text-shadow);font-size:16px}.j-stat-grid__label{font-family:var(--j-font);color:var(--j-grey);letter-spacing:2px;margin-top:2px;font-size:9px}.j-info-card{background:var(--j-dark-grey);border-radius:var(--j-radius-md);padding:var(--j-space-md);box-shadow:0 2px 0 var(--j-black);align-items:center;gap:var(--j-space-md);cursor:pointer;border:2px solid #0000;display:flex}.j-info-card:hover{filter:brightness(1.08)}.j-info-card__body{flex:1;min-width:0}.j-info-card__title{font-family:var(--j-font);color:var(--j-white);letter-spacing:1px;text-shadow:var(--j-text-shadow);text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.j-info-card__sub{font-family:var(--j-font);color:var(--j-gold-text);letter-spacing:1px;margin-top:2px;font-size:9px}.j-info-card__aside{text-align:right;flex-shrink:0}.j-inset{background:var(--j-dark-grey);border-radius:var(--j-radius-md);padding:var(--j-space-md) var(--j-space-md);border:2px solid var(--j-panel-edge);box-shadow:0 2px 0 var(--j-black);font-family:var(--j-font);color:var(--j-grey);letter-spacing:1px;font-size:11px;line-height:1.7}.j-wordmark{text-align:center;margin-bottom:var(--j-space-xl)}.j-wordmark__title{font-family:var(--j-font);letter-spacing:3px;color:var(--j-gold-text);text-shadow:2px 2px #000c;font-size:32px;line-height:1}.j-wordmark__sub{font-family:var(--j-font);letter-spacing:4px;color:var(--j-grey);text-shadow:var(--j-text-shadow);margin-top:4px;font-size:14px}.j-seed-input{gap:var(--j-space-sm);flex-direction:column;display:flex}.j-seed-input__field{border-radius:var(--j-radius-md);border:2px solid var(--j-panel-edge);background:var(--j-darkest);width:100%;color:var(--j-gold-text);font-size:18px;font-family:var(--j-font);letter-spacing:.12em;text-transform:uppercase;text-shadow:var(--j-text-shadow);box-sizing:border-box;outline:none;padding:8px 12px;font-weight:400;transition:border-color .1s}.j-seed-input__field::placeholder{color:var(--j-grey);opacity:.6;text-transform:uppercase;letter-spacing:.06em;font-size:12px}.j-seed-input__field:focus{border-color:var(--j-gold)}.j-seed-input__field[data-valid=true]{border-color:var(--j-green)}.j-seed-input__field[data-valid=false]{border-color:var(--j-red)}.j-seed-input__field[data-valid=partial]{border-color:var(--j-panel-edge)}.j-seed-input__hint{font-family:var(--j-font);letter-spacing:.08em;color:var(--j-grey);text-shadow:var(--j-text-shadow);font-size:9px}.j-aesthetic-selector{gap:var(--j-space-sm);flex-direction:column;display:flex}.j-aesthetic-selector__list{gap:var(--j-space-sm);flex-wrap:wrap;display:flex}.j-aesthetic-pill{border-radius:var(--j-radius-md);border:2px solid var(--j-panel-edge);background:var(--j-darkest);color:var(--j-grey);cursor:pointer;font-size:11px;font-family:var(--j-font);letter-spacing:.04em;text-shadow:var(--j-text-shadow);padding:4px 10px;font-weight:400;transition:border-color .1s,background .1s,color .1s;box-shadow:0 2px #0000004d}.j-aesthetic-pill:hover{border-color:var(--j-gold);color:var(--j-gold-text)}.j-aesthetic-pill[data-active=true]{border-color:var(--j-gold);color:var(--j-gold-text);box-shadow:0 0 0 1px var(--j-gold), 0 2px 0 0 #0000004d;background:#e4b64321}.j-showcase{background:var(--j-darkest);width:100%;height:100%;font-family:var(--j-font);color:var(--j-white);flex-direction:column;display:flex;overflow:hidden}.j-showcase__scroll{flex:1;min-height:0;padding:18px 14px 10px;overflow-y:auto}.j-showcase__wordmark{text-align:center;margin-bottom:18px}.j-showcase__wordmark-title{letter-spacing:3px;color:var(--j-gold-text);text-shadow:2px 2px #000c;font-size:32px;line-height:1}.j-showcase__wordmark-sub{letter-spacing:4px;color:var(--j-grey);text-shadow:var(--j-text-shadow);margin-top:4px;font-size:14px}.j-showcase__stats{background:var(--j-dark-grey);border-radius:var(--j-radius-md);border:2px solid var(--j-panel-edge);box-shadow:0 2px 0 var(--j-black);gap:var(--j-space-md);text-align:center;margin-bottom:var(--j-space-xl);grid-template-columns:1fr 1fr 1fr;padding:10px;display:grid}.j-showcase__stat-value{color:var(--j-gold-text);text-shadow:var(--j-text-shadow);font-size:16px}.j-showcase__stat-label{color:var(--j-grey);letter-spacing:2px;margin-top:2px;font-size:9px}.j-showcase__section-header{align-items:center;gap:var(--j-space-md);margin-bottom:var(--j-space-md);display:flex}.j-showcase__section-tag{letter-spacing:2px;color:var(--j-white);text-shadow:var(--j-text-shadow);border-radius:3px;padding:2px 8px;font-size:11px}.j-showcase__section-rule{border-radius:1px;flex:1;height:2px}.j-showcase__filter-list{gap:var(--j-space-md);margin-bottom:var(--j-space-xl);flex-direction:column;display:flex}.j-showcase__filter-card{background:var(--j-dark-grey);border-radius:var(--j-radius-md);box-shadow:0 2px 0 var(--j-black);cursor:pointer;align-items:center;gap:10px;padding:10px;display:flex}.j-showcase__filter-sprites{gap:2px;display:flex}.j-showcase__filter-sprite{justify-content:center;align-items:center;width:30px;height:40px;display:flex}.j-showcase__filter-info{flex:1;min-width:0}.j-showcase__filter-name{color:var(--j-white);letter-spacing:1px;text-shadow:var(--j-text-shadow);text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.j-showcase__filter-author{color:var(--j-gold-text);letter-spacing:1px;margin-top:2px;font-size:9px}.j-showcase__filter-hits{text-align:right}.j-showcase__filter-hits-value{text-shadow:var(--j-text-shadow);font-size:14px}.j-showcase__filter-hits-label{color:var(--j-grey);letter-spacing:1px;font-size:8px}.j-showcase__recent{background:var(--j-dark-grey);border-radius:var(--j-radius-md);border:2px solid var(--j-panel-edge);box-shadow:0 2px 0 var(--j-black);color:var(--j-grey);letter-spacing:1px;padding:8px 10px;font-size:11px;line-height:1.7}.j-showcase__actions{border-top:2px solid var(--j-black);background:var(--j-dark-grey);flex-direction:column;gap:6px;padding:8px 10px 10px;display:flex}.j-footer__suits{align-items:center;display:inline-flex}.j-footer__suit-stage{vertical-align:middle;width:1.5em;height:1em;display:inline-block;position:relative}.j-footer__suit-char{opacity:0;justify-content:center;align-items:center;animation-duration:5s;animation-timing-function:ease-out;animation-iteration-count:infinite;animation-delay:0s;display:inline-flex;position:absolute;inset:0}.j-copy-row__label{letter-spacing:2px}.j-motely-badge{align-items:center;gap:6px;display:inline-flex}.j-motely-badge--chip{border-radius:var(--j-radius-sm);background:var(--j-darkest);border:1px solid var(--j-panel-edge);padding:3px 8px}.j-text--dance-container{display:inline-flex}.j-font-dance-char{animation:3s ease-in-out infinite j-font-dance;display:inline-block}.hide-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.hide-scrollbar::-webkit-scrollbar{display:none}.j-juice-hover{transition:transform .2s cubic-bezier(.175,.885,.32,1.275)}.j-juice-hover:hover{z-index:5;transform:scale(1.05)translateY(-2px)}
2
+ /*$vite$:1*/