@motir/design-system 0.8.1 → 0.10.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.
Files changed (35) hide show
  1. package/dist/components/theme/AppearancePickers.js +1 -1
  2. package/dist/components/theme/AppearancePickers.js.map +1 -1
  3. package/dist/components/ui/Combobox.js +82 -6
  4. package/dist/components/ui/Combobox.js.map +1 -1
  5. package/dist/components/ui/Modal.d.ts +8 -1
  6. package/dist/components/ui/Modal.js +19 -3
  7. package/dist/components/ui/Modal.js.map +1 -1
  8. package/dist/components/ui/MultiSelectPicker.js +15 -1
  9. package/dist/components/ui/MultiSelectPicker.js.map +1 -1
  10. package/dist/components/ui/Popover.js +16 -2
  11. package/dist/components/ui/Popover.js.map +1 -1
  12. package/dist/components/ui/Tooltip.js +16 -1
  13. package/dist/components/ui/Tooltip.js.map +1 -1
  14. package/dist/contexts/theme-context.js +1 -1
  15. package/dist/contexts/theme-context.js.map +1 -1
  16. package/dist/index.d.ts +1 -0
  17. package/dist/index.js +1 -0
  18. package/dist/mock/index.js +1 -1
  19. package/dist/mock/index.js.map +1 -1
  20. package/dist/mock/renderMock.js +1 -1
  21. package/dist/mock/renderMock.js.map +1 -1
  22. package/dist/specimen/TokensSpecimen.js +1 -1
  23. package/dist/specimen/TokensSpecimen.js.map +1 -1
  24. package/dist/theme/appearance-resolution.js +1 -1
  25. package/dist/theme/appearance-resolution.js.map +1 -1
  26. package/dist/theme/init-script.js +1 -1
  27. package/dist/theme/init-script.js.map +1 -1
  28. package/dist/theme/palettes.js +1 -1
  29. package/dist/theme/palettes.js.map +1 -1
  30. package/dist/theme/types.js.map +1 -1
  31. package/dist/utils/fullscreen.d.ts +17 -0
  32. package/dist/utils/fullscreen.js +20 -0
  33. package/dist/utils/fullscreen.js.map +1 -0
  34. package/package.json +1 -1
  35. package/theme.css +260 -6
package/theme.css CHANGED
@@ -2522,6 +2522,49 @@
2522
2522
  }
2523
2523
  }
2524
2524
 
2525
+ /* Showcase fields under the chrome (motir.co's illustrations). The card rule
2526
+ above repaints every card-radius panel with --el-surface, which turns a
2527
+ showcase field — the deep ground, the accent field — into a grey panel with
2528
+ its light text left on it. A showcase panel names its field with
2529
+ `data-showcase="<field>"`; it keeps that fill under the chrome, and the deep
2530
+ fields take a quieter streak and bevel so the light text keeps its contrast.
2531
+ Palette-derived like every material rule here: the fills are the showcase
2532
+ tokens, the sheen is the style's own achromatic white. */
2533
+ @scope ([data-style='retrofuturism']) to ([data-style]) {
2534
+ [data-showcase='field'] {
2535
+ background-color: var(--el-showcase-field);
2536
+ }
2537
+ [data-showcase='ground'] {
2538
+ background-color: var(--el-showcase-ground);
2539
+ }
2540
+ [data-showcase='ground-raised'] {
2541
+ background-color: var(--el-showcase-ground-raised);
2542
+ }
2543
+ [data-showcase='decision'] {
2544
+ background-color: var(--el-showcase-decision);
2545
+ }
2546
+ [data-showcase='record'] {
2547
+ background-color: var(--el-showcase-record);
2548
+ }
2549
+ [data-showcase='wash'] {
2550
+ background-color: var(--el-showcase-wash);
2551
+ }
2552
+ [data-showcase='wash-warm'] {
2553
+ background-color: var(--el-showcase-wash-warm);
2554
+ }
2555
+ [data-showcase='paper'] {
2556
+ background-color: var(--el-showcase-paper);
2557
+ }
2558
+ [data-showcase='field'],
2559
+ [data-showcase='ground'],
2560
+ [data-showcase='ground-raised'],
2561
+ [data-showcase='decision'],
2562
+ [data-showcase='record'] {
2563
+ --retro-spec: 12%;
2564
+ --retro-bevel-light: 10%;
2565
+ }
2566
+ }
2567
+
2525
2568
  /* Modal panel — the same chrome, with a deeper palette glow so the dialog
2526
2569
  separates cleanly from the grid behind it (and body text stays on the solid
2527
2570
  surface). Overrides the card-radius rule above for the modal radius. */
