@flyos/design-system 3.10.0 → 3.12.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.10.0",
3
+ "version": "3.12.0",
4
4
  "description": "FlyOS design system — shared components, directives, pipes, services, and models for Business App developers.",
5
5
  "keywords": [
6
6
  "flyos",
@@ -151,12 +151,12 @@
151
151
  :root,
152
152
  html.light-theme {
153
153
  // ── Neutrals — text ──────────────────────────────────────────────────────
154
- --ink: oklch(18% 0.005 250deg); // primary text, primary button fills
155
- --ink-2: oklch(32% 0.005 250deg); // secondary text
156
- --ink-3: oklch(50% 0.005 250deg); // tertiary text, icons
157
- --ink-4: oklch(65% 0.005 250deg); // disabled, muted labels
158
- --ink-inverse: oklch(99% 0 0deg); // text on dark / gradient fills
159
- --ink-hover: oklch(28% 0.005 250deg); // hover shade of --ink-filled controls
154
+ --ink: oklch(18% 0.005 250deg); // primary text, primary button fills
155
+ --ink-2: oklch(32% 0.005 250deg); // secondary text
156
+ --ink-3: oklch(50% 0.005 250deg); // tertiary text, icons
157
+ --ink-4: oklch(65% 0.005 250deg); // disabled, muted labels
158
+ --ink-inverse: oklch(99% 0 0deg); // text on dark / gradient fills
159
+ --ink-hover: oklch(28% 0.005 250deg); // hover shade of --ink-filled controls
160
160
 
161
161
  // Label for a fill of `--ink` itself (the primary button). Distinct from
162
162
  // `--ink-inverse`, which is a FIXED near-white for coloured/gradient fills and
@@ -169,14 +169,14 @@ html.light-theme {
169
169
  --on-ink: var(--ink-inverse);
170
170
 
171
171
  // ── Neutrals — borders ───────────────────────────────────────────────────
172
- --line: oklch(92% 0.004 250deg); // default borders
173
- --line-2: oklch(88% 0.004 250deg); // hover borders
174
- --line-3: oklch(96% 0.003 250deg); // inner row dividers
172
+ --line: oklch(92% 0.004 250deg); // default borders
173
+ --line-2: oklch(88% 0.004 250deg); // hover borders
174
+ --line-3: oklch(96% 0.003 250deg); // inner row dividers
175
175
 
176
176
  // ── Surfaces (opaque by design — see the header note) ────────────────────
177
- --bg: oklch(98.5% 0.003 100deg); // app background (warm off-white)
178
- --bg-2: oklch(100% 0 0deg); // cards, table
179
- --bg-3: oklch(97% 0.004 100deg); // sidebar, table header
177
+ --bg: oklch(98.5% 0.003 100deg); // app background (warm off-white)
178
+ --bg-2: oklch(100% 0 0deg); // cards, table
179
+ --bg-3: oklch(97% 0.004 100deg); // sidebar, table header
180
180
  --bg-hover: oklch(96% 0.005 250deg);
181
181
 
182
182
  // ── Brand primitives ─────────────────────────────────────────────────────
@@ -188,11 +188,7 @@ html.light-theme {
188
188
  oklch(60% 0.19 305deg),
189
189
  oklch(45% 0.2 285deg)
190
190
  );
191
- --grad-soft: linear-gradient(
192
- 135deg,
193
- oklch(74% 0.13 195deg / 12%),
194
- oklch(55% 0.18 295deg / 12%)
195
- );
191
+ --grad-soft: linear-gradient(135deg, oklch(74% 0.13 195deg / 12%), oklch(55% 0.18 295deg / 12%));
196
192
 
197
193
  // ── Accent plate/ink PAIRS ───────────────────────────────────────────────
198
194
  // NEVER paint --accent on an --accent-soft plate: that is purple-on-purple,
@@ -239,10 +235,10 @@ html.light-theme {
239
235
  // ── Icon size ramp ───────────────────────────────────────────────────────
240
236
  // ONE scale for every icon (PrimeIcons + inline SVG). Icons had drifted to
241
237
  // ~13 different sizes, which is why they never lined up beside each other.
242
- --icon-xs: 12px; // dense meta rows, chips
243
- --icon-sm: 14px; // text buttons, section-header actions
244
- --icon-md: 16px; // default — icon buttons, rails, nav
245
- --icon-lg: 20px; // emphasis / empty states
238
+ --icon-xs: 12px; // dense meta rows, chips
239
+ --icon-sm: 14px; // text buttons, section-header actions
240
+ --icon-md: 16px; // default — icon buttons, rails, nav
241
+ --icon-lg: 20px; // emphasis / empty states
246
242
 
247
243
  // ── Status chips (workflow-generic) ──────────────────────────────────────
248
244
  --st-published: oklch(55% 0.13 165deg);
@@ -273,6 +269,20 @@ html.light-theme {
273
269
  --scrim: rgb(0 0 0 / 50%);
274
270
  --glass-blur: 24px;
275
271
 
272
+ // ── Module-card teal (app-home fidelity pass, 2026-08-20) ────────────────
273
+ // The launch-card family (`.ah__card--feature` tile, hover wash, hover ring)
274
+ // is deliberately THEME-FIXED — decoupled from the running `--accent` and
275
+ // from `--sys-teal`'s per-theme flip. Since the app-brand cascade (3.12.0)
276
+ // this pair is the FALLBACK: `fly-app-home` prefers a cascaded
277
+ // `--app-color`/`--app-color-deep` (published by the shell window from the
278
+ // app's authored brand colour), and renders this fixed teal only where no
279
+ // app colour cascades in. Consumers derive the design's alphas via
280
+ // color-mix; only these two literals exist (conventions-spec rule: raw
281
+ // colour values live in this file alone). Declared once in `:root`, no
282
+ // dark-scope redefinition, same as `--ink-inverse`.
283
+ --module-teal: #2896a0;
284
+ --module-teal-deep: #105a5a;
285
+
276
286
  // ── Spacing scale (4px base) ─────────────────────────────────────────────
277
287
  --sp-1: 4px;
278
288
  --sp-2: 8px;
@@ -284,17 +294,17 @@ html.light-theme {
284
294
  --sp-8: 56px;
285
295
 
286
296
  // ── Typography scale ─────────────────────────────────────────────────────
287
- --text-2xs: 11.5px; // field labels, field errors, footer hints
288
- --text-xs: 11px; // eyebrows, badges, metric labels
289
- --text-sm: 12.5px; // meta, hints, crumbs
290
- --text-md: 13.5px; // body in cards, subtitles
291
- --text-base: 14px; // controls, table body
292
- --text-lg: 16px; // page body
293
- --text-xl: 18px; // card titles, dialog titles
294
- --text-2xl: 28px; // detail page h1
295
- --text-3xl: 32px; // listing page h1
297
+ --text-2xs: 11.5px; // field labels, field errors, footer hints
298
+ --text-xs: 11px; // eyebrows, badges, metric labels
299
+ --text-sm: 12.5px; // meta, hints, crumbs
300
+ --text-md: 13.5px; // body in cards, subtitles
301
+ --text-base: 14px; // controls, table body
302
+ --text-lg: 16px; // page body
303
+ --text-xl: 18px; // card titles, dialog titles
304
+ --text-2xl: 28px; // detail page h1
305
+ --text-3xl: 32px; // listing page h1
296
306
  --text-display: 44px; // hero title
297
- --fw-book: 450; // between regular and medium (segmented buttons)
307
+ --fw-book: 450; // between regular and medium (segmented buttons)
298
308
  --fw-medium: 500;
299
309
  --fw-semibold: 600;
300
310
  --fw-bold: 700;
@@ -312,10 +322,10 @@ html.light-theme {
312
322
  --font-mono: var(--font-sans);
313
323
 
314
324
  // ── Radii ────────────────────────────────────────────────────────────────
315
- --r-sm: 6px; // icon buttons, kbd
316
- --r-md: 8px; // buttons, inputs, nav items
317
- --r-lg: 12px; // cards, table wrapper, filter panel
318
- --r-xl: 16px; // reserved
325
+ --r-sm: 6px; // icon buttons, kbd
326
+ --r-md: 8px; // buttons, inputs, nav items
327
+ --r-lg: 12px; // cards, table wrapper, filter panel
328
+ --r-xl: 16px; // reserved
319
329
 
320
330
  // ── Layout ───────────────────────────────────────────────────────────────
321
331
  --row-h: 56px; // table row
@@ -323,8 +333,8 @@ html.light-theme {
323
333
  // ── Z-index scale ────────────────────────────────────────────────────────
324
334
  --z-sticky: 10;
325
335
  --z-bulkbar: 50;
326
- --z-overlay: 100; // drawers, scrims
327
- --z-dialog: 110; // centered dialogs / confirms
336
+ --z-overlay: 100; // drawers, scrims
337
+ --z-dialog: 110; // centered dialogs / confirms
328
338
  --z-toast: 200;
329
339
  --z-tooltip: 1000;
330
340
 
@@ -342,10 +352,12 @@ html.light-theme {
342
352
  --shadow-accent: 0 4px 12px color-mix(in srgb, var(--accent) 25%, transparent);
343
353
  --shadow-tooltip: 0 4px 16px oklch(0% 0 0deg / 18%);
344
354
  --shadow-focus-soft: 0 0 0 3px oklch(0% 0 0deg / 4%);
345
- --shadow-drawer: -24px 0 64px oklch(0% 0 0deg / 8%); // end-side panel (LTR)
346
- --shadow-drawer-rtl: 24px 0 64px oklch(0% 0 0deg / 8%); // mirrored under RTL
347
- --shadow-dialog: 0 24px 64px oklch(18% 0.005 250deg / 18%), 0 8px 24px oklch(18% 0.005 250deg / 10%);
348
- --shadow-toast: 0 12px 32px oklch(18% 0.005 250deg / 14%), 0 4px 12px oklch(18% 0.005 250deg / 8%);
355
+ --shadow-drawer: -24px 0 64px oklch(0% 0 0deg / 8%); // end-side panel (LTR)
356
+ --shadow-drawer-rtl: 24px 0 64px oklch(0% 0 0deg / 8%); // mirrored under RTL
357
+ --shadow-dialog:
358
+ 0 24px 64px oklch(18% 0.005 250deg / 18%), 0 8px 24px oklch(18% 0.005 250deg / 10%);
359
+ --shadow-toast:
360
+ 0 12px 32px oklch(18% 0.005 250deg / 14%), 0 4px 12px oklch(18% 0.005 250deg / 8%);
349
361
 
350
362
  // ── Transitions ──────────────────────────────────────────────────────────
351
363
  --t-state: 0.12s ease;
@@ -393,11 +405,7 @@ html.dark-theme {
393
405
  oklch(70% 0.19 305deg),
394
406
  oklch(60% 0.2 285deg)
395
407
  );
396
- --grad-soft: linear-gradient(
397
- 135deg,
398
- oklch(78% 0.13 195deg / 18%),
399
- oklch(68% 0.18 295deg / 18%)
400
- );
408
+ --grad-soft: linear-gradient(135deg, oklch(78% 0.13 195deg / 18%), oklch(68% 0.18 295deg / 18%));
401
409
 
402
410
  // ── Interaction state layers — light veil on dark surfaces ───────────────
403
411
  --state-hover: oklch(95% 0.02 285deg / 6%);
@@ -409,7 +417,7 @@ html.dark-theme {
409
417
  --st-published-bg: oklch(28% 0.06 165deg);
410
418
  --st-approved: oklch(82% 0.15 245deg);
411
419
  --st-approved-bg: oklch(28% 0.06 245deg);
412
- --st-draft: var(--ink-2); // same grey as secondary text on dark
420
+ --st-draft: var(--ink-2); // same grey as secondary text on dark
413
421
  --st-draft-bg: oklch(24% 0.003 250deg);
414
422
  --st-archived: oklch(82% 0.06 60deg);
415
423
  --st-archived-bg: oklch(28% 0.05 60deg);
@@ -577,6 +585,8 @@ $_plate-ink: 'clamp(0, (0.1791 - (0.2126 * r + 0.7152 * g + 0.0722 * b)) * infin
577
585
  :root,
578
586
  html.light-theme,
579
587
  html.dark-theme {
580
- --on-accent-fill: color(from var(--accent-fill) srgb-linear #{$_plate-ink} #{$_plate-ink} #{$_plate-ink} / 100%);
588
+ --on-accent-fill: color(
589
+ from var(--accent-fill) srgb-linear #{$_plate-ink} #{$_plate-ink} #{$_plate-ink} / 100%
590
+ );
581
591
  }
582
592
  }
@@ -147,7 +147,8 @@
147
147
  // 2026-08-17 review fixed for dark. Alpha-1 in both themes; dark's twins are
148
148
  // byte-identical to the base pair, so this changes nothing there.
149
149
  @if $nested {
150
- @return $glow, $sheen, linear-gradient(180deg, var(--mat-menu-solid-a), var(--mat-menu-solid-b));
150
+ @return $glow, $sheen,
151
+ linear-gradient(180deg, var(--mat-menu-solid-a), var(--mat-menu-solid-b));
151
152
  }
152
153
 
153
154
  @return $glow, $sheen, linear-gradient(180deg, var(--mat-menu-a), var(--mat-menu-b));
@@ -350,8 +351,12 @@
350
351
  border-radius: inherit;
351
352
  background: var(--window-edge-gradient);
352
353
  pointer-events: none;
353
- -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
354
- mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
354
+ -webkit-mask:
355
+ linear-gradient(#000 0 0) content-box,
356
+ linear-gradient(#000 0 0);
357
+ mask:
358
+ linear-gradient(#000 0 0) content-box,
359
+ linear-gradient(#000 0 0);
355
360
  -webkit-mask-composite: xor;
356
361
  mask-composite: exclude;
357
362
  }
@@ -533,8 +538,12 @@
533
538
  rgb(255 255 255 / 42%)
534
539
  );
535
540
  pointer-events: none;
536
- -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
537
- mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
541
+ -webkit-mask:
542
+ linear-gradient(#000 0 0) content-box,
543
+ linear-gradient(#000 0 0);
544
+ mask:
545
+ linear-gradient(#000 0 0) content-box,
546
+ linear-gradient(#000 0 0);
538
547
  -webkit-mask-composite: xor;
539
548
  mask-composite: exclude;
540
549
  }