@cogenta/theme-entreprise 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 +16 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +16 -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 +24 -0
- package/dist/src/render/blocks/accordion.js.map +1 -0
- package/dist/src/render/blocks/collection-list.d.ts +14 -0
- package/dist/src/render/blocks/collection-list.d.ts.map +1 -0
- package/dist/src/render/blocks/collection-list.js +55 -0
- package/dist/src/render/blocks/collection-list.js.map +1 -0
- package/dist/src/render/blocks/cta.d.ts +12 -0
- package/dist/src/render/blocks/cta.d.ts.map +1 -0
- package/dist/src/render/blocks/cta.js +19 -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 +92 -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 +25 -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 +33 -0
- package/dist/src/render/blocks/feature-grid.js.map +1 -0
- package/dist/src/render/blocks/gallery.d.ts +15 -0
- package/dist/src/render/blocks/gallery.d.ts.map +1 -0
- package/dist/src/render/blocks/gallery.js +28 -0
- package/dist/src/render/blocks/gallery.js.map +1 -0
- package/dist/src/render/blocks/hero.d.ts +15 -0
- package/dist/src/render/blocks/hero.d.ts.map +1 -0
- package/dist/src/render/blocks/hero.js +31 -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 +21 -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 +30 -0
- package/dist/src/render/blocks/logos.js.map +1 -0
- package/dist/src/render/blocks/media-figure.d.ts +13 -0
- package/dist/src/render/blocks/media-figure.d.ts.map +1 -0
- package/dist/src/render/blocks/media-figure.js +28 -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 +33 -0
- package/dist/src/render/blocks/pricing-table.js.map +1 -0
- package/dist/src/render/blocks/prose.d.ts +9 -0
- package/dist/src/render/blocks/prose.d.ts.map +1 -0
- package/dist/src/render/blocks/prose.js +10 -0
- package/dist/src/render/blocks/prose.js.map +1 -0
- package/dist/src/render/blocks/quote.d.ts +18 -0
- package/dist/src/render/blocks/quote.d.ts.map +1 -0
- package/dist/src/render/blocks/quote.js +31 -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 +23 -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 +23 -0
- package/dist/src/render/blocks/stats.js.map +1 -0
- package/dist/src/render/blocks/testimonial.d.ts +16 -0
- package/dist/src/render/blocks/testimonial.d.ts.map +1 -0
- package/dist/src/render/blocks/testimonial.js +25 -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 +101 -0
- package/dist/src/render/chrome.js.map +1 -0
- package/dist/src/render/render-block.d.ts +24 -0
- package/dist/src/render/render-block.d.ts.map +1 -0
- package/dist/src/render/render-block.js +108 -0
- package/dist/src/render/render-block.js.map +1 -0
- package/dist/src/render/term-archive.d.ts +12 -0
- package/dist/src/render/term-archive.d.ts.map +1 -0
- package/dist/src/render/term-archive.js +34 -0
- package/dist/src/render/term-archive.js.map +1 -0
- package/dist/theme.config.d.ts +16 -0
- package/dist/theme.config.d.ts.map +1 -0
- package/dist/theme.config.js +46 -0
- package/dist/theme.config.js.map +1 -0
- package/package.json +57 -0
- package/src/index.ts +15 -0
- package/src/render/blocks/accordion.ts +60 -0
- package/src/render/blocks/collection-list.ts +122 -0
- package/src/render/blocks/cta.ts +48 -0
- package/src/render/blocks/embed.ts +115 -0
- package/src/render/blocks/faq.ts +61 -0
- package/src/render/blocks/feature-grid.ts +73 -0
- package/src/render/blocks/gallery.ts +48 -0
- package/src/render/blocks/hero.ts +60 -0
- package/src/render/blocks/logo-strip.ts +36 -0
- package/src/render/blocks/logos.ts +60 -0
- package/src/render/blocks/media-figure.ts +43 -0
- package/src/render/blocks/pricing-table.ts +77 -0
- package/src/render/blocks/prose.ts +11 -0
- package/src/render/blocks/quote.ts +48 -0
- package/src/render/blocks/stat-counter.ts +45 -0
- package/src/render/blocks/stats.ts +50 -0
- package/src/render/blocks/testimonial.ts +41 -0
- package/src/render/chrome.ts +128 -0
- package/src/render/render-block.ts +144 -0
- package/src/render/term-archive.ts +80 -0
- package/src/styles/archive.css +68 -0
- package/src/styles/base.css +895 -0
- package/src/styles/blocks.css +1433 -0
- package/src/styles/theme.css +36 -0
- package/src/styles/tokens.css +326 -0
- package/tokens.json +36 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* `@cogenta/theme-entreprise`'s stylesheet — the entry point, and nothing
|
|
3
|
+
* else.
|
|
4
|
+
*
|
|
5
|
+
* Three 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
|
+
*
|
|
12
|
+
* Not one colour, font, radius, duration or shadow is written literally in
|
|
13
|
+
* any of the three: every value comes from a `--cogenta-<group>-<name>`
|
|
14
|
+
* property produced from the skin's tokens, or from a `--cg-*` property
|
|
15
|
+
* composed from those. A single hard-coded hex would be a colour no skin
|
|
16
|
+
* can change.
|
|
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
|
+
* three into one sheet, so no visitor ever pays for three 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 (Archivo for the sans, Source Serif
|
|
24
|
+
* 4 for the serif accents in `quote`, `prose`'s blockquotes and the
|
|
25
|
+
* numbered indices in `featureGrid`/`faq`) — loaded here, once, rather than
|
|
26
|
+
* per skin, since a skin only ever *names* a font family; it does not fetch
|
|
27
|
+
* one. Both fall back to a real system stack (`tokens.json`'s `font.sans`/
|
|
28
|
+
* `font.serif`) if Google Fonts is unreachable.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
@import url("https://fonts.googleapis.com/css2?family=Archivo:ital,wght@0,400;0,500;0,600;0,700;0,800;1,400&family=Source+Serif+4:ital,opsz,wght@0,8..60,400;0,8..60,500;1,8..60,400&display=swap");
|
|
32
|
+
|
|
33
|
+
@import "./tokens.css";
|
|
34
|
+
@import "./base.css";
|
|
35
|
+
@import "./blocks.css";
|
|
36
|
+
@import "./archive.css";
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* `@cogenta/theme-entreprise`'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 light-mode-forward palette built
|
|
21
|
+
* around one confident accent — a deep forest green rather than the more
|
|
22
|
+
* expected "corporate blue" — on a warm near-white ground. This file's own
|
|
23
|
+
* decisions are what turn that into a full system: the light mode is
|
|
24
|
+
* "structured and edged" (hairline borders carry most of the depth, shadow
|
|
25
|
+
* reserved for genuine hover elevation), and the dark mode is designed on
|
|
26
|
+
* its own terms rather than mechanically inverted — see the colour section
|
|
27
|
+
* below for the five choices that make it so.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
:where(:root) {
|
|
31
|
+
color-scheme: light dark;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
:where(:root[data-theme="dark"]) {
|
|
35
|
+
color-scheme: dark;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
:where(:root[data-theme="light"]) {
|
|
39
|
+
color-scheme: light;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* --------------------------------------------------------------------------
|
|
43
|
+
Space — a slightly more generous scale than the type steps alone would
|
|
44
|
+
suggest: the aesthetic direction asks for "real breathing room", which
|
|
45
|
+
this theme spends mostly in its section rhythm (`--cg-section-y`) and
|
|
46
|
+
its row/card padding, not in a larger base unit.
|
|
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-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: 44ch;
|
|
74
|
+
--cg-page: 78rem;
|
|
75
|
+
--cg-page-narrow: 50rem;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
:where([data-density="compact"]) {
|
|
79
|
+
--cg-density: 0.75;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
:where([data-density="comfortable"]) {
|
|
83
|
+
--cg-density: 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 rhythm the scale does not carry.
|
|
92
|
+
-------------------------------------------------------------------------- */
|
|
93
|
+
|
|
94
|
+
:where(:root) {
|
|
95
|
+
--cg-text-xs: var(--cogenta-font-size-xs, 0.69rem);
|
|
96
|
+
--cg-text-sm: var(--cogenta-font-size-sm, 0.83rem);
|
|
97
|
+
--cg-text-md: var(--cogenta-font-size-md, var(--cogenta-font-base-size, 1rem));
|
|
98
|
+
--cg-text-lg: var(--cogenta-font-size-lg, 1.2rem);
|
|
99
|
+
--cg-text-xl: var(--cogenta-font-size-xl, 1.44rem);
|
|
100
|
+
--cg-text-2xl: var(--cogenta-font-size-2xl, 1.728rem);
|
|
101
|
+
--cg-text-3xl: var(--cogenta-font-size-3xl, 2.0736rem);
|
|
102
|
+
|
|
103
|
+
--cg-leading-tight: 1.08;
|
|
104
|
+
--cg-leading-snug: 1.24;
|
|
105
|
+
--cg-leading-normal: 1.55;
|
|
106
|
+
--cg-leading-relaxed: 1.72;
|
|
107
|
+
|
|
108
|
+
/* A confident display face wants tighter tracking at large sizes, and a
|
|
109
|
+
label set in small caps wants the opposite — both scale with the font
|
|
110
|
+
size because they are written in `em`. */
|
|
111
|
+
--cg-tracking-tight: -0.018em;
|
|
112
|
+
--cg-tracking-snug: -0.008em;
|
|
113
|
+
--cg-tracking-normal: 0em;
|
|
114
|
+
--cg-tracking-wide: 0.1em;
|
|
115
|
+
|
|
116
|
+
--cg-weight-regular: 400;
|
|
117
|
+
--cg-weight-medium: 500;
|
|
118
|
+
--cg-weight-semibold: 600;
|
|
119
|
+
--cg-weight-bold: 700;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* --------------------------------------------------------------------------
|
|
123
|
+
Radius — deliberately sharper than a typical marketing template: a
|
|
124
|
+
consultancy or a software vendor reads as more serious with edges that
|
|
125
|
+
are structured rather than soft. `--cg-radius-pill` is the one rounded
|
|
126
|
+
shape this theme uses freely (the eyebrow tag, small badges) precisely
|
|
127
|
+
because everything else stays close to square.
|
|
128
|
+
-------------------------------------------------------------------------- */
|
|
129
|
+
|
|
130
|
+
:where(:root) {
|
|
131
|
+
--cg-radius-xs: calc(var(--cogenta-radius-sm) / 2);
|
|
132
|
+
--cg-radius-sm: var(--cogenta-radius-sm);
|
|
133
|
+
--cg-radius-md: var(--cogenta-radius-md);
|
|
134
|
+
--cg-radius-lg: var(--cogenta-radius-lg);
|
|
135
|
+
--cg-radius-xl: calc(var(--cogenta-radius-lg) * 1.5);
|
|
136
|
+
--cg-radius-pill: 999rem;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/* --------------------------------------------------------------------------
|
|
140
|
+
Motion
|
|
141
|
+
-------------------------------------------------------------------------- */
|
|
142
|
+
|
|
143
|
+
:where(:root) {
|
|
144
|
+
--cg-duration-fast: calc(var(--cogenta-motion-duration) * 0.65);
|
|
145
|
+
--cg-duration: var(--cogenta-motion-duration);
|
|
146
|
+
--cg-duration-slow: calc(var(--cogenta-motion-duration) * 3);
|
|
147
|
+
--cg-ease: var(--cogenta-motion-easing);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/* --------------------------------------------------------------------------
|
|
151
|
+
Colour — one palette per scheme, both derived from the same seven tokens.
|
|
152
|
+
--------------------------------------------------------------------------
|
|
153
|
+
|
|
154
|
+
The block below declares the **light** palette in plain terms; the
|
|
155
|
+
scheme-aware values live in the `@supports` block after it, guarded the
|
|
156
|
+
same way for the same reason `theme-canonical` guards it: a browser that
|
|
157
|
+
cannot parse `light-dark()` must still get a usable light palette rather
|
|
158
|
+
than an `unset` custom property.
|
|
159
|
+
|
|
160
|
+
**This dark palette is designed on its own terms, not inverted — five
|
|
161
|
+
decisions, each the opposite of what a mechanical `bg`/`fg` swap would
|
|
162
|
+
produce:**
|
|
163
|
+
|
|
164
|
+
1. *Elevation is a hairline, almost everywhere.* Light mode expresses a
|
|
165
|
+
raised surface mostly as a **border**, reserving `box-shadow` for
|
|
166
|
+
genuine hover lift (a card, a service row). Dark mode keeps that same
|
|
167
|
+
restraint: elevation is a ring that steps *up* in lightness, never a
|
|
168
|
+
shadow — a shadow on ink conveys nothing.
|
|
169
|
+
2. *The accent is lifted less than a mechanical swap would allow, and
|
|
170
|
+
**desaturated** rather than just brightened.* A forest green pushed to
|
|
171
|
+
the same lightness a mechanical fix would pick reads as neon; this
|
|
172
|
+
palette lifts it to L 0.68 and pulls a third of its chroma back, which
|
|
173
|
+
is what makes it still read as "the same considered green" instead of
|
|
174
|
+
a highlighter.
|
|
175
|
+
3. *The accent's foreground flips to ink.* Light text on a lifted accent
|
|
176
|
+
fails contrast, so `accent-fg` is derived dark from the accent's own
|
|
177
|
+
hue rather than kept as the skin's white.
|
|
178
|
+
4. *Text is never pure light and never fully desaturated.* Ink carries a
|
|
179
|
+
trace of the accent's hue at low chroma — an off-white that still
|
|
180
|
+
belongs to this palette rather than a generic dark-mode grey.
|
|
181
|
+
5. *A border lightens rather than darkens against its surface* — a
|
|
182
|
+
darker line on dark ink is invisible.
|
|
183
|
+
|
|
184
|
+
The hue and chroma of every dark value come from a skin token, so a skin
|
|
185
|
+
with a different accent gets a dark palette tuned the same way without
|
|
186
|
+
touching this file. Every ratio these values produce is computed for
|
|
187
|
+
real, from this file, by `test/design-system.test.ts`, in both schemes.
|
|
188
|
+
|
|
189
|
+
Known limit, same one `theme-canonical` records: the derivation assumes a
|
|
190
|
+
light-first skin (`bg` lighter than `fg`) — what contract D's default and
|
|
191
|
+
every blueprint use. A skin that starts dark would need a second colour
|
|
192
|
+
group in the contract, a `theme@2.0` change no single theme can make on
|
|
193
|
+
its own.
|
|
194
|
+
-------------------------------------------------------------------------- */
|
|
195
|
+
|
|
196
|
+
:where(:root) {
|
|
197
|
+
--cg-canvas: var(--cogenta-color-bg);
|
|
198
|
+
--cg-surface: var(--cogenta-color-bg);
|
|
199
|
+
--cg-surface-raised: var(--cogenta-color-bg);
|
|
200
|
+
--cg-surface-sunken: var(--cogenta-color-muted);
|
|
201
|
+
--cg-surface-tinted: color-mix(in oklab, var(--cogenta-color-accent) 7%, var(--cogenta-color-bg));
|
|
202
|
+
|
|
203
|
+
--cg-ink: var(--cogenta-color-fg);
|
|
204
|
+
--cg-ink-muted: var(--cogenta-color-muted-fg);
|
|
205
|
+
--cg-ink-subtle: color-mix(in oklab, var(--cogenta-color-muted-fg) 85%, var(--cogenta-color-bg));
|
|
206
|
+
|
|
207
|
+
--cg-accent: var(--cogenta-color-accent);
|
|
208
|
+
--cg-accent-fg: var(--cogenta-color-accent-fg);
|
|
209
|
+
--cg-accent-hover: color-mix(in oklab, var(--cogenta-color-accent) 84%, var(--cogenta-color-fg));
|
|
210
|
+
--cg-accent-soft: color-mix(in oklab, var(--cogenta-color-accent) 9%, var(--cogenta-color-bg));
|
|
211
|
+
--cg-accent-soft-fg: color-mix(
|
|
212
|
+
in oklab,
|
|
213
|
+
var(--cogenta-color-accent) 70%,
|
|
214
|
+
var(--cogenta-color-fg)
|
|
215
|
+
);
|
|
216
|
+
|
|
217
|
+
--cg-line: var(--cogenta-color-border);
|
|
218
|
+
--cg-line-soft: color-mix(in oklab, var(--cogenta-color-border) 50%, var(--cogenta-color-bg));
|
|
219
|
+
--cg-line-strong: color-mix(in oklab, var(--cogenta-color-border) 60%, var(--cogenta-color-fg));
|
|
220
|
+
|
|
221
|
+
--cg-scrim: color-mix(in oklab, var(--cogenta-color-fg) 58%, transparent);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
@supports (color: light-dark(currentColor, currentColor)) and
|
|
225
|
+
(color: oklch(from currentColor l c h)) {
|
|
226
|
+
:where(:root) {
|
|
227
|
+
--cg-canvas: light-dark(
|
|
228
|
+
var(--cogenta-color-bg),
|
|
229
|
+
oklch(from var(--cogenta-color-fg) 0.155 calc(c * 0.65) h)
|
|
230
|
+
);
|
|
231
|
+
--cg-surface: light-dark(
|
|
232
|
+
var(--cogenta-color-bg),
|
|
233
|
+
oklch(from var(--cogenta-color-fg) 0.155 calc(c * 0.65) h)
|
|
234
|
+
);
|
|
235
|
+
--cg-surface-raised: light-dark(
|
|
236
|
+
var(--cogenta-color-bg),
|
|
237
|
+
oklch(from var(--cogenta-color-fg) 0.225 calc(c * 0.6) h)
|
|
238
|
+
);
|
|
239
|
+
--cg-surface-sunken: light-dark(
|
|
240
|
+
var(--cogenta-color-muted),
|
|
241
|
+
oklch(from var(--cogenta-color-fg) 0.115 calc(c * 0.75) h)
|
|
242
|
+
);
|
|
243
|
+
--cg-surface-tinted: light-dark(
|
|
244
|
+
color-mix(in oklab, var(--cogenta-color-accent) 7%, var(--cogenta-color-bg)),
|
|
245
|
+
oklch(from var(--cogenta-color-accent) 0.235 calc(c * 0.55) h)
|
|
246
|
+
);
|
|
247
|
+
|
|
248
|
+
--cg-ink: light-dark(
|
|
249
|
+
var(--cogenta-color-fg),
|
|
250
|
+
oklch(from var(--cogenta-color-accent) 0.93 0.01 h)
|
|
251
|
+
);
|
|
252
|
+
--cg-ink-muted: light-dark(
|
|
253
|
+
var(--cogenta-color-muted-fg),
|
|
254
|
+
oklch(from var(--cogenta-color-accent) 0.76 0.016 h)
|
|
255
|
+
);
|
|
256
|
+
--cg-ink-subtle: light-dark(
|
|
257
|
+
color-mix(in oklab, var(--cogenta-color-muted-fg) 85%, var(--cogenta-color-bg)),
|
|
258
|
+
oklch(from var(--cogenta-color-accent) 0.63 0.014 h)
|
|
259
|
+
);
|
|
260
|
+
|
|
261
|
+
--cg-accent: light-dark(
|
|
262
|
+
var(--cogenta-color-accent),
|
|
263
|
+
oklch(from var(--cogenta-color-accent) 0.68 calc(c * 0.72) h)
|
|
264
|
+
);
|
|
265
|
+
--cg-accent-fg: light-dark(
|
|
266
|
+
var(--cogenta-color-accent-fg),
|
|
267
|
+
oklch(from var(--cogenta-color-accent) 0.16 calc(c * 0.5) h)
|
|
268
|
+
);
|
|
269
|
+
--cg-accent-hover: light-dark(
|
|
270
|
+
color-mix(in oklab, var(--cogenta-color-accent) 84%, var(--cogenta-color-fg)),
|
|
271
|
+
oklch(from var(--cogenta-color-accent) 0.77 calc(c * 0.68) h)
|
|
272
|
+
);
|
|
273
|
+
--cg-accent-soft: light-dark(
|
|
274
|
+
color-mix(in oklab, var(--cogenta-color-accent) 9%, var(--cogenta-color-bg)),
|
|
275
|
+
oklch(from var(--cogenta-color-accent) 0.28 calc(c * 0.45) h)
|
|
276
|
+
);
|
|
277
|
+
--cg-accent-soft-fg: light-dark(
|
|
278
|
+
color-mix(in oklab, var(--cogenta-color-accent) 70%, var(--cogenta-color-fg)),
|
|
279
|
+
oklch(from var(--cogenta-color-accent) 0.87 calc(c * 0.4) h)
|
|
280
|
+
);
|
|
281
|
+
|
|
282
|
+
--cg-line: light-dark(
|
|
283
|
+
var(--cogenta-color-border),
|
|
284
|
+
oklch(from var(--cogenta-color-accent) 0.34 calc(c * 0.2) h)
|
|
285
|
+
);
|
|
286
|
+
--cg-line-soft: light-dark(
|
|
287
|
+
color-mix(in oklab, var(--cogenta-color-border) 50%, var(--cogenta-color-bg)),
|
|
288
|
+
oklch(from var(--cogenta-color-accent) 0.27 calc(c * 0.18) h)
|
|
289
|
+
);
|
|
290
|
+
--cg-line-strong: light-dark(
|
|
291
|
+
color-mix(in oklab, var(--cogenta-color-border) 60%, var(--cogenta-color-fg)),
|
|
292
|
+
oklch(from var(--cogenta-color-accent) 0.55 calc(c * 0.22) h)
|
|
293
|
+
);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/* --------------------------------------------------------------------------
|
|
298
|
+
Elevation — a hairline ring by default in both schemes; a real shadow is
|
|
299
|
+
spent only on hover, never on a resting surface. This is the theme's own
|
|
300
|
+
"structured, edged" answer to elevation, distinct from a shadow-first
|
|
301
|
+
system: a resting card looks like a plate on a desk, not a sticker
|
|
302
|
+
floating above the page.
|
|
303
|
+
-------------------------------------------------------------------------- */
|
|
304
|
+
|
|
305
|
+
:where(:root) {
|
|
306
|
+
--cg-ring: inset 0 0 0 1px var(--cg-line);
|
|
307
|
+
--cg-ring-accent: inset 0 0 0 1px var(--cg-accent);
|
|
308
|
+
--cg-ring-strong: inset 0 0 0 1px var(--cg-line-strong);
|
|
309
|
+
|
|
310
|
+
--cg-elevation-0: none;
|
|
311
|
+
--cg-elevation-1: var(--cg-ring);
|
|
312
|
+
--cg-elevation-2: var(--cogenta-shadow-sm), var(--cg-ring);
|
|
313
|
+
--cg-elevation-3: var(--cogenta-shadow-md), var(--cg-ring);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
@media (prefers-color-scheme: dark) {
|
|
317
|
+
:where(:root:not([data-theme="light"])) {
|
|
318
|
+
--cg-elevation-2: var(--cg-ring-strong);
|
|
319
|
+
--cg-elevation-3: var(--cg-ring-strong), var(--cogenta-shadow-md);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
:where(:root[data-theme="dark"]) {
|
|
324
|
+
--cg-elevation-2: var(--cg-ring-strong);
|
|
325
|
+
--cg-elevation-3: var(--cg-ring-strong), var(--cogenta-shadow-md);
|
|
326
|
+
}
|
package/tokens.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"color": {
|
|
3
|
+
"bg": "#fbfaf7",
|
|
4
|
+
"fg": "#14201a",
|
|
5
|
+
"accent": "#1f5f45",
|
|
6
|
+
"accentFg": "#ffffff",
|
|
7
|
+
"muted": "#eef1ec",
|
|
8
|
+
"mutedFg": "#42493f",
|
|
9
|
+
"border": "#d7ddd2"
|
|
10
|
+
},
|
|
11
|
+
"font": {
|
|
12
|
+
"sans": "'Archivo', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",
|
|
13
|
+
"serif": "'Source Serif 4', ui-serif, Georgia, Cambria, 'Times New Roman', serif",
|
|
14
|
+
"mono": "ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace",
|
|
15
|
+
"scale": 1.2,
|
|
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.5rem"
|
|
26
|
+
},
|
|
27
|
+
"motion": {
|
|
28
|
+
"duration": "160ms",
|
|
29
|
+
"easing": "cubic-bezier(0.16, 1, 0.3, 1)",
|
|
30
|
+
"reduced": true
|
|
31
|
+
},
|
|
32
|
+
"shadow": {
|
|
33
|
+
"sm": "0 1px 2px rgba(20, 32, 26, 0.06)",
|
|
34
|
+
"md": "0 12px 32px rgba(20, 32, 26, 0.14)"
|
|
35
|
+
}
|
|
36
|
+
}
|