@@ -3274,6 +3317,16 @@
3274
3317
  --el-accent-on-surface: var(--color-primary);
3275
3318
  --el-accent-pressed: var(--color-primary-pressed);
3276
3319
  --el-highlight: var(--color-accent); /* brand pink — decorative accents */
3320
+ /* Progress FILL for a determinate bar (MOTIR-7584) — upload / import bars.
3321
+ Resolves to the CTA fill, which is what those bars painted before the role
3322
+ existed, so every palette that does not override it is pixel-identical.
3323
+ (The planning node's done/total meter is NOT this role: it means DONE and
3324
+ stays --el-success.) */
3325
+ --el-progress-fill: var(--color-primary-fill);
3326
+ /* The rich-text editor's FOCUS indicator (MOTIR-7584). Resolves to the
3327
+ decorative accent the editor borrowed before the role existed; a palette
3328
+ whose accent is decorative-only (motir) points it back at its focus hue. */
3329
+ --el-editor-focus: var(--color-accent);
3277
3330
 
3278
3331
  /* ── Surfaces ──────────────────────────────────────────────────── */
3279
3332
  --el-surface: var(--color-surface);
@@ -3850,6 +3903,91 @@
3850
3903
  --el-sidebar-item-bg-active: var(
3851
3904
  --color-background
3852
3905
  ); /* active row = canvas inset into the rail */
3906
+
3907
+ /* ── Product marks (motir.co's Products menu) ───────────────────────── */
3908
+ /* The small square beside each product's name. One per product, each a
3909
+ palette hue — or a mix of two, where the palette has fewer distinct hues
3910
+ than there are products — so a palette re-skins all of them. */
3911
+ --el-product-ai-planner: var(--color-primary);
3912
+ --el-product-project-management: var(--color-accent-teal);
3913
+ --el-product-project-manager: var(--color-accent);
3914
+ --el-product-ai-debugging: var(--color-destructive);
3915
+ --el-product-mcp: color-mix(in srgb, var(--color-primary) 55%, var(--color-destructive));
3916
+ --el-product-cli: var(--color-charcoal);
3917
+ --el-product-claude-code-connector: var(--color-accent-green);
3918
+ --el-product-claude-code-plugin: color-mix(
3919
+ in srgb,
3920
+ var(--color-accent) 55%,
3921
+ var(--color-accent-green)
3922
+ );
3923
+ --el-product-agent-fleet: color-mix(in srgb, var(--color-primary) 50%, var(--color-accent-teal));
3924
+ --el-product-agent-hosting: var(--color-slate);
3925
+ --el-product-sandbox: color-mix(in srgb, var(--color-accent) 45%, var(--color-charcoal));
3926
+
3927
+ /* ── Logo tile (the wave mark on its rounded square) ─────────────── */
3928
+ /* The mark is the palette's identity hue — its primary FILL, the colour its
3929
+ swatch shows — on a tile chosen so the mark reads: a pale wash of that hue
3930
+ here; a palette whose identity hue is itself bright or pale sets a dark
3931
+ tile in its own block. */
3932
+ --el-logo-mark: var(--color-primary-fill);
3933
+ --el-logo-tile: color-mix(in srgb, var(--color-primary-fill) 14%, var(--color-background));
3934
+
3935
+ /* ── Showcase (motir.co's illustrations) ─────────────────────── */
3936
+ /* The marketing site draws its pictures as flat fields holding small
3937
+ example screens ("Vibe the project" and "How Motir works"). These are
3938
+ the pictures' own element tokens, named for what they paint — the
3939
+ palette decides the colour. Each FIELD has a TEXT token that reads on it
3940
+ in every palette and theme.
3941
+ field — the main picture field (the plan, the progress lanes);
3942
+ field-ink is that colour as text on paper
3943
+ ground — the deep ground (the project-manager panel, the design and
3944
+ run pictures), with its raised step, rule and muted text
3945
+ highlight — the one bright touch, drawn on the ground and on the
3946
+ record field (the person's marks in the history)
3947
+ decision — a choice that waits on the person ("Your call")
3948
+ record — the history / learning field
3949
+ wash — the quiet pictures (docs, the written brief, memory)
3950
+ wash-warm — the quiet warm picture (the plan gate)
3951
+ paper — the small screens inside the fields
3952
+ wave-1..3 — the hero's moving wave lines */
3953
+ --el-showcase-field: var(--color-primary);
3954
+ --el-showcase-field-text: var(--color-background);
3955
+ --el-showcase-field-ink: var(--color-primary);
3956
+ --el-showcase-ground: var(--color-foreground);
3957
+ --el-showcase-ground-text: var(--color-background);
3958
+ --el-showcase-ground-muted: color-mix(
3959
+ in srgb,
3960
+ var(--color-background) 68%,
3961
+ var(--color-foreground)
3962
+ );
3963
+ --el-showcase-ground-raised: color-mix(
3964
+ in srgb,
3965
+ var(--color-foreground) 90%,
3966
+ var(--color-background)
3967
+ );
3968
+ --el-showcase-ground-rule: color-mix(
3969
+ in srgb,
3970
+ var(--color-foreground) 74%,
3971
+ var(--color-background)
3972
+ );
3973
+ --el-showcase-highlight: color-mix(in srgb, var(--color-accent) 55%, var(--color-background));
3974
+ --el-showcase-decision: color-mix(in srgb, var(--color-accent) 70%, var(--color-background));
3975
+ --el-showcase-decision-text: var(--color-foreground);
3976
+ --el-showcase-decision-ink: color-mix(in srgb, var(--color-accent) 65%, var(--color-foreground));
3977
+ --el-showcase-record: color-mix(in srgb, var(--color-accent-teal) 72%, var(--color-foreground));
3978
+ --el-showcase-record-text: var(--color-background);
3979
+ --el-showcase-wash: var(--color-tint-sky);
3980
+ --el-showcase-wash-warm: var(--color-tint-peach);
3981
+ --el-showcase-paper: var(--color-background);
3982
+ --el-showcase-paper-soft: var(--color-surface-soft);
3983
+ --el-showcase-rule: var(--color-hairline);
3984
+ --el-showcase-text: var(--color-foreground);
3985
+ --el-showcase-muted: var(--color-slate);
3986
+ /* The hero's wave lines: the three palette hues the moving colour band
3987
+ cycles through — the accent, the teal, the warm accent. */
3988
+ --el-showcase-wave-1: var(--color-primary);
3989
+ --el-showcase-wave-2: var(--color-accent-teal);
3990
+ --el-showcase-wave-3: var(--color-accent);
3853
3991
  }
