@celestia-island/hikari 0.55.327 → 0.55.329

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 (64) hide show
  1. package/package.json +1 -1
  2. package/src/DemoApp.tsx +3 -3
  3. package/src/components/HkAffixPicker.scss +2 -2
  4. package/src/components/HkBreadcrumb.scss +1 -1
  5. package/src/components/HkButton.scss +1 -1
  6. package/src/components/HkCard.scss +1 -1
  7. package/src/components/HkCardList.scss +2 -2
  8. package/src/components/HkCheckbox.scss +207 -0
  9. package/src/components/HkColorPicker.scss +1 -1
  10. package/src/components/HkCornerBadge.scss +1 -1
  11. package/src/components/HkDatePicker.scss +5 -5
  12. package/src/components/HkDateTag.scss +1 -1
  13. package/src/components/HkDateTimePicker.scss +8 -8
  14. package/src/components/HkDrawer.scss +4 -4
  15. package/src/components/HkErrorLanding.scss +2 -2
  16. package/src/components/HkFileField.scss +1 -1
  17. package/src/components/HkFilePickerField.scss +1 -1
  18. package/src/components/HkFilterPanel.scss +1 -1
  19. package/src/components/HkIconButtonGroup.scss +1 -1
  20. package/src/components/HkIconButtonVars.scss +1 -1
  21. package/src/components/HkInput.scss +1 -1
  22. package/src/components/HkLoadingVeil.scss +1 -1
  23. package/src/components/HkLogWindow.scss +2 -2
  24. package/src/components/HkMarkdownRenderer.scss +1 -1
  25. package/src/components/HkModal.scss +3 -3
  26. package/src/components/HkPageHeader.scss +1 -1
  27. package/src/components/HkPasswordSurface.scss +1 -1
  28. package/src/components/HkPersistentToast.scss +2 -2
  29. package/src/components/HkPersistentToastGroup.scss +1 -1
  30. package/src/components/HkPopover.scss +2 -2
  31. package/src/components/HkProgressDialog.scss +1 -1
  32. package/src/components/HkRadio.scss +49 -0
  33. package/src/components/HkSearchInput.scss +1 -1
  34. package/src/components/HkSelect.scss +2 -2
  35. package/src/components/HkSelectionControls.styles.test.ts +4242 -92
  36. package/src/components/HkSelectionGrid.scss +1 -1
  37. package/src/components/HkSelectionWaterfall.scss +2 -2
  38. package/src/components/HkSidebarRail.scss +1 -1
  39. package/src/components/HkSlider.scss +2 -2
  40. package/src/components/HkSplash.scss +1 -1
  41. package/src/components/HkStarSystem.scss +1 -1
  42. package/src/components/HkStatCard.scss +2 -2
  43. package/src/components/HkStatusPill.scss +1 -1
  44. package/src/components/HkStatusRow.scss +3 -3
  45. package/src/components/HkStepGuide.scss +2 -2
  46. package/src/components/HkSwitch.scss +1 -1
  47. package/src/components/HkTemplateField.scss +1 -1
  48. package/src/components/HkTerminal.scss +11 -3
  49. package/src/components/HkTerminal.test.tsx +40 -0
  50. package/src/components/HkTerminal.tsx +22 -9
  51. package/src/components/HkTextarea.scss +1 -1
  52. package/src/components/HkThemeToggle.scss +1 -1
  53. package/src/components/HkTimeZoneGlobe.scss +3 -3
  54. package/src/components/HkTitleBar.scss +2 -2
  55. package/src/components/HkToast.scss +1 -1
  56. package/src/components/HkTooltip.scss +1 -1
  57. package/src/components/HkTreemap.scss +2 -2
  58. package/src/components/HkTreemapStage.scss +1 -1
  59. package/src/components/HkWindowControls.scss +1 -1
  60. package/src/plugins/bootLandingCss.mjs +1 -1
  61. package/src/runtime/touchHint.scss +1 -1
  62. package/src/scale.scss +1 -0
  63. package/src/styles/admin-tokens.scss +4 -4
  64. package/src/styles/theme/scale.scss +1 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celestia-island/hikari",
