@celestia-island/hikari 0.43.10 → 0.43.13

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 (121) hide show
  1. package/package.json +1 -1
  2. package/src/components/HkAboutModal.scss +12 -1
  3. package/src/components/HkAdaptiveDialog.scss +2 -2
  4. package/src/components/HkAffixPicker.scss +55 -27
  5. package/src/components/HkAlert.scss +35 -31
  6. package/src/components/HkAltSignIn.scss +10 -4
  7. package/src/components/HkAuthMethodList.scss +5 -5
  8. package/src/components/HkAuthSubmitButton.scss +3 -3
  9. package/src/components/HkAvatar.scss +10 -49
  10. package/src/components/HkBadge.scss +6 -9
  11. package/src/components/HkBlockingToast.scss +27 -10
  12. package/src/components/HkBoard.scss +26 -6
  13. package/src/components/HkBreadcrumb.scss +82 -268
  14. package/src/components/HkButton.scss +26 -3
  15. package/src/components/HkCaptchaWidget.scss +2 -3
  16. package/src/components/HkCard.scss +14 -8
  17. package/src/components/HkCheckbox.scss +11 -9
  18. package/src/components/HkColorPicker.scss +22 -8
  19. package/src/components/HkContextRing.scss +8 -4
  20. package/src/components/HkCookieConsent.scss +12 -3
  21. package/src/components/HkDatePicker.scss +49 -65
  22. package/src/components/HkDateTimePicker.scss +48 -31
  23. package/src/components/HkDivider.scss +14 -15
  24. package/src/components/HkDraggableGrid.scss +41 -11
  25. package/src/components/HkDraggableList.scss +22 -11
  26. package/src/components/HkDrawer.scss +24 -4
  27. package/src/components/HkEmptyState.scss +10 -11
  28. package/src/components/HkErrorLanding.scss +5 -5
  29. package/src/components/HkExpansionPanel.scss +6 -2
  30. package/src/components/HkFab.scss +29 -12
  31. package/src/components/HkFileBrowserDialog.scss +21 -10
  32. package/src/components/HkFileField.scss +20 -9
  33. package/src/components/HkFilePickerField.scss +12 -6
  34. package/src/components/HkGaugeRing.scss +8 -0
  35. package/src/components/HkHoverRevealAction.scss +30 -12
  36. package/src/components/HkIcon.scss +0 -18
  37. package/src/components/HkIconButton.scss +29 -62
  38. package/src/components/HkIconButtonVars.scss +8 -28
  39. package/src/components/HkImageLightbox.scss +4 -3
  40. package/src/components/HkImagePreview.scss +17 -9
  41. package/src/components/HkImageViewer.scss +8 -0
  42. package/src/components/HkInput.scss +28 -28
  43. package/src/components/HkJsonTree.scss +13 -9
  44. package/src/components/HkKeywordSearchModal.scss +40 -29
  45. package/src/components/HkLabel.scss +8 -3
  46. package/src/components/HkListTransition.scss +16 -1
  47. package/src/components/HkLoadMore.scss +11 -2
  48. package/src/components/HkLocalizedInput.scss +11 -11
  49. package/src/components/HkLogWindow.scss +22 -4
  50. package/src/components/HkLogo.scss +12 -3
  51. package/src/components/HkMarkdownRenderer.scss +19 -13
  52. package/src/components/HkMediaControlBar.scss +2 -4
  53. package/src/components/HkMediaSlider.scss +0 -2
  54. package/src/components/HkMenu.scss +32 -20
  55. package/src/components/HkMenuIdentityItem.scss +3 -3
  56. package/src/components/HkMinimap.scss +23 -8
  57. package/src/components/HkModal.scss +17 -20
  58. package/src/components/HkModalBreadcrumb.scss +25 -6
  59. package/src/components/HkModelTag.scss +23 -13
  60. package/src/components/HkNavItem.scss +27 -14
  61. package/src/components/HkNumberInput.scss +25 -21
  62. package/src/components/HkPageHeader.scss +7 -6
  63. package/src/components/HkPasswordInput.scss +36 -36
  64. package/src/components/HkPhaseTransition.scss +16 -0
  65. package/src/components/HkPhoneInput.scss +10 -5
  66. package/src/components/HkPickerPane.scss +32 -5
  67. package/src/components/HkPlaceholderMarquee.scss +7 -2
  68. package/src/components/HkPlaceholderMarquee.test.ts +27 -0
  69. package/src/components/HkPlaceholderMarquee.tsx +14 -6
  70. package/src/components/HkPopover.scss +18 -10
  71. package/src/components/HkPopupSelect.scss +28 -7
  72. package/src/components/HkProgressBar.scss +29 -7
  73. package/src/components/HkProgressDialog.scss +4 -2
  74. package/src/components/HkProgressRing.scss +7 -14
  75. package/src/components/HkProtocolModal.scss +0 -3
  76. package/src/components/HkQrCode.scss +2 -2
  77. package/src/components/HkRadio.scss +15 -6
  78. package/src/components/HkRichInput.scss +29 -13
  79. package/src/components/HkRollingNumber.scss +14 -6
  80. package/src/components/HkScrollContainer.scss +20 -8
  81. package/src/components/HkSearchInput.scss +12 -10
  82. package/src/components/HkSecretRevealModal.scss +11 -1
  83. package/src/components/HkSelect.scss +35 -17
  84. package/src/components/HkSelectionGrid.scss +41 -20
  85. package/src/components/HkSelectionWaterfall.scss +21 -9
  86. package/src/components/HkShareBar.scss +14 -5
  87. package/src/components/HkSidebar.scss +23 -9
  88. package/src/components/HkSkeleton.scss +16 -8
  89. package/src/components/HkSlider.scss +12 -2
  90. package/src/components/HkSpinner.scss +15 -9
  91. package/src/components/HkSplash.scss +10 -10
  92. package/src/components/HkStatCard.scss +7 -3
  93. package/src/components/HkStatusPill.scss +4 -7
  94. package/src/components/HkStepFlow.scss +24 -4
  95. package/src/components/HkSwitch.scss +41 -9
  96. package/src/components/HkTable.scss +25 -20
  97. package/src/components/HkTabs.scss +40 -26
  98. package/src/components/HkTag.scss +35 -29
  99. package/src/components/HkTagInput.scss +22 -16
  100. package/src/components/HkTextarea.scss +8 -6
  101. package/src/components/HkThemeToggle.scss +28 -18
  102. package/src/components/HkTimeline.scss +46 -29
  103. package/src/components/HkTimeline.test.tsx +39 -0
  104. package/src/components/HkTimeline.tsx +16 -2
  105. package/src/components/HkTitleBar.scss +16 -7
  106. package/src/components/HkToast.scss +40 -10
  107. package/src/components/HkTokenUsagePanel.scss +11 -6
  108. package/src/components/HkToolBlock.scss +23 -11
  109. package/src/components/HkTooltip.scss +5 -9
  110. package/src/components/HkTree.scss +26 -35
  111. package/src/components/HkVoiceInputPopup.scss +11 -6
  112. package/src/components/HkWindowedItem.scss +3 -9
  113. package/src/components/HkZoomToolbar.scss +12 -10
  114. package/src/components/_menu-item.scss +4 -3
  115. package/src/components/window-close.scss +8 -13
  116. package/src/composables/layoutGeometry.test.ts +177 -0
  117. package/src/composables/layoutGeometry.ts +231 -0
  118. package/src/composables/useOverlayScrollbar.test.ts +32 -0
  119. package/src/composables/useOverlayScrollbar.ts +9 -1
  120. package/src/composables/usePointerReorder.test.ts +5 -2
  121. package/src/composables/usePointerReorder.ts +83 -147
