@cogenta/theme-docs 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 +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 +15 -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 +77 -0
- package/dist/src/render/blocks/collection-list.js.map +1 -0
- package/dist/src/render/blocks/cta.d.ts +4 -0
- package/dist/src/render/blocks/cta.d.ts.map +1 -0
- package/dist/src/render/blocks/cta.js +7 -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 +71 -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 +15 -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 +10 -0
- package/dist/src/render/blocks/gallery.d.ts.map +1 -0
- package/dist/src/render/blocks/gallery.js +19 -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 +28 -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 +22 -0
- package/dist/src/render/blocks/logos.js.map +1 -0
- package/dist/src/render/blocks/media-figure.d.ts +10 -0
- package/dist/src/render/blocks/media-figure.d.ts.map +1 -0
- package/dist/src/render/blocks/media-figure.js +25 -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 +28 -0
- package/dist/src/render/blocks/pricing-table.js.map +1 -0
- package/dist/src/render/blocks/prose.d.ts +4 -0
- package/dist/src/render/blocks/prose.d.ts.map +1 -0
- package/dist/src/render/blocks/prose.js +36 -0
- package/dist/src/render/blocks/prose.js.map +1 -0
- package/dist/src/render/blocks/quote.d.ts +9 -0
- package/dist/src/render/blocks/quote.d.ts.map +1 -0
- package/dist/src/render/blocks/quote.js +22 -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 +11 -0
- package/dist/src/render/blocks/stats.js.map +1 -0
- package/dist/src/render/blocks/testimonial.d.ts +11 -0
- package/dist/src/render/blocks/testimonial.d.ts.map +1 -0
- package/dist/src/render/blocks/testimonial.js +20 -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 +94 -0
- package/dist/src/render/chrome.js.map +1 -0
- package/dist/src/render/render-block.d.ts +15 -0
- package/dist/src/render/render-block.d.ts.map +1 -0
- package/dist/src/render/render-block.js +176 -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 +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 +20 -0
- package/src/render/blocks/accordion.ts +51 -0
- package/src/render/blocks/collection-list.ts +170 -0
- package/src/render/blocks/cta.ts +25 -0
- package/src/render/blocks/embed.ts +94 -0
- package/src/render/blocks/faq.ts +46 -0
- package/src/render/blocks/feature-grid.ts +67 -0
- package/src/render/blocks/gallery.ts +39 -0
- package/src/render/blocks/hero.ts +61 -0
- package/src/render/blocks/logo-strip.ts +31 -0
- package/src/render/blocks/logos.ts +52 -0
- package/src/render/blocks/media-figure.ts +36 -0
- package/src/render/blocks/pricing-table.ts +72 -0
- package/src/render/blocks/prose.ts +49 -0
- package/src/render/blocks/quote.ts +35 -0
- package/src/render/blocks/stat-counter.ts +37 -0
- package/src/render/blocks/stats.ts +38 -0
- package/src/render/blocks/testimonial.ts +36 -0
- package/src/render/chrome.ts +124 -0
- package/src/render/render-block.ts +305 -0
- package/src/render/term-archive.ts +78 -0
- package/src/styles/archive.css +39 -0
- package/src/styles/base.css +1106 -0
- package/src/styles/blocks.css +1238 -0
- package/src/styles/theme.css +34 -0
- package/src/styles/tokens.css +307 -0
- package/tokens.json +36 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* `@cogenta/theme-docs`'s stylesheet — the entry point, and nothing else.
|
|
3
|
+
*
|
|
4
|
+
* Three layers, in the only order that works:
|
|
5
|
+
*
|
|
6
|
+
* tokens.css the design system, derived entirely from the skin's
|
|
7
|
+
* `--cogenta-*` custom properties (contract D)
|
|
8
|
+
* base.css document, accessibility floor, page frame, chrome (with its
|
|
9
|
+
* CSS-only mobile menu), the two-column doc-page layout
|
|
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.
|
|
16
|
+
*
|
|
17
|
+
* `@import` is resolved at build time by Astro, and by `@cogenta/cli`'s own
|
|
18
|
+
* inliner when `cogenta serve` renders without a build. Both flatten these
|
|
19
|
+
* into one sheet, so no visitor ever pays for four round trips.
|
|
20
|
+
*
|
|
21
|
+
* The one thing this file adds on its own: the Google Fonts request for the
|
|
22
|
+
* two families `tokens.json` names — IBM Plex Sans for the UI/copy face and
|
|
23
|
+
* IBM Plex Mono for code, `kbd` and the eyebrow/date labels — loaded here,
|
|
24
|
+
* once, rather than per skin, since a skin only ever *names* a font family;
|
|
25
|
+
* it does not fetch one. Both fall back to a real system stack (`tokens.json`'s
|
|
26
|
+
* `font.sans`/`font.mono`) if Google Fonts is unreachable.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
@import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400&family=IBM+Plex+Mono:wght@400;500;600&display=swap");
|
|
30
|
+
|
|
31
|
+
@import "./tokens.css";
|
|
32
|
+
@import "./base.css";
|
|
33
|
+
@import "./blocks.css";
|
|
34
|
+
@import "./archive.css";
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* `@cogenta/theme-docs`'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 neutral blue-grey ground with one
|
|
21
|
+
* confident blue accent — the Docusaurus/GitBook register the aesthetic
|
|
22
|
+
* direction asks for: dense, structured, and legible over long reference
|
|
23
|
+
* pages rather than expressive. Light mode is "structured and edged"
|
|
24
|
+
* (hairline borders carry most of the depth, shadow reserved for genuine
|
|
25
|
+
* hover elevation, exactly the language `theme-entreprise` already proved);
|
|
26
|
+
* dark mode is a real slate, designed on its own terms rather than
|
|
27
|
+
* mechanically inverted — see the colour section below for the five
|
|
28
|
+
* decisions that make it so.
|
|
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 compact scale: a docs page is read a paragraph at a time, and
|
|
45
|
+
the aesthetic direction asks for information density over air.
|
|
46
|
+
-------------------------------------------------------------------------- */
|
|
47
|
+
|
|
48
|
+
:where(:root) {
|
|
49
|
+
--cg-density: var(--cogenta-space-scale, 1);
|
|
50
|
+
--cg-unit: calc(var(--cogenta-space-unit) * var(--cg-density));
|
|
51
|
+
|
|
52
|
+
--cg-s1: calc(var(--cg-unit) * 1);
|
|
53
|
+
--cg-s2: calc(var(--cg-unit) * 2);
|
|
54
|
+
--cg-s3: calc(var(--cg-unit) * 3);
|
|
55
|
+
--cg-s4: calc(var(--cg-unit) * 4);
|
|
56
|
+
--cg-s5: calc(var(--cg-unit) * 5);
|
|
57
|
+
--cg-s6: calc(var(--cg-unit) * 6);
|
|
58
|
+
--cg-s8: calc(var(--cg-unit) * 8);
|
|
59
|
+
--cg-s10: calc(var(--cg-unit) * 10);
|
|
60
|
+
--cg-s12: calc(var(--cg-unit) * 12);
|
|
61
|
+
--cg-s16: calc(var(--cg-unit) * 16);
|
|
62
|
+
--cg-s20: calc(var(--cg-unit) * 20);
|
|
63
|
+
--cg-s28: calc(var(--cg-unit) * 28);
|
|
64
|
+
|
|
65
|
+
--cg-gutter: var(--cg-s6);
|
|
66
|
+
--cg-gap-tight: var(--cg-s2);
|
|
67
|
+
--cg-gap: var(--cg-s5);
|
|
68
|
+
--cg-gap-loose: var(--cg-s10);
|
|
69
|
+
--cg-section-y: var(--cg-s16);
|
|
70
|
+
|
|
71
|
+
--cg-measure: 72ch;
|
|
72
|
+
--cg-measure-narrow: 44ch;
|
|
73
|
+
--cg-page: 78rem;
|
|
74
|
+
--cg-page-narrow: 50rem;
|
|
75
|
+
--cg-sidebar-width: 17rem;
|
|
76
|
+
--cg-header-height: 3.75rem;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
:where([data-density="compact"]) {
|
|
80
|
+
--cg-density: 0.85;
|
|
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; plus the rhythm the scale does not carry.
|
|
93
|
+
-------------------------------------------------------------------------- */
|
|
94
|
+
|
|
95
|
+
:where(:root) {
|
|
96
|
+
--cg-text-xs: var(--cogenta-font-size-xs, 0.72rem);
|
|
97
|
+
--cg-text-sm: var(--cogenta-font-size-sm, 0.85rem);
|
|
98
|
+
--cg-text-md: var(--cogenta-font-size-md, var(--cogenta-font-base-size, 1rem));
|
|
99
|
+
--cg-text-lg: var(--cogenta-font-size-lg, 1.15rem);
|
|
100
|
+
--cg-text-xl: var(--cogenta-font-size-xl, 1.32rem);
|
|
101
|
+
--cg-text-2xl: var(--cogenta-font-size-2xl, 1.52rem);
|
|
102
|
+
--cg-text-3xl: var(--cogenta-font-size-3xl, 1.75rem);
|
|
103
|
+
|
|
104
|
+
--cg-leading-tight: 1.15;
|
|
105
|
+
--cg-leading-snug: 1.3;
|
|
106
|
+
--cg-leading-normal: 1.6;
|
|
107
|
+
--cg-leading-relaxed: 1.75;
|
|
108
|
+
|
|
109
|
+
--cg-tracking-tight: -0.012em;
|
|
110
|
+
--cg-tracking-snug: -0.006em;
|
|
111
|
+
--cg-tracking-normal: 0em;
|
|
112
|
+
--cg-tracking-wide: 0.08em;
|
|
113
|
+
|
|
114
|
+
--cg-weight-regular: 400;
|
|
115
|
+
--cg-weight-medium: 500;
|
|
116
|
+
--cg-weight-semibold: 600;
|
|
117
|
+
--cg-weight-bold: 700;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/* --------------------------------------------------------------------------
|
|
121
|
+
Radius — restrained, closer to square than round: a reference site reads
|
|
122
|
+
as a tool, not a marketing page.
|
|
123
|
+
-------------------------------------------------------------------------- */
|
|
124
|
+
|
|
125
|
+
:where(:root) {
|
|
126
|
+
--cg-radius-xs: calc(var(--cogenta-radius-sm) / 2);
|
|
127
|
+
--cg-radius-sm: var(--cogenta-radius-sm);
|
|
128
|
+
--cg-radius-md: var(--cogenta-radius-md);
|
|
129
|
+
--cg-radius-lg: var(--cogenta-radius-lg);
|
|
130
|
+
--cg-radius-xl: calc(var(--cogenta-radius-lg) * 1.4);
|
|
131
|
+
--cg-radius-pill: 999rem;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/* --------------------------------------------------------------------------
|
|
135
|
+
Motion
|
|
136
|
+
-------------------------------------------------------------------------- */
|
|
137
|
+
|
|
138
|
+
:where(:root) {
|
|
139
|
+
--cg-duration-fast: calc(var(--cogenta-motion-duration) * 0.65);
|
|
140
|
+
--cg-duration: var(--cogenta-motion-duration);
|
|
141
|
+
--cg-duration-slow: calc(var(--cogenta-motion-duration) * 3);
|
|
142
|
+
--cg-ease: var(--cogenta-motion-easing);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* --------------------------------------------------------------------------
|
|
146
|
+
Colour — one palette per scheme, both derived from the same seven tokens.
|
|
147
|
+
--------------------------------------------------------------------------
|
|
148
|
+
|
|
149
|
+
The block below declares the **light** palette in plain terms; the
|
|
150
|
+
scheme-aware values live in the `@supports` block after it, guarded the
|
|
151
|
+
same way `theme-canonical`/`theme-entreprise` guard it: a browser that
|
|
152
|
+
cannot parse `light-dark()` must still get a usable light palette rather
|
|
153
|
+
than an `unset` custom property.
|
|
154
|
+
|
|
155
|
+
**This dark palette is designed on its own terms, not inverted — five
|
|
156
|
+
decisions, each the opposite of what a mechanical `bg`/`fg` swap would
|
|
157
|
+
produce (the same five `theme-entreprise` already proved, re-derived here
|
|
158
|
+
from a blue accent instead of a green one):**
|
|
159
|
+
|
|
160
|
+
1. *Elevation is a hairline, almost everywhere.* A raised surface is a
|
|
161
|
+
**border**, shadow reserved for genuine hover lift — a code block or a
|
|
162
|
+
sidebar panel looks like a plate on a desk, never a sticker.
|
|
163
|
+
2. *The accent is lifted less than a mechanical swap would allow, and
|
|
164
|
+
**desaturated** rather than just brightened* — a saturated blue pushed
|
|
165
|
+
to the same lightness a mechanical fix would pick reads as neon on
|
|
166
|
+
slate; this palette lifts it and pulls a third of its chroma back.
|
|
167
|
+
3. *The accent's foreground flips to ink* — light text on a lifted accent
|
|
168
|
+
fails contrast, so `accent-fg` is derived dark from the accent's own
|
|
169
|
+
hue rather than kept as the skin's white.
|
|
170
|
+
4. *Text is never pure light and never fully desaturated* — ink carries a
|
|
171
|
+
trace of the accent's hue at low chroma, a blue-tinted slate rather
|
|
172
|
+
than a generic dark-mode grey.
|
|
173
|
+
5. *A border lightens rather than darkens against its surface* — a darker
|
|
174
|
+
line on dark ink is invisible.
|
|
175
|
+
|
|
176
|
+
Known limit, same one `theme-canonical`/`theme-entreprise` record: the
|
|
177
|
+
derivation assumes a light-first skin (`bg` lighter than `fg`).
|
|
178
|
+
-------------------------------------------------------------------------- */
|
|
179
|
+
|
|
180
|
+
:where(:root) {
|
|
181
|
+
--cg-canvas: var(--cogenta-color-bg);
|
|
182
|
+
--cg-surface: var(--cogenta-color-bg);
|
|
183
|
+
--cg-surface-raised: var(--cogenta-color-bg);
|
|
184
|
+
--cg-surface-sunken: var(--cogenta-color-muted);
|
|
185
|
+
--cg-surface-tinted: color-mix(in oklab, var(--cogenta-color-accent) 7%, var(--cogenta-color-bg));
|
|
186
|
+
|
|
187
|
+
--cg-ink: var(--cogenta-color-fg);
|
|
188
|
+
--cg-ink-muted: var(--cogenta-color-muted-fg);
|
|
189
|
+
--cg-ink-subtle: color-mix(in oklab, var(--cogenta-color-muted-fg) 85%, var(--cogenta-color-bg));
|
|
190
|
+
|
|
191
|
+
--cg-accent: var(--cogenta-color-accent);
|
|
192
|
+
--cg-accent-fg: var(--cogenta-color-accent-fg);
|
|
193
|
+
--cg-accent-hover: color-mix(in oklab, var(--cogenta-color-accent) 84%, var(--cogenta-color-fg));
|
|
194
|
+
--cg-accent-soft: color-mix(in oklab, var(--cogenta-color-accent) 9%, var(--cogenta-color-bg));
|
|
195
|
+
--cg-accent-soft-fg: color-mix(
|
|
196
|
+
in oklab,
|
|
197
|
+
var(--cogenta-color-accent) 70%,
|
|
198
|
+
var(--cogenta-color-fg)
|
|
199
|
+
);
|
|
200
|
+
|
|
201
|
+
--cg-line: var(--cogenta-color-border);
|
|
202
|
+
--cg-line-soft: color-mix(in oklab, var(--cogenta-color-border) 50%, var(--cogenta-color-bg));
|
|
203
|
+
--cg-line-strong: color-mix(in oklab, var(--cogenta-color-border) 60%, var(--cogenta-color-fg));
|
|
204
|
+
|
|
205
|
+
--cg-scrim: color-mix(in oklab, var(--cogenta-color-fg) 58%, transparent);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
@supports (color: light-dark(currentColor, currentColor)) and
|
|
209
|
+
(color: oklch(from currentColor l c h)) {
|
|
210
|
+
:where(:root) {
|
|
211
|
+
--cg-canvas: light-dark(
|
|
212
|
+
var(--cogenta-color-bg),
|
|
213
|
+
oklch(from var(--cogenta-color-fg) 0.155 calc(c * 0.65) h)
|
|
214
|
+
);
|
|
215
|
+
--cg-surface: light-dark(
|
|
216
|
+
var(--cogenta-color-bg),
|
|
217
|
+
oklch(from var(--cogenta-color-fg) 0.155 calc(c * 0.65) h)
|
|
218
|
+
);
|
|
219
|
+
--cg-surface-raised: light-dark(
|
|
220
|
+
var(--cogenta-color-bg),
|
|
221
|
+
oklch(from var(--cogenta-color-fg) 0.225 calc(c * 0.6) h)
|
|
222
|
+
);
|
|
223
|
+
--cg-surface-sunken: light-dark(
|
|
224
|
+
var(--cogenta-color-muted),
|
|
225
|
+
oklch(from var(--cogenta-color-fg) 0.115 calc(c * 0.75) h)
|
|
226
|
+
);
|
|
227
|
+
--cg-surface-tinted: light-dark(
|
|
228
|
+
color-mix(in oklab, var(--cogenta-color-accent) 7%, var(--cogenta-color-bg)),
|
|
229
|
+
oklch(from var(--cogenta-color-accent) 0.235 calc(c * 0.55) h)
|
|
230
|
+
);
|
|
231
|
+
|
|
232
|
+
--cg-ink: light-dark(
|
|
233
|
+
var(--cogenta-color-fg),
|
|
234
|
+
oklch(from var(--cogenta-color-accent) 0.93 0.01 h)
|
|
235
|
+
);
|
|
236
|
+
--cg-ink-muted: light-dark(
|
|
237
|
+
var(--cogenta-color-muted-fg),
|
|
238
|
+
oklch(from var(--cogenta-color-accent) 0.76 0.016 h)
|
|
239
|
+
);
|
|
240
|
+
--cg-ink-subtle: light-dark(
|
|
241
|
+
color-mix(in oklab, var(--cogenta-color-muted-fg) 85%, var(--cogenta-color-bg)),
|
|
242
|
+
oklch(from var(--cogenta-color-accent) 0.63 0.014 h)
|
|
243
|
+
);
|
|
244
|
+
|
|
245
|
+
--cg-accent: light-dark(
|
|
246
|
+
var(--cogenta-color-accent),
|
|
247
|
+
oklch(from var(--cogenta-color-accent) 0.68 calc(c * 0.72) h)
|
|
248
|
+
);
|
|
249
|
+
--cg-accent-fg: light-dark(
|
|
250
|
+
var(--cogenta-color-accent-fg),
|
|
251
|
+
oklch(from var(--cogenta-color-accent) 0.16 calc(c * 0.5) h)
|
|
252
|
+
);
|
|
253
|
+
--cg-accent-hover: light-dark(
|
|
254
|
+
color-mix(in oklab, var(--cogenta-color-accent) 84%, var(--cogenta-color-fg)),
|
|
255
|
+
oklch(from var(--cogenta-color-accent) 0.77 calc(c * 0.68) h)
|
|
256
|
+
);
|
|
257
|
+
--cg-accent-soft: light-dark(
|
|
258
|
+
color-mix(in oklab, var(--cogenta-color-accent) 9%, var(--cogenta-color-bg)),
|
|
259
|
+
oklch(from var(--cogenta-color-accent) 0.28 calc(c * 0.45) h)
|
|
260
|
+
);
|
|
261
|
+
--cg-accent-soft-fg: light-dark(
|
|
262
|
+
color-mix(in oklab, var(--cogenta-color-accent) 70%, var(--cogenta-color-fg)),
|
|
263
|
+
oklch(from var(--cogenta-color-accent) 0.87 calc(c * 0.4) h)
|
|
264
|
+
);
|
|
265
|
+
|
|
266
|
+
--cg-line: light-dark(
|
|
267
|
+
var(--cogenta-color-border),
|
|
268
|
+
oklch(from var(--cogenta-color-accent) 0.34 calc(c * 0.2) h)
|
|
269
|
+
);
|
|
270
|
+
--cg-line-soft: light-dark(
|
|
271
|
+
color-mix(in oklab, var(--cogenta-color-border) 50%, var(--cogenta-color-bg)),
|
|
272
|
+
oklch(from var(--cogenta-color-accent) 0.27 calc(c * 0.18) h)
|
|
273
|
+
);
|
|
274
|
+
--cg-line-strong: light-dark(
|
|
275
|
+
color-mix(in oklab, var(--cogenta-color-border) 60%, var(--cogenta-color-fg)),
|
|
276
|
+
oklch(from var(--cogenta-color-accent) 0.55 calc(c * 0.22) h)
|
|
277
|
+
);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/* --------------------------------------------------------------------------
|
|
282
|
+
Elevation — a hairline ring by default in both schemes; a real shadow is
|
|
283
|
+
spent only on hover.
|
|
284
|
+
-------------------------------------------------------------------------- */
|
|
285
|
+
|
|
286
|
+
:where(:root) {
|
|
287
|
+
--cg-ring: inset 0 0 0 1px var(--cg-line);
|
|
288
|
+
--cg-ring-accent: inset 0 0 0 1px var(--cg-accent);
|
|
289
|
+
--cg-ring-strong: inset 0 0 0 1px var(--cg-line-strong);
|
|
290
|
+
|
|
291
|
+
--cg-elevation-0: none;
|
|
292
|
+
--cg-elevation-1: var(--cg-ring);
|
|
293
|
+
--cg-elevation-2: var(--cogenta-shadow-sm), var(--cg-ring);
|
|
294
|
+
--cg-elevation-3: var(--cogenta-shadow-md), var(--cg-ring);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
@media (prefers-color-scheme: dark) {
|
|
298
|
+
:where(:root:not([data-theme="light"])) {
|
|
299
|
+
--cg-elevation-2: var(--cg-ring-strong);
|
|
300
|
+
--cg-elevation-3: var(--cg-ring-strong), var(--cogenta-shadow-md);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
:where(:root[data-theme="dark"]) {
|
|
305
|
+
--cg-elevation-2: var(--cg-ring-strong);
|
|
306
|
+
--cg-elevation-3: var(--cg-ring-strong), var(--cogenta-shadow-md);
|
|
307
|
+
}
|
package/tokens.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"color": {
|
|
3
|
+
"bg": "#ffffff",
|
|
4
|
+
"fg": "#0f172a",
|
|
5
|
+
"accent": "#1d4ed8",
|
|
6
|
+
"accentFg": "#ffffff",
|
|
7
|
+
"muted": "#f1f5f9",
|
|
8
|
+
"mutedFg": "#475569",
|
|
9
|
+
"border": "#e2e8f0"
|
|
10
|
+
},
|
|
11
|
+
"font": {
|
|
12
|
+
"sans": "'IBM Plex Sans', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",
|
|
13
|
+
"serif": "ui-serif, Georgia, Cambria, 'Times New Roman', serif",
|
|
14
|
+
"mono": "'IBM Plex Mono', ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace",
|
|
15
|
+
"scale": 1.15,
|
|
16
|
+
"baseSize": "1rem"
|
|
17
|
+
},
|
|
18
|
+
"space": {
|
|
19
|
+
"unit": "0.25rem",
|
|
20
|
+
"density": "compact"
|
|
21
|
+
},
|
|
22
|
+
"radius": {
|
|
23
|
+
"sm": "0.25rem",
|
|
24
|
+
"md": "0.375rem",
|
|
25
|
+
"lg": "0.625rem"
|
|
26
|
+
},
|
|
27
|
+
"motion": {
|
|
28
|
+
"duration": "150ms",
|
|
29
|
+
"easing": "cubic-bezier(0.2, 0, 0, 1)",
|
|
30
|
+
"reduced": true
|
|
31
|
+
},
|
|
32
|
+
"shadow": {
|
|
33
|
+
"sm": "0 1px 2px rgba(15, 23, 42, 0.06)",
|
|
34
|
+
"md": "0 10px 28px rgba(15, 23, 42, 0.12)"
|
|
35
|
+
}
|
|
36
|
+
}
|