@apliteni/apliteni-ui 0.94.0 → 0.96.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/guidelines/accessibility-floor.md +3 -3
- package/guidelines/state-set.md +3 -3
- package/package.json +1 -1
- package/react/dist/index.css +19 -12
- package/react/dist/index.js +64 -1
- package/src/components/dropdown.js +243 -13
- package/src/index.d.ts +12 -0
- package/src/styles/back.css +2 -2
- package/src/styles/badge.css +11 -11
- package/src/styles/base.css +6 -6
- package/src/styles/button.css +16 -13
- package/src/styles/callout.css +11 -11
- package/src/styles/card.css +5 -5
- package/src/styles/code.css +15 -26
- package/src/styles/command-palette.css +13 -10
- package/src/styles/confirm.css +5 -5
- package/src/styles/drawer.css +6 -7
- package/src/styles/dropdown.css +53 -19
- package/src/styles/feedback.css +11 -11
- package/src/styles/file-drop.css +2 -2
- package/src/styles/filter-bar.css +10 -8
- package/src/styles/footer.css +12 -7
- package/src/styles/input.css +20 -12
- package/src/styles/layout.css +20 -20
- package/src/styles/loading.css +1 -1
- package/src/styles/motion.css +1 -1
- package/src/styles/nav.css +18 -18
- package/src/styles/pagination.css +6 -1
- package/src/styles/segmented.css +26 -18
- package/src/styles/success.css +4 -4
- package/src/styles/table.css +10 -10
- package/src/styles/tabs.css +2 -2
- package/src/styles/tooltip.css +1 -1
- package/src/styles/topbar.css +30 -22
- package/src/tokens/tokens.css +23 -31
package/src/styles/dropdown.css
CHANGED
|
@@ -17,14 +17,18 @@
|
|
|
17
17
|
font-size: calc(var(--text-sm) - 0.5px);
|
|
18
18
|
font-weight: 500;
|
|
19
19
|
color: var(--text);
|
|
20
|
-
background: var(--surface); /*
|
|
20
|
+
background: var(--surface); /* code-bg: inherit — control paint; the containing surface is the ground, for a chip and for a band alike. */
|
|
21
21
|
border: 1px solid var(--border);
|
|
22
22
|
border-radius: var(--radius-pill);
|
|
23
23
|
padding: 7px 11px 7px 13px;
|
|
24
24
|
transition: border-color var(--dur-fast) var(--ease), background var(--dur-fast) var(--ease);
|
|
25
25
|
}
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
/* The hover edge steps aside under the band: an accent edge one pixel inside an
|
|
27
|
+
accent band is the second band #578 round r34 took off the focus rules, and a
|
|
28
|
+
pointer resting on a focused control would put it back. One indicator, which is
|
|
29
|
+
what the kit's rows already chose. why: docs/foundations.md#the-focus-ring */
|
|
30
|
+
.ui-dropdown__trigger:hover:not(:focus-visible) { border-color: var(--accent); }
|
|
31
|
+
.ui-dropdown__trigger:focus-visible { outline: var(--ring); outline-offset: var(--ring-offset); }
|
|
28
32
|
.ui-dropdown__pre { color: var(--text); }
|
|
29
33
|
.ui-dropdown__value { color: var(--strong); font-weight: 600; letter-spacing: 0.01em; }
|
|
30
34
|
|
|
@@ -52,6 +56,12 @@
|
|
|
52
56
|
the portal's JS, so an upward panel cannot drift from a downward one.
|
|
53
57
|
why: docs/components.md#the-dropdown-panel */
|
|
54
58
|
--ui-dropdown-gap: 9px;
|
|
59
|
+
/* The least a panel keeps between itself and the edge of the view it is laid out
|
|
60
|
+
in. The wiring reads it off the panel and moves the panel along the inline axis
|
|
61
|
+
when the edge `align` asked for does not fit; a page wanting a panel flush with
|
|
62
|
+
the screen's edge sets it to 0.
|
|
63
|
+
why: docs/components.md#the-dropdown-panel */
|
|
64
|
+
--ui-dropdown-edge: 8px;
|
|
55
65
|
/* Named for the same reason the offset is: a block pinned to an edge has to
|
|
56
66
|
bleed back through it, and #306 is a page copying the number by hand.
|
|
57
67
|
why: docs/components.md#the-dropdown-panel */
|
|
@@ -68,9 +78,27 @@
|
|
|
68
78
|
top: calc(100% + var(--ui-dropdown-gap));
|
|
69
79
|
left: 0;
|
|
70
80
|
min-width: 240px;
|
|
81
|
+
/* …and no wider than the view it is laid out in, less the keep-out it owes each
|
|
82
|
+
edge. This bound is what holds a PORTALLED panel: that one is `position: fixed`,
|
|
83
|
+
so the room beside its own offsets is the whole view and a shrink-to-fit box
|
|
84
|
+
takes all of it — measured at 390px on a 390px screen with this line gone.
|
|
85
|
+
The floor above wins where the two disagree, which is a view under 2 × edge +
|
|
86
|
+
240. The wiring writes the property off the LAYOUT viewport; the fallback is
|
|
87
|
+
for a page whose JS has not run, and is a classic scrollbar's width too
|
|
88
|
+
generous, because `100vw` counts a scrollbar the panel's own box does not.
|
|
89
|
+
why: docs/components.md#the-dropdown-panel */
|
|
90
|
+
max-width: var(--ui-dropdown-ceiling, calc(100vw - 2 * var(--ui-dropdown-edge)));
|
|
91
|
+
/* And this is what holds an IN-PLACE one, whose room is its trigger's block: a
|
|
92
|
+
shrink-to-fit box is its min-content wide at the least, and one 70-character
|
|
93
|
+
token's min-content was 508px on a 390px screen. Breaking anywhere takes that
|
|
94
|
+
to one character, so the panel settles on the floor above — and keeps the token
|
|
95
|
+
inside its own box, since overflowing inline text widens the page whatever the
|
|
96
|
+
box says. The treatment a filter row's panels and the rail's account block
|
|
97
|
+
already take. why: src/styles/filter-bar.css */
|
|
98
|
+
overflow-wrap: anywhere;
|
|
71
99
|
/* The floating step, not the sunken one — a panel held open over a card cannot be
|
|
72
100
|
painted the colour of an inset. why: docs/foundations.md#elevation */
|
|
73
|
-
background: var(--bg-elevated);
|
|
101
|
+
background: var(--bg-elevated);
|
|
74
102
|
/* The two-step edge and the drop, through the level's own names: in DARK that is
|
|
75
103
|
--border-strong outside and --border one pixel inside it, then the drop; in LIGHT
|
|
76
104
|
both lines are transparent and the drop carries the whole separation.
|
|
@@ -101,10 +129,10 @@
|
|
|
101
129
|
author rule — so `.is-scroll` took the browser's outline, black in light mode.
|
|
102
130
|
#457 refused that, and #487's review measured it here. Written for every panel
|
|
103
131
|
rather than the scrolling one, as the palette and the drawer write it, because
|
|
104
|
-
a panel that takes focus any other way has the same claim on the ring. The
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
.ui-dropdown__panel:focus-visible { outline:
|
|
132
|
+
a panel that takes focus any other way has the same claim on the ring. The ring
|
|
133
|
+
is an outline since #578, so it leaves the box-shadow list that carries the panel's
|
|
134
|
+
edge and its drop standing. why: docs/foundations.md#elevation */
|
|
135
|
+
.ui-dropdown__panel:focus-visible { outline: var(--ring); outline-offset: var(--ring-offset); }
|
|
108
136
|
|
|
109
137
|
/* Opening upward. The kit releases its own `top` here so that nothing outside
|
|
110
138
|
the kit has to: an absolute box with both edges pinned is stretched between
|
|
@@ -172,9 +200,12 @@
|
|
|
172
200
|
color: var(--text);
|
|
173
201
|
transition: background var(--dur-fast) var(--ease);
|
|
174
202
|
}
|
|
175
|
-
/* Rows keep a reading surface; hover adds an edge.
|
|
176
|
-
|
|
177
|
-
|
|
203
|
+
/* Rows keep a reading surface; hover adds an edge. A row that is hovered AND focused
|
|
204
|
+
draws the ring and not the hover edge — both are outlines now, and the focus rule
|
|
205
|
+
comes later — which is one indicator rather than two.
|
|
206
|
+
why: docs/foundations.md#elevation */
|
|
207
|
+
.ui-dropdown__item:hover { outline: 1px solid var(--control-edge); outline-offset: -1px; background: var(--surface); /* code-bg: inherit — control paint; the containing surface is the ground, for a chip and for a band alike. */ }
|
|
208
|
+
.ui-dropdown__item:focus-visible { background: var(--surface); /* code-bg: inherit — control paint; the containing surface is the ground, for a chip and for a band alike. */ outline: var(--ring); outline-offset: var(--ring-offset); }
|
|
178
209
|
.ui-dropdown__main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
|
|
179
210
|
.ui-dropdown__label { font-family: var(--font-sans); font-size: calc(var(--text-sm) - 0.5px); color: var(--strong); font-weight: 600; letter-spacing: 0.01em; }
|
|
180
211
|
.ui-dropdown__desc { font-size: var(--text-xs); color: var(--text); line-height: 1.35; }
|
|
@@ -200,11 +231,11 @@
|
|
|
200
231
|
margin-left: auto;
|
|
201
232
|
flex: none;
|
|
202
233
|
color: var(--text);
|
|
203
|
-
background: color-mix(in srgb, var(--muted) 12%, transparent); /*
|
|
234
|
+
background: color-mix(in srgb, var(--muted) 12%, transparent); /* code-bg: inherit — decorative or text-only paint; nothing nested reads a ground from it. */
|
|
204
235
|
}
|
|
205
|
-
.ui-dropdown__badge.is-live { color: var(--chip-success-ink); background: var(--chip-success-fill); /*
|
|
236
|
+
.ui-dropdown__badge.is-live { color: var(--chip-success-ink); background: var(--chip-success-fill); /* code-bg: inherit — decorative or text-only paint; nothing nested reads a ground from it. */ }
|
|
206
237
|
:root[data-theme="light"] .ui-dropdown__badge:not(.is-live) {
|
|
207
|
-
background: color-mix(in srgb, var(--muted) 15%, transparent); /*
|
|
238
|
+
background: color-mix(in srgb, var(--muted) 15%, transparent); /* code-bg: inherit — decorative or text-only paint; nothing nested reads a ground from it. */
|
|
208
239
|
}
|
|
209
240
|
|
|
210
241
|
/* Disabled + danger rows */
|
|
@@ -276,7 +307,7 @@
|
|
|
276
307
|
font-size: calc(var(--text-sm) - 0.5px);
|
|
277
308
|
color: var(--strong);
|
|
278
309
|
/* The ground and line .ui-input takes. why: docs/foundations.md#elevation */
|
|
279
|
-
background: var(--field-bg); /*
|
|
310
|
+
background: var(--field-bg); /* code-bg: inherit — control paint; the containing surface is the ground, for a chip and for a band alike. */
|
|
280
311
|
border: 1px solid var(--field-edge);
|
|
281
312
|
border-radius: var(--radius-sm);
|
|
282
313
|
padding: 8px 12px 8px 34px;
|
|
@@ -291,7 +322,7 @@
|
|
|
291
322
|
|
|
292
323
|
.ui-dropdown__search-input::placeholder { /* muted-ink: placeholder — empty search field */ color: var(--muted); }
|
|
293
324
|
.ui-dropdown__search-input:hover { border-color: var(--field-edge-hover); }
|
|
294
|
-
.ui-dropdown__search-input:focus-visible { outline:
|
|
325
|
+
.ui-dropdown__search-input:focus-visible { outline: var(--ring); outline-offset: var(--ring-offset); }
|
|
295
326
|
|
|
296
327
|
.ui-dropdown__list { max-height: 300px; overflow-y: auto; }
|
|
297
328
|
/* Rows are `role="option" tabindex="-1"`, so the LIST takes the keyboard stop and
|
|
@@ -304,9 +335,12 @@
|
|
|
304
335
|
query hides is put away here. */
|
|
305
336
|
.ui-dropdown__list [hidden] { display: none; } /* motion: still — a row the query no longer matches is gone on the next keystroke */
|
|
306
337
|
|
|
307
|
-
/* The row Enter would pick. Focus stays in the field, which carries the ring,
|
|
308
|
-
|
|
309
|
-
|
|
338
|
+
/* The row Enter would pick. Focus stays in the field, which carries the ring, so this
|
|
339
|
+
row is marked by its fill alone — the inset accent bar beside it was an edge on a
|
|
340
|
+
selected row, which #578 round r34 took off every selected state. --surface-2, not
|
|
341
|
+
--surface: the panel is --bg-elevated, which --surface matches exactly in light, so
|
|
342
|
+
the bar had been the whole mark there. 1.183:1 in light, 1.234:1 in dark. */
|
|
343
|
+
.ui-dropdown__item.is-active { background: var(--surface-2); /* code-bg: inherit — control paint; the containing surface is the ground, for a chip and for a band alike. */ }
|
|
310
344
|
|
|
311
345
|
/* No match — a nudge and no action, per Guidelines / Microcopy. Empty while
|
|
312
346
|
anything matches, so it takes no room. */
|
package/src/styles/feedback.css
CHANGED
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
/* The composer panel (bottom-centre) */
|
|
67
67
|
.ui-fbcomposer {
|
|
68
68
|
position: fixed; z-index: 71; left: 50%; bottom: 26px; transform: translateX(-50%) translateY(14px);
|
|
69
|
-
width: min(520px, calc(100vw - 32px)); background: var(--bg-elevated);
|
|
69
|
+
width: min(520px, calc(100vw - 32px)); background: var(--bg-elevated); border-radius: 18px;
|
|
70
70
|
/* The shadow was its only edge until #295, which replaced it with the hairline; since
|
|
71
71
|
#490 light is back on the drop and dark keeps the line.
|
|
72
72
|
why: docs/foundations.md#elevation */
|
|
@@ -80,31 +80,31 @@
|
|
|
80
80
|
.ui-fbc__head { display: flex; align-items: center; gap: 12px; padding: 17px 20px 0; }
|
|
81
81
|
.ui-fbc__chip { display: inline-flex; align-items: center; gap: 8px; color: var(--accent); font-size: var(--text-sm); font-weight: var(--weight-semibold); letter-spacing: .01em; white-space: nowrap; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
|
|
82
82
|
.ui-fbc__chip svg { width: 14px; height: 14px; flex: none; opacity: .85; stroke-width: 2.7; }
|
|
83
|
-
.ui-fbc__x { margin-left: auto; background: var(--surface); /*
|
|
83
|
+
.ui-fbc__x { margin-left: auto; background: var(--surface); /* code-bg: inherit — control paint; the containing surface is the ground, for a chip and for a band alike. */ /* muted-ink: glyph — dismiss icon */ color: var(--dim); border: 0; width: 28px; height: 28px; border-radius: 8px; cursor: pointer; display: grid; place-items: center; flex: none; font: inherit; }
|
|
84
84
|
.ui-fbc__x:hover { color: var(--strong); }
|
|
85
|
-
.ui-fbc__x:focus-visible { outline:
|
|
85
|
+
.ui-fbc__x:focus-visible { outline: var(--ring); outline-offset: var(--ring-offset); }
|
|
86
86
|
.ui-fbc__x svg { width: 14px; height: 14px; stroke-width: 2.7; }
|
|
87
|
-
.ui-fbc__quote { margin: 14px 20px 0; background: var(--surface); /*
|
|
87
|
+
.ui-fbc__quote { margin: 14px 20px 0; background: var(--surface); /* code-bg: inherit — decorative or text-only paint; nothing nested reads a ground from it. */ border-radius: 12px; padding: 12px 15px; display: flex; gap: 11px; }
|
|
88
88
|
.ui-fbc__qm { color: var(--accent); font-size: var(--text-xl); font-weight: var(--weight-bold); line-height: .9; flex: none; opacity: .55; }
|
|
89
89
|
.ui-fbc__quote q { quotes: none; color: var(--text); font-style: italic; font-size: calc(var(--text-sm) + 0.5px); line-height: 1.55; }
|
|
90
90
|
.ui-fbc__body { padding: 14px 20px 0; }
|
|
91
91
|
.ui-fbcomposer textarea {
|
|
92
92
|
width: 100%; min-height: 96px; resize: vertical; font-family: var(--font-sans); font-size: var(--text-base); line-height: 1.55;
|
|
93
|
-
color: var(--strong); background: var(--surface); /*
|
|
93
|
+
color: var(--strong); background: var(--surface); /* code-bg: inherit — control paint; the containing surface is the ground, for a chip and for a band alike. */ border: 1px solid var(--field-edge); border-radius: 12px; padding: 13px 15px; transition: box-shadow var(--dur-fast) var(--ease);
|
|
94
94
|
}
|
|
95
95
|
.ui-fbcomposer textarea::placeholder { /* muted-ink: placeholder — empty feedback field */ color: var(--muted); }
|
|
96
|
-
.ui-fbcomposer textarea:focus-visible { outline:
|
|
96
|
+
.ui-fbcomposer textarea:focus-visible { outline: var(--ring); outline-offset: var(--ring-offset); }
|
|
97
97
|
.ui-fbc__foot { display: flex; align-items: center; justify-content: flex-end; gap: 12px; padding: 16px 20px 18px; }
|
|
98
98
|
|
|
99
99
|
.ui-fbbtn { font-family: var(--font-sans); font-size: calc(var(--text-sm) + 0.5px); font-weight: var(--weight-semibold); border-radius: 10px; padding: 9px 17px; cursor: pointer; border: 0; transition: filter var(--dur-fast) var(--ease), background var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease); }
|
|
100
100
|
.ui-fbbtn.ghost { background: transparent; color: var(--text); }
|
|
101
|
-
.ui-fbbtn.ghost:hover { color: var(--strong); background: var(--surface); /*
|
|
102
|
-
.ui-fbbtn:focus-visible { outline:
|
|
101
|
+
.ui-fbbtn.ghost:hover { color: var(--strong); background: var(--surface); /* code-bg: inherit — control paint; the containing surface is the ground, for a chip and for a band alike. */ }
|
|
102
|
+
.ui-fbbtn:focus-visible { outline: var(--ring); outline-offset: var(--ring-offset); }
|
|
103
103
|
.ui-fbbtn.primary { background: var(--accent-strong); color: var(--accent-contrast); display: inline-flex; align-items: center; gap: 9px; }
|
|
104
104
|
.ui-fbbtn.primary:hover { filter: brightness(1.08); }
|
|
105
105
|
/* Same flat pair as .ui-btn:disabled, for the same reason (#220). */
|
|
106
106
|
.ui-fbbtn.primary:disabled {
|
|
107
|
-
background: var(--disabled-surface); /*
|
|
107
|
+
background: var(--disabled-surface); /* code-bg: inherit — control paint; the containing surface is the ground, for a chip and for a band alike. */
|
|
108
108
|
/* muted-ink: state — unavailable control */ color: var(--disabled-ink);
|
|
109
109
|
cursor: default;
|
|
110
110
|
filter: none;
|
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
@keyframes uiFbSpin { to { transform: rotate(360deg); } }
|
|
115
115
|
|
|
116
116
|
/* Success state */
|
|
117
|
-
.ui-fbc__done { padding: 30px 26px 24px; text-align: center; background: radial-gradient(112% 60% at 50% 0%, var(--glow-green), transparent 62%); /*
|
|
117
|
+
.ui-fbc__done { padding: 30px 26px 24px; text-align: center; background: radial-gradient(112% 60% at 50% 0%, var(--glow-green), transparent 62%); /* code-bg: inherit — a wash paints over a ground and behind a chip, so the opaque ground below it is the step. */ }
|
|
118
118
|
.ui-fbc__ck { width: 88px; height: 88px; margin: 0 auto 13px; display: grid; place-items: center; }
|
|
119
119
|
.ui-fbck { width: 88px; height: 88px; overflow: visible; display: block; transform-origin: center; animation: uiFbCkSpring 1s cubic-bezier(.22,1,.3,1) both; } /* motion: choreographed — the frame the mark and the comet are timed against */
|
|
120
120
|
.ui-fbck-t { fill: none; stroke: var(--surface); stroke-width: 9; stroke-linecap: round; stroke-linejoin: round; }
|
|
@@ -129,7 +129,7 @@
|
|
|
129
129
|
@keyframes uiFbCkSpring { 0% { transform: scale(1.32); } 62% { transform: scale(.965); } 82% { transform: scale(1.02); } 100% { transform: scale(1); } }
|
|
130
130
|
|
|
131
131
|
/* Error banner */
|
|
132
|
-
.ui-fbc__err { margin: 14px 20px 0; background: color-mix(in srgb, var(--pink) 14%, transparent); /*
|
|
132
|
+
.ui-fbc__err { margin: 14px 20px 0; background: color-mix(in srgb, var(--pink) 14%, transparent); /* code-bg: inherit — text-only validation message has no nested focus target. */ color: var(--pink); font-size: var(--text-sm); padding: 11px 15px; border-radius: 11px; display: none; }
|
|
133
133
|
.ui-fbc__err.show { display: block; }
|
|
134
134
|
/* A failed send's line fades in; wireFeedback() adds the class as it shows it. */
|
|
135
135
|
.ui-fbc__err.is-entering { animation: m-fade var(--dur-fast) var(--ease-out) both; }
|
package/src/styles/file-drop.css
CHANGED
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
width: 100%;
|
|
59
59
|
height: 6px;
|
|
60
60
|
border-radius: var(--radius-pill);
|
|
61
|
-
background: var(--surface-2); /*
|
|
61
|
+
background: var(--surface-2); /* code-bg: inherit — a progress track holds no focus target. */
|
|
62
62
|
overflow: hidden;
|
|
63
63
|
}
|
|
64
64
|
.ui-drop__bar span { display: block; height: 100%; background: var(--accent); }
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
padding: var(--space-3);
|
|
74
74
|
border: 1px dashed var(--accent);
|
|
75
75
|
border-radius: var(--radius-md);
|
|
76
|
-
background: var(--surface); /*
|
|
76
|
+
background: var(--surface); /* code-bg: inherit — the target is painted while a file is over the region and holds no focus target. */
|
|
77
77
|
color: var(--strong);
|
|
78
78
|
font-size: var(--text-sm);
|
|
79
79
|
text-align: center;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
.ui-filter-bar__chip .ui-dropdown__trigger { border: 0; background: transparent; padding: var(--space-1) var(--space-2); }
|
|
5
5
|
.ui-filter-bar__remove { border: 0; background: transparent; color: var(--text); font: inherit; text-align: center; font-size: var(--text-lg); padding: 0; min-width: 24px; min-height: 24px; border-radius: var(--radius-xs); cursor: pointer; }
|
|
6
6
|
.ui-filter-bar__remove:focus-visible,
|
|
7
|
-
.ui-filter-bar:focus-visible { outline:
|
|
7
|
+
.ui-filter-bar:focus-visible { outline: var(--ring); outline-offset: var(--ring-offset); }
|
|
8
8
|
.ui-filter-bar button:disabled { /* muted-ink: state — disabled filters */ color: var(--disabled-ink); cursor: not-allowed; }
|
|
9
9
|
|
|
10
10
|
.ui-filter-bar .ui-dropdown__value { color: inherit; }
|
|
@@ -69,18 +69,20 @@
|
|
|
69
69
|
check is what identifies the state under WCAG 1.4.1; Apple, Material, Carbon,
|
|
70
70
|
Primer and Radix all tick a chosen menu row. #549
|
|
71
71
|
why: docs/components.md#a-filter-row-holds-its-panels */
|
|
72
|
-
.ui-filter-bar .ui-dropdown__item.is-selected { background: var(--glow-purple); /*
|
|
72
|
+
.ui-filter-bar .ui-dropdown__item.is-selected { background: var(--glow-purple); /* code-bg: inherit — a translucent wash moves the ground, not the chip on it. */ }
|
|
73
73
|
/* Kit-wide a chosen label steps down to --text, which left the row in force the
|
|
74
74
|
faintest in the panel. Under the wash it holds --strong. */
|
|
75
75
|
.ui-filter-bar .ui-dropdown__item.is-selected .ui-dropdown__label { color: var(--strong); }
|
|
76
|
-
/*
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
/* Focus sets an opaque --surface, which would take the wash off; restated here so
|
|
77
|
+
the guarantee is one declaration a reader and filter-selected-mark.test.js can
|
|
78
|
+
both find. Focus still reads by its own paint — the kit's band, which #578 made a
|
|
79
|
+
real outline a pixel off the row.
|
|
79
80
|
why: guidelines/accessibility-floor.md#measurable-pairs */
|
|
80
|
-
.ui-filter-bar .ui-dropdown__item.is-selected:focus-visible,
|
|
81
|
-
.ui-filter-bar .ui-dropdown__item.is-selected.is-active { background: var(--glow-purple); /* ring-gap: inherit — translucent wash retains the opaque containing gap. */ }
|
|
81
|
+
.ui-filter-bar .ui-dropdown__item.is-selected:focus-visible { background: var(--glow-purple); /* code-bg: inherit — a translucent wash moves the ground, not the chip on it. */ }
|
|
82
82
|
/* Hover's other paint is a 1px edge, 1.06:1 on the wash, which left the row in force
|
|
83
83
|
the one row a pointer got no answer from. Selection is a background highlight, so
|
|
84
84
|
hover deepens it: 9% more accent, the step .ui-table--zebra gives a hovered row.
|
|
85
|
+
The arrow keys need nothing here: ddSetActive() writes no .is-active without a search
|
|
86
|
+
field and filterBar() builds none, so an arrow key moves real focus instead. #578
|
|
85
87
|
why: docs/components.md#a-filter-row-holds-its-panels */
|
|
86
|
-
.ui-filter-bar .ui-dropdown__item.is-selected:hover { background: color-mix(in srgb, var(--glow-purple), var(--accent) 9%); /*
|
|
88
|
+
.ui-filter-bar .ui-dropdown__item.is-selected:hover { background: color-mix(in srgb, var(--glow-purple), var(--accent) 9%); /* code-bg: inherit — a translucent wash moves the ground, not the chip on it. */ }
|
package/src/styles/footer.css
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
--footer-title: var(--strong);
|
|
15
15
|
--footer-text: var(--text);
|
|
16
16
|
|
|
17
|
-
background: var(--footer-surface); /*
|
|
17
|
+
background: var(--footer-surface); /* code-bg: inherit — transparent footer inherits; the app variant composes its opaque surface. */
|
|
18
18
|
border-top: 1px solid var(--footer-border);
|
|
19
19
|
color: var(--footer-text);
|
|
20
20
|
font-family: var(--font-sans);
|
|
@@ -55,14 +55,19 @@
|
|
|
55
55
|
border-radius: 10px;
|
|
56
56
|
border: 1px solid var(--footer-border);
|
|
57
57
|
color: var(--footer-link);
|
|
58
|
-
background: var(--surface); /*
|
|
58
|
+
background: var(--surface); /* code-bg: inherit — control paint; the containing surface is the ground, for a chip and for a band alike. */
|
|
59
59
|
transition:
|
|
60
60
|
color var(--dur-fast) var(--ease),
|
|
61
61
|
border-color var(--dur-fast) var(--ease),
|
|
62
62
|
transform var(--dur-fast) var(--ease);
|
|
63
63
|
}
|
|
64
|
-
.ui-footer__social:hover { color: var(--accent);
|
|
65
|
-
|
|
64
|
+
.ui-footer__social:hover { color: var(--accent); transform: translateY(-1px); }
|
|
65
|
+
/* The hover edge steps aside under the band: an accent edge one pixel inside an
|
|
66
|
+
accent band is the second band #578 round r34 took off the focus rules, and a
|
|
67
|
+
pointer resting on a focused control would put it back. One indicator, which is
|
|
68
|
+
what the kit's rows already chose. why: docs/foundations.md#the-focus-ring */
|
|
69
|
+
.ui-footer__social:hover:not(:focus-visible) { border-color: var(--accent); }
|
|
70
|
+
.ui-footer__social:focus-visible { outline: var(--ring); outline-offset: var(--ring-offset); }
|
|
66
71
|
.ui-footer__social svg { width: 17px; height: 17px; display: block; }
|
|
67
72
|
|
|
68
73
|
/* Link columns */
|
|
@@ -86,7 +91,7 @@
|
|
|
86
91
|
transition: color var(--dur-fast) var(--ease);
|
|
87
92
|
}
|
|
88
93
|
.ui-footer__links a:hover { color: var(--footer-link-hover); }
|
|
89
|
-
.ui-footer__links a:focus-visible { outline:
|
|
94
|
+
.ui-footer__links a:focus-visible { outline: var(--ring); outline-offset: var(--ring-offset); border-radius: var(--radius-xs); }
|
|
90
95
|
|
|
91
96
|
/* Legal bar — shared by every variant */
|
|
92
97
|
.ui-footer__bar {
|
|
@@ -104,7 +109,7 @@
|
|
|
104
109
|
.ui-footer__legal-links { display: flex; gap: 22px; flex-wrap: wrap; }
|
|
105
110
|
.ui-footer__legal-links a { color: var(--footer-link); text-decoration: none; transition: color var(--dur-fast) var(--ease); }
|
|
106
111
|
.ui-footer__legal-links a:hover { color: var(--footer-link-hover); }
|
|
107
|
-
.ui-footer__legal-links a:focus-visible { outline:
|
|
112
|
+
.ui-footer__legal-links a:focus-visible { outline: var(--ring); outline-offset: var(--ring-offset); border-radius: var(--radius-xs); }
|
|
108
113
|
.ui-footer__switcher { display: inline-flex; align-items: center; gap: 12px; margin-left: auto; }
|
|
109
114
|
|
|
110
115
|
/* slim — a single legal row, no divider above it. */
|
|
@@ -113,7 +118,7 @@
|
|
|
113
118
|
|
|
114
119
|
/* app — compact, in-product: surface background + tighter padding. */
|
|
115
120
|
.ui-footer--app {
|
|
116
|
-
--footer-surface: var(--surface);
|
|
121
|
+
--footer-surface: var(--surface);
|
|
117
122
|
border-top: 1px solid var(--footer-border);
|
|
118
123
|
}
|
|
119
124
|
.ui-footer--app .ui-footer__in { max-width: none; padding: 12px clamp(14px, 2.4vw, 22px); }
|
package/src/styles/input.css
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
color: var(--strong);
|
|
26
26
|
/* Fields use the card surface and an edge in both themes.
|
|
27
27
|
why: docs/foundations.md#elevation */
|
|
28
|
-
background: var(--field-bg); /*
|
|
28
|
+
background: var(--field-bg); /* code-bg: inherit — control paint; the containing surface is the ground, for a chip and for a band alike. */
|
|
29
29
|
border: 1px solid var(--field-edge);
|
|
30
30
|
border-radius: var(--radius-md);
|
|
31
31
|
padding: 12px 15px;
|
|
@@ -38,12 +38,16 @@
|
|
|
38
38
|
.ui-textarea:hover,
|
|
39
39
|
.ui-select:hover { border-color: var(--field-edge-hover); }
|
|
40
40
|
|
|
41
|
+
/* The band and nothing beside it. Recolouring the field's own 1px edge to the
|
|
42
|
+
accent drew a SECOND accent band one pixel inside the first, and the unpainted
|
|
43
|
+
pixel between them read as a halo on the light ground — which is the glow Artur
|
|
44
|
+
rejected on #578 round r34. The edge keeps its resting ink.
|
|
45
|
+
why: docs/foundations.md#the-focus-ring */
|
|
41
46
|
.ui-input:focus-visible,
|
|
42
47
|
.ui-textarea:focus-visible,
|
|
43
48
|
.ui-select:focus-visible {
|
|
44
|
-
outline:
|
|
45
|
-
|
|
46
|
-
box-shadow: var(--ring);
|
|
49
|
+
outline: var(--ring);
|
|
50
|
+
outline-offset: var(--ring-offset);
|
|
47
51
|
}
|
|
48
52
|
|
|
49
53
|
.ui-input::placeholder,
|
|
@@ -62,7 +66,7 @@
|
|
|
62
66
|
.ui-input:disabled,
|
|
63
67
|
.ui-select:disabled,
|
|
64
68
|
.ui-textarea:disabled {
|
|
65
|
-
background-color: var(--disabled-surface); /*
|
|
69
|
+
background-color: var(--disabled-surface); /* code-bg: inherit — control paint; the containing surface is the ground, for a chip and for a band alike. */
|
|
66
70
|
border-color: var(--disabled-border);
|
|
67
71
|
/* muted-ink: state — unavailable control */ color: var(--disabled-ink);
|
|
68
72
|
opacity: 1; /* fade-reset: the UA's select:disabled grey-out. #564 */
|
|
@@ -137,7 +141,7 @@
|
|
|
137
141
|
margin-top: 1px;
|
|
138
142
|
border: 1.5px solid var(--border-strong);
|
|
139
143
|
border-radius: var(--radius-xs);
|
|
140
|
-
background: var(--surface-2); /*
|
|
144
|
+
background: var(--surface-2); /* code-bg: inherit — control paint; the containing surface is the ground, for a chip and for a band alike. */
|
|
141
145
|
cursor: pointer;
|
|
142
146
|
transition: border-color var(--dur-fast) var(--ease), background var(--dur-fast) var(--ease);
|
|
143
147
|
position: relative;
|
|
@@ -163,7 +167,11 @@
|
|
|
163
167
|
.ui-check input[type="radio"] { border-radius: 50%; }
|
|
164
168
|
/* :enabled, or the accent lights the border of a box that cannot be clicked —
|
|
165
169
|
the same "press me" a disabled control has to stop making. #429 */
|
|
166
|
-
|
|
170
|
+
/* The hover edge steps aside under the band: an accent edge one pixel inside an
|
|
171
|
+
accent band is the second band #578 round r34 took off the focus rules, and a
|
|
172
|
+
pointer resting on a focused control would put it back. One indicator, which is
|
|
173
|
+
what the kit's rows already chose. why: docs/foundations.md#the-focus-ring */
|
|
174
|
+
.ui-check input:enabled:hover:not(:focus-visible) { border-color: var(--accent); }
|
|
167
175
|
.ui-check input:checked { background: var(--accent); border-color: var(--accent); }
|
|
168
176
|
.ui-check input[type="checkbox"]:checked::after {
|
|
169
177
|
content: "";
|
|
@@ -181,7 +189,7 @@
|
|
|
181
189
|
border-radius: 50%;
|
|
182
190
|
background: var(--accent-contrast);
|
|
183
191
|
}
|
|
184
|
-
.ui-check input:focus-visible { outline:
|
|
192
|
+
.ui-check input:focus-visible { outline: var(--ring); outline-offset: var(--ring-offset); }
|
|
185
193
|
|
|
186
194
|
/* Off. `.ui-check` had no disabled rule at all until #429 put a disabled checkbox
|
|
187
195
|
on screen: the box kept --surface-2 and --border-strong, its words kept --text,
|
|
@@ -192,13 +200,13 @@
|
|
|
192
200
|
button does: the accent IS the "press me". Its mark inverts to --disabled-surface,
|
|
193
201
|
so the tick and the dot keep the measured --disabled-ink pair in both themes. */
|
|
194
202
|
.ui-check input:disabled {
|
|
195
|
-
background: var(--disabled-surface); /*
|
|
203
|
+
background: var(--disabled-surface); /* code-bg: inherit — control paint; the containing surface is the ground, for a chip and for a band alike. */
|
|
196
204
|
border-color: var(--disabled-border);
|
|
197
205
|
cursor: not-allowed;
|
|
198
206
|
}
|
|
199
207
|
.ui-check input:disabled:checked { background: var(--disabled-ink); border-color: var(--disabled-ink); }
|
|
200
208
|
.ui-check input[type="checkbox"]:disabled:checked::after { border-color: var(--disabled-surface); }
|
|
201
|
-
.ui-check input[type="radio"]:disabled:checked::after { background: var(--disabled-surface); /*
|
|
209
|
+
.ui-check input[type="radio"]:disabled:checked::after { background: var(--disabled-surface); /* code-bg: inherit — the mark inside the box; the box carries the focus indicator. */ }
|
|
202
210
|
/* The label is the click target, so the cursor belongs on it, and the words it
|
|
203
211
|
holds go quiet with the box beside them. */
|
|
204
212
|
.ui-check:has(input:disabled) { /* muted-ink: state — unavailable control */ color: var(--disabled-ink); cursor: not-allowed; }
|
|
@@ -217,7 +225,7 @@
|
|
|
217
225
|
.ui-switch__track {
|
|
218
226
|
position: absolute;
|
|
219
227
|
inset: 0;
|
|
220
|
-
background: var(--surface-3); /*
|
|
228
|
+
background: var(--surface-3); /* code-bg: inherit — control paint; the containing surface is the ground, for a chip and for a band alike. */
|
|
221
229
|
border-radius: var(--radius-pill);
|
|
222
230
|
cursor: pointer;
|
|
223
231
|
transition: background var(--dur-med) var(--ease);
|
|
@@ -243,5 +251,5 @@
|
|
|
243
251
|
.ui-switch input:checked + .ui-switch__track::before {
|
|
244
252
|
transform: translateX(calc(var(--sw-w) - var(--sw-h)));
|
|
245
253
|
}
|
|
246
|
-
.ui-switch input:focus-visible + .ui-switch__track { outline:
|
|
254
|
+
.ui-switch input:focus-visible + .ui-switch__track { outline: var(--ring); outline-offset: var(--ring-offset); }
|
|
247
255
|
.ui-switch input:disabled + .ui-switch__track { opacity: 0.5; cursor: not-allowed; }
|
package/src/styles/layout.css
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
display: grid;
|
|
14
14
|
grid-template-columns: max-content 1fr;
|
|
15
15
|
min-height: calc(100vh - var(--ui-app-top, 0px));
|
|
16
|
-
background: var(--bg); /*
|
|
16
|
+
background: var(--bg); /* code-bg: inherit — page background inherits root overrides. */
|
|
17
17
|
color: var(--text);
|
|
18
18
|
font-family: var(--font-sans);
|
|
19
19
|
/* The rail's width, and the one property the fold moves: the nav's own column
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
padding: var(--space-5) var(--space-4);
|
|
43
43
|
border-right: var(--ui-rail-rule) solid var(--rail-edge);
|
|
44
44
|
box-shadow: var(--elev-rail);
|
|
45
|
-
background: var(--surface);
|
|
45
|
+
background: var(--surface);
|
|
46
46
|
position: sticky;
|
|
47
47
|
top: var(--ui-app-top, 0px);
|
|
48
48
|
height: calc(100vh - var(--ui-app-top, 0px));
|
|
@@ -67,8 +67,8 @@
|
|
|
67
67
|
to the --surface-3 the folded rail already paints, a hovered row to half of it, so
|
|
68
68
|
the pointer stays quieter than the reader's own row in both themes (#475 r34). The
|
|
69
69
|
danger and current rows are named out: this rule outranks nav.css's states. */
|
|
70
|
-
.ui-app__rail .ui-nav__item:not(.is-danger):not(.is-active):hover { background: color-mix(in srgb, var(--surface-3) 50%, transparent); /*
|
|
71
|
-
.ui-app__rail .ui-nav__item.is-active { background: var(--surface-3); /*
|
|
70
|
+
.ui-app__rail .ui-nav__item:not(.is-danger):not(.is-active):hover { background: color-mix(in srgb, var(--surface-3) 50%, transparent); /* code-bg: inherit — The wash keeps the containing ground. */ }
|
|
71
|
+
.ui-app__rail .ui-nav__item.is-active { background: var(--surface-3); /* code-bg: inherit — The control keeps the containing ground. */ }
|
|
72
72
|
.ui-app__brand {
|
|
73
73
|
display: flex;
|
|
74
74
|
align-items: center;
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
/* Carries the shell's class as well as its own, for the same reason the rail
|
|
89
89
|
rows do (see nav.css): a host stylesheet's `a:link` is (0,1,1). */
|
|
90
90
|
.ui-app .ui-app__brand { color: var(--strong); }
|
|
91
|
-
.ui-app__brand:focus-visible { outline:
|
|
91
|
+
.ui-app__brand:focus-visible { outline: var(--ring); outline-offset: var(--ring-offset); border-radius: var(--radius-xs); }
|
|
92
92
|
.ui-app__brand svg { display: block; flex: none; }
|
|
93
93
|
|
|
94
94
|
/* The head band: the product's mark, and the rail's own control at the far end of
|
|
@@ -119,7 +119,7 @@
|
|
|
119
119
|
resting step. */
|
|
120
120
|
/* Re-tuned at #295, which took the light rail down a step with the page. Below 720px
|
|
121
121
|
the glyph is the whole row, so it is held at text grade rather than at 1.4.11's bar —
|
|
122
|
-
stories/apps/shell-states.test.js:
|
|
122
|
+
stories/apps/shell-states.test.js:1597 `a resting glyph is dimmer but still legible`. */
|
|
123
123
|
.ui-app__rail .ui-nav__ic svg { opacity: 0.66; }
|
|
124
124
|
|
|
125
125
|
/* A destructive row of the rail is a navigation row and rests like one; the danger
|
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
width: var(--ui-app-av); height: var(--ui-app-av); flex: none;
|
|
161
161
|
margin-inline-start: calc((var(--ui-nav-strip) - var(--ui-app-av)) / 2);
|
|
162
162
|
border-radius: var(--radius-pill);
|
|
163
|
-
background: var(--surface); /*
|
|
163
|
+
background: var(--surface); /* code-bg: inherit — decorative or text-only paint; nothing nested reads a ground from it. */
|
|
164
164
|
color: var(--strong);
|
|
165
165
|
display: grid; place-items: center;
|
|
166
166
|
font-size: calc(var(--text-xs) + 1px);
|
|
@@ -194,7 +194,7 @@
|
|
|
194
194
|
font-weight: inherit;
|
|
195
195
|
letter-spacing: normal;
|
|
196
196
|
}
|
|
197
|
-
.ui-app .ui-app__user-trigger:hover { background: var(--surface); /*
|
|
197
|
+
.ui-app .ui-app__user-trigger:hover { background: var(--surface); /* code-bg: inherit — control paint; the containing surface is the ground, for a chip and for a band alike. */ }
|
|
198
198
|
.ui-app__user-trigger .ui-app__who { flex: 1 1 auto; text-align: left; }
|
|
199
199
|
/* The panel is portalled onto <body>, so nothing here may hang off .ui-app: by the
|
|
200
200
|
time it is open it is no longer inside the rail that drew it.
|
|
@@ -283,7 +283,7 @@
|
|
|
283
283
|
does not do: an ordinary row drops its wash here, answered by the floating name below.
|
|
284
284
|
nav.css's folded rules, a rung further. why: docs/components.md#the-page-shell */
|
|
285
285
|
:where(.ui-app.is-collapsed) .ui-app__rail .ui-nav__item.is-active { isolation: isolate; background: none; }
|
|
286
|
-
:where(.ui-app.is-collapsed) .ui-app__rail .ui-nav__item.is-active::before { content: ""; position: absolute; left: 0; top: 50%; width: var(--ui-nav-strip); height: 100%; border-radius: 10px; transform: translateY(-50%); /* motion: still — a mark on the current row, whose own highlight already transitions; this centres it, it does not travel */ background: var(--surface-3); /*
|
|
286
|
+
:where(.ui-app.is-collapsed) .ui-app__rail .ui-nav__item.is-active::before { content: ""; position: absolute; left: 0; top: 50%; width: var(--ui-nav-strip); height: 100%; border-radius: 10px; transform: translateY(-50%); /* motion: still — a mark on the current row, whose own highlight already transitions; this centres it, it does not travel */ background: var(--surface-3); /* code-bg: inherit — The plate contains no focus target. */ z-index: -1; }
|
|
287
287
|
:where(.ui-app.is-collapsed) .ui-app__rail .ui-nav__item:not(.is-danger):not(.is-active):hover { background: none; }
|
|
288
288
|
/* The label IS the chip. `fixed` is the fallback placement, out of the rail's own
|
|
289
289
|
clip; the @supports branch below pins it to the row and is the only one that
|
|
@@ -297,7 +297,7 @@
|
|
|
297
297
|
why: docs/foundations.md#elevation */
|
|
298
298
|
:where(.ui-app.is-collapsed) .ui-app__rail .ui-nav__item:is(:hover, :focus-visible) > .ui-nav__label,
|
|
299
299
|
:where(.ui-app.is-collapsed) .ui-app__rail .ui-app__user-trigger:is(:hover, :focus-visible) > .ui-app__who,
|
|
300
|
-
.ui-app__rail .ui-app__fold:is(:hover, :focus-visible) > .ui-nav__label { position: fixed; left: calc(var(--ui-rail-w) + var(--space-2)); z-index: var(--z-dropdown); width: max-content; max-width: 15rem; margin-block: -7px; padding: 6px 10px; border: 1px solid var(--float-edge); box-shadow: inset 0 0 0 1px var(--elev-edge, var(--float-edge-inner)), var(--elev-drop); border-radius: var(--radius-xs); background: var(--surface); /*
|
|
300
|
+
.ui-app__rail .ui-app__fold:is(:hover, :focus-visible) > .ui-nav__label { position: fixed; left: calc(var(--ui-rail-w) + var(--space-2)); z-index: var(--z-dropdown); width: max-content; max-width: 15rem; margin-block: -7px; padding: 6px 10px; border: 1px solid var(--float-edge); box-shadow: inset 0 0 0 1px var(--elev-edge, var(--float-edge-inner)), var(--elev-drop); border-radius: var(--radius-xs); background: var(--surface); /* code-bg: inherit — decorative or text-only paint; nothing nested reads a ground from it. */ color: var(--strong); opacity: 1; pointer-events: none; }
|
|
301
301
|
@supports (anchor-name: --a) and (anchor-scope: --a) {
|
|
302
302
|
.ui-app.is-collapsed,
|
|
303
303
|
.ui-app:has(.ui-app__fold) { anchor-scope: --ui-rail; }
|
|
@@ -346,7 +346,7 @@
|
|
|
346
346
|
height: var(--ui-app-band);
|
|
347
347
|
flex: none;
|
|
348
348
|
padding-inline: clamp(24px, 4vw, 56px);
|
|
349
|
-
background: var(--bg); /*
|
|
349
|
+
background: var(--bg); /* code-bg: inherit — page background inherits root overrides. */
|
|
350
350
|
border-bottom: 1px solid var(--border);
|
|
351
351
|
/* Sticky for the reason the rail beside it is: chrome that scrolls away is chrome
|
|
352
352
|
you scroll back up for. */
|
|
@@ -382,7 +382,7 @@
|
|
|
382
382
|
color: var(--text);
|
|
383
383
|
/* The band search uses the same reading surface as other text controls.
|
|
384
384
|
why: docs/foundations.md#elevation */
|
|
385
|
-
background: var(--surface); /*
|
|
385
|
+
background: var(--surface); /* code-bg: inherit — control paint; the containing surface is the ground, for a chip and for a band alike. */
|
|
386
386
|
border: 1px solid var(--border);
|
|
387
387
|
border-radius: var(--radius-md);
|
|
388
388
|
cursor: pointer;
|
|
@@ -393,10 +393,10 @@
|
|
|
393
393
|
without `.ui-btn`, so base.css's shared rule never reached it and focus fell
|
|
394
394
|
through to the browser's own square outline, drawn around a 12px radius.
|
|
395
395
|
why: docs/foundations.md#the-focus-ring */
|
|
396
|
-
.ui-app__search:focus-visible { outline:
|
|
396
|
+
.ui-app__search:focus-visible { outline: var(--ring); outline-offset: var(--ring-offset); }
|
|
397
397
|
/* The same glyph the palette draws in its own search box, at the same box and the
|
|
398
398
|
same stroke: the trigger and the thing it opens are not two search marks.
|
|
399
|
-
src/styles/command-palette.css:
|
|
399
|
+
src/styles/command-palette.css:108 `.ui-cmdk__search-ic svg` */
|
|
400
400
|
.ui-app__search-ic { display: flex; flex: none; }
|
|
401
401
|
.ui-app__search-ic svg { width: 17px; height: 17px; stroke: currentColor; fill: none; stroke-width: 2.2; }
|
|
402
402
|
/* Part of the button's name, so it is squeezed rather than dropped: an ellipsis
|
|
@@ -488,7 +488,7 @@
|
|
|
488
488
|
.ui-app__rail .ui-nav__sub { margin-inline-start: 0; padding-inline-start: 0; border-inline-start-width: 0; }
|
|
489
489
|
.ui-app__rail .ui-nav__item:not(:has(.ui-nav__ic))::after { opacity: 0.62; }
|
|
490
490
|
.ui-app__rail .ui-nav__item.is-active { isolation: isolate; background: none; }
|
|
491
|
-
.ui-app__rail .ui-nav__item.is-active::before { content: ""; position: absolute; left: 0; top: 50%; width: var(--ui-nav-strip); height: 100%; border-radius: 10px; transform: translateY(-50%); /* motion: still — a mark on the current row, whose own highlight already transitions; this centres it, it does not travel */ background: var(--surface-3); /*
|
|
491
|
+
.ui-app__rail .ui-nav__item.is-active::before { content: ""; position: absolute; left: 0; top: 50%; width: var(--ui-nav-strip); height: 100%; border-radius: 10px; transform: translateY(-50%); /* motion: still — a mark on the current row, whose own highlight already transitions; this centres it, it does not travel */ background: var(--surface-3); /* code-bg: inherit — The plate contains no focus target. */ z-index: -1; }
|
|
492
492
|
.ui-app__rail .ui-nav__item:not(.is-danger):not(.is-active):hover { background: none; }
|
|
493
493
|
/* The one line of this block that is deliberately NOT the reader's fold: a finger
|
|
494
494
|
is the only pointer this width has, so a row and the account block are held to
|
|
@@ -497,7 +497,7 @@
|
|
|
497
497
|
.ui-app__rail .ui-nav__item,
|
|
498
498
|
.ui-app__rail .ui-app__user-trigger { min-height: 44px; }
|
|
499
499
|
.ui-app__rail .ui-nav__item:is(:hover, :focus-visible) > .ui-nav__label,
|
|
500
|
-
.ui-app__rail .ui-app__user-trigger:is(:hover, :focus-visible) > .ui-app__who { position: fixed; left: calc(var(--ui-rail-w) + var(--space-2)); z-index: var(--z-dropdown); width: max-content; max-width: 15rem; margin-block: -7px; padding: 6px 10px; border: 1px solid var(--float-edge); box-shadow: inset 0 0 0 1px var(--elev-edge, var(--float-edge-inner)), var(--elev-drop); border-radius: var(--radius-xs); background: var(--surface); /*
|
|
500
|
+
.ui-app__rail .ui-app__user-trigger:is(:hover, :focus-visible) > .ui-app__who { position: fixed; left: calc(var(--ui-rail-w) + var(--space-2)); z-index: var(--z-dropdown); width: max-content; max-width: 15rem; margin-block: -7px; padding: 6px 10px; border: 1px solid var(--float-edge); box-shadow: inset 0 0 0 1px var(--elev-edge, var(--float-edge-inner)), var(--elev-drop); border-radius: var(--radius-xs); background: var(--surface); /* code-bg: inherit — decorative or text-only paint; nothing nested reads a ground from it. */ color: var(--strong); opacity: 1; pointer-events: none; }
|
|
501
501
|
@supports (anchor-name: --a) and (anchor-scope: --a) {
|
|
502
502
|
.ui-app { anchor-scope: --ui-rail; }
|
|
503
503
|
.ui-app__rail { anchor-name: --ui-rail; }
|
|
@@ -532,7 +532,7 @@
|
|
|
532
532
|
/* Floats over a spotlit page, so it takes the floating step and the floating
|
|
533
533
|
treatment: the two-step edge in dark, the drop alone in light.
|
|
534
534
|
why: docs/foundations.md#elevation */
|
|
535
|
-
background: var(--bg-elevated);
|
|
535
|
+
background: var(--bg-elevated);
|
|
536
536
|
border: 1px solid var(--float-edge);
|
|
537
537
|
box-shadow: inset 0 0 0 1px var(--elev-edge, var(--float-edge-inner)), var(--elev-drop);
|
|
538
538
|
border-radius: 22px;
|
|
@@ -555,7 +555,7 @@
|
|
|
555
555
|
width: 38px; height: 38px; flex: none;
|
|
556
556
|
border-radius: 11px;
|
|
557
557
|
display: grid; place-items: center;
|
|
558
|
-
background: var(--glow-purple); /*
|
|
558
|
+
background: var(--glow-purple); /* code-bg: inherit — a wash paints over a ground and behind a chip, so the opaque ground below it is the step. */
|
|
559
559
|
color: var(--accent);
|
|
560
560
|
}
|
|
561
561
|
.ui-scope__icon svg { width: 21px; height: 21px; stroke: currentColor; fill: none; stroke-width: 1.8; }
|
|
@@ -576,7 +576,7 @@
|
|
|
576
576
|
font-size: calc(var(--text-xs) + 1px);
|
|
577
577
|
letter-spacing: 0.06em;
|
|
578
578
|
color: var(--purple-mid);
|
|
579
|
-
background: var(--glow-purple); /*
|
|
579
|
+
background: var(--glow-purple); /* code-bg: inherit — a wash paints over a ground and behind a chip, so the opaque ground below it is the step. */
|
|
580
580
|
border-radius: 999px;
|
|
581
581
|
padding: 6px 14px;
|
|
582
582
|
margin-bottom: 26px;
|
|
@@ -621,7 +621,7 @@
|
|
|
621
621
|
width: 46px; height: 46px;
|
|
622
622
|
border-radius: 13px;
|
|
623
623
|
display: grid; place-items: center;
|
|
624
|
-
background: var(--glow-purple); /*
|
|
624
|
+
background: var(--glow-purple); /* code-bg: inherit — a wash paints over a ground and behind a chip, so the opaque ground below it is the step. */
|
|
625
625
|
color: var(--accent);
|
|
626
626
|
margin-bottom: 16px;
|
|
627
627
|
}
|
package/src/styles/loading.css
CHANGED
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
display: grid;
|
|
100
100
|
place-items: center;
|
|
101
101
|
/* muted-ink: glyph — permission seal */ color: var(--dim);
|
|
102
|
-
background: color-mix(in srgb, var(--text) 7%, transparent); /*
|
|
102
|
+
background: color-mix(in srgb, var(--text) 7%, transparent); /* code-bg: inherit — decorative paint has no nested focus target. */
|
|
103
103
|
}
|
|
104
104
|
.ui-denied__seal svg {
|
|
105
105
|
width: 20px;
|