3854
3992
 
3855
3993
  /* Dark-mode lift for the sidebar hover token. The other three --el-sidebar-*
@@ -3911,6 +4049,27 @@
3911
4049
  other concrete-hex --el-* alongside the sidebar hover. Light value (40%,
3912
4050
  == the prior bg-black/40) lives in the :root block above. */
3913
4051
  --el-overlay-scrim: #000000a6;
4052
+ /* The logo in dark: the palette's dark primary — the lightened identity hue
4053
+ built to read on a dark page — on a deep wash of it. */
4054
+ --el-logo-mark: var(--color-primary);
4055
+ --el-logo-tile: color-mix(in srgb, var(--color-primary) 18%, var(--color-background));
4056
+ /* Showcase in dark (see the Tier-3 showcase block): the field is the
4057
+ dark accent pulled halfway to the page, so it stays a saturated mid-tone
4058
+ carrying LIGHT text; the ground stays dark instead of inverting — the
4059
+ palette's recessed canvas, the one step below both page and surface; the decision and record fields carry the page's dark ink. */
4060
+ --el-showcase-field: color-mix(in srgb, var(--color-primary) 45%, var(--color-background));
4061
+ --el-showcase-field-text: var(--color-foreground);
4062
+ --el-showcase-field-ink: color-mix(in srgb, var(--color-primary) 75%, var(--color-foreground));
4063
+ --el-showcase-ground: var(--color-canvas);
4064
+ --el-showcase-ground-text: var(--color-foreground);
4065
+ --el-showcase-ground-muted: color-mix(in srgb, var(--color-foreground) 68%, var(--color-canvas));
4066
+ --el-showcase-ground-raised: color-mix(in srgb, var(--color-canvas) 86%, var(--color-foreground));
4067
+ --el-showcase-ground-rule: color-mix(in srgb, var(--color-canvas) 70%, var(--color-foreground));
4068
+ --el-showcase-highlight: color-mix(in srgb, var(--color-accent) 70%, var(--color-foreground));
4069
+ --el-showcase-decision: var(--color-accent);
4070
+ --el-showcase-decision-text: var(--color-background);
4071
+ --el-showcase-decision-ink: color-mix(in srgb, var(--color-accent) 80%, var(--color-foreground));
4072
+ --el-showcase-record: var(--color-accent-teal);
3914
4073
  }
