@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
@@ -133,7 +133,10 @@
133
133
  }
134
134
  }
135
135
 
136
- .hk-btn-primary:hover:not(:disabled) {
136
+ /* :not(:focus-visible) keeps the keyboard double ring winning while a
137
+ focused button is under the cursor — this hover rule's (0,3,0)
138
+ box-shadow would otherwise beat the (0,2,0) :focus-visible ring. */
139
+ .hk-btn-primary:hover:not(:disabled):not(:focus-visible) {
137
140
  filter: brightness(1.1);
138
141
  box-shadow: var(--shadow-button);
139
142
  }
@@ -151,11 +154,16 @@
151
154
  backdrop-filter: blur(var(--blur-sm));
152
155
  }
153
156
 
157
+ /* background stays the base surface — the hover declaration only restated
158
+ it; hover emphasis comes from the border-color change below. */
154
159
  .hk-btn-secondary:hover:not(:disabled) {
155
- background: rgb(var(--color-surface));
156
160
  border-color: var(--c-primary-strong);
157
161
  }
158
162
 
163
+ .hk-btn-secondary:active:not(:disabled) {
164
+ filter: brightness(0.95);
165
+ }
166
+
159
167
  /* ---- Outline ---- */
160
168
 
161
169
  .hk-btn-outline {
@@ -169,6 +177,10 @@
169
177
  border-color: rgb(var(--color-primary));
170
178
  }
171
179
 
180
+ .hk-btn-outline:active:not(:disabled) {
181
+ filter: brightness(0.95);
182
+ }
183
+
172
184
  /* ---- Ghost ---- */
173
185
 
174
186
  .hk-btn-ghost {
@@ -181,6 +193,10 @@
181
193
  background: var(--c-primary-light);
182
194
  }
183
195
 
196
+ .hk-btn-ghost:active:not(:disabled) {
197
+ filter: brightness(0.95);
198
+ }
199
+
184
200
  /* ---- Danger ---- */
185
201
 
186
202
  .hk-btn-danger {
@@ -188,11 +204,15 @@
188
204
  color: rgb(var(--color-on-solid));
189
205
  }
190
206
 
