@apliteni/apliteni-ui 0.35.0 → 0.37.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.
@@ -14,15 +14,15 @@
14
14
  border: 0;
15
15
  cursor: pointer;
16
16
  font: 600 calc(var(--text-base) - 0.5px)/1 var(--font-sans);
17
- color: var(--dim);
17
+ color: var(--text);
18
18
  padding: 11px 14px;
19
19
  border-bottom: 2px solid transparent;
20
20
  margin-bottom: -1px;
21
21
  transition: color var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease);
22
22
  }
23
- .ui-tabs__tab:hover { color: var(--text); }
23
+ .ui-tabs__tab:hover { color: var(--strong); }
24
24
  .ui-tabs__tab.is-active { color: var(--strong); border-bottom-color: var(--accent); }
25
- .ui-tabs__tab:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 7px 7px 0 0; }
25
+ .ui-tabs__tab:focus-visible { outline: 2px solid transparent; box-shadow: var(--ring); border-radius: 7px 7px 0 0; }
26
26
 
27
27
  .ui-tabs__panels { padding-top: 20px; }
28
28
  .ui-tabs__panel[hidden] { display: none; }
@@ -31,4 +31,4 @@
31
31
  .ui-tabs__panel.is-entering { animation: m-fade var(--dur-fast) var(--ease-out) both; }
32
32
  /* The panel is focusable (tabindex="0", see tabs.js) so a keyboard user can
33
33
  reach text-only content. Show the ring when they land on it. */
34
- .ui-tabs__panel:focus-visible { outline: 2px solid var(--accent); outline-offset: 4px; border-radius: 8px; }
34
+ .ui-tabs__panel:focus-visible { outline: 2px solid transparent; box-shadow: var(--ring); border-radius: 8px; }
@@ -25,7 +25,7 @@
25
25
  width: max-content;
26
26
  max-width: var(--prose-caption);
27
27
  padding: var(--space-2) var(--space-3);
28
- background: var(--ui-tip-bg);
28
+ background: var(--ui-tip-bg); /* ring-gap: inherit — decorative or text-only surface has no nested focus target. */
29
29
  /* The two-step edge and the drop: --border-strong outside, --border one pixel
30
30
  inside it, then the broad faint drop. why: docs/specification.md#elevation */
31
31
  border: 1px solid var(--border-strong);
@@ -57,11 +57,11 @@
57
57
 
58
58
  .ui-tip.is-open { opacity: 1; visibility: visible; }
59
59
 
60
- .ui-tip__label { color: var(--muted); }
60
+ .ui-tip__label { color: var(--text); }
61
61
  .ui-tip__value {
62
62
  font-size: var(--text-sm);
63
63
  font-weight: var(--weight-semibold);
64
64
  color: var(--strong);
65
65
  font-variant-numeric: tabular-nums;
66
66
  }
67
- .ui-tip__detail { color: var(--dim); font-variant-numeric: tabular-nums; }
67
+ .ui-tip__detail { color: var(--text); font-variant-numeric: tabular-nums; }
@@ -9,7 +9,7 @@
9
9
  height: 52px;
10
10
  display: flex;
11
11
  align-items: center;
12
- background: var(--bg);
12
+ background: var(--bg); /* ring-gap: inherit — page background inherits root overrides. */
13
13
  border-bottom: 1px solid var(--border);
14
14
  }
15
15
  .topbar__in {
@@ -48,7 +48,7 @@
48
48
  display: none;
49
49
  align-items: center;
50
50
  gap: 2px;
51
- background: var(--surface-2);
51
+ background: var(--surface-2); --ring-gap: var(--surface-2);
52
52
  border: 1px solid var(--border);
53
53
  border-radius: 24px;
54
54
  padding: 3px;
@@ -60,13 +60,13 @@
60
60
  font-size: calc(var(--text-xs) + 1px);
61
61
  font-weight: 600;
62
62
  letter-spacing: 0.04em;
63
- color: var(--muted);
63
+ color: var(--text);
64
64
  padding: 4px 13px;
65
65
  border-radius: 24px;
66
66
  transition: color var(--dur-fast) var(--ease), background var(--dur-fast) var(--ease);
67
67
  }
68
- .dtsw a:hover { color: var(--text); }
69
- .dtsw a.cur { color: var(--strong); background: var(--surface); }
68
+ .dtsw a:hover { color: var(--strong); }
69
+ .dtsw a.cur { color: var(--strong); background: var(--surface); /* ring-gap: inherit — control paint; its focus indicator uses the containing surface. */ }
70
70
 
71
71
  /* Theme toggle — a single icon-only switch (no label). */
