css-is-awesome 1.1.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/AGENTS.md +343 -0
- package/CHANGELOG.md +1036 -0
- package/CLAUDE.md +9 -0
- package/CONTRACT.md +580 -0
- package/GEMINI.md +9 -0
- package/LICENSE +21 -0
- package/LICENSE-third-party +88 -0
- package/MIGRATION.md +312 -0
- package/README.md +380 -0
- package/ROADMAP.md +714 -0
- package/THEMING.md +290 -0
- package/THREE-TIERS.md +158 -0
- package/VERSIONING.md +200 -0
- package/_index.scss +34 -0
- package/api.scss +16 -0
- package/bin/README.md +57 -0
- package/bin/cia.cjs +114 -0
- package/bin/migrate-bootstrap.cjs +427 -0
- package/bin/migrate-tailwind.cjs +832 -0
- package/css-is-awesome.instructions.md +533 -0
- package/dist/css-is-awesome.core.css +598 -0
- package/dist/css-is-awesome.core.min.css +1 -0
- package/dist/css-is-awesome.css +3733 -0
- package/dist/css-is-awesome.min.css +1 -0
- package/dist/css-is-awesome.utilities.css +2445 -0
- package/dist/css-is-awesome.utilities.min.css +1 -0
- package/dist/tokens.css +508 -0
- package/dist/tokens.d.ts +266 -0
- package/dist/tokens.min.css +1 -0
- package/figma-tokens/README.md +57 -0
- package/figma-tokens/primitives-brand.scss +121 -0
- package/figma-tokens/semantic-dark.scss +61 -0
- package/figma-tokens/semantic-light.scss +61 -0
- package/figma-tokens/tokens.json +144 -0
- package/llm.txt +183 -0
- package/mcp/server.cjs +1495 -0
- package/package.json +199 -0
- package/public/icons/README.md +278 -0
- package/public/icons/arrow-right.svg +4 -0
- package/public/icons/check.svg +4 -0
- package/public/icons/chevron-down.svg +4 -0
- package/public/icons/close.svg +4 -0
- package/public/icons/core/arrow-down.svg +13 -0
- package/public/icons/core/arrow-left.svg +13 -0
- package/public/icons/core/arrow-right.svg +13 -0
- package/public/icons/core/arrow-up.svg +13 -0
- package/public/icons/core/bell.svg +13 -0
- package/public/icons/core/calendar.svg +15 -0
- package/public/icons/core/check.svg +12 -0
- package/public/icons/core/chevron-down.svg +12 -0
- package/public/icons/core/chevron-left.svg +12 -0
- package/public/icons/core/chevron-right.svg +12 -0
- package/public/icons/core/chevron-up.svg +12 -0
- package/public/icons/core/clock.svg +13 -0
- package/public/icons/core/close.svg +13 -0
- package/public/icons/core/copy.svg +13 -0
- package/public/icons/core/download.svg +14 -0
- package/public/icons/core/edit.svg +13 -0
- package/public/icons/core/error.svg +14 -0
- package/public/icons/core/external-link.svg +14 -0
- package/public/icons/core/eye-off.svg +15 -0
- package/public/icons/core/eye.svg +13 -0
- package/public/icons/core/filter.svg +12 -0
- package/public/icons/core/heart.svg +12 -0
- package/public/icons/core/help.svg +14 -0
- package/public/icons/core/home.svg +13 -0
- package/public/icons/core/info.svg +14 -0
- package/public/icons/core/loading.svg +12 -0
- package/public/icons/core/lock.svg +13 -0
- package/public/icons/core/mail.svg +13 -0
- package/public/icons/core/menu.svg +14 -0
- package/public/icons/core/message.svg +12 -0
- package/public/icons/core/minus.svg +12 -0
- package/public/icons/core/more-horizontal.svg +14 -0
- package/public/icons/core/pause.svg +13 -0
- package/public/icons/core/play.svg +12 -0
- package/public/icons/core/plus.svg +13 -0
- package/public/icons/core/refresh.svg +15 -0
- package/public/icons/core/save.svg +14 -0
- package/public/icons/core/search.svg +13 -0
- package/public/icons/core/settings.svg +13 -0
- package/public/icons/core/share.svg +14 -0
- package/public/icons/core/sort.svg +15 -0
- package/public/icons/core/star.svg +12 -0
- package/public/icons/core/success.svg +13 -0
- package/public/icons/core/trash.svg +16 -0
- package/public/icons/core/unlock.svg +13 -0
- package/public/icons/core/upload.svg +14 -0
- package/public/icons/core/user.svg +13 -0
- package/public/icons/core/users.svg +15 -0
- package/public/icons/core/warning.svg +14 -0
- package/public/icons/download.svg +4 -0
- package/public/icons/edit.svg +4 -0
- package/public/icons/menu.svg +4 -0
- package/public/icons/search.svg +4 -0
- package/public/theme.css +4179 -0
- package/public/themes/README.md +102 -0
- package/public/themes/boilerplate/theme.css +154 -0
- package/public/themes/boilerplate-dark/theme.css +171 -0
- package/public/themes/boilerplate-light/theme.css +171 -0
- package/public/themes/cupertino/theme.css +165 -0
- package/public/themes/cupertino-dark/theme.css +200 -0
- package/public/themes/cupertino-light/theme.css +227 -0
- package/public/themes/glass/theme.css +190 -0
- package/public/themes/glass-dark/theme.css +201 -0
- package/public/themes/glass-light/theme.css +229 -0
- package/public/themes/graphite/theme.css +155 -0
- package/public/themes/graphite-dark/theme.css +223 -0
- package/public/themes/graphite-light/theme.css +191 -0
- package/public/themes/press/theme.css +189 -0
- package/public/themes/press-dark/theme.css +199 -0
- package/public/themes/press-light/theme.css +235 -0
- package/public/themes/prism/theme.css +159 -0
- package/public/themes/prism-dark/theme.css +185 -0
- package/public/themes/prism-light/theme.css +188 -0
- package/public/themes/sketchbook/theme.css +152 -0
- package/public/themes/sketchbook-dark/theme.css +194 -0
- package/public/themes/sketchbook-light/theme.css +188 -0
- package/public/themes/terminal/theme.css +159 -0
- package/public/themes/terminal-dark/theme.css +229 -0
- package/public/themes/terminal-light/theme.css +152 -0
- package/scripts/README.md +70 -0
- package/scripts/icon-contract.json +67 -0
- package/scripts/icon-validator.js +205 -0
- package/scripts/prepare-dist.mjs +65 -0
- package/scripts/theme-a11y.js +415 -0
- package/scripts/theme-contract.json +171 -0
- package/scripts/theme-validator.js +674 -0
- package/scss/README.md +55 -0
- package/scss/_animations-utilities.scss +107 -0
- package/scss/_animations.scss +248 -0
- package/scss/_app-styles.scss +15 -0
- package/scss/_generator.scss +174 -0
- package/scss/_icons.scss +475 -0
- package/scss/_index.scss +17 -0
- package/scss/_layout.scss +597 -0
- package/scss/_mixins.scss +1036 -0
- package/scss/_system.scss +291 -0
- package/scss/_utilities.scss +377 -0
- package/scss/api.scss +61 -0
- package/scss/components/_accordion.scss +72 -0
- package/scss/components/_buttons.scss +171 -0
- package/scss/components/_copy-button.scss +69 -0
- package/scss/components/_data.scss +190 -0
- package/scss/components/_feedback.scss +197 -0
- package/scss/components/_forms.scss +272 -0
- package/scss/components/_index.scss +17 -0
- package/scss/components/_navigation.scss +186 -0
- package/scss/components/_overlay.scss +259 -0
- package/scss/components/_stepper.scss +159 -0
- package/scss/components/_tabs.scss +72 -0
- package/scss/core.scss +54 -0
- package/scss/examples/_theming.scss +107 -0
- package/scss/examples/_usage.scss +317 -0
- package/scss/main.scss +64 -0
- package/scss/recipes/README.md +110 -0
- package/scss/recipes/_bare-tags.scss +232 -0
- package/scss/recipes/_recipe-template.md +119 -0
- package/scss/recipes/combobox.md +509 -0
- package/scss/recipes/dialog.md +265 -0
- package/scss/recipes/print-to-pdf.md +263 -0
- package/scss/theme/README.md +67 -0
- package/scss/theme/_brand.scss +18 -0
- package/scss/theme/_colors-dark.scss +68 -0
- package/scss/theme/_colors-light.scss +70 -0
- package/scss/theme/_components.scss +94 -0
- package/scss/theme/_icons.scss +104 -0
- package/scss/theme/_index.scss +62 -0
- package/scss/theme/_shadows.scss +65 -0
- package/scss/theme/_shape.scss +13 -0
- package/scss/theme/_typography.scss +9 -0
- package/scss/theme/registry.json +447 -0
- package/scss/themes/boilerplate-dark.scss +212 -0
- package/scss/themes/boilerplate-light.scss +209 -0
- package/scss/themes/boilerplate.scss +181 -0
- package/scss/themes/cupertino-dark.scss +238 -0
- package/scss/themes/cupertino-light.scss +266 -0
- package/scss/themes/cupertino.scss +194 -0
- package/scss/themes/glass-dark.scss +238 -0
- package/scss/themes/glass-light.scss +266 -0
- package/scss/themes/glass.scss +220 -0
- package/scss/themes/graphite-dark.scss +260 -0
- package/scss/themes/graphite-light.scss +228 -0
- package/scss/themes/graphite.scss +182 -0
- package/scss/themes/press-dark.scss +237 -0
- package/scss/themes/press-light.scss +273 -0
- package/scss/themes/press.scss +241 -0
- package/scss/themes/prism-dark.scss +217 -0
- package/scss/themes/prism-light.scss +220 -0
- package/scss/themes/prism.scss +190 -0
- package/scss/themes/sketchbook-dark.scss +231 -0
- package/scss/themes/sketchbook-light.scss +231 -0
- package/scss/themes/sketchbook.scss +178 -0
- package/scss/themes/terminal-dark.scss +267 -0
- package/scss/themes/terminal-light.scss +175 -0
- package/scss/themes/terminal.scss +185 -0
- package/scss/tokens.scss +23 -0
- package/scss/utilities-only.scss +4 -0
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
/* ============================================================
|
|
2
|
+
THEME — Liquid Glass (light)
|
|
3
|
+
-----------------------------------------------------------
|
|
4
|
+
Standalone file for `[data-theme="glass-light"]` consumers.
|
|
5
|
+
This is the ONE FILE users swap to reskin their site.
|
|
6
|
+
Replace this file with any other theme.css to change the
|
|
7
|
+
entire look & feel. Tokens only — no component CSS lives here.
|
|
8
|
+
|
|
9
|
+
TOKEN CONTRACT
|
|
10
|
+
-----------------------------------------------------------
|
|
11
|
+
Every theme MUST declare every variable in this file, even
|
|
12
|
+
if it sets it to a neutral value (e.g. --blur-md: none;).
|
|
13
|
+
That's what guarantees a clean one-file swap.
|
|
14
|
+
|
|
15
|
+
Slots:
|
|
16
|
+
Surfaces : --paper, --paper-raised, --paper-sunk, --paper-glass
|
|
17
|
+
Ink : --ink, --ink-soft, --ink-faint, --graphite, --muted
|
|
18
|
+
Lines : --guide, --guide-soft, --hair, --hair-soft
|
|
19
|
+
Primary : --ai, --ai-ink, --ai-wash (iOS indigo)
|
|
20
|
+
Seal : --shu, --shu-wash (iOS system pink)
|
|
21
|
+
Accent : --ochre, --ochre-wash (iOS orange)
|
|
22
|
+
Code : --code-bg/ink/muted/accent/green/blue
|
|
23
|
+
Type : --font-display/script/serif/sans/mono
|
|
24
|
+
Radius : --r-sm, --r-md, --r-lg
|
|
25
|
+
Shadow : --shadow-sm, --shadow-md, --shadow-lg
|
|
26
|
+
Blur : --blur-sm, --blur-md, --blur-lg (glass is the star here)
|
|
27
|
+
Glow : --glow-sm, --glow-md, --glow-lg (dual-inset rim light)
|
|
28
|
+
Motion : --duration-fast, --duration-normal, --duration-slow, --ease
|
|
29
|
+
|
|
30
|
+
NOTE ON MESH BACKGROUNDS
|
|
31
|
+
-----------------------------------------------------------
|
|
32
|
+
A page-level mesh gradient is NOT a theme token. The base
|
|
33
|
+
--paper slot is a pastel-tint white so surfaces look vibrant
|
|
34
|
+
out of the box; consumers who want the full visionOS mesh
|
|
35
|
+
should add a background-image at the page level themselves.
|
|
36
|
+
============================================================ */
|
|
37
|
+
|
|
38
|
+
@use '../mixins' as m;
|
|
39
|
+
|
|
40
|
+
@import 'https://fonts.googleapis.com/css2?family=Caveat:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap';
|
|
41
|
+
|
|
42
|
+
@include m.theme('glass-light', light) {
|
|
43
|
+
/* Surfaces — frosted translucent over a lavender-tint base */
|
|
44
|
+
--paper: #F4EEFF;
|
|
45
|
+
--paper-raised: #FFF;
|
|
46
|
+
--paper-sunk: #E8E0F5;
|
|
47
|
+
--paper-glass: rgba(255, 255, 255, 0.55);
|
|
48
|
+
|
|
49
|
+
/* Ink — warm near-black, Apple style */
|
|
50
|
+
--ink: #1D1D1F;
|
|
51
|
+
--ink-soft: #3A3A3C;
|
|
52
|
+
--ink-faint: #65656A;
|
|
53
|
+
--graphite: #2C2C2E;
|
|
54
|
+
--muted: #6E6E73;
|
|
55
|
+
|
|
56
|
+
/* Construction lines — glass doesn't like hard edges */
|
|
57
|
+
--guide: rgba(29, 29, 31, 0.14);
|
|
58
|
+
--guide-soft: rgba(29, 29, 31, 0.10);
|
|
59
|
+
--hair: rgba(29, 29, 31, 0.08);
|
|
60
|
+
--hair-soft: rgba(29, 29, 31, 0.04);
|
|
61
|
+
|
|
62
|
+
/* Primary accent — iOS indigo */
|
|
63
|
+
--ai: #5957E2;
|
|
64
|
+
--ai-ink: #3634A3;
|
|
65
|
+
--ai-wash: rgba(89, 87, 226, 0.12);
|
|
66
|
+
|
|
67
|
+
/* Seal — iOS system pink (draft / emphasis) */
|
|
68
|
+
--shu: #FF375F;
|
|
69
|
+
--shu-wash: rgba(255, 55, 95, 0.12);
|
|
70
|
+
|
|
71
|
+
/* Draft / marginalia — iOS orange */
|
|
72
|
+
--ochre: #FF9500;
|
|
73
|
+
--ochre-wash: rgba(255, 149, 0, 0.14);
|
|
74
|
+
|
|
75
|
+
/* Code surface */
|
|
76
|
+
--code-bg: rgba(29, 29, 31, 0.82);
|
|
77
|
+
--code-ink: #F5F5F7;
|
|
78
|
+
--code-muted: #BABABE;
|
|
79
|
+
--code-accent: #FFD60A;
|
|
80
|
+
--code-green: #30D158;
|
|
81
|
+
--code-blue: #64D2FF;
|
|
82
|
+
|
|
83
|
+
/* Typography — SF system stack */
|
|
84
|
+
--font-display: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Inter', system-ui, sans-serif;
|
|
85
|
+
--font-script: 'Caveat', 'Shadows Into Light', cursive;
|
|
86
|
+
--font-serif: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', Georgia, serif;
|
|
87
|
+
--font-sans: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'SF Pro Text', 'Inter', system-ui, sans-serif;
|
|
88
|
+
--font-mono: 'SF Mono', ui-monospace, 'JetBrains Mono', Menlo, Consolas, monospace;
|
|
89
|
+
|
|
90
|
+
/* Radius — soft and large, iOS-style */
|
|
91
|
+
--r-sm: 10px;
|
|
92
|
+
--r-md: 18px;
|
|
93
|
+
--r-lg: 24px;
|
|
94
|
+
|
|
95
|
+
/* Shadows — floaty with a cool-blue undertone */
|
|
96
|
+
--shadow-sm: 0 2px 10px rgba(31, 38, 135, 0.06);
|
|
97
|
+
--shadow-md: 0 8px 32px rgba(31, 38, 135, 0.10);
|
|
98
|
+
--shadow-lg: 0 24px 60px rgba(31, 38, 135, 0.14);
|
|
99
|
+
--shadow-xl: 0 40px 80px rgba(31, 38, 135, 0.18);
|
|
100
|
+
--shadow-2xl: 0 56px 112px rgba(31, 38, 135, 0.24);
|
|
101
|
+
|
|
102
|
+
/* Blur — the star of this theme; pair with --paper-glass */
|
|
103
|
+
--blur-sm: blur(14px) saturate(160%);
|
|
104
|
+
--blur-md: blur(22px) saturate(170%);
|
|
105
|
+
--blur-lg: blur(30px) saturate(180%);
|
|
106
|
+
|
|
107
|
+
/* Glow — dual-inset rim highlight (catches light like visionOS) */
|
|
108
|
+
--glow-sm: inset 0 1px 0 rgba(255, 255, 255, 0.70);
|
|
109
|
+
--glow-md:
|
|
110
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.85),
|
|
111
|
+
inset 0 -1px 0 rgba(255, 255, 255, 0.20),
|
|
112
|
+
inset 1px 0 0 rgba(255, 255, 255, 0.35),
|
|
113
|
+
inset -1px 0 0 rgba(255, 255, 255, 0.20);
|
|
114
|
+
--glow-lg:
|
|
115
|
+
inset 0 2px 0 rgba(255, 255, 255, 0.95),
|
|
116
|
+
inset 0 -2px 0 rgba(255, 255, 255, 0.25),
|
|
117
|
+
inset 2px 0 0 rgba(255, 255, 255, 0.45),
|
|
118
|
+
inset -2px 0 0 rgba(255, 255, 255, 0.25),
|
|
119
|
+
inset 0 0 40px rgba(255, 255, 255, 0.15);
|
|
120
|
+
|
|
121
|
+
/* Motion */
|
|
122
|
+
--duration-fast: 180ms;
|
|
123
|
+
--duration-normal: 240ms;
|
|
124
|
+
--duration-slow: 380ms;
|
|
125
|
+
--ease: cubic-bezier(0.33, 0.66, 0.33, 1);
|
|
126
|
+
|
|
127
|
+
/* ----------------------------------------------------------
|
|
128
|
+
SEMANTIC ALIASES
|
|
129
|
+
-----------------------------------------------------------
|
|
130
|
+
Bridge the library's expected names to this theme's native
|
|
131
|
+
palette. Components can now write m.color(surface-default)
|
|
132
|
+
or var(--surface-default) and reskin with the theme
|
|
133
|
+
automatically.
|
|
134
|
+
---------------------------------------------------------- */
|
|
135
|
+
|
|
136
|
+
/* Backgrounds (page-level) */
|
|
137
|
+
--background-default: var(--paper);
|
|
138
|
+
--background-subtle: var(--paper-sunk);
|
|
139
|
+
--background-navbar: var(--paper-raised);
|
|
140
|
+
|
|
141
|
+
/* Surfaces */
|
|
142
|
+
--surface-default: var(--paper);
|
|
143
|
+
--surface-raised: var(--paper-raised);
|
|
144
|
+
--surface-sunk: var(--paper-sunk);
|
|
145
|
+
--surface-muted: var(--paper-sunk);
|
|
146
|
+
--surface-subtle: var(--paper-raised);
|
|
147
|
+
--surface-emphasis: var(--ink);
|
|
148
|
+
--surface-glass: var(--paper-glass);
|
|
149
|
+
|
|
150
|
+
/* Text */
|
|
151
|
+
--text-primary: var(--ink);
|
|
152
|
+
--text-secondary: var(--ink-soft);
|
|
153
|
+
--text-muted: var(--ink-faint);
|
|
154
|
+
--text-tertiary: var(--muted);
|
|
155
|
+
--text-inverse: var(--paper);
|
|
156
|
+
--text-link: var(--ai);
|
|
157
|
+
--text-link-hover: var(--ai-ink);
|
|
158
|
+
|
|
159
|
+
/* Borders */
|
|
160
|
+
--border-default: var(--hair);
|
|
161
|
+
--border-subtle: var(--hair-soft);
|
|
162
|
+
--border-emphasis: var(--ink);
|
|
163
|
+
--border-focus: var(--ai);
|
|
164
|
+
|
|
165
|
+
/* Interactive (hover / active wash layers)
|
|
166
|
+
Kept subtle so glass translucency reads through. */
|
|
167
|
+
--interactive-hover: rgba(29, 29, 31, 0.04);
|
|
168
|
+
--interactive-active: rgba(29, 29, 31, 0.08);
|
|
169
|
+
|
|
170
|
+
/* Brand (identity — action-primary usually references these) */
|
|
171
|
+
--brand-primary: var(--ai);
|
|
172
|
+
--brand-primary-hover: var(--ai-ink);
|
|
173
|
+
|
|
174
|
+
/* Action (primary / secondary / tertiary) */
|
|
175
|
+
--action-primary-default: var(--ai);
|
|
176
|
+
--action-primary-hover: var(--ai-ink);
|
|
177
|
+
--action-primary-active: var(--ai-ink);
|
|
178
|
+
--action-primary-wash: var(--ai-wash);
|
|
179
|
+
--action-secondary-default: var(--shu);
|
|
180
|
+
--action-secondary-hover: var(--shu);
|
|
181
|
+
--action-secondary-active: var(--shu);
|
|
182
|
+
--action-secondary-wash: var(--shu-wash);
|
|
183
|
+
--action-tertiary-default: var(--ochre);
|
|
184
|
+
--action-tertiary-hover: var(--ochre);
|
|
185
|
+
--action-tertiary-active: var(--ochre);
|
|
186
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
187
|
+
|
|
188
|
+
/* Feedback / status (high-level semantic) */
|
|
189
|
+
--feedback-info: var(--ai);
|
|
190
|
+
--feedback-success: var(--code-green);
|
|
191
|
+
--feedback-warning: var(--ochre);
|
|
192
|
+
--feedback-error: var(--shu);
|
|
193
|
+
|
|
194
|
+
/* Status — info (three-part: default / subtle / text) */
|
|
195
|
+
--info-default: var(--ai);
|
|
196
|
+
--info-subtle: rgba(89, 87, 226, 0.12);
|
|
197
|
+
--info-text: var(--ai-ink);
|
|
198
|
+
|
|
199
|
+
/* Status — success (iOS system green) */
|
|
200
|
+
--success-default: #34C759;
|
|
201
|
+
--success-subtle: rgba(52, 199, 89, 0.12);
|
|
202
|
+
--success-text: #0F6A22;
|
|
203
|
+
|
|
204
|
+
/* Status — warning (iOS system orange) */
|
|
205
|
+
--warning-default: var(--ochre);
|
|
206
|
+
--warning-subtle: rgba(255, 149, 0, 0.12);
|
|
207
|
+
--warning-text: #985000;
|
|
208
|
+
|
|
209
|
+
/* Status — error (iOS system pink) */
|
|
210
|
+
--error-default: var(--shu);
|
|
211
|
+
--error-subtle: rgba(255, 55, 95, 0.12);
|
|
212
|
+
--error-text: #A3193A;
|
|
213
|
+
|
|
214
|
+
/* ----------------------------------------------------------
|
|
215
|
+
LIBRARY SCALES (space / radius / type / motion / z)
|
|
216
|
+
-----------------------------------------------------------
|
|
217
|
+
The library mixins emit var(--space-<key>), var(--radius-<key>),
|
|
218
|
+
var(--font-primary), var(--font-size-<key>), var(--z-<key>), …
|
|
219
|
+
Themes declare the slots so those mixins always resolve.
|
|
220
|
+
---------------------------------------------------------- */
|
|
221
|
+
|
|
222
|
+
/* Space scale (rem for accessibility) */
|
|
223
|
+
|
|
224
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
225
|
+
The numbered scale is the source of truth: every component reads
|
|
226
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
227
|
+
are emitted by the library as references to these, so they follow
|
|
228
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
229
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
230
|
+
--space-0: 0; /* flush */
|
|
231
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
232
|
+
--space-2: 0.75rem; /* control padding */
|
|
233
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
234
|
+
--space-4: 1rem; /* default rhythm */
|
|
235
|
+
--space-5: 1.5rem; /* section gap */
|
|
236
|
+
--space-6: 2rem; /* block gap */
|
|
237
|
+
--space-7: 3rem; /* major gap */
|
|
238
|
+
--space-8: 4rem; /* page section */
|
|
239
|
+
--space-9: 6rem; /* hero rhythm */
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
/* Radius alias — mirrors --r-* with standard names so
|
|
246
|
+
`m.radius(size)` in the library finds --radius-<size>. */
|
|
247
|
+
--radius-sm: var(--r-sm);
|
|
248
|
+
--radius-md: var(--r-md);
|
|
249
|
+
--radius-lg: var(--r-lg);
|
|
250
|
+
--radius-xl: 0.75rem;
|
|
251
|
+
--radius-full: 9999px;
|
|
252
|
+
|
|
253
|
+
/* Typography — base body font + key scale slots */
|
|
254
|
+
--font-primary: var(--font-sans);
|
|
255
|
+
--font-size-base: 1rem;
|
|
256
|
+
--line-height-normal: 1.5;
|
|
257
|
+
--font-weight-medium: 500;
|
|
258
|
+
|
|
259
|
+
/* Z-index layers */
|
|
260
|
+
--z-sticky: 1020;
|
|
261
|
+
--z-dropdown: 1030;
|
|
262
|
+
--z-backdrop: 1040;
|
|
263
|
+
--z-modal: 1050;
|
|
264
|
+
--z-popover: 1060;
|
|
265
|
+
--z-tooltip: 1070;
|
|
266
|
+
}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// THEME — Glass (Liquid Glass / visionOS)
|
|
3
|
+
// ============================================================================
|
|
4
|
+
// Translucent glassmorphism. SF system stack, large iOS radii, dual-inset
|
|
5
|
+
// rim-light glow. --blur-* is the star.
|
|
6
|
+
//
|
|
7
|
+
// Pattern C: blur radii and saturation differ per mode (light-dark() is
|
|
8
|
+
// color-only per spec, so non-color tokens override via nested @media).
|
|
9
|
+
//
|
|
10
|
+
// Light: frosted over lavender-tint base. Dark: glassy over blue-black void.
|
|
11
|
+
//
|
|
12
|
+
// Selector: :root, :root[data-theme="glass"]
|
|
13
|
+
// Replaces: [data-theme="glass-light"] + [data-theme="glass-dark"]
|
|
14
|
+
// ============================================================================
|
|
15
|
+
@use '../mixins' as m;
|
|
16
|
+
|
|
17
|
+
@import 'https://fonts.googleapis.com/css2?family=Caveat:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap';
|
|
18
|
+
|
|
19
|
+
@include m.theme('glass') {
|
|
20
|
+
/* Surfaces — frosted translucent / blue-black void */
|
|
21
|
+
--paper: light-dark(#F4EEFF, #0A0F1A);
|
|
22
|
+
--paper-raised: light-dark(#FFF, #141E32);
|
|
23
|
+
--paper-sunk: light-dark(#E8E0F5, #050810);
|
|
24
|
+
--paper-glass: light-dark(rgba(255, 255, 255, 0.55), rgba(20, 30, 50, 0.60));
|
|
25
|
+
|
|
26
|
+
/* Ink — warm near-black / cool near-white */
|
|
27
|
+
--ink: light-dark(#1D1D1F, #F0F4FF);
|
|
28
|
+
--ink-soft: light-dark(#3A3A3C, #C8CFE0);
|
|
29
|
+
--ink-faint: light-dark(#65656A, #8A92A8);
|
|
30
|
+
--graphite: light-dark(#2C2C2E, #DCE2F0);
|
|
31
|
+
--muted: light-dark(#6E6E73, #5A627A);
|
|
32
|
+
|
|
33
|
+
/* Construction lines — translucent */
|
|
34
|
+
--guide: light-dark(rgba(29, 29, 31, 0.14), rgba(240, 244, 255, 0.16));
|
|
35
|
+
--guide-soft: light-dark(rgba(29, 29, 31, 0.10), rgba(240, 244, 255, 0.08));
|
|
36
|
+
--hair: light-dark(rgba(29, 29, 31, 0.08), rgba(240, 244, 255, 0.12));
|
|
37
|
+
--hair-soft: light-dark(rgba(29, 29, 31, 0.04), rgba(240, 244, 255, 0.06));
|
|
38
|
+
|
|
39
|
+
/* Primary accent — iOS indigo / vibrant dark blue */
|
|
40
|
+
--ai: light-dark(#5957E2, #6FA9FF);
|
|
41
|
+
--ai-ink: light-dark(#3634A3, #93C2FF);
|
|
42
|
+
--ai-wash: light-dark(rgba(89, 87, 226, 0.12), rgba(111, 169, 255, 0.16));
|
|
43
|
+
|
|
44
|
+
/* Seal — iOS system pink */
|
|
45
|
+
--shu: light-dark(#FF375F, #FF6B8A);
|
|
46
|
+
--shu-wash: light-dark(rgba(255, 55, 95, 0.12), rgba(255, 107, 138, 0.16));
|
|
47
|
+
|
|
48
|
+
/* Draft / marginalia — iOS orange */
|
|
49
|
+
--ochre: light-dark(#FF9500, #FFC56B);
|
|
50
|
+
--ochre-wash: light-dark(rgba(255, 149, 0, 0.14), rgba(255, 197, 107, 0.16));
|
|
51
|
+
|
|
52
|
+
/* Code surface */
|
|
53
|
+
--code-bg: light-dark(rgba(29, 29, 31, 0.82), rgba(5, 8, 16, 0.82));
|
|
54
|
+
--code-ink: light-dark(#F5F5F7, #F0F4FF);
|
|
55
|
+
--code-muted: light-dark(#BCBCC0, #8A92A8);
|
|
56
|
+
--code-accent: #FFD60A;
|
|
57
|
+
--code-green: light-dark(#30D158, #5FE37F);
|
|
58
|
+
--code-blue: light-dark(#64D2FF, #93C2FF);
|
|
59
|
+
|
|
60
|
+
/* Typography — SF stack, identical */
|
|
61
|
+
--font-display: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Inter', system-ui, sans-serif;
|
|
62
|
+
--font-script: 'Caveat', 'Shadows Into Light', cursive;
|
|
63
|
+
--font-serif: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', Georgia, serif;
|
|
64
|
+
--font-sans: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'SF Pro Text', 'Inter', system-ui, sans-serif;
|
|
65
|
+
--font-mono: 'SF Mono', ui-monospace, 'JetBrains Mono', Menlo, Consolas, monospace;
|
|
66
|
+
|
|
67
|
+
/* Radius — soft and large, identical */
|
|
68
|
+
--r-sm: 10px;
|
|
69
|
+
--r-md: 18px;
|
|
70
|
+
--r-lg: 24px;
|
|
71
|
+
|
|
72
|
+
/* Shadows — floaty with cool-blue undertone / deep dark drops */
|
|
73
|
+
--shadow-sm: 0 2px 10px light-dark(rgba(31, 38, 135, 0.06), rgba(0, 0, 0, 0.30));
|
|
74
|
+
--shadow-md: 0 8px 32px light-dark(rgba(31, 38, 135, 0.10), rgba(0, 0, 0, 0.42));
|
|
75
|
+
--shadow-lg: 0 24px 60px light-dark(rgba(31, 38, 135, 0.14), rgba(0, 0, 0, 0.55));
|
|
76
|
+
--shadow-xl: 0 40px 80px light-dark(rgba(31, 38, 135, 0.18), rgba(0, 0, 0, 0.65));
|
|
77
|
+
--shadow-2xl: 0 56px 112px light-dark(rgba(31, 38, 135, 0.24), rgba(0, 0, 0, 0.75));
|
|
78
|
+
|
|
79
|
+
/* Blur — LIGHT defaults; dark overrides below via nested @media */
|
|
80
|
+
--blur-sm: blur(14px) saturate(160%);
|
|
81
|
+
--blur-md: blur(22px) saturate(170%);
|
|
82
|
+
--blur-lg: blur(30px) saturate(180%);
|
|
83
|
+
|
|
84
|
+
/* Glow — dual-inset rim highlight (LIGHT defaults; dark overrides below) */
|
|
85
|
+
--glow-sm: inset 0 1px 0 rgba(255, 255, 255, 0.70);
|
|
86
|
+
--glow-md:
|
|
87
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.85),
|
|
88
|
+
inset 0 -1px 0 rgba(255, 255, 255, 0.20),
|
|
89
|
+
inset 1px 0 0 rgba(255, 255, 255, 0.35),
|
|
90
|
+
inset -1px 0 0 rgba(255, 255, 255, 0.20);
|
|
91
|
+
--glow-lg:
|
|
92
|
+
inset 0 2px 0 rgba(255, 255, 255, 0.95),
|
|
93
|
+
inset 0 -2px 0 rgba(255, 255, 255, 0.25),
|
|
94
|
+
inset 2px 0 0 rgba(255, 255, 255, 0.45),
|
|
95
|
+
inset -2px 0 0 rgba(255, 255, 255, 0.25),
|
|
96
|
+
inset 0 0 40px rgba(255, 255, 255, 0.15);
|
|
97
|
+
|
|
98
|
+
/* Motion — identical */
|
|
99
|
+
--duration-fast: 180ms;
|
|
100
|
+
--duration-normal: 240ms;
|
|
101
|
+
--duration-slow: 380ms;
|
|
102
|
+
--ease: cubic-bezier(0.33, 0.66, 0.33, 1);
|
|
103
|
+
|
|
104
|
+
/* ---- Pattern C: dark-mode overrides for NON-COLOR tokens ----
|
|
105
|
+
* stylelint can't trace through @include m.theme() to know the
|
|
106
|
+
* parent selector is :root[data-theme="glass"]; the declarations
|
|
107
|
+
* below are valid in compiled output (Sass hoists @media + scopes
|
|
108
|
+
* the vars under the parent selector). */
|
|
109
|
+
/* stylelint-disable no-invalid-position-declaration -- see comment above */
|
|
110
|
+
@media (prefers-color-scheme: dark) {
|
|
111
|
+
--blur-sm: blur(12px) saturate(160%);
|
|
112
|
+
--blur-md: blur(18px) saturate(180%);
|
|
113
|
+
--blur-lg: blur(20px) saturate(200%);
|
|
114
|
+
|
|
115
|
+
--glow-sm: inset 0 1px 0 rgba(255, 255, 255, 0.16);
|
|
116
|
+
--glow-md:
|
|
117
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.22),
|
|
118
|
+
inset 0 -1px 0 rgba(255, 255, 255, 0.06),
|
|
119
|
+
inset 1px 0 0 rgba(255, 255, 255, 0.10),
|
|
120
|
+
inset -1px 0 0 rgba(255, 255, 255, 0.06);
|
|
121
|
+
--glow-lg:
|
|
122
|
+
inset 0 2px 0 rgba(255, 255, 255, 0.28),
|
|
123
|
+
inset 0 -2px 0 rgba(255, 255, 255, 0.08),
|
|
124
|
+
inset 2px 0 0 rgba(255, 255, 255, 0.14),
|
|
125
|
+
inset -2px 0 0 rgba(255, 255, 255, 0.08),
|
|
126
|
+
inset 0 0 40px rgba(111, 169, 255, 0.08);
|
|
127
|
+
}
|
|
128
|
+
/* stylelint-enable no-invalid-position-declaration */
|
|
129
|
+
|
|
130
|
+
/* Semantic aliases */
|
|
131
|
+
--background-default: var(--paper);
|
|
132
|
+
--background-subtle: var(--paper-sunk);
|
|
133
|
+
--background-navbar: var(--paper-raised);
|
|
134
|
+
--surface-default: var(--paper);
|
|
135
|
+
--surface-raised: var(--paper-raised);
|
|
136
|
+
--surface-sunk: var(--paper-sunk);
|
|
137
|
+
--surface-muted: var(--paper-sunk);
|
|
138
|
+
--surface-subtle: var(--paper-raised);
|
|
139
|
+
--surface-emphasis: var(--ink);
|
|
140
|
+
--surface-glass: var(--paper-glass);
|
|
141
|
+
|
|
142
|
+
--text-primary: var(--ink);
|
|
143
|
+
--text-secondary: var(--ink-soft);
|
|
144
|
+
--text-muted: var(--ink-faint);
|
|
145
|
+
--text-tertiary: var(--muted);
|
|
146
|
+
--text-inverse: var(--paper);
|
|
147
|
+
--text-link: var(--ai);
|
|
148
|
+
--text-link-hover: var(--ai-ink);
|
|
149
|
+
|
|
150
|
+
--border-default: var(--hair);
|
|
151
|
+
--border-subtle: var(--hair-soft);
|
|
152
|
+
--border-emphasis: var(--ink);
|
|
153
|
+
--border-focus: var(--ai);
|
|
154
|
+
|
|
155
|
+
--interactive-hover: light-dark(rgba(29, 29, 31, 0.04), rgba(240, 244, 255, 0.05));
|
|
156
|
+
--interactive-active: light-dark(rgba(29, 29, 31, 0.08), rgba(240, 244, 255, 0.10));
|
|
157
|
+
|
|
158
|
+
--brand-primary: var(--ai);
|
|
159
|
+
--brand-primary-hover: var(--ai-ink);
|
|
160
|
+
|
|
161
|
+
--action-primary-default: var(--ai);
|
|
162
|
+
--action-primary-hover: var(--ai-ink);
|
|
163
|
+
--action-primary-active: var(--ai-ink);
|
|
164
|
+
--action-primary-wash: var(--ai-wash);
|
|
165
|
+
--action-secondary-default: var(--shu);
|
|
166
|
+
--action-secondary-hover: var(--shu);
|
|
167
|
+
--action-secondary-active: var(--shu);
|
|
168
|
+
--action-secondary-wash: var(--shu-wash);
|
|
169
|
+
--action-tertiary-default: var(--ochre);
|
|
170
|
+
--action-tertiary-hover: var(--ochre);
|
|
171
|
+
--action-tertiary-active: var(--ochre);
|
|
172
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
173
|
+
|
|
174
|
+
--feedback-info: var(--ai);
|
|
175
|
+
--feedback-success: var(--code-green);
|
|
176
|
+
--feedback-warning: var(--ochre);
|
|
177
|
+
--feedback-error: var(--shu);
|
|
178
|
+
|
|
179
|
+
--info-default: var(--ai);
|
|
180
|
+
--info-subtle: light-dark(rgba(89, 87, 226, 0.12), rgba(111, 169, 255, 0.16));
|
|
181
|
+
--info-text: var(--ai-ink);
|
|
182
|
+
|
|
183
|
+
--success-default: light-dark(#34C759, #30D158);
|
|
184
|
+
--success-subtle: light-dark(rgba(52, 199, 89, 0.12), rgba(48, 209, 88, 0.16));
|
|
185
|
+
--success-text: light-dark(#0F6A22, #5FE37F);
|
|
186
|
+
|
|
187
|
+
--warning-default: var(--ochre);
|
|
188
|
+
--warning-subtle: var(--ochre-wash);
|
|
189
|
+
--warning-text: light-dark(#985000, #FFD79A);
|
|
190
|
+
|
|
191
|
+
--error-default: var(--shu);
|
|
192
|
+
--error-subtle: var(--shu-wash);
|
|
193
|
+
--error-text: light-dark(#A3193A, #FF93AB);
|
|
194
|
+
|
|
195
|
+
/* Library scales — identical */
|
|
196
|
+
|
|
197
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
198
|
+
The numbered scale is the source of truth: every component reads
|
|
199
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
200
|
+
are emitted by the library as references to these, so they follow
|
|
201
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
202
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
203
|
+
--space-0: 0; /* flush */
|
|
204
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
205
|
+
--space-2: 0.75rem; /* control padding */
|
|
206
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
207
|
+
--space-4: 1rem; /* default rhythm */
|
|
208
|
+
--space-5: 1.5rem; /* section gap */
|
|
209
|
+
--space-6: 2rem; /* block gap */
|
|
210
|
+
--space-7: 3rem; /* major gap */
|
|
211
|
+
--space-8: 4rem; /* page section */
|
|
212
|
+
--space-9: 6rem; /* hero rhythm */
|
|
213
|
+
|
|
214
|
+
--radius-sm: var(--r-sm); --radius-md: var(--r-md); --radius-lg: var(--r-lg);
|
|
215
|
+
--radius-xl: 0.75rem; --radius-full: 9999px;
|
|
216
|
+
--font-primary: var(--font-sans);
|
|
217
|
+
--font-size-base: 1rem; --line-height-normal: 1.5; --font-weight-medium: 500;
|
|
218
|
+
--z-sticky: 1020; --z-dropdown: 1030; --z-backdrop: 1040;
|
|
219
|
+
--z-modal: 1050; --z-popover: 1060; --z-tooltip: 1070;
|
|
220
|
+
}
|