lanre-ds 0.0.0-stage → 0.2.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.
Files changed (240) hide show
  1. package/LICENSE +21 -0
  2. package/components/buttons/Button.d.ts +28 -0
  3. package/components/buttons/Button.jsx +50 -0
  4. package/components/buttons/Button.prompt.md +16 -0
  5. package/components/buttons/IconButton.d.ts +23 -0
  6. package/components/buttons/IconButton.jsx +53 -0
  7. package/components/buttons/IconButton.prompt.md +12 -0
  8. package/components/buttons/SegmentedTabs.d.ts +21 -0
  9. package/components/buttons/SegmentedTabs.jsx +15 -0
  10. package/components/buttons/SegmentedTabs.prompt.md +10 -0
  11. package/components/contributor/AudioRecorder.d.ts +27 -0
  12. package/components/contributor/AudioRecorder.jsx +79 -0
  13. package/components/contributor/AudioRecorder.prompt.md +13 -0
  14. package/components/contributor/RadioCard.d.ts +17 -0
  15. package/components/contributor/RadioCard.jsx +30 -0
  16. package/components/contributor/RadioCard.prompt.md +12 -0
  17. package/components/contributor/RecorderPanel.d.ts +30 -0
  18. package/components/contributor/RecorderPanel.jsx +49 -0
  19. package/components/contributor/RecorderPanel.prompt.md +11 -0
  20. package/components/contributor/StepBar.d.ts +17 -0
  21. package/components/contributor/StepBar.jsx +55 -0
  22. package/components/contributor/StepBar.prompt.md +12 -0
  23. package/components/contributor/TextField.d.ts +25 -0
  24. package/components/contributor/TextField.jsx +29 -0
  25. package/components/contributor/TextField.prompt.md +7 -0
  26. package/components/contributor/UploadTile.d.ts +39 -0
  27. package/components/contributor/UploadTile.jsx +116 -0
  28. package/components/contributor/UploadTile.prompt.md +21 -0
  29. package/components/contributor/WorldChip.d.ts +18 -0
  30. package/components/contributor/WorldChip.jsx +16 -0
  31. package/components/contributor/WorldChip.prompt.md +9 -0
  32. package/components/contributor/WorldOption.d.ts +19 -0
  33. package/components/contributor/WorldOption.jsx +19 -0
  34. package/components/contributor/WorldOption.prompt.md +11 -0
  35. package/components/contributor/WorldSign.d.ts +25 -0
  36. package/components/contributor/WorldSign.jsx +32 -0
  37. package/components/contributor/WorldSign.prompt.md +14 -0
  38. package/components/contributor/WorldSigns.d.ts +13 -0
  39. package/components/contributor/WorldSigns.jsx +12 -0
  40. package/components/contributor/WorldSigns.prompt.md +8 -0
  41. package/components/effects/Confetti.d.ts +14 -0
  42. package/components/effects/Confetti.jsx +38 -0
  43. package/components/effects/Confetti.prompt.md +12 -0
  44. package/components/effects/Sparkles.d.ts +9 -0
  45. package/components/effects/Sparkles.jsx +13 -0
  46. package/components/effects/Sparkles.prompt.md +11 -0
  47. package/components/effects/Sunburst.d.ts +23 -0
  48. package/components/effects/Sunburst.jsx +26 -0
  49. package/components/effects/Sunburst.prompt.md +12 -0
  50. package/components/feedback/Badge.d.ts +17 -0
  51. package/components/feedback/Badge.jsx +16 -0
  52. package/components/feedback/Badge.prompt.md +10 -0
  53. package/components/feedback/ErrorText.d.ts +11 -0
  54. package/components/feedback/ErrorText.jsx +8 -0
  55. package/components/feedback/ErrorText.prompt.md +9 -0
  56. package/components/feedback/LoadingScreen.d.ts +14 -0
  57. package/components/feedback/LoadingScreen.jsx +24 -0
  58. package/components/feedback/LoadingScreen.prompt.md +9 -0
  59. package/components/feedback/Notice.d.ts +15 -0
  60. package/components/feedback/Notice.jsx +16 -0
  61. package/components/feedback/Notice.prompt.md +10 -0
  62. package/components/feedback/SaveAlert.d.ts +15 -0
  63. package/components/feedback/SaveAlert.jsx +24 -0
  64. package/components/feedback/SaveAlert.prompt.md +9 -0
  65. package/components/feedback/SavePill.d.ts +13 -0
  66. package/components/feedback/SavePill.jsx +29 -0
  67. package/components/feedback/SavePill.prompt.md +8 -0
  68. package/components/feedback/SoundToggle.d.ts +16 -0
  69. package/components/feedback/SoundToggle.jsx +15 -0
  70. package/components/feedback/SoundToggle.prompt.md +6 -0
  71. package/components/feedback/Sticker.d.ts +15 -0
  72. package/components/feedback/Sticker.jsx +12 -0
  73. package/components/feedback/Sticker.prompt.md +9 -0
  74. package/components/feedback/Tag.d.ts +15 -0
  75. package/components/feedback/Tag.jsx +15 -0
  76. package/components/feedback/Tag.prompt.md +10 -0
  77. package/components/feedback/Toast.d.ts +21 -0
  78. package/components/feedback/Toast.jsx +19 -0
  79. package/components/feedback/Toast.prompt.md +7 -0
  80. package/components/forms/Slider.d.ts +24 -0
  81. package/components/forms/Slider.jsx +28 -0
  82. package/components/forms/Slider.prompt.md +6 -0
  83. package/components/forms/Switch.d.ts +19 -0
  84. package/components/forms/Switch.jsx +20 -0
  85. package/components/forms/Switch.prompt.md +6 -0
  86. package/components/games/MatchCard.d.ts +18 -0
  87. package/components/games/MatchCard.jsx +27 -0
  88. package/components/games/MatchCard.prompt.md +11 -0
  89. package/components/hud/Countdown.d.ts +33 -0
  90. package/components/hud/Countdown.jsx +74 -0
  91. package/components/hud/Countdown.prompt.md +15 -0
  92. package/components/hud/CurrencyPill.d.ts +24 -0
  93. package/components/hud/CurrencyPill.jsx +34 -0
  94. package/components/hud/CurrencyPill.prompt.md +12 -0
  95. package/components/hud/HudBar.d.ts +18 -0
  96. package/components/hud/HudBar.jsx +14 -0
  97. package/components/hud/HudBar.prompt.md +15 -0
  98. package/components/hud/HudChip.d.ts +25 -0
  99. package/components/hud/HudChip.jsx +30 -0
  100. package/components/hud/HudChip.prompt.md +13 -0
  101. package/components/hud/ProgressBar.d.ts +27 -0
  102. package/components/hud/ProgressBar.jsx +39 -0
  103. package/components/hud/ProgressBar.prompt.md +11 -0
  104. package/components/hud/TimerChip.d.ts +19 -0
  105. package/components/hud/TimerChip.jsx +17 -0
  106. package/components/hud/TimerChip.prompt.md +7 -0
  107. package/components/icons/GameIcon.d.ts +25 -0
  108. package/components/icons/GameIcon.jsx +43 -0
  109. package/components/icons/GameIcon.prompt.md +13 -0
  110. package/components/identity/Avatar.d.ts +26 -0
  111. package/components/identity/Avatar.jsx +31 -0
  112. package/components/identity/Avatar.prompt.md +11 -0
  113. package/components/identity/AvatarButton.d.ts +19 -0
  114. package/components/identity/AvatarButton.jsx +13 -0
  115. package/components/identity/AvatarButton.prompt.md +8 -0
  116. package/components/identity/Gemstone.d.ts +28 -0
  117. package/components/identity/Gemstone.jsx +46 -0
  118. package/components/identity/Gemstone.prompt.md +15 -0
  119. package/components/identity/PersonTile.d.ts +22 -0
  120. package/components/identity/PersonTile.jsx +27 -0
  121. package/components/identity/PersonTile.prompt.md +10 -0
  122. package/components/levels/ChoiceButton.d.ts +20 -0
  123. package/components/levels/ChoiceButton.jsx +31 -0
  124. package/components/levels/ChoiceButton.prompt.md +10 -0
  125. package/components/map/DiscoveryMarker.d.ts +19 -0
  126. package/components/map/DiscoveryMarker.jsx +31 -0
  127. package/components/map/DiscoveryMarker.prompt.md +11 -0
  128. package/components/map/LevelNode.d.ts +19 -0
  129. package/components/map/LevelNode.jsx +37 -0
  130. package/components/map/LevelNode.prompt.md +11 -0
  131. package/components/map/PortraitMedallion.d.ts +27 -0
  132. package/components/map/PortraitMedallion.jsx +29 -0
  133. package/components/map/PortraitMedallion.prompt.md +14 -0
  134. package/components/map/StarRating.d.ts +22 -0
  135. package/components/map/StarRating.jsx +21 -0
  136. package/components/map/StarRating.prompt.md +6 -0
  137. package/components/map/Tile.d.ts +22 -0
  138. package/components/map/Tile.jsx +32 -0
  139. package/components/map/Tile.prompt.md +8 -0
  140. package/components/map/WorldGate.d.ts +21 -0
  141. package/components/map/WorldGate.jsx +27 -0
  142. package/components/map/WorldGate.prompt.md +13 -0
  143. package/components/map/worlds.d.ts +18 -0
  144. package/components/map/worlds.js +9 -0
  145. package/components/media/Album.d.ts +33 -0
  146. package/components/media/Album.jsx +157 -0
  147. package/components/media/Album.prompt.md +16 -0
  148. package/components/media/Cassette.d.ts +23 -0
  149. package/components/media/Cassette.jsx +64 -0
  150. package/components/media/Cassette.prompt.md +13 -0
  151. package/components/media/Film.d.ts +20 -0
  152. package/components/media/Film.jsx +39 -0
  153. package/components/media/Film.prompt.md +14 -0
  154. package/components/media/MemoryText.d.ts +20 -0
  155. package/components/media/MemoryText.jsx +14 -0
  156. package/components/media/MemoryText.prompt.md +9 -0
  157. package/components/media/Unavailable.d.ts +13 -0
  158. package/components/media/Unavailable.jsx +13 -0
  159. package/components/media/Unavailable.prompt.md +10 -0
  160. package/components/media/Words.d.ts +21 -0
  161. package/components/media/Words.jsx +57 -0
  162. package/components/media/Words.prompt.md +12 -0
  163. package/components/media/shared.js +19 -0
  164. package/components/panels/Modal.d.ts +25 -0
  165. package/components/panels/Modal.jsx +68 -0
  166. package/components/panels/Modal.prompt.md +20 -0
  167. package/components/panels/Panel.d.ts +29 -0
  168. package/components/panels/Panel.jsx +109 -0
  169. package/components/panels/Panel.prompt.md +13 -0
  170. package/components/quiz/LeaderboardRow.d.ts +26 -0
  171. package/components/quiz/LeaderboardRow.jsx +24 -0
  172. package/components/quiz/LeaderboardRow.prompt.md +10 -0
  173. package/components/rewards/ItemCell.d.ts +24 -0
  174. package/components/rewards/ItemCell.jsx +24 -0
  175. package/components/rewards/ItemCell.prompt.md +9 -0
  176. package/components/rewards/RewardCard.d.ts +24 -0
  177. package/components/rewards/RewardCard.jsx +34 -0
  178. package/components/rewards/RewardCard.prompt.md +8 -0
  179. package/components/rewards/ShopRow.d.ts +23 -0
  180. package/components/rewards/ShopRow.jsx +26 -0
  181. package/components/rewards/ShopRow.prompt.md +7 -0
  182. package/components/text/Heading.d.ts +19 -0
  183. package/components/text/Heading.jsx +15 -0
  184. package/components/text/Heading.prompt.md +10 -0
  185. package/components/text/OutlineText.d.ts +24 -0
  186. package/components/text/OutlineText.jsx +20 -0
  187. package/components/text/OutlineText.prompt.md +11 -0
  188. package/components/toolbar/FastTravelDock.d.ts +50 -0
  189. package/components/toolbar/FastTravelDock.jsx +36 -0
  190. package/components/toolbar/FastTravelDock.prompt.md +12 -0
  191. package/components/toolbar/Toolbar.d.ts +16 -0
  192. package/components/toolbar/Toolbar.jsx +8 -0
  193. package/components/toolbar/Toolbar.prompt.md +14 -0
  194. package/components/toolbar/ToolbarNext.d.ts +21 -0
  195. package/components/toolbar/ToolbarNext.jsx +21 -0
  196. package/components/toolbar/ToolbarNext.prompt.md +13 -0
  197. package/components/toolbar/ToolbarTab.d.ts +15 -0
  198. package/components/toolbar/ToolbarTab.jsx +12 -0
  199. package/components/toolbar/ToolbarTab.prompt.md +9 -0
  200. package/components/viewer/ClueCard.d.ts +18 -0
  201. package/components/viewer/ClueCard.jsx +14 -0
  202. package/components/viewer/ClueCard.prompt.md +9 -0
  203. package/components/viewer/ClueTab.d.ts +16 -0
  204. package/components/viewer/ClueTab.jsx +12 -0
  205. package/components/viewer/ClueTab.prompt.md +8 -0
  206. package/components/viewer/RevealTray.d.ts +54 -0
  207. package/components/viewer/RevealTray.jsx +58 -0
  208. package/components/viewer/RevealTray.prompt.md +21 -0
  209. package/components/viewer/RoadsideViewer.d.ts +60 -0
  210. package/components/viewer/RoadsideViewer.jsx +96 -0
  211. package/components/viewer/RoadsideViewer.prompt.md +20 -0
  212. package/components/viewer/ViewerKeys.d.ts +26 -0
  213. package/components/viewer/ViewerKeys.jsx +22 -0
  214. package/components/viewer/ViewerKeys.prompt.md +14 -0
  215. package/components/viewer/ViewerKnob.d.ts +20 -0
  216. package/components/viewer/ViewerKnob.jsx +12 -0
  217. package/components/viewer/ViewerKnob.prompt.md +11 -0
  218. package/components/viewer/WhoButton.d.ts +21 -0
  219. package/components/viewer/WhoButton.jsx +15 -0
  220. package/components/viewer/WhoButton.prompt.md +10 -0
  221. package/package.json +62 -4
  222. package/readme.md +145 -0
  223. package/styles.css +15 -0
  224. package/tokens/colors.css +140 -0
  225. package/tokens/effects.css +40 -0
  226. package/tokens/fonts.css +3 -0
  227. package/tokens/fx.css +186 -0
  228. package/tokens/gems.css +8 -0
  229. package/tokens/hud.css +510 -0
  230. package/tokens/icons.css +7 -0
  231. package/tokens/media.css +774 -0
  232. package/tokens/signs.css +459 -0
  233. package/tokens/spacing.css +38 -0
  234. package/tokens/typography.css +34 -0
  235. package/tokens/ui.css +432 -0
  236. package/tokens/utilities.css +34 -0
  237. package/tokens/viewer.css +1176 -0
  238. package/tokens/worlds.css +73 -0
  239. package/tools/ds-loader.js +60 -0
  240. package/README.md +0 -3