3915
4074
 
3916
4075
  /* ═══════════════════════════════════════════════════════════════════════
@@ -4079,7 +4238,12 @@
4079
4238
  --color-tint-sky: #dcecfa;
4080
4239
  --color-tint-yellow: #fef7d6;
4081
4240
  --color-warning: #dd5b00;
4241
+ /* MOTIR-7584 — carried for the same reason as --el-status-approved below:
4242
+ `motir` overrides all three, so a scoped amethyst tile under a motir page
4243
+ would otherwise inherit motir's warm values. */
4244
+ --el-editor-focus: var(--color-accent);
4082
4245
  --el-priority-high: var(--color-warning);
4246
+ --el-progress-fill: var(--color-primary-fill);
4083
4247
  --el-sidebar-item-bg-hover: #eeede9;
4084
4248
  /* MOTIR-5139 — carried here because `evergreen` OVERRIDES it. A token this
4085
4249
  block omits leaks from the ANCESTOR into a scoped `motir` tile, so an
@@ -4095,6 +4259,13 @@
4095
4259
  --el-status-implemented: color-mix(in srgb, var(--color-accent) 75%, var(--color-charcoal));
4096
4260
  --el-status-in-review: var(--color-primary);
4097
4261
  --el-status-planning: var(--color-accent-teal);
4262
+ --el-type-design: var(--color-accent);
4263
+ /* 2026-10 redesign — the logo and showcase roles the motir and bright
4264
+ palettes override, restated so a scoped amethyst tile keeps the base. */
4265
+ --el-logo-mark: var(--color-primary-fill);
4266
+ --el-logo-tile: color-mix(in srgb, var(--color-primary-fill) 14%, var(--color-background));
4267
+ --el-showcase-highlight: color-mix(in srgb, var(--color-accent) 55%, var(--color-background));
4268
+ --el-showcase-decision: color-mix(in srgb, var(--color-accent) 70%, var(--color-background));
4098
4269
  }
4099
4270
 
4100
4271
  /* The base palette's DARK arm — only the tokens the global dark block
@@ -4132,6 +4303,12 @@
4132
4303
  --color-tint-sky: #1a2a3a;
4133
4304
  --color-tint-yellow: #3a341a;
4134
4305
  --el-sidebar-item-bg-hover: #222222;
4306
+ /* 2026-10 redesign — the dark logo and showcase roles, restated (see the
4307
+ light arm above). */
4308
+ --el-logo-mark: var(--color-primary);
4309
+ --el-logo-tile: color-mix(in srgb, var(--color-primary) 18%, var(--color-background));
4310
+ --el-showcase-highlight: color-mix(in srgb, var(--color-accent) 70%, var(--color-foreground));
4311
+ --el-showcase-decision: var(--color-accent);
4135
4312
  }
4136
4313
 
4137
4314
  /* The `motir` BASE type pairing, re-asserted (MOTIR-3933) — same reason as
@@ -4344,6 +4521,10 @@
4344
4521
  verified numerically + by rendered specimen, never eyeballed. See
4345
4522
  docs/palettes/motir.md for the colour-role reference. */
