@yewdiel21/motion-kit 0.14.0 → 0.15.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 (154) hide show
  1. package/README.md +174 -155
  2. package/bin/motion-kit.mjs +3 -3
  3. package/dist/auto/index.d.ts +6 -3
  4. package/dist/auto/index.js +8 -2
  5. package/dist/auto/index.js.map +1 -1
  6. package/dist/{chunk-EY4BJKC4.js → chunk-6IRJYXJU.js} +2 -2
  7. package/dist/{chunk-CU6SXW3E.js → chunk-A6QQCF6V.js} +1309 -310
  8. package/dist/chunk-A6QQCF6V.js.map +1 -0
  9. package/dist/chunk-JXRS3OEA.js +3638 -0
  10. package/dist/chunk-JXRS3OEA.js.map +1 -0
  11. package/dist/css/components/add-to-cart.css +72 -0
  12. package/dist/css/components/bidirectional-slider.css +168 -0
  13. package/dist/css/components/data-table.css +121 -26
  14. package/dist/css/components/filter-builder.css +10 -15
  15. package/dist/css/components/heatmap-chart.css +391 -0
  16. package/dist/css/components/hover-card.css +8 -2
  17. package/dist/css/components/image-preview.css +90 -2
  18. package/dist/css/components/json-viewer.css +33 -1
  19. package/dist/css/components/nav.css +102 -102
  20. package/dist/css/components/orbit-menu.css +130 -0
  21. package/dist/css/components/pagination.css +10 -5
  22. package/dist/css/components/pie-chart.css +390 -0
  23. package/dist/css/components/pill-button.css +135 -0
  24. package/dist/css/components/radar-chart.css +370 -0
  25. package/dist/css/components/radial-chart.css +398 -0
  26. package/dist/css/components/sankey-chart.css +358 -0
  27. package/dist/css/components/scroll-island.css +111 -0
  28. package/dist/css/components/select.css +136 -0
  29. package/dist/css/components/toolbar.css +122 -0
  30. package/dist/css/components/tree-view.css +79 -0
  31. package/dist/css/components/voice-dots.css +70 -0
  32. package/dist/elements/index.d.ts +180 -7
  33. package/dist/elements/index.js +287 -6
  34. package/dist/elements/index.js.map +1 -1
  35. package/dist/{engine-Cn6IhE3z.d.ts → engine-5zRIssTO.d.ts} +11 -1
  36. package/dist/index.css +1832 -168
  37. package/dist/index.d.ts +4 -4
  38. package/dist/index.js +33 -3
  39. package/dist/index.js.map +1 -1
  40. package/dist/react/index.d.ts +117 -11
  41. package/dist/react/index.js +314 -13
  42. package/dist/react/index.js.map +1 -1
  43. package/dist/{reduced-BBUusld6.d.ts → reduced-6X_bns60.d.ts} +1 -1
  44. package/dist/{reveal-DEvp6U6T.d.ts → reveal-BfyKKsw4.d.ts} +97 -4
  45. package/dist/store-CA2Qcun_.d.ts +453 -0
  46. package/package.json +9 -16
  47. package/registry.json +1096 -948
  48. package/src/auto/auto-init.ts +6 -0
  49. package/src/components/add-to-cart/README.md +34 -0
  50. package/src/components/add-to-cart/add-to-cart.css +71 -0
  51. package/src/components/add-to-cart/element.ts +20 -0
  52. package/src/components/add-to-cart/engine.ts +206 -0
  53. package/src/components/add-to-cart/react.tsx +29 -0
  54. package/src/components/bidirectional-slider/README.md +46 -0
  55. package/src/components/bidirectional-slider/bidirectional-slider.css +167 -0
  56. package/src/components/bidirectional-slider/element.ts +42 -0
  57. package/src/components/bidirectional-slider/engine.ts +289 -0
  58. package/src/components/bidirectional-slider/react.tsx +45 -0
  59. package/src/components/chart/README.md +10 -0
  60. package/src/components/chart/element.ts +2 -0
  61. package/src/components/chart/engine.ts +50 -23
  62. package/src/components/chart/parts.ts +237 -0
  63. package/src/components/chart/react.tsx +2 -2
  64. package/src/components/chart/use-chart.ts +55 -0
  65. package/src/components/data-table/README.md +3 -3
  66. package/src/components/data-table/data-table.css +121 -26
  67. package/src/components/data-table/engine.ts +81 -29
  68. package/src/components/editable-table/engine.ts +67 -11
  69. package/src/components/filter-builder/engine.ts +33 -2
  70. package/src/components/filter-builder/filter-builder.css +10 -15
  71. package/src/components/heatmap-chart/README.md +48 -0
  72. package/src/components/heatmap-chart/element.ts +21 -0
  73. package/src/components/heatmap-chart/engine.ts +281 -0
  74. package/src/components/heatmap-chart/heatmap-chart.css +93 -0
  75. package/src/components/heatmap-chart/react.tsx +14 -0
  76. package/src/components/hover-card/engine.ts +30 -1
  77. package/src/components/hover-card/hover-card.css +8 -2
  78. package/src/components/image-preview/element.ts +1 -1
  79. package/src/components/image-preview/engine.ts +95 -15
  80. package/src/components/image-preview/image-preview.css +90 -2
  81. package/src/components/image-preview/react.tsx +3 -3
  82. package/src/components/json-viewer/engine.ts +11 -2
  83. package/src/components/json-viewer/json-viewer.css +33 -1
  84. package/src/components/nav/README.md +12 -10
  85. package/src/components/nav/element.ts +5 -5
  86. package/src/components/nav/engine.ts +21 -14
  87. package/src/components/nav/nav.css +102 -102
  88. package/src/components/nav/react.tsx +4 -4
  89. package/src/components/orbit-menu/README.md +46 -0
  90. package/src/components/orbit-menu/element.ts +27 -0
  91. package/src/components/orbit-menu/engine.ts +179 -0
  92. package/src/components/orbit-menu/orbit-menu.css +129 -0
  93. package/src/components/orbit-menu/react.tsx +44 -0
  94. package/src/components/pagination/README.md +1 -1
  95. package/src/components/pagination/engine.ts +50 -4
  96. package/src/components/pagination/pagination.css +10 -5
  97. package/src/components/pie-chart/README.md +48 -0
  98. package/src/components/pie-chart/element.ts +30 -0
  99. package/src/components/pie-chart/engine.ts +283 -0
  100. package/src/components/pie-chart/pie-chart.css +92 -0
  101. package/src/components/pie-chart/react.tsx +14 -0
  102. package/src/components/pill-button/README.md +46 -0
  103. package/src/components/pill-button/element.ts +16 -0
  104. package/src/components/pill-button/engine.ts +77 -0
  105. package/src/components/pill-button/pill-button.css +134 -0
  106. package/src/components/pill-button/react.tsx +32 -0
  107. package/src/components/radar-chart/README.md +48 -0
  108. package/src/components/radar-chart/element.ts +30 -0
  109. package/src/components/radar-chart/engine.ts +327 -0
  110. package/src/components/radar-chart/radar-chart.css +72 -0
  111. package/src/components/radar-chart/react.tsx +14 -0
  112. package/src/components/radial-chart/README.md +48 -0
  113. package/src/components/radial-chart/element.ts +30 -0
  114. package/src/components/radial-chart/engine.ts +290 -0
  115. package/src/components/radial-chart/radial-chart.css +100 -0
  116. package/src/components/radial-chart/react.tsx +14 -0
  117. package/src/components/sankey-chart/README.md +48 -0
  118. package/src/components/sankey-chart/element.ts +31 -0
  119. package/src/components/sankey-chart/engine.ts +401 -0
  120. package/src/components/sankey-chart/react.tsx +14 -0
  121. package/src/components/sankey-chart/sankey-chart.css +60 -0
  122. package/src/components/scroll-island/README.md +34 -0
  123. package/src/components/scroll-island/element.ts +16 -0
  124. package/src/components/scroll-island/engine.ts +252 -0
  125. package/src/components/scroll-island/react.tsx +26 -0
  126. package/src/components/scroll-island/scroll-island.css +110 -0
  127. package/src/components/select/README.md +34 -0
  128. package/src/components/select/element.ts +26 -0
  129. package/src/components/select/engine.ts +267 -0
  130. package/src/components/select/react.tsx +33 -0
  131. package/src/components/select/select.css +135 -0
  132. package/src/components/toolbar/README.md +46 -0
  133. package/src/components/toolbar/element.ts +30 -0
  134. package/src/components/toolbar/engine.ts +230 -0
  135. package/src/components/toolbar/react.tsx +34 -0
  136. package/src/components/toolbar/toolbar.css +121 -0
  137. package/src/components/tree-view/element.ts +1 -1
  138. package/src/components/tree-view/engine.ts +174 -0
  139. package/src/components/tree-view/react.tsx +7 -3
  140. package/src/components/tree-view/tree-view.css +79 -0
  141. package/src/components/voice-dots/README.md +48 -0
  142. package/src/components/voice-dots/element.ts +45 -0
  143. package/src/components/voice-dots/engine.ts +243 -0
  144. package/src/components/voice-dots/react.tsx +52 -0
  145. package/src/components/voice-dots/voice-dots.css +69 -0
  146. package/src/elements/index.ts +39 -0
  147. package/src/index.ts +16 -0
  148. package/src/motion/liquid.ts +14 -4
  149. package/src/react/index.ts +14 -1
  150. package/dist/chunk-6P4P7NU6.js +0 -1401
  151. package/dist/chunk-6P4P7NU6.js.map +0 -1
  152. package/dist/chunk-CU6SXW3E.js.map +0 -1
  153. package/dist/store-DjkTBX7f.d.ts +0 -195
  154. /package/dist/{chunk-EY4BJKC4.js.map → chunk-6IRJYXJU.js.map} +0 -0
