@guildofgleks/ui 21.9.0 → 21.10.0
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/AGENTS.md +1951 -1930
- package/CHANGELOG.md +2340 -2219
- package/TOKENS.md +1 -1
- package/fesm2022/guildofgleks-ui.mjs +17 -3
- package/fesm2022/guildofgleks-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/button.css +401 -387
- package/styles/presets/slate.css +92 -86
- package/styles/theme.css +2396 -2357
- package/types/guildofgleks-ui.d.ts +24 -8
package/styles/theme.css
CHANGED
|
@@ -1,2357 +1,2396 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* @guildofgleks/ui — baseline theme
|
|
3
|
-
*
|
|
4
|
-
* Every token the components read, with a working default, so the library renders
|
|
5
|
-
* correctly from a single import and a consumer can override only what they care about.
|
|
6
|
-
*
|
|
7
|
-
* ── The three layers ─────────────────────────────────────────────────────────────
|
|
8
|
-
* 1. Foundation — palette, type scale, spacing, motion, focus. Restyles everything.
|
|
9
|
-
* 2. Component — `--gog-<component>-*`, spelled out as the component's own element
|
|
10
|
-
* name. Every colour, font, border, radius, shadow, padding and
|
|
11
|
-
* duration each component paints with lives here, so a theme can
|
|
12
|
-
* restyle one component without touching its stylesheet.
|
|
13
|
-
* 3. Instance — a handful of deliberately UNDECLARED tokens (`--gog-button-bg`,
|
|
14
|
-
* `--gog-button-padding`, `--gog-tag-bg`, …) that variant/size classes
|
|
15
|
-
* fall back through. Left unset on purpose: a value declared here
|
|
16
|
-
* would out-cascade the variant classes and pin every button to one
|
|
17
|
-
* look. Set them on an element to override a single instance.
|
|
18
|
-
*
|
|
19
|
-
* No component stylesheet declares a `--gog-*` default of its own — everything a
|
|
20
|
-
* component paints resolves to a token below.
|
|
21
|
-
*
|
|
22
|
-
* ── Why there are two blocks, and which one to add a token to ────────────────────
|
|
23
|
-
* A custom property's `var()` references are substituted on the element that *declares*
|
|
24
|
-
* it, not where it is read. So `--gog-button-primary-bg: var(--gog-accent-color)` declared on
|
|
25
|
-
* `:root` freezes to the root palette: a `data-theme` scope further down the tree could
|
|
26
|
-
* change `--gog-accent-color` and buttons inside it would not follow.
|
|
27
|
-
*
|
|
28
|
-
* `:root` — literals only (and the light palette default). Values that
|
|
29
|
-
* reference nothing, so resolving them once at the root is right.
|
|
30
|
-
* `:root, [data-theme]` — every token whose value reads another token. Re-declared on
|
|
31
|
-
* each theme scope so it re-derives from that scope's palette
|
|
32
|
-
* and metrics. **A new token that contains `var(` goes here.**
|
|
33
|
-
*
|
|
34
|
-
* ── Adding a theme ───────────────────────────────────────────────────────────────
|
|
35
|
-
* Declare a palette against the attribute value; the derived layer re-resolves for you:
|
|
36
|
-
*
|
|
37
|
-
* :root[data-theme='mine'], [data-theme='mine'] { --gog-accent-color: #ff4edb; }
|
|
38
|
-
*
|
|
39
|
-
* Listing both selectors makes the theme work at the root *and* on any subtree, so a
|
|
40
|
-
* single page can show several themes side by side.
|
|
41
|
-
*/
|
|
42
|
-
|
|
43
|
-
:root {
|
|
44
|
-
/* ── Typography ───────────────────────────────────────────────────────────────
|
|
45
|
-
Generic stacks on purpose: a UI library should not force a webfont download on
|
|
46
|
-
its consumers. Point these at your own families to restyle all text at once.
|
|
47
|
-
`styles/fonts.css` is an optional import that wires up the showcase's families. */
|
|
48
|
-
--gog-font-heading: system-ui, -apple-system, 'Segoe UI', sans-serif;
|
|
49
|
-
--gog-font-body: system-ui, -apple-system, 'Segoe UI', sans-serif;
|
|
50
|
-
--gog-font-mono: ui-monospace, SFMono-Regular, 'JetBrains Mono', monospace;
|
|
51
|
-
|
|
52
|
-
--gog-text-xs: 0.75rem;
|
|
53
|
-
--gog-text-sm: 0.875rem;
|
|
54
|
-
--gog-text-md: 1rem;
|
|
55
|
-
--gog-text-lg: 1.125rem;
|
|
56
|
-
/* 20px, between `lg` and `xl`. Named for the control size it serves rather than continuing the
|
|
57
|
-
t-shirt run, because that is what asked for it: `gog-button` and the field controls both
|
|
58
|
-
needed a step for their `slg` size and, having none, both wrote `1.25rem` as a literal — the
|
|
59
|
-
same value chosen twice, independently, which is a missing rung and not two opinions. The
|
|
60
|
-
gap from 1.125 to 1.5 is the widest in the scale, so it was the one likely to be filled by
|
|
61
|
-
hand. */
|
|
62
|
-
--gog-text-slg: 1.25rem;
|
|
63
|
-
--gog-text-xl: 1.5rem;
|
|
64
|
-
--gog-text-2xl: 2rem;
|
|
65
|
-
--gog-text-3xl: 3rem;
|
|
66
|
-
|
|
67
|
-
/* Weight, the third character axis after casing and tracking — and the one 21.7.0's character
|
|
68
|
-
layer missed, which is how fifteen component tokens came to hold a bare number. A house style
|
|
69
|
-
that wants lighter chrome sets these four and nothing else; before them it meant finding and
|
|
70
|
-
re-listing every one. Four steps because four are used: no `normal`, because nothing in the
|
|
71
|
-
library paints 400 and an unused token is API nobody asked for. */
|
|
72
|
-
--gog-font-weight-medium: 500;
|
|
73
|
-
--gog-font-weight-semibold: 600;
|
|
74
|
-
--gog-font-weight-bold: 700;
|
|
75
|
-
--gog-font-weight-heavy: 900;
|
|
76
|
-
|
|
77
|
-
/* Leading, the fourth character axis. Twenty component tokens held a bare number — seven of
|
|
78
|
-
them the same 1.4 — so a house style that wanted roomier text had to find every one. Six
|
|
79
|
-
steps because six values are painted; `gog-panel`'s heading keeps its own 1.25, which is
|
|
80
|
-
off this scale on purpose the way an 11px chip is off the type scale. */
|
|
81
|
-
--gog-line-height-none: 1;
|
|
82
|
-
--gog-line-height-tight: 1.2;
|
|
83
|
-
--gog-line-height-snug: 1.3;
|
|
84
|
-
--gog-line-height-normal: 1.4;
|
|
85
|
-
--gog-line-height-relaxed: 1.5;
|
|
86
|
-
--gog-line-height-loose: 1.6;
|
|
87
|
-
|
|
88
|
-
/* The "emphasis" casing character — labels, buttons, section and table headers all shout
|
|
89
|
-
the same way by default. Not every uppercase/1px-tracking declaration in this file reads
|
|
90
|
-
these two: only the ones that genuinely share this idea do. A few (gog-tabs among them)
|
|
91
|
-
stay their own literal on purpose, because normal case or a different tracking reads
|
|
92
|
-
better there — see docs/themes.md, iteration 1, for the full audit of what did and did
|
|
93
|
-
not qualify. */
|
|
94
|
-
--gog-text-transform: uppercase;
|
|
95
|
-
--gog-letter-spacing: 1px;
|
|
96
|
-
|
|
97
|
-
/* ── Spacing & geometry ───────────────────────────────────────────────────────
|
|
98
|
-
|
|
99
|
-
`--gog-density` is the whole spacing system in one number. It multiplies every step
|
|
100
|
-
of the scale below, and every component padding and gap derives from that scale, so
|
|
101
|
-
a theme makes the entire library compact or roomy without naming a single component:
|
|
102
|
-
|
|
103
|
-
[data-theme='compact'] { --gog-density: 0.75; }
|
|
104
|
-
|
|
105
|
-
This is the density half of docs/themes.md's character layer — the same idea as
|
|
106
|
-
--gog-radius for corners. Before it existed, 177 component paddings and gaps were
|
|
107
|
-
literals in two different units, and a theme that wanted tighter controls had to
|
|
108
|
-
re-list all of them; check-tokens.mjs rule G now fails a build that adds another.
|
|
109
|
-
|
|
110
|
-
The steps are named for their pixel value at density 1, because a t-shirt scale
|
|
111
|
-
stops being readable somewhere around the fourth size and this one has fourteen.
|
|
112
|
-
The five original t-shirt names are kept as aliases: they are public API, they are
|
|
113
|
-
what `theme-starter.css` and every existing consumer theme use, and they cost
|
|
114
|
-
nothing to keep.
|
|
115
|
-
|
|
116
|
-
Only the multiplier itself lives here — the scale is in the derived block below,
|
|
117
|
-
because every step reads this token and so has to re-resolve inside each theme
|
|
118
|
-
scope. A step declared here would be computed once against :root's density and a
|
|
119
|
-
[data-theme] subtree would inherit that number, not its own. */
|
|
120
|
-
--gog-density: 1;
|
|
121
|
-
|
|
122
|
-
/* The ground a *raised* surface paints. Equal to the plain surface by default, because on a
|
|
123
|
-
light theme elevation reads as a shadow and the surface itself does not change.
|
|
124
|
-
|
|
125
|
-
On a dark theme a shadow has nothing to darken — 21.7.1 found `elevated` and `outlined`
|
|
126
|
-
cards rendering identically under `data-theme="dark"`, both a thin ring on the same fill.
|
|
127
|
-
Dark themes therefore lift this token instead, which is how elevation has to be expressed
|
|
128
|
-
when the page is already near-black. Each dark theme sets it; light themes leave it alone. */
|
|
129
|
-
|
|
130
|
-
--gog-radius: 8px;
|
|
131
|
-
/* Three border-weight tiers, not one: --gog-control-border-width (2px) is form fields,
|
|
132
|
-
--gog-panel-border-width (1px) is raised/floating surfaces (card, dialog, dropdown panel,
|
|
133
|
-
tooltip — see README.md's note on --gog-panel-*), and this pair is everything smaller and
|
|
134
|
-
inline — chip, tag, badge, toggle, table rows, tabs, calendar cells. It happens to share
|
|
135
|
-
panel's value today; kept separate anyway; a theme wanting thick floating panels but thin
|
|
136
|
-
inline chips (or the reverse) needs the two independently settable. */
|
|
137
|
-
--gog-border-width: 1px;
|
|
138
|
-
--gog-border-style: solid;
|
|
139
|
-
--gog-panel-border-width: 1px;
|
|
140
|
-
--gog-panel-border-style: solid;
|
|
141
|
-
|
|
142
|
-
/* ── Motion ──────────────────────────────────────────────────────────────────
|
|
143
|
-
Every component transition/animation is expressed in these. Set them to 0s to
|
|
144
|
-
flatten all motion theme-wide (components also honour prefers-reduced-motion). */
|
|
145
|
-
--gog-duration-fast: 0.12s;
|
|
146
|
-
--gog-duration-base: 0.15s;
|
|
147
|
-
--gog-duration-slow: 0.2s;
|
|
148
|
-
--gog-easing: ease;
|
|
149
|
-
|
|
150
|
-
/* ── Focus & disabled ───────────────────────────────────────────────────────── */
|
|
151
|
-
--gog-focus-ring-width: 3px;
|
|
152
|
-
--gog-focus-ring-offset: 2px;
|
|
153
|
-
--gog-disabled-opacity: 0.4;
|
|
154
|
-
|
|
155
|
-
/* ── Control metrics ─────────────────────────────────────────────────────────
|
|
156
|
-
Five-tier scale: xsm/slg bookend the original sm/md/lg (restored below to
|
|
157
|
-
their pre-compaction numbers) as new extremes for extra-tight or extra-roomy
|
|
158
|
-
layouts. */
|
|
159
|
-
/* The clear (×) button's glyph, as a fraction of its box. One number written five times —
|
|
160
|
-
`gog-autocomplete`, `gog-datepicker`, `gog-inputfield`, `gog-multiselect` and `gog-select`
|
|
161
|
-
all had their own `0.7` for the same part. `gog-textarea` keeps its own `1` deliberately:
|
|
162
|
-
its clear button sits in a corner rather than in the field's icon row. */
|
|
163
|
-
--gog-control-clear-icon-ratio: 0.7;
|
|
164
|
-
--gog-control-border-width: 2px;
|
|
165
|
-
--gog-control-border-style: solid;
|
|
166
|
-
|
|
167
|
-
--gog-control-checkbox-box-size-xsm: 12px;
|
|
168
|
-
--gog-control-checkbox-box-size-sm: 18px;
|
|
169
|
-
--gog-control-checkbox-box-size-md: 24px;
|
|
170
|
-
--gog-control-checkbox-box-size-lg: 32px;
|
|
171
|
-
--gog-control-checkbox-box-size-slg: 40px;
|
|
172
|
-
--gog-control-checkbox-label-size-xsm: 0.6875rem;
|
|
173
|
-
--gog-control-checkbox-label-size-sm: 0.8125rem;
|
|
174
|
-
--gog-control-checkbox-label-size-md: 0.9375rem;
|
|
175
|
-
--gog-control-checkbox-label-size-lg: 1.0625rem;
|
|
176
|
-
--gog-control-checkbox-label-size-slg: 1.1875rem;
|
|
177
|
-
--gog-control-checkbox-icon-size-xsm: 10px;
|
|
178
|
-
--gog-control-checkbox-icon-size-sm: 12px;
|
|
179
|
-
--gog-control-checkbox-icon-size-md: 14px;
|
|
180
|
-
--gog-control-checkbox-icon-size-lg: 18px;
|
|
181
|
-
--gog-control-checkbox-icon-size-slg: 22px;
|
|
182
|
-
|
|
183
|
-
/* ── Button sizing ─────────────────────────────────────────────────────────── */
|
|
184
|
-
|
|
185
|
-
/* ── Field sizing (input / select / multiselect share one scale) ─────────────
|
|
186
|
-
The offsets are spacing and follow --gog-density with everything else; the glyph
|
|
187
|
-
box does not, because an icon that shrinks with the padding stops being legible
|
|
188
|
-
well before the padding stops being usable. Only the offsets move.
|
|
189
|
-
|
|
190
|
-
Each inset is the text's start edge: one offset before the glyph, the glyph, one
|
|
191
|
-
offset after. It was five hand-measured literals (docs/iteration-8-plan.md tuned
|
|
192
|
-
them in a browser) that happened to satisfy that identity, so nothing here moves
|
|
193
|
-
at density 1 — but a literal cannot follow the density knob, and at 0.75 the text
|
|
194
|
-
used to keep a 36px inset against 7px of padding. Stated as the sum it always was,
|
|
195
|
-
it just works. */
|
|
196
|
-
--gog-field-icon-glyph-xsm: 12px;
|
|
197
|
-
--gog-field-icon-glyph-sm: 14px;
|
|
198
|
-
--gog-field-icon-glyph: 16px;
|
|
199
|
-
|
|
200
|
-
/* ── Float label geometry (input / textarea / select / multiselect) ─────────
|
|
201
|
-
One scale for every field that can float its label. Each control reads these
|
|
202
|
-
through its own `--gog-<block>-float-label-*` token in the derived layer below,
|
|
203
|
-
so setting a value here retunes all of them at once while a single control can
|
|
204
|
-
still be tuned on its own. `reserve` is the headroom added inside the field for
|
|
205
|
-
the 'in'/'on' variants; `in-top` is where the label lands once floated for 'in';
|
|
206
|
-
`over-gap`/`over-reserve` are the gap above the border and the space permanently
|
|
207
|
-
kept clear for the 'over' variant. */
|
|
208
|
-
--gog-field-float-label-reserve: 14px;
|
|
209
|
-
--gog-field-float-label-in-top: 6px;
|
|
210
|
-
--gog-field-float-label-over-reserve: 1.4em;
|
|
211
|
-
|
|
212
|
-
/* ── Icon & spinner ───────────────────────────────────────────────────────── */
|
|
213
|
-
--gog-icon-size: 1.2em;
|
|
214
|
-
--gog-icon-stroke-width: 2;
|
|
215
|
-
--gog-spinner-size-xsm: 12px;
|
|
216
|
-
--gog-spinner-size-sm: 18px;
|
|
217
|
-
--gog-spinner-size-md: 48px;
|
|
218
|
-
--gog-spinner-size-lg: 96px;
|
|
219
|
-
--gog-spinner-size-slg: 144px;
|
|
220
|
-
--gog-spinner-rune-size: 20px;
|
|
221
|
-
|
|
222
|
-
/* ── Toast stack ──────────────────────────────────────────────────────────── */
|
|
223
|
-
--gog-toast-min-width: 280px;
|
|
224
|
-
--gog-toast-max-width: 400px;
|
|
225
|
-
--gog-toast-z-index: 9999;
|
|
226
|
-
--gog-toast-enter-distance: 110%;
|
|
227
|
-
--gog-toast-shadow: 0 4px 24px rgba(0, 0, 0, 0.25);
|
|
228
|
-
|
|
229
|
-
/* ── Overlay stacking ───────────────────────────────────────────────────────
|
|
230
|
-
Baseline for dropdown panels. gog-dialog re-declares this on its own panel so
|
|
231
|
-
dropdowns opened inside a dialog stack above it. */
|
|
232
|
-
/* The library's stacking floor. Every layer below is `base + N`, so an app that has to put the
|
|
233
|
-
whole library above its own chrome moves this one number and keeps the internal order —
|
|
234
|
-
badge 1, toast 100, dropdowns and dialogs 300, tooltip 400, the blocking spinner overlay
|
|
235
|
-
8000. Before this, shifting the stack meant editing five tokens and hoping none was missed. */
|
|
236
|
-
--gog-z-base: 0;
|
|
237
|
-
|
|
238
|
-
/* ── Light palette (also the no-data-theme default) ───────────────────────── */
|
|
239
|
-
color-scheme: light;
|
|
240
|
-
/* Backgrounds and surfaces */
|
|
241
|
-
--gog-background-color: #f7f3eb; /* Warm parchment page ground */
|
|
242
|
-
--gog-surface-color: #ffffff; /* Bleached parchment for cards — lighter than the page on purpose, so the two tiers read apart */
|
|
243
|
-
--gog-hover-color: #f0e7d7; /* Hover state — soft wax */
|
|
244
|
-
--gog-border-color: #d8c7ad; /* Aged brass rule */
|
|
245
|
-
|
|
246
|
-
/* Type — old oak-gall ink */
|
|
247
|
-
--gog-text-color: #17120c; /* Deep ink — clears WCAG AAA against both surfaces */
|
|
248
|
-
--gog-accent-text-color: #ffffff;
|
|
249
|
-
--gog-muted-text-color: #63503c; /* Muted kiln ink */
|
|
250
|
-
|
|
251
|
-
/* Brand and accents — guild gold leaf */
|
|
252
|
-
--gog-primary-color: #17120c;
|
|
253
|
-
/* Deep guild gold. Darkened from #9e6f00 in 21.7.0: white on the old value was 4.44:1,
|
|
254
|
-
just under WCAG AA's 4.5, and its hover fill was 2.87:1 — the hover was the worse half.
|
|
255
|
-
The hover is now *darker* than the rest state rather than brighter, because gold light
|
|
256
|
-
enough to read as "a brighter gleam" cannot carry white text at all. */
|
|
257
|
-
--gog-accent-color: #926600;
|
|
258
|
-
--gog-accent-bright: #7a5500;
|
|
259
|
-
--gog-accent-dim: #735100; /* Dark bronze */
|
|
260
|
-
--gog-accent-pale: #f8f1df; /* Pale wash beneath the gold */
|
|
261
|
-
--gog-secondary-color: #6b5328;
|
|
262
|
-
|
|
263
|
-
/* Semantic colours, kept in the alchemical family */
|
|
264
|
-
--gog-success-color: #216e4e; /* Emerald */
|
|
265
|
-
--gog-danger-color: #a7232b; /* Ruby */
|
|
266
|
-
--gog-warning-color: #c45100; /* Dark amber */
|
|
267
|
-
--gog-info-color: #2b5c8f; /* Lapis */
|
|
268
|
-
|
|
269
|
-
/* Soft, deep shadow — old leather */
|
|
270
|
-
--gog-panel-shadow: 0 4px 20px rgba(23, 18, 12, 0.08), 0 1px 3px rgba(23, 18, 12, 0.04);
|
|
271
|
-
--gog-spinner-overlay-bg: rgba(247, 243, 235, 0.85);
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
:root[data-theme='light'],
|
|
275
|
-
[data-theme='light'] {
|
|
276
|
-
color-scheme: light;
|
|
277
|
-
|
|
278
|
-
/* Backgrounds and surfaces */
|
|
279
|
-
--gog-background-color: #f7f3eb; /* Warm parchment page ground */
|
|
280
|
-
--gog-surface-color: #ffffff; /* Bleached parchment for cards — lighter than the page on purpose, so the two tiers read apart */
|
|
281
|
-
--gog-hover-color: #f0e7d7; /* Hover state — soft wax */
|
|
282
|
-
--gog-border-color: #d8c7ad; /* Aged brass rule */
|
|
283
|
-
|
|
284
|
-
/* Type — old oak-gall ink */
|
|
285
|
-
--gog-text-color: #17120c; /* Deep ink — clears WCAG AAA against both surfaces */
|
|
286
|
-
--gog-accent-text-color: #ffffff;
|
|
287
|
-
--gog-muted-text-color: #63503c; /* Muted kiln ink */
|
|
288
|
-
|
|
289
|
-
/* Brand and accents — guild gold leaf */
|
|
290
|
-
--gog-primary-color: #17120c;
|
|
291
|
-
/* Deep guild gold. Darkened from #9e6f00 in 21.7.0: white on the old value was 4.44:1,
|
|
292
|
-
just under WCAG AA's 4.5, and its hover fill was 2.87:1 — the hover was the worse half.
|
|
293
|
-
The hover is now *darker* than the rest state rather than brighter, because gold light
|
|
294
|
-
enough to read as "a brighter gleam" cannot carry white text at all. */
|
|
295
|
-
--gog-accent-color: #926600;
|
|
296
|
-
--gog-accent-bright: #7a5500;
|
|
297
|
-
--gog-accent-dim: #735100; /* Dark bronze */
|
|
298
|
-
--gog-accent-pale: #f8f1df; /* Pale wash beneath the gold */
|
|
299
|
-
--gog-secondary-color: #6b5328;
|
|
300
|
-
|
|
301
|
-
/* Semantic colours, kept in the alchemical family */
|
|
302
|
-
--gog-success-color: #216e4e; /* Emerald */
|
|
303
|
-
--gog-danger-color: #a7232b; /* Ruby */
|
|
304
|
-
--gog-warning-color: #c45100; /* Dark amber */
|
|
305
|
-
--gog-info-color: #2b5c8f; /* Lapis */
|
|
306
|
-
|
|
307
|
-
/* Soft, deep shadow — old leather */
|
|
308
|
-
--gog-panel-shadow: 0 4px 20px rgba(23, 18, 12, 0.08), 0 1px 3px rgba(23, 18, 12, 0.04);
|
|
309
|
-
--gog-spinner-overlay-bg: rgba(247, 243, 235, 0.85);
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
:root[data-theme='dark'],
|
|
313
|
-
[data-theme='dark'] {
|
|
314
|
-
color-scheme: dark;
|
|
315
|
-
|
|
316
|
-
/* Backgrounds and surfaces */
|
|
317
|
-
--gog-background-color: #0d0b08; /* Deep forge obsidian */
|
|
318
|
-
--gog-surface-color: #16120e; /* Dark fired iron — cards */
|
|
319
|
-
/* Lifted, not shadowed — see --gog-elevated-surface-color. Deliberately a step above
|
|
320
|
-
--gog-hover-color, not equal to it: hover and the header strips are a light lift, elevation
|
|
321
|
-
is a bigger one, and the first attempt gave all three the same value. */
|
|
322
|
-
--gog-hover-color: #241d17; /* Hover state */
|
|
323
|
-
--gog-border-color: #3d3122; /* Aged chased bronze */
|
|
324
|
-
|
|
325
|
-
/* Type — glowing ivory */
|
|
326
|
-
--gog-text-color: #f3ebd8; /* Soft luminous parchment */
|
|
327
|
-
--gog-accent-text-color: #0d0b08;
|
|
328
|
-
--gog-muted-text-color: #9e8d76; /* Muted bronze */
|
|
329
|
-
|
|
330
|
-
/* Brand and accents — the alchemist's glowing gold */
|
|
331
|
-
--gog-primary-color: #f3ebd8;
|
|
332
|
-
--gog-accent-color: #fbbf24; /* Plasma amber */
|
|
333
|
-
--gog-accent-bright: #fde047; /* Bright gold ray */
|
|
334
|
-
--gog-accent-dim: #b48310; /* Muted gold */
|
|
335
|
-
--gog-accent-pale: #2b210c; /* Dark gold reflection */
|
|
336
|
-
--gog-secondary-color: #d4a373;
|
|
337
|
-
|
|
338
|
-
/* Semantics */
|
|
339
|
-
--gog-success-color: #34d399; /* Glowing emerald */
|
|
340
|
-
--gog-danger-color: #f87171; /* Glowing ruby */
|
|
341
|
-
--gog-warning-color: #fbbf24; /* Amber */
|
|
342
|
-
--gog-info-color: #38bdf8; /* Sapphire */
|
|
343
|
-
|
|
344
|
-
--gog-panel-shadow: 0 10px 30px rgba(0, 0, 0, 0.7), 0 0 0 1px var(--gog-border-color);
|
|
345
|
-
/* `elevated` drops the 1px ring `--gog-panel-shadow` carries for real overlays (dialog,
|
|
346
|
-
dropdown, tooltip), because that ring is exactly what `outlined` draws — with it, the two
|
|
347
|
-
card/panel variants render identically on a dark ground. The blur stays; the ring goes,
|
|
348
|
-
so outlined has an edge and elevated does not. Light themes need none of this: their
|
|
349
|
-
shadow has no ring and reads on its own. */
|
|
350
|
-
/* `elevated` cannot use `--gog-panel-shadow` here. That shadow carries a `0 0 0 1px` ring so
|
|
351
|
-
overlays keep an edge against the page, and the ring is exactly what `outlined` draws — with
|
|
352
|
-
it the two variants render identically. Dropping the ring and keeping the 30px black blur was
|
|
353
|
-
worse: black blurred over a near-black page reads as smudge rather than lift.
|
|
354
|
-
|
|
355
|
-
So elevation is stated the way a dark UI actually states it — a hairline of light along the
|
|
356
|
-
top edge, where a raised surface would catch it, over a tighter, darker shadow that stays
|
|
357
|
-
close to the element instead of hazing the page. */
|
|
358
|
-
--gog-card-elevated-shadow:
|
|
359
|
-
inset 0 1px 0 rgba(255, 255, 255, 0.07), 0 2px 6px rgba(0, 0, 0, 0.55);
|
|
360
|
-
--gog-panel-elevated-shadow:
|
|
361
|
-
inset 0 1px 0 rgba(255, 255, 255, 0.07), 0 2px 6px rgba(0, 0, 0, 0.55);
|
|
362
|
-
--gog-spinner-overlay-bg: rgba(13, 11, 8, 0.85);
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
/*
|
|
366
|
-
* ── Derived layer ───────────────────────────────────────────────────────────────
|
|
367
|
-
* Re-declared on every theme scope so each one re-derives from its own palette and
|
|
368
|
-
* metrics. Everything here reads another token; nothing here is a bare literal.
|
|
369
|
-
*/
|
|
370
|
-
:root,
|
|
371
|
-
[data-theme] {
|
|
372
|
-
/* ── Derived foundation tokens ───────────────────────────────────────────────
|
|
373
|
-
Split out of the literal block above because they read other tokens: they have
|
|
374
|
-
to re-resolve inside each theme scope. */
|
|
375
|
-
|
|
376
|
-
/* ── Text on a status fill ───────────────────────────────────────────────────
|
|
377
|
-
`--gog-accent-text-color` means "text on the accent fill" and flips with the theme, which
|
|
378
|
-
made it the obvious label for a status fill too — `gogBadge` used it for all four. It is
|
|
379
|
-
wrong for some of them, and silently: measured 2026-09-04, `material`'s amber under white
|
|
380
|
-
was 1.97:1 and `primeng`'s green 2.28:1, both far under AA, in a pair no check had. The
|
|
381
|
-
accent is one colour a theme tunes deliberately; the four statuses are four more, and
|
|
382
|
-
nothing says one label reads on all five.
|
|
383
|
-
|
|
384
|
-
So each status names its own, defaulting to the accent's answer because that is right in
|
|
385
|
-
seven of the eleven themes. A theme states one of these only where its own hue disagrees —
|
|
386
|
-
`material` puts near-black on its amber, which is Material 3's own convention, and `primeng`
|
|
387
|
-
does the same on all three of Aura's bright hues. Where *neither* label reached AA the hue
|
|
388
|
-
itself moved instead; see the preset files. */
|
|
389
|
-
--gog-success-text-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
390
|
-
--gog-danger-text-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
391
|
-
--gog-warning-text-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
392
|
-
--gog-info-text-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
393
|
-
|
|
394
|
-
/* Which way a status fill deepens when it is hovered or held: **away from its own label**, so
|
|
395
|
-
the step always makes the label easier to read rather than harder. That is the theme's ink
|
|
396
|
-
for a fill wearing the accent's white, which is nine of the eleven themes — and the other way
|
|
397
|
-
round for the four fills whose label is the ink itself, `material`'s amber and `primeng`'s
|
|
398
|
-
three, which say so in their own files. Mixing toward a fixed colour instead is what a first
|
|
399
|
-
pass did, and it cost `primeng`'s info button 6.44:1 down to 4.23:1 on press: deepening
|
|
400
|
-
toward the ink walked the fill into the label. */
|
|
401
|
-
--gog-success-shade: var(--gog-text-color);
|
|
402
|
-
--gog-danger-shade: var(--gog-text-color);
|
|
403
|
-
--gog-warning-shade: var(--gog-text-color);
|
|
404
|
-
--gog-info-shade: var(--gog-text-color);
|
|
405
|
-
/* ── Stacking layers ─────────────────────────────────────────────────────────
|
|
406
|
-
All five read `--gog-z-base`, so the whole library moves together. The gaps are
|
|
407
|
-
deliberate: an app that needs to slot its own element between two of these has room
|
|
408
|
-
without touching the library's numbers. */
|
|
409
|
-
--gog-badge-z: calc(var(--gog-z-base) + 1);
|
|
410
|
-
--gog-toast-base-z: calc(var(--gog-z-base) + 100);
|
|
411
|
-
--gog-dropdown-z: calc(var(--gog-z-base) + 300);
|
|
412
|
-
--gog-tooltip-z: calc(var(--gog-z-base) + 400);
|
|
413
|
-
/* The blocking overlay outranks everything, including a dialog it may be covering. */
|
|
414
|
-
--gog-spinner-overlay-z: calc(var(--gog-z-base) + 8000);
|
|
415
|
-
|
|
416
|
-
--gog-space-2: calc(2px * var(--gog-density));
|
|
417
|
-
--gog-space-4: calc(4px * var(--gog-density));
|
|
418
|
-
--gog-space-6: calc(6px * var(--gog-density));
|
|
419
|
-
--gog-space-8: calc(8px * var(--gog-density));
|
|
420
|
-
--gog-space-10: calc(10px * var(--gog-density));
|
|
421
|
-
--gog-space-12: calc(12px * var(--gog-density));
|
|
422
|
-
--gog-space-14: calc(14px * var(--gog-density));
|
|
423
|
-
--gog-space-16: calc(16px * var(--gog-density));
|
|
424
|
-
--gog-space-18: calc(18px * var(--gog-density));
|
|
425
|
-
--gog-space-20: calc(20px * var(--gog-density));
|
|
426
|
-
--gog-space-24: calc(24px * var(--gog-density));
|
|
427
|
-
--gog-space-28: calc(28px * var(--gog-density));
|
|
428
|
-
--gog-space-32: calc(32px * var(--gog-density));
|
|
429
|
-
--gog-space-48: calc(48px * var(--gog-density));
|
|
430
|
-
--gog-space-xs: var(--gog-space-4);
|
|
431
|
-
--gog-space-sm: var(--gog-space-8);
|
|
432
|
-
--gog-space-md: var(--gog-space-16);
|
|
433
|
-
--gog-space-lg: var(--gog-space-24);
|
|
434
|
-
--gog-space-2xl: var(--gog-space-48);
|
|
435
|
-
--gog-control-padding-y: var(--gog-space-10);
|
|
436
|
-
--gog-control-padding-x: var(--gog-space-14);
|
|
437
|
-
--gog-control-checkbox-padding: var(--gog-space-6);
|
|
438
|
-
--gog-field-xsm-padding-y: var(--gog-space-4);
|
|
439
|
-
--gog-field-xsm-padding-x: var(--gog-space-8);
|
|
440
|
-
--gog-field-sm-padding-y: var(--gog-space-6);
|
|
441
|
-
--gog-field-sm-padding-x: var(--gog-space-10);
|
|
442
|
-
--gog-field-lg-padding-y: var(--gog-space-14);
|
|
443
|
-
--gog-field-lg-padding-x: var(--gog-space-18);
|
|
444
|
-
--gog-field-slg-padding-y: var(--gog-space-18);
|
|
445
|
-
--gog-field-slg-padding-x: var(--gog-space-20);
|
|
446
|
-
--gog-field-float-label-over-gap: var(--gog-space-8);
|
|
447
|
-
--gog-toast-gap: var(--gog-space-10);
|
|
448
|
-
--gog-toast-stack-padding: var(--gog-space-16);
|
|
449
|
-
--gog-field-xsm-icon-offset: var(--gog-space-6);
|
|
450
|
-
--gog-field-sm-icon-offset: var(--gog-space-8);
|
|
451
|
-
--gog-field-lg-icon-offset: var(--gog-space-14);
|
|
452
|
-
--gog-field-slg-icon-offset: var(--gog-space-18);
|
|
453
|
-
--gog-control-icon-offset: var(--gog-space-10);
|
|
454
|
-
--gog-elevated-surface-color: var(--gog-surface-color);
|
|
455
|
-
--gog-panel-radius: calc(var(--gog-radius) + 8px);
|
|
456
|
-
--gog-field-xsm-font-size: var(--gog-text-xs);
|
|
457
|
-
--gog-field-sm-font-size: var(--gog-text-sm);
|
|
458
|
-
/* The only field metric that is a type size; the rest of this block is geometry. It lives
|
|
459
|
-
here rather than with them because it reads a token, and a derived value declared on the
|
|
460
|
-
literals-only `:root` freezes to that scope's scale (rule C). */
|
|
461
|
-
--gog-field-slg-font-size: var(--gog-text-slg);
|
|
462
|
-
|
|
463
|
-
--gog-field-md-padding-y: var(--gog-control-padding-y);
|
|
464
|
-
--gog-field-md-padding-x: var(--gog-control-padding-x);
|
|
465
|
-
|
|
466
|
-
/* offset + glyph + offset — see the icon-chrome comment in the literal block above. */
|
|
467
|
-
--gog-field-xsm-icon-inset: calc(
|
|
468
|
-
var(--gog-field-xsm-icon-offset) * 2 + var(--gog-field-icon-glyph-xsm)
|
|
469
|
-
);
|
|
470
|
-
--gog-field-sm-icon-inset: calc(
|
|
471
|
-
var(--gog-field-sm-icon-offset) * 2 + var(--gog-field-icon-glyph-sm)
|
|
472
|
-
);
|
|
473
|
-
--gog-field-md-icon-inset: calc(
|
|
474
|
-
var(--gog-field-md-icon-offset) * 2 + var(--gog-field-icon-glyph)
|
|
475
|
-
);
|
|
476
|
-
--gog-field-lg-icon-inset: calc(
|
|
477
|
-
var(--gog-field-lg-icon-offset) * 2 + var(--gog-field-icon-glyph)
|
|
478
|
-
);
|
|
479
|
-
--gog-field-slg-icon-inset: calc(
|
|
480
|
-
var(--gog-field-slg-icon-offset) * 2 + var(--gog-field-icon-glyph)
|
|
481
|
-
);
|
|
482
|
-
--gog-field-md-font-size: var(--gog-text-md);
|
|
483
|
-
--gog-field-md-icon-offset: var(--gog-control-icon-offset);
|
|
484
|
-
--gog-field-lg-font-size: var(--gog-text-lg);
|
|
485
|
-
|
|
486
|
-
/* ══════════════════════════════════════════════════════════════════════════════
|
|
487
|
-
COMPONENT TOKENS
|
|
488
|
-
Everything below is what an individual component paints with. Override a block
|
|
489
|
-
to restyle just that component; the values themselves all derive from the
|
|
490
|
-
foundation tokens above, so a palette swap carries through for free.
|
|
491
|
-
══════════════════════════════════════════════════════════════════════════════ */
|
|
492
|
-
|
|
493
|
-
/* ── Accordion ─────────────────────────────────────────────────────────────── */
|
|
494
|
-
--gog-accordion-font-family: var(--gog-font-heading);
|
|
495
|
-
--gog-accordion-body-font-family: var(--gog-font-body);
|
|
496
|
-
--gog-accordion-border-color: var(--gog-accent-dim);
|
|
497
|
-
--gog-accordion-border-width: var(--gog-control-border-width);
|
|
498
|
-
--gog-accordion-border-style: var(--gog-control-border-style);
|
|
499
|
-
--gog-accordion-text-color: var(--gog-text-color);
|
|
500
|
-
--gog-accordion-accent-color: var(--gog-accent-color);
|
|
501
|
-
--gog-accordion-hover-bg: var(--gog-hover-color);
|
|
502
|
-
/* The header's label stays body text while hovered or held, and the lift is carried by the
|
|
503
|
-
background alone. It turned `--gog-accordion-accent-color` until 21.9.0, which is the accent
|
|
504
|
-
— on an accent-tinted strip that measured 3.61:1 in light, 3.79:1 in one-light and 4.09:1 in
|
|
505
|
-
ledger, and worse again once the press deepened the tint. Same trade as the ghost button's
|
|
506
|
-
hover, and made for the same reason: the accent is not a text colour on a ground that is
|
|
507
|
-
itself tinted with the accent. */
|
|
508
|
-
--gog-accordion-hover-color: var(--gog-accordion-text-color);
|
|
509
|
-
--gog-accordion-press-bg: var(--gog-border-color);
|
|
510
|
-
--gog-accordion-hover-ring: var(--gog-accent-dim);
|
|
511
|
-
--gog-accordion-focus-ring-width: var(--gog-focus-ring-width);
|
|
512
|
-
--gog-accordion-body-color: var(--gog-text-color);
|
|
513
|
-
--gog-accordion-body-line-height: var(--gog-line-height-loose);
|
|
514
|
-
--gog-accordion-header-text-transform: var(--gog-text-transform);
|
|
515
|
-
--gog-accordion-header-gap: var(--gog-space-12);
|
|
516
|
-
--gog-accordion-disabled-opacity: var(--gog-disabled-opacity);
|
|
517
|
-
--gog-accordion-transition-duration: var(--gog-duration-base);
|
|
518
|
-
--gog-accordion-body-transition-duration: var(--gog-duration-slow);
|
|
519
|
-
--gog-accordion-chevron-transition-duration: var(--gog-duration-slow);
|
|
520
|
-
--gog-accordion-body-lift: -2px;
|
|
521
|
-
/* Flat by default — corner rounding is a look, not a given; consumers who want it
|
|
522
|
-
opt in per-instance or theme-wide by overriding these two. */
|
|
523
|
-
--gog-accordion-radius: 0px;
|
|
524
|
-
--gog-accordion-body-radius: 0px;
|
|
525
|
-
/* The header carries its own ground and the body does not. Both were `transparent` until
|
|
526
|
-
21.7.1, which made every open item one continuous band: header and content painted the
|
|
527
|
-
surrounding surface, and the only thing between two open items was a hairline in the accent
|
|
528
|
-
colour. With several open at once nobody could tell where one ended and the next began.
|
|
529
|
-
|
|
530
|
-
Only the header changed. The body stays transparent on purpose, so an accordion dropped on
|
|
531
|
-
a coloured surface still sits on that colour rather than punching a hole in it. */
|
|
532
|
-
--gog-accordion-header-bg: var(--gog-hover-color);
|
|
533
|
-
--gog-accordion-body-bg: transparent;
|
|
534
|
-
/* Per-size metrics. `lg` is the default size. */
|
|
535
|
-
--gog-accordion-xsm-padding-y: var(--gog-space-4);
|
|
536
|
-
--gog-accordion-xsm-padding-x: var(--gog-space-8);
|
|
537
|
-
--gog-accordion-xsm-font-size: var(--gog-text-xs);
|
|
538
|
-
--gog-accordion-xsm-letter-spacing: 0.2px;
|
|
539
|
-
--gog-accordion-xsm-content-gap: var(--gog-space-2);
|
|
540
|
-
--gog-accordion-xsm-body-font-size: var(--gog-text-xs);
|
|
541
|
-
--gog-accordion-xsm-body-line-height: var(--gog-line-height-relaxed);
|
|
542
|
-
--gog-accordion-xsm-body-padding-top: var(--gog-space-4);
|
|
543
|
-
--gog-accordion-xsm-body-padding-bottom: var(--gog-space-6);
|
|
544
|
-
--gog-accordion-xsm-chevron-size: 11px;
|
|
545
|
-
--gog-accordion-xsm-chevron-font-size: 10px;
|
|
546
|
-
|
|
547
|
-
--gog-accordion-sm-padding-y: var(--gog-space-6);
|
|
548
|
-
--gog-accordion-sm-padding-x: var(--gog-space-10);
|
|
549
|
-
--gog-accordion-sm-font-size: var(--gog-text-xs);
|
|
550
|
-
--gog-accordion-sm-letter-spacing: 0.4px;
|
|
551
|
-
--gog-accordion-sm-content-gap: var(--gog-space-2);
|
|
552
|
-
--gog-accordion-sm-body-font-size: var(--gog-text-xs);
|
|
553
|
-
--gog-accordion-sm-body-line-height: var(--gog-accordion-body-line-height);
|
|
554
|
-
--gog-accordion-sm-body-padding-top: var(--gog-space-6);
|
|
555
|
-
--gog-accordion-sm-body-padding-bottom: var(--gog-space-8);
|
|
556
|
-
--gog-accordion-sm-chevron-size: 13px;
|
|
557
|
-
--gog-accordion-sm-chevron-font-size: 12px;
|
|
558
|
-
|
|
559
|
-
--gog-accordion-md-padding-y: var(--gog-space-10);
|
|
560
|
-
--gog-accordion-md-padding-x: var(--gog-space-14);
|
|
561
|
-
--gog-accordion-md-font-size: var(--gog-text-xs);
|
|
562
|
-
--gog-accordion-md-letter-spacing: 0.8px;
|
|
563
|
-
--gog-accordion-md-content-gap: var(--gog-space-2);
|
|
564
|
-
--gog-accordion-md-body-font-size: var(--gog-text-sm);
|
|
565
|
-
--gog-accordion-md-body-line-height: var(--gog-accordion-body-line-height);
|
|
566
|
-
--gog-accordion-md-body-padding-top: var(--gog-space-8);
|
|
567
|
-
--gog-accordion-md-body-padding-bottom: var(--gog-space-12);
|
|
568
|
-
--gog-accordion-md-chevron-size: 15px;
|
|
569
|
-
--gog-accordion-md-chevron-font-size: 14px;
|
|
570
|
-
|
|
571
|
-
--gog-accordion-lg-padding-y: var(--gog-space-14);
|
|
572
|
-
--gog-accordion-lg-padding-x: var(--gog-space-16);
|
|
573
|
-
--gog-accordion-lg-font-size: var(--gog-text-sm);
|
|
574
|
-
--gog-accordion-lg-letter-spacing: 0.8px;
|
|
575
|
-
--gog-accordion-lg-content-gap: var(--gog-space-4);
|
|
576
|
-
--gog-accordion-lg-body-font-size: var(--gog-text-md);
|
|
577
|
-
--gog-accordion-lg-body-line-height: var(--gog-accordion-body-line-height);
|
|
578
|
-
--gog-accordion-lg-body-padding-top: var(--gog-space-12);
|
|
579
|
-
--gog-accordion-lg-body-padding-bottom: var(--gog-space-16);
|
|
580
|
-
--gog-accordion-lg-chevron-size: 18px;
|
|
581
|
-
--gog-accordion-lg-chevron-font-size: 16px;
|
|
582
|
-
|
|
583
|
-
--gog-accordion-slg-padding-y: var(--gog-space-18);
|
|
584
|
-
--gog-accordion-slg-padding-x: var(--gog-space-18);
|
|
585
|
-
--gog-accordion-slg-font-size: var(--gog-text-md);
|
|
586
|
-
--gog-accordion-slg-letter-spacing: 0.8px;
|
|
587
|
-
--gog-accordion-slg-content-gap: var(--gog-space-4);
|
|
588
|
-
--gog-accordion-slg-body-font-size: var(--gog-text-lg);
|
|
589
|
-
--gog-accordion-slg-body-line-height: var(--gog-accordion-body-line-height);
|
|
590
|
-
--gog-accordion-slg-body-padding-top: var(--gog-space-16);
|
|
591
|
-
--gog-accordion-slg-body-padding-bottom: var(--gog-space-20);
|
|
592
|
-
--gog-accordion-slg-chevron-size: 20px;
|
|
593
|
-
--gog-accordion-slg-chevron-font-size: 18px;
|
|
594
|
-
|
|
595
|
-
/* ── Collapsible ───────────────────────────────────────────────────────────
|
|
596
|
-
No portal, no owned markup — see utilities.css for the actual `.gog-collapsible__*`
|
|
597
|
-
rules (they style content this component's consumer projects, which sits outside
|
|
598
|
-
`gog-collapsible`'s own view and can't be reached by its scoped stylesheet). */
|
|
599
|
-
--gog-collapsible-transition-duration: var(--gog-duration-slow);
|
|
600
|
-
/* The panel's natural height, so an open panel never truncates whatever it holds. This was
|
|
601
|
-
a fixed `480px` cap, which bought the CSS-only transition an animatable target but paid
|
|
602
|
-
for it by silently clipping any taller content — `overflow: hidden` means no scrollbar
|
|
603
|
-
and no other sign that the rest of the panel is missing. `max-content` still animates,
|
|
604
|
-
via `interpolate-size: allow-keywords` on the content element (see utilities.css); where
|
|
605
|
-
that is unsupported the panel snaps open instead of easing, which is the right way round
|
|
606
|
-
for the trade — losing an animation is visible and harmless, losing content is neither.
|
|
607
|
-
Set a length here to cap a particular panel on purpose; it will clip, as before. */
|
|
608
|
-
--gog-collapsible-max-height: max-content;
|
|
609
|
-
--gog-collapsible-disabled-opacity: var(--gog-disabled-opacity);
|
|
610
|
-
|
|
611
|
-
/* ── Button ────────────────────────────────────────────────────────────────
|
|
612
|
-
`--gog-button-bg`, `--gog-button-color`, `--gog-button-border`, `--gog-button-shadow`,
|
|
613
|
-
`--gog-button-hover-bg`, `--gog-button-hover-shadow`, `--gog-button-padding` and
|
|
614
|
-
`--gog-button-font-size` are intentionally NOT declared — they are the per-instance
|
|
615
|
-
escape hatch the variant/size classes fall back through. */
|
|
616
|
-
--gog-button-xsm-padding: var(--gog-space-4) var(--gog-space-8);
|
|
617
|
-
--gog-button-sm-padding: var(--gog-space-8) var(--gog-space-14);
|
|
618
|
-
--gog-button-md-padding: var(--gog-space-12) var(--gog-space-20);
|
|
619
|
-
--gog-button-lg-padding: var(--gog-space-16) var(--gog-space-24);
|
|
620
|
-
--gog-button-slg-padding: var(--gog-space-20) var(--gog-space-28);
|
|
621
|
-
--gog-button-xsm-font-size: var(--gog-text-xs);
|
|
622
|
-
--gog-button-sm-font-size: var(--gog-text-sm);
|
|
623
|
-
--gog-button-md-font-size: var(--gog-text-md);
|
|
624
|
-
--gog-button-lg-font-size: var(--gog-text-lg);
|
|
625
|
-
--gog-button-slg-font-size: var(--gog-text-slg);
|
|
626
|
-
|
|
627
|
-
--gog-button-font-family: var(--gog-font-heading);
|
|
628
|
-
--gog-button-font-weight: var(--gog-font-weight-heavy);
|
|
629
|
-
--gog-button-letter-spacing: var(--gog-letter-spacing);
|
|
630
|
-
--gog-button-text-transform: var(--gog-text-transform);
|
|
631
|
-
--gog-button-line-height: var(--gog-line-height-none);
|
|
632
|
-
--gog-button-gap: var(--gog-space-sm);
|
|
633
|
-
--gog-button-radius: var(--gog-radius);
|
|
634
|
-
--gog-button-border-width: var(--gog-control-border-width);
|
|
635
|
-
--gog-button-border-style: var(--gog-control-border-style);
|
|
636
|
-
--gog-button-transition-duration: var(--gog-duration-base);
|
|
637
|
-
--gog-button-focus-ring-width: var(--gog-focus-ring-width);
|
|
638
|
-
/* One pixel further out than the foundation ring: a filled surface needs the extra air for
|
|
639
|
-
the ring to read as separate from the fill. Written as the foundation plus that pixel
|
|
640
|
-
rather than a flat 3px, so a theme that moves the ring moves this with it. */
|
|
641
|
-
--gog-button-focus-ring-offset: calc(var(--gog-focus-ring-offset) + 1px);
|
|
642
|
-
/* Shipped since before the press had a colour, and left spelled `active` on purpose: renaming
|
|
643
|
-
a token consumers already override needs a deprecation cycle, and this is a patch. The state
|
|
644
|
-
it names is the same one `--gog-button-press-*` paints. */
|
|
645
|
-
--gog-button-active-scale: 0.97;
|
|
646
|
-
--gog-button-disabled-opacity: var(--gog-disabled-opacity);
|
|
647
|
-
--gog-button-loading-opacity: 0.7;
|
|
648
|
-
--gog-button-spinner-max-size: 70%;
|
|
649
|
-
|
|
650
|
-
--gog-button-primary-bg: var(--gog-accent-color);
|
|
651
|
-
--gog-button-primary-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
652
|
-
--gog-button-primary-border: transparent;
|
|
653
|
-
--gog-button-primary-shadow: none;
|
|
654
|
-
--gog-button-primary-hover-bg: var(--gog-accent-bright);
|
|
655
|
-
--gog-button-primary-hover-color: var(--gog-button-primary-color);
|
|
656
|
-
--gog-button-primary-hover-shadow: 0 0 16px var(--gog-accent-pale);
|
|
657
|
-
/* The label's colour, not the page's. `--gog-text-color` is the colour of text on the page
|
|
658
|
-
background, and a filled button is not the page background — on the dark theme that put pale
|
|
659
|
-
parchment on bright amber, which read as a washed-out spinner beside a near-black label. */
|
|
660
|
-
--gog-button-primary-spinner-color: var(--gog-button-primary-color);
|
|
661
|
-
|
|
662
|
-
--gog-button-secondary-bg: var(--gog-secondary-color);
|
|
663
|
-
--gog-button-secondary-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
664
|
-
--gog-button-secondary-border: transparent;
|
|
665
|
-
--gog-button-secondary-shadow: none;
|
|
666
|
-
--gog-button-secondary-hover-bg: var(--gog-accent-color);
|
|
667
|
-
--gog-button-secondary-hover-color: var(--gog-button-secondary-color);
|
|
668
|
-
--gog-button-secondary-hover-shadow: none;
|
|
669
|
-
/* Same reasoning as primary: the other filled variant, the same mismatch. */
|
|
670
|
-
--gog-button-secondary-spinner-color: var(--gog-button-secondary-color);
|
|
671
|
-
|
|
672
|
-
--gog-button-outline-bg: transparent;
|
|
673
|
-
--gog-button-outline-color: var(--gog-accent-color);
|
|
674
|
-
--gog-button-outline-border: var(--gog-accent-color);
|
|
675
|
-
--gog-button-outline-shadow: none;
|
|
676
|
-
--gog-button-outline-hover-bg: var(--gog-accent-color);
|
|
677
|
-
/* The label sits on the accent fill once the button is hovered, so it takes the token that
|
|
678
|
-
means "text on an accent fill" — the same one the two filled variants use. It read
|
|
679
|
-
`--gog-primary-color` until 21.9.0, which is the colour of text on the *page*, and the
|
|
680
|
-
result failed WCAG AA in all 11 shipped themes: 1.11:1 in one-dark, 1.41:1 in dark, 3.65:1
|
|
681
|
-
in light at best. It was invisible to `check:contrast` because that script had no pair for
|
|
682
|
-
this label, the same way it had none for the hover fill until 2026-08-29. It has both now. */
|
|
683
|
-
--gog-button-outline-hover-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
684
|
-
--gog-button-outline-hover-shadow: none;
|
|
685
|
-
--gog-button-outline-spinner-color: var(--gog-accent-color);
|
|
686
|
-
|
|
687
|
-
--gog-button-ghost-bg: transparent;
|
|
688
|
-
--gog-button-ghost-color: var(--gog-accent-color);
|
|
689
|
-
--gog-button-ghost-border: transparent;
|
|
690
|
-
--gog-button-ghost-shadow: none;
|
|
691
|
-
--gog-button-ghost-hover-bg: var(--gog-hover-color);
|
|
692
|
-
/* The label leaves the accent while the ground is tinted, and that is the only thing that
|
|
693
|
-
works here. Ghost's resting label *is* `--gog-accent-color`, and its hover tints the ground
|
|
694
|
-
with the same accent, so the two walk toward each other: measured across all 11 themes, the
|
|
695
|
-
label fell under 4.5:1 in `light` (3.94), `primeng` (4.18) and `one-light` (4.22). No ground
|
|
696
|
-
fixes it — a half-strength wash, a neutral `--gog-hover-color`, a text scrim and an
|
|
697
|
-
accent-dim wash were all measured, and `light` fails every one of them, because
|
|
698
|
-
`--gog-accent-color` as *text* on that theme's own background is 4.60:1 with no headroom to
|
|
699
|
-
spend. Moving the label to `--gog-text-color` clears 5.29:1 at worst (one-dark) and leaves
|
|
700
|
-
the ground exactly as it was, so the hover stays the subtle wash this variant is documented
|
|
701
|
-
to have. The press then goes the other way and fills — see `-press-bg` below. */
|
|
702
|
-
--gog-button-ghost-hover-color: var(--gog-text-color);
|
|
703
|
-
--gog-button-ghost-hover-shadow: none;
|
|
704
|
-
--gog-button-ghost-spinner-color: var(--gog-accent-color);
|
|
705
|
-
|
|
706
|
-
/* The held state, and the reason it is a colour rather than only the `--gog-button-active-scale`
|
|
707
|
-
it used to be: `prefers-reduced-motion` switches that transform off, which left a button with
|
|
708
|
-
no press feedback at all for the readers most likely to need it. A colour change is a state,
|
|
709
|
-
not a movement — reduced motion keeps it and only drops the scale, and with transitions off it
|
|
710
|
-
lands instantly. See docs/feedback-triage.md's closing section: reduced motion must remove the
|
|
711
|
-
animation, not the information.
|
|
712
|
-
|
|
713
|
-
Each variant goes one step *deeper* than its own hover, so pressing is distinguishable while
|
|
714
|
-
hovering, which is the normal case for a pointer. `--gog-accent-dim` is that step for the
|
|
715
|
-
three accent-carrying variants; ghost has no fill of its own to deepen, so it takes a
|
|
716
|
-
stronger wash of the same tint its hover uses (see the @supports block at the end of this
|
|
717
|
-
file for the mixed value and why the flat one above it is not a fallback but the value). */
|
|
718
|
-
/* The *toggle* state — `aria-pressed="true"`, a button that stays on — as an inset ring rather
|
|
719
|
-
than a fill. A fill cannot carry it: every other state already owns the background, so a
|
|
720
|
-
toggled button that is also hovered or held would lose the one thing saying it is on. A ring
|
|
721
|
-
composes with all of them, and it is the same reasoning that made `gog-button-toggle-group`'s
|
|
722
|
-
selected option a fill: there, nothing else was competing for the background.
|
|
723
|
-
|
|
724
|
-
The ring takes the colour that is guaranteed to read on its own variant — the label colour on
|
|
725
|
-
the filled two, the accent on the transparent two — so both are pairs `check:contrast`
|
|
726
|
-
already gates. While toggled, this replaces the variant's `box-shadow`, which costs
|
|
727
|
-
`primary` its hover glow: the ring is state and the glow is decoration, and a `box-shadow`
|
|
728
|
-
list cannot hold `none` as a layer, so keeping both was not on offer. */
|
|
729
|
-
--gog-button-toggled-ring-width: 2px;
|
|
730
|
-
--gog-button-primary-toggled-shadow: inset 0 0 0 var(--gog-button-toggled-ring-width)
|
|
731
|
-
var(--gog-accent-text-color, var(--gog-primary-color));
|
|
732
|
-
--gog-button-secondary-toggled-shadow: var(--gog-button-primary-toggled-shadow);
|
|
733
|
-
--gog-button-outline-toggled-shadow: inset 0 0 0 var(--gog-button-toggled-ring-width)
|
|
734
|
-
var(--gog-accent-color);
|
|
735
|
-
--gog-button-ghost-toggled-shadow: var(--gog-button-outline-toggled-shadow);
|
|
736
|
-
|
|
737
|
-
--gog-button-primary-press-bg: var(--gog-accent-dim);
|
|
738
|
-
--gog-button-primary-press-color: var(--gog-button-primary-color);
|
|
739
|
-
--gog-button-secondary-press-bg: var(--gog-accent-dim);
|
|
740
|
-
--gog-button-secondary-press-color: var(--gog-button-secondary-color);
|
|
741
|
-
--gog-button-outline-press-bg: var(--gog-accent-dim);
|
|
742
|
-
--gog-button-outline-press-color: var(--gog-button-outline-hover-color);
|
|
743
|
-
/* Ghost presses to the same deep fill as outline, rather than to a wash like every other
|
|
744
|
-
surface in this file. Measured across all 11 themes: a wash cannot work here, because this
|
|
745
|
-
button's *label* is the accent, so tinting its ground with the accent walks the two together
|
|
746
|
-
— a 24% wash put the label under 4.5:1 in seven themes, and `--gog-accent-pale` was either
|
|
747
|
-
no better or invisible against the hover. A filled press moves the label to
|
|
748
|
-
`--gog-accent-text-color` instead, which is the pair `check:contrast` already gates, so no
|
|
749
|
-
future theme can quietly break it. The other eight surfaces keep their washes: their labels
|
|
750
|
-
are body text, and their worst case across the 11 is 4.80:1. */
|
|
751
|
-
--gog-button-ghost-press-bg: var(--gog-accent-dim);
|
|
752
|
-
--gog-button-ghost-press-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
753
|
-
|
|
754
|
-
/* ── Button severity ─────────────────────────────────────────────────────────
|
|
755
|
-
`severity` is orthogonal to `variant`: a destructive action can be a filled button, an
|
|
756
|
-
outlined one or a ghost, and it is still destructive. So this is not a fifth variant — it
|
|
757
|
-
re-points the *ingredients* the four variants are built from, and the shape rules in
|
|
758
|
-
`styles/button.css` apply them per variant. Four severities x six ingredients rather than
|
|
759
|
-
four x four variants x eleven properties, which is what a fifth-variant reading would have
|
|
760
|
-
cost.
|
|
761
|
-
|
|
762
|
-
`-fill` and `-on-fill` are the filled pair, and `-on-fill` is `--gog-<status>-text-color`
|
|
763
|
-
rather than `--gog-accent-text-color`: see that block near the top of this file for why one
|
|
764
|
-
label does not read on every status.
|
|
765
|
-
|
|
766
|
-
`-ink` is the label a *transparent* variant paints, and it is not the raw status colour. As
|
|
767
|
-
text on the page, the raw hue clears 4.5:1 in only five of the eleven themes — `primeng`'s
|
|
768
|
-
amber manages 2.05:1 — so it is mixed toward the theme's own ink until it does. The 50% is
|
|
769
|
-
measured rather than chosen: `material`'s amber is the binding case and needs the hue below
|
|
770
|
-
54%, so 50 clears every theme with a little headroom. It costs saturation on the themes that
|
|
771
|
-
never needed it; a theme that wants the colour back overrides `--gog-button-<status>-ink`
|
|
772
|
-
directly, which is one token rather than a dial nobody would find. Mixing toward `--gog-text-color` rather than a
|
|
773
|
-
fixed black is what makes one number work on light and dark alike — the ink is dark on one
|
|
774
|
-
and light on the other, and both directions move *away* from the ground.
|
|
775
|
-
|
|
776
|
-
The hover and press fills move the same way, one small step and one larger, so a severity
|
|
777
|
-
button's states step the way an accent one's do. Moving toward the ink also moves away from
|
|
778
|
-
`-on-fill` in the seven themes where that is the accent's white-or-near-black, so the label
|
|
779
|
-
gets easier rather than harder; in the four where `-on-fill` *is* the ink, the rest state
|
|
780
|
-
starts at 6.44:1 or better and a 24% step cannot spend that. The flat values here are what a
|
|
781
|
-
browser without `color-mix()` renders — no step, the same graceful nothing the ghost button
|
|
782
|
-
degrades to — and the mixed ones are in the @supports block at the end of this file. */
|
|
783
|
-
--gog-button-success-fill: var(--gog-success-color);
|
|
784
|
-
--gog-button-success-on-fill: var(--gog-success-text-color);
|
|
785
|
-
--gog-button-success-fill-hover: var(--gog-success-color);
|
|
786
|
-
--gog-button-success-fill-press: var(--gog-success-color);
|
|
787
|
-
--gog-button-success-ink: var(--gog-success-color);
|
|
788
|
-
--gog-button-success-wash: transparent;
|
|
789
|
-
|
|
790
|
-
--gog-button-danger-fill: var(--gog-danger-color);
|
|
791
|
-
--gog-button-danger-on-fill: var(--gog-danger-text-color);
|
|
792
|
-
--gog-button-danger-fill-hover: var(--gog-danger-color);
|
|
793
|
-
--gog-button-danger-fill-press: var(--gog-danger-color);
|
|
794
|
-
--gog-button-danger-ink: var(--gog-danger-color);
|
|
795
|
-
--gog-button-danger-wash: transparent;
|
|
796
|
-
|
|
797
|
-
--gog-button-warning-fill: var(--gog-warning-color);
|
|
798
|
-
--gog-button-warning-on-fill: var(--gog-warning-text-color);
|
|
799
|
-
--gog-button-warning-fill-hover: var(--gog-warning-color);
|
|
800
|
-
--gog-button-warning-fill-press: var(--gog-warning-color);
|
|
801
|
-
--gog-button-warning-ink: var(--gog-warning-color);
|
|
802
|
-
--gog-button-warning-wash: transparent;
|
|
803
|
-
|
|
804
|
-
--gog-button-info-fill: var(--gog-info-color);
|
|
805
|
-
--gog-button-info-on-fill: var(--gog-info-text-color);
|
|
806
|
-
--gog-button-info-fill-hover: var(--gog-info-color);
|
|
807
|
-
--gog-button-info-fill-press: var(--gog-info-color);
|
|
808
|
-
--gog-button-info-ink: var(--gog-info-color);
|
|
809
|
-
--gog-button-info-wash: transparent;
|
|
810
|
-
|
|
811
|
-
/* ── Button toggle group ───────────────────────────────────────────────────
|
|
812
|
-
`--gog-button-toggle-bg`, `-color`, `-padding` and `-font-size` are intentionally NOT
|
|
813
|
-
declared — they are the per-instance escape hatch the size classes fall back through.
|
|
814
|
-
Padding/font-size reuse the `--gog-button-<size>-*` scale so a toggle group and a
|
|
815
|
-
`<gog-button>` at the same `size` line up in a toolbar. */
|
|
816
|
-
--gog-button-toggle-font-family: var(--gog-font-heading);
|
|
817
|
-
--gog-button-toggle-font-weight: var(--gog-font-weight-bold);
|
|
818
|
-
--gog-button-toggle-letter-spacing: 0.5px;
|
|
819
|
-
--gog-button-toggle-text-transform: var(--gog-text-transform);
|
|
820
|
-
--gog-button-toggle-line-height: var(--gog-line-height-none);
|
|
821
|
-
--gog-button-toggle-gap: var(--gog-space-sm);
|
|
822
|
-
--gog-button-toggle-icon-size: 1.1em;
|
|
823
|
-
--gog-button-toggle-radius: var(--gog-radius);
|
|
824
|
-
--gog-button-toggle-border-width: var(--gog-control-border-width);
|
|
825
|
-
--gog-button-toggle-border-style: var(--gog-control-border-style);
|
|
826
|
-
--gog-button-toggle-border-color: var(--gog-border-color);
|
|
827
|
-
--gog-button-toggle-rest-bg: transparent;
|
|
828
|
-
--gog-button-toggle-rest-color: var(--gog-text-color);
|
|
829
|
-
--gog-button-toggle-hover-bg: var(--gog-hover-color);
|
|
830
|
-
--gog-button-toggle-press-bg: var(--gog-border-color);
|
|
831
|
-
--gog-button-toggle-hover-color: var(--gog-text-color);
|
|
832
|
-
--gog-button-toggle-selected-bg: var(--gog-accent-color);
|
|
833
|
-
--gog-button-toggle-selected-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
834
|
-
--gog-button-toggle-selected-border-color: var(--gog-accent-color);
|
|
835
|
-
/* A selected option is already filled with the accent, so its press deepens the fill the way
|
|
836
|
-
the filled button variants do rather than washing over it. */
|
|
837
|
-
--gog-button-toggle-selected-press-bg: var(--gog-accent-dim);
|
|
838
|
-
--gog-button-toggle-separated-gap: var(--gog-space-sm);
|
|
839
|
-
--gog-button-toggle-transition-duration: var(--gog-duration-base);
|
|
840
|
-
--gog-button-toggle-disabled-opacity: var(--gog-disabled-opacity);
|
|
841
|
-
--gog-button-toggle-focus-ring-width: var(--gog-focus-ring-width);
|
|
842
|
-
--gog-button-toggle-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
843
|
-
--gog-button-toggle-focus-ring-color: var(--gog-accent-color);
|
|
844
|
-
|
|
845
|
-
/* ── Calendar (the month grid inside gog-datepicker, and gog-calendar on its own) ── */
|
|
846
|
-
--gog-calendar-font-family: var(--gog-font-body);
|
|
847
|
-
--gog-calendar-color: var(--gog-text-color);
|
|
848
|
-
/* Caps the host at its month grid instead of letting the header spread to the container.
|
|
849
|
-
`100%` restores the pre-21.5.0 full-width behaviour. */
|
|
850
|
-
--gog-calendar-max-width: max-content;
|
|
851
|
-
--gog-calendar-padding: var(--gog-space-12);
|
|
852
|
-
--gog-calendar-header-gap: var(--gog-space-4);
|
|
853
|
-
--gog-calendar-header-margin: var(--gog-space-8);
|
|
854
|
-
--gog-calendar-months-gap: var(--gog-space-16);
|
|
855
|
-
--gog-calendar-title-color: var(--gog-text-color);
|
|
856
|
-
--gog-calendar-title-font-weight: var(--gog-font-weight-bold);
|
|
857
|
-
--gog-calendar-nav-size: 28px;
|
|
858
|
-
--gog-calendar-nav-radius: calc(var(--gog-radius) - 2px);
|
|
859
|
-
--gog-calendar-nav-bg: transparent;
|
|
860
|
-
--gog-calendar-nav-color: var(--gog-muted-text-color);
|
|
861
|
-
--gog-calendar-nav-hover-bg: var(--gog-hover-color);
|
|
862
|
-
--gog-calendar-nav-hover-color: var(--gog-text-color);
|
|
863
|
-
--gog-calendar-nav-icon-size: 0.8rem;
|
|
864
|
-
/* Pulls the two chevrons of a year step together so they read as one control. */
|
|
865
|
-
--gog-calendar-nav-icon-overlap: -0.35em;
|
|
866
|
-
--gog-calendar-weekday-padding: var(--gog-space-4) 0;
|
|
867
|
-
--gog-calendar-weekday-color: var(--gog-muted-text-color);
|
|
868
|
-
--gog-calendar-weekday-font-size: var(--gog-text-xs);
|
|
869
|
-
--gog-calendar-weekday-font-weight: var(--gog-font-weight-semibold);
|
|
870
|
-
--gog-calendar-weekday-text-transform: var(--gog-text-transform);
|
|
871
|
-
--gog-calendar-day-radius: calc(var(--gog-radius) - 2px);
|
|
872
|
-
--gog-calendar-day-border-width: var(--gog-border-width);
|
|
873
|
-
--gog-calendar-day-border-style: var(--gog-border-style);
|
|
874
|
-
--gog-calendar-day-rest-bg: transparent;
|
|
875
|
-
--gog-calendar-day-rest-color: var(--gog-text-color);
|
|
876
|
-
--gog-calendar-day-hover-bg: var(--gog-hover-color);
|
|
877
|
-
--gog-calendar-day-outside-color: var(--gog-muted-text-color);
|
|
878
|
-
--gog-calendar-today-border-color: var(--gog-accent-color);
|
|
879
|
-
--gog-calendar-today-font-weight: var(--gog-font-weight-bold);
|
|
880
|
-
--gog-calendar-selected-bg: var(--gog-accent-color);
|
|
881
|
-
--gog-calendar-selected-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
882
|
-
--gog-calendar-selected-font-weight: var(--gog-font-weight-bold);
|
|
883
|
-
/* The wash between the two ends of a range: same hue, low enough to read as a band rather
|
|
884
|
-
than as a second selection. */
|
|
885
|
-
--gog-calendar-range-bg: var(--gog-accent-pale);
|
|
886
|
-
--gog-calendar-range-color: var(--gog-text-color);
|
|
887
|
-
--gog-calendar-disabled-opacity: var(--gog-disabled-opacity);
|
|
888
|
-
--gog-calendar-transition-duration: var(--gog-duration-fast);
|
|
889
|
-
--gog-calendar-focus-ring-width: var(--gog-focus-ring-width);
|
|
890
|
-
/* Inset rather than outset: the month grid packs its cells edge to edge, so an outward ring
|
|
891
|
-
would sit on top of the neighbouring day. Negated from the foundation so a theme still
|
|
892
|
-
controls how far it sits from the cell edge. */
|
|
893
|
-
--gog-calendar-focus-ring-offset: calc(var(--gog-focus-ring-offset) * -1);
|
|
894
|
-
--gog-calendar-focus-ring-color: var(--gog-accent-color);
|
|
895
|
-
--gog-calendar-divider-width: 1px;
|
|
896
|
-
--gog-calendar-divider-style: solid;
|
|
897
|
-
--gog-calendar-divider-color: var(--gog-border-color);
|
|
898
|
-
--gog-calendar-time-gap: var(--gog-space-6);
|
|
899
|
-
--gog-calendar-time-margin: var(--gog-space-10);
|
|
900
|
-
--gog-calendar-time-input-width: 3.5rem;
|
|
901
|
-
--gog-calendar-time-input-padding: var(--gog-space-4) var(--gog-space-6);
|
|
902
|
-
--gog-calendar-time-input-bg: var(--gog-background-color);
|
|
903
|
-
--gog-calendar-action-padding: var(--gog-space-4) var(--gog-space-10);
|
|
904
|
-
--gog-calendar-footer-gap: var(--gog-space-8);
|
|
905
|
-
--gog-calendar-xsm-font-size: var(--gog-text-xs);
|
|
906
|
-
--gog-calendar-xsm-day-size: 24px;
|
|
907
|
-
--gog-calendar-sm-font-size: var(--gog-text-sm);
|
|
908
|
-
--gog-calendar-sm-day-size: 28px;
|
|
909
|
-
--gog-calendar-md-font-size: var(--gog-text-sm);
|
|
910
|
-
--gog-calendar-md-day-size: 34px;
|
|
911
|
-
--gog-calendar-lg-font-size: var(--gog-text-md);
|
|
912
|
-
--gog-calendar-lg-day-size: 40px;
|
|
913
|
-
--gog-calendar-slg-font-size: var(--gog-text-lg);
|
|
914
|
-
--gog-calendar-slg-day-size: 46px;
|
|
915
|
-
|
|
916
|
-
/* ── Card ──────────────────────────────────────────────────────────────────
|
|
917
|
-
`--gog-card-bg`, `--gog-card-border-color`, `--gog-card-shadow`, `--gog-card-padding-y`,
|
|
918
|
-
`--gog-card-padding-x` and `--gog-card-gap` are intentionally NOT declared — they are the
|
|
919
|
-
per-instance escape hatch the variant and size classes fall back through. */
|
|
920
|
-
--gog-card-font-family: var(--gog-font-body);
|
|
921
|
-
--gog-card-color: var(--gog-text-color);
|
|
922
|
-
--gog-card-radius: var(--gog-radius);
|
|
923
|
-
--gog-card-border-width: var(--gog-panel-border-width);
|
|
924
|
-
--gog-card-border-style: var(--gog-panel-border-style);
|
|
925
|
-
--gog-card-transition-duration: var(--gog-duration-base);
|
|
926
|
-
|
|
927
|
-
--gog-card-heading-color: var(--gog-text-color);
|
|
928
|
-
--gog-card-heading-font-family: var(--gog-font-heading);
|
|
929
|
-
--gog-card-heading-font-size: var(--gog-text-lg);
|
|
930
|
-
--gog-card-heading-font-weight: var(--gog-font-weight-semibold);
|
|
931
|
-
--gog-card-heading-line-height: var(--gog-line-height-snug);
|
|
932
|
-
|
|
933
|
-
--gog-card-outlined-bg: var(--gog-surface-color);
|
|
934
|
-
--gog-card-outlined-border-color: var(--gog-border-color);
|
|
935
|
-
--gog-card-outlined-shadow: none;
|
|
936
|
-
--gog-card-elevated-bg: var(--gog-elevated-surface-color);
|
|
937
|
-
--gog-card-elevated-border-color: transparent;
|
|
938
|
-
/* The shared surface shadow, so a card sits at the same elevation as a dialog or a
|
|
939
|
-
dropdown panel instead of inventing a second house style for "raised". */
|
|
940
|
-
--gog-card-elevated-shadow: var(--gog-panel-shadow);
|
|
941
|
-
--gog-card-filled-bg: var(--gog-accent-pale);
|
|
942
|
-
--gog-card-filled-border-color: transparent;
|
|
943
|
-
--gog-card-filled-shadow: none;
|
|
944
|
-
|
|
945
|
-
/* Hover and focus only ever show on a card that holds a `gogCardLink`. */
|
|
946
|
-
--gog-card-hover-border-color: var(--gog-accent-dim);
|
|
947
|
-
--gog-card-hover-shadow: var(--gog-panel-shadow);
|
|
948
|
-
--gog-card-focus-ring: var(--gog-accent-color);
|
|
949
|
-
--gog-card-focus-ring-width: var(--gog-focus-ring-width);
|
|
950
|
-
--gog-card-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
951
|
-
--gog-card-disabled-opacity: var(--gog-disabled-opacity);
|
|
952
|
-
|
|
953
|
-
--gog-card-footer-border-color: var(--gog-border-color);
|
|
954
|
-
--gog-card-footer-gap: var(--gog-space-sm);
|
|
955
|
-
--gog-card-footer-padding-top: var(--gog-space-sm);
|
|
956
|
-
|
|
957
|
-
--gog-card-xsm-padding-y: var(--gog-space-8);
|
|
958
|
-
--gog-card-xsm-padding-x: var(--gog-space-10);
|
|
959
|
-
--gog-card-xsm-gap: var(--gog-space-6);
|
|
960
|
-
--gog-card-sm-padding-y: var(--gog-space-12);
|
|
961
|
-
--gog-card-sm-padding-x: var(--gog-space-14);
|
|
962
|
-
--gog-card-sm-gap: var(--gog-space-sm);
|
|
963
|
-
--gog-card-md-padding-y: var(--gog-space-md);
|
|
964
|
-
--gog-card-md-padding-x: var(--gog-space-20);
|
|
965
|
-
--gog-card-md-gap: var(--gog-space-12);
|
|
966
|
-
--gog-card-lg-padding-y: var(--gog-space-20);
|
|
967
|
-
--gog-card-lg-padding-x: var(--gog-space-lg);
|
|
968
|
-
--gog-card-lg-gap: var(--gog-space-14);
|
|
969
|
-
--gog-card-slg-padding-y: var(--gog-space-28);
|
|
970
|
-
--gog-card-slg-padding-x: var(--gog-space-32);
|
|
971
|
-
--gog-card-slg-gap: var(--gog-space-md);
|
|
972
|
-
|
|
973
|
-
/* ── Checkbox ──────────────────────────────────────────────────────────────
|
|
974
|
-
Box/label/icon size and padding come from the `--gog-control-checkbox-*` scale;
|
|
975
|
-
checkbox.component.ts maps the `size` input onto the host. */
|
|
976
|
-
--gog-checkbox-font-family: var(--gog-font-body);
|
|
977
|
-
--gog-checkbox-gap: var(--gog-space-10);
|
|
978
|
-
--gog-checkbox-radius: var(--gog-radius);
|
|
979
|
-
--gog-checkbox-border-width: var(--gog-control-border-width);
|
|
980
|
-
--gog-checkbox-border-style: var(--gog-control-border-style);
|
|
981
|
-
--gog-checkbox-border-color: var(--gog-accent-dim);
|
|
982
|
-
--gog-checkbox-bg: var(--gog-surface-color);
|
|
983
|
-
--gog-checkbox-checked-bg: var(--gog-accent-color);
|
|
984
|
-
--gog-checkbox-checked-border: var(--gog-accent-color);
|
|
985
|
-
--gog-checkbox-icon-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
986
|
-
--gog-checkbox-label-color: var(--gog-muted-text-color);
|
|
987
|
-
--gog-checkbox-label-line-height: var(--gog-line-height-snug);
|
|
988
|
-
--gog-checkbox-focus-ring: var(--gog-accent-pale);
|
|
989
|
-
--gog-checkbox-focus-ring-width: var(--gog-focus-ring-width);
|
|
990
|
-
--gog-checkbox-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
991
|
-
--gog-checkbox-disabled-opacity: var(--gog-disabled-opacity);
|
|
992
|
-
--gog-checkbox-transition-duration: var(--gog-duration-base);
|
|
993
|
-
--gog-checkbox-dash-width-ratio: 0.45;
|
|
994
|
-
--gog-checkbox-dash-height: 2px;
|
|
995
|
-
--gog-checkbox-dash-radius: 999px;
|
|
996
|
-
|
|
997
|
-
/* ── Radio group ───────────────────────────────────────────────────────────
|
|
998
|
-
Box/label size reuse the `--gog-control-checkbox-*` scale (see Checkbox above);
|
|
999
|
-
radio-group.component.ts maps the `size` input onto the host the same way. */
|
|
1000
|
-
--gog-radio-font-family: var(--gog-font-body);
|
|
1001
|
-
--gog-radio-group-gap: var(--gog-space-10);
|
|
1002
|
-
--gog-radio-group-label-size: var(--gog-text-sm);
|
|
1003
|
-
--gog-radio-group-label-color: var(--gog-muted-text-color);
|
|
1004
|
-
--gog-radio-group-option-gap: var(--gog-space-8);
|
|
1005
|
-
--gog-radio-group-option-gap-horizontal: var(--gog-space-20);
|
|
1006
|
-
--gog-radio-gap: var(--gog-space-10);
|
|
1007
|
-
--gog-radio-border-width: var(--gog-control-border-width);
|
|
1008
|
-
--gog-radio-border-style: var(--gog-control-border-style);
|
|
1009
|
-
--gog-radio-border-color: var(--gog-accent-dim);
|
|
1010
|
-
--gog-radio-bg: var(--gog-surface-color);
|
|
1011
|
-
--gog-radio-checked-bg: var(--gog-surface-color);
|
|
1012
|
-
--gog-radio-checked-border: var(--gog-accent-color);
|
|
1013
|
-
--gog-radio-dot-color: var(--gog-accent-color);
|
|
1014
|
-
--gog-radio-dot-size-ratio: 0.45;
|
|
1015
|
-
--gog-radio-label-color: var(--gog-muted-text-color);
|
|
1016
|
-
--gog-radio-label-line-height: var(--gog-line-height-snug);
|
|
1017
|
-
--gog-radio-focus-ring: var(--gog-accent-pale);
|
|
1018
|
-
--gog-radio-focus-ring-width: var(--gog-focus-ring-width);
|
|
1019
|
-
--gog-radio-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
1020
|
-
--gog-radio-disabled-opacity: var(--gog-disabled-opacity);
|
|
1021
|
-
--gog-radio-transition-duration: var(--gog-duration-base);
|
|
1022
|
-
--gog-radio-error-font-size: var(--gog-text-xs);
|
|
1023
|
-
--gog-radio-error-color: var(--gog-danger-color);
|
|
1024
|
-
|
|
1025
|
-
/* ── Chip ──────────────────────────────────────────────────────────────────
|
|
1026
|
-
`--gog-chip-*` size tokens below are the per-size scale; the unsuffixed
|
|
1027
|
-
`--gog-chip-font-size`/`-padding-*`/`-gap`/`-avatar-size`/`-icon-size`/
|
|
1028
|
-
`-remove-size` are left undeclared as the per-instance escape hatch. */
|
|
1029
|
-
--gog-chip-font-family: inherit;
|
|
1030
|
-
--gog-chip-bg: var(--gog-surface-color);
|
|
1031
|
-
--gog-chip-hover-bg: var(--gog-hover-color);
|
|
1032
|
-
--gog-chip-press-bg: var(--gog-border-color);
|
|
1033
|
-
--gog-chip-border: var(--gog-border-color);
|
|
1034
|
-
--gog-chip-border-width: var(--gog-border-width);
|
|
1035
|
-
--gog-chip-border-style: var(--gog-border-style);
|
|
1036
|
-
--gog-chip-color: var(--gog-text-color);
|
|
1037
|
-
--gog-chip-font-weight: var(--gog-font-weight-medium);
|
|
1038
|
-
--gog-chip-line-height: var(--gog-line-height-tight);
|
|
1039
|
-
--gog-chip-radius: max(var(--gog-radius), 2px);
|
|
1040
|
-
--gog-chip-pill-radius: 9999px;
|
|
1041
|
-
--gog-chip-remove-color: var(--gog-muted-text-color);
|
|
1042
|
-
--gog-chip-remove-hover-color: var(--gog-text-color);
|
|
1043
|
-
--gog-chip-remove-scale: 1.1;
|
|
1044
|
-
--gog-chip-avatar-inset-ratio: 0.9;
|
|
1045
|
-
--gog-chip-remove-inset-ratio: 0.85;
|
|
1046
|
-
--gog-chip-disabled-opacity: var(--gog-disabled-opacity);
|
|
1047
|
-
/* A selected filter chip (`[(selected)]`, 21.9.0). An inset ring for the reason
|
|
1048
|
-
`--gog-button-primary-toggled-shadow` gives: hover and press own the background, and a
|
|
1049
|
-
selected chip has to stay selected while it is also hovered or held. The accent, so it is
|
|
1050
|
-
the same pair the focus ring is already gated on — and unlike the button there is only one
|
|
1051
|
-
chip variant, so one token covers it. Override this token on the host to restyle a single
|
|
1052
|
-
chip. */
|
|
1053
|
-
--gog-chip-selected-ring-width: 2px;
|
|
1054
|
-
--gog-chip-selected-shadow: inset 0 0 0 var(--gog-chip-selected-ring-width)
|
|
1055
|
-
var(--gog-accent-color);
|
|
1056
|
-
--gog-chip-focus-ring-width: 2px;
|
|
1057
|
-
--gog-chip-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
1058
|
-
|
|
1059
|
-
--gog-chip-xsm-font-size: 0.6875rem;
|
|
1060
|
-
--gog-chip-xsm-padding-block: var(--gog-space-4);
|
|
1061
|
-
--gog-chip-xsm-padding-inline: var(--gog-space-6);
|
|
1062
|
-
--gog-chip-xsm-gap: var(--gog-space-4);
|
|
1063
|
-
--gog-chip-xsm-avatar-size: 0.875rem;
|
|
1064
|
-
--gog-chip-xsm-icon-size: 0.6875rem;
|
|
1065
|
-
--gog-chip-xsm-remove-size: 0.75rem;
|
|
1066
|
-
|
|
1067
|
-
--gog-chip-sm-font-size: var(--gog-text-xs);
|
|
1068
|
-
--gog-chip-sm-padding-block: var(--gog-space-4);
|
|
1069
|
-
--gog-chip-sm-padding-inline: var(--gog-space-8);
|
|
1070
|
-
--gog-chip-sm-gap: var(--gog-space-6);
|
|
1071
|
-
--gog-chip-sm-avatar-size: 1rem;
|
|
1072
|
-
--gog-chip-sm-icon-size: 0.75rem;
|
|
1073
|
-
--gog-chip-sm-remove-size: 0.875rem;
|
|
1074
|
-
|
|
1075
|
-
--gog-chip-md-font-size: var(--gog-text-sm);
|
|
1076
|
-
--gog-chip-md-padding-block: var(--gog-space-8);
|
|
1077
|
-
--gog-chip-md-padding-inline: var(--gog-space-12);
|
|
1078
|
-
--gog-chip-md-gap: var(--gog-space-8);
|
|
1079
|
-
--gog-chip-md-avatar-size: 1.25rem;
|
|
1080
|
-
--gog-chip-md-icon-size: 0.875rem;
|
|
1081
|
-
--gog-chip-md-remove-size: 1rem;
|
|
1082
|
-
|
|
1083
|
-
--gog-chip-lg-font-size: var(--gog-text-md);
|
|
1084
|
-
--gog-chip-lg-padding-block: var(--gog-space-10);
|
|
1085
|
-
--gog-chip-lg-padding-inline: var(--gog-space-14);
|
|
1086
|
-
--gog-chip-lg-gap: var(--gog-space-10);
|
|
1087
|
-
--gog-chip-lg-avatar-size: 1.5rem;
|
|
1088
|
-
--gog-chip-lg-icon-size: 1rem;
|
|
1089
|
-
--gog-chip-lg-remove-size: 1.125rem;
|
|
1090
|
-
|
|
1091
|
-
--gog-chip-slg-font-size: var(--gog-text-lg);
|
|
1092
|
-
--gog-chip-slg-padding-block: var(--gog-space-12);
|
|
1093
|
-
--gog-chip-slg-padding-inline: var(--gog-space-16);
|
|
1094
|
-
--gog-chip-slg-gap: var(--gog-space-12);
|
|
1095
|
-
--gog-chip-slg-avatar-size: 1.75rem;
|
|
1096
|
-
--gog-chip-slg-icon-size: 1.125rem;
|
|
1097
|
-
--gog-chip-slg-remove-size: 1.25rem;
|
|
1098
|
-
|
|
1099
|
-
/* ── Dialog ────────────────────────────────────────────────────────────────── */
|
|
1100
|
-
--gog-dialog-font-family: var(--gog-font-heading);
|
|
1101
|
-
/* Deliberately a flat value rather than a palette derivation: the scrim has to read
|
|
1102
|
-
the same over any page content. Restate it per theme if a lighter wash suits. */
|
|
1103
|
-
--gog-dialog-backdrop-bg: rgba(10, 8, 3, 0.72);
|
|
1104
|
-
--gog-dialog-backdrop-blur: 2px;
|
|
1105
|
-
--gog-dialog-backdrop-padding: var(--gog-space-lg);
|
|
1106
|
-
--gog-dialog-backdrop-fade-duration: var(--gog-duration-base);
|
|
1107
|
-
--gog-dialog-enter-duration: var(--gog-duration-slow);
|
|
1108
|
-
--gog-dialog-enter-distance: -12px;
|
|
1109
|
-
--gog-dialog-bg: var(--gog-surface-color);
|
|
1110
|
-
--gog-dialog-color: var(--gog-text-color);
|
|
1111
|
-
--gog-dialog-border: var(--gog-border-color);
|
|
1112
|
-
--gog-dialog-border-width: var(--gog-panel-border-width);
|
|
1113
|
-
--gog-dialog-border-style: var(--gog-panel-border-style);
|
|
1114
|
-
--gog-dialog-radius: var(--gog-radius);
|
|
1115
|
-
--gog-dialog-shadow: 0 24px 48px rgba(0, 0, 0, 0.5);
|
|
1116
|
-
--gog-dialog-min-width: 320px;
|
|
1117
|
-
--gog-dialog-max-height: 90vh;
|
|
1118
|
-
--gog-dialog-header-padding: var(--gog-space-16) var(--gog-space-20) var(--gog-space-14);
|
|
1119
|
-
--gog-dialog-header-gap: var(--gog-space-12);
|
|
1120
|
-
--gog-dialog-header-border-color: var(--gog-border-color);
|
|
1121
|
-
--gog-dialog-body-padding: var(--gog-space-20);
|
|
1122
|
-
--gog-dialog-body-max-height: calc(var(--gog-dialog-max-height) - 60px);
|
|
1123
|
-
--gog-dialog-close-size: 2rem;
|
|
1124
|
-
--gog-dialog-close-font-size: var(--gog-text-sm);
|
|
1125
|
-
--gog-dialog-close-color: var(--gog-muted-text-color);
|
|
1126
|
-
--gog-dialog-close-hover-color: var(--gog-text-color);
|
|
1127
|
-
--gog-dialog-close-hover-bg: var(--gog-hover-color);
|
|
1128
|
-
--gog-dialog-close-hover-border: var(--gog-border-color);
|
|
1129
|
-
--gog-dialog-close-focus-ring: var(--gog-accent-color);
|
|
1130
|
-
--gog-dialog-close-focus-ring-width: var(--gog-focus-ring-width);
|
|
1131
|
-
--gog-dialog-close-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
1132
|
-
|
|
1133
|
-
/* Confirmation dialog */
|
|
1134
|
-
--gog-confirmation-dialog-gap: var(--gog-space-12);
|
|
1135
|
-
--gog-confirmation-dialog-min-width: 320px;
|
|
1136
|
-
--gog-confirmation-dialog-max-width: 440px;
|
|
1137
|
-
--gog-confirmation-dialog-color: var(--gog-text-color);
|
|
1138
|
-
--gog-confirmation-dialog-description-color: var(--gog-muted-text-color);
|
|
1139
|
-
--gog-confirmation-dialog-actions-gap: var(--gog-space-sm);
|
|
1140
|
-
--gog-confirmation-dialog-actions-offset: var(--gog-space-sm);
|
|
1141
|
-
|
|
1142
|
-
/* ── Autocomplete ──────────────────────────────────────────────────────────
|
|
1143
|
-
A combobox whose trigger is a real text input. Padding/font-size reuse the shared
|
|
1144
|
-
`--gog-field-<size>-*` scale, so it lines up with `gog-inputfield` and `gog-select` in a
|
|
1145
|
-
form. `--gog-autocomplete-bg`, `-color`, `-font-size`, `-padding-x` and `-padding-y` are
|
|
1146
|
-
intentionally NOT declared — they are the per-instance escape hatch the size classes fall
|
|
1147
|
-
back through. */
|
|
1148
|
-
--gog-autocomplete-font-family: var(--gog-font-body);
|
|
1149
|
-
--gog-autocomplete-label-font-family: var(--gog-font-heading);
|
|
1150
|
-
--gog-autocomplete-gap: var(--gog-space-4);
|
|
1151
|
-
--gog-autocomplete-label-color: var(--gog-accent-color);
|
|
1152
|
-
--gog-autocomplete-label-font-size: var(--gog-text-sm);
|
|
1153
|
-
--gog-autocomplete-label-font-weight: var(--gog-font-weight-semibold);
|
|
1154
|
-
--gog-autocomplete-label-letter-spacing: var(--gog-letter-spacing);
|
|
1155
|
-
--gog-autocomplete-label-text-transform: var(--gog-text-transform);
|
|
1156
|
-
--gog-autocomplete-field-bg: var(--gog-surface-color);
|
|
1157
|
-
--gog-autocomplete-text-color: var(--gog-text-color);
|
|
1158
|
-
--gog-autocomplete-placeholder-color: var(--gog-muted-text-color);
|
|
1159
|
-
--gog-autocomplete-border-width: var(--gog-control-border-width);
|
|
1160
|
-
--gog-autocomplete-border-style: var(--gog-control-border-style);
|
|
1161
|
-
--gog-autocomplete-border-color: var(--gog-accent-dim);
|
|
1162
|
-
--gog-autocomplete-hover-border-color: var(--gog-accent-color);
|
|
1163
|
-
--gog-autocomplete-radius: var(--gog-radius);
|
|
1164
|
-
--gog-autocomplete-line-height: var(--gog-line-height-normal);
|
|
1165
|
-
--gog-autocomplete-transition-duration: var(--gog-duration-base);
|
|
1166
|
-
--gog-autocomplete-disabled-opacity: var(--gog-disabled-opacity);
|
|
1167
|
-
--gog-autocomplete-focus-ring-width: var(--gog-focus-ring-width);
|
|
1168
|
-
--gog-autocomplete-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
1169
|
-
--gog-autocomplete-focus-ring-color: var(--gog-accent-color);
|
|
1170
|
-
--gog-autocomplete-error-color: var(--gog-danger-color);
|
|
1171
|
-
--gog-autocomplete-error-border-color: var(--gog-danger-color);
|
|
1172
|
-
--gog-autocomplete-error-font-family: var(--gog-font-body);
|
|
1173
|
-
--gog-autocomplete-error-font-size: var(--gog-text-xs);
|
|
1174
|
-
/* Floor for an auto-width field, so [fullWidth]="false" cannot collapse it to its chrome. */
|
|
1175
|
-
--gog-autocomplete-min-width: 120px;
|
|
1176
|
-
/* Trailing chrome: spinner and clear button, clear outermost — the arrangement the other
|
|
1177
|
-
dropdowns settled on, so all of them line up in a form. */
|
|
1178
|
-
--gog-autocomplete-actions-inset: var(--gog-control-icon-offset);
|
|
1179
|
-
--gog-autocomplete-actions-gap: var(--gog-space-6);
|
|
1180
|
-
/* Right padding on the input, reserving room for the actions above. */
|
|
1181
|
-
--gog-autocomplete-actions-reserve: 40px;
|
|
1182
|
-
--gog-autocomplete-clear-color: var(--gog-autocomplete-placeholder-color);
|
|
1183
|
-
--gog-autocomplete-clear-hover-color: var(--gog-autocomplete-label-color);
|
|
1184
|
-
--gog-autocomplete-clear-icon-ratio: var(--gog-control-clear-icon-ratio);
|
|
1185
|
-
--gog-autocomplete-spinner-size: 0.875rem;
|
|
1186
|
-
/* Panel */
|
|
1187
|
-
--gog-autocomplete-panel-bg: var(--gog-surface-color);
|
|
1188
|
-
--gog-autocomplete-panel-shadow: var(--gog-panel-shadow);
|
|
1189
|
-
--gog-autocomplete-panel-border-width: var(--gog-panel-border-width);
|
|
1190
|
-
--gog-autocomplete-panel-border-style: var(--gog-panel-border-style);
|
|
1191
|
-
--gog-autocomplete-panel-border-color: var(--gog-border-color);
|
|
1192
|
-
--gog-autocomplete-panel-radius: var(--gog-radius);
|
|
1193
|
-
--gog-autocomplete-panel-gap: var(--gog-space-2);
|
|
1194
|
-
--gog-autocomplete-panel-max-height: 260px;
|
|
1195
|
-
/* Ceiling for a content-sized panel, so one very long option cannot span the viewport. */
|
|
1196
|
-
--gog-autocomplete-panel-max-width: 420px;
|
|
1197
|
-
--gog-autocomplete-options-padding: var(--gog-space-4);
|
|
1198
|
-
--gog-autocomplete-option-padding: var(--gog-space-8) var(--gog-space-10);
|
|
1199
|
-
--gog-autocomplete-option-radius: calc(var(--gog-radius) - 4px);
|
|
1200
|
-
--gog-autocomplete-option-gap: var(--gog-space-10);
|
|
1201
|
-
--gog-autocomplete-option-color: var(--gog-text-color);
|
|
1202
|
-
--gog-autocomplete-option-hover-bg: var(--gog-hover-color);
|
|
1203
|
-
--gog-autocomplete-option-press-bg: var(--gog-border-color);
|
|
1204
|
-
--gog-autocomplete-option-hover-color: var(--gog-text-color);
|
|
1205
|
-
--gog-autocomplete-option-selected-bg: var(--gog-accent-pale);
|
|
1206
|
-
/* Body text, not the accent. The selected row is the one option that carries a tint *and* a
|
|
1207
|
-
coloured label, and the accent on that tint measured 4.12:1 in light — `--gog-accent-dim` is
|
|
1208
|
-
worse again (3.77:1 in one-dark). `gog-select` gets away with an accent label because its
|
|
1209
|
-
selected option has no tint behind it. The tint stays as the marker, alongside
|
|
1210
|
-
`aria-selected`. */
|
|
1211
|
-
--gog-autocomplete-option-selected-color: var(--gog-text-color);
|
|
1212
|
-
/* Estimated row height fed into the panel's up/down placement math; not itself a real
|
|
1213
|
-
layout property, so it has no effect unless the JS reads it. */
|
|
1214
|
-
--gog-autocomplete-option-height: 36px;
|
|
1215
|
-
--gog-autocomplete-empty-color: var(--gog-autocomplete-placeholder-color);
|
|
1216
|
-
--gog-autocomplete-empty-font-size: var(--gog-text-sm);
|
|
1217
|
-
--gog-autocomplete-float-label-reserve: var(--gog-field-float-label-reserve);
|
|
1218
|
-
--gog-autocomplete-float-label-in-top: var(--gog-field-float-label-in-top);
|
|
1219
|
-
--gog-autocomplete-float-label-over-gap: var(--gog-field-float-label-over-gap);
|
|
1220
|
-
--gog-autocomplete-float-label-over-reserve: var(--gog-field-float-label-over-reserve);
|
|
1221
|
-
|
|
1222
|
-
/* ── Badge (the `gogBadge` directive; its classes live in utilities.css) ───── */
|
|
1223
|
-
--gog-badge-font-family: var(--gog-font-body);
|
|
1224
|
-
--gog-badge-font-size: var(--gog-text-xs);
|
|
1225
|
-
--gog-badge-font-weight: var(--gog-font-weight-semibold);
|
|
1226
|
-
--gog-badge-line-height: var(--gog-line-height-none);
|
|
1227
|
-
/* Min-width *and* height: a one-digit badge stays a circle, a three-digit one grows
|
|
1228
|
-
sideways only. */
|
|
1229
|
-
--gog-badge-size: 1.25rem;
|
|
1230
|
-
--gog-badge-dot-size: 0.5rem;
|
|
1231
|
-
--gog-badge-padding-inline: var(--gog-space-4);
|
|
1232
|
-
--gog-badge-radius: 999px;
|
|
1233
|
-
/* How far the badge hangs outside its host's corner. */
|
|
1234
|
-
--gog-badge-offset: var(--gog-space-6);
|
|
1235
|
-
--gog-badge-border-width: 0;
|
|
1236
|
-
--gog-badge-border-style: var(--gog-border-style);
|
|
1237
|
-
--gog-badge-border-color: transparent;
|
|
1238
|
-
/* Above the host's own chrome but below any overlay panel (--gog-dropdown-z is 300). */
|
|
1239
|
-
/* Each label is its status's own "text on this fill" token, which flips with the theme — a red
|
|
1240
|
-
badge reads white on light and near-black on dark. It read `--gog-accent-text-color` for all
|
|
1241
|
-
four until 21.9.0, on the assumption that one label works on every fill; four themes proved
|
|
1242
|
-
otherwise, `material`'s amber under white at 1.97:1 the worst of them. See the
|
|
1243
|
-
`--gog-<status>-text-color` block near the top of this file. */
|
|
1244
|
-
--gog-badge-success-bg: var(--gog-success-color);
|
|
1245
|
-
--gog-badge-success-color: var(--gog-success-text-color);
|
|
1246
|
-
--gog-badge-danger-bg: var(--gog-danger-color);
|
|
1247
|
-
--gog-badge-danger-color: var(--gog-danger-text-color);
|
|
1248
|
-
--gog-badge-warning-bg: var(--gog-warning-color);
|
|
1249
|
-
--gog-badge-warning-color: var(--gog-warning-text-color);
|
|
1250
|
-
--gog-badge-info-bg: var(--gog-info-color);
|
|
1251
|
-
--gog-badge-info-color: var(--gog-info-text-color);
|
|
1252
|
-
|
|
1253
|
-
/* ── Datepicker (the field; the grid inside it is themed by --gog-calendar-*) ───
|
|
1254
|
-
`--gog-datepicker-bg`, `-color`, `-font-size`, `-padding-x` and `-padding-y` are
|
|
1255
|
-
intentionally NOT declared — they are the per-instance escape hatch the size classes fall
|
|
1256
|
-
back through. */
|
|
1257
|
-
--gog-datepicker-font-family: var(--gog-font-body);
|
|
1258
|
-
--gog-datepicker-label-font-family: var(--gog-font-heading);
|
|
1259
|
-
--gog-datepicker-gap: var(--gog-space-4);
|
|
1260
|
-
--gog-datepicker-label-color: var(--gog-accent-color);
|
|
1261
|
-
--gog-datepicker-label-font-size: var(--gog-text-sm);
|
|
1262
|
-
--gog-datepicker-label-letter-spacing: var(--gog-letter-spacing);
|
|
1263
|
-
--gog-datepicker-label-text-transform: var(--gog-text-transform);
|
|
1264
|
-
--gog-datepicker-field-bg: var(--gog-surface-color);
|
|
1265
|
-
--gog-datepicker-text-color: var(--gog-text-color);
|
|
1266
|
-
--gog-datepicker-placeholder-color: var(--gog-muted-text-color);
|
|
1267
|
-
--gog-datepicker-border-width: var(--gog-control-border-width);
|
|
1268
|
-
--gog-datepicker-border-style: var(--gog-control-border-style);
|
|
1269
|
-
--gog-datepicker-border-color: var(--gog-accent-dim);
|
|
1270
|
-
--gog-datepicker-hover-border-color: var(--gog-accent-color);
|
|
1271
|
-
--gog-datepicker-radius: var(--gog-radius);
|
|
1272
|
-
--gog-datepicker-line-height: var(--gog-line-height-normal);
|
|
1273
|
-
--gog-datepicker-transition-duration: var(--gog-duration-base);
|
|
1274
|
-
--gog-datepicker-disabled-opacity: var(--gog-disabled-opacity);
|
|
1275
|
-
--gog-datepicker-focus-ring-width: var(--gog-focus-ring-width);
|
|
1276
|
-
--gog-datepicker-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
1277
|
-
--gog-datepicker-focus-ring-color: var(--gog-accent-color);
|
|
1278
|
-
--gog-datepicker-error-color: var(--gog-danger-color);
|
|
1279
|
-
--gog-datepicker-error-border-color: var(--gog-danger-color);
|
|
1280
|
-
--gog-datepicker-error-font-family: var(--gog-font-body);
|
|
1281
|
-
--gog-datepicker-error-font-size: var(--gog-text-xs);
|
|
1282
|
-
--gog-datepicker-min-width: 150px;
|
|
1283
|
-
--gog-datepicker-actions-inset: var(--gog-control-icon-offset);
|
|
1284
|
-
--gog-datepicker-actions-gap: var(--gog-space-6);
|
|
1285
|
-
/* Right padding on the input, reserving room for the calendar and clear buttons. */
|
|
1286
|
-
--gog-datepicker-actions-reserve: 40px;
|
|
1287
|
-
--gog-datepicker-icon-color: var(--gog-accent-color);
|
|
1288
|
-
--gog-datepicker-icon-hover-color: var(--gog-accent-bright);
|
|
1289
|
-
--gog-datepicker-toggle-icon-size: 1rem;
|
|
1290
|
-
--gog-datepicker-clear-color: var(--gog-datepicker-placeholder-color);
|
|
1291
|
-
--gog-datepicker-clear-icon-ratio: var(--gog-control-clear-icon-ratio);
|
|
1292
|
-
--gog-datepicker-panel-bg: var(--gog-surface-color);
|
|
1293
|
-
--gog-datepicker-panel-shadow: var(--gog-panel-shadow);
|
|
1294
|
-
--gog-datepicker-panel-border-width: var(--gog-panel-border-width);
|
|
1295
|
-
--gog-datepicker-panel-border-style: var(--gog-panel-border-style);
|
|
1296
|
-
--gog-datepicker-panel-border-color: var(--gog-border-color);
|
|
1297
|
-
--gog-datepicker-panel-radius: var(--gog-radius);
|
|
1298
|
-
--gog-datepicker-panel-gap: var(--gog-space-2);
|
|
1299
|
-
/* The dropdown surface. Inline mode is `gog-calendar` itself, so it sizes from
|
|
1300
|
-
`--gog-calendar-max-width` rather than from this. */
|
|
1301
|
-
--gog-datepicker-panel-width: max-content;
|
|
1302
|
-
--gog-datepicker-float-label-reserve: var(--gog-field-float-label-reserve);
|
|
1303
|
-
--gog-datepicker-float-label-in-top: var(--gog-field-float-label-in-top);
|
|
1304
|
-
--gog-datepicker-float-label-over-gap: var(--gog-field-float-label-over-gap);
|
|
1305
|
-
--gog-datepicker-float-label-over-reserve: var(--gog-field-float-label-over-reserve);
|
|
1306
|
-
|
|
1307
|
-
/* ── Divider ───────────────────────────────────────────────────────────────── */
|
|
1308
|
-
--gog-divider-line-color: var(--gog-border-color);
|
|
1309
|
-
--gog-divider-line-thickness: 1px;
|
|
1310
|
-
/* The variant classes map onto these, so a theme can decide what "dashed" looks like
|
|
1311
|
-
rather than the value being frozen into the component's stylesheet. */
|
|
1312
|
-
--gog-divider-solid-style: solid;
|
|
1313
|
-
--gog-divider-dashed-style: dashed;
|
|
1314
|
-
--gog-divider-dotted-style: dotted;
|
|
1315
|
-
--gog-divider-block-spacing: var(--gog-space-md);
|
|
1316
|
-
--gog-divider-inline-spacing: var(--gog-space-md);
|
|
1317
|
-
--gog-divider-inset-size: var(--gog-space-lg);
|
|
1318
|
-
/* Floor for a vertical divider with nothing to stretch to — e.g. between two inline
|
|
1319
|
-
buttons. In a flex/grid row it stretches to the row instead. */
|
|
1320
|
-
--gog-divider-vertical-length: 1.5em;
|
|
1321
|
-
--gog-divider-label-gap: var(--gog-space-sm);
|
|
1322
|
-
--gog-divider-label-color: var(--gog-muted-text-color);
|
|
1323
|
-
--gog-divider-label-font-family: var(--gog-font-body);
|
|
1324
|
-
--gog-divider-label-font-size: var(--gog-text-sm);
|
|
1325
|
-
--gog-divider-label-font-weight: var(--gog-font-weight-medium);
|
|
1326
|
-
--gog-divider-label-line-height: var(--gog-line-height-normal);
|
|
1327
|
-
|
|
1328
|
-
/* ── Icon ──────────────────────────────────────────────────────────────────── */
|
|
1329
|
-
--gog-icon-fallback-size: 1em;
|
|
1330
|
-
|
|
1331
|
-
/* ── Input field ───────────────────────────────────────────────────────────── */
|
|
1332
|
-
--gog-input-font-family: var(--gog-font-body);
|
|
1333
|
-
--gog-input-label-font-family: var(--gog-font-heading);
|
|
1334
|
-
--gog-input-gap: var(--gog-space-4);
|
|
1335
|
-
--gog-input-label-color: var(--gog-accent-color);
|
|
1336
|
-
--gog-input-label-font-size: var(--gog-text-sm);
|
|
1337
|
-
--gog-input-label-letter-spacing: var(--gog-letter-spacing);
|
|
1338
|
-
--gog-input-label-text-transform: var(--gog-text-transform);
|
|
1339
|
-
--gog-input-field-bg: var(--gog-surface-color);
|
|
1340
|
-
--gog-input-field-border: var(--gog-accent-dim);
|
|
1341
|
-
--gog-input-field-border-width: var(--gog-control-border-width);
|
|
1342
|
-
--gog-input-field-border-style: var(--gog-control-border-style);
|
|
1343
|
-
--gog-input-radius: var(--gog-radius);
|
|
1344
|
-
--gog-input-field-color: var(--gog-text-color);
|
|
1345
|
-
--gog-input-placeholder-color: var(--gog-muted-text-color);
|
|
1346
|
-
--gog-input-focus-border: var(--gog-accent-color);
|
|
1347
|
-
--gog-input-focus-ring: var(--gog-accent-pale);
|
|
1348
|
-
--gog-input-focus-glow: 0 0 8px var(--gog-input-focus-ring);
|
|
1349
|
-
--gog-input-focus-ring-width: var(--gog-focus-ring-width);
|
|
1350
|
-
--gog-input-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
1351
|
-
--gog-input-error-color: var(--gog-danger-color);
|
|
1352
|
-
--gog-input-error-font-size: var(--gog-text-xs);
|
|
1353
|
-
/* Extra space above the error line, *on top of* the host's own `--gog-input-gap`, which
|
|
1354
|
-
already separates every child of the field. It shipped as `2px` and put this field's error
|
|
1355
|
-
6px under it while `gog-select`, `gog-autocomplete` and `gog-datepicker` — same gap, no
|
|
1356
|
-
offset — sat at 4px; in one form the six did not line up. Zero by default since 21.9.0, so
|
|
1357
|
-
one mechanism spaces the error line everywhere. Set it if you want this field's error
|
|
1358
|
-
pushed further than the rest. */
|
|
1359
|
-
--gog-input-error-offset: 0px;
|
|
1360
|
-
--gog-input-icon-color: var(--gog-muted-text-color);
|
|
1361
|
-
--gog-input-icon-hover-color: var(--gog-accent-color);
|
|
1362
|
-
--gog-input-icon-action-radius: calc(var(--gog-radius) - 4px);
|
|
1363
|
-
--gog-input-icon-focus-ring-width: 2px;
|
|
1364
|
-
/* Number field's spin buttons — a subtle fill on hover, since they sit flush against the
|
|
1365
|
-
field's own border rather than floating with their own padding like the other icons. */
|
|
1366
|
-
--gog-input-spin-hover-bg: var(--gog-hover-color);
|
|
1367
|
-
--gog-input-disabled-opacity: var(--gog-disabled-opacity);
|
|
1368
|
-
--gog-input-transition-duration: var(--gog-duration-base);
|
|
1369
|
-
/* Float label — also used by gog-textarea, which shares the --gog-input-* block. */
|
|
1370
|
-
/* Clear button — only rendered once the field has text, see `clearable`.
|
|
1371
|
-
|
|
1372
|
-
A quarter of the corner radius rather than a flat `2px`, which is what this was until
|
|
1373
|
-
21.9.0: at the default `--gog-radius: 8px` it computes to the same 2px, so nothing moves in
|
|
1374
|
-
any shipped theme, but a theme that rounds its corners now rounds this button too. The
|
|
1375
|
-
literal was invisible to `check-tokens` rule G by design — that rule flags a literal only
|
|
1376
|
-
when its value *equals* a character token's current one, so a pill's `999px` is correctly
|
|
1377
|
-
left alone and a small arbitrary number like this one is correctly not detectable. The two
|
|
1378
|
-
sibling controls below carry the same fix.
|
|
1379
|
-
|
|
1380
|
-
`gog-toast` and `gog-accordion` keep their flat `0px` on purpose: those are a chosen shape,
|
|
1381
|
-
not a number that forgot where it came from. */
|
|
1382
|
-
--gog-input-clear-radius: calc(var(--gog-radius) / 4);
|
|
1383
|
-
--gog-input-clear-icon-ratio: var(--gog-control-clear-icon-ratio);
|
|
1384
|
-
/*
|
|
1385
|
-
The textarea's clear button gets a full-size glyph. The 0.7 ratio above suits the dense
|
|
1386
|
-
single-line trigger of a dropdown; on a large multi-line box it reads as a speck.
|
|
1387
|
-
*/
|
|
1388
|
-
--gog-textarea-clear-icon-ratio: 1;
|
|
1389
|
-
/* Custom resize grip — see the `::-webkit-resizer` comment in textarea.component.scss for
|
|
1390
|
-
why this replaces rather than restyles the native glyph. Colour follows the field's own
|
|
1391
|
-
border by default, not a fixed muted grey, so it reads as part of the field rather than a
|
|
1392
|
-
mismatched accent. */
|
|
1393
|
-
--gog-textarea-resize-grip-size: 11px;
|
|
1394
|
-
--gog-textarea-resize-grip-color: var(--gog-input-field-border);
|
|
1395
|
-
--gog-textarea-resize-grip-opacity: 0.8;
|
|
1396
|
-
--gog-textarea-resize-grip-stripe-width: 1.5px;
|
|
1397
|
-
--gog-textarea-resize-grip-stripe-gap: var(--gog-space-2);
|
|
1398
|
-
--gog-textarea-resize-grip-offset: 3px;
|
|
1399
|
-
/*
|
|
1400
|
-
Both default to 0 and are overwritten per instance, as an inline style on the field, from
|
|
1401
|
-
the component's own ResizeObserver — they close the gap that opens once the field has been
|
|
1402
|
-
dragged narrower/shorter than its container. Declared here rather than left to a `var()`
|
|
1403
|
-
fallback so the grip's resting geometry is discoverable in this file like everything else;
|
|
1404
|
-
an inline style outranks this declaration, so the per-instance override still wins.
|
|
1405
|
-
*/
|
|
1406
|
-
--gog-textarea-resize-inset-right: 0px;
|
|
1407
|
-
--gog-textarea-resize-inset-bottom: 0px;
|
|
1408
|
-
--gog-input-clear-inset: var(--gog-space-8);
|
|
1409
|
-
/*
|
|
1410
|
-
Width of one stepper button, and so of the whole stepper column. Scales with the field's
|
|
1411
|
-
own font size rather than being a fixed px value, so it stays proportional across the five
|
|
1412
|
-
sizes. Read in two places — the buttons themselves, and the offset that moves the clear
|
|
1413
|
-
button clear of them on a clearable number field — which is why it is a token rather than
|
|
1414
|
-
the same `calc()` written twice.
|
|
1415
|
-
*/
|
|
1416
|
-
--gog-input-spin-width: calc(
|
|
1417
|
-
var(--gog-input-size-font-size, var(--gog-field-md-font-size)) * 1.35
|
|
1418
|
-
);
|
|
1419
|
-
--gog-input-float-label-reserve: var(--gog-field-float-label-reserve);
|
|
1420
|
-
--gog-input-float-label-in-top: var(--gog-field-float-label-in-top);
|
|
1421
|
-
--gog-input-float-label-over-gap: var(--gog-field-float-label-over-gap);
|
|
1422
|
-
--gog-input-float-label-over-reserve: var(--gog-field-float-label-over-reserve);
|
|
1423
|
-
|
|
1424
|
-
/* ── Multiselect ───────────────────────────────────────────────────────────── */
|
|
1425
|
-
--gog-multiselect-font-family: var(--gog-font-body);
|
|
1426
|
-
--gog-multiselect-label-font-family: var(--gog-font-heading);
|
|
1427
|
-
--gog-multiselect-gap: var(--gog-space-4);
|
|
1428
|
-
--gog-multiselect-option-gap: var(--gog-space-4);
|
|
1429
|
-
--gog-multiselect-options-padding: var(--gog-space-4);
|
|
1430
|
-
--gog-multiselect-label-color: var(--gog-accent-color);
|
|
1431
|
-
--gog-multiselect-label-font-size: var(--gog-text-sm);
|
|
1432
|
-
--gog-multiselect-label-letter-spacing: var(--gog-letter-spacing);
|
|
1433
|
-
--gog-multiselect-label-text-transform: var(--gog-text-transform);
|
|
1434
|
-
--gog-multiselect-field-bg: var(--gog-surface-color);
|
|
1435
|
-
--gog-multiselect-field-border: var(--gog-accent-dim);
|
|
1436
|
-
--gog-multiselect-field-border-width: var(--gog-control-border-width);
|
|
1437
|
-
--gog-multiselect-field-border-style: var(--gog-control-border-style);
|
|
1438
|
-
--gog-multiselect-radius: var(--gog-radius);
|
|
1439
|
-
--gog-multiselect-field-color: var(--gog-text-color);
|
|
1440
|
-
--gog-multiselect-value-color: var(--gog-text-color);
|
|
1441
|
-
--gog-multiselect-placeholder-color: var(--gog-muted-text-color);
|
|
1442
|
-
--gog-multiselect-focus-border: var(--gog-accent-color);
|
|
1443
|
-
--gog-multiselect-focus-ring: var(--gog-accent-pale);
|
|
1444
|
-
--gog-multiselect-focus-glow: 0 0 8px var(--gog-multiselect-focus-ring);
|
|
1445
|
-
--gog-multiselect-focus-ring-width: var(--gog-focus-ring-width);
|
|
1446
|
-
--gog-multiselect-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
1447
|
-
--gog-multiselect-error-color: var(--gog-danger-color);
|
|
1448
|
-
--gog-multiselect-error-font-size: var(--gog-text-xs);
|
|
1449
|
-
/* Zero by default since 21.9.0 — see `--gog-input-error-offset` for why. */
|
|
1450
|
-
--gog-multiselect-error-offset: 0px;
|
|
1451
|
-
--gog-multiselect-border-color: var(--gog-accent-color);
|
|
1452
|
-
--gog-multiselect-panel-bg: var(--gog-surface-color);
|
|
1453
|
-
--gog-multiselect-panel-border: var(--gog-accent-color);
|
|
1454
|
-
--gog-multiselect-panel-shadow: var(--gog-panel-shadow);
|
|
1455
|
-
--gog-multiselect-panel-max-height: 260px;
|
|
1456
|
-
--gog-multiselect-panel-offset: var(--gog-space-2);
|
|
1457
|
-
--gog-multiselect-option-hover-bg: var(--gog-hover-color);
|
|
1458
|
-
--gog-multiselect-option-press-bg: var(--gog-border-color);
|
|
1459
|
-
--gog-multiselect-option-color: var(--gog-text-color);
|
|
1460
|
-
--gog-multiselect-option-gap-inline: var(--gog-space-10);
|
|
1461
|
-
/* Estimated row height fed into the panel's up/down placement math; not itself a real
|
|
1462
|
-
layout property, so it has no effect unless the JS reads it. */
|
|
1463
|
-
--gog-multiselect-option-height: 40px;
|
|
1464
|
-
--gog-multiselect-option-radius: calc(var(--gog-radius) - 2px);
|
|
1465
|
-
--gog-multiselect-option-disabled-opacity: var(--gog-disabled-opacity);
|
|
1466
|
-
--gog-multiselect-option-transition-duration: var(--gog-duration-fast);
|
|
1467
|
-
--gog-multiselect-checkbox-border: var(--gog-accent-dim);
|
|
1468
|
-
--gog-multiselect-checkbox-bg: var(--gog-background-color);
|
|
1469
|
-
--gog-multiselect-checkbox-checked-bg: var(--gog-accent-color);
|
|
1470
|
-
--gog-multiselect-checkbox-checked-color: var(--gog-primary-color);
|
|
1471
|
-
--gog-multiselect-controls-gap: var(--gog-space-4);
|
|
1472
|
-
--gog-multiselect-controls-padding: var(--gog-space-6) var(--gog-space-10);
|
|
1473
|
-
--gog-multiselect-actions-gap: var(--gog-space-6);
|
|
1474
|
-
--gog-multiselect-filter-padding: var(--gog-space-6);
|
|
1475
|
-
--gog-multiselect-filter-input-padding-y: var(--gog-space-6);
|
|
1476
|
-
--gog-multiselect-filter-input-padding-x: var(--gog-space-8);
|
|
1477
|
-
--gog-multiselect-filter-input-bg: var(--gog-background-color);
|
|
1478
|
-
--gog-multiselect-filter-input-color: var(--gog-multiselect-field-color);
|
|
1479
|
-
--gog-multiselect-filter-input-border: var(--gog-multiselect-field-border);
|
|
1480
|
-
--gog-multiselect-filter-input-radius: var(--gog-radius);
|
|
1481
|
-
--gog-multiselect-filter-border-width: var(--gog-panel-border-width);
|
|
1482
|
-
--gog-multiselect-filter-border-style: var(--gog-panel-border-style);
|
|
1483
|
-
--gog-multiselect-filter-border-color: var(--gog-border-color);
|
|
1484
|
-
--gog-multiselect-filter-empty-padding: var(--gog-space-10);
|
|
1485
|
-
--gog-multiselect-filter-empty-color: var(--gog-multiselect-placeholder-color);
|
|
1486
|
-
/* Matches --gog-select-chevron-inset; see the note there. */
|
|
1487
|
-
/* "+N" badge shown when the selection does not fit on one line. */
|
|
1488
|
-
--gog-multiselect-overflow-color: var(--gog-multiselect-placeholder-color);
|
|
1489
|
-
--gog-multiselect-overflow-font-size: var(--gog-text-sm);
|
|
1490
|
-
--gog-multiselect-overflow-gap: var(--gog-space-6);
|
|
1491
|
-
--gog-multiselect-min-width: 120px;
|
|
1492
|
-
--gog-multiselect-panel-max-width: 420px;
|
|
1493
|
-
--gog-multiselect-actions-inset: var(--gog-control-icon-offset);
|
|
1494
|
-
/* A quarter of the corner radius — see `--gog-input-clear-radius` for why. */
|
|
1495
|
-
--gog-multiselect-clear-radius: calc(var(--gog-radius) / 4);
|
|
1496
|
-
--gog-multiselect-disabled-opacity: var(--gog-disabled-opacity);
|
|
1497
|
-
--gog-multiselect-transition-duration: var(--gog-duration-base);
|
|
1498
|
-
--gog-multiselect-float-label-reserve: var(--gog-field-float-label-reserve);
|
|
1499
|
-
--gog-multiselect-float-label-in-top: var(--gog-field-float-label-in-top);
|
|
1500
|
-
--gog-multiselect-float-label-over-gap: var(--gog-field-float-label-over-gap);
|
|
1501
|
-
--gog-multiselect-float-label-over-reserve: var(--gog-field-float-label-over-reserve);
|
|
1502
|
-
--gog-multiselect-arrow-transition-duration: var(--gog-duration-slow);
|
|
1503
|
-
/* Icon geometry, expressed as a ratio of the control's font size. */
|
|
1504
|
-
--gog-multiselect-clear-icon-ratio: var(--gog-control-clear-icon-ratio);
|
|
1505
|
-
--gog-multiselect-arrow-icon-ratio: 0.875;
|
|
1506
|
-
--gog-multiselect-mark-size-ratio: 1.2375;
|
|
1507
|
-
--gog-multiselect-mark-icon-ratio: 1.125;
|
|
1508
|
-
|
|
1509
|
-
/* ── Menu ──────────────────────────────────────────────────────────────────
|
|
1510
|
-
The command menu opened by `[gogMenuTrigger]`. Metrics follow the dropdown panel's, so a
|
|
1511
|
-
menu and a select opened from the same toolbar read as the same surface. */
|
|
1512
|
-
--gog-menu-z: var(--gog-dropdown-z);
|
|
1513
|
-
--gog-menu-bg: var(--gog-surface-color);
|
|
1514
|
-
--gog-menu-border-color: var(--gog-border-color);
|
|
1515
|
-
--gog-menu-border-width: var(--gog-control-border-width);
|
|
1516
|
-
--gog-menu-border-style: var(--gog-control-border-style);
|
|
1517
|
-
--gog-menu-radius: var(--gog-panel-radius);
|
|
1518
|
-
--gog-menu-shadow: var(--gog-dialog-shadow);
|
|
1519
|
-
--gog-menu-font-family: var(--gog-font-body);
|
|
1520
|
-
--gog-menu-padding: var(--gog-space-4);
|
|
1521
|
-
--gog-menu-gap: var(--gog-space-2);
|
|
1522
|
-
--gog-menu-offset: var(--gog-space-4);
|
|
1523
|
-
--gog-menu-min-width: 180px;
|
|
1524
|
-
--gog-menu-max-width: 320px;
|
|
1525
|
-
--gog-menu-max-height: 320px;
|
|
1526
|
-
--gog-menu-transition-duration: var(--gog-duration-base);
|
|
1527
|
-
--gog-menu-focus-ring: var(--gog-accent-color);
|
|
1528
|
-
--gog-menu-focus-ring-width: var(--gog-focus-ring-width);
|
|
1529
|
-
--gog-menu-item-color: var(--gog-text-color);
|
|
1530
|
-
--gog-menu-item-hover-bg: var(--gog-hover-color);
|
|
1531
|
-
/* The held state, same idea as the button's: one step past this surface's own hover, as a
|
|
1532
|
-
colour rather than a movement, so `prefers-reduced-motion` cannot take it away. The flat
|
|
1533
|
-
value here is what a browser without `color-mix()` gets; the tinted one is in the @supports
|
|
1534
|
-
block at the end of the file. */
|
|
1535
|
-
--gog-menu-item-press-bg: var(--gog-border-color);
|
|
1536
|
-
--gog-menu-item-hover-color: var(--gog-text-color);
|
|
1537
|
-
--gog-menu-item-font-size: var(--gog-text-sm);
|
|
1538
|
-
--gog-menu-item-padding: var(--gog-space-8) var(--gog-space-12);
|
|
1539
|
-
--gog-menu-item-radius: var(--gog-radius);
|
|
1540
|
-
--gog-menu-item-gap: var(--gog-space-sm);
|
|
1541
|
-
--gog-menu-item-disabled-opacity: var(--gog-disabled-opacity);
|
|
1542
|
-
--gog-menu-item-disabled-color: var(--gog-muted-text-color);
|
|
1543
|
-
--gog-menu-item-line-height: var(--gog-line-height-normal);
|
|
1544
|
-
--gog-menu-item-icon-size: 1em;
|
|
1545
|
-
|
|
1546
|
-
/* ── Paginator ─────────────────────────────────────────────────────────────── */
|
|
1547
|
-
--gog-paginator-gap: var(--gog-space-4);
|
|
1548
|
-
--gog-paginator-ellipsis-color: var(--gog-muted-text-color);
|
|
1549
|
-
--gog-paginator-ellipsis-font-size: var(--gog-text-sm);
|
|
1550
|
-
--gog-paginator-ellipsis-font-family: var(--gog-font-body);
|
|
1551
|
-
/* Enough for a three-digit page size plus the chevron, so the row doesn't shift on change. */
|
|
1552
|
-
--gog-paginator-page-size-min-width: 5rem;
|
|
1553
|
-
--gog-paginator-ellipsis-min-width: 32px;
|
|
1554
|
-
|
|
1555
|
-
/* ── Panel ─────────────────────────────────────────────────────────────────
|
|
1556
|
-
The `gog-panel` component, which shares its prefix with the foundation surface tier
|
|
1557
|
-
above (`--gog-panel-radius`, `--gog-panel-shadow`, `--gog-panel-border-width`,
|
|
1558
|
-
`--gog-panel-border-style`) deliberately: a panel is the surface those describe, and a
|
|
1559
|
-
theme that sets a house radius for raised surfaces should get it here too.
|
|
1560
|
-
|
|
1561
|
-
`--gog-panel-bg`, `--gog-panel-border-color`, `--gog-panel-padding-y`,
|
|
1562
|
-
`--gog-panel-padding-x` and `--gog-panel-gap` are intentionally NOT declared — the
|
|
1563
|
-
per-instance escape hatch. There is no `--gog-panel-*-shadow` twin of that hatch for the
|
|
1564
|
-
elevated variant: it reads `--gog-panel-shadow` from a declaration the component makes on
|
|
1565
|
-
its own host, so setting that token on one panel already changes only that panel. */
|
|
1566
|
-
--gog-panel-font-family: var(--gog-font-body);
|
|
1567
|
-
--gog-panel-color: var(--gog-text-color);
|
|
1568
|
-
--gog-panel-transition-duration: var(--gog-duration-base);
|
|
1569
|
-
|
|
1570
|
-
--gog-panel-heading-color: var(--gog-text-color);
|
|
1571
|
-
--gog-panel-heading-font-family: var(--gog-font-heading);
|
|
1572
|
-
--gog-panel-heading-font-size: var(--gog-text-xl);
|
|
1573
|
-
--gog-panel-heading-font-weight: var(--gog-font-weight-semibold);
|
|
1574
|
-
--gog-panel-heading-line-height: 1.25;
|
|
1575
|
-
|
|
1576
|
-
--gog-panel-outlined-bg: var(--gog-surface-color);
|
|
1577
|
-
--gog-panel-outlined-border-color: var(--gog-border-color);
|
|
1578
|
-
--gog-panel-outlined-shadow: none;
|
|
1579
|
-
--gog-panel-elevated-bg: var(--gog-elevated-surface-color);
|
|
1580
|
-
--gog-panel-elevated-border-color: transparent;
|
|
1581
|
-
--gog-panel-filled-bg: var(--gog-accent-pale);
|
|
1582
|
-
--gog-panel-filled-border-color: transparent;
|
|
1583
|
-
--gog-panel-filled-shadow: none;
|
|
1584
|
-
|
|
1585
|
-
--gog-panel-header-gap: var(--gog-space-sm);
|
|
1586
|
-
--gog-panel-toggle-size: 2rem;
|
|
1587
|
-
--gog-panel-toggle-radius: var(--gog-radius);
|
|
1588
|
-
--gog-panel-toggle-color: var(--gog-muted-text-color);
|
|
1589
|
-
--gog-panel-toggle-hover-bg: var(--gog-hover-color);
|
|
1590
|
-
--gog-panel-chevron-size: 1rem;
|
|
1591
|
-
--gog-panel-focus-ring: var(--gog-accent-color);
|
|
1592
|
-
--gog-panel-focus-ring-width: var(--gog-focus-ring-width);
|
|
1593
|
-
--gog-panel-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
1594
|
-
--gog-panel-disabled-opacity: var(--gog-disabled-opacity);
|
|
1595
|
-
|
|
1596
|
-
--gog-panel-footer-border-color: var(--gog-border-color);
|
|
1597
|
-
--gog-panel-footer-gap: var(--gog-space-sm);
|
|
1598
|
-
--gog-panel-footer-padding-top: var(--gog-space-sm);
|
|
1599
|
-
|
|
1600
|
-
--gog-panel-xsm-padding-y: var(--gog-space-10);
|
|
1601
|
-
--gog-panel-xsm-padding-x: var(--gog-space-12);
|
|
1602
|
-
--gog-panel-xsm-gap: var(--gog-space-sm);
|
|
1603
|
-
--gog-panel-sm-padding-y: var(--gog-space-14);
|
|
1604
|
-
--gog-panel-sm-padding-x: var(--gog-space-md);
|
|
1605
|
-
--gog-panel-sm-gap: var(--gog-space-10);
|
|
1606
|
-
--gog-panel-md-padding-y: var(--gog-space-18);
|
|
1607
|
-
--gog-panel-md-padding-x: var(--gog-space-20);
|
|
1608
|
-
--gog-panel-md-gap: var(--gog-space-12);
|
|
1609
|
-
--gog-panel-lg-padding-y: var(--gog-space-lg);
|
|
1610
|
-
--gog-panel-lg-padding-x: var(--gog-space-28);
|
|
1611
|
-
--gog-panel-lg-gap: var(--gog-space-md);
|
|
1612
|
-
--gog-panel-slg-padding-y: var(--gog-space-32);
|
|
1613
|
-
--gog-panel-slg-padding-x: var(--gog-space-32);
|
|
1614
|
-
--gog-panel-slg-gap: var(--gog-space-20);
|
|
1615
|
-
|
|
1616
|
-
/* ── Progressbar ──────────────────────────────────────────────────────────── */
|
|
1617
|
-
--gog-progressbar-track-base-bg: var(--gog-border-color);
|
|
1618
|
-
--gog-progressbar-radius: 999px;
|
|
1619
|
-
--gog-progressbar-transition-duration: var(--gog-duration-slow);
|
|
1620
|
-
--gog-progressbar-xsm-height: 2px;
|
|
1621
|
-
--gog-progressbar-sm-height: 4px;
|
|
1622
|
-
--gog-progressbar-md-height: 6px;
|
|
1623
|
-
--gog-progressbar-lg-height: 10px;
|
|
1624
|
-
--gog-progressbar-slg-height: 14px;
|
|
1625
|
-
--gog-progressbar-value-gap: var(--gog-space-sm);
|
|
1626
|
-
--gog-progressbar-value-min-width: 3ch;
|
|
1627
|
-
--gog-progressbar-value-color: var(--gog-muted-text-color);
|
|
1628
|
-
--gog-progressbar-value-font-family: var(--gog-font-body);
|
|
1629
|
-
--gog-progressbar-value-font-size: var(--gog-text-sm);
|
|
1630
|
-
--gog-progressbar-indeterminate-duration: 1.6s;
|
|
1631
|
-
--gog-progressbar-indeterminate-easing: cubic-bezier(0.65, 0.05, 0.36, 1);
|
|
1632
|
-
/* The reduced-motion stand-in for the indeterminate animation. */
|
|
1633
|
-
--gog-progressbar-stripe-size: 6px;
|
|
1634
|
-
--gog-progressbar-stripe-color: var(--gog-surface-color);
|
|
1635
|
-
/* The
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
--gog-
|
|
1654
|
-
--gog-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
--gog-
|
|
1659
|
-
--gog-
|
|
1660
|
-
--gog-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
--gog-
|
|
1669
|
-
--gog-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
--gog-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
--gog-scroll-
|
|
1679
|
-
--gog-scroll-
|
|
1680
|
-
--gog-scroll-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
--gog-scroll-
|
|
1686
|
-
--gog-scroll-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
--gog-
|
|
1693
|
-
--gog-
|
|
1694
|
-
--gog-
|
|
1695
|
-
--gog-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
--gog-
|
|
1701
|
-
--gog-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
--gog-select-
|
|
1705
|
-
--gog-select-
|
|
1706
|
-
--gog-select-
|
|
1707
|
-
--gog-select-
|
|
1708
|
-
--gog-select-
|
|
1709
|
-
--gog-select-
|
|
1710
|
-
--gog-select-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
--gog-select-
|
|
1719
|
-
|
|
1720
|
-
--gog-select-
|
|
1721
|
-
|
|
1722
|
-
--gog-select-
|
|
1723
|
-
|
|
1724
|
-
--gog-select-
|
|
1725
|
-
--gog-select-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
--gog-select-
|
|
1734
|
-
|
|
1735
|
-
--gog-select-
|
|
1736
|
-
/*
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
--gog-select-
|
|
1740
|
-
--gog-select-
|
|
1741
|
-
--gog-select-
|
|
1742
|
-
--gog-select-
|
|
1743
|
-
--gog-select-
|
|
1744
|
-
--gog-select-
|
|
1745
|
-
--gog-select-
|
|
1746
|
-
--gog-select-
|
|
1747
|
-
--gog-select-
|
|
1748
|
-
--gog-select-
|
|
1749
|
-
--gog-select-
|
|
1750
|
-
--gog-select-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
--gog-select-
|
|
1756
|
-
--gog-select-
|
|
1757
|
-
--gog-select-
|
|
1758
|
-
|
|
1759
|
-
--gog-select-
|
|
1760
|
-
--gog-select-
|
|
1761
|
-
--gog-select-
|
|
1762
|
-
--gog-select-
|
|
1763
|
-
--gog-select-
|
|
1764
|
-
--gog-select-
|
|
1765
|
-
--gog-select-
|
|
1766
|
-
--gog-select-
|
|
1767
|
-
--gog-select-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
--gog-
|
|
1771
|
-
--gog-
|
|
1772
|
-
--gog-
|
|
1773
|
-
|
|
1774
|
-
--gog-
|
|
1775
|
-
--gog-
|
|
1776
|
-
--gog-
|
|
1777
|
-
--gog-
|
|
1778
|
-
--gog-
|
|
1779
|
-
--gog-
|
|
1780
|
-
--gog-
|
|
1781
|
-
--gog-
|
|
1782
|
-
--gog-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
--gog-skeleton-
|
|
1786
|
-
--gog-skeleton-
|
|
1787
|
-
--gog-skeleton-
|
|
1788
|
-
--gog-skeleton-
|
|
1789
|
-
--gog-skeleton-
|
|
1790
|
-
--gog-skeleton-
|
|
1791
|
-
--gog-skeleton-
|
|
1792
|
-
--gog-skeleton-
|
|
1793
|
-
--gog-skeleton-
|
|
1794
|
-
--gog-skeleton-
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
--gog-
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
--gog-
|
|
1801
|
-
--gog-
|
|
1802
|
-
--gog-
|
|
1803
|
-
--gog-
|
|
1804
|
-
--gog-
|
|
1805
|
-
--gog-
|
|
1806
|
-
--gog-
|
|
1807
|
-
--gog-
|
|
1808
|
-
--gog-
|
|
1809
|
-
--gog-
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
--gog-slider-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
--gog-slider-
|
|
1827
|
-
--gog-slider-track-
|
|
1828
|
-
--gog-slider-track-
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
--gog-slider-
|
|
1842
|
-
--gog-slider-
|
|
1843
|
-
--gog-slider-
|
|
1844
|
-
--gog-
|
|
1845
|
-
|
|
1846
|
-
--gog-slider-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
--gog-
|
|
1853
|
-
--gog-
|
|
1854
|
-
--gog-
|
|
1855
|
-
--gog-
|
|
1856
|
-
--gog-
|
|
1857
|
-
--gog-
|
|
1858
|
-
--gog-
|
|
1859
|
-
--gog-
|
|
1860
|
-
--gog-
|
|
1861
|
-
--gog-
|
|
1862
|
-
--gog-
|
|
1863
|
-
--gog-
|
|
1864
|
-
--gog-
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
--gog-spinner-
|
|
1868
|
-
--gog-spinner-
|
|
1869
|
-
--gog-spinner-
|
|
1870
|
-
--gog-spinner-
|
|
1871
|
-
--gog-spinner-
|
|
1872
|
-
--gog-spinner-
|
|
1873
|
-
--gog-spinner-
|
|
1874
|
-
--gog-spinner-
|
|
1875
|
-
--gog-spinner-arc-inner-
|
|
1876
|
-
--gog-spinner-diamond-
|
|
1877
|
-
--gog-spinner-
|
|
1878
|
-
--gog-spinner-
|
|
1879
|
-
--gog-spinner-
|
|
1880
|
-
--gog-spinner-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
--gog-
|
|
1884
|
-
--gog-
|
|
1885
|
-
--gog-
|
|
1886
|
-
--gog-
|
|
1887
|
-
--gog-
|
|
1888
|
-
--gog-
|
|
1889
|
-
--gog-
|
|
1890
|
-
--gog-
|
|
1891
|
-
|
|
1892
|
-
--gog-
|
|
1893
|
-
--gog-
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
--gog-table-
|
|
1899
|
-
--gog-table-
|
|
1900
|
-
--gog-table-
|
|
1901
|
-
--gog-table-
|
|
1902
|
-
--gog-table-
|
|
1903
|
-
|
|
1904
|
-
--gog-table-
|
|
1905
|
-
--gog-table-
|
|
1906
|
-
|
|
1907
|
-
--gog-table-
|
|
1908
|
-
--gog-table-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
--gog-table-
|
|
1914
|
-
--gog-table-
|
|
1915
|
-
--gog-table-
|
|
1916
|
-
--gog-table-
|
|
1917
|
-
--gog-table-
|
|
1918
|
-
|
|
1919
|
-
--gog-table-
|
|
1920
|
-
--gog-table-
|
|
1921
|
-
--gog-table-
|
|
1922
|
-
--gog-table-
|
|
1923
|
-
--gog-table-
|
|
1924
|
-
--gog-table-
|
|
1925
|
-
--gog-table-num-
|
|
1926
|
-
--gog-table-
|
|
1927
|
-
--gog-table-
|
|
1928
|
-
--gog-table-
|
|
1929
|
-
--gog-table-
|
|
1930
|
-
--gog-table-
|
|
1931
|
-
--gog-table-
|
|
1932
|
-
--gog-table-
|
|
1933
|
-
--gog-table-
|
|
1934
|
-
--gog-table-
|
|
1935
|
-
--gog-table-
|
|
1936
|
-
--gog-table-
|
|
1937
|
-
--gog-table-
|
|
1938
|
-
--gog-table-
|
|
1939
|
-
--gog-table-
|
|
1940
|
-
--gog-table-
|
|
1941
|
-
--gog-table-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
--gog-
|
|
1949
|
-
--gog-
|
|
1950
|
-
--gog-
|
|
1951
|
-
--gog-
|
|
1952
|
-
--gog-
|
|
1953
|
-
--gog-
|
|
1954
|
-
--gog-
|
|
1955
|
-
--gog-
|
|
1956
|
-
--gog-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
--gog-tabs-
|
|
1967
|
-
--gog-tabs-
|
|
1968
|
-
--gog-tabs-
|
|
1969
|
-
--gog-tabs-
|
|
1970
|
-
--gog-tabs-
|
|
1971
|
-
--gog-tabs-
|
|
1972
|
-
--gog-tabs-
|
|
1973
|
-
--gog-tabs-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
--gog-tabs-
|
|
1977
|
-
/*
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
--gog-tabs-
|
|
1982
|
-
--gog-tabs-
|
|
1983
|
-
--gog-tabs-
|
|
1984
|
-
--gog-tabs-
|
|
1985
|
-
--gog-tabs-
|
|
1986
|
-
--gog-tabs-
|
|
1987
|
-
--gog-tabs-
|
|
1988
|
-
--gog-tabs-
|
|
1989
|
-
--gog-tabs-
|
|
1990
|
-
--gog-tabs-
|
|
1991
|
-
--gog-tabs-
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
--gog-
|
|
1997
|
-
--gog-
|
|
1998
|
-
--gog-
|
|
1999
|
-
--gog-
|
|
2000
|
-
--gog-
|
|
2001
|
-
--gog-
|
|
2002
|
-
--gog-
|
|
2003
|
-
--gog-
|
|
2004
|
-
--gog-
|
|
2005
|
-
--gog-
|
|
2006
|
-
--gog-
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
--gog-tag-
|
|
2012
|
-
--gog-tag-
|
|
2013
|
-
|
|
2014
|
-
--gog-tag-
|
|
2015
|
-
--gog-tag-
|
|
2016
|
-
--gog-tag-
|
|
2017
|
-
--gog-tag-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
--gog-tag-
|
|
2031
|
-
|
|
2032
|
-
--gog-tag-
|
|
2033
|
-
--gog-tag-
|
|
2034
|
-
--gog-tag-
|
|
2035
|
-
--gog-tag-
|
|
2036
|
-
--gog-tag-
|
|
2037
|
-
|
|
2038
|
-
--gog-tag-
|
|
2039
|
-
--gog-tag-
|
|
2040
|
-
|
|
2041
|
-
--gog-tag-
|
|
2042
|
-
--gog-tag-
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
--gog-
|
|
2046
|
-
|
|
2047
|
-
--gog-
|
|
2048
|
-
--gog-
|
|
2049
|
-
--gog-
|
|
2050
|
-
--gog-
|
|
2051
|
-
--gog-
|
|
2052
|
-
|
|
2053
|
-
--gog-
|
|
2054
|
-
--gog-
|
|
2055
|
-
--gog-
|
|
2056
|
-
--gog-
|
|
2057
|
-
--gog-
|
|
2058
|
-
|
|
2059
|
-
--gog-
|
|
2060
|
-
--gog-
|
|
2061
|
-
--gog-
|
|
2062
|
-
--gog-
|
|
2063
|
-
--gog-
|
|
2064
|
-
|
|
2065
|
-
--gog-
|
|
2066
|
-
--gog-
|
|
2067
|
-
--gog-
|
|
2068
|
-
--gog-
|
|
2069
|
-
--gog-
|
|
2070
|
-
|
|
2071
|
-
/*
|
|
2072
|
-
--gog-toast-
|
|
2073
|
-
--gog-toast-
|
|
2074
|
-
--gog-toast-
|
|
2075
|
-
--gog-toast-
|
|
2076
|
-
--gog-toast-
|
|
2077
|
-
--gog-toast-
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
--gog-
|
|
2085
|
-
--gog-
|
|
2086
|
-
--gog-
|
|
2087
|
-
--gog-
|
|
2088
|
-
--gog-
|
|
2089
|
-
--gog-
|
|
2090
|
-
--gog-
|
|
2091
|
-
--gog-
|
|
2092
|
-
--gog-
|
|
2093
|
-
--gog-
|
|
2094
|
-
--gog-
|
|
2095
|
-
--gog-
|
|
2096
|
-
--gog-
|
|
2097
|
-
--gog-
|
|
2098
|
-
|
|
2099
|
-
--gog-
|
|
2100
|
-
--gog-
|
|
2101
|
-
--gog-
|
|
2102
|
-
--gog-
|
|
2103
|
-
--gog-
|
|
2104
|
-
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
--gog-toggle-
|
|
2115
|
-
--gog-toggle-
|
|
2116
|
-
--gog-toggle-
|
|
2117
|
-
--gog-toggle-
|
|
2118
|
-
--gog-toggle-
|
|
2119
|
-
--gog-toggle-
|
|
2120
|
-
--gog-toggle-
|
|
2121
|
-
--gog-toggle-
|
|
2122
|
-
--gog-toggle-
|
|
2123
|
-
--gog-toggle-
|
|
2124
|
-
--gog-toggle-
|
|
2125
|
-
--gog-toggle-
|
|
2126
|
-
--gog-toggle-
|
|
2127
|
-
--gog-toggle-
|
|
2128
|
-
--gog-toggle-
|
|
2129
|
-
--gog-toggle-
|
|
2130
|
-
--gog-toggle-
|
|
2131
|
-
|
|
2132
|
-
--gog-toggle-
|
|
2133
|
-
--gog-toggle-
|
|
2134
|
-
--gog-toggle-
|
|
2135
|
-
--gog-toggle-
|
|
2136
|
-
--gog-toggle-
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
|
|
2140
|
-
|
|
2141
|
-
|
|
2142
|
-
--gog-
|
|
2143
|
-
--gog-
|
|
2144
|
-
--gog-
|
|
2145
|
-
--gog-
|
|
2146
|
-
--gog-
|
|
2147
|
-
--gog-
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
--gog-
|
|
2153
|
-
|
|
2154
|
-
|
|
2155
|
-
|
|
2156
|
-
|
|
2157
|
-
--gog-
|
|
2158
|
-
--gog-
|
|
2159
|
-
--gog-
|
|
2160
|
-
--gog-
|
|
2161
|
-
--gog-
|
|
2162
|
-
--gog-
|
|
2163
|
-
--gog-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
--gog-
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
|
|
2174
|
-
|
|
2175
|
-
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
*
|
|
2199
|
-
*
|
|
2200
|
-
*
|
|
2201
|
-
*
|
|
2202
|
-
*
|
|
2203
|
-
*
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
|
|
2211
|
-
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
2216
|
-
|
|
2217
|
-
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
|
|
2226
|
-
|
|
2227
|
-
|
|
2228
|
-
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
|
|
2233
|
-
|
|
2234
|
-
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
--gog-
|
|
2238
|
-
|
|
2239
|
-
var(--gog-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
var(--gog-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
);
|
|
2270
|
-
--gog-
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
|
|
2276
|
-
|
|
2277
|
-
|
|
2278
|
-
var(--gog-
|
|
2279
|
-
|
|
2280
|
-
|
|
2281
|
-
--gog-button-
|
|
2282
|
-
in srgb,
|
|
2283
|
-
var(--gog-
|
|
2284
|
-
var(--gog-
|
|
2285
|
-
);
|
|
2286
|
-
--gog-button-
|
|
2287
|
-
in srgb,
|
|
2288
|
-
var(--gog-
|
|
2289
|
-
var(--gog-
|
|
2290
|
-
);
|
|
2291
|
-
--gog-button-
|
|
2292
|
-
--gog-button-
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
--gog-
|
|
2298
|
-
|
|
2299
|
-
|
|
2300
|
-
|
|
2301
|
-
|
|
2302
|
-
|
|
2303
|
-
|
|
2304
|
-
|
|
2305
|
-
|
|
2306
|
-
|
|
2307
|
-
|
|
2308
|
-
|
|
2309
|
-
|
|
2310
|
-
|
|
2311
|
-
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
|
|
2316
|
-
|
|
2317
|
-
|
|
2318
|
-
|
|
2319
|
-
--gog-
|
|
2320
|
-
--gog-
|
|
2321
|
-
|
|
2322
|
-
|
|
2323
|
-
var(--gog-
|
|
2324
|
-
|
|
2325
|
-
|
|
2326
|
-
|
|
2327
|
-
|
|
2328
|
-
|
|
2329
|
-
|
|
2330
|
-
|
|
2331
|
-
);
|
|
2332
|
-
--gog-
|
|
2333
|
-
|
|
2334
|
-
|
|
2335
|
-
|
|
2336
|
-
);
|
|
2337
|
-
--gog-
|
|
2338
|
-
|
|
2339
|
-
|
|
2340
|
-
|
|
2341
|
-
|
|
2342
|
-
|
|
2343
|
-
|
|
2344
|
-
|
|
2345
|
-
|
|
2346
|
-
|
|
2347
|
-
|
|
2348
|
-
|
|
2349
|
-
|
|
2350
|
-
--gog-
|
|
2351
|
-
--gog-
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
|
|
2357
|
-
|
|
1
|
+
/*
|
|
2
|
+
* @guildofgleks/ui — baseline theme
|
|
3
|
+
*
|
|
4
|
+
* Every token the components read, with a working default, so the library renders
|
|
5
|
+
* correctly from a single import and a consumer can override only what they care about.
|
|
6
|
+
*
|
|
7
|
+
* ── The three layers ─────────────────────────────────────────────────────────────
|
|
8
|
+
* 1. Foundation — palette, type scale, spacing, motion, focus. Restyles everything.
|
|
9
|
+
* 2. Component — `--gog-<component>-*`, spelled out as the component's own element
|
|
10
|
+
* name. Every colour, font, border, radius, shadow, padding and
|
|
11
|
+
* duration each component paints with lives here, so a theme can
|
|
12
|
+
* restyle one component without touching its stylesheet.
|
|
13
|
+
* 3. Instance — a handful of deliberately UNDECLARED tokens (`--gog-button-bg`,
|
|
14
|
+
* `--gog-button-padding`, `--gog-tag-bg`, …) that variant/size classes
|
|
15
|
+
* fall back through. Left unset on purpose: a value declared here
|
|
16
|
+
* would out-cascade the variant classes and pin every button to one
|
|
17
|
+
* look. Set them on an element to override a single instance.
|
|
18
|
+
*
|
|
19
|
+
* No component stylesheet declares a `--gog-*` default of its own — everything a
|
|
20
|
+
* component paints resolves to a token below.
|
|
21
|
+
*
|
|
22
|
+
* ── Why there are two blocks, and which one to add a token to ────────────────────
|
|
23
|
+
* A custom property's `var()` references are substituted on the element that *declares*
|
|
24
|
+
* it, not where it is read. So `--gog-button-primary-bg: var(--gog-accent-color)` declared on
|
|
25
|
+
* `:root` freezes to the root palette: a `data-theme` scope further down the tree could
|
|
26
|
+
* change `--gog-accent-color` and buttons inside it would not follow.
|
|
27
|
+
*
|
|
28
|
+
* `:root` — literals only (and the light palette default). Values that
|
|
29
|
+
* reference nothing, so resolving them once at the root is right.
|
|
30
|
+
* `:root, [data-theme]` — every token whose value reads another token. Re-declared on
|
|
31
|
+
* each theme scope so it re-derives from that scope's palette
|
|
32
|
+
* and metrics. **A new token that contains `var(` goes here.**
|
|
33
|
+
*
|
|
34
|
+
* ── Adding a theme ───────────────────────────────────────────────────────────────
|
|
35
|
+
* Declare a palette against the attribute value; the derived layer re-resolves for you:
|
|
36
|
+
*
|
|
37
|
+
* :root[data-theme='mine'], [data-theme='mine'] { --gog-accent-color: #ff4edb; }
|
|
38
|
+
*
|
|
39
|
+
* Listing both selectors makes the theme work at the root *and* on any subtree, so a
|
|
40
|
+
* single page can show several themes side by side.
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
:root {
|
|
44
|
+
/* ── Typography ───────────────────────────────────────────────────────────────
|
|
45
|
+
Generic stacks on purpose: a UI library should not force a webfont download on
|
|
46
|
+
its consumers. Point these at your own families to restyle all text at once.
|
|
47
|
+
`styles/fonts.css` is an optional import that wires up the showcase's families. */
|
|
48
|
+
--gog-font-heading: system-ui, -apple-system, 'Segoe UI', sans-serif;
|
|
49
|
+
--gog-font-body: system-ui, -apple-system, 'Segoe UI', sans-serif;
|
|
50
|
+
--gog-font-mono: ui-monospace, SFMono-Regular, 'JetBrains Mono', monospace;
|
|
51
|
+
|
|
52
|
+
--gog-text-xs: 0.75rem;
|
|
53
|
+
--gog-text-sm: 0.875rem;
|
|
54
|
+
--gog-text-md: 1rem;
|
|
55
|
+
--gog-text-lg: 1.125rem;
|
|
56
|
+
/* 20px, between `lg` and `xl`. Named for the control size it serves rather than continuing the
|
|
57
|
+
t-shirt run, because that is what asked for it: `gog-button` and the field controls both
|
|
58
|
+
needed a step for their `slg` size and, having none, both wrote `1.25rem` as a literal — the
|
|
59
|
+
same value chosen twice, independently, which is a missing rung and not two opinions. The
|
|
60
|
+
gap from 1.125 to 1.5 is the widest in the scale, so it was the one likely to be filled by
|
|
61
|
+
hand. */
|
|
62
|
+
--gog-text-slg: 1.25rem;
|
|
63
|
+
--gog-text-xl: 1.5rem;
|
|
64
|
+
--gog-text-2xl: 2rem;
|
|
65
|
+
--gog-text-3xl: 3rem;
|
|
66
|
+
|
|
67
|
+
/* Weight, the third character axis after casing and tracking — and the one 21.7.0's character
|
|
68
|
+
layer missed, which is how fifteen component tokens came to hold a bare number. A house style
|
|
69
|
+
that wants lighter chrome sets these four and nothing else; before them it meant finding and
|
|
70
|
+
re-listing every one. Four steps because four are used: no `normal`, because nothing in the
|
|
71
|
+
library paints 400 and an unused token is API nobody asked for. */
|
|
72
|
+
--gog-font-weight-medium: 500;
|
|
73
|
+
--gog-font-weight-semibold: 600;
|
|
74
|
+
--gog-font-weight-bold: 700;
|
|
75
|
+
--gog-font-weight-heavy: 900;
|
|
76
|
+
|
|
77
|
+
/* Leading, the fourth character axis. Twenty component tokens held a bare number — seven of
|
|
78
|
+
them the same 1.4 — so a house style that wanted roomier text had to find every one. Six
|
|
79
|
+
steps because six values are painted; `gog-panel`'s heading keeps its own 1.25, which is
|
|
80
|
+
off this scale on purpose the way an 11px chip is off the type scale. */
|
|
81
|
+
--gog-line-height-none: 1;
|
|
82
|
+
--gog-line-height-tight: 1.2;
|
|
83
|
+
--gog-line-height-snug: 1.3;
|
|
84
|
+
--gog-line-height-normal: 1.4;
|
|
85
|
+
--gog-line-height-relaxed: 1.5;
|
|
86
|
+
--gog-line-height-loose: 1.6;
|
|
87
|
+
|
|
88
|
+
/* The "emphasis" casing character — labels, buttons, section and table headers all shout
|
|
89
|
+
the same way by default. Not every uppercase/1px-tracking declaration in this file reads
|
|
90
|
+
these two: only the ones that genuinely share this idea do. A few (gog-tabs among them)
|
|
91
|
+
stay their own literal on purpose, because normal case or a different tracking reads
|
|
92
|
+
better there — see docs/themes.md, iteration 1, for the full audit of what did and did
|
|
93
|
+
not qualify. */
|
|
94
|
+
--gog-text-transform: uppercase;
|
|
95
|
+
--gog-letter-spacing: 1px;
|
|
96
|
+
|
|
97
|
+
/* ── Spacing & geometry ───────────────────────────────────────────────────────
|
|
98
|
+
|
|
99
|
+
`--gog-density` is the whole spacing system in one number. It multiplies every step
|
|
100
|
+
of the scale below, and every component padding and gap derives from that scale, so
|
|
101
|
+
a theme makes the entire library compact or roomy without naming a single component:
|
|
102
|
+
|
|
103
|
+
[data-theme='compact'] { --gog-density: 0.75; }
|
|
104
|
+
|
|
105
|
+
This is the density half of docs/themes.md's character layer — the same idea as
|
|
106
|
+
--gog-radius for corners. Before it existed, 177 component paddings and gaps were
|
|
107
|
+
literals in two different units, and a theme that wanted tighter controls had to
|
|
108
|
+
re-list all of them; check-tokens.mjs rule G now fails a build that adds another.
|
|
109
|
+
|
|
110
|
+
The steps are named for their pixel value at density 1, because a t-shirt scale
|
|
111
|
+
stops being readable somewhere around the fourth size and this one has fourteen.
|
|
112
|
+
The five original t-shirt names are kept as aliases: they are public API, they are
|
|
113
|
+
what `theme-starter.css` and every existing consumer theme use, and they cost
|
|
114
|
+
nothing to keep.
|
|
115
|
+
|
|
116
|
+
Only the multiplier itself lives here — the scale is in the derived block below,
|
|
117
|
+
because every step reads this token and so has to re-resolve inside each theme
|
|
118
|
+
scope. A step declared here would be computed once against :root's density and a
|
|
119
|
+
[data-theme] subtree would inherit that number, not its own. */
|
|
120
|
+
--gog-density: 1;
|
|
121
|
+
|
|
122
|
+
/* The ground a *raised* surface paints. Equal to the plain surface by default, because on a
|
|
123
|
+
light theme elevation reads as a shadow and the surface itself does not change.
|
|
124
|
+
|
|
125
|
+
On a dark theme a shadow has nothing to darken — 21.7.1 found `elevated` and `outlined`
|
|
126
|
+
cards rendering identically under `data-theme="dark"`, both a thin ring on the same fill.
|
|
127
|
+
Dark themes therefore lift this token instead, which is how elevation has to be expressed
|
|
128
|
+
when the page is already near-black. Each dark theme sets it; light themes leave it alone. */
|
|
129
|
+
|
|
130
|
+
--gog-radius: 8px;
|
|
131
|
+
/* Three border-weight tiers, not one: --gog-control-border-width (2px) is form fields,
|
|
132
|
+
--gog-panel-border-width (1px) is raised/floating surfaces (card, dialog, dropdown panel,
|
|
133
|
+
tooltip — see README.md's note on --gog-panel-*), and this pair is everything smaller and
|
|
134
|
+
inline — chip, tag, badge, toggle, table rows, tabs, calendar cells. It happens to share
|
|
135
|
+
panel's value today; kept separate anyway; a theme wanting thick floating panels but thin
|
|
136
|
+
inline chips (or the reverse) needs the two independently settable. */
|
|
137
|
+
--gog-border-width: 1px;
|
|
138
|
+
--gog-border-style: solid;
|
|
139
|
+
--gog-panel-border-width: 1px;
|
|
140
|
+
--gog-panel-border-style: solid;
|
|
141
|
+
|
|
142
|
+
/* ── Motion ──────────────────────────────────────────────────────────────────
|
|
143
|
+
Every component transition/animation is expressed in these. Set them to 0s to
|
|
144
|
+
flatten all motion theme-wide (components also honour prefers-reduced-motion). */
|
|
145
|
+
--gog-duration-fast: 0.12s;
|
|
146
|
+
--gog-duration-base: 0.15s;
|
|
147
|
+
--gog-duration-slow: 0.2s;
|
|
148
|
+
--gog-easing: ease;
|
|
149
|
+
|
|
150
|
+
/* ── Focus & disabled ───────────────────────────────────────────────────────── */
|
|
151
|
+
--gog-focus-ring-width: 3px;
|
|
152
|
+
--gog-focus-ring-offset: 2px;
|
|
153
|
+
--gog-disabled-opacity: 0.4;
|
|
154
|
+
|
|
155
|
+
/* ── Control metrics ─────────────────────────────────────────────────────────
|
|
156
|
+
Five-tier scale: xsm/slg bookend the original sm/md/lg (restored below to
|
|
157
|
+
their pre-compaction numbers) as new extremes for extra-tight or extra-roomy
|
|
158
|
+
layouts. */
|
|
159
|
+
/* The clear (×) button's glyph, as a fraction of its box. One number written five times —
|
|
160
|
+
`gog-autocomplete`, `gog-datepicker`, `gog-inputfield`, `gog-multiselect` and `gog-select`
|
|
161
|
+
all had their own `0.7` for the same part. `gog-textarea` keeps its own `1` deliberately:
|
|
162
|
+
its clear button sits in a corner rather than in the field's icon row. */
|
|
163
|
+
--gog-control-clear-icon-ratio: 0.7;
|
|
164
|
+
--gog-control-border-width: 2px;
|
|
165
|
+
--gog-control-border-style: solid;
|
|
166
|
+
|
|
167
|
+
--gog-control-checkbox-box-size-xsm: 12px;
|
|
168
|
+
--gog-control-checkbox-box-size-sm: 18px;
|
|
169
|
+
--gog-control-checkbox-box-size-md: 24px;
|
|
170
|
+
--gog-control-checkbox-box-size-lg: 32px;
|
|
171
|
+
--gog-control-checkbox-box-size-slg: 40px;
|
|
172
|
+
--gog-control-checkbox-label-size-xsm: 0.6875rem;
|
|
173
|
+
--gog-control-checkbox-label-size-sm: 0.8125rem;
|
|
174
|
+
--gog-control-checkbox-label-size-md: 0.9375rem;
|
|
175
|
+
--gog-control-checkbox-label-size-lg: 1.0625rem;
|
|
176
|
+
--gog-control-checkbox-label-size-slg: 1.1875rem;
|
|
177
|
+
--gog-control-checkbox-icon-size-xsm: 10px;
|
|
178
|
+
--gog-control-checkbox-icon-size-sm: 12px;
|
|
179
|
+
--gog-control-checkbox-icon-size-md: 14px;
|
|
180
|
+
--gog-control-checkbox-icon-size-lg: 18px;
|
|
181
|
+
--gog-control-checkbox-icon-size-slg: 22px;
|
|
182
|
+
|
|
183
|
+
/* ── Button sizing ─────────────────────────────────────────────────────────── */
|
|
184
|
+
|
|
185
|
+
/* ── Field sizing (input / select / multiselect share one scale) ─────────────
|
|
186
|
+
The offsets are spacing and follow --gog-density with everything else; the glyph
|
|
187
|
+
box does not, because an icon that shrinks with the padding stops being legible
|
|
188
|
+
well before the padding stops being usable. Only the offsets move.
|
|
189
|
+
|
|
190
|
+
Each inset is the text's start edge: one offset before the glyph, the glyph, one
|
|
191
|
+
offset after. It was five hand-measured literals (docs/iteration-8-plan.md tuned
|
|
192
|
+
them in a browser) that happened to satisfy that identity, so nothing here moves
|
|
193
|
+
at density 1 — but a literal cannot follow the density knob, and at 0.75 the text
|
|
194
|
+
used to keep a 36px inset against 7px of padding. Stated as the sum it always was,
|
|
195
|
+
it just works. */
|
|
196
|
+
--gog-field-icon-glyph-xsm: 12px;
|
|
197
|
+
--gog-field-icon-glyph-sm: 14px;
|
|
198
|
+
--gog-field-icon-glyph: 16px;
|
|
199
|
+
|
|
200
|
+
/* ── Float label geometry (input / textarea / select / multiselect) ─────────
|
|
201
|
+
One scale for every field that can float its label. Each control reads these
|
|
202
|
+
through its own `--gog-<block>-float-label-*` token in the derived layer below,
|
|
203
|
+
so setting a value here retunes all of them at once while a single control can
|
|
204
|
+
still be tuned on its own. `reserve` is the headroom added inside the field for
|
|
205
|
+
the 'in'/'on' variants; `in-top` is where the label lands once floated for 'in';
|
|
206
|
+
`over-gap`/`over-reserve` are the gap above the border and the space permanently
|
|
207
|
+
kept clear for the 'over' variant. */
|
|
208
|
+
--gog-field-float-label-reserve: 14px;
|
|
209
|
+
--gog-field-float-label-in-top: 6px;
|
|
210
|
+
--gog-field-float-label-over-reserve: 1.4em;
|
|
211
|
+
|
|
212
|
+
/* ── Icon & spinner ───────────────────────────────────────────────────────── */
|
|
213
|
+
--gog-icon-size: 1.2em;
|
|
214
|
+
--gog-icon-stroke-width: 2;
|
|
215
|
+
--gog-spinner-size-xsm: 12px;
|
|
216
|
+
--gog-spinner-size-sm: 18px;
|
|
217
|
+
--gog-spinner-size-md: 48px;
|
|
218
|
+
--gog-spinner-size-lg: 96px;
|
|
219
|
+
--gog-spinner-size-slg: 144px;
|
|
220
|
+
--gog-spinner-rune-size: 20px;
|
|
221
|
+
|
|
222
|
+
/* ── Toast stack ──────────────────────────────────────────────────────────── */
|
|
223
|
+
--gog-toast-min-width: 280px;
|
|
224
|
+
--gog-toast-max-width: 400px;
|
|
225
|
+
--gog-toast-z-index: 9999;
|
|
226
|
+
--gog-toast-enter-distance: 110%;
|
|
227
|
+
--gog-toast-shadow: 0 4px 24px rgba(0, 0, 0, 0.25);
|
|
228
|
+
|
|
229
|
+
/* ── Overlay stacking ───────────────────────────────────────────────────────
|
|
230
|
+
Baseline for dropdown panels. gog-dialog re-declares this on its own panel so
|
|
231
|
+
dropdowns opened inside a dialog stack above it. */
|
|
232
|
+
/* The library's stacking floor. Every layer below is `base + N`, so an app that has to put the
|
|
233
|
+
whole library above its own chrome moves this one number and keeps the internal order —
|
|
234
|
+
badge 1, toast 100, dropdowns and dialogs 300, tooltip 400, the blocking spinner overlay
|
|
235
|
+
8000. Before this, shifting the stack meant editing five tokens and hoping none was missed. */
|
|
236
|
+
--gog-z-base: 0;
|
|
237
|
+
|
|
238
|
+
/* ── Light palette (also the no-data-theme default) ───────────────────────── */
|
|
239
|
+
color-scheme: light;
|
|
240
|
+
/* Backgrounds and surfaces */
|
|
241
|
+
--gog-background-color: #f7f3eb; /* Warm parchment page ground */
|
|
242
|
+
--gog-surface-color: #ffffff; /* Bleached parchment for cards — lighter than the page on purpose, so the two tiers read apart */
|
|
243
|
+
--gog-hover-color: #f0e7d7; /* Hover state — soft wax */
|
|
244
|
+
--gog-border-color: #d8c7ad; /* Aged brass rule */
|
|
245
|
+
|
|
246
|
+
/* Type — old oak-gall ink */
|
|
247
|
+
--gog-text-color: #17120c; /* Deep ink — clears WCAG AAA against both surfaces */
|
|
248
|
+
--gog-accent-text-color: #ffffff;
|
|
249
|
+
--gog-muted-text-color: #63503c; /* Muted kiln ink */
|
|
250
|
+
|
|
251
|
+
/* Brand and accents — guild gold leaf */
|
|
252
|
+
--gog-primary-color: #17120c;
|
|
253
|
+
/* Deep guild gold. Darkened from #9e6f00 in 21.7.0: white on the old value was 4.44:1,
|
|
254
|
+
just under WCAG AA's 4.5, and its hover fill was 2.87:1 — the hover was the worse half.
|
|
255
|
+
The hover is now *darker* than the rest state rather than brighter, because gold light
|
|
256
|
+
enough to read as "a brighter gleam" cannot carry white text at all. */
|
|
257
|
+
--gog-accent-color: #926600;
|
|
258
|
+
--gog-accent-bright: #7a5500;
|
|
259
|
+
--gog-accent-dim: #735100; /* Dark bronze */
|
|
260
|
+
--gog-accent-pale: #f8f1df; /* Pale wash beneath the gold */
|
|
261
|
+
--gog-secondary-color: #6b5328;
|
|
262
|
+
|
|
263
|
+
/* Semantic colours, kept in the alchemical family */
|
|
264
|
+
--gog-success-color: #216e4e; /* Emerald */
|
|
265
|
+
--gog-danger-color: #a7232b; /* Ruby */
|
|
266
|
+
--gog-warning-color: #c45100; /* Dark amber */
|
|
267
|
+
--gog-info-color: #2b5c8f; /* Lapis */
|
|
268
|
+
|
|
269
|
+
/* Soft, deep shadow — old leather */
|
|
270
|
+
--gog-panel-shadow: 0 4px 20px rgba(23, 18, 12, 0.08), 0 1px 3px rgba(23, 18, 12, 0.04);
|
|
271
|
+
--gog-spinner-overlay-bg: rgba(247, 243, 235, 0.85);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
:root[data-theme='light'],
|
|
275
|
+
[data-theme='light'] {
|
|
276
|
+
color-scheme: light;
|
|
277
|
+
|
|
278
|
+
/* Backgrounds and surfaces */
|
|
279
|
+
--gog-background-color: #f7f3eb; /* Warm parchment page ground */
|
|
280
|
+
--gog-surface-color: #ffffff; /* Bleached parchment for cards — lighter than the page on purpose, so the two tiers read apart */
|
|
281
|
+
--gog-hover-color: #f0e7d7; /* Hover state — soft wax */
|
|
282
|
+
--gog-border-color: #d8c7ad; /* Aged brass rule */
|
|
283
|
+
|
|
284
|
+
/* Type — old oak-gall ink */
|
|
285
|
+
--gog-text-color: #17120c; /* Deep ink — clears WCAG AAA against both surfaces */
|
|
286
|
+
--gog-accent-text-color: #ffffff;
|
|
287
|
+
--gog-muted-text-color: #63503c; /* Muted kiln ink */
|
|
288
|
+
|
|
289
|
+
/* Brand and accents — guild gold leaf */
|
|
290
|
+
--gog-primary-color: #17120c;
|
|
291
|
+
/* Deep guild gold. Darkened from #9e6f00 in 21.7.0: white on the old value was 4.44:1,
|
|
292
|
+
just under WCAG AA's 4.5, and its hover fill was 2.87:1 — the hover was the worse half.
|
|
293
|
+
The hover is now *darker* than the rest state rather than brighter, because gold light
|
|
294
|
+
enough to read as "a brighter gleam" cannot carry white text at all. */
|
|
295
|
+
--gog-accent-color: #926600;
|
|
296
|
+
--gog-accent-bright: #7a5500;
|
|
297
|
+
--gog-accent-dim: #735100; /* Dark bronze */
|
|
298
|
+
--gog-accent-pale: #f8f1df; /* Pale wash beneath the gold */
|
|
299
|
+
--gog-secondary-color: #6b5328;
|
|
300
|
+
|
|
301
|
+
/* Semantic colours, kept in the alchemical family */
|
|
302
|
+
--gog-success-color: #216e4e; /* Emerald */
|
|
303
|
+
--gog-danger-color: #a7232b; /* Ruby */
|
|
304
|
+
--gog-warning-color: #c45100; /* Dark amber */
|
|
305
|
+
--gog-info-color: #2b5c8f; /* Lapis */
|
|
306
|
+
|
|
307
|
+
/* Soft, deep shadow — old leather */
|
|
308
|
+
--gog-panel-shadow: 0 4px 20px rgba(23, 18, 12, 0.08), 0 1px 3px rgba(23, 18, 12, 0.04);
|
|
309
|
+
--gog-spinner-overlay-bg: rgba(247, 243, 235, 0.85);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
:root[data-theme='dark'],
|
|
313
|
+
[data-theme='dark'] {
|
|
314
|
+
color-scheme: dark;
|
|
315
|
+
|
|
316
|
+
/* Backgrounds and surfaces */
|
|
317
|
+
--gog-background-color: #0d0b08; /* Deep forge obsidian */
|
|
318
|
+
--gog-surface-color: #16120e; /* Dark fired iron — cards */
|
|
319
|
+
/* Lifted, not shadowed — see --gog-elevated-surface-color. Deliberately a step above
|
|
320
|
+
--gog-hover-color, not equal to it: hover and the header strips are a light lift, elevation
|
|
321
|
+
is a bigger one, and the first attempt gave all three the same value. */
|
|
322
|
+
--gog-hover-color: #241d17; /* Hover state */
|
|
323
|
+
--gog-border-color: #3d3122; /* Aged chased bronze */
|
|
324
|
+
|
|
325
|
+
/* Type — glowing ivory */
|
|
326
|
+
--gog-text-color: #f3ebd8; /* Soft luminous parchment */
|
|
327
|
+
--gog-accent-text-color: #0d0b08;
|
|
328
|
+
--gog-muted-text-color: #9e8d76; /* Muted bronze */
|
|
329
|
+
|
|
330
|
+
/* Brand and accents — the alchemist's glowing gold */
|
|
331
|
+
--gog-primary-color: #f3ebd8;
|
|
332
|
+
--gog-accent-color: #fbbf24; /* Plasma amber */
|
|
333
|
+
--gog-accent-bright: #fde047; /* Bright gold ray */
|
|
334
|
+
--gog-accent-dim: #b48310; /* Muted gold */
|
|
335
|
+
--gog-accent-pale: #2b210c; /* Dark gold reflection */
|
|
336
|
+
--gog-secondary-color: #d4a373;
|
|
337
|
+
|
|
338
|
+
/* Semantics */
|
|
339
|
+
--gog-success-color: #34d399; /* Glowing emerald */
|
|
340
|
+
--gog-danger-color: #f87171; /* Glowing ruby */
|
|
341
|
+
--gog-warning-color: #fbbf24; /* Amber */
|
|
342
|
+
--gog-info-color: #38bdf8; /* Sapphire */
|
|
343
|
+
|
|
344
|
+
--gog-panel-shadow: 0 10px 30px rgba(0, 0, 0, 0.7), 0 0 0 1px var(--gog-border-color);
|
|
345
|
+
/* `elevated` drops the 1px ring `--gog-panel-shadow` carries for real overlays (dialog,
|
|
346
|
+
dropdown, tooltip), because that ring is exactly what `outlined` draws — with it, the two
|
|
347
|
+
card/panel variants render identically on a dark ground. The blur stays; the ring goes,
|
|
348
|
+
so outlined has an edge and elevated does not. Light themes need none of this: their
|
|
349
|
+
shadow has no ring and reads on its own. */
|
|
350
|
+
/* `elevated` cannot use `--gog-panel-shadow` here. That shadow carries a `0 0 0 1px` ring so
|
|
351
|
+
overlays keep an edge against the page, and the ring is exactly what `outlined` draws — with
|
|
352
|
+
it the two variants render identically. Dropping the ring and keeping the 30px black blur was
|
|
353
|
+
worse: black blurred over a near-black page reads as smudge rather than lift.
|
|
354
|
+
|
|
355
|
+
So elevation is stated the way a dark UI actually states it — a hairline of light along the
|
|
356
|
+
top edge, where a raised surface would catch it, over a tighter, darker shadow that stays
|
|
357
|
+
close to the element instead of hazing the page. */
|
|
358
|
+
--gog-card-elevated-shadow:
|
|
359
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.07), 0 2px 6px rgba(0, 0, 0, 0.55);
|
|
360
|
+
--gog-panel-elevated-shadow:
|
|
361
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.07), 0 2px 6px rgba(0, 0, 0, 0.55);
|
|
362
|
+
--gog-spinner-overlay-bg: rgba(13, 11, 8, 0.85);
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/*
|
|
366
|
+
* ── Derived layer ───────────────────────────────────────────────────────────────
|
|
367
|
+
* Re-declared on every theme scope so each one re-derives from its own palette and
|
|
368
|
+
* metrics. Everything here reads another token; nothing here is a bare literal.
|
|
369
|
+
*/
|
|
370
|
+
:root,
|
|
371
|
+
[data-theme] {
|
|
372
|
+
/* ── Derived foundation tokens ───────────────────────────────────────────────
|
|
373
|
+
Split out of the literal block above because they read other tokens: they have
|
|
374
|
+
to re-resolve inside each theme scope. */
|
|
375
|
+
|
|
376
|
+
/* ── Text on a status fill ───────────────────────────────────────────────────
|
|
377
|
+
`--gog-accent-text-color` means "text on the accent fill" and flips with the theme, which
|
|
378
|
+
made it the obvious label for a status fill too — `gogBadge` used it for all four. It is
|
|
379
|
+
wrong for some of them, and silently: measured 2026-09-04, `material`'s amber under white
|
|
380
|
+
was 1.97:1 and `primeng`'s green 2.28:1, both far under AA, in a pair no check had. The
|
|
381
|
+
accent is one colour a theme tunes deliberately; the four statuses are four more, and
|
|
382
|
+
nothing says one label reads on all five.
|
|
383
|
+
|
|
384
|
+
So each status names its own, defaulting to the accent's answer because that is right in
|
|
385
|
+
seven of the eleven themes. A theme states one of these only where its own hue disagrees —
|
|
386
|
+
`material` puts near-black on its amber, which is Material 3's own convention, and `primeng`
|
|
387
|
+
does the same on all three of Aura's bright hues. Where *neither* label reached AA the hue
|
|
388
|
+
itself moved instead; see the preset files. */
|
|
389
|
+
--gog-success-text-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
390
|
+
--gog-danger-text-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
391
|
+
--gog-warning-text-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
392
|
+
--gog-info-text-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
393
|
+
|
|
394
|
+
/* Which way a status fill deepens when it is hovered or held: **away from its own label**, so
|
|
395
|
+
the step always makes the label easier to read rather than harder. That is the theme's ink
|
|
396
|
+
for a fill wearing the accent's white, which is nine of the eleven themes — and the other way
|
|
397
|
+
round for the four fills whose label is the ink itself, `material`'s amber and `primeng`'s
|
|
398
|
+
three, which say so in their own files. Mixing toward a fixed colour instead is what a first
|
|
399
|
+
pass did, and it cost `primeng`'s info button 6.44:1 down to 4.23:1 on press: deepening
|
|
400
|
+
toward the ink walked the fill into the label. */
|
|
401
|
+
--gog-success-shade: var(--gog-text-color);
|
|
402
|
+
--gog-danger-shade: var(--gog-text-color);
|
|
403
|
+
--gog-warning-shade: var(--gog-text-color);
|
|
404
|
+
--gog-info-shade: var(--gog-text-color);
|
|
405
|
+
/* ── Stacking layers ─────────────────────────────────────────────────────────
|
|
406
|
+
All five read `--gog-z-base`, so the whole library moves together. The gaps are
|
|
407
|
+
deliberate: an app that needs to slot its own element between two of these has room
|
|
408
|
+
without touching the library's numbers. */
|
|
409
|
+
--gog-badge-z: calc(var(--gog-z-base) + 1);
|
|
410
|
+
--gog-toast-base-z: calc(var(--gog-z-base) + 100);
|
|
411
|
+
--gog-dropdown-z: calc(var(--gog-z-base) + 300);
|
|
412
|
+
--gog-tooltip-z: calc(var(--gog-z-base) + 400);
|
|
413
|
+
/* The blocking overlay outranks everything, including a dialog it may be covering. */
|
|
414
|
+
--gog-spinner-overlay-z: calc(var(--gog-z-base) + 8000);
|
|
415
|
+
|
|
416
|
+
--gog-space-2: calc(2px * var(--gog-density));
|
|
417
|
+
--gog-space-4: calc(4px * var(--gog-density));
|
|
418
|
+
--gog-space-6: calc(6px * var(--gog-density));
|
|
419
|
+
--gog-space-8: calc(8px * var(--gog-density));
|
|
420
|
+
--gog-space-10: calc(10px * var(--gog-density));
|
|
421
|
+
--gog-space-12: calc(12px * var(--gog-density));
|
|
422
|
+
--gog-space-14: calc(14px * var(--gog-density));
|
|
423
|
+
--gog-space-16: calc(16px * var(--gog-density));
|
|
424
|
+
--gog-space-18: calc(18px * var(--gog-density));
|
|
425
|
+
--gog-space-20: calc(20px * var(--gog-density));
|
|
426
|
+
--gog-space-24: calc(24px * var(--gog-density));
|
|
427
|
+
--gog-space-28: calc(28px * var(--gog-density));
|
|
428
|
+
--gog-space-32: calc(32px * var(--gog-density));
|
|
429
|
+
--gog-space-48: calc(48px * var(--gog-density));
|
|
430
|
+
--gog-space-xs: var(--gog-space-4);
|
|
431
|
+
--gog-space-sm: var(--gog-space-8);
|
|
432
|
+
--gog-space-md: var(--gog-space-16);
|
|
433
|
+
--gog-space-lg: var(--gog-space-24);
|
|
434
|
+
--gog-space-2xl: var(--gog-space-48);
|
|
435
|
+
--gog-control-padding-y: var(--gog-space-10);
|
|
436
|
+
--gog-control-padding-x: var(--gog-space-14);
|
|
437
|
+
--gog-control-checkbox-padding: var(--gog-space-6);
|
|
438
|
+
--gog-field-xsm-padding-y: var(--gog-space-4);
|
|
439
|
+
--gog-field-xsm-padding-x: var(--gog-space-8);
|
|
440
|
+
--gog-field-sm-padding-y: var(--gog-space-6);
|
|
441
|
+
--gog-field-sm-padding-x: var(--gog-space-10);
|
|
442
|
+
--gog-field-lg-padding-y: var(--gog-space-14);
|
|
443
|
+
--gog-field-lg-padding-x: var(--gog-space-18);
|
|
444
|
+
--gog-field-slg-padding-y: var(--gog-space-18);
|
|
445
|
+
--gog-field-slg-padding-x: var(--gog-space-20);
|
|
446
|
+
--gog-field-float-label-over-gap: var(--gog-space-8);
|
|
447
|
+
--gog-toast-gap: var(--gog-space-10);
|
|
448
|
+
--gog-toast-stack-padding: var(--gog-space-16);
|
|
449
|
+
--gog-field-xsm-icon-offset: var(--gog-space-6);
|
|
450
|
+
--gog-field-sm-icon-offset: var(--gog-space-8);
|
|
451
|
+
--gog-field-lg-icon-offset: var(--gog-space-14);
|
|
452
|
+
--gog-field-slg-icon-offset: var(--gog-space-18);
|
|
453
|
+
--gog-control-icon-offset: var(--gog-space-10);
|
|
454
|
+
--gog-elevated-surface-color: var(--gog-surface-color);
|
|
455
|
+
--gog-panel-radius: calc(var(--gog-radius) + 8px);
|
|
456
|
+
--gog-field-xsm-font-size: var(--gog-text-xs);
|
|
457
|
+
--gog-field-sm-font-size: var(--gog-text-sm);
|
|
458
|
+
/* The only field metric that is a type size; the rest of this block is geometry. It lives
|
|
459
|
+
here rather than with them because it reads a token, and a derived value declared on the
|
|
460
|
+
literals-only `:root` freezes to that scope's scale (rule C). */
|
|
461
|
+
--gog-field-slg-font-size: var(--gog-text-slg);
|
|
462
|
+
|
|
463
|
+
--gog-field-md-padding-y: var(--gog-control-padding-y);
|
|
464
|
+
--gog-field-md-padding-x: var(--gog-control-padding-x);
|
|
465
|
+
|
|
466
|
+
/* offset + glyph + offset — see the icon-chrome comment in the literal block above. */
|
|
467
|
+
--gog-field-xsm-icon-inset: calc(
|
|
468
|
+
var(--gog-field-xsm-icon-offset) * 2 + var(--gog-field-icon-glyph-xsm)
|
|
469
|
+
);
|
|
470
|
+
--gog-field-sm-icon-inset: calc(
|
|
471
|
+
var(--gog-field-sm-icon-offset) * 2 + var(--gog-field-icon-glyph-sm)
|
|
472
|
+
);
|
|
473
|
+
--gog-field-md-icon-inset: calc(
|
|
474
|
+
var(--gog-field-md-icon-offset) * 2 + var(--gog-field-icon-glyph)
|
|
475
|
+
);
|
|
476
|
+
--gog-field-lg-icon-inset: calc(
|
|
477
|
+
var(--gog-field-lg-icon-offset) * 2 + var(--gog-field-icon-glyph)
|
|
478
|
+
);
|
|
479
|
+
--gog-field-slg-icon-inset: calc(
|
|
480
|
+
var(--gog-field-slg-icon-offset) * 2 + var(--gog-field-icon-glyph)
|
|
481
|
+
);
|
|
482
|
+
--gog-field-md-font-size: var(--gog-text-md);
|
|
483
|
+
--gog-field-md-icon-offset: var(--gog-control-icon-offset);
|
|
484
|
+
--gog-field-lg-font-size: var(--gog-text-lg);
|
|
485
|
+
|
|
486
|
+
/* ══════════════════════════════════════════════════════════════════════════════
|
|
487
|
+
COMPONENT TOKENS
|
|
488
|
+
Everything below is what an individual component paints with. Override a block
|
|
489
|
+
to restyle just that component; the values themselves all derive from the
|
|
490
|
+
foundation tokens above, so a palette swap carries through for free.
|
|
491
|
+
══════════════════════════════════════════════════════════════════════════════ */
|
|
492
|
+
|
|
493
|
+
/* ── Accordion ─────────────────────────────────────────────────────────────── */
|
|
494
|
+
--gog-accordion-font-family: var(--gog-font-heading);
|
|
495
|
+
--gog-accordion-body-font-family: var(--gog-font-body);
|
|
496
|
+
--gog-accordion-border-color: var(--gog-accent-dim);
|
|
497
|
+
--gog-accordion-border-width: var(--gog-control-border-width);
|
|
498
|
+
--gog-accordion-border-style: var(--gog-control-border-style);
|
|
499
|
+
--gog-accordion-text-color: var(--gog-text-color);
|
|
500
|
+
--gog-accordion-accent-color: var(--gog-accent-color);
|
|
501
|
+
--gog-accordion-hover-bg: var(--gog-hover-color);
|
|
502
|
+
/* The header's label stays body text while hovered or held, and the lift is carried by the
|
|
503
|
+
background alone. It turned `--gog-accordion-accent-color` until 21.9.0, which is the accent
|
|
504
|
+
— on an accent-tinted strip that measured 3.61:1 in light, 3.79:1 in one-light and 4.09:1 in
|
|
505
|
+
ledger, and worse again once the press deepened the tint. Same trade as the ghost button's
|
|
506
|
+
hover, and made for the same reason: the accent is not a text colour on a ground that is
|
|
507
|
+
itself tinted with the accent. */
|
|
508
|
+
--gog-accordion-hover-color: var(--gog-accordion-text-color);
|
|
509
|
+
--gog-accordion-press-bg: var(--gog-border-color);
|
|
510
|
+
--gog-accordion-hover-ring: var(--gog-accent-dim);
|
|
511
|
+
--gog-accordion-focus-ring-width: var(--gog-focus-ring-width);
|
|
512
|
+
--gog-accordion-body-color: var(--gog-text-color);
|
|
513
|
+
--gog-accordion-body-line-height: var(--gog-line-height-loose);
|
|
514
|
+
--gog-accordion-header-text-transform: var(--gog-text-transform);
|
|
515
|
+
--gog-accordion-header-gap: var(--gog-space-12);
|
|
516
|
+
--gog-accordion-disabled-opacity: var(--gog-disabled-opacity);
|
|
517
|
+
--gog-accordion-transition-duration: var(--gog-duration-base);
|
|
518
|
+
--gog-accordion-body-transition-duration: var(--gog-duration-slow);
|
|
519
|
+
--gog-accordion-chevron-transition-duration: var(--gog-duration-slow);
|
|
520
|
+
--gog-accordion-body-lift: -2px;
|
|
521
|
+
/* Flat by default — corner rounding is a look, not a given; consumers who want it
|
|
522
|
+
opt in per-instance or theme-wide by overriding these two. */
|
|
523
|
+
--gog-accordion-radius: 0px;
|
|
524
|
+
--gog-accordion-body-radius: 0px;
|
|
525
|
+
/* The header carries its own ground and the body does not. Both were `transparent` until
|
|
526
|
+
21.7.1, which made every open item one continuous band: header and content painted the
|
|
527
|
+
surrounding surface, and the only thing between two open items was a hairline in the accent
|
|
528
|
+
colour. With several open at once nobody could tell where one ended and the next began.
|
|
529
|
+
|
|
530
|
+
Only the header changed. The body stays transparent on purpose, so an accordion dropped on
|
|
531
|
+
a coloured surface still sits on that colour rather than punching a hole in it. */
|
|
532
|
+
--gog-accordion-header-bg: var(--gog-hover-color);
|
|
533
|
+
--gog-accordion-body-bg: transparent;
|
|
534
|
+
/* Per-size metrics. `lg` is the default size. */
|
|
535
|
+
--gog-accordion-xsm-padding-y: var(--gog-space-4);
|
|
536
|
+
--gog-accordion-xsm-padding-x: var(--gog-space-8);
|
|
537
|
+
--gog-accordion-xsm-font-size: var(--gog-text-xs);
|
|
538
|
+
--gog-accordion-xsm-letter-spacing: 0.2px;
|
|
539
|
+
--gog-accordion-xsm-content-gap: var(--gog-space-2);
|
|
540
|
+
--gog-accordion-xsm-body-font-size: var(--gog-text-xs);
|
|
541
|
+
--gog-accordion-xsm-body-line-height: var(--gog-line-height-relaxed);
|
|
542
|
+
--gog-accordion-xsm-body-padding-top: var(--gog-space-4);
|
|
543
|
+
--gog-accordion-xsm-body-padding-bottom: var(--gog-space-6);
|
|
544
|
+
--gog-accordion-xsm-chevron-size: 11px;
|
|
545
|
+
--gog-accordion-xsm-chevron-font-size: 10px;
|
|
546
|
+
|
|
547
|
+
--gog-accordion-sm-padding-y: var(--gog-space-6);
|
|
548
|
+
--gog-accordion-sm-padding-x: var(--gog-space-10);
|
|
549
|
+
--gog-accordion-sm-font-size: var(--gog-text-xs);
|
|
550
|
+
--gog-accordion-sm-letter-spacing: 0.4px;
|
|
551
|
+
--gog-accordion-sm-content-gap: var(--gog-space-2);
|
|
552
|
+
--gog-accordion-sm-body-font-size: var(--gog-text-xs);
|
|
553
|
+
--gog-accordion-sm-body-line-height: var(--gog-accordion-body-line-height);
|
|
554
|
+
--gog-accordion-sm-body-padding-top: var(--gog-space-6);
|
|
555
|
+
--gog-accordion-sm-body-padding-bottom: var(--gog-space-8);
|
|
556
|
+
--gog-accordion-sm-chevron-size: 13px;
|
|
557
|
+
--gog-accordion-sm-chevron-font-size: 12px;
|
|
558
|
+
|
|
559
|
+
--gog-accordion-md-padding-y: var(--gog-space-10);
|
|
560
|
+
--gog-accordion-md-padding-x: var(--gog-space-14);
|
|
561
|
+
--gog-accordion-md-font-size: var(--gog-text-xs);
|
|
562
|
+
--gog-accordion-md-letter-spacing: 0.8px;
|
|
563
|
+
--gog-accordion-md-content-gap: var(--gog-space-2);
|
|
564
|
+
--gog-accordion-md-body-font-size: var(--gog-text-sm);
|
|
565
|
+
--gog-accordion-md-body-line-height: var(--gog-accordion-body-line-height);
|
|
566
|
+
--gog-accordion-md-body-padding-top: var(--gog-space-8);
|
|
567
|
+
--gog-accordion-md-body-padding-bottom: var(--gog-space-12);
|
|
568
|
+
--gog-accordion-md-chevron-size: 15px;
|
|
569
|
+
--gog-accordion-md-chevron-font-size: 14px;
|
|
570
|
+
|
|
571
|
+
--gog-accordion-lg-padding-y: var(--gog-space-14);
|
|
572
|
+
--gog-accordion-lg-padding-x: var(--gog-space-16);
|
|
573
|
+
--gog-accordion-lg-font-size: var(--gog-text-sm);
|
|
574
|
+
--gog-accordion-lg-letter-spacing: 0.8px;
|
|
575
|
+
--gog-accordion-lg-content-gap: var(--gog-space-4);
|
|
576
|
+
--gog-accordion-lg-body-font-size: var(--gog-text-md);
|
|
577
|
+
--gog-accordion-lg-body-line-height: var(--gog-accordion-body-line-height);
|
|
578
|
+
--gog-accordion-lg-body-padding-top: var(--gog-space-12);
|
|
579
|
+
--gog-accordion-lg-body-padding-bottom: var(--gog-space-16);
|
|
580
|
+
--gog-accordion-lg-chevron-size: 18px;
|
|
581
|
+
--gog-accordion-lg-chevron-font-size: 16px;
|
|
582
|
+
|
|
583
|
+
--gog-accordion-slg-padding-y: var(--gog-space-18);
|
|
584
|
+
--gog-accordion-slg-padding-x: var(--gog-space-18);
|
|
585
|
+
--gog-accordion-slg-font-size: var(--gog-text-md);
|
|
586
|
+
--gog-accordion-slg-letter-spacing: 0.8px;
|
|
587
|
+
--gog-accordion-slg-content-gap: var(--gog-space-4);
|
|
588
|
+
--gog-accordion-slg-body-font-size: var(--gog-text-lg);
|
|
589
|
+
--gog-accordion-slg-body-line-height: var(--gog-accordion-body-line-height);
|
|
590
|
+
--gog-accordion-slg-body-padding-top: var(--gog-space-16);
|
|
591
|
+
--gog-accordion-slg-body-padding-bottom: var(--gog-space-20);
|
|
592
|
+
--gog-accordion-slg-chevron-size: 20px;
|
|
593
|
+
--gog-accordion-slg-chevron-font-size: 18px;
|
|
594
|
+
|
|
595
|
+
/* ── Collapsible ───────────────────────────────────────────────────────────
|
|
596
|
+
No portal, no owned markup — see utilities.css for the actual `.gog-collapsible__*`
|
|
597
|
+
rules (they style content this component's consumer projects, which sits outside
|
|
598
|
+
`gog-collapsible`'s own view and can't be reached by its scoped stylesheet). */
|
|
599
|
+
--gog-collapsible-transition-duration: var(--gog-duration-slow);
|
|
600
|
+
/* The panel's natural height, so an open panel never truncates whatever it holds. This was
|
|
601
|
+
a fixed `480px` cap, which bought the CSS-only transition an animatable target but paid
|
|
602
|
+
for it by silently clipping any taller content — `overflow: hidden` means no scrollbar
|
|
603
|
+
and no other sign that the rest of the panel is missing. `max-content` still animates,
|
|
604
|
+
via `interpolate-size: allow-keywords` on the content element (see utilities.css); where
|
|
605
|
+
that is unsupported the panel snaps open instead of easing, which is the right way round
|
|
606
|
+
for the trade — losing an animation is visible and harmless, losing content is neither.
|
|
607
|
+
Set a length here to cap a particular panel on purpose; it will clip, as before. */
|
|
608
|
+
--gog-collapsible-max-height: max-content;
|
|
609
|
+
--gog-collapsible-disabled-opacity: var(--gog-disabled-opacity);
|
|
610
|
+
|
|
611
|
+
/* ── Button ────────────────────────────────────────────────────────────────
|
|
612
|
+
`--gog-button-bg`, `--gog-button-color`, `--gog-button-border`, `--gog-button-shadow`,
|
|
613
|
+
`--gog-button-hover-bg`, `--gog-button-hover-shadow`, `--gog-button-padding` and
|
|
614
|
+
`--gog-button-font-size` are intentionally NOT declared — they are the per-instance
|
|
615
|
+
escape hatch the variant/size classes fall back through. */
|
|
616
|
+
--gog-button-xsm-padding: var(--gog-space-4) var(--gog-space-8);
|
|
617
|
+
--gog-button-sm-padding: var(--gog-space-8) var(--gog-space-14);
|
|
618
|
+
--gog-button-md-padding: var(--gog-space-12) var(--gog-space-20);
|
|
619
|
+
--gog-button-lg-padding: var(--gog-space-16) var(--gog-space-24);
|
|
620
|
+
--gog-button-slg-padding: var(--gog-space-20) var(--gog-space-28);
|
|
621
|
+
--gog-button-xsm-font-size: var(--gog-text-xs);
|
|
622
|
+
--gog-button-sm-font-size: var(--gog-text-sm);
|
|
623
|
+
--gog-button-md-font-size: var(--gog-text-md);
|
|
624
|
+
--gog-button-lg-font-size: var(--gog-text-lg);
|
|
625
|
+
--gog-button-slg-font-size: var(--gog-text-slg);
|
|
626
|
+
|
|
627
|
+
--gog-button-font-family: var(--gog-font-heading);
|
|
628
|
+
--gog-button-font-weight: var(--gog-font-weight-heavy);
|
|
629
|
+
--gog-button-letter-spacing: var(--gog-letter-spacing);
|
|
630
|
+
--gog-button-text-transform: var(--gog-text-transform);
|
|
631
|
+
--gog-button-line-height: var(--gog-line-height-none);
|
|
632
|
+
--gog-button-gap: var(--gog-space-sm);
|
|
633
|
+
--gog-button-radius: var(--gog-radius);
|
|
634
|
+
--gog-button-border-width: var(--gog-control-border-width);
|
|
635
|
+
--gog-button-border-style: var(--gog-control-border-style);
|
|
636
|
+
--gog-button-transition-duration: var(--gog-duration-base);
|
|
637
|
+
--gog-button-focus-ring-width: var(--gog-focus-ring-width);
|
|
638
|
+
/* One pixel further out than the foundation ring: a filled surface needs the extra air for
|
|
639
|
+
the ring to read as separate from the fill. Written as the foundation plus that pixel
|
|
640
|
+
rather than a flat 3px, so a theme that moves the ring moves this with it. */
|
|
641
|
+
--gog-button-focus-ring-offset: calc(var(--gog-focus-ring-offset) + 1px);
|
|
642
|
+
/* Shipped since before the press had a colour, and left spelled `active` on purpose: renaming
|
|
643
|
+
a token consumers already override needs a deprecation cycle, and this is a patch. The state
|
|
644
|
+
it names is the same one `--gog-button-press-*` paints. */
|
|
645
|
+
--gog-button-active-scale: 0.97;
|
|
646
|
+
--gog-button-disabled-opacity: var(--gog-disabled-opacity);
|
|
647
|
+
--gog-button-loading-opacity: 0.7;
|
|
648
|
+
--gog-button-spinner-max-size: 70%;
|
|
649
|
+
|
|
650
|
+
--gog-button-primary-bg: var(--gog-accent-color);
|
|
651
|
+
--gog-button-primary-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
652
|
+
--gog-button-primary-border: transparent;
|
|
653
|
+
--gog-button-primary-shadow: none;
|
|
654
|
+
--gog-button-primary-hover-bg: var(--gog-accent-bright);
|
|
655
|
+
--gog-button-primary-hover-color: var(--gog-button-primary-color);
|
|
656
|
+
--gog-button-primary-hover-shadow: 0 0 16px var(--gog-accent-pale);
|
|
657
|
+
/* The label's colour, not the page's. `--gog-text-color` is the colour of text on the page
|
|
658
|
+
background, and a filled button is not the page background — on the dark theme that put pale
|
|
659
|
+
parchment on bright amber, which read as a washed-out spinner beside a near-black label. */
|
|
660
|
+
--gog-button-primary-spinner-color: var(--gog-button-primary-color);
|
|
661
|
+
|
|
662
|
+
--gog-button-secondary-bg: var(--gog-secondary-color);
|
|
663
|
+
--gog-button-secondary-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
664
|
+
--gog-button-secondary-border: transparent;
|
|
665
|
+
--gog-button-secondary-shadow: none;
|
|
666
|
+
--gog-button-secondary-hover-bg: var(--gog-accent-color);
|
|
667
|
+
--gog-button-secondary-hover-color: var(--gog-button-secondary-color);
|
|
668
|
+
--gog-button-secondary-hover-shadow: none;
|
|
669
|
+
/* Same reasoning as primary: the other filled variant, the same mismatch. */
|
|
670
|
+
--gog-button-secondary-spinner-color: var(--gog-button-secondary-color);
|
|
671
|
+
|
|
672
|
+
--gog-button-outline-bg: transparent;
|
|
673
|
+
--gog-button-outline-color: var(--gog-accent-color);
|
|
674
|
+
--gog-button-outline-border: var(--gog-accent-color);
|
|
675
|
+
--gog-button-outline-shadow: none;
|
|
676
|
+
--gog-button-outline-hover-bg: var(--gog-accent-color);
|
|
677
|
+
/* The label sits on the accent fill once the button is hovered, so it takes the token that
|
|
678
|
+
means "text on an accent fill" — the same one the two filled variants use. It read
|
|
679
|
+
`--gog-primary-color` until 21.9.0, which is the colour of text on the *page*, and the
|
|
680
|
+
result failed WCAG AA in all 11 shipped themes: 1.11:1 in one-dark, 1.41:1 in dark, 3.65:1
|
|
681
|
+
in light at best. It was invisible to `check:contrast` because that script had no pair for
|
|
682
|
+
this label, the same way it had none for the hover fill until 2026-08-29. It has both now. */
|
|
683
|
+
--gog-button-outline-hover-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
684
|
+
--gog-button-outline-hover-shadow: none;
|
|
685
|
+
--gog-button-outline-spinner-color: var(--gog-accent-color);
|
|
686
|
+
|
|
687
|
+
--gog-button-ghost-bg: transparent;
|
|
688
|
+
--gog-button-ghost-color: var(--gog-accent-color);
|
|
689
|
+
--gog-button-ghost-border: transparent;
|
|
690
|
+
--gog-button-ghost-shadow: none;
|
|
691
|
+
--gog-button-ghost-hover-bg: var(--gog-hover-color);
|
|
692
|
+
/* The label leaves the accent while the ground is tinted, and that is the only thing that
|
|
693
|
+
works here. Ghost's resting label *is* `--gog-accent-color`, and its hover tints the ground
|
|
694
|
+
with the same accent, so the two walk toward each other: measured across all 11 themes, the
|
|
695
|
+
label fell under 4.5:1 in `light` (3.94), `primeng` (4.18) and `one-light` (4.22). No ground
|
|
696
|
+
fixes it — a half-strength wash, a neutral `--gog-hover-color`, a text scrim and an
|
|
697
|
+
accent-dim wash were all measured, and `light` fails every one of them, because
|
|
698
|
+
`--gog-accent-color` as *text* on that theme's own background is 4.60:1 with no headroom to
|
|
699
|
+
spend. Moving the label to `--gog-text-color` clears 5.29:1 at worst (one-dark) and leaves
|
|
700
|
+
the ground exactly as it was, so the hover stays the subtle wash this variant is documented
|
|
701
|
+
to have. The press then goes the other way and fills — see `-press-bg` below. */
|
|
702
|
+
--gog-button-ghost-hover-color: var(--gog-text-color);
|
|
703
|
+
--gog-button-ghost-hover-shadow: none;
|
|
704
|
+
--gog-button-ghost-spinner-color: var(--gog-accent-color);
|
|
705
|
+
|
|
706
|
+
/* The held state, and the reason it is a colour rather than only the `--gog-button-active-scale`
|
|
707
|
+
it used to be: `prefers-reduced-motion` switches that transform off, which left a button with
|
|
708
|
+
no press feedback at all for the readers most likely to need it. A colour change is a state,
|
|
709
|
+
not a movement — reduced motion keeps it and only drops the scale, and with transitions off it
|
|
710
|
+
lands instantly. See docs/feedback-triage.md's closing section: reduced motion must remove the
|
|
711
|
+
animation, not the information.
|
|
712
|
+
|
|
713
|
+
Each variant goes one step *deeper* than its own hover, so pressing is distinguishable while
|
|
714
|
+
hovering, which is the normal case for a pointer. `--gog-accent-dim` is that step for the
|
|
715
|
+
three accent-carrying variants; ghost has no fill of its own to deepen, so it takes a
|
|
716
|
+
stronger wash of the same tint its hover uses (see the @supports block at the end of this
|
|
717
|
+
file for the mixed value and why the flat one above it is not a fallback but the value). */
|
|
718
|
+
/* The *toggle* state — `aria-pressed="true"`, a button that stays on — as an inset ring rather
|
|
719
|
+
than a fill. A fill cannot carry it: every other state already owns the background, so a
|
|
720
|
+
toggled button that is also hovered or held would lose the one thing saying it is on. A ring
|
|
721
|
+
composes with all of them, and it is the same reasoning that made `gog-button-toggle-group`'s
|
|
722
|
+
selected option a fill: there, nothing else was competing for the background.
|
|
723
|
+
|
|
724
|
+
The ring takes the colour that is guaranteed to read on its own variant — the label colour on
|
|
725
|
+
the filled two, the accent on the transparent two — so both are pairs `check:contrast`
|
|
726
|
+
already gates. While toggled, this replaces the variant's `box-shadow`, which costs
|
|
727
|
+
`primary` its hover glow: the ring is state and the glow is decoration, and a `box-shadow`
|
|
728
|
+
list cannot hold `none` as a layer, so keeping both was not on offer. */
|
|
729
|
+
--gog-button-toggled-ring-width: 2px;
|
|
730
|
+
--gog-button-primary-toggled-shadow: inset 0 0 0 var(--gog-button-toggled-ring-width)
|
|
731
|
+
var(--gog-accent-text-color, var(--gog-primary-color));
|
|
732
|
+
--gog-button-secondary-toggled-shadow: var(--gog-button-primary-toggled-shadow);
|
|
733
|
+
--gog-button-outline-toggled-shadow: inset 0 0 0 var(--gog-button-toggled-ring-width)
|
|
734
|
+
var(--gog-accent-color);
|
|
735
|
+
--gog-button-ghost-toggled-shadow: var(--gog-button-outline-toggled-shadow);
|
|
736
|
+
|
|
737
|
+
--gog-button-primary-press-bg: var(--gog-accent-dim);
|
|
738
|
+
--gog-button-primary-press-color: var(--gog-button-primary-color);
|
|
739
|
+
--gog-button-secondary-press-bg: var(--gog-accent-dim);
|
|
740
|
+
--gog-button-secondary-press-color: var(--gog-button-secondary-color);
|
|
741
|
+
--gog-button-outline-press-bg: var(--gog-accent-dim);
|
|
742
|
+
--gog-button-outline-press-color: var(--gog-button-outline-hover-color);
|
|
743
|
+
/* Ghost presses to the same deep fill as outline, rather than to a wash like every other
|
|
744
|
+
surface in this file. Measured across all 11 themes: a wash cannot work here, because this
|
|
745
|
+
button's *label* is the accent, so tinting its ground with the accent walks the two together
|
|
746
|
+
— a 24% wash put the label under 4.5:1 in seven themes, and `--gog-accent-pale` was either
|
|
747
|
+
no better or invisible against the hover. A filled press moves the label to
|
|
748
|
+
`--gog-accent-text-color` instead, which is the pair `check:contrast` already gates, so no
|
|
749
|
+
future theme can quietly break it. The other eight surfaces keep their washes: their labels
|
|
750
|
+
are body text, and their worst case across the 11 is 4.80:1. */
|
|
751
|
+
--gog-button-ghost-press-bg: var(--gog-accent-dim);
|
|
752
|
+
--gog-button-ghost-press-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
753
|
+
|
|
754
|
+
/* ── Button severity ─────────────────────────────────────────────────────────
|
|
755
|
+
`severity` is orthogonal to `variant`: a destructive action can be a filled button, an
|
|
756
|
+
outlined one or a ghost, and it is still destructive. So this is not a fifth variant — it
|
|
757
|
+
re-points the *ingredients* the four variants are built from, and the shape rules in
|
|
758
|
+
`styles/button.css` apply them per variant. Four severities x six ingredients rather than
|
|
759
|
+
four x four variants x eleven properties, which is what a fifth-variant reading would have
|
|
760
|
+
cost.
|
|
761
|
+
|
|
762
|
+
`-fill` and `-on-fill` are the filled pair, and `-on-fill` is `--gog-<status>-text-color`
|
|
763
|
+
rather than `--gog-accent-text-color`: see that block near the top of this file for why one
|
|
764
|
+
label does not read on every status.
|
|
765
|
+
|
|
766
|
+
`-ink` is the label a *transparent* variant paints, and it is not the raw status colour. As
|
|
767
|
+
text on the page, the raw hue clears 4.5:1 in only five of the eleven themes — `primeng`'s
|
|
768
|
+
amber manages 2.05:1 — so it is mixed toward the theme's own ink until it does. The 50% is
|
|
769
|
+
measured rather than chosen: `material`'s amber is the binding case and needs the hue below
|
|
770
|
+
54%, so 50 clears every theme with a little headroom. It costs saturation on the themes that
|
|
771
|
+
never needed it; a theme that wants the colour back overrides `--gog-button-<status>-ink`
|
|
772
|
+
directly, which is one token rather than a dial nobody would find. Mixing toward `--gog-text-color` rather than a
|
|
773
|
+
fixed black is what makes one number work on light and dark alike — the ink is dark on one
|
|
774
|
+
and light on the other, and both directions move *away* from the ground.
|
|
775
|
+
|
|
776
|
+
The hover and press fills move the same way, one small step and one larger, so a severity
|
|
777
|
+
button's states step the way an accent one's do. Moving toward the ink also moves away from
|
|
778
|
+
`-on-fill` in the seven themes where that is the accent's white-or-near-black, so the label
|
|
779
|
+
gets easier rather than harder; in the four where `-on-fill` *is* the ink, the rest state
|
|
780
|
+
starts at 6.44:1 or better and a 24% step cannot spend that. The flat values here are what a
|
|
781
|
+
browser without `color-mix()` renders — no step, the same graceful nothing the ghost button
|
|
782
|
+
degrades to — and the mixed ones are in the @supports block at the end of this file. */
|
|
783
|
+
--gog-button-success-fill: var(--gog-success-color);
|
|
784
|
+
--gog-button-success-on-fill: var(--gog-success-text-color);
|
|
785
|
+
--gog-button-success-fill-hover: var(--gog-success-color);
|
|
786
|
+
--gog-button-success-fill-press: var(--gog-success-color);
|
|
787
|
+
--gog-button-success-ink: var(--gog-success-color);
|
|
788
|
+
--gog-button-success-wash: transparent;
|
|
789
|
+
|
|
790
|
+
--gog-button-danger-fill: var(--gog-danger-color);
|
|
791
|
+
--gog-button-danger-on-fill: var(--gog-danger-text-color);
|
|
792
|
+
--gog-button-danger-fill-hover: var(--gog-danger-color);
|
|
793
|
+
--gog-button-danger-fill-press: var(--gog-danger-color);
|
|
794
|
+
--gog-button-danger-ink: var(--gog-danger-color);
|
|
795
|
+
--gog-button-danger-wash: transparent;
|
|
796
|
+
|
|
797
|
+
--gog-button-warning-fill: var(--gog-warning-color);
|
|
798
|
+
--gog-button-warning-on-fill: var(--gog-warning-text-color);
|
|
799
|
+
--gog-button-warning-fill-hover: var(--gog-warning-color);
|
|
800
|
+
--gog-button-warning-fill-press: var(--gog-warning-color);
|
|
801
|
+
--gog-button-warning-ink: var(--gog-warning-color);
|
|
802
|
+
--gog-button-warning-wash: transparent;
|
|
803
|
+
|
|
804
|
+
--gog-button-info-fill: var(--gog-info-color);
|
|
805
|
+
--gog-button-info-on-fill: var(--gog-info-text-color);
|
|
806
|
+
--gog-button-info-fill-hover: var(--gog-info-color);
|
|
807
|
+
--gog-button-info-fill-press: var(--gog-info-color);
|
|
808
|
+
--gog-button-info-ink: var(--gog-info-color);
|
|
809
|
+
--gog-button-info-wash: transparent;
|
|
810
|
+
|
|
811
|
+
/* ── Button toggle group ───────────────────────────────────────────────────
|
|
812
|
+
`--gog-button-toggle-bg`, `-color`, `-padding` and `-font-size` are intentionally NOT
|
|
813
|
+
declared — they are the per-instance escape hatch the size classes fall back through.
|
|
814
|
+
Padding/font-size reuse the `--gog-button-<size>-*` scale so a toggle group and a
|
|
815
|
+
`<gog-button>` at the same `size` line up in a toolbar. */
|
|
816
|
+
--gog-button-toggle-font-family: var(--gog-font-heading);
|
|
817
|
+
--gog-button-toggle-font-weight: var(--gog-font-weight-bold);
|
|
818
|
+
--gog-button-toggle-letter-spacing: 0.5px;
|
|
819
|
+
--gog-button-toggle-text-transform: var(--gog-text-transform);
|
|
820
|
+
--gog-button-toggle-line-height: var(--gog-line-height-none);
|
|
821
|
+
--gog-button-toggle-gap: var(--gog-space-sm);
|
|
822
|
+
--gog-button-toggle-icon-size: 1.1em;
|
|
823
|
+
--gog-button-toggle-radius: var(--gog-radius);
|
|
824
|
+
--gog-button-toggle-border-width: var(--gog-control-border-width);
|
|
825
|
+
--gog-button-toggle-border-style: var(--gog-control-border-style);
|
|
826
|
+
--gog-button-toggle-border-color: var(--gog-border-color);
|
|
827
|
+
--gog-button-toggle-rest-bg: transparent;
|
|
828
|
+
--gog-button-toggle-rest-color: var(--gog-text-color);
|
|
829
|
+
--gog-button-toggle-hover-bg: var(--gog-hover-color);
|
|
830
|
+
--gog-button-toggle-press-bg: var(--gog-border-color);
|
|
831
|
+
--gog-button-toggle-hover-color: var(--gog-text-color);
|
|
832
|
+
--gog-button-toggle-selected-bg: var(--gog-accent-color);
|
|
833
|
+
--gog-button-toggle-selected-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
834
|
+
--gog-button-toggle-selected-border-color: var(--gog-accent-color);
|
|
835
|
+
/* A selected option is already filled with the accent, so its press deepens the fill the way
|
|
836
|
+
the filled button variants do rather than washing over it. */
|
|
837
|
+
--gog-button-toggle-selected-press-bg: var(--gog-accent-dim);
|
|
838
|
+
--gog-button-toggle-separated-gap: var(--gog-space-sm);
|
|
839
|
+
--gog-button-toggle-transition-duration: var(--gog-duration-base);
|
|
840
|
+
--gog-button-toggle-disabled-opacity: var(--gog-disabled-opacity);
|
|
841
|
+
--gog-button-toggle-focus-ring-width: var(--gog-focus-ring-width);
|
|
842
|
+
--gog-button-toggle-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
843
|
+
--gog-button-toggle-focus-ring-color: var(--gog-accent-color);
|
|
844
|
+
|
|
845
|
+
/* ── Calendar (the month grid inside gog-datepicker, and gog-calendar on its own) ── */
|
|
846
|
+
--gog-calendar-font-family: var(--gog-font-body);
|
|
847
|
+
--gog-calendar-color: var(--gog-text-color);
|
|
848
|
+
/* Caps the host at its month grid instead of letting the header spread to the container.
|
|
849
|
+
`100%` restores the pre-21.5.0 full-width behaviour. */
|
|
850
|
+
--gog-calendar-max-width: max-content;
|
|
851
|
+
--gog-calendar-padding: var(--gog-space-12);
|
|
852
|
+
--gog-calendar-header-gap: var(--gog-space-4);
|
|
853
|
+
--gog-calendar-header-margin: var(--gog-space-8);
|
|
854
|
+
--gog-calendar-months-gap: var(--gog-space-16);
|
|
855
|
+
--gog-calendar-title-color: var(--gog-text-color);
|
|
856
|
+
--gog-calendar-title-font-weight: var(--gog-font-weight-bold);
|
|
857
|
+
--gog-calendar-nav-size: 28px;
|
|
858
|
+
--gog-calendar-nav-radius: calc(var(--gog-radius) - 2px);
|
|
859
|
+
--gog-calendar-nav-bg: transparent;
|
|
860
|
+
--gog-calendar-nav-color: var(--gog-muted-text-color);
|
|
861
|
+
--gog-calendar-nav-hover-bg: var(--gog-hover-color);
|
|
862
|
+
--gog-calendar-nav-hover-color: var(--gog-text-color);
|
|
863
|
+
--gog-calendar-nav-icon-size: 0.8rem;
|
|
864
|
+
/* Pulls the two chevrons of a year step together so they read as one control. */
|
|
865
|
+
--gog-calendar-nav-icon-overlap: -0.35em;
|
|
866
|
+
--gog-calendar-weekday-padding: var(--gog-space-4) 0;
|
|
867
|
+
--gog-calendar-weekday-color: var(--gog-muted-text-color);
|
|
868
|
+
--gog-calendar-weekday-font-size: var(--gog-text-xs);
|
|
869
|
+
--gog-calendar-weekday-font-weight: var(--gog-font-weight-semibold);
|
|
870
|
+
--gog-calendar-weekday-text-transform: var(--gog-text-transform);
|
|
871
|
+
--gog-calendar-day-radius: calc(var(--gog-radius) - 2px);
|
|
872
|
+
--gog-calendar-day-border-width: var(--gog-border-width);
|
|
873
|
+
--gog-calendar-day-border-style: var(--gog-border-style);
|
|
874
|
+
--gog-calendar-day-rest-bg: transparent;
|
|
875
|
+
--gog-calendar-day-rest-color: var(--gog-text-color);
|
|
876
|
+
--gog-calendar-day-hover-bg: var(--gog-hover-color);
|
|
877
|
+
--gog-calendar-day-outside-color: var(--gog-muted-text-color);
|
|
878
|
+
--gog-calendar-today-border-color: var(--gog-accent-color);
|
|
879
|
+
--gog-calendar-today-font-weight: var(--gog-font-weight-bold);
|
|
880
|
+
--gog-calendar-selected-bg: var(--gog-accent-color);
|
|
881
|
+
--gog-calendar-selected-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
882
|
+
--gog-calendar-selected-font-weight: var(--gog-font-weight-bold);
|
|
883
|
+
/* The wash between the two ends of a range: same hue, low enough to read as a band rather
|
|
884
|
+
than as a second selection. */
|
|
885
|
+
--gog-calendar-range-bg: var(--gog-accent-pale);
|
|
886
|
+
--gog-calendar-range-color: var(--gog-text-color);
|
|
887
|
+
--gog-calendar-disabled-opacity: var(--gog-disabled-opacity);
|
|
888
|
+
--gog-calendar-transition-duration: var(--gog-duration-fast);
|
|
889
|
+
--gog-calendar-focus-ring-width: var(--gog-focus-ring-width);
|
|
890
|
+
/* Inset rather than outset: the month grid packs its cells edge to edge, so an outward ring
|
|
891
|
+
would sit on top of the neighbouring day. Negated from the foundation so a theme still
|
|
892
|
+
controls how far it sits from the cell edge. */
|
|
893
|
+
--gog-calendar-focus-ring-offset: calc(var(--gog-focus-ring-offset) * -1);
|
|
894
|
+
--gog-calendar-focus-ring-color: var(--gog-accent-color);
|
|
895
|
+
--gog-calendar-divider-width: 1px;
|
|
896
|
+
--gog-calendar-divider-style: solid;
|
|
897
|
+
--gog-calendar-divider-color: var(--gog-border-color);
|
|
898
|
+
--gog-calendar-time-gap: var(--gog-space-6);
|
|
899
|
+
--gog-calendar-time-margin: var(--gog-space-10);
|
|
900
|
+
--gog-calendar-time-input-width: 3.5rem;
|
|
901
|
+
--gog-calendar-time-input-padding: var(--gog-space-4) var(--gog-space-6);
|
|
902
|
+
--gog-calendar-time-input-bg: var(--gog-background-color);
|
|
903
|
+
--gog-calendar-action-padding: var(--gog-space-4) var(--gog-space-10);
|
|
904
|
+
--gog-calendar-footer-gap: var(--gog-space-8);
|
|
905
|
+
--gog-calendar-xsm-font-size: var(--gog-text-xs);
|
|
906
|
+
--gog-calendar-xsm-day-size: 24px;
|
|
907
|
+
--gog-calendar-sm-font-size: var(--gog-text-sm);
|
|
908
|
+
--gog-calendar-sm-day-size: 28px;
|
|
909
|
+
--gog-calendar-md-font-size: var(--gog-text-sm);
|
|
910
|
+
--gog-calendar-md-day-size: 34px;
|
|
911
|
+
--gog-calendar-lg-font-size: var(--gog-text-md);
|
|
912
|
+
--gog-calendar-lg-day-size: 40px;
|
|
913
|
+
--gog-calendar-slg-font-size: var(--gog-text-lg);
|
|
914
|
+
--gog-calendar-slg-day-size: 46px;
|
|
915
|
+
|
|
916
|
+
/* ── Card ──────────────────────────────────────────────────────────────────
|
|
917
|
+
`--gog-card-bg`, `--gog-card-border-color`, `--gog-card-shadow`, `--gog-card-padding-y`,
|
|
918
|
+
`--gog-card-padding-x` and `--gog-card-gap` are intentionally NOT declared — they are the
|
|
919
|
+
per-instance escape hatch the variant and size classes fall back through. */
|
|
920
|
+
--gog-card-font-family: var(--gog-font-body);
|
|
921
|
+
--gog-card-color: var(--gog-text-color);
|
|
922
|
+
--gog-card-radius: var(--gog-radius);
|
|
923
|
+
--gog-card-border-width: var(--gog-panel-border-width);
|
|
924
|
+
--gog-card-border-style: var(--gog-panel-border-style);
|
|
925
|
+
--gog-card-transition-duration: var(--gog-duration-base);
|
|
926
|
+
|
|
927
|
+
--gog-card-heading-color: var(--gog-text-color);
|
|
928
|
+
--gog-card-heading-font-family: var(--gog-font-heading);
|
|
929
|
+
--gog-card-heading-font-size: var(--gog-text-lg);
|
|
930
|
+
--gog-card-heading-font-weight: var(--gog-font-weight-semibold);
|
|
931
|
+
--gog-card-heading-line-height: var(--gog-line-height-snug);
|
|
932
|
+
|
|
933
|
+
--gog-card-outlined-bg: var(--gog-surface-color);
|
|
934
|
+
--gog-card-outlined-border-color: var(--gog-border-color);
|
|
935
|
+
--gog-card-outlined-shadow: none;
|
|
936
|
+
--gog-card-elevated-bg: var(--gog-elevated-surface-color);
|
|
937
|
+
--gog-card-elevated-border-color: transparent;
|
|
938
|
+
/* The shared surface shadow, so a card sits at the same elevation as a dialog or a
|
|
939
|
+
dropdown panel instead of inventing a second house style for "raised". */
|
|
940
|
+
--gog-card-elevated-shadow: var(--gog-panel-shadow);
|
|
941
|
+
--gog-card-filled-bg: var(--gog-accent-pale);
|
|
942
|
+
--gog-card-filled-border-color: transparent;
|
|
943
|
+
--gog-card-filled-shadow: none;
|
|
944
|
+
|
|
945
|
+
/* Hover and focus only ever show on a card that holds a `gogCardLink`. */
|
|
946
|
+
--gog-card-hover-border-color: var(--gog-accent-dim);
|
|
947
|
+
--gog-card-hover-shadow: var(--gog-panel-shadow);
|
|
948
|
+
--gog-card-focus-ring: var(--gog-accent-color);
|
|
949
|
+
--gog-card-focus-ring-width: var(--gog-focus-ring-width);
|
|
950
|
+
--gog-card-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
951
|
+
--gog-card-disabled-opacity: var(--gog-disabled-opacity);
|
|
952
|
+
|
|
953
|
+
--gog-card-footer-border-color: var(--gog-border-color);
|
|
954
|
+
--gog-card-footer-gap: var(--gog-space-sm);
|
|
955
|
+
--gog-card-footer-padding-top: var(--gog-space-sm);
|
|
956
|
+
|
|
957
|
+
--gog-card-xsm-padding-y: var(--gog-space-8);
|
|
958
|
+
--gog-card-xsm-padding-x: var(--gog-space-10);
|
|
959
|
+
--gog-card-xsm-gap: var(--gog-space-6);
|
|
960
|
+
--gog-card-sm-padding-y: var(--gog-space-12);
|
|
961
|
+
--gog-card-sm-padding-x: var(--gog-space-14);
|
|
962
|
+
--gog-card-sm-gap: var(--gog-space-sm);
|
|
963
|
+
--gog-card-md-padding-y: var(--gog-space-md);
|
|
964
|
+
--gog-card-md-padding-x: var(--gog-space-20);
|
|
965
|
+
--gog-card-md-gap: var(--gog-space-12);
|
|
966
|
+
--gog-card-lg-padding-y: var(--gog-space-20);
|
|
967
|
+
--gog-card-lg-padding-x: var(--gog-space-lg);
|
|
968
|
+
--gog-card-lg-gap: var(--gog-space-14);
|
|
969
|
+
--gog-card-slg-padding-y: var(--gog-space-28);
|
|
970
|
+
--gog-card-slg-padding-x: var(--gog-space-32);
|
|
971
|
+
--gog-card-slg-gap: var(--gog-space-md);
|
|
972
|
+
|
|
973
|
+
/* ── Checkbox ──────────────────────────────────────────────────────────────
|
|
974
|
+
Box/label/icon size and padding come from the `--gog-control-checkbox-*` scale;
|
|
975
|
+
checkbox.component.ts maps the `size` input onto the host. */
|
|
976
|
+
--gog-checkbox-font-family: var(--gog-font-body);
|
|
977
|
+
--gog-checkbox-gap: var(--gog-space-10);
|
|
978
|
+
--gog-checkbox-radius: var(--gog-radius);
|
|
979
|
+
--gog-checkbox-border-width: var(--gog-control-border-width);
|
|
980
|
+
--gog-checkbox-border-style: var(--gog-control-border-style);
|
|
981
|
+
--gog-checkbox-border-color: var(--gog-accent-dim);
|
|
982
|
+
--gog-checkbox-bg: var(--gog-surface-color);
|
|
983
|
+
--gog-checkbox-checked-bg: var(--gog-accent-color);
|
|
984
|
+
--gog-checkbox-checked-border: var(--gog-accent-color);
|
|
985
|
+
--gog-checkbox-icon-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
986
|
+
--gog-checkbox-label-color: var(--gog-muted-text-color);
|
|
987
|
+
--gog-checkbox-label-line-height: var(--gog-line-height-snug);
|
|
988
|
+
--gog-checkbox-focus-ring: var(--gog-accent-pale);
|
|
989
|
+
--gog-checkbox-focus-ring-width: var(--gog-focus-ring-width);
|
|
990
|
+
--gog-checkbox-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
991
|
+
--gog-checkbox-disabled-opacity: var(--gog-disabled-opacity);
|
|
992
|
+
--gog-checkbox-transition-duration: var(--gog-duration-base);
|
|
993
|
+
--gog-checkbox-dash-width-ratio: 0.45;
|
|
994
|
+
--gog-checkbox-dash-height: 2px;
|
|
995
|
+
--gog-checkbox-dash-radius: 999px;
|
|
996
|
+
|
|
997
|
+
/* ── Radio group ───────────────────────────────────────────────────────────
|
|
998
|
+
Box/label size reuse the `--gog-control-checkbox-*` scale (see Checkbox above);
|
|
999
|
+
radio-group.component.ts maps the `size` input onto the host the same way. */
|
|
1000
|
+
--gog-radio-font-family: var(--gog-font-body);
|
|
1001
|
+
--gog-radio-group-gap: var(--gog-space-10);
|
|
1002
|
+
--gog-radio-group-label-size: var(--gog-text-sm);
|
|
1003
|
+
--gog-radio-group-label-color: var(--gog-muted-text-color);
|
|
1004
|
+
--gog-radio-group-option-gap: var(--gog-space-8);
|
|
1005
|
+
--gog-radio-group-option-gap-horizontal: var(--gog-space-20);
|
|
1006
|
+
--gog-radio-gap: var(--gog-space-10);
|
|
1007
|
+
--gog-radio-border-width: var(--gog-control-border-width);
|
|
1008
|
+
--gog-radio-border-style: var(--gog-control-border-style);
|
|
1009
|
+
--gog-radio-border-color: var(--gog-accent-dim);
|
|
1010
|
+
--gog-radio-bg: var(--gog-surface-color);
|
|
1011
|
+
--gog-radio-checked-bg: var(--gog-surface-color);
|
|
1012
|
+
--gog-radio-checked-border: var(--gog-accent-color);
|
|
1013
|
+
--gog-radio-dot-color: var(--gog-accent-color);
|
|
1014
|
+
--gog-radio-dot-size-ratio: 0.45;
|
|
1015
|
+
--gog-radio-label-color: var(--gog-muted-text-color);
|
|
1016
|
+
--gog-radio-label-line-height: var(--gog-line-height-snug);
|
|
1017
|
+
--gog-radio-focus-ring: var(--gog-accent-pale);
|
|
1018
|
+
--gog-radio-focus-ring-width: var(--gog-focus-ring-width);
|
|
1019
|
+
--gog-radio-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
1020
|
+
--gog-radio-disabled-opacity: var(--gog-disabled-opacity);
|
|
1021
|
+
--gog-radio-transition-duration: var(--gog-duration-base);
|
|
1022
|
+
--gog-radio-error-font-size: var(--gog-text-xs);
|
|
1023
|
+
--gog-radio-error-color: var(--gog-danger-color);
|
|
1024
|
+
|
|
1025
|
+
/* ── Chip ──────────────────────────────────────────────────────────────────
|
|
1026
|
+
`--gog-chip-*` size tokens below are the per-size scale; the unsuffixed
|
|
1027
|
+
`--gog-chip-font-size`/`-padding-*`/`-gap`/`-avatar-size`/`-icon-size`/
|
|
1028
|
+
`-remove-size` are left undeclared as the per-instance escape hatch. */
|
|
1029
|
+
--gog-chip-font-family: inherit;
|
|
1030
|
+
--gog-chip-bg: var(--gog-surface-color);
|
|
1031
|
+
--gog-chip-hover-bg: var(--gog-hover-color);
|
|
1032
|
+
--gog-chip-press-bg: var(--gog-border-color);
|
|
1033
|
+
--gog-chip-border: var(--gog-border-color);
|
|
1034
|
+
--gog-chip-border-width: var(--gog-border-width);
|
|
1035
|
+
--gog-chip-border-style: var(--gog-border-style);
|
|
1036
|
+
--gog-chip-color: var(--gog-text-color);
|
|
1037
|
+
--gog-chip-font-weight: var(--gog-font-weight-medium);
|
|
1038
|
+
--gog-chip-line-height: var(--gog-line-height-tight);
|
|
1039
|
+
--gog-chip-radius: max(var(--gog-radius), 2px);
|
|
1040
|
+
--gog-chip-pill-radius: 9999px;
|
|
1041
|
+
--gog-chip-remove-color: var(--gog-muted-text-color);
|
|
1042
|
+
--gog-chip-remove-hover-color: var(--gog-text-color);
|
|
1043
|
+
--gog-chip-remove-scale: 1.1;
|
|
1044
|
+
--gog-chip-avatar-inset-ratio: 0.9;
|
|
1045
|
+
--gog-chip-remove-inset-ratio: 0.85;
|
|
1046
|
+
--gog-chip-disabled-opacity: var(--gog-disabled-opacity);
|
|
1047
|
+
/* A selected filter chip (`[(selected)]`, 21.9.0). An inset ring for the reason
|
|
1048
|
+
`--gog-button-primary-toggled-shadow` gives: hover and press own the background, and a
|
|
1049
|
+
selected chip has to stay selected while it is also hovered or held. The accent, so it is
|
|
1050
|
+
the same pair the focus ring is already gated on — and unlike the button there is only one
|
|
1051
|
+
chip variant, so one token covers it. Override this token on the host to restyle a single
|
|
1052
|
+
chip. */
|
|
1053
|
+
--gog-chip-selected-ring-width: 2px;
|
|
1054
|
+
--gog-chip-selected-shadow: inset 0 0 0 var(--gog-chip-selected-ring-width)
|
|
1055
|
+
var(--gog-accent-color);
|
|
1056
|
+
--gog-chip-focus-ring-width: 2px;
|
|
1057
|
+
--gog-chip-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
1058
|
+
|
|
1059
|
+
--gog-chip-xsm-font-size: 0.6875rem;
|
|
1060
|
+
--gog-chip-xsm-padding-block: var(--gog-space-4);
|
|
1061
|
+
--gog-chip-xsm-padding-inline: var(--gog-space-6);
|
|
1062
|
+
--gog-chip-xsm-gap: var(--gog-space-4);
|
|
1063
|
+
--gog-chip-xsm-avatar-size: 0.875rem;
|
|
1064
|
+
--gog-chip-xsm-icon-size: 0.6875rem;
|
|
1065
|
+
--gog-chip-xsm-remove-size: 0.75rem;
|
|
1066
|
+
|
|
1067
|
+
--gog-chip-sm-font-size: var(--gog-text-xs);
|
|
1068
|
+
--gog-chip-sm-padding-block: var(--gog-space-4);
|
|
1069
|
+
--gog-chip-sm-padding-inline: var(--gog-space-8);
|
|
1070
|
+
--gog-chip-sm-gap: var(--gog-space-6);
|
|
1071
|
+
--gog-chip-sm-avatar-size: 1rem;
|
|
1072
|
+
--gog-chip-sm-icon-size: 0.75rem;
|
|
1073
|
+
--gog-chip-sm-remove-size: 0.875rem;
|
|
1074
|
+
|
|
1075
|
+
--gog-chip-md-font-size: var(--gog-text-sm);
|
|
1076
|
+
--gog-chip-md-padding-block: var(--gog-space-8);
|
|
1077
|
+
--gog-chip-md-padding-inline: var(--gog-space-12);
|
|
1078
|
+
--gog-chip-md-gap: var(--gog-space-8);
|
|
1079
|
+
--gog-chip-md-avatar-size: 1.25rem;
|
|
1080
|
+
--gog-chip-md-icon-size: 0.875rem;
|
|
1081
|
+
--gog-chip-md-remove-size: 1rem;
|
|
1082
|
+
|
|
1083
|
+
--gog-chip-lg-font-size: var(--gog-text-md);
|
|
1084
|
+
--gog-chip-lg-padding-block: var(--gog-space-10);
|
|
1085
|
+
--gog-chip-lg-padding-inline: var(--gog-space-14);
|
|
1086
|
+
--gog-chip-lg-gap: var(--gog-space-10);
|
|
1087
|
+
--gog-chip-lg-avatar-size: 1.5rem;
|
|
1088
|
+
--gog-chip-lg-icon-size: 1rem;
|
|
1089
|
+
--gog-chip-lg-remove-size: 1.125rem;
|
|
1090
|
+
|
|
1091
|
+
--gog-chip-slg-font-size: var(--gog-text-lg);
|
|
1092
|
+
--gog-chip-slg-padding-block: var(--gog-space-12);
|
|
1093
|
+
--gog-chip-slg-padding-inline: var(--gog-space-16);
|
|
1094
|
+
--gog-chip-slg-gap: var(--gog-space-12);
|
|
1095
|
+
--gog-chip-slg-avatar-size: 1.75rem;
|
|
1096
|
+
--gog-chip-slg-icon-size: 1.125rem;
|
|
1097
|
+
--gog-chip-slg-remove-size: 1.25rem;
|
|
1098
|
+
|
|
1099
|
+
/* ── Dialog ────────────────────────────────────────────────────────────────── */
|
|
1100
|
+
--gog-dialog-font-family: var(--gog-font-heading);
|
|
1101
|
+
/* Deliberately a flat value rather than a palette derivation: the scrim has to read
|
|
1102
|
+
the same over any page content. Restate it per theme if a lighter wash suits. */
|
|
1103
|
+
--gog-dialog-backdrop-bg: rgba(10, 8, 3, 0.72);
|
|
1104
|
+
--gog-dialog-backdrop-blur: 2px;
|
|
1105
|
+
--gog-dialog-backdrop-padding: var(--gog-space-lg);
|
|
1106
|
+
--gog-dialog-backdrop-fade-duration: var(--gog-duration-base);
|
|
1107
|
+
--gog-dialog-enter-duration: var(--gog-duration-slow);
|
|
1108
|
+
--gog-dialog-enter-distance: -12px;
|
|
1109
|
+
--gog-dialog-bg: var(--gog-surface-color);
|
|
1110
|
+
--gog-dialog-color: var(--gog-text-color);
|
|
1111
|
+
--gog-dialog-border: var(--gog-border-color);
|
|
1112
|
+
--gog-dialog-border-width: var(--gog-panel-border-width);
|
|
1113
|
+
--gog-dialog-border-style: var(--gog-panel-border-style);
|
|
1114
|
+
--gog-dialog-radius: var(--gog-radius);
|
|
1115
|
+
--gog-dialog-shadow: 0 24px 48px rgba(0, 0, 0, 0.5);
|
|
1116
|
+
--gog-dialog-min-width: 320px;
|
|
1117
|
+
--gog-dialog-max-height: 90vh;
|
|
1118
|
+
--gog-dialog-header-padding: var(--gog-space-16) var(--gog-space-20) var(--gog-space-14);
|
|
1119
|
+
--gog-dialog-header-gap: var(--gog-space-12);
|
|
1120
|
+
--gog-dialog-header-border-color: var(--gog-border-color);
|
|
1121
|
+
--gog-dialog-body-padding: var(--gog-space-20);
|
|
1122
|
+
--gog-dialog-body-max-height: calc(var(--gog-dialog-max-height) - 60px);
|
|
1123
|
+
--gog-dialog-close-size: 2rem;
|
|
1124
|
+
--gog-dialog-close-font-size: var(--gog-text-sm);
|
|
1125
|
+
--gog-dialog-close-color: var(--gog-muted-text-color);
|
|
1126
|
+
--gog-dialog-close-hover-color: var(--gog-text-color);
|
|
1127
|
+
--gog-dialog-close-hover-bg: var(--gog-hover-color);
|
|
1128
|
+
--gog-dialog-close-hover-border: var(--gog-border-color);
|
|
1129
|
+
--gog-dialog-close-focus-ring: var(--gog-accent-color);
|
|
1130
|
+
--gog-dialog-close-focus-ring-width: var(--gog-focus-ring-width);
|
|
1131
|
+
--gog-dialog-close-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
1132
|
+
|
|
1133
|
+
/* Confirmation dialog */
|
|
1134
|
+
--gog-confirmation-dialog-gap: var(--gog-space-12);
|
|
1135
|
+
--gog-confirmation-dialog-min-width: 320px;
|
|
1136
|
+
--gog-confirmation-dialog-max-width: 440px;
|
|
1137
|
+
--gog-confirmation-dialog-color: var(--gog-text-color);
|
|
1138
|
+
--gog-confirmation-dialog-description-color: var(--gog-muted-text-color);
|
|
1139
|
+
--gog-confirmation-dialog-actions-gap: var(--gog-space-sm);
|
|
1140
|
+
--gog-confirmation-dialog-actions-offset: var(--gog-space-sm);
|
|
1141
|
+
|
|
1142
|
+
/* ── Autocomplete ──────────────────────────────────────────────────────────
|
|
1143
|
+
A combobox whose trigger is a real text input. Padding/font-size reuse the shared
|
|
1144
|
+
`--gog-field-<size>-*` scale, so it lines up with `gog-inputfield` and `gog-select` in a
|
|
1145
|
+
form. `--gog-autocomplete-bg`, `-color`, `-font-size`, `-padding-x` and `-padding-y` are
|
|
1146
|
+
intentionally NOT declared — they are the per-instance escape hatch the size classes fall
|
|
1147
|
+
back through. */
|
|
1148
|
+
--gog-autocomplete-font-family: var(--gog-font-body);
|
|
1149
|
+
--gog-autocomplete-label-font-family: var(--gog-font-heading);
|
|
1150
|
+
--gog-autocomplete-gap: var(--gog-space-4);
|
|
1151
|
+
--gog-autocomplete-label-color: var(--gog-accent-color);
|
|
1152
|
+
--gog-autocomplete-label-font-size: var(--gog-text-sm);
|
|
1153
|
+
--gog-autocomplete-label-font-weight: var(--gog-font-weight-semibold);
|
|
1154
|
+
--gog-autocomplete-label-letter-spacing: var(--gog-letter-spacing);
|
|
1155
|
+
--gog-autocomplete-label-text-transform: var(--gog-text-transform);
|
|
1156
|
+
--gog-autocomplete-field-bg: var(--gog-surface-color);
|
|
1157
|
+
--gog-autocomplete-text-color: var(--gog-text-color);
|
|
1158
|
+
--gog-autocomplete-placeholder-color: var(--gog-muted-text-color);
|
|
1159
|
+
--gog-autocomplete-border-width: var(--gog-control-border-width);
|
|
1160
|
+
--gog-autocomplete-border-style: var(--gog-control-border-style);
|
|
1161
|
+
--gog-autocomplete-border-color: var(--gog-accent-dim);
|
|
1162
|
+
--gog-autocomplete-hover-border-color: var(--gog-accent-color);
|
|
1163
|
+
--gog-autocomplete-radius: var(--gog-radius);
|
|
1164
|
+
--gog-autocomplete-line-height: var(--gog-line-height-normal);
|
|
1165
|
+
--gog-autocomplete-transition-duration: var(--gog-duration-base);
|
|
1166
|
+
--gog-autocomplete-disabled-opacity: var(--gog-disabled-opacity);
|
|
1167
|
+
--gog-autocomplete-focus-ring-width: var(--gog-focus-ring-width);
|
|
1168
|
+
--gog-autocomplete-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
1169
|
+
--gog-autocomplete-focus-ring-color: var(--gog-accent-color);
|
|
1170
|
+
--gog-autocomplete-error-color: var(--gog-danger-color);
|
|
1171
|
+
--gog-autocomplete-error-border-color: var(--gog-danger-color);
|
|
1172
|
+
--gog-autocomplete-error-font-family: var(--gog-font-body);
|
|
1173
|
+
--gog-autocomplete-error-font-size: var(--gog-text-xs);
|
|
1174
|
+
/* Floor for an auto-width field, so [fullWidth]="false" cannot collapse it to its chrome. */
|
|
1175
|
+
--gog-autocomplete-min-width: 120px;
|
|
1176
|
+
/* Trailing chrome: spinner and clear button, clear outermost — the arrangement the other
|
|
1177
|
+
dropdowns settled on, so all of them line up in a form. */
|
|
1178
|
+
--gog-autocomplete-actions-inset: var(--gog-control-icon-offset);
|
|
1179
|
+
--gog-autocomplete-actions-gap: var(--gog-space-6);
|
|
1180
|
+
/* Right padding on the input, reserving room for the actions above. */
|
|
1181
|
+
--gog-autocomplete-actions-reserve: 40px;
|
|
1182
|
+
--gog-autocomplete-clear-color: var(--gog-autocomplete-placeholder-color);
|
|
1183
|
+
--gog-autocomplete-clear-hover-color: var(--gog-autocomplete-label-color);
|
|
1184
|
+
--gog-autocomplete-clear-icon-ratio: var(--gog-control-clear-icon-ratio);
|
|
1185
|
+
--gog-autocomplete-spinner-size: 0.875rem;
|
|
1186
|
+
/* Panel */
|
|
1187
|
+
--gog-autocomplete-panel-bg: var(--gog-surface-color);
|
|
1188
|
+
--gog-autocomplete-panel-shadow: var(--gog-panel-shadow);
|
|
1189
|
+
--gog-autocomplete-panel-border-width: var(--gog-panel-border-width);
|
|
1190
|
+
--gog-autocomplete-panel-border-style: var(--gog-panel-border-style);
|
|
1191
|
+
--gog-autocomplete-panel-border-color: var(--gog-border-color);
|
|
1192
|
+
--gog-autocomplete-panel-radius: var(--gog-radius);
|
|
1193
|
+
--gog-autocomplete-panel-gap: var(--gog-space-2);
|
|
1194
|
+
--gog-autocomplete-panel-max-height: 260px;
|
|
1195
|
+
/* Ceiling for a content-sized panel, so one very long option cannot span the viewport. */
|
|
1196
|
+
--gog-autocomplete-panel-max-width: 420px;
|
|
1197
|
+
--gog-autocomplete-options-padding: var(--gog-space-4);
|
|
1198
|
+
--gog-autocomplete-option-padding: var(--gog-space-8) var(--gog-space-10);
|
|
1199
|
+
--gog-autocomplete-option-radius: calc(var(--gog-radius) - 4px);
|
|
1200
|
+
--gog-autocomplete-option-gap: var(--gog-space-10);
|
|
1201
|
+
--gog-autocomplete-option-color: var(--gog-text-color);
|
|
1202
|
+
--gog-autocomplete-option-hover-bg: var(--gog-hover-color);
|
|
1203
|
+
--gog-autocomplete-option-press-bg: var(--gog-border-color);
|
|
1204
|
+
--gog-autocomplete-option-hover-color: var(--gog-text-color);
|
|
1205
|
+
--gog-autocomplete-option-selected-bg: var(--gog-accent-pale);
|
|
1206
|
+
/* Body text, not the accent. The selected row is the one option that carries a tint *and* a
|
|
1207
|
+
coloured label, and the accent on that tint measured 4.12:1 in light — `--gog-accent-dim` is
|
|
1208
|
+
worse again (3.77:1 in one-dark). `gog-select` gets away with an accent label because its
|
|
1209
|
+
selected option has no tint behind it. The tint stays as the marker, alongside
|
|
1210
|
+
`aria-selected`. */
|
|
1211
|
+
--gog-autocomplete-option-selected-color: var(--gog-text-color);
|
|
1212
|
+
/* Estimated row height fed into the panel's up/down placement math; not itself a real
|
|
1213
|
+
layout property, so it has no effect unless the JS reads it. */
|
|
1214
|
+
--gog-autocomplete-option-height: 36px;
|
|
1215
|
+
--gog-autocomplete-empty-color: var(--gog-autocomplete-placeholder-color);
|
|
1216
|
+
--gog-autocomplete-empty-font-size: var(--gog-text-sm);
|
|
1217
|
+
--gog-autocomplete-float-label-reserve: var(--gog-field-float-label-reserve);
|
|
1218
|
+
--gog-autocomplete-float-label-in-top: var(--gog-field-float-label-in-top);
|
|
1219
|
+
--gog-autocomplete-float-label-over-gap: var(--gog-field-float-label-over-gap);
|
|
1220
|
+
--gog-autocomplete-float-label-over-reserve: var(--gog-field-float-label-over-reserve);
|
|
1221
|
+
|
|
1222
|
+
/* ── Badge (the `gogBadge` directive; its classes live in utilities.css) ───── */
|
|
1223
|
+
--gog-badge-font-family: var(--gog-font-body);
|
|
1224
|
+
--gog-badge-font-size: var(--gog-text-xs);
|
|
1225
|
+
--gog-badge-font-weight: var(--gog-font-weight-semibold);
|
|
1226
|
+
--gog-badge-line-height: var(--gog-line-height-none);
|
|
1227
|
+
/* Min-width *and* height: a one-digit badge stays a circle, a three-digit one grows
|
|
1228
|
+
sideways only. */
|
|
1229
|
+
--gog-badge-size: 1.25rem;
|
|
1230
|
+
--gog-badge-dot-size: 0.5rem;
|
|
1231
|
+
--gog-badge-padding-inline: var(--gog-space-4);
|
|
1232
|
+
--gog-badge-radius: 999px;
|
|
1233
|
+
/* How far the badge hangs outside its host's corner. */
|
|
1234
|
+
--gog-badge-offset: var(--gog-space-6);
|
|
1235
|
+
--gog-badge-border-width: 0;
|
|
1236
|
+
--gog-badge-border-style: var(--gog-border-style);
|
|
1237
|
+
--gog-badge-border-color: transparent;
|
|
1238
|
+
/* Above the host's own chrome but below any overlay panel (--gog-dropdown-z is 300). */
|
|
1239
|
+
/* Each label is its status's own "text on this fill" token, which flips with the theme — a red
|
|
1240
|
+
badge reads white on light and near-black on dark. It read `--gog-accent-text-color` for all
|
|
1241
|
+
four until 21.9.0, on the assumption that one label works on every fill; four themes proved
|
|
1242
|
+
otherwise, `material`'s amber under white at 1.97:1 the worst of them. See the
|
|
1243
|
+
`--gog-<status>-text-color` block near the top of this file. */
|
|
1244
|
+
--gog-badge-success-bg: var(--gog-success-color);
|
|
1245
|
+
--gog-badge-success-color: var(--gog-success-text-color);
|
|
1246
|
+
--gog-badge-danger-bg: var(--gog-danger-color);
|
|
1247
|
+
--gog-badge-danger-color: var(--gog-danger-text-color);
|
|
1248
|
+
--gog-badge-warning-bg: var(--gog-warning-color);
|
|
1249
|
+
--gog-badge-warning-color: var(--gog-warning-text-color);
|
|
1250
|
+
--gog-badge-info-bg: var(--gog-info-color);
|
|
1251
|
+
--gog-badge-info-color: var(--gog-info-text-color);
|
|
1252
|
+
|
|
1253
|
+
/* ── Datepicker (the field; the grid inside it is themed by --gog-calendar-*) ───
|
|
1254
|
+
`--gog-datepicker-bg`, `-color`, `-font-size`, `-padding-x` and `-padding-y` are
|
|
1255
|
+
intentionally NOT declared — they are the per-instance escape hatch the size classes fall
|
|
1256
|
+
back through. */
|
|
1257
|
+
--gog-datepicker-font-family: var(--gog-font-body);
|
|
1258
|
+
--gog-datepicker-label-font-family: var(--gog-font-heading);
|
|
1259
|
+
--gog-datepicker-gap: var(--gog-space-4);
|
|
1260
|
+
--gog-datepicker-label-color: var(--gog-accent-color);
|
|
1261
|
+
--gog-datepicker-label-font-size: var(--gog-text-sm);
|
|
1262
|
+
--gog-datepicker-label-letter-spacing: var(--gog-letter-spacing);
|
|
1263
|
+
--gog-datepicker-label-text-transform: var(--gog-text-transform);
|
|
1264
|
+
--gog-datepicker-field-bg: var(--gog-surface-color);
|
|
1265
|
+
--gog-datepicker-text-color: var(--gog-text-color);
|
|
1266
|
+
--gog-datepicker-placeholder-color: var(--gog-muted-text-color);
|
|
1267
|
+
--gog-datepicker-border-width: var(--gog-control-border-width);
|
|
1268
|
+
--gog-datepicker-border-style: var(--gog-control-border-style);
|
|
1269
|
+
--gog-datepicker-border-color: var(--gog-accent-dim);
|
|
1270
|
+
--gog-datepicker-hover-border-color: var(--gog-accent-color);
|
|
1271
|
+
--gog-datepicker-radius: var(--gog-radius);
|
|
1272
|
+
--gog-datepicker-line-height: var(--gog-line-height-normal);
|
|
1273
|
+
--gog-datepicker-transition-duration: var(--gog-duration-base);
|
|
1274
|
+
--gog-datepicker-disabled-opacity: var(--gog-disabled-opacity);
|
|
1275
|
+
--gog-datepicker-focus-ring-width: var(--gog-focus-ring-width);
|
|
1276
|
+
--gog-datepicker-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
1277
|
+
--gog-datepicker-focus-ring-color: var(--gog-accent-color);
|
|
1278
|
+
--gog-datepicker-error-color: var(--gog-danger-color);
|
|
1279
|
+
--gog-datepicker-error-border-color: var(--gog-danger-color);
|
|
1280
|
+
--gog-datepicker-error-font-family: var(--gog-font-body);
|
|
1281
|
+
--gog-datepicker-error-font-size: var(--gog-text-xs);
|
|
1282
|
+
--gog-datepicker-min-width: 150px;
|
|
1283
|
+
--gog-datepicker-actions-inset: var(--gog-control-icon-offset);
|
|
1284
|
+
--gog-datepicker-actions-gap: var(--gog-space-6);
|
|
1285
|
+
/* Right padding on the input, reserving room for the calendar and clear buttons. */
|
|
1286
|
+
--gog-datepicker-actions-reserve: 40px;
|
|
1287
|
+
--gog-datepicker-icon-color: var(--gog-accent-color);
|
|
1288
|
+
--gog-datepicker-icon-hover-color: var(--gog-accent-bright);
|
|
1289
|
+
--gog-datepicker-toggle-icon-size: 1rem;
|
|
1290
|
+
--gog-datepicker-clear-color: var(--gog-datepicker-placeholder-color);
|
|
1291
|
+
--gog-datepicker-clear-icon-ratio: var(--gog-control-clear-icon-ratio);
|
|
1292
|
+
--gog-datepicker-panel-bg: var(--gog-surface-color);
|
|
1293
|
+
--gog-datepicker-panel-shadow: var(--gog-panel-shadow);
|
|
1294
|
+
--gog-datepicker-panel-border-width: var(--gog-panel-border-width);
|
|
1295
|
+
--gog-datepicker-panel-border-style: var(--gog-panel-border-style);
|
|
1296
|
+
--gog-datepicker-panel-border-color: var(--gog-border-color);
|
|
1297
|
+
--gog-datepicker-panel-radius: var(--gog-radius);
|
|
1298
|
+
--gog-datepicker-panel-gap: var(--gog-space-2);
|
|
1299
|
+
/* The dropdown surface. Inline mode is `gog-calendar` itself, so it sizes from
|
|
1300
|
+
`--gog-calendar-max-width` rather than from this. */
|
|
1301
|
+
--gog-datepicker-panel-width: max-content;
|
|
1302
|
+
--gog-datepicker-float-label-reserve: var(--gog-field-float-label-reserve);
|
|
1303
|
+
--gog-datepicker-float-label-in-top: var(--gog-field-float-label-in-top);
|
|
1304
|
+
--gog-datepicker-float-label-over-gap: var(--gog-field-float-label-over-gap);
|
|
1305
|
+
--gog-datepicker-float-label-over-reserve: var(--gog-field-float-label-over-reserve);
|
|
1306
|
+
|
|
1307
|
+
/* ── Divider ───────────────────────────────────────────────────────────────── */
|
|
1308
|
+
--gog-divider-line-color: var(--gog-border-color);
|
|
1309
|
+
--gog-divider-line-thickness: 1px;
|
|
1310
|
+
/* The variant classes map onto these, so a theme can decide what "dashed" looks like
|
|
1311
|
+
rather than the value being frozen into the component's stylesheet. */
|
|
1312
|
+
--gog-divider-solid-style: solid;
|
|
1313
|
+
--gog-divider-dashed-style: dashed;
|
|
1314
|
+
--gog-divider-dotted-style: dotted;
|
|
1315
|
+
--gog-divider-block-spacing: var(--gog-space-md);
|
|
1316
|
+
--gog-divider-inline-spacing: var(--gog-space-md);
|
|
1317
|
+
--gog-divider-inset-size: var(--gog-space-lg);
|
|
1318
|
+
/* Floor for a vertical divider with nothing to stretch to — e.g. between two inline
|
|
1319
|
+
buttons. In a flex/grid row it stretches to the row instead. */
|
|
1320
|
+
--gog-divider-vertical-length: 1.5em;
|
|
1321
|
+
--gog-divider-label-gap: var(--gog-space-sm);
|
|
1322
|
+
--gog-divider-label-color: var(--gog-muted-text-color);
|
|
1323
|
+
--gog-divider-label-font-family: var(--gog-font-body);
|
|
1324
|
+
--gog-divider-label-font-size: var(--gog-text-sm);
|
|
1325
|
+
--gog-divider-label-font-weight: var(--gog-font-weight-medium);
|
|
1326
|
+
--gog-divider-label-line-height: var(--gog-line-height-normal);
|
|
1327
|
+
|
|
1328
|
+
/* ── Icon ──────────────────────────────────────────────────────────────────── */
|
|
1329
|
+
--gog-icon-fallback-size: 1em;
|
|
1330
|
+
|
|
1331
|
+
/* ── Input field ───────────────────────────────────────────────────────────── */
|
|
1332
|
+
--gog-input-font-family: var(--gog-font-body);
|
|
1333
|
+
--gog-input-label-font-family: var(--gog-font-heading);
|
|
1334
|
+
--gog-input-gap: var(--gog-space-4);
|
|
1335
|
+
--gog-input-label-color: var(--gog-accent-color);
|
|
1336
|
+
--gog-input-label-font-size: var(--gog-text-sm);
|
|
1337
|
+
--gog-input-label-letter-spacing: var(--gog-letter-spacing);
|
|
1338
|
+
--gog-input-label-text-transform: var(--gog-text-transform);
|
|
1339
|
+
--gog-input-field-bg: var(--gog-surface-color);
|
|
1340
|
+
--gog-input-field-border: var(--gog-accent-dim);
|
|
1341
|
+
--gog-input-field-border-width: var(--gog-control-border-width);
|
|
1342
|
+
--gog-input-field-border-style: var(--gog-control-border-style);
|
|
1343
|
+
--gog-input-radius: var(--gog-radius);
|
|
1344
|
+
--gog-input-field-color: var(--gog-text-color);
|
|
1345
|
+
--gog-input-placeholder-color: var(--gog-muted-text-color);
|
|
1346
|
+
--gog-input-focus-border: var(--gog-accent-color);
|
|
1347
|
+
--gog-input-focus-ring: var(--gog-accent-pale);
|
|
1348
|
+
--gog-input-focus-glow: 0 0 8px var(--gog-input-focus-ring);
|
|
1349
|
+
--gog-input-focus-ring-width: var(--gog-focus-ring-width);
|
|
1350
|
+
--gog-input-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
1351
|
+
--gog-input-error-color: var(--gog-danger-color);
|
|
1352
|
+
--gog-input-error-font-size: var(--gog-text-xs);
|
|
1353
|
+
/* Extra space above the error line, *on top of* the host's own `--gog-input-gap`, which
|
|
1354
|
+
already separates every child of the field. It shipped as `2px` and put this field's error
|
|
1355
|
+
6px under it while `gog-select`, `gog-autocomplete` and `gog-datepicker` — same gap, no
|
|
1356
|
+
offset — sat at 4px; in one form the six did not line up. Zero by default since 21.9.0, so
|
|
1357
|
+
one mechanism spaces the error line everywhere. Set it if you want this field's error
|
|
1358
|
+
pushed further than the rest. */
|
|
1359
|
+
--gog-input-error-offset: 0px;
|
|
1360
|
+
--gog-input-icon-color: var(--gog-muted-text-color);
|
|
1361
|
+
--gog-input-icon-hover-color: var(--gog-accent-color);
|
|
1362
|
+
--gog-input-icon-action-radius: calc(var(--gog-radius) - 4px);
|
|
1363
|
+
--gog-input-icon-focus-ring-width: 2px;
|
|
1364
|
+
/* Number field's spin buttons — a subtle fill on hover, since they sit flush against the
|
|
1365
|
+
field's own border rather than floating with their own padding like the other icons. */
|
|
1366
|
+
--gog-input-spin-hover-bg: var(--gog-hover-color);
|
|
1367
|
+
--gog-input-disabled-opacity: var(--gog-disabled-opacity);
|
|
1368
|
+
--gog-input-transition-duration: var(--gog-duration-base);
|
|
1369
|
+
/* Float label — also used by gog-textarea, which shares the --gog-input-* block. */
|
|
1370
|
+
/* Clear button — only rendered once the field has text, see `clearable`.
|
|
1371
|
+
|
|
1372
|
+
A quarter of the corner radius rather than a flat `2px`, which is what this was until
|
|
1373
|
+
21.9.0: at the default `--gog-radius: 8px` it computes to the same 2px, so nothing moves in
|
|
1374
|
+
any shipped theme, but a theme that rounds its corners now rounds this button too. The
|
|
1375
|
+
literal was invisible to `check-tokens` rule G by design — that rule flags a literal only
|
|
1376
|
+
when its value *equals* a character token's current one, so a pill's `999px` is correctly
|
|
1377
|
+
left alone and a small arbitrary number like this one is correctly not detectable. The two
|
|
1378
|
+
sibling controls below carry the same fix.
|
|
1379
|
+
|
|
1380
|
+
`gog-toast` and `gog-accordion` keep their flat `0px` on purpose: those are a chosen shape,
|
|
1381
|
+
not a number that forgot where it came from. */
|
|
1382
|
+
--gog-input-clear-radius: calc(var(--gog-radius) / 4);
|
|
1383
|
+
--gog-input-clear-icon-ratio: var(--gog-control-clear-icon-ratio);
|
|
1384
|
+
/*
|
|
1385
|
+
The textarea's clear button gets a full-size glyph. The 0.7 ratio above suits the dense
|
|
1386
|
+
single-line trigger of a dropdown; on a large multi-line box it reads as a speck.
|
|
1387
|
+
*/
|
|
1388
|
+
--gog-textarea-clear-icon-ratio: 1;
|
|
1389
|
+
/* Custom resize grip — see the `::-webkit-resizer` comment in textarea.component.scss for
|
|
1390
|
+
why this replaces rather than restyles the native glyph. Colour follows the field's own
|
|
1391
|
+
border by default, not a fixed muted grey, so it reads as part of the field rather than a
|
|
1392
|
+
mismatched accent. */
|
|
1393
|
+
--gog-textarea-resize-grip-size: 11px;
|
|
1394
|
+
--gog-textarea-resize-grip-color: var(--gog-input-field-border);
|
|
1395
|
+
--gog-textarea-resize-grip-opacity: 0.8;
|
|
1396
|
+
--gog-textarea-resize-grip-stripe-width: 1.5px;
|
|
1397
|
+
--gog-textarea-resize-grip-stripe-gap: var(--gog-space-2);
|
|
1398
|
+
--gog-textarea-resize-grip-offset: 3px;
|
|
1399
|
+
/*
|
|
1400
|
+
Both default to 0 and are overwritten per instance, as an inline style on the field, from
|
|
1401
|
+
the component's own ResizeObserver — they close the gap that opens once the field has been
|
|
1402
|
+
dragged narrower/shorter than its container. Declared here rather than left to a `var()`
|
|
1403
|
+
fallback so the grip's resting geometry is discoverable in this file like everything else;
|
|
1404
|
+
an inline style outranks this declaration, so the per-instance override still wins.
|
|
1405
|
+
*/
|
|
1406
|
+
--gog-textarea-resize-inset-right: 0px;
|
|
1407
|
+
--gog-textarea-resize-inset-bottom: 0px;
|
|
1408
|
+
--gog-input-clear-inset: var(--gog-space-8);
|
|
1409
|
+
/*
|
|
1410
|
+
Width of one stepper button, and so of the whole stepper column. Scales with the field's
|
|
1411
|
+
own font size rather than being a fixed px value, so it stays proportional across the five
|
|
1412
|
+
sizes. Read in two places — the buttons themselves, and the offset that moves the clear
|
|
1413
|
+
button clear of them on a clearable number field — which is why it is a token rather than
|
|
1414
|
+
the same `calc()` written twice.
|
|
1415
|
+
*/
|
|
1416
|
+
--gog-input-spin-width: calc(
|
|
1417
|
+
var(--gog-input-size-font-size, var(--gog-field-md-font-size)) * 1.35
|
|
1418
|
+
);
|
|
1419
|
+
--gog-input-float-label-reserve: var(--gog-field-float-label-reserve);
|
|
1420
|
+
--gog-input-float-label-in-top: var(--gog-field-float-label-in-top);
|
|
1421
|
+
--gog-input-float-label-over-gap: var(--gog-field-float-label-over-gap);
|
|
1422
|
+
--gog-input-float-label-over-reserve: var(--gog-field-float-label-over-reserve);
|
|
1423
|
+
|
|
1424
|
+
/* ── Multiselect ───────────────────────────────────────────────────────────── */
|
|
1425
|
+
--gog-multiselect-font-family: var(--gog-font-body);
|
|
1426
|
+
--gog-multiselect-label-font-family: var(--gog-font-heading);
|
|
1427
|
+
--gog-multiselect-gap: var(--gog-space-4);
|
|
1428
|
+
--gog-multiselect-option-gap: var(--gog-space-4);
|
|
1429
|
+
--gog-multiselect-options-padding: var(--gog-space-4);
|
|
1430
|
+
--gog-multiselect-label-color: var(--gog-accent-color);
|
|
1431
|
+
--gog-multiselect-label-font-size: var(--gog-text-sm);
|
|
1432
|
+
--gog-multiselect-label-letter-spacing: var(--gog-letter-spacing);
|
|
1433
|
+
--gog-multiselect-label-text-transform: var(--gog-text-transform);
|
|
1434
|
+
--gog-multiselect-field-bg: var(--gog-surface-color);
|
|
1435
|
+
--gog-multiselect-field-border: var(--gog-accent-dim);
|
|
1436
|
+
--gog-multiselect-field-border-width: var(--gog-control-border-width);
|
|
1437
|
+
--gog-multiselect-field-border-style: var(--gog-control-border-style);
|
|
1438
|
+
--gog-multiselect-radius: var(--gog-radius);
|
|
1439
|
+
--gog-multiselect-field-color: var(--gog-text-color);
|
|
1440
|
+
--gog-multiselect-value-color: var(--gog-text-color);
|
|
1441
|
+
--gog-multiselect-placeholder-color: var(--gog-muted-text-color);
|
|
1442
|
+
--gog-multiselect-focus-border: var(--gog-accent-color);
|
|
1443
|
+
--gog-multiselect-focus-ring: var(--gog-accent-pale);
|
|
1444
|
+
--gog-multiselect-focus-glow: 0 0 8px var(--gog-multiselect-focus-ring);
|
|
1445
|
+
--gog-multiselect-focus-ring-width: var(--gog-focus-ring-width);
|
|
1446
|
+
--gog-multiselect-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
1447
|
+
--gog-multiselect-error-color: var(--gog-danger-color);
|
|
1448
|
+
--gog-multiselect-error-font-size: var(--gog-text-xs);
|
|
1449
|
+
/* Zero by default since 21.9.0 — see `--gog-input-error-offset` for why. */
|
|
1450
|
+
--gog-multiselect-error-offset: 0px;
|
|
1451
|
+
--gog-multiselect-border-color: var(--gog-accent-color);
|
|
1452
|
+
--gog-multiselect-panel-bg: var(--gog-surface-color);
|
|
1453
|
+
--gog-multiselect-panel-border: var(--gog-accent-color);
|
|
1454
|
+
--gog-multiselect-panel-shadow: var(--gog-panel-shadow);
|
|
1455
|
+
--gog-multiselect-panel-max-height: 260px;
|
|
1456
|
+
--gog-multiselect-panel-offset: var(--gog-space-2);
|
|
1457
|
+
--gog-multiselect-option-hover-bg: var(--gog-hover-color);
|
|
1458
|
+
--gog-multiselect-option-press-bg: var(--gog-border-color);
|
|
1459
|
+
--gog-multiselect-option-color: var(--gog-text-color);
|
|
1460
|
+
--gog-multiselect-option-gap-inline: var(--gog-space-10);
|
|
1461
|
+
/* Estimated row height fed into the panel's up/down placement math; not itself a real
|
|
1462
|
+
layout property, so it has no effect unless the JS reads it. */
|
|
1463
|
+
--gog-multiselect-option-height: 40px;
|
|
1464
|
+
--gog-multiselect-option-radius: calc(var(--gog-radius) - 2px);
|
|
1465
|
+
--gog-multiselect-option-disabled-opacity: var(--gog-disabled-opacity);
|
|
1466
|
+
--gog-multiselect-option-transition-duration: var(--gog-duration-fast);
|
|
1467
|
+
--gog-multiselect-checkbox-border: var(--gog-accent-dim);
|
|
1468
|
+
--gog-multiselect-checkbox-bg: var(--gog-background-color);
|
|
1469
|
+
--gog-multiselect-checkbox-checked-bg: var(--gog-accent-color);
|
|
1470
|
+
--gog-multiselect-checkbox-checked-color: var(--gog-primary-color);
|
|
1471
|
+
--gog-multiselect-controls-gap: var(--gog-space-4);
|
|
1472
|
+
--gog-multiselect-controls-padding: var(--gog-space-6) var(--gog-space-10);
|
|
1473
|
+
--gog-multiselect-actions-gap: var(--gog-space-6);
|
|
1474
|
+
--gog-multiselect-filter-padding: var(--gog-space-6);
|
|
1475
|
+
--gog-multiselect-filter-input-padding-y: var(--gog-space-6);
|
|
1476
|
+
--gog-multiselect-filter-input-padding-x: var(--gog-space-8);
|
|
1477
|
+
--gog-multiselect-filter-input-bg: var(--gog-background-color);
|
|
1478
|
+
--gog-multiselect-filter-input-color: var(--gog-multiselect-field-color);
|
|
1479
|
+
--gog-multiselect-filter-input-border: var(--gog-multiselect-field-border);
|
|
1480
|
+
--gog-multiselect-filter-input-radius: var(--gog-radius);
|
|
1481
|
+
--gog-multiselect-filter-border-width: var(--gog-panel-border-width);
|
|
1482
|
+
--gog-multiselect-filter-border-style: var(--gog-panel-border-style);
|
|
1483
|
+
--gog-multiselect-filter-border-color: var(--gog-border-color);
|
|
1484
|
+
--gog-multiselect-filter-empty-padding: var(--gog-space-10);
|
|
1485
|
+
--gog-multiselect-filter-empty-color: var(--gog-multiselect-placeholder-color);
|
|
1486
|
+
/* Matches --gog-select-chevron-inset; see the note there. */
|
|
1487
|
+
/* "+N" badge shown when the selection does not fit on one line. */
|
|
1488
|
+
--gog-multiselect-overflow-color: var(--gog-multiselect-placeholder-color);
|
|
1489
|
+
--gog-multiselect-overflow-font-size: var(--gog-text-sm);
|
|
1490
|
+
--gog-multiselect-overflow-gap: var(--gog-space-6);
|
|
1491
|
+
--gog-multiselect-min-width: 120px;
|
|
1492
|
+
--gog-multiselect-panel-max-width: 420px;
|
|
1493
|
+
--gog-multiselect-actions-inset: var(--gog-control-icon-offset);
|
|
1494
|
+
/* A quarter of the corner radius — see `--gog-input-clear-radius` for why. */
|
|
1495
|
+
--gog-multiselect-clear-radius: calc(var(--gog-radius) / 4);
|
|
1496
|
+
--gog-multiselect-disabled-opacity: var(--gog-disabled-opacity);
|
|
1497
|
+
--gog-multiselect-transition-duration: var(--gog-duration-base);
|
|
1498
|
+
--gog-multiselect-float-label-reserve: var(--gog-field-float-label-reserve);
|
|
1499
|
+
--gog-multiselect-float-label-in-top: var(--gog-field-float-label-in-top);
|
|
1500
|
+
--gog-multiselect-float-label-over-gap: var(--gog-field-float-label-over-gap);
|
|
1501
|
+
--gog-multiselect-float-label-over-reserve: var(--gog-field-float-label-over-reserve);
|
|
1502
|
+
--gog-multiselect-arrow-transition-duration: var(--gog-duration-slow);
|
|
1503
|
+
/* Icon geometry, expressed as a ratio of the control's font size. */
|
|
1504
|
+
--gog-multiselect-clear-icon-ratio: var(--gog-control-clear-icon-ratio);
|
|
1505
|
+
--gog-multiselect-arrow-icon-ratio: 0.875;
|
|
1506
|
+
--gog-multiselect-mark-size-ratio: 1.2375;
|
|
1507
|
+
--gog-multiselect-mark-icon-ratio: 1.125;
|
|
1508
|
+
|
|
1509
|
+
/* ── Menu ──────────────────────────────────────────────────────────────────
|
|
1510
|
+
The command menu opened by `[gogMenuTrigger]`. Metrics follow the dropdown panel's, so a
|
|
1511
|
+
menu and a select opened from the same toolbar read as the same surface. */
|
|
1512
|
+
--gog-menu-z: var(--gog-dropdown-z);
|
|
1513
|
+
--gog-menu-bg: var(--gog-surface-color);
|
|
1514
|
+
--gog-menu-border-color: var(--gog-border-color);
|
|
1515
|
+
--gog-menu-border-width: var(--gog-control-border-width);
|
|
1516
|
+
--gog-menu-border-style: var(--gog-control-border-style);
|
|
1517
|
+
--gog-menu-radius: var(--gog-panel-radius);
|
|
1518
|
+
--gog-menu-shadow: var(--gog-dialog-shadow);
|
|
1519
|
+
--gog-menu-font-family: var(--gog-font-body);
|
|
1520
|
+
--gog-menu-padding: var(--gog-space-4);
|
|
1521
|
+
--gog-menu-gap: var(--gog-space-2);
|
|
1522
|
+
--gog-menu-offset: var(--gog-space-4);
|
|
1523
|
+
--gog-menu-min-width: 180px;
|
|
1524
|
+
--gog-menu-max-width: 320px;
|
|
1525
|
+
--gog-menu-max-height: 320px;
|
|
1526
|
+
--gog-menu-transition-duration: var(--gog-duration-base);
|
|
1527
|
+
--gog-menu-focus-ring: var(--gog-accent-color);
|
|
1528
|
+
--gog-menu-focus-ring-width: var(--gog-focus-ring-width);
|
|
1529
|
+
--gog-menu-item-color: var(--gog-text-color);
|
|
1530
|
+
--gog-menu-item-hover-bg: var(--gog-hover-color);
|
|
1531
|
+
/* The held state, same idea as the button's: one step past this surface's own hover, as a
|
|
1532
|
+
colour rather than a movement, so `prefers-reduced-motion` cannot take it away. The flat
|
|
1533
|
+
value here is what a browser without `color-mix()` gets; the tinted one is in the @supports
|
|
1534
|
+
block at the end of the file. */
|
|
1535
|
+
--gog-menu-item-press-bg: var(--gog-border-color);
|
|
1536
|
+
--gog-menu-item-hover-color: var(--gog-text-color);
|
|
1537
|
+
--gog-menu-item-font-size: var(--gog-text-sm);
|
|
1538
|
+
--gog-menu-item-padding: var(--gog-space-8) var(--gog-space-12);
|
|
1539
|
+
--gog-menu-item-radius: var(--gog-radius);
|
|
1540
|
+
--gog-menu-item-gap: var(--gog-space-sm);
|
|
1541
|
+
--gog-menu-item-disabled-opacity: var(--gog-disabled-opacity);
|
|
1542
|
+
--gog-menu-item-disabled-color: var(--gog-muted-text-color);
|
|
1543
|
+
--gog-menu-item-line-height: var(--gog-line-height-normal);
|
|
1544
|
+
--gog-menu-item-icon-size: 1em;
|
|
1545
|
+
|
|
1546
|
+
/* ── Paginator ─────────────────────────────────────────────────────────────── */
|
|
1547
|
+
--gog-paginator-gap: var(--gog-space-4);
|
|
1548
|
+
--gog-paginator-ellipsis-color: var(--gog-muted-text-color);
|
|
1549
|
+
--gog-paginator-ellipsis-font-size: var(--gog-text-sm);
|
|
1550
|
+
--gog-paginator-ellipsis-font-family: var(--gog-font-body);
|
|
1551
|
+
/* Enough for a three-digit page size plus the chevron, so the row doesn't shift on change. */
|
|
1552
|
+
--gog-paginator-page-size-min-width: 5rem;
|
|
1553
|
+
--gog-paginator-ellipsis-min-width: 32px;
|
|
1554
|
+
|
|
1555
|
+
/* ── Panel ─────────────────────────────────────────────────────────────────
|
|
1556
|
+
The `gog-panel` component, which shares its prefix with the foundation surface tier
|
|
1557
|
+
above (`--gog-panel-radius`, `--gog-panel-shadow`, `--gog-panel-border-width`,
|
|
1558
|
+
`--gog-panel-border-style`) deliberately: a panel is the surface those describe, and a
|
|
1559
|
+
theme that sets a house radius for raised surfaces should get it here too.
|
|
1560
|
+
|
|
1561
|
+
`--gog-panel-bg`, `--gog-panel-border-color`, `--gog-panel-padding-y`,
|
|
1562
|
+
`--gog-panel-padding-x` and `--gog-panel-gap` are intentionally NOT declared — the
|
|
1563
|
+
per-instance escape hatch. There is no `--gog-panel-*-shadow` twin of that hatch for the
|
|
1564
|
+
elevated variant: it reads `--gog-panel-shadow` from a declaration the component makes on
|
|
1565
|
+
its own host, so setting that token on one panel already changes only that panel. */
|
|
1566
|
+
--gog-panel-font-family: var(--gog-font-body);
|
|
1567
|
+
--gog-panel-color: var(--gog-text-color);
|
|
1568
|
+
--gog-panel-transition-duration: var(--gog-duration-base);
|
|
1569
|
+
|
|
1570
|
+
--gog-panel-heading-color: var(--gog-text-color);
|
|
1571
|
+
--gog-panel-heading-font-family: var(--gog-font-heading);
|
|
1572
|
+
--gog-panel-heading-font-size: var(--gog-text-xl);
|
|
1573
|
+
--gog-panel-heading-font-weight: var(--gog-font-weight-semibold);
|
|
1574
|
+
--gog-panel-heading-line-height: 1.25;
|
|
1575
|
+
|
|
1576
|
+
--gog-panel-outlined-bg: var(--gog-surface-color);
|
|
1577
|
+
--gog-panel-outlined-border-color: var(--gog-border-color);
|
|
1578
|
+
--gog-panel-outlined-shadow: none;
|
|
1579
|
+
--gog-panel-elevated-bg: var(--gog-elevated-surface-color);
|
|
1580
|
+
--gog-panel-elevated-border-color: transparent;
|
|
1581
|
+
--gog-panel-filled-bg: var(--gog-accent-pale);
|
|
1582
|
+
--gog-panel-filled-border-color: transparent;
|
|
1583
|
+
--gog-panel-filled-shadow: none;
|
|
1584
|
+
|
|
1585
|
+
--gog-panel-header-gap: var(--gog-space-sm);
|
|
1586
|
+
--gog-panel-toggle-size: 2rem;
|
|
1587
|
+
--gog-panel-toggle-radius: var(--gog-radius);
|
|
1588
|
+
--gog-panel-toggle-color: var(--gog-muted-text-color);
|
|
1589
|
+
--gog-panel-toggle-hover-bg: var(--gog-hover-color);
|
|
1590
|
+
--gog-panel-chevron-size: 1rem;
|
|
1591
|
+
--gog-panel-focus-ring: var(--gog-accent-color);
|
|
1592
|
+
--gog-panel-focus-ring-width: var(--gog-focus-ring-width);
|
|
1593
|
+
--gog-panel-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
1594
|
+
--gog-panel-disabled-opacity: var(--gog-disabled-opacity);
|
|
1595
|
+
|
|
1596
|
+
--gog-panel-footer-border-color: var(--gog-border-color);
|
|
1597
|
+
--gog-panel-footer-gap: var(--gog-space-sm);
|
|
1598
|
+
--gog-panel-footer-padding-top: var(--gog-space-sm);
|
|
1599
|
+
|
|
1600
|
+
--gog-panel-xsm-padding-y: var(--gog-space-10);
|
|
1601
|
+
--gog-panel-xsm-padding-x: var(--gog-space-12);
|
|
1602
|
+
--gog-panel-xsm-gap: var(--gog-space-sm);
|
|
1603
|
+
--gog-panel-sm-padding-y: var(--gog-space-14);
|
|
1604
|
+
--gog-panel-sm-padding-x: var(--gog-space-md);
|
|
1605
|
+
--gog-panel-sm-gap: var(--gog-space-10);
|
|
1606
|
+
--gog-panel-md-padding-y: var(--gog-space-18);
|
|
1607
|
+
--gog-panel-md-padding-x: var(--gog-space-20);
|
|
1608
|
+
--gog-panel-md-gap: var(--gog-space-12);
|
|
1609
|
+
--gog-panel-lg-padding-y: var(--gog-space-lg);
|
|
1610
|
+
--gog-panel-lg-padding-x: var(--gog-space-28);
|
|
1611
|
+
--gog-panel-lg-gap: var(--gog-space-md);
|
|
1612
|
+
--gog-panel-slg-padding-y: var(--gog-space-32);
|
|
1613
|
+
--gog-panel-slg-padding-x: var(--gog-space-32);
|
|
1614
|
+
--gog-panel-slg-gap: var(--gog-space-20);
|
|
1615
|
+
|
|
1616
|
+
/* ── Progressbar ──────────────────────────────────────────────────────────── */
|
|
1617
|
+
--gog-progressbar-track-base-bg: var(--gog-border-color);
|
|
1618
|
+
--gog-progressbar-radius: 999px;
|
|
1619
|
+
--gog-progressbar-transition-duration: var(--gog-duration-slow);
|
|
1620
|
+
--gog-progressbar-xsm-height: 2px;
|
|
1621
|
+
--gog-progressbar-sm-height: 4px;
|
|
1622
|
+
--gog-progressbar-md-height: 6px;
|
|
1623
|
+
--gog-progressbar-lg-height: 10px;
|
|
1624
|
+
--gog-progressbar-slg-height: 14px;
|
|
1625
|
+
--gog-progressbar-value-gap: var(--gog-space-sm);
|
|
1626
|
+
--gog-progressbar-value-min-width: 3ch;
|
|
1627
|
+
--gog-progressbar-value-color: var(--gog-muted-text-color);
|
|
1628
|
+
--gog-progressbar-value-font-family: var(--gog-font-body);
|
|
1629
|
+
--gog-progressbar-value-font-size: var(--gog-text-sm);
|
|
1630
|
+
--gog-progressbar-indeterminate-duration: 1.6s;
|
|
1631
|
+
--gog-progressbar-indeterminate-easing: cubic-bezier(0.65, 0.05, 0.36, 1);
|
|
1632
|
+
/* The reduced-motion stand-in for the indeterminate animation. */
|
|
1633
|
+
--gog-progressbar-stripe-size: 6px;
|
|
1634
|
+
--gog-progressbar-stripe-color: var(--gog-surface-color);
|
|
1635
|
+
/* The two hairlines that mark where the fill ends, and the reason they are two.
|
|
1636
|
+
WCAG 1.4.11 wants 3:1 for the part of a graphic that carries its meaning, and here that is
|
|
1637
|
+
the boundary — `showValue` is `false` by default, so nothing else states the value. The fill
|
|
1638
|
+
cannot carry it against the track: measured across the whole `--gog-text-color`-to-
|
|
1639
|
+
`--gog-border-color` axis, no single track colour clears 3:1 against all five fills in any
|
|
1640
|
+
theme but `primeng`, because the fills straddle mid-luminance and a track dark enough for the
|
|
1641
|
+
amber warning lands on the blue info (`docs/backlog.md` has the table).
|
|
1642
|
+
A marker can, but not in one tone either: `--gog-surface-color` alone is 1.79:1 on
|
|
1643
|
+
`material`'s warning fill, `--gog-text-color` alone is 1.06:1 on `one-dark`'s success. As a
|
|
1644
|
+
pair they always work — the ink line is 3.25:1 to 9.57:1 against the track in all eleven
|
|
1645
|
+
themes, and whichever tone a fill sits close to, the other one does not. `check:contrast`
|
|
1646
|
+
gates both halves. */
|
|
1647
|
+
--gog-progressbar-edge-width: 1px;
|
|
1648
|
+
--gog-progressbar-edge-color: var(--gog-text-color);
|
|
1649
|
+
--gog-progressbar-edge-backing-color: var(--gog-surface-color);
|
|
1650
|
+
/* The buffer tier is the same hue at low opacity, so it reads as "ahead of the fill"
|
|
1651
|
+
rather than as a second, competing colour. */
|
|
1652
|
+
--gog-progressbar-accent-bg: var(--gog-accent-color);
|
|
1653
|
+
--gog-progressbar-accent-buffer-bg: var(--gog-accent-pale);
|
|
1654
|
+
--gog-progressbar-success-bg: var(--gog-success-color);
|
|
1655
|
+
--gog-progressbar-success-buffer-bg: var(--gog-border-color);
|
|
1656
|
+
--gog-progressbar-danger-bg: var(--gog-danger-color);
|
|
1657
|
+
--gog-progressbar-danger-buffer-bg: var(--gog-border-color);
|
|
1658
|
+
--gog-progressbar-warning-bg: var(--gog-warning-color);
|
|
1659
|
+
--gog-progressbar-warning-buffer-bg: var(--gog-border-color);
|
|
1660
|
+
--gog-progressbar-info-bg: var(--gog-info-color);
|
|
1661
|
+
--gog-progressbar-info-buffer-bg: var(--gog-border-color);
|
|
1662
|
+
|
|
1663
|
+
/* ── Ripple (the `gogRipple` directive; its classes live in ripple.css) ────
|
|
1664
|
+
`currentColor` rather than a fixed colour on purpose: the wash then reads as the host's
|
|
1665
|
+
own foreground, so one value works on a filled button and on a ghost one without a
|
|
1666
|
+
per-variant tier. The property is inherited, so `--gog-ripple-color` set anywhere above
|
|
1667
|
+
the host reaches it — which is the per-instance override, no undeclared tier needed. */
|
|
1668
|
+
--gog-ripple-color: currentColor;
|
|
1669
|
+
--gog-ripple-opacity: 0.16;
|
|
1670
|
+
/* Longer than any other motion in the library, deliberately: a ripple held to the house 0.2s
|
|
1671
|
+
is over before the eye has followed it across the surface. Still expressed in the
|
|
1672
|
+
foundation scale, so setting the durations to 0s still flattens it theme-wide. */
|
|
1673
|
+
--gog-ripple-enter-duration: calc(var(--gog-duration-slow) * 2);
|
|
1674
|
+
--gog-ripple-exit-duration: var(--gog-duration-slow);
|
|
1675
|
+
--gog-ripple-easing: var(--gog-easing);
|
|
1676
|
+
|
|
1677
|
+
/* ── Scroll ────────────────────────────────────────────────────────────────── */
|
|
1678
|
+
--gog-scroll-track-bg: transparent;
|
|
1679
|
+
--gog-scroll-track-radius: var(--gog-radius);
|
|
1680
|
+
--gog-scroll-thumb-bg: var(--gog-accent-dim);
|
|
1681
|
+
--gog-scroll-thumb-hover-bg: var(--gog-accent-color);
|
|
1682
|
+
--gog-scroll-thumb-active-bg: var(--gog-accent-bright);
|
|
1683
|
+
--gog-scroll-thumb-radius: var(--gog-radius);
|
|
1684
|
+
--gog-scroll-thumb-inset: 2px;
|
|
1685
|
+
--gog-scroll-corner-bg: transparent;
|
|
1686
|
+
--gog-scroll-fade-duration: var(--gog-duration-base);
|
|
1687
|
+
--gog-scroll-focus-ring: var(--gog-accent-color);
|
|
1688
|
+
--gog-scroll-focus-ring-width: var(--gog-focus-ring-width);
|
|
1689
|
+
/* Per-size pair for the two-tier `--gog-scroll-track-width`/`-thumb-min-size` chains
|
|
1690
|
+
that scroll.component.scss's `.gog-scroll--thin` modifier switches between. `normal`
|
|
1691
|
+
is the unmarked default, mirroring --gog-table-lg-*. */
|
|
1692
|
+
--gog-scroll-normal-track-width: 10px;
|
|
1693
|
+
--gog-scroll-thin-track-width: 6px;
|
|
1694
|
+
--gog-scroll-normal-thumb-min-size: 32px;
|
|
1695
|
+
--gog-scroll-thin-thumb-min-size: 24px;
|
|
1696
|
+
/* Invisible pointer-target padding around the thumb (see .gog-scroll__thumb::before) — the
|
|
1697
|
+
`thin` variant gets more of it since its 6px track leaves the least visible thumb to aim
|
|
1698
|
+
at; both land the effective hit width in the ~22-24px range generally recommended for a
|
|
1699
|
+
comfortable pointer target. */
|
|
1700
|
+
--gog-scroll-normal-thumb-hit-padding: var(--gog-space-6);
|
|
1701
|
+
--gog-scroll-thin-thumb-hit-padding: var(--gog-space-8);
|
|
1702
|
+
|
|
1703
|
+
/* ── Select ────────────────────────────────────────────────────────────────── */
|
|
1704
|
+
--gog-select-font-family: var(--gog-font-body);
|
|
1705
|
+
--gog-select-label-font-family: var(--gog-font-heading);
|
|
1706
|
+
--gog-select-gap: var(--gog-space-4);
|
|
1707
|
+
--gog-select-label-color: var(--gog-accent-color);
|
|
1708
|
+
--gog-select-label-font-size: var(--gog-text-sm);
|
|
1709
|
+
--gog-select-label-letter-spacing: var(--gog-letter-spacing);
|
|
1710
|
+
--gog-select-label-text-transform: var(--gog-text-transform);
|
|
1711
|
+
--gog-select-field-bg: var(--gog-surface-color);
|
|
1712
|
+
--gog-select-field-border: var(--gog-accent-dim);
|
|
1713
|
+
--gog-select-field-border-width: var(--gog-control-border-width);
|
|
1714
|
+
--gog-select-field-border-style: var(--gog-control-border-style);
|
|
1715
|
+
--gog-select-radius: var(--gog-radius);
|
|
1716
|
+
--gog-select-field-color: var(--gog-text-color);
|
|
1717
|
+
--gog-select-placeholder-color: var(--gog-muted-text-color);
|
|
1718
|
+
--gog-select-focus-border: var(--gog-accent-color);
|
|
1719
|
+
--gog-select-focus-ring: var(--gog-accent-pale);
|
|
1720
|
+
--gog-select-focus-glow: 0 0 8px var(--gog-select-focus-ring);
|
|
1721
|
+
--gog-select-focus-ring-width: var(--gog-focus-ring-width);
|
|
1722
|
+
--gog-select-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
1723
|
+
--gog-select-error-color: var(--gog-danger-color);
|
|
1724
|
+
--gog-select-error-font-size: var(--gog-text-xs);
|
|
1725
|
+
--gog-select-chevron-color: var(--gog-accent-color);
|
|
1726
|
+
/*
|
|
1727
|
+
Distance from the trigger's right edge to the trailing chrome, matching the leading icon
|
|
1728
|
+
inset on gog-inputfield so a select, a multiselect and an input line up in one form. It is
|
|
1729
|
+
applied as the trigger's `padding-right`, and the chevron sits inside that padding — so this
|
|
1730
|
+
is the gap itself, not the gap plus the chevron. It used to be 40px, which double-counted
|
|
1731
|
+
and put the chevron 42px from the edge.
|
|
1732
|
+
*/
|
|
1733
|
+
--gog-select-chevron-inset: var(--gog-control-icon-offset);
|
|
1734
|
+
/* Floor for an auto-width trigger, so [fullWidth]="false" cannot collapse it to the chevron. */
|
|
1735
|
+
--gog-select-min-width: 120px;
|
|
1736
|
+
/* Ceiling for a content-sized panel, so one very long option cannot span the viewport. */
|
|
1737
|
+
--gog-select-panel-max-width: 420px;
|
|
1738
|
+
/* Filter box — only rendered when `filter` is on. */
|
|
1739
|
+
--gog-select-filter-padding: var(--gog-space-6);
|
|
1740
|
+
--gog-select-filter-input-padding-y: var(--gog-space-6);
|
|
1741
|
+
--gog-select-filter-input-padding-x: var(--gog-space-8);
|
|
1742
|
+
--gog-select-filter-input-bg: var(--gog-background-color);
|
|
1743
|
+
--gog-select-filter-input-color: var(--gog-select-field-color);
|
|
1744
|
+
--gog-select-filter-input-border: var(--gog-select-field-border);
|
|
1745
|
+
--gog-select-filter-input-radius: var(--gog-radius);
|
|
1746
|
+
--gog-select-filter-border-width: var(--gog-panel-border-width);
|
|
1747
|
+
--gog-select-filter-border-style: var(--gog-panel-border-style);
|
|
1748
|
+
--gog-select-filter-border-color: var(--gog-select-option-border-color, var(--gog-border-color));
|
|
1749
|
+
--gog-select-filter-empty-padding: var(--gog-space-10);
|
|
1750
|
+
--gog-select-filter-empty-color: var(--gog-select-placeholder-color);
|
|
1751
|
+
/* Clear button — only rendered once a value is selected, see `clearable`. */
|
|
1752
|
+
/* A quarter of the corner radius — see `--gog-input-clear-radius` for why. */
|
|
1753
|
+
--gog-select-clear-radius: calc(var(--gog-radius) / 4);
|
|
1754
|
+
--gog-select-clear-icon-ratio: var(--gog-control-clear-icon-ratio);
|
|
1755
|
+
--gog-select-clear-gap: var(--gog-space-6);
|
|
1756
|
+
--gog-select-clear-color: var(--gog-select-placeholder-color);
|
|
1757
|
+
--gog-select-clear-hover-color: var(--gog-select-label-color);
|
|
1758
|
+
--gog-select-control-gap: var(--gog-space-12);
|
|
1759
|
+
--gog-select-panel-bg: var(--gog-surface-color);
|
|
1760
|
+
--gog-select-panel-shadow: var(--gog-panel-shadow);
|
|
1761
|
+
--gog-select-panel-max-height: 260px;
|
|
1762
|
+
--gog-select-panel-offset: var(--gog-space-2);
|
|
1763
|
+
--gog-select-option-hover-bg: var(--gog-hover-color);
|
|
1764
|
+
--gog-select-option-press-bg: var(--gog-border-color);
|
|
1765
|
+
--gog-select-option-selected-color: var(--gog-accent-color);
|
|
1766
|
+
--gog-select-option-color: var(--gog-text-color);
|
|
1767
|
+
--gog-select-option-gap: var(--gog-space-10);
|
|
1768
|
+
/* Estimated row height fed into the panel's up/down placement math; not itself a real
|
|
1769
|
+
layout property, so it has no effect unless the JS reads it. */
|
|
1770
|
+
--gog-select-option-height: 40px;
|
|
1771
|
+
--gog-select-option-disabled-opacity: var(--gog-disabled-opacity);
|
|
1772
|
+
--gog-select-option-transition-duration: var(--gog-duration-fast);
|
|
1773
|
+
/* Icon geometry, expressed as a ratio of the control's font size. */
|
|
1774
|
+
--gog-select-chevron-icon-ratio: 0.875;
|
|
1775
|
+
--gog-select-mark-size-ratio: 1.125;
|
|
1776
|
+
--gog-select-mark-icon-ratio: 0.875;
|
|
1777
|
+
--gog-select-disabled-opacity: var(--gog-disabled-opacity);
|
|
1778
|
+
--gog-select-transition-duration: var(--gog-duration-base);
|
|
1779
|
+
--gog-select-float-label-reserve: var(--gog-field-float-label-reserve);
|
|
1780
|
+
--gog-select-float-label-in-top: var(--gog-field-float-label-in-top);
|
|
1781
|
+
--gog-select-float-label-over-gap: var(--gog-field-float-label-over-gap);
|
|
1782
|
+
--gog-select-float-label-over-reserve: var(--gog-field-float-label-over-reserve);
|
|
1783
|
+
|
|
1784
|
+
/* ── Skeleton ─────────────────────────────────────────────────────────────── */
|
|
1785
|
+
--gog-skeleton-base: var(--gog-hover-color);
|
|
1786
|
+
--gog-skeleton-shine: var(--gog-surface-color);
|
|
1787
|
+
--gog-skeleton-radius: var(--gog-radius);
|
|
1788
|
+
--gog-skeleton-square-radius: 0px;
|
|
1789
|
+
--gog-skeleton-line-radius: calc(var(--gog-skeleton-radius) / 2);
|
|
1790
|
+
--gog-skeleton-line-gap: var(--gog-space-sm);
|
|
1791
|
+
--gog-skeleton-short-line-width: 60%;
|
|
1792
|
+
--gog-skeleton-pulse-duration: 1.6s;
|
|
1793
|
+
--gog-skeleton-pulse-min-opacity: 0.5;
|
|
1794
|
+
--gog-skeleton-wave-duration: 1.6s;
|
|
1795
|
+
--gog-skeleton-line-height-xsm: 8px;
|
|
1796
|
+
--gog-skeleton-line-height-sm: 10px;
|
|
1797
|
+
--gog-skeleton-line-height-md: 14px;
|
|
1798
|
+
--gog-skeleton-line-height-lg: 18px;
|
|
1799
|
+
--gog-skeleton-line-height-slg: 24px;
|
|
1800
|
+
--gog-skeleton-circle-size-xsm: 24px;
|
|
1801
|
+
--gog-skeleton-circle-size-sm: 32px;
|
|
1802
|
+
--gog-skeleton-circle-size-md: 48px;
|
|
1803
|
+
--gog-skeleton-circle-size-lg: 64px;
|
|
1804
|
+
--gog-skeleton-circle-size-slg: 96px;
|
|
1805
|
+
--gog-skeleton-rect-height-xsm: 40px;
|
|
1806
|
+
--gog-skeleton-rect-height-sm: 64px;
|
|
1807
|
+
--gog-skeleton-rect-height-md: 120px;
|
|
1808
|
+
--gog-skeleton-rect-height-lg: 200px;
|
|
1809
|
+
--gog-skeleton-rect-height-slg: 320px;
|
|
1810
|
+
|
|
1811
|
+
/* ── Slider ───────────────────────────────────────────────────────────────── */
|
|
1812
|
+
--gog-slider-auto-width: 240px;
|
|
1813
|
+
/* Length (height) of a vertical slider's track — the counterpart to
|
|
1814
|
+
--gog-slider-auto-width, which only sizes the horizontal case. */
|
|
1815
|
+
--gog-slider-vertical-length: 160px;
|
|
1816
|
+
--gog-slider-label-font-family: var(--gog-font-heading);
|
|
1817
|
+
--gog-slider-value-font-family: var(--gog-font-mono);
|
|
1818
|
+
--gog-slider-error-font-family: var(--gog-font-body);
|
|
1819
|
+
--gog-slider-gap: var(--gog-space-6);
|
|
1820
|
+
--gog-slider-label-color: var(--gog-accent-color);
|
|
1821
|
+
--gog-slider-label-font-size: var(--gog-text-sm);
|
|
1822
|
+
--gog-slider-label-letter-spacing: var(--gog-letter-spacing);
|
|
1823
|
+
--gog-slider-label-text-transform: var(--gog-text-transform);
|
|
1824
|
+
--gog-slider-value-color: var(--gog-accent-color);
|
|
1825
|
+
--gog-slider-value-font-size: var(--gog-text-sm);
|
|
1826
|
+
--gog-slider-value-min-width: 40px;
|
|
1827
|
+
--gog-slider-track-height: 4px;
|
|
1828
|
+
--gog-slider-track-area-height: 20px;
|
|
1829
|
+
--gog-slider-track-radius: 0px;
|
|
1830
|
+
/*
|
|
1831
|
+
* Deliberately NOT an accent-* token: --gog-accent-dim sits on the same hue ramp as
|
|
1832
|
+
* --gog-slider-fill-bg (--gog-accent-color), so at a 4px track height the two used to
|
|
1833
|
+
* read as one blob rather than "recessed groove + accent fill" — same problem in both
|
|
1834
|
+
* themes, since the whole accent ramp is one hue. Mixing --gog-text-color into
|
|
1835
|
+
* --gog-border-color instead gives a desaturated, theme-adaptive groove: it darkens
|
|
1836
|
+
* toward black in the light theme (text-color is near-black there) and lightens toward
|
|
1837
|
+
* parchment in the dark theme (text-color is near-white there), landing at a neutral
|
|
1838
|
+
* warm gray in both — always visibly distinct from the saturated accent fill, and always
|
|
1839
|
+
* legible against its own theme's surface.
|
|
1840
|
+
*/
|
|
1841
|
+
--gog-slider-track-bg: var(--gog-border-color);
|
|
1842
|
+
--gog-slider-track-border-width: var(--gog-border-width);
|
|
1843
|
+
--gog-slider-track-border-style: var(--gog-border-style);
|
|
1844
|
+
/* Transparent by default — same opt-in convention as --gog-button-primary-border: the
|
|
1845
|
+
width/style are always in the box model, but invisible until a theme sets a color. */
|
|
1846
|
+
--gog-slider-track-border-color: transparent;
|
|
1847
|
+
/* Bound via `background` (not `background-color`) in slider.component.scss, so this
|
|
1848
|
+
also accepts a gradient (e.g. `linear-gradient(...)`) for the fill style, not just a
|
|
1849
|
+
solid color. */
|
|
1850
|
+
--gog-slider-fill-bg: var(--gog-accent-color);
|
|
1851
|
+
--gog-slider-thumb-size: 16px;
|
|
1852
|
+
--gog-slider-thumb-bg: var(--gog-accent-color);
|
|
1853
|
+
--gog-slider-thumb-border: var(--gog-background-color);
|
|
1854
|
+
--gog-slider-thumb-border-width: var(--gog-control-border-width);
|
|
1855
|
+
--gog-slider-thumb-radius: 50%;
|
|
1856
|
+
--gog-slider-thumb-shadow: var(--gog-accent-pale);
|
|
1857
|
+
--gog-slider-thumb-glow-size: 6px;
|
|
1858
|
+
--gog-slider-focus-ring: var(--gog-accent-pale);
|
|
1859
|
+
--gog-slider-focus-ring-width: var(--gog-focus-ring-width);
|
|
1860
|
+
--gog-slider-range-color: var(--gog-muted-text-color);
|
|
1861
|
+
--gog-slider-range-font-size: var(--gog-text-xs);
|
|
1862
|
+
--gog-slider-error-color: var(--gog-danger-color);
|
|
1863
|
+
--gog-slider-error-font-size: var(--gog-text-xs);
|
|
1864
|
+
--gog-slider-disabled-opacity: var(--gog-disabled-opacity);
|
|
1865
|
+
|
|
1866
|
+
/* ── Spinner ──────────────────────────────────────────────────────────────── */
|
|
1867
|
+
--gog-spinner-rune-font-family: var(--gog-font-heading);
|
|
1868
|
+
--gog-spinner-track-color: var(--gog-accent-dim);
|
|
1869
|
+
--gog-spinner-arc-outer-color: var(--gog-accent-color);
|
|
1870
|
+
--gog-spinner-arc-inner-color: var(--gog-accent-bright);
|
|
1871
|
+
--gog-spinner-diamond-color: var(--gog-accent-bright);
|
|
1872
|
+
--gog-spinner-rune-color: var(--gog-accent-bright);
|
|
1873
|
+
--gog-spinner-glow-color: var(--gog-accent-color);
|
|
1874
|
+
--gog-spinner-track-opacity: 0.35;
|
|
1875
|
+
--gog-spinner-arc-inner-opacity: 0.75;
|
|
1876
|
+
--gog-spinner-diamond-opacity: 0.85;
|
|
1877
|
+
--gog-spinner-arc-outer-pulse-opacity: 0.8;
|
|
1878
|
+
--gog-spinner-arc-inner-pulse-opacity: 0.45;
|
|
1879
|
+
--gog-spinner-rune-pulse-opacity: 0.4;
|
|
1880
|
+
--gog-spinner-arc-outer-dash: 100 63;
|
|
1881
|
+
--gog-spinner-arc-inner-dash: 35 78;
|
|
1882
|
+
--gog-spinner-arc-inner-stroke-compact: 1;
|
|
1883
|
+
--gog-spinner-spin-duration: 1.4s;
|
|
1884
|
+
--gog-spinner-spin-slow-duration: 2s;
|
|
1885
|
+
--gog-spinner-ticks-duration: 6s;
|
|
1886
|
+
--gog-spinner-pulse-duration: 2.8s;
|
|
1887
|
+
--gog-spinner-ring-duration: 1s;
|
|
1888
|
+
--gog-spinner-ring-padding: 16%;
|
|
1889
|
+
--gog-spinner-arc-outer-glow: 5px;
|
|
1890
|
+
--gog-spinner-arc-inner-glow: 4px;
|
|
1891
|
+
--gog-spinner-diamond-glow: 3px;
|
|
1892
|
+
--gog-spinner-rune-glow: 6px;
|
|
1893
|
+
--gog-spinner-ring-glow: 5px;
|
|
1894
|
+
--gog-spinner-overlay-blur: 3px;
|
|
1895
|
+
--gog-spinner-overlay-fade-duration: var(--gog-duration-slow);
|
|
1896
|
+
|
|
1897
|
+
/* ── Table ────────────────────────────────────────────────────────────────── */
|
|
1898
|
+
--gog-table-font-family: var(--gog-font-body);
|
|
1899
|
+
--gog-table-header-font-family: var(--gog-font-heading);
|
|
1900
|
+
--gog-table-numeric-font-family: var(--gog-font-mono);
|
|
1901
|
+
--gog-table-gap: var(--gog-space-12);
|
|
1902
|
+
--gog-table-border-color: var(--gog-accent-dim);
|
|
1903
|
+
--gog-table-border-width: var(--gog-control-border-width);
|
|
1904
|
+
--gog-table-border-style: var(--gog-border-style);
|
|
1905
|
+
--gog-table-row-border-width: var(--gog-border-width);
|
|
1906
|
+
/* The selection column is sized to its checkbox and never grows with content. */
|
|
1907
|
+
--gog-table-select-col-width: 44px;
|
|
1908
|
+
--gog-table-surface: var(--gog-surface-color);
|
|
1909
|
+
/* The header needs its own ground, not the table's. It used to paint `--gog-table-surface`,
|
|
1910
|
+
which is the same colour the body paints, so on a scrolling table with a sticky header the
|
|
1911
|
+
column names slid over rows of identical background and the only thing separating them was
|
|
1912
|
+
the accent colour and the caps — legible on a light theme, not on a dark one. */
|
|
1913
|
+
--gog-table-header-bg: var(--gog-hover-color);
|
|
1914
|
+
--gog-table-text-color: var(--gog-text-color);
|
|
1915
|
+
--gog-table-accent-color: var(--gog-accent-color);
|
|
1916
|
+
--gog-table-accent-bright: var(--gog-accent-bright);
|
|
1917
|
+
--gog-table-hover-bg: var(--gog-accent-pale);
|
|
1918
|
+
/* Selected rows keep this tint through hover, so hovering one never reads as clearing it. */
|
|
1919
|
+
--gog-table-selected-bg: var(--gog-accent-pale);
|
|
1920
|
+
--gog-table-muted-color: var(--gog-muted-text-color);
|
|
1921
|
+
--gog-table-focus-ring: var(--gog-accent-color);
|
|
1922
|
+
--gog-table-focus-ring-width: var(--gog-focus-ring-width);
|
|
1923
|
+
--gog-table-header-letter-spacing: var(--gog-letter-spacing);
|
|
1924
|
+
--gog-table-header-text-transform: var(--gog-text-transform);
|
|
1925
|
+
--gog-table-num-col-width: 48px;
|
|
1926
|
+
--gog-table-th-inner-gap: var(--gog-space-6);
|
|
1927
|
+
--gog-table-sort-icon-size: 0.9em;
|
|
1928
|
+
--gog-table-sort-icon-width: 1.1em;
|
|
1929
|
+
--gog-table-sort-icon-opacity: 0.6;
|
|
1930
|
+
--gog-table-empty-padding: var(--gog-space-24) var(--gog-space-14);
|
|
1931
|
+
--gog-table-empty-font-size: var(--gog-text-md);
|
|
1932
|
+
--gog-table-loading-padding: var(--gog-space-32) var(--gog-space-14);
|
|
1933
|
+
--gog-table-loading-opacity: 0.5;
|
|
1934
|
+
--gog-table-row-transition-duration: var(--gog-duration-fast);
|
|
1935
|
+
--gog-table-footer-gap: var(--gog-space-sm);
|
|
1936
|
+
--gog-table-footer-min-height: 32px;
|
|
1937
|
+
--gog-table-total-font-size: var(--gog-text-xs);
|
|
1938
|
+
--gog-table-total-letter-spacing: 0.5px;
|
|
1939
|
+
--gog-table-total-text-transform: var(--gog-text-transform);
|
|
1940
|
+
--gog-table-num-font-size: var(--gog-text-xs);
|
|
1941
|
+
--gog-table-padding-h: var(--gog-space-14);
|
|
1942
|
+
--gog-table-xsm-padding-v: var(--gog-space-2);
|
|
1943
|
+
--gog-table-xsm-th-font-size: var(--gog-text-xs);
|
|
1944
|
+
--gog-table-xsm-td-font-size: var(--gog-text-xs);
|
|
1945
|
+
--gog-table-sm-padding-v: var(--gog-space-2);
|
|
1946
|
+
--gog-table-sm-th-font-size: var(--gog-text-xs);
|
|
1947
|
+
--gog-table-sm-td-font-size: var(--gog-text-xs);
|
|
1948
|
+
--gog-table-md-padding-v: var(--gog-space-6);
|
|
1949
|
+
--gog-table-md-th-font-size: var(--gog-text-xs);
|
|
1950
|
+
--gog-table-md-td-font-size: var(--gog-text-sm);
|
|
1951
|
+
--gog-table-lg-padding-v: var(--gog-space-10);
|
|
1952
|
+
--gog-table-lg-th-font-size: var(--gog-text-sm);
|
|
1953
|
+
--gog-table-lg-td-font-size: var(--gog-text-md);
|
|
1954
|
+
--gog-table-slg-padding-v: var(--gog-space-14);
|
|
1955
|
+
--gog-table-slg-th-font-size: var(--gog-text-md);
|
|
1956
|
+
--gog-table-slg-td-font-size: var(--gog-text-lg);
|
|
1957
|
+
|
|
1958
|
+
/* ── Tabs ──────────────────────────────────────────────────────────────────
|
|
1959
|
+
`--gog-tabs-tab-bg`, `-tab-color`, `-tab-padding` and `-tab-font-size` are intentionally
|
|
1960
|
+
NOT declared — they are the per-instance escape hatch the size classes fall back through.
|
|
1961
|
+
`--gog-tabs-indicator-offset` / `-length` are written as inline styles from the measured
|
|
1962
|
+
header geometry, so they are not declared either. */
|
|
1963
|
+
--gog-tabs-font-family: var(--gog-font-heading);
|
|
1964
|
+
--gog-tabs-font-weight: var(--gog-font-weight-bold);
|
|
1965
|
+
--gog-tabs-letter-spacing: 0.4px;
|
|
1966
|
+
--gog-tabs-text-transform: none;
|
|
1967
|
+
--gog-tabs-line-height: var(--gog-line-height-tight);
|
|
1968
|
+
--gog-tabs-gap: 0px;
|
|
1969
|
+
--gog-tabs-tab-gap: var(--gog-space-sm);
|
|
1970
|
+
--gog-tabs-icon-size: 1.1em;
|
|
1971
|
+
--gog-tabs-rest-bg: transparent;
|
|
1972
|
+
--gog-tabs-rest-color: var(--gog-muted-text-color);
|
|
1973
|
+
--gog-tabs-hover-color: var(--gog-text-color);
|
|
1974
|
+
/* Tabs paint no background at rest and none on hover — the press is the only one they get,
|
|
1975
|
+
which is why this token has no hover counterpart to step past. */
|
|
1976
|
+
--gog-tabs-press-bg: var(--gog-border-color);
|
|
1977
|
+
/* A resting tab's label is deliberately muted, and muted text has no contrast headroom to
|
|
1978
|
+
spend on a tinted ground: on the press wash it fell to 3.24:1 in one-dark and under 4.5 in
|
|
1979
|
+
six other themes. The press takes the full text colour instead — which is also what pressing
|
|
1980
|
+
a tab is about to make it. */
|
|
1981
|
+
--gog-tabs-press-color: var(--gog-text-color);
|
|
1982
|
+
--gog-tabs-active-color: var(--gog-accent-color);
|
|
1983
|
+
--gog-tabs-header-border-width: var(--gog-border-width);
|
|
1984
|
+
--gog-tabs-header-border-style: var(--gog-border-style);
|
|
1985
|
+
--gog-tabs-header-border-color: var(--gog-border-color);
|
|
1986
|
+
--gog-tabs-indicator-color: var(--gog-accent-color);
|
|
1987
|
+
--gog-tabs-indicator-thickness: 2px;
|
|
1988
|
+
--gog-tabs-indicator-radius: 999px;
|
|
1989
|
+
--gog-tabs-transition-duration: var(--gog-duration-base);
|
|
1990
|
+
--gog-tabs-disabled-opacity: var(--gog-disabled-opacity);
|
|
1991
|
+
--gog-tabs-focus-ring-width: var(--gog-focus-ring-width);
|
|
1992
|
+
/* Inset, for the same reason as the calendar cell: tabs sit shoulder to shoulder. */
|
|
1993
|
+
--gog-tabs-focus-ring-offset: calc(var(--gog-focus-ring-offset) * -1);
|
|
1994
|
+
--gog-tabs-focus-ring-color: var(--gog-accent-color);
|
|
1995
|
+
--gog-tabs-panel-padding: var(--gog-space-md);
|
|
1996
|
+
--gog-tabs-panel-color: var(--gog-text-color);
|
|
1997
|
+
--gog-tabs-xsm-padding: var(--gog-space-6) var(--gog-space-10);
|
|
1998
|
+
--gog-tabs-xsm-font-size: var(--gog-text-xs);
|
|
1999
|
+
--gog-tabs-sm-padding: var(--gog-space-8) var(--gog-space-14);
|
|
2000
|
+
--gog-tabs-sm-font-size: var(--gog-text-sm);
|
|
2001
|
+
--gog-tabs-md-padding: var(--gog-space-12) var(--gog-space-18);
|
|
2002
|
+
--gog-tabs-md-font-size: var(--gog-text-md);
|
|
2003
|
+
--gog-tabs-lg-padding: var(--gog-space-16) var(--gog-space-24);
|
|
2004
|
+
--gog-tabs-lg-font-size: var(--gog-text-lg);
|
|
2005
|
+
--gog-tabs-slg-padding: var(--gog-space-20) var(--gog-space-28);
|
|
2006
|
+
--gog-tabs-slg-font-size: var(--gog-text-xl);
|
|
2007
|
+
|
|
2008
|
+
/* ── Tag ──────────────────────────────────────────────────────────────────
|
|
2009
|
+
Like the button, the unsuffixed `--gog-tag-bg`/`-border`/`-color`/`-font-size`
|
|
2010
|
+
and friends stay undeclared so variant and size classes can fall through them. */
|
|
2011
|
+
--gog-tag-font-family: inherit;
|
|
2012
|
+
--gog-tag-default-color: var(--gog-info-color, var(--gog-muted-text-color));
|
|
2013
|
+
--gog-tag-success-color: var(--gog-success-color);
|
|
2014
|
+
--gog-tag-danger-color: var(--gog-danger-color);
|
|
2015
|
+
--gog-tag-warning-color: var(--gog-warning-color);
|
|
2016
|
+
--gog-tag-info-color: var(--gog-info-color);
|
|
2017
|
+
--gog-tag-bg-mix: 10%;
|
|
2018
|
+
/* The label is the status hue mixed **halfway toward the page's ink**, and both halves of that
|
|
2019
|
+
changed in 21.10.0. It was 82% of the hue mixed toward literal `black`, which is a light-theme
|
|
2020
|
+
assumption twice over: on a dark theme it darkened a label that already sat on a dark ground
|
|
2021
|
+
(one-dark's danger tag read 3.11:1), and on a light one 18% of black is not enough to bring a
|
|
2022
|
+
bright hue down to text contrast (material's warning, 2.49:1; primeng's success, 3.06:1).
|
|
2023
|
+
Eleven of the 55 shipped combinations were under WCAG AA and nothing had ever measured them —
|
|
2024
|
+
a tag's colours reach the DOM through `--gog-tag-variant-color`, which `check:contrast` could
|
|
2025
|
+
not follow until the same release taught it to.
|
|
2026
|
+
|
|
2027
|
+
`--gog-text-color` rather than `black` makes the mix follow the theme, and 50% rather than 82%
|
|
2028
|
+
is the same ratio, and the same argument, as `--gog-button-<status>-ink`: as body text the raw
|
|
2029
|
+
status hue clears AA in only a handful of themes. The worst pair is now 4.67:1. */
|
|
2030
|
+
--gog-tag-color-mix: 50%;
|
|
2031
|
+
--gog-tag-bg-base: var(--gog-surface-color);
|
|
2032
|
+
--gog-tag-color-base: var(--gog-text-color);
|
|
2033
|
+
--gog-tag-border-width: var(--gog-border-width);
|
|
2034
|
+
--gog-tag-border-style: var(--gog-border-style);
|
|
2035
|
+
--gog-tag-inner-border-width: var(--gog-border-width);
|
|
2036
|
+
--gog-tag-font-weight: var(--gog-font-weight-semibold);
|
|
2037
|
+
--gog-tag-line-height: var(--gog-line-height-none);
|
|
2038
|
+
--gog-tag-radius: max(var(--gog-radius), 2px);
|
|
2039
|
+
--gog-tag-pill-radius: 9999px;
|
|
2040
|
+
|
|
2041
|
+
--gog-tag-xsm-font-size: 0.6875rem;
|
|
2042
|
+
--gog-tag-xsm-padding-block: var(--gog-space-2);
|
|
2043
|
+
--gog-tag-xsm-padding-inline: var(--gog-space-6);
|
|
2044
|
+
--gog-tag-xsm-gap: var(--gog-space-2);
|
|
2045
|
+
--gog-tag-xsm-icon-size: 0.6875rem;
|
|
2046
|
+
|
|
2047
|
+
--gog-tag-sm-font-size: var(--gog-text-xs);
|
|
2048
|
+
--gog-tag-sm-padding-block: var(--gog-space-4);
|
|
2049
|
+
--gog-tag-sm-padding-inline: var(--gog-space-8);
|
|
2050
|
+
--gog-tag-sm-gap: var(--gog-space-4);
|
|
2051
|
+
--gog-tag-sm-icon-size: 0.75rem;
|
|
2052
|
+
|
|
2053
|
+
--gog-tag-md-font-size: var(--gog-text-sm);
|
|
2054
|
+
--gog-tag-md-padding-block: var(--gog-space-6);
|
|
2055
|
+
--gog-tag-md-padding-inline: var(--gog-space-12);
|
|
2056
|
+
--gog-tag-md-gap: var(--gog-space-6);
|
|
2057
|
+
--gog-tag-md-icon-size: 0.875rem;
|
|
2058
|
+
|
|
2059
|
+
--gog-tag-lg-font-size: var(--gog-text-md);
|
|
2060
|
+
--gog-tag-lg-padding-block: var(--gog-space-8);
|
|
2061
|
+
--gog-tag-lg-padding-inline: var(--gog-space-14);
|
|
2062
|
+
--gog-tag-lg-gap: var(--gog-space-8);
|
|
2063
|
+
--gog-tag-lg-icon-size: 1rem;
|
|
2064
|
+
|
|
2065
|
+
--gog-tag-slg-font-size: var(--gog-text-lg);
|
|
2066
|
+
--gog-tag-slg-padding-block: var(--gog-space-10);
|
|
2067
|
+
--gog-tag-slg-padding-inline: var(--gog-space-16);
|
|
2068
|
+
--gog-tag-slg-gap: var(--gog-space-10);
|
|
2069
|
+
--gog-tag-slg-icon-size: 1.125rem;
|
|
2070
|
+
|
|
2071
|
+
/* ── Toast ────────────────────────────────────────────────────────────────── */
|
|
2072
|
+
--gog-toast-font-family: var(--gog-font-body);
|
|
2073
|
+
--gog-toast-bg: var(--gog-surface-color);
|
|
2074
|
+
--gog-toast-color: var(--gog-text-color);
|
|
2075
|
+
--gog-toast-border: var(--gog-accent-color);
|
|
2076
|
+
--gog-toast-icon-color: var(--gog-accent-color);
|
|
2077
|
+
--gog-toast-success-color: var(--gog-success-color);
|
|
2078
|
+
--gog-toast-error-color: var(--gog-danger-color);
|
|
2079
|
+
--gog-toast-warning-color: var(--gog-accent-bright);
|
|
2080
|
+
--gog-toast-info-color: var(--gog-accent-color);
|
|
2081
|
+
--gog-toast-accent-width: 4px;
|
|
2082
|
+
--gog-toast-padding: var(--gog-space-12) var(--gog-space-14);
|
|
2083
|
+
--gog-toast-radius: 0px;
|
|
2084
|
+
--gog-toast-content-gap: var(--gog-space-10);
|
|
2085
|
+
--gog-toast-main-gap: var(--gog-space-sm);
|
|
2086
|
+
--gog-toast-actions-gap: var(--gog-space-6);
|
|
2087
|
+
--gog-toast-message-font-size: var(--gog-text-sm);
|
|
2088
|
+
--gog-toast-message-line-height: var(--gog-line-height-relaxed);
|
|
2089
|
+
--gog-toast-icon-size: 1rem;
|
|
2090
|
+
--gog-toast-icon-line-height: var(--gog-line-height-normal);
|
|
2091
|
+
--gog-toast-action-padding: var(--gog-space-4) var(--gog-space-8);
|
|
2092
|
+
--gog-toast-action-font-size: var(--gog-text-xs);
|
|
2093
|
+
--gog-toast-close-padding: var(--gog-space-2) var(--gog-space-4);
|
|
2094
|
+
--gog-toast-close-font-size: var(--gog-text-xs);
|
|
2095
|
+
--gog-toast-progress-height: 3px;
|
|
2096
|
+
--gog-toast-progress-opacity: 30%;
|
|
2097
|
+
--gog-toast-transition-duration: 0.25s;
|
|
2098
|
+
/* Card-stack geometry */
|
|
2099
|
+
--gog-toast-stack-peek: 14px;
|
|
2100
|
+
--gog-toast-stack-scale-step: 0.06;
|
|
2101
|
+
--gog-toast-stack-expanded-gap: 84px;
|
|
2102
|
+
--gog-toast-stack-min-opacity: 0.4;
|
|
2103
|
+
--gog-toast-stack-opacity-step: 0.18;
|
|
2104
|
+
--gog-toast-stack-max-depth: 6;
|
|
2105
|
+
|
|
2106
|
+
/* ── Toggle ───────────────────────────────────────────────────────────────────
|
|
2107
|
+
A switch, not a checkbox: it announces as "switch, on". The outer label size reuses
|
|
2108
|
+
the `--gog-control-checkbox-*` scale so a toggle and a checkbox in the same form read
|
|
2109
|
+
at the same weight; the track/thumb geometry is its own, since a switch is wider than
|
|
2110
|
+
it is tall. */
|
|
2111
|
+
--gog-toggle-font-family: var(--gog-font-body);
|
|
2112
|
+
--gog-toggle-gap: var(--gog-space-sm);
|
|
2113
|
+
--gog-toggle-radius: 999px;
|
|
2114
|
+
--gog-toggle-border-width: var(--gog-border-width);
|
|
2115
|
+
--gog-toggle-border-style: var(--gog-border-style);
|
|
2116
|
+
--gog-toggle-border-color: var(--gog-border-color);
|
|
2117
|
+
--gog-toggle-on-border-color: var(--gog-accent-color);
|
|
2118
|
+
--gog-toggle-track-off-bg: var(--gog-border-color);
|
|
2119
|
+
--gog-toggle-track-on-bg: var(--gog-accent-color);
|
|
2120
|
+
--gog-toggle-thumb-off-bg: var(--gog-surface-color);
|
|
2121
|
+
--gog-toggle-thumb-on-bg: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
2122
|
+
--gog-toggle-thumb-shadow: 0 1px 3px rgba(0, 0, 0, 0.35);
|
|
2123
|
+
--gog-toggle-thumb-inset: 2px;
|
|
2124
|
+
--gog-toggle-transition-duration: var(--gog-duration-base);
|
|
2125
|
+
--gog-toggle-disabled-opacity: var(--gog-disabled-opacity);
|
|
2126
|
+
--gog-toggle-label-color: var(--gog-text-color);
|
|
2127
|
+
--gog-toggle-label-line-height: var(--gog-line-height-normal);
|
|
2128
|
+
--gog-toggle-focus-ring-width: var(--gog-focus-ring-width);
|
|
2129
|
+
--gog-toggle-focus-ring-offset: var(--gog-focus-ring-offset);
|
|
2130
|
+
--gog-toggle-focus-ring-color: var(--gog-accent-color);
|
|
2131
|
+
/* In-track on/off wording */
|
|
2132
|
+
--gog-toggle-state-color: var(--gog-accent-text-color, var(--gog-primary-color));
|
|
2133
|
+
--gog-toggle-state-font-weight: var(--gog-font-weight-semibold);
|
|
2134
|
+
--gog-toggle-state-letter-spacing: 0.04em;
|
|
2135
|
+
--gog-toggle-state-padding-inline: var(--gog-space-4);
|
|
2136
|
+
--gog-toggle-state-offset: var(--gog-space-6);
|
|
2137
|
+
/* Gap between the wording and the thumb parked at the opposite end. The clearance itself
|
|
2138
|
+
(thumb size + this) is computed in the component stylesheet, not here: a `var(` to a
|
|
2139
|
+
size-class token is substituted where it is *declared*, so doing that calc on :root would
|
|
2140
|
+
freeze it to the md thumb and stop it scaling with `size`. */
|
|
2141
|
+
--gog-toggle-state-thumb-gap: var(--gog-space-6);
|
|
2142
|
+
--gog-toggle-xsm-track-width: 24px;
|
|
2143
|
+
--gog-toggle-xsm-track-height: 14px;
|
|
2144
|
+
--gog-toggle-xsm-thumb-size: 10px;
|
|
2145
|
+
--gog-toggle-xsm-label-size: var(--gog-control-checkbox-label-size-xsm);
|
|
2146
|
+
--gog-toggle-xsm-state-font-size: 0.5rem;
|
|
2147
|
+
--gog-toggle-sm-track-width: 32px;
|
|
2148
|
+
--gog-toggle-sm-track-height: 18px;
|
|
2149
|
+
--gog-toggle-sm-thumb-size: 14px;
|
|
2150
|
+
--gog-toggle-sm-label-size: var(--gog-control-checkbox-label-size-sm);
|
|
2151
|
+
--gog-toggle-sm-state-font-size: 0.5625rem;
|
|
2152
|
+
--gog-toggle-md-track-width: 44px;
|
|
2153
|
+
--gog-toggle-md-track-height: 24px;
|
|
2154
|
+
--gog-toggle-md-thumb-size: 18px;
|
|
2155
|
+
--gog-toggle-md-label-size: var(--gog-control-checkbox-label-size-md);
|
|
2156
|
+
--gog-toggle-md-state-font-size: 0.625rem;
|
|
2157
|
+
--gog-toggle-lg-track-width: 56px;
|
|
2158
|
+
--gog-toggle-lg-track-height: 32px;
|
|
2159
|
+
--gog-toggle-lg-thumb-size: 26px;
|
|
2160
|
+
--gog-toggle-lg-label-size: var(--gog-control-checkbox-label-size-lg);
|
|
2161
|
+
--gog-toggle-lg-state-font-size: var(--gog-text-xs);
|
|
2162
|
+
--gog-toggle-slg-track-width: 68px;
|
|
2163
|
+
--gog-toggle-slg-track-height: 40px;
|
|
2164
|
+
--gog-toggle-slg-thumb-size: 34px;
|
|
2165
|
+
--gog-toggle-slg-label-size: var(--gog-control-checkbox-label-size-slg);
|
|
2166
|
+
--gog-toggle-slg-state-font-size: 0.8125rem;
|
|
2167
|
+
|
|
2168
|
+
/* ── Tooltip ──────────────────────────────────────────────────────────────── */
|
|
2169
|
+
--gog-tooltip-font-family: var(--gog-font-body);
|
|
2170
|
+
--gog-tooltip-font-size: var(--gog-text-xs);
|
|
2171
|
+
--gog-tooltip-line-height: var(--gog-line-height-normal);
|
|
2172
|
+
--gog-tooltip-padding: var(--gog-space-6) var(--gog-space-10);
|
|
2173
|
+
--gog-tooltip-radius: var(--gog-radius);
|
|
2174
|
+
--gog-tooltip-max-width: 280px;
|
|
2175
|
+
/* Caps the gog-scroll wrapping the bubble's content — see tooltip-bubble.component.html.
|
|
2176
|
+
A cap, not a fixed height: shorter content stays exactly as tall as it needs to be, this
|
|
2177
|
+
only stops something unusually long (a multi-paragraph TemplateRef) from growing to
|
|
2178
|
+
cover most of the viewport. */
|
|
2179
|
+
--gog-tooltip-max-height: 220px;
|
|
2180
|
+
/* Same "floating panel" recipe as gog-dialog's panel and gog-select's dropdown — a
|
|
2181
|
+
surface-colored box with a plain (not accent) border and the shared panel shadow —
|
|
2182
|
+
rather than an inverted dark/light bubble, so it reads as part of this site instead of
|
|
2183
|
+
a generic dark tooltip dropped on top of it. */
|
|
2184
|
+
--gog-tooltip-bg: var(--gog-surface-color);
|
|
2185
|
+
--gog-tooltip-color: var(--gog-text-color);
|
|
2186
|
+
--gog-tooltip-border-width: var(--gog-panel-border-width);
|
|
2187
|
+
--gog-tooltip-border-style: var(--gog-panel-border-style);
|
|
2188
|
+
--gog-tooltip-border-color: var(--gog-border-color);
|
|
2189
|
+
--gog-tooltip-shadow: var(--gog-panel-shadow);
|
|
2190
|
+
--gog-tooltip-arrow-size: 5px;
|
|
2191
|
+
/* Space kept between the trigger and the bubble. Read by the directive itself (not just
|
|
2192
|
+
CSS) to feed the placement math — see `readPxToken` in `tooltip.directive.ts`. */
|
|
2193
|
+
--gog-tooltip-gap: var(--gog-space-8);
|
|
2194
|
+
--gog-tooltip-transition-duration: var(--gog-duration-fast);
|
|
2195
|
+
}
|
|
2196
|
+
|
|
2197
|
+
/*
|
|
2198
|
+
* ── color-mix(), and why it is quarantined here ─────────────────────────────────
|
|
2199
|
+
*
|
|
2200
|
+
* Every token above has a flat value that works in any browser. The richer, mixed value lives
|
|
2201
|
+
* in this block, which a browser without `color-mix()` skips entirely.
|
|
2202
|
+
*
|
|
2203
|
+
* **The usual two-declaration fallback does not work for custom properties, and that is the
|
|
2204
|
+
* whole reason this block exists.** A custom property accepts almost any token stream at parse
|
|
2205
|
+
* time — it is only validated when it is *substituted* — so writing
|
|
2206
|
+
*
|
|
2207
|
+
* --x: var(--gog-hover-color);
|
|
2208
|
+
* --x: color-mix(in srgb, …);
|
|
2209
|
+
*
|
|
2210
|
+
* leaves the second declaration winning even where `color-mix()` means nothing, and `var(--x)`
|
|
2211
|
+
* then resolves to nothing at all. Measured in Chrome (2026-08-30): an element styled that way
|
|
2212
|
+
* with an unsupported function computed `background: rgba(0, 0, 0, 0)` — transparent, not the
|
|
2213
|
+
* earlier value. That is the reported "colours are wrong in Samsung Internet / Firefox": the
|
|
2214
|
+
* declarations were not falling back, they were vanishing.
|
|
2215
|
+
*
|
|
2216
|
+
* `@supports` is the only mechanism that gates a custom property by feature support, because it
|
|
2217
|
+
* is evaluated at parse time rather than at substitution time.
|
|
2218
|
+
*
|
|
2219
|
+
* `color-mix()` shipped in Chrome 111, Firefox 113, Safari 16.2 and Samsung Internet 22.
|
|
2220
|
+
*
|
|
2221
|
+
* **That is not below the support floor — it overlaps it.** Angular 21 supports
|
|
2222
|
+
* `baseline widely available on 2025-10-20`, whose minimums are Chrome 111, Firefox 112 and
|
|
2223
|
+
* Safari 16.4. Firefox 112 is inside that window and has no `color-mix()`, so these fallbacks
|
|
2224
|
+
* are load-bearing for a browser the framework itself supports, not a courtesy to ancient ones.
|
|
2225
|
+
* Below the floor entirely (Samsung Internet on an older Android, which Angular's list does not
|
|
2226
|
+
* mention at all) the library still renders: flat palette colours, less depth, every surface
|
|
2227
|
+
* legible and every focus ring visible.
|
|
2228
|
+
*
|
|
2229
|
+
* The project deliberately declares no `browserslist` — Angular's baseline is the policy, and
|
|
2230
|
+
* stating a lower one only produced "unsupported browsers" warnings on every build.
|
|
2231
|
+
*/
|
|
2232
|
+
@supports (color: color-mix(in srgb, red 50%, blue)) {
|
|
2233
|
+
:root,
|
|
2234
|
+
[data-theme] {
|
|
2235
|
+
--gog-accordion-hover-bg: color-mix(in srgb, var(--gog-accent-dim) 10%, transparent);
|
|
2236
|
+
--gog-accordion-hover-ring: color-mix(in srgb, var(--gog-accent-color) 30%, transparent);
|
|
2237
|
+
--gog-accordion-body-bg: color-mix(in srgb, black 6%, transparent);
|
|
2238
|
+
--gog-button-primary-hover-shadow: 0 0 16px
|
|
2239
|
+
color-mix(in srgb, var(--gog-accent-bright) 45%, transparent);
|
|
2240
|
+
--gog-button-ghost-hover-bg: color-mix(in srgb, var(--gog-accent-color) 12%, transparent);
|
|
2241
|
+
/* The table's header labels, one step off the raw accent and toward the page's ink. The
|
|
2242
|
+
accent alone is text on a tinted strip (`--gog-table-header-bg` is `--gog-hover-color`), and
|
|
2243
|
+
it read 4.15:1 in `light` and 4.32:1 in `one-light` — the only two themes it failed, and
|
|
2244
|
+
both by a margin small enough that a per-theme patch would have been the tempting fix. This
|
|
2245
|
+
is the general one: 20% of the ink lifts every theme (worst is now one-light at 5.09:1) and
|
|
2246
|
+
keeps the accent identity the header is drawn in. Flat fallback above stays the raw accent,
|
|
2247
|
+
which is what a browser without `color-mix()` has always shown. */
|
|
2248
|
+
--gog-table-accent-color: color-mix(
|
|
2249
|
+
in srgb,
|
|
2250
|
+
var(--gog-accent-color) 80%,
|
|
2251
|
+
var(--gog-text-color)
|
|
2252
|
+
);
|
|
2253
|
+
/* Every other pressable surface, one rule: 20% of the same ingredient its own hover mixes at
|
|
2254
|
+
10-12%, so the press is a clear step past the hover without becoming a fill. 20 rather than
|
|
2255
|
+
a rounder 25 is measured, not chosen: `check:contrast` resolves these washes over the
|
|
2256
|
+
surface each one actually sits on, and 21% puts one-dark's mid-grey text under 4.5:1 on the
|
|
2257
|
+
tab, accordion and button-toggle presses. The accordion mixes `--gog-accent-dim` because
|
|
2258
|
+
its hover does — its header sits on a strip where a full-accent wash was too loud
|
|
2259
|
+
(21.7.1). */
|
|
2260
|
+
--gog-accordion-press-bg: color-mix(in srgb, var(--gog-accent-dim) 20%, transparent);
|
|
2261
|
+
--gog-autocomplete-option-press-bg: color-mix(
|
|
2262
|
+
in srgb,
|
|
2263
|
+
var(--gog-accent-color) 20%,
|
|
2264
|
+
transparent
|
|
2265
|
+
);
|
|
2266
|
+
--gog-button-toggle-press-bg: color-mix(in srgb, var(--gog-accent-color) 20%, transparent);
|
|
2267
|
+
--gog-chip-press-bg: color-mix(in srgb, var(--gog-accent-color) 20%, transparent);
|
|
2268
|
+
--gog-menu-item-press-bg: color-mix(in srgb, var(--gog-accent-color) 20%, transparent);
|
|
2269
|
+
--gog-multiselect-option-press-bg: color-mix(in srgb, var(--gog-accent-color) 20%, transparent);
|
|
2270
|
+
--gog-select-option-press-bg: color-mix(in srgb, var(--gog-accent-color) 20%, transparent);
|
|
2271
|
+
--gog-tabs-press-bg: color-mix(in srgb, var(--gog-accent-color) 20%, transparent);
|
|
2272
|
+
|
|
2273
|
+
/* Button severity — see the block of the same name above for what each ingredient is and
|
|
2274
|
+
why the ink mix is 50%. Four severities, one recipe each, so a new status colour would
|
|
2275
|
+
need four lines rather than a design decision. */
|
|
2276
|
+
--gog-button-success-fill-hover: color-mix(
|
|
2277
|
+
in srgb,
|
|
2278
|
+
var(--gog-success-color) 88%,
|
|
2279
|
+
var(--gog-success-shade)
|
|
2280
|
+
);
|
|
2281
|
+
--gog-button-success-fill-press: color-mix(
|
|
2282
|
+
in srgb,
|
|
2283
|
+
var(--gog-success-color) 76%,
|
|
2284
|
+
var(--gog-success-shade)
|
|
2285
|
+
);
|
|
2286
|
+
--gog-button-success-ink: color-mix(
|
|
2287
|
+
in srgb,
|
|
2288
|
+
var(--gog-success-color) 50%,
|
|
2289
|
+
var(--gog-text-color)
|
|
2290
|
+
);
|
|
2291
|
+
--gog-button-success-wash: color-mix(in srgb, var(--gog-success-color) 12%, transparent);
|
|
2292
|
+
--gog-button-danger-fill-hover: color-mix(
|
|
2293
|
+
in srgb,
|
|
2294
|
+
var(--gog-danger-color) 88%,
|
|
2295
|
+
var(--gog-danger-shade)
|
|
2296
|
+
);
|
|
2297
|
+
--gog-button-danger-fill-press: color-mix(
|
|
2298
|
+
in srgb,
|
|
2299
|
+
var(--gog-danger-color) 76%,
|
|
2300
|
+
var(--gog-danger-shade)
|
|
2301
|
+
);
|
|
2302
|
+
--gog-button-danger-ink: color-mix(in srgb, var(--gog-danger-color) 50%, var(--gog-text-color));
|
|
2303
|
+
--gog-button-danger-wash: color-mix(in srgb, var(--gog-danger-color) 12%, transparent);
|
|
2304
|
+
--gog-button-warning-fill-hover: color-mix(
|
|
2305
|
+
in srgb,
|
|
2306
|
+
var(--gog-warning-color) 88%,
|
|
2307
|
+
var(--gog-warning-shade)
|
|
2308
|
+
);
|
|
2309
|
+
--gog-button-warning-fill-press: color-mix(
|
|
2310
|
+
in srgb,
|
|
2311
|
+
var(--gog-warning-color) 76%,
|
|
2312
|
+
var(--gog-warning-shade)
|
|
2313
|
+
);
|
|
2314
|
+
--gog-button-warning-ink: color-mix(
|
|
2315
|
+
in srgb,
|
|
2316
|
+
var(--gog-warning-color) 50%,
|
|
2317
|
+
var(--gog-text-color)
|
|
2318
|
+
);
|
|
2319
|
+
--gog-button-warning-wash: color-mix(in srgb, var(--gog-warning-color) 12%, transparent);
|
|
2320
|
+
--gog-button-info-fill-hover: color-mix(
|
|
2321
|
+
in srgb,
|
|
2322
|
+
var(--gog-info-color) 88%,
|
|
2323
|
+
var(--gog-info-shade)
|
|
2324
|
+
);
|
|
2325
|
+
--gog-button-info-fill-press: color-mix(
|
|
2326
|
+
in srgb,
|
|
2327
|
+
var(--gog-info-color) 76%,
|
|
2328
|
+
var(--gog-info-shade)
|
|
2329
|
+
);
|
|
2330
|
+
--gog-button-info-ink: color-mix(in srgb, var(--gog-info-color) 50%, var(--gog-text-color));
|
|
2331
|
+
--gog-button-info-wash: color-mix(in srgb, var(--gog-info-color) 12%, transparent);
|
|
2332
|
+
--gog-calendar-range-bg: color-mix(in srgb, var(--gog-accent-color) 16%, transparent);
|
|
2333
|
+
--gog-card-filled-bg: color-mix(in srgb, var(--gog-accent-dim) 8%, var(--gog-surface-color));
|
|
2334
|
+
--gog-card-hover-border-color: color-mix(in srgb, var(--gog-accent-color) 45%, transparent);
|
|
2335
|
+
--gog-checkbox-focus-ring: color-mix(in srgb, var(--gog-accent-color) 25%, transparent);
|
|
2336
|
+
--gog-radio-focus-ring: color-mix(in srgb, var(--gog-accent-color) 25%, transparent);
|
|
2337
|
+
--gog-chip-bg: color-mix(in srgb, var(--gog-surface-color) 88%, var(--gog-hover-color));
|
|
2338
|
+
--gog-chip-hover-bg: color-mix(in srgb, var(--gog-hover-color) 45%, var(--gog-surface-color));
|
|
2339
|
+
--gog-dialog-close-hover-bg: color-mix(in srgb, var(--gog-hover-color) 70%, transparent);
|
|
2340
|
+
--gog-autocomplete-option-hover-bg: color-mix(
|
|
2341
|
+
in srgb,
|
|
2342
|
+
var(--gog-accent-color) 10%,
|
|
2343
|
+
transparent
|
|
2344
|
+
);
|
|
2345
|
+
--gog-autocomplete-option-selected-bg: color-mix(
|
|
2346
|
+
in srgb,
|
|
2347
|
+
var(--gog-accent-color) 16%,
|
|
2348
|
+
transparent
|
|
2349
|
+
);
|
|
2350
|
+
--gog-input-focus-ring: color-mix(in srgb, var(--gog-accent-color) 25%, transparent);
|
|
2351
|
+
--gog-input-spin-hover-bg: color-mix(
|
|
2352
|
+
in srgb,
|
|
2353
|
+
var(--gog-input-icon-hover-color) 12%,
|
|
2354
|
+
transparent
|
|
2355
|
+
);
|
|
2356
|
+
--gog-multiselect-focus-ring: color-mix(in srgb, var(--gog-accent-color) 25%, transparent);
|
|
2357
|
+
--gog-multiselect-option-hover-bg: color-mix(in srgb, var(--gog-accent-color) 10%, transparent);
|
|
2358
|
+
--gog-panel-filled-bg: color-mix(in srgb, var(--gog-accent-dim) 8%, var(--gog-surface-color));
|
|
2359
|
+
--gog-panel-toggle-hover-bg: color-mix(in srgb, var(--gog-hover-color) 70%, transparent);
|
|
2360
|
+
--gog-progressbar-track-base-bg: color-mix(
|
|
2361
|
+
in srgb,
|
|
2362
|
+
var(--gog-text-color) 20%,
|
|
2363
|
+
var(--gog-border-color)
|
|
2364
|
+
);
|
|
2365
|
+
--gog-progressbar-stripe-color: color-mix(in srgb, var(--gog-surface-color) 45%, transparent);
|
|
2366
|
+
--gog-progressbar-accent-buffer-bg: color-mix(
|
|
2367
|
+
in srgb,
|
|
2368
|
+
var(--gog-accent-color) 35%,
|
|
2369
|
+
transparent
|
|
2370
|
+
);
|
|
2371
|
+
--gog-progressbar-success-buffer-bg: color-mix(
|
|
2372
|
+
in srgb,
|
|
2373
|
+
var(--gog-success-color) 35%,
|
|
2374
|
+
transparent
|
|
2375
|
+
);
|
|
2376
|
+
--gog-progressbar-danger-buffer-bg: color-mix(
|
|
2377
|
+
in srgb,
|
|
2378
|
+
var(--gog-danger-color) 35%,
|
|
2379
|
+
transparent
|
|
2380
|
+
);
|
|
2381
|
+
--gog-progressbar-warning-buffer-bg: color-mix(
|
|
2382
|
+
in srgb,
|
|
2383
|
+
var(--gog-warning-color) 35%,
|
|
2384
|
+
transparent
|
|
2385
|
+
);
|
|
2386
|
+
--gog-progressbar-info-buffer-bg: color-mix(in srgb, var(--gog-info-color) 35%, transparent);
|
|
2387
|
+
--gog-select-focus-ring: color-mix(in srgb, var(--gog-accent-color) 25%, transparent);
|
|
2388
|
+
--gog-select-option-hover-bg: color-mix(in srgb, var(--gog-accent-color) 10%, transparent);
|
|
2389
|
+
--gog-skeleton-base: color-mix(in srgb, var(--gog-border-color) 40%, var(--gog-surface-color));
|
|
2390
|
+
--gog-skeleton-shine: color-mix(in srgb, var(--gog-skeleton-base), white 35%);
|
|
2391
|
+
--gog-slider-track-bg: color-mix(in srgb, var(--gog-text-color) 30%, var(--gog-border-color));
|
|
2392
|
+
--gog-slider-thumb-shadow: color-mix(in srgb, var(--gog-accent-bright) 40%, transparent);
|
|
2393
|
+
--gog-slider-focus-ring: color-mix(in srgb, var(--gog-accent-color) 30%, transparent);
|
|
2394
|
+
--gog-toggle-track-off-bg: color-mix(in srgb, var(--gog-text-color) 18%, transparent);
|
|
2395
|
+
}
|
|
2396
|
+
}
|