4346
4523
  [data-palette='motir'] {
4524
+ /* The logo, kept as Motir has it: the cool-blue primary (its fill is the
4525
+ ink CTA, not its identity hue) on a 28% wash of that blue. */
4526
+ --el-logo-mark: var(--color-primary);
4527
+ --el-logo-tile: color-mix(in srgb, var(--color-primary) 28%, var(--color-background));
4347
4528
  /* brand & primary — the high-contrast INK CTA + the single cool-blue accent.
4348
4529
  --color-primary is the accent AS text/icon/focus on a surface (the cool
4349
4530
  blue, AA on white & the slate surface); --color-primary-fill is the CTA
@@ -4376,19 +4557,24 @@
4376
4557
  --color-border: #e2e4e9;
4377
4558
 
4378
4559
  /* accent secondary — the cool-blue highlight replaces the warm brand pink */
4379
- --color-accent: #2563c9; /* cool-blue decorative highlight / epic & design hue */
4560
+ /* WARM TOUCH (MOTIR-7582 / design MOTIR-7583 §8): the decorative accent —
4561
+ highlight, Epic, chart segment 6, the progress fill — is a warm orange.
4562
+ It sits in the narrow slot between the burnt-orange warning #c2410c and the
4563
+ amber priority-high step #ab6400: ΔE2000 11.0 from each, and 3.08:1 or
4564
+ better on every light surface (the selected row is the tightest). */
4565
+ --color-accent: #d66000; /* warm orange — decorative highlight / epic hue */
4380
4566
  --color-accent-orange: #c2410c; /* review hue / warning — cooled */
4381
4567
  --color-accent-teal: #0e8f86; /* subtask / content hue */
4382
4568
  --color-accent-green: #18804a; /* story hue / success — cooled */
4383
4569
 
4384
4570
  /* card tints — cooled pastel washes (6 distinct feature hues; charcoal text
4385
4571
  on them clears AA in both themes) */
4386
- --color-tint-peach: #f7e6d6;
4572
+ --color-tint-peach: #fde0c8; /* warmed (MOTIR-7582) — ink on it 12.38:1 */
4387
4573
  --color-tint-rose: #f6dfe8;
4388
4574
  --color-tint-mint: #d9efe1;
4389
4575
  --color-tint-lavender: #e4e6f3; /* cool indigo wash */
4390
4576
  --color-tint-sky: #dde9f6; /* cool blue wash — the accent tint */
4391
- --color-tint-yellow: #f6f1d6;
4577
+ --color-tint-yellow: #fdf0c6; /* warmed (MOTIR-7582) — ink on it 13.70:1 */
4392
4578
 
4393
4579
  /* semantic */
4394
4580
  --color-success: #18804a;
@@ -4441,6 +4627,28 @@
4441
4627
  here and reads as "not yet coloured in", which is what the state is:
4442
4628
  ΔE 15.9 light / 11.8 dark from the nearest status. */
4443
4629
  --el-status-implemented: var(--color-charcoal);
4630
+
4631
+ /* Warm touches (MOTIR-7582 / design MOTIR-7583 §8) — the Tier-3 half.
4632
+ Design takes the Citrine palette's own gold, its --color-primary #746019
4633
+ (Mirotone yellow-700), so it reads apart from the orange Epic: ΔE2000 16.3
4634
+ from its nearest glyph neighbour (priority-high) and 4.97:1 or better on
4635
+ every light surface. Set directly, as --el-sidebar-item-bg-hover is, since
4636
+ no Tier-0 source carries it. */
4637
+ --el-type-design: #746019;
4638
+ /* The showcase highlight — the one bright touch on motir.co's illustration
4639
+ ground. In Motir it is the palette's Sunglow yellow (the dark Design hue
4640
+ below), and the same in both themes because the showcase ground stays dark
4641
+ in both. Set directly, as --el-type-design is: Motir's yellow is a role
4642
+ value of this palette, not a Tier-0 source other palettes would carry. */
4643
+ --el-showcase-highlight: #ffd02f;
4644
+ /* Motir's decision field is its warm accent at full strength — dark ink on
4645
+ it is 4.9:1; the base mapping lightens the accent for darker palettes. */
4646
+ --el-showcase-decision: var(--color-accent);
4647
+ /* progress bars take the warm accent instead of the ink CTA fill */
4648
+ --el-progress-fill: var(--color-accent);
4649
+ /* the editor's focus border / rings stay the blue focus hue — the accent they
4650
+ borrowed is decorative-only here now */
4651
+ --el-editor-focus: var(--color-primary);
4444
4652
  }
4445
4653
 
4446
4654
  /* Motir (formerly Graphite) — dark companion. A cool near-black slate canvas; the CTA fill
@@ -4449,6 +4657,8 @@
4449
4657
  brighten to clear AA on near-black. */
4450
4658
  [data-theme='dark'] [data-palette='motir']:not([data-theme]),