@@ -7,7 +7,7 @@
7
7
  .hk-dtp {
8
8
  display: flex;
9
9
  flex-direction: column;
10
- gap: var(--hi-space-8, 8px);
10
+ gap: var(--space-8, 8px);
11
11
  user-select: none;
12
12
  /* Fill the host (inline sheets/dialogs) instead of collapsing to the
13
13
  * grid's min-content width — a bottom-sheet calendar should use the
@@ -20,10 +20,7 @@
20
20
  display: grid;
21
21
  grid-template-columns: 1fr auto 1fr;
22
22
  align-items: center;
23
- gap: var(--hi-space-8, 8px);
24
- }
25
-
26
- .hk-dtp-header {
23
+ gap: var(--space-8, 8px);
27
24
  /* Fixed height keeps the header row — and therefore the shared stage
28
25
  * height — identical in every view and locale (enlarged on touch). */
29
26
  height: var(--hk-picker-header);
@@ -32,7 +29,7 @@
32
29
  .hk-dtp-header-side {
33
30
  display: flex;
34
31
  align-items: center;
35
- gap: var(--hi-space-2, 2px);
32
+ gap: var(--space-2, 2px);
36
33
  min-width: 0;
37
34
  }
38
35
 
@@ -41,7 +38,7 @@
41
38
  }
42
39
 
43
40
  .hk-dtp-title {
44
- font-size: var(--hi-text-sm, 0.875rem);
41
+ font-size: var(--text-sm, 0.875rem);
45
42
  font-weight: 600;
46
43
  color: var(--hi-color-text-primary);
47
44
  font-variant-numeric: tabular-nums;
@@ -49,14 +46,14 @@
49
46
  display: flex;
50
47
  align-items: center;
51
48
  justify-content: center;
52
- gap: var(--hi-space-4, 4px);
49
+ gap: var(--space-4, 4px);
53
50
  }
54
51
 