72
72
  .toggle {
@@ -75,7 +75,7 @@
75
75
  width: 34px;
76
76
  height: 34px;
77
77
  cursor: pointer;
78
- background: var(--surface);
78
+ background: var(--surface); /* ring-gap: inherit — control paint; its focus indicator uses the containing surface. */
79
79
  color: var(--text);
80
80
  border: 1px solid var(--border);
81
81
  border-radius: 10px;
@@ -100,14 +100,14 @@
100
100
  font-size: calc(var(--text-sm) - 0.5px);
101
101
  font-weight: 500;
102
102
  color: var(--text);
103
- background: var(--surface);
103
+ background: var(--surface); /* ring-gap: inherit — control paint; its focus indicator uses the containing surface. */
104
104
  border: 1px solid var(--border);
105
105
  border-radius: 24px;
106
106
  padding: 7px 11px 7px 13px;
107
107
  transition: border-color var(--dur-fast) var(--ease), background var(--dur-fast) var(--ease);
108
108
  }
109
109
  .vsw__btn:hover { border-color: var(--accent); }
110
- .vsw__btn .lbl { color: var(--muted); }
110
+ .vsw__btn .lbl { color: var(--text); }
111
111
  .vsw__btn .cur { color: var(--strong); font-weight: 600; letter-spacing: 0.01em; }
112
112
  .vsw__btn .car {
113
113
  width: 8px; height: 8px;
@@ -122,7 +122,7 @@
122
122
  top: calc(100% + 9px);
123
123
  left: 0;
124
124
  min-width: 266px;
125
- background: var(--bg-elevated); /* the floating step — see dropdown.css. #295 */
125
+ background: var(--bg-elevated); --ring-gap: var(--bg-elevated); /* the floating step — see dropdown.css. #295 */
126
126
  /* The two-step edge and the drop: --border-strong outside, --border one pixel
127
127
  inside it, then the broad faint drop. why: docs/specification.md#elevation */
128
128
  border: 1px solid var(--border-strong);
@@ -182,9 +182,9 @@
182
182
  /* The menu is raised, so a hovered row takes the step ABOVE it — see
183
183
  src/styles/dropdown.css:155 `.ui-dropdown__item:hover`.
184
184
  why: docs/specification.md#elevation */
185
- .vopt:hover { background: var(--surface-3); }
185
+ .vopt:hover { background: var(--surface-3); /* ring-gap: inherit — control paint; its focus indicator uses the containing surface. */ }
186
186
  .vopt .vname { font-family: var(--font-sans); font-size: calc(var(--text-sm) - 0.5px); color: var(--strong); font-weight: 600; letter-spacing: 0.01em; }
187
- .vopt .vmeta { font-size: var(--text-xs); color: var(--muted); margin-top: 2px; }
187
+ .vopt .vmeta { font-size: var(--text-xs); color: var(--text); margin-top: 2px; }
188
188
  .vopt .vbadge {
189
189
  /* rank: chip */
190
190
  font-size: var(--text-xs);
@@ -195,8 +195,8 @@
195
195
  flex: none;
196
196
  margin-top: 1px;
197
197
  }
198
- .vbadge.live { color: var(--chip-success-ink); background: var(--chip-success-fill); }
199
- .vbadge.arch { color: var(--muted); background: var(--surface-3); }
198
+ .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. */ }
199
+ .vbadge.arch { /* muted-ink: state — archived version */ color: var(--muted); background: var(--surface-3); /* ring-gap: inherit — decorative or text-only surface has no nested focus target. */ }
200
200
  /* The switcher keeps its glyph and drops its label where the shell folds — the
201
201
  same step the rail folds at: docs/specification.md#breakpoints. */
202
202
  @media (max-width: 720px) { .vsw__btn .lbl { display: none; } }
@@ -225,7 +225,7 @@
225
225
  position: absolute;
226
226
  right: 0; top: 44px;
227
227
  width: 252px;
228
- background: var(--bg-elevated); /* the floating step — see dropdown.css. #295 */
228
+ background: var(--bg-elevated); --ring-gap: var(--bg-elevated); /* the floating step — see dropdown.css. #295 */
229
229
  /* The two-step edge and the drop: --border-strong outside, --border one pixel
230
230
  inside it, then the broad faint drop. why: docs/specification.md#elevation */
231
231
  border: 1px solid var(--border-strong);
@@ -256,11 +256,11 @@
256
256
  .amenu .ahead .avatar { cursor: default; }
257
257
  .amenu .ahead .aw { min-width: 0; display: flex; flex-direction: column; gap: 1px; line-height: 1.35; }