4451
4659
  [data-palette='motir'][data-theme='dark'] {
4660
+ --el-logo-mark: var(--color-primary); /* parity with the light block */
4661
+ --el-logo-tile: color-mix(in srgb, var(--color-primary) 28%, var(--color-background));
4452
4662
  --color-background: #0c0d0f; /* stark cool near-black canvas */
4453
4663
  --color-foreground: #edeef0;
4454
4664
  --color-surface: #18191c; /* cool slate section */
@@ -4476,14 +4686,16 @@
4476
4686
  --color-primary-fill: #edeef0; /* near-white ink CTA fill (black-on AA) */
4477
4687
 
4478
4688
  /* cooled tints, dimmed for the near-black canvas */
4479
- --color-tint-peach: #2e2418;
4689
+ --color-tint-peach: #36230f; /* warmed (MOTIR-7582) — ink on it 10.58:1 */
4480
4690
  --color-tint-rose: #2f1c26;
4481
4691
  --color-tint-mint: #15271e;
4482
4692
  --color-tint-lavender: #1f2236;
4483
4693
  --color-tint-sky: #15233a;
4484
- --color-tint-yellow: #2a2716;
4694
+ --color-tint-yellow: #302a12; /* warmed (MOTIR-7582) — ink on it 10.14:1 */
4485
4695
 
4486
- --color-accent: #5b9dff; /* bright cool-blue highlight on dark */
4696
+ /* warm touch — a deeper, redder orange than the dark warning #f08a4b clears
4697
+ it by ΔE2000 11.5, and is 4.77:1 or better on every dark surface */
4698
+ --color-accent: #fa5500; /* warm orange highlight on dark */
4487
4699
  --color-accent-orange: #f08a4b;
4488
4700
  --color-accent-teal: #2db6a8;
4489
4701
  --color-accent-green: #34b86e;
@@ -4519,6 +4731,16 @@
4519
4731
  themes so the light value cannot cascade into dark (the cascade trap this
4520
4732
  suite checks for). */
4521
4733
  --el-status-implemented: var(--color-charcoal);
4734
+
4735
+ /* Warm touches — the dark halves of the light block's Tier-3 overrides, in
4736
+ BOTH themes for the cascade reason above. Design takes the Citrine
4737
+ palette's dark --color-primary, Miro Sunglow #ffd02f: ΔE2000 27.5 from its
4738
+ nearest glyph neighbour, 10.0:1 or better on every dark surface. */
4739
+ --el-type-design: #ffd02f;
4740
+ --el-showcase-highlight: #ffd02f; /* see the light block */
4741
+ --el-showcase-decision: var(--color-accent);
4742
+ --el-progress-fill: var(--color-accent);
4743
+ --el-editor-focus: var(--color-primary);
4522
4744
  }
4523
4745
 
4524
4746
  /* ── Palette: Evergreen (data-palette="evergreen") — Subtask 7.3.50 ──────────
@@ -4958,6 +5180,9 @@
4958
5180
  clears WCAG AA (≥4.5 text; ≥3.0 icon/UI) in BOTH themes, verified
4959
5181
  numerically. See docs/palettes/amber.md. */
