@flyos/design-system 3.12.0 → 3.13.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flyos/design-system",
3
- "version": "3.12.0",
3
+ "version": "3.13.0",
4
4
  "description": "FlyOS design system — shared components, directives, pipes, services, and models for Business App developers.",
5
5
  "keywords": [
6
6
  "flyos",
@@ -226,6 +226,33 @@ html.light-theme {
226
226
  --w02: rgb(0 0 0 / 2.2%);
227
227
  --w015: rgb(0 0 0 / 1.8%);
228
228
 
229
+ // ── Embedded-app plate ─────────────────────────────────────────────────────
230
+ // The three surface steps `_shell-embed-bridge.scss` hands to a feature app
231
+ // running inside a shell window (`--bg-2` / `--bg-hover` / `--bg-3`). They are
232
+ // a token, not a `--w*` pick, because the ramp is the WRONG family here and
233
+ // only this theme shows it.
234
+
235
+ // A `--w*` step is an ink wash on paper the theme already owns. An embedded
236
+ // app's paper is a TRANSLUCENT window plate over the user's wallpaper — in
237
+ // this theme `rgb(255 255 255 / 60%)`, which passes a great deal of the
238
+ // photograph through. Washing 3% black over that does not make a card: it
239
+ // makes a marginally darker patch of wallpaper, so the card edge disappears
240
+ // and every accent on it (icon tiles, chips, cover art) competes with whatever
241
+ // colour the photo happens to put behind it. Measured on the Help Center
242
+ // guide grid: `--bg-2` resolved to `rgba(0,0,0,0.03)` and the cards read as
243
+ // wallpaper. Dark mode never showed it because there a 3% WHITE lift sits on
244
+ // a near-opaque dark plate and reads immediately.
245
+
246
+ // So in this theme a lift moves TOWARD the paper's own colour — white — which
247
+ // both restores the card edge and gives the wallpaper less say in the app's
248
+ // palette. The dark block keeps the ramp: see the note there.
249
+
250
+ // Ordering is `plate < plate-hover < plate-raised`, mirroring the dark
251
+ // block's `--w03 < --w05 < --w06`.
252
+ --embed-plate: rgb(255 255 255 / 55%);
253
+ --embed-plate-hover: rgb(255 255 255 / 68%);
254
+ --embed-plate-raised: rgb(255 255 255 / 78%);
255
+
229
256
  // ── Materials ──────────────────────────────────────────────────────────────
230
257
  // Each material is a two-part token on purpose: a per-material alpha knob and
231
258
  // a colour composed from it. `WallpaperGlassService` already samples the
@@ -423,6 +450,16 @@ html.dark-theme {
423
450
  --w02: rgb(255 255 255 / 2%);
424
451
  --w015: rgb(255 255 255 / 1.5%);
425
452
 
453
+ // ── Embedded-app plate ─────────────────────────────────────────────────────
454
+ // Aliases the ramp, deliberately. Here the window plate is a near-opaque dark
455
+ // material, so a white lift IS the canon lift (MainContent.dc.html: a `--w03`
456
+ // plate with `--w06` header bars and `--w05` row hover) and the wallpaper is
457
+ // already muted to the point where it cannot colour the app. The light block
458
+ // carries the rationale for why that reasoning does not survive the flip.
459
+ --embed-plate: var(--w03);
460
+ --embed-plate-hover: var(--w05);
461
+ --embed-plate-raised: var(--w06);
462
+
426
463
  // ── Materials ──────────────────────────────────────────────────────────────
427
464
  // Same two-part shape as the light block. The menu gradient stops are opaque
428
465
  // in this theme (`#201f25` / `#1a191e`); they are expressed as alpha-1 rgb so
@@ -44,10 +44,19 @@
44
44
  // side-by-side with the design shows. The ramp flips polarity per theme
45
45
  // (white-lift on dark glass, ink-wash on light), which is also what the
46
46
  // design's own components do — they never branch on theme.
47
+
48
+ // CORRECTED: the ramp step is right in DARK and wrong in LIGHT, so the three
49
+ // lifts now go through `--embed-plate*` (declared per theme in
50
+ // `_nova-tokens.scss`), which aliases the ramp in dark and moves toward the
51
+ // plate's own white in light. The reason is written at the light declaration:
52
+ // an ink wash on a 60%-white translucent plate is a darker patch of WALLPAPER,
53
+ // not a card, which is what made the Help Center guide grid read as a
54
+ // photograph in light mode while dark mode looked correct. Same shape of
55
+ // light-mode-only failure this whole file exists for.
47
56
  --bg: transparent;
48
- --bg-2: var(--w03);
49
- --bg-3: var(--w06);
50
- --bg-hover: var(--w05);
57
+ --bg-2: var(--embed-plate);
58
+ --bg-3: var(--embed-plate-raised);
59
+ --bg-hover: var(--embed-plate-hover);
51
60
 
52
61
  // Hairlines. `--line`/`--line-2` stay on the chrome separators (14% ≈ the
53
62
  // design's `--w14` CONTROL border — FormField.dc.html inputs), which is the
@@ -69,33 +78,32 @@
69
78
 
70
79
  // CONTRACT (`_app-surface-tokens.scss`): anything that redefines `--ink` MUST
71
80
  // redefine `--on-ink`, and it must be OPAQUE. `--on-ink` labels a fill of
72
- // `--ink` itself — the primary button. Above we pin `--ink` to the shell's
73
- // white label ink in BOTH themes, so its counter-ink is a fixed DARK value in
74
- // both. It cannot alias a shell token: the shell is glass and owns no
75
- // dark-opaque ink. This literal is the same value `--ink` carries in the
76
- // app-surface light theme, i.e. the colour a white pill is designed to label.
81
+ // `--ink` itself — the primary button.
82
+
83
+ // THE FLIP THE NOTE BELOW WARNED ABOUT HAS LANDED, AND THIS LINE IS NOW THE
84
+ // FIX RATHER THAN THE PREDICTION. `--label-primary` is no longer white in both
85
+ // themes: `_theme-light.scss` carries `rgb(17 24 39 / 92%)` dark ink so
86
+ // the fixed dark literal this line used to hold made every
87
+ // `background: var(--ink); color: var(--on-ink)` pair DARK ON DARK in light
88
+ // mode. Measured live inside `.hc-shell` on `html.light-theme`: fill
89
+ // `rgba(17,24,39,0.92)` against label `oklch(0.18 0.005 250)` — about 1.05:1,
90
+ // the same ~1:1 pair this file has now shipped twice, in the opposite
91
+ // direction. The flip value is the one the note already named.
77
92
 
78
93
  // `app-surface-conventions.spec.ts` can only police the DS token file itself;
79
94
  // its doc says consumers that remap `--ink` "carry the same obligation".
80
95
  // Routing every consumer through this mixin is how that obligation is met.
81
96
  // (`app-surface-nova-bridge.spec.ts` extends that gate to THIS file.)
82
97
 
83
- // AT THE DS 2.0 FLIP THIS LINE MUST CHANGE — it is the one value in this mixin
84
- // that does not follow the shell automatically. The premise above ("`--ink` is
85
- // the shell's white label ink in BOTH themes") holds only while light chrome is
86
- // the vibrancy smoked plate. Nova's light chrome is genuinely light with
87
- // DARK ink (`--chrome-ink: #353537`; design `--ink` light `#000`, folded into
88
- // `--label-primary` per D1), so post-flip `--ink` flips per theme here too and
89
- // a single dark literal is wrong in light modethe same white-slab failure,
90
- // arriving from the opposite side.
91
-
92
- // The flip value is `var(--check-ink)`: Nova's only counter-ink that flips the
93
- // right way (`#fff` light, `#0f1013` dark), which is exactly "the ink on a
94
- // plate that carries the theme's own primary ink". Do NOT reach for a `--w*`
95
- // step — the ramp flips polarity (`--w95` is 95% black in light, 95% WHITE in
96
- // dark), so no step is a counter-ink in both themes; and do NOT reach for
97
- // `--on-accent`, which is `#fff` in both and therefore right only in light.
98
- --on-ink: oklch(18% 0.005 250deg);
98
+ // `var(--check-ink)` is Nova's only counter-ink that flips the right way
99
+ // (`#fff` light, `#0f1013` dark), which is exactly "the ink on a plate that
100
+ // carries the theme's own primary ink". Do NOT reach for a `--w*` step the
101
+ // ramp flips polarity (`--w95` is 95% black in light, 95% WHITE in dark), so
102
+ // no step is a counter-ink in both themes; and do NOT reach for `--on-accent`,
103
+ // which is `#fff` in both and therefore right only in light. Both values are
104
+ // opaque hex, which is the other half of the contract a translucent label
105
+ // composites into its own fill and disappears.
106
+ --on-ink: var(--check-ink);
99
107
 
100
108
  // `--ink-inverse` carries the SAME obligation as `--on-ink` and was missed.
101
109