@threadlabs/looma 0.29.9 → 0.29.10

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.
@@ -10971,6 +10971,2584 @@ html[data-ui-input-modality="touch"]
10971
10971
  :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
10972
10972
  }
10973
10973
  @supports (-moz-appearance: none) {
10974
+ [data-component~="ui-button"] { --html-next-scope-owner: "ui-button" !important; }
10975
+ }
10976
+ @scope ([data-component~="ui-button"]) to ([data-component], [data-slotted]) {
10977
+ /* This component's hooks style the element they are set on, and never a nested one. */
10978
+ @property --ui-button-active-surface {
10979
+ syntax: "*";
10980
+ inherits: false;
10981
+ }
10982
+ @property --ui-button-border {
10983
+ syntax: "*";
10984
+ inherits: false;
10985
+ }
10986
+ @property --ui-button-disabled-filter {
10987
+ syntax: "*";
10988
+ inherits: false;
10989
+ }
10990
+ @property --ui-button-disabled-opacity {
10991
+ syntax: "*";
10992
+ inherits: false;
10993
+ }
10994
+ @property --ui-button-ghost-active-surface {
10995
+ syntax: "*";
10996
+ inherits: false;
10997
+ }
10998
+ @property --ui-button-ghost-hover-surface {
10999
+ syntax: "*";
11000
+ inherits: false;
11001
+ }
11002
+ @property --ui-button-ghost-text {
11003
+ syntax: "*";
11004
+ inherits: false;
11005
+ }
11006
+ @property --ui-button-hover-border {
11007
+ syntax: "*";
11008
+ inherits: false;
11009
+ }
11010
+ @property --ui-button-hover-surface {
11011
+ syntax: "*";
11012
+ inherits: false;
11013
+ }
11014
+ @property --ui-button-link-hover-text {
11015
+ syntax: "*";
11016
+ inherits: false;
11017
+ }
11018
+ @property --ui-button-link-text {
11019
+ syntax: "*";
11020
+ inherits: false;
11021
+ }
11022
+ @property --ui-button-min-block-size {
11023
+ syntax: "*";
11024
+ inherits: false;
11025
+ }
11026
+ @property --ui-button-radius {
11027
+ syntax: "*";
11028
+ inherits: false;
11029
+ }
11030
+ @property --ui-button-shadow {
11031
+ syntax: "*";
11032
+ inherits: false;
11033
+ }
11034
+ @property --ui-button-solid-shadow {
11035
+ syntax: "*";
11036
+ inherits: false;
11037
+ }
11038
+ @property --ui-button-surface {
11039
+ syntax: "*";
11040
+ inherits: false;
11041
+ }
11042
+ @property --ui-button-text {
11043
+ syntax: "*";
11044
+ inherits: false;
11045
+ }
11046
+ @property --ui-button-white-space {
11047
+ syntax: "*";
11048
+ inherits: false;
11049
+ }
11050
+
11051
+ :scope:where([data-component~="ui-button"]) {
11052
+ /* Optional inherited action-group values keep text and icon actions under the same light.
11053
+ One fine top/start highlight follows the bottom/end lowlight at a joined action seam.
11054
+ A single ambient lift avoids stacking a face gradient or another inset bevel. */
11055
+ --_ui-action-start: 1px;
11056
+ --_ui-action-edge: var(
11057
+ --ui-action-edge,
11058
+ inset var(--_ui-action-start) 1px 0 light-dark(rgb(255 255 255 / 0.08), rgb(255 255 255 / 0.06)),
11059
+ inset calc(-1 * var(--_ui-action-start)) -1px 0 light-dark(rgb(0 0 0 / 0.08), rgb(0 0 0 / 0.08))
11060
+ );
11061
+ --_ui-action-shadow: var(--_ui-action-edge), 0 1px 2px light-dark(rgb(0 0 0 / 0.10), rgb(0 0 0 / 0.20));
11062
+ --_hue: var(--ui-accent);
11063
+ --_hue-hover: var(--ui-accent-hover);
11064
+ --_hue-active: var(--ui-accent-active);
11065
+ --_hue-text: var(--ui-accent-active);
11066
+ --_on-hue: var(--ui-on-accent);
11067
+
11068
+ --_tone: var(--_hue);
11069
+ --_tone-hover: var(--_hue-hover);
11070
+ --_tone-active: var(--_hue-active);
11071
+ --_tone-text: var(--_hue-text);
11072
+ --_on-tone: var(--_on-hue);
11073
+
11074
+ display: inline-flex;
11075
+ align-items: center;
11076
+ justify-content: center;
11077
+ column-gap: var(--ui-space-2);
11078
+ vertical-align: middle;
11079
+ color: var(--_tone-text);
11080
+ }
11081
+
11082
+ :scope:where([data-component~="ui-button"]):dir(rtl) {
11083
+ --_ui-action-start: -1px;
11084
+ }
11085
+
11086
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="align=start"] {
11087
+ justify-content: flex-start;
11088
+ text-align: start;
11089
+ }
11090
+
11091
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="stretch"] {
11092
+ display: flex;
11093
+ inline-size: 100%;
11094
+ }
11095
+
11096
+ :scope:where([data-component~="ui-button"]) {
11097
+ appearance: none;
11098
+ min-block-size: var(--ui-button-min-block-size, var(--ui-control-size-md));
11099
+ border-style: solid;
11100
+ border-width: var(--ui-border-width);
11101
+ border-color: var(--ui-button-border, var(--_tone));
11102
+ border-radius: var(--ui-button-radius, var(--ui-action-radius, var(--ui-radius-md)));
11103
+ background-color: var(--ui-button-surface, oklch(from var(--_tone) l c h / 5%));
11104
+ color: var(--ui-button-text, var(--_tone-text));
11105
+ font: inherit;
11106
+ font-weight: var(--ui-font-medium);
11107
+ text-decoration: none;
11108
+ /* Unset, a button wraps as its container does. */
11109
+ white-space: var(--ui-button-white-space, inherit);
11110
+ line-height: var(--ui-line-height-tight);
11111
+ padding: var(--ui-space-2) var(--ui-space-3);
11112
+ background-image: none;
11113
+ box-shadow: var(--ui-button-shadow, var(--ui-action-shadow, var(--_ui-action-shadow)));
11114
+ cursor: pointer;
11115
+ transition:
11116
+ background-color var(--ui-motion-fast) var(--ui-motion-ease),
11117
+ border-color var(--ui-motion-fast) var(--ui-motion-ease),
11118
+ color var(--ui-motion-fast) var(--ui-motion-ease),
11119
+ box-shadow var(--ui-motion-base) var(--ui-motion-ease);
11120
+ margin: 0;
11121
+ }
11122
+
11123
+ /* An anchor keeps the boxed button look even when an app styles ordinary links. */
11124
+ :scope:where([data-component~="ui-button"]):is(a) {
11125
+ text-decoration: none;
11126
+ }
11127
+
11128
+ .spinner-wrap {
11129
+ display: inline-flex;
11130
+ flex: none;
11131
+ vertical-align: middle;
11132
+ }
11133
+
11134
+ /* A count is an adornment, not another line of label text. Keep the standard control height
11135
+ with enough inset for a 24px mark; large content can still grow the button naturally. */
11136
+ :scope:where([data-component~="ui-button"]):not([variant="link"]):has(.badge:not(:empty)) {
11137
+ padding-block: var(--ui-space-0-5);
11138
+ }
11139
+
11140
+ .badge {
11141
+ display: inline-flex;
11142
+ align-items: center;
11143
+ flex: none;
11144
+ }
11145
+
11146
+ .badge:empty {
11147
+ display: none;
11148
+ }
11149
+
11150
+ @supports (text-box-trim: trim-both) {
11151
+ :scope:where([data-component~="ui-button"]) {
11152
+ text-box-trim: trim-both;
11153
+ text-box-edge: cap alphabetic;
11154
+ }
11155
+ }
11156
+
11157
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="size=xs"] {
11158
+ min-block-size: 1.5rem;
11159
+ padding: calc(var(--ui-space-0-5) * 1.5) calc(var(--ui-space-1) * 1.25);
11160
+ font-size: var(--ui-font-size-xs);
11161
+ }
11162
+
11163
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="shape=pill"] {
11164
+ border-radius: var(--ui-button-radius, var(--ui-radius-round));
11165
+ }
11166
+
11167
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="size=sm"] {
11168
+ min-block-size: var(--ui-control-size-sm);
11169
+ padding: var(--ui-space-1) var(--ui-space-2);
11170
+ font-size: var(--ui-font-size-sm);
11171
+ }
11172
+
11173
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="size=lg"] {
11174
+ min-block-size: var(--ui-control-size-lg);
11175
+ padding: var(--ui-space-3) var(--ui-space-4);
11176
+ font-size: var(--ui-font-size-md);
11177
+ }
11178
+
11179
+ /* Card actions inherit Button's palette and behavior; only their shared layout changes.
11180
+ The icon may contain any decorative composition. Empty icons remove their column. */
11181
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=card"] {
11182
+ display: grid;
11183
+ grid-template-columns: auto minmax(0, 1fr) auto;
11184
+ align-content: center;
11185
+ align-items: start;
11186
+ gap: var(--ui-space-3);
11187
+ inline-size: 100%;
11188
+ min-block-size: max(var(--ui-control-min-block-size), var(--ui-control-size-md));
11189
+ text-align: start;
11190
+ white-space: normal;
11191
+ box-shadow: none;
11192
+ background-image: none;
11193
+ }
11194
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=card"][data-ui-button-state~="size=lg"] {
11195
+ min-block-size: max(var(--ui-control-min-block-size), var(--ui-control-size-lg));
11196
+ }
11197
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=card"]:has(.card-icon:empty) {
11198
+ grid-template-columns: minmax(0, 1fr) auto;
11199
+ }
11200
+ .card-icon {
11201
+ display: flex;
11202
+ align-items: flex-start;
11203
+ }
11204
+ .card-icon:empty {
11205
+ display: none;
11206
+ }
11207
+ .card-content {
11208
+ min-inline-size: 0;
11209
+ }
11210
+ .card-action {
11211
+ display: flex;
11212
+ align-items: center;
11213
+ align-self: center;
11214
+ }
11215
+
11216
+ /* A link is never :enabled, so interactive states test "not unavailable" instead: for a button that
11217
+ is exactly :enabled, at the same specificity, and it also matches a link that can be followed. */
11218
+ :scope:where([data-component~="ui-button"]):hover:not(:disabled, [aria-disabled="true"]) {
11219
+ border-color: var(--ui-button-hover-border, var(--_tone-hover));
11220
+ background-color: var(--ui-button-hover-surface, oklch(from var(--_tone) l c h / 12%));
11221
+ }
11222
+
11223
+ /* A neutral card encloses content quietly; ordinary outlines keep their action-tone edge. */
11224
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=card"][data-ui-button-state~="tone=neutral"] {
11225
+ border-color: var(--ui-button-border, var(--ui-border));
11226
+ }
11227
+
11228
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=card"][data-ui-button-state~="tone=neutral"]:hover:not(:disabled, [aria-disabled="true"]) {
11229
+ border-color: var(--ui-button-hover-border, var(--ui-border-strong));
11230
+ }
11231
+
11232
+ /* Pressed reads as pressed in: the highlight goes, and the shadow moves inside. */
11233
+ :scope:where([data-component~="ui-button"]):active:not(:disabled, [aria-disabled="true"]) {
11234
+ background-color: var(--ui-button-active-surface, oklch(from var(--_tone) l c h / 18%));
11235
+ background-image: none;
11236
+ box-shadow: var(--ui-pressed);
11237
+ }
11238
+
11239
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=solid"], :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=danger"] {
11240
+ border-color: var(--_tone);
11241
+ background-color: var(--_tone);
11242
+ color: var(--_on-tone);
11243
+ box-shadow: var(--ui-button-solid-shadow, var(--ui-action-shadow, var(--_ui-action-shadow)));
11244
+ }
11245
+
11246
+ :is(:scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=solid"], :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=danger"]):hover:not(:disabled, [aria-disabled="true"]) {
11247
+ background-color: var(--_tone-hover);
11248
+ border-color: var(--_tone-hover);
11249
+ }
11250
+
11251
+ :is(:scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=solid"], :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=danger"]):active:not(:disabled, [aria-disabled="true"]) {
11252
+ background-color: var(--_tone-active);
11253
+ border-color: var(--_tone-active);
11254
+ background-image: none;
11255
+ box-shadow: var(--ui-pressed);
11256
+ }
11257
+
11258
+ /* Tone is the colour, variant is the volume. Every pairing works: a danger outline is a
11259
+ destructive secondary action, not a special case. */
11260
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="tone=neutral"] {
11261
+ --_hue: var(--ui-text);
11262
+ --_hue-hover: var(--ui-text);
11263
+ --_hue-active: var(--ui-text);
11264
+ --_hue-text: var(--ui-text);
11265
+ --_on-hue: var(--ui-surface);
11266
+ }
11267
+
11268
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="tone=danger"], :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=danger"] {
11269
+ --_hue: var(--ui-danger);
11270
+ --_hue-hover: var(--ui-danger-hover);
11271
+ --_hue-active: var(--ui-danger-hover);
11272
+ --_hue-text: var(--ui-danger-hover);
11273
+ --_on-hue: var(--ui-on-danger);
11274
+ }
11275
+
11276
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="tone=success"] {
11277
+ --_hue: var(--ui-success);
11278
+ --_hue-hover: color-mix(in srgb, var(--ui-success) 85%, #000);
11279
+ --_hue-active: color-mix(in srgb, var(--ui-success) 75%, #000);
11280
+ --_hue-text: color-mix(in srgb, var(--ui-success) 85%, #000);
11281
+ --_on-hue: var(--ui-surface);
11282
+ }
11283
+
11284
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="tone=warning"] {
11285
+ --_hue: var(--ui-warning);
11286
+ --_hue-hover: color-mix(in srgb, var(--ui-warning) 85%, #000);
11287
+ --_hue-active: color-mix(in srgb, var(--ui-warning) 75%, #000);
11288
+ --_hue-text: color-mix(in srgb, var(--ui-warning) 85%, #000);
11289
+ --_on-hue: var(--ui-surface);
11290
+ }
11291
+
11292
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="tone=info"] {
11293
+ --_hue: var(--ui-info);
11294
+ --_hue-hover: color-mix(in srgb, var(--ui-info) 85%, #000);
11295
+ --_hue-active: color-mix(in srgb, var(--ui-info) 75%, #000);
11296
+ --_hue-text: color-mix(in srgb, var(--ui-info) 85%, #000);
11297
+ --_on-hue: var(--ui-surface);
11298
+ }
11299
+
11300
+ /* A value picker is a field, with Select's quiet edge and resting lift. */
11301
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=field"] {
11302
+ --_ui-field-shadow: var(--ui-shadow-sm);
11303
+ border-color: var(--ui-button-border, var(--ui-control-border, var(--ui-border-strong)));
11304
+ border-radius: var(--ui-button-radius, var(--ui-field-radius, var(--ui-radius-md)));
11305
+ background-color: var(--ui-button-surface, var(--ui-control-surface, var(--ui-surface-elevated)));
11306
+ color: var(--ui-button-text, var(--ui-text-primary));
11307
+ font-weight: var(--ui-font-normal);
11308
+ box-shadow: var(--ui-button-shadow, var(--_ui-field-shadow));
11309
+ }
11310
+
11311
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=field"]:hover:not(:disabled, [aria-disabled="true"]) {
11312
+ border-color: var(--ui-button-hover-border, var(--ui-control-border-hover, var(--ui-text-secondary)));
11313
+ background-color: var(--ui-button-hover-surface, var(--ui-control-surface, var(--ui-surface-elevated)));
11314
+ }
11315
+
11316
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=field"]:is(:active, [aria-expanded="true"]):not(:disabled, [aria-disabled="true"]) {
11317
+ --_ui-field-shadow: var(--ui-pressed);
11318
+ }
11319
+
11320
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=field"]:focus-visible {
11321
+ border-color: var(--ui-control-focus, var(--ui-accent-solid));
11322
+ box-shadow:
11323
+ var(--ui-button-shadow, var(--_ui-field-shadow)),
11324
+ var(--ui-control-focus-halo-shadow);
11325
+ }
11326
+
11327
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=ghost"] {
11328
+ border-color: transparent;
11329
+ background: transparent;
11330
+ box-shadow: none;
11331
+ color: var(--ui-button-ghost-text, var(--_tone-text));
11332
+ }
11333
+
11334
+ /* Tints derive from the text colour, not a surface token, so hover and press show on any background. */
11335
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=ghost"]:hover:not(:disabled, [aria-disabled="true"]) {
11336
+ background-color: var(--ui-button-ghost-hover-surface, oklch(from var(--_tone) l c h / 10%));
11337
+ border-color: transparent;
11338
+ }
11339
+
11340
+ /* Pressed, or holding its menu open, a ghost button sinks slightly: a light surface with a faint
11341
+ edge and a soft inner shadow. Lighter than hover, so an open menu's trigger never reads as heavy. */
11342
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=ghost"]:is(:active, [aria-expanded="true"]):not(:disabled, [aria-disabled="true"]) {
11343
+ background-color: var(--ui-button-ghost-active-surface, color-mix(in oklch, var(--ui-surface), var(--_tone) 3%));
11344
+ border-color: transparent;
11345
+ box-shadow: inset 0 0 0 1px oklch(from var(--_tone) l c h / 10%), inset 0 1px 2px oklch(from var(--_tone) l c h / 8%);
11346
+ }
11347
+
11348
+ /* A soft halo that transitions in with the other box-shadow changes, layered on the raised shadow. */
11349
+ :scope:where([data-component~="ui-button"]):focus-visible {
11350
+ outline: none;
11351
+ box-shadow:
11352
+ var(--ui-button-shadow, var(--ui-action-shadow, var(--_ui-action-shadow))),
11353
+ var(--ui-focus-halo);
11354
+ }
11355
+
11356
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=solid"]:focus-visible {
11357
+ box-shadow:
11358
+ var(--ui-button-solid-shadow, var(--ui-action-shadow, var(--_ui-action-shadow))),
11359
+ var(--ui-focus-halo);
11360
+ }
11361
+
11362
+ :is(:scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=ghost"], :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=link"], :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=card"]):focus-visible {
11363
+ box-shadow: var(--ui-focus-halo);
11364
+ }
11365
+
11366
+ /* A loading action stays visually active; only an explicitly disabled action takes the
11367
+ neutral disabled palette. Its flat surface and muted ink make the state unambiguous. */
11368
+ :scope:where([data-component~="ui-button"]):is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
11369
+ border-color: var(--ui-disabled-border);
11370
+ background-color: var(--ui-disabled-surface);
11371
+ color: var(--ui-disabled-text);
11372
+ filter: var(--ui-button-disabled-filter, var(--ui-disabled-filter));
11373
+ opacity: var(--ui-button-disabled-opacity, 1);
11374
+ cursor: not-allowed;
11375
+ background-image: none;
11376
+ box-shadow: none;
11377
+ }
11378
+
11379
+ :is(:scope:where([data-component~="ui-button"])[data-ui-button-state~="loading"], :scope:where([data-component~="ui-button"])[data-ui-button-state~="pending"]):focus-visible {
11380
+ box-shadow: var(--ui-focus-halo);
11381
+ }
11382
+
11383
+ /* Ghost keeps no border, but gains the same neutral surface as other disabled buttons. */
11384
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=ghost"]:is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
11385
+ background-color: var(--ui-disabled-surface);
11386
+ border-color: transparent;
11387
+ }
11388
+
11389
+ /* The size states outrank :host, so sm is named too, or a small button would stay small. */
11390
+ @media (pointer: coarse) {
11391
+ :scope:where([data-component~="ui-button"]), :scope:where([data-component~="ui-button"])[data-ui-button-state~="size=sm"] {
11392
+ min-block-size: var(--ui-control-min-block-size);
11393
+ }
11394
+ }
11395
+
11396
+ /* Under touch, a link-style button's press lands within the control minimum: an invisible hit
11397
+ area, centred on it, like IconButton's. A boxed button grows to the minimum itself (below);
11398
+ a link-style one keeps its text size, so a standalone one ("See all" under a list) needs the
11399
+ area. xs sits inside a line of text the same way, so it keeps its size and gains the area too.
11400
+ Only these need it: a hit area on every button would reach over its neighbours. */
11401
+ html[data-ui-input-modality="touch"] :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=link"],
11402
+ html[data-ui-input-modality="touch"] :scope:where([data-component~="ui-button"])[data-ui-button-state~="size=xs"] {
11403
+ position: relative;
11404
+ }
11405
+
11406
+ html[data-ui-input-modality="touch"] :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=link"]::after,
11407
+ html[data-ui-input-modality="touch"] :scope:where([data-component~="ui-button"])[data-ui-button-state~="size=xs"]::after {
11408
+ position: absolute;
11409
+ inset: 50% auto auto 50%;
11410
+ inline-size: max(100%, var(--ui-control-min-block-size));
11411
+ block-size: max(100%, var(--ui-control-min-block-size));
11412
+ transform: translate(-50%, -50%);
11413
+ content: "";
11414
+ }
11415
+
11416
+ /* Link: an inline text action. No box, padding, or minimum height (inline targets are exempt under
11417
+ WCAG 2.5.8); the inherited font; an underline that strengthens on hover; a visible focus ring. */
11418
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=link"] {
11419
+ display: inline;
11420
+ min-block-size: 0;
11421
+ padding: 0;
11422
+ border: 0;
11423
+ border-radius: var(--ui-radius-sm);
11424
+ background: none;
11425
+ box-shadow: none;
11426
+ font: inherit;
11427
+ color: var(--ui-button-link-text, var(--ui-text-secondary));
11428
+ text-decoration-line: underline;
11429
+ text-decoration-thickness: 1px;
11430
+ text-decoration-color: color-mix(in srgb, currentColor 40%, transparent);
11431
+ text-underline-offset: 0.2em;
11432
+ transition: color var(--ui-motion-fast) var(--ui-motion-ease), text-decoration-color var(--ui-motion-fast) var(--ui-motion-ease);
11433
+ }
11434
+
11435
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=link"]:hover:not(:disabled, [aria-disabled="true"]) {
11436
+ color: var(--ui-button-link-hover-text, var(--ui-text-primary));
11437
+ text-decoration-color: currentColor;
11438
+ background: none;
11439
+ transform: none;
11440
+ }
11441
+
11442
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=link"]:active:not(:disabled, [aria-disabled="true"]) {
11443
+ background: none;
11444
+ transform: none;
11445
+ }
11446
+
11447
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=link"]:is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
11448
+ background: none;
11449
+ border-color: transparent;
11450
+ }
11451
+
11452
+ :scope:where([data-component~="ui-button"])[data-ui-button-state~="variant=link"]:focus-visible {
11453
+ box-shadow: none;
11454
+ /* Fallback keeps the ring if the token is missing: an unresolved var() would void the outline. */
11455
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring);
11456
+ outline-offset: var(--ui-focus-width);
11457
+ }
11458
+
11459
+ /* A component that sets its display still honours the hidden attribute on its root. */
11460
+ :scope:where([data-component~="ui-button"])[hidden] {
11461
+ display: none;
11462
+ }
11463
+ }
11464
+ @scope ([data-component~="ui-button"]) to ([data-component]) {
11465
+ /* This component's hooks style the element they are set on, and never a nested one. */
11466
+
11467
+ /* An anchor keeps the boxed button look even when an app styles ordinary links. */
11468
+
11469
+ /* A count is an adornment, not another line of label text. Keep the standard control height
11470
+ with enough inset for a 24px mark; large content can still grow the button naturally. */
11471
+
11472
+ @supports (text-box-trim: trim-both) {
11473
+ }
11474
+
11475
+ /* Card actions inherit Button's palette and behavior; only their shared layout changes.
11476
+ The icon may contain any decorative composition. Empty icons remove their column. */
11477
+
11478
+ /* A link is never :enabled, so interactive states test "not unavailable" instead: for a button that
11479
+ is exactly :enabled, at the same specificity, and it also matches a link that can be followed. */
11480
+
11481
+ /* A neutral card encloses content quietly; ordinary outlines keep their action-tone edge. */
11482
+
11483
+ /* Pressed reads as pressed in: the highlight goes, and the shadow moves inside. */
11484
+
11485
+ /* Tone is the colour, variant is the volume. Every pairing works: a danger outline is a
11486
+ destructive secondary action, not a special case. */
11487
+
11488
+ /* A value picker is a field, with Select's quiet edge and resting lift. */
11489
+
11490
+ /* Tints derive from the text colour, not a surface token, so hover and press show on any background. */
11491
+
11492
+ /* Pressed, or holding its menu open, a ghost button sinks slightly: a light surface with a faint
11493
+ edge and a soft inner shadow. Lighter than hover, so an open menu's trigger never reads as heavy. */
11494
+
11495
+ /* A soft halo that transitions in with the other box-shadow changes, layered on the raised shadow. */
11496
+
11497
+ /* A loading action stays visually active; only an explicitly disabled action takes the
11498
+ neutral disabled palette. Its flat surface and muted ink make the state unambiguous. */
11499
+
11500
+ /* Ghost keeps no border, but gains the same neutral surface as other disabled buttons. */
11501
+
11502
+ /* The size states outrank :host, so sm is named too, or a small button would stay small. */
11503
+ @media (pointer: coarse) {
11504
+ }
11505
+
11506
+ /* Under touch, a link-style button's press lands within the control minimum: an invisible hit
11507
+ area, centred on it, like IconButton's. A boxed button grows to the minimum itself (below);
11508
+ a link-style one keeps its text size, so a standalone one ("See all" under a list) needs the
11509
+ area. xs sits inside a line of text the same way, so it keeps its size and gains the area too.
11510
+ Only these need it: a hit area on every button would reach over its neighbours. */
11511
+
11512
+ /* Link: an inline text action. No box, padding, or minimum height (inline targets are exempt under
11513
+ WCAG 2.5.8); the inherited font; an underline that strengthens on hover; a visible focus ring. */
11514
+
11515
+ /* A component that sets its display still honours the hidden attribute on its root. */
11516
+ }
11517
+ /* Generated by HTML Next 1.0.0-alpha.55. Do not edit. */
11518
+ @supports (-moz-appearance: none) {
11519
+ :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
11520
+ :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
11521
+ }
11522
+ @supports (-moz-appearance: none) {
11523
+ [data-component~="ui-checkbox"] { --html-next-scope-owner: "ui-checkbox" !important; }
11524
+ }
11525
+ @scope ([data-component~="ui-checkbox"]) to ([data-component], [data-slotted]) {
11526
+ /* This component's hooks style the element they are set on, and never a nested one. */
11527
+ @property --ui-checkbox-gap {
11528
+ syntax: "*";
11529
+ inherits: false;
11530
+ }
11531
+ @property --ui-checkbox-invalid-border {
11532
+ syntax: "*";
11533
+ inherits: false;
11534
+ }
11535
+ @property --ui-checkbox-size {
11536
+ syntax: "*";
11537
+ inherits: false;
11538
+ }
11539
+
11540
+ :scope:where([data-component~="ui-checkbox"]) {
11541
+ /* Hooks do not inherit, so the parts below read them from the root. */
11542
+ --_ui-checkbox-size: var(--ui-checkbox-size);
11543
+ --_ui-checkbox-invalid-border: var(--ui-checkbox-invalid-border, var(--ui-field-danger, var(--ui-danger-solid)));
11544
+
11545
+ display: inline-flex;
11546
+ align-items: flex-start;
11547
+ gap: var(--ui-checkbox-gap, var(--ui-space-2));
11548
+ max-inline-size: 100%;
11549
+ color: var(--ui-text-primary);
11550
+ cursor: pointer;
11551
+ }
11552
+
11553
+ /* The label, and under it an optional line saying what the choice means. */
11554
+ .text {
11555
+ display: flex;
11556
+ flex-direction: column;
11557
+ gap: var(--ui-space-1);
11558
+ min-inline-size: 0;
11559
+ }
11560
+
11561
+ .label {
11562
+ min-inline-size: 0;
11563
+ line-height: var(--ui-line-height-md);
11564
+ }
11565
+
11566
+ .description {
11567
+ color: var(--ui-text-secondary);
11568
+ font-size: var(--ui-font-size-sm);
11569
+ line-height: var(--ui-line-height);
11570
+ }
11571
+
11572
+ .description:empty {
11573
+ display: none;
11574
+ }
11575
+
11576
+ input {
11577
+ appearance: none;
11578
+ -webkit-appearance: none;
11579
+ position: relative;
11580
+ flex: 0 0 auto;
11581
+ inline-size: var(--_ui-checkbox-size, 1.125rem);
11582
+ block-size: var(--_ui-checkbox-size, 1.125rem);
11583
+ margin: 0.125em 0 0;
11584
+ border: var(--ui-border-width) solid var(--ui-control-border, var(--ui-border-strong));
11585
+ border-radius: var(--ui-radius-sm);
11586
+ background: var(--ui-control-surface, var(--ui-surface-default));
11587
+ box-shadow: var(--ui-control-inset);
11588
+ cursor: pointer;
11589
+ transition:
11590
+ background-color var(--ui-motion-fast) var(--ui-motion-ease),
11591
+ border-color var(--ui-motion-fast) var(--ui-motion-ease),
11592
+ box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
11593
+ }
11594
+
11595
+ input:where(:not([data-component], [data-slotted]))::after {
11596
+ content: "";
11597
+ position: absolute;
11598
+ opacity: 0;
11599
+ transition: opacity 120ms var(--ui-motion-ease);
11600
+ }
11601
+
11602
+ input:checked,
11603
+ input:indeterminate {
11604
+ border-color: var(--ui-accent-solid);
11605
+ background: var(--ui-accent-solid);
11606
+ box-shadow: var(--ui-control-inset);
11607
+ }
11608
+
11609
+ /* Centre the tick's box and lift it slightly for the rotated check shape. */
11610
+ input:checked:where(:not([data-component], [data-slotted]))::after {
11611
+ inset: 0;
11612
+ margin: auto;
11613
+ inline-size: 0.28rem;
11614
+ block-size: 0.5rem;
11615
+ /* Longhands, not `border: solid var(...)`: lowering drops a shorthand that omits a
11616
+ component, which left the tick with no style and no colour. */
11617
+ border-style: solid;
11618
+ border-color: var(--ui-text-on-accent);
11619
+ border-width: 0 0.125rem 0.125rem 0;
11620
+ opacity: 1;
11621
+ transform: translateY(-0.09rem) rotate(45deg);
11622
+ animation: ui-checkbox-check 180ms var(--ui-motion-ease-out, cubic-bezier(0.16, 1, 0.3, 1)) both;
11623
+ }
11624
+
11625
+ input:indeterminate:where(:not([data-component], [data-slotted]))::after {
11626
+ inset: 50% 0.23rem auto;
11627
+ block-size: 0.125rem;
11628
+ border-radius: var(--ui-radius-round);
11629
+ background: var(--ui-text-on-accent);
11630
+ opacity: 1;
11631
+ transform: translateY(-50%);
11632
+ }
11633
+
11634
+ @keyframes ui-checkbox-check {
11635
+ from {
11636
+ opacity: 0;
11637
+ transform: translateY(-0.09rem) rotate(45deg) scale(0.55);
11638
+ }
11639
+ 65% {
11640
+ opacity: 1;
11641
+ transform: translateY(-0.09rem) rotate(45deg) scale(1.12);
11642
+ }
11643
+ to {
11644
+ opacity: 1;
11645
+ transform: translateY(-0.09rem) rotate(45deg) scale(1);
11646
+ }
11647
+ }
11648
+
11649
+ @media (prefers-reduced-motion: reduce) {
11650
+ input:where(:not([data-component], [data-slotted]))::after {
11651
+ transition: none;
11652
+ animation: none;
11653
+ }
11654
+ }
11655
+
11656
+ input:hover:enabled {
11657
+ border-color: var(--ui-accent-solid);
11658
+ }
11659
+
11660
+ input:focus-visible {
11661
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring, var(--ui-accent-solid));
11662
+ outline-offset: var(--ui-focus-width);
11663
+ }
11664
+
11665
+ :scope:where([data-component~="ui-checkbox"])[data-ui-checkbox-state~="invalid"] input {
11666
+ border-color: var(--_ui-checkbox-invalid-border);
11667
+ }
11668
+
11669
+ :scope:where([data-component~="ui-checkbox"])[data-ui-checkbox-state~="disabled"] {
11670
+ color: var(--ui-disabled-text);
11671
+ cursor: not-allowed;
11672
+ }
11673
+ :scope:where([data-component~="ui-checkbox"])[data-ui-checkbox-state~="disabled"] .description {
11674
+ color: var(--ui-disabled-text);
11675
+ }
11676
+ :scope:where([data-component~="ui-checkbox"])[data-ui-checkbox-state~="disabled"] input {
11677
+ border-color: var(--ui-disabled-border);
11678
+ background: var(--ui-disabled-surface);
11679
+ box-shadow: none;
11680
+ cursor: not-allowed;
11681
+ }
11682
+
11683
+ /* A sized choice keeps its box and aligns instead: the label takes that size's field type size,
11684
+ and the first line centres in that control height, so the label shares a row's baseline.
11685
+ Multi-line labels and descriptions still grow downward from that first line. */
11686
+ :scope:where([data-component~="ui-checkbox"])[data-ui-checkbox-state~="size=sm"] {
11687
+ --_font: var(--ui-font-size-sm);
11688
+ --_row: var(--ui-control-size-sm);
11689
+ }
11690
+
11691
+ :scope:where([data-component~="ui-checkbox"])[data-ui-checkbox-state~="size=lg"] {
11692
+ --_font: var(--ui-font-size-md);
11693
+ --_row: var(--ui-control-size-lg);
11694
+ }
11695
+
11696
+ :scope:where([data-component~="ui-checkbox"])[data-ui-checkbox-state~="size=sm"],
11697
+ :scope:where([data-component~="ui-checkbox"])[data-ui-checkbox-state~="size=lg"] {
11698
+ --_line: calc(var(--_font) * var(--ui-line-height-md));
11699
+ font-size: var(--_font);
11700
+ padding-block: calc((var(--_row) - var(--_line)) / 2);
11701
+ }
11702
+
11703
+ :scope:where([data-component~="ui-checkbox"])[data-ui-checkbox-state~="size=sm"] input,
11704
+ :scope:where([data-component~="ui-checkbox"])[data-ui-checkbox-state~="size=lg"] input {
11705
+ margin-top: calc((var(--_line) - var(--_ui-checkbox-size, 1.125rem)) / 2);
11706
+ }
11707
+
11708
+ @media (pointer: coarse) {
11709
+ :scope:where([data-component~="ui-checkbox"])[data-ui-checkbox-state~="size=sm"] {
11710
+ --_row: var(--ui-control-min-block-size);
11711
+ }
11712
+ }
11713
+
11714
+ /* A component that sets its display still honours the hidden attribute on its root. */
11715
+ :scope:where([data-component~="ui-checkbox"])[hidden] {
11716
+ display: none;
11717
+ }
11718
+ }
11719
+ @scope ([data-component~="ui-checkbox"]) to ([data-component]) {
11720
+ /* This component's hooks style the element they are set on, and never a nested one. */
11721
+
11722
+ /* The label, and under it an optional line saying what the choice means. */
11723
+
11724
+ /* Centre the tick's box and lift it slightly for the rotated check shape. */
11725
+
11726
+ @media (prefers-reduced-motion: reduce) {
11727
+ }
11728
+
11729
+ /* A sized choice keeps its box and aligns instead: the label takes that size's field type size,
11730
+ and the first line centres in that control height, so the label shares a row's baseline.
11731
+ Multi-line labels and descriptions still grow downward from that first line. */
11732
+
11733
+ @media (pointer: coarse) {
11734
+ }
11735
+
11736
+ /* A component that sets its display still honours the hidden attribute on its root. */
11737
+ }
11738
+ /* Generated by HTML Next 1.0.0-alpha.55. Do not edit. */
11739
+ @supports (-moz-appearance: none) {
11740
+ :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
11741
+ :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
11742
+ }
11743
+ @supports (-moz-appearance: none) {
11744
+ [data-component~="ui-cluster"] { --html-next-scope-owner: "ui-cluster" !important; }
11745
+ }
11746
+ @scope ([data-component~="ui-cluster"]) to ([data-component], [data-slotted]) {
11747
+ /* This component's hooks style the element they are set on, and never a nested one. */
11748
+ @property --ui-cluster-gap {
11749
+ syntax: "*";
11750
+ inherits: false;
11751
+ }
11752
+
11753
+ :scope:where([data-component~="ui-cluster"]) {
11754
+ --_layout-gap: var(--ui-space-3);
11755
+ display: flex;
11756
+ flex-wrap: wrap;
11757
+ align-items: center;
11758
+ gap: var(--ui-cluster-gap, var(--_layout-gap));
11759
+ min-inline-size: 0;
11760
+ max-inline-size: 100%;
11761
+ margin: 0;
11762
+ }
11763
+
11764
+ :scope:where([data-component~="ui-cluster"])[data-ui-cluster-state~="fixed"] {
11765
+ flex: none;
11766
+ }
11767
+ :scope:where([data-component~="ui-cluster"])[data-ui-cluster-state~="padding=s"] {
11768
+ padding: var(--ui-space-2);
11769
+ }
11770
+ :scope:where([data-component~="ui-cluster"])[data-ui-cluster-state~="padding=m"] {
11771
+ padding: var(--ui-space-3);
11772
+ }
11773
+ :scope:where([data-component~="ui-cluster"])[data-ui-cluster-state~="padding=l"] {
11774
+ padding: var(--ui-space-4);
11775
+ }
11776
+ :scope:where([data-component~="ui-cluster"])[data-ui-cluster-state~="paddingEnd=s"] {
11777
+ padding-inline-end: var(--ui-space-2);
11778
+ }
11779
+ :scope:where([data-component~="ui-cluster"])[data-ui-cluster-state~="paddingEnd=m"] {
11780
+ padding-inline-end: var(--ui-space-3);
11781
+ }
11782
+ :scope:where([data-component~="ui-cluster"])[data-ui-cluster-state~="paddingEnd=l"] {
11783
+ padding-inline-end: var(--ui-space-4);
11784
+ }
11785
+ :scope:where([data-component~="ui-cluster"])[data-ui-cluster-state~="paddingEnd=xl"] {
11786
+ padding-inline-end: calc(var(--ui-space-4) * 4);
11787
+ }
11788
+
11789
+ :scope:where([data-component~="ui-cluster"])[data-ui-cluster-state~="gap=xs"] {
11790
+ --_layout-gap: var(--ui-space-2);
11791
+ }
11792
+ :scope:where([data-component~="ui-cluster"])[data-ui-cluster-state~="gap=s"] {
11793
+ --_layout-gap: var(--ui-space-3);
11794
+ }
11795
+ :scope:where([data-component~="ui-cluster"])[data-ui-cluster-state~="gap=m"] {
11796
+ --_layout-gap: var(--ui-space-4);
11797
+ }
11798
+ :scope:where([data-component~="ui-cluster"])[data-ui-cluster-state~="gap=l"] {
11799
+ --_layout-gap: var(--ui-space-5);
11800
+ }
11801
+ :scope:where([data-component~="ui-cluster"])[data-ui-cluster-state~="gap=xl"] {
11802
+ --_layout-gap: var(--ui-space-6);
11803
+ }
11804
+ :scope:where([data-component~="ui-cluster"])[data-ui-cluster-state~="align=start"] {
11805
+ align-items: flex-start;
11806
+ }
11807
+ :scope:where([data-component~="ui-cluster"])[data-ui-cluster-state~="align=end"] {
11808
+ align-items: flex-end;
11809
+ }
11810
+ :scope:where([data-component~="ui-cluster"])[data-ui-cluster-state~="align=baseline"] {
11811
+ align-items: baseline;
11812
+ }
11813
+ :scope:where([data-component~="ui-cluster"])[data-ui-cluster-state~="align=stretch"] {
11814
+ align-items: stretch;
11815
+ }
11816
+ :scope:where([data-component~="ui-cluster"])[data-ui-cluster-state~="justify=center"] {
11817
+ justify-content: center;
11818
+ }
11819
+ :scope:where([data-component~="ui-cluster"])[data-ui-cluster-state~="justify=end"] {
11820
+ justify-content: flex-end;
11821
+ }
11822
+ :scope:where([data-component~="ui-cluster"])[data-ui-cluster-state~="justify=between"] {
11823
+ justify-content: space-between;
11824
+ }
11825
+ :scope:where([data-component~="ui-cluster"])[data-ui-cluster-state~="wrap=nowrap"] {
11826
+ flex-wrap: nowrap;
11827
+ }
11828
+
11829
+ /* A component that sets its display still honours the hidden attribute on its root. */
11830
+ :scope:where([data-component~="ui-cluster"])[hidden] {
11831
+ display: none;
11832
+ }
11833
+ }
11834
+ @scope ([data-component~="ui-cluster"]) to ([data-component]) {
11835
+ /* This component's hooks style the element they are set on, and never a nested one. */
11836
+
11837
+ /* A component that sets its display still honours the hidden attribute on its root. */
11838
+ }
11839
+ /* Generated by HTML Next 1.0.0-alpha.55. Do not edit. */
11840
+ @supports (-moz-appearance: none) {
11841
+ :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
11842
+ :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
11843
+ }
11844
+ @supports (-moz-appearance: none) {
11845
+ [data-component~="ui-disclosure"] { --html-next-scope-owner: "ui-disclosure" !important; }
11846
+ }
11847
+ @scope ([data-component~="ui-disclosure"]) to ([data-component], [data-slotted]) {
11848
+ /* This component's hooks style the element they are set on, and never a nested one. */
11849
+ @property --ui-disclosure-trigger-min-block-size {
11850
+ syntax: "*";
11851
+ inherits: false;
11852
+ }
11853
+ @property --ui-disclosure-trigger-padding-block {
11854
+ syntax: "*";
11855
+ inherits: false;
11856
+ }
11857
+ @property --ui-disclosure-trigger-padding-inline {
11858
+ syntax: "*";
11859
+ inherits: false;
11860
+ }
11861
+
11862
+ /* Density resolves into the summary row's own values; the public tokens still override them. */
11863
+ :scope:where([data-component~="ui-disclosure"]) {
11864
+ /* Hooks do not inherit, so the parts below read them from the root. */
11865
+ --_ui-disclosure-trigger-min-block-size: var(--ui-disclosure-trigger-min-block-size);
11866
+ --_ui-disclosure-trigger-padding-block: var(--ui-disclosure-trigger-padding-block);
11867
+ --_ui-disclosure-trigger-padding-inline: var(--ui-disclosure-trigger-padding-inline);
11868
+
11869
+ --_trigger-min-block-size: var(--ui-control-size);
11870
+ --_trigger-padding-block: var(--ui-space-2);
11871
+ --_trigger-padding-inline: var(--ui-space-3);
11872
+ }
11873
+
11874
+ :scope:where([data-component~="ui-disclosure"])[data-ui-disclosure-state~="density=compact"] {
11875
+ --_trigger-min-block-size: var(--ui-control-size-sm);
11876
+ --_trigger-padding-block: var(--ui-space-1);
11877
+ --_trigger-padding-inline: var(--ui-space-2);
11878
+ }
11879
+
11880
+ /* An accordion row, not a field: no enclosing box, just a divider, so it never reads as a
11881
+ * select or combobox. Stacked disclosures share their dividers. */
11882
+ :scope:where([data-component~="ui-disclosure"]) {
11883
+ display: block;
11884
+ inline-size: 100%;
11885
+ overflow: clip;
11886
+ border-block-end: var(--ui-border-width) solid var(--ui-border-divider);
11887
+ color: var(--ui-text-primary);
11888
+ }
11889
+
11890
+ .trigger {
11891
+ display: flex;
11892
+ gap: var(--ui-space-3);
11893
+ align-items: center;
11894
+ inline-size: 100%;
11895
+ min-block-size: var(--_ui-disclosure-trigger-min-block-size, var(--_trigger-min-block-size));
11896
+ padding: var(--_ui-disclosure-trigger-padding-block, var(--_trigger-padding-block))
11897
+ var(--_ui-disclosure-trigger-padding-inline, var(--_trigger-padding-inline));
11898
+ border: 0;
11899
+ background: transparent;
11900
+ color: inherit;
11901
+ font: inherit;
11902
+ font-weight: var(--ui-font-semibold);
11903
+ text-align: start;
11904
+ cursor: pointer;
11905
+ border-radius: var(--ui-radius-sm);
11906
+ transition: background-color var(--ui-motion-fast) var(--ui-motion-ease);
11907
+ }
11908
+
11909
+ .trigger:hover:not(:disabled) {
11910
+ background: color-mix(in srgb, currentColor 6%, transparent);
11911
+ }
11912
+ .trigger:focus-visible {
11913
+ outline: none;
11914
+ box-shadow: inset 0 0 0 var(--ui-focus-width) color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
11915
+ }
11916
+ .trigger:disabled {
11917
+ color: var(--ui-disabled-text);
11918
+ cursor: not-allowed;
11919
+ }
11920
+
11921
+ .summary {
11922
+ flex: 1;
11923
+ min-inline-size: 0;
11924
+ }
11925
+
11926
+ .leading,
11927
+ .indicator {
11928
+ display: inline-flex;
11929
+ align-items: center;
11930
+ justify-content: center;
11931
+ flex: none;
11932
+ }
11933
+ .leading:empty {
11934
+ display: none;
11935
+ }
11936
+ .indicator {
11937
+ transition: transform var(--ui-motion-feedback) var(--ui-motion-feedback-ease);
11938
+ }
11939
+ :scope:where([data-component~="ui-disclosure"])[data-ui-disclosure-state~="internalOpen"] .indicator {
11940
+ transform: rotate(180deg);
11941
+ }
11942
+
11943
+ .chevron {
11944
+ inline-size: 0.5rem;
11945
+ block-size: 0.5rem;
11946
+ border-inline-end: 2px solid currentColor;
11947
+ border-block-end: 2px solid currentColor;
11948
+ transform: rotate(45deg) translate(-1px, -1px);
11949
+ }
11950
+
11951
+ .panel {
11952
+ display: grid;
11953
+ grid-template-rows: 0fr;
11954
+ transition: grid-template-rows var(--ui-motion-reveal) var(--ui-motion-reveal-ease), content-visibility var(--ui-motion-reveal) allow-discrete;
11955
+ }
11956
+
11957
+ .panel-inner {
11958
+ min-block-size: 0;
11959
+ overflow: hidden;
11960
+ padding-inline: var(--ui-space-3);
11961
+ }
11962
+
11963
+ :scope:where([data-component~="ui-disclosure"])[data-ui-disclosure-state~="internalOpen"] .panel {
11964
+ grid-template-rows: 1fr;
11965
+ }
11966
+ :scope:where([data-component~="ui-disclosure"])[data-ui-disclosure-state~="internalOpen"] .panel-inner {
11967
+ padding-block: 0 var(--ui-space-3);
11968
+ }
11969
+
11970
+ /* A bounded accordion owns one flexible body, so its trigger never scrolls away. The
11971
+ * normal content-sized layout and its animation remain unchanged when fill is omitted. */
11972
+ :scope:where([data-component~="ui-disclosure"])[data-ui-disclosure-state~="fill"] {
11973
+ display: flex;
11974
+ flex-direction: column;
11975
+ flex: 0 0 var(--_ui-disclosure-heading-size, var(--_trigger-min-block-size));
11976
+ min-block-size: calc(var(--_ui-disclosure-heading-size, var(--_trigger-min-block-size)) + var(--ui-border-width));
11977
+ transition: flex-grow var(--ui-motion-layout) var(--ui-motion-layout-ease);
11978
+ border-block-end: 0;
11979
+ border-block-start: var(--ui-border-width) solid var(--ui-border-divider);
11980
+ }
11981
+ :scope:where([data-component~="ui-disclosure"])[data-ui-disclosure-state~="fill"][data-ui-disclosure-state~="internalOpen"] {
11982
+ flex-grow: 1;
11983
+ }
11984
+ :scope:where([data-component~="ui-disclosure"])[data-ui-disclosure-state~="fill"] .heading {
11985
+ flex: none;
11986
+ }
11987
+ :scope:where([data-component~="ui-disclosure"])[data-ui-disclosure-state~="fill"] .trigger {
11988
+ border-radius: 0;
11989
+ }
11990
+ :scope:where([data-component~="ui-disclosure"])[data-ui-disclosure-state~="fill"] .panel {
11991
+ flex: 1;
11992
+ min-block-size: 0;
11993
+ }
11994
+ :scope:where([data-component~="ui-disclosure"])[data-ui-disclosure-state~="fill"] .panel-inner {
11995
+ display: flex;
11996
+ flex-direction: column;
11997
+ flex: 1;
11998
+ min-block-size: 0;
11999
+ padding: 0;
12000
+ }
12001
+
12002
+ :scope:where([data-component~="ui-disclosure"])[data-ui-disclosure-state~="variant=navigation"] .trigger {
12003
+ gap: var(--ui-nav-gap);
12004
+ padding-inline: var(--ui-nav-padding-inline);
12005
+ min-block-size: var(--ui-nav-min-block-size);
12006
+ padding-block: var(--ui-nav-padding-block);
12007
+ border-radius: var(--ui-selection-radius);
12008
+ font-size: var(--ui-font-size-md);
12009
+ font-weight: var(--ui-font-normal);
12010
+ color: var(--ui-text-secondary);
12011
+ }
12012
+ :scope:where([data-component~="ui-disclosure"])[data-ui-disclosure-state~="variant=navigation"][data-ui-disclosure-state~="density=compact"] .trigger {
12013
+ padding-inline: var(--ui-nav-compact-padding-inline);
12014
+ padding-block: var(--ui-nav-compact-padding-block);
12015
+ min-block-size: var(--ui-nav-compact-min-block-size);
12016
+ font-size: var(--ui-font-size-sm);
12017
+ }
12018
+ :scope:where([data-component~="ui-disclosure"])[data-ui-disclosure-state~="variant=navigation"] .trigger:hover:not(:disabled) {
12019
+ background: var(--ui-nav-hover-surface);
12020
+ color: var(--ui-text-primary);
12021
+ }
12022
+ :scope:where([data-component~="ui-disclosure"])[data-ui-disclosure-state~="variant=navigation"] :is(.leading, .indicator) {
12023
+ inline-size: var(--ui-nav-icon-size);
12024
+ font-size: var(--ui-nav-icon-size);
12025
+ }
12026
+ @media (pointer: coarse) {
12027
+ :scope:where([data-component~="ui-disclosure"])[data-ui-disclosure-state~="variant=navigation"][data-ui-disclosure-state~="density=compact"] .trigger {
12028
+ min-block-size: var(--ui-control-min-block-size);
12029
+ }
12030
+ }
12031
+
12032
+ @media (prefers-reduced-motion: reduce) {
12033
+ :scope:where([data-component~="ui-disclosure"])[data-ui-disclosure-state~="fill"],
12034
+ .panel,
12035
+ .indicator {
12036
+ transition: none;
12037
+ }
12038
+ }
12039
+
12040
+ /* A component that sets its display still honours the hidden attribute on its root. */
12041
+ :scope:where([data-component~="ui-disclosure"])[hidden] {
12042
+ display: none;
12043
+ }
12044
+ }
12045
+ @scope ([data-component~="ui-disclosure"]) to ([data-component]) {
12046
+ /* This component's hooks style the element they are set on, and never a nested one. */
12047
+
12048
+ /* Density resolves into the summary row's own values; the public tokens still override them. */
12049
+
12050
+ /* An accordion row, not a field: no enclosing box, just a divider, so it never reads as a
12051
+ * select or combobox. Stacked disclosures share their dividers. */
12052
+
12053
+ /* A bounded accordion owns one flexible body, so its trigger never scrolls away. The
12054
+ * normal content-sized layout and its animation remain unchanged when fill is omitted. */
12055
+ @media (pointer: coarse) {
12056
+ }
12057
+
12058
+ @media (prefers-reduced-motion: reduce) {
12059
+ }
12060
+
12061
+ /* A component that sets its display still honours the hidden attribute on its root. */
12062
+ }
12063
+ /* Generated by HTML Next 1.0.0-alpha.55. Do not edit. */
12064
+ @supports (-moz-appearance: none) {
12065
+ :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
12066
+ :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
12067
+ }
12068
+ @supports (-moz-appearance: none) {
12069
+ [data-component~="ui-form-field"] { --html-next-scope-owner: "ui-form-field" !important; }
12070
+ }
12071
+ @scope ([data-component~="ui-form-field"]) to ([data-component], [data-slotted]) {
12072
+ /* This component's hooks style the element they are set on, and never a nested one. */
12073
+ @property --ui-form-field-danger {
12074
+ syntax: "*";
12075
+ inherits: false;
12076
+ }
12077
+ @property --ui-form-field-help-font-size {
12078
+ syntax: "*";
12079
+ inherits: false;
12080
+ }
12081
+ @property --ui-form-field-help-min-block-size {
12082
+ syntax: "*";
12083
+ inherits: false;
12084
+ }
12085
+ @property --ui-form-field-help-text {
12086
+ syntax: "*";
12087
+ inherits: false;
12088
+ }
12089
+ @property --ui-form-field-label-font-size {
12090
+ syntax: "*";
12091
+ inherits: false;
12092
+ }
12093
+ @property --ui-form-field-label-text {
12094
+ syntax: "*";
12095
+ inherits: false;
12096
+ }
12097
+ @property --ui-form-field-min-inline-size {
12098
+ syntax: "*";
12099
+ inherits: false;
12100
+ }
12101
+
12102
+ :scope:where([data-component~="ui-form-field"]) {
12103
+ /* Hooks do not inherit, so the parts below read them from the root. */
12104
+ --_ui-form-field-danger: var(--ui-form-field-danger);
12105
+ --_ui-form-field-help-min-block-size: var(--ui-form-field-help-min-block-size);
12106
+ --_ui-form-field-label-text: var(--ui-form-field-label-text);
12107
+ --_ui-form-field-label-font-size: var(--ui-form-field-label-font-size);
12108
+ --_ui-form-field-help-text: var(--ui-form-field-help-text);
12109
+ --_ui-form-field-help-font-size: var(--ui-form-field-help-font-size);
12110
+
12111
+ display: grid;
12112
+ gap: var(--ui-space-2);
12113
+ min-inline-size: var(--ui-form-field-min-inline-size, 0);
12114
+ align-content: start;
12115
+ color: var(--ui-text-primary);
12116
+ }
12117
+
12118
+ /* Each named region styles whatever fills it, however it was slotted (slot="…" in HTML, #label
12119
+ in Vue), and generates no box of its own, so an empty region adds no gap. */
12120
+ .label,
12121
+ .help,
12122
+ .error {
12123
+ display: contents;
12124
+ }
12125
+
12126
+ .label {
12127
+ color: var(--_ui-form-field-label-text, var(--ui-text-secondary));
12128
+ font-size: var(--_ui-form-field-label-font-size, var(--ui-font-size-sm));
12129
+ }
12130
+
12131
+ /* A label action, such as a small help button, sits after the label text in a box one line
12132
+ tall, centred on the first line and overflowing it. A button taller than a line of label
12133
+ text then never makes this field's label row taller than its neighbours' in a grid row. */
12134
+ .label:has(> .label-action > *) {
12135
+ display: flex;
12136
+ align-items: start;
12137
+ gap: var(--ui-space-1);
12138
+ }
12139
+
12140
+ .label-action {
12141
+ display: flex;
12142
+ align-items: unsafe center;
12143
+ block-size: 1lh;
12144
+ }
12145
+
12146
+ .label-action:not(:has(> *)) {
12147
+ display: none;
12148
+ }
12149
+
12150
+ .help {
12151
+ color: var(--_ui-form-field-help-text, var(--ui-text-muted));
12152
+ font-size: var(--_ui-form-field-help-font-size, var(--ui-font-size-sm));
12153
+ line-height: var(--ui-line-height-md);
12154
+ }
12155
+
12156
+ .error {
12157
+ display: none;
12158
+ }
12159
+
12160
+ :scope:where([data-component~="ui-form-field"])[data-ui-form-field-state~="invalid"] .error {
12161
+ display: contents;
12162
+ }
12163
+
12164
+ /* An error reads in the danger colour, the one the invalid control's border takes. */
12165
+
12166
+ /* A component that sets its display still honours the hidden attribute on its root. */
12167
+ :scope:where([data-component~="ui-form-field"])[hidden] {
12168
+ display: none;
12169
+ }
12170
+ }
12171
+ @scope ([data-component~="ui-form-field"]) to ([data-component]) {
12172
+ /* This component's hooks style the element they are set on, and never a nested one. */
12173
+
12174
+ /* Each named region styles whatever fills it, however it was slotted (slot="…" in HTML, #label
12175
+ in Vue), and generates no box of its own, so an empty region adds no gap. */
12176
+
12177
+ /* A label action, such as a small help button, sits after the label text in a box one line
12178
+ tall, centred on the first line and overflowing it. A button taller than a line of label
12179
+ text then never makes this field's label row taller than its neighbours' in a grid row. */
12180
+
12181
+ .help > :where([data-slotted], [data-slotted] *):is(*) {
12182
+ min-block-size: var(--_ui-form-field-help-min-block-size, 0);
12183
+ }
12184
+
12185
+ /* An error reads in the danger colour, the one the invalid control's border takes. */
12186
+ .error,
12187
+ :where([data-slotted], [data-slotted] *):is([role="alert"]) {
12188
+ color: var(--_ui-form-field-danger, var(--ui-field-danger, var(--ui-danger)));
12189
+ font-size: var(--ui-font-size-sm);
12190
+ }
12191
+
12192
+ /* A component that sets its display still honours the hidden attribute on its root. */
12193
+ }
12194
+ /* Generated by HTML Next 1.0.0-alpha.55. Do not edit. */
12195
+ @supports (-moz-appearance: none) {
12196
+ :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
12197
+ :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
12198
+ }
12199
+ @supports (-moz-appearance: none) {
12200
+ [data-component~="ui-icon"] { --html-next-scope-owner: "ui-icon" !important; }
12201
+ }
12202
+ @scope ([data-component~="ui-icon"]) to ([data-component], [data-slotted]) {
12203
+ /* This component's hooks style the element they are set on, and never a nested one. */
12204
+ @property --ui-icon-size {
12205
+ syntax: "*";
12206
+ inherits: false;
12207
+ }
12208
+ @property --ui-icon-stroke-width {
12209
+ syntax: "*";
12210
+ inherits: false;
12211
+ }
12212
+
12213
+ :scope:where([data-component~="ui-icon"]) {
12214
+ /* Hooks do not inherit, so the svg reads the stroke from the root. A Looma component that
12215
+ sizes the icons it renders sets --_ui-default-icon-*, which the icon's own hooks override. */
12216
+ --_ui-icon-stroke-width: var(--ui-icon-stroke-width, var(--_ui-default-icon-stroke-width));
12217
+
12218
+ display: inline-flex;
12219
+ flex: none;
12220
+ inline-size: var(--ui-icon-size, var(--_ui-default-icon-size, 1em));
12221
+ block-size: var(--ui-icon-size, var(--_ui-default-icon-size, 1em));
12222
+ }
12223
+
12224
+ svg {
12225
+ inline-size: 100%;
12226
+ block-size: 100%;
12227
+ stroke-width: var(--_ui-icon-stroke-width, 2);
12228
+ }
12229
+
12230
+ /* A component that sets its display still honours the hidden attribute on its root. */
12231
+ :scope:where([data-component~="ui-icon"])[hidden] {
12232
+ display: none;
12233
+ }
12234
+ }
12235
+ @scope ([data-component~="ui-icon"]) to ([data-component]) {
12236
+ /* This component's hooks style the element they are set on, and never a nested one. */
12237
+
12238
+ /* A component that sets its display still honours the hidden attribute on its root. */
12239
+ }
12240
+ /* Generated by HTML Next 1.0.0-alpha.55. Do not edit. */
12241
+ @supports (-moz-appearance: none) {
12242
+ :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
12243
+ :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
12244
+ }
12245
+ @supports (-moz-appearance: none) {
12246
+ [data-component~="ui-icon-button"] { --html-next-scope-owner: "ui-icon-button" !important; }
12247
+ }
12248
+ @scope ([data-component~="ui-icon-button"]) to ([data-component], [data-slotted]) {
12249
+ /* This component's hooks style the element they are set on, and never a nested one. */
12250
+ @property --ui-icon-button-active-scale {
12251
+ syntax: "*";
12252
+ inherits: false;
12253
+ }
12254
+ @property --ui-icon-button-active-surface {
12255
+ syntax: "*";
12256
+ inherits: false;
12257
+ }
12258
+ @property --ui-icon-button-border {
12259
+ syntax: "*";
12260
+ inherits: false;
12261
+ }
12262
+ @property --ui-icon-button-disabled-filter {
12263
+ syntax: "*";
12264
+ inherits: false;
12265
+ }
12266
+ @property --ui-icon-button-disabled-opacity {
12267
+ syntax: "*";
12268
+ inherits: false;
12269
+ }
12270
+ @property --ui-icon-button-hover-border {
12271
+ syntax: "*";
12272
+ inherits: false;
12273
+ }
12274
+ @property --ui-icon-button-hover-surface {
12275
+ syntax: "*";
12276
+ inherits: false;
12277
+ }
12278
+ @property --ui-icon-button-hover-text {
12279
+ syntax: "*";
12280
+ inherits: false;
12281
+ }
12282
+ @property --ui-icon-button-icon-size {
12283
+ syntax: "*";
12284
+ inherits: false;
12285
+ }
12286
+ @property --ui-icon-button-icon-stroke-width {
12287
+ syntax: "*";
12288
+ inherits: false;
12289
+ }
12290
+ @property --ui-icon-button-outline-surface {
12291
+ syntax: "*";
12292
+ inherits: false;
12293
+ }
12294
+ @property --ui-icon-button-outline-text {
12295
+ syntax: "*";
12296
+ inherits: false;
12297
+ }
12298
+ @property --ui-icon-button-radius {
12299
+ syntax: "*";
12300
+ inherits: false;
12301
+ }
12302
+ @property --ui-icon-button-size {
12303
+ syntax: "*";
12304
+ inherits: false;
12305
+ }
12306
+ @property --ui-icon-button-solid-hover-surface {
12307
+ syntax: "*";
12308
+ inherits: false;
12309
+ }
12310
+ @property --ui-icon-button-solid-shadow {
12311
+ syntax: "*";
12312
+ inherits: false;
12313
+ }
12314
+ @property --ui-icon-button-solid-surface {
12315
+ syntax: "*";
12316
+ inherits: false;
12317
+ }
12318
+ @property --ui-icon-button-solid-text {
12319
+ syntax: "*";
12320
+ inherits: false;
12321
+ }
12322
+ @property --ui-icon-button-surface {
12323
+ syntax: "*";
12324
+ inherits: false;
12325
+ }
12326
+
12327
+ :scope:where([data-component~="ui-icon-button"]) {
12328
+ /* Optional inherited action-group values keep text and icon actions under the same light.
12329
+ One fine top/start highlight follows the bottom/end lowlight at a joined action seam.
12330
+ A single ambient lift avoids stacking a face gradient or another inset bevel. */
12331
+ --_ui-action-start: 1px;
12332
+ --_ui-action-edge: var(
12333
+ --ui-action-edge,
12334
+ inset var(--_ui-action-start) 1px 0 light-dark(rgb(255 255 255 / 0.08), rgb(255 255 255 / 0.06)),
12335
+ inset calc(-1 * var(--_ui-action-start)) -1px 0 light-dark(rgb(0 0 0 / 0.08), rgb(0 0 0 / 0.08))
12336
+ );
12337
+ --_ui-action-shadow: var(--_ui-action-edge), 0 1px 2px light-dark(rgb(0 0 0 / 0.10), rgb(0 0 0 / 0.20));
12338
+ /* Hooks do not inherit, so the parts below read them from the root. */
12339
+ --_ui-icon-button-icon-size: var(--ui-icon-button-icon-size);
12340
+ --_ui-icon-button-icon-stroke-width: var(--ui-icon-button-icon-stroke-width);
12341
+
12342
+ display: inline-flex;
12343
+ color: var(--ui-text-secondary);
12344
+ }
12345
+
12346
+ :scope:where([data-component~="ui-icon-button"]):dir(rtl) {
12347
+ --_ui-action-start: -1px;
12348
+ }
12349
+
12350
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="tone=accent"] {
12351
+ --_icon-button-border: var(--ui-accent-solid);
12352
+ --_icon-button-hover-border: var(--ui-accent-hover);
12353
+ --_icon-button-text: var(--ui-accent-subtle-text, var(--ui-accent-solid));
12354
+ --_icon-button-outline-surface: color-mix(in srgb, var(--ui-accent-solid) 5%, var(--ui-surface-default));
12355
+ color: var(--_icon-button-text);
12356
+ }
12357
+
12358
+ /* Omitted tone retains the existing accent solid; explicit neutral is additive. */
12359
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="tone=neutral"] {
12360
+ --_icon-button-solid-surface: var(--ui-text-primary);
12361
+ --_icon-button-solid-hover-surface: var(--ui-text-primary);
12362
+ --_icon-button-solid-text: var(--ui-surface-default);
12363
+ }
12364
+
12365
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="anticipatory"] {
12366
+ position: relative;
12367
+ }
12368
+
12369
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="anticipatory"]::before {
12370
+ content: "";
12371
+ position: absolute;
12372
+ inset: 50% auto auto 50%;
12373
+ z-index: 1;
12374
+ inline-size: var(--ui-affordance-guide-size);
12375
+ block-size: var(--ui-affordance-guide-size);
12376
+ border-radius: var(--ui-radius-round);
12377
+ background: var(--ui-affordance-guide-color, var(--ui-border-strong));
12378
+ opacity: calc(var(--ui-affordance-guide-opacity) * var(--ui-affordance-scope-guide, 1));
12379
+ transform: translate(-50%, -50%);
12380
+ transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
12381
+ pointer-events: none;
12382
+ }
12383
+
12384
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="anticipatory"][data-ui-icon-button-state~="guide=bar"]::before {
12385
+ inline-size: 2px;
12386
+ block-size: 20px;
12387
+ background: var(--ui-border-strong);
12388
+ opacity: 1;
12389
+ }
12390
+
12391
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="anticipatory"]:disabled::before {
12392
+ opacity: 0;
12393
+ }
12394
+
12395
+ /* At rest an anticipatory button shows only its guide dot. The icon grows into place when
12396
+ proximity, hover, or focus reveals it; the button's hit area and guide remain stable. */
12397
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="anticipatory"] .content {
12398
+ opacity: 1;
12399
+ transform: scale(1);
12400
+ transition: opacity var(--ui-motion-fast) var(--ui-motion-ease), transform calc(var(--ui-motion-fast) * 2) cubic-bezier(0.2, 1.4, 0.35, 1);
12401
+ }
12402
+
12403
+ @media (hover: hover) and (pointer: fine) {
12404
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="anticipatory"]:not(:scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=solid"], :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="loading"], :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="pending"], :disabled, [aria-pressed="true"], [data-ui-proximity="near"], :hover, :focus-visible) {
12405
+ border-color: transparent;
12406
+ background-color: transparent;
12407
+ box-shadow: none;
12408
+ }
12409
+
12410
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="anticipatory"]:not(:scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=solid"], :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="loading"], :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="pending"], :disabled, [aria-pressed="true"], [data-ui-proximity="near"], :hover, :focus-visible)
12411
+ .content {
12412
+ opacity: 0;
12413
+ transform: scale(0.65);
12414
+ transition-duration: var(--ui-motion-fast);
12415
+ }
12416
+ }
12417
+
12418
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="anticipatory"]:is(:scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=solid"], [aria-pressed="true"], [data-ui-proximity="near"], :hover, :focus-visible)::before {
12419
+ opacity: 0;
12420
+ }
12421
+
12422
+ :scope:where([data-component~="ui-icon-button"]) {
12423
+ /* The size prop resolves here; --ui-icon-button-size overrides it on an element. */
12424
+ --_size: 2rem;
12425
+ appearance: none;
12426
+ inline-size: var(--ui-icon-button-size, var(--_size));
12427
+ block-size: var(--ui-icon-button-size, var(--_size));
12428
+ min-inline-size: var(--ui-icon-button-size, var(--_size));
12429
+ min-block-size: var(--ui-icon-button-size, var(--_size));
12430
+ padding: 0;
12431
+ margin: 0;
12432
+ border: var(--ui-border-width) solid transparent;
12433
+ border-radius: var(--ui-icon-button-radius, var(--ui-action-radius, var(--ui-radius-md)));
12434
+ background-color: var(--ui-icon-button-surface, transparent);
12435
+ color: inherit;
12436
+ display: inline-flex;
12437
+ align-items: center;
12438
+ justify-content: center;
12439
+ cursor: pointer;
12440
+ transition:
12441
+ background-color var(--ui-motion-fast) var(--ui-motion-ease),
12442
+ border-color var(--ui-motion-fast) var(--ui-motion-ease),
12443
+ color var(--ui-motion-fast) var(--ui-motion-ease),
12444
+ box-shadow var(--ui-motion-base) var(--ui-motion-ease),
12445
+ scale var(--ui-motion-fast) var(--ui-motion-ease);
12446
+ }
12447
+
12448
+ @media (hover: none), (pointer: coarse) {
12449
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="anticipatory"]::before {
12450
+ opacity: 0;
12451
+ }
12452
+ }
12453
+
12454
+ /* A touch target without a bigger button: an invisible hit area, at least the control
12455
+ minimum, centred on the button (::before is the anticipatory guide). */
12456
+ @media (pointer: coarse) {
12457
+ :scope:where([data-component~="ui-icon-button"]) {
12458
+ position: relative;
12459
+ }
12460
+
12461
+ :scope:where([data-component~="ui-icon-button"])::after {
12462
+ content: "";
12463
+ position: absolute;
12464
+ inset: 50% auto auto 50%;
12465
+ inline-size: max(100%, var(--ui-control-min-block-size));
12466
+ block-size: max(100%, var(--ui-control-min-block-size));
12467
+ transform: translate(-50%, -50%);
12468
+ }
12469
+ }
12470
+
12471
+ html[data-ui-input-modality="touch"] :scope:where([data-component~="ui-icon-button"]) {
12472
+ position: relative;
12473
+ }
12474
+
12475
+ html[data-ui-input-modality="touch"] :scope:where([data-component~="ui-icon-button"])::after {
12476
+ content: "";
12477
+ position: absolute;
12478
+ inset: 50% auto auto 50%;
12479
+ inline-size: max(100%, var(--ui-control-min-block-size));
12480
+ block-size: max(100%, var(--ui-control-min-block-size));
12481
+ transform: translate(-50%, -50%);
12482
+ }
12483
+
12484
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="size=sm"] {
12485
+ --_size: 1.75rem;
12486
+ inline-size: var(--ui-icon-button-size, var(--_size));
12487
+ block-size: var(--ui-icon-button-size, var(--_size));
12488
+ min-inline-size: var(--ui-icon-button-size, var(--_size));
12489
+ min-block-size: var(--ui-icon-button-size, var(--_size));
12490
+ }
12491
+
12492
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="size=lg"] {
12493
+ --_size: 2.5rem;
12494
+ inline-size: var(--ui-icon-button-size, var(--_size));
12495
+ block-size: var(--ui-icon-button-size, var(--_size));
12496
+ min-inline-size: var(--ui-icon-button-size, var(--_size));
12497
+ min-block-size: var(--ui-icon-button-size, var(--_size));
12498
+ }
12499
+
12500
+ /* A text button's companion uses control geometry; compact icon buttons keep their own density. */
12501
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="matchButton"] {
12502
+ --_size: var(--ui-control-size-md);
12503
+ block-size: auto;
12504
+ align-self: stretch;
12505
+ }
12506
+
12507
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="matchButton"][data-ui-icon-button-state~="size=sm"] {
12508
+ --_size: var(--ui-control-size-sm);
12509
+ }
12510
+
12511
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="matchButton"][data-ui-icon-button-state~="size=lg"] {
12512
+ --_size: var(--ui-control-size-lg);
12513
+ }
12514
+
12515
+ @media (pointer: coarse) {
12516
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="matchButton"] {
12517
+ inline-size: max(var(--ui-icon-button-size, var(--_size)), var(--ui-control-min-block-size));
12518
+ min-inline-size: max(var(--ui-icon-button-size, var(--_size)), var(--ui-control-min-block-size));
12519
+ min-block-size: max(var(--ui-icon-button-size, var(--_size)), var(--ui-control-min-block-size));
12520
+ }
12521
+ }
12522
+
12523
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="round"] {
12524
+ border-radius: var(--ui-radius-round);
12525
+ }
12526
+
12527
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=outline"] {
12528
+ border-color: var(--ui-icon-button-border, var(--_icon-button-border, var(--ui-control-border, var(--ui-border-strong))));
12529
+ background-color: var(--ui-icon-button-outline-surface, var(--_icon-button-outline-surface, var(--ui-surface-default)));
12530
+ background-image: none;
12531
+ color: var(--ui-icon-button-outline-text, var(--_icon-button-text, var(--ui-text-primary)));
12532
+ box-shadow: var(--ui-action-shadow, var(--_ui-action-shadow));
12533
+ }
12534
+
12535
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=solid"] {
12536
+ background-color: var(--ui-icon-button-solid-surface, var(--_icon-button-solid-surface, var(--ui-accent-solid)));
12537
+ background-image: none;
12538
+ color: var(--ui-icon-button-solid-text, var(--_icon-button-solid-text, var(--ui-text-on-accent)));
12539
+ box-shadow: var(--ui-icon-button-solid-shadow, var(--ui-action-shadow, var(--_ui-action-shadow)));
12540
+ }
12541
+
12542
+ :scope:where([data-component~="ui-icon-button"]):hover:enabled:not([aria-disabled="true"]) {
12543
+ /* Derived from the text colour so the ghost hover shows on any background. */
12544
+ background-color: var(--ui-icon-button-hover-surface, color-mix(in srgb, currentColor 8%, transparent));
12545
+ color: var(--ui-icon-button-hover-text, var(--_icon-button-text, var(--ui-text-primary)));
12546
+ }
12547
+
12548
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=outline"]:hover:enabled:not([aria-disabled="true"]) {
12549
+ border-color: var(--ui-icon-button-hover-border, var(--_icon-button-hover-border, var(--ui-control-border-hover, var(--ui-control-border))));
12550
+ }
12551
+
12552
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=solid"]:hover:enabled:not([aria-disabled="true"]) {
12553
+ background-color: var(--ui-icon-button-solid-hover-surface, var(--_icon-button-solid-hover-surface, var(--ui-accent-hover)));
12554
+ }
12555
+
12556
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=solid"][data-ui-icon-button-state~="tone=accent"]:hover:enabled:not([aria-disabled="true"]),
12557
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=solid"][data-ui-icon-button-state~="tone=neutral"]:hover:enabled:not([aria-disabled="true"]) {
12558
+ color: var(--ui-icon-button-solid-text, var(--_icon-button-solid-text, var(--ui-text-on-accent)));
12559
+ }
12560
+
12561
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=ghost"][aria-expanded="true"]:enabled:not([aria-disabled="true"]) {
12562
+ background-color: var(--ui-icon-button-active-surface, color-mix(in srgb, currentColor 16%, transparent));
12563
+ color: var(--ui-icon-button-hover-text, var(--_icon-button-text, var(--ui-text-primary)));
12564
+ box-shadow: var(--ui-pressed);
12565
+ }
12566
+
12567
+ /* Native toggle state persists after pointer release, including during loading. */
12568
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=outline"][aria-pressed="true"]:enabled {
12569
+ background-color: var(--ui-icon-button-active-surface, color-mix(in srgb, currentColor 12%, var(--ui-surface-default)));
12570
+ background-image: none;
12571
+ box-shadow: var(--ui-pressed);
12572
+ }
12573
+
12574
+ :scope:where([data-component~="ui-icon-button"]):active:enabled:not([aria-disabled="true"]) {
12575
+ scale: var(--ui-icon-button-active-scale, 0.96);
12576
+ }
12577
+
12578
+ :is(:scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="loading"], :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="pending"]) {
12579
+ cursor: progress;
12580
+ }
12581
+
12582
+ .content {
12583
+ display: inline-flex;
12584
+ align-items: center;
12585
+ justify-content: center;
12586
+ }
12587
+
12588
+ :is(:scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="loading"], :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="pending"]) .content {
12589
+ display: none;
12590
+ }
12591
+
12592
+ @media (prefers-reduced-motion: reduce) {
12593
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="anticipatory"] .content {
12594
+ transition: none;
12595
+ }
12596
+ }
12597
+
12598
+ :scope:where([data-component~="ui-icon-button"]):focus-visible {
12599
+ outline: none;
12600
+ box-shadow: var(--ui-focus-halo);
12601
+ }
12602
+
12603
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=outline"]:focus-visible {
12604
+ box-shadow:
12605
+ var(--ui-action-shadow, var(--_ui-action-shadow)),
12606
+ var(--ui-focus-halo);
12607
+ }
12608
+
12609
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=solid"]:focus-visible {
12610
+ box-shadow:
12611
+ var(--ui-icon-button-solid-shadow, var(--ui-action-shadow, var(--_ui-action-shadow))),
12612
+ var(--ui-focus-halo);
12613
+ }
12614
+
12615
+ :scope:where([data-component~="ui-icon-button"]):is(:scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=outline"], :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=solid"]):active:enabled:not([aria-disabled="true"]) {
12616
+ background-image: none;
12617
+ box-shadow: var(--ui-pressed);
12618
+ }
12619
+
12620
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=outline"][aria-pressed="true"]:enabled:focus-visible {
12621
+ box-shadow:
12622
+ var(--ui-pressed),
12623
+ var(--ui-focus-halo);
12624
+ }
12625
+
12626
+ @media (forced-colors: active) {
12627
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=outline"][aria-pressed="true"]:enabled {
12628
+ outline: var(--ui-focus-width) solid Highlight;
12629
+ outline-offset: calc(-2 * var(--ui-focus-width));
12630
+ }
12631
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=outline"][aria-pressed="true"]:enabled:focus-visible {
12632
+ outline-offset: var(--ui-focus-width);
12633
+ }
12634
+ }
12635
+
12636
+ /* Disabled is a flat neutral control, independent of the active variant's tone. */
12637
+ :scope:where([data-component~="ui-icon-button"]):disabled {
12638
+ border-color: var(--ui-disabled-border);
12639
+ background-color: var(--ui-disabled-surface);
12640
+ color: var(--ui-disabled-text);
12641
+ filter: var(--ui-icon-button-disabled-filter, var(--ui-disabled-filter));
12642
+ opacity: var(--ui-icon-button-disabled-opacity, 1);
12643
+ cursor: not-allowed;
12644
+ box-shadow: none;
12645
+ background-image: none;
12646
+ }
12647
+
12648
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=ghost"]:disabled {
12649
+ border-color: transparent;
12650
+ }
12651
+
12652
+ :scope:where([data-component~="ui-icon-button"]) {
12653
+ --_icon-button-icon-default: var(--ui-icon-size-md);
12654
+ /* A slotted ui-icon is its own component, out of reach of the svg rule below; these are its
12655
+ defaults, which its own --ui-icon-* hooks still override. */
12656
+ --_ui-default-icon-size: var(--_ui-icon-button-icon-size, var(--_icon-button-icon-default));
12657
+ --_ui-default-icon-stroke-width: var(--_ui-icon-button-icon-stroke-width, 1.75);
12658
+ }
12659
+
12660
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="size=sm"] {
12661
+ --_icon-button-icon-default: var(--ui-icon-size-sm);
12662
+ }
12663
+
12664
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="size=lg"] {
12665
+ --_icon-button-icon-default: var(--ui-icon-size-lg);
12666
+ }
12667
+
12668
+ /* A component that sets its display still honours the hidden attribute on its root. */
12669
+ :scope:where([data-component~="ui-icon-button"])[hidden] {
12670
+ display: none;
12671
+ }
12672
+ }
12673
+ @scope ([data-component~="ui-icon-button"]) to ([data-component]) {
12674
+ /* This component's hooks style the element they are set on, and never a nested one. */
12675
+
12676
+ /* Omitted tone retains the existing accent solid; explicit neutral is additive. */
12677
+
12678
+ /* At rest an anticipatory button shows only its guide dot. The icon grows into place when
12679
+ proximity, hover, or focus reveals it; the button's hit area and guide remain stable. */
12680
+
12681
+ @media (hover: hover) and (pointer: fine) {
12682
+ }
12683
+
12684
+ @media (hover: none), (pointer: coarse) {
12685
+ }
12686
+
12687
+ /* A touch target without a bigger button: an invisible hit area, at least the control
12688
+ minimum, centred on the button (::before is the anticipatory guide). */
12689
+ @media (pointer: coarse) {
12690
+ }
12691
+
12692
+ /* A text button's companion uses control geometry; compact icon buttons keep their own density. */
12693
+
12694
+ @media (pointer: coarse) {
12695
+ }
12696
+
12697
+ /* Native toggle state persists after pointer release, including during loading. */
12698
+
12699
+ @media (prefers-reduced-motion: reduce) {
12700
+ }
12701
+
12702
+ @media (forced-colors: active) {
12703
+ }
12704
+
12705
+ /* Disabled is a flat neutral control, independent of the active variant's tone. */
12706
+
12707
+ :where([data-slotted], [data-slotted] *):is(svg) {
12708
+ inline-size: var(--_ui-icon-button-icon-size, var(--_icon-button-icon-default));
12709
+ block-size: var(--_ui-icon-button-icon-size, var(--_icon-button-icon-default));
12710
+ flex-shrink: 0;
12711
+ stroke-width: var(--_ui-icon-button-icon-stroke-width, 1.75);
12712
+ }
12713
+
12714
+ /* A component that sets its display still honours the hidden attribute on its root. */
12715
+ }
12716
+ /* Generated by HTML Next 1.0.0-alpha.55. Do not edit. */
12717
+ @supports (-moz-appearance: none) {
12718
+ :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
12719
+ :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
12720
+ }
12721
+ @supports (-moz-appearance: none) {
12722
+ [data-component~="ui-input"] { --html-next-scope-owner: "ui-input" !important; }
12723
+ }
12724
+ @scope ([data-component~="ui-input"]) to ([data-component], [data-slotted]) {
12725
+ /* This component's hooks style the element they are set on, and never a nested one. An Input
12726
+ Group sets --_ui-default-input-* for the input inside it, below the input's own hooks. */
12727
+ @property --ui-input-border {
12728
+ syntax: "*";
12729
+ inherits: false;
12730
+ }
12731
+ @property --ui-input-border-hover {
12732
+ syntax: "*";
12733
+ inherits: false;
12734
+ }
12735
+ @property --ui-input-border-width {
12736
+ syntax: "*";
12737
+ inherits: false;
12738
+ }
12739
+ @property --ui-input-focus-border {
12740
+ syntax: "*";
12741
+ inherits: false;
12742
+ }
12743
+ @property --ui-input-focus-outline {
12744
+ syntax: "*";
12745
+ inherits: false;
12746
+ }
12747
+ @property --ui-input-focus-shadow {
12748
+ syntax: "*";
12749
+ inherits: false;
12750
+ }
12751
+ @property --ui-input-inline-size {
12752
+ syntax: "*";
12753
+ inherits: false;
12754
+ }
12755
+ @property --ui-input-invalid-border {
12756
+ syntax: "*";
12757
+ inherits: false;
12758
+ }
12759
+ @property --ui-input-invalid-focus-shadow {
12760
+ syntax: "*";
12761
+ inherits: false;
12762
+ }
12763
+ @property --ui-input-min-block-size {
12764
+ syntax: "*";
12765
+ inherits: false;
12766
+ }
12767
+ @property --ui-input-radius {
12768
+ syntax: "*";
12769
+ inherits: false;
12770
+ }
12771
+ @property --ui-input-shadow {
12772
+ syntax: "*";
12773
+ inherits: false;
12774
+ }
12775
+ @property --ui-input-surface {
12776
+ syntax: "*";
12777
+ inherits: false;
12778
+ }
12779
+
12780
+ :scope:where([data-component~="ui-input"]) {
12781
+ box-sizing: border-box;
12782
+ display: inline-block;
12783
+ inline-size: var(--ui-input-inline-size, 100%);
12784
+ min-inline-size: 0;
12785
+ min-block-size: var(--ui-input-min-block-size, var(--_ui-default-input-min-block-size, var(--ui-control-size-md)));
12786
+ margin: 0;
12787
+ padding: var(--ui-space-2) var(--ui-space-3);
12788
+ appearance: none;
12789
+ padding-inline-start: var(--_ui-default-input-padding-inline-start, var(--ui-space-3));
12790
+ border: var(--ui-input-border-width, var(--_ui-default-input-border-width, var(--ui-border-width))) solid
12791
+ var(--ui-input-border, var(--_ui-default-input-border, var(--ui-control-border, var(--ui-border-strong))));
12792
+ border-radius: var(--ui-input-radius, var(--_ui-default-input-radius, var(--ui-field-radius, var(--ui-radius-md))));
12793
+ background: var(--ui-input-surface, var(--_ui-default-input-surface, var(--ui-control-surface, var(--ui-surface-elevated))));
12794
+ color: var(--ui-text-primary);
12795
+ font: inherit;
12796
+ line-height: var(--ui-line-height-tight);
12797
+ box-shadow: var(--ui-input-shadow, var(--_ui-default-input-shadow, var(--ui-control-inset)));
12798
+ transition:
12799
+ border-color var(--ui-motion-fast) var(--ui-motion-ease),
12800
+ box-shadow var(--ui-motion-fast) var(--ui-motion-ease),
12801
+ background-color var(--ui-motion-fast) var(--ui-motion-ease);
12802
+ }
12803
+
12804
+ /* Each size reads the hook and then an Input Group's default first, so a group, which draws the frame, can zero it. */
12805
+ :scope:where([data-component~="ui-input"])[data-ui-input-state~="size=sm"] {
12806
+ min-block-size: var(--ui-input-min-block-size, var(--_ui-default-input-min-block-size, var(--ui-control-size-sm)));
12807
+ padding: var(--ui-space-1) var(--ui-space-2);
12808
+ font-size: var(--ui-font-size-sm);
12809
+ }
12810
+
12811
+ :scope:where([data-component~="ui-input"])[data-ui-input-state~="size=lg"] {
12812
+ min-block-size: var(--ui-input-min-block-size, var(--_ui-default-input-min-block-size, var(--ui-control-size-lg)));
12813
+ padding: var(--ui-space-3) var(--ui-space-4);
12814
+ font-size: var(--ui-font-size-md);
12815
+ }
12816
+
12817
+ /* Under touch a small field is still a touch-sized target, as a small button is, and keeps
12818
+ body-size text: below 16px, iOS zooms the page into the focused field. */
12819
+ @media (pointer: coarse) {
12820
+ :scope:where([data-component~="ui-input"]) {
12821
+ min-block-size: var(
12822
+ --ui-input-min-block-size,
12823
+ var(--_ui-default-input-min-block-size, max(var(--ui-control-size-md), var(--ui-control-min-block-size)))
12824
+ );
12825
+ }
12826
+
12827
+ :scope:where([data-component~="ui-input"]),
12828
+ :scope:where([data-component~="ui-input"])[data-ui-input-state~="size=sm"],
12829
+ :scope:where([data-component~="ui-input"])[data-ui-input-state~="size=lg"] {
12830
+ font-size: var(--ui-font-size-md);
12831
+ }
12832
+
12833
+ :scope:where([data-component~="ui-input"])[data-ui-input-state~="size=sm"] {
12834
+ min-block-size: var(--ui-input-min-block-size, var(--_ui-default-input-min-block-size, var(--ui-control-min-block-size)));
12835
+ }
12836
+ }
12837
+
12838
+ /* Tabbing into a field selects its text; tint that selection softly instead of the page highlight. */
12839
+ :scope:where([data-component~="ui-input"])::selection {
12840
+ background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
12841
+ color: inherit;
12842
+ }
12843
+
12844
+ :scope:where([data-component~="ui-input"])::placeholder {
12845
+ color: var(--ui-control-placeholder, var(--ui-text-secondary));
12846
+ opacity: 1;
12847
+ }
12848
+
12849
+ :scope:where([data-component~="ui-input"]):hover:not(:focus):not(:disabled):not(:read-only):not([aria-invalid="true"]):not(:is(:user-invalid, [data-user-invalid])) {
12850
+ border-color: var(--ui-input-border-hover, var(--_ui-default-input-border-hover, var(--ui-control-border-hover, var(--ui-text-secondary))));
12851
+ }
12852
+
12853
+ :scope:where([data-component~="ui-input"]):focus-visible {
12854
+ border-color: var(--ui-input-focus-border, var(--_ui-default-input-focus-border, var(--ui-control-focus, var(--ui-accent-solid))));
12855
+ outline: none;
12856
+ box-shadow: var(--ui-input-focus-shadow, var(--_ui-default-input-focus-shadow, var(--ui-control-inset), var(--ui-control-focus-halo-shadow)));
12857
+ }
12858
+
12859
+ /* The app's invalid flag, or the browser's own verdict once the user has left an invalid field. */
12860
+ :scope:where([data-component~="ui-input"])[aria-invalid="true"],
12861
+ :scope:where([data-component~="ui-input"]):is(:user-invalid, [data-user-invalid]) {
12862
+ border-color: var(--ui-input-invalid-border, var(--_ui-default-input-invalid-border, var(--ui-field-danger, var(--ui-danger-solid))));
12863
+ }
12864
+
12865
+ :scope:where([data-component~="ui-input"]):is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
12866
+ box-shadow: var(
12867
+ --ui-input-invalid-focus-shadow,
12868
+ var(
12869
+ --_ui-default-input-invalid-focus-shadow,
12870
+ var(--ui-control-inset),
12871
+ 0 0 0 calc(var(--ui-focus-width) * 1.5) color-mix(
12872
+ in srgb,
12873
+ var(--ui-input-invalid-border, var(--ui-field-danger, var(--ui-danger-solid))) 22%,
12874
+ transparent
12875
+ )
12876
+ )
12877
+ );
12878
+ }
12879
+
12880
+ :scope:where([data-component~="ui-input"]):disabled {
12881
+ background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
12882
+ color: var(--ui-disabled-text);
12883
+ box-shadow: none;
12884
+ cursor: not-allowed;
12885
+ }
12886
+
12887
+ /* Forced colors drop box shadows, so the focus ring becomes an outline. */
12888
+ @media (forced-colors: active) {
12889
+ :scope:where([data-component~="ui-input"]):focus-visible {
12890
+ outline: var(--ui-input-focus-outline, var(--_ui-default-input-focus-outline, var(--ui-focus-width) solid Highlight));
12891
+ outline-offset: var(--ui-border-width);
12892
+ }
12893
+ }
12894
+
12895
+ /* No text-box-trim here: trimming a native input's line box below its line height lets the text
12896
+ * scroll vertically inside the field. Native inputs already center their single line. */
12897
+
12898
+ /* A component that sets its display still honours the hidden attribute on its root. */
12899
+ :scope:where([data-component~="ui-input"])[hidden] {
12900
+ display: none;
12901
+ }
12902
+ }
12903
+ @scope ([data-component~="ui-input"]) to ([data-component]) {
12904
+ /* This component's hooks style the element they are set on, and never a nested one. An Input
12905
+ Group sets --_ui-default-input-* for the input inside it, below the input's own hooks. */
12906
+
12907
+ /* Each size reads the hook and then an Input Group's default first, so a group, which draws the frame, can zero it. */
12908
+
12909
+ /* Under touch a small field is still a touch-sized target, as a small button is, and keeps
12910
+ body-size text: below 16px, iOS zooms the page into the focused field. */
12911
+ @media (pointer: coarse) {
12912
+ }
12913
+
12914
+ /* Tabbing into a field selects its text; tint that selection softly instead of the page highlight. */
12915
+
12916
+ /* The app's invalid flag, or the browser's own verdict once the user has left an invalid field. */
12917
+
12918
+ /* Forced colors drop box shadows, so the focus ring becomes an outline. */
12919
+ @media (forced-colors: active) {
12920
+ }
12921
+
12922
+ /* No text-box-trim here: trimming a native input's line box below its line height lets the text
12923
+ * scroll vertically inside the field. Native inputs already center their single line. */
12924
+
12925
+ /* A component that sets its display still honours the hidden attribute on its root. */
12926
+ }
12927
+ /* Generated by HTML Next 1.0.0-alpha.55. Do not edit. */
12928
+ @supports (-moz-appearance: none) {
12929
+ :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
12930
+ :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
12931
+ }
12932
+ @supports (-moz-appearance: none) {
12933
+ [data-component~="ui-popover"] { --html-next-scope-owner: "ui-popover" !important; }
12934
+ }
12935
+ @scope ([data-component~="ui-popover"]) to ([data-component], [data-slotted]) {
12936
+ /* This component's hooks style the element they are set on, and never a nested one. */
12937
+ @property --ui-popover-surface {
12938
+ syntax: "*";
12939
+ inherits: false;
12940
+ }
12941
+ @property --ui-popover-border {
12942
+ syntax: "*";
12943
+ inherits: false;
12944
+ }
12945
+ @property --ui-popover-radius {
12946
+ syntax: "*";
12947
+ inherits: false;
12948
+ }
12949
+ @property --ui-popover-shadow {
12950
+ syntax: "*";
12951
+ inherits: false;
12952
+ }
12953
+ @property --ui-popover-viewport-gap {
12954
+ syntax: "*";
12955
+ inherits: false;
12956
+ }
12957
+ @property --ui-popover-offset {
12958
+ syntax: "*";
12959
+ inherits: false;
12960
+ }
12961
+ @property --ui-popover-padding {
12962
+ syntax: "*";
12963
+ inherits: false;
12964
+ }
12965
+
12966
+ :scope:where([data-component~="ui-popover"]) {
12967
+ --_ui-popover-surface: var(--ui-popover-surface);
12968
+ --_ui-popover-border: var(--ui-popover-border);
12969
+ --_ui-popover-radius: var(--ui-popover-radius);
12970
+ --_ui-popover-shadow: var(--ui-popover-shadow);
12971
+ --_ui-popover-padding: var(--ui-popover-padding);
12972
+ box-sizing: border-box;
12973
+ max-inline-size: min(
12974
+ 20rem,
12975
+ calc(100vw - var(--ui-popover-viewport-gap, var(--ui-space-2)) * 2)
12976
+ );
12977
+ max-block-size: calc(100dvh - var(--ui-popover-viewport-gap, var(--ui-space-2)) * 2);
12978
+ overflow: visible;
12979
+ padding: 0;
12980
+ border: 0;
12981
+ outline: 0;
12982
+ border-radius: 0;
12983
+ background: transparent;
12984
+ box-shadow: none;
12985
+ }
12986
+
12987
+ .surface {
12988
+ box-sizing: border-box;
12989
+ max-inline-size: inherit;
12990
+ max-block-size: inherit;
12991
+ overflow: auto;
12992
+ padding: var(--_ui-popover-padding, var(--ui-space-3));
12993
+ background: var(--_ui-popover-surface, var(--ui-overlay-surface, var(--ui-surface-elevated)));
12994
+ border: var(--ui-border-width) solid var(--_ui-popover-border, var(--ui-overlay-border, var(--ui-border-strong)));
12995
+ border-radius: var(--_ui-popover-radius, var(--ui-overlay-radius, var(--ui-radius-lg)));
12996
+ box-shadow: var(--_ui-popover-shadow, var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg))));
12997
+ }
12998
+
12999
+ :scope:where([data-component~="ui-popover"]):not([data-ui-popover-state~="internalOpen"]) {
13000
+ display: none;
13001
+ }
13002
+
13003
+ :scope:where([data-component~="ui-popover"])[popover] {
13004
+ position: fixed;
13005
+ inset: auto;
13006
+ margin: 0;
13007
+ opacity: 0;
13008
+ transform: translateY(-4px) scale(0.99);
13009
+ transition:
13010
+ opacity var(--ui-motion-fast) var(--ui-motion-ease),
13011
+ transform var(--ui-motion-fast) var(--ui-motion-ease),
13012
+ display var(--ui-motion-fast) allow-discrete,
13013
+ overlay var(--ui-motion-fast) allow-discrete;
13014
+ }
13015
+
13016
+ :scope:where([data-component~="ui-popover"])[popover]:popover-open {
13017
+ opacity: 1;
13018
+ transform: translateY(0) scale(1);
13019
+ }
13020
+
13021
+ @starting-style {
13022
+ :scope:where([data-component~="ui-popover"])[popover]:popover-open {
13023
+ opacity: 0;
13024
+ transform: translateY(-4px) scale(0.99);
13025
+ }
13026
+ }
13027
+
13028
+ :scope:where([data-component~="ui-popover"])[data-ui-popover-state~="size=sm"] {
13029
+ inline-size: min(22rem, calc(100vw - var(--ui-space-2) * 2));
13030
+ max-inline-size: min(22rem, calc(100vw - var(--ui-space-2) * 2));
13031
+ }
13032
+ :scope:where([data-component~="ui-popover"])[data-ui-popover-state~="size=md"] {
13033
+ inline-size: min(28rem, calc(100vw - var(--ui-space-2) * 2));
13034
+ max-inline-size: min(28rem, calc(100vw - var(--ui-space-2) * 2));
13035
+ }
13036
+ :scope:where([data-component~="ui-popover"])[data-ui-popover-state~="size=lg"] {
13037
+ inline-size: min(36rem, calc(100vw - var(--ui-space-2) * 2));
13038
+ max-inline-size: min(36rem, calc(100vw - var(--ui-space-2) * 2));
13039
+ }
13040
+
13041
+ :scope:where([data-component~="ui-popover"])[hidden] {
13042
+ display: none;
13043
+ }
13044
+
13045
+ @media (prefers-reduced-motion: reduce) {
13046
+ :scope:where([data-component~="ui-popover"])[popover] {
13047
+ transition: none;
13048
+ }
13049
+ }
13050
+ }
13051
+ @scope ([data-component~="ui-popover"]) to ([data-component]) {
13052
+ /* This component's hooks style the element they are set on, and never a nested one. */
13053
+
13054
+ @starting-style {
13055
+ }
13056
+
13057
+ @media (prefers-reduced-motion: reduce) {
13058
+ }
13059
+ }
13060
+ /* Generated by HTML Next 1.0.0-alpha.55. Do not edit. */
13061
+ @supports (-moz-appearance: none) {
13062
+ :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
13063
+ :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
13064
+ }
13065
+ @supports (-moz-appearance: none) {
13066
+ [data-component~="ui-stack"] { --html-next-scope-owner: "ui-stack" !important; }
13067
+ }
13068
+ @scope ([data-component~="ui-stack"]) to ([data-component], [data-slotted]) {
13069
+ /* This component's hooks style the element they are set on, and never a nested one. */
13070
+ @property --ui-stack-height {
13071
+ syntax: "*";
13072
+ inherits: false;
13073
+ }
13074
+
13075
+ @property --ui-stack-gap {
13076
+ syntax: "*";
13077
+ inherits: false;
13078
+ }
13079
+
13080
+ :scope:where([data-component~="ui-stack"]) {
13081
+ --_layout-gap: var(--ui-space-4);
13082
+ display: flex;
13083
+ flex-direction: column;
13084
+ align-items: stretch;
13085
+ gap: var(--ui-stack-gap, var(--_layout-gap));
13086
+ min-inline-size: 0;
13087
+ max-inline-size: 100%;
13088
+ margin: 0;
13089
+ }
13090
+
13091
+ :scope:where([data-component~="ui-stack"])[data-ui-stack-state~="fill"] {
13092
+ flex: 1;
13093
+ min-block-size: 0;
13094
+ }
13095
+ :scope:where([data-component~="ui-stack"])[data-ui-stack-state~="height"] {
13096
+ block-size: calc(var(--ui-stack-height, 0) * 1px);
13097
+ min-block-size: 0;
13098
+ }
13099
+
13100
+ :scope:where([data-component~="ui-stack"])[data-ui-stack-state~="gap=none"] {
13101
+ --_layout-gap: 0px;
13102
+ }
13103
+ :scope:where([data-component~="ui-stack"])[data-ui-stack-state~="gap=xs"] {
13104
+ --_layout-gap: var(--ui-space-2);
13105
+ }
13106
+ :scope:where([data-component~="ui-stack"])[data-ui-stack-state~="gap=s"] {
13107
+ --_layout-gap: var(--ui-space-3);
13108
+ }
13109
+ :scope:where([data-component~="ui-stack"])[data-ui-stack-state~="gap=m"] {
13110
+ --_layout-gap: var(--ui-space-4);
13111
+ }
13112
+ :scope:where([data-component~="ui-stack"])[data-ui-stack-state~="gap=l"] {
13113
+ --_layout-gap: var(--ui-space-5);
13114
+ }
13115
+ :scope:where([data-component~="ui-stack"])[data-ui-stack-state~="gap=xl"] {
13116
+ --_layout-gap: var(--ui-space-6);
13117
+ }
13118
+ :scope:where([data-component~="ui-stack"])[data-ui-stack-state~="align=start"] {
13119
+ align-items: flex-start;
13120
+ }
13121
+ :scope:where([data-component~="ui-stack"])[data-ui-stack-state~="align=center"] {
13122
+ align-items: center;
13123
+ }
13124
+ :scope:where([data-component~="ui-stack"])[data-ui-stack-state~="align=end"] {
13125
+ align-items: flex-end;
13126
+ }
13127
+ :scope:where([data-component~="ui-stack"])[data-ui-stack-state~="justify=center"] {
13128
+ justify-content: center;
13129
+ }
13130
+ :scope:where([data-component~="ui-stack"])[data-ui-stack-state~="justify=end"] {
13131
+ justify-content: flex-end;
13132
+ }
13133
+ :scope:where([data-component~="ui-stack"])[data-ui-stack-state~="justify=between"] {
13134
+ justify-content: space-between;
13135
+ }
13136
+
13137
+ /* A component that sets its display still honours the hidden attribute on its root. */
13138
+ :scope:where([data-component~="ui-stack"])[hidden] {
13139
+ display: none;
13140
+ }
13141
+ }
13142
+ @scope ([data-component~="ui-stack"]) to ([data-component]) {
13143
+ /* This component's hooks style the element they are set on, and never a nested one. */
13144
+
13145
+ /* A component that sets its display still honours the hidden attribute on its root. */
13146
+ }
13147
+ /* Generated by HTML Next 1.0.0-alpha.55. Do not edit. */
13148
+ @supports (-moz-appearance: none) {
13149
+ :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
13150
+ :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
13151
+ }
13152
+ @supports (-moz-appearance: none) {
13153
+ [data-component~="ui-text"] { --html-next-scope-owner: "ui-text" !important; }
13154
+ }
13155
+ @scope ([data-component~="ui-text"]) to ([data-component], [data-slotted]) {
13156
+ /* Running text, set on the type scale and in a tone that says what it is, so a view never styles
13157
+ text of its own. The root is a paragraph unless as= names a span, div, small, strong, label, or
13158
+ heading. */
13159
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="grow"] {
13160
+ flex: 1;
13161
+ }
13162
+
13163
+ :scope:where([data-component~="ui-text"]) {
13164
+ margin: 0;
13165
+ min-inline-size: 0;
13166
+ color: var(--ui-text-primary);
13167
+ text-align: start;
13168
+ }
13169
+
13170
+ /* A heading drops the browser's heading size and weight, so size and weight set it as they set
13171
+ any text, and inherit keeps the text around it. */
13172
+ :scope:where([data-component~="ui-text"]):is(h2, h3, h4, h5, h6) {
13173
+ font-size: inherit;
13174
+ font-weight: inherit;
13175
+ }
13176
+
13177
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="size=xs"] {
13178
+ font-size: var(--ui-font-size-xs);
13179
+ line-height: var(--ui-line-height);
13180
+ }
13181
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="size=sm"] {
13182
+ font-size: var(--ui-font-size-sm);
13183
+ line-height: var(--ui-line-height);
13184
+ }
13185
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="size=md"] {
13186
+ font-size: var(--ui-font-size-md);
13187
+ line-height: var(--ui-line-height);
13188
+ }
13189
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="size=lg"] {
13190
+ font-size: var(--ui-font-size-lg);
13191
+ line-height: var(--ui-line-height-relaxed);
13192
+ }
13193
+
13194
+ /* Opt in at the text owner; trimming does not inherit from a surrounding layout. */
13195
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="trim"] {
13196
+ text-box-trim: trim-both;
13197
+ text-box-edge: cap alphabetic;
13198
+ }
13199
+
13200
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="tone=secondary"] {
13201
+ color: var(--ui-text-secondary);
13202
+ }
13203
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="tone=muted"] {
13204
+ color: var(--ui-text-muted);
13205
+ }
13206
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="tone=accent"] {
13207
+ color: var(--ui-accent-active);
13208
+ }
13209
+ /* Every status tone uses the text-safe token a subtle badge sets its words in, so text and badges
13210
+ in one tone match, and each holds 4.5:1 on sunken surfaces where some base colours fall short. */
13211
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="tone=danger"] {
13212
+ color: var(--ui-danger-subtle-text);
13213
+ }
13214
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="tone=success"] {
13215
+ color: var(--ui-success-subtle-text);
13216
+ }
13217
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="tone=info"] {
13218
+ color: var(--ui-info-subtle-text);
13219
+ }
13220
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="tone=warning"] {
13221
+ color: var(--ui-warning-subtle-text);
13222
+ }
13223
+
13224
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="weight=normal"] {
13225
+ font-weight: var(--ui-font-normal);
13226
+ }
13227
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="weight=medium"] {
13228
+ font-weight: var(--ui-font-medium);
13229
+ }
13230
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="weight=semibold"] {
13231
+ font-weight: var(--ui-font-semibold);
13232
+ }
13233
+
13234
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="variant=eyebrow"] {
13235
+ font-size: var(--ui-font-size-xs);
13236
+ font-weight: var(--ui-font-semibold);
13237
+ letter-spacing: 0.06em;
13238
+ text-transform: uppercase;
13239
+ }
13240
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="variant=code"] {
13241
+ font-family: var(--ui-font-family-mono);
13242
+ }
13243
+
13244
+ /* A link in running text is underlined, so it stands apart from the words around it by more than
13245
+ colour. */
13246
+
13247
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="truncate"] {
13248
+ overflow: hidden;
13249
+ text-overflow: ellipsis;
13250
+ white-space: nowrap;
13251
+ }
13252
+
13253
+ /* Trim ends the layout box at the baseline; preserve descending ink while clipping long labels. */
13254
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="trim"][data-ui-text-state~="truncate"] {
13255
+ overflow-x: clip;
13256
+ overflow-y: visible;
13257
+ }
13258
+
13259
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="align=center"] {
13260
+ text-align: center;
13261
+ }
13262
+
13263
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="font=sans"] {
13264
+ font-family: var(--ui-font-family-sans, sans-serif);
13265
+ }
13266
+
13267
+ :scope:where([data-component~="ui-text"])[data-ui-text-state~="wrap=anywhere"] {
13268
+ overflow-wrap: anywhere;
13269
+ }
13270
+
13271
+ /* A component that sets its display still honours the hidden attribute on its root. */
13272
+ :scope:where([data-component~="ui-text"])[hidden] {
13273
+ display: none;
13274
+ }
13275
+ }
13276
+ @scope ([data-component~="ui-text"]) to ([data-component]) {
13277
+ /* Running text, set on the type scale and in a tone that says what it is, so a view never styles
13278
+ text of its own. The root is a paragraph unless as= names a span, div, small, strong, label, or
13279
+ heading. */
13280
+
13281
+ /* A heading drops the browser's heading size and weight, so size and weight set it as they set
13282
+ any text, and inherit keeps the text around it. */
13283
+
13284
+ /* Opt in at the text owner; trimming does not inherit from a surrounding layout. */
13285
+ /* Every status tone uses the text-safe token a subtle badge sets its words in, so text and badges
13286
+ in one tone match, and each holds 4.5:1 on sunken surfaces where some base colours fall short. */
13287
+
13288
+ /* A link in running text is underlined, so it stands apart from the words around it by more than
13289
+ colour. */
13290
+ :scope:where([data-component~="ui-text"]) :where([data-slotted], [data-slotted] *):is(a) {
13291
+ color: var(--ui-accent-active);
13292
+ text-decoration: underline;
13293
+ text-decoration-thickness: 0.06em;
13294
+ text-underline-offset: 0.18em;
13295
+ }
13296
+
13297
+ /* Trim ends the layout box at the baseline; preserve descending ink while clipping long labels. */
13298
+
13299
+ /* A component that sets its display still honours the hidden attribute on its root. */
13300
+ }
13301
+ /* Generated by HTML Next 1.0.0-alpha.55. Do not edit. */
13302
+ @supports (-moz-appearance: none) {
13303
+ :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
13304
+ :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
13305
+ }
13306
+ @supports (-moz-appearance: none) {
13307
+ [data-component~="ui-tooltip"] { --html-next-scope-owner: "ui-tooltip" !important; }
13308
+ }
13309
+ @scope ([data-component~="ui-tooltip"]) to ([data-component], [data-slotted]) {
13310
+ /* This component's hooks style the element they are set on, and never a nested one. */
13311
+ @property --ui-tooltip-arrow-size {
13312
+ syntax: "*";
13313
+ inherits: false;
13314
+ }
13315
+ @property --ui-tooltip-border {
13316
+ syntax: "*";
13317
+ inherits: false;
13318
+ }
13319
+ @property --ui-tooltip-inverse-surface {
13320
+ syntax: "*";
13321
+ inherits: false;
13322
+ }
13323
+ @property --ui-tooltip-inverse-text {
13324
+ syntax: "*";
13325
+ inherits: false;
13326
+ }
13327
+ @property --ui-tooltip-max-inline-size {
13328
+ syntax: "*";
13329
+ inherits: false;
13330
+ }
13331
+ @property --ui-tooltip-offset {
13332
+ syntax: "*";
13333
+ inherits: false;
13334
+ }
13335
+ @property --ui-tooltip-radius {
13336
+ syntax: "*";
13337
+ inherits: false;
13338
+ }
13339
+ @property --ui-tooltip-shadow {
13340
+ syntax: "*";
13341
+ inherits: false;
13342
+ }
13343
+ @property --ui-tooltip-surface {
13344
+ syntax: "*";
13345
+ inherits: false;
13346
+ }
13347
+ @property --ui-tooltip-text {
13348
+ syntax: "*";
13349
+ inherits: false;
13350
+ }
13351
+
13352
+ :scope:where([data-component~="ui-tooltip"]) {
13353
+ /* Hooks do not inherit, so the parts below read them from the root. */
13354
+ --_ui-tooltip-border: var(--ui-tooltip-border);
13355
+ --_ui-tooltip-max-inline-size: var(--ui-tooltip-max-inline-size);
13356
+ --_ui-tooltip-radius: var(--ui-tooltip-radius);
13357
+ --_ui-tooltip-surface: var(--ui-tooltip-surface);
13358
+ --_ui-tooltip-text: var(--ui-tooltip-text);
13359
+ --_ui-tooltip-shadow: var(--ui-tooltip-shadow);
13360
+ --_ui-tooltip-inverse-surface: var(--ui-tooltip-inverse-surface);
13361
+ --_ui-tooltip-inverse-text: var(--ui-tooltip-inverse-text);
13362
+ --_ui-tooltip-arrow-size: var(--ui-tooltip-arrow-size);
13363
+
13364
+ position: fixed;
13365
+ inset: auto;
13366
+ margin: 0;
13367
+ display: inline-block;
13368
+ box-sizing: border-box;
13369
+ padding: 0;
13370
+ border: 0;
13371
+ outline: 0;
13372
+ border-radius: 0;
13373
+ background: transparent;
13374
+ /* The UA popover default (overflow: auto) would clip the arrow. */
13375
+ overflow: visible;
13376
+ opacity: 0;
13377
+ transform: translateY(4px);
13378
+ transition:
13379
+ opacity var(--ui-motion-fast) var(--ui-motion-ease),
13380
+ transform var(--ui-motion-fast) var(--ui-motion-ease),
13381
+ display var(--ui-motion-fast) allow-discrete,
13382
+ overlay var(--ui-motion-fast) allow-discrete;
13383
+ }
13384
+
13385
+ /* The label and the shortcut sit side by side, a gap apart, with the label wrapping on its own. */
13386
+ .surface {
13387
+ --_tooltip-line: var(--_ui-tooltip-border, var(--ui-overlay-border, var(--ui-border-strong)));
13388
+ position: relative;
13389
+ display: flex;
13390
+ align-items: baseline;
13391
+ gap: var(--ui-space-2);
13392
+ box-sizing: border-box;
13393
+ max-inline-size: var(--_ui-tooltip-max-inline-size, 18rem);
13394
+ border: var(--ui-border-width) solid var(--_tooltip-line);
13395
+ border-radius: var(--_ui-tooltip-radius, var(--ui-overlay-radius, var(--ui-radius-md)));
13396
+ background: var(--_ui-tooltip-surface, var(--ui-overlay-surface, var(--ui-surface-elevated)));
13397
+ color: var(--_ui-tooltip-text, var(--ui-text-primary));
13398
+ padding: var(--ui-space-2) var(--ui-space-3);
13399
+ font-family: var(--ui-font-family-sans);
13400
+ font-size: var(--ui-font-size-sm);
13401
+ line-height: var(--ui-line-height-tight);
13402
+ box-shadow: var(--_ui-tooltip-shadow, var(--ui-overlay-shadow, var(--ui-elevation-tooltip, var(--ui-shadow-md))));
13403
+ }
13404
+
13405
+ /* A keyboard shortcut follows the label after a thin divider, smaller and quieter, as menus show
13406
+ it. The label stays first in the description, so a screen reader hears the name, then the keys. */
13407
+ .shortcut {
13408
+ display: inline-flex;
13409
+ align-items: center;
13410
+ padding-inline-start: var(--ui-space-2);
13411
+ border-inline-start: 1px solid color-mix(in oklab, currentColor 28%, transparent);
13412
+ color: color-mix(in oklab, currentColor 72%, transparent);
13413
+ font-size: var(--ui-font-size-xs);
13414
+ font-weight: var(--ui-font-normal);
13415
+ white-space: nowrap;
13416
+ vertical-align: baseline;
13417
+ }
13418
+
13419
+ .shortcut:empty {
13420
+ display: none;
13421
+ }
13422
+
13423
+ /* A <kbd> takes the browser's monospace; the hint reads in the tooltip's own type. */
13424
+
13425
+ :scope:where([data-component~="ui-tooltip"])[data-ui-tooltip-state~="inverse"] .surface {
13426
+ --_tooltip-line: var(--_ui-tooltip-inverse-surface, var(--ui-text-primary));
13427
+ background: var(--_ui-tooltip-inverse-surface, var(--ui-text-primary));
13428
+ color: var(--_ui-tooltip-inverse-text, var(--ui-surface-default));
13429
+ }
13430
+
13431
+ /* A rotated square shares the surface fill and draws the two outward border edges. Its centre sits on
13432
+ * the surface border line, so the fill covers that stretch of border and the outline runs unbroken. */
13433
+ .surface:where(:not([data-component], [data-slotted]))::after {
13434
+ content: "";
13435
+ position: absolute;
13436
+ z-index: 1;
13437
+ inset-inline-start: var(--ui-space-3);
13438
+ inset-block-end: calc(var(--_ui-tooltip-arrow-size, 0.625rem) / -2 - var(--ui-border-width) / 2);
13439
+ inline-size: var(--_ui-tooltip-arrow-size, 0.625rem);
13440
+ block-size: var(--_ui-tooltip-arrow-size, 0.625rem);
13441
+ box-sizing: border-box;
13442
+ background: inherit;
13443
+ border: 0 solid var(--_tooltip-line);
13444
+ border-inline-end-width: var(--ui-border-width);
13445
+ border-block-end-width: var(--ui-border-width);
13446
+ border-end-end-radius: var(--ui-border-width);
13447
+ transform: rotate(45deg) scaleX(1.25) scaleY(0.85);
13448
+ }
13449
+
13450
+ :scope:where([data-component~="ui-tooltip"])[data-ui-actual-placement="bottom"] .surface:where(:not([data-component], [data-slotted]))::after {
13451
+ inset-block-start: calc(var(--_ui-tooltip-arrow-size, 0.625rem) / -2 - var(--ui-border-width) / 2);
13452
+ inset-block-end: auto;
13453
+ border-inline-end-width: 0;
13454
+ border-block-end-width: 0;
13455
+ border-inline-start-width: var(--ui-border-width);
13456
+ border-block-start-width: var(--ui-border-width);
13457
+ border-end-end-radius: 0;
13458
+ border-start-start-radius: var(--ui-border-width);
13459
+ }
13460
+
13461
+ :scope:where([data-component~="ui-tooltip"])[data-ui-actual-align="center"] .surface:where(:not([data-component], [data-slotted]))::after {
13462
+ inset-inline-start: calc(50% - var(--_ui-tooltip-arrow-size, 0.625rem) / 2);
13463
+ }
13464
+
13465
+ :scope:where([data-component~="ui-tooltip"])[data-ui-actual-align="end"] .surface:where(:not([data-component], [data-slotted]))::after {
13466
+ inset-inline-start: auto;
13467
+ inset-inline-end: var(--ui-space-3);
13468
+ }
13469
+
13470
+ :scope:where([data-component~="ui-tooltip"])[data-ui-actual-placement="left"] .surface:where(:not([data-component], [data-slotted]))::after,
13471
+ :scope:where([data-component~="ui-tooltip"])[data-ui-actual-placement="right"] .surface:where(:not([data-component], [data-slotted]))::after {
13472
+ inset-block-start: calc(50% - var(--_ui-tooltip-arrow-size, 0.625rem) / 2);
13473
+ inset-block-end: auto;
13474
+ border: 0 solid var(--_tooltip-line);
13475
+ }
13476
+
13477
+ :scope:where([data-component~="ui-tooltip"])[data-ui-actual-placement="left"] .surface:where(:not([data-component], [data-slotted]))::after {
13478
+ inset-inline-start: auto;
13479
+ inset-inline-end: calc(var(--_ui-tooltip-arrow-size, 0.625rem) / -2 - var(--ui-border-width) / 2);
13480
+ border-inline-end-width: var(--ui-border-width);
13481
+ border-block-start-width: var(--ui-border-width);
13482
+ }
13483
+
13484
+ :scope:where([data-component~="ui-tooltip"])[data-ui-actual-placement="right"] .surface:where(:not([data-component], [data-slotted]))::after {
13485
+ inset-inline-start: calc(var(--_ui-tooltip-arrow-size, 0.625rem) / -2 - var(--ui-border-width) / 2);
13486
+ inset-inline-end: auto;
13487
+ border-inline-start-width: var(--ui-border-width);
13488
+ border-block-end-width: var(--ui-border-width);
13489
+ }
13490
+
13491
+ :scope:where([data-component~="ui-tooltip"])[data-ui-actual-placement="left"][data-ui-actual-align="start"] .surface:where(:not([data-component], [data-slotted]))::after,
13492
+ :scope:where([data-component~="ui-tooltip"])[data-ui-actual-placement="right"][data-ui-actual-align="start"] .surface:where(:not([data-component], [data-slotted]))::after {
13493
+ inset-block-start: var(--ui-space-3);
13494
+ }
13495
+
13496
+ :scope:where([data-component~="ui-tooltip"])[data-ui-actual-placement="left"][data-ui-actual-align="end"] .surface:where(:not([data-component], [data-slotted]))::after,
13497
+ :scope:where([data-component~="ui-tooltip"])[data-ui-actual-placement="right"][data-ui-actual-align="end"] .surface:where(:not([data-component], [data-slotted]))::after {
13498
+ inset-block-start: auto;
13499
+ inset-block-end: var(--ui-space-3);
13500
+ }
13501
+
13502
+ :scope:where([data-component~="ui-tooltip"]):popover-open {
13503
+ opacity: 1;
13504
+ transform: translateY(0);
13505
+ }
13506
+
13507
+ @starting-style {
13508
+ :scope:where([data-component~="ui-tooltip"]):popover-open {
13509
+ opacity: 0;
13510
+ transform: translateY(4px);
13511
+ }
13512
+ }
13513
+
13514
+ :scope:where([data-component~="ui-tooltip"])[hidden] {
13515
+ display: none;
13516
+ }
13517
+
13518
+ @media (prefers-reduced-motion: reduce) {
13519
+ :scope:where([data-component~="ui-tooltip"]) {
13520
+ transition: none;
13521
+ }
13522
+ }
13523
+ }
13524
+ @scope ([data-component~="ui-tooltip"]) to ([data-component]) {
13525
+ /* This component's hooks style the element they are set on, and never a nested one. */
13526
+
13527
+ /* The label and the shortcut sit side by side, a gap apart, with the label wrapping on its own. */
13528
+
13529
+ /* A keyboard shortcut follows the label after a thin divider, smaller and quieter, as menus show
13530
+ it. The label stays first in the description, so a screen reader hears the name, then the keys. */
13531
+
13532
+ /* A <kbd> takes the browser's monospace; the hint reads in the tooltip's own type. */
13533
+ .shortcut :where([data-slotted], [data-slotted] *):is(kbd) {
13534
+ font: inherit;
13535
+ }
13536
+
13537
+ /* A rotated square shares the surface fill and draws the two outward border edges. Its centre sits on
13538
+ * the surface border line, so the fill covers that stretch of border and the outline runs unbroken. */
13539
+
13540
+ @starting-style {
13541
+ }
13542
+
13543
+ @media (prefers-reduced-motion: reduce) {
13544
+ }
13545
+ }
13546
+ /* Generated by HTML Next 1.0.0-alpha.55. Do not edit. */
13547
+ @supports (-moz-appearance: none) {
13548
+ :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
13549
+ :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
13550
+ }
13551
+ @supports (-moz-appearance: none) {
10974
13552
  [data-component~="ui-separator"] { --html-next-scope-owner: "ui-separator" !important; }
10975
13553
  }
10976
13554
  @scope ([data-component~="ui-separator"]) to ([data-component], [data-slotted]) {