@ntmats/hc-ui 0.1.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/styles.css CHANGED
@@ -14,21 +14,30 @@
14
14
  }
15
15
  [data-hc-ds] .hc-ui-surface[data-tone='elevated'] {
16
16
  background: var(--hc-color-bg-elevated);
17
- border: 1px solid var(--hc-color-border);
18
17
  border-radius: var(--hc-radius-md);
19
18
  box-shadow: var(--hc-shadow-card);
20
19
  }
21
20
  [data-hc-ds] .hc-ui-surface[data-tone='overlay'] {
22
21
  background: var(--hc-color-bg-elevated);
23
- border: 1px solid var(--hc-color-border);
24
22
  border-radius: var(--hc-radius-md);
25
23
  box-shadow: var(--hc-shadow-float);
26
24
  }
25
+ /* HCUI's `surface` mixin: surface fill in both themes, the card ring and soft shadow
26
+ (no border), 20px corners; 24px with radius="xl" (HCUI's card-surface). */
27
+ [data-hc-ds] .hc-ui-surface[data-tone='card'] {
28
+ background: var(--hc-color-bg-surface);
29
+ border-radius: var(--hc-radius-lg);
30
+ box-shadow: var(--hc-shadow-card);
31
+ }
32
+ [data-hc-ds] .hc-ui-surface:not([data-tone='page'], [data-tone='main'])[data-radius='md'] { border-radius: var(--hc-radius-md); }
33
+ [data-hc-ds] .hc-ui-surface:not([data-tone='page'], [data-tone='main'])[data-radius='lg'] { border-radius: var(--hc-radius-lg); }
34
+ [data-hc-ds] .hc-ui-surface:not([data-tone='page'], [data-tone='main'])[data-radius='xl'] { border-radius: var(--hc-radius-xl); }
27
35
 
28
36
  /* Visual reference: HCUI segmented track (3px inset, 2px gap, raised knob). */