258
258
  .amenu .ahead .anm { color: var(--strong); font-size: var(--text-sm); font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
259
- .amenu .ahead .aem { color: var(--muted); font-size: calc(var(--text-xs) + 0.5px); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
259
+ .amenu .ahead .aem { color: var(--text); font-size: calc(var(--text-xs) + 0.5px); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
260
260
  .amenu a { display: flex; align-items: center; gap: 11px; padding: 10px 15px; color: var(--text); text-decoration: none; font-family: var(--font-sans); font-size: var(--text-sm); cursor: pointer; }
261
- .amenu a:hover { background: var(--surface-3); }
261
+ .amenu a:hover { background: var(--surface-3); /* ring-gap: inherit — control paint; its focus indicator uses the containing surface. */ }
262
262
  .amenu a.cur { color: var(--accent); }
263
263
  .amenu a svg { width: 19px; height: 19px; flex: none; stroke: currentColor; fill: none; stroke-width: 2; opacity: 0.85; }
264
264
  .amenu .asep { height: 1px; background: var(--border); margin: 5px 0; }
265
- .amenu a.aout { color: var(--muted); }
265
+ .amenu a.aout { color: var(--text); }
266
266
  .amenu a.aout:hover { color: var(--pink); }
@@ -172,7 +172,7 @@
172
172
  --disabled-ink-bare: #a39eb7;
173
173
 
174
174
  /* Lifted from #9b5dff, which cleared the flat surfaces and failed on its own wash over
175
- a card; the value was already in the ramp. --ring is var(--accent) and follows by
175
+ a card; the value was already in the ramp. --ring-color is var(--accent) and follows by
176
176
  reference. Held by stories/accent-contrast.test.js. #157.
177
177
  why: docs/specification.md#colour-and-contrast */
178
178
  --accent: #b479ff;
@@ -229,12 +229,12 @@
229
229
  --shadow-lg: 0 0 #0000;
230
230
  --shadow-seg: 0 0 #0000;
231
231
  --shadow-card: 0 0 #0000;
232
- /* THE ONLY --ring in the kit — light and every data-accent sub-theme declare an
233
- --accent and inherit this line. Opaque because a translucent ring is a glow, and the
234
- eight rgba() literals it replaced all missed WCAG 1.4.11's 3:1 (#218). Held by
235
- stories/guidelines/accessibility-floor.test.js.
236
- why: docs/specification.md#the-focus-ring */
237
- --ring: 0 0 0 3px var(--accent);
232
+ /* G2: the band carries contrast; the halo decorates it. why: docs/specification.md#the-focus-ring */
233
+ --ring-width: 2px;
234
+ --ring-color: var(--accent);
235
+ --ring-gap-width: 1px;
236
+ --ring-gap: var(--bg);
237
+ --ring: 0 0 0 var(--ring-gap-width) var(--ring-gap), 0 0 0 calc(var(--ring-gap-width) + var(--ring-width)) var(--ring-color), 0 0 12px 2px color-mix(in srgb, var(--ring-color) 45%, transparent);
238
238
 
239
239
  /* The ink a cast shadow is made of, and the specular white that reads as gloss on a
240
240
  raised surface. Effects mix these instead of writing rgba(). */
@@ -405,3 +405,45 @@
405
405
  --prose-body: 62ch;
406
406
  --prose-dense: 72ch;
407
407
  }
408
+
409
+ /* Recompose only at painted containers; controls inherit the outside gap.
410
+ * One recipe keeps surface propagation cheap and consistent.
411
+ * why: docs/specification.md#the-focus-ring */
412
+ .amenu,
413
+ .dtsw,
414
+ .rx-modal,
415
+ .ui-app__rail,
416
+ .ui-auth__card,
417
+ .ui-callout,
418
+ .ui-card,
419
+ .ui-card--accent,
420
+ .ui-card--live,
421
+ .ui-cmdk__panel,
422
+ .ui-code,
423
+ .ui-confirm__panel,
424
+ .ui-drawer__footer,
425
+ .ui-drawer__panel,
426
+ .ui-dropdown__panel,
427
+ .ui-fbcomposer,
428
+ .ui-footer--app,
429
+ .ui-seg,
430
+ .ui-snippet,
431
+ .ui-snippet--reveal,
432
+ .ui-sx,
433
+ .ui-table--hover:not(.ui-table--zebra) tbody tr:hover td,
434
+ .ui-table--zebra tbody tr:nth-child(even) td,
435
+ .ui-table--zebra tbody tr:hover td,
436
+ .ui-table--zebra.ui-table--hover tbody tr:hover td,
437
+ .ui-toast--outline,
438
+ .ui-toast--solid,
439
+ .vsw__menu {
440
+ --ring: 0 0 0 var(--ring-gap-width) var(--ring-gap), 0 0 0 calc(var(--ring-gap-width) + var(--ring-width)) var(--ring-color), 0 0 12px 2px color-mix(in srgb, var(--ring-color) 45%, transparent);
441
+ }
442
+
443
+ /* A container focused itself paints outside its own surface; descendants only
444
+ * inherit its inside gap again after focus moves to them. */
445
+ .ui-card:focus-visible,
446
+ .ui-cmdk__panel:focus-visible,
447
+ .ui-confirm__panel:focus-visible,
448
+ .ui-drawer__panel:focus-visible,
449
+ .rx-modal:focus-visible { --ring-gap: inherit; }