191
- .hk-btn-danger:hover:not(:disabled) {
207
+ .hk-btn-danger:hover:not(:disabled):not(:focus-visible) {
192
208
  filter: brightness(1.1);
193
209
  box-shadow: var(--shadow-button-danger);
194
210
  }
195
211
 
212
+ .hk-btn-danger:active:not(:disabled) {
213
+ filter: brightness(0.95);
214
+ }
215
+
196
216
  /* ---- Block ---- */
197
217
 
198
218
  .hk-btn-block {
@@ -201,6 +221,9 @@
201
221
 
202
222
  /* ---- Loading ---- */
203
223
 
224
+ /* pointer-events: none is deliberate, not dead: the tsx already forces
225
+ `disabled` while loading (HkButton.tsx), so this only suppresses the
226
+ :disabled not-allowed cursor — a busy spinner reads busy, not broken. */
204
227
  .hk-btn-loading {
205
228
  pointer-events: none;
206
229
  }
@@ -3,7 +3,7 @@
3
3
  flex-direction: column;
4
4
  align-items: center;
5
5
  gap: var(--space-8, 0.5rem);
6
- min-height: 4rem;
6
+ min-height: var(--space-64, 4rem);
7
7
  }
8
8
 
9
9
  .s-captcha-widget-loading {
@@ -19,9 +19,8 @@
19
19
 
20
20
  .s-captcha-widget-placeholder {
21
21
  justify-content: center;
22
- min-height: 4rem;
23
22
  padding: var(--space-16, 1rem);
24
- border: 1px dashed var(--border-faint, rgb(var(--color-border) / 15%));
23
+ border: 1px dashed var(--border-faint, rgb(var(--color-border) / 10%));
25
24
  border-radius: var(--radius-md, 8px);
26
25
  color: rgb(var(--color-muted));
27
26
  font-size: var(--text-xs, 0.75rem);
@@ -1,8 +1,8 @@
1
1
  @use "../tokens";
2
2
 
3
- /* HkCard — canonical surface card. Hover effect mirrors the node card:
4
- only box-shadow and border-color animate. No transforms, so the card
5
- never displaces its neighbors or triggers layout reflow. */
3
+ /* HkCard — canonical surface card. Hover emphasis is border-color only
4
+ (the base elevation shadow is already at its resting value). No
5
+ transforms, so the card never displaces neighbors or reflows layout. */
6
6
  .hk-card {
7
7
  display: block;
8
8
  overflow: hidden;
@@ -15,16 +15,22 @@
15
15
 
16
16
  .hk-card-hoverable {
17
17
  cursor: pointer;
18
- transition:
19
- box-shadow var(--duration-normal) ease,
20
- border-color var(--duration-normal) ease;
18
+ transition: border-color var(--duration-normal) ease;
21
19
  }
22
20
 
23
21
  .hk-card-hoverable:hover {
24
- box-shadow: var(--shadow-elevated);
25
22
  border-color: var(--c-primary-intense);
26
23
  }
27
24
 
25
+ .hk-card-hoverable:active {
26
+ border-color: rgb(var(--color-primary) / 45%);
27
+ }
28
+
29
+ .hk-card-hoverable:focus-visible {
30
+ outline: 2px solid rgb(var(--color-primary));
31
+ outline-offset: 2px;
32
+ }
33
+
28
34
  .hk-card-header {
29
35
  padding: var(--space-12) var(--space-16);
30
36
  border-bottom: 1px solid var(--border-faint);
@@ -45,5 +51,5 @@
45
51
 
46
52
  .hk-card-footer {
47
53
  padding: var(--space-12) var(--space-16);
48
- border-top: 1px solid rgb(var(--color-border) / 10%);
54
+ border-top: 1px solid var(--border-faint);
49
55
  }
@@ -5,7 +5,7 @@
5
5
  .hk-checkbox {
6
6
  display: inline-flex;
7
7
  align-items: center;
8
- gap: var(--hi-space-8, 0.5rem);
8
+ gap: var(--space-8, 0.5rem);
9
9
  cursor: pointer;
10
10
  user-select: none;
11
11
  }
@@ -23,7 +23,7 @@
23
23
  justify-content: center;
24
24
  width: 1.125rem;
25
25
  height: 1.125rem;
26
- border-radius: var(--hi-radius-xs, 4px);
26
+ border-radius: var(--hi-radius-sm, 4px);
27
27
  border: 1px solid var(--hi-color-border, rgba(0, 0, 0, 0.08));
28
28
  background: var(--hi-color-surface, rgba(255, 255, 255, 0.95));
29
29
  transition:
@@ -40,7 +40,6 @@
40
40
  .hk-checkbox-box[data-checked] {
41
41
  background: var(--hi-color-primary, #ff6b9d);
42
42
  border-color: var(--hi-color-primary, #ff6b9d);
43
- color: rgb(var(--color-on-solid-text, 255 255 255));
44
43
  }
45
44
 
46
45
  .hk-checkbox-box[data-indeterminate] {
@@ -48,12 +47,6 @@
48
47
  border-color: var(--hi-color-primary, #ff6b9d);
49
48
  }
50
49
 
51
- .hk-checkbox:hover .hk-checkbox-box[data-checked],
52
- .hk-checkbox[data-animating] .hk-checkbox-box[data-checked] {
53
- background: var(--hi-color-primary, #ff6b9d);
54
- border-color: var(--hi-color-primary, #ff6b9d);
55
- }
56
-
57
50
  /* ---------- input ---------- */
58
51
 
59
52
  .hk-checkbox-input {
@@ -64,6 +57,15 @@
64
57
  pointer-events: none;
65
58
  }
66
59
 
60
+ /* Keyboard focus: the native input is visually hidden, so draw the house
61
+ double ring (HkButton/HkTable pattern) on the box via :has();
62
+ :focus-visible keeps mouse toggles ring-free. */
63
+ .hk-checkbox-box:has(.hk-checkbox-input:focus-visible) {
64
+ box-shadow:
65
+ 0 0 0 2px var(--hi-color-surface, rgba(255, 255, 255, 0.95)),
66
+ 0 0 0 4px var(--hi-color-primary, #ff6b9d);
67
+ }
68
+
67
69
  /* ---------- markers ---------- */
68
70
 
69
71
  .hk-checkbox-icon {
@@ -10,7 +10,6 @@
10
10
  .hk-color-picker[data-layout="row"] {
11
11
  .hk-color-picker-swatch-btn {
12
12
  flex-direction: row;
13
- align-items: center;
14
13
  gap: var(--space-8);
15
14
  width: 100%;
16
15
  }
@@ -26,14 +25,10 @@
26
25
  max-width: 100%;
27
26
  overflow: hidden;
28
27
  text-overflow: ellipsis;
29
- text-align: left;
28
+ text-align: start;
30
29
  }
31
30
  }
32
31
 
33
- .hk-color-picker-trigger {
34
- outline: none;
35
- }
36
-
37
32
  .hk-color-picker-swatch-btn {
38
33
  display: inline-flex;
39
34
  flex-direction: column;
@@ -47,6 +42,14 @@
47
42
  outline: none;
48
43
  }
49
44
 
45
+ /* The trigger button removes the outline; restore a keyboard indicator
46
+ with the house double ring (HkButton pattern). */
47
+ .hk-color-picker-swatch-btn:focus-visible {
48
+ box-shadow:
49
+ 0 0 0 2px rgb(var(--color-surface)),
50
+ 0 0 0 4px rgb(var(--color-primary));
51
+ }
52
+
50
53
  .hk-color-picker-swatch {
51
54
  width: 24px;
52
55
  height: 24px;
@@ -134,7 +137,6 @@
134
137
  min-width: 60px;
135
138
  height: 10px;
136
139
  border-radius: var(--radius-full);
137
- display: block;
138
140
  overflow: hidden;
139
141
  box-shadow: inset 0 0 0 1px rgb(0 0 0 / 10%);
140
142
  // Explicit on the hit targets too (not only the container): touch-action
@@ -173,12 +175,24 @@
173
175
  &:active { cursor: grabbing; }
174
176
  }
175
177
 
178
+ /* Thumb hover scale is a transform micro-interaction; drop the scale and
179
+ the transform transition for reduced-motion users (house pattern). */
180
+ @media (prefers-reduced-motion: reduce) {
181
+ .hk-color-picker-slider-thumb {
182
+ transition: none;
183
+ }
184
+
185
+ .hk-color-picker-slider-thumb:hover {
186
+ transform: translate(-50%, -50%);
187
+ }
188
+ }
189
+
176
190
  .hk-color-picker-slider-value {
177
191
  font-size: var(--text-2xs);
178
192
  font-weight: 500;
179
193
  color: rgb(var(--color-muted));
180
194
  width: 26px;
181
- text-align: right;
195
+ text-align: end;
182
196
  flex-shrink: 0;
183
197
  font-variant-numeric: tabular-nums;
184
198
  }
@@ -10,6 +10,11 @@
10
10
  cursor: pointer;
11
11
  border-radius: var(--radius-full, 999px);
12
12
  -webkit-tap-highlight-color: transparent;
13
+ transition: background-color 200ms ease;
14
+
15
+ &:hover {
16
+ background: rgb(var(--color-text) / 6%);
17
+ }
13
18
 
14
19
  &:focus-visible {
15
20
  outline: 2px solid rgb(var(--color-primary));
@@ -79,7 +84,7 @@
79
84
  margin: 0;
80
85
  padding: 0;
81
86
  display: grid;
82
- gap: 2px;
87
+ gap: var(--space-2, 0.125rem);
83
88
  }
84
89
 
85
90
  .hk-ctx-legend-row {
@@ -93,9 +98,8 @@
93
98
  .hk-ctx-legend-swatch {
94
99
  width: 8px;
95
100
  height: 8px;
96
- border-radius: 2px;
101
+ border-radius: var(--radius-xs, 2px);
97
102
  align-self: center;
98
- flex-shrink: 0;
99
103
  }
100
104
 
101
105
  .hk-ctx-legend-label {
@@ -112,7 +116,7 @@
112
116
  .hk-ctx-legend-pct {
113
117
  color: rgb(var(--color-muted));
114
118
  font-variant-numeric: tabular-nums;
115
- text-align: right;
119
+ text-align: end;
116
120
  min-width: 3ch;
117
121
  }
118
122
 
@@ -1,8 +1,8 @@
1
1
  .s-cookie-consent {
2
2
  display: flex;
3
3
  align-items: center;
4
- gap: 4px;
5
- font-size: 0.625rem;
4
+ gap: var(--space-4, 0.25rem);
5
+ font-size: var(--text-2xs, 0.625rem);
6
6
  color: rgb(var(--color-muted));
7
7
  }
8
8
 
@@ -11,8 +11,17 @@
11
11
  border: none;
12
12
  color: rgb(var(--color-primary));
13
13
  cursor: pointer;
14
- font-size: 0.625rem;
14
+ font-size: var(--text-2xs, 0.625rem);
15
15
  font-weight: 600;
16
+
17
+ &:hover {
18
+ text-decoration: underline;
19
+ }
20
+
21
+ &:focus-visible {
22
+ outline: 2px solid rgb(var(--color-primary));
23
+ outline-offset: 2px;
24
+ }
16
25
  }
17
26
 
18
27
  .s-cookie-consent-icon {
@@ -13,33 +13,40 @@
13
13
  opacity: 0.5;
14
14
  }
15
15
 
16
- /* ── Trigger ─────────────────────────────────────────────────── */
17
-
18
- .hk-dp-trigger {
19
- position: relative;
20
- display: flex;
21
- align-items: center;
22
- gap: var(--hi-space-6, 6px);
16
+ /* ── Trigger / native input ──────────────────────────────────── */
17
+ /* The custom trigger and the native <input type="date"> carry
18
+ * byte-identical field chrome, so those declarations live in one group. */
19
+ .hk-dp-trigger,
20
+ .hk-dp-native {
23
21
  width: 100%;
24
22
  min-height: 2.5rem;
25
- padding: var(--hi-space-8, 8px) var(--hi-space-12, 12px);
23
+ padding: var(--space-8, 8px) var(--space-12, 12px);
26
24
  background: color-mix(in srgb, rgb(var(--color-surface)) 55%, transparent);
27
25
  border: 1px solid color-mix(in srgb, rgb(var(--color-text)) 14%, transparent);
28
26
  border-radius: var(--hi-radius-sm, 4px);
29
27
  color: rgb(var(--color-text));
30
28
  font-family: inherit;
31
- font-size: var(--hi-text-sm, 0.875rem);
29
+ font-size: var(--text-sm, 0.875rem);
32
30
  line-height: 1.5;
33
- cursor: pointer;
34
- user-select: none;
35
31
  transition:
36
32
  background-color var(--hi-duration-fast, 0.15s) ease,
37
33
  border-color var(--hi-duration-fast, 0.15s) ease,
38
34
  box-shadow var(--hi-duration-fast, 0.15s) ease;
39
35
  }
40
36
 
37
+ .hk-dp-trigger {
38
+ position: relative;
39
+ display: flex;
40
+ align-items: center;
41
+ gap: var(--space-6, 6px);
42
+ cursor: pointer;
43
+ user-select: none;
44
+ }
45
+
41
46
  .hk-dp:not(.is-disabled) .hk-dp-trigger:hover,
42
- .hk-dp-trigger:focus-visible {
47
+ .hk-dp:not(.is-disabled) .hk-dp-native:hover,
48
+ .hk-dp-trigger:focus-visible,
49
+ .hk-dp-native:focus-visible {
43
50
  border-color: rgb(var(--color-focused-border));
44
51
  }
45
52
 
@@ -53,8 +60,9 @@
53
60
  }
54
61
  }
55
62
 
56
- /* Focus ring + open state live on the trigger itself. */
57
- .hk-dp-trigger:focus-visible {
63
+ /* Focus ring + open state live on the field itself. */
64
+ .hk-dp-trigger:focus-visible,
65
+ .hk-dp-native:focus-visible {
58
66
  outline: none;
59
67
  box-shadow: var(--shadow-focus);
60
68
  background: rgb(var(--color-surface));
@@ -67,8 +75,8 @@
67
75
 
68
76
  .hk-dp-trigger-sm {
69
77
  min-height: 2rem;
70
- padding: var(--hi-space-4, 4px) var(--hi-space-10, 10px);
71
- font-size: var(--hi-text-xs, 0.75rem);
78
+ padding: var(--space-4, 4px) var(--space-10, 10px);
79
+ font-size: var(--text-xs, 0.75rem);
72
80
  }
73
81
 
74
82
  .hk-dp-value {
@@ -102,7 +110,6 @@
102
110
 
103
111
  .hk-dp-trigger:hover &,
104
112
  .hk-dp-trigger:focus &,
105
- .hk-dp-trigger:focus-visible &,
106
113
  .hk-dp-clear:focus-visible {
107
114
  opacity: 1;
108
115
  }
@@ -124,13 +131,13 @@
124
131
  /* ── Calendar panel ──────────────────────────────────────────── */
125
132
 
126
133
  .hk-dp-popover.hk-popover-panel {
127
- padding: var(--hi-space-10, 10px) var(--hi-space-12, 12px) var(--hi-space-8, 8px);
134
+ padding: var(--space-10, 10px) var(--space-12, 12px) var(--space-8, 8px);
128
135
  }
129
136
 
130
137
  .hk-dp-panel {
131
138
  display: flex;
132
139
  flex-direction: column;
133
- gap: var(--hi-space-8, 8px);
140
+ gap: var(--space-8, 8px);
134
141
  min-width: 17.5rem;
135
142
  user-select: none;
136
143
  color: var(--hi-color-text-primary);
@@ -152,10 +159,7 @@
152
159
  display: grid;
153
160
  grid-template-columns: 1fr auto 1fr;
154
161
  align-items: center;
155
- gap: var(--hi-space-4, 4px);
156
- }
157
-
158
- .hk-dp-header {
162
+ gap: var(--space-4, 4px);
159
163
  /* Fixed height keeps the header row — and therefore the shared stage
160
164
  * height — identical in every view and locale (enlarged on touch). */
161
165
  height: var(--hk-picker-header);
@@ -164,7 +168,7 @@
164
168
  .hk-dp-header-side {
165
169
  display: flex;
166
170
  align-items: center;
167
- gap: var(--hi-space-2, 2px);
171
+ gap: var(--space-2, 2px);
168
172
  min-width: 0;
169
173
  }
170
174
 
@@ -192,6 +196,10 @@
192
196
  color: var(--hi-color-text-primary);
193
197
  }
194
198
 
199
+ &:active:not(:disabled) {
200
+ filter: brightness(0.95);
201
+ }
202
+
195
203
  &:focus-visible {
196
204
  outline: 2px solid color-mix(in srgb, var(--hi-color-primary) 55%, transparent);
197
205
  outline-offset: 1px;
@@ -204,22 +212,21 @@
204
212
  }
205
213
 
206
214
  .hk-dp-title {
207
- font-size: var(--hi-text-sm, 0.875rem);
215
+ font-size: var(--text-sm, 0.875rem);
208
216
  font-weight: 600;
209
217
  color: var(--hi-color-text-primary);
210
218
  font-variant-numeric: tabular-nums;
211
- text-align: center;
212
219
  display: flex;
213
220
  align-items: center;
214
221
  justify-content: center;
215
- gap: var(--hi-space-4, 4px);
222
+ gap: var(--space-4, 4px);
216
223
  }
217
224
 
218
225
  .hk-dp-title-btn {
219
226
  appearance: none;
220
227
  background: transparent;
221
228
  border: 0;
222
- padding: var(--hi-space-2, 2px) var(--hi-space-4, 4px);
229
+ padding: var(--space-2, 2px) var(--space-4, 4px);
223
230
  font: inherit;
224
231
  font-weight: 600;
225
232
  color: inherit;
@@ -233,6 +240,10 @@
233
240
  color: var(--hi-color-primary);
234
241
  }
235
242
 
243
+ &:active:not(:disabled) {
244
+ filter: brightness(0.95);
245
+ }
246
+
236
247
  &:focus-visible {
237
248
  outline: 2px solid color-mix(in srgb, var(--hi-color-primary) 55%, transparent);
238
249
  outline-offset: 1px;
@@ -243,7 +254,7 @@
243
254
  .hk-dp-grid {
244
255
  display: grid;
245
256
  grid-template-columns: repeat(7, 1fr);
246
- gap: 2px;
257
+ gap: var(--space-2, 2px);
247
258
  }
248
259
 
249
260
  /* Month/year pick grids sit in the same fixed stage as the day grid and
@@ -254,7 +265,7 @@
254
265
 
255
266
  .hk-dp-wd {
256
267
  text-align: center;
257
- font-size: var(--hi-text-xs, 0.75rem);
268
+ font-size: var(--text-xs, 0.75rem);
258
269
  font-weight: 600;
259
270
  color: var(--hi-color-muted);
260
271
  height: var(--hk-picker-wd);
@@ -278,7 +289,7 @@
278
289
  justify-content: center;
279
290
  color: color-mix(in srgb, var(--hi-color-text-secondary) 70%, transparent);
280
291
  cursor: pointer;
281
- font-size: var(--hi-text-xs, 0.75rem);
292
+ font-size: var(--text-xs, 0.75rem);
282
293
  font-variant-numeric: tabular-nums;
283
294
  transition: background var(--hi-duration-fast, 0.15s) ease, color var(--hi-duration-fast, 0.15s) ease;
284
295
 
@@ -287,6 +298,10 @@
287
298
  color: var(--hi-color-text-primary);
288
299
  }
289
300
 
301
+ &:active:not(:disabled) {
302
+ filter: brightness(0.95);
303
+ }
304
+
290
305
  &:focus-visible {
291
306
  outline: 2px solid color-mix(in srgb, var(--hi-color-primary) 55%, transparent);
292
307
  outline-offset: -1px;
@@ -299,10 +314,6 @@
299
314
  &.is-disabled {
300
315
  cursor: default;
301
316
  opacity: 0.25;
302
-
303
- &:hover {
304
- background: transparent;
305
- }
306
317
  }
307
318
 
308
319
  &.is-today:not(.is-selected) {
@@ -315,10 +326,6 @@
315
326
  background: var(--hi-color-primary);
316
327
  color: rgb(var(--color-on-solid-text, 255 255 255));
317
328
  font-weight: 600;
318
-
319
- &:hover {
320
- background: var(--hi-color-primary);
321
- }
322
329
  }
323
330
  }
324
331
 
@@ -331,41 +338,18 @@
331
338
  .hk-dp-footer {
332
339
  display: flex;
333
340
  justify-content: center;
334
- padding-top: var(--hi-space-6, 6px);
341
+ padding-top: var(--space-6, 6px);
335
342
  border-top: 1px solid color-mix(in srgb, var(--hi-color-border) 10%, transparent);
336
343
  }
337
344
 
338
345
  /* ── Native mobile input ─────────────────────────────────────── */
346
+ /* Unique native-input bits only; the shared field chrome comes from the
347
+ * .hk-dp-trigger / .hk-dp-native group at the top of the file. */
339
348
 
340
349
  .hk-dp-native {
341
350
  display: block;
342
- width: 100%;
343
- min-height: 2.5rem;
344
351
  box-sizing: border-box;
345
- padding: var(--hi-space-8, 8px) var(--hi-space-12, 12px);
346
- background: color-mix(in srgb, rgb(var(--color-surface)) 55%, transparent);
347
- border: 1px solid color-mix(in srgb, rgb(var(--color-text)) 14%, transparent);
348
- border-radius: var(--hi-radius-sm, 4px);
349
- color: rgb(var(--color-text));
350
- font-family: inherit;
351
- font-size: var(--hi-text-sm, 0.875rem);
352
- line-height: 1.5;
353
352
  font-variant-numeric: tabular-nums;
354
- transition:
355
- background-color var(--hi-duration-fast, 0.15s) ease,
356
- border-color var(--hi-duration-fast, 0.15s) ease,
357
- box-shadow var(--hi-duration-fast, 0.15s) ease;
358
- }
359
-
360
- .hk-dp:not(.is-disabled) .hk-dp-native:hover,
361
- .hk-dp-native:focus-visible {
362
- border-color: rgb(var(--color-focused-border));
363
- }
364
-
365
- .hk-dp-native:focus-visible {
366
- outline: none;
367
- box-shadow: var(--shadow-focus);
368
- background: rgb(var(--color-surface));
369
353
  }
370
354
 
371
355
  .hk-dp.is-disabled .hk-dp-native {