@apliteni/apliteni-ui 0.92.0 → 0.94.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/README.md +5 -7
- package/guidelines/colour-and-theming.md +2 -0
- package/package.json +1 -1
- package/react/README.md +2 -2
- package/react/dist/index.d.ts +3 -3
- package/src/assets/icons.js +1 -1
- package/src/components/account-nav.js +2 -2
- package/src/components/back.js +2 -2
- package/src/components/command-palette.js +2 -2
- package/src/components/drawer.js +1 -1
- package/src/components/dropdown.js +12 -12
- package/src/components/filter-bar.js +2 -2
- package/src/components/footer.js +1 -1
- package/src/components/index.js +1 -1
- package/src/components/loading.js +1 -1
- package/src/components/shell.js +19 -19
- package/src/components/stat.js +3 -3
- package/src/components/success.js +3 -3
- package/src/components/tooltip.js +1 -1
- package/src/components/topbar.js +1 -1
- package/src/html.js +1 -1
- package/src/index.css +1 -1
- package/src/index.d.ts +1 -1
- package/src/logic/accents.js +1 -1
- package/src/logic/filter-bar.js +4 -4
- package/src/styles/back.css +3 -3
- package/src/styles/base.css +3 -3
- package/src/styles/button.css +3 -3
- package/src/styles/callout.css +2 -2
- package/src/styles/card.css +8 -8
- package/src/styles/command-palette.css +14 -14
- package/src/styles/confirm.css +7 -7
- package/src/styles/drawer.css +8 -8
- package/src/styles/dropdown.css +21 -21
- package/src/styles/feedback.css +2 -2
- package/src/styles/field-zoom.css +1 -1
- package/src/styles/file-drop.css +1 -1
- package/src/styles/filter-bar.css +6 -6
- package/src/styles/footer.css +1 -1
- package/src/styles/input.css +6 -6
- package/src/styles/layout.css +54 -57
- package/src/styles/loading.css +1 -1
- package/src/styles/motion.css +1 -1
- package/src/styles/nav.css +39 -50
- package/src/styles/pagination.css +2 -2
- package/src/styles/reduced-motion.css +2 -2
- package/src/styles/segmented.css +3 -3
- package/src/styles/stat.css +3 -3
- package/src/styles/success.css +1 -1
- package/src/styles/table.css +6 -6
- package/src/styles/tap-zone.css +1 -1
- package/src/styles/tooltip.css +3 -3
- package/src/styles/topbar.css +8 -8
- package/src/tokens/accents.css +1 -1
- package/src/tokens/tokens.css +25 -25
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
declared on the one adjacency the kit can see. `.rx-pager` carried a bare
|
|
108
108
|
`margin-top: 16px` for this, which is --space-4; the number moves to the scale
|
|
109
109
|
with it rather than travelling as a literal.
|
|
110
|
-
why: docs/
|
|
110
|
+
why: docs/foundations.md#spacing-and-rhythm */
|
|
111
111
|
.ui-table + .ui-pager { margin-top: var(--space-4); }
|
|
112
112
|
|
|
113
113
|
/* A step given an `href` is an anchor, and a host stylesheet's `a:link` is
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
`.ui-nav .ui-nav__item` in nav.css. Storybook ships no `a:link`, so the "Pages
|
|
119
119
|
as links" story cannot show it — which is why the rule is stated rather than
|
|
120
120
|
discovered.
|
|
121
|
-
why: docs/
|
|
121
|
+
why: docs/components.md#pagination */
|
|
122
122
|
a.ui-pager__step,
|
|
123
123
|
a.ui-pager__page { color: var(--text); }
|
|
124
124
|
a.ui-pager__step:hover,
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* `iteration-count: 1` lets one-shot animations settle on their final frame — a
|
|
7
7
|
* checkmark stays drawn — instead of snapping back to the start.
|
|
8
8
|
*
|
|
9
|
-
* why: docs/
|
|
10
|
-
* why: docs/
|
|
9
|
+
* why: docs/foundations.md#reduced-motion-travels-with-the-stylesheet
|
|
10
|
+
* why: docs/foundations.md#motion */
|
|
11
11
|
|
|
12
12
|
@media (prefers-reduced-motion: reduce) {
|
|
13
13
|
html { scroll-behavior: auto !important; }
|
package/src/styles/segmented.css
CHANGED
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
* 2px stroke, in --signal-contrast — the circle wears the accent's dark ramp in
|
|
76
76
|
* both themes, so its ink is the one for a fill, not the --accent-contrast that
|
|
77
77
|
* pairs with --accent-strong. Held by stories/accent-mark.test.js.
|
|
78
|
-
* why: docs/
|
|
78
|
+
* why: docs/components.md#page-furniture, and #472 for the ring that was rejected. */
|
|
79
79
|
.ui-accent-picker button.is-active::after {
|
|
80
80
|
content: "";
|
|
81
81
|
position: absolute;
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
|
|
93
93
|
/* Underline tabs wrap for the reason the pills above do — #435 — and draw no
|
|
94
94
|
rule of their own: the chosen tab carries the selection. #527, #545
|
|
95
|
-
why: docs/
|
|
95
|
+
why: docs/components.md#the-chosen-tab-in-an-underline-strip */
|
|
96
96
|
.ui-seg--underline { flex-wrap: wrap; overflow: visible; row-gap: var(--space-1); align-self: stretch; justify-self: stretch; background: transparent; --ring-gap: inherit; border-radius: 0; padding: var(--space-1); max-width: 100%; }
|
|
97
97
|
/* `anywhere` is the half `break-word` cannot do: it lowers the tab's min-content
|
|
98
98
|
width, so one unbreakable word narrows rather than widening the page. The
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
/* The chosen tab is its label and one bar under it: no plate, no hairline, no
|
|
107
107
|
upright rail — those read as a list-row grip. `outline: 0` cancels the accent
|
|
108
108
|
outline the pill rule gives every chosen button, which is #544's second mark.
|
|
109
|
-
#527 r31. why: docs/
|
|
109
|
+
#527 r31. why: docs/components.md#the-chosen-tab-in-an-underline-strip */
|
|
110
110
|
.ui-seg--underline button.is-active,
|
|
111
111
|
.ui-seg--underline button[aria-pressed="true"] {
|
|
112
112
|
background: none;
|
package/src/styles/stat.css
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* .ui-stats--tiles one card per figure — the default
|
|
4
4
|
* .ui-stats--band one card, figures divided by space
|
|
5
5
|
* .ui-stats--open no surface; a rule over each figure
|
|
6
|
-
* why: docs/
|
|
6
|
+
* why: docs/components.md#stat-bands
|
|
7
7
|
* ========================================================================== */
|
|
8
8
|
|
|
9
9
|
/* The band lays out from the width of its own box, not the window's: a band in
|
|
@@ -76,7 +76,7 @@ dd.ui-stat__caption { margin-top: var(--space-2); }
|
|
|
76
76
|
font-weight: var(--weight-medium);
|
|
77
77
|
line-height: var(--leading-snug);
|
|
78
78
|
}
|
|
79
|
-
.ui-stat__delta svg { width: 14px; height: 14px; flex: none; stroke-width: 2.7; } /* 2.7 of a 24 box drawn at 14px = 1.58 CSS px. docs/
|
|
79
|
+
.ui-stat__delta svg { width: 14px; height: 14px; flex: none; stroke-width: 2.7; } /* 2.7 of a 24 box drawn at 14px = 1.58 CSS px. docs/foundations.md#icons-and-glyphs */
|
|
80
80
|
.ui-stat__change { font-variant-numeric: tabular-nums; white-space: nowrap; flex: none; }
|
|
81
81
|
.ui-stat__basis { color: var(--text); font-weight: var(--weight-normal); }
|
|
82
82
|
|
|
@@ -129,7 +129,7 @@ dd.ui-stat__caption { contain: inline-size; }
|
|
|
129
129
|
count stacks. The widths are where four and three tiles of `€ 6,459,401`
|
|
130
130
|
stop fitting, and the open band's larger value moves them out; a longer
|
|
131
131
|
figure still wraps rather than overlaps.
|
|
132
|
-
why: docs/
|
|
132
|
+
why: docs/components.md#stat-bands */
|
|
133
133
|
@container (28rem < width <= 56rem) {
|
|
134
134
|
.ui-stats:not(.ui-stats--open) .ui-stats__list:has(> .ui-stat:nth-child(4):last-child) > .ui-stat { flex-basis: 34%; }
|
|
135
135
|
}
|
package/src/styles/success.css
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
border-radius: 20px;
|
|
19
19
|
background: var(--bg-elevated); --ring-gap: var(--bg-elevated); /* Elevated surface for the confirmation and its actions. */
|
|
20
20
|
/* The floating treatment, like every other surface on that step.
|
|
21
|
-
why: docs/
|
|
21
|
+
why: docs/foundations.md#elevation */
|
|
22
22
|
border: 1px solid var(--float-edge);
|
|
23
23
|
box-shadow: inset 0 0 0 1px var(--elev-edge, var(--float-edge-inner)), var(--elev-drop);
|
|
24
24
|
isolation: isolate;
|
package/src/styles/table.css
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
/* The last row of the last section, so a final body row keeps its separator when a
|
|
34
34
|
* footer follows it. `tr:last-child td` closed the wrong edge: it stripped the border
|
|
35
35
|
* from the last row of every section, leaving items and totals with nothing between
|
|
36
|
-
* them. why: docs/
|
|
36
|
+
* them. why: docs/foundations.md#spacing-and-rhythm */
|
|
37
37
|
.ui-table > :last-child > tr:last-child > :is(th, td) { border-bottom: 0; }
|
|
38
38
|
/* Totals open with the 2px rule the zebra header already uses, so a reader can see
|
|
39
39
|
* where items end and totals begin; five identical hairlines told them nothing.
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
* --dense --space-3 across, --space-2 down — one step in from the base table
|
|
78
78
|
* --zebra legacy spacing and 2px header rule; the base-surface rule below removes stripes
|
|
79
79
|
* Cell helpers: .ui-table__num (right, tabular), .ui-table__code.
|
|
80
|
-
* why: docs/
|
|
80
|
+
* why: docs/foundations.md#spacing-and-rhythm
|
|
81
81
|
* held by: stories/table-rhythm.test.js */
|
|
82
82
|
.ui-table--dense th { padding: 0 var(--space-3) var(--space-2); }
|
|
83
83
|
.ui-table--dense td,
|
|
@@ -187,7 +187,7 @@
|
|
|
187
187
|
/* The end-cell inset above gives a row's highlight room; the bleed is what stops the grid
|
|
188
188
|
paying for it. The table hangs out by the same --space-3, into the card's 20-24px
|
|
189
189
|
padding and never past it, so the columns start on the card's own text edge and the
|
|
190
|
-
scroll region stays empty at rest. why: docs/
|
|
190
|
+
scroll region stays empty at rest. why: docs/foundations.md#spacing-and-rhythm */
|
|
191
191
|
.ui-card > :where(.ui-table--dense, .ui-table--zebra) {
|
|
192
192
|
width: calc(100% + 2 * var(--space-3));
|
|
193
193
|
margin-inline: calc(-1 * var(--space-3));
|
|
@@ -212,7 +212,7 @@
|
|
|
212
212
|
It had no room of its own to draw in — the padding above is horizontal — which is the
|
|
213
213
|
second reason the band is an outline: it is painted over the rows, in the cell padding
|
|
214
214
|
of the first and last, rather than under them. #531
|
|
215
|
-
why: docs/
|
|
215
|
+
why: docs/foundations.md#the-focus-ring */
|
|
216
216
|
.ui-table-scroll:focus-visible { outline: var(--ring-scroll); outline-offset: var(--ring-scroll-offset); }
|
|
217
217
|
.ui-table--sticky { border-collapse: separate; border-spacing: 0; }
|
|
218
218
|
.ui-table--sticky thead th { position: sticky; top: 0; z-index: var(--z-sticky); background: var(--table-bg); --ring-gap: var(--table-bg); padding-top: var(--space-2); }
|
|
@@ -249,8 +249,8 @@ a.ui-identity:hover { text-decoration: underline; }
|
|
|
249
249
|
* __title reach a cell with two classes, and one class would lose to them and leave
|
|
250
250
|
* `nowrap` on a paragraph.
|
|
251
251
|
*
|
|
252
|
-
* The consumer's half — the roles a changed `display` drops — is in
|
|
253
|
-
* why: docs/
|
|
252
|
+
* The consumer's half — the roles a changed `display` drops — is in docs/components.md.
|
|
253
|
+
* why: docs/components.md#dense-financial-tables
|
|
254
254
|
* held by: src/styles/table-stack.test.js (layout), stories/table-stack.test.js (roles)
|
|
255
255
|
* ========================================================================== */
|
|
256
256
|
|
package/src/styles/tap-zone.css
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* Read LAST, after every component sheet — see src/index.css — because each
|
|
9
9
|
* opening overrides a gap one of them already set.
|
|
10
10
|
*
|
|
11
|
-
* why: docs/
|
|
11
|
+
* why: docs/foundations.md#a-tap-reaches-the-floor-below-the-phone-step
|
|
12
12
|
* Held by stories/tap-zone.test.js, measured in a browser at 390.
|
|
13
13
|
*/
|
|
14
14
|
|
package/src/styles/tooltip.css
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* .ui-tip the readout — __label, __value, __detail
|
|
6
6
|
* The readout is an overlay in every state. It is absolutely placed inside its
|
|
7
7
|
* host, so showing it, filling it and moving it change the size of nothing.
|
|
8
|
-
* why: docs/
|
|
8
|
+
* why: docs/components.md#the-hover-readout
|
|
9
9
|
* ========================================================================== */
|
|
10
10
|
|
|
11
11
|
.ui-tip-host { position: relative; }
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
/* The two-step edge and the drop, through the level's own names: in DARK that is
|
|
30
30
|
--border-strong outside and --border one pixel inside it, then the drop; in LIGHT
|
|
31
31
|
both lines are transparent and the drop carries the whole separation.
|
|
32
|
-
why: docs/
|
|
32
|
+
why: docs/foundations.md#elevation */
|
|
33
33
|
border: 1px solid var(--float-edge);
|
|
34
34
|
box-shadow: inset 0 0 0 1px var(--elev-edge, var(--float-edge-inner)), var(--elev-drop);
|
|
35
35
|
border-radius: var(--radius-sm);
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
|
|
52
52
|
/* The readout uses the floating panel surface in both themes. Its edge
|
|
53
53
|
and shadow separate it from the card underneath.
|
|
54
|
-
why: docs/
|
|
54
|
+
why: docs/foundations.md#elevation */
|
|
55
55
|
|
|
56
56
|
/* Below the mark: the wiring's flip when above would be clipped, or the
|
|
57
57
|
author's own choice. */
|
package/src/styles/topbar.css
CHANGED
|
@@ -132,7 +132,7 @@
|
|
|
132
132
|
/* The two-step edge and the drop, through the level's own names: in DARK that is
|
|
133
133
|
--border-strong outside and --border one pixel inside it, then the drop; in LIGHT
|
|
134
134
|
both lines are transparent and the drop carries the whole separation.
|
|
135
|
-
why: docs/
|
|
135
|
+
why: docs/foundations.md#elevation */
|
|
136
136
|
border: 1px solid var(--float-edge);
|
|
137
137
|
box-shadow: inset 0 0 0 1px var(--elev-edge, var(--float-edge-inner)), var(--elev-drop);
|
|
138
138
|
border-radius: 16px;
|
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
visibility: hidden;
|
|
142
142
|
/* Drawn for the whole of the fade out, so the rows do not vanish mid-fade — and a box
|
|
143
143
|
that is drawn is a box that is hit. The open rule takes this back.
|
|
144
|
-
why: docs/
|
|
144
|
+
why: docs/components.md#the-dropdown-panel */
|
|
145
145
|
pointer-events: none;
|
|
146
146
|
transform: translateY(-6px);
|
|
147
147
|
/* Named properties, not the bare shorthand: `transition: 0.18s` is `all`, and `all`
|
|
@@ -159,7 +159,7 @@
|
|
|
159
159
|
open transition, because the frame the open class lands is the frame the wiring moves
|
|
160
160
|
focus onto a row in and a browser will not focus inside a hidden box; and
|
|
161
161
|
`pointer-events` back on, because the closed rule turned it off.
|
|
162
|
-
why: docs/
|
|
162
|
+
why: docs/components.md#the-dropdown-panel */
|
|
163
163
|
.vsw.open .vsw__menu {
|
|
164
164
|
opacity: 1;
|
|
165
165
|
visibility: visible;
|
|
@@ -189,7 +189,7 @@
|
|
|
189
189
|
}
|
|
190
190
|
/* Menu rows use the reading surface and an edge on hover — see
|
|
191
191
|
src/styles/dropdown.css:176 `.ui-dropdown__item:hover`.
|
|
192
|
-
why: docs/
|
|
192
|
+
why: docs/foundations.md#elevation */
|
|
193
193
|
.vopt:hover { outline: 1px solid var(--control-edge); outline-offset: -1px; background: var(--surface); /* ring-gap: inherit — control paint; its focus indicator uses the containing surface. */ }
|
|
194
194
|
/* The row is a keyboard stop: src/components/dropdown.js:804
|
|
195
195
|
`items[next < 0 ? 0 : next]?.focus()` moves focus onto a `[data-dd-item]` with
|
|
@@ -210,7 +210,7 @@
|
|
|
210
210
|
}
|
|
211
211
|
.vbadge.live { color: var(--chip-success-ink); background: var(--chip-success-fill); /* ring-gap: inherit — decorative or text-only surface has no nested focus target. */ }
|
|
212
212
|
.vbadge.arch { /* muted-ink: state — archived version */ color: var(--muted); background: var(--surface); /* ring-gap: inherit — decorative or text-only surface has no nested focus target. */ }
|
|
213
|
-
/* The phone step — the same one the rail folds at: docs/
|
|
213
|
+
/* The phone step — the same one the rail folds at: docs/foundations.md#breakpoints.
|
|
214
214
|
The switcher keeps its glyph and drops its label.
|
|
215
215
|
The menu hangs the other way here. Anchored by its left edge it opened
|
|
216
216
|
rightwards off a band that is as wide as the page, and a CLOSED menu is still
|
|
@@ -231,7 +231,7 @@
|
|
|
231
231
|
area. Packed to --space-2 the band needs 352 of the 362 it has there, so the
|
|
232
232
|
avatar is whole with the band's own gutter beside it. 320 is still short of the
|
|
233
233
|
room these controls want, which stays #558.
|
|
234
|
-
why: docs/
|
|
234
|
+
why: docs/foundations.md#breakpoints */
|
|
235
235
|
@media (max-width: 560px) {
|
|
236
236
|
.topbar__in { gap: var(--space-2); }
|
|
237
237
|
}
|
|
@@ -265,14 +265,14 @@
|
|
|
265
265
|
/* The two-step edge and the drop, through the level's own names: in DARK that is
|
|
266
266
|
--border-strong outside and --border one pixel inside it, then the drop; in LIGHT
|
|
267
267
|
both lines are transparent and the drop carries the whole separation.
|
|
268
|
-
why: docs/
|
|
268
|
+
why: docs/foundations.md#elevation */
|
|
269
269
|
border: 1px solid var(--float-edge);
|
|
270
270
|
box-shadow: inset 0 0 0 1px var(--elev-edge, var(--float-edge-inner)), var(--elev-drop);
|
|
271
271
|
border-radius: 14px;
|
|
272
272
|
/* No clip. The rows reach this panel's edges, and the ring a focused row draws reaches
|
|
273
273
|
3px past itself; `overflow: hidden` here cut that down to the one pixel of border it
|
|
274
274
|
had, and the reader met two accent bars instead of a ring. The ring crosses the edge
|
|
275
|
-
now. #519 why: docs/
|
|
275
|
+
now. #519 why: docs/components.md#a-menu-panel-does-not-cut-off-its-rows-ring */
|
|
276
276
|
opacity: 0;
|
|
277
277
|
visibility: hidden;
|
|
278
278
|
pointer-events: none; /* see .vsw__menu above */
|
package/src/tokens/accents.css
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* property to one half of a pair and not the other is what breaks that, and
|
|
26
26
|
* stories/accent-without-theme.test.js is the gate that says so.
|
|
27
27
|
*
|
|
28
|
-
* why: docs/
|
|
28
|
+
* why: docs/foundations.md#the-focus-ring */
|
|
29
29
|
|
|
30
30
|
/* ---- Phoenix — ember / rising fire (the strategy's namesake) ------------- */
|
|
31
31
|
:root[data-accent="phoenix"],
|
package/src/tokens/tokens.css
CHANGED
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
/* -- Measure ------------------------------------------------------------
|
|
39
39
|
* --container is the page, gutter to gutter; --measure is the reading column
|
|
40
40
|
* INSIDE a track, beside a sidebar. Different axes, never interchangeable.
|
|
41
|
-
* why: docs/
|
|
41
|
+
* why: docs/foundations.md#widths */
|
|
42
42
|
--container: 1120px;
|
|
43
43
|
--measure: 860px;
|
|
44
44
|
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
* smears, worst of all in Cyrillic, which is where the kit spends most of its
|
|
51
51
|
* pixels. IBM Plex Sans is humanist and narrower, and its Cyrillic was drawn
|
|
52
52
|
* by the same team as its Latin.
|
|
53
|
-
* why: docs/
|
|
53
|
+
* why: docs/foundations.md#typefaces */
|
|
54
54
|
--font-display: 'Poppins', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
55
55
|
--font-sans: 'IBM Plex Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
56
56
|
--font-mono: ui-monospace, 'SF Mono', Menlo, Consolas, monospace;
|
|
@@ -136,7 +136,7 @@
|
|
|
136
136
|
/* The elevation ladder, bottom to top. A surface says how high it is with its step
|
|
137
137
|
and, IN DARK, with the hairline around it; --muted caps how far the ladder can go.
|
|
138
138
|
Nothing casts in dark below the floating step, and the floating step adds
|
|
139
|
-
--elev-drop under its inner line. why: docs/
|
|
139
|
+
--elev-drop under its inner line. why: docs/foundations.md#elevation */
|
|
140
140
|
--bg: #0e0d14;
|
|
141
141
|
--table-bg: var(--bg);
|
|
142
142
|
/* A dark table is flush with the page, so the reading surface an inline code chip has
|
|
@@ -163,20 +163,20 @@
|
|
|
163
163
|
/* WHICH EDGE EACH LEVEL DRAWS. One name per level, so a sheet never has to ask
|
|
164
164
|
which theme it is in. Dark answers all four with the hairline, because a drop
|
|
165
165
|
on a near-black page reaches 1.20 at its core and has nowhere else to go —
|
|
166
|
-
light answers them with the drop instead. why: docs/
|
|
166
|
+
light answers them with the drop instead. why: docs/foundations.md#elevation */
|
|
167
167
|
--card-edge: var(--border); /* a card */
|
|
168
168
|
--rail-edge: var(--border); /* the shell's rail */
|
|
169
169
|
--float-edge: var(--border-strong); /* a floating surface, outer line */
|
|
170
170
|
--float-edge-inner: var(--border); /* a floating surface, inner line */
|
|
171
171
|
|
|
172
|
-
/* Fields use the card surface and an edge in both themes. why: docs/
|
|
172
|
+
/* Fields use the card surface and an edge in both themes. why: docs/foundations.md#elevation */
|
|
173
173
|
--field-bg: var(--surface);
|
|
174
174
|
--field-edge: var(--border);
|
|
175
175
|
--field-edge-hover: var(--border-strong);
|
|
176
176
|
--control-edge: var(--border);
|
|
177
177
|
|
|
178
178
|
/* How much of its own colour a tinted card mixes in. Dark mixes upward off a mid-grey
|
|
179
|
-
card, so it can afford this much. why: docs/
|
|
179
|
+
card, so it can afford this much. why: docs/foundations.md#elevation */
|
|
180
180
|
--card-tint: 9%;
|
|
181
181
|
|
|
182
182
|
--text: #e9e7f0;
|
|
@@ -184,31 +184,31 @@
|
|
|
184
184
|
--dim: #c6c2d6;
|
|
185
185
|
/* Picked against the TOP of the ladder above, not against the page: #948fa8 cleared the
|
|
186
186
|
two floating steps by hundredths. Same violet-grey, fourteen steps up every channel.
|
|
187
|
-
why: docs/
|
|
187
|
+
why: docs/foundations.md#elevation */
|
|
188
188
|
--muted: #a29db6;
|
|
189
189
|
|
|
190
190
|
/* The paint of a control that is off. NOT an opacity: `opacity` is a group property,
|
|
191
191
|
so it fades label and box toward the ground TOGETHER — a disabled primary button
|
|
192
192
|
measured 1.48:1 that way. These three are aliases that composite predictably, the
|
|
193
193
|
ink read on the surface beside it. Held by guidelines/accessibility-floor.test.js.
|
|
194
|
-
why: docs/
|
|
194
|
+
why: docs/foundations.md#colour-and-contrast */
|
|
195
195
|
--disabled-ink: var(--muted);
|
|
196
196
|
--disabled-surface: var(--surface);
|
|
197
197
|
/* One rung below the hairline, so an off box is not the live box with quieter words
|
|
198
198
|
in it: dark answered both with --border. 1.16:1 on the card against the live
|
|
199
199
|
1.27:1, and as far down as the headroom goes. #564
|
|
200
|
-
why: docs/
|
|
200
|
+
why: docs/foundations.md#colour-and-contrast */
|
|
201
201
|
--disabled-border: var(--surface-3);
|
|
202
202
|
/* The ink of a disabled control that paints no box of its own — a ghost button. With
|
|
203
203
|
no surface beside it, it is read on whatever is behind it, so it is set to clear the
|
|
204
204
|
floor on the dullest ground there is (--surface-3). #273
|
|
205
|
-
why: docs/
|
|
205
|
+
why: docs/foundations.md#colour-and-contrast */
|
|
206
206
|
--disabled-ink-bare: #a39eb7;
|
|
207
207
|
|
|
208
208
|
/* Lifted from #9b5dff, which cleared the flat surfaces and failed on its own wash over
|
|
209
209
|
a card; the value was already in the ramp. --ring-color is var(--accent) and follows by
|
|
210
210
|
reference. Held by stories/accent-contrast.test.js. #157.
|
|
211
|
-
why: docs/
|
|
211
|
+
why: docs/foundations.md#colour-and-contrast */
|
|
212
212
|
--accent: #b479ff;
|
|
213
213
|
--accent-strong: #7c3aed; /* button bg — white text clears WCAG AA at 5.70:1 */
|
|
214
214
|
--accent-contrast: #ffffff;
|
|
@@ -216,7 +216,7 @@
|
|
|
216
216
|
/* Ink that reads on a SIGNAL colour once that colour becomes a fill — the glyph in a
|
|
217
217
|
success circle, or on a toast's status circle. One near-black ink clears all five in
|
|
218
218
|
dark; danger keeps its own token because LIGHT still needs one.
|
|
219
|
-
why: docs/
|
|
219
|
+
why: docs/foundations.md#colour-and-contrast */
|
|
220
220
|
--signal-contrast: #0c0c0c;
|
|
221
221
|
--danger-contrast: var(--signal-contrast);
|
|
222
222
|
|
|
@@ -257,13 +257,13 @@
|
|
|
257
257
|
A transparent shadow, not `none`, because these are read in a LIST. The kit's own
|
|
258
258
|
pre-0.32 pattern was `box-shadow: var(--shadow-lg), var(--ring)`, and `none` is only
|
|
259
259
|
valid alone — it makes the whole declaration invalid, which silently takes the focus
|
|
260
|
-
ring with it. `0 0 #0000` composes. why: docs/
|
|
260
|
+
ring with it. `0 0 #0000` composes. why: docs/foundations.md#elevation */
|
|
261
261
|
--shadow-sm: 0 0 #0000;
|
|
262
262
|
--shadow-md: 0 0 #0000;
|
|
263
263
|
--shadow-lg: 0 0 #0000;
|
|
264
264
|
--shadow-seg: 0 0 #0000;
|
|
265
265
|
--shadow-card: 0 0 #0000;
|
|
266
|
-
/* G2: the band carries contrast; the halo decorates it. why: docs/
|
|
266
|
+
/* G2: the band carries contrast; the halo decorates it. why: docs/foundations.md#the-focus-ring */
|
|
267
267
|
--ring-width: 2px;
|
|
268
268
|
--ring-color: var(--accent);
|
|
269
269
|
--ring-gap-width: 1px;
|
|
@@ -273,7 +273,7 @@
|
|
|
273
273
|
no halo. An OUTLINE, because an inset shadow is painted under the box's own
|
|
274
274
|
children and a table scrolled under one erases it. The gap is left unpainted, so
|
|
275
275
|
neither half reads --ring-gap and neither is recomposed per surface. Chosen by
|
|
276
|
-
Artur on #531 round r30. why: docs/
|
|
276
|
+
Artur on #531 round r30. why: docs/foundations.md#the-focus-ring */
|
|
277
277
|
--ring-scroll: var(--ring-width) solid var(--ring-color);
|
|
278
278
|
--ring-scroll-offset: calc(-1 * (var(--ring-gap-width) + var(--ring-width)));
|
|
279
279
|
|
|
@@ -289,7 +289,7 @@
|
|
|
289
289
|
nothing below could re-point it. A floating surface writes the pair itself:
|
|
290
290
|
box-shadow: inset 0 0 0 1px var(--elev-edge, var(--float-edge-inner)), var(--elev-drop);
|
|
291
291
|
Dark spends 62% / 50% of the ink and reaches 1.20 at the drop's core, having
|
|
292
|
-
nowhere to go on a near-black page. why: docs/
|
|
292
|
+
nowhere to go on a near-black page. why: docs/foundations.md#elevation */
|
|
293
293
|
--elev-drop:
|
|
294
294
|
0 14px 30px -12px color-mix(in srgb, var(--shadow-ink) 62%, transparent),
|
|
295
295
|
0 3px 9px -4px color-mix(in srgb, var(--shadow-ink) 50%, transparent);
|
|
@@ -297,7 +297,7 @@
|
|
|
297
297
|
/* The ladder's two resting rungs, which only light climbs. Transparent here and
|
|
298
298
|
not `none`, for the reason the deprecated --shadow-* tokens are: these are read
|
|
299
299
|
in a layer list, and `none` is valid only alone — it would invalidate the whole
|
|
300
|
-
declaration and take the focus ring with it. why: docs/
|
|
300
|
+
declaration and take the focus ring with it. why: docs/foundations.md#elevation */
|
|
301
301
|
--elev-rest: 0 0 #0000; /* a card */
|
|
302
302
|
--elev-rail: 0 0 #0000; /* the shell's rail, cast sideways */
|
|
303
303
|
|
|
@@ -337,7 +337,7 @@
|
|
|
337
337
|
blue than the one it replaces. Light spends its white on the surface you read
|
|
338
338
|
ON, and separates the panel that floats over it by role — its two-step edge and
|
|
339
339
|
its drop — rather than by a rung it has nothing left to pay for. See issue #448.
|
|
340
|
-
why: docs/
|
|
340
|
+
why: docs/foundations.md#elevation */
|
|
341
341
|
--bg: #f2f3f6;
|
|
342
342
|
--table-bg: #ffffff;
|
|
343
343
|
--table-code-bg: var(--bg);
|
|
@@ -356,7 +356,7 @@
|
|
|
356
356
|
the reference he supplied. A line divides two regions of ONE surface (a card's
|
|
357
357
|
rows, a table's rules, the rail's head band, the topbar); a drop says a surface
|
|
358
358
|
is HIGHER, and only a higher surface may cast one.
|
|
359
|
-
why: docs/
|
|
359
|
+
why: docs/foundations.md#elevation */
|
|
360
360
|
--card-edge: transparent;
|
|
361
361
|
--rail-edge: transparent;
|
|
362
362
|
--float-edge: transparent;
|
|
@@ -364,14 +364,14 @@
|
|
|
364
364
|
|
|
365
365
|
/* Light draws a field with its EDGE, because since #448 it has no well left to draw it
|
|
366
366
|
with: a card and a panel are both white, the sunken step falls two rungs under either,
|
|
367
|
-
and --border on it measures 1.047:1. why: docs/
|
|
367
|
+
and --border on it measures 1.047:1. why: docs/foundations.md#elevation */
|
|
368
368
|
--field-bg: var(--surface);
|
|
369
369
|
--field-edge: var(--border-strong);
|
|
370
370
|
--field-edge-hover: var(--muted);
|
|
371
371
|
--control-edge: var(--border-strong);
|
|
372
372
|
|
|
373
373
|
/* Light mixes DOWN from white, so tint costs lightness: 5% is the most a card can spend
|
|
374
|
-
and stay above the page. why: docs/
|
|
374
|
+
and stay above the page. why: docs/foundations.md#elevation */
|
|
375
375
|
--card-tint: 5%;
|
|
376
376
|
|
|
377
377
|
--text: #1a1e27;
|
|
@@ -446,7 +446,7 @@
|
|
|
446
446
|
and held in by a negative spread. None is a glow — a glow is a zero-offset layer of
|
|
447
447
|
the signal's own colour. A level with no line casts a rung that reaches on every
|
|
448
448
|
side it exposes, which is why the wide layer's offset stays under half its blur.
|
|
449
|
-
why: docs/
|
|
449
|
+
why: docs/foundations.md#elevation */
|
|
450
450
|
--elev-rest:
|
|
451
451
|
0 2px 26px -3px color-mix(in srgb, var(--shadow-ink) 9%, transparent),
|
|
452
452
|
0 1px 3px -1px color-mix(in srgb, var(--shadow-ink) 7%, transparent);
|
|
@@ -471,7 +471,7 @@
|
|
|
471
471
|
* a box that holds a LINE -> --prose-* (ch)
|
|
472
472
|
*
|
|
473
473
|
* Both are theme-invariant, so they sit outside the palette blocks.
|
|
474
|
-
* why: docs/
|
|
474
|
+
* why: docs/foundations.md#boxes-below-the-page
|
|
475
475
|
* ========================================================================== */
|
|
476
476
|
:root {
|
|
477
477
|
/* -- Panel widths -------------------------------------------------------
|
|
@@ -502,14 +502,14 @@
|
|
|
502
502
|
* substituted on the element that DECLARES it — so the painted container hands it the one
|
|
503
503
|
* it is not using itself, and the chip keeps a step wherever it is written. The page hands
|
|
504
504
|
* over the card below; every painted container hands over the page, in the recipe under it.
|
|
505
|
-
* Held by stories/code-chip.test.js. why: docs/
|
|
505
|
+
* Held by stories/code-chip.test.js. why: docs/foundations.md#elevation */
|
|
506
506
|
:root { --code-bg: var(--surface); }
|
|
507
507
|
|
|
508
508
|
/* Recompose only at painted containers; controls inherit the outside gap, and each hands an
|
|
509
509
|
* inline code chip the page. One recipe keeps surface propagation cheap and consistent.
|
|
510
510
|
* .ui-code composes its own ring in src/styles/code.css instead of joining this list: a
|
|
511
511
|
* chip cannot both paint --code-bg and re-point it, and its gap has to be the surface it
|
|
512
|
-
* actually paints. why: docs/
|
|
512
|
+
* actually paints. why: docs/foundations.md#the-focus-ring */
|
|
513
513
|
.amenu,
|
|
514
514
|
.dtsw,
|
|
515
515
|
.rx-modal,
|