55
52
  .hk-dtp-title-btn {
56
53
  appearance: none;
57
54
  background: transparent;
58
55
  border: 0;
59
- padding: var(--hi-space-2, 2px) var(--hi-space-4, 4px);
56
+ padding: var(--space-2, 2px) var(--space-4, 4px);
60
57
  font: inherit;
61
58
  font-weight: 600;
62
59
  color: inherit;
@@ -106,12 +103,12 @@
106
103
  .hk-dtp-grid {
107
104
  display: grid;
108
105
  grid-template-columns: repeat(7, 1fr);
109
- gap: 2px;
106
+ gap: var(--space-2, 2px);
110
107
  }
111
108
 
112
109
  .hk-dtp-wd {
113
110
  text-align: center;
114
- font-size: var(--hi-text-xs, 0.75rem);
111
+ font-size: var(--text-xs, 0.75rem);
115
112
  font-weight: 600;
116
113
  color: var(--hi-color-muted);
117
114
  height: var(--hk-picker-wd);
@@ -135,7 +132,7 @@
135
132
  justify-content: center;
136
133
  color: color-mix(in srgb, var(--hi-color-text-secondary) 70%, transparent);
137
134
  cursor: pointer;
138
- font-size: var(--hi-text-xs, 0.75rem);
135
+ font-size: var(--text-xs, 0.75rem);
139
136
  font-variant-numeric: tabular-nums;
140
137
  transition: background var(--hi-duration-fast, 0.15s) ease, color var(--hi-duration-fast, 0.15s) ease;
141
138
 
@@ -187,7 +184,7 @@
187
184
 
188
185
  .hk-dtp-cell[data-variant="pick"] {
189
186
  height: var(--hk-picker-pick);
190
- font-size: var(--hi-text-xs, 0.75rem);
187
+ font-size: var(--text-xs, 0.75rem);
191
188
  font-weight: 500;
192
189
  }
193
190
 
@@ -211,7 +208,7 @@
211
208
  display: flex;
212
209
  align-items: center;
213
210
  justify-content: center;
214
- gap: var(--hi-space-10, 10px);
211
+ gap: var(--space-10, 10px);
215
212
  /* Spacing comes from the .hk-dtp gap (the row sits under the fixed
216
213
  * stage in every view); only the separator border remains. */
217
214
  border-top: 1px solid color-mix(in srgb, var(--hi-color-border) 10%, transparent);
@@ -242,10 +239,15 @@
242
239
  color: var(--hi-color-text-primary);
243
240
  background: var(--hi-color-surface);
244
241
  }
242
+
243
+ &:focus-visible {
244
+ outline: 2px solid color-mix(in srgb, var(--hi-color-primary) 55%, transparent);
245
+ outline-offset: 1px;
246
+ }
245
247
  }
246
248
 
247
249
  .hk-dtp-step-val {
248
- font-size: var(--hi-text-base, 1rem);
250
+ font-size: var(--text-base, 0.875rem);
249
251
  font-variant-numeric: tabular-nums;
250
252
  min-width: 1.75rem;
251
253
  text-align: center;
@@ -254,29 +256,33 @@
254
256
  }
255
257
 
256
258
  .hk-dtp-time-sep {
257
- font-size: var(--hi-text-base, 1rem);
259
+ font-size: var(--text-base, 0.875rem);
258
260
  color: var(--hi-color-muted);
259
- padding-top: var(--hi-space-10, 10px);
261
+ padding-top: var(--space-10, 10px);
260
262
  }
261
263
 
262
264
  .hk-dtp-today {
263
- margin-left: var(--hi-space-4, 4px);
265
+ margin-inline-start: var(--space-4, 4px);
264
266
  appearance: none;
265
267
  background: transparent;
266
268
  border: 1px solid color-mix(in srgb, var(--hi-color-border) 18%, transparent);
267
269
  border-radius: var(--hi-radius-sm, 4px);
268
- padding: var(--hi-space-4, 4px) var(--hi-space-10, 10px);
269
- font-size: var(--hi-text-xs, 0.75rem);
270
+ padding: var(--space-4, 4px) var(--space-10, 10px);
271
+ font-size: var(--text-xs, 0.75rem);
270
272
  font-weight: 600;
271
273
  color: var(--hi-color-muted);
272
274
  cursor: pointer;
273
- align-self: center;
274
275
  transition: color var(--hi-duration-fast, 0.15s) ease, border-color var(--hi-duration-fast, 0.15s) ease;
275
276
 
276
277
  &:hover {
277
278
  color: var(--hi-color-text-primary);
278
279
  border-color: color-mix(in srgb, var(--hi-color-primary) 50%, transparent);
279
280
  }
281
+
282
+ &:focus-visible {
283
+ outline: 2px solid color-mix(in srgb, var(--hi-color-primary) 55%, transparent);
284
+ outline-offset: 1px;
285
+ }
280
286
  }
281
287
 