package/tokens/hud.css ADDED
@@ -0,0 +1,510 @@
1
+ /* The map's chrome: the HUD along the top (friends and surprises chips), the toolbar along the bottom (two tabs and a big
2
+ Next button), and the fast-travel dock down the side. Used by HudBar, HudChip, Toolbar, ToolbarTab, ToolbarNext and
3
+ FastTravelDock (components/hud and components/toolbar). They cover the window, and their sizes follow it. */
4
+
5
+ /* ------------------------------------------------------------------ HUD */
6
+
7
+ .mp-hud {
8
+ position: fixed;
9
+ top: 0;
10
+ left: 0;
11
+ right: 0;
12
+ z-index: 20;
13
+ display: flex;
14
+ align-items: flex-start;
15
+ justify-content: space-between;
16
+ gap: 12px;
17
+ padding: max(12px, env(safe-area-inset-top)) max(14px, env(safe-area-inset-right)) 0 max(14px, env(safe-area-inset-left));
18
+ pointer-events: none;
19
+ }
20
+
21
+ .mp-hud > * {
22
+ pointer-events: auto;
23
+ }
24
+
25
+ .mp-hud-left,
26
+ .mp-hud-right {
27
+ display: flex;
28
+ align-items: center;
29
+ gap: 10px;
30
+ }
31
+
32
+ /* On a narrow phone the chips wrap onto a second row rather than push the right side off screen. */
33
+ .mp-hud-left {
34
+ flex: 1 1 0;
35
+ min-width: 0;
36
+ flex-wrap: wrap;
37
+ row-gap: 8px;
38
+ }
39
+
40
+ .mp-hud-right {
41
+ flex: none;
42
+ }
43
+
44
+ /* The counter bumps when a memory is found. */
45
+ .mp-hud-bump {
46
+ animation: mp-hud-bump 520ms var(--ease-bounce) both;
47
+ }
48
+
49
+ .mp-hud-right > * {
50
+ white-space: nowrap;
51
+ flex: none;
52
+ }
53
+
54
+ .mp-toolbar {
55
+ position: fixed;
56
+ left: 50%;
57
+ bottom: max(18px, calc(env(safe-area-inset-bottom) + 10px));
58
+ transform: translateX(-50%);
59
+ z-index: 20;
60
+ display: flex;
61
+ align-items: flex-end;
62
+ gap: 6px;
63
+ padding: 8px 14px;
64
+ border-radius: 26px;
65
+ border: 4px solid var(--cream-300);
66
+ background: linear-gradient(180deg, var(--cream-50), var(--cream-100));
67
+ box-shadow: inset 0 3px 0 oklch(1 0 0 / 0.7), 0 8px 0 var(--cream-300), 0 18px 30px oklch(0.22 0.05 60 / 0.35);
68
+ }
69
+
70
+ .mp-toolbar-tab {
71
+ appearance: none;
72
+ border: 0;
73
+ width: 88px;
74
+ height: 64px;
75
+ padding: 0;
76
+ border-radius: 16px;
77
+ background: transparent;
78
+ display: grid;
79
+ justify-items: center;
80
+ align-content: center;
81
+ gap: 4px;
82
+ font-family: var(--font-display);
83
+ font-size: 11px;
84
+ letter-spacing: 0.06em;
85
+ text-transform: uppercase;
86
+ color: var(--ink-700);
87
+ cursor: pointer;
88
+ -webkit-tap-highlight-color: transparent;
89
+ transition: background var(--dur-fast), transform var(--dur-fast);
90
+ }
91
+
92
+ .mp-toolbar-tab:active {
93
+ background: var(--cream-200);
94
+ transform: translateY(2px);
95
+ }
96
+
97
+ .mp-toolbar-tab-icon {
98
+ width: 34px;
99
+ height: 34px;
100
+ border-radius: 50%;
101
+ display: grid;
102
+ place-items: center;
103
+ background: #fff;
104
+ box-shadow: 0 2px 0 var(--cream-300);
105
+ font-size: 18px;
106
+ color: var(--ink-900);
107
+ }
108
+
109
+ .mp-next {
110
+ appearance: none;
111
+ position: relative;
112
+ width: 96px;
113
+ height: 96px;
114
+ margin: -38px 6px 0;
115
+ padding: 0;
116
+ border-radius: 50%;
117
+ border: 5px solid #fff;
118
+ display: grid;
119
+ justify-items: center;
120
+ align-content: center;
121
+ background: radial-gradient(circle at 50% 30%, var(--blue-300), var(--blue-500) 65%);
122
+ box-shadow: 0 8px 0 var(--blue-700), 0 16px 24px oklch(0.2 0.05 60 / 0.35), inset 0 3px 0 oklch(1 0 0 / 0.5);
123
+ font-family: var(--font-display);
124
+ color: #fff;
125
+ -webkit-text-stroke: 0.14em var(--blue-700);
126
+ paint-order: stroke fill;
127
+ text-shadow: 0 3px 0 oklch(0 0 0 / 0.2);
128
+ cursor: pointer;
129
+ -webkit-tap-highlight-color: transparent;
130
+ transition: transform var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out);
131
+ animation: mp-cta-attract 6s var(--ease-in-out) 3s infinite;
132
+ }
133
+
134
+ .mp-next:active {
135
+ transform: translateY(6px);
136
+ box-shadow: 0 2px 0 var(--blue-700), 0 8px 14px oklch(0.2 0.05 60 / 0.3), inset 0 3px 0 oklch(1 0 0 / 0.5);
137
+ animation: none;
138
+ }
139
+
140
+ .mp-next:disabled {
141
+ background: radial-gradient(circle at 50% 30%, var(--stone-100), var(--stone-300) 65%);
142
+ box-shadow: 0 8px 0 var(--stone-500), 0 16px 24px oklch(0.2 0.05 60 / 0.25);
143
+ -webkit-text-stroke-color: var(--stone-700);
144
+ cursor: default;
145
+ animation: none;
146
+ }
147
+
148
+ .mp-next-gold {
149
+ background: radial-gradient(circle at 50% 30%, var(--gold-300), var(--gold-500) 65%);
150
+ box-shadow: 0 8px 0 var(--gold-900), 0 0 0 8px oklch(0.92 0.14 90 / 0.35), 0 16px 24px oklch(0.2 0.05 60 / 0.35), inset 0 3px 0 oklch(1 0 0 / 0.5);
151
+ -webkit-text-stroke-color: var(--gold-900);
152
+ }
153
+
154
+ .mp-next-busy {
155
+ background: radial-gradient(circle at 50% 30%, var(--cream-100), var(--cream-300) 65%);
156
+ box-shadow: 0 8px 0 var(--wood-500), inset 0 3px 0 oklch(1 0 0 / 0.5);
157
+ -webkit-text-stroke-color: var(--wood-700);
158
+ animation: none;
159
+ }
160
+
161
+ .mp-next small {
162
+ font-size: 11px;
163
+ letter-spacing: 0.06em;
164
+ text-transform: uppercase;
165
+ -webkit-text-stroke-width: 0.16em;
166
+ }
167
+
168
+ .mp-next b {
169
+ font-weight: 400;
170
+ font-size: 30px;
171
+ line-height: 1;
172
+ }
173
+
174
+ .mp-next b i {
175
+ font-size: 30px;
176
+ }
177
+
178
+ /* ------------------------------------------------------------------ side dock: fast travel */
179
+
180
+ .mp-dock {
181
+ position: fixed;
182
+ right: max(16px, env(safe-area-inset-right));
183
+ top: 50%;
184
+ transform: translateY(-50%);
185
+ z-index: 20;
186
+ display: grid;
187
+ justify-items: center;
188
+ gap: 8px;
189
+ padding: 12px 8px;
190
+ border-radius: 26px;
191
+ border: 4px solid var(--wood-700);
192
+ background: repeating-linear-gradient(180deg, transparent 0 9px, oklch(0 0 0 / 0.06) 9px 11px), linear-gradient(180deg, var(--wood-300), var(--wood-500));
193
+ box-shadow: 0 6px 0 var(--wood-900), 0 14px 22px oklch(0.2 0.05 60 / 0.35), inset 0 3px 0 oklch(1 0 0 / 0.3);
194
+ }
195
+
196
+ .mp-dock-rule {
197
+ width: 60px;
198
+ height: 3px;
199
+ border-radius: 999px;
200
+ background: oklch(0 0 0 / 0.15);
201
+ }
202
+
203
+ .mp-dock-label {
204
+ max-width: 64px;
205
+ font-family: var(--font-display);
206
+ font-size: 9px;
207
+ letter-spacing: 0.08em;
208
+ line-height: 1.1;
209
+ text-transform: uppercase;
210
+ color: var(--cream-100);
211
+ text-align: center;
212
+ }
213
+
214
+ .mp-stop-wrap {
215
+ display: grid;
216
+ justify-items: center;
217
+ gap: 4px;
218
+ }
219
+
220
+ .mp-stop {
221
+ appearance: none;
222
+ position: relative;
223
+ width: 52px;
224
+ height: 52px;
225
+ padding: 0;
226
+ border-radius: 50%;
227
+ border: 3px solid #fff;
228
+ display: grid;
229
+ place-items: center;
230
+ font-size: 24px;
231
+ color: #fff;
232
+ cursor: pointer;
233
+ -webkit-tap-highlight-color: transparent;
234
+ box-shadow: 0 4px 0 oklch(0 0 0 / 0.2);
235
+ transition: transform var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out);
236
+ }
237
+
238
+ .mp-stop:active {
239
+ transform: translateY(3px);
240
+ box-shadow: 0 1px 0 oklch(0 0 0 / 0.2);
241
+ }
242
+
243
+ .mp-stop-compass {
244
+ background: linear-gradient(180deg, var(--cream-50), var(--cream-200));
245
+ box-shadow: 0 4px 0 var(--cream-300);
246
+ color: var(--coral-500);
247
+ }
248
+
249
+ .mp-stop-done {
250
+ background: radial-gradient(circle at 50% 30%, var(--gold-300), var(--gold-500) 60%, var(--gold-700));
251
+ box-shadow: 0 4px 0 var(--gold-900);
252
+ }
253
+
254
+ .mp-stop-here {
255
+ background: radial-gradient(circle at 50% 30%, var(--blue-300), var(--blue-500) 70%);
256
+ box-shadow: 0 0 0 4px oklch(0.68 0.17 240 / 0.4), 0 4px 0 var(--blue-700);
257
+ }
258
+
259
+ .mp-stop-ahead {
260
+ background: radial-gradient(circle at 50% 30%, var(--stone-100), var(--stone-300) 70%);
261
+ box-shadow: 0 4px 0 var(--stone-500);
262
+ color: var(--stone-700);
263
+ }
264
+
265
+ .mp-stop-count {
266
+ position: absolute;
267
+ right: -9px;
268
+ bottom: -6px;
269
+ min-width: 20px;
270
+ height: 20px;
271
+ padding: 0 5px;
272
+ border-radius: 999px;
273
+ background: var(--cream-50);
274
+ border: 2px solid var(--wood-700);
275
+ display: grid;
276
+ place-items: center;
277
+ font-family: var(--font-display);
278
+ font-size: 10px;
279
+ color: var(--ink-900);
280
+ }
281
+
282
+ /* Phones: the dock folds into the compass until tapped. */
283
+ .mp-dock-phone {
284
+ right: max(10px, env(safe-area-inset-right));
285
+ top: 62%;
286
+ padding: 6px;
287
+ gap: 6px;
288
+ border-radius: 999px;
289
+ }
290
+
291
+ .mp-dock-phone .mp-dock-label,
292
+ .mp-dock-phone .mp-dock-rule,
293
+ .mp-dock-phone .mp-stop-next,
294
+ .mp-dock-phone .mp-stop-wrap {
295
+ display: none;
296
+ }
297
+
298
+ .mp-dock-phone.mp-dock-open .mp-stop-next {
299
+ display: grid;
300
+ }
301
+
302
+ .mp-dock-phone.mp-dock-open {
303
+ border-radius: 26px;
304
+ padding: 10px 8px;
305
+ top: 50%;
306
+ }
307
+
308
+ .mp-dock-phone.mp-dock-open .mp-stop-wrap,
309
+ .mp-dock-phone.mp-dock-open .mp-dock-rule {
310
+ display: grid;
311
+ }
312
+
313
+ .mp-dock-phone.mp-dock-open .mp-stop-wrap {
314
+ animation: mp-pop 300ms var(--ease-bounce) both;
315
+ }
316
+
317
+ .mp-dock-scrim {
318
+ position: fixed;
319
+ inset: 0;
320
+ z-index: 19;
321
+ border: 0;
322
+ padding: 0;
323
+ background: oklch(0.22 0.05 260 / 0.25);
324
+ }
325
+
326
+ /* The map just revealed: the bar drops in, the toolbar rises, the fast travel dock slides in. Put mp-chrome-arriving on a parent. */
327
+ .mp-chrome-arriving .mp-hud {
328
+ animation: mp-hud-drop 560ms var(--ease-bounce) 380ms both;
329
+ }
330
+
331
+ .mp-chrome-arriving .mp-toolbar {
332
+ animation: mp-toolbar-rise 620ms var(--ease-bounce) 480ms both;
333
+ }
334
+
335
+ .mp-chrome-arriving .mp-dock {
336
+ animation: mp-dock-in 560ms var(--ease-bounce) 620ms both;
337
+ }
338
+
339
+ /* ------------------------------------------------------------------ the finale: the climb to the summit */
340
+
341
+ /* The HUD, toolbar and dock step aside for the climb and come back after it. Put mp-chrome-away on the same parent. */
342
+ .mp-hud,
343
+ .mp-toolbar,
344
+ .mp-dock {
345
+ transition: translate 520ms var(--ease-in-out), opacity 520ms var(--ease-in-out);
346
+ }
347
+
348
+ .mp-chrome-away .mp-hud {
349
+ translate: 0 -160%;
350
+ }
351
+
352
+ .mp-chrome-away .mp-toolbar {
353
+ translate: 0 220px;
354
+ }
355
+
356
+ .mp-chrome-away .mp-dock {
357
+ translate: 160px 0;
358
+ opacity: 0;
359
+ }
360
+
361
+ .mp-hud[hidden] {
362
+ display: none;
363
+ }
364
+
365
+ /* ---------------------------------------------------------------- friends and surprises chips in the HUD */
366
+
367
+ .mp-hud-chip {
368
+ position: relative;
369
+ padding: 0 0 0 16px;
370
+ border: 0;
371
+ background: none;
372
+ cursor: pointer;
373
+ transform-origin: left center;
374
+ -webkit-tap-highlight-color: transparent;
375
+ }
376
+
377
+ .mp-hud-chip:disabled {
378
+ cursor: default;
379
+ }
380
+
381
+ .mp-hud-chip:not(:disabled):active {
382
+ translate: 0 1px;
383
+ }
384
+
385
+ .mp-hud-chip:focus-visible {
386
+ outline: 3px solid var(--blue-500);
387
+ outline-offset: 3px;
388
+ border-radius: var(--radius-pill);
389
+ }
390
+
391
+ .mp-hud-sparkle {
392
+ font-size: 40px;
393
+ line-height: 1;
394
+ color: var(--berry-300);
395
+ -webkit-text-stroke: 4px var(--berry-700);
396
+ paint-order: stroke fill;
397
+ animation: mp-hud-glint 2.8s var(--ease-in-out) infinite;
398
+ }
399
+
400
+ .mp-hud-friends {
401
+ font-size: 38px;
402
+ line-height: 1;
403
+ color: var(--teal-300);
404
+ -webkit-text-stroke: 4px var(--teal-900);
405
+ paint-order: stroke fill;
406
+ }
407
+
408
+ /* A surprise that arrived after they started. */
409
+ .mp-hud-new {
410
+ position: absolute;
411
+ top: -3px;
412
+ right: -3px;
413
+ width: 14px;
414
+ height: 14px;
415
+ border-radius: 50%;
416
+ background: var(--coral-500);
417
+ border: 2px solid #fff;
418
+ box-shadow: 0 0 0 0 oklch(0.68 0.2 30 / 0.6);
419
+ animation: mp-hud-new 1.6s var(--ease-out) infinite;
420
+ }
421
+
422
+ @keyframes mp-hud-bump {
423
+ 0% { transform: scale(1); filter: none; }
424
+ 40% { transform: scale(1.14); filter: drop-shadow(0 0 14px oklch(0.92 0.14 90 / 0.95)) brightness(1.15); }
425
+ 100% { transform: scale(1); filter: none; }
426
+ }
427
+
428
+ @keyframes mp-cta-attract {
429
+ 0%, 16%, 100% { scale: 1; }
430
+ 4% { scale: 1.06; }
431
+ 8% { scale: 1; }
432
+ 12% { scale: 1.04; }
433
+ }
434
+
435
+ @keyframes mp-hud-glint {
436
+ 0%, 70%, 100% { rotate: 0deg; scale: 1; }
437
+ 80% { rotate: 14deg; scale: 1.15; }
438
+ 90% { rotate: -6deg; scale: 1; }
439
+ }
440
+
441
+ @keyframes mp-hud-new {
442
+ 0% { box-shadow: 0 0 0 0 oklch(0.68 0.2 30 / 0.6); }
443
+ 70%, 100% { box-shadow: 0 0 0 10px oklch(0.68 0.2 30 / 0); }
444
+ }
445
+
446
+ @keyframes mp-hud-drop {
447
+ from { translate: 0 -140%; }
448
+ to { translate: 0 0; }
449
+ }
450
+
451
+ @keyframes mp-toolbar-rise {
452
+ from { translate: 0 180px; }
453
+ to { translate: 0 0; }
454
+ }
455
+
456
+ @keyframes mp-dock-in {
457
+ from { translate: 140px 0; opacity: 0; }
458
+ to { translate: 0 0; opacity: 1; }
459
+ }
460
+
461
+ /* ---- Phones: the chips take the whole top row, and sound stays one tap away in the menu. ---- */
462
+ @media (max-width: 599px) {
463
+ .mp-hud-right {
464
+ display: none;
465
+ }
466
+ .mp-toolbar {
467
+ padding: 6px 10px;
468
+ gap: 2px;
469
+ border-radius: 22px;
470
+ }
471
+ .mp-toolbar-tab {
472
+ width: 72px;
473
+ height: 58px;
474
+ }
475
+ .mp-next {
476
+ width: 84px;
477
+ height: 84px;
478
+ margin-top: -32px;
479
+ }
480
+ }
481
+
482
+ /* ---- Contained: sit inside a positioned box instead of covering the window, for docs and previews. ---- */
483
+ .mp-hud-contained,
484
+ .mp-toolbar-contained,
485
+ .mp-dock-contained,
486
+ .mp-dock-scrim-contained {
487
+ position: absolute;
488
+ }
489
+
490
+ @media (prefers-reduced-motion: reduce) {
491
+ .mp-hud-bump {
492
+ animation: none;
493
+ }
494
+ .mp-hud-sparkle,
495
+ .mp-hud-new {
496
+ animation: none;
497
+ }
498
+ .mp-next,
499
+ .mp-dock-phone.mp-dock-open .mp-stop-wrap,
500
+ .mp-chrome-arriving .mp-hud,
501
+ .mp-chrome-arriving .mp-toolbar,
502
+ .mp-chrome-arriving .mp-dock {
503
+ animation: none !important;
504
+ }
505
+ .mp-hud,
506
+ .mp-toolbar,
507
+ .mp-dock {
508
+ transition: none;
509
+ }
510
+ }
@@ -0,0 +1,7 @@
1
+ /* Glyph set: Phosphor Icons, FILL weight, via CDN for no-build pages. Usage: <i class="ph-fill ph-star"></i>
2
+ An app can install @phosphor-icons/web and import the same two weights instead.
3
+ Chunky filled glyphs match the painted game-icon look. GameIcon adds the dark outline + drop shadow to a glyph
4
+ that stands on its own; a glyph in a component's icon slot stays plain. */
5
+ @import url("https://unpkg.com/@phosphor-icons/web@2.1.1/src/fill/style.css");
6
+ /* BOLD weight for utility strokes (plus, x, check, carets): <i class="ph-bold ph-plus"></i> */
7
+ @import url("https://unpkg.com/@phosphor-icons/web@2.1.1/src/bold/style.css");