@orianatech/pire 1.1.0 → 1.3.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.
@@ -42,6 +42,11 @@
42
42
  both themes and always want light text, while the status fills invert (red-60 in light,
43
43
  red-30 in dark) and so want the opposite. Sharing one token put white on light pink at 1.94:1. */
44
44
  --text-on-status:var(--gray-0);
45
+ /* Muted text on the permanently dark ground — the shell bar's company name, the rail's resting
46
+ glyphs. Separate from `--text-inverse` for the reason `--text-on-status` is separate: a second
47
+ weight on the shell cannot be derived from `--text-secondary`, which is tuned for light surfaces
48
+ and resolved to gray-70 there. Reaching for it here is how the shell got near-black on near-black. */
49
+ --text-inverse-secondary:var(--gray-30);
45
50
  --text-link:var(--blue-60);--text-link-hover:var(--blue-70);--text-label:var(--gray-70);
46
51
  --text-numeric:var(--gray-90);
47
52
 
@@ -51,11 +56,23 @@
51
56
  --surface-selected:var(--blue-10);--surface-disabled:var(--gray-10);
52
57
  --surface-shell:var(--blue-90);--surface-shell-hover:var(--blue-80);
53
58
  --surface-nav:var(--gray-0);--surface-toolbar:var(--gray-05);--surface-overlay:rgba(13,19,25,.5);
59
+ /* The application rail: a second permanently dark band, below the shell bar and beside the nav.
60
+ Aliased off the shell rather than merged into it — the two are separate landmarks and a product
61
+ may want the rail a shade apart — but they start identical so a default shell reads as one piece. */
62
+ --surface-rail:var(--surface-shell);--surface-rail-hover:var(--surface-shell-hover);
63
+ /* A selected rail tile carries a fill *and* a ring. The fill alone is 1.64:1 against the rail, which
64
+ is nowhere near the 3:1 WCAG 1.4.11 asks of a state indicator; `--border-rail-selected` is the part
65
+ that actually clears it (4.89:1 light, 3.92:1 dark). Do not drop the ring to "simplify" the tile. */
66
+ --surface-rail-selected:var(--blue-70);
54
67
 
55
68
  /* --- Borders ---------------------------------------------------------- */
56
69
  --border-subtle:var(--gray-20);--border-default:var(--gray-30);--border-strong:var(--gray-50);
57
70
  --border-field:var(--gray-50);--border-focus:var(--blue-60);--border-accent:var(--blue-60);
58
71
  --border-inverse:rgba(255,255,255,.24);
72
+ /* Rail furniture. `--border-rail` separates the rail's zones and is decorative, like the SideNav's
73
+ own group rule; `--border-rail-selected` is the selected tile's inset ring and is a state
74
+ indicator, so it owes 3:1 against `--surface-rail` and is asserted in tokens.contrast.test.ts. */
75
+ --border-rail:var(--blue-70);--border-rail-selected:var(--blue-40);
59
76
 
60
77
  /* --- Interactive (accent) --------------------------------------------- */
61
78
  --accent-bg:var(--blue-60);--accent-bg-hover:var(--blue-70);--accent-bg-active:var(--blue-80);
@@ -10,6 +10,9 @@
10
10
 
11
11
  /* Shell geometry (fixed chrome) */
12
12
  --shell-header-h:48px;--shell-subheader-h:40px;--sidenav-w:256px;--sidenav-w-collapsed:48px;
13
+ /* The application rail, and the shell bar's launcher button that sits directly above it. One
14
+ token for both: the launcher stops looking like the rail's cap the moment they disagree. */
15
+ --rail-w:56px;
13
16
  --page-pad-x:24px;--page-pad-y:20px;--section-gap:24px;
14
17
 
15
18
  /* 16-column layout grid */
@@ -15,6 +15,11 @@
15
15
  --surface-selected:var(--blue-90);--surface-disabled:var(--gray-80);
16
16
  --surface-shell:#04101f;--surface-shell-hover:var(--blue-90);
17
17
  --surface-nav:var(--gray-90);--surface-toolbar:var(--gray-90);--surface-overlay:rgba(4,16,31,.66);
18
+ /* The rail follows the shell down, but its selected fill does not: `--blue-70` on the near-black
19
+ dark shell reads as a lit panel rather than a selection, so the fill steps back one and the ring
20
+ steps forward one to keep the pair legible. */
21
+ --surface-rail-selected:var(--blue-80);
22
+ --border-rail:var(--blue-80);--border-rail-selected:var(--blue-50);
18
23
  --border-subtle:#28333d;--border-default:var(--gray-70);--border-strong:var(--gray-50);
19
24
  --border-field:var(--gray-50);--border-focus:var(--blue-30);--border-accent:var(--blue-30);
20
25
  /* Hover and press deepen here rather than lighten, the same direction as the light theme. Going
@@ -38,7 +43,11 @@
38
43
  /* Accessibility scope: 3:1 non-text contrast on every control edge.
39
44
  Tertiary darkens alongside secondary here — it did not before, which left the
40
45
  scope's lightest text at the same value as the default theme's. */
41
- [data-contrast="high"]{--border-subtle:var(--gray-50);--border-default:var(--gray-70);--border-field:var(--gray-80);--text-secondary:var(--gray-80);--text-tertiary:var(--gray-70)}
46
+ /* `--text-inverse-secondary` and the rail furniture move the opposite way to everything else in
47
+ this block: they sit on a ground that is dark in both themes, so "more contrast" means
48
+ lighter. Setting them here rather than in the two theme blocks is deliberate — this
49
+ selector has the same specificity and comes later, so it wins in dark as well as light. */
50
+ [data-contrast="high"]{--border-subtle:var(--gray-50);--border-default:var(--gray-70);--border-field:var(--gray-80);--text-secondary:var(--gray-80);--text-tertiary:var(--gray-70);--text-inverse-secondary:var(--gray-10);--border-rail:var(--gray-50);--border-rail-selected:var(--gray-30)}
42
51
 
43
52
  /* The high-contrast scope above darkens text, which is only correct on a light ground. Combined
44
53
  with the dark theme it inverted the intent: `--text-secondary` resolved to gray-80, the same
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orianatech/pire",
3
- "version": "1.1.0",
3
+ "version": "1.3.0",
4
4
  "description": "Oriana Pire Design System — React components for ERP interfaces, built on React Aria.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {