@cogenta/theme-magazine 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +373 -0
- package/dist/src/index.d.ts +21 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +21 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/render/blocks/accordion.d.ts +4 -0
- package/dist/src/render/blocks/accordion.d.ts.map +1 -0
- package/dist/src/render/blocks/accordion.js +20 -0
- package/dist/src/render/blocks/accordion.js.map +1 -0
- package/dist/src/render/blocks/collection-list.d.ts +5 -0
- package/dist/src/render/blocks/collection-list.d.ts.map +1 -0
- package/dist/src/render/blocks/collection-list.js +134 -0
- package/dist/src/render/blocks/collection-list.js.map +1 -0
- package/dist/src/render/blocks/cta.d.ts +10 -0
- package/dist/src/render/blocks/cta.d.ts.map +1 -0
- package/dist/src/render/blocks/cta.js +16 -0
- package/dist/src/render/blocks/cta.js.map +1 -0
- package/dist/src/render/blocks/embed.d.ts +4 -0
- package/dist/src/render/blocks/embed.d.ts.map +1 -0
- package/dist/src/render/blocks/embed.js +76 -0
- package/dist/src/render/blocks/embed.js.map +1 -0
- package/dist/src/render/blocks/faq.d.ts +4 -0
- package/dist/src/render/blocks/faq.d.ts.map +1 -0
- package/dist/src/render/blocks/faq.js +18 -0
- package/dist/src/render/blocks/faq.js.map +1 -0
- package/dist/src/render/blocks/feature-grid.d.ts +4 -0
- package/dist/src/render/blocks/feature-grid.d.ts.map +1 -0
- package/dist/src/render/blocks/feature-grid.js +27 -0
- package/dist/src/render/blocks/feature-grid.js.map +1 -0
- package/dist/src/render/blocks/gallery.d.ts +13 -0
- package/dist/src/render/blocks/gallery.d.ts.map +1 -0
- package/dist/src/render/blocks/gallery.js +26 -0
- package/dist/src/render/blocks/gallery.js.map +1 -0
- package/dist/src/render/blocks/hero.d.ts +11 -0
- package/dist/src/render/blocks/hero.d.ts.map +1 -0
- package/dist/src/render/blocks/hero.js +26 -0
- package/dist/src/render/blocks/hero.js.map +1 -0
- package/dist/src/render/blocks/logo-strip.d.ts +4 -0
- package/dist/src/render/blocks/logo-strip.d.ts.map +1 -0
- package/dist/src/render/blocks/logo-strip.js +20 -0
- package/dist/src/render/blocks/logo-strip.js.map +1 -0
- package/dist/src/render/blocks/logos.d.ts +4 -0
- package/dist/src/render/blocks/logos.d.ts.map +1 -0
- package/dist/src/render/blocks/logos.js +27 -0
- package/dist/src/render/blocks/logos.js.map +1 -0
- package/dist/src/render/blocks/media-figure.d.ts +15 -0
- package/dist/src/render/blocks/media-figure.d.ts.map +1 -0
- package/dist/src/render/blocks/media-figure.js +32 -0
- package/dist/src/render/blocks/media-figure.js.map +1 -0
- package/dist/src/render/blocks/pricing-table.d.ts +4 -0
- package/dist/src/render/blocks/pricing-table.d.ts.map +1 -0
- package/dist/src/render/blocks/pricing-table.js +32 -0
- package/dist/src/render/blocks/pricing-table.js.map +1 -0
- package/dist/src/render/blocks/prose.d.ts +16 -0
- package/dist/src/render/blocks/prose.d.ts.map +1 -0
- package/dist/src/render/blocks/prose.js +17 -0
- package/dist/src/render/blocks/prose.js.map +1 -0
- package/dist/src/render/blocks/quote.d.ts +16 -0
- package/dist/src/render/blocks/quote.d.ts.map +1 -0
- package/dist/src/render/blocks/quote.js +29 -0
- package/dist/src/render/blocks/quote.js.map +1 -0
- package/dist/src/render/blocks/stat-counter.d.ts +4 -0
- package/dist/src/render/blocks/stat-counter.d.ts.map +1 -0
- package/dist/src/render/blocks/stat-counter.js +17 -0
- package/dist/src/render/blocks/stat-counter.js.map +1 -0
- package/dist/src/render/blocks/stats.d.ts +4 -0
- package/dist/src/render/blocks/stats.d.ts.map +1 -0
- package/dist/src/render/blocks/stats.js +19 -0
- package/dist/src/render/blocks/stats.js.map +1 -0
- package/dist/src/render/blocks/testimonial.d.ts +19 -0
- package/dist/src/render/blocks/testimonial.d.ts.map +1 -0
- package/dist/src/render/blocks/testimonial.js +28 -0
- package/dist/src/render/blocks/testimonial.js.map +1 -0
- package/dist/src/render/chrome.d.ts +3 -0
- package/dist/src/render/chrome.d.ts.map +1 -0
- package/dist/src/render/chrome.js +136 -0
- package/dist/src/render/chrome.js.map +1 -0
- package/dist/src/render/render-block.d.ts +21 -0
- package/dist/src/render/render-block.d.ts.map +1 -0
- package/dist/src/render/render-block.js +104 -0
- package/dist/src/render/render-block.js.map +1 -0
- package/dist/src/render/term-archive.d.ts +13 -0
- package/dist/src/render/term-archive.d.ts.map +1 -0
- package/dist/src/render/term-archive.js +35 -0
- package/dist/src/render/term-archive.js.map +1 -0
- package/dist/theme.config.d.ts +12 -0
- package/dist/theme.config.d.ts.map +1 -0
- package/dist/theme.config.js +42 -0
- package/dist/theme.config.js.map +1 -0
- package/package.json +57 -0
- package/src/index.ts +20 -0
- package/src/render/blocks/accordion.ts +51 -0
- package/src/render/blocks/collection-list.ts +286 -0
- package/src/render/blocks/cta.ts +33 -0
- package/src/render/blocks/embed.ts +99 -0
- package/src/render/blocks/faq.ts +58 -0
- package/src/render/blocks/feature-grid.ts +61 -0
- package/src/render/blocks/gallery.ts +46 -0
- package/src/render/blocks/hero.ts +54 -0
- package/src/render/blocks/logo-strip.ts +35 -0
- package/src/render/blocks/logos.ts +57 -0
- package/src/render/blocks/media-figure.ts +43 -0
- package/src/render/blocks/pricing-table.ts +76 -0
- package/src/render/blocks/prose.ts +22 -0
- package/src/render/blocks/quote.ts +46 -0
- package/src/render/blocks/stat-counter.ts +39 -0
- package/src/render/blocks/stats.ts +46 -0
- package/src/render/blocks/testimonial.ts +44 -0
- package/src/render/chrome.ts +162 -0
- package/src/render/render-block.ts +137 -0
- package/src/render/term-archive.ts +87 -0
- package/src/styles/archive.css +40 -0
- package/src/styles/base.css +1037 -0
- package/src/styles/blocks.css +1335 -0
- package/src/styles/theme.css +18 -0
- package/src/styles/tokens.css +308 -0
- package/tokens.json +36 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The magazine theme's stylesheet — the entry point, and nothing else.
|
|
3
|
+
*
|
|
4
|
+
* tokens.css the design system (and the Google Fonts `@import`),
|
|
5
|
+
* derived entirely from the skin's `--cogenta-*` properties
|
|
6
|
+
* base.css document, accessibility floor, masthead/colophon, actions
|
|
7
|
+
* blocks.css the twelve vocabulary blocks
|
|
8
|
+
*
|
|
9
|
+
* Not one colour, font, radius, duration or shadow is written literally in
|
|
10
|
+
* any of the three: every value comes from a `--cogenta-<group>-<name>`
|
|
11
|
+
* property produced from the skin's tokens, or from a `--cg-*` property
|
|
12
|
+
* composed from those.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
@import "./tokens.css";
|
|
16
|
+
@import "./base.css";
|
|
17
|
+
@import "./blocks.css";
|
|
18
|
+
@import "./archive.css";
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The magazine theme's design system.
|
|
3
|
+
*
|
|
4
|
+
* Contract D fixes a *closed* skin token set — seven colours, five type
|
|
5
|
+
* tokens, two spacing tokens, three radii, three motion tokens, two shadows
|
|
6
|
+
* — and refuses any skin that adds one. Nothing below adds to that set:
|
|
7
|
+
* every value here is *derived* from `--cogenta-*` by composition (`calc`,
|
|
8
|
+
* `color-mix`, relative colour syntax), so a skin swap rewrites the
|
|
9
|
+
* generated `--cogenta-*` sheet and this whole system follows with no build
|
|
10
|
+
* step.
|
|
11
|
+
*
|
|
12
|
+
* Two rules hold everywhere in this file and the two that import it:
|
|
13
|
+
*
|
|
14
|
+
* 1. **No colour literal.** Not one hex, `rgb()`, `hsl()` or bare `oklch()`.
|
|
15
|
+
* Every colour is either a skin token or a function *of* a skin token.
|
|
16
|
+
* `test/isolation.test.ts` enforces this on the source.
|
|
17
|
+
* 2. **No second scale.** The type steps come from `--cogenta-font-size-*`
|
|
18
|
+
* and the spacing multiplier from `--cogenta-space-scale`, both emitted
|
|
19
|
+
* by `renderSkin` from the same tokens the validator checked.
|
|
20
|
+
*
|
|
21
|
+
* The two Google Fonts loaded below are the one deliberate exception to "no
|
|
22
|
+
* external dependency": `fonts.googleapis.com` is the one host every
|
|
23
|
+
* Cogenta theme is allowed to reach for a stylesheet, and both faces carry a
|
|
24
|
+
* full system fallback stack in `tokens.json` — a browser that cannot reach
|
|
25
|
+
* Google Fonts (or a site that strips the `@import` for a stricter CSP)
|
|
26
|
+
* still gets Georgia/system-ui, never an unstyled page.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
@import url("https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,400;0,9..144,500;0,9..144,600;0,9..144,700;0,9..144,900;1,9..144,500;1,9..144,600&family=Public+Sans:wght@400;500;600;700&display=swap");
|
|
30
|
+
|
|
31
|
+
:where(:root) {
|
|
32
|
+
color-scheme: light dark;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* An explicit choice wins over the OS preference. No script ships with this
|
|
36
|
+
theme to set it; the attribute is the hook a site (or the admin) can flip. */
|
|
37
|
+
:where(:root[data-theme="dark"]) {
|
|
38
|
+
color-scheme: dark;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
:where(:root[data-theme="light"]) {
|
|
42
|
+
color-scheme: light;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* --------------------------------------------------------------------------
|
|
46
|
+
Space — one multiplier, one unit, a scale of multiples
|
|
47
|
+
-------------------------------------------------------------------------- */
|
|
48
|
+
|
|
49
|
+
:where(:root) {
|
|
50
|
+
--cg-density: var(--cogenta-space-scale, 1);
|
|
51
|
+
--cg-unit: calc(var(--cogenta-space-unit) * var(--cg-density));
|
|
52
|
+
|
|
53
|
+
--cg-s1: calc(var(--cg-unit) * 1);
|
|
54
|
+
--cg-s2: calc(var(--cg-unit) * 2);
|
|
55
|
+
--cg-s3: calc(var(--cg-unit) * 3);
|
|
56
|
+
--cg-s4: calc(var(--cg-unit) * 4);
|
|
57
|
+
--cg-s5: calc(var(--cg-unit) * 5);
|
|
58
|
+
--cg-s6: calc(var(--cg-unit) * 6);
|
|
59
|
+
--cg-s8: calc(var(--cg-unit) * 8);
|
|
60
|
+
--cg-s10: calc(var(--cg-unit) * 10);
|
|
61
|
+
--cg-s12: calc(var(--cg-unit) * 12);
|
|
62
|
+
--cg-s16: calc(var(--cg-unit) * 16);
|
|
63
|
+
--cg-s20: calc(var(--cg-unit) * 20);
|
|
64
|
+
--cg-s24: calc(var(--cg-unit) * 24);
|
|
65
|
+
|
|
66
|
+
--cg-gutter: var(--cg-s5);
|
|
67
|
+
--cg-gap-tight: var(--cg-s2);
|
|
68
|
+
--cg-gap: var(--cg-s4);
|
|
69
|
+
--cg-gap-loose: var(--cg-s8);
|
|
70
|
+
--cg-section-y: var(--cg-s16);
|
|
71
|
+
--cg-rule-gap: var(--cg-s6);
|
|
72
|
+
|
|
73
|
+
--cg-measure: 66ch;
|
|
74
|
+
--cg-measure-narrow: 46ch;
|
|
75
|
+
--cg-page: 76rem;
|
|
76
|
+
--cg-page-narrow: 48rem;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
:where([data-density="compact"]) {
|
|
80
|
+
--cg-density: 0.75;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
:where([data-density="comfortable"]) {
|
|
84
|
+
--cg-density: 1;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
:where([data-density="spacious"]) {
|
|
88
|
+
--cg-density: 1.25;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/* --------------------------------------------------------------------------
|
|
92
|
+
Type — the skin's scale, named; the editorial rhythm the scale does not
|
|
93
|
+
carry. Two families: a characterful display serif for headlines and pull
|
|
94
|
+
quotes, a quiet sans for running text, bylines and dates — the split the
|
|
95
|
+
masthead itself uses on the front page.
|
|
96
|
+
-------------------------------------------------------------------------- */
|
|
97
|
+
|
|
98
|
+
:where(:root) {
|
|
99
|
+
--cg-text-xs: var(--cogenta-font-size-xs, 0.64rem);
|
|
100
|
+
--cg-text-sm: var(--cogenta-font-size-sm, 0.8rem);
|
|
101
|
+
--cg-text-md: var(--cogenta-font-size-md, var(--cogenta-font-base-size, 1rem));
|
|
102
|
+
--cg-text-lg: var(--cogenta-font-size-lg, 1.25rem);
|
|
103
|
+
--cg-text-xl: var(--cogenta-font-size-xl, 1.5625rem);
|
|
104
|
+
--cg-text-2xl: var(--cogenta-font-size-2xl, 1.9531rem);
|
|
105
|
+
--cg-text-3xl: var(--cogenta-font-size-3xl, 2.4414rem);
|
|
106
|
+
|
|
107
|
+
--cg-leading-tight: 1.02;
|
|
108
|
+
--cg-leading-snug: 1.22;
|
|
109
|
+
--cg-leading-normal: 1.5;
|
|
110
|
+
--cg-leading-relaxed: 1.72;
|
|
111
|
+
|
|
112
|
+
/* Display serif reads best tightened; the sans used for metadata reads
|
|
113
|
+
best opened up into small-caps-style spacing. */
|
|
114
|
+
--cg-tracking-tight: -0.018em;
|
|
115
|
+
--cg-tracking-snug: -0.008em;
|
|
116
|
+
--cg-tracking-normal: 0em;
|
|
117
|
+
--cg-tracking-wide: 0.09em;
|
|
118
|
+
--cg-tracking-wider: 0.14em;
|
|
119
|
+
|
|
120
|
+
--cg-weight-regular: 400;
|
|
121
|
+
--cg-weight-medium: 500;
|
|
122
|
+
--cg-weight-semibold: 600;
|
|
123
|
+
--cg-weight-bold: 700;
|
|
124
|
+
--cg-weight-black: 900;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/* --------------------------------------------------------------------------
|
|
128
|
+
Radius — the skin's three, kept small: a print page has square corners,
|
|
129
|
+
and this theme's own `tokens.json` already ships tight radii, so nothing
|
|
130
|
+
here inflates them into the pill-shaped, card-heavy vocabulary a generic
|
|
131
|
+
admin dashboard uses.
|
|
132
|
+
-------------------------------------------------------------------------- */
|
|
133
|
+
|
|
134
|
+
:where(:root) {
|
|
135
|
+
--cg-radius-sm: var(--cogenta-radius-sm);
|
|
136
|
+
--cg-radius-md: var(--cogenta-radius-md);
|
|
137
|
+
--cg-radius-lg: var(--cogenta-radius-lg);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/* --------------------------------------------------------------------------
|
|
141
|
+
Motion
|
|
142
|
+
-------------------------------------------------------------------------- */
|
|
143
|
+
|
|
144
|
+
:where(:root) {
|
|
145
|
+
--cg-duration-fast: calc(var(--cogenta-motion-duration) * 0.6);
|
|
146
|
+
--cg-duration: var(--cogenta-motion-duration);
|
|
147
|
+
--cg-duration-slow: calc(var(--cogenta-motion-duration) * 2.4);
|
|
148
|
+
--cg-ease: var(--cogenta-motion-easing);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* --------------------------------------------------------------------------
|
|
152
|
+
Colour — paper, ink, rule, accent. One palette per scheme, both derived
|
|
153
|
+
from the same seven skin tokens.
|
|
154
|
+
|
|
155
|
+
The block below declares the **light** palette in plain terms; the
|
|
156
|
+
scheme-aware values live in the `@supports` block after it, and only
|
|
157
|
+
there — the same split `theme-canonical` uses and for the same reason: a
|
|
158
|
+
browser that does not know `light-dark()` still stores the declaration
|
|
159
|
+
and only fails when the value is *used*, so a feature query is the only
|
|
160
|
+
construct that actually falls back, written with `currentColor` so it
|
|
161
|
+
needs no colour literal of its own.
|
|
162
|
+
|
|
163
|
+
**This dark mode is designed for reading at night, not inverted.** Five
|
|
164
|
+
decisions, each independently checked by `test/design-system.test.ts`
|
|
165
|
+
against the real stylesheet:
|
|
166
|
+
|
|
167
|
+
1. *Elevation runs upward in lightness*, not via shadow: on black ink,
|
|
168
|
+
shadow reads as nothing, so `--cg-paper-panel` (a boxed note, a pull
|
|
169
|
+
quote's rule background) is the darkest surface, `--cg-paper` the
|
|
170
|
+
canvas, `--cg-paper-raised` (a card, a lead story) the lightest of the
|
|
171
|
+
three — the opposite of the light scheme, where the three are the same
|
|
172
|
+
sheet of paper and a real drop shadow does the separating.
|
|
173
|
+
2. *The accent is lifted*, from an oklch lightness around 0.49 in daylight
|
|
174
|
+
to about 0.72 at night — a brick red that reads correctly on cream
|
|
175
|
+
goes muddy on near-black ink, so night mode pushes it toward a warm
|
|
176
|
+
ember rather than keeping the daylight value.
|
|
177
|
+
3. *Its foreground flips to ink*, because a light ember needs a dark label
|
|
178
|
+
the way the daylight accent needed a cream one — the clearest single
|
|
179
|
+
break from a mechanical `bg`/`fg` swap.
|
|
180
|
+
4. *Text stays off pure white* — a warm, slightly toned paper-white, not
|
|
181
|
+
`#fff`, which halates against a near-black canvas.
|
|
182
|
+
5. *Rules become light overlays* — a rule one step **up** from the
|
|
183
|
+
surface it sits on, never a step down, or it disappears.
|
|
184
|
+
-------------------------------------------------------------------------- */
|
|
185
|
+
|
|
186
|
+
:where(:root) {
|
|
187
|
+
--cg-paper: var(--cogenta-color-bg);
|
|
188
|
+
--cg-paper-raised: var(--cogenta-color-bg);
|
|
189
|
+
--cg-paper-panel: var(--cogenta-color-muted);
|
|
190
|
+
--cg-paper-tint: color-mix(in oklab, var(--cogenta-color-accent) 9%, var(--cogenta-color-bg));
|
|
191
|
+
|
|
192
|
+
--cg-ink: var(--cogenta-color-fg);
|
|
193
|
+
--cg-ink-soft: var(--cogenta-color-muted-fg);
|
|
194
|
+
--cg-ink-faint: color-mix(in oklab, var(--cogenta-color-muted-fg) 92%, var(--cogenta-color-bg));
|
|
195
|
+
|
|
196
|
+
--cg-accent: var(--cogenta-color-accent);
|
|
197
|
+
--cg-accent-ink: var(--cogenta-color-accent-fg);
|
|
198
|
+
--cg-accent-hover: color-mix(in oklab, var(--cogenta-color-accent) 84%, var(--cogenta-color-fg));
|
|
199
|
+
--cg-accent-tint: color-mix(in oklab, var(--cogenta-color-accent) 12%, var(--cogenta-color-bg));
|
|
200
|
+
--cg-accent-tint-ink: color-mix(
|
|
201
|
+
in oklab,
|
|
202
|
+
var(--cogenta-color-accent) 70%,
|
|
203
|
+
var(--cogenta-color-fg)
|
|
204
|
+
);
|
|
205
|
+
|
|
206
|
+
--cg-rule: var(--cogenta-color-border);
|
|
207
|
+
--cg-rule-soft: color-mix(in oklab, var(--cogenta-color-border) 50%, var(--cogenta-color-bg));
|
|
208
|
+
--cg-rule-heavy: color-mix(in oklab, var(--cogenta-color-border) 45%, var(--cogenta-color-fg));
|
|
209
|
+
|
|
210
|
+
--cg-scrim: color-mix(in oklab, var(--cogenta-color-fg) 60%, transparent);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
@supports (color: light-dark(currentColor, currentColor)) and
|
|
214
|
+
(color: oklch(from currentColor l c h)) {
|
|
215
|
+
:where(:root) {
|
|
216
|
+
--cg-paper: light-dark(
|
|
217
|
+
var(--cogenta-color-bg),
|
|
218
|
+
oklch(from var(--cogenta-color-fg) 0.15 calc(c * 0.65) h)
|
|
219
|
+
);
|
|
220
|
+
--cg-paper-raised: light-dark(
|
|
221
|
+
var(--cogenta-color-bg),
|
|
222
|
+
oklch(from var(--cogenta-color-fg) 0.225 calc(c * 0.55) h)
|
|
223
|
+
);
|
|
224
|
+
--cg-paper-panel: light-dark(
|
|
225
|
+
var(--cogenta-color-muted),
|
|
226
|
+
oklch(from var(--cogenta-color-fg) 0.115 calc(c * 0.75) h)
|
|
227
|
+
);
|
|
228
|
+
--cg-paper-tint: light-dark(
|
|
229
|
+
color-mix(in oklab, var(--cogenta-color-accent) 9%, var(--cogenta-color-bg)),
|
|
230
|
+
oklch(from var(--cogenta-color-accent) 0.26 calc(c * 0.45) h)
|
|
231
|
+
);
|
|
232
|
+
|
|
233
|
+
--cg-ink: light-dark(
|
|
234
|
+
var(--cogenta-color-fg),
|
|
235
|
+
oklch(from var(--cogenta-color-accent) 0.92 0.014 h)
|
|
236
|
+
);
|
|
237
|
+
--cg-ink-soft: light-dark(
|
|
238
|
+
var(--cogenta-color-muted-fg),
|
|
239
|
+
oklch(from var(--cogenta-color-accent) 0.75 0.02 h)
|
|
240
|
+
);
|
|
241
|
+
--cg-ink-faint: light-dark(
|
|
242
|
+
color-mix(in oklab, var(--cogenta-color-muted-fg) 92%, var(--cogenta-color-bg)),
|
|
243
|
+
oklch(from var(--cogenta-color-accent) 0.63 0.018 h)
|
|
244
|
+
);
|
|
245
|
+
|
|
246
|
+
--cg-accent: light-dark(
|
|
247
|
+
var(--cogenta-color-accent),
|
|
248
|
+
oklch(from var(--cogenta-color-accent) 0.72 calc(c * 0.9) h)
|
|
249
|
+
);
|
|
250
|
+
--cg-accent-ink: light-dark(
|
|
251
|
+
var(--cogenta-color-accent-fg),
|
|
252
|
+
oklch(from var(--cogenta-color-accent) 0.17 calc(c * 0.5) h)
|
|
253
|
+
);
|
|
254
|
+
--cg-accent-hover: light-dark(
|
|
255
|
+
color-mix(in oklab, var(--cogenta-color-accent) 84%, var(--cogenta-color-fg)),
|
|
256
|
+
oklch(from var(--cogenta-color-accent) 0.8 calc(c * 0.85) h)
|
|
257
|
+
);
|
|
258
|
+
--cg-accent-tint: light-dark(
|
|
259
|
+
color-mix(in oklab, var(--cogenta-color-accent) 12%, var(--cogenta-color-bg)),
|
|
260
|
+
oklch(from var(--cogenta-color-accent) 0.29 calc(c * 0.5) h)
|
|
261
|
+
);
|
|
262
|
+
--cg-accent-tint-ink: light-dark(
|
|
263
|
+
color-mix(in oklab, var(--cogenta-color-accent) 70%, var(--cogenta-color-fg)),
|
|
264
|
+
oklch(from var(--cogenta-color-accent) 0.88 calc(c * 0.4) h)
|
|
265
|
+
);
|
|
266
|
+
|
|
267
|
+
--cg-rule: light-dark(
|
|
268
|
+
var(--cogenta-color-border),
|
|
269
|
+
oklch(from var(--cogenta-color-accent) 0.32 calc(c * 0.2) h)
|
|
270
|
+
);
|
|
271
|
+
--cg-rule-soft: light-dark(
|
|
272
|
+
color-mix(in oklab, var(--cogenta-color-border) 50%, var(--cogenta-color-bg)),
|
|
273
|
+
oklch(from var(--cogenta-color-accent) 0.25 calc(c * 0.18) h)
|
|
274
|
+
);
|
|
275
|
+
--cg-rule-heavy: light-dark(
|
|
276
|
+
color-mix(in oklab, var(--cogenta-color-border) 45%, var(--cogenta-color-fg)),
|
|
277
|
+
oklch(from var(--cogenta-color-accent) 0.56 calc(c * 0.22) h)
|
|
278
|
+
);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/* --------------------------------------------------------------------------
|
|
283
|
+
Elevation — a real drop shadow in daylight, a hairline rule at night
|
|
284
|
+
-------------------------------------------------------------------------- */
|
|
285
|
+
|
|
286
|
+
:where(:root) {
|
|
287
|
+
--cg-ring: inset 0 0 0 1px var(--cg-rule);
|
|
288
|
+
--cg-ring-accent: inset 0 0 0 1px var(--cg-accent);
|
|
289
|
+
|
|
290
|
+
--cg-elevation-0: none;
|
|
291
|
+
--cg-elevation-1: var(--cogenta-shadow-sm);
|
|
292
|
+
--cg-elevation-2: var(--cogenta-shadow-md);
|
|
293
|
+
--cg-elevation-3: var(--cogenta-shadow-md), var(--cogenta-shadow-sm);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
@media (prefers-color-scheme: dark) {
|
|
297
|
+
:where(:root:not([data-theme="light"])) {
|
|
298
|
+
--cg-elevation-1: var(--cg-ring);
|
|
299
|
+
--cg-elevation-2: var(--cg-ring);
|
|
300
|
+
--cg-elevation-3: var(--cg-ring), var(--cogenta-shadow-md);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
:where(:root[data-theme="dark"]) {
|
|
305
|
+
--cg-elevation-1: var(--cg-ring);
|
|
306
|
+
--cg-elevation-2: var(--cg-ring);
|
|
307
|
+
--cg-elevation-3: var(--cg-ring), var(--cogenta-shadow-md);
|
|
308
|
+
}
|
package/tokens.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"color": {
|
|
3
|
+
"bg": "#F7F1E6",
|
|
4
|
+
"fg": "#211A12",
|
|
5
|
+
"accent": "#A2361F",
|
|
6
|
+
"accentFg": "#FFFBF2",
|
|
7
|
+
"muted": "#ECE2CF",
|
|
8
|
+
"mutedFg": "#574A3C",
|
|
9
|
+
"border": "#D8CBB0"
|
|
10
|
+
},
|
|
11
|
+
"font": {
|
|
12
|
+
"sans": "'Public Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif",
|
|
13
|
+
"serif": "'Fraunces', Georgia, Cambria, 'Times New Roman', Times, serif",
|
|
14
|
+
"mono": "ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace",
|
|
15
|
+
"scale": 1.25,
|
|
16
|
+
"baseSize": "1rem"
|
|
17
|
+
},
|
|
18
|
+
"space": {
|
|
19
|
+
"unit": "0.25rem",
|
|
20
|
+
"density": "comfortable"
|
|
21
|
+
},
|
|
22
|
+
"radius": {
|
|
23
|
+
"sm": "0.125rem",
|
|
24
|
+
"md": "0.25rem",
|
|
25
|
+
"lg": "0.375rem"
|
|
26
|
+
},
|
|
27
|
+
"motion": {
|
|
28
|
+
"duration": "200ms",
|
|
29
|
+
"easing": "cubic-bezier(0.4, 0, 0.2, 1)",
|
|
30
|
+
"reduced": true
|
|
31
|
+
},
|
|
32
|
+
"shadow": {
|
|
33
|
+
"sm": "0 1px 2px rgba(33, 26, 18, 0.12)",
|
|
34
|
+
"md": "0 8px 28px rgba(33, 26, 18, 0.16)"
|
|
35
|
+
}
|
|
36
|
+
}
|