3
- "version": "0.55.327",
3
+ "version": "0.55.329",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Hikari UI library, Vue 3 runtime — one design system for Vue 3 and Rust/WASM applications",
package/src/DemoApp.tsx CHANGED
@@ -620,11 +620,11 @@ export default defineComponent({
620
620
  <h2>HTimeline</h2>
621
621
  <HTimeline steps={timelineSteps} currentKey="v2" />
622
622
  <h3>Narrow host → auto window (prev / current / next, edges fade)</h3>
623
- <div style="max-width:280px;padding:8px;border:1px dashed var(--hi-color-border, #888);border-radius:8px">
623
+ <div style="max-width:280px;padding:8px;border:1px dashed var(--hi-color-border, #888);border-radius:var(--radius-md, 8px)">
624
624
  <HTimeline steps={wizardSteps} currentKey="vendor" />
625
625
  </div>
626
626
  <h3>collapse="always" at the first step</h3>
627
- <div style="max-width:280px;padding:8px;border:1px dashed var(--hi-color-border, #888);border-radius:8px">
627
+ <div style="max-width:280px;padding:8px;border:1px dashed var(--hi-color-border, #888);border-radius:var(--radius-md, 8px)">
628
628
  <HTimeline steps={wizardSteps} currentKey="type" collapse="always" />
629
629
  </div>
630
630
  </section>
@@ -658,7 +658,7 @@ export default defineComponent({
658
658
 
659
659
  <section>
660
660
  <h2>HZoomToolbar / HMinimap</h2>
661
- <div style="position:relative;height:200px;border-radius:8px;overflow:hidden;background:rgba(0,0,0,0.35)">
661
+ <div style="position:relative;height:200px;border-radius:var(--radius-md, 8px);overflow:hidden;background:rgba(0,0,0,0.35)">
662
662
  <div style="position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:0.75rem;opacity:0.5">
663
663
  Host surface — zoom {zoomState.value.zoom.toFixed(2)}x, pan ({Math.round(zoomState.value.panX)}, {Math.round(zoomState.value.panY)})
664
664
  </div>
@@ -21,7 +21,7 @@
21
21
  padding-block: 4px;
22
22
  padding-inline: 9px 11px;
23
23
  border: none;
24
- border-radius: var(--radius-sm, 6px);
24
+ border-radius: var(--radius-md, 8px);
25
25
  background: transparent;
26
26
  color: rgb(var(--color-text));
27
27
  cursor: pointer;
@@ -196,7 +196,7 @@
196
196
  height: 1.5rem;
197
197
  padding: 0;
198
198
  border: 0;
199
- border-radius: var(--radius-full, 999px);
199
+ border-radius: var(--radius-full, 9999px);
200
200
  background: transparent;
201
201
  color: var(--hi-icon-button-icon-color, rgb(var(--color-muted)));
202
202
  cursor: pointer;
@@ -341,7 +341,7 @@
341
341
  .hk-breadcrumb-item {
342
342
  background: var(--hi-card-bg);
343
343
  padding: 0.375rem 0.875rem;
344
- border-radius: 999px;
344
+ border-radius: var(--radius-full);
345
345
  border: 1px solid var(--hi-color-border);
346
346
 
347
347
  &:not(:last-child):hover {
@@ -11,7 +11,7 @@
11
11
  font-weight: 600;
12
12
  line-height: 1;
13
13
  border: 1px solid transparent;
14
- border-radius: var(--radius-sm);
14
+ border-radius: var(--radius-md, 8px);
15
15
  cursor: pointer;
16
16
  /* Longhand on purpose: the former comma-separated shorthand
17
17
  * `transition: background-color, ..., filter var(--duration-normal) ...`
@@ -10,7 +10,7 @@
10
10
  background: color-mix(in srgb, rgb(var(--color-surface)) 70%, transparent);
11
11
  @include backdrop-filter(blur(var(--blur-md)));
12
12
  border: 1px solid var(--border-subtle);
13
- border-radius: var(--radius-md);
13
+ border-radius: var(--radius-lg, 12px);
14
14
  box-shadow: var(--shadow-elevated);
15
15
  }
16
16
 
@@ -105,7 +105,7 @@
105
105
  top: 50%;
106
106
  transform: translateY(-50%);
107
107
  padding: 0.125rem;
108
- border-radius: var(--radius-sm, 0.375rem);
108
+ border-radius: var(--radius-sm, 4px);
109
109
  background: rgb(var(--color-surface, 255 255 255));
110
110
  box-shadow: 0 2px 10px rgb(var(--color-border, 100 100 100) / 22%);
111
111
  opacity: 0;
@@ -137,7 +137,7 @@
137
137
  height: 1.625rem;
138
138
  padding: 0;
139
139
  border: 1px solid transparent;
140
- border-radius: var(--radius-xs, 0.25rem);
140
+ border-radius: var(--radius-md, 8px);
141
141
  background: transparent;
142
142
  color: rgb(var(--color-muted, 108 108 108));
143
143
  cursor: pointer;
@@ -6,6 +6,12 @@
6
6
 
7
7
  .hk-checkbox {
8
8
  display: inline-flex;
9
+ /* Fallback anatomy: centering the box against the label block is what every
10
+ * engine and every host saw before first-line anchoring, and it needs no
11
+ * `:has()` support. A labeled control on a `:has()`-capable engine is
12
+ * handled by the first-line rules below, which move the BOX (`align-self`)
13
+ * and leave this line alone; a label-less control keeps it on every
14
+ * engine. */
9
15
  align-items: center;
10
16
  /* When the control sits INLINE among text (not in a host flex row), the
11
17
  * default `vertical-align: baseline` parks the inline-flex's bottom edge
@@ -28,6 +34,12 @@
28
34
  display: flex;
29
35
  align-items: center;
30
36
  justify-content: center;
37
+ /* The first-line offset below reads the box's width as its BORDER-BOX
38
+ * height, so the sheet declares the sizing itself instead of inheriting it
39
+ * from the host reset: a consumer importing this sheet without a global
40
+ * `border-box` would otherwise inflate the box by its 1px border and land
41
+ * the offset 1px low. */
42
+ box-sizing: border-box;
31
43
  width: 1.125rem;
32
44
  height: 1.125rem;
33
45
  border-radius: var(--radius-sm, 4px);
@@ -57,6 +69,201 @@
57
69
  }
58
70
  }
59
71
 
72
+ /* ---------- first-line anchoring ---------- */
73
+
74
+ /* A labeled control pins its box to the MIDDLE OF THE LABEL'S FIRST LINE BOX
75
+ * instead of the middle of the whole label block. `center` rode the block, so
76
+ * a two- or three-line option floated the box between the lines — hosts
77
+ * re-aligned the row themselves, and the `flex-start` override they reached
78
+ * for parked the box on the line's top edge — 1.5px above the middle of the
79
+ * line box it belongs to at the default step (reported as the label text
80
+ * sitting ~2px low).
81
+ *
82
+ * The anatomy rides the BOX, not the row: `align-self: flex-start` on the
83
+ * item plus one offset per size step. `align-self` on the item outranks any
84
+ * `align-items` on the container — whatever specificity, whatever order,
85
+ * whatever sheet — so nothing outside this component can flip the row back
86
+ * while the offset stays paid. A row-level `align-items: flex-start` would not
87
+ * be safe that way: any later sheet naming the control (a comma list, an
88
+ * attribute spelling, a `label` type selector, `!important`) could undo it
89
+ * while the per-part guards still saw a clean sheet. The row itself keeps
90
+ * `align-items: center` on every engine.
91
+ *
92
+ * Three rules cooperate — the md rule carries `align-self` and the base offset,
93
+ * the sm/lg rules add only their own offsets. Every one of them carries the
94
+ * gate, and exactly one offset is IN EFFECT per row: an sm/lg box matches the
95
+ * md rule too, and the size rule that follows it wins on source order (all
96
+ * three are (0,4,0)). The anatomy is
97
+ * atomic — every selector contains `:has()`, so an engine without it drops
98
+ * each rule whole and the box falls through to the `align-items: center`
99
+ * fallback in the root rule: the previous PLACEMENT, never the bare top-edge
100
+ * state. The box rule's own `box-sizing` is the one carrier outside the gate
101
+ * (it must hold on every engine), so a consumer with no global reset renders
102
+ * that box 2px smaller — the sizing note above spells it out.
103
+ *
104
+ * One line box is `line-height` tall (HkLabel pins 1.5), so on a one-line
105
+ * label each offset lands the box exactly where `center` did (single-line
106
+ * rows keep their pixels at all three steps), and on a wrapped label it
107
+ * keeps the box on line one.
108
+ *
109
+ * That last part rests on the label's FIRST line box being exactly `1.5 ×
110
+ * font-size` tall. A descendant with a larger inline box — a 24px span
111
+ * inside the label, an icon taller than the text — makes that line taller
112
+ * and leaves the box `(firstLineBox − 21) / 2` px HIGH, so the text reads
113
+ * that far low. What sets the error is the resulting LINE, not the height of
114
+ * the intruder: a 16×26 icon with `vertical-align: middle` gives the 26px
115
+ * line this table assumes (2.500px), while the same icon baseline-aligned
116
+ * drags its own box and the font's descender into the line and makes it 32px
117
+ * (5.500px). Only the declared typography is pinned; content that outgrows it
118
+ * moves the target, and by how much follows from the line it lands in, so a
119
+ * replaced element that ignores the baseline can push it further than either
120
+ * figure — calculate, do not assume a fixed amount.
121
+ *
122
+ * Line-box HEIGHT is only one of the THREE channels that move the first line,
123
+ * and the formula above covers only that one. A block child that INHERITS the
124
+ * label's typography (`<p>`, `<div>`) leaves the 21px line height untouched and
125
+ * changes only its OFFSET: it takes its own top margin and displaces the line
126
+ * DOWN, so a host's `p { margin-block-start: 8px }` leaves a 21px line sitting
127
+ * 8px lower — the height formula reads 0.000 while the box is 8.000px high —
128
+ * and a plain `<p>` with no host CSS whatsoever is already 14.000px out (the
129
+ * UA's `1em` margin-block-start).
130
+ *
131
+ * An element that brings its OWN typography is the two-channel case, and a
132
+ * heading is the one to remember: `<h1>` carries UA `font-size: 2em`, so its
133
+ * line is 42px — the height channel alone reads 10.500 — AND it carries a
134
+ * `0.67em` block-start margin (18.76px requested, 18.75 used after the
135
+ * LayoutUnit snap), which pushes that taller line down; measured together the
136
+ * label reads 10.500 + 18.750 = 29.250px low. A heading in a label is a typography
137
+ * decision before it is an anchoring one.
138
+ *
139
+ * The third channel is the label's own box. Both parts are pinned to the row's
140
+ * flex line, so the label's border-box top starts exactly where the box's MARGIN
141
+ * box does (the box's own border box is `offset` lower) —
142
+ * and anything the label adds ABOVE its text (`padding-block-start`, a
143
+ * block-start `border`) pushes the text down inside that border box while the
144
+ * box stays at the line start. `padding-block-start: 8px` on `.hk-label` is
145
+ * therefore the same 8.000px error as a block child's top margin, and it is
146
+ * invisible to `LABEL_BLOCK_CONTENT`, which watches rules on DESCENDANTS (a
147
+ * block tag as the label's child) rather than rules on the label itself.
148
+ * HkLabel ships no padding and no border, so this one is a host-authorship
149
+ * hazard, not a live offset.
150
+ *
151
+ * One shape the anchoring does not promise: a size modifier on an ANCESTOR
152
+ * wrapper instead of on the control. The box sizes are ancestor-scoped
153
+ * (`.hk-checkbox-sm &` compiles to `.hk-checkbox-sm .hk-checkbox-box`) and so
154
+ * are the offsets (`…:has(.hk-label:not(:empty)) .hk-checkbox-box` matches a
155
+ * wrapper too), but the LABEL's typography follows the control — HkLabel's
156
+ * `size` prop — so a wrapper makes the box and the line disagree instead of
157
+ * stepping both: `.hk-checkbox-lg` around a default control is a 22px box with
158
+ * the lg 1px offset on the md 21px line (+1.500px), the sm wrapper is a 14px box
159
+ * with the sm 2px offset on that same 21px line (−1.500px), and an lg wrapper
160
+ * around an sm control puts a 22px box 1px onto an 18px line (+3.000px). The
161
+ * radio adds a second asymmetry: its sizes key on `[data-size=…]` on ANY
162
+ * ancestor while its offsets need the attribute on `.hk-radio` itself, so an
163
+ * ancestor `data-size="lg"` gives a 22px box with the md 1.5px offset. Both
164
+ * renderers put the modifier on the control itself; that is the only spelling
165
+ * the sheet promises, and the only one the geometry was measured on.
166
+ *
167
+ * Nothing in this sheet can neutralise any of the three channels, because the
168
+ * offset lands the box on the line and the line itself moved; the fix is to
169
+ * treat the label's slot as text. The styles contract test pairs the block-child
170
+ * channel with `LABEL_BLOCK_CONTENT`, which reports an UNSCOPED host rule that
171
+ * declares one of those first-line movers on a block tag (`p { … }`). A SCOPED
172
+ * one (`.panel p { … }`, `.hk-markdown p`) is not reported even though a wrapper
173
+ * with that class can hold the label — a recorded limit, not an oversight: the
174
+ * shipped `.hk-icon svg` / `.hk-markdown p` families are host-internal styling,
175
+ * and the contract test records what lifting the restriction would cost (73
176
+ * rows to 279 for the replaced channel alone) — see the `elementOnlyMovers`
177
+ * comment there.
178
+ *
179
+ * The gate needs both halves: `:has(.hk-label)` proves a label element is
180
+ * there, `:not(:empty)` proves it carries content. A label-less control
181
+ * (selection column, a bare box next to a host's own caption) has no line box
182
+ * to ride and keeps its old LAYOUT — centered on its own row, no margin — and
183
+ * so does an empty-but-present label
184
+ * shell (`<HkCheckbox>{''}</HkCheckbox>` renders `span.hk-label` with nothing
185
+ * inside; the Rust side emits no label at all for that input, and the gate
186
+ * keeps both renderers on the same anatomy). "Layout", not bytes: the box
187
+ * rule now declares its own `box-sizing: border-box` (see below), so a
188
+ * consumer with no global reset renders that box 2px smaller than before —
189
+ * which is the reset the sheet used to borrow from the host. A whitespace-only label is the
190
+ * one shape the gate cannot see through: it is non-empty for the selector yet
191
+ * generates no line box once the label is blockified as a flex item, so it
192
+ * takes the 1.5px offset (md) onto a zero-height line: the control is 1.5px
193
+ * taller than the empty shell (18px → 19.5px) and its box sits 1.5px lower.
194
+ * A zero-width space (U+200B) is the marker to reach for when a row must be
195
+ * visibly empty: unlike a plain space it measures 0.00 against `center`.
196
+ *
197
+ * Hosts must DELETE their own `align-items` override on `.hk-checkbox` /
198
+ * `.hk-radio`: the box no longer reads the row's alignment, so a kept
199
+ * `flex-start` is inert where the gate applies (it parks the box on the same
200
+ * line edge) and a `center` is inert too — the offset is what moves the box.
201
+ * On an engine without `:has()` neither of them is inert: that is the tier the
202
+ * `center` fallback exists for, and a host that needs the old top-edge look
203
+ * there should scope its override with `@supports not selector(:has(*))`.
204
+ * Two host styles become DEAD rather than harmful, and both are worth knowing
205
+ * about: a `margin-*` nudge on `.hk-checkbox-box` loses to the offset declared
206
+ * here at equal importance (the gated rule outranks it, so the nudge does not
207
+ * render — an `!important` nudge still wins, and measured +2.500px), and a
208
+ * host that stacked the control (`flex-direction: column` on the row) changes
209
+ * the AXIS this pin acts on rather than losing a vertical centring: in a column
210
+ * `align-self` is the INLINE axis, so nothing here is pinned to the top — the
211
+ * box's start edge goes to the column's (measured 106 → 0 on a 230px column)
212
+ * while the vertical metric is unchanged at every step. `align-self: center` on
213
+ * the parts restores that horizontal position only if it outranks the gated
214
+ * rule (an id or `!important`: the natural `.hk-checkbox .hk-checkbox-box` at
215
+ * (0,2,0) loses to (0,4,0)), and the stacked control is 1.5px taller than it
216
+ * was (68.00 → 69.50) because the box now carries the offset. Neither shape
217
+ * exists in this package; they
218
+ * matter to a consumer only if it restyled the parts itself.
219
+ *
220
+ * The label's own line-height is what this rides, and its font size sets the
221
+ * term, so a host that restyles EITHER on `.hk-label` has to restyle this pair
222
+ * too — the styles contract test pins the coefficient against HkLabel.scss and
223
+ * each box term against the size modifiers above.
224
+ *
225
+ * HkSwitch is deliberately not part of this. Its md track is 24px, taller than
226
+ * the 21px line box, so a first-line anchor would need a negative offset and
227
+ * would hang the track outside the row; its rows stay block-centred. The two
228
+ * box controls are the ones whose text reads as a paragraph. */
229
+ .hk-checkbox:has(.hk-label:not(:empty)) .hk-checkbox-box {
230
+ /* The item, not the row: immune to a host's or a sibling sheet's
231
+ * `align-items` on `.hk-checkbox` (or on the `label` element). */
232
+ align-self: flex-start;
233
+ margin-block-start: calc((1.5 * var(--text-base, 0.875rem) - 1.125rem) / 2);
234
+ }
235
+
236
+ .hk-checkbox-sm:has(.hk-label:not(:empty)) .hk-checkbox-box {
237
+ margin-block-start: calc((1.5 * var(--text-xs, 0.75rem) - 0.875rem) / 2);
238
+ }
239
+
240
+ .hk-checkbox-lg:has(.hk-label:not(:empty)) .hk-checkbox-box {
241
+ margin-block-start: calc((1.5 * var(--text-md, 1rem) - 1.375rem) / 2);
242
+ }
243
+
244
+ /* Both PARTS are pinned, not the row. Pinning only the box inverts the
245
+ * anchoring the moment the control is TALLER than its own content — a grid
246
+ * cell or a flex row that stretches the item (a two-column option grid that
247
+ * pairs a one-line option with a four-line one; `min-height` on the control
248
+ * does the same): the box sits at the top of the stretched control while the
249
+ * label stays centred by the row's `align-items`, measured 42.0px apart at a
250
+ * 105px control and 13.5px at 48px, against 0.000 before this component
251
+ * anchored anything. With the label pinned as well the pair moves together
252
+ * and the offset still lands on line one at every control height (0.000 at
253
+ * 48/60/105px, sm and lg included).
254
+ *
255
+ * Keeping BOTH alignment declarations on the items — never `align-items` on
256
+ * the row — is also what keeps a host's `align-items` unable to flip the
257
+ * anatomy: a row-level `flex-start` here would be undone by any later sheet
258
+ * naming the control while the offset still applied (a host's
259
+ * `align-items: center !important` measured +0.750px against the item pins
260
+ * and broke the row-level variant). The visible cost: a control a host
261
+ * stretches now renders its text at the TOP of the control instead of
262
+ * centred. */
263
+ .hk-checkbox:has(.hk-label:not(:empty)) .hk-label {
264
+ align-self: flex-start;
265
+ }
266
+
60
267
  /* Press feedback (house parity: HkSwitch thumb squish). */
61
268
  .hk-checkbox:not([data-disabled]):active .hk-checkbox-box {
62
269
  scale: 0.9;
@@ -38,7 +38,7 @@
38
38
  gap: 4px;
39
39
  padding: 4px 6px;
40
40
  border: none;
41
- border-radius: var(--radius-sm);
41
+ border-radius: var(--radius-md, 8px);
42
42
  background: none;
43
43
  cursor: pointer;
44
44
  outline: none;
@@ -105,7 +105,7 @@
105
105
  display: inline-flex;
106
106
  align-items: center;
107
107
  justify-content: center;
108
- border-radius: var(--radius-full, 999px);
108
+ border-radius: var(--radius-full, 9999px);
109
109
  background: var(--hk-badge-bg);
110
110
  color: var(--hk-badge-text);
111
111
  border: 1px solid var(--hk-badge-border);
@@ -24,7 +24,7 @@
24
24
  padding: var(--space-8, 8px) var(--space-12, 12px);
25
25
  background: color-mix(in srgb, rgb(var(--color-surface)) 55%, transparent);
26
26
  border: 1px solid color-mix(in srgb, rgb(var(--color-text)) 14%, transparent);
27
- border-radius: var(--radius-sm, 4px);
27
+ border-radius: var(--radius-md, 8px);
28
28
  color: rgb(var(--color-text));
29
29
  font-family: inherit;
30
30
  font-size: var(--text-sm, 0.875rem);
@@ -108,7 +108,7 @@
108
108
  padding: 0;
109
109
  border: 0;
110
110
  background: transparent;
111
- border-radius: var(--radius-sm, 4px);
111
+ border-radius: var(--radius-md, 8px);
112
112
  color: var(--hi-icon-button-icon-color, var(--hi-color-muted));
113
113
  cursor: pointer;
114
114
  opacity: 0;
@@ -189,7 +189,7 @@
189
189
  border: 0;
190
190
  width: 1.75rem;
191
191
  height: 1.75rem;
192
- border-radius: var(--radius-sm, 4px);
192
+ border-radius: var(--radius-md, 8px);
193
193
  color: var(--hi-color-muted);
194
194
  cursor: pointer;
195
195
  display: inline-flex;
@@ -238,7 +238,7 @@
238
238
  color: inherit;
239
239
  cursor: pointer;
240
240
  white-space: nowrap;
241
- border-radius: var(--radius-sm, 4px);
241
+ border-radius: var(--radius-md, 8px);
242
242
  transition: background var(--duration-fast, 0.15s) ease, color var(--duration-fast, 0.15s) ease;
243
243
 
244
244
  &:hover {
@@ -285,7 +285,7 @@
285
285
  appearance: none;
286
286
  background: transparent;
287
287
  border: 0;
288
- border-radius: var(--radius-sm, 4px);
288
+ border-radius: var(--radius-md, 8px);
289
289
  /* Fixed height keeps the six-row day grid — and therefore the shared
290
290
  * stage height — independent of the panel width, so drilling between
291
291
  * views never changes the popup's size (enlarged on touch). */
@@ -10,7 +10,7 @@
10
10
  flex-direction: row;
11
11
  align-items: baseline;
12
12
  padding: var(--space-2, 2px) var(--space-10, 0.625rem);
13
- border-radius: var(--radius-full, 999px);
13
+ border-radius: var(--radius-full, 9999px);
14
14
  background: rgb(var(--color-text) / 6%);
15
15
  white-space: nowrap;
16
16
  /* One size for the whole pill: segments AND separators inherit it,
@@ -60,7 +60,7 @@
60
60
  color: inherit;
61
61
  cursor: pointer;
62
62
  white-space: nowrap;
63
- border-radius: var(--radius-sm, 4px);
63
+ border-radius: var(--radius-md, 8px);
64
64
  transition: background var(--duration-fast, 0.15s) ease, color var(--duration-fast, 0.15s) ease;
65
65
 
66
66
  &:hover {
@@ -81,7 +81,7 @@
81
81
  border: 0;
82
82
  width: 1.75rem;
83
83
  height: 1.75rem;
84
- border-radius: var(--radius-sm, 4px);
84
+ border-radius: var(--radius-md, 8px);
85
85
  color: var(--hi-color-muted);
86
86
  cursor: pointer;
87
87
  display: inline-flex;
@@ -123,7 +123,7 @@
123
123
  appearance: none;
124
124
  background: transparent;
125
125
  border: 0;
126
- border-radius: var(--radius-sm, 4px);
126
+ border-radius: var(--radius-md, 8px);
127
127
  /* Fixed height keeps the six-row day grid — and therefore the shared
128
128
  * stage height — independent of the picker width, so drilling between
129
129
  * views never changes the picker's size (enlarged on touch). */
@@ -233,7 +233,7 @@
233
233
  justify-content: center;
234
234
  color: var(--hi-color-muted);
235
235
  cursor: pointer;
236
- border-radius: var(--radius-sm, 4px);
236
+ border-radius: var(--radius-md, 8px);
237
237
  transition: color var(--duration-fast, 0.15s) ease, background var(--duration-fast, 0.15s) ease;
238
238
 
239
239
  &:hover {
@@ -267,7 +267,7 @@
267
267
  appearance: none;
268
268
  background: transparent;
269
269
  border: 1px solid color-mix(in srgb, var(--hi-color-border) 18%, transparent);
270
- border-radius: var(--radius-sm, 4px);
270
+ border-radius: var(--radius-md, 8px);
271
271
  padding: var(--space-4, 4px) var(--space-10, 10px);
272
272
  font-size: var(--text-xs, 0.75rem);
273
273
  font-weight: 600;
@@ -301,7 +301,7 @@
301
301
  padding: var(--space-4, 4px) var(--space-10, 10px);
302
302
  background: var(--hi-color-surface);
303
303
  border: 1px solid color-mix(in srgb, var(--hi-color-border) 18%, transparent);
304
- border-radius: var(--radius-sm, 4px);
304
+ border-radius: var(--radius-md, 8px);
305
305
  color: color-mix(in srgb, var(--hi-color-text-secondary) 70%, transparent);
306
306
  font-size: var(--text-xs, 0.75rem);
307
307
  font-variant-numeric: tabular-nums;
@@ -379,7 +379,7 @@
379
379
  background: var(--hi-color-primary);
380
380
  color: rgb(var(--color-on-solid-text, 255 255 255));
381
381
  border: 0;
382
- border-radius: var(--radius-sm, 4px);
382
+ border-radius: var(--radius-md, 8px);
383
383
  padding: var(--space-6, 6px) var(--space-14, 14px);
384
384
  font-size: var(--text-xs, 0.75rem);
385
385
  font-weight: 600;
@@ -401,7 +401,7 @@
401
401
  padding: var(--space-8, 8px) var(--space-12, 12px);
402
402
  background: var(--hi-color-surface);
403
403
  border: 1px solid color-mix(in srgb, var(--hi-color-border) 18%, transparent);
404
- border-radius: var(--radius-sm, 4px);
404
+ border-radius: var(--radius-md, 8px);
405
405
  color: var(--hi-color-text-primary);
406
406
  font-family: inherit;
407
407
  font-size: var(--text-sm, 0.875rem);
@@ -51,7 +51,7 @@
51
51
  bottom: 0;
52
52
  left: 0;
53
53
  border-right: 1px solid var(--hi-color-border, rgba(100,100,100,0.08));
54
- border-radius: 0 var(--radius-md, 0.5rem) var(--radius-md, 0.5rem) 0;
54
+ border-radius: 0 var(--radius-lg, 0.75rem) var(--radius-lg, 0.75rem) 0;
55
55
  }
56
56
 
57
57
  .hk-drawer-right {
@@ -59,7 +59,7 @@
59
59
  bottom: 0;
60
60
  right: 0;
61
61
  border-left: 1px solid var(--hi-color-border, rgba(100,100,100,0.08));
62
- border-radius: var(--radius-md, 0.5rem) 0 0 var(--radius-md, 0.5rem);
62
+ border-radius: var(--radius-lg, 0.75rem) 0 0 var(--radius-lg, 0.75rem);
63
63
  }
64
64
 
65
65
  .hk-drawer-top {
@@ -67,7 +67,7 @@
67
67
  left: 0;
68
68
  right: 0;
69
69
  border-bottom: 1px solid var(--hi-color-border, rgba(100,100,100,0.08));
70
- border-radius: 0 0 var(--radius-md, 0.5rem) var(--radius-md, 0.5rem);
70
+ border-radius: 0 0 var(--radius-lg, 0.75rem) var(--radius-lg, 0.75rem);
71
71
  }
72
72
 
73
73
  .hk-drawer-bottom {
@@ -75,7 +75,7 @@
75
75
  left: 0;
76
76
  right: 0;
77
77
  border-top: 1px solid var(--hi-color-border, rgba(100,100,100,0.08));
78
- border-radius: var(--radius-md, 0.5rem) var(--radius-md, 0.5rem) 0 0;
78
+ border-radius: var(--radius-lg, 0.75rem) var(--radius-lg, 0.75rem) 0 0;
79
79
  }
80
80
 
81
81
  .hk-drawer-left-enter-active,
@@ -44,7 +44,7 @@
44
44
  width: min(440px, 100%);
45
45
  background: rgb(var(--hel-surface));
46
46
  border: 1px solid rgb(var(--hel-border) / 70%);
47
- border-radius: var(--radius-xl, 20px);
47
+ border-radius: var(--radius-xl, 16px);
48
48
  box-shadow: var(--shadow-lg, 0 18px 48px rgb(0 0 0 / 8%));
49
49
  padding: 2.25rem var(--space-28, 1.75rem) var(--space-28, 1.75rem);
50
50
  text-align: center;
@@ -230,7 +230,7 @@
230
230
  height: max(9rem, 20vh);
231
231
  height: max(9rem, 20dvh);
232
232
  border: 1px solid rgb(var(--hel-border) / 70%);
233
- border-radius: var(--radius-md, 10px);
233
+ border-radius: var(--radius-md, 8px);
234
234
  background: rgb(var(--hel-muted) / 4%);
235
235
  }
236
236
 
@@ -24,7 +24,7 @@
24
24
  min-height: 2.5rem;
25
25
  background: color-mix(in srgb, rgb(var(--color-surface)) 55%, transparent);
26
26
  border: 1px solid color-mix(in srgb, rgb(var(--color-text)) 14%, transparent);
27
- border-radius: var(--radius-sm);
27
+ border-radius: var(--radius-md, 8px);
28
28
  transition:
29
29
  border-color var(--duration-normal) var(--ease-standard),
30
30
  background-color var(--duration-normal) var(--ease-standard);
@@ -21,7 +21,7 @@
21
21
  min-height: 2.5rem;
22
22
  background: color-mix(in srgb, rgb(var(--color-surface)) 55%, transparent);
23
23
  border: 1px solid color-mix(in srgb, rgb(var(--color-text)) 14%, transparent);
24
- border-radius: var(--radius-sm);
24
+ border-radius: var(--radius-md, 8px);
25
25
  transition:
26
26
  border-color var(--duration-normal) var(--ease-standard),
27
27
  background-color var(--duration-normal) var(--ease-standard);
@@ -160,7 +160,7 @@
160
160
  min-height: 2rem;
161
161
  padding: 0 var(--space-8, 0.5rem);
162
162
  border: none;
163
- border-radius: var(--radius-sm, 6px);
163
+ border-radius: var(--radius-md, 8px);
164
164
  background: transparent;
165
165
  color: rgb(var(--color-muted, var(--color-text-secondary)));
166
166
  font-family: inherit;
@@ -190,7 +190,7 @@
190
190
  bottom: calc(var(--space-1, 0.25rem) / 2);
191
191
  width: 0.5rem;
192
192
  height: 0.5rem;
193
- border-radius: 999px;
193
+ border-radius: var(--radius-full);
194
194
  pointer-events: none;
195
195
  }
196
196
 
@@ -34,7 +34,7 @@
34
34
  // 2. Border Radius System
35
35
  // ------
36
36
 
37
- --hi-icon-button-radius: var(--radius-sm, 4px);
37
+ --hi-icon-button-radius: var(--radius-md, 8px);
38
38
 
39
39
  // ------
40
40
  // 3. Animation System
@@ -32,7 +32,7 @@
32
32
  background: color-mix(in srgb, rgb(var(--color-surface)) 55%, transparent);
33
33
 
34
34
  border: 1px solid color-mix(in srgb, rgb(var(--color-text)) 14%, transparent);
35
- border-radius: var(--radius-sm);
35
+ border-radius: var(--radius-md, 8px);
36
36
  overflow: hidden;
37
37
  /* Longhand on purpose: the comma shorthand attached the duration to the
38
38
  * LAST property only, so hover border-color and the focus-within
@@ -28,7 +28,7 @@
28
28
  align-items: center;
29
29
  gap: 12px;
30
30
  padding: 24px 32px;
31
- border-radius: 12px;
31
+ border-radius: var(--radius-lg);
32
32
  background: rgb(var(--color-surface, 255 255 255) / 0.85);
33
33
  box-shadow: 0 8px 32px rgb(0 0 0 / 0.12);
34
34
  }
@@ -25,7 +25,7 @@
25
25
  .s-log-tab {
26
26
  padding: var(--space-4, 0.25rem) var(--space-10, 0.625rem);
27
27
  border: 1px solid transparent;
28
- border-radius: var(--radius-sm, 6px);
28
+ border-radius: var(--radius-md, 8px);
29
29
  background: transparent;
30
30
  color: rgb(var(--color-muted));
31
31
  font-size: var(--text-xs, 0.75rem);
@@ -71,7 +71,7 @@
71
71
  width: 1.75rem;
72
72
  height: 1.75rem;
73
73
  border: 1px solid var(--border-faint, rgb(var(--color-border) / 12%));
74
- border-radius: var(--radius-sm, 6px);
74
+ border-radius: var(--radius-md, 8px);
75
75
  background: rgb(var(--color-surface));
76
76
  color: rgb(var(--color-muted));
77
77
  cursor: pointer;
@@ -48,7 +48,7 @@
48
48
  font-size: 0.85em;
49
49
  background: var(--hi-color-bg-subtle, #21262d);
50
50
  padding: 0.15em 0.35em;
51
- border-radius: 3px;
51
+ border-radius: var(--radius-sm, 4px);
52
52
  }
53
53
 
54
54
  /* Track host for the code block's horizontal overlay rail — emitted in
@@ -132,7 +132,7 @@
132
132
  background: var(--hk-modal-bg, var(--hi-color-surface, rgba(255,255,255,0.95)));
133
133
  @include backdrop-filter(var(--hk-modal-blur, none));
134
134
  border: 1px solid var(--hk-modal-border-color, var(--hi-color-border, rgba(100,100,100,0.08)));
135
- border-radius: var(--hk-modal-radius, var(--radius-lg, 12px));
135
+ border-radius: var(--hk-modal-radius, var(--radius-xl, 16px));
136
136
  box-shadow:
137
137
  0 16px 48px rgba(0, 0, 0, 0.2),
138
138
  0 0 0 1px rgba(255, 255, 255, 0.05) inset;
@@ -583,8 +583,8 @@
583
583
  --hk-modal-bg-mobile,
584
584
  var(--hk-modal-bg, var(--hi-color-surface, rgba(255, 255, 255, 0.95)))
585
585
  );
586
- border-radius: var(--hk-modal-radius, var(--radius-lg, 12px))
587
- var(--hk-modal-radius, var(--radius-lg, 12px))
586
+ border-radius: var(--hk-modal-radius, var(--radius-xl, 16px))
587
+ var(--hk-modal-radius, var(--radius-xl, 16px))
588
588
  0 0;
589
589
  border-left: 0;
590
590
  border-right: 0;