29
37
  [data-hc-ds] .hc-ui-segmented {
30
38
  display: inline-flex;
31
39
  align-items: center;
40
+ flex: 0 0 auto;
32
41
  gap: 2px;
33
42
  max-width: 100%;
34
43
  padding: 3px;
@@ -83,7 +92,7 @@
83
92
 
84
93
  [data-hc-ds] .hc-ui-segmented__option:focus-visible {
85
94
  outline: 2px solid var(--hc-focus-ring);
86
- outline-offset: 2px;
95
+ outline-offset: var(--hc-focus-ring-offset, 2px);
87
96
  }
88
97
 
89
98
  [data-hc-ds] .hc-ui-segmented__option:disabled { opacity: 0.48; cursor: not-allowed; }
@@ -91,6 +100,64 @@
91
100
  [data-hc-ds] .hc-ui-segmented__icon svg { display: block; width: 18px; height: 18px; }
92
101
  [data-hc-ds] .hc-ui-segmented__label { overflow: hidden; text-overflow: ellipsis; }
93
102
 
103
+ /* Equal width: one grid column (or row) per option, as wide as the widest, or as
104
+ --hc-segmented-option-width (the `optionWidth` prop). */
105
+ [data-hc-ds] .hc-ui-segmented[data-equal-width] {
106
+ display: inline-grid;
107
+ grid-auto-flow: column;
108
+ grid-auto-columns: var(--hc-segmented-option-width, minmax(0, 1fr));
109
+ }
110
+ [data-hc-ds] .hc-ui-segmented[data-equal-width][data-orientation='vertical'] {
111
+ grid-auto-flow: row;
112
+ grid-auto-columns: auto;
113
+ grid-auto-rows: minmax(0, 1fr);
114
+ }
115
+
116
+ /* Sliding knob — HCUI's point cost toggle (`.point-cost-toggle`): no gap, one knob
117
+ that moves its own width with a pop, 34px options (a 40px track), 12px/600 labels,
118
+ muted until chosen, and the whole track shrinks on press. */
119
+ [data-hc-ds] .hc-ui-segmented[data-indicator='slide'] {
120
+ position: relative;
121
+ isolation: isolate;
122
+ gap: 0;
123
+ transition: transform var(--hc-dur-short) var(--hc-ease-standard);
124
+ }
125
+ [data-hc-ds] .hc-ui-segmented[data-indicator='slide']:has(.hc-ui-segmented__option:active:not(:disabled)) { transform: scale(0.97); }
126
+ [data-hc-ds] .hc-ui-segmented__indicator {
127
+ position: absolute;
128
+ z-index: -1;
129
+ top: 3px;
130
+ left: 3px;
131
+ width: calc((100% - 6px) / var(--hc-segmented-count, 1));
132
+ height: calc(100% - 6px);
133
+ background-color: var(--hc-color-bg-surface);
134
+ border-radius: var(--hc-radius-full);
135
+ box-shadow: var(--hc-shadow-knob);
136
+ transform: translateX(calc(var(--hc-segmented-index, 0) * 100%));
137
+ transition: transform 260ms var(--hc-ease-pop), background-color var(--hc-transition-base);
138
+ pointer-events: none;
139
+ }
140
+ [data-hc-ds] .hc-ui-segmented[data-orientation='vertical'] .hc-ui-segmented__indicator {
141
+ width: calc(100% - 6px);
142
+ height: calc((100% - 6px) / var(--hc-segmented-count, 1));
143
+ transform: translateY(calc(var(--hc-segmented-index, 0) * 100%));
144
+ }
145
+ [data-hc-ds] .hc-ui-segmented[data-indicator='slide'] .hc-ui-segmented__option {
146
+ min-height: 34px;
147
+ padding: 0 var(--hc-space-2);
148
+ color: var(--hc-color-text-muted);
149
+ font-size: var(--hc-font-size-xs);
150
+ font-weight: var(--hc-font-weight-semibold);
151
+ font-stretch: normal;
152
+ transition: color var(--hc-transition-base);
153
+ }
154
+ [data-hc-ds] .hc-ui-segmented[data-indicator='slide'][data-density='compact'] .hc-ui-segmented__option { min-height: 32px; }
155
+ [data-hc-ds] .hc-ui-segmented[data-indicator='slide'] .hc-ui-segmented__option[data-selected] {
156
+ color: var(--hc-color-text-primary);
157
+ background: transparent;
158
+ box-shadow: none;
159
+ }
160
+
94
161
  /* Shared by Button, IconButton and Chip: reset, touch and press feedback. */
95
162
  [data-hc-ds] :is(.hc-ui-button, .hc-ui-icon-button, .hc-ui-chip) {
96
163
  appearance: none;
@@ -116,7 +183,7 @@
116
183
 
117
184
  [data-hc-ds] :is(.hc-ui-button, .hc-ui-icon-button, .hc-ui-chip):focus-visible {
118
185
  outline: 2px solid var(--hc-focus-ring);
119
- outline-offset: 2px;
186
+ outline-offset: var(--hc-focus-ring-offset, 2px);
120
187
  }
121
188
 
122
189
  [data-hc-ds] :is(.hc-ui-button__icon, .hc-ui-icon-button__icon, .hc-ui-chip__icon) { display: inline-flex; flex: 0 0 auto; }
@@ -157,9 +224,23 @@
157
224
  [data-hc-ds] .hc-ui-button[data-variant='primary'] { color: var(--hc-color-text-inverse); background-color: var(--hc-color-accent); }
158
225
  [data-hc-ds] .hc-ui-button[data-variant='outline'] { background-color: transparent; box-shadow: inset 0 0 0 1px var(--hc-color-border-strong); }
159
226
  [data-hc-ds] .hc-ui-button[data-variant='danger'] { color: var(--hc-color-text-on-danger); background-color: var(--hc-color-bg-danger); }
227
+ [data-hc-ds] .hc-ui-button[data-size='sm'] { min-height: var(--hc-control-height-chip); padding: 0 var(--hc-space-4); font-size: var(--hc-font-size-sm); }
160
228
  [data-hc-ds] .hc-ui-button[data-size='lg'] { min-height: var(--hc-control-height-lg); padding: 0 var(--hc-space-6); font-size: var(--hc-font-size-base); }
161
229
  [data-hc-ds] .hc-ui-button[data-full-width] { width: 100%; }
162
230
  [data-hc-ds] .hc-ui-button:disabled { opacity: 0.4; cursor: default; }
231
+ [data-hc-ds] .hc-ui-button { max-width: 100%; }
232
+ [data-hc-ds] .hc-ui-button__label { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
233
+ [data-hc-ds] .hc-ui-button[aria-busy='true'] { cursor: progress; }
234
+ [data-hc-ds] .hc-ui-button__spinner {
235
+ flex: 0 0 auto;
236
+ width: 16px;
237
+ height: 16px;
238
+ border: 2px solid currentColor;
239
+ border-right-color: transparent;
240
+ border-radius: var(--hc-radius-full);
241
+ animation: hc-ui-spin 700ms linear infinite;
242
+ }
243
+ @keyframes hc-ui-spin { to { transform: rotate(360deg); } }
163
244
 
164
245
  /* IconButton — HCUI icon-button / close-button. */
165
246
  [data-hc-ds] .hc-ui-icon-button {
@@ -175,6 +256,22 @@
175
256
  [data-hc-ds] .hc-ui-icon-button[data-tone='secondary'] { color: var(--hc-color-text-secondary); }
176
257
  /* 36px keeps a 44px touch target; the veil stays clipped to the circle. */
177
258
  [data-hc-ds] .hc-ui-icon-button[data-size='sm']::before { content: ''; position: absolute; inset: -4px; }
259
+ /* Fills: surface (HCUI's mobile theme button: surface, card ring and shadow) and ghost
260
+ (HCUI's desktop utilities: no fill, muted fill and primary text on hover). */
261
+ [data-hc-ds] .hc-ui-icon-button[data-variant='surface'] { background-color: var(--hc-color-bg-surface); box-shadow: var(--hc-shadow-card); }
262
+ [data-hc-ds] .hc-ui-icon-button[data-variant='outline'] { background-color: var(--hc-color-bg-surface); box-shadow: inset 0 0 0 1px var(--hc-color-border); }
263
+ [data-hc-ds] .hc-ui-icon-button[data-variant='ghost'] { background-color: transparent; }
264
+ @media (hover: hover) {
265
+ [data-hc-ds] .hc-ui-icon-button[data-variant='ghost']:hover:not(:disabled, [aria-pressed='true']) { color: var(--hc-color-text-primary); background-color: var(--hc-color-bg-muted); }
266
+ }
267
+ [data-hc-ds] .hc-ui-icon-button[data-shape='rounded'] { border-radius: var(--hc-radius-sm); }
268
+ [data-hc-ds] .hc-ui-icon-button[aria-pressed='true'] { color: var(--hc-color-text-inverse); background-color: var(--hc-color-accent); }
269
+ /* iconKey: the new icon turns in (HCUI's theme sun and moon). */
270
+ [data-hc-ds] .hc-ui-icon-button__icon[data-swap] { animation: hc-ui-icon-swap 360ms var(--hc-ease-pop) both; }
271
+ @keyframes hc-ui-icon-swap {
272
+ from { opacity: 0; transform: rotate(-60deg) scale(0.6); }
273
+ to { opacity: 1; transform: rotate(0) scale(1); }
274
+ }
178
275
  [data-hc-ds] .hc-ui-icon-button:disabled { opacity: 0.4; cursor: default; }
179
276
 
180
277
  /* Chip — HCUI chip / chip-active. */
@@ -192,11 +289,194 @@
192
289
  }
193
290
  @media (hover: hover) {
194
291
  [data-hc-ds] .hc-ui-chip:hover:not(:disabled) { background-color: var(--hc-color-bg-muted); }
195
- [data-hc-ds] .hc-ui-chip[aria-pressed='true']:hover:not(:disabled) { background-color: var(--hc-color-accent); }
292
+ [data-hc-ds] .hc-ui-chip:is([aria-pressed='true'], [aria-checked='true']):hover:not(:disabled) { background-color: var(--hc-color-accent); }
196
293
  }
197
- [data-hc-ds] .hc-ui-chip[aria-pressed='true'] { color: var(--hc-color-text-inverse); background-color: var(--hc-color-accent); box-shadow: none; }
294
+ /* Selected: a toggle (aria-pressed) or the chosen radio of a SheetChips (aria-checked). */
295
+ [data-hc-ds] .hc-ui-chip:is([aria-pressed='true'], [aria-checked='true']) { color: var(--hc-color-text-inverse); background-color: var(--hc-color-accent); box-shadow: none; }
198
296
  [data-hc-ds] .hc-ui-chip:disabled { opacity: 0.4; cursor: default; }
199
297
 
298
+ /* Chip as a filter (HCUI's .desktop-filter-bar__pill, .desktop-sort__trigger,
299
+ .quick-filters__chip and .rules-results__pill): count, badge, chevron, applied and
300
+ open rings, sizes, the quiet variant and the remove button. */
301
+ [data-hc-ds] .hc-ui-chip__count { color: var(--hc-color-text-secondary); font-weight: var(--hc-font-weight-regular); }
302
+ [data-hc-ds] .hc-ui-chip__badge {
303
+ display: grid;
304
+ place-items: center;
305
+ box-sizing: border-box;
306
+ min-width: 18px;
307
+ height: 18px;
308
+ padding: 0 var(--hc-space-1);
309
+ color: var(--hc-color-bg-surface);
310
+ background-color: var(--hc-color-text-primary);
311
+ border-radius: var(--hc-radius-full);
312
+ font-size: var(--hc-font-size-2xs);
313
+ font-variant-numeric: tabular-nums;
314
+ }
315
+ [data-hc-ds] .hc-ui-chip__chevron { display: inline-flex; flex: 0 0 auto; }
316
+ [data-hc-ds] .hc-ui-chip__chevron svg { display: block; }
317
+ /* Applied filter, or the trigger of an open popup: a 1.5px ring (the selected fill below wins). */
318
+ [data-hc-ds] .hc-ui-chip:is([data-applied], [aria-expanded='true']):not([aria-pressed='true'], [aria-checked='true'], [data-selected]) { box-shadow: inset 0 0 0 1.5px var(--hc-color-text-primary); }
319
+ /* Line height `normal`, as HCUI's filter pills: on 2x screens 18px moves the text by half a pixel. */
320
+ [data-hc-ds] .hc-ui-chip[data-size='sm'] { padding: 0 var(--hc-space-3); font-size: var(--hc-font-size-xs); line-height: normal; }
321
+ [data-hc-ds] .hc-ui-chip[data-size='xs'] {
322
+ gap: var(--hc-space-1);
323
+ min-height: 26px;
324
+ height: 26px;
325
+ padding: 0 var(--hc-space-2);
326
+ background-color: var(--hc-color-bg-muted);
327
+ box-shadow: none;
328
+ font-size: var(--hc-font-size-2xs);
329
+ }
330
+ [data-hc-ds] .hc-ui-chip[data-size='xs']:is([data-applied], [aria-expanded='true']):not([aria-pressed='true'], [aria-checked='true'], [data-selected]) { box-shadow: inset 0 0 0 1.5px var(--hc-color-text-primary); }
331
+ /* Quiet: HCUI's rule filter pills, lighter until applied. */
332
+ [data-hc-ds] .hc-ui-chip[data-variant='quiet'] {
333
+ gap: 5px;
334
+ padding: 0 13px;
335
+ color: var(--hc-color-text-secondary);
336
+ box-shadow: inset 0 0 0 1px var(--hc-color-border);
337
+ font-weight: 560;
338
+ }
339
+ [data-hc-ds] .hc-ui-chip[data-variant='quiet'][data-applied] { color: var(--hc-color-text-primary); box-shadow: inset 0 0 0 1.5px var(--hc-color-text-primary); font-weight: 720; }
340
+ [data-hc-ds] .hc-ui-chip[data-variant='quiet'] .hc-ui-chip__badge { padding: 0 5px; font-weight: var(--hc-font-weight-bold); font-variant-numeric: normal; line-height: 18px; }
341
+ /* With a remove button: the span is the pill and holds two plain buttons. */
342
+ [data-hc-ds] .hc-ui-chip[data-clearable] { cursor: default; }
343
+ [data-hc-ds] .hc-ui-chip[data-clearable][data-size='xs'] { gap: 2px; padding: 0 2px 0 var(--hc-space-2); max-width: 100%; }
344
+ [data-hc-ds] :is(.hc-ui-chip__main, .hc-ui-chip__clear) {
345
+ appearance: none;
346
+ margin: 0;
347
+ padding: 0;
348
+ color: inherit;
349
+ background: transparent;
350
+ border: 0;
351
+ font: inherit;
352
+ font-variation-settings: inherit;
353
+ cursor: pointer;
354
+ -webkit-tap-highlight-color: transparent;
355
+ touch-action: manipulation;
356
+ }
357
+ [data-hc-ds] .hc-ui-chip__main { display: inline-flex; align-items: center; gap: inherit; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
358
+ [data-hc-ds] span.hc-ui-chip__main { display: block; cursor: inherit; }
359
+ [data-hc-ds] .hc-ui-chip__clear {
360
+ display: grid;
361
+ flex: 0 0 auto;
362
+ place-items: center;
363
+ width: 20px;
364
+ height: 20px;
365
+ color: var(--hc-color-text-secondary);
366
+ border-radius: var(--hc-radius-full);
367
+ }
368
+ [data-hc-ds] .hc-ui-chip__clear svg { display: block; }
369
+ [data-hc-ds] .hc-ui-chip__clear:hover:not(:disabled) { color: var(--hc-color-text-primary); background-color: color-mix(in srgb, currentColor 18%, transparent); }
370
+ [data-hc-ds] :is(.hc-ui-chip__main, .hc-ui-chip__clear):focus-visible { outline: 2px solid var(--hc-focus-ring); outline-offset: var(--hc-focus-ring-offset, 2px); }
371
+ [data-hc-ds] .hc-ui-chip__clear:disabled, [data-hc-ds] button.hc-ui-chip__main:disabled { cursor: default; }
372
+ [data-hc-ds] .hc-ui-chip[data-disabled] { opacity: 0.4; }
373
+ /* Selected with a remove button: the contrast fill at xs (HCUI's active quick filter), the accent otherwise. */
374
+ [data-hc-ds] .hc-ui-chip[data-clearable][data-selected],
375
+ [data-hc-ds] .hc-ui-chip[data-clearable][data-selected]:hover { color: var(--hc-color-text-inverse); background-color: var(--hc-color-accent); box-shadow: none; }
376
+ [data-hc-ds] .hc-ui-chip[data-size='xs']:is([aria-pressed='true'], [aria-checked='true'], [data-selected]),
377
+ [data-hc-ds] .hc-ui-chip[data-size='xs']:is([aria-pressed='true'], [aria-checked='true'], [data-selected]):hover { color: var(--hc-color-text-on-contrast); background-color: var(--hc-color-bg-contrast); }
378
+ [data-hc-ds] .hc-ui-chip:is([aria-pressed='true'], [aria-checked='true'], [data-selected]) .hc-ui-chip__count { color: inherit; }
379
+ [data-hc-ds] .hc-ui-chip[data-selected] .hc-ui-chip__clear { color: inherit; }
380
+
381
+ /* FilterBar — a row of filters with start, end and footer slots (HCUI's .desktop-filter-bar,
382
+ .desktop-filter-bar--sheet and .quick-filters). Placement stays with the caller. */
383
+ [data-hc-ds] .hc-ui-filter-bar { box-sizing: border-box; min-width: 0; }
384
+ [data-hc-ds] .hc-ui-filter-bar[data-sticky] {
385
+ position: sticky;
386
+ top: var(--hc-filter-bar-top, 0px);
387
+ z-index: 3;
388
+ padding-block: var(--hc-space-2);
389
+ background-color: var(--hc-color-bg-surface);
390
+ }
391
+ [data-hc-ds] .hc-ui-filter-bar__line { display: flex; align-items: center; gap: var(--hc-space-2); min-width: 0; }
392
+ [data-hc-ds] :is(.hc-ui-filter-bar__start, .hc-ui-filter-bar__end) { display: flex; flex: 0 0 auto; align-items: center; gap: var(--hc-space-2); }
393
+ [data-hc-ds] .hc-ui-filter-bar__end { margin-inline-start: auto; }
394
+ [data-hc-ds] .hc-ui-filter-bar__row { display: flex; flex: 1 1 auto; flex-wrap: wrap; align-items: center; gap: var(--hc-space-2); min-width: 0; }
395
+ [data-hc-ds] .hc-ui-filter-bar[data-density='compact'] .hc-ui-filter-bar__row { gap: var(--hc-space-1); }
396
+ [data-hc-ds] .hc-ui-filter-bar__footer { margin-top: var(--hc-space-2); }
397
+ /* One line that scrolls sideways. 4px of padding above and below, taken back by the margin,
398
+ keep focus rings from being cut without changing the layout. */
399
+ [data-hc-ds] .hc-ui-filter-bar[data-layout='scroll'] .hc-ui-filter-bar__row {
400
+ flex-wrap: nowrap;
401
+ order: 1;
402
+ flex-basis: 100%;
403
+ margin: -4px calc(-1 * var(--hc-filter-bar-bleed, 0px));
404
+ padding: 4px var(--hc-filter-bar-bleed, 0px);
405
+ overflow-x: auto;
406
+ scroll-padding-inline: var(--hc-filter-bar-bleed, 0px);
407
+ scrollbar-width: none;
408
+ }
409
+ [data-hc-ds] .hc-ui-filter-bar[data-layout='scroll'] .hc-ui-filter-bar__row::-webkit-scrollbar { display: none; }
410
+ /* There is no room beside the slots: they share the first line (the start one grows, as a
411
+ search field) and the filters scroll on their own line under them. */
412
+ [data-hc-ds] .hc-ui-filter-bar[data-layout='scroll'] .hc-ui-filter-bar__line { flex-wrap: wrap; }
413
+ [data-hc-ds] .hc-ui-filter-bar[data-layout='scroll'] .hc-ui-filter-bar__start { flex: 1 1 auto; min-width: 0; }
414
+ @media (max-width: 959.98px) {
415
+ [data-hc-ds] .hc-ui-filter-bar[data-layout='auto'] .hc-ui-filter-bar__row {
416
+ flex-wrap: nowrap;
417
+ order: 1;
418
+ flex-basis: 100%;
419
+ margin: -4px calc(-1 * var(--hc-filter-bar-bleed, 0px));
420
+ padding: 4px var(--hc-filter-bar-bleed, 0px);
421
+ overflow-x: auto;
422
+ scroll-padding-inline: var(--hc-filter-bar-bleed, 0px);
423
+ scrollbar-width: none;
424
+ }
425
+ [data-hc-ds] .hc-ui-filter-bar[data-layout='auto'] .hc-ui-filter-bar__row::-webkit-scrollbar { display: none; }
426
+ [data-hc-ds] .hc-ui-filter-bar[data-layout='auto'] .hc-ui-filter-bar__line { flex-wrap: wrap; }
427
+ [data-hc-ds] .hc-ui-filter-bar[data-layout='auto'] .hc-ui-filter-bar__start { flex: 1 1 auto; min-width: 0; }
428
+ }
429
+
430
+ /* Field — HCUI field. One focus ring, on the pill, never on the inner input. */
431
+ [data-hc-ds] .hc-ui-field { display: grid; align-content: start; gap: var(--hc-space-1); min-width: 0; font-family: var(--hc-font-body); font-variation-settings: 'ROND' var(--hc-rond); }
432
+ [data-hc-ds] .hc-ui-field__label { color: var(--hc-color-text-secondary); font-size: var(--hc-font-size-sm); font-weight: var(--hc-font-weight-medium); line-height: var(--hc-line-height-sm); }
433
+ [data-hc-ds] .hc-ui-field__label[data-hidden] {
434
+ position: absolute;
435
+ width: 1px;
436
+ height: 1px;
437
+ overflow: hidden;
438
+ clip-path: inset(50%);
439
+ white-space: nowrap;
440
+ }
441
+ [data-hc-ds] .hc-ui-field__control {
442
+ display: flex;
443
+ align-items: center;
444
+ gap: var(--hc-space-2);
445
+ min-height: var(--hc-control-height-md);
446
+ padding: 0 var(--hc-space-4);
447
+ color: var(--hc-color-text-primary);
448
+ background-color: var(--hc-color-bg-muted);
449
+ border-radius: var(--hc-radius-full);
450
+ transition: box-shadow var(--hc-transition-fast), background-color var(--hc-transition-fast);
451
+ }
452
+ [data-hc-ds] .hc-ui-field[data-density='compact'] .hc-ui-field__control { min-height: var(--hc-control-height-sm); padding: 0 var(--hc-space-3); }
453
+ [data-hc-ds] .hc-ui-field__control:focus-within { box-shadow: inset 0 0 0 1.5px var(--hc-color-text-primary); }
454
+ [data-hc-ds] .hc-ui-field[data-invalid] .hc-ui-field__control { box-shadow: inset 0 0 0 1.5px var(--hc-color-danger); }
455
+ [data-hc-ds] .hc-ui-field[data-disabled] .hc-ui-field__control { opacity: 0.4; }
456
+ [data-hc-ds] .hc-ui-field__input {
457
+ appearance: none;
458
+ flex: 1 1 auto;
459
+ width: 100%;
460
+ min-width: 0;
461
+ margin: 0;
462
+ padding: 0;
463
+ color: inherit;
464
+ font-family: inherit;
465
+ font-size: var(--hc-font-size-base);
466
+ font-variation-settings: inherit;
467
+ line-height: var(--hc-line-height-base);
468
+ background: transparent;
469
+ border: 0;
470
+ outline: 0;
471
+ box-shadow: none;
472
+ }
473
+ [data-hc-ds] .hc-ui-field__input::placeholder { color: var(--hc-color-placeholder); opacity: 1; }
474
+ [data-hc-ds] :is(.hc-ui-field__icon, .hc-ui-field__end) { display: inline-flex; flex: 0 0 auto; align-items: center; color: var(--hc-color-text-muted); }
475
+ [data-hc-ds] .hc-ui-field__icon svg { display: block; }
476
+ [data-hc-ds] :is(.hc-ui-field__hint, .hc-ui-field__error) { margin: 0; font-size: var(--hc-font-size-xs); line-height: var(--hc-line-height-xs); }
477
+ [data-hc-ds] .hc-ui-field__hint { color: var(--hc-color-text-muted); }
478
+ [data-hc-ds] .hc-ui-field__error { color: var(--hc-color-text-on-danger); }
479
+
200
480
  /* Skeleton — zero specificity on purpose: the consumer sizes each shape. */
201
481
  @keyframes hc-ui-skeleton-pulse {
202
482
  0%, 100% { opacity: 1; }
@@ -215,7 +495,949 @@
215
495
 
216
496
  @media (prefers-reduced-motion: reduce) {
217
497
  [data-hc-ds] .hc-ui-segmented__option { transition: none; }
498
+ [data-hc-ds] .hc-ui-segmented[data-indicator='slide'] .hc-ui-segmented__option { transition: none; }
499
+ [data-hc-ds] :is(.hc-ui-segmented[data-indicator='slide'], .hc-ui-segmented__indicator) { transition: none; }
500
+ [data-hc-ds] .hc-ui-segmented[data-indicator='slide']:has(.hc-ui-segmented__option:active:not(:disabled)) { transform: none; }
501
+ [data-hc-ds] .hc-ui-icon-button__icon[data-swap] { animation: none; }
218
502
  [data-hc-ds] :is(.hc-ui-button, .hc-ui-icon-button, .hc-ui-chip) { transition: none; }
503
+ [data-hc-ds] .hc-ui-field__control { transition: none; }
504
+ [data-hc-ds] .hc-ui-button__spinner { animation: none; }
219
505
  [data-hc-ds] :is(.hc-ui-button, .hc-ui-icon-button, .hc-ui-chip):active:not(:disabled) { transform: none; }
220
506
  :where([data-hc-ds] .hc-ui-skeleton) { animation: none; }
221
507
  }
508
+
509
+ /* Meter — HCUI's bars of points against the limit: the mobile team bar (3px, no
510
+ track, `team-bar__meter`), the desktop sidebar draft (4px, `desktop-sidebar__meter`)
511
+ and the team rules bar (5px, square fill, limit line, `team-rules__bar`).
512
+ Display and position have zero specificity: the caller places it (absolute, grid). */
513
+ :where([data-hc-ds] .hc-ui-meter) { position: relative; display: block; }
514
+ [data-hc-ds] .hc-ui-meter {
515
+ height: 4px;
516
+ overflow: hidden;
517
+ background-color: var(--hc-color-bg-muted);
518
+ border-radius: var(--hc-radius-full);
519
+ }
520
+ [data-hc-ds] .hc-ui-meter[data-thickness='3'] { height: 3px; }
521
+ [data-hc-ds] .hc-ui-meter[data-thickness='5'] { height: 5px; }
522
+ [data-hc-ds] .hc-ui-meter[data-track='border'] { background-color: var(--hc-color-border); }
523
+ [data-hc-ds] .hc-ui-meter[data-track='none'] { overflow: visible; background-color: transparent; border-radius: 0; }
524
+ [data-hc-ds] .hc-ui-meter__fill {
525
+ display: block;
526
+ height: 100%;
527
+ background-color: var(--hc-color-text-primary);
528
+ border-radius: inherit;
529
+ }
530
+ /* Without a track the fill starts flush with the edge and rounds only its end. */
531
+ [data-hc-ds] .hc-ui-meter[data-track='none'][data-cap='round'] .hc-ui-meter__fill { border-radius: 0 var(--hc-radius-full) var(--hc-radius-full) 0; }
532
+ [data-hc-ds] .hc-ui-meter[data-cap='square'] .hc-ui-meter__fill { border-radius: 0; }
533
+ [data-hc-ds] .hc-ui-meter[data-tone='over'] .hc-ui-meter__fill { background-color: var(--hc-color-danger); }
534
+ /* Drawn only above the limit, over the danger fill: in the text color it shows in both themes. */
535
+ [data-hc-ds] .hc-ui-meter__limit {
536
+ position: absolute;
537
+ top: 0;
538
+ bottom: 0;
539
+ width: 2px;
540
+ background-color: var(--hc-color-text-primary);
541
+ }
542
+ [data-hc-ds] .hc-ui-meter[data-animated] .hc-ui-meter__fill { transition: width var(--hc-transition-base); }
543
+
544
+ @media (prefers-reduced-motion: reduce) {
545
+ [data-hc-ds] .hc-ui-meter[data-animated] .hc-ui-meter__fill { transition: none; }
546
+ }
547
+
548
+ /* Checkbox — HCUI Checkbox. The native input sits transparently over the box. */
549
+ [data-hc-ds] .hc-ui-checkbox {
550
+ --hc-checkbox-size: 20px;
551
+ --hc-checkbox-radius: 6px;
552
+ --hc-checkbox-icon: 14px;
553
+ position: relative;
554
+ display: inline-grid;
555
+ flex: 0 0 auto;
556
+ place-items: center;
557
+ width: var(--hc-checkbox-size);
558
+ height: var(--hc-checkbox-size);
559
+ vertical-align: middle;
560
+ }
561
+ [data-hc-ds] .hc-ui-checkbox[data-size='sm'] {
562
+ --hc-checkbox-size: 16px;
563
+ --hc-checkbox-radius: 5px;
564
+ --hc-checkbox-icon: 12px;
565
+ }
566
+ [data-hc-ds] .hc-ui-checkbox__input {
567
+ position: absolute;
568
+ inset: 0;
569
+ width: 100%;
570
+ height: 100%;
571
+ margin: 0;
572
+ opacity: 0;
573
+ cursor: pointer;
574
+ }
575
+ [data-hc-ds] .hc-ui-checkbox__input:disabled { cursor: not-allowed; }
576
+ [data-hc-ds] .hc-ui-checkbox__box {
577
+ display: grid;
578
+ place-items: center;
579
+ width: 100%;
580
+ height: 100%;
581
+ border-radius: var(--hc-checkbox-radius);
582
+ background-color: var(--hc-color-bg-surface);
583
+ box-shadow: inset 0 0 0 1.5px var(--hc-color-text-muted);
584
+ color: var(--hc-color-text-inverse);
585
+ pointer-events: none;
586
+ transition: background-color var(--hc-transition-fast), box-shadow var(--hc-transition-fast);
587
+ }
588
+ [data-hc-ds] :is(.hc-ui-checkbox__mark, .hc-ui-checkbox__mixed) {
589
+ display: block;
590
+ grid-area: 1 / 1;
591
+ width: var(--hc-checkbox-icon);
592
+ height: var(--hc-checkbox-icon);
593
+ visibility: hidden;
594
+ }
595
+ @media (hover: hover) {
596
+ [data-hc-ds] .hc-ui-checkbox__input:hover:not(:disabled) + .hc-ui-checkbox__box,
597
+ [data-hc-ds] label:hover .hc-ui-checkbox__input:not(:disabled) + .hc-ui-checkbox__box { box-shadow: inset 0 0 0 1.5px var(--hc-color-text-primary); }
598
+ }
599
+ [data-hc-ds] .hc-ui-checkbox__input:is(:checked, :indeterminate) + .hc-ui-checkbox__box {
600
+ background-color: var(--hc-color-accent);
601
+ box-shadow: none;
602
+ }
603
+ [data-hc-ds] .hc-ui-checkbox__input:checked:not(:indeterminate) + .hc-ui-checkbox__box .hc-ui-checkbox__mark,
604
+ [data-hc-ds] .hc-ui-checkbox__input:indeterminate + .hc-ui-checkbox__box .hc-ui-checkbox__mixed {
605
+ visibility: visible;
606
+ animation: hc-ui-check-in 200ms var(--hc-ease-pop);
607
+ }
608
+ @keyframes hc-ui-check-in {
609
+ from { transform: scale(0.4); opacity: 0; }
610
+ to { transform: scale(1); opacity: 1; }
611
+ }
612
+ [data-hc-ds] .hc-ui-checkbox__input:focus-visible { outline: none; }
613
+ [data-hc-ds] .hc-ui-checkbox__input:focus-visible + .hc-ui-checkbox__box {
614
+ outline: 2px solid var(--hc-focus-ring);
615
+ outline-offset: var(--hc-focus-ring-offset, 2px);
616
+ }
617
+ [data-hc-ds] .hc-ui-checkbox__input:disabled + .hc-ui-checkbox__box {
618
+ background-color: var(--hc-color-bg-muted);
619
+ box-shadow: inset 0 0 0 1.5px var(--hc-color-text-disabled);
620
+ }
621
+ [data-hc-ds] .hc-ui-checkbox__input:disabled:is(:checked, :indeterminate) + .hc-ui-checkbox__box {
622
+ background-color: var(--hc-color-text-disabled);
623
+ box-shadow: none;
624
+ }
625
+
626
+ @media (prefers-reduced-motion: reduce) {
627
+ [data-hc-ds] .hc-ui-checkbox__box { transition: none; }
628
+ [data-hc-ds] .hc-ui-checkbox__input:checked:not(:indeterminate) + .hc-ui-checkbox__box .hc-ui-checkbox__mark,
629
+ [data-hc-ds] .hc-ui-checkbox__input:indeterminate + .hc-ui-checkbox__box .hc-ui-checkbox__mixed { animation: none; }
630
+ }
631
+
632
+ /* Dialog — native <dialog> in the top layer. `sm` is HCUI's desktop confirmation
633
+ (.desktop-confirm); `md` is HCUI's Sheet in its centered desktop form. */
634
+ [data-hc-ds] .hc-ui-dialog {
635
+ box-sizing: border-box;
636
+ width: min(400px, calc(100vw - 32px));
637
+ max-width: none;
638
+ max-height: calc(100dvh - var(--hc-space-9));
639
+ margin: auto;
640
+ padding: var(--hc-space-5);
641
+ overflow: auto;
642
+ overscroll-behavior: contain;
643
+ color: var(--hc-color-text-primary);
644
+ background-color: var(--hc-color-bg-elevated);
645
+ border: 0;
646
+ border-radius: var(--hc-radius-lg);
647
+ font-family: var(--hc-font-body);
648
+ font-size: var(--hc-font-size-md);
649
+ font-variation-settings: 'ROND' var(--hc-rond);
650
+ line-height: var(--hc-line-height-md);
651
+ outline: none;
652
+ }
653
+ [data-hc-ds] .hc-ui-dialog[open] { display: grid; align-content: start; gap: var(--hc-space-2); }
654
+ [data-hc-ds] .hc-ui-dialog::backdrop { background-color: var(--hc-color-bg-overlay); }
655
+ [data-hc-ds] .hc-ui-dialog[data-closing] { pointer-events: none; }
656
+ [data-hc-ds] .hc-ui-dialog__header {
657
+ display: flex;
658
+ align-items: center;
659
+ justify-content: space-between;
660
+ gap: var(--hc-space-3);
661
+ min-width: 0;
662
+ }
663
+ [data-hc-ds] .hc-ui-dialog__title {
664
+ min-width: 0;
665
+ margin: 0;
666
+ color: var(--hc-color-text-primary);
667
+ font-family: var(--hc-font-display);
668
+ font-size: var(--hc-font-size-lg);
669
+ font-weight: var(--hc-font-weight-semibold);
670
+ /* As HCUI's confirmation title, whose `font` shorthand resets the stretch; ROND stays. */
671
+ font-stretch: normal;
672
+ font-variation-settings: 'ROND' var(--hc-rond);
673
+ line-height: normal;
674
+ }
675
+ [data-hc-ds] .hc-ui-dialog__body { display: grid; gap: var(--hc-space-2); min-width: 0; }
676
+ [data-hc-ds] .hc-ui-dialog__description {
677
+ margin: 0;
678
+ color: var(--hc-color-text-secondary);
679
+ font-size: var(--hc-font-size-sm);
680
+ line-height: 1.45;
681
+ }
682
+ [data-hc-ds] .hc-ui-dialog__actions {
683
+ display: flex;
684
+ flex-wrap: wrap;
685
+ justify-content: flex-end;
686
+ gap: var(--hc-space-2);
687
+ margin-top: var(--hc-space-3);
688
+ }
689
+ /* HCUI's confirmation buttons are 38px, between Button sm (36) and md (44). */
690
+ [data-hc-ds] .hc-ui-dialog[data-size='sm'] .hc-ui-dialog__actions .hc-ui-button[data-size='sm'] { min-height: 38px; }
691
+
692
+ [data-hc-ds] .hc-ui-dialog[data-size='md'] {
693
+ width: min(440px, calc(100vw - 2 * var(--hc-space-6)));
694
+ padding: 0;
695
+ overflow: hidden;
696
+ border-radius: var(--hc-radius-sheet);
697
+ box-shadow: var(--hc-shadow-modal);
698
+ animation: hc-ui-dialog-in var(--hc-dur-medium) var(--hc-ease-standard) both;
699
+ }
700
+ [data-hc-ds] .hc-ui-dialog[data-size='md'][open] { display: flex; flex-direction: column; gap: 0; }
701
+ [data-hc-ds] .hc-ui-dialog[data-size='md']::backdrop {
702
+ -webkit-backdrop-filter: blur(8px);
703
+ backdrop-filter: blur(8px);
704
+ animation: hc-ui-backdrop-in var(--hc-dur-medium) var(--hc-ease-standard) both;
705
+ }
706
+ [data-hc-ds] .hc-ui-dialog[data-size='md'][data-closing] { animation: hc-ui-dialog-out var(--hc-dur-short) var(--hc-ease-emphasized-accel) forwards; }
707
+ [data-hc-ds] .hc-ui-dialog[data-size='md'][data-closing]::backdrop { animation: hc-ui-backdrop-out var(--hc-dur-short) var(--hc-ease-standard) forwards; }
708
+ [data-hc-ds] .hc-ui-dialog[data-size='md'] .hc-ui-dialog__header { flex: 0 0 auto; padding: var(--hc-space-5) var(--hc-space-5) var(--hc-space-3); }
709
+ [data-hc-ds] .hc-ui-dialog[data-size='md'] .hc-ui-dialog__title {
710
+ font-size: var(--hc-font-size-xl);
711
+ font-weight: 720;
712
+ font-stretch: 88%;
713
+ line-height: var(--hc-line-height-xl);
714
+ font-variation-settings: 'ROND' var(--hc-rond);
715
+ letter-spacing: var(--hc-letter-spacing-snug);
716
+ }
717
+ [data-hc-ds] .hc-ui-dialog[data-size='md'] .hc-ui-dialog__body {
718
+ display: flex;
719
+ flex: 1 1 auto;
720
+ flex-direction: column;
721
+ gap: var(--hc-space-5);
722
+ min-height: 0;
723
+ padding: var(--hc-space-1) var(--hc-space-5) var(--hc-space-5);
724
+ overflow-y: auto;
725
+ overscroll-behavior: contain;
726
+ }
727
+ [data-hc-ds] .hc-ui-dialog[data-size='md'] .hc-ui-dialog__actions {
728
+ flex: 0 0 auto;
729
+ flex-wrap: nowrap;
730
+ margin: 0;
731
+ padding: var(--hc-space-3) var(--hc-space-5) var(--hc-space-5);
732
+ box-shadow: 0 -1px 0 var(--hc-color-border);
733
+ }
734
+ [data-hc-ds] .hc-ui-dialog[data-size='md'] .hc-ui-dialog__actions > * { flex: 1 1 0; }
735
+
736
+ @keyframes hc-ui-dialog-in {
737
+ from { opacity: 0; transform: translateY(8px) scale(0.97); }
738
+ to { opacity: 1; transform: translateY(0) scale(1); }
739
+ }
740
+ @keyframes hc-ui-dialog-out {
741
+ from { opacity: 1; transform: scale(1); }
742
+ to { opacity: 0; transform: scale(0.97); }
743
+ }
744
+ @keyframes hc-ui-backdrop-in { from { opacity: 0; } to { opacity: 1; } }
745
+ @keyframes hc-ui-backdrop-out { from { opacity: 1; } to { opacity: 0; } }
746
+
747
+ @media (prefers-reduced-motion: reduce) {
748
+ [data-hc-ds] .hc-ui-dialog,
749
+ [data-hc-ds] .hc-ui-dialog::backdrop,
750
+ [data-hc-ds] .hc-ui-dialog[data-size='md'],
751
+ [data-hc-ds] .hc-ui-dialog[data-size='md'][data-closing],
752
+ [data-hc-ds] .hc-ui-dialog[data-size='md']::backdrop,
753
+ [data-hc-ds] .hc-ui-dialog[data-size='md'][data-closing]::backdrop { animation: none; }
754
+ }
755
+
756
+ /* Sheet — a Dialog size="md" that, at the bottom, is HCUI's mobile Sheet (sheet-panel,
757
+ sheet-host, sheet-header): full width, top corners rounded, grabber, safe area,
758
+ rising entry. `auto` is at the bottom below 960px, HCUI's cut. `--hc-sheet-drag`
759
+ tells the drag gesture where the sheet is, so no script reads the width. */
760
+ /* [data-presentation] lifts it above the Dialog's own md width. */
761
+ [data-hc-ds] .hc-ui-sheet[data-presentation] {
762
+ --hc-sheet-drag: off;
763
+ width: min(var(--hc-sheet-width, 440px), calc(100vw - 2 * var(--hc-space-6)));
764
+ }
765
+ [data-hc-ds] .hc-ui-sheet[data-presentation='bottom'] {
766
+ --hc-sheet-drag: on;
767
+ width: 100%;
768
+ max-width: none;
769
+ max-height: calc(100dvh - var(--hc-space-7) - env(safe-area-inset-top, 0px));
770
+ margin: auto 0 0;
771
+ padding-bottom: max(env(safe-area-inset-bottom, 0px), var(--hc-space-3));
772
+ border-radius: var(--hc-radius-sheet) var(--hc-radius-sheet) 0 0;
773
+ touch-action: pan-y;
774
+ animation: hc-ui-sheet-up var(--hc-dur-large) var(--hc-ease-sheet) both;
775
+ transition: height 320ms var(--hc-ease-sheet), max-height 320ms var(--hc-ease-sheet);
776
+ }
777
+ [data-hc-ds] .hc-ui-sheet[data-presentation='bottom']::before {
778
+ content: '';
779
+ position: absolute;
780
+ top: 6px;
781
+ left: 50%;
782
+ z-index: 2;
783
+ display: block;
784
+ width: 36px;
785
+ height: 5px;
786
+ margin: 0 auto 0 -18px;
787
+ border-radius: var(--hc-radius-full);
788
+ background-color: var(--hc-color-border-strong);
789
+ }
790
+ [data-hc-ds] .hc-ui-sheet[data-presentation='bottom'] .hc-ui-dialog__header { padding-top: var(--hc-space-6); }
791
+ /* Full height, after a drag up from the grabber or header. */
792
+ [data-hc-ds] .hc-ui-sheet[data-presentation='bottom'][data-expanded] {
793
+ height: calc(100dvh - env(safe-area-inset-top, 0px) - 8px);
794
+ max-height: calc(100dvh - env(safe-area-inset-top, 0px) - 8px);
795
+ border-radius: 20px 20px 0 0;
796
+ }
797
+ [data-hc-ds] .hc-ui-sheet[data-presentation='bottom'][data-closing] { animation: hc-ui-sheet-down var(--hc-dur-medium) var(--hc-ease-emphasized-accel) forwards; }
798
+
799
+ @media (max-width: 959.98px) {
800
+ [data-hc-ds] .hc-ui-sheet[data-presentation='auto'] {
801
+ --hc-sheet-drag: on;
802
+ width: 100%;
803
+ max-width: none;
804
+ max-height: calc(100dvh - var(--hc-space-7) - env(safe-area-inset-top, 0px));
805
+ margin: auto 0 0;
806
+ padding-bottom: max(env(safe-area-inset-bottom, 0px), var(--hc-space-3));
807
+ border-radius: var(--hc-radius-sheet) var(--hc-radius-sheet) 0 0;
808
+ touch-action: pan-y;
809
+ animation: hc-ui-sheet-up var(--hc-dur-large) var(--hc-ease-sheet) both;
810
+ transition: height 320ms var(--hc-ease-sheet), max-height 320ms var(--hc-ease-sheet);
811
+ }
812
+ [data-hc-ds] .hc-ui-sheet[data-presentation='auto']::before {
813
+ content: '';
814
+ position: absolute;
815
+ top: 6px;
816
+ left: 50%;
817
+ z-index: 2;
818
+ display: block;
819
+ width: 36px;
820
+ height: 5px;
821
+ margin: 0 auto 0 -18px;
822
+ border-radius: var(--hc-radius-full);
823
+ background-color: var(--hc-color-border-strong);
824
+ }
825
+ [data-hc-ds] .hc-ui-sheet[data-presentation='auto'] .hc-ui-dialog__header { padding-top: var(--hc-space-6); }
826
+ [data-hc-ds] .hc-ui-sheet[data-presentation='auto'][data-expanded] {
827
+ height: calc(100dvh - env(safe-area-inset-top, 0px) - 8px);
828
+ max-height: calc(100dvh - env(safe-area-inset-top, 0px) - 8px);
829
+ border-radius: 20px 20px 0 0;
830
+ }
831
+ [data-hc-ds] .hc-ui-sheet[data-presentation='auto'][data-closing] { animation: hc-ui-sheet-down var(--hc-dur-medium) var(--hc-ease-emphasized-accel) forwards; }
832
+ }
833
+
834
+ /* Closing by drag: the backdrop fades with the sheet instead of waiting for the exit. */
835
+ [data-hc-ds] .hc-ui-sheet.hc-ui-dialog[data-dismissing]::backdrop { opacity: 0; transition: opacity 220ms ease; }
836
+ [data-hc-ds] .hc-ui-sheet.hc-ui-dialog[data-dismissing][data-closing]::backdrop { animation: none; }
837
+
838
+ @keyframes hc-ui-sheet-up {
839
+ from { transform: translateY(100%); }
840
+ to { transform: translateY(0); }
841
+ }
842
+ @keyframes hc-ui-sheet-down {
843
+ from { transform: translateY(0); }
844
+ to { transform: translateY(100%); }
845
+ }
846
+
847
+ /* SheetOptions — HCUI's sheet-options: rows with a check on a card-like group. */
848
+ [data-hc-ds] .hc-ui-sheet-options {
849
+ display: flex;
850
+ /* Never shrinks in the sheet's flex body: a long list scrolls with the body. HCUI's
851
+ shrinks and cuts the rows that do not fit, out of reach. */
852
+ flex: 0 0 auto;
853
+ flex-direction: column;
854
+ overflow: hidden;
855
+ background-color: var(--hc-color-bg-muted-2);
856
+ border-radius: var(--hc-radius-lg);
857
+ box-shadow: var(--hc-shadow-card);
858
+ }
859
+ [data-hc-ds] .hc-ui-sheet-options__row {
860
+ /* The ring goes inside, where the group's overflow does not cut it. */
861
+ --hc-focus-ring-offset: -2px;
862
+ appearance: none;
863
+ position: relative;
864
+ display: flex;
865
+ align-items: center;
866
+ gap: var(--hc-space-3);
867
+ box-sizing: border-box;
868
+ width: 100%;
869
+ min-height: 52px;
870
+ margin: 0;
871
+ padding: var(--hc-space-2) var(--hc-space-4);
872
+ color: var(--hc-color-text-primary);
873
+ font: inherit;
874
+ font-variation-settings: 'ROND' var(--hc-rond);
875
+ text-align: left;
876
+ background: transparent;
877
+ border: 0;
878
+ cursor: pointer;
879
+ -webkit-tap-highlight-color: transparent;
880
+ touch-action: manipulation;
881
+ }
882
+ [data-hc-ds] .hc-ui-sheet-options__row + .hc-ui-sheet-options__row { box-shadow: inset 0 1px 0 var(--hc-color-border); }
883
+ /* State layer: a veil on hover and press. */
884
+ [data-hc-ds] .hc-ui-sheet-options__row::after {
885
+ content: '';
886
+ position: absolute;
887
+ inset: 0;
888
+ border-radius: inherit;
889
+ background-color: currentColor;
890
+ opacity: 0;
891
+ pointer-events: none;
892
+ transition: opacity var(--hc-dur-short) var(--hc-ease-standard);
893
+ }
894
+ @media (hover: hover) {
895
+ [data-hc-ds] .hc-ui-sheet-options__row:hover:not(:disabled)::after { opacity: 0.04; }
896
+ }
897
+ [data-hc-ds] .hc-ui-sheet-options__row:active:not(:disabled)::after { opacity: 0.07; }
898
+ [data-hc-ds] .hc-ui-sheet-options__row:focus-visible {
899
+ outline: 2px solid var(--hc-focus-ring);
900
+ outline-offset: var(--hc-focus-ring-offset, 2px);
901
+ border-radius: var(--hc-radius-lg);
902
+ }
903
+ [data-hc-ds] .hc-ui-sheet-options__row:disabled { opacity: 0.4; cursor: default; }
904
+ [data-hc-ds] .hc-ui-sheet-options__icon { display: inline-flex; flex: 0 0 auto; color: var(--hc-color-text-secondary); }
905
+ [data-hc-ds] .hc-ui-sheet-options__icon svg { display: block; }
906
+ [data-hc-ds] .hc-ui-sheet-options__text { display: flex; flex: 1 1 auto; flex-direction: column; min-width: 0; }
907
+ [data-hc-ds] .hc-ui-sheet-options__label { font-size: var(--hc-font-size-md); }
908
+ [data-hc-ds] .hc-ui-sheet-options__row[data-selected] .hc-ui-sheet-options__label { font-weight: var(--hc-font-weight-semibold); }
909
+ [data-hc-ds] .hc-ui-sheet-options__hint { color: var(--hc-color-text-muted); font-size: var(--hc-font-size-sm); }
910
+ [data-hc-ds] .hc-ui-sheet-options__check {
911
+ display: inline-flex;
912
+ flex: 0 0 auto;
913
+ width: 20px;
914
+ color: var(--hc-color-brand);
915
+ animation: hc-ui-check-in 260ms var(--hc-ease-pop);
916
+ }
917
+
918
+ /* SheetOptions variant="list" — HCUI's mobile sort sheet (.sort-button__option): plain
919
+ 48px rows with a line under each, 560 weight and 720 once chosen, a 20px check in the text color. */
920
+ [data-hc-ds] .hc-ui-sheet-options[data-variant='list'] { background-color: transparent; border-radius: 0; box-shadow: none; }
921
+ [data-hc-ds] .hc-ui-sheet-options[data-variant='list'] .hc-ui-sheet-options__row,
922
+ [data-hc-ds] .hc-ui-sheet-options[data-variant='list'] .hc-ui-sheet-options__row + .hc-ui-sheet-options__row {
923
+ min-height: 48px;
924
+ padding: 0;
925
+ font-size: var(--hc-font-size-md);
926
+ font-weight: 560;
927
+ line-height: var(--hc-line-height-md);
928
+ box-shadow: inset 0 -1px 0 var(--hc-color-border);
929
+ }
930
+ [data-hc-ds] .hc-ui-sheet-options[data-variant='list'] .hc-ui-sheet-options__row[data-selected] .hc-ui-sheet-options__label { font-weight: 720; }
931
+ [data-hc-ds] .hc-ui-sheet-options[data-variant='list'] .hc-ui-sheet-options__row:focus-visible { border-radius: var(--hc-radius-xs); }
932
+ [data-hc-ds] .hc-ui-sheet-options[data-variant='list'] .hc-ui-sheet-options__check { color: var(--hc-color-text-primary); animation: none; }
933
+
934
+ /* SheetChips — wrapping Chips with radio semantics. */
935
+ [data-hc-ds] .hc-ui-sheet-chips { display: flex; flex-wrap: wrap; gap: var(--hc-space-2); }
936
+
937
+ @media (prefers-reduced-motion: reduce) {
938
+ [data-hc-ds] .hc-ui-sheet[data-presentation],
939
+ [data-hc-ds] .hc-ui-sheet[data-presentation][data-closing] { animation: none; transition: none; }
940
+ [data-hc-ds] .hc-ui-sheet.hc-ui-dialog[data-dismissing]::backdrop { transition: none; }
941
+ [data-hc-ds] .hc-ui-sheet-options__row::after { transition: none; }
942
+ [data-hc-ds] .hc-ui-sheet-options__check { animation: none; }
943
+ }
944
+
945
+ /* Menu and Popover — popups anchored to their trigger. The menu is HCUI's
946
+ .desktop-sort__menu and the popover HCUI's .team-rules__popover. No motion:
947
+ both appear at once, as in HCUI. */
948
+ :where([data-hc-ds] .hc-ui-popup-anchor) { position: relative; display: inline-flex; vertical-align: middle; }
949
+ :where([data-hc-ds] .hc-ui-portal) { display: contents; }
950
+
951
+ [data-hc-ds] .hc-ui-menu,
952
+ [data-hc-ds] .hc-ui-popover {
953
+ position: absolute;
954
+ box-sizing: border-box;
955
+ display: grid;
956
+ margin: 0;
957
+ font-family: var(--hc-font-body);
958
+ font-size: var(--hc-font-size-xs);
959
+ font-style: normal;
960
+ text-align: start;
961
+ text-transform: none;
962
+ font-variation-settings: 'ROND' var(--hc-rond);
963
+ border: 1px solid var(--hc-color-border);
964
+ outline: none;
965
+ }
966
+ [data-hc-ds] .hc-ui-menu[data-side='bottom'],
967
+ [data-hc-ds] .hc-ui-popover[data-side='bottom'] { top: calc(100% + var(--hc-space-1)); }
968
+ [data-hc-ds] .hc-ui-menu[data-side='top'],
969
+ [data-hc-ds] .hc-ui-popover[data-side='top'] { bottom: calc(100% + var(--hc-space-1)); }
970
+ [data-hc-ds] .hc-ui-menu[data-align='end'],
971
+ [data-hc-ds] .hc-ui-popover[data-align='end'] { right: 0; }
972
+ [data-hc-ds] .hc-ui-menu[data-align='start'],
973
+ [data-hc-ds] .hc-ui-popover[data-align='start'] { left: 0; }
974
+ /* In a portal the coordinates come inline; above page layers, below toasts. */
975
+ [data-hc-ds] .hc-ui-menu[data-portal],
976
+ [data-hc-ds] .hc-ui-popover[data-portal] { position: fixed; z-index: var(--hc-z-tooltip); }
977
+
978
+ [data-hc-ds] .hc-ui-menu {
979
+ z-index: 5;
980
+ width: 200px;
981
+ padding: var(--hc-space-2);
982
+ background-color: var(--hc-color-bg-surface);
983
+ border-radius: var(--hc-radius-md);
984
+ box-shadow: var(--hc-shadow-soft);
985
+ }
986
+ [data-hc-ds] .hc-ui-menu__group { display: grid; }
987
+ [data-hc-ds] .hc-ui-menu__item {
988
+ appearance: none;
989
+ display: flex;
990
+ align-items: center;
991
+ justify-content: space-between;
992
+ gap: var(--hc-space-2);
993
+ box-sizing: border-box;
994
+ min-width: 0;
995
+ min-height: 36px;
996
+ margin: 0;
997
+ padding: var(--hc-space-1) var(--hc-space-2);
998
+ color: var(--hc-color-text-secondary);
999
+ font-family: var(--hc-font-body);
1000
+ font-size: var(--hc-font-size-xs);
1001
+ font-weight: var(--hc-font-weight-medium);
1002
+ font-style: normal;
1003
+ font-stretch: normal;
1004
+ /* As HCUI's font shorthand: no inherited numeric or other variants (tabular figures). */
1005
+ font-variant: normal;
1006
+ font-variation-settings: 'ROND' var(--hc-rond);
1007
+ line-height: normal;
1008
+ letter-spacing: normal;
1009
+ text-align: left;
1010
+ text-transform: none;
1011
+ background: transparent;
1012
+ border: 0;
1013
+ border-radius: var(--hc-radius-xs);
1014
+ cursor: pointer;
1015
+ -webkit-tap-highlight-color: transparent;
1016
+ }
1017
+ [data-hc-ds] .hc-ui-menu__item:hover:not(:disabled) { color: var(--hc-color-text-primary); background-color: var(--hc-color-bg-muted-2); }
1018
+ [data-hc-ds] .hc-ui-menu__item[aria-checked='true'] { color: var(--hc-color-text-primary); font-weight: var(--hc-font-weight-semibold); }
1019
+ [data-hc-ds] .hc-ui-menu__item[data-danger],
1020
+ [data-hc-ds] .hc-ui-menu__item[data-danger]:hover:not(:disabled) { color: var(--hc-color-danger); }
1021
+ [data-hc-ds] .hc-ui-menu__item:disabled { color: var(--hc-color-text-muted); cursor: default; }
1022
+ [data-hc-ds] .hc-ui-menu__item:focus-visible {
1023
+ outline: 2px solid var(--hc-focus-ring);
1024
+ outline-offset: var(--hc-focus-ring-offset, 3px);
1025
+ }
1026
+ [data-hc-ds] .hc-ui-menu__text { min-width: 0; }
1027
+ [data-hc-ds] .hc-ui-menu__hint {
1028
+ display: block;
1029
+ margin-top: 1px;
1030
+ color: var(--hc-color-text-muted);
1031
+ font-size: var(--hc-font-size-2xs);
1032
+ font-weight: var(--hc-font-weight-medium);
1033
+ white-space: normal;
1034
+ }
1035
+ [data-hc-ds] .hc-ui-menu__icon,
1036
+ [data-hc-ds] .hc-ui-menu__check { display: inline-flex; flex: 0 0 auto; }
1037
+ [data-hc-ds] .hc-ui-menu__icon svg,
1038
+ [data-hc-ds] .hc-ui-menu__check svg { display: block; flex: 0 0 auto; }
1039
+ [data-hc-ds] .hc-ui-menu__separator { height: 1px; margin: var(--hc-space-1) 0; background-color: var(--hc-color-border); }
1040
+ [data-hc-ds] .hc-ui-menu__label {
1041
+ padding: var(--hc-space-1) var(--hc-space-2);
1042
+ color: var(--hc-color-text-muted);
1043
+ font-size: var(--hc-font-size-xs);
1044
+ font-weight: var(--hc-font-weight-regular);
1045
+ line-height: var(--hc-line-height-md);
1046
+ }
1047
+
1048
+ [data-hc-ds] .hc-ui-popover {
1049
+ z-index: 7;
1050
+ gap: var(--hc-space-2);
1051
+ width: 300px;
1052
+ max-height: min(460px, 70vh);
1053
+ padding: var(--hc-space-3);
1054
+ overflow-y: auto;
1055
+ color: var(--hc-color-text-primary);
1056
+ font-weight: var(--hc-font-weight-regular);
1057
+ line-height: var(--hc-line-height-md);
1058
+ background-color: var(--hc-color-bg-elevated);
1059
+ border-radius: var(--hc-radius-lg);
1060
+ box-shadow: var(--hc-shadow-float);
1061
+ }
1062
+
1063
+ /* Table — HCUI's desktop Meta table (`.meta-table`): 13px tabular figures, an 11px muted header
1064
+ with a line under it, 4px 8px cells and a line under each row, the muted-2 hover. */
1065
+ [data-hc-ds] .hc-ui-table {
1066
+ width: 100%;
1067
+ border-collapse: collapse;
1068
+ color: var(--hc-color-text-primary);
1069
+ font-size: var(--hc-font-size-sm);
1070
+ font-variant-numeric: tabular-nums;
1071
+ font-variation-settings: 'ROND' var(--hc-rond);
1072
+ }
1073
+ [data-hc-ds] .hc-ui-table :is(th, td) { box-sizing: border-box; }
1074
+ [data-hc-ds] .hc-ui-table thead th {
1075
+ padding: var(--hc-space-2);
1076
+ background: var(--hc-color-bg-surface);
1077
+ box-shadow: inset 0 -1px 0 var(--hc-color-border);
1078
+ color: var(--hc-color-text-muted);
1079
+ font-size: var(--hc-font-size-2xs);
1080
+ font-weight: var(--hc-font-weight-medium);
1081
+ white-space: nowrap;
1082
+ }
1083
+ [data-hc-ds] .hc-ui-table[data-sticky-header] thead th { position: sticky; top: var(--hc-table-sticky-top, 0px); z-index: 2; }
1084
+ [data-hc-ds] .hc-ui-table tbody tr { border-bottom: 1px solid var(--hc-color-border); }
1085
+ [data-hc-ds] .hc-ui-table tbody tr:hover { background: var(--hc-color-bg-muted-2); }
1086
+ [data-hc-ds] .hc-ui-table[data-clickable] tbody tr { cursor: pointer; }
1087
+ [data-hc-ds] .hc-ui-table tbody tr[data-selected] { background: var(--hc-color-bg-muted); }
1088
+ [data-hc-ds] .hc-ui-table tbody :is(th, td) { padding: var(--hc-space-1) var(--hc-space-2); font-weight: inherit; }
1089
+ [data-hc-ds] .hc-ui-table tbody td { white-space: nowrap; }
1090
+ [data-hc-ds] .hc-ui-table :is(th, td)[data-align='start'] { text-align: start; }
1091
+ [data-hc-ds] .hc-ui-table :is(th, td)[data-align='center'] { text-align: center; }
1092
+ [data-hc-ds] .hc-ui-table :is(th, td)[data-align='end'] { text-align: end; }
1093
+ [data-hc-ds] .hc-ui-table :is(th, td)[data-numeric] { font-variant-numeric: tabular-nums; }
1094
+ [data-hc-ds] .hc-ui-table :is(th, td)[data-tone='muted'] { color: var(--hc-color-text-muted); }
1095
+ [data-hc-ds] .hc-ui-table :is(th, td)[data-tone='secondary'] { color: var(--hc-color-text-secondary); }
1096
+ [data-hc-ds] :is(.hc-ui-table__sort, .hc-ui-table__row-button) {
1097
+ appearance: none;
1098
+ margin: 0;
1099
+ padding: 0;
1100
+ border: 0;
1101
+ background: transparent;
1102
+ color: inherit;
1103
+ font: inherit;
1104
+ cursor: pointer;
1105
+ -webkit-tap-highlight-color: transparent;
1106
+ }
1107
+ [data-hc-ds] .hc-ui-table__sort { display: inline-flex; align-items: center; gap: 2px; }
1108
+ [data-hc-ds] .hc-ui-table__sort:hover { color: var(--hc-color-text-primary); }
1109
+ [data-hc-ds] .hc-ui-table__sort > svg { flex-shrink: 0; }
1110
+ [data-hc-ds] .hc-ui-table__row-button {
1111
+ display: flex;
1112
+ align-items: center;
1113
+ gap: var(--hc-space-3);
1114
+ width: 100%;
1115
+ min-width: 0;
1116
+ text-align: start;
1117
+ }
1118
+ [data-hc-ds] :is(.hc-ui-table__sort, .hc-ui-table__row-button):focus-visible {
1119
+ outline: 2px solid var(--hc-focus-ring);
1120
+ outline-offset: var(--hc-focus-ring-offset, 3px);
1121
+ }
1122
+
1123
+ /* PageHeader — HCUI's desktop page heading (`.desktop-page-heading`): 22px semibold title on a
1124
+ 27.5px line pulled up 4px (the font's inner space), a 40px row, actions at the end. */
1125
+ [data-hc-ds] .hc-ui-page-header {
1126
+ display: flex;
1127
+ flex-wrap: wrap;
1128
+ align-items: flex-start;
1129
+ justify-content: space-between;
1130
+ gap: var(--hc-space-4);
1131
+ box-sizing: border-box;
1132
+ min-width: 0;
1133
+ min-height: 40px;
1134
+ }
1135
+ [data-hc-ds] .hc-ui-page-header__title {
1136
+ min-width: 0;
1137
+ min-height: 27.5px;
1138
+ margin: -4px 0 0;
1139
+ color: var(--hc-color-text-primary);
1140
+ font: var(--hc-font-weight-semibold) 22px/27.5px var(--hc-font-display);
1141
+ /* The `font` shorthand resets `font-variation-settings`: ROND comes back right after it. */
1142
+ font-variation-settings: 'ROND' var(--hc-rond);
1143
+ letter-spacing: -0.02em;
1144
+ }
1145
+ [data-hc-ds] .hc-ui-page-header__count {
1146
+ margin-left: var(--hc-space-1);
1147
+ color: var(--hc-color-text-muted);
1148
+ font: var(--hc-font-size-sm) var(--hc-font-body);
1149
+ font-variation-settings: 'ROND' var(--hc-rond);
1150
+ font-variant-numeric: tabular-nums;
1151
+ letter-spacing: 0;
1152
+ }
1153
+ [data-hc-ds] .hc-ui-page-header__actions { display: flex; align-items: center; gap: var(--hc-space-2); }
1154
+ [data-hc-ds] .hc-ui-page-header[data-visually-hidden] {
1155
+ position: absolute;
1156
+ width: 1px;
1157
+ height: 1px;
1158
+ min-height: 0;
1159
+ margin: 0;
1160
+ overflow: hidden;
1161
+ clip-path: inset(50%);
1162
+ white-space: nowrap;
1163
+ }
1164
+
1165
+ /* PanelHeader — `bar`: HCUI's desktop context panel header (`.desktop-context__header`);
1166
+ `section`: HCUI's section heading (`section-title`, `.home-dash__head`). */
1167
+ [data-hc-ds] .hc-ui-panel-header {
1168
+ display: flex;
1169
+ align-items: center;
1170
+ box-sizing: border-box;
1171
+ min-width: 0;
1172
+ color: var(--hc-color-text-primary);
1173
+ font-variation-settings: 'ROND' var(--hc-rond);
1174
+ }
1175
+ [data-hc-ds] .hc-ui-panel-header[data-variant='bar'] {
1176
+ gap: var(--hc-space-2);
1177
+ min-height: 52px;
1178
+ padding: var(--hc-space-2) var(--hc-space-3) var(--hc-space-2) var(--hc-space-4);
1179
+ border-bottom: 1px solid var(--hc-color-border);
1180
+ }
1181
+ /* Zero specificity: the gap and a minimum height are the caller's layout (HCUI's desktop home uses 8px and 44px). */
1182
+ :where([data-hc-ds] .hc-ui-panel-header[data-variant='section']) { gap: var(--hc-space-3); }
1183
+ [data-hc-ds] :is(.hc-ui-panel-header__text, .hc-ui-panel-header__trail) { flex: 1; min-width: 0; }
1184
+ [data-hc-ds] .hc-ui-panel-header__text { display: grid; }
1185
+ [data-hc-ds] .hc-ui-panel-header__trail {
1186
+ display: flex;
1187
+ align-items: center;
1188
+ gap: var(--hc-space-1);
1189
+ color: var(--hc-color-text-muted);
1190
+ font-size: var(--hc-font-size-sm);
1191
+ }
1192
+ [data-hc-ds] .hc-ui-panel-header__trail > svg { flex-shrink: 0; }
1193
+ [data-hc-ds] .hc-ui-panel-header :is(p, h1, h2, h3, h4, h5, h6) { margin: 0; }
1194
+ [data-hc-ds] .hc-ui-panel-header[data-variant='bar'] .hc-ui-panel-header__title {
1195
+ overflow: hidden;
1196
+ color: var(--hc-color-text-primary);
1197
+ font-family: inherit;
1198
+ font-size: inherit;
1199
+ font-stretch: inherit;
1200
+ font-weight: var(--hc-font-weight-semibold);
1201
+ line-height: inherit;
1202
+ letter-spacing: inherit;
1203
+ text-overflow: ellipsis;
1204
+ white-space: nowrap;
1205
+ }
1206
+ [data-hc-ds] .hc-ui-panel-header[data-variant='bar'] .hc-ui-panel-header__text { font-size: var(--hc-font-size-sm); }
1207
+ [data-hc-ds] .hc-ui-panel-header[data-variant='bar'] .hc-ui-panel-header__subtitle { overflow: hidden; color: var(--hc-color-text-muted); font-size: var(--hc-font-size-xs); text-overflow: ellipsis; white-space: nowrap; }
1208
+ [data-hc-ds] .hc-ui-panel-header[data-variant='section'] .hc-ui-panel-header__title {
1209
+ color: var(--hc-color-text-primary);
1210
+ font-family: var(--hc-font-display);
1211
+ font-size: var(--hc-font-size-lg);
1212
+ font-weight: 680;
1213
+ font-stretch: 90%;
1214
+ line-height: var(--hc-line-height-lg);
1215
+ letter-spacing: var(--hc-letter-spacing-snug);
1216
+ text-transform: none;
1217
+ }
1218
+ [data-hc-ds] .hc-ui-panel-header[data-variant='section'] .hc-ui-panel-header__subtitle { color: var(--hc-color-text-muted); font-size: var(--hc-font-size-sm); }
1219
+ /* subtitleInline: the subtitle follows the title on its baseline and is cut with an ellipsis (HCUI's desktop home). */
1220
+ [data-hc-ds] .hc-ui-panel-header[data-subtitle='inline'] .hc-ui-panel-header__text { display: flex; align-items: baseline; gap: var(--hc-space-2); overflow: hidden; }
1221
+ [data-hc-ds] .hc-ui-panel-header[data-subtitle='inline'] .hc-ui-panel-header__text > :is(h1, h2, h3, h4, h5, h6) { flex: 0 0 auto; }
1222
+ [data-hc-ds] .hc-ui-panel-header[data-subtitle='inline'] .hc-ui-panel-header__subtitle { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1223
+ [data-hc-ds] .hc-ui-panel-header__eyebrow {
1224
+ overflow: hidden;
1225
+ color: var(--hc-color-text-muted);
1226
+ font-family: var(--hc-font-display);
1227
+ font-size: var(--hc-font-size-2xs);
1228
+ font-weight: 620;
1229
+ font-stretch: 125%;
1230
+ line-height: var(--hc-line-height-xs);
1231
+ letter-spacing: 0.07em;
1232
+ text-overflow: ellipsis;
1233
+ text-transform: uppercase;
1234
+ white-space: nowrap;
1235
+ }
1236
+ [data-hc-ds] .hc-ui-panel-header__icon {
1237
+ display: inline-flex;
1238
+ flex: 0 0 auto;
1239
+ align-items: center;
1240
+ justify-content: center;
1241
+ width: 36px;
1242
+ height: 36px;
1243
+ border-radius: var(--hc-radius-full);
1244
+ background-color: var(--hc-color-bg-muted);
1245
+ color: var(--hc-color-text-primary);
1246
+ }
1247
+ [data-hc-ds] .hc-ui-panel-header__actions { display: flex; flex-shrink: 0; align-items: center; gap: var(--hc-space-2); }
1248
+ [data-hc-ds] :is(.hc-ui-panel-header__step, .hc-ui-panel-header__close) {
1249
+ appearance: none;
1250
+ margin: 0;
1251
+ border: 0;
1252
+ background: transparent;
1253
+ color: var(--hc-color-text-secondary);
1254
+ cursor: pointer;
1255
+ -webkit-tap-highlight-color: transparent;
1256
+ }
1257
+ [data-hc-ds] .hc-ui-panel-header__step {
1258
+ flex-shrink: 0;
1259
+ margin-left: calc(-1 * var(--hc-space-2));
1260
+ padding: var(--hc-space-1) var(--hc-space-2);
1261
+ border-radius: var(--hc-radius-xs);
1262
+ font: inherit;
1263
+ }
1264
+ [data-hc-ds] .hc-ui-panel-header__close {
1265
+ display: grid;
1266
+ flex-shrink: 0;
1267
+ place-items: center;
1268
+ width: 32px;
1269
+ height: 32px;
1270
+ padding: 0;
1271
+ border-radius: var(--hc-radius-full);
1272
+ }
1273
+ [data-hc-ds] :is(.hc-ui-panel-header__step, .hc-ui-panel-header__close):hover { background: var(--hc-color-bg-muted); color: var(--hc-color-text-primary); }
1274
+ [data-hc-ds] :is(.hc-ui-panel-header__step, .hc-ui-panel-header__close):focus-visible {
1275
+ outline: 2px solid var(--hc-focus-ring);
1276
+ outline-offset: var(--hc-focus-ring-offset, 3px);
1277
+ }
1278
+
1279
+ /* ListRow — HCUI's `list-row` mixin: a full-width button row with a translucent veil on hover
1280
+ and press and the focus ring drawn inside, rounded as the group it sits in. The base rule has
1281
+ zero specificity: each list sets its own height, padding, gap, corners and font by class. */
1282
+ :where([data-hc-ds] .hc-ui-list-row) {
1283
+ appearance: none;
1284
+ position: relative;
1285
+ display: flex;
1286
+ align-items: center;
1287
+ gap: var(--hc-space-3);
1288
+ box-sizing: border-box;
1289
+ width: 100%;
1290
+ min-height: 56px;
1291
+ margin: 0;
1292
+ padding: var(--hc-space-2) var(--hc-space-4);
1293
+ border: 0;
1294
+ background: transparent;
1295
+ color: var(--hc-color-text-primary);
1296
+ font: inherit;
1297
+ font-variation-settings: 'ROND' var(--hc-rond);
1298
+ text-align: left;
1299
+ cursor: pointer;
1300
+ -webkit-tap-highlight-color: transparent;
1301
+ touch-action: manipulation;
1302
+ }
1303
+ [data-hc-ds] .hc-ui-list-row::after {
1304
+ content: '';
1305
+ position: absolute;
1306
+ inset: 0;
1307
+ border-radius: inherit;
1308
+ background-color: currentColor;
1309
+ opacity: 0;
1310
+ pointer-events: none;
1311
+ transition: opacity var(--hc-dur-short) var(--hc-ease-standard);
1312
+ }
1313
+ @media (hover: hover) {
1314
+ [data-hc-ds] .hc-ui-list-row:hover:not(:disabled)::after { opacity: 0.04; }
1315
+ }
1316
+ [data-hc-ds] .hc-ui-list-row:active:not(:disabled)::after { opacity: 0.07; }
1317
+ [data-hc-ds] .hc-ui-list-row:focus-visible {
1318
+ border-radius: var(--hc-radius-lg);
1319
+ outline: 2px solid var(--hc-focus-ring);
1320
+ outline-offset: var(--hc-focus-ring-offset, -2px);
1321
+ }
1322
+ @media (prefers-reduced-motion: reduce) {
1323
+ [data-hc-ds] .hc-ui-list-row::after { transition: none; }
1324
+ }
1325
+
1326
+ /* CommandPalette — HCUI's desktop ⌘K (.command-palette): 640px wide, at most 560px tall,
1327
+ 12vh from the top, a 1px border, `shadow-soft`, no blur and no animation. The backdrop
1328
+ is `bg-overlay` unless `--hc-command-palette-backdrop` says otherwise (HCUI: 28% black). */
1329
+ [data-hc-ds] .hc-ui-command-palette {
1330
+ box-sizing: border-box;
1331
+ width: min(640px, calc(100vw - 32px));
1332
+ max-height: min(560px, calc(100dvh - 120px));
1333
+ margin: 12vh auto auto;
1334
+ padding: 0;
1335
+ overflow: hidden;
1336
+ color: var(--hc-color-text-primary);
1337
+ background: var(--hc-color-bg-surface);
1338
+ border: 1px solid var(--hc-color-border);
1339
+ border-radius: var(--hc-radius-lg);
1340
+ box-shadow: var(--hc-shadow-soft);
1341
+ font-family: var(--hc-font-body);
1342
+ font-size: var(--hc-font-size-md);
1343
+ font-variation-settings: 'ROND' var(--hc-rond);
1344
+ line-height: var(--hc-line-height-md);
1345
+ outline: none;
1346
+ }
1347
+ [data-hc-ds] .hc-ui-command-palette::backdrop { background: var(--hc-command-palette-backdrop, var(--hc-color-bg-overlay)); }
1348
+ [data-hc-ds] .hc-ui-command-palette__box { display: flex; flex-direction: column; max-height: inherit; }
1349
+ [data-hc-ds] .hc-ui-command-palette__field {
1350
+ display: flex;
1351
+ align-items: center;
1352
+ gap: var(--hc-space-3);
1353
+ padding: var(--hc-space-3) var(--hc-space-4);
1354
+ border-bottom: 1px solid var(--hc-color-border);
1355
+ color: var(--hc-color-text-secondary);
1356
+ }
1357
+ [data-hc-ds] .hc-ui-command-palette__field > svg { flex-shrink: 0; }
1358
+ /* The `font` shorthand, as HCUI's: weight 400 and normal line height; ROND comes back after it. The placeholder
1359
+ keeps the browser's color, as in HCUI. */
1360
+ [data-hc-ds] .hc-ui-command-palette__input {
1361
+ box-sizing: border-box;
1362
+ flex: 1;
1363
+ min-width: 0;
1364
+ height: 36px;
1365
+ margin: 0;
1366
+ padding: 1px 2px;
1367
+ border: 0;
1368
+ outline: 0;
1369
+ background: transparent;
1370
+ color: var(--hc-color-text-primary);
1371
+ font: var(--hc-font-size-md) var(--hc-font-body);
1372
+ font-variation-settings: 'ROND' var(--hc-rond);
1373
+ }
1374
+ [data-hc-ds] .hc-ui-command-palette__status { flex-shrink: 0; color: var(--hc-color-text-muted); font-size: var(--hc-font-size-xs); }
1375
+ [data-hc-ds] .hc-ui-command-palette__list { flex: 1; min-height: 0; overscroll-behavior: contain; }
1376
+ /* Zero specificity: `listClassName` can change the overflow and padding (HCUI's scroll-panel). */
1377
+ :where([data-hc-ds] .hc-ui-command-palette__list) { overflow-y: auto; padding: var(--hc-space-2); }
1378
+ [data-hc-ds] .hc-ui-command-palette__heading {
1379
+ margin: var(--hc-space-3) var(--hc-space-2) var(--hc-space-1);
1380
+ color: var(--hc-color-text-muted);
1381
+ font-size: var(--hc-font-size-2xs);
1382
+ font-weight: var(--hc-font-weight-semibold);
1383
+ text-transform: uppercase;
1384
+ letter-spacing: 0.04em;
1385
+ }
1386
+ [data-hc-ds] .hc-ui-command-palette__empty { margin: var(--hc-space-4); color: var(--hc-color-text-muted); font-size: var(--hc-font-size-sm); }
1387
+ [data-hc-ds] .hc-ui-command-palette__item {
1388
+ appearance: none;
1389
+ box-sizing: border-box;
1390
+ display: flex;
1391
+ align-items: center;
1392
+ gap: var(--hc-space-3);
1393
+ width: 100%;
1394
+ min-height: 44px;
1395
+ margin: 0;
1396
+ padding: var(--hc-space-1) var(--hc-space-2);
1397
+ border: 0;
1398
+ border-radius: var(--hc-radius-sm);
1399
+ background: transparent;
1400
+ color: inherit;
1401
+ font: inherit;
1402
+ text-align: left;
1403
+ cursor: pointer;
1404
+ -webkit-tap-highlight-color: transparent;
1405
+ }
1406
+ [data-hc-ds] .hc-ui-command-palette__item[aria-selected='true'] { background: var(--hc-color-bg-muted); }
1407
+ [data-hc-ds] .hc-ui-command-palette__item:focus-visible {
1408
+ outline: 2px solid var(--hc-focus-ring);
1409
+ outline-offset: var(--hc-focus-ring-offset, -2px);
1410
+ }
1411
+ [data-hc-ds] .hc-ui-command-palette__icon {
1412
+ display: grid;
1413
+ flex-shrink: 0;
1414
+ place-items: center;
1415
+ width: 32px;
1416
+ height: 32px;
1417
+ color: var(--hc-color-text-secondary);
1418
+ }
1419
+ [data-hc-ds] .hc-ui-command-palette__text { display: grid; flex: 1; min-width: 0; }
1420
+ [data-hc-ds] :is(.hc-ui-command-palette__label, .hc-ui-command-palette__detail) { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1421
+ [data-hc-ds] .hc-ui-command-palette__label { font-size: var(--hc-font-size-sm); font-weight: var(--hc-font-weight-medium); }
1422
+ [data-hc-ds] .hc-ui-command-palette__detail { color: var(--hc-color-text-muted); font-size: var(--hc-font-size-2xs); }
1423
+ /* The `font` shorthand, as HCUI's: normal weight and line height; ROND comes back after it. */
1424
+ [data-hc-ds] .hc-ui-command-palette__kbd {
1425
+ flex-shrink: 0;
1426
+ padding: 1px var(--hc-space-1);
1427
+ border: 1px solid var(--hc-color-border);
1428
+ border-radius: var(--hc-radius-xs);
1429
+ color: var(--hc-color-text-muted);
1430
+ font: var(--hc-font-size-2xs) var(--hc-font-mono);
1431
+ font-variation-settings: 'ROND' var(--hc-rond);
1432
+ white-space: nowrap;
1433
+ }
1434
+ [data-hc-ds] .hc-ui-command-palette__footer {
1435
+ display: flex;
1436
+ flex-wrap: wrap;
1437
+ gap: var(--hc-space-4);
1438
+ padding: var(--hc-space-2) var(--hc-space-4);
1439
+ border-top: 1px solid var(--hc-color-border);
1440
+ color: var(--hc-color-text-muted);
1441
+ font-size: var(--hc-font-size-2xs);
1442
+ }
1443
+ [data-hc-ds] .hc-ui-command-palette__footer .hc-ui-command-palette__kbd { margin-right: 2px; }