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.
- package/LICENSE +21 -0
- package/components/buttons/Button.d.ts +28 -0
- package/components/buttons/Button.jsx +50 -0
- package/components/buttons/Button.prompt.md +16 -0
- package/components/buttons/IconButton.d.ts +23 -0
- package/components/buttons/IconButton.jsx +53 -0
- package/components/buttons/IconButton.prompt.md +12 -0
- package/components/buttons/SegmentedTabs.d.ts +21 -0
- package/components/buttons/SegmentedTabs.jsx +15 -0
- package/components/buttons/SegmentedTabs.prompt.md +10 -0
- package/components/contributor/AudioRecorder.d.ts +27 -0
- package/components/contributor/AudioRecorder.jsx +79 -0
- package/components/contributor/AudioRecorder.prompt.md +13 -0
- package/components/contributor/RadioCard.d.ts +17 -0
- package/components/contributor/RadioCard.jsx +30 -0
- package/components/contributor/RadioCard.prompt.md +12 -0
- package/components/contributor/RecorderPanel.d.ts +30 -0
- package/components/contributor/RecorderPanel.jsx +49 -0
- package/components/contributor/RecorderPanel.prompt.md +11 -0
- package/components/contributor/StepBar.d.ts +17 -0
- package/components/contributor/StepBar.jsx +55 -0
- package/components/contributor/StepBar.prompt.md +12 -0
- package/components/contributor/TextField.d.ts +25 -0
- package/components/contributor/TextField.jsx +29 -0
- package/components/contributor/TextField.prompt.md +7 -0
- package/components/contributor/UploadTile.d.ts +39 -0
- package/components/contributor/UploadTile.jsx +116 -0
- package/components/contributor/UploadTile.prompt.md +21 -0
- package/components/contributor/WorldChip.d.ts +18 -0
- package/components/contributor/WorldChip.jsx +16 -0
- package/components/contributor/WorldChip.prompt.md +9 -0
- package/components/contributor/WorldOption.d.ts +19 -0
- package/components/contributor/WorldOption.jsx +19 -0
- package/components/contributor/WorldOption.prompt.md +11 -0
- package/components/contributor/WorldSign.d.ts +25 -0
- package/components/contributor/WorldSign.jsx +32 -0
- package/components/contributor/WorldSign.prompt.md +14 -0
- package/components/contributor/WorldSigns.d.ts +13 -0
- package/components/contributor/WorldSigns.jsx +12 -0
- package/components/contributor/WorldSigns.prompt.md +8 -0
- package/components/effects/Confetti.d.ts +14 -0
- package/components/effects/Confetti.jsx +38 -0
- package/components/effects/Confetti.prompt.md +12 -0
- package/components/effects/Sparkles.d.ts +9 -0
- package/components/effects/Sparkles.jsx +13 -0
- package/components/effects/Sparkles.prompt.md +11 -0
- package/components/effects/Sunburst.d.ts +23 -0
- package/components/effects/Sunburst.jsx +26 -0
- package/components/effects/Sunburst.prompt.md +12 -0
- package/components/feedback/Badge.d.ts +17 -0
- package/components/feedback/Badge.jsx +16 -0
- package/components/feedback/Badge.prompt.md +10 -0
- package/components/feedback/ErrorText.d.ts +11 -0
- package/components/feedback/ErrorText.jsx +8 -0
- package/components/feedback/ErrorText.prompt.md +9 -0
- package/components/feedback/LoadingScreen.d.ts +14 -0
- package/components/feedback/LoadingScreen.jsx +24 -0
- package/components/feedback/LoadingScreen.prompt.md +9 -0
- package/components/feedback/Notice.d.ts +15 -0
- package/components/feedback/Notice.jsx +16 -0
- package/components/feedback/Notice.prompt.md +10 -0
- package/components/feedback/SaveAlert.d.ts +15 -0
- package/components/feedback/SaveAlert.jsx +24 -0
- package/components/feedback/SaveAlert.prompt.md +9 -0
- package/components/feedback/SavePill.d.ts +13 -0
- package/components/feedback/SavePill.jsx +29 -0
- package/components/feedback/SavePill.prompt.md +8 -0
- package/components/feedback/SoundToggle.d.ts +16 -0
- package/components/feedback/SoundToggle.jsx +15 -0
- package/components/feedback/SoundToggle.prompt.md +6 -0
- package/components/feedback/Sticker.d.ts +15 -0
- package/components/feedback/Sticker.jsx +12 -0
- package/components/feedback/Sticker.prompt.md +9 -0
- package/components/feedback/Tag.d.ts +15 -0
- package/components/feedback/Tag.jsx +15 -0
- package/components/feedback/Tag.prompt.md +10 -0
- package/components/feedback/Toast.d.ts +21 -0
- package/components/feedback/Toast.jsx +19 -0
- package/components/feedback/Toast.prompt.md +7 -0
- package/components/forms/Slider.d.ts +24 -0
- package/components/forms/Slider.jsx +28 -0
- package/components/forms/Slider.prompt.md +6 -0
- package/components/forms/Switch.d.ts +19 -0
- package/components/forms/Switch.jsx +20 -0
- package/components/forms/Switch.prompt.md +6 -0
- package/components/games/MatchCard.d.ts +18 -0
- package/components/games/MatchCard.jsx +27 -0
- package/components/games/MatchCard.prompt.md +11 -0
- package/components/hud/Countdown.d.ts +33 -0
- package/components/hud/Countdown.jsx +74 -0
- package/components/hud/Countdown.prompt.md +15 -0
- package/components/hud/CurrencyPill.d.ts +24 -0
- package/components/hud/CurrencyPill.jsx +34 -0
- package/components/hud/CurrencyPill.prompt.md +12 -0
- package/components/hud/HudBar.d.ts +18 -0
- package/components/hud/HudBar.jsx +14 -0
- package/components/hud/HudBar.prompt.md +15 -0
- package/components/hud/HudChip.d.ts +25 -0
- package/components/hud/HudChip.jsx +30 -0
- package/components/hud/HudChip.prompt.md +13 -0
- package/components/hud/ProgressBar.d.ts +27 -0
- package/components/hud/ProgressBar.jsx +39 -0
- package/components/hud/ProgressBar.prompt.md +11 -0
- package/components/hud/TimerChip.d.ts +19 -0
- package/components/hud/TimerChip.jsx +17 -0
- package/components/hud/TimerChip.prompt.md +7 -0
- package/components/icons/GameIcon.d.ts +25 -0
- package/components/icons/GameIcon.jsx +43 -0
- package/components/icons/GameIcon.prompt.md +13 -0
- package/components/identity/Avatar.d.ts +26 -0
- package/components/identity/Avatar.jsx +31 -0
- package/components/identity/Avatar.prompt.md +11 -0
- package/components/identity/AvatarButton.d.ts +19 -0
- package/components/identity/AvatarButton.jsx +13 -0
- package/components/identity/AvatarButton.prompt.md +8 -0
- package/components/identity/Gemstone.d.ts +28 -0
- package/components/identity/Gemstone.jsx +46 -0
- package/components/identity/Gemstone.prompt.md +15 -0
- package/components/identity/PersonTile.d.ts +22 -0
- package/components/identity/PersonTile.jsx +27 -0
- package/components/identity/PersonTile.prompt.md +10 -0
- package/components/levels/ChoiceButton.d.ts +20 -0
- package/components/levels/ChoiceButton.jsx +31 -0
- package/components/levels/ChoiceButton.prompt.md +10 -0
- package/components/map/DiscoveryMarker.d.ts +19 -0
- package/components/map/DiscoveryMarker.jsx +31 -0
- package/components/map/DiscoveryMarker.prompt.md +11 -0
- package/components/map/LevelNode.d.ts +19 -0
- package/components/map/LevelNode.jsx +37 -0
- package/components/map/LevelNode.prompt.md +11 -0
- package/components/map/PortraitMedallion.d.ts +27 -0
- package/components/map/PortraitMedallion.jsx +29 -0
- package/components/map/PortraitMedallion.prompt.md +14 -0
- package/components/map/StarRating.d.ts +22 -0
- package/components/map/StarRating.jsx +21 -0
- package/components/map/StarRating.prompt.md +6 -0
- package/components/map/Tile.d.ts +22 -0
- package/components/map/Tile.jsx +32 -0
- package/components/map/Tile.prompt.md +8 -0
- package/components/map/WorldGate.d.ts +21 -0
- package/components/map/WorldGate.jsx +27 -0
- package/components/map/WorldGate.prompt.md +13 -0
- package/components/map/worlds.d.ts +18 -0
- package/components/map/worlds.js +9 -0
- package/components/media/Album.d.ts +33 -0
- package/components/media/Album.jsx +157 -0
- package/components/media/Album.prompt.md +16 -0
- package/components/media/Cassette.d.ts +23 -0
- package/components/media/Cassette.jsx +64 -0
- package/components/media/Cassette.prompt.md +13 -0
- package/components/media/Film.d.ts +20 -0
- package/components/media/Film.jsx +39 -0
- package/components/media/Film.prompt.md +14 -0
- package/components/media/MemoryText.d.ts +20 -0
- package/components/media/MemoryText.jsx +14 -0
- package/components/media/MemoryText.prompt.md +9 -0
- package/components/media/Unavailable.d.ts +13 -0
- package/components/media/Unavailable.jsx +13 -0
- package/components/media/Unavailable.prompt.md +10 -0
- package/components/media/Words.d.ts +21 -0
- package/components/media/Words.jsx +57 -0
- package/components/media/Words.prompt.md +12 -0
- package/components/media/shared.js +19 -0
- package/components/panels/Modal.d.ts +25 -0
- package/components/panels/Modal.jsx +68 -0
- package/components/panels/Modal.prompt.md +20 -0
- package/components/panels/Panel.d.ts +29 -0
- package/components/panels/Panel.jsx +109 -0
- package/components/panels/Panel.prompt.md +13 -0
- package/components/quiz/LeaderboardRow.d.ts +26 -0
- package/components/quiz/LeaderboardRow.jsx +24 -0
- package/components/quiz/LeaderboardRow.prompt.md +10 -0
- package/components/rewards/ItemCell.d.ts +24 -0
- package/components/rewards/ItemCell.jsx +24 -0
- package/components/rewards/ItemCell.prompt.md +9 -0
- package/components/rewards/RewardCard.d.ts +24 -0
- package/components/rewards/RewardCard.jsx +34 -0
- package/components/rewards/RewardCard.prompt.md +8 -0
- package/components/rewards/ShopRow.d.ts +23 -0
- package/components/rewards/ShopRow.jsx +26 -0
- package/components/rewards/ShopRow.prompt.md +7 -0
- package/components/text/Heading.d.ts +19 -0
- package/components/text/Heading.jsx +15 -0
- package/components/text/Heading.prompt.md +10 -0
- package/components/text/OutlineText.d.ts +24 -0
- package/components/text/OutlineText.jsx +20 -0
- package/components/text/OutlineText.prompt.md +11 -0
- package/components/toolbar/FastTravelDock.d.ts +50 -0
- package/components/toolbar/FastTravelDock.jsx +36 -0
- package/components/toolbar/FastTravelDock.prompt.md +12 -0
- package/components/toolbar/Toolbar.d.ts +16 -0
- package/components/toolbar/Toolbar.jsx +8 -0
- package/components/toolbar/Toolbar.prompt.md +14 -0
- package/components/toolbar/ToolbarNext.d.ts +21 -0
- package/components/toolbar/ToolbarNext.jsx +21 -0
- package/components/toolbar/ToolbarNext.prompt.md +13 -0
- package/components/toolbar/ToolbarTab.d.ts +15 -0
- package/components/toolbar/ToolbarTab.jsx +12 -0
- package/components/toolbar/ToolbarTab.prompt.md +9 -0
- package/components/viewer/ClueCard.d.ts +18 -0
- package/components/viewer/ClueCard.jsx +14 -0
- package/components/viewer/ClueCard.prompt.md +9 -0
- package/components/viewer/ClueTab.d.ts +16 -0
- package/components/viewer/ClueTab.jsx +12 -0
- package/components/viewer/ClueTab.prompt.md +8 -0
- package/components/viewer/RevealTray.d.ts +54 -0
- package/components/viewer/RevealTray.jsx +58 -0
- package/components/viewer/RevealTray.prompt.md +21 -0
- package/components/viewer/RoadsideViewer.d.ts +60 -0
- package/components/viewer/RoadsideViewer.jsx +96 -0
- package/components/viewer/RoadsideViewer.prompt.md +20 -0
- package/components/viewer/ViewerKeys.d.ts +26 -0
- package/components/viewer/ViewerKeys.jsx +22 -0
- package/components/viewer/ViewerKeys.prompt.md +14 -0
- package/components/viewer/ViewerKnob.d.ts +20 -0
- package/components/viewer/ViewerKnob.jsx +12 -0
- package/components/viewer/ViewerKnob.prompt.md +11 -0
- package/components/viewer/WhoButton.d.ts +21 -0
- package/components/viewer/WhoButton.jsx +15 -0
- package/components/viewer/WhoButton.prompt.md +10 -0
- package/package.json +62 -4
- package/readme.md +145 -0
- package/styles.css +15 -0
- package/tokens/colors.css +140 -0
- package/tokens/effects.css +40 -0
- package/tokens/fonts.css +3 -0
- package/tokens/fx.css +186 -0
- package/tokens/gems.css +8 -0
- package/tokens/hud.css +510 -0
- package/tokens/icons.css +7 -0
- package/tokens/media.css +774 -0
- package/tokens/signs.css +459 -0
- package/tokens/spacing.css +38 -0
- package/tokens/typography.css +34 -0
- package/tokens/ui.css +432 -0
- package/tokens/utilities.css +34 -0
- package/tokens/viewer.css +1176 -0
- package/tokens/worlds.css +73 -0
- package/tools/ds-loader.js +60 -0
- package/README.md +0 -3
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/* Lanre color tokens. Base ramps in oklch (100 = lightest, 900 = darkest), then semantic aliases. */
|
|
2
|
+
:root {
|
|
3
|
+
/* Meadow: environment green (grass, bushes, board tiles) */
|
|
4
|
+
--green-100: oklch(0.94 0.08 128);
|
|
5
|
+
--green-300: oklch(0.85 0.17 132);
|
|
6
|
+
--green-500: oklch(0.74 0.19 136);
|
|
7
|
+
--green-700: oklch(0.58 0.16 140);
|
|
8
|
+
--green-900: oklch(0.40 0.10 142);
|
|
9
|
+
|
|
10
|
+
/* Sky: action blue (play, current level, water) */
|
|
11
|
+
--blue-100: oklch(0.94 0.05 228);
|
|
12
|
+
--blue-300: oklch(0.83 0.11 232);
|
|
13
|
+
--blue-500: oklch(0.68 0.17 240);
|
|
14
|
+
--blue-700: oklch(0.52 0.17 250);
|
|
15
|
+
--blue-900: oklch(0.36 0.12 255);
|
|
16
|
+
|
|
17
|
+
/* Gold: reward, currency, stars, primary CTA */
|
|
18
|
+
--gold-100: oklch(0.97 0.06 92);
|
|
19
|
+
--gold-300: oklch(0.92 0.14 90);
|
|
20
|
+
--gold-500: oklch(0.86 0.17 85);
|
|
21
|
+
--gold-700: oklch(0.71 0.16 68);
|
|
22
|
+
--gold-900: oklch(0.44 0.10 58);
|
|
23
|
+
|
|
24
|
+
/* Coral: danger, urgency, hearts, notification */
|
|
25
|
+
--coral-100: oklch(0.94 0.04 30);
|
|
26
|
+
--coral-300: oklch(0.83 0.11 30);
|
|
27
|
+
--coral-500: oklch(0.68 0.20 30);
|
|
28
|
+
--coral-700: oklch(0.55 0.19 28);
|
|
29
|
+
--coral-900: oklch(0.38 0.13 26);
|
|
30
|
+
|
|
31
|
+
/* Teal: confirm / OK / positive secondary */
|
|
32
|
+
--teal-100: oklch(0.95 0.04 185);
|
|
33
|
+
--teal-300: oklch(0.88 0.09 184);
|
|
34
|
+
--teal-500: oklch(0.76 0.13 180);
|
|
35
|
+
--teal-700: oklch(0.58 0.11 182);
|
|
36
|
+
--teal-900: oklch(0.40 0.08 184);
|
|
37
|
+
|
|
38
|
+
/* Berry: premium, boosts, special offers */
|
|
39
|
+
--berry-100: oklch(0.95 0.04 340);
|
|
40
|
+
--berry-300: oklch(0.85 0.11 340);
|
|
41
|
+
--berry-500: oklch(0.66 0.22 340);
|
|
42
|
+
--berry-700: oklch(0.50 0.20 340);
|
|
43
|
+
--berry-900: oklch(0.34 0.13 340);
|
|
44
|
+
|
|
45
|
+
/* Wood: frames, fences, signposts */
|
|
46
|
+
--wood-100: oklch(0.93 0.06 80);
|
|
47
|
+
--wood-300: oklch(0.80 0.10 70);
|
|
48
|
+
--wood-500: oklch(0.62 0.12 60);
|
|
49
|
+
--wood-700: oklch(0.46 0.10 54);
|
|
50
|
+
--wood-900: oklch(0.30 0.07 50);
|
|
51
|
+
|
|
52
|
+
/* Stone: locked, disabled, inactive */
|
|
53
|
+
--stone-100: oklch(0.96 0.01 250);
|
|
54
|
+
--stone-300: oklch(0.86 0.02 250);
|
|
55
|
+
--stone-500: oklch(0.71 0.03 250);
|
|
56
|
+
--stone-700: oklch(0.55 0.04 255);
|
|
57
|
+
--stone-900: oklch(0.36 0.04 260);
|
|
58
|
+
|
|
59
|
+
/* Parchment: panel surfaces */
|
|
60
|
+
--cream-50: oklch(0.99 0.01 85);
|
|
61
|
+
--cream-100: oklch(0.97 0.03 85);
|
|
62
|
+
--cream-200: oklch(0.93 0.05 80);
|
|
63
|
+
--cream-300: oklch(0.88 0.07 70);
|
|
64
|
+
|
|
65
|
+
/* Ink: warm brown text */
|
|
66
|
+
--ink-900: oklch(0.27 0.05 55);
|
|
67
|
+
--ink-700: oklch(0.41 0.06 55);
|
|
68
|
+
--ink-500: oklch(0.57 0.05 55);
|
|
69
|
+
--white: #ffffff;
|
|
70
|
+
|
|
71
|
+
/* Night: the summit letter and the credits, after dark above the clouds */
|
|
72
|
+
--night-ink: oklch(0.182 0.05 289.7);
|
|
73
|
+
--night-sky: oklch(0.229 0.064 289.9);
|
|
74
|
+
--night-lilac: oklch(0.807 0.067 303.7);
|
|
75
|
+
--night-cream: oklch(0.964 0.032 78.2);
|
|
76
|
+
--night-gold: oklch(0.8543 0.1685 86.58);
|
|
77
|
+
--night-gold-hi: oklch(0.91 0.138 94.4);
|
|
78
|
+
|
|
79
|
+
/* ---- Semantic aliases ---- */
|
|
80
|
+
--bg-meadow: linear-gradient(180deg, var(--green-300) 0%, var(--green-500) 100%);
|
|
81
|
+
--bg-sky: linear-gradient(180deg, oklch(0.78 0.11 232) 0%, oklch(0.92 0.05 220) 100%);
|
|
82
|
+
--bg-dusk: linear-gradient(180deg, oklch(0.52 0.14 290) 0%, oklch(0.72 0.13 40) 100%);
|
|
83
|
+
--bg-scrim: oklch(0.22 0.05 260 / 0.55);
|
|
84
|
+
|
|
85
|
+
--surface-panel: var(--cream-100);
|
|
86
|
+
--surface-panel-border: var(--cream-300);
|
|
87
|
+
--surface-panel-tab: var(--white);
|
|
88
|
+
--surface-inset: var(--cream-200);
|
|
89
|
+
--surface-hud: oklch(0.30 0.06 55 / 0.82);
|
|
90
|
+
--surface-cell: oklch(0.34 0.09 145 / 0.30);
|
|
91
|
+
--surface-cell-active: oklch(0.34 0.09 200 / 0.45);
|
|
92
|
+
--surface-wood: var(--wood-500);
|
|
93
|
+
--surface-wood-plank: var(--wood-100);
|
|
94
|
+
|
|
95
|
+
--text-primary: var(--ink-900);
|
|
96
|
+
--text-secondary: var(--ink-700);
|
|
97
|
+
--text-muted: var(--ink-500);
|
|
98
|
+
--text-on-dark: var(--white);
|
|
99
|
+
--text-on-gold: var(--gold-900);
|
|
100
|
+
--text-outline: var(--ink-900);
|
|
101
|
+
--text-outline-stone: var(--stone-700);
|
|
102
|
+
--text-outline-blue: var(--blue-700);
|
|
103
|
+
|
|
104
|
+
--action-primary: var(--gold-500);
|
|
105
|
+
--action-primary-shade: var(--gold-700);
|
|
106
|
+
--action-play: var(--blue-500);
|
|
107
|
+
--action-play-shade: var(--blue-700);
|
|
108
|
+
--action-confirm: var(--teal-500);
|
|
109
|
+
--action-confirm-shade: var(--teal-700);
|
|
110
|
+
--action-danger: var(--coral-500);
|
|
111
|
+
--action-danger-shade: var(--coral-700);
|
|
112
|
+
--action-premium: var(--berry-500);
|
|
113
|
+
--action-premium-shade: var(--berry-700);
|
|
114
|
+
|
|
115
|
+
--state-locked: var(--stone-500);
|
|
116
|
+
--state-locked-shade: var(--stone-700);
|
|
117
|
+
--state-current: var(--blue-500);
|
|
118
|
+
--state-complete: var(--green-500);
|
|
119
|
+
--state-perfect: var(--gold-500);
|
|
120
|
+
|
|
121
|
+
--star-fill: var(--gold-500);
|
|
122
|
+
--star-fill-light: var(--gold-300);
|
|
123
|
+
--star-outline: var(--gold-700);
|
|
124
|
+
--star-empty: var(--stone-500);
|
|
125
|
+
--star-empty-outline: var(--stone-700);
|
|
126
|
+
|
|
127
|
+
--currency-coin: var(--gold-500);
|
|
128
|
+
--currency-gem: var(--coral-500);
|
|
129
|
+
--currency-gem-alt: var(--blue-500);
|
|
130
|
+
--currency-heart: var(--coral-500);
|
|
131
|
+
--currency-energy: var(--teal-500);
|
|
132
|
+
|
|
133
|
+
--focus-ring: 0 0 0 4px oklch(0.86 0.17 85 / 0.85);
|
|
134
|
+
|
|
135
|
+
/* Step marker (.mp-step): the small numbered marker on the contributor trail, memory blocks and world signs.
|
|
136
|
+
highlight = the light spot on top, fill = the top surface, edge = the darker bevel underneath, outline = the stroke behind the number. */
|
|
137
|
+
--step-ahead-highlight: var(--stone-100); --step-ahead-fill: var(--stone-300); --step-ahead-edge: var(--stone-500); --step-ahead-outline: var(--stone-700);
|
|
138
|
+
--step-done-highlight: var(--green-300); --step-done-fill: var(--green-500); --step-done-edge: var(--green-700); --step-done-outline: var(--green-900);
|
|
139
|
+
--step-current-highlight: var(--blue-300); --step-current-fill: var(--blue-500); --step-current-edge: var(--blue-700); --step-current-outline: var(--blue-700);
|
|
140
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/* Lanre radii, borders, bevels, shadows, glows, motion. */
|
|
2
|
+
:root {
|
|
3
|
+
--radius-xs: 6px;
|
|
4
|
+
--radius-sm: 10px;
|
|
5
|
+
--radius-md: 16px;
|
|
6
|
+
--radius-lg: 22px;
|
|
7
|
+
--radius-xl: 28px;
|
|
8
|
+
--radius-pill: 999px;
|
|
9
|
+
|
|
10
|
+
--border-panel: 4px;
|
|
11
|
+
--border-cell: 3px;
|
|
12
|
+
--border-hairline: 2px;
|
|
13
|
+
|
|
14
|
+
/* Bevel: every pressable has a solid darker bottom edge (a "0 Npx 0 shade" box-shadow) */
|
|
15
|
+
--bevel-sm: 3px;
|
|
16
|
+
--bevel-md: 5px;
|
|
17
|
+
--bevel-lg: 7px;
|
|
18
|
+
--press-travel: 4px;
|
|
19
|
+
|
|
20
|
+
--highlight-top: inset 0 2px 0 oklch(1 0 0 / 0.5);
|
|
21
|
+
--shadow-drop-sm: 0 4px 10px oklch(0.25 0.05 60 / 0.22);
|
|
22
|
+
--shadow-drop: 0 10px 24px oklch(0.25 0.05 60 / 0.28);
|
|
23
|
+
--shadow-panel: 0 20px 44px oklch(0.22 0.05 60 / 0.38);
|
|
24
|
+
--shadow-text: 0 2px 0 oklch(0 0 0 / 0.25);
|
|
25
|
+
|
|
26
|
+
/* The scrim behind a modal softens the world by this much. Surfaces never blur. */
|
|
27
|
+
--scrim-blur: 3px;
|
|
28
|
+
|
|
29
|
+
--glow-gold: 0 0 0 4px oklch(0.86 0.17 85 / 0.5), 0 0 28px oklch(0.86 0.17 85 / 0.7);
|
|
30
|
+
--glow-blue: 0 0 0 4px oklch(0.68 0.17 240 / 0.5), 0 0 28px oklch(0.68 0.17 240 / 0.7);
|
|
31
|
+
--glow-berry: 0 0 0 4px oklch(0.66 0.22 340 / 0.5), 0 0 28px oklch(0.66 0.22 340 / 0.7);
|
|
32
|
+
|
|
33
|
+
--ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
34
|
+
--ease-out: cubic-bezier(0.22, 1, 0.36, 1);
|
|
35
|
+
--ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
|
|
36
|
+
--dur-fast: 120ms;
|
|
37
|
+
--dur-base: 220ms;
|
|
38
|
+
--dur-slow: 420ms;
|
|
39
|
+
--dur-idle: 2400ms;
|
|
40
|
+
}
|
package/tokens/fonts.css
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/* Lanre webfonts: served from Google Fonts (no binaries were provided; see readme.md "Caveats").
|
|
2
|
+
Display: Titan One (single weight). UI: Quicksand 500/600/700. */
|
|
3
|
+
@import url("https://fonts.googleapis.com/css2?family=Titan+One&family=Quicksand:wght@500;600;700&display=swap");
|
package/tokens/fx.css
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/* Effects and the loading screen: a confetti burst, a few twinkles, turning sun rays, and the boot screen.
|
|
2
|
+
Used by Confetti, Sparkles, Sunburst and LoadingScreen. The twinkle uses mp-sparkle from utilities.css. */
|
|
3
|
+
|
|
4
|
+
/* ---------- Confetti ---------- */
|
|
5
|
+
|
|
6
|
+
.mp-confetti {
|
|
7
|
+
position: absolute;
|
|
8
|
+
left: 50%;
|
|
9
|
+
top: 40%;
|
|
10
|
+
width: 0;
|
|
11
|
+
height: 0;
|
|
12
|
+
pointer-events: none;
|
|
13
|
+
z-index: 5;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.mp-confetti span {
|
|
17
|
+
position: absolute;
|
|
18
|
+
left: 0;
|
|
19
|
+
top: 0;
|
|
20
|
+
opacity: 0;
|
|
21
|
+
animation: mp-confetti-burst 1500ms cubic-bezier(0.15, 0.7, 0.3, 1) both;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@keyframes mp-confetti-burst {
|
|
25
|
+
0% { opacity: 1; transform: translate(0, 0) rotate(0) scale(0.4); }
|
|
26
|
+
70% { opacity: 1; }
|
|
27
|
+
100% { opacity: 0; transform: translate(var(--dx), calc(var(--dy) + 160px)) rotate(var(--rot)) scale(1); }
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* ---------- Sparkles ---------- */
|
|
31
|
+
|
|
32
|
+
.mp-sparkle-spot {
|
|
33
|
+
position: absolute;
|
|
34
|
+
color: var(--gold-300);
|
|
35
|
+
font-size: 22px;
|
|
36
|
+
text-shadow: 0 0 10px oklch(0.92 0.14 90 / 0.9);
|
|
37
|
+
pointer-events: none;
|
|
38
|
+
animation: mp-sparkle 1.6s ease-in-out infinite;
|
|
39
|
+
animation-delay: calc(var(--i, 0) * 260ms);
|
|
40
|
+
z-index: 1;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* ---------- Sunburst ---------- */
|
|
44
|
+
|
|
45
|
+
.mp-sunburst-motion { transform-origin: 0 0; }
|
|
46
|
+
.mp-sunburst-motion[data-sunburst-motion='continuous'] { animation: mp-sunburst-turn var(--sunburst-duration, 120s) linear infinite; }
|
|
47
|
+
.mp-sunburst-motion[data-sunburst-motion='once'] { animation: mp-sunburst-reveal var(--sunburst-duration, 2s) ease-out both; }
|
|
48
|
+
@keyframes mp-sunburst-turn { to { transform: rotate(360deg); } }
|
|
49
|
+
@keyframes mp-sunburst-reveal {
|
|
50
|
+
0% { opacity: 0; transform: rotate(-12deg) scale(0.85); }
|
|
51
|
+
25% { opacity: 1; }
|
|
52
|
+
100% { opacity: 0; transform: rotate(12deg) scale(1.05); }
|
|
53
|
+
}
|
|
54
|
+
@media (prefers-reduced-motion: reduce) { .mp-sunburst-motion { animation: none !important; } }
|
|
55
|
+
|
|
56
|
+
/* ---------- Loading screen ---------- */
|
|
57
|
+
|
|
58
|
+
.mp-loading {
|
|
59
|
+
position: relative;
|
|
60
|
+
min-height: 100dvh;
|
|
61
|
+
display: grid;
|
|
62
|
+
place-items: center;
|
|
63
|
+
overflow: hidden;
|
|
64
|
+
background: var(--bg-sky);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.mp-loading-stack {
|
|
68
|
+
position: relative;
|
|
69
|
+
z-index: 1;
|
|
70
|
+
display: grid;
|
|
71
|
+
justify-items: center;
|
|
72
|
+
gap: 22px;
|
|
73
|
+
padding: 0 24px 120px;
|
|
74
|
+
max-width: 420px;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* Boot bar: dark track, striped gold fill that grows and shrinks. */
|
|
78
|
+
.mp-loading-track {
|
|
79
|
+
width: 180px;
|
|
80
|
+
height: 22px;
|
|
81
|
+
border-radius: 999px;
|
|
82
|
+
background: oklch(0.3 0.06 55 / 0.85);
|
|
83
|
+
border: 2px solid oklch(0.2 0.05 55 / 0.9);
|
|
84
|
+
box-shadow: inset 0 2px 4px oklch(0 0 0 / 0.35);
|
|
85
|
+
overflow: hidden;
|
|
86
|
+
margin-top: 26px;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.mp-loading-fill {
|
|
90
|
+
display: block;
|
|
91
|
+
position: relative;
|
|
92
|
+
height: 100%;
|
|
93
|
+
width: 60%;
|
|
94
|
+
border-radius: 999px;
|
|
95
|
+
background: linear-gradient(180deg, var(--gold-300), var(--gold-500) 55%, var(--gold-700));
|
|
96
|
+
animation: mp-loading-grow 1.6s var(--ease-out) infinite alternate;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.mp-loading-fill::after {
|
|
100
|
+
content: '';
|
|
101
|
+
position: absolute;
|
|
102
|
+
inset: 0;
|
|
103
|
+
opacity: 0.35;
|
|
104
|
+
background: repeating-linear-gradient(-55deg, transparent 0 8px, oklch(1 0 0 / 0.55) 8px 14px);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
@keyframes mp-loading-grow {
|
|
108
|
+
from { width: 25%; }
|
|
109
|
+
to { width: 85%; }
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.mp-loading-cloud {
|
|
113
|
+
position: absolute;
|
|
114
|
+
height: 26px;
|
|
115
|
+
border-radius: 999px;
|
|
116
|
+
background: oklch(1 0 0 / 0.85);
|
|
117
|
+
animation: mp-cloud-drift 18s linear infinite;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.mp-loading-cloud::before {
|
|
121
|
+
content: '';
|
|
122
|
+
position: absolute;
|
|
123
|
+
left: 22%;
|
|
124
|
+
top: -12px;
|
|
125
|
+
width: 40%;
|
|
126
|
+
height: 30px;
|
|
127
|
+
border-radius: 50%;
|
|
128
|
+
background: inherit;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.mp-loading-cloud-a { left: 8%; top: 10%; width: 96px; }
|
|
132
|
+
.mp-loading-cloud-b { left: 70%; top: 18%; width: 72px; animation-duration: 24s; }
|
|
133
|
+
.mp-loading-cloud-c { left: 40%; top: 6%; width: 56px; animation-duration: 30s; }
|
|
134
|
+
|
|
135
|
+
@keyframes mp-cloud-drift {
|
|
136
|
+
from { translate: 0 0; }
|
|
137
|
+
to { translate: 40px 0; }
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/* Mango Grove peeking in from below, with the road setting off. */
|
|
141
|
+
.mp-loading-ground {
|
|
142
|
+
position: absolute;
|
|
143
|
+
left: -10%;
|
|
144
|
+
right: -10%;
|
|
145
|
+
bottom: -60px;
|
|
146
|
+
height: 200px;
|
|
147
|
+
border-radius: 50% 50% 0 0 / 100% 100% 0 0;
|
|
148
|
+
background: linear-gradient(180deg, #c3e77f, #a6d85b 60%, #8cc446);
|
|
149
|
+
box-shadow: inset 0 6px 0 oklch(1 0 0 / 0.35);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.mp-loading-hill {
|
|
153
|
+
position: absolute;
|
|
154
|
+
left: 55%;
|
|
155
|
+
bottom: 70px;
|
|
156
|
+
width: 60%;
|
|
157
|
+
height: 160px;
|
|
158
|
+
border-radius: 50%;
|
|
159
|
+
background: #8cc446;
|
|
160
|
+
opacity: 0.6;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.mp-loading-road {
|
|
164
|
+
position: absolute;
|
|
165
|
+
left: 50%;
|
|
166
|
+
bottom: 0;
|
|
167
|
+
width: 70px;
|
|
168
|
+
height: 150px;
|
|
169
|
+
margin-left: -35px;
|
|
170
|
+
border-radius: 40px 40px 0 0;
|
|
171
|
+
background: #f6e1ad;
|
|
172
|
+
box-shadow: 0 0 0 6px #d8b173;
|
|
173
|
+
rotate: -12deg;
|
|
174
|
+
transform-origin: bottom;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
@media (prefers-reduced-motion: reduce) {
|
|
178
|
+
.mp-loading-fill,
|
|
179
|
+
.mp-loading-cloud,
|
|
180
|
+
.mp-sparkle-spot {
|
|
181
|
+
animation: none;
|
|
182
|
+
}
|
|
183
|
+
.mp-confetti {
|
|
184
|
+
display: none;
|
|
185
|
+
}
|
|
186
|
+
}
|
package/tokens/gems.css
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/* Quiz gemstones. Score 0–2 → Amber I/II/III · 3–5 → Emerald · 6–8 → Amethyst · quiz skipped → Pearl keepsake (unranked).
|
|
2
|
+
Tier I plain · II adds a sparkle · III adds a halo (proposed: III keeps the sparkle too). Shape + name always accompany colour. */
|
|
3
|
+
:root {
|
|
4
|
+
--gem-amber: oklch(0.80 0.16 70); --gem-amber-light: oklch(0.92 0.12 85); --gem-amber-deep: oklch(0.56 0.15 55);
|
|
5
|
+
--gem-emerald: oklch(0.70 0.18 155); --gem-emerald-light: oklch(0.86 0.14 150); --gem-emerald-deep: oklch(0.46 0.14 158);
|
|
6
|
+
--gem-amethyst: oklch(0.62 0.20 305);--gem-amethyst-light: oklch(0.80 0.13 310);--gem-amethyst-deep: oklch(0.40 0.16 300);
|
|
7
|
+
--gem-pearl: oklch(0.95 0.02 90); --gem-pearl-light: #ffffff; --gem-pearl-deep: oklch(0.76 0.04 260);
|
|
8
|
+
}
|