4960
5182
  [data-palette='amber'] {
5183
+ /* The logo: this palette's identity hue is bright, so its mark sits on a
5184
+ dark tile (the palette's ink) rather than a pale wash of itself. */
5185
+ --el-logo-tile: var(--color-foreground);
4961
5186
  /* brand & primary — Binance Gold. The FILL carries DARK ink labels (yellow
4962
5187
  trap); --color-primary is a darkened gold used AS text/icon on a surface. */
4963
5188
  --color-primary: #7d6000; /* darkened gold as text/icon (5.92:1 on white — MOTIR-3774) */
@@ -5031,6 +5256,11 @@
5031
5256
  #0ECB81 / sell-red #F6465D. */
5032
5257
  [data-theme='dark'] [data-palette='amber']:not([data-theme]),
5033
5258
  [data-palette='amber'][data-theme='dark'] {
5259
+ --el-logo-tile: color-mix(
5260
+ in srgb,
5261
+ var(--color-primary) 18%,
5262
+ var(--color-background)
5263
+ ); /* parity with the light block */
5034
5264
  --color-background: #0b0e11; /* Binance deepest trading-floor black */
5035
5265
  --color-foreground: #eaecef;
5036
5266
  --color-surface: #1e2329; /* Binance "Shark" card surface */
@@ -5105,6 +5335,9 @@
5105
5335
  clears WCAG AA in BOTH themes, verified numerically. See
5106
5336
  docs/palettes/sienna.md. */
5107
5337
  [data-palette='sienna'] {
5338
+ /* The logo: this palette's identity hue is bright, so its mark sits on a
5339
+ dark tile (the palette's ink) rather than a pale wash of itself. */
5340
+ --el-logo-tile: var(--color-foreground);
5108
5341
  /* brand & primary — Mistral's flame. The FILL is Mistral Orange #fa520f with
5109
5342
  DARK ink labels; --color-primary is a darkened flame used AS text/icon. */
5110
5343
  --color-primary: #b53b09; /* darkened Mistral flame as text/icon (5.60:1 on the cream — MOTIR-3774) */
@@ -5187,6 +5420,11 @@
5187
5420
  to read as text, the fill a bright flame with dark-ink labels. */
5188
5421
  [data-theme='dark'] [data-palette='sienna']:not([data-theme]),
5189
5422
  [data-palette='sienna'][data-theme='dark'] {
5423
+ --el-logo-tile: color-mix(
5424
+ in srgb,
5425
+ var(--color-primary) 18%,
5426
+ var(--color-background)
5427
+ ); /* parity with the light block */
5190
5428
  --color-background: #15120d; /* warm near-black canvas (from Mistral Black) */
5191
5429
  --color-foreground: #f5efe2;
5192
5430
  --color-surface: #1f1d17;
@@ -5407,6 +5645,9 @@
5407
5645
  clears WCAG AA in BOTH themes, verified numerically. See
5408
5646
  docs/palettes/citrine.md. */
5409
5647
  [data-palette='citrine'] {
5648
+ /* The logo: this palette's identity hue is bright, so its mark sits on a
5649
+ dark tile (the palette's ink) rather than a pale wash of itself. */
5650
+ --el-logo-tile: var(--color-foreground);
5410
5651
  /* brand & primary — Miro Sunglow yellow (yellow-500). FILL carries DARK
5411
5652
  Stratos-ink labels (yellow trap); --color-primary is a documented dark
5412
5653
  yellow step (yellow-700) used AS text/icon on a surface. */
@@ -5505,6 +5746,11 @@
5505
5746
  clear AA on the dark canvas. All values are documented Mirotone steps. */
5506
5747
  [data-theme='dark'] [data-palette='citrine']:not([data-theme]),
5507
5748
  [data-palette='citrine'][data-theme='dark'] {
5749
+ --el-logo-tile: color-mix(
5750
+ in srgb,
5751
+ var(--color-primary) 18%,
5752
+ var(--color-background)
5753
+ ); /* parity with the light block */
5508
5754
  --color-background: #090909; /* Miro black */
5509
5755
  --color-foreground: #f6f7f9; /* gray-50 */
5510
5756
  --color-surface: #1a1b1e; /* gray-900 */
@@ -5595,6 +5841,9 @@
5595
5841
  clears WCAG AA in BOTH themes, verified numerically. See
5596
5842
  docs/palettes/candy.md. */
5597
5843
  [data-palette='candy'] {
5844
+ /* The logo: this palette's identity hue is bright, so its mark sits on a
5845
+ dark tile (the palette's ink) rather than a pale wash of itself. */
5846
+ --el-logo-tile: var(--color-foreground);
5598
5847
  /* brand & primary — a LIGHT bubblegum pink (Radix Pink). FILL is a light pink
5599
5848
  with DARK berry labels; --color-primary is the Pink-11 text step. */
5600
5849
  --color-primary: #b72682; /* Radix Pink-11 88% toward Pink-12 (5.81:1 on white — MOTIR-3774) */
@@ -5669,6 +5918,11 @@
5669
5918
  All values are documented Radix dark steps. */
5670
5919
  [data-theme='dark'] [data-palette='candy']:not([data-theme]),
5671
5920
  [data-palette='candy'][data-theme='dark'] {
5921
+ --el-logo-tile: color-mix(
5922
+ in srgb,
5923
+ var(--color-primary) 18%,
5924
+ var(--color-background)
5925
+ ); /* parity with the light block */
5672
5926
  --color-background: #191117; /* Radix Pink dark-1 — pink-tinted black */
5673
5927
  --color-foreground: #eeeef0; /* Mauve dark-12 */
5674
5928
  --color-surface: #37172f; /* Pink dark-3 — candy-plum section */