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,237 @@
|
|
|
1
|
+
/* ============================================================
|
|
2
|
+
THEME — Press Dark
|
|
3
|
+
-----------------------------------------------------------
|
|
4
|
+
Dark companion to Press (newsprint editorial light). Same
|
|
5
|
+
editorial voice: dramatic Playfair display, classical
|
|
6
|
+
measure, very square radii, slow editorial motion. Only
|
|
7
|
+
the COLOR palette inverts.
|
|
8
|
+
|
|
9
|
+
Mood: night-newsroom / Stripe Press dark / editorial-after-
|
|
10
|
+
dark. Background is near-ink with warmer-than-pure-black
|
|
11
|
+
surfaces — the paper went black, not the press red. Press
|
|
12
|
+
red stays the single hot accent. Serifs stay.
|
|
13
|
+
|
|
14
|
+
Opt-in via `<html data-theme="press-dark">`. Pair with
|
|
15
|
+
press/theme.css to ship a project with a default light
|
|
16
|
+
editorial mode and an opt-in dark editorial mode.
|
|
17
|
+
============================================================ */
|
|
18
|
+
|
|
19
|
+
@use '../mixins' as m;
|
|
20
|
+
|
|
21
|
+
@import 'https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,500;0,600;0,700;0,800;0,900;1,400;1,700;1,900&family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;700&family=Caveat:wght@400;500;600;700&display=swap';
|
|
22
|
+
|
|
23
|
+
@include m.theme('press-dark', dark) {
|
|
24
|
+
/* Surfaces — near-ink newsroom */
|
|
25
|
+
--paper: #0E0E0E;
|
|
26
|
+
--paper-raised: #1A1A1A;
|
|
27
|
+
--paper-sunk: #060606;
|
|
28
|
+
--paper-glass: rgba(26, 26, 26, 0.82);
|
|
29
|
+
|
|
30
|
+
/* Ink — warm off-white headline */
|
|
31
|
+
--ink: #FAFAF7;
|
|
32
|
+
--ink-soft: #C8C6C0;
|
|
33
|
+
--ink-faint: #8A8A86;
|
|
34
|
+
--graphite: #ECEAE4;
|
|
35
|
+
--muted: #6B6963;
|
|
36
|
+
|
|
37
|
+
/* Rules / hairlines — thin editorial rules on dark */
|
|
38
|
+
--guide: #ECEAE4;
|
|
39
|
+
--guide-soft: #2A2A2A;
|
|
40
|
+
--hair: #2A2A2A;
|
|
41
|
+
--hair-soft: #1A1A1A;
|
|
42
|
+
|
|
43
|
+
/* Primary accent — cool ink, near-mono editorial link */
|
|
44
|
+
--ai: #A8A8A8;
|
|
45
|
+
--ai-ink: #ECEAE4;
|
|
46
|
+
--ai-wash: #1F1F1F;
|
|
47
|
+
|
|
48
|
+
/* Seal — press red (kept hot) */
|
|
49
|
+
--shu: #FF4538;
|
|
50
|
+
--shu-wash: rgba(255, 69, 56, 0.14);
|
|
51
|
+
|
|
52
|
+
/* Pull-quote / marginalia — warm gold */
|
|
53
|
+
--ochre: #E8B96E;
|
|
54
|
+
--ochre-wash: rgba(232, 185, 110, 0.12);
|
|
55
|
+
|
|
56
|
+
/* Code surface — keep ink-slab, lifted slightly above paper */
|
|
57
|
+
--code-bg: #060606;
|
|
58
|
+
--code-ink: #FAFAF7;
|
|
59
|
+
--code-muted: #8A8A86;
|
|
60
|
+
--code-accent: #E8B96E;
|
|
61
|
+
--code-green: #B8C57A;
|
|
62
|
+
--code-blue: #94AFC9;
|
|
63
|
+
|
|
64
|
+
/* Typography — match Press */
|
|
65
|
+
--font-display: 'Playfair Display', 'Tiempos', 'Fraunces', Georgia, serif;
|
|
66
|
+
--font-script: 'Caveat', 'Shadows Into Light', cursive;
|
|
67
|
+
--font-serif: 'Playfair Display', 'Tiempos', 'Cormorant Garamond', Georgia, serif;
|
|
68
|
+
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
|
69
|
+
--font-mono: 'JetBrains Mono', 'SF Mono', Consolas, Menlo, monospace;
|
|
70
|
+
|
|
71
|
+
/* Radius — match Press, very square */
|
|
72
|
+
--r-sm: 2px;
|
|
73
|
+
--r-md: 3px;
|
|
74
|
+
--r-lg: 4px;
|
|
75
|
+
|
|
76
|
+
/* Shadows — minimal, deeper for dark */
|
|
77
|
+
--shadow-sm: 0 1px 2px rgba(0, 0, 0, .35);
|
|
78
|
+
--shadow-md: 0 6px 24px rgba(0, 0, 0, .45);
|
|
79
|
+
--shadow-lg: 0 18px 48px rgba(0, 0, 0, .55);
|
|
80
|
+
--shadow-xl: 0 28px 64px rgba(0, 0, 0, .65);
|
|
81
|
+
--shadow-2xl: 0 40px 96px rgba(0, 0, 0, .75);
|
|
82
|
+
|
|
83
|
+
/* Blur — editorial doesn't use it */
|
|
84
|
+
--blur-sm: none;
|
|
85
|
+
--blur-md: none;
|
|
86
|
+
--blur-lg: none;
|
|
87
|
+
|
|
88
|
+
/* Glow — editorial doesn't use it */
|
|
89
|
+
--glow-sm: 0 0 0 transparent;
|
|
90
|
+
--glow-md: 0 0 0 transparent;
|
|
91
|
+
--glow-lg: 0 0 0 transparent;
|
|
92
|
+
|
|
93
|
+
/* Motion — editorial pace, match Press */
|
|
94
|
+
--duration-fast: 200ms;
|
|
95
|
+
--duration-normal: 280ms;
|
|
96
|
+
--duration-slow: 420ms;
|
|
97
|
+
--ease: cubic-bezier(0.33, 0.66, 0.33, 1);
|
|
98
|
+
|
|
99
|
+
/* ----------------------------------------------------------
|
|
100
|
+
SEMANTIC ALIASES
|
|
101
|
+
---------------------------------------------------------- */
|
|
102
|
+
|
|
103
|
+
/* Backgrounds */
|
|
104
|
+
--background-default: var(--paper);
|
|
105
|
+
--background-subtle: var(--paper-sunk);
|
|
106
|
+
--background-navbar: var(--paper-raised);
|
|
107
|
+
|
|
108
|
+
/* Surfaces */
|
|
109
|
+
--surface-default: var(--paper);
|
|
110
|
+
--surface-raised: var(--paper-raised);
|
|
111
|
+
--surface-sunk: var(--paper-sunk);
|
|
112
|
+
--surface-muted: var(--paper-sunk);
|
|
113
|
+
--surface-subtle: var(--paper-raised);
|
|
114
|
+
--surface-emphasis: var(--ink);
|
|
115
|
+
--surface-glass: var(--paper-glass);
|
|
116
|
+
|
|
117
|
+
/* Text */
|
|
118
|
+
--text-primary: var(--ink);
|
|
119
|
+
--text-secondary: var(--ink-soft);
|
|
120
|
+
--text-muted: var(--ink-faint);
|
|
121
|
+
--text-tertiary: var(--muted);
|
|
122
|
+
--text-inverse: var(--paper);
|
|
123
|
+
--text-link: var(--ink);
|
|
124
|
+
--text-link-hover: var(--shu);
|
|
125
|
+
|
|
126
|
+
/* Borders */
|
|
127
|
+
--border-default: var(--hair);
|
|
128
|
+
--border-subtle: var(--hair-soft);
|
|
129
|
+
--border-emphasis: var(--ink);
|
|
130
|
+
--border-focus: var(--shu);
|
|
131
|
+
|
|
132
|
+
/* Interactive (hover / active wash) — light wash on dark */
|
|
133
|
+
--interactive-hover: rgba(250, 250, 247, 0.05);
|
|
134
|
+
--interactive-active: rgba(250, 250, 247, 0.10);
|
|
135
|
+
|
|
136
|
+
/* Brand */
|
|
137
|
+
--brand-primary: var(--ink);
|
|
138
|
+
--brand-primary-hover: var(--shu);
|
|
139
|
+
|
|
140
|
+
/* Action triplets */
|
|
141
|
+
--action-primary-default: var(--ink);
|
|
142
|
+
--action-primary-hover: var(--ai-ink);
|
|
143
|
+
--action-primary-active: var(--ai-ink);
|
|
144
|
+
--action-primary-wash: var(--ai-wash);
|
|
145
|
+
--action-secondary-default: var(--shu);
|
|
146
|
+
--action-secondary-hover: var(--shu);
|
|
147
|
+
--action-secondary-active: var(--shu);
|
|
148
|
+
--action-secondary-wash: var(--shu-wash);
|
|
149
|
+
--action-tertiary-default: var(--ochre);
|
|
150
|
+
--action-tertiary-hover: var(--ochre);
|
|
151
|
+
--action-tertiary-active: var(--ochre);
|
|
152
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
153
|
+
|
|
154
|
+
/* Feedback */
|
|
155
|
+
--feedback-info: var(--ai);
|
|
156
|
+
--feedback-success: var(--code-green);
|
|
157
|
+
--feedback-warning: var(--ochre);
|
|
158
|
+
--feedback-error: var(--shu);
|
|
159
|
+
|
|
160
|
+
/* Status — info (near-mono editorial) */
|
|
161
|
+
--info-default: var(--ai);
|
|
162
|
+
--info-subtle: var(--ai-wash);
|
|
163
|
+
--info-text: var(--ai-ink);
|
|
164
|
+
|
|
165
|
+
/* Status — success (restrained editorial green, lifted) */
|
|
166
|
+
--success-default: #6FA85A;
|
|
167
|
+
--success-subtle: rgba(111, 168, 90, 0.14);
|
|
168
|
+
--success-text: #95C97F;
|
|
169
|
+
|
|
170
|
+
/* Status — warning (warm editorial ochre) */
|
|
171
|
+
--warning-default: var(--ochre);
|
|
172
|
+
--warning-subtle: var(--ochre-wash);
|
|
173
|
+
--warning-text: #F0CC8E;
|
|
174
|
+
|
|
175
|
+
/* Status — error — press red IS the error color */
|
|
176
|
+
--error-default: var(--shu);
|
|
177
|
+
--error-subtle: var(--shu-wash);
|
|
178
|
+
--error-text: #FF7A70;
|
|
179
|
+
|
|
180
|
+
/* ----------------------------------------------------------
|
|
181
|
+
LIBRARY SCALES
|
|
182
|
+
---------------------------------------------------------- */
|
|
183
|
+
|
|
184
|
+
/* Space scale */
|
|
185
|
+
|
|
186
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
187
|
+
The numbered scale is the source of truth: every component reads
|
|
188
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
189
|
+
are emitted by the library as references to these, so they follow
|
|
190
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
191
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
192
|
+
--space-0: 0; /* flush */
|
|
193
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
194
|
+
--space-2: 0.75rem; /* control padding */
|
|
195
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
196
|
+
--space-4: 1rem; /* default rhythm */
|
|
197
|
+
--space-5: 1.5rem; /* section gap */
|
|
198
|
+
--space-6: 2rem; /* block gap */
|
|
199
|
+
--space-7: 3rem; /* major gap */
|
|
200
|
+
--space-8: 4rem; /* page section */
|
|
201
|
+
--space-9: 6rem; /* hero rhythm */
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
/* Radius alias — Press is editorial, xl stays tight (6px) */
|
|
208
|
+
--radius-sm: var(--r-sm);
|
|
209
|
+
--radius-md: var(--r-md);
|
|
210
|
+
--radius-lg: var(--r-lg);
|
|
211
|
+
--radius-xl: 6px;
|
|
212
|
+
--radius-full: 9999px;
|
|
213
|
+
|
|
214
|
+
/* Typography */
|
|
215
|
+
--font-primary: var(--font-sans);
|
|
216
|
+
--font-size-base: 1rem;
|
|
217
|
+
--line-height-normal: 1.5;
|
|
218
|
+
--font-weight-medium: 500;
|
|
219
|
+
|
|
220
|
+
/* Z-index */
|
|
221
|
+
--z-sticky: 1020;
|
|
222
|
+
--z-dropdown: 1030;
|
|
223
|
+
--z-backdrop: 1040;
|
|
224
|
+
--z-modal: 1050;
|
|
225
|
+
--z-popover: 1060;
|
|
226
|
+
--z-tooltip: 1070;
|
|
227
|
+
|
|
228
|
+
/* ----------------------------------------------------------
|
|
229
|
+
OPTIONAL COMPONENT OVERRIDES — match Press exactly
|
|
230
|
+
---------------------------------------------------------- */
|
|
231
|
+
--btn-radius: var(--r-sm); /* 2px — near-square */
|
|
232
|
+
--card-radius: var(--r-sm); /* 2px — boxed */
|
|
233
|
+
--card-shadow: none; /* editorial is flat */
|
|
234
|
+
--card-border: 1px solid var(--hair); /* thin rule instead */
|
|
235
|
+
--input-radius: var(--r-sm); /* 2px */
|
|
236
|
+
--modal-radius: var(--r-md); /* 3px */
|
|
237
|
+
}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/* ============================================================
|
|
2
|
+
THEME — Press (light)
|
|
3
|
+
-----------------------------------------------------------
|
|
4
|
+
Standalone file for `[data-theme="press-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
|
+
Mood: T-Magazine / Stripe Press / Apple Newsroom editorial
|
|
10
|
+
newsprint. Classical measure, thin hairlines, dramatic serif
|
|
11
|
+
display, a single press-red accent. Warm off-white paper,
|
|
12
|
+
near-black ink, very square radii, minimal flat shadows.
|
|
13
|
+
|
|
14
|
+
TOKEN CONTRACT
|
|
15
|
+
-----------------------------------------------------------
|
|
16
|
+
Every theme MUST declare every variable in this file, even
|
|
17
|
+
if it sets it to a neutral value (e.g. --blur-md: none;).
|
|
18
|
+
That's what guarantees a clean one-file swap.
|
|
19
|
+
|
|
20
|
+
Slots:
|
|
21
|
+
Surfaces : --paper, --paper-raised, --paper-sunk, --paper-glass
|
|
22
|
+
Ink : --ink, --ink-soft, --ink-faint, --graphite, --muted
|
|
23
|
+
Lines : --guide, --guide-soft, --hair, --hair-soft
|
|
24
|
+
Primary : --ai, --ai-ink, --ai-wash (near-ink editorial link)
|
|
25
|
+
Seal : --shu, --shu-wash (press red — the accent)
|
|
26
|
+
Accent : --ochre, --ochre-wash (warm gold / pull-quote)
|
|
27
|
+
Code : --code-bg/ink/muted/accent/green/blue
|
|
28
|
+
Type : --font-display/script/serif/sans/mono
|
|
29
|
+
Radius : --r-sm, --r-md, --r-lg
|
|
30
|
+
Shadow : --shadow-sm, --shadow-md, --shadow-lg
|
|
31
|
+
Blur : --blur-sm, --blur-md, --blur-lg (editorial: none)
|
|
32
|
+
Glow : --glow-sm, --glow-md, --glow-lg (editorial: transparent)
|
|
33
|
+
Motion : --duration-fast, --duration-normal, --duration-slow, --ease
|
|
34
|
+
============================================================ */
|
|
35
|
+
|
|
36
|
+
@use '../mixins' as m;
|
|
37
|
+
|
|
38
|
+
@import 'https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,500;0,600;0,700;0,800;0,900;1,400;1,700;1,900&family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;700&family=Caveat:wght@400;500;600;700&display=swap';
|
|
39
|
+
|
|
40
|
+
@include m.theme('press-light', light) {
|
|
41
|
+
/* Surfaces — warm newsprint */
|
|
42
|
+
--paper: #FAFAF7;
|
|
43
|
+
--paper-raised: #FFF;
|
|
44
|
+
--paper-sunk: #F2F1EC;
|
|
45
|
+
--paper-glass: rgba(255, 255, 255, 0.80);
|
|
46
|
+
|
|
47
|
+
/* Ink — warm near-black */
|
|
48
|
+
--ink: #0A0A0A;
|
|
49
|
+
--ink-soft: #555;
|
|
50
|
+
--ink-faint: #727069;
|
|
51
|
+
--graphite: #1A1A1A;
|
|
52
|
+
--muted: #8E8C86;
|
|
53
|
+
|
|
54
|
+
/* Rules / hairlines — thin editorial rules */
|
|
55
|
+
--guide: #1A1A1A;
|
|
56
|
+
--guide-soft: #D9D7D1;
|
|
57
|
+
--hair: #1A1A1A;
|
|
58
|
+
--hair-soft: #ECEAE4;
|
|
59
|
+
|
|
60
|
+
/* Primary accent — near-ink editorial link (not a bright hue) */
|
|
61
|
+
--ai: #1A1A1A;
|
|
62
|
+
--ai-ink: #0A0A0A;
|
|
63
|
+
--ai-wash: #ECEAE4;
|
|
64
|
+
|
|
65
|
+
/* Seal — press red (the single editorial accent) */
|
|
66
|
+
--shu: #D93025;
|
|
67
|
+
--shu-wash: #FBEAE8;
|
|
68
|
+
|
|
69
|
+
/* Pull-quote / marginalia — warm gold */
|
|
70
|
+
--ochre: #B5873A;
|
|
71
|
+
--ochre-wash: #F4EBD6;
|
|
72
|
+
|
|
73
|
+
/* Code surface — keep editorial (ink slab) */
|
|
74
|
+
--code-bg: #0A0A0A;
|
|
75
|
+
--code-ink: #FAFAF7;
|
|
76
|
+
--code-muted: #8A8A86;
|
|
77
|
+
--code-accent: #E8B96E;
|
|
78
|
+
--code-green: #B8C57A;
|
|
79
|
+
--code-blue: #94AFC9;
|
|
80
|
+
|
|
81
|
+
/* Typography */
|
|
82
|
+
--font-display: 'Playfair Display', 'Tiempos', 'Fraunces', Georgia, serif;
|
|
83
|
+
--font-script: 'Caveat', 'Shadows Into Light', cursive;
|
|
84
|
+
--font-serif: 'Playfair Display', 'Tiempos', 'Cormorant Garamond', Georgia, serif;
|
|
85
|
+
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
|
86
|
+
--font-mono: 'JetBrains Mono', 'SF Mono', Consolas, Menlo, monospace;
|
|
87
|
+
|
|
88
|
+
/* Radius — editorial is tight, very square */
|
|
89
|
+
--r-sm: 2px;
|
|
90
|
+
--r-md: 3px;
|
|
91
|
+
--r-lg: 4px;
|
|
92
|
+
|
|
93
|
+
/* Shadows — minimal, single-layer, editorial flat */
|
|
94
|
+
--shadow-sm: 0 1px 2px rgba(10, 10, 10, .05);
|
|
95
|
+
--shadow-md: 0 6px 24px rgba(10, 10, 10, .06);
|
|
96
|
+
--shadow-lg: 0 18px 48px rgba(10, 10, 10, .09);
|
|
97
|
+
--shadow-xl: 0 28px 64px rgba(10, 10, 10, .12);
|
|
98
|
+
--shadow-2xl: 0 40px 96px rgba(10, 10, 10, .18);
|
|
99
|
+
|
|
100
|
+
/* Blur — editorial doesn't use it; declared so swap stays lossless */
|
|
101
|
+
--blur-sm: none;
|
|
102
|
+
--blur-md: none;
|
|
103
|
+
--blur-lg: none;
|
|
104
|
+
|
|
105
|
+
/* Glow — editorial doesn't use it; declared transparent */
|
|
106
|
+
--glow-sm: 0 0 0 transparent;
|
|
107
|
+
--glow-md: 0 0 0 transparent;
|
|
108
|
+
--glow-lg: 0 0 0 transparent;
|
|
109
|
+
|
|
110
|
+
/* Motion — editorial reads slower than digital */
|
|
111
|
+
--duration-fast: 200ms;
|
|
112
|
+
--duration-normal: 280ms;
|
|
113
|
+
--duration-slow: 420ms;
|
|
114
|
+
--ease: cubic-bezier(0.33, 0.66, 0.33, 1);
|
|
115
|
+
|
|
116
|
+
/* ----------------------------------------------------------
|
|
117
|
+
SEMANTIC ALIASES
|
|
118
|
+
-----------------------------------------------------------
|
|
119
|
+
Bridge the library's expected names to this theme's native
|
|
120
|
+
palette. Components can now write m.color(surface-default)
|
|
121
|
+
or var(--surface-default) and reskin with the theme
|
|
122
|
+
automatically.
|
|
123
|
+
---------------------------------------------------------- */
|
|
124
|
+
|
|
125
|
+
/* Backgrounds (page-level) */
|
|
126
|
+
--background-default: var(--paper);
|
|
127
|
+
--background-subtle: var(--paper-sunk);
|
|
128
|
+
--background-navbar: var(--paper-raised);
|
|
129
|
+
|
|
130
|
+
/* Surfaces */
|
|
131
|
+
--surface-default: var(--paper);
|
|
132
|
+
--surface-raised: var(--paper-raised);
|
|
133
|
+
--surface-sunk: var(--paper-sunk);
|
|
134
|
+
--surface-muted: var(--paper-sunk);
|
|
135
|
+
--surface-subtle: var(--paper-raised);
|
|
136
|
+
--surface-emphasis: var(--ink);
|
|
137
|
+
--surface-glass: var(--paper-glass);
|
|
138
|
+
|
|
139
|
+
/* Text */
|
|
140
|
+
--text-primary: var(--ink);
|
|
141
|
+
--text-secondary: var(--ink-soft);
|
|
142
|
+
--text-muted: var(--ink-faint);
|
|
143
|
+
--text-tertiary: var(--muted);
|
|
144
|
+
--text-inverse: var(--paper);
|
|
145
|
+
--text-link: var(--ai);
|
|
146
|
+
--text-link-hover: var(--ai-ink);
|
|
147
|
+
|
|
148
|
+
/* Borders */
|
|
149
|
+
--border-default: var(--hair);
|
|
150
|
+
--border-subtle: var(--hair-soft);
|
|
151
|
+
--border-emphasis: var(--ink);
|
|
152
|
+
--border-focus: var(--ai);
|
|
153
|
+
|
|
154
|
+
/* Interactive (hover / active wash layers) — ink overlays on paper */
|
|
155
|
+
--interactive-hover: rgba(10, 10, 10, 0.05);
|
|
156
|
+
--interactive-active: rgba(10, 10, 10, 0.10);
|
|
157
|
+
|
|
158
|
+
/* Brand (identity — action-primary references these) */
|
|
159
|
+
--brand-primary: var(--ai);
|
|
160
|
+
--brand-primary-hover: var(--ai-ink);
|
|
161
|
+
|
|
162
|
+
/* Action (primary / secondary / tertiary) */
|
|
163
|
+
--action-primary-default: var(--ai);
|
|
164
|
+
--action-primary-hover: var(--ai-ink);
|
|
165
|
+
--action-primary-active: var(--ai-ink);
|
|
166
|
+
--action-primary-wash: var(--ai-wash);
|
|
167
|
+
--action-secondary-default: var(--shu);
|
|
168
|
+
--action-secondary-hover: var(--shu);
|
|
169
|
+
--action-secondary-active: var(--shu);
|
|
170
|
+
--action-secondary-wash: var(--shu-wash);
|
|
171
|
+
--action-tertiary-default: var(--ochre);
|
|
172
|
+
--action-tertiary-hover: var(--ochre);
|
|
173
|
+
--action-tertiary-active: var(--ochre);
|
|
174
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
175
|
+
|
|
176
|
+
/* Feedback / status (high-level semantic) */
|
|
177
|
+
--feedback-info: var(--ai);
|
|
178
|
+
--feedback-success: var(--code-green);
|
|
179
|
+
--feedback-warning: var(--ochre);
|
|
180
|
+
--feedback-error: var(--shu);
|
|
181
|
+
|
|
182
|
+
/* Status — info (three-part: default / subtle / text).
|
|
183
|
+
Press has no indigo; --ai is a near-ink editorial tone. */
|
|
184
|
+
--info-default: var(--ai);
|
|
185
|
+
--info-subtle: var(--ai-wash);
|
|
186
|
+
--info-text: var(--ai-ink);
|
|
187
|
+
|
|
188
|
+
/* Status — success. Restrained editorial green (desaturated). */
|
|
189
|
+
--success-default: #2F7A3A;
|
|
190
|
+
--success-subtle: #E3EEDF;
|
|
191
|
+
--success-text: #1F5228;
|
|
192
|
+
|
|
193
|
+
/* Status — warning. Warm editorial ochre. */
|
|
194
|
+
--warning-default: #A86A1A;
|
|
195
|
+
--warning-subtle: var(--ochre-wash);
|
|
196
|
+
--warning-text: #6B4512;
|
|
197
|
+
|
|
198
|
+
/* Status — error. Press red IS the error color. */
|
|
199
|
+
--error-default: var(--shu);
|
|
200
|
+
--error-subtle: var(--shu-wash);
|
|
201
|
+
--error-text: #8A1D15;
|
|
202
|
+
|
|
203
|
+
/* ----------------------------------------------------------
|
|
204
|
+
LIBRARY SCALES (space / radius / type / z)
|
|
205
|
+
-----------------------------------------------------------
|
|
206
|
+
The library mixins emit var(--space-<key>), var(--radius-<key>),
|
|
207
|
+
var(--font-primary), var(--font-size-<key>), var(--z-<key>), …
|
|
208
|
+
Themes declare the slots so those mixins always resolve.
|
|
209
|
+
Numeric scales mirror Sketchbook so rhythm is consistent.
|
|
210
|
+
---------------------------------------------------------- */
|
|
211
|
+
|
|
212
|
+
/* Space scale (rem for accessibility) */
|
|
213
|
+
|
|
214
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
215
|
+
The numbered scale is the source of truth: every component reads
|
|
216
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
217
|
+
are emitted by the library as references to these, so they follow
|
|
218
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
219
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
220
|
+
--space-0: 0; /* flush */
|
|
221
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
222
|
+
--space-2: 0.75rem; /* control padding */
|
|
223
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
224
|
+
--space-4: 1rem; /* default rhythm */
|
|
225
|
+
--space-5: 1.5rem; /* section gap */
|
|
226
|
+
--space-6: 2rem; /* block gap */
|
|
227
|
+
--space-7: 3rem; /* major gap */
|
|
228
|
+
--space-8: 4rem; /* page section */
|
|
229
|
+
--space-9: 6rem; /* hero rhythm */
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
/* Radius alias — mirrors --r-* with standard names so
|
|
236
|
+
`m.radius(size)` in the library finds --radius-<size>.
|
|
237
|
+
Press is editorial and angular: xl stays tight (4px). */
|
|
238
|
+
--radius-sm: var(--r-sm);
|
|
239
|
+
--radius-md: var(--r-md);
|
|
240
|
+
--radius-lg: var(--r-lg);
|
|
241
|
+
--radius-xl: 6px;
|
|
242
|
+
--radius-full: 9999px;
|
|
243
|
+
|
|
244
|
+
/* Typography — base body font + key scale slots.
|
|
245
|
+
Press body is Inter (--font-sans). */
|
|
246
|
+
--font-primary: var(--font-sans);
|
|
247
|
+
--font-size-base: 1rem;
|
|
248
|
+
--line-height-normal: 1.5;
|
|
249
|
+
--font-weight-medium: 500;
|
|
250
|
+
|
|
251
|
+
/* Z-index layers */
|
|
252
|
+
--z-sticky: 1020;
|
|
253
|
+
--z-dropdown: 1030;
|
|
254
|
+
--z-backdrop: 1040;
|
|
255
|
+
--z-modal: 1050;
|
|
256
|
+
--z-popover: 1060;
|
|
257
|
+
--z-tooltip: 1070;
|
|
258
|
+
|
|
259
|
+
/* ----------------------------------------------------------
|
|
260
|
+
OPTIONAL COMPONENT OVERRIDES (Feature 1.3)
|
|
261
|
+
-----------------------------------------------------------
|
|
262
|
+
Press is editorial newsprint: very tight radii (2–4px),
|
|
263
|
+
shadowless cards (rules, not lifts), flat panels.
|
|
264
|
+
Overrides are sparse — only the choices that define the
|
|
265
|
+
editorial voice, defaults carry the rest.
|
|
266
|
+
---------------------------------------------------------- */
|
|
267
|
+
--btn-radius: var(--r-sm); /* 2px — near-square control */
|
|
268
|
+
--card-radius: var(--r-sm); /* 2px — boxed layout */
|
|
269
|
+
--card-shadow: none; /* editorial is flat */
|
|
270
|
+
--card-border: 1px solid var(--hair); /* thin ink rule instead */
|
|
271
|
+
--input-radius: var(--r-sm); /* 2px — text field */
|
|
272
|
+
--modal-radius: var(--r-md); /* 3px — still tight */
|
|
273
|
+
}
|