282
288
  /* ── Popup mode ────────────────────────────────── */
@@ -290,13 +296,13 @@
290
296
  appearance: none;
291
297
  display: inline-flex;
292
298
  align-items: center;
293
- gap: var(--hi-space-6, 6px);
294
- padding: var(--hi-space-4, 4px) var(--hi-space-10, 10px);
299
+ gap: var(--space-6, 6px);
300
+ padding: var(--space-4, 4px) var(--space-10, 10px);
295
301
  background: var(--hi-color-surface);
296
302
  border: 1px solid color-mix(in srgb, var(--hi-color-border) 18%, transparent);
297
303
  border-radius: var(--hi-radius-sm, 4px);
298
304
  color: color-mix(in srgb, var(--hi-color-text-secondary) 70%, transparent);
299
- font-size: var(--hi-text-xs, 0.75rem);
305
+ font-size: var(--text-xs, 0.75rem);
300
306
  font-variant-numeric: tabular-nums;
301
307
  cursor: pointer;
302
308
  transition: border-color var(--hi-duration-fast, 0.15s) ease, color var(--hi-duration-fast, 0.15s) ease;
@@ -306,6 +312,11 @@
306
312
  border-color: color-mix(in srgb, var(--hi-color-primary) 50%, transparent);
307
313
  color: var(--hi-color-text-primary);
308
314
  }
315
+
316
+ &:focus-visible {
317
+ outline: 2px solid color-mix(in srgb, var(--hi-color-primary) 55%, transparent);
318
+ outline-offset: 1px;
319
+ }
309
320
  }
310
321
 
311
322
  .hk-dtp-trigger-icon {
@@ -326,8 +337,14 @@
326
337
  transform: rotate(180deg);
327
338
  }
328
339
 
340
+ @media (prefers-reduced-motion: reduce) {
341
+ .hk-dtp-trigger-chev {
342
+ transition: none;
343
+ }
344
+ }
345
+
329
346
  .hk-dtp-popup {
330
- padding: var(--hi-space-8, 8px);
347
+ padding: var(--space-8, 8px);
331
348
  min-width: 260px;
332
349
  }
333
350
 
@@ -351,8 +368,8 @@
351
368
  .hk-dtp-popup-foot {
352
369
  display: flex;
353
370
  justify-content: flex-end;
354
- padding: var(--hi-space-8, 8px) var(--hi-space-2, 2px) var(--hi-space-2, 2px);
355
- margin-top: var(--hi-space-8, 8px);
371
+ padding: var(--space-8, 8px) var(--space-2, 2px) var(--space-2, 2px);
372
+ margin-top: var(--space-8, 8px);
356
373
  border-top: 1px solid color-mix(in srgb, var(--hi-color-border) 10%, transparent);
357
374
  }
358
375
 
@@ -362,8 +379,8 @@
362
379
  color: rgb(var(--color-on-solid-text, 255 255 255));
363
380
  border: 0;
364
381
  border-radius: var(--hi-radius-sm, 4px);
365
- padding: var(--hi-space-6, 6px) var(--hi-space-14, 14px);
366
- font-size: var(--hi-text-xs, 0.75rem);
382
+ padding: var(--space-6, 6px) var(--space-14, 14px);
383
+ font-size: var(--text-xs, 0.75rem);
367
384
  font-weight: 600;
368
385
  cursor: pointer;
369
386
  transition: filter var(--hi-duration-fast, 0.15s) ease;
@@ -380,13 +397,13 @@
380
397
  width: 100%;
381
398
  min-height: 2.5rem;
382
399
  box-sizing: border-box;
383
- padding: var(--hi-space-8, 8px) var(--hi-space-12, 12px);
400
+ padding: var(--space-8, 8px) var(--space-12, 12px);
384
401
  background: var(--hi-color-surface);
385
402
  border: 1px solid color-mix(in srgb, var(--hi-color-border) 18%, transparent);
386
403
  border-radius: var(--hi-radius-sm, 4px);
387
404
  color: var(--hi-color-text-primary);
388
405
  font-family: inherit;
389
- font-size: var(--hi-text-sm, 0.875rem);
406
+ font-size: var(--text-sm, 0.875rem);
390
407
  font-variant-numeric: tabular-nums;
391
408
  line-height: 1.5;
392
409
 
@@ -32,23 +32,23 @@
32
32
  }
33
33
 
34
34
  .hk-divider-spacing-xs {
35
- --hk-divider-space: var(--hi-space-2, 0.125rem);
35
+ --hk-divider-space: var(--space-2, 0.125rem);
36
36
  }
37
37
 
38
38
  .hk-divider-spacing-sm {
39
- --hk-divider-space: var(--hi-space-4, 0.25rem);
39
+ --hk-divider-space: var(--space-4, 0.25rem);
40
40
  }
41
41
 
