@cogenta/theme-association 0.3.3 → 0.5.3
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/dist/src/index.d.ts +6 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +9 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/render/blocks/accordion.d.ts.map +1 -1
- package/dist/src/render/blocks/accordion.js +13 -10
- package/dist/src/render/blocks/accordion.js.map +1 -1
- package/dist/src/render/blocks/breakdown.d.ts +14 -0
- package/dist/src/render/blocks/breakdown.d.ts.map +1 -0
- package/dist/src/render/blocks/breakdown.js +17 -0
- package/dist/src/render/blocks/breakdown.js.map +1 -0
- package/dist/src/render/blocks/collection-list.d.ts +4 -10
- package/dist/src/render/blocks/collection-list.d.ts.map +1 -1
- package/dist/src/render/blocks/collection-list.js +89 -58
- package/dist/src/render/blocks/collection-list.js.map +1 -1
- package/dist/src/render/blocks/cta.d.ts +0 -5
- package/dist/src/render/blocks/cta.d.ts.map +1 -1
- package/dist/src/render/blocks/cta.js +22 -10
- package/dist/src/render/blocks/cta.js.map +1 -1
- package/dist/src/render/blocks/embed.d.ts.map +1 -1
- package/dist/src/render/blocks/embed.js +30 -22
- package/dist/src/render/blocks/embed.js.map +1 -1
- package/dist/src/render/blocks/faq.d.ts.map +1 -1
- package/dist/src/render/blocks/faq.js +11 -15
- package/dist/src/render/blocks/faq.js.map +1 -1
- package/dist/src/render/blocks/feature-grid.d.ts +6 -0
- package/dist/src/render/blocks/feature-grid.d.ts.map +1 -1
- package/dist/src/render/blocks/feature-grid.js +42 -20
- package/dist/src/render/blocks/feature-grid.js.map +1 -1
- package/dist/src/render/blocks/gallery.d.ts +9 -7
- package/dist/src/render/blocks/gallery.d.ts.map +1 -1
- package/dist/src/render/blocks/gallery.js +22 -16
- package/dist/src/render/blocks/gallery.js.map +1 -1
- package/dist/src/render/blocks/hero.d.ts +23 -9
- package/dist/src/render/blocks/hero.d.ts.map +1 -1
- package/dist/src/render/blocks/hero.js +40 -23
- package/dist/src/render/blocks/hero.js.map +1 -1
- package/dist/src/render/blocks/logo-strip.d.ts +6 -0
- package/dist/src/render/blocks/logo-strip.d.ts.map +1 -1
- package/dist/src/render/blocks/logo-strip.js +7 -9
- package/dist/src/render/blocks/logo-strip.js.map +1 -1
- package/dist/src/render/blocks/logos.d.ts +14 -0
- package/dist/src/render/blocks/logos.d.ts.map +1 -1
- package/dist/src/render/blocks/logos.js +30 -16
- package/dist/src/render/blocks/logos.js.map +1 -1
- package/dist/src/render/blocks/media-figure.d.ts +12 -5
- package/dist/src/render/blocks/media-figure.d.ts.map +1 -1
- package/dist/src/render/blocks/media-figure.js +32 -18
- package/dist/src/render/blocks/media-figure.js.map +1 -1
- package/dist/src/render/blocks/pricing-table.d.ts.map +1 -1
- package/dist/src/render/blocks/pricing-table.js +18 -20
- package/dist/src/render/blocks/pricing-table.js.map +1 -1
- package/dist/src/render/blocks/prose.d.ts +9 -3
- package/dist/src/render/blocks/prose.d.ts.map +1 -1
- package/dist/src/render/blocks/prose.js +11 -4
- package/dist/src/render/blocks/prose.js.map +1 -1
- package/dist/src/render/blocks/quote.d.ts +4 -7
- package/dist/src/render/blocks/quote.d.ts.map +1 -1
- package/dist/src/render/blocks/quote.js +12 -17
- package/dist/src/render/blocks/quote.js.map +1 -1
- package/dist/src/render/blocks/stat-counter.d.ts +8 -1
- package/dist/src/render/blocks/stat-counter.d.ts.map +1 -1
- package/dist/src/render/blocks/stat-counter.js +18 -10
- package/dist/src/render/blocks/stat-counter.js.map +1 -1
- package/dist/src/render/blocks/stats.d.ts +12 -1
- package/dist/src/render/blocks/stats.d.ts.map +1 -1
- package/dist/src/render/blocks/stats.js +24 -14
- package/dist/src/render/blocks/stats.js.map +1 -1
- package/dist/src/render/blocks/testimonial.d.ts +6 -5
- package/dist/src/render/blocks/testimonial.d.ts.map +1 -1
- package/dist/src/render/blocks/testimonial.js +13 -11
- package/dist/src/render/blocks/testimonial.js.map +1 -1
- package/dist/src/render/chrome.d.ts +38 -1
- package/dist/src/render/chrome.d.ts.map +1 -1
- package/dist/src/render/chrome.js +117 -91
- package/dist/src/render/chrome.js.map +1 -1
- package/dist/src/render/details.d.ts +79 -0
- package/dist/src/render/details.d.ts.map +1 -0
- package/dist/src/render/details.js +221 -0
- package/dist/src/render/details.js.map +1 -0
- package/dist/src/render/figures.d.ts +29 -0
- package/dist/src/render/figures.d.ts.map +1 -0
- package/dist/src/render/figures.js +59 -0
- package/dist/src/render/figures.js.map +1 -0
- package/dist/src/render/layout.d.ts +31 -0
- package/dist/src/render/layout.d.ts.map +1 -0
- package/dist/src/render/layout.js +46 -0
- package/dist/src/render/layout.js.map +1 -0
- package/dist/src/render/page-head.d.ts +7 -0
- package/dist/src/render/page-head.d.ts.map +1 -0
- package/dist/src/render/page-head.js +95 -0
- package/dist/src/render/page-head.js.map +1 -0
- package/dist/src/render/render-block.d.ts +8 -12
- package/dist/src/render/render-block.d.ts.map +1 -1
- package/dist/src/render/render-block.js +40 -29
- package/dist/src/render/render-block.js.map +1 -1
- package/dist/src/render/strings.d.ts +15 -0
- package/dist/src/render/strings.d.ts.map +1 -0
- package/dist/src/render/strings.js +39 -0
- package/dist/src/render/strings.js.map +1 -0
- package/dist/src/render/term-archive.d.ts.map +1 -1
- package/dist/src/render/term-archive.js +33 -25
- package/dist/src/render/term-archive.js.map +1 -1
- package/dist/src/render/widget-areas.d.ts +14 -0
- package/dist/src/render/widget-areas.d.ts.map +1 -0
- package/dist/src/render/widget-areas.js +21 -0
- package/dist/src/render/widget-areas.js.map +1 -0
- package/dist/theme.config.d.ts +1 -1
- package/dist/theme.config.js +3 -3
- package/dist/theme.config.js.map +1 -1
- package/package.json +5 -5
- package/src/index.ts +9 -0
- package/src/render/blocks/accordion.ts +28 -22
- package/src/render/blocks/breakdown.ts +42 -0
- package/src/render/blocks/collection-list.ts +234 -103
- package/src/render/blocks/cta.ts +48 -19
- package/src/render/blocks/embed.ts +47 -29
- package/src/render/blocks/faq.ts +22 -31
- package/src/render/blocks/feature-grid.ts +73 -41
- package/src/render/blocks/gallery.ts +32 -26
- package/src/render/blocks/hero.ts +56 -43
- package/src/render/blocks/logo-strip.ts +23 -21
- package/src/render/blocks/logos.ts +45 -40
- package/src/render/blocks/media-figure.ts +49 -24
- package/src/render/blocks/pricing-table.ts +31 -40
- package/src/render/blocks/prose.ts +16 -6
- package/src/render/blocks/quote.ts +34 -27
- package/src/render/blocks/stat-counter.ts +35 -29
- package/src/render/blocks/stats.ts +46 -38
- package/src/render/blocks/testimonial.ts +29 -20
- package/src/render/chrome.ts +165 -91
- package/src/render/details.ts +276 -0
- package/src/render/figures.ts +68 -0
- package/src/render/layout.ts +78 -0
- package/src/render/page-head.ts +193 -0
- package/src/render/render-block.ts +45 -32
- package/src/render/strings.ts +74 -0
- package/src/render/term-archive.ts +94 -58
- package/src/render/widget-areas.ts +24 -0
- package/src/styles/archive.css +38 -102
- package/src/styles/base.css +503 -554
- package/src/styles/blocks.css +913 -666
- package/src/styles/chrome.css +506 -0
- package/src/styles/listings.css +591 -0
- package/src/styles/theme.css +25 -19
- package/src/styles/tokens.css +284 -234
- package/src/styles/widgets.css +1059 -0
- package/tokens.json +18 -18
package/src/styles/tokens.css
CHANGED
|
@@ -1,28 +1,32 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* `@cogenta/theme-association`'s design system.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* (
|
|
9
|
-
*
|
|
10
|
-
*
|
|
4
|
+
* The register is a neighbourhood charity that people trust with their food,
|
|
5
|
+
* their children's homework and their Saturday mornings: warm paper and a
|
|
6
|
+
* green-black ink, the people in the photographs and the numbers carrying the
|
|
7
|
+
* page, plain words set large. One deep green is the organisation's own
|
|
8
|
+
* colour (links, figures, the footer band, the filled button). One marigold
|
|
9
|
+
* yellow is kept for the donation ask and nothing else: the header's standing
|
|
10
|
+
* action, the hero's first action and the band that asks for a gift.
|
|
11
11
|
*
|
|
12
|
-
* Two
|
|
12
|
+
* Two families. Bricolage Grotesque sets what a visitor reads first: the
|
|
13
|
+
* statement of the cause, titles, figures, dates, quotations. Its optical
|
|
14
|
+
* size follows the font size, and the display sizes are set a little narrow
|
|
15
|
+
* (`font-stretch`) so a long, honest sentence still fits two lines. Source
|
|
16
|
+
* Sans 3 sets everything a visitor reads to act: running text, navigation,
|
|
17
|
+
* labels, times and places. The skin names Bricolage in its `serif` slot,
|
|
18
|
+
* which this theme reads as its display slot.
|
|
13
19
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* and the spacing multiplier from `--cogenta-space-scale`, both emitted
|
|
18
|
-
* by `renderSkin` from the same tokens the validator checked.
|
|
20
|
+
* Contract D fixes a closed skin token set, so nothing here adds a token:
|
|
21
|
+
* every value is derived from a `--cogenta-*` property (`calc`, `color-mix`,
|
|
22
|
+
* relative colour syntax).
|
|
19
23
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
24
|
+
* Two rules hold in every stylesheet of this theme:
|
|
25
|
+
*
|
|
26
|
+
* 1. No colour literal. Every colour is a skin token or a function of one.
|
|
27
|
+
* 2. No second scale. Type steps come from `--cogenta-font-size-*`; the
|
|
28
|
+
* display steps above `3xl` continue the same ratio, and fluid sizes only
|
|
29
|
+
* interpolate between steps of that one ladder.
|
|
26
30
|
*/
|
|
27
31
|
|
|
28
32
|
:where(:root) {
|
|
@@ -38,295 +42,341 @@
|
|
|
38
42
|
}
|
|
39
43
|
|
|
40
44
|
/* --------------------------------------------------------------------------
|
|
41
|
-
Space
|
|
45
|
+
Space: one unit, one section rhythm, one twelve-column grid.
|
|
42
46
|
-------------------------------------------------------------------------- */
|
|
43
47
|
|
|
44
48
|
:where(:root) {
|
|
45
|
-
--
|
|
46
|
-
--
|
|
47
|
-
|
|
48
|
-
--
|
|
49
|
-
--
|
|
50
|
-
--
|
|
51
|
-
--
|
|
52
|
-
--
|
|
53
|
-
--
|
|
54
|
-
--
|
|
55
|
-
--
|
|
56
|
-
--
|
|
57
|
-
--
|
|
58
|
-
--
|
|
59
|
-
--
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
--
|
|
66
|
-
|
|
67
|
-
--
|
|
68
|
-
--
|
|
69
|
-
--
|
|
70
|
-
--
|
|
49
|
+
--ca-density: var(--cogenta-space-scale, 1);
|
|
50
|
+
--ca-unit: calc(var(--cogenta-space-unit) * var(--ca-density));
|
|
51
|
+
|
|
52
|
+
--ca-s1: calc(var(--ca-unit) * 1);
|
|
53
|
+
--ca-s2: calc(var(--ca-unit) * 2);
|
|
54
|
+
--ca-s3: calc(var(--ca-unit) * 3);
|
|
55
|
+
--ca-s4: calc(var(--ca-unit) * 4);
|
|
56
|
+
--ca-s5: calc(var(--ca-unit) * 5);
|
|
57
|
+
--ca-s6: calc(var(--ca-unit) * 6);
|
|
58
|
+
--ca-s8: calc(var(--ca-unit) * 8);
|
|
59
|
+
--ca-s10: calc(var(--ca-unit) * 10);
|
|
60
|
+
--ca-s12: calc(var(--ca-unit) * 12);
|
|
61
|
+
--ca-s16: calc(var(--ca-unit) * 16);
|
|
62
|
+
--ca-s20: calc(var(--ca-unit) * 20);
|
|
63
|
+
--ca-s24: calc(var(--ca-unit) * 24);
|
|
64
|
+
--ca-s28: calc(var(--ca-unit) * 28);
|
|
65
|
+
|
|
66
|
+
/* The only vertical rhythm between blocks. Every block is padded by half of
|
|
67
|
+
it above and below, so any two blocks sit one full step apart, whatever
|
|
68
|
+
their order. */
|
|
69
|
+
--ca-section: clamp(var(--ca-s16), 8vw, var(--ca-s28));
|
|
70
|
+
|
|
71
|
+
--ca-columns: 12;
|
|
72
|
+
--ca-gutter: clamp(var(--ca-s5), 4vw, var(--ca-s12));
|
|
73
|
+
--ca-col-gap: clamp(var(--ca-s4), 2vw, var(--ca-s8));
|
|
74
|
+
--ca-page: 78rem;
|
|
75
|
+
/* The distance from the window's edge to the first column. */
|
|
76
|
+
--ca-edge: max(var(--ca-gutter), calc((100vw - var(--ca-page)) / 2));
|
|
77
|
+
|
|
78
|
+
--ca-measure: 66ch;
|
|
79
|
+
--ca-header-height: 4.5rem;
|
|
71
80
|
}
|
|
72
81
|
|
|
73
82
|
:where([data-density="compact"]) {
|
|
74
|
-
--
|
|
83
|
+
--ca-density: 0.75;
|
|
75
84
|
}
|
|
76
85
|
|
|
77
86
|
:where([data-density="comfortable"]) {
|
|
78
|
-
--
|
|
87
|
+
--ca-density: 1;
|
|
79
88
|
}
|
|
80
89
|
|
|
81
90
|
:where([data-density="spacious"]) {
|
|
82
|
-
--
|
|
91
|
+
--ca-density: 1.25;
|
|
83
92
|
}
|
|
84
93
|
|
|
85
94
|
/* --------------------------------------------------------------------------
|
|
86
|
-
Type
|
|
95
|
+
Type: a display grotesque and a text face.
|
|
87
96
|
-------------------------------------------------------------------------- */
|
|
88
97
|
|
|
89
98
|
:where(:root) {
|
|
90
|
-
--
|
|
91
|
-
--
|
|
92
|
-
--
|
|
93
|
-
|
|
94
|
-
--
|
|
95
|
-
--
|
|
96
|
-
--
|
|
97
|
-
|
|
98
|
-
--
|
|
99
|
-
--
|
|
100
|
-
--
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
--
|
|
104
|
-
--
|
|
105
|
-
--
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
--
|
|
109
|
-
|
|
110
|
-
--
|
|
111
|
-
--
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
--
|
|
99
|
+
--ca-font-display: var(--cogenta-font-serif);
|
|
100
|
+
--ca-font-text: var(--cogenta-font-sans);
|
|
101
|
+
--ca-font-code: var(--cogenta-font-mono);
|
|
102
|
+
|
|
103
|
+
--ca-text-xs: var(--cogenta-font-size-xs, 0.68rem);
|
|
104
|
+
--ca-text-sm: var(--cogenta-font-size-sm, 0.85rem);
|
|
105
|
+
--ca-text-md: var(--cogenta-font-size-md, var(--cogenta-font-base-size, 1.0625rem));
|
|
106
|
+
--ca-text-lg: var(--cogenta-font-size-lg, 1.33rem);
|
|
107
|
+
--ca-text-xl: var(--cogenta-font-size-xl, 1.66rem);
|
|
108
|
+
--ca-text-2xl: var(--cogenta-font-size-2xl, 2.08rem);
|
|
109
|
+
--ca-text-3xl: var(--cogenta-font-size-3xl, 2.59rem);
|
|
110
|
+
/* The same ladder, continued: each step is the previous one times the
|
|
111
|
+
skin's own ratio. */
|
|
112
|
+
--ca-text-4xl: calc(var(--ca-text-3xl) * var(--cogenta-font-scale, 1.25));
|
|
113
|
+
--ca-text-5xl: calc(var(--ca-text-4xl) * var(--cogenta-font-scale, 1.25));
|
|
114
|
+
--ca-text-6xl: calc(var(--ca-text-5xl) * var(--cogenta-font-scale, 1.25));
|
|
115
|
+
|
|
116
|
+
/* Labels, captions and small print sit between `sm` and `md`. */
|
|
117
|
+
--ca-text-caption: calc((var(--ca-text-sm) + var(--ca-text-md)) / 2);
|
|
118
|
+
|
|
119
|
+
--ca-size-statement: clamp(var(--ca-text-3xl), calc(1rem + 3.9vw), var(--ca-text-5xl));
|
|
120
|
+
--ca-size-title: clamp(var(--ca-text-2xl), calc(1rem + 3vw), var(--ca-text-4xl));
|
|
121
|
+
--ca-size-section: clamp(var(--ca-text-xl), calc(0.9rem + 1.7vw), var(--ca-text-3xl));
|
|
122
|
+
--ca-size-item: clamp(var(--ca-text-lg), calc(0.9rem + 0.9vw), var(--ca-text-2xl));
|
|
123
|
+
--ca-size-figure: clamp(var(--ca-text-2xl), calc(1rem + 2.6vw), var(--ca-text-4xl));
|
|
124
|
+
--ca-size-day: clamp(var(--ca-text-2xl), calc(1rem + 1.8vw), var(--ca-text-4xl));
|
|
125
|
+
--ca-size-day-large: clamp(var(--ca-text-4xl), calc(1rem + 5vw), var(--ca-text-6xl));
|
|
126
|
+
--ca-size-quote: clamp(var(--ca-text-lg), calc(0.95rem + 1vw), var(--ca-text-2xl));
|
|
127
|
+
--ca-size-lead: clamp(var(--ca-text-md), calc(0.9rem + 0.55vw), var(--ca-text-lg));
|
|
128
|
+
--ca-size-nav: clamp(var(--ca-text-xl), calc(1rem + 3vw), var(--ca-text-2xl));
|
|
129
|
+
--ca-size-wordmark: clamp(var(--ca-text-lg), calc(1rem + 0.3vw), var(--ca-text-xl));
|
|
130
|
+
|
|
131
|
+
--ca-leading-display: 1.02;
|
|
132
|
+
--ca-leading-heading: 1.1;
|
|
133
|
+
--ca-leading-lead: 1.45;
|
|
134
|
+
--ca-leading-text: 1.6;
|
|
135
|
+
--ca-leading-ui: 1.35;
|
|
136
|
+
|
|
137
|
+
--ca-tracking-display: -0.022em;
|
|
138
|
+
--ca-tracking-heading: -0.012em;
|
|
139
|
+
/* Small capitals need a little air between them to read as a word. */
|
|
140
|
+
--ca-tracking-caps: 0.06em;
|
|
141
|
+
|
|
142
|
+
/* Bricolage Grotesque's width axis runs from 75% to 100%. */
|
|
143
|
+
--ca-stretch-display: 88%;
|
|
144
|
+
--ca-stretch-figure: 84%;
|
|
145
|
+
|
|
146
|
+
--ca-weight-regular: 400;
|
|
147
|
+
--ca-weight-medium: 500;
|
|
148
|
+
--ca-weight-semibold: 600;
|
|
149
|
+
--ca-weight-bold: 700;
|
|
118
150
|
}
|
|
119
151
|
|
|
120
152
|
/* --------------------------------------------------------------------------
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
`--cg-radius-lg` is bigger again for the hero frame and the impact band.
|
|
124
|
-
`--cg-radius-pill` is used freely for buttons, badges and the eyebrow tag.
|
|
153
|
+
Shape and motion: corners softened by a hair, motion is a colour or an
|
|
154
|
+
underline.
|
|
125
155
|
-------------------------------------------------------------------------- */
|
|
126
156
|
|
|
127
157
|
:where(:root) {
|
|
128
|
-
--
|
|
129
|
-
--
|
|
130
|
-
--cg-radius-md: var(--cogenta-radius-md);
|
|
131
|
-
--cg-radius-lg: var(--cogenta-radius-lg);
|
|
132
|
-
--cg-radius-xl: calc(var(--cogenta-radius-lg) * 1.4);
|
|
133
|
-
--cg-radius-pill: 999rem;
|
|
134
|
-
}
|
|
158
|
+
--ca-radius: 0;
|
|
159
|
+
--ca-radius-control: var(--cogenta-radius-sm);
|
|
135
160
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
-------------------------------------------------------------------------- */
|
|
161
|
+
--ca-duration: min(var(--cogenta-motion-duration), 150ms);
|
|
162
|
+
--ca-ease: var(--cogenta-motion-easing);
|
|
139
163
|
|
|
140
|
-
:
|
|
141
|
-
--
|
|
142
|
-
--
|
|
143
|
-
--
|
|
144
|
-
|
|
164
|
+
--ca-rule: 1px;
|
|
165
|
+
--ca-rule-strong: 2px;
|
|
166
|
+
--ca-rule-heavy: 4px;
|
|
167
|
+
--ca-bar: 0.625rem;
|
|
168
|
+
|
|
169
|
+
/* An opening quotation mark hangs into the margin on a wide screen only:
|
|
170
|
+
on a phone the margin is the gutter, and the mark would touch the edge. */
|
|
171
|
+
--ca-hang: 0;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
@media (min-width: 64rem) {
|
|
175
|
+
:where(:root) {
|
|
176
|
+
--ca-hang: -0.42em;
|
|
177
|
+
}
|
|
145
178
|
}
|
|
146
179
|
|
|
147
180
|
/* --------------------------------------------------------------------------
|
|
148
|
-
Colour
|
|
181
|
+
Colour: paper, ink, the organisation's green, and the yellow that asks.
|
|
149
182
|
--------------------------------------------------------------------------
|
|
150
183
|
|
|
151
|
-
The block
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
184
|
+
The first block declares the light palette plainly; the scheme-aware
|
|
185
|
+
values follow behind a feature query, so a browser that cannot parse
|
|
186
|
+
`light-dark()` still gets a complete light palette.
|
|
187
|
+
|
|
188
|
+
The signal yellow is the paper's own warm hue turned up to full strength:
|
|
189
|
+
the skin owns the hue, this theme fixes the role's lightness and chroma.
|
|
190
|
+
It is never text, never a line, never a figure: only the ground of the
|
|
191
|
+
donation ask, with ink on it.
|
|
192
|
+
|
|
193
|
+
The dark palette is designed, not inverted. It is the hall after dark:
|
|
194
|
+
|
|
195
|
+
1. The ground is a deep green-black, taken from the organisation's green
|
|
196
|
+
at a very low chroma. Bands step up in lightness.
|
|
197
|
+
2. Type is the paper's own warm white, lowered a step from white.
|
|
198
|
+
3. The green is lifted to a pale sage so it still reads as the same
|
|
199
|
+
colour on the dark ground; the filled button turns sage with ink words.
|
|
200
|
+
4. The yellow stays the yellow: a donation ask does not change colour when
|
|
201
|
+
the lights go down. Its words stay ink.
|
|
202
|
+
5. Hairlines are a step up in lightness from the ground.
|
|
203
|
+
6. Photographs are dimmed a very little, with a brightness step; partner
|
|
204
|
+
wordmarks drawn in ink are inverted so they stay legible.
|
|
205
|
+
|
|
206
|
+
The footer is the green band on paper and a step below the ground in the
|
|
207
|
+
dark, so every page ends on its heaviest band.
|
|
208
|
+
|
|
209
|
+
Every ratio is computed from this file by `test/design-system.test.ts`,
|
|
210
|
+
in both schemes.
|
|
178
211
|
-------------------------------------------------------------------------- */
|
|
179
212
|
|
|
180
213
|
:where(:root) {
|
|
181
|
-
--
|
|
182
|
-
--
|
|
183
|
-
--
|
|
184
|
-
|
|
185
|
-
--
|
|
186
|
-
|
|
187
|
-
--
|
|
188
|
-
|
|
189
|
-
--
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
--
|
|
195
|
-
--
|
|
214
|
+
--ca-canvas: var(--cogenta-color-bg);
|
|
215
|
+
--ca-band: var(--cogenta-color-muted);
|
|
216
|
+
--ca-raised: color-mix(in oklab, var(--cogenta-color-muted) 55%, var(--cogenta-color-bg));
|
|
217
|
+
|
|
218
|
+
--ca-ink: var(--cogenta-color-fg);
|
|
219
|
+
--ca-ink-muted: var(--cogenta-color-muted-fg);
|
|
220
|
+
--ca-ink-subtle: color-mix(in oklab, var(--cogenta-color-muted-fg) 85%, var(--cogenta-color-bg));
|
|
221
|
+
|
|
222
|
+
--ca-green: var(--cogenta-color-accent);
|
|
223
|
+
--ca-green-fg: var(--cogenta-color-accent-fg);
|
|
224
|
+
|
|
225
|
+
/* A browser without relative colour syntax cannot derive the yellow, so
|
|
226
|
+
the ask falls back to the organisation's green with its own words. */
|
|
227
|
+
--ca-signal: var(--cogenta-color-accent);
|
|
228
|
+
--ca-signal-ink: var(--cogenta-color-accent-fg);
|
|
229
|
+
--ca-signal-hover: color-mix(in oklab, var(--cogenta-color-accent) 78%, var(--cogenta-color-fg));
|
|
230
|
+
|
|
231
|
+
--ca-line: var(--cogenta-color-border);
|
|
232
|
+
--ca-line-strong: color-mix(in oklab, var(--cogenta-color-border) 40%, var(--cogenta-color-fg));
|
|
233
|
+
--ca-line-ink: var(--cogenta-color-fg);
|
|
234
|
+
|
|
235
|
+
--ca-track: var(--cogenta-color-muted);
|
|
236
|
+
|
|
237
|
+
--ca-action: var(--cogenta-color-accent);
|
|
238
|
+
--ca-action-fg: var(--cogenta-color-accent-fg);
|
|
239
|
+
--ca-action-hover: color-mix(in oklab, var(--cogenta-color-accent) 78%, var(--cogenta-color-fg));
|
|
240
|
+
--ca-action-hover-fg: var(--cogenta-color-accent-fg);
|
|
241
|
+
|
|
242
|
+
--ca-footer: var(--cogenta-color-accent);
|
|
243
|
+
--ca-footer-ink: var(--cogenta-color-accent-fg);
|
|
244
|
+
--ca-footer-muted: color-mix(
|
|
196
245
|
in oklab,
|
|
197
|
-
var(--cogenta-color-accent)
|
|
198
|
-
var(--cogenta-color-
|
|
246
|
+
var(--cogenta-color-accent-fg) 78%,
|
|
247
|
+
var(--cogenta-color-accent)
|
|
248
|
+
);
|
|
249
|
+
--ca-footer-line: color-mix(
|
|
250
|
+
in oklab,
|
|
251
|
+
var(--cogenta-color-accent-fg) 26%,
|
|
252
|
+
var(--cogenta-color-accent)
|
|
199
253
|
);
|
|
200
254
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
warm tint of *its own* accent. Pre-`@supports`, it is simply the accent
|
|
206
|
-
itself — the safest fallback a browser without relative colour gets. */
|
|
207
|
-
--cg-tint: var(--cogenta-color-accent);
|
|
208
|
-
--cg-tint-soft: color-mix(in oklab, var(--cogenta-color-accent) 14%, var(--cogenta-color-bg));
|
|
209
|
-
|
|
210
|
-
--cg-line: var(--cogenta-color-border);
|
|
211
|
-
--cg-line-soft: color-mix(in oklab, var(--cogenta-color-border) 55%, var(--cogenta-color-bg));
|
|
212
|
-
--cg-line-strong: color-mix(in oklab, var(--cogenta-color-border) 50%, var(--cogenta-color-fg));
|
|
255
|
+
--ca-image-brightness: 1;
|
|
256
|
+
--ca-mark-invert: 0;
|
|
257
|
+
--ca-mark-blend: multiply;
|
|
258
|
+
}
|
|
213
259
|
|
|
214
|
-
|
|
260
|
+
/* Rules drawn on the yellow are its own ink, thinned: they read on the
|
|
261
|
+
yellow in both schemes because the yellow does not change. */
|
|
262
|
+
:where(:root) {
|
|
263
|
+
--ca-signal-line: color-mix(in oklab, var(--ca-signal-ink) 30%, var(--ca-signal));
|
|
215
264
|
}
|
|
216
265
|
|
|
217
266
|
@supports (color: light-dark(currentColor, currentColor)) and
|
|
218
267
|
(color: oklch(from currentColor l c h)) {
|
|
219
268
|
:where(:root) {
|
|
220
|
-
--
|
|
221
|
-
var(--cogenta-color-bg),
|
|
222
|
-
oklch(from var(--cogenta-color-accent) 0.16 calc(c * 0.45) h)
|
|
223
|
-
);
|
|
224
|
-
--cg-surface: light-dark(
|
|
269
|
+
--ca-canvas: light-dark(
|
|
225
270
|
var(--cogenta-color-bg),
|
|
226
|
-
oklch(from var(--cogenta-color-accent) 0.
|
|
271
|
+
oklch(from var(--cogenta-color-accent) 0.215 calc(c * 0.22) h)
|
|
227
272
|
);
|
|
228
|
-
--
|
|
229
|
-
var(--cogenta-color-bg),
|
|
230
|
-
oklch(from var(--cogenta-color-accent) 0.225 calc(c * 0.42) h)
|
|
231
|
-
);
|
|
232
|
-
--cg-surface-sunken: light-dark(
|
|
273
|
+
--ca-band: light-dark(
|
|
233
274
|
var(--cogenta-color-muted),
|
|
234
|
-
oklch(from var(--cogenta-color-accent) 0.
|
|
275
|
+
oklch(from var(--cogenta-color-accent) 0.255 calc(c * 0.24) h)
|
|
235
276
|
);
|
|
236
|
-
--
|
|
237
|
-
color-mix(in oklab, var(--cogenta-color-
|
|
238
|
-
oklch(from var(--cogenta-color-accent) 0.
|
|
277
|
+
--ca-raised: light-dark(
|
|
278
|
+
color-mix(in oklab, var(--cogenta-color-muted) 55%, var(--cogenta-color-bg)),
|
|
279
|
+
oklch(from var(--cogenta-color-accent) 0.28 calc(c * 0.24) h)
|
|
239
280
|
);
|
|
240
281
|
|
|
241
|
-
--
|
|
242
|
-
|
|
243
|
-
oklch(from var(--cogenta-color-accent) 0.94 0.014 h)
|
|
244
|
-
);
|
|
245
|
-
--cg-ink-muted: light-dark(
|
|
282
|
+
--ca-ink: light-dark(var(--cogenta-color-fg), oklch(from var(--cogenta-color-bg) 0.94 c h));
|
|
283
|
+
--ca-ink-muted: light-dark(
|
|
246
284
|
var(--cogenta-color-muted-fg),
|
|
247
|
-
oklch(from var(--cogenta-color-
|
|
285
|
+
oklch(from var(--cogenta-color-muted) 0.8 c h)
|
|
248
286
|
);
|
|
249
|
-
--
|
|
250
|
-
color-mix(in oklab, var(--cogenta-color-muted-fg)
|
|
251
|
-
oklch(from var(--cogenta-color-
|
|
287
|
+
--ca-ink-subtle: light-dark(
|
|
288
|
+
color-mix(in oklab, var(--cogenta-color-muted-fg) 85%, var(--cogenta-color-bg)),
|
|
289
|
+
oklch(from var(--cogenta-color-muted) 0.74 c h)
|
|
252
290
|
);
|
|
253
291
|
|
|
254
|
-
--
|
|
292
|
+
--ca-green: light-dark(
|
|
255
293
|
var(--cogenta-color-accent),
|
|
256
|
-
oklch(from var(--cogenta-color-accent) 0.
|
|
294
|
+
oklch(from var(--cogenta-color-accent) 0.8 calc(c * 0.8) h)
|
|
257
295
|
);
|
|
258
|
-
--
|
|
296
|
+
--ca-green-fg: light-dark(
|
|
259
297
|
var(--cogenta-color-accent-fg),
|
|
260
|
-
oklch(from var(--cogenta-color-accent) 0.
|
|
298
|
+
oklch(from var(--cogenta-color-accent) 0.205 calc(c * 0.22) h)
|
|
261
299
|
);
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
oklch(from var(--cogenta-color-
|
|
300
|
+
|
|
301
|
+
--ca-signal: light-dark(
|
|
302
|
+
oklch(from var(--cogenta-color-bg) 0.84 0.165 h),
|
|
303
|
+
oklch(from var(--cogenta-color-bg) 0.83 0.16 h)
|
|
265
304
|
);
|
|
266
|
-
--
|
|
267
|
-
|
|
268
|
-
oklch(from var(--cogenta-color-accent) 0.
|
|
305
|
+
--ca-signal-ink: light-dark(
|
|
306
|
+
var(--cogenta-color-fg),
|
|
307
|
+
oklch(from var(--cogenta-color-accent) 0.18 calc(c * 0.22) h)
|
|
269
308
|
);
|
|
270
|
-
--
|
|
271
|
-
|
|
272
|
-
oklch(from var(--cogenta-color-
|
|
309
|
+
--ca-signal-hover: light-dark(
|
|
310
|
+
oklch(from var(--cogenta-color-bg) 0.78 0.16 h),
|
|
311
|
+
oklch(from var(--cogenta-color-bg) 0.9 0.13 h)
|
|
273
312
|
);
|
|
274
313
|
|
|
275
|
-
--
|
|
276
|
-
|
|
277
|
-
oklch(from var(--cogenta-color-accent) 0.
|
|
314
|
+
--ca-line: light-dark(
|
|
315
|
+
var(--cogenta-color-border),
|
|
316
|
+
oklch(from var(--cogenta-color-accent) 0.34 calc(c * 0.22) h)
|
|
278
317
|
);
|
|
279
|
-
--
|
|
280
|
-
color-mix(
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
),
|
|
285
|
-
oklch(from var(--cogenta-color-
|
|
318
|
+
--ca-line-strong: light-dark(
|
|
319
|
+
color-mix(in oklab, var(--cogenta-color-border) 40%, var(--cogenta-color-fg)),
|
|
320
|
+
oklch(from var(--cogenta-color-accent) 0.55 calc(c * 0.2) h)
|
|
321
|
+
);
|
|
322
|
+
--ca-line-ink: light-dark(
|
|
323
|
+
var(--cogenta-color-fg),
|
|
324
|
+
oklch(from var(--cogenta-color-bg) 0.94 c h)
|
|
286
325
|
);
|
|
287
326
|
|
|
288
|
-
--
|
|
289
|
-
var(--cogenta-color-
|
|
290
|
-
oklch(from var(--cogenta-color-accent) 0.
|
|
327
|
+
--ca-track: light-dark(
|
|
328
|
+
var(--cogenta-color-muted),
|
|
329
|
+
oklch(from var(--cogenta-color-accent) 0.3 calc(c * 0.24) h)
|
|
291
330
|
);
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
331
|
+
|
|
332
|
+
--ca-action: light-dark(
|
|
333
|
+
var(--cogenta-color-accent),
|
|
334
|
+
oklch(from var(--cogenta-color-accent) 0.8 calc(c * 0.8) h)
|
|
295
335
|
);
|
|
296
|
-
--
|
|
297
|
-
|
|
298
|
-
oklch(from var(--cogenta-color-accent) 0.
|
|
336
|
+
--ca-action-fg: light-dark(
|
|
337
|
+
var(--cogenta-color-accent-fg),
|
|
338
|
+
oklch(from var(--cogenta-color-accent) 0.18 calc(c * 0.22) h)
|
|
339
|
+
);
|
|
340
|
+
--ca-action-hover: light-dark(
|
|
341
|
+
color-mix(in oklab, var(--cogenta-color-accent) 78%, var(--cogenta-color-fg)),
|
|
342
|
+
oklch(from var(--cogenta-color-accent) 0.88 calc(c * 0.6) h)
|
|
343
|
+
);
|
|
344
|
+
--ca-action-hover-fg: light-dark(
|
|
345
|
+
var(--cogenta-color-accent-fg),
|
|
346
|
+
oklch(from var(--cogenta-color-accent) 0.18 calc(c * 0.22) h)
|
|
299
347
|
);
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
/* --------------------------------------------------------------------------
|
|
304
|
-
Elevation — soft shadows over hairlines by default (the brief's own
|
|
305
|
-
"soft shadows"), reserved to a ring only where a shadow would not read
|
|
306
|
-
against the surface (dark mode).
|
|
307
|
-
-------------------------------------------------------------------------- */
|
|
308
348
|
|
|
309
|
-
:
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
349
|
+
--ca-footer: light-dark(
|
|
350
|
+
var(--cogenta-color-accent),
|
|
351
|
+
oklch(from var(--cogenta-color-accent) 0.165 calc(c * 0.2) h)
|
|
352
|
+
);
|
|
353
|
+
--ca-footer-ink: light-dark(
|
|
354
|
+
var(--cogenta-color-accent-fg),
|
|
355
|
+
oklch(from var(--cogenta-color-bg) 0.94 c h)
|
|
356
|
+
);
|
|
357
|
+
--ca-footer-muted: light-dark(
|
|
358
|
+
color-mix(in oklab, var(--cogenta-color-accent-fg) 78%, var(--cogenta-color-accent)),
|
|
359
|
+
oklch(from var(--cogenta-color-muted) 0.76 c h)
|
|
360
|
+
);
|
|
361
|
+
--ca-footer-line: light-dark(
|
|
362
|
+
color-mix(in oklab, var(--cogenta-color-accent-fg) 26%, var(--cogenta-color-accent)),
|
|
363
|
+
oklch(from var(--cogenta-color-accent) 0.3 calc(c * 0.22) h)
|
|
364
|
+
);
|
|
365
|
+
}
|
|
318
366
|
}
|
|
319
367
|
|
|
368
|
+
/* A photograph on the dark ground is dimmed a very little; a wordmark drawn in
|
|
369
|
+
ink is inverted. A brightness step and an inversion, never a blur. */
|
|
320
370
|
@media (prefers-color-scheme: dark) {
|
|
321
371
|
:where(:root:not([data-theme="light"])) {
|
|
322
|
-
--
|
|
323
|
-
--
|
|
324
|
-
--
|
|
372
|
+
--ca-image-brightness: 0.9;
|
|
373
|
+
--ca-mark-invert: 1;
|
|
374
|
+
--ca-mark-blend: screen;
|
|
325
375
|
}
|
|
326
376
|
}
|
|
327
377
|
|
|
328
378
|
:where(:root[data-theme="dark"]) {
|
|
329
|
-
--
|
|
330
|
-
--
|
|
331
|
-
--
|
|
379
|
+
--ca-image-brightness: 0.9;
|
|
380
|
+
--ca-mark-invert: 1;
|
|
381
|
+
--ca-mark-blend: screen;
|
|
332
382
|
}
|