@cogenta/theme-restaurant 0.3.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 +22 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +25 -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 +21 -0
- package/dist/src/render/blocks/accordion.js.map +1 -0
- package/dist/src/render/blocks/collection-list.d.ts +13 -0
- package/dist/src/render/blocks/collection-list.d.ts.map +1 -0
- package/dist/src/render/blocks/collection-list.js +109 -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 +13 -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 +82 -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 +17 -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 +24 -0
- package/dist/src/render/blocks/feature-grid.js.map +1 -0
- package/dist/src/render/blocks/gallery.d.ts +11 -0
- package/dist/src/render/blocks/gallery.d.ts.map +1 -0
- package/dist/src/render/blocks/gallery.js +20 -0
- package/dist/src/render/blocks/gallery.js.map +1 -0
- package/dist/src/render/blocks/hero.d.ts +16 -0
- package/dist/src/render/blocks/hero.d.ts.map +1 -0
- package/dist/src/render/blocks/hero.js +32 -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 +16 -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 +23 -0
- package/dist/src/render/blocks/logos.js.map +1 -0
- package/dist/src/render/blocks/media-figure.d.ts +9 -0
- package/dist/src/render/blocks/media-figure.d.ts.map +1 -0
- package/dist/src/render/blocks/media-figure.js +24 -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 +30 -0
- package/dist/src/render/blocks/pricing-table.js.map +1 -0
- package/dist/src/render/blocks/prose.d.ts +13 -0
- package/dist/src/render/blocks/prose.d.ts.map +1 -0
- package/dist/src/render/blocks/prose.js +14 -0
- package/dist/src/render/blocks/prose.js.map +1 -0
- package/dist/src/render/blocks/quote.d.ts +8 -0
- package/dist/src/render/blocks/quote.d.ts.map +1 -0
- package/dist/src/render/blocks/quote.js +21 -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 +15 -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 +21 -0
- package/dist/src/render/blocks/stats.js.map +1 -0
- package/dist/src/render/blocks/testimonial.d.ts +17 -0
- package/dist/src/render/blocks/testimonial.d.ts.map +1 -0
- package/dist/src/render/blocks/testimonial.js +26 -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 +108 -0
- package/dist/src/render/chrome.js.map +1 -0
- package/dist/src/render/render-block.d.ts +6 -0
- package/dist/src/render/render-block.d.ts.map +1 -0
- package/dist/src/render/render-block.js +118 -0
- package/dist/src/render/render-block.js.map +1 -0
- package/dist/src/render/term-archive.d.ts +10 -0
- package/dist/src/render/term-archive.d.ts.map +1 -0
- package/dist/src/render/term-archive.js +32 -0
- package/dist/src/render/term-archive.js.map +1 -0
- package/dist/theme.config.d.ts +11 -0
- package/dist/theme.config.d.ts.map +1 -0
- package/dist/theme.config.js +41 -0
- package/dist/theme.config.js.map +1 -0
- package/package.json +57 -0
- package/src/index.ts +24 -0
- package/src/render/blocks/accordion.ts +57 -0
- package/src/render/blocks/collection-list.ts +189 -0
- package/src/render/blocks/cta.ts +31 -0
- package/src/render/blocks/embed.ts +105 -0
- package/src/render/blocks/faq.ts +53 -0
- package/src/render/blocks/feature-grid.ts +61 -0
- package/src/render/blocks/gallery.ts +40 -0
- package/src/render/blocks/hero.ts +58 -0
- package/src/render/blocks/logo-strip.ts +35 -0
- package/src/render/blocks/logos.ts +53 -0
- package/src/render/blocks/media-figure.ts +39 -0
- package/src/render/blocks/pricing-table.ts +74 -0
- package/src/render/blocks/prose.ts +19 -0
- package/src/render/blocks/quote.ts +38 -0
- package/src/render/blocks/stat-counter.ts +37 -0
- package/src/render/blocks/stats.ts +48 -0
- package/src/render/blocks/testimonial.ts +42 -0
- package/src/render/chrome.ts +141 -0
- package/src/render/render-block.ts +156 -0
- package/src/render/term-archive.ts +78 -0
- package/src/styles/archive.css +84 -0
- package/src/styles/base.css +923 -0
- package/src/styles/blocks.css +975 -0
- package/src/styles/theme.css +36 -0
- package/src/styles/tokens.css +320 -0
- package/tokens.json +36 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* `@cogenta/theme-restaurant`'s stylesheet — the entry point, and nothing
|
|
3
|
+
* else.
|
|
4
|
+
*
|
|
5
|
+
* Four layers, in the only order that works:
|
|
6
|
+
*
|
|
7
|
+
* tokens.css the design system, derived entirely from the skin's
|
|
8
|
+
* `--cogenta-*` custom properties (contract D)
|
|
9
|
+
* base.css document, accessibility floor, page frame, chrome, actions
|
|
10
|
+
* blocks.css the seventeen vocabulary blocks
|
|
11
|
+
* archive.css the taxonomy-term archive (contract D `theme@1.3`)
|
|
12
|
+
*
|
|
13
|
+
* Not one colour, font, radius, duration or shadow is written literally in
|
|
14
|
+
* any of the four: every value comes from a `--cogenta-<group>-<name>`
|
|
15
|
+
* property produced from the skin's tokens, or from a `--cg-*` property
|
|
16
|
+
* composed from those.
|
|
17
|
+
*
|
|
18
|
+
* `@import` is resolved at build time by Astro, and by `@cogenta/cli`'s own
|
|
19
|
+
* inliner when `cogenta serve` renders without a build. Both flatten these
|
|
20
|
+
* four into one sheet, so no visitor ever pays for four round trips.
|
|
21
|
+
*
|
|
22
|
+
* The one thing this file adds on its own: the Google Fonts request for the
|
|
23
|
+
* two type families `tokens.json` names — Cormorant Garamond (display
|
|
24
|
+
* headings, light weight) and Jost (body copy, controls, small-caps
|
|
25
|
+
* labels) — loaded here, once, rather than per skin, since a skin only ever
|
|
26
|
+
* *names* a font family; it does not fetch one. Both fall back to a real
|
|
27
|
+
* system stack (`tokens.json`'s `font.serif`/`font.sans`) if Google Fonts is
|
|
28
|
+
* unreachable.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
@import url("https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;0,600;1,400&family=Jost:ital,wght@0,300;0,400;0,500;0,600;1,400&display=swap");
|
|
32
|
+
|
|
33
|
+
@import "./tokens.css";
|
|
34
|
+
@import "./base.css";
|
|
35
|
+
@import "./blocks.css";
|
|
36
|
+
@import "./archive.css";
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* `@cogenta/theme-restaurant`'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. So this layer adds nothing to the
|
|
7
|
+
* skin: every value below is *derived* from `--cogenta-*` by composition
|
|
8
|
+
* (`calc`, `color-mix`, relative colour syntax). A skin swap rewrites the
|
|
9
|
+
* generated `--cogenta-*` sheet and this whole system follows, with no
|
|
10
|
+
* build 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
|
+
* 2. **No second scale.** The type steps come from `--cogenta-font-size-*`
|
|
17
|
+
* and the spacing multiplier from `--cogenta-space-scale`, both emitted
|
|
18
|
+
* by `renderSkin` from the same tokens the validator checked.
|
|
19
|
+
*
|
|
20
|
+
* The default skin (`tokens.json`) is a warm cream, charcoal-ink palette
|
|
21
|
+
* with a deep wine/copper accent — the light scheme is designed on its own
|
|
22
|
+
* terms, not treated as an afterthought to a dark-first theme. Elegance here
|
|
23
|
+
* reads as generous negative space, thin hairlines standing in for most
|
|
24
|
+
* elevation, and small-caps, letter-spaced labels (`--cg-tracking-caps`)
|
|
25
|
+
* for every eyebrow/kicker. The dark palette below is designed on its own
|
|
26
|
+
* terms too — the same five departures from a mechanical `bg`/`fg` swap
|
|
27
|
+
* every built-in theme's dark mode uses, tuned to this palette's own wine
|
|
28
|
+
* accent.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
:where(:root) {
|
|
32
|
+
color-scheme: light dark;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
:where(:root[data-theme="dark"]) {
|
|
36
|
+
color-scheme: dark;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
:where(:root[data-theme="light"]) {
|
|
40
|
+
color-scheme: light;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* --------------------------------------------------------------------------
|
|
44
|
+
Space — a spacious scale (`space.density: "spacious"` in tokens.json):
|
|
45
|
+
this theme spends it on generous section rhythm and a very wide hero,
|
|
46
|
+
the "room to breathe" an elegant dining room's own website should have.
|
|
47
|
+
-------------------------------------------------------------------------- */
|
|
48
|
+
|
|
49
|
+
:where(:root) {
|
|
50
|
+
--cg-density: var(--cogenta-space-scale, 1.25);
|
|
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-s28: calc(var(--cg-unit) * 28);
|
|
65
|
+
|
|
66
|
+
--cg-gutter: var(--cg-s6);
|
|
67
|
+
--cg-gap-tight: var(--cg-s2);
|
|
68
|
+
--cg-gap: var(--cg-s5);
|
|
69
|
+
--cg-gap-loose: var(--cg-s10);
|
|
70
|
+
--cg-section-y: var(--cg-s20);
|
|
71
|
+
|
|
72
|
+
--cg-measure: 66ch;
|
|
73
|
+
--cg-measure-narrow: 40ch;
|
|
74
|
+
--cg-page: 76rem;
|
|
75
|
+
--cg-page-narrow: 46rem;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
:where([data-density="compact"]) {
|
|
79
|
+
--cg-density: 0.9;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
:where([data-density="comfortable"]) {
|
|
83
|
+
--cg-density: 1.1;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
:where([data-density="spacious"]) {
|
|
87
|
+
--cg-density: 1.25;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* --------------------------------------------------------------------------
|
|
91
|
+
Type — the skin's scale, named, plus the two type families this theme
|
|
92
|
+
actually loads: Cormorant Garamond for display headings (light, generous
|
|
93
|
+
letter-spacing at large sizes) and Jost for body copy and every control.
|
|
94
|
+
-------------------------------------------------------------------------- */
|
|
95
|
+
|
|
96
|
+
:where(:root) {
|
|
97
|
+
--cg-text-xs: var(--cogenta-font-size-xs, 0.72rem);
|
|
98
|
+
--cg-text-sm: var(--cogenta-font-size-sm, 0.86rem);
|
|
99
|
+
--cg-text-md: var(--cogenta-font-size-md, var(--cogenta-font-base-size, 1rem));
|
|
100
|
+
--cg-text-lg: var(--cogenta-font-size-lg, 1.25rem);
|
|
101
|
+
--cg-text-xl: var(--cogenta-font-size-xl, 1.563rem);
|
|
102
|
+
--cg-text-2xl: var(--cogenta-font-size-2xl, 1.953rem);
|
|
103
|
+
--cg-text-3xl: var(--cogenta-font-size-3xl, 2.441rem);
|
|
104
|
+
--cg-text-4xl: calc(var(--cogenta-font-size-3xl, 2.441rem) * 1.2);
|
|
105
|
+
|
|
106
|
+
--cg-leading-tight: 1.05;
|
|
107
|
+
--cg-leading-snug: 1.28;
|
|
108
|
+
--cg-leading-normal: 1.65;
|
|
109
|
+
--cg-leading-relaxed: 1.8;
|
|
110
|
+
|
|
111
|
+
/* A light-weight display serif wants *wider* tracking at large sizes, not
|
|
112
|
+
tighter — the opposite instinct from a grotesque display face — and a
|
|
113
|
+
small-caps label wants it wider still. Both scale in `em`. */
|
|
114
|
+
--cg-tracking-tight: 0em;
|
|
115
|
+
--cg-tracking-snug: 0.01em;
|
|
116
|
+
--cg-tracking-normal: 0.01em;
|
|
117
|
+
--cg-tracking-wide: 0.08em;
|
|
118
|
+
--cg-tracking-caps: 0.22em;
|
|
119
|
+
|
|
120
|
+
--cg-weight-light: 300;
|
|
121
|
+
--cg-weight-regular: 400;
|
|
122
|
+
--cg-weight-medium: 500;
|
|
123
|
+
--cg-weight-semibold: 600;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/* --------------------------------------------------------------------------
|
|
127
|
+
Radius — kept close to square: hairlines carry this theme's structure,
|
|
128
|
+
never a soft rounded corner. `--cg-radius-pill` is the one rounded shape,
|
|
129
|
+
reserved for the small "chef's pick"/category pills.
|
|
130
|
+
-------------------------------------------------------------------------- */
|
|
131
|
+
|
|
132
|
+
:where(:root) {
|
|
133
|
+
--cg-radius-xs: calc(var(--cogenta-radius-sm) / 2);
|
|
134
|
+
--cg-radius-sm: var(--cogenta-radius-sm);
|
|
135
|
+
--cg-radius-md: var(--cogenta-radius-md);
|
|
136
|
+
--cg-radius-lg: var(--cogenta-radius-lg);
|
|
137
|
+
--cg-radius-xl: calc(var(--cogenta-radius-lg) * 2);
|
|
138
|
+
--cg-radius-pill: 999rem;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/* --------------------------------------------------------------------------
|
|
142
|
+
Motion
|
|
143
|
+
-------------------------------------------------------------------------- */
|
|
144
|
+
|
|
145
|
+
:where(:root) {
|
|
146
|
+
--cg-duration-fast: calc(var(--cogenta-motion-duration) * 0.6);
|
|
147
|
+
--cg-duration: var(--cogenta-motion-duration);
|
|
148
|
+
--cg-duration-slow: calc(var(--cogenta-motion-duration) * 3);
|
|
149
|
+
--cg-ease: var(--cogenta-motion-easing);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/* --------------------------------------------------------------------------
|
|
153
|
+
Colour — one palette per scheme, both derived from the same seven tokens.
|
|
154
|
+
--------------------------------------------------------------------------
|
|
155
|
+
|
|
156
|
+
The block below declares the **light** palette (this theme's default
|
|
157
|
+
skin: warm cream, charcoal ink, a deep wine accent) in plain terms; the
|
|
158
|
+
scheme-aware values live in the `@supports` block after it, guarded the
|
|
159
|
+
same way every built-in theme guards it: a browser that cannot parse
|
|
160
|
+
`light-dark()` still gets a usable light palette rather than an `unset`
|
|
161
|
+
custom property.
|
|
162
|
+
|
|
163
|
+
**The dark palette is designed on its own terms, not inverted** — the
|
|
164
|
+
same five departures from a mechanical `bg`/`fg` swap every built-in
|
|
165
|
+
theme's dark mode makes, applied to this palette's own wine hue:
|
|
166
|
+
|
|
167
|
+
1. Elevation is a hairline ring in both schemes; a real shadow is spent
|
|
168
|
+
only on hover, never on a resting surface.
|
|
169
|
+
2. The accent is lifted well past a mechanical brightening and
|
|
170
|
+
**desaturated** as it lifts — a wine pushed to the light-mode's own
|
|
171
|
+
lightness reads as a highlighter pink; this pulls chroma back as it
|
|
172
|
+
rises so it still reads as "the same considered wine".
|
|
173
|
+
3. The accent's foreground flips to ink: light text on a lifted accent
|
|
174
|
+
fails contrast.
|
|
175
|
+
4. Text is never pure light and never fully desaturated — ink carries a
|
|
176
|
+
trace of the accent's own hue.
|
|
177
|
+
5. A border lightens rather than darkens against its surface.
|
|
178
|
+
|
|
179
|
+
Known limit, recorded once for every built-in theme: the derivation
|
|
180
|
+
assumes a light-first skin (`bg` lighter than `fg`) — this theme's own
|
|
181
|
+
default. A skin that starts dark would need a second colour group in the
|
|
182
|
+
contract, a `theme@2.0` change no single theme can make on its own.
|
|
183
|
+
-------------------------------------------------------------------------- */
|
|
184
|
+
|
|
185
|
+
:where(:root) {
|
|
186
|
+
--cg-canvas: var(--cogenta-color-bg);
|
|
187
|
+
--cg-surface: var(--cogenta-color-bg);
|
|
188
|
+
--cg-surface-raised: var(--cogenta-color-bg);
|
|
189
|
+
--cg-surface-sunken: var(--cogenta-color-muted);
|
|
190
|
+
--cg-surface-tinted: color-mix(in oklab, var(--cogenta-color-accent) 7%, var(--cogenta-color-bg));
|
|
191
|
+
|
|
192
|
+
--cg-ink: var(--cogenta-color-fg);
|
|
193
|
+
--cg-ink-muted: var(--cogenta-color-muted-fg);
|
|
194
|
+
--cg-ink-subtle: color-mix(in oklab, var(--cogenta-color-muted-fg) 85%, var(--cogenta-color-bg));
|
|
195
|
+
|
|
196
|
+
--cg-accent: var(--cogenta-color-accent);
|
|
197
|
+
--cg-accent-fg: 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-soft: color-mix(in oklab, var(--cogenta-color-accent) 9%, var(--cogenta-color-bg));
|
|
200
|
+
--cg-accent-soft-fg: color-mix(
|
|
201
|
+
in oklab,
|
|
202
|
+
var(--cogenta-color-accent) 70%,
|
|
203
|
+
var(--cogenta-color-fg)
|
|
204
|
+
);
|
|
205
|
+
|
|
206
|
+
--cg-line: var(--cogenta-color-border);
|
|
207
|
+
--cg-line-soft: color-mix(in oklab, var(--cogenta-color-border) 50%, var(--cogenta-color-bg));
|
|
208
|
+
--cg-line-strong: color-mix(in oklab, var(--cogenta-color-border) 60%, var(--cogenta-color-fg));
|
|
209
|
+
|
|
210
|
+
/* The hero's own flat scrim — a single semi-transparent veil over the
|
|
211
|
+
whole image (D5: no gradient fade), a function of ink rather than a
|
|
212
|
+
literal black wash, so a lighter-ink skin gets a lighter scrim too. */
|
|
213
|
+
--cg-scrim: color-mix(in oklab, var(--cogenta-color-fg) 55%, transparent);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
@supports (color: light-dark(currentColor, currentColor)) and
|
|
217
|
+
(color: oklch(from currentColor l c h)) {
|
|
218
|
+
:where(:root) {
|
|
219
|
+
--cg-canvas: light-dark(
|
|
220
|
+
var(--cogenta-color-bg),
|
|
221
|
+
oklch(from var(--cogenta-color-fg) 0.145 calc(c * 0.6) h)
|
|
222
|
+
);
|
|
223
|
+
--cg-surface: light-dark(
|
|
224
|
+
var(--cogenta-color-bg),
|
|
225
|
+
oklch(from var(--cogenta-color-fg) 0.145 calc(c * 0.6) h)
|
|
226
|
+
);
|
|
227
|
+
--cg-surface-raised: light-dark(
|
|
228
|
+
var(--cogenta-color-bg),
|
|
229
|
+
oklch(from var(--cogenta-color-fg) 0.21 calc(c * 0.55) h)
|
|
230
|
+
);
|
|
231
|
+
--cg-surface-sunken: light-dark(
|
|
232
|
+
var(--cogenta-color-muted),
|
|
233
|
+
oklch(from var(--cogenta-color-fg) 0.105 calc(c * 0.7) h)
|
|
234
|
+
);
|
|
235
|
+
--cg-surface-tinted: light-dark(
|
|
236
|
+
color-mix(in oklab, var(--cogenta-color-accent) 7%, var(--cogenta-color-bg)),
|
|
237
|
+
oklch(from var(--cogenta-color-accent) 0.225 calc(c * 0.5) h)
|
|
238
|
+
);
|
|
239
|
+
|
|
240
|
+
--cg-ink: light-dark(
|
|
241
|
+
var(--cogenta-color-fg),
|
|
242
|
+
oklch(from var(--cogenta-color-accent) 0.94 0.012 h)
|
|
243
|
+
);
|
|
244
|
+
--cg-ink-muted: light-dark(
|
|
245
|
+
var(--cogenta-color-muted-fg),
|
|
246
|
+
oklch(from var(--cogenta-color-accent) 0.77 0.018 h)
|
|
247
|
+
);
|
|
248
|
+
--cg-ink-subtle: light-dark(
|
|
249
|
+
color-mix(in oklab, var(--cogenta-color-muted-fg) 85%, var(--cogenta-color-bg)),
|
|
250
|
+
oklch(from var(--cogenta-color-accent) 0.64 0.016 h)
|
|
251
|
+
);
|
|
252
|
+
|
|
253
|
+
--cg-accent: light-dark(
|
|
254
|
+
var(--cogenta-color-accent),
|
|
255
|
+
oklch(from var(--cogenta-color-accent) 0.73 calc(c * 0.68) h)
|
|
256
|
+
);
|
|
257
|
+
--cg-accent-fg: light-dark(
|
|
258
|
+
var(--cogenta-color-accent-fg),
|
|
259
|
+
oklch(from var(--cogenta-color-accent) 0.15 calc(c * 0.55) h)
|
|
260
|
+
);
|
|
261
|
+
--cg-accent-hover: light-dark(
|
|
262
|
+
color-mix(in oklab, var(--cogenta-color-accent) 84%, var(--cogenta-color-fg)),
|
|
263
|
+
oklch(from var(--cogenta-color-accent) 0.82 calc(c * 0.64) h)
|
|
264
|
+
);
|
|
265
|
+
--cg-accent-soft: light-dark(
|
|
266
|
+
color-mix(in oklab, var(--cogenta-color-accent) 9%, var(--cogenta-color-bg)),
|
|
267
|
+
oklch(from var(--cogenta-color-accent) 0.27 calc(c * 0.42) h)
|
|
268
|
+
);
|
|
269
|
+
--cg-accent-soft-fg: light-dark(
|
|
270
|
+
color-mix(in oklab, var(--cogenta-color-accent) 70%, var(--cogenta-color-fg)),
|
|
271
|
+
oklch(from var(--cogenta-color-accent) 0.88 calc(c * 0.38) h)
|
|
272
|
+
);
|
|
273
|
+
|
|
274
|
+
--cg-line: light-dark(
|
|
275
|
+
var(--cogenta-color-border),
|
|
276
|
+
oklch(from var(--cogenta-color-accent) 0.32 calc(c * 0.18) h)
|
|
277
|
+
);
|
|
278
|
+
--cg-line-soft: light-dark(
|
|
279
|
+
color-mix(in oklab, var(--cogenta-color-border) 50%, var(--cogenta-color-bg)),
|
|
280
|
+
oklch(from var(--cogenta-color-accent) 0.26 calc(c * 0.16) h)
|
|
281
|
+
);
|
|
282
|
+
--cg-line-strong: light-dark(
|
|
283
|
+
color-mix(in oklab, var(--cogenta-color-border) 60%, var(--cogenta-color-fg)),
|
|
284
|
+
oklch(from var(--cogenta-color-accent) 0.52 calc(c * 0.2) h)
|
|
285
|
+
);
|
|
286
|
+
|
|
287
|
+
--cg-scrim: light-dark(
|
|
288
|
+
color-mix(in oklab, var(--cogenta-color-fg) 55%, transparent),
|
|
289
|
+
color-mix(in oklab, var(--cogenta-color-fg) 62%, transparent)
|
|
290
|
+
);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/* --------------------------------------------------------------------------
|
|
295
|
+
Elevation — a hairline ring by default in both schemes; a real shadow is
|
|
296
|
+
spent only on hover, never on a resting surface.
|
|
297
|
+
-------------------------------------------------------------------------- */
|
|
298
|
+
|
|
299
|
+
:where(:root) {
|
|
300
|
+
--cg-ring: inset 0 0 0 1px var(--cg-line);
|
|
301
|
+
--cg-ring-accent: inset 0 0 0 1px var(--cg-accent);
|
|
302
|
+
--cg-ring-strong: inset 0 0 0 1px var(--cg-line-strong);
|
|
303
|
+
|
|
304
|
+
--cg-elevation-0: none;
|
|
305
|
+
--cg-elevation-1: var(--cg-ring);
|
|
306
|
+
--cg-elevation-2: var(--cogenta-shadow-sm), var(--cg-ring);
|
|
307
|
+
--cg-elevation-3: var(--cogenta-shadow-md), var(--cg-ring);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
@media (prefers-color-scheme: dark) {
|
|
311
|
+
:where(:root:not([data-theme="light"])) {
|
|
312
|
+
--cg-elevation-2: var(--cg-ring-strong);
|
|
313
|
+
--cg-elevation-3: var(--cg-ring-strong), var(--cogenta-shadow-md);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
:where(:root[data-theme="dark"]) {
|
|
318
|
+
--cg-elevation-2: var(--cg-ring-strong);
|
|
319
|
+
--cg-elevation-3: var(--cg-ring-strong), var(--cogenta-shadow-md);
|
|
320
|
+
}
|
package/tokens.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"color": {
|
|
3
|
+
"bg": "#f5ecdc",
|
|
4
|
+
"fg": "#231b16",
|
|
5
|
+
"accent": "#7a2a2c",
|
|
6
|
+
"accentFg": "#ffffff",
|
|
7
|
+
"muted": "#ece0cb",
|
|
8
|
+
"mutedFg": "#4a3d33",
|
|
9
|
+
"border": "#ddccae"
|
|
10
|
+
},
|
|
11
|
+
"font": {
|
|
12
|
+
"sans": "'Jost', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif",
|
|
13
|
+
"serif": "'Cormorant Garamond', ui-serif, Georgia, Cambria, 'Times New Roman', 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": "spacious"
|
|
21
|
+
},
|
|
22
|
+
"radius": {
|
|
23
|
+
"sm": "0.0625rem",
|
|
24
|
+
"md": "0.125rem",
|
|
25
|
+
"lg": "0.25rem"
|
|
26
|
+
},
|
|
27
|
+
"motion": {
|
|
28
|
+
"duration": "220ms",
|
|
29
|
+
"easing": "cubic-bezier(0.16, 1, 0.3, 1)",
|
|
30
|
+
"reduced": true
|
|
31
|
+
},
|
|
32
|
+
"shadow": {
|
|
33
|
+
"sm": "0 1px 3px rgba(35, 27, 22, 0.14)",
|
|
34
|
+
"md": "0 16px 40px rgba(35, 27, 22, 0.22)"
|
|
35
|
+
}
|
|
36
|
+
}
|