42
42
  .hk-divider-spacing-md {
43
- --hk-divider-space: var(--hi-space-6, 0.375rem);
43
+ --hk-divider-space: var(--space-6, 0.375rem);
44
44
  }
45
45
 
46
46
  .hk-divider-spacing-lg {
47
- --hk-divider-space: var(--hi-space-8, 0.5rem);
47
+ --hk-divider-space: var(--space-8, 0.5rem);
48
48
  }
49
49
 
50
50
  .hk-divider-spacing-xl {
51
- --hk-divider-space: var(--hi-space-12, 0.75rem);
51
+ --hk-divider-space: var(--space-12, 0.75rem);
52
52
  }
53
53
 
54
54
  .hk-divider[class*="hk-divider-spacing-"]:not(.hk-divider-vertical) {
@@ -59,27 +59,26 @@
59
59
  margin-inline: var(--hk-divider-space);
60
60
  }
61
61
 
62
- .hk-divider-vertical.hk-divider-length-xs {
62
+ .hk-divider-vertical[class*="hk-divider-length-"] {
63
63
  align-self: center;
64
- height: var(--hi-space-8, 0.5rem);
64
+ }
65
+
66
+ .hk-divider-vertical.hk-divider-length-xs {
67
+ height: var(--space-8, 0.5rem);
65
68
  }
66
69
 
67
70
  .hk-divider-vertical.hk-divider-length-sm {
68
- align-self: center;
69
- height: var(--hi-space-12, 0.75rem);
71
+ height: var(--space-12, 0.75rem);
70
72
  }
71
73
 
72
74
  .hk-divider-vertical.hk-divider-length-md {
73
- align-self: center;
74
- height: var(--hi-space-16, 1rem);
75
+ height: var(--space-16, 1rem);
75
76
  }
76
77
 
77
78
  .hk-divider-vertical.hk-divider-length-lg {
78
- align-self: center;
79
- height: var(--hi-space-24, 1.5rem);
79
+ height: var(--space-24, 1.5rem);
80
80
  }
81
81
 
82
82
  .hk-divider-vertical.hk-divider-length-xl {
83
- align-self: center;
84
- height: var(--hi-space-32, 2rem);
83
+ height: var(--space-32, 2rem);
85
84
  }
@@ -1,30 +1,30 @@
1
1
  .hk-draggable-grid {
2
2
  display: flex;
3
3
  flex-direction: column;
4
- gap: 0.5rem;
4
+ gap: var(--space-8, 0.5rem);
5
5
  }
6
6
 
7
7
  .hk-draggable-grid-row {
8
8
  display: flex;
9
9
  flex-wrap: nowrap;
10
- gap: 0.5rem;
10
+ gap: var(--space-8, 0.5rem);
11
11
  }
12
12
 
13
13
  .hk-draggable-grid-row-phantom {
14
14
  min-height: 44px;
15
15
  border: 1px dashed var(--hi-color-primary, #58a6ff);
16
- border-radius: 4px;
16
+ border-radius: var(--radius-sm, 4px);
17
17
  background: rgb(from var(--hi-color-primary, #58a6ff) r g b / 0.04);
18
18
  }
19
19
 
20
20
  .hk-draggable-grid-cell {
21
- flex: 0 0 calc((100% - (var(--hk-grid-cols, 3) - 1) * 0.5rem) / var(--hk-grid-cols, 3));
21
+ flex: 0 0 calc((100% - (var(--hk-grid-cols, 3) - 1) * var(--space-8, 0.5rem)) / var(--hk-grid-cols, 3));
22
22
  display: flex;
23
23
  align-items: center;
24
- gap: 0.5rem;
24
+ gap: var(--space-8, 0.5rem);
25
25
  min-height: 44px;
26
- padding: 0.5rem 0.625rem;
27
- border-radius: 4px;
26
+ padding: var(--space-8, 0.5rem) var(--space-10, 0.625rem);
27
+ border-radius: var(--radius-sm, 4px);
28
28
  background: var(--hi-color-bg-subtle, #21262d);
29
29
  border: 1px solid var(--hi-color-border, #30363d);
30
30
  transition:
@@ -48,7 +48,6 @@
48
48
  border-color: var(--hi-color-primary, #58a6ff);
49
49
  background: rgb(from var(--hi-color-primary, #58a6ff) r g b / 0.04);
50
50
  cursor: grabbing;
51
- z-index: 0;
52
51
  }
53
52
 
54
53
  &[data-placeholder="before"] {
@@ -57,6 +56,13 @@
57
56
 
58
57
  &[data-locked] {
59
58
  opacity: 0.65;
59
+ cursor: default;
60
+
61
+ /* Locked cells never start a drag (tsx returns early) — no hover
62
+ * affordance and no grab cursor on their surface. */
63
+ &:hover {
64
+ border-color: var(--hi-color-border, #30363d);
65
+ }
60
66
  }
61
67
 
62
68
  .hk-draggable-grid[data-dragging] & {
@@ -70,10 +76,20 @@
70
76
  box-shadow: inset -2px 0 0 0 var(--hi-color-primary, #58a6ff);
71
77
  }
72
78
 
79
+ /* RTL flips the flex flow, so the before/after insertion markers must
80
+ * swap physical sides to keep pointing at the inline edge (HkBreadcrumb
81
+ * precedent for the [dir="rtl"] override form). */
82
+ [dir="rtl"] .hk-draggable-grid-cell[data-placeholder="before"] {
83
+ box-shadow: inset -2px 0 0 0 var(--hi-color-primary, #58a6ff);
84
+ }
85
+
86
+ [dir="rtl"] .hk-draggable-grid-row[data-placeholder-row="after"] {
87
+ box-shadow: inset 2px 0 0 0 var(--hi-color-primary, #58a6ff);
88
+ }
89
+
73
90
  .hk-draggable-grid-cell-placeholder-target {
74
91
  border: none;
75
92
  background: transparent;
76
- min-height: 44px;
77
93
  }
78
94
 
79
95
  .hk-draggable-grid-handle {
@@ -100,7 +116,7 @@
100
116
  min-width: 0;
101
117
  display: flex;
102
118
  align-items: center;
103
- gap: 0.5rem;
119
+ gap: var(--space-8, 0.5rem);
104
120
  }
105
121
 
106
122
  .hk-draggable-grid-ghost {
@@ -113,7 +129,7 @@
113
129
  box-shadow:
114
130
  0 8px 24px rgb(0 0 0 / 28%),
115
131
  0 2px 6px rgb(0 0 0 / 18%);
116
- border-radius: 4px;
132
+ border-radius: var(--radius-sm, 4px);
117
133
  background: var(--hi-color-bg-elevated, #161b22);
118
134
  backdrop-filter: blur(2px);
119
135
  pointer-events: none;
@@ -133,3 +149,17 @@
133
149
  width: 100%;
134
150
  }
135
151
  }
152
+
153
+ /* The dragging cell's scale-down is a non-trivial transform animation —
154
+ * drop it (and the transitions) under reduced motion (HkExpansionPanel
155
+ * precedent). The ghost's pointer-follow is direct manipulation with no
156
+ * transition, so it needs no guard. */
157
+ @media (prefers-reduced-motion: reduce) {
158
+ .hk-draggable-grid-cell {
159
+ transition: none;
160
+
161
+ &[data-dragging] {
162
+ transform: none;
163
+ }
164
+ }
165
+ }
@@ -1,16 +1,16 @@
1
1
  .hk-draggable-list {
2
2
  display: flex;
3
3
  flex-direction: column;
4
- gap: 4px;
4
+ gap: var(--space-4, 4px);
5
5
  }
6
6
 
7
7
  .hk-draggable-list-item {
8
8
  display: flex;
9
9
  align-items: center;
10
- gap: 0.5rem;
11
- min-height: 40px;
12
- padding: 0.5rem 0.625rem;
13
- border-radius: 4px;
10
+ gap: var(--space-8, 0.5rem);
11
+ min-height: var(--space-40, 40px);
12
+ padding: var(--space-8, 0.5rem) var(--space-10, 0.625rem);
13
+ border-radius: var(--radius-sm, 4px);
14
14
  background: var(--hi-color-bg-subtle, #21262d);
15
15
  border: 1px solid var(--hi-color-border, #30363d);
16
16
  transition:
@@ -20,7 +20,6 @@
20
20
  background 150ms ease;
21
21
  user-select: none;
22
22
  -webkit-user-select: none;
23
- transform-origin: center;
24
23
 
25
24
  &:hover {
26
25
  border-color: var(--hi-color-text-tertiary, #8b949e);
@@ -33,7 +32,6 @@
33
32
  border-color: var(--hi-color-primary, #58a6ff);
34
33
  background: rgb(from var(--hi-color-primary, #58a6ff) r g b / 0.04);
35
34
  cursor: grabbing;
36
- z-index: 0;
37
35
  }
38
36
 
39
37
  &[data-placeholder="before"] {
@@ -58,7 +56,7 @@
58
56
  display: flex;
59
57
  align-items: center;
60
58
  justify-content: center;
61
- width: 20px;
59
+ width: var(--space-20, 20px);
62
60
  flex-shrink: 0;
63
61
  color: var(--hi-color-text-tertiary, #8b949e);
64
62
  cursor: grab;
@@ -78,7 +76,7 @@
78
76
  min-width: 0;
79
77
  display: flex;
80
78
  align-items: center;
81
- gap: 0.5rem;
79
+ gap: var(--space-8, 0.5rem);
82
80
  }
83
81
 
84
82
  .hk-draggable-list-ghost {
@@ -86,12 +84,14 @@
86
84
  top: 0;
87
85
  left: 0;
88
86
  margin: 0;
89
- transform: translate3d(0, 0, 0) scale(1.02);
87
+ // No transform here: the tsx always writes the full translate3d inline
88
+ // (attachGhost/moveGhost) before the ghost paints — a class transform
89
+ // (e.g. a scale lift) could never win the cascade against it.
90
90
  opacity: 0.85;
91
91
  box-shadow:
92
92
  0 8px 24px rgb(0 0 0 / 28%),
93
93
  0 2px 6px rgb(0 0 0 / 18%);
94
- border-radius: 4px;
94
+ border-radius: var(--radius-sm, 4px);
95
95
  background: var(--hi-color-bg-elevated, #161b22);
96
96
  backdrop-filter: blur(2px);
97
97
  pointer-events: none;
@@ -111,3 +111,14 @@
111
111
  width: 100%;
112
112
  }
113
113
  }
114
+
115
+ /* Reduced motion: the dragging press cue (scale + dim) must snap instead
116
+ of animating; the hover border/background fades stay (house convention).
117
+ The ghost itself is pointer-positioned via inline transform — 1:1
118
+ direct manipulation, not autonomous motion — so it is left alone.
119
+ (house pattern: HkAffixPicker.scss / HkExpansionPanel.scss guards) */
120
+ @media (prefers-reduced-motion: reduce) {
121
+ .hk-draggable-list-item {
122
+ transition: border-color 150ms ease, background 150ms ease;
123
+ }
124
+ }
@@ -112,13 +112,13 @@
112
112
  display: flex;
113
113
  align-items: center;
114
114
  justify-content: space-between;
115
- padding: var(--hi-space-12, 0.75rem) var(--hi-space-16, 1rem);
115
+ padding: var(--space-12, 0.75rem) var(--space-16, 1rem);
116
116
  border-bottom: 1px solid var(--hi-color-border, rgba(0, 0, 0, 0.06));
117
117
  flex-shrink: 0;
118
118
  }
119
119
 
120
120
  .hk-drawer-title {
121
- font-size: var(--hi-text-base, 1rem);
121
+ font-size: var(--text-base, 0.875rem);
122
122
  font-weight: 700;
123
123
  color: var(--hi-color-text-primary, #333);
124
124
  }
@@ -147,7 +147,7 @@
147
147
  /* Consumers nesting a self-padded menu (HkMenuPanel) zero this via
148
148
  --hk-drawer-body-padding so nav rows and the footer menu share one
149
149
  left edge. */
150
- padding: var(--hk-drawer-body-padding, var(--hi-space-16, 1rem));
150
+ padding: var(--hk-drawer-body-padding, var(--space-16, 1rem));
151
151
 
152
152
  /* Overlay scrollbar (useOverlayScrollbar) — the native chrome is
153
153
  hidden, never styled. */
@@ -161,7 +161,7 @@
161
161
  .hk-drawer-footer {
162
162
  /* HkMenuPanel carries its own inset; zero this variable when the
163
163
  footer hosts one so both edges align. */
164
- padding: var(--hk-drawer-footer-padding, var(--hi-space-12, 0.75rem) var(--hi-space-16, 1rem));
164
+ padding: var(--hk-drawer-footer-padding, var(--space-12, 0.75rem) var(--space-16, 1rem));
165
165
  border-top: 1px solid var(--hi-color-border, rgba(0, 0, 0, 0.06));
166
166
  flex-shrink: 0;
167
167
  }
@@ -220,3 +220,23 @@
220
220
  }
221
221
  }
222
222
  }
223
+
224
+ /* Reduced motion: the width/height size morph and the four slide
225
+ directions snap instead of animating — the surface machine's
226
+ zero-duration probe (useSurfaceMachine.completeNow) finalizes open/
227
+ close immediately. The overlay scrim's fade is already flattened by
228
+ the same media query inside scrim-fade().
229
+ (house pattern: HkModal.scss / HkPopover.scss guards) */
230
+ @media (prefers-reduced-motion: reduce) {
231
+ .hk-drawer-panel,
232
+ .hk-drawer-left-enter-active,
233
+ .hk-drawer-right-enter-active,
234
+ .hk-drawer-top-enter-active,
235
+ .hk-drawer-bottom-enter-active,
236
+ .hk-drawer-left-leave-active,
237
+ .hk-drawer-right-leave-active,
238
+ .hk-drawer-top-leave-active,
239
+ .hk-drawer-bottom-leave-active {
240
+ transition: none;
241
+ }
242
+ }
@@ -3,19 +3,19 @@
3
3
  flex-direction: column;
4
4
  align-items: center;
5
5
  justify-content: center;
6
- padding: var(--hi-space-48, 3rem) var(--hi-space-16, 1rem);
6
+ padding: var(--space-48, 3rem) var(--space-16, 1rem);
7
7
  text-align: center;
8
8
  background: var(--hk-empty-bg, var(--hi-color-surface, rgba(255, 255, 255, 0.95)));
9
- backdrop-filter: blur(8px);
9
+ backdrop-filter: blur(var(--blur-sm, 8px));
10
10
  border: 1px solid var(--hi-color-border, rgba(0, 0, 0, 0.06));
11
11
  border-radius: var(--hi-radius-md, 0.5rem);
12
12
  box-sizing: border-box;
13
13
  }
14
14
 
15
15
  .hk-empty-icon {
16
- width: 48px;
17
- height: 48px;
18
- margin-bottom: var(--hi-space-12, 0.75rem);
16
+ width: var(--space-48, 3rem);
17
+ height: var(--space-48, 3rem);
18
+ margin-bottom: var(--space-12, 0.75rem);
19
19
  color: var(--hi-color-text-secondary, #666);
20
20
  opacity: 0.5;
21
21
  display: flex;
@@ -24,22 +24,22 @@
24
24
  }
25
25
 
26
26
  .hk-empty-title {
27
- font-size: var(--hi-text-base, 1rem);
27
+ font-size: var(--text-base, 0.875rem);
28
28
  font-weight: 600;
29
29
  color: var(--hi-color-text-primary, #333);
30
- margin: 0 0 var(--hi-space-8, 0.5rem);
30
+ margin: 0 0 var(--space-8, 0.5rem);
31
31
  }
32
32
 
33
33
  .hk-empty-desc {
34
- font-size: var(--hi-text-sm, 0.8125rem);
34
+ font-size: var(--text-sm, 0.8125rem);
35
35
  color: var(--hi-color-text-secondary, #666);
36
- margin: 0 0 var(--hi-space-16, 1rem);
36
+ margin: 0 0 var(--space-16, 1rem);
37
37
  max-width: 24rem;
38
38
  line-height: 1.5;
39
39
  }
40
40
 
41
41
  .hk-empty-action {
42
- margin-top: var(--hi-space-4, 0.25rem);
42
+ margin-top: var(--space-4, 0.25rem);
43
43
  }
44
44
 
45
45
  /* fit="page" (default): full width on mobile — the page supplies the outer
@@ -61,7 +61,6 @@
61
61
  .hk-empty-state--fill {
62
62
  width: 100%;
63
63
  height: 100%;
64
- min-height: 100%;
65
64
  }
66
65
 
67
66
  /* Loading variant keeps a comfortable spinner area in short hosts. */
@@ -43,7 +43,7 @@
43
43
  border: 1px solid rgb(var(--hel-border) / 70%);
44
44
  border-radius: var(--radius-xl, 20px);
45
45
  box-shadow: var(--shadow-lg, 0 18px 48px rgb(0 0 0 / 8%));
46
- padding: 2.25rem 1.75rem 1.75rem;
46
+ padding: 2.25rem var(--space-28, 1.75rem) var(--space-28, 1.75rem);
47
47
  text-align: center;
48
48
 
49
49
  // Tone wash bleeding down from the top edge behind the icon — gives the
@@ -188,14 +188,14 @@
188
188
  .hk-error-landing__details {
189
189
  position: relative;
190
190
  margin-top: var(--space-16, 1rem);
191
- text-align: left;
191
+ text-align: start;
192
192
  }
193
193
 
194
194
  .hk-error-landing__details-label {
195
195
  display: flex;
196
196
  align-items: center;
197
- gap: 4px;
198
- padding: 0 2px;
197
+ gap: var(--space-4, 4px);
198
+ padding: 0 var(--space-2, 2px);
199
199
  font-size: var(--text-xs, 0.75rem);
200
200
  font-weight: 500;
201
201
  letter-spacing: 0.02em;
@@ -269,6 +269,6 @@
269
269
 
270
270
  @media (max-width: 480px) {
271
271
  .hk-error-landing__card {
272
- padding: 1.75rem 1.125rem 1.5rem;
272
+ padding: var(--space-28, 1.75rem) 1.125rem var(--space-24, 1.5rem);
273
273
  }
274
274
  }
@@ -37,7 +37,7 @@
37
37
  background: none;
38
38
  color: rgb(var(--color-text));
39
39
  font: inherit;
40
- text-align: left;
40
+ text-align: start;
41
41
  cursor: pointer;
42
42
  outline: none;
43
43
 
@@ -45,6 +45,10 @@
45
45
  background: var(--c-primary-faint);
46
46
  }
47
47
 
48
+ &:active:not(:disabled) {
49
+ background: var(--c-primary-dim);
50
+ }
51
+
48
52
  &:focus-visible {
49
53
  box-shadow: var(--shadow-focus);
50
54
  }
@@ -62,7 +66,7 @@
62
66
  flex: 1;
63
67
  display: flex;
64
68
  flex-direction: column;
65
- gap: 2px;
69
+ gap: var(--space-2);
66
70
  min-width: 0;
67
71
  }
68
72