package/dist/index.css CHANGED
@@ -1234,21 +1234,6 @@
1234
1234
  .mk-shader__canvas { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
1235
1235
  .mk-shader__canvas[hidden] { display: none; }
1236
1236
 
1237
- /* gl/shared/shader.css */
1238
- .mk-shader { position: relative; isolation: isolate; overflow: hidden; }
1239
- .mk-shader__canvas { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
1240
- .mk-shader__canvas[hidden] { display: none; }
1241
-
1242
- /* gl/shared/shader.css */
1243
- .mk-shader { position: relative; isolation: isolate; overflow: hidden; }
1244
- .mk-shader__canvas { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
1245
- .mk-shader__canvas[hidden] { display: none; }
1246
-
1247
- /* gl/shared/shader.css */
1248
- .mk-shader { position: relative; isolation: isolate; overflow: hidden; }
1249
- .mk-shader__canvas { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
1250
- .mk-shader__canvas[hidden] { display: none; }
1251
-
1252
1237
  /* recipes/joined-cta/joined-cta.css */
1253
1238
  .mk-joined-cta { --mk-joined-duration: .5s; --mk-joined-bg: var(--mk-text); --mk-joined-color: var(--mk-bg); position: relative; display: inline-flex; align-items: center; justify-content: center; width: 17.7rem; height: 5.9rem; max-width: 100%; border: 0; padding: 0; background: transparent; text-decoration: none; color: var(--mk-joined-color); cursor: pointer; font: inherit; isolation: isolate; border-radius: var(--mk-radius-full); }
1254
1239
  .mk-joined-cta::before { content: ''; position: absolute; left: 0; width: 7.3rem; height: 5.9rem; border-radius: 100px; background: var(--mk-joined-bg); z-index: -1; transition: width var(--mk-joined-duration) ease-in-out; }
@@ -4447,12 +4432,12 @@ mk-chat > mk-chat-background {
4447
4432
  order: -1;
4448
4433
  }
4449
4434
 
4450
- /* 1 · Clásica: a bordered sidebar, a filled pill for the current page. */
4451
- .mk-shell:has(> .mk-nav--clasica) > .mk-shell__view {
4435
+ /* 1 · sidebar: a bordered sidebar, a filled pill for the current page. */
4436
+ .mk-shell:has(> .mk-nav--sidebar) > .mk-shell__view {
4452
4437
  border-right: 1px solid var(--md-sys-color-surface-container);
4453
4438
  }
4454
4439
 
4455
- .mk-nav--clasica {
4440
+ .mk-nav--sidebar {
4456
4441
  display: flex;
4457
4442
  flex-direction: column;
4458
4443
  min-width: 270px;
@@ -4461,26 +4446,26 @@ mk-chat > mk-chat-background {
4461
4446
  z-index: 1;
4462
4447
  }
4463
4448
 
4464
- .mk-nav--clasica .mk-nav__buttons {
4449
+ .mk-nav--sidebar .mk-nav__buttons {
4465
4450
  display: flex;
4466
4451
  flex-direction: column;
4467
4452
  gap: 4px;
4468
4453
  }
4469
4454
 
4470
- .mk-nav--clasica .mk-nav__actions {
4455
+ .mk-nav--sidebar .mk-nav__actions {
4471
4456
  margin-top: auto;
4472
4457
  display: flex;
4473
4458
  flex-direction: column;
4474
4459
  }
4475
4460
 
4476
- .mk-nav--clasica .mk-nav__options {
4461
+ .mk-nav--sidebar .mk-nav__options {
4477
4462
  display: flex;
4478
4463
  flex-direction: column;
4479
4464
  gap: 4px;
4480
4465
  margin-top: 24px;
4481
4466
  }
4482
4467
 
4483
- .mk-nav--clasica .mk-nav__label {
4468
+ .mk-nav--sidebar .mk-nav__label {
4484
4469
  display: flex;
4485
4470
  align-items: center;
4486
4471
  height: 40px;
@@ -4491,7 +4476,7 @@ mk-chat > mk-chat-background {
4491
4476
  font-weight: 500;
4492
4477
  }
4493
4478
 
4494
- .mk-nav--clasica .mk-nav__button {
4479
+ .mk-nav--sidebar .mk-nav__button {
4495
4480
  display: flex;
4496
4481
  align-items: center;
4497
4482
  gap: 8px;
@@ -4508,34 +4493,34 @@ mk-chat > mk-chat-background {
4508
4493
  0.15s background;
4509
4494
  }
4510
4495
 
4511
- .mk-nav--clasica .mk-nav__button:hover {
4496
+ .mk-nav--sidebar .mk-nav__button:hover {
4512
4497
  color: var(--md-sys-color-primary);
4513
4498
  }
4514
4499
 
4515
- .mk-nav--clasica .mk-nav__button[aria-current='page'] {
4500
+ .mk-nav--sidebar .mk-nav__button[aria-current='page'] {
4516
4501
  background: var(--md-sys-color-surface-container-high);
4517
4502
  color: var(--md-sys-color-primary);
4518
4503
  animation: mk-nav-icon 125ms cubic-bezier(0.48, 0, 0, 1);
4519
4504
  font-variation-settings: 'FILL' 1;
4520
4505
  }
4521
4506
 
4522
- .mk-nav--clasica.mk-nav--accent .mk-nav__button[aria-current='page'] {
4507
+ .mk-nav--sidebar.mk-nav--accent .mk-nav__button[aria-current='page'] {
4523
4508
  background: var(--md-sys-color-primary-container);
4524
4509
  color: var(--md-sys-color-on-primary-container);
4525
4510
  box-shadow: 0 0 32px -10px var(--md-sys-color-primary-container);
4526
4511
  }
4527
4512
 
4528
- .mk-nav--clasica .mk-nav__button.mk-nav__button--first {
4513
+ .mk-nav--sidebar .mk-nav__button.mk-nav__button--first {
4529
4514
  color: var(--md-sys-color-on-background);
4530
4515
  margin-bottom: 32px;
4531
4516
  }
4532
4517
 
4533
- .mk-nav--clasica .mk-nav__button--first .mk-nav__name {
4518
+ .mk-nav--sidebar .mk-nav__button--first .mk-nav__name {
4534
4519
  display: flex;
4535
4520
  flex-grow: 1;
4536
4521
  }
4537
4522
 
4538
- .mk-nav--clasica .mk-nav__button--first::after {
4523
+ .mk-nav--sidebar .mk-nav__button--first::after {
4539
4524
  content: '';
4540
4525
  position: absolute;
4541
4526
  left: -16px;
@@ -4545,8 +4530,8 @@ mk-chat > mk-chat-background {
4545
4530
  background: var(--md-sys-color-surface-container);
4546
4531
  }
4547
4532
 
4548
- /* 2 · Bonita: centred text pills that widen on hover and when current (spring padding). */
4549
- .mk-nav--bonita {
4533
+ /* 2 · pills: centred text pills that widen on hover and when current (spring padding). */
4534
+ .mk-nav--pills {
4550
4535
  display: flex;
4551
4536
  flex-direction: column;
4552
4537
  justify-content: center;
@@ -4555,20 +4540,20 @@ mk-chat > mk-chat-background {
4555
4540
  z-index: 1;
4556
4541
  }
4557
4542
 
4558
- .mk-nav--bonita .mk-nav__buttons {
4543
+ .mk-nav--pills .mk-nav__buttons {
4559
4544
  display: flex;
4560
4545
  flex-direction: column;
4561
4546
  gap: 4px;
4562
4547
  }
4563
4548
 
4564
- .mk-nav--bonita .mk-nav__actions {
4549
+ .mk-nav--pills .mk-nav__actions {
4565
4550
  position: absolute;
4566
4551
  bottom: 16px;
4567
4552
  display: flex;
4568
4553
  gap: 8px;
4569
4554
  }
4570
4555
 
4571
- .mk-nav--bonita .mk-nav__button {
4556
+ .mk-nav--pills .mk-nav__button {
4572
4557
  display: flex;
4573
4558
  align-items: center;
4574
4559
  gap: 8px;
@@ -4588,16 +4573,16 @@ mk-chat > mk-chat-background {
4588
4573
  0.3s padding var(--mk-ease-swatch);
4589
4574
  }
4590
4575
 
4591
- .mk-nav--bonita .mk-nav__icon {
4576
+ .mk-nav--pills .mk-nav__icon {
4592
4577
  display: none;
4593
4578
  }
4594
4579
 
4595
- .mk-nav--bonita .mk-nav__button:hover {
4580
+ .mk-nav--pills .mk-nav__button:hover {
4596
4581
  color: var(--md-sys-color-primary);
4597
4582
  padding: 0 26px;
4598
4583
  }
4599
4584
 
4600
- .mk-nav--bonita .mk-nav__button[aria-current='page'] {
4585
+ .mk-nav--pills .mk-nav__button[aria-current='page'] {
4601
4586
  background: var(--md-sys-color-surface-container-highest);
4602
4587
  color: var(--md-sys-color-on-background);
4603
4588
  animation: mk-nav-icon 125ms cubic-bezier(0.48, 0, 0, 1);
@@ -4605,22 +4590,22 @@ mk-chat > mk-chat-background {
4605
4590
  padding: 0 32px;
4606
4591
  }
4607
4592
 
4608
- .mk-nav--bonita.mk-nav--accent .mk-nav__button[aria-current='page'] {
4593
+ .mk-nav--pills.mk-nav--accent .mk-nav__button[aria-current='page'] {
4609
4594
  background: var(--md-sys-color-primary-container);
4610
4595
  color: var(--md-sys-color-on-primary-container);
4611
4596
  box-shadow: 0 0 32px -10px var(--md-sys-color-primary-container);
4612
4597
  }
4613
4598
 
4614
- .mk-nav--bonita .mk-nav__name {
4599
+ .mk-nav--pills .mk-nav__name {
4615
4600
  display: flex;
4616
4601
  flex-grow: 1;
4617
4602
  }
4618
4603
 
4619
- .mk-nav--bonita .mk-nav__button.mk-nav__button--first {
4604
+ .mk-nav--pills .mk-nav__button.mk-nav__button--first {
4620
4605
  display: none;
4621
4606
  }
4622
4607
 
4623
- /* 3 · Dock: a floating glass bar centred at the bottom. */
4608
+ /* 3 · dock: a floating glass bar centred at the bottom. */
4624
4609
  .mk-shell:has(> .mk-nav--dock) {
4625
4610
  flex-direction: column;
4626
4611
  overflow: auto;
@@ -4725,23 +4710,23 @@ mk-chat > mk-chat-background {
4725
4710
  color: var(--md-sys-color-on-primary-container);
4726
4711
  }
4727
4712
 
4728
- /* 4 · Guapa: the view is a raised card on a tinted shell; the current page is a white chip. */
4729
- .mk-shell:has(> .mk-nav--guapa) {
4713
+ /* 4 · card: the view is a raised card on a tinted shell; the current page is a white chip. */
4714
+ .mk-shell:has(> .mk-nav--card) {
4730
4715
  background: var(--md-sys-color-surface-container-low);
4731
4716
  padding: 8px 8px 8px 0;
4732
4717
  }
4733
4718
 
4734
- .mk-shell:has(> .mk-nav--guapa) > .mk-shell__view {
4719
+ .mk-shell:has(> .mk-nav--card) > .mk-shell__view {
4735
4720
  background: var(--md-sys-color-background);
4736
4721
  border-radius: 24px;
4737
4722
  box-shadow: 0 0.5px 2.5px #0000001f;
4738
4723
  }
4739
4724
 
4740
- .mk-shell:has(> .mk-nav--guapa) > .mk-shell__view:not(:last-of-type) {
4725
+ .mk-shell:has(> .mk-nav--card) > .mk-shell__view:not(:last-of-type) {
4741
4726
  margin-right: 8px;
4742
4727
  }
4743
4728
 
4744
- .mk-nav--guapa {
4729
+ .mk-nav--card {
4745
4730
  display: flex;
4746
4731
  flex-direction: column;
4747
4732
  min-width: 270px;
@@ -4749,24 +4734,24 @@ mk-chat > mk-chat-background {
4749
4734
  z-index: 1;
4750
4735
  }
4751
4736
 
4752
- .mk-nav--guapa .mk-nav__buttons {
4737
+ .mk-nav--card .mk-nav__buttons {
4753
4738
  display: flex;
4754
4739
  flex-direction: column;
4755
4740
  }
4756
4741
 
4757
- .mk-nav--guapa .mk-nav__actions {
4742
+ .mk-nav--card .mk-nav__actions {
4758
4743
  margin-top: auto;
4759
4744
  display: flex;
4760
4745
  flex-direction: column;
4761
4746
  }
4762
4747
 
4763
- .mk-nav--guapa .mk-nav__options {
4748
+ .mk-nav--card .mk-nav__options {
4764
4749
  display: flex;
4765
4750
  flex-direction: column;
4766
4751
  margin-top: 24px;
4767
4752
  }
4768
4753
 
4769
- .mk-nav--guapa .mk-nav__label {
4754
+ .mk-nav--card .mk-nav__label {
4770
4755
  display: flex;
4771
4756
  align-items: center;
4772
4757
  height: 40px;
@@ -4777,7 +4762,7 @@ mk-chat > mk-chat-background {
4777
4762
  font-weight: 500;
4778
4763
  }
4779
4764
 
4780
- .mk-nav--guapa .mk-nav__button {
4765
+ .mk-nav--card .mk-nav__button {
4781
4766
  --mk-nav-icon-size: 16px;
4782
4767
  display: flex;
4783
4768
  align-items: center;
@@ -4795,11 +4780,11 @@ mk-chat > mk-chat-background {
4795
4780
  0.15s background;
4796
4781
  }
4797
4782
 
4798
- .mk-nav--guapa .mk-nav__button:hover {
4783
+ .mk-nav--card .mk-nav__button:hover {
4799
4784
  color: var(--md-sys-color-primary);
4800
4785
  }
4801
4786
 
4802
- .mk-nav--guapa .mk-nav__button[aria-current='page'] {
4787
+ .mk-nav--card .mk-nav__button[aria-current='page'] {
4803
4788
  background: var(--md-sys-color-background);
4804
4789
  color: color-mix(in srgb, var(--md-sys-color-primary) 80%, var(--md-sys-color-primary-container) 90%);
4805
4790
  box-shadow:
@@ -4809,7 +4794,7 @@ mk-chat > mk-chat-background {
4809
4794
  font-variation-settings: 'FILL' 1;
4810
4795
  }
4811
4796
 
4812
- .mk-nav--guapa.mk-nav--accent .mk-nav__button[aria-current='page'] {
4797
+ .mk-nav--card.mk-nav--accent .mk-nav__button[aria-current='page'] {
4813
4798
  background: linear-gradient(
4814
4799
  color-mix(in srgb, var(--md-sys-color-primary-container) 100%, var(--md-sys-color-background) 40%),
4815
4800
  var(--md-sys-color-primary-container)
@@ -4821,30 +4806,30 @@ mk-chat > mk-chat-background {
4821
4806
  inset 0 1.8px #ffffff4d;
4822
4807
  }
4823
4808
 
4824
- .mk-nav--guapa .mk-nav__button.mk-nav__button--first {
4809
+ .mk-nav--card .mk-nav__button.mk-nav__button--first {
4825
4810
  color: var(--md-sys-color-on-background);
4826
4811
  margin-bottom: 16px;
4827
4812
  }
4828
4813
 
4829
- .mk-nav--guapa .mk-nav__button--first .mk-nav__name {
4814
+ .mk-nav--card .mk-nav__button--first .mk-nav__name {
4830
4815
  display: flex;
4831
4816
  flex-grow: 1;
4832
4817
  }
4833
4818
 
4834
- /* 5 · Tasks: a rail of round 56 px buttons; the current one squares off (springy radius). */
4835
- .mk-shell:has(> .mk-nav--tasks) {
4819
+ /* 5 · rail: a rail of round 56 px buttons; the current one squares off (springy radius). */
4820
+ .mk-shell:has(> .mk-nav--rail) {
4836
4821
  padding: 8px;
4837
4822
  }
4838
4823
 
4839
- .mk-shell:has(> .mk-nav--tasks) > .mk-shell__view {
4824
+ .mk-shell:has(> .mk-nav--rail) > .mk-shell__view {
4840
4825
  background: var(--md-sys-color-background);
4841
4826
  }
4842
4827
 
4843
- .mk-shell:has(> .mk-nav--tasks) > .mk-shell__view:not(:last-of-type) .mk-shell__content {
4828
+ .mk-shell:has(> .mk-nav--rail) > .mk-shell__view:not(:last-of-type) .mk-shell__content {
4844
4829
  padding-right: 0 !important;
4845
4830
  }
4846
4831
 
4847
- .mk-nav--tasks {
4832
+ .mk-nav--rail {
4848
4833
  display: flex;
4849
4834
  flex-direction: column;
4850
4835
  width: auto;
@@ -4852,19 +4837,19 @@ mk-chat > mk-chat-background {
4852
4837
  z-index: 1;
4853
4838
  }
4854
4839
 
4855
- .mk-nav--tasks .mk-nav__buttons {
4840
+ .mk-nav--rail .mk-nav__buttons {
4856
4841
  display: flex;
4857
4842
  flex-direction: column;
4858
4843
  gap: 0;
4859
4844
  }
4860
4845
 
4861
- .mk-nav--tasks .mk-nav__actions {
4846
+ .mk-nav--rail .mk-nav__actions {
4862
4847
  margin-top: auto;
4863
4848
  display: flex;
4864
4849
  flex-direction: column;
4865
4850
  }
4866
4851
 
4867
- .mk-nav--tasks .mk-nav__button {
4852
+ .mk-nav--rail .mk-nav__button {
4868
4853
  display: flex;
4869
4854
  align-items: center;
4870
4855
  justify-content: center;
@@ -4883,7 +4868,7 @@ mk-chat > mk-chat-background {
4883
4868
  background 0.25s;
4884
4869
  }
4885
4870
 
4886
- .mk-nav--tasks .mk-nav__name {
4871
+ .mk-nav--rail .mk-nav__name {
4887
4872
  /* Hidden from sight, not from screen readers: the button keeps its name. */
4888
4873
  position: absolute;
4889
4874
  width: 1px;
@@ -4893,11 +4878,11 @@ mk-chat > mk-chat-background {
4893
4878
  white-space: nowrap;
4894
4879
  }
4895
4880
 
4896
- .mk-nav--tasks .mk-nav__button:hover {
4881
+ .mk-nav--rail .mk-nav__button:hover {
4897
4882
  color: var(--md-sys-color-primary);
4898
4883
  }
4899
4884
 
4900
- .mk-nav--tasks .mk-nav__button[aria-current='page'] {
4885
+ .mk-nav--rail .mk-nav__button[aria-current='page'] {
4901
4886
  background: var(--md-sys-color-surface-container-highest);
4902
4887
  color: var(--md-sys-color-primary);
4903
4888
  animation: mk-nav-icon 125ms cubic-bezier(0.48, 0, 0, 1);
@@ -4905,26 +4890,26 @@ mk-chat > mk-chat-background {
4905
4890
  border-radius: 12px;
4906
4891
  }
4907
4892
 
4908
- .mk-nav--tasks.mk-nav--accent .mk-nav__button[aria-current='page'] {
4893
+ .mk-nav--rail.mk-nav--accent .mk-nav__button[aria-current='page'] {
4909
4894
  background: var(--md-sys-color-primary-container);
4910
4895
  color: var(--md-sys-color-on-primary-container);
4911
4896
  }
4912
4897
 
4913
- .mk-nav--tasks .mk-nav__button.mk-nav__button--first {
4898
+ .mk-nav--rail .mk-nav__button.mk-nav__button--first {
4914
4899
  color: var(--md-sys-color-on-background);
4915
4900
  margin-bottom: 8px;
4916
4901
  }
4917
4902
 
4918
- .mk-nav--tasks .mk-nav__button--first .mk-nav__icon {
4903
+ .mk-nav--rail .mk-nav__button--first .mk-nav__icon {
4919
4904
  display: none;
4920
4905
  }
4921
4906
 
4922
- /* 6 · Melon: a soft sidebar with a faint primary wash on the current page. */
4923
- .mk-shell:has(> .mk-nav--melon) > .mk-shell__view {
4907
+ /* 6 · wash: a soft sidebar with a faint primary wash on the current page. */
4908
+ .mk-shell:has(> .mk-nav--wash) > .mk-shell__view {
4924
4909
  border-right: 1px solid var(--md-sys-color-surface-container);
4925
4910
  }
4926
4911
 
4927
- .mk-nav--melon {
4912
+ .mk-nav--wash {
4928
4913
  display: flex;
4929
4914
  flex-direction: column;
4930
4915
  min-width: 270px;
@@ -4932,24 +4917,24 @@ mk-chat > mk-chat-background {
4932
4917
  z-index: 1;
4933
4918
  }
4934
4919
 
4935
- .mk-nav--melon .mk-nav__buttons {
4920
+ .mk-nav--wash .mk-nav__buttons {
4936
4921
  display: flex;
4937
4922
  flex-direction: column;
4938
4923
  }
4939
4924
 
4940
- .mk-nav--melon .mk-nav__actions {
4925
+ .mk-nav--wash .mk-nav__actions {
4941
4926
  margin-top: auto;
4942
4927
  display: flex;
4943
4928
  flex-direction: column;
4944
4929
  }
4945
4930
 
4946
- .mk-nav--melon .mk-nav__options {
4931
+ .mk-nav--wash .mk-nav__options {
4947
4932
  display: flex;
4948
4933
  flex-direction: column;
4949
4934
  margin-top: 24px;
4950
4935
  }
4951
4936
 
4952
- .mk-nav--melon .mk-nav__label {
4937
+ .mk-nav--wash .mk-nav__label {
4953
4938
  display: flex;
4954
4939
  align-items: center;
4955
4940
  height: 40px;
@@ -4960,7 +4945,7 @@ mk-chat > mk-chat-background {
4960
4945
  font-weight: 500;
4961
4946
  }
4962
4947
 
4963
- .mk-nav--melon .mk-nav__button {
4948
+ .mk-nav--wash .mk-nav__button {
4964
4949
  display: flex;
4965
4950
  align-items: center;
4966
4951
  gap: 8px;
@@ -4977,18 +4962,18 @@ mk-chat > mk-chat-background {
4977
4962
  0.15s background;
4978
4963
  }
4979
4964
 
4980
- .mk-nav--melon .mk-nav__button:hover {
4965
+ .mk-nav--wash .mk-nav__button:hover {
4981
4966
  color: var(--md-sys-color-primary);
4982
4967
  }
4983
4968
 
4984
- .mk-nav--melon .mk-nav__button[aria-current='page'] {
4969
+ .mk-nav--wash .mk-nav__button[aria-current='page'] {
4985
4970
  background: color-mix(in srgb, var(--md-sys-color-primary-container) 10%, var(--md-sys-color-background) 90%);
4986
4971
  color: var(--md-sys-color-primary);
4987
4972
  animation: mk-nav-icon 125ms cubic-bezier(0.48, 0, 0, 1);
4988
4973
  font-variation-settings: 'FILL' 1;
4989
4974
  }
4990
4975
 
4991
- .mk-nav--melon.mk-nav--accent .mk-nav__button {
4976
+ .mk-nav--wash.mk-nav--accent .mk-nav__button {
4992
4977
  --mk-nav-icon-size: 16px;
4993
4978
  padding: 8px 12px;
4994
4979
  transition:
@@ -4996,11 +4981,11 @@ mk-chat > mk-chat-background {
4996
4981
  0.15s background;
4997
4982
  }
4998
4983
 
4999
- .mk-nav--melon.mk-nav--accent .mk-nav__label {
4984
+ .mk-nav--wash.mk-nav--accent .mk-nav__label {
5000
4985
  padding: 0 12px;
5001
4986
  }
5002
4987
 
5003
- .mk-nav--melon.mk-nav--accent .mk-nav__button[aria-current='page'] {
4988
+ .mk-nav--wash.mk-nav--accent .mk-nav__button[aria-current='page'] {
5004
4989
  background: var(--md-sys-color-background);
5005
4990
  color: color-mix(in srgb, var(--md-sys-color-primary) 80%, var(--md-sys-color-primary-container) 90%);
5006
4991
  box-shadow:
@@ -5008,22 +4993,22 @@ mk-chat > mk-chat-background {
5008
4993
  0 0.5px 2.5px #00000014;
5009
4994
  }
5010
4995
 
5011
- .mk-nav--melon .mk-nav__button.mk-nav__button--first {
4996
+ .mk-nav--wash .mk-nav__button.mk-nav__button--first {
5012
4997
  color: var(--md-sys-color-on-background);
5013
4998
  margin-bottom: 16px;
5014
4999
  }
5015
5000
 
5016
- .mk-nav--melon .mk-nav__button--first .mk-nav__name {
5001
+ .mk-nav--wash .mk-nav__button--first .mk-nav__name {
5017
5002
  display: flex;
5018
5003
  flex-grow: 1;
5019
5004
  }
5020
5005
 
5021
- /* 7 · Tunnel: big words; the hovered one and its neighbours grow like a dock. */
5022
- .mk-shell:has(> .mk-nav--tunnel) > .mk-shell__view {
5006
+ /* 7 · magnify: big words; the hovered one and its neighbours grow like a dock. */
5007
+ .mk-shell:has(> .mk-nav--magnify) > .mk-shell__view {
5023
5008
  border-right: 1px solid var(--md-sys-color-surface-container);
5024
5009
  }
5025
5010
 
5026
- .mk-nav--tunnel {
5011
+ .mk-nav--magnify {
5027
5012
  display: flex;
5028
5013
  flex-direction: column;
5029
5014
  min-width: 270px;
@@ -5032,25 +5017,25 @@ mk-chat > mk-chat-background {
5032
5017
  z-index: 1;
5033
5018
  }
5034
5019
 
5035
- .mk-nav--tunnel .mk-nav__buttons {
5020
+ .mk-nav--magnify .mk-nav__buttons {
5036
5021
  display: flex;
5037
5022
  flex-direction: column;
5038
5023
  }
5039
5024
 
5040
- .mk-nav--tunnel .mk-nav__actions {
5025
+ .mk-nav--magnify .mk-nav__actions {
5041
5026
  margin-top: auto;
5042
5027
  display: flex;
5043
5028
  flex-direction: column;
5044
5029
  }
5045
5030
 
5046
- .mk-nav--tunnel .mk-nav__options {
5031
+ .mk-nav--magnify .mk-nav__options {
5047
5032
  display: flex;
5048
5033
  flex-direction: column;
5049
5034
  gap: 4px;
5050
5035
  margin-top: 24px;
5051
5036
  }
5052
5037
 
5053
- .mk-nav--tunnel .mk-nav__label {
5038
+ .mk-nav--magnify .mk-nav__label {
5054
5039
  display: flex;
5055
5040
  align-items: center;
5056
5041
  height: 40px;
@@ -5060,7 +5045,7 @@ mk-chat > mk-chat-background {
5060
5045
  font-weight: 500;
5061
5046
  }
5062
5047
 
5063
- .mk-nav--tunnel .mk-nav__button {
5048
+ .mk-nav--magnify .mk-nav__button {
5064
5049
  display: flex;
5065
5050
  align-items: center;
5066
5051
  gap: 8px;
@@ -5080,35 +5065,35 @@ mk-chat > mk-chat-background {
5080
5065
  transform-origin: left;
5081
5066
  }
5082
5067
 
5083
- .mk-nav--tunnel .mk-nav__icon {
5068
+ .mk-nav--magnify .mk-nav__icon {
5084
5069
  display: none;
5085
5070
  }
5086
5071
 
5087
- .mk-nav--tunnel .mk-nav__button:hover {
5072
+ .mk-nav--magnify .mk-nav__button:hover {
5088
5073
  color: var(--md-sys-color-primary-container);
5089
5074
  }
5090
5075
 
5091
- .mk-nav--tunnel .mk-nav__button:not(.mk-nav__button--first):has(+ * + *:hover) {
5076
+ .mk-nav--magnify .mk-nav__button:not(.mk-nav__button--first):has(+ * + *:hover) {
5092
5077
  transform: scale(1.03);
5093
5078
  }
5094
5079
 
5095
- .mk-nav--tunnel .mk-nav__button:not(.mk-nav__button--first):has(+ *:hover) {
5080
+ .mk-nav--magnify .mk-nav__button:not(.mk-nav__button--first):has(+ *:hover) {
5096
5081
  transform: scale(1.09);
5097
5082
  }
5098
5083
 
5099
- .mk-nav--tunnel .mk-nav__button:hover {
5084
+ .mk-nav--magnify .mk-nav__button:hover {
5100
5085
  transform: scale(1.2);
5101
5086
  }
5102
5087
 
5103
- .mk-nav--tunnel .mk-nav__button:not(.mk-nav__button--first):hover + * {
5088
+ .mk-nav--magnify .mk-nav__button:not(.mk-nav__button--first):hover + * {
5104
5089
  transform: scale(1.09);
5105
5090
  }
5106
5091
 
5107
- .mk-nav--tunnel .mk-nav__button:not(.mk-nav__button--first):hover + * + * {
5092
+ .mk-nav--magnify .mk-nav__button:not(.mk-nav__button--first):hover + * + * {
5108
5093
  transform: scale(1.03);
5109
5094
  }
5110
5095
 
5111
- .mk-nav--tunnel .mk-nav__button[aria-current='page'] {
5096
+ .mk-nav--magnify .mk-nav__button[aria-current='page'] {
5112
5097
  color: var(--md-sys-color-primary);
5113
5098
  font-size: 28px;
5114
5099
  font-weight: 600;
@@ -5116,13 +5101,13 @@ mk-chat > mk-chat-background {
5116
5101
  font-variation-settings: 'FILL' 1;
5117
5102
  }
5118
5103
 
5119
- .mk-nav--tunnel.mk-nav--accent .mk-nav__button[aria-current='page'] {
5104
+ .mk-nav--magnify.mk-nav--accent .mk-nav__button[aria-current='page'] {
5120
5105
  background: var(--md-sys-color-primary-container);
5121
5106
  color: var(--md-sys-color-on-primary-container);
5122
5107
  box-shadow: 0 0 32px -10px var(--md-sys-color-primary-container);
5123
5108
  }
5124
5109
 
5125
- .mk-nav--tunnel .mk-nav__button.mk-nav__button--first {
5110
+ .mk-nav--magnify .mk-nav__button.mk-nav__button--first {
5126
5111
  color: var(--md-sys-color-on-background);
5127
5112
  width: 40px;
5128
5113
  padding: 0;
@@ -5134,7 +5119,7 @@ mk-chat > mk-chat-background {
5134
5119
  margin: 8px;
5135
5120
  }
5136
5121
 
5137
- .mk-nav--tunnel .mk-nav__button--first .mk-nav__name {
5122
+ .mk-nav--magnify .mk-nav__button--first .mk-nav__name {
5138
5123
  /* Hidden from sight, not from screen readers: the button keeps its name. */
5139
5124
  position: absolute;
5140
5125
  width: 1px;
@@ -5144,7 +5129,7 @@ mk-chat > mk-chat-background {
5144
5129
  white-space: nowrap;
5145
5130
  }
5146
5131
 
5147
- .mk-nav--tunnel .mk-nav__button--first .mk-nav__icon {
5132
+ .mk-nav--magnify .mk-nav__button--first .mk-nav__icon {
5148
5133
  display: none;
5149
5134
  }
5150
5135
  }
@@ -5270,11 +5255,11 @@ mk-chat > mk-chat-background {
5270
5255
  }
5271
5256
 
5272
5257
  /* Each style's view header. */
5273
- .mk-shell:has(> .mk-nav--clasica) .mk-shell__title {
5258
+ .mk-shell:has(> .mk-nav--sidebar) .mk-shell__title {
5274
5259
  font-size: var(--md-sys-typescale-headline-small-size);
5275
5260
  }
5276
5261
 
5277
- .mk-shell:has(> .mk-nav--clasica) .mk-shell__view:has(> .mk-shell__content) > .mk-shell__header {
5262
+ .mk-shell:has(> .mk-nav--sidebar) .mk-shell__view:has(> .mk-shell__content) > .mk-shell__header {
5278
5263
  position: sticky;
5279
5264
  top: 0;
5280
5265
  z-index: 1;
@@ -5285,13 +5270,13 @@ mk-chat > mk-chat-background {
5285
5270
  padding-top: max(16px, env(safe-area-inset-top));
5286
5271
  }
5287
5272
 
5288
- .mk-shell:has(> .mk-nav--bonita) .mk-shell__title,
5289
- .mk-shell:has(> .mk-nav--tasks) .mk-shell__title {
5273
+ .mk-shell:has(> .mk-nav--pills) .mk-shell__title,
5274
+ .mk-shell:has(> .mk-nav--rail) .mk-shell__title {
5290
5275
  font-size: var(--md-sys-typescale-title-small-size);
5291
5276
  }
5292
5277
 
5293
- .mk-shell:has(> .mk-nav--bonita) .mk-shell__view:has(> .mk-shell__content) > .mk-shell__header,
5294
- .mk-shell:has(> .mk-nav--tasks) .mk-shell__view:has(> .mk-shell__content) > .mk-shell__header {
5278
+ .mk-shell:has(> .mk-nav--pills) .mk-shell__view:has(> .mk-shell__content) > .mk-shell__header,
5279
+ .mk-shell:has(> .mk-nav--rail) .mk-shell__view:has(> .mk-shell__content) > .mk-shell__header {
5295
5280
  display: flex;
5296
5281
  align-items: center;
5297
5282
  margin: 16px 16px -8px;
@@ -5306,7 +5291,7 @@ mk-chat > mk-chat-background {
5306
5291
  padding: 0;
5307
5292
  }
5308
5293
 
5309
- .mk-shell:has(> .mk-nav--bonita) .mk-shell__view:has(> .mk-shell__content) > .mk-shell__header {
5294
+ .mk-shell:has(> .mk-nav--pills) .mk-shell__view:has(> .mk-shell__content) > .mk-shell__header {
5310
5295
  padding-top: env(safe-area-inset-top);
5311
5296
  }
5312
5297
 
@@ -5314,11 +5299,11 @@ mk-chat > mk-chat-background {
5314
5299
  margin-bottom: -24px;
5315
5300
  }
5316
5301
 
5317
- .mk-shell:has(> .mk-nav--guapa) .mk-shell__title {
5302
+ .mk-shell:has(> .mk-nav--card) .mk-shell__title {
5318
5303
  font-size: var(--md-sys-typescale-title-large-size);
5319
5304
  }
5320
5305
 
5321
- .mk-shell:has(> .mk-nav--guapa) .mk-shell__view:has(> .mk-shell__content) > .mk-shell__header {
5306
+ .mk-shell:has(> .mk-nav--card) .mk-shell__view:has(> .mk-shell__content) > .mk-shell__header {
5322
5307
  position: sticky;
5323
5308
  top: 0;
5324
5309
  z-index: 1;
@@ -5332,11 +5317,11 @@ mk-chat > mk-chat-background {
5332
5317
  padding-top: max(12px, env(safe-area-inset-top));
5333
5318
  }
5334
5319
 
5335
- .mk-shell:has(> .mk-nav--melon) .mk-shell__title {
5320
+ .mk-shell:has(> .mk-nav--wash) .mk-shell__title {
5336
5321
  font-size: var(--md-sys-typescale-headline-small-size);
5337
5322
  }
5338
5323
 
5339
- .mk-shell:has(> .mk-nav--melon) .mk-shell__view:has(> .mk-shell__content) > .mk-shell__header {
5324
+ .mk-shell:has(> .mk-nav--wash) .mk-shell__view:has(> .mk-shell__content) > .mk-shell__header {
5340
5325
  position: sticky;
5341
5326
  top: 0;
5342
5327
  z-index: 1;
@@ -5347,7 +5332,7 @@ mk-chat > mk-chat-background {
5347
5332
  }
5348
5333
 
5349
5334
  @media only screen and (max-width: 679.98px) {
5350
- .mk-shell:has(> .mk-nav--tasks) .mk-shell__view:has(> .mk-shell__content) > .mk-shell__header {
5335
+ .mk-shell:has(> .mk-nav--rail) .mk-shell__view:has(> .mk-shell__content) > .mk-shell__header {
5351
5336
  margin: 0;
5352
5337
  border-radius: 0;
5353
5338
  background: none;
@@ -5914,21 +5899,27 @@ mk-cursor {
5914
5899
  @media (prefers-reduced-motion: reduce) { .mk-quantity button, mk-quantity button { transition: none; transform: none !important; } }
5915
5900
 
5916
5901
  /* components/pagination/pagination.css */
5902
+ /* pagination — round page buttons on surface-2; a pill (accent) glides under the current page; numbers that stay slide
5903
+ when the window moves and new ones pop in; hover lifts, press squeezes. */
5917
5904
  .mk-pagination, mk-pagination { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: .35rem; }
5918
- .mk-pagination [data-mk-pagination-pages], mk-pagination [data-mk-pagination-pages] { display: flex; align-items: center; gap: .25rem; }
5919
- .mk-pagination button, mk-pagination button { min-width: 2.5rem; height: 2.5rem; border: 0; border-radius: var(--mk-radius-full); background: var(--mk-surface-2); color: var(--mk-text); font: inherit; cursor: pointer; transition: transform .3s, background .3s, color .3s; }
5905
+ .mk-pagination [data-mk-pagination-pages], mk-pagination [data-mk-pagination-pages] { position: relative; display: flex; align-items: center; gap: .25rem; isolation: isolate; }
5906
+ .mk-pagination button, mk-pagination button { position: relative; min-width: 2.5rem; height: 2.5rem; border: 0; border-radius: var(--mk-radius-full); background: var(--mk-surface-2); color: var(--mk-text); font: inherit; font-variant-numeric: tabular-nums; cursor: pointer; transition: translate .3s cubic-bezier(.38,.49,0,1.5), background-color .25s, color .25s; }
5920
5907
  .mk-pagination button[aria-current], mk-pagination button[aria-current] { background: var(--mk-accent); color: var(--mk-on-accent); }
5921
- .mk-pagination button:hover:not(:disabled), mk-pagination button:hover:not(:disabled) { transform: translateY(-3px); }
5922
- .mk-pagination button:active:not(:disabled), mk-pagination button:active:not(:disabled) { transform: scale(.9); }
5908
+ /* With the engine, the pill paints the current page and its button stays clear. */
5909
+ :is(.mk-pagination, mk-pagination)[data-mk-glide] button[aria-current] { background: transparent; }
5910
+ :is(.mk-pagination, mk-pagination) [data-mk-pagination-indicator] { position: absolute; top: 0; left: 0; z-index: -1; border-radius: var(--mk-radius-full); background: var(--mk-accent); pointer-events: none; }
5911
+ .mk-pagination button:hover:not(:disabled), mk-pagination button:hover:not(:disabled) { translate: 0 -3px; }
5912
+ .mk-pagination button:hover:not(:disabled):not([aria-current]), mk-pagination button:hover:not(:disabled):not([aria-current]) { background: var(--mk-surface-3); }
5923
5913
  .mk-pagination button:focus-visible, mk-pagination button:focus-visible { outline: 2px solid var(--mk-accent); outline-offset: 3px; }
5924
5914
  .mk-pagination button:disabled, mk-pagination button:disabled { opacity: .35; cursor: default; }
5925
5915
  .mk-pagination__gap { padding: 0 .15rem; color: var(--mk-muted); }
5926
- @media (prefers-reduced-motion: reduce) { .mk-pagination button, mk-pagination button { transition: none; transform: none !important; } }
5916
+ @media (prefers-reduced-motion: reduce) { .mk-pagination button, mk-pagination button { transition: none; translate: none !important; } }
5927
5917
 
5928
5918
  /* components/hover-card/hover-card.css */
5929
5919
  .mk-hover-card, mk-hover-card { position: relative; display: inline-flex; }
5930
5920
  .mk-hover-card [data-mk-hover-panel], mk-hover-card [data-mk-hover-panel] {
5931
- transform-origin: 50% 100%;
5921
+ /* It grows from, and folds back into, the trigger's centre (the engine measures it). */
5922
+ transform-origin: var(--mk-hover-origin-x, 50%) 100%;
5932
5923
  position: absolute; z-index: 10; bottom: calc(100% + .75rem); left: var(--mk-hover-shift, 0);
5933
5924
  width: min(19rem, calc(100vw - 1.5rem)); padding: 1.25rem; border-radius: var(--mk-radius-lg);
5934
5925
  color: var(--mk-on-glass-inverse); background: var(--mk-glass-inverse); border: 0; border-radius: var(--mk-radius-lg, 24px);
@@ -5938,11 +5929,16 @@ mk-cursor {
5938
5929
  }
5939
5930
  /* Bridge over the gap so the pointer can travel into the panel. */
5940
5931
  .mk-hover-card [data-mk-hover-panel]::after, mk-hover-card [data-mk-hover-panel]::after { content: ''; position: absolute; inset: -1rem 0; z-index: -1; }
5941
- :is(.mk-hover-card, mk-hover-card)[data-mk-side=bottom] [data-mk-hover-panel] { top: calc(100% + .75rem); bottom: auto; transform-origin: 50% 0; animation-name: mk-hover-card-down; }
5932
+ :is(.mk-hover-card, mk-hover-card)[data-mk-side=bottom] [data-mk-hover-panel] { top: calc(100% + .75rem); bottom: auto; transform-origin: var(--mk-hover-origin-x, 50%) 0; animation-name: mk-hover-card-down; }
5933
+ /* Leaving: it shrinks back into the trigger out of a blur, then the engine hides it. */
5934
+ :is(.mk-hover-card, mk-hover-card)[data-mk-closing] [data-mk-hover-panel] { pointer-events: none; animation: mk-hover-card-out .22s cubic-bezier(.4,0,1,1) both; }
5935
+ :is(.mk-hover-card, mk-hover-card)[data-mk-closing][data-mk-side=bottom] [data-mk-hover-panel] { animation-name: mk-hover-card-out-up; }
5942
5936
  /* Opened from the keyboard: no entrance. */
5943
5937
  :is(.mk-hover-card, mk-hover-card)[data-mk-input=keyboard] [data-mk-hover-panel] { animation: none; }
5944
5938
  .mk-hover-card [hidden], mk-hover-card [hidden] { display: none !important; }
5945
5939
  @keyframes mk-hover-card-in { from { opacity: 0; filter: blur(32px); transform: translateY(8px) scale(.7); } to { opacity: 1; filter: none; transform: none; } }
5940
+ @keyframes mk-hover-card-out { to { opacity: 0; filter: blur(12px); transform: translateY(10px) scale(.3); } }
5941
+ @keyframes mk-hover-card-out-up { to { opacity: 0; filter: blur(12px); transform: translateY(-10px) scale(.3); } }
5946
5942
  @keyframes mk-hover-card-down { from { opacity: 0; filter: blur(32px); transform: translateY(-8px) scale(.7); } to { opacity: 1; filter: none; transform: none; } }
5947
5943
  @media (prefers-reduced-motion: reduce) { .mk-hover-card [data-mk-hover-panel], mk-hover-card [data-mk-hover-panel] { animation: none; } }
5948
5944
 
@@ -8799,7 +8795,8 @@ mk-hold-confirm {
8799
8795
 
8800
8796
  /* components/image-preview/image-preview.css */
8801
8797
  /* image-preview — thumbnails in Melonmind cards (16 px radius) and a full-screen dialog: a blurred dark backdrop, the
8802
- picture at 16 px radius, round glass buttons and a counter pill. */
8798
+ picture at 16 px radius, round glass buttons, a counter pill and a glass strip of 8 px thumbnails with a ring that
8799
+ glides to the current one. */
8803
8800
  .mk-image-preview,
8804
8801
  mk-image-preview {
8805
8802
  display: grid;
@@ -8888,6 +8885,83 @@ mk-image-preview {
8888
8885
  user-select: none;
8889
8886
  }
8890
8887
 
8888
+ /* The picture that leaves while the next one comes in (the engine places it over the old one). */
8889
+ [data-mk-lightbox='ghost'] {
8890
+ border-radius: 16px;
8891
+ object-fit: contain;
8892
+ pointer-events: none;
8893
+ }
8894
+
8895
+ [data-mk-lightbox-dialog][data-mk-strip] [data-mk-lightbox='image'] {
8896
+ max-height: min(78dvh, calc(100dvh - 11rem));
8897
+ }
8898
+
8899
+ [data-mk-lightbox='strip'] {
8900
+ position: absolute;
8901
+ bottom: 1rem;
8902
+ left: 50%;
8903
+ display: flex;
8904
+ gap: 0.375rem;
8905
+ max-width: calc(100vw - 2rem);
8906
+ padding: 0.375rem;
8907
+ overflow-x: auto;
8908
+ border-radius: 14px;
8909
+ background: rgb(255 255 255 / 0.08);
8910
+ box-shadow:
8911
+ inset 1px 1px 1px rgb(255 255 255 / 0.12),
8912
+ inset -1px -1px 1px rgb(255 255 255 / 0.05);
8913
+ backdrop-filter: blur(16px);
8914
+ scrollbar-width: none;
8915
+ translate: -50% 0;
8916
+ }
8917
+
8918
+ [data-mk-lightbox='strip'][hidden] {
8919
+ display: none;
8920
+ }
8921
+
8922
+ [data-mk-lightbox-thumb] {
8923
+ position: relative;
8924
+ z-index: 1;
8925
+ flex: none;
8926
+ width: 2.75rem;
8927
+ height: 2.75rem;
8928
+ padding: 0;
8929
+ overflow: hidden;
8930
+ border: 0;
8931
+ border-radius: 8px;
8932
+ background: rgb(255 255 255 / 0.06);
8933
+ opacity: 0.5;
8934
+ cursor: pointer;
8935
+ transition: opacity 0.2s ease;
8936
+ }
8937
+
8938
+ [data-mk-lightbox-thumb]:hover,
8939
+ [data-mk-lightbox-thumb][aria-current='true'] {
8940
+ opacity: 1;
8941
+ }
8942
+
8943
+ [data-mk-lightbox-thumb]:focus-visible {
8944
+ outline: 2px solid #fff;
8945
+ outline-offset: 2px;
8946
+ }
8947
+
8948
+ [data-mk-lightbox-thumb] img {
8949
+ display: block;
8950
+ width: 100%;
8951
+ height: 100%;
8952
+ object-fit: cover;
8953
+ }
8954
+
8955
+ [data-mk-lightbox-ring] {
8956
+ position: absolute;
8957
+ top: 0;
8958
+ left: 0;
8959
+ z-index: 2;
8960
+ border-radius: 9px;
8961
+ box-shadow: 0 0 0 2px #fff;
8962
+ pointer-events: none;
8963
+ }
8964
+
8891
8965
  [data-mk-lightbox-dialog][data-mk-zoomed] [data-mk-lightbox='image'] {
8892
8966
  cursor: move;
8893
8967
  }
@@ -8977,6 +9051,15 @@ mk-image-preview {
8977
9051
  }
8978
9052
 
8979
9053
  @media (max-width: 680px) {
9054
+ /* Phones swipe; the arrows take the bottom. */
9055
+ [data-mk-lightbox='strip'] {
9056
+ display: none;
9057
+ }
9058
+
9059
+ [data-mk-lightbox-dialog][data-mk-strip] [data-mk-lightbox='image'] {
9060
+ max-height: 78dvh;
9061
+ }
9062
+
8980
9063
  [data-mk-lightbox='prev'],
8981
9064
  [data-mk-lightbox='next'] {
8982
9065
  top: auto;
@@ -8987,7 +9070,8 @@ mk-image-preview {
8987
9070
 
8988
9071
  @media (prefers-reduced-motion: reduce) {
8989
9072
  :is(.mk-image-preview, mk-image-preview) [data-mk-image],
8990
- [data-mk-lightbox-dialog] button[data-mk-lightbox] {
9073
+ [data-mk-lightbox-dialog] button[data-mk-lightbox],
9074
+ [data-mk-lightbox-thumb] {
8991
9075
  transition: none;
8992
9076
  scale: none !important;
8993
9077
  }
@@ -11963,7 +12047,13 @@ mk-filter-builder {
11963
12047
  min-width: 0;
11964
12048
  }
11965
12049
 
11966
- [data-mk-fb-rule] :is(select, input) {
12050
+ /* Choices are the kit's select (select.css draws the button); inputs share its look. */
12051
+ [data-mk-fb-rule] .mk-select {
12052
+ min-width: 8rem;
12053
+ max-width: 100%;
12054
+ }
12055
+
12056
+ [data-mk-fb-rule] input {
11967
12057
  box-sizing: border-box;
11968
12058
  min-width: 0;
11969
12059
  height: 2.5rem;
@@ -11978,22 +12068,11 @@ mk-filter-builder {
11978
12068
  transition: box-shadow 0.2s ease;
11979
12069
  }
11980
12070
 
11981
- [data-mk-fb-rule] select {
11982
- max-width: 100%;
11983
- padding-right: 1.9rem;
11984
- appearance: none;
11985
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6 9l6 6 6-6' fill='none' stroke='%23888' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
11986
- background-position: right 0.55rem center;
11987
- background-repeat: no-repeat;
11988
- background-size: 1rem;
11989
- cursor: pointer;
11990
- }
11991
-
11992
12071
  [data-mk-fb-rule] input {
11993
12072
  width: 9rem;
11994
12073
  }
11995
12074
 
11996
- [data-mk-fb-rule] :is(select, input):focus-visible {
12075
+ [data-mk-fb-rule] input:focus-visible {
11997
12076
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--mk-accent) 35%, transparent);
11998
12077
  }
11999
12078
 
@@ -12092,7 +12171,7 @@ mk-filter-builder {
12092
12171
  }
12093
12172
 
12094
12173
  @media (max-width: 480px) {
12095
- [data-mk-fb-rule] :is(select, input) {
12174
+ [data-mk-fb-rule] :is(.mk-select, input) {
12096
12175
  flex: 1 1 8rem;
12097
12176
  }
12098
12177
  }
@@ -12100,7 +12179,7 @@ mk-filter-builder {
12100
12179
  @media (prefers-reduced-motion: reduce) {
12101
12180
  [data-mk-fb-combinator] [role='radio'],
12102
12181
  [data-mk-fb-actions] button,
12103
- [data-mk-fb-rule] :is(select, input) {
12182
+ [data-mk-fb-rule] input {
12104
12183
  transition: none;
12105
12184
  }
12106
12185
  }
@@ -12777,6 +12856,85 @@ mk-tree-view {
12777
12856
  }
12778
12857
  }
12779
12858
 
12859
+ /* Folder and page icons (icons option): the folder's front opens like a lid with its branch, or under a dragged card. */
12860
+ :is([data-mk-tree-folder], [data-mk-tree-page]) {
12861
+ display: inline-grid;
12862
+ flex: none;
12863
+ place-items: center;
12864
+ width: 1.15rem;
12865
+ height: 1.15rem;
12866
+ }
12867
+
12868
+ :is([data-mk-tree-folder], [data-mk-tree-page]) svg {
12869
+ width: 100%;
12870
+ height: 100%;
12871
+ overflow: visible;
12872
+ }
12873
+
12874
+ [data-mk-tree-folder-back] {
12875
+ fill: color-mix(in srgb, var(--mk-accent) 70%, var(--mk-surface-1));
12876
+ }
12877
+
12878
+ [data-mk-tree-folder-front] {
12879
+ fill: var(--mk-accent);
12880
+ transform-box: fill-box;
12881
+ transform-origin: 50% 100%;
12882
+ transition: transform 0.35s cubic-bezier(0.38, 0.49, 0, 1.5);
12883
+ }
12884
+
12885
+ [role='treeitem'][aria-expanded='true'] > [data-mk-tree-row] [data-mk-tree-folder-front],
12886
+ [role='treeitem'][data-mk-tree-over] > [data-mk-tree-row] [data-mk-tree-folder-front] {
12887
+ transform: skewX(-14deg) scaleY(0.78);
12888
+ }
12889
+
12890
+ [data-mk-tree-sheet] {
12891
+ fill: var(--mk-surface-3);
12892
+ stroke: var(--mk-outline);
12893
+ stroke-width: 2;
12894
+ }
12895
+
12896
+ [data-mk-tree-fold] {
12897
+ fill: var(--mk-outline);
12898
+ }
12899
+
12900
+ /* Dragging: the source row fades, the branch under the card lights up, the card floats with a shadow. */
12901
+ [role='treeitem'][data-mk-tree-dragging] > [data-mk-tree-row] {
12902
+ opacity: 0.4;
12903
+ }
12904
+
12905
+ [role='treeitem'][data-mk-tree-over] > [data-mk-tree-row] {
12906
+ background: color-mix(in srgb, var(--mk-accent) 14%, transparent);
12907
+ box-shadow: inset 0 0 0 1.5px color-mix(in srgb, var(--mk-accent) 55%, transparent);
12908
+ }
12909
+
12910
+ [data-mk-tree-drag] {
12911
+ position: fixed;
12912
+ z-index: 2147483646;
12913
+ display: inline-flex;
12914
+ align-items: center;
12915
+ gap: 0.5rem;
12916
+ max-width: 16rem;
12917
+ padding: 0.45rem 0.75rem;
12918
+ overflow: hidden;
12919
+ border-radius: 10px;
12920
+ background: var(--mk-surface-1);
12921
+ box-shadow:
12922
+ 0 0 0 1px var(--mk-outline-soft),
12923
+ 0 14px 30px -10px color-mix(in srgb, var(--mk-shadow-color, #000) 45%, transparent);
12924
+ color: var(--mk-text);
12925
+ font-size: 0.875rem;
12926
+ font-weight: 500;
12927
+ white-space: nowrap;
12928
+ text-overflow: ellipsis;
12929
+ pointer-events: none;
12930
+ }
12931
+
12932
+ @media (prefers-reduced-motion: reduce) {
12933
+ [data-mk-tree-folder-front] {
12934
+ transition: none;
12935
+ }
12936
+ }
12937
+
12780
12938
  /* components/file-explorer/file-explorer.css */
12781
12939
  /* file-explorer — a 20 px panel on surface-1: a bar (the breadcrumb, 8 px tools, a list/grid switch whose pill slides),
12782
12940
  the folder tree on the side (gone under 560 px), the folder's content as 8 px rows or 12 px tiles, and a status line.
@@ -13493,7 +13651,8 @@ mk-json-viewer {
13493
13651
  transition:
13494
13652
  background-color 0.15s,
13495
13653
  color 0.15s,
13496
- opacity 0.15s;
13654
+ opacity 0.15s,
13655
+ translate 0.2s ease;
13497
13656
  }
13498
13657
 
13499
13658
  [data-mk-jv-tool]:hover,
@@ -13603,6 +13762,27 @@ mk-json-viewer {
13603
13762
  color: var(--mk-muted);
13604
13763
  font-size: 0.75rem;
13605
13764
  text-overflow: ellipsis;
13765
+ transition:
13766
+ opacity 0.25s ease,
13767
+ translate 0.3s cubic-bezier(0.38, 0.49, 0, 1.5);
13768
+ }
13769
+
13770
+ /* An open branch shows its content: the count steps back. */
13771
+ [role='treeitem'][aria-expanded='true'] > [data-mk-tree-row] [data-mk-jv-summary] {
13772
+ opacity: 0.45;
13773
+ translate: -3px 0;
13774
+ }
13775
+
13776
+ /* Hovered values sit on a faint pill of their own colour. */
13777
+ [data-mk-jv-value] {
13778
+ margin: 0 -0.2rem;
13779
+ padding: 0 0.2rem;
13780
+ border-radius: 4px;
13781
+ transition: background-color 0.2s ease;
13782
+ }
13783
+
13784
+ [data-mk-tree-row]:hover [data-mk-jv-value] {
13785
+ background: color-mix(in srgb, currentColor 12%, transparent);
13606
13786
  }
13607
13787
 
13608
13788
  [data-mk-jv-copy] {
@@ -13611,11 +13791,14 @@ mk-json-viewer {
13611
13791
  margin-left: auto;
13612
13792
  border-radius: 6px;
13613
13793
  opacity: 0;
13794
+ translate: 4px 0;
13614
13795
  }
13615
13796
 
13797
+ /* The copy button slides in on hover (or focus). */
13616
13798
  [data-mk-tree-row]:hover [data-mk-jv-copy],
13617
13799
  [role='treeitem']:focus-visible > [data-mk-tree-row] [data-mk-jv-copy] {
13618
13800
  opacity: 1;
13801
+ translate: 0 0;
13619
13802
  }
13620
13803
 
13621
13804
  @media (hover: none) {
@@ -13682,6 +13865,13 @@ mk-json-viewer {
13682
13865
  [data-mk-jv-added] {
13683
13866
  animation: none;
13684
13867
  }
13868
+
13869
+ [data-mk-jv-copy],
13870
+ [data-mk-jv-summary],
13871
+ [data-mk-jv-value] {
13872
+ transition: none;
13873
+ translate: none;
13874
+ }
13685
13875
  }
13686
13876
 
13687
13877
  /* components/virtual-list/virtual-list.css */
@@ -14147,10 +14337,12 @@ mk-split-view {
14147
14337
  /* components/data-table/data-table.css */
14148
14338
  /* data-table — a toolbar (a 12 px search on surface-3, 12 px tool buttons with an accent count), the filter sentence
14149
14339
  on accent-soft, then the table on a 20 px panel: a sticky muted header with sort buttons whose arrow turns, 3rem
14150
- rows on hairlines, chosen rows tinted, 18 px checks that draw themselves, an 8 px row menu button and shimmering
14151
- bones while loading; the foot with the range, rows per page and the pager; the bar of the chosen rows on inverse
14152
- glass. Panels (columns, filters) are anchored .mk-dialog (dialog.css) surfaces with 20 px corners. The table
14153
- scrolls sideways inside its panel when it is wider; --mk-dt-max-height lets it scroll down too. */
14340
+ rows on hairlines, chosen rows softly tinted with an accent edge (their data stays readable), 18 px checks that
14341
+ draw themselves, an 8 px row menu button and shimmering bones while loading; the foot with the range, the rows
14342
+ per page menu and the pager; the bar of the chosen rows takes the toolbar's place, so it never covers a row.
14343
+ Panels and menus (columns, filters, rows per page, row actions) are anchored .mk-dialog (dialog.css) surfaces with
14344
+ 20 px corners and 8 px items. The table scrolls sideways inside its panel when it is wider; --mk-dt-max-height
14345
+ lets it scroll down too. */
14154
14346
  .mk-data-table,
14155
14347
  mk-data-table {
14156
14348
  --mk-dt-max-height: none;
@@ -14164,6 +14356,8 @@ mk-data-table {
14164
14356
 
14165
14357
  /* ── The toolbar ─────────────────────────────────────────────────────────── */
14166
14358
  [data-mk-dt-bar] {
14359
+ grid-row: 1;
14360
+ grid-column: 1;
14167
14361
  display: flex;
14168
14362
  flex-wrap: wrap;
14169
14363
  align-items: center;
@@ -14233,6 +14427,7 @@ mk-data-table {
14233
14427
  }
14234
14428
 
14235
14429
  [data-mk-dt-tool]:focus-visible,
14430
+ [data-mk-dt-size-button]:focus-visible,
14236
14431
  [data-mk-dt-sort]:focus-visible,
14237
14432
  [data-mk-dt-row-menu]:focus-visible,
14238
14433
  [data-mk-dt-pager] button:focus-visible,
@@ -14370,8 +14565,17 @@ mk-data-table {
14370
14565
  background: color-mix(in srgb, var(--mk-text) 3%, transparent);
14371
14566
  }
14372
14567
 
14568
+ /* A chosen row: a light tint and an accent edge, never a fill that hides the data (on OLED the accent is white). */
14373
14569
  [data-mk-dt-table] tbody tr[data-selected] {
14374
- background: color-mix(in srgb, var(--mk-accent-soft) 60%, transparent);
14570
+ background: color-mix(in srgb, var(--mk-accent) 7%, transparent);
14571
+ }
14572
+
14573
+ [data-mk-dt-table] tbody tr[data-selected]:hover {
14574
+ background: color-mix(in srgb, var(--mk-accent) 11%, transparent);
14575
+ }
14576
+
14577
+ [data-mk-dt-table] tbody tr[data-selected] > :first-child {
14578
+ box-shadow: inset 3px 0 0 var(--mk-accent);
14375
14579
  }
14376
14580
 
14377
14581
  [data-mk-dt-table] td mark {
@@ -14443,7 +14647,7 @@ th[data-direction='desc'] [data-mk-dt-sort] svg {
14443
14647
  width: 1.125rem;
14444
14648
  height: 1.125rem;
14445
14649
  box-sizing: border-box;
14446
- border: 1.5px solid var(--mk-outline);
14650
+ border: 2px solid var(--mk-outline);
14447
14651
  border-radius: 5px;
14448
14652
  color: transparent;
14449
14653
  vertical-align: middle;
@@ -14464,6 +14668,9 @@ th[data-direction='desc'] [data-mk-dt-sort] svg {
14464
14668
  }
14465
14669
 
14466
14670
  [data-mk-dt-check] svg {
14671
+ display: block;
14672
+ width: 100%;
14673
+ height: 100%;
14467
14674
  pointer-events: none;
14468
14675
  }
14469
14676
 
@@ -14569,14 +14776,35 @@ th[data-direction='desc'] [data-mk-dt-sort] svg {
14569
14776
  margin-left: auto;
14570
14777
  }
14571
14778
 
14572
- [data-mk-dt-size] select {
14779
+ [data-mk-dt-size-button] {
14780
+ display: inline-flex;
14781
+ align-items: center;
14782
+ gap: 0.25rem;
14573
14783
  height: 2rem;
14574
- padding: 0 0.5rem;
14784
+ padding: 0 0.375rem 0 0.75rem;
14575
14785
  border: 1px solid var(--mk-outline-soft);
14576
14786
  border-radius: 8px;
14577
14787
  background: var(--mk-surface-1);
14578
14788
  color: var(--mk-text);
14579
14789
  font: inherit;
14790
+ font-variant-numeric: tabular-nums;
14791
+ cursor: pointer;
14792
+ transition: background-color 0.15s;
14793
+ }
14794
+
14795
+ [data-mk-dt-size-button]:hover,
14796
+ [data-mk-dt-size-button][aria-expanded='true'] {
14797
+ background: var(--mk-surface-2);
14798
+ }
14799
+
14800
+ [data-mk-dt-size-button] svg {
14801
+ flex: none;
14802
+ color: var(--mk-muted);
14803
+ transition: transform 0.3s cubic-bezier(0.38, 0.49, 0, 1.5);
14804
+ }
14805
+
14806
+ [data-mk-dt-size-button][aria-expanded='true'] svg {
14807
+ transform: rotate(180deg);
14580
14808
  }
14581
14809
 
14582
14810
  [data-mk-dt-pager] {
@@ -14610,24 +14838,28 @@ th[data-direction='desc'] [data-mk-dt-sort] svg {
14610
14838
  }
14611
14839
 
14612
14840
  /* ── The bar of the chosen rows ──────────────────────────────────────────── */
14841
+ /* It shares the toolbar's grid cell and covers it while rows are chosen: the rows stay in view. */
14613
14842
  [data-mk-dt-bulk] {
14614
- position: absolute;
14615
- right: 0;
14616
- bottom: 3.25rem;
14617
- left: 0;
14618
- z-index: 3;
14843
+ position: relative;
14844
+ z-index: 2;
14845
+ grid-row: 1;
14846
+ grid-column: 1;
14619
14847
  display: flex;
14620
14848
  flex-wrap: wrap;
14621
14849
  align-items: center;
14850
+ align-self: stretch;
14622
14851
  gap: 0.25rem 0.5rem;
14623
- width: max-content;
14624
- max-width: calc(100% - 1rem);
14625
- margin-inline: auto;
14626
- padding: 0.375rem 0.375rem 0.375rem 1rem;
14627
- border-radius: 20px;
14628
- background: var(--mk-glass-inverse, var(--mk-text));
14629
- box-shadow: 0 14px 32px -12px color-mix(in srgb, var(--mk-shadow-color, #000) 45%, transparent);
14630
- color: var(--mk-on-glass-inverse, var(--mk-surface-1));
14852
+ min-width: 0;
14853
+ min-height: 2.5rem;
14854
+ padding: 0.25rem 0.25rem 0.25rem 1rem;
14855
+ border-radius: 12px;
14856
+ background: var(--mk-surface-3);
14857
+ color: var(--mk-text);
14858
+ }
14859
+
14860
+ .mk-data-table:has(> [data-mk-dt-bulk]:not([hidden])) > [data-mk-dt-bar],
14861
+ mk-data-table:has(> [data-mk-dt-bulk]:not([hidden])) > [data-mk-dt-bar] {
14862
+ visibility: hidden;
14631
14863
  }
14632
14864
 
14633
14865
  [data-mk-dt-bulk-label] {
@@ -14651,12 +14883,17 @@ th[data-direction='desc'] [data-mk-dt-sort] svg {
14651
14883
  height: 2rem;
14652
14884
  padding: 0 0.75rem;
14653
14885
  border: 0;
14654
- border-radius: 12px;
14655
- background: color-mix(in srgb, currentColor 14%, transparent);
14886
+ border-radius: 8px;
14887
+ background: var(--mk-surface-1);
14656
14888
  color: inherit;
14657
14889
  font: inherit;
14658
14890
  font-weight: 500;
14659
14891
  cursor: pointer;
14892
+ transition: background-color 0.15s;
14893
+ }
14894
+
14895
+ [data-mk-dt-bulk] button:hover {
14896
+ background: var(--mk-surface-2);
14660
14897
  }
14661
14898
 
14662
14899
  [data-mk-dt-bulk] button[data-danger] {
@@ -14664,23 +14901,31 @@ th[data-direction='desc'] [data-mk-dt-sort] svg {
14664
14901
  color: var(--mk-on-error, #fff);
14665
14902
  }
14666
14903
 
14667
- [data-mk-dt-select-all] {
14904
+ [data-mk-dt-bulk] [data-mk-dt-select-all] {
14905
+ background: none;
14668
14906
  text-decoration: underline;
14669
14907
  text-underline-offset: 3px;
14670
14908
  }
14671
14909
 
14672
- [data-mk-dt-bulk-close] {
14910
+ /* The close button is a square with its cross in the middle (the bar's button padding must not reach it). */
14911
+ [data-mk-dt-bulk] [data-mk-dt-bulk-close] {
14673
14912
  display: inline-grid;
14674
14913
  place-items: center;
14675
14914
  width: 2rem;
14915
+ margin-left: auto;
14676
14916
  padding: 0;
14677
14917
  }
14678
14918
 
14919
+ [data-mk-dt-bulk-close] svg {
14920
+ display: block;
14921
+ }
14922
+
14679
14923
  /* ── Panels and the row menu ─────────────────────────────────────────────── */
14680
14924
  .mk-dialog.mk-dt-panel {
14681
14925
  --mk-dialog-radius: 20px;
14682
14926
  --mk-dialog-bg: var(--mk-surface-1);
14683
- --mk-dialog-shadow: 0 16px 48px -12px color-mix(in srgb, var(--mk-shadow-color, #000) 35%, transparent);
14927
+ /* A hairline keeps the panel apart from the table under it (on OLED both are near black). */
14928
+ --mk-dialog-shadow: 0 0 0 1px var(--mk-outline-soft), 0 16px 48px -12px color-mix(in srgb, var(--mk-shadow-color, #000) 35%, transparent);
14684
14929
  gap: 0.5rem;
14685
14930
  width: max-content;
14686
14931
  min-width: min(14rem, calc(100vw - 32px));
@@ -14721,6 +14966,45 @@ th[data-direction='desc'] [data-mk-dt-sort] svg {
14721
14966
  background: var(--mk-surface-2);
14722
14967
  }
14723
14968
 
14969
+ /* The row menu and the rows per page menu look like the panels: 20 px surface, 8 px items, the same hover. */
14970
+ .mk-dialog.mk-dt-panel.mk-dt-menu {
14971
+ gap: 0.125rem;
14972
+ min-width: 9rem;
14973
+ padding: 0.375rem;
14974
+ -webkit-backdrop-filter: none;
14975
+ backdrop-filter: none;
14976
+ }
14977
+
14978
+ .mk-dialog.mk-dt-menu [data-mk-item] {
14979
+ gap: 0.625rem;
14980
+ min-height: 2.25rem;
14981
+ padding: 0 0.625rem;
14982
+ border-radius: 8px;
14983
+ font-family: inherit;
14984
+ font-size: 0.875rem;
14985
+ font-weight: 500;
14986
+ letter-spacing: normal;
14987
+ }
14988
+
14989
+ .mk-dialog.mk-dt-menu [data-mk-item]:hover,
14990
+ .mk-dialog.mk-dt-menu [data-mk-item]:focus-visible {
14991
+ background: var(--mk-surface-2);
14992
+ }
14993
+
14994
+ .mk-dialog.mk-dt-menu [data-mk-item] svg {
14995
+ flex: none;
14996
+ margin-left: auto;
14997
+ opacity: 0;
14998
+ }
14999
+
15000
+ .mk-dialog.mk-dt-menu [data-mk-item][aria-checked='true'] {
15001
+ font-weight: 600;
15002
+ }
15003
+
15004
+ .mk-dialog.mk-dt-menu [data-mk-item][aria-checked='true'] svg {
15005
+ opacity: 1;
15006
+ }
15007
+
14724
15008
  .mk-dialog.mk-dt-menu [data-mk-item][data-danger] {
14725
15009
  color: var(--mk-error);
14726
15010
  }
@@ -14731,6 +15015,7 @@ th[data-direction='desc'] [data-mk-dt-sort] svg {
14731
15015
  }
14732
15016
 
14733
15017
  [data-mk-dt-sort] svg,
15018
+ [data-mk-dt-size-button] svg,
14734
15019
  [data-mk-dt-check] {
14735
15020
  transition: none;
14736
15021
  }
@@ -15222,3 +15507,1382 @@ mk-rich-text-editor {
15222
15507
  animation: none;
15223
15508
  }
15224
15509
  }
15510
+
15511
+ /* components/select/select.css */
15512
+ /* select — a 12 px field button (surface-3) with the chosen label and a chevron that turns, opening the kit's menu:
15513
+ a 16 px surface-1 panel with 8 px items, group headings and a check on the chosen one. The label slides in out of a
15514
+ blur when it changes. The <select> it keeps in step is hidden. */
15515
+ .mk-select,
15516
+ mk-select {
15517
+ display: inline-flex;
15518
+ min-width: 0;
15519
+ max-width: 100%;
15520
+ vertical-align: middle;
15521
+ }
15522
+
15523
+ :is(.mk-select, mk-select) > select[hidden] {
15524
+ display: none;
15525
+ }
15526
+
15527
+ [data-mk-select-trigger] {
15528
+ display: inline-flex;
15529
+ flex: 1;
15530
+ align-items: center;
15531
+ justify-content: space-between;
15532
+ gap: 0.5rem;
15533
+ min-width: 0;
15534
+ height: 2.5rem;
15535
+ padding: 0 0.55rem 0 0.8rem;
15536
+ border: 0;
15537
+ border-radius: 12px;
15538
+ background: var(--mk-surface-3);
15539
+ color: var(--mk-text);
15540
+ font: inherit;
15541
+ font-size: 0.875rem;
15542
+ text-align: start;
15543
+ cursor: pointer;
15544
+ transition:
15545
+ background-color 0.15s,
15546
+ box-shadow 0.2s;
15547
+ }
15548
+
15549
+ [data-mk-select-trigger]:hover:not(:disabled),
15550
+ [data-mk-select-trigger][aria-expanded='true'] {
15551
+ background: color-mix(in srgb, var(--mk-surface-3) 80%, var(--mk-text) 8%);
15552
+ }
15553
+
15554
+ [data-mk-select-trigger]:focus-visible {
15555
+ outline: none;
15556
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--mk-accent) 35%, transparent);
15557
+ }
15558
+
15559
+ [data-mk-select-trigger]:disabled {
15560
+ opacity: 0.45;
15561
+ cursor: default;
15562
+ }
15563
+
15564
+ [data-mk-select-value] {
15565
+ flex: 1;
15566
+ min-width: 0;
15567
+ overflow: hidden;
15568
+ text-overflow: ellipsis;
15569
+ white-space: nowrap;
15570
+ }
15571
+
15572
+ :is(.mk-select, mk-select)[data-mk-placeholder] [data-mk-select-value] {
15573
+ color: var(--mk-muted);
15574
+ }
15575
+
15576
+ [data-mk-select-chevron] {
15577
+ flex: none;
15578
+ color: var(--mk-muted);
15579
+ transition: transform 0.3s cubic-bezier(0.38, 0.49, 0, 1.5);
15580
+ }
15581
+
15582
+ [data-mk-select-trigger][aria-expanded='true'] [data-mk-select-chevron] {
15583
+ transform: rotate(180deg);
15584
+ }
15585
+
15586
+ /* The menu: like the panels of the data table (surface-1, a hairline, 8 px items). */
15587
+ .mk-dialog.mk-select-menu {
15588
+ --mk-dialog-bg: var(--mk-surface-1);
15589
+ --mk-dialog-radius: 16px;
15590
+ --mk-dialog-shadow: 0 0 0 1px var(--mk-outline-soft), 0 16px 48px -12px color-mix(in srgb, var(--mk-shadow-color, #000) 35%, transparent);
15591
+ gap: 0.125rem;
15592
+ min-width: max(10rem, var(--mk-select-width, 0px));
15593
+ max-height: min(20rem, 60dvh);
15594
+ padding: 0.375rem;
15595
+ overflow-y: auto;
15596
+ -webkit-backdrop-filter: none;
15597
+ backdrop-filter: none;
15598
+ }
15599
+
15600
+ .mk-dialog.mk-select-menu [data-mk-item] {
15601
+ flex: none;
15602
+ gap: 0.625rem;
15603
+ min-height: 2.25rem;
15604
+ padding: 0 0.625rem;
15605
+ border-radius: 8px;
15606
+ font-family: inherit;
15607
+ font-size: 0.875rem;
15608
+ font-weight: 500;
15609
+ letter-spacing: normal;
15610
+ }
15611
+
15612
+ .mk-dialog.mk-select-menu [data-mk-item]:hover,
15613
+ .mk-dialog.mk-select-menu [data-mk-item]:focus-visible {
15614
+ background: var(--mk-surface-2);
15615
+ }
15616
+
15617
+ .mk-dialog.mk-select-menu [data-mk-item] svg {
15618
+ flex: none;
15619
+ margin-left: auto;
15620
+ opacity: 0;
15621
+ }
15622
+
15623
+ .mk-dialog.mk-select-menu [data-mk-item][aria-checked='true'] {
15624
+ font-weight: 600;
15625
+ }
15626
+
15627
+ .mk-dialog.mk-select-menu [data-mk-item][aria-checked='true'] svg {
15628
+ opacity: 1;
15629
+ }
15630
+
15631
+ [data-mk-select-group] {
15632
+ flex: none;
15633
+ margin: 0.375rem 0.625rem 0.125rem;
15634
+ color: var(--mk-muted);
15635
+ font-size: 0.6875rem;
15636
+ font-weight: 700;
15637
+ letter-spacing: 0.04em;
15638
+ text-transform: uppercase;
15639
+ }
15640
+
15641
+ @media (prefers-reduced-motion: reduce) {
15642
+ [data-mk-select-trigger],
15643
+ [data-mk-select-chevron] {
15644
+ transition: none;
15645
+ }
15646
+ }
15647
+
15648
+ /* components/add-to-cart/add-to-cart.css */
15649
+ /* add-to-cart — the little box that carries the product to the cart: a kraft front with a tape stripe in the accent,
15650
+ two flaps that close over the picture, a soft shadow; it flies above everything and never takes the pointer. */
15651
+ .mk-add-to-cart,
15652
+ mk-add-to-cart {
15653
+ display: inline-flex;
15654
+ }
15655
+
15656
+ [data-mk-cart-box] {
15657
+ --mk-cart-box: #c99a62;
15658
+ --mk-cart-box-shade: #b0824d;
15659
+ --mk-cart-tape: var(--mk-accent);
15660
+ position: fixed;
15661
+ z-index: 2147483646;
15662
+ pointer-events: none;
15663
+ filter: drop-shadow(0 10px 14px rgb(0 0 0 / 0.28));
15664
+ }
15665
+
15666
+ [data-mk-cart-thumb] {
15667
+ position: absolute;
15668
+ top: 6px;
15669
+ left: 50%;
15670
+ width: 40px;
15671
+ height: 40px;
15672
+ margin-left: -20px;
15673
+ border-radius: 8px;
15674
+ object-fit: cover;
15675
+ }
15676
+
15677
+ [data-mk-cart-front] {
15678
+ position: absolute;
15679
+ right: 0;
15680
+ bottom: 0;
15681
+ left: 0;
15682
+ height: 70%;
15683
+ border-radius: 4px 4px 8px 8px;
15684
+ background: linear-gradient(180deg, var(--mk-cart-box), var(--mk-cart-box-shade));
15685
+ transform-origin: 50% 100%;
15686
+ }
15687
+
15688
+ [data-mk-cart-tape] {
15689
+ position: absolute;
15690
+ top: 0;
15691
+ left: 50%;
15692
+ width: 10px;
15693
+ height: 100%;
15694
+ margin-left: -5px;
15695
+ border-radius: 0 0 2px 2px;
15696
+ background: var(--mk-cart-tape);
15697
+ opacity: 0.9;
15698
+ transform-origin: 50% 0;
15699
+ }
15700
+
15701
+ [data-mk-cart-flap] {
15702
+ position: absolute;
15703
+ top: 18%;
15704
+ width: 50%;
15705
+ height: 14%;
15706
+ background: var(--mk-cart-box-shade);
15707
+ }
15708
+
15709
+ [data-mk-cart-flap='left'] {
15710
+ left: 0;
15711
+ border-radius: 4px 0 0 2px;
15712
+ transform-origin: 0 100%;
15713
+ }
15714
+
15715
+ [data-mk-cart-flap='right'] {
15716
+ right: 0;
15717
+ border-radius: 0 4px 2px 0;
15718
+ transform-origin: 100% 100%;
15719
+ }
15720
+
15721
+ /* components/scroll-island/scroll-island.css */
15722
+ /* scroll-island — the scroller's bar hides and a thin pill takes its place while scrolling; near the edge it swells
15723
+ into a dark capsule (iOS-island style) with the percentage and the current section, which can be dragged. */
15724
+ .mk-scroll-island,
15725
+ mk-scroll-island {
15726
+ display: block;
15727
+ }
15728
+
15729
+ [data-mk-scroll-island-host] {
15730
+ scrollbar-width: none;
15731
+ }
15732
+
15733
+ [data-mk-scroll-island-host]::-webkit-scrollbar {
15734
+ display: none;
15735
+ }
15736
+
15737
+ [data-mk-scroll-island] {
15738
+ position: fixed;
15739
+ z-index: 2147483640;
15740
+ pointer-events: none;
15741
+ }
15742
+
15743
+ [data-mk-island-rail] {
15744
+ position: absolute;
15745
+ top: 0;
15746
+ right: 0;
15747
+ bottom: 0;
15748
+ width: 1.5rem;
15749
+ cursor: pointer;
15750
+ pointer-events: none;
15751
+ }
15752
+
15753
+ [data-mk-island-thumb] {
15754
+ position: absolute;
15755
+ top: 0;
15756
+ right: 0;
15757
+ display: flex;
15758
+ align-items: center;
15759
+ justify-content: center;
15760
+ width: 4px;
15761
+ overflow: hidden;
15762
+ border-radius: 999px;
15763
+ background: color-mix(in srgb, var(--mk-text) 42%, transparent);
15764
+ color: #fff;
15765
+ opacity: 0;
15766
+ transition:
15767
+ opacity 0.25s ease,
15768
+ background-color 0.3s ease,
15769
+ box-shadow 0.3s ease;
15770
+ }
15771
+
15772
+ [data-mk-scroll-island][data-mk-state='bar'] [data-mk-island-thumb] {
15773
+ opacity: 1;
15774
+ }
15775
+
15776
+ [data-mk-scroll-island][data-mk-state='island'] [data-mk-island-rail],
15777
+ [data-mk-scroll-island][data-mk-state='island'] [data-mk-island-thumb] {
15778
+ pointer-events: auto;
15779
+ }
15780
+
15781
+ [data-mk-scroll-island][data-mk-state='island'] [data-mk-island-thumb] {
15782
+ background: #0c0c0e;
15783
+ box-shadow:
15784
+ inset 0 0 0 1px rgb(255 255 255 / 0.08),
15785
+ 0 12px 30px -8px rgb(0 0 0 / 0.45);
15786
+ opacity: 1;
15787
+ cursor: grab;
15788
+ }
15789
+
15790
+ [data-mk-scroll-island][data-mk-dragging] [data-mk-island-thumb] {
15791
+ cursor: grabbing;
15792
+ }
15793
+
15794
+ [data-mk-island-content] {
15795
+ display: inline-flex;
15796
+ flex: none;
15797
+ align-items: center;
15798
+ gap: 0.5rem;
15799
+ padding: 0 14px;
15800
+ font-family: var(--mk-font);
15801
+ font-size: 0.8125rem;
15802
+ font-weight: 600;
15803
+ font-variant-numeric: tabular-nums;
15804
+ white-space: nowrap;
15805
+ opacity: 0;
15806
+ transition: opacity 0.18s ease;
15807
+ }
15808
+
15809
+ [data-mk-scroll-island][data-mk-state='island'] [data-mk-island-content] {
15810
+ opacity: 1;
15811
+ transition-delay: 0.1s;
15812
+ }
15813
+
15814
+ [data-mk-island-section] {
15815
+ max-width: 12rem;
15816
+ overflow: hidden;
15817
+ color: rgb(255 255 255 / 0.68);
15818
+ font-weight: 500;
15819
+ text-overflow: ellipsis;
15820
+ }
15821
+
15822
+ [data-mk-island-section][hidden] {
15823
+ display: none;
15824
+ }
15825
+
15826
+ @media (prefers-reduced-motion: reduce) {
15827
+ [data-mk-island-thumb],
15828
+ [data-mk-island-content] {
15829
+ transition: none;
15830
+ }
15831
+ }
15832
+
15833
+ /* components/pill-button/pill-button.css */
15834
+ /* pill-button — a dark pill whose fill gathers into a circle around the icon on hover (and spreads back on leave).
15835
+ The fill is one layer clipped with inset(); the label and icon sit above it. `expand` starts as the circle. */
15836
+ .mk-pill-button:is(button, a),
15837
+ [data-mk-pill] {
15838
+ --mk-pill-height: 3rem;
15839
+ --mk-pill-dot: 2.25rem;
15840
+ --mk-pill-ink: var(--mk-text);
15841
+ --mk-pill-on-ink: var(--mk-bg);
15842
+ --mk-pill-gap: calc((var(--mk-pill-height) - var(--mk-pill-dot)) / 2);
15843
+ --mk-pill-gathered: inset(var(--mk-pill-gap) var(--mk-pill-gap) var(--mk-pill-gap) calc(100% - var(--mk-pill-gap) - var(--mk-pill-dot)) round var(--mk-radius-full));
15844
+ --mk-pill-spread: inset(0 0 0 0 round var(--mk-radius-full));
15845
+ position: relative;
15846
+ isolation: isolate;
15847
+ display: inline-flex;
15848
+ align-items: center;
15849
+ gap: 1.25rem;
15850
+ height: var(--mk-pill-height);
15851
+ padding: 0 calc(var(--mk-pill-gap) + (var(--mk-pill-dot) - 1.125rem) / 2) 0 1.5rem;
15852
+ border: 0;
15853
+ border-radius: var(--mk-radius-full);
15854
+ background: transparent;
15855
+ color: var(--mk-pill-on-ink);
15856
+ font: 500 1rem/1 var(--mk-font);
15857
+ text-decoration: none;
15858
+ white-space: nowrap;
15859
+ cursor: pointer;
15860
+ -webkit-tap-highlight-color: transparent;
15861
+ }
15862
+
15863
+ mk-pill-button {
15864
+ display: inline-flex;
15865
+ }
15866
+
15867
+ [data-mk-pill-fill] {
15868
+ position: absolute;
15869
+ inset: 0;
15870
+ z-index: -1;
15871
+ border-radius: inherit;
15872
+ background: var(--mk-pill-ink);
15873
+ clip-path: var(--mk-pill-spread);
15874
+ transition: clip-path 0.5s var(--mk-ease-swatch);
15875
+ }
15876
+
15877
+ [data-mk-pill-label] {
15878
+ display: inline-block;
15879
+ color: var(--mk-pill-on-ink);
15880
+ transition:
15881
+ transform 0.45s var(--mk-ease-swatch),
15882
+ color 0.2s ease 0.05s;
15883
+ }
15884
+
15885
+ [data-mk-pill-icon] {
15886
+ display: inline-grid;
15887
+ place-items: center;
15888
+ width: 1.125rem;
15889
+ height: 1.125rem;
15890
+ color: var(--mk-pill-on-ink);
15891
+ transition: transform 0.45s var(--mk-ease-swatch);
15892
+ }
15893
+
15894
+ [data-mk-pill-icon] svg {
15895
+ display: block;
15896
+ width: 100%;
15897
+ height: 100%;
15898
+ }
15899
+
15900
+ /* Gathered: on hover, keyboard focus or a tap. */
15901
+ @media (hover: hover) {
15902
+ :is([data-mk-pill=''], .mk-pill-button:is(button, a):not([data-mk-pill])):hover [data-mk-pill-fill] {
15903
+ clip-path: var(--mk-pill-gathered);
15904
+ }
15905
+ :is([data-mk-pill=''], .mk-pill-button:is(button, a):not([data-mk-pill])):hover [data-mk-pill-label] {
15906
+ color: var(--mk-pill-ink);
15907
+ transform: translateX(-0.5rem);
15908
+ }
15909
+ :is([data-mk-pill], .mk-pill-button:is(button, a)):hover [data-mk-pill-icon] {
15910
+ transform: translateX(2px);
15911
+ }
15912
+ }
15913
+ [data-mk-pill='']:is(:focus-visible, [data-mk-active]) [data-mk-pill-fill] {
15914
+ clip-path: var(--mk-pill-gathered);
15915
+ }
15916
+ [data-mk-pill='']:is(:focus-visible, [data-mk-active]) [data-mk-pill-label] {
15917
+ color: var(--mk-pill-ink);
15918
+ transform: translateX(-0.5rem);
15919
+ }
15920
+
15921
+ /* expand: the circle spreads into the pill. */
15922
+ [data-mk-pill='expand'] [data-mk-pill-fill] {
15923
+ clip-path: var(--mk-pill-gathered);
15924
+ }
15925
+ [data-mk-pill='expand'] [data-mk-pill-label] {
15926
+ color: var(--mk-pill-ink);
15927
+ }
15928
+ @media (hover: hover) {
15929
+ [data-mk-pill='expand']:hover [data-mk-pill-fill] {
15930
+ clip-path: var(--mk-pill-spread);
15931
+ }
15932
+ [data-mk-pill='expand']:hover [data-mk-pill-label] {
15933
+ color: var(--mk-pill-on-ink);
15934
+ transform: translateX(0.25rem);
15935
+ }
15936
+ }
15937
+ [data-mk-pill='expand']:is(:focus-visible, [data-mk-active]) [data-mk-pill-fill] {
15938
+ clip-path: var(--mk-pill-spread);
15939
+ }
15940
+ [data-mk-pill='expand']:is(:focus-visible, [data-mk-active]) [data-mk-pill-label] {
15941
+ color: var(--mk-pill-on-ink);
15942
+ transform: translateX(0.25rem);
15943
+ }
15944
+
15945
+ :is([data-mk-pill], .mk-pill-button:is(button, a)):focus-visible {
15946
+ outline: 2px solid var(--mk-accent);
15947
+ outline-offset: 3px;
15948
+ }
15949
+
15950
+ :is([data-mk-pill], .mk-pill-button:is(button, a)):is(:disabled, [aria-disabled='true']) {
15951
+ cursor: not-allowed;
15952
+ opacity: 0.5;
15953
+ }
15954
+
15955
+ @media (prefers-reduced-motion: reduce) {
15956
+ [data-mk-pill-fill],
15957
+ [data-mk-pill-label],
15958
+ [data-mk-pill-icon] {
15959
+ transition-duration: 0.01s;
15960
+ }
15961
+ }
15962
+
15963
+ @media (forced-colors: active) {
15964
+ [data-mk-pill] {
15965
+ border: 1px solid ButtonText;
15966
+ }
15967
+ }
15968
+
15969
+ /* components/toolbar/toolbar.css */
15970
+ /* toolbar — a dark rail of round tools; a light blob sits under the chosen one and stretches like slime to the next.
15971
+ The label beside a tool is a small dark pill. In the dark theme the rail turns light and the blob dark. */
15972
+ .mk-toolbar,
15973
+ mk-toolbar {
15974
+ --mk-toolbar-rail: color-mix(in srgb, var(--mk-text) 86%, var(--mk-bg));
15975
+ --mk-toolbar-on-rail: var(--mk-bg);
15976
+ --mk-toolbar-blob: var(--mk-bg);
15977
+ --mk-toolbar-on-blob: var(--mk-text);
15978
+ --mk-toolbar-tool: 3.5rem;
15979
+ position: relative;
15980
+ display: inline-flex;
15981
+ width: max-content;
15982
+ max-width: 100%;
15983
+ flex-direction: column;
15984
+ gap: 0.25rem;
15985
+ padding: 0.5rem;
15986
+ border-radius: var(--mk-radius-full);
15987
+ background: var(--mk-toolbar-rail);
15988
+ box-shadow: 0 10px 30px -12px var(--mk-shadow-color, rgb(0 0 0 / 0.35));
15989
+ }
15990
+
15991
+ :is(.mk-toolbar, mk-toolbar)[data-mk-orientation='horizontal'] {
15992
+ flex-direction: row;
15993
+ }
15994
+
15995
+ :is(.mk-toolbar, mk-toolbar) > button {
15996
+ position: relative;
15997
+ z-index: 1;
15998
+ display: grid;
15999
+ place-items: center;
16000
+ width: var(--mk-toolbar-tool);
16001
+ height: var(--mk-toolbar-tool);
16002
+ padding: 0;
16003
+ border: 0;
16004
+ border-radius: var(--mk-radius-full);
16005
+ background: transparent;
16006
+ color: var(--mk-toolbar-on-rail);
16007
+ cursor: pointer;
16008
+ transition: color 0.2s ease;
16009
+ -webkit-tap-highlight-color: transparent;
16010
+ }
16011
+
16012
+ :is(.mk-toolbar, mk-toolbar) > button svg {
16013
+ width: 1.5rem;
16014
+ height: 1.5rem;
16015
+ transition: transform 0.35s var(--mk-ease-swatch);
16016
+ }
16017
+
16018
+ /* The chosen tool's icon turns dark as the blob arrives under it. */
16019
+ :is(.mk-toolbar, mk-toolbar) > button[aria-pressed='true'] {
16020
+ color: var(--mk-toolbar-on-blob);
16021
+ transition-delay: 0.12s;
16022
+ }
16023
+
16024
+ @media (hover: hover) {
16025
+ :is(.mk-toolbar, mk-toolbar) > button:hover svg {
16026
+ transform: scale(1.1);
16027
+ }
16028
+ }
16029
+
16030
+ :is(.mk-toolbar, mk-toolbar) > button:focus-visible {
16031
+ outline: 2px solid var(--mk-accent);
16032
+ outline-offset: 2px;
16033
+ }
16034
+
16035
+ :is(.mk-toolbar, mk-toolbar) > button:disabled {
16036
+ cursor: not-allowed;
16037
+ opacity: 0.4;
16038
+ }
16039
+
16040
+ [data-mk-toolbar-blob] {
16041
+ position: absolute;
16042
+ top: 0;
16043
+ left: 0;
16044
+ width: var(--mk-toolbar-tool);
16045
+ height: var(--mk-toolbar-tool);
16046
+ border-radius: var(--mk-radius-full);
16047
+ background: var(--mk-toolbar-blob);
16048
+ pointer-events: none;
16049
+ will-change: transform, height, width;
16050
+ }
16051
+
16052
+ [data-mk-toolbar-tip] {
16053
+ position: absolute;
16054
+ top: 0;
16055
+ left: calc(100% + 0.75rem);
16056
+ z-index: 2;
16057
+ padding: 0.4rem 0.9rem;
16058
+ border-radius: var(--mk-radius-full);
16059
+ background: var(--mk-toolbar-rail);
16060
+ color: var(--mk-toolbar-on-rail);
16061
+ font: 500 0.875rem/1.2 var(--mk-font);
16062
+ white-space: nowrap;
16063
+ pointer-events: none;
16064
+ }
16065
+
16066
+ :is(.mk-toolbar, mk-toolbar)[data-mk-orientation='horizontal'] [data-mk-toolbar-tip] {
16067
+ top: auto;
16068
+ bottom: calc(100% + 0.75rem);
16069
+ left: 0;
16070
+ }
16071
+
16072
+ [data-mk-toolbar-tip][hidden] {
16073
+ display: none;
16074
+ }
16075
+
16076
+ @media (prefers-reduced-motion: reduce) {
16077
+ :is(.mk-toolbar, mk-toolbar) > button,
16078
+ :is(.mk-toolbar, mk-toolbar) > button svg {
16079
+ transition: none;
16080
+ }
16081
+ }
16082
+
16083
+ @media (forced-colors: active) {
16084
+ [data-mk-toolbar-blob] {
16085
+ background: Highlight;
16086
+ }
16087
+ :is(.mk-toolbar, mk-toolbar) > button[aria-pressed='true'] {
16088
+ color: HighlightText;
16089
+ }
16090
+ }
16091
+
16092
+ /* components/bidirectional-slider/bidirectional-slider.css */
16093
+ /* bidirectional-slider — a chunky 12 px track whose fill grows from the origin notch towards the thumb:
16094
+ "more" in the accent, "less" in a tint of it. − and + sit at the ends; the bubble shows the signed value while held. */
16095
+ .mk-bidirectional-slider,
16096
+ mk-bidirectional-slider {
16097
+ --mk-bislider-height: 2.75rem;
16098
+ --mk-bislider-track: var(--mk-surface-2);
16099
+ --mk-bislider-more: var(--mk-accent);
16100
+ --mk-bislider-less: color-mix(in srgb, var(--mk-accent) 45%, var(--mk-surface-2));
16101
+ display: grid;
16102
+ grid-template-columns: auto minmax(6rem, 1fr) auto;
16103
+ align-items: center;
16104
+ gap: 0.375rem;
16105
+ width: 100%;
16106
+ max-width: 26rem;
16107
+ color: var(--mk-text);
16108
+ }
16109
+
16110
+ [data-mk-bislider-track] {
16111
+ position: relative;
16112
+ height: var(--mk-bislider-height);
16113
+ border-radius: 12px;
16114
+ background: var(--mk-bislider-track);
16115
+ touch-action: none;
16116
+ }
16117
+
16118
+ [data-mk-bislider-track]:has(input:focus-visible) {
16119
+ outline: 2px solid var(--mk-accent);
16120
+ outline-offset: 3px;
16121
+ }
16122
+
16123
+ [data-mk-bislider-clip] {
16124
+ position: absolute;
16125
+ inset: 0;
16126
+ overflow: hidden;
16127
+ border-radius: inherit;
16128
+ pointer-events: none;
16129
+ }
16130
+
16131
+ [data-mk-bislider-fill] {
16132
+ position: absolute;
16133
+ top: 0;
16134
+ bottom: 0;
16135
+ background: var(--mk-bislider-more);
16136
+ transition: background-color 0.2s ease;
16137
+ }
16138
+
16139
+ :is(.mk-bidirectional-slider, mk-bidirectional-slider)[data-mk-side='less'] [data-mk-bislider-fill] {
16140
+ background: var(--mk-bislider-less);
16141
+ }
16142
+
16143
+ [data-mk-bislider-notch] {
16144
+ position: absolute;
16145
+ top: 30%;
16146
+ bottom: 30%;
16147
+ width: 2px;
16148
+ margin-left: -1px;
16149
+ border-radius: 2px;
16150
+ background: color-mix(in srgb, var(--mk-text) 30%, transparent);
16151
+ }
16152
+
16153
+ [data-mk-bislider-thumb] {
16154
+ position: absolute;
16155
+ top: 20%;
16156
+ bottom: 20%;
16157
+ width: 4px;
16158
+ margin-left: -2px;
16159
+ border-radius: 4px;
16160
+ background: var(--mk-text);
16161
+ pointer-events: none;
16162
+ transition: transform 0.35s var(--mk-ease-swatch);
16163
+ }
16164
+
16165
+ :is(.mk-bidirectional-slider, mk-bidirectional-slider)[data-mk-held] [data-mk-bislider-thumb] {
16166
+ transform: scale(1.5, 1.2);
16167
+ }
16168
+
16169
+ [data-mk-bislider-bubble] {
16170
+ position: absolute;
16171
+ bottom: calc(100% + 0.5rem);
16172
+ padding: 0.2rem 0.55rem;
16173
+ border-radius: var(--mk-radius-full);
16174
+ background: var(--mk-glass-inverse);
16175
+ box-shadow: var(--mk-glass-bevel);
16176
+ color: var(--mk-on-glass-inverse);
16177
+ font: 600 0.75rem/1.2 var(--mk-font);
16178
+ font-variant-numeric: tabular-nums;
16179
+ white-space: nowrap;
16180
+ pointer-events: none;
16181
+ opacity: 0;
16182
+ transform: translate(-50%, 4px) scale(0.85);
16183
+ transform-origin: 50% 100%;
16184
+ transition:
16185
+ opacity 0.15s ease,
16186
+ transform 0.3s var(--mk-ease-swatch);
16187
+ }
16188
+
16189
+ :is(.mk-bidirectional-slider, mk-bidirectional-slider):is([data-mk-held], :has(input:focus-visible)) [data-mk-bislider-bubble] {
16190
+ opacity: 1;
16191
+ transform: translate(-50%, 0) scale(1);
16192
+ }
16193
+
16194
+ [data-mk-bislider-input] {
16195
+ position: absolute;
16196
+ inset: 0;
16197
+ width: 100%;
16198
+ height: 100%;
16199
+ margin: 0;
16200
+ opacity: 0;
16201
+ cursor: grab;
16202
+ appearance: none;
16203
+ }
16204
+
16205
+ :is(.mk-bidirectional-slider, mk-bidirectional-slider)[data-mk-held] [data-mk-bislider-input] {
16206
+ cursor: grabbing;
16207
+ }
16208
+
16209
+ :is([data-mk-bislider-less], [data-mk-bislider-more]) {
16210
+ display: grid;
16211
+ place-items: center;
16212
+ width: var(--mk-bislider-height);
16213
+ height: var(--mk-bislider-height);
16214
+ padding: 0;
16215
+ border: 0;
16216
+ border-radius: 12px;
16217
+ background: transparent;
16218
+ color: inherit;
16219
+ cursor: pointer;
16220
+ transition: background-color 0.15s ease;
16221
+ -webkit-tap-highlight-color: transparent;
16222
+ }
16223
+
16224
+ :is([data-mk-bislider-less], [data-mk-bislider-more]) svg {
16225
+ width: 1.25rem;
16226
+ height: 1.25rem;
16227
+ fill: none;
16228
+ stroke: currentColor;
16229
+ stroke-width: 2;
16230
+ stroke-linecap: round;
16231
+ stroke-linejoin: round;
16232
+ }
16233
+
16234
+ @media (hover: hover) {
16235
+ :is([data-mk-bislider-less], [data-mk-bislider-more]):hover {
16236
+ background: var(--mk-surface-2);
16237
+ }
16238
+ }
16239
+
16240
+ :is(.mk-bidirectional-slider, mk-bidirectional-slider):has(input:disabled) {
16241
+ opacity: 0.5;
16242
+ pointer-events: none;
16243
+ }
16244
+
16245
+ @media (prefers-reduced-motion: reduce) {
16246
+ [data-mk-bislider-thumb],
16247
+ [data-mk-bislider-bubble] {
16248
+ transition: opacity 0.15s ease;
16249
+ }
16250
+ }
16251
+
16252
+ @media (forced-colors: active) {
16253
+ [data-mk-bislider-fill] {
16254
+ background: Highlight !important;
16255
+ }
16256
+ [data-mk-bislider-track] {
16257
+ border: 1px solid CanvasText;
16258
+ }
16259
+ }
16260
+
16261
+ /* components/voice-dots/voice-dots.css */
16262
+ /* voice-dots — round dots in the text colour (or the chart colours) that stretch into pills with the voice.
16263
+ The row is tall enough for the tallest pill, so the layout around it never moves. */
16264
+ .mk-voice-dots,
16265
+ mk-voice-dots {
16266
+ --mk-voice-size: 12px;
16267
+ --mk-voice-dot: var(--mk-text);
16268
+ display: inline-grid;
16269
+ place-items: center;
16270
+ min-width: calc(var(--mk-voice-size) * 8);
16271
+ height: calc(var(--mk-voice-size) * 4.6);
16272
+ }
16273
+
16274
+ [data-mk-voice-row] {
16275
+ display: inline-flex;
16276
+ align-items: center;
16277
+ gap: calc(var(--mk-voice-size) * 0.9);
16278
+ height: 100%;
16279
+ }
16280
+
16281
+ [data-mk-voice-dot] {
16282
+ display: block;
16283
+ width: var(--mk-voice-size);
16284
+ height: var(--mk-voice-size);
16285
+ border-radius: var(--mk-radius-full);
16286
+ background: var(--mk-voice-dot);
16287
+ transition:
16288
+ background-color 0.3s ease,
16289
+ opacity 0.3s ease;
16290
+ will-change: transform, height;
16291
+ }
16292
+
16293
+ :is(.mk-voice-dots, mk-voice-dots)[data-mk-state='idle'] [data-mk-voice-dot] {
16294
+ opacity: 0.55;
16295
+ }
16296
+
16297
+ :is(.mk-voice-dots, mk-voice-dots)[data-mk-colorful] [data-mk-voice-dot='1'] {
16298
+ --mk-voice-dot: var(--mk-chart-1, #2a78d6);
16299
+ }
16300
+ :is(.mk-voice-dots, mk-voice-dots)[data-mk-colorful] [data-mk-voice-dot='2'] {
16301
+ --mk-voice-dot: var(--mk-chart-8, #e34948);
16302
+ }
16303
+ :is(.mk-voice-dots, mk-voice-dots)[data-mk-colorful] [data-mk-voice-dot='3'] {
16304
+ --mk-voice-dot: var(--mk-chart-4, #eda100);
16305
+ }
16306
+ :is(.mk-voice-dots, mk-voice-dots)[data-mk-colorful] [data-mk-voice-dot='4'] {
16307
+ --mk-voice-dot: var(--mk-chart-3, #1baf7a);
16308
+ }
16309
+ :is(.mk-voice-dots, mk-voice-dots)[data-mk-colorful] [data-mk-voice-dot='5'] {
16310
+ --mk-voice-dot: var(--mk-chart-7, #6250d6);
16311
+ }
16312
+ :is(.mk-voice-dots, mk-voice-dots)[data-mk-colorful] [data-mk-voice-dot='6'] {
16313
+ --mk-voice-dot: var(--mk-chart-2, #eb6834);
16314
+ }
16315
+
16316
+ /* Without motion the state shows in the dots' colour. */
16317
+ @media (prefers-reduced-motion: reduce) {
16318
+ :is(.mk-voice-dots, mk-voice-dots)[data-mk-state='listening'] [data-mk-voice-dot] {
16319
+ --mk-voice-dot: var(--mk-accent);
16320
+ }
16321
+ :is(.mk-voice-dots, mk-voice-dots)[data-mk-state='thinking'] [data-mk-voice-dot] {
16322
+ opacity: 0.75;
16323
+ }
16324
+ }
16325
+
16326
+ @media (forced-colors: active) {
16327
+ [data-mk-voice-dot] {
16328
+ background: CanvasText;
16329
+ }
16330
+ }
16331
+
16332
+ /* components/pie-chart/pie-chart.css */
16333
+ /* pie-chart — a donut (or pie) in chart's family: it needs chart.css for the colours, tooltip, legend and table.
16334
+ Slices are parted by the surface; the chosen one slides out, the others dim; the donut's middle names it. */
16335
+ .mk-pie-chart,
16336
+ mk-pie-chart {
16337
+ display: grid;
16338
+ justify-items: center;
16339
+ gap: 1rem;
16340
+ }
16341
+
16342
+ [data-mk-chart-type='pie'] [data-mk-chart-plot] {
16343
+ width: 100%;
16344
+ }
16345
+
16346
+ [data-mk-chart-type='pie'] [data-mk-chart-svg] {
16347
+ width: var(--mk-pie-size, 240px);
16348
+ max-width: 100%;
16349
+ margin-inline: auto;
16350
+ border-radius: 50%;
16351
+ cursor: pointer;
16352
+ }
16353
+
16354
+ [data-mk-chart-type='pie'] [data-mk-part='series'] path {
16355
+ stroke: var(--mk-chart-surface);
16356
+ stroke-width: 1;
16357
+ stroke-linejoin: round;
16358
+ transition:
16359
+ transform 0.45s var(--mk-ease-swatch),
16360
+ opacity 0.2s ease;
16361
+ }
16362
+
16363
+ [data-mk-chart-type='pie'] [data-mk-part='series'] path[data-mk-dim] {
16364
+ opacity: 0.4;
16365
+ }
16366
+
16367
+ [data-mk-pie-center] {
16368
+ position: absolute;
16369
+ top: 50%;
16370
+ left: 50%;
16371
+ display: grid;
16372
+ justify-items: center;
16373
+ gap: 0.15rem;
16374
+ max-width: calc(var(--mk-pie-size, 240px) * 0.5);
16375
+ transform: translate(-50%, -50%);
16376
+ text-align: center;
16377
+ pointer-events: none;
16378
+ }
16379
+
16380
+ [data-mk-pie-center][hidden] {
16381
+ display: none;
16382
+ }
16383
+
16384
+ [data-mk-pie-center] strong {
16385
+ color: var(--mk-text);
16386
+ font-size: clamp(1.1rem, calc(var(--mk-pie-size, 240px) * 0.11), 2rem);
16387
+ font-weight: 650;
16388
+ font-variant-numeric: tabular-nums;
16389
+ line-height: 1.1;
16390
+ letter-spacing: -0.02em;
16391
+ }
16392
+
16393
+ [data-mk-pie-center] span {
16394
+ overflow: hidden;
16395
+ max-width: 100%;
16396
+ color: var(--mk-muted);
16397
+ font-size: 0.8125rem;
16398
+ white-space: nowrap;
16399
+ text-overflow: ellipsis;
16400
+ }
16401
+
16402
+ [data-mk-chart-type='pie'] [data-mk-chart-legend] {
16403
+ justify-content: center;
16404
+ }
16405
+
16406
+ [data-mk-chart-type='pie'] [data-mk-chart-legend] li {
16407
+ transition: opacity 0.2s ease;
16408
+ }
16409
+
16410
+ [data-mk-chart-type='pie'] [data-mk-chart-legend] li[data-mk-dim] {
16411
+ opacity: 0.45;
16412
+ }
16413
+
16414
+ @media (prefers-reduced-motion: reduce) {
16415
+ [data-mk-chart-type='pie'] [data-mk-part='series'] path {
16416
+ transition: opacity 0.2s ease;
16417
+ }
16418
+ }
16419
+
16420
+ @media (forced-colors: active) {
16421
+ [data-mk-chart-type='pie'] [data-mk-part='series'] path {
16422
+ stroke: Canvas;
16423
+ }
16424
+ }
16425
+
16426
+ /* components/radar-chart/radar-chart.css */
16427
+ /* radar-chart — hairline rings and spokes, filled shapes (18 %) with a 2 px edge; needs chart.css for the family.
16428
+ The axis under the pointer gets chart's dotted guide and a bolder name. */
16429
+ .mk-radar-chart,
16430
+ mk-radar-chart {
16431
+ display: grid;
16432
+ justify-items: center;
16433
+ gap: 1rem;
16434
+ }
16435
+
16436
+ [data-mk-chart-type='radar'] [data-mk-chart-plot] {
16437
+ width: 100%;
16438
+ }
16439
+
16440
+ [data-mk-chart-type='radar'] [data-mk-chart-svg] {
16441
+ width: var(--mk-radar-size, 300px);
16442
+ max-width: 100%;
16443
+ margin-inline: auto;
16444
+ cursor: crosshair;
16445
+ }
16446
+
16447
+ [data-mk-chart-type='radar'] [data-mk-part='grid'] :is(polygon, circle) {
16448
+ fill: none;
16449
+ stroke: var(--mk-chart-grid);
16450
+ stroke-width: 1;
16451
+ }
16452
+
16453
+ [data-mk-chart-type='radar'] [data-mk-part='grid'] line {
16454
+ shape-rendering: auto;
16455
+ }
16456
+
16457
+ [data-mk-chart-type='radar'] [data-mk-part='axes'] text {
16458
+ font-size: 11px;
16459
+ transition: fill 0.2s ease;
16460
+ }
16461
+
16462
+ [data-mk-chart-type='radar'] [data-mk-part='axes'] text[data-mk-on] {
16463
+ fill: var(--mk-text);
16464
+ font-weight: 600;
16465
+ }
16466
+
16467
+ [data-mk-chart-type='radar'] [data-mk-part='area'] {
16468
+ fill-opacity: 0.18;
16469
+ }
16470
+
16471
+ [data-mk-chart-type='radar'] [data-mk-part='edge'] {
16472
+ fill: none;
16473
+ stroke-width: 2;
16474
+ stroke-linejoin: round;
16475
+ }
16476
+
16477
+ [data-mk-chart-type='radar'] [data-mk-part='dot'] {
16478
+ stroke: var(--mk-chart-surface);
16479
+ stroke-width: 1.5;
16480
+ }
16481
+
16482
+ [data-mk-chart-type='radar'] [data-mk-series] {
16483
+ transition: opacity 0.2s ease;
16484
+ }
16485
+
16486
+ [data-mk-chart-type='radar'] [data-mk-series][data-mk-dim] {
16487
+ opacity: 0.2;
16488
+ }
16489
+
16490
+ [data-mk-chart-type='radar'] [data-mk-chart-legend] {
16491
+ justify-content: center;
16492
+ }
16493
+
16494
+ @media (forced-colors: active) {
16495
+ [data-mk-chart-type='radar'] [data-mk-part='edge'] {
16496
+ stroke: CanvasText !important;
16497
+ }
16498
+ }
16499
+
16500
+ /* components/radial-chart/radial-chart.css */
16501
+ /* radial-chart — rings with round ends over soft tracks; needs chart.css for the family.
16502
+ The chosen ring thickens, the others dim, and the middle names it. */
16503
+ .mk-radial-chart,
16504
+ mk-radial-chart {
16505
+ display: grid;
16506
+ justify-items: center;
16507
+ gap: 1rem;
16508
+ }
16509
+
16510
+ [data-mk-chart-type='radial'] [data-mk-chart-plot] {
16511
+ width: 100%;
16512
+ }
16513
+
16514
+ [data-mk-chart-type='radial'] [data-mk-chart-svg] {
16515
+ width: var(--mk-radial-size, 240px);
16516
+ max-width: 100%;
16517
+ margin-inline: auto;
16518
+ border-radius: 50%;
16519
+ cursor: pointer;
16520
+ }
16521
+
16522
+ [data-mk-chart-type='radial'] :is([data-mk-part='tracks'], [data-mk-part='series']) path {
16523
+ fill: none;
16524
+ stroke-linecap: round;
16525
+ stroke-width: var(--mk-radial-thickness, 12px);
16526
+ transition:
16527
+ stroke-width 0.35s var(--mk-ease-swatch),
16528
+ opacity 0.2s ease;
16529
+ }
16530
+
16531
+ [data-mk-chart-type='radial'] [data-mk-part='tracks'] path {
16532
+ stroke: var(--mk-chart-grid);
16533
+ }
16534
+
16535
+ [data-mk-chart-type='radial'] :is([data-mk-part='tracks'], [data-mk-part='series']) path[data-mk-on] {
16536
+ stroke-width: calc(var(--mk-radial-thickness, 12px) + 4px);
16537
+ }
16538
+
16539
+ [data-mk-chart-type='radial'] :is([data-mk-part='tracks'], [data-mk-part='series']) path[data-mk-dim] {
16540
+ opacity: 0.35;
16541
+ }
16542
+
16543
+ [data-mk-radial-center] {
16544
+ position: absolute;
16545
+ top: 50%;
16546
+ left: 50%;
16547
+ display: grid;
16548
+ justify-items: center;
16549
+ gap: 0.15rem;
16550
+ max-width: calc(var(--mk-radial-size, 240px) * 0.36);
16551
+ transform: translate(-50%, -50%);
16552
+ text-align: center;
16553
+ pointer-events: none;
16554
+ }
16555
+
16556
+ [data-mk-radial-center][hidden] {
16557
+ display: none;
16558
+ }
16559
+
16560
+ [data-mk-radial-center] strong {
16561
+ color: var(--mk-text);
16562
+ font-size: clamp(1rem, calc(var(--mk-radial-size, 240px) * 0.1), 1.75rem);
16563
+ font-weight: 650;
16564
+ font-variant-numeric: tabular-nums;
16565
+ line-height: 1.1;
16566
+ letter-spacing: -0.02em;
16567
+ }
16568
+
16569
+ [data-mk-radial-center] span {
16570
+ overflow: hidden;
16571
+ max-width: 100%;
16572
+ color: var(--mk-muted);
16573
+ font-size: 0.75rem;
16574
+ white-space: nowrap;
16575
+ text-overflow: ellipsis;
16576
+ }
16577
+
16578
+ [data-mk-chart-type='radial'] [data-mk-chart-legend] {
16579
+ justify-content: center;
16580
+ }
16581
+
16582
+ [data-mk-chart-type='radial'] [data-mk-chart-legend] li {
16583
+ transition: opacity 0.2s ease;
16584
+ }
16585
+
16586
+ [data-mk-chart-type='radial'] [data-mk-chart-legend] li[data-mk-dim] {
16587
+ opacity: 0.45;
16588
+ }
16589
+
16590
+ @media (prefers-reduced-motion: reduce) {
16591
+ [data-mk-chart-type='radial'] :is([data-mk-part='tracks'], [data-mk-part='series']) path {
16592
+ transition: opacity 0.2s ease;
16593
+ }
16594
+ }
16595
+
16596
+ @media (forced-colors: active) {
16597
+ [data-mk-chart-type='radial'] [data-mk-part='series'] path {
16598
+ stroke: Highlight !important;
16599
+ }
16600
+ }
16601
+
16602
+ /* components/sankey-chart/sankey-chart.css */
16603
+ /* sankey-chart — bands that fade from their source's colour to their target's (35 %), nodes with 3 px corners;
16604
+ needs chart.css for the family. The flow under the pointer lights up, the rest step back. */
16605
+ .mk-sankey-chart,
16606
+ mk-sankey-chart {
16607
+ display: grid;
16608
+ gap: 1rem;
16609
+ }
16610
+
16611
+ [data-mk-chart-type='sankey'] [data-mk-chart-svg] {
16612
+ cursor: pointer;
16613
+ }
16614
+
16615
+ [data-mk-chart-type='sankey'] [data-mk-part='links'] path {
16616
+ opacity: 0.35;
16617
+ transition: opacity 0.2s ease;
16618
+ }
16619
+
16620
+ [data-mk-chart-type='sankey'] [data-mk-part='links'] path[data-mk-on] {
16621
+ opacity: 0.7;
16622
+ }
16623
+
16624
+ [data-mk-chart-type='sankey'] [data-mk-part='links'] path[data-mk-dim] {
16625
+ opacity: 0.1;
16626
+ }
16627
+
16628
+ [data-mk-chart-type='sankey'] [data-mk-part='nodes'] rect {
16629
+ transition: opacity 0.2s ease;
16630
+ }
16631
+
16632
+ [data-mk-chart-type='sankey'] [data-mk-part='nodes'] rect[data-mk-dim] {
16633
+ opacity: 0.45;
16634
+ }
16635
+
16636
+ [data-mk-chart-type='sankey'] [data-mk-part='labels'] text {
16637
+ fill: var(--mk-text);
16638
+ font-size: 12px;
16639
+ font-weight: 500;
16640
+ paint-order: stroke;
16641
+ stroke: var(--mk-chart-surface);
16642
+ stroke-width: 3px;
16643
+ stroke-linejoin: round;
16644
+ pointer-events: none;
16645
+ }
16646
+
16647
+ [data-mk-chart-type='sankey'] [data-mk-part='amount'] {
16648
+ fill: var(--mk-muted);
16649
+ font-weight: 400;
16650
+ }
16651
+
16652
+ @media (prefers-reduced-motion: reduce) {
16653
+ [data-mk-chart-type='sankey'] :is([data-mk-part='links'] path, [data-mk-part='nodes'] rect) {
16654
+ transition: none;
16655
+ }
16656
+ }
16657
+
16658
+ @media (forced-colors: active) {
16659
+ [data-mk-chart-type='sankey'] [data-mk-part='nodes'] rect {
16660
+ fill: CanvasText !important;
16661
+ }
16662
+ }
16663
+
16664
+ /* components/heatmap-chart/heatmap-chart.css */
16665
+ /* heatmap-chart — a week per column of 3 px rounded days, deepening from the track to the accent; needs chart.css.
16666
+ The day under the pointer lifts with a ring; the "less … more" scale sits under it, to the right. */
16667
+ .mk-heatmap-chart,
16668
+ mk-heatmap-chart {
16669
+ --mk-heatmap-color: var(--mk-accent);
16670
+ --mk-heatmap-empty: var(--mk-surface-2);
16671
+ display: grid;
16672
+ gap: 0.6rem;
16673
+ min-width: 0;
16674
+ }
16675
+
16676
+ [data-mk-heatmap-scroll] {
16677
+ overflow-x: auto;
16678
+ overflow-y: hidden;
16679
+ padding-block: 4px;
16680
+ scrollbar-width: thin;
16681
+ }
16682
+
16683
+ [data-mk-chart-type='heatmap'] [data-mk-chart-svg] {
16684
+ width: var(--mk-heatmap-width, auto);
16685
+ max-width: none;
16686
+ overflow: visible;
16687
+ cursor: pointer;
16688
+ }
16689
+
16690
+ [data-mk-chart-type='heatmap'] [data-mk-part='cells'] rect {
16691
+ transform-box: fill-box;
16692
+ transform-origin: center;
16693
+ transition:
16694
+ fill 0.35s ease,
16695
+ opacity 0.2s ease,
16696
+ transform 0.3s var(--mk-ease-swatch);
16697
+ }
16698
+
16699
+ [data-mk-chart-type='heatmap'] [data-mk-part='cells'] rect[data-mk-on] {
16700
+ stroke: var(--mk-text);
16701
+ stroke-width: 1.5;
16702
+ transform: scale(1.3);
16703
+ }
16704
+
16705
+ [data-mk-chart-type='heatmap'] [data-mk-part='cells'] rect[data-mk-dim] {
16706
+ opacity: 0.25;
16707
+ }
16708
+
16709
+ [data-mk-chart-type='heatmap'] [data-mk-part='months'] text,
16710
+ [data-mk-chart-type='heatmap'] [data-mk-part='weekdays'] text {
16711
+ font-size: 10px;
16712
+ }
16713
+
16714
+ [data-mk-heatmap-scale] {
16715
+ display: flex;
16716
+ align-items: center;
16717
+ justify-content: flex-end;
16718
+ gap: 3px;
16719
+ color: var(--mk-muted);
16720
+ font-size: 0.75rem;
16721
+ }
16722
+
16723
+ [data-mk-heatmap-scale][hidden] {
16724
+ display: none;
16725
+ }
16726
+
16727
+ [data-mk-heatmap-scale] span {
16728
+ margin-inline: 0.35rem;
16729
+ }
16730
+
16731
+ [data-mk-heatmap-scale] i {
16732
+ width: 12px;
16733
+ height: 12px;
16734
+ border-radius: 3px;
16735
+ cursor: pointer;
16736
+ transition: transform 0.25s var(--mk-ease-swatch);
16737
+ }
16738
+
16739
+ @media (hover: hover) {
16740
+ [data-mk-heatmap-scale] i:hover {
16741
+ transform: scale(1.25);
16742
+ }
16743
+ }
16744
+
16745
+ @media (prefers-reduced-motion: reduce) {
16746
+ [data-mk-chart-type='heatmap'] [data-mk-part='cells'] rect,
16747
+ [data-mk-heatmap-scale] i {
16748
+ transition: none;
16749
+ }
16750
+ }
16751
+
16752
+ @media (forced-colors: active) {
16753
+ [data-mk-chart-type='heatmap'] [data-mk-part='cells'] rect {
16754
+ stroke: CanvasText;
16755
+ stroke-width: 0.5;
16756
+ }
16757
+ }
16758
+
16759
+ /* components/orbit-menu/orbit-menu.css */
16760
+ /* orbit-menu — soft white squares (16 px corners, a wide low shadow) around a middle button whose lines turn into an ×.
16761
+ The options sit on the middle and the engine moves them out; give the menu room around it. */
16762
+ .mk-orbit-menu,
16763
+ mk-orbit-menu {
16764
+ --mk-orbit-size: 4rem;
16765
+ --mk-orbit-face: var(--mk-surface-3);
16766
+ --mk-orbit-ink: var(--mk-text);
16767
+ --mk-orbit-shadow: 0 18px 36px -14px rgb(0 0 0 / 0.22), 0 2px 6px -2px rgb(0 0 0 / 0.08);
16768
+ position: relative;
16769
+ display: inline-grid;
16770
+ place-items: center;
16771
+ width: var(--mk-orbit-size);
16772
+ height: var(--mk-orbit-size);
16773
+ }
16774
+
16775
+ :is(.mk-orbit-menu, mk-orbit-menu) :is([data-mk-orbit-toggle], [data-mk-orbit-item]) {
16776
+ display: grid;
16777
+ place-items: center;
16778
+ width: var(--mk-orbit-size);
16779
+ height: var(--mk-orbit-size);
16780
+ padding: 0;
16781
+ border: 1px solid var(--mk-outline-soft);
16782
+ border-radius: var(--mk-radius-md);
16783
+ background: var(--mk-orbit-face);
16784
+ box-shadow: var(--mk-orbit-shadow);
16785
+ color: var(--mk-orbit-ink);
16786
+ cursor: pointer;
16787
+ -webkit-tap-highlight-color: transparent;
16788
+ }
16789
+
16790
+ :is(.mk-orbit-menu, mk-orbit-menu) [data-mk-orbit-toggle] {
16791
+ position: relative;
16792
+ z-index: 2;
16793
+ transition:
16794
+ background-color 0.3s ease,
16795
+ box-shadow 0.3s ease;
16796
+ }
16797
+
16798
+ /* Open: the middle goes glassy, the options are the faces now. */
16799
+ :is(.mk-orbit-menu, mk-orbit-menu)[data-mk-state='open'] [data-mk-orbit-toggle] {
16800
+ background: color-mix(in srgb, var(--mk-orbit-face) 55%, transparent);
16801
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--mk-orbit-ink) 8%, transparent);
16802
+ backdrop-filter: blur(8px);
16803
+ }
16804
+
16805
+ :is(.mk-orbit-menu, mk-orbit-menu) [data-mk-orbit-item] {
16806
+ position: absolute;
16807
+ top: 0;
16808
+ left: 0;
16809
+ z-index: 1;
16810
+ }
16811
+
16812
+ :is(.mk-orbit-menu, mk-orbit-menu) :is([data-mk-orbit-toggle], [data-mk-orbit-item]) svg {
16813
+ width: 1.75rem;
16814
+ height: 1.75rem;
16815
+ transition: transform 0.35s var(--mk-ease-swatch);
16816
+ }
16817
+
16818
+ @media (hover: hover) {
16819
+ :is(.mk-orbit-menu, mk-orbit-menu) [data-mk-orbit-item]:hover svg {
16820
+ transform: scale(1.12);
16821
+ }
16822
+ :is(.mk-orbit-menu, mk-orbit-menu) [data-mk-orbit-item]:hover {
16823
+ box-shadow: 0 22px 40px -14px rgb(0 0 0 / 0.28), 0 2px 6px -2px rgb(0 0 0 / 0.1);
16824
+ }
16825
+ }
16826
+
16827
+ :is(.mk-orbit-menu, mk-orbit-menu) :is([data-mk-orbit-toggle], [data-mk-orbit-item]):focus-visible {
16828
+ outline: 2px solid var(--mk-accent);
16829
+ outline-offset: 3px;
16830
+ }
16831
+
16832
+ /* The three lines and their × . */
16833
+ [data-mk-orbit-burger] {
16834
+ position: relative;
16835
+ width: 1.5rem;
16836
+ height: 1rem;
16837
+ }
16838
+
16839
+ [data-mk-orbit-burger] i {
16840
+ position: absolute;
16841
+ left: 0;
16842
+ width: 100%;
16843
+ height: 2px;
16844
+ border-radius: 2px;
16845
+ background: currentColor;
16846
+ transition:
16847
+ transform 0.4s var(--mk-ease-swatch),
16848
+ opacity 0.2s ease;
16849
+ }
16850
+
16851
+ [data-mk-orbit-burger] i:nth-child(1) {
16852
+ top: 0;
16853
+ }
16854
+
16855
+ [data-mk-orbit-burger] i:nth-child(2) {
16856
+ top: calc(50% - 1px);
16857
+ }
16858
+
16859
+ [data-mk-orbit-burger] i:nth-child(3) {
16860
+ bottom: 0;
16861
+ }
16862
+
16863
+ :is(.mk-orbit-menu, mk-orbit-menu)[data-mk-state='open'] [data-mk-orbit-burger] i:nth-child(1) {
16864
+ transform: translateY(calc(0.5rem - 1px)) rotate(45deg);
16865
+ }
16866
+
16867
+ :is(.mk-orbit-menu, mk-orbit-menu)[data-mk-state='open'] [data-mk-orbit-burger] i:nth-child(2) {
16868
+ opacity: 0;
16869
+ transform: scaleX(0.2);
16870
+ }
16871
+
16872
+ :is(.mk-orbit-menu, mk-orbit-menu)[data-mk-state='open'] [data-mk-orbit-burger] i:nth-child(3) {
16873
+ transform: translateY(calc(-0.5rem + 1px)) rotate(-45deg);
16874
+ }
16875
+
16876
+ @media (prefers-reduced-motion: reduce) {
16877
+ [data-mk-orbit-burger] i,
16878
+ :is(.mk-orbit-menu, mk-orbit-menu) [data-mk-orbit-toggle],
16879
+ :is(.mk-orbit-menu, mk-orbit-menu) svg {
16880
+ transition: none;
16881
+ }
16882
+ }
16883
+
16884
+ @media (forced-colors: active) {
16885
+ :is(.mk-orbit-menu, mk-orbit-menu) :is([data-mk-orbit-toggle], [data-mk-orbit-item]) {
16886
+ border: 1px solid ButtonText;
16887
+ }
16888
+ }