@celestia-island/hikari 0.55.327 → 0.55.328
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.
- package/package.json +1 -1
- package/src/DemoApp.tsx +3 -3
- package/src/components/HkAffixPicker.scss +2 -2
- package/src/components/HkBreadcrumb.scss +1 -1
- package/src/components/HkButton.scss +1 -1
- package/src/components/HkCard.scss +1 -1
- package/src/components/HkCardList.scss +2 -2
- package/src/components/HkCheckbox.scss +207 -0
- package/src/components/HkColorPicker.scss +1 -1
- package/src/components/HkCornerBadge.scss +1 -1
- package/src/components/HkDatePicker.scss +5 -5
- package/src/components/HkDateTag.scss +1 -1
- package/src/components/HkDateTimePicker.scss +8 -8
- package/src/components/HkDrawer.scss +4 -4
- package/src/components/HkErrorLanding.scss +2 -2
- package/src/components/HkFileField.scss +1 -1
- package/src/components/HkFilePickerField.scss +1 -1
- package/src/components/HkFilterPanel.scss +1 -1
- package/src/components/HkIconButtonGroup.scss +1 -1
- package/src/components/HkIconButtonVars.scss +1 -1
- package/src/components/HkInput.scss +1 -1
- package/src/components/HkLoadingVeil.scss +1 -1
- package/src/components/HkLogWindow.scss +2 -2
- package/src/components/HkMarkdownRenderer.scss +1 -1
- package/src/components/HkModal.scss +3 -3
- package/src/components/HkPageHeader.scss +1 -1
- package/src/components/HkPasswordSurface.scss +1 -1
- package/src/components/HkPersistentToast.scss +2 -2
- package/src/components/HkPersistentToastGroup.scss +1 -1
- package/src/components/HkPopover.scss +2 -2
- package/src/components/HkProgressDialog.scss +1 -1
- package/src/components/HkRadio.scss +49 -0
- package/src/components/HkSearchInput.scss +1 -1
- package/src/components/HkSelect.scss +2 -2
- package/src/components/HkSelectionControls.styles.test.ts +4242 -92
- package/src/components/HkSelectionGrid.scss +1 -1
- package/src/components/HkSelectionWaterfall.scss +2 -2
- package/src/components/HkSidebarRail.scss +1 -1
- package/src/components/HkSlider.scss +2 -2
- package/src/components/HkSplash.scss +1 -1
- package/src/components/HkStarSystem.scss +1 -1
- package/src/components/HkStatCard.scss +2 -2
- package/src/components/HkStatusPill.scss +1 -1
- package/src/components/HkStatusRow.scss +3 -3
- package/src/components/HkStepGuide.scss +2 -2
- package/src/components/HkSwitch.scss +1 -1
- package/src/components/HkTemplateField.scss +1 -1
- package/src/components/HkTextarea.scss +1 -1
- package/src/components/HkThemeToggle.scss +1 -1
- package/src/components/HkTimeZoneGlobe.scss +3 -3
- package/src/components/HkTitleBar.scss +2 -2
- package/src/components/HkToast.scss +1 -1
- package/src/components/HkTooltip.scss +1 -1
- package/src/components/HkTreemap.scss +2 -2
- package/src/components/HkTreemapStage.scss +1 -1
- package/src/components/HkWindowControls.scss +1 -1
- package/src/plugins/bootLandingCss.mjs +1 -1
- package/src/runtime/touchHint.scss +1 -1
- package/src/scale.scss +1 -0
- package/src/styles/admin-tokens.scss +4 -4
- package/src/styles/theme/scale.scss +1 -0
package/package.json
CHANGED
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-
|
|
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,
|
|
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;
|
|
@@ -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-
|
|
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-
|
|
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,
|
|
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-
|
|
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;
|
|
@@ -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,
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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,
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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,
|
|
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,
|
|
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-
|
|
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-
|
|
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-
|
|
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;
|
|
@@ -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-
|
|
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
|
|
@@ -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-
|
|
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-
|
|
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;
|
|
@@ -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-
|
|
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-
|
|
587
|
-
var(--hk-modal-radius, var(--radius-
|
|
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;
|