@databricks/design-system 2.0.3 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.css CHANGED
@@ -15980,27 +15980,27 @@ span.du-bois-light-typography-ellipsis-single-line {
15980
15980
  Use this for any layout where items are laid out vertically.
15981
15981
 
15982
15982
  \3c !-- Basic: default gap between each child -->
15983
- <div class="ds-stack">
15983
+ <div class="db-stack">
15984
15984
  <h2>Title</h2>
15985
15985
  <p>Body</p>
15986
15986
  <button>Action</button>
15987
15987
  </div>
15988
15988
 
15989
15989
  \3c !-- Wider gap for this instance -->
15990
- <div class="ds-stack" style="--ds-stack-gap: var(--db-spacing-lg)">…</div>
15990
+ <div class="db-stack" style="--db-stack-gap: var(--db-spacing-lg)">…</div>
15991
15991
 
15992
15992
  \3c !-- Don't stretch children to full width (e.g. left-aligned buttons) -->
15993
- <div class="ds-stack" style="--ds-stack-align: flex-start">…</div>
15993
+ <div class="db-stack" style="--db-stack-align: flex-start">…</div>
15994
15994
  */
15995
- .ds-stack {
15995
+ .db-stack {
15996
15996
  /* These variables act as the *parameters* for the stack instance. */
15997
- --ds-stack-gap: var(--db-spacing-xs);
15998
- --ds-stack-align: stretch;
15997
+ --db-stack-gap: var(--db-spacing-xs);
15998
+ --db-stack-align: stretch;
15999
15999
 
16000
16000
  display: flex;
16001
16001
  flex-direction: column;
16002
- align-items: var(--ds-stack-align);
16003
- gap: var(--ds-stack-gap);
16002
+ align-items: var(--db-stack-align);
16003
+ gap: var(--db-stack-gap);
16004
16004
  }
16005
16005
 
16006
16006
  /**
@@ -16008,29 +16008,29 @@ span.du-bois-light-typography-ellipsis-single-line {
16008
16008
  Use this for any layout where items are laid out horizontally and should wrap on smaller viewport sizes.
16009
16009
 
16010
16010
  \3c !-- Basic: items wrap as needed -->
16011
- <div class="ds-cluster">
16011
+ <div class="db-cluster">
16012
16012
  <span>one</span>
16013
16013
  <span>two</span>
16014
16014
  <span>three</span>
16015
16015
  </div>
16016
16016
 
16017
16017
  \3c !-- Push children apart (e.g. title left, actions right) -->
16018
- <div class="ds-cluster" style="--ds-cluster-justify: space-between">…</div>
16018
+ <div class="db-cluster" style="--db-cluster-justify: space-between">…</div>
16019
16019
 
16020
16020
  \3c !-- Looser gap for this instance -->
16021
- <div class="ds-cluster" style="--ds-cluster-gap: var(--db-spacing-sm)">…</div>
16021
+ <div class="db-cluster" style="--db-cluster-gap: var(--db-spacing-sm)">…</div>
16022
16022
  */
16023
- .ds-cluster {
16023
+ .db-cluster {
16024
16024
  /* These variables act as the *parameters* for the cluster instance. */
16025
- --ds-cluster-gap: var(--db-spacing-2xs);
16026
- --ds-cluster-align: center;
16027
- --ds-cluster-justify: flex-start;
16025
+ --db-cluster-gap: var(--db-spacing-2xs);
16026
+ --db-cluster-align: center;
16027
+ --db-cluster-justify: flex-start;
16028
16028
 
16029
16029
  display: flex;
16030
16030
  flex-wrap: wrap;
16031
- align-items: var(--ds-cluster-align);
16032
- justify-content: var(--ds-cluster-justify);
16033
- gap: var(--ds-cluster-gap);
16031
+ align-items: var(--db-cluster-align);
16032
+ justify-content: var(--db-cluster-justify);
16033
+ gap: var(--db-cluster-gap);
16034
16034
  }
16035
16035
 
16036
16036
  :where(:root), :where(.du-bois-light) {
@@ -16252,21 +16252,21 @@ span.du-bois-light-typography-ellipsis-single-line {
16252
16252
  *
16253
16253
  * Structure (assumed by the React component):
16254
16254
  *
16255
- * <label class="ds-checkbox">
16256
- * <input type="checkbox" class="ds-checkbox-input" />
16257
- * <span class="ds-checkbox-indicator"> ← border + fill react to state
16258
- * <svg class="ds-checkbox-checkmark" .../> ← visible when :checked
16259
- * <span class="ds-checkbox-dash" /> ← visible when :indeterminate
16255
+ * <label class="db-checkbox">
16256
+ * <input type="checkbox" class="db-checkbox-input" />
16257
+ * <span class="db-checkbox-indicator"> ← border + fill react to state
16258
+ * <svg class="db-checkbox-checkmark" .../> ← visible when :checked
16259
+ * <span class="db-checkbox-dash" /> ← visible when :indeterminate
16260
16260
  * </span>
16261
- * <span class="ds-checkbox-label">{children}</span>
16261
+ * <span class="db-checkbox-label">{children}</span>
16262
16262
  * </label>
16263
16263
  *
16264
- * State and hiding rules target `.ds-checkbox-input` — the checkbox's OWN input —
16264
+ * State and hiding rules target `.db-checkbox-input` — the checkbox's OWN input —
16265
16265
  * never a bare `input`: consumers may render an inline <input> (e.g. a number
16266
16266
  * field) inside the label children, and a descendant `input` selector would hide
16267
16267
  * / absolutely-position that field and mis-drive the `:has(…)` state rules. */
16268
16268
 
16269
- .ds-checkbox {
16269
+ .db-checkbox {
16270
16270
  /* `display: flex` (block-level), NOT `inline-flex`: an inline-flex root puts
16271
16271
  * the label inside an inline-line-box whose leading pushes block-level siblings
16272
16272
  * (e.g. `<FormMessage>`) down by a few pixels — making validation messages sit
@@ -16282,7 +16282,7 @@ span.du-bois-light-typography-ellipsis-single-line {
16282
16282
  user-select: none;
16283
16283
  /* No `gap` here — spacing between indicator and label, plus the trailing
16284
16284
  * whitespace that gives sibling checkboxes their visual separation, lives
16285
- * on `.ds-checkbox-label` as padding-inline. Matches AntD's `.{prefix}-checkbox + span`
16285
+ * on `.db-checkbox-label` as padding-inline. Matches AntD's `.{prefix}-checkbox + span`
16286
16286
  * rule and the prior Emotion-based NativeCheckbox implementation. */
16287
16287
  min-height: var(--db-line-height-base, 20px);
16288
16288
  width: fit-content;
@@ -16292,43 +16292,43 @@ span.du-bois-light-typography-ellipsis-single-line {
16292
16292
  * visually hidden (opacity:0), so an `input:hover` rule wouldn't be visible
16293
16293
  * anyway. Putting `:hover` on the root also makes the entire label area
16294
16294
  * — not just the indicator square — drive the visual feedback. */
16295
- .ds-checkbox:hover:has(.ds-checkbox-input:not(:disabled, :checked, :indeterminate)) .ds-checkbox-indicator {
16295
+ .db-checkbox:hover:has(.db-checkbox-input:not(:disabled, :checked, :indeterminate)) .db-checkbox-indicator {
16296
16296
  background-color: var(--db-checkbox-surface-hover);
16297
16297
  border-color: var(--db-checkbox-border-hover);
16298
16298
  }
16299
16299
 
16300
- .ds-checkbox:active:has(.ds-checkbox-input:not(:disabled, :checked, :indeterminate)) .ds-checkbox-indicator {
16300
+ .db-checkbox:active:has(.db-checkbox-input:not(:disabled, :checked, :indeterminate)) .db-checkbox-indicator {
16301
16301
  background-color: var(--db-checkbox-surface-press);
16302
16302
  border-color: var(--db-checkbox-border-press);
16303
16303
  }
16304
16304
 
16305
16305
  /* Selected fill — checked and indeterminate share the same surface. */
16306
- .ds-checkbox:has(.ds-checkbox-input:is(:checked, :indeterminate)) .ds-checkbox-indicator {
16306
+ .db-checkbox:has(.db-checkbox-input:is(:checked, :indeterminate)) .db-checkbox-indicator {
16307
16307
  background-color: var(--db-checkbox-surface-checked);
16308
16308
  border-color: var(--db-checkbox-surface-checked);
16309
16309
  }
16310
16310
 
16311
- .ds-checkbox:hover:has(.ds-checkbox-input:is(:checked, :indeterminate):not(:disabled)) .ds-checkbox-indicator {
16311
+ .db-checkbox:hover:has(.db-checkbox-input:is(:checked, :indeterminate):not(:disabled)) .db-checkbox-indicator {
16312
16312
  background-color: var(--db-checkbox-surface-checked-hover);
16313
16313
  border-color: var(--db-checkbox-surface-checked-hover);
16314
16314
  }
16315
16315
 
16316
- .ds-checkbox:active:has(.ds-checkbox-input:is(:checked, :indeterminate):not(:disabled)) .ds-checkbox-indicator {
16316
+ .db-checkbox:active:has(.db-checkbox-input:is(:checked, :indeterminate):not(:disabled)) .db-checkbox-indicator {
16317
16317
  background-color: var(--db-checkbox-surface-checked-press);
16318
16318
  border-color: var(--db-checkbox-surface-checked-press);
16319
16319
  }
16320
16320
 
16321
16321
  /* Mark visibility. */
16322
- .ds-checkbox:has(.ds-checkbox-input:checked) .ds-checkbox-checkmark {
16322
+ .db-checkbox:has(.db-checkbox-input:checked) .db-checkbox-checkmark {
16323
16323
  opacity: 1;
16324
16324
  }
16325
16325
 
16326
- .ds-checkbox:has(.ds-checkbox-input:indeterminate) .ds-checkbox-dash {
16326
+ .db-checkbox:has(.db-checkbox-input:indeterminate) .db-checkbox-dash {
16327
16327
  opacity: 1;
16328
16328
  }
16329
16329
 
16330
16330
  /* Focus-visible (keyboard only). */
16331
- .ds-checkbox:has(.ds-checkbox-input:focus-visible) .ds-checkbox-indicator {
16331
+ .db-checkbox:has(.db-checkbox-input:focus-visible) .db-checkbox-indicator {
16332
16332
  outline: var(--db-checkbox-focus-ring-width) solid var(--db-checkbox-focus-ring);
16333
16333
  outline-offset: 4px;
16334
16334
  }
@@ -16336,25 +16336,25 @@ span.du-bois-light-typography-ellipsis-single-line {
16336
16336
  /* Disabled (covers unchecked, checked, indeterminate). Sourced from
16337
16337
  * `input:disabled` so the standalone-disabled and group-disabled paths both
16338
16338
  * land here without needing a separate root modifier class. */
16339
- .ds-checkbox:has(.ds-checkbox-input:disabled) {
16339
+ .db-checkbox:has(.db-checkbox-input:disabled) {
16340
16340
  cursor: not-allowed;
16341
16341
  }
16342
16342
 
16343
- .ds-checkbox:has(.ds-checkbox-input:disabled) .ds-checkbox-label {
16343
+ .db-checkbox:has(.db-checkbox-input:disabled) .db-checkbox-label {
16344
16344
  color: var(--db-checkbox-text-disabled);
16345
16345
  }
16346
16346
 
16347
- .ds-checkbox:has(.ds-checkbox-input:disabled) .ds-checkbox-indicator {
16347
+ .db-checkbox:has(.db-checkbox-input:disabled) .db-checkbox-indicator {
16348
16348
  background-color: var(--db-checkbox-surface-disabled);
16349
16349
  border-color: var(--db-checkbox-border-disabled);
16350
16350
  box-shadow: none;
16351
16351
  }
16352
16352
 
16353
- .ds-checkbox:has(.ds-checkbox-input:disabled) .ds-checkbox-checkmark {
16353
+ .db-checkbox:has(.db-checkbox-input:disabled) .db-checkbox-checkmark {
16354
16354
  color: var(--db-checkbox-mark-disabled);
16355
16355
  }
16356
16356
 
16357
- .ds-checkbox:has(.ds-checkbox-input:disabled) .ds-checkbox-dash {
16357
+ .db-checkbox:has(.db-checkbox-input:disabled) .db-checkbox-dash {
16358
16358
  background-color: var(--db-checkbox-mark-disabled);
16359
16359
  }
16360
16360
 
@@ -16367,7 +16367,7 @@ span.du-bois-light-typography-ellipsis-single-line {
16367
16367
  * `pointer-events: none` (the prior native-only behavior) is what regressed
16368
16368
  * interaction tests vs. the AntD variant. `cursor: inherit` tracks the label's
16369
16369
  * pointer / disabled `not-allowed` cursor so the box keeps AntD's cursor too. */
16370
- .ds-checkbox .ds-checkbox-input {
16370
+ .db-checkbox .db-checkbox-input {
16371
16371
  position: absolute;
16372
16372
  inset: 0;
16373
16373
  inline-size: var(--db-checkbox-size);
@@ -16381,7 +16381,7 @@ span.du-bois-light-typography-ellipsis-single-line {
16381
16381
  * Vertical math: aligns the indicator to the cap-height of the first text
16382
16382
  * line so checkbox + label sit on the same visual baseline even when the
16383
16383
  * label wraps. */
16384
- .ds-checkbox .ds-checkbox-indicator {
16384
+ .db-checkbox .db-checkbox-indicator {
16385
16385
  display: grid;
16386
16386
  place-items: center;
16387
16387
  flex-shrink: 0;
@@ -16404,7 +16404,7 @@ span.du-bois-light-typography-ellipsis-single-line {
16404
16404
  box-shadow var(--db-checkbox-transition-duration) ease;
16405
16405
  }
16406
16406
 
16407
- .ds-checkbox .ds-checkbox-indicator > .ds-checkbox-checkmark {
16407
+ .db-checkbox .db-checkbox-indicator > .db-checkbox-checkmark {
16408
16408
  grid-area: 1 / 1;
16409
16409
  inline-size: 100%;
16410
16410
  block-size: 100%;
@@ -16413,7 +16413,7 @@ span.du-bois-light-typography-ellipsis-single-line {
16413
16413
  transition: opacity var(--db-checkbox-transition-duration) ease;
16414
16414
  }
16415
16415
 
16416
- .ds-checkbox .ds-checkbox-indicator > .ds-checkbox-checkmark path {
16416
+ .db-checkbox .db-checkbox-indicator > .db-checkbox-checkmark path {
16417
16417
  fill: none;
16418
16418
  stroke: currentColor;
16419
16419
  stroke-width: 2;
@@ -16421,7 +16421,7 @@ span.du-bois-light-typography-ellipsis-single-line {
16421
16421
  stroke-linejoin: round;
16422
16422
  }
16423
16423
 
16424
- .ds-checkbox .ds-checkbox-indicator > .ds-checkbox-dash {
16424
+ .db-checkbox .db-checkbox-indicator > .db-checkbox-dash {
16425
16425
  grid-area: 1 / 1;
16426
16426
  inline-size: var(--db-checkbox-indeterminate-mark-width);
16427
16427
  block-size: var(--db-checkbox-indeterminate-mark-height);
@@ -16438,7 +16438,7 @@ span.du-bois-light-typography-ellipsis-single-line {
16438
16438
  * `padding-right` extends the checkbox's bounding box so adjacent checkboxes in a
16439
16439
  * flex row sit ~16px apart (8px trailing + 8px group `gap`) — same visual rhythm
16440
16440
  * as the AntD variant. */
16441
- .ds-checkbox .ds-checkbox-label {
16441
+ .db-checkbox .db-checkbox-label {
16442
16442
  color: var(--db-checkbox-text);
16443
16443
  padding-inline: var(--db-checkbox-label-spacing);
16444
16444
  word-break: break-word;
@@ -16451,7 +16451,7 @@ span.du-bois-light-typography-ellipsis-single-line {
16451
16451
  *
16452
16452
  * Each helper-text class is listed once per theme (`du-bois-light-*` /
16453
16453
  * `du-bois-dark-*`). The selectors deliberately repeat the root/group class
16454
- * (`.ds-checkbox.ds-checkbox`) to push specificity to (0,3,0). That
16454
+ * (`.db-checkbox.db-checkbox`) to push specificity to (0,3,0). That
16455
16455
  * overrides `FormMessage`'s own `&&`-doubled `margin-top: 8px` declared with
16456
16456
  * Emotion at runtime — without doubling we'd lose on the specificity tie and
16457
16457
  * the validation message would keep an 8px gap below the checkbox. */
@@ -16459,12 +16459,12 @@ span.du-bois-light-typography-ellipsis-single-line {
16459
16459
  /* Single checkbox followed by Hint and/or FormMessage. Indents the helper text
16460
16460
  * by 24px so it aligns with the start of the label, and removes the default
16461
16461
  * vertical margin Hint/FormMessage carry. */
16462
- .ds-checkbox.ds-checkbox + .du-bois-light-hint,
16463
- .ds-checkbox.ds-checkbox + .du-bois-dark-hint,
16464
- .ds-checkbox.ds-checkbox + .du-bois-light-form-message,
16465
- .ds-checkbox.ds-checkbox + .du-bois-dark-form-message,
16466
- .ds-checkbox.ds-checkbox + .du-bois-light-hint + .du-bois-light-form-message,
16467
- .ds-checkbox.ds-checkbox + .du-bois-dark-hint + .du-bois-dark-form-message {
16462
+ .db-checkbox.db-checkbox + .du-bois-light-hint,
16463
+ .db-checkbox.db-checkbox + .du-bois-dark-hint,
16464
+ .db-checkbox.db-checkbox + .du-bois-light-form-message,
16465
+ .db-checkbox.db-checkbox + .du-bois-dark-form-message,
16466
+ .db-checkbox.db-checkbox + .du-bois-light-hint + .du-bois-light-form-message,
16467
+ .db-checkbox.db-checkbox + .du-bois-dark-hint + .du-bois-dark-form-message {
16468
16468
  padding-left: var(--db-spacing-sm);
16469
16469
  margin-top: 0;
16470
16470
  }
@@ -16472,33 +16472,33 @@ span.du-bois-light-typography-ellipsis-single-line {
16472
16472
  /* Group spacing against sibling form text — 8px gap above the group when it
16473
16473
  * follows a Hint, 8px gap above a FormMessage when it follows the group.
16474
16474
  * Doubled class on the group side beats FormMessage's `&&` for the same reason. */
16475
- .du-bois-light-hint + .ds-checkbox-group.ds-checkbox-group,
16476
- .du-bois-dark-hint + .ds-checkbox-group.ds-checkbox-group,
16477
- .ds-checkbox-group.ds-checkbox-group + .du-bois-light-form-message,
16478
- .ds-checkbox-group.ds-checkbox-group + .du-bois-dark-form-message {
16475
+ .du-bois-light-hint + .db-checkbox-group.db-checkbox-group,
16476
+ .du-bois-dark-hint + .db-checkbox-group.db-checkbox-group,
16477
+ .db-checkbox-group.db-checkbox-group + .du-bois-light-form-message,
16478
+ .db-checkbox-group.db-checkbox-group + .du-bois-dark-form-message {
16479
16479
  margin-top: var(--db-spacing-2xs);
16480
16480
  }
16481
16481
 
16482
- /* CheckboxGroup layout. Vertical delegates to the `.ds-stack` primitive; the
16482
+ /* CheckboxGroup layout. Vertical delegates to the `.db-stack` primitive; the
16483
16483
  * horizontal default stays bespoke because it must NOT wrap (a long row of
16484
16484
  * checkboxes overflows horizontally rather than reflowing onto multiple lines),
16485
- * which is the one thing `.ds-cluster` won't do. Both wire their gap to the
16485
+ * which is the one thing `.db-cluster` won't do. Both wire their gap to the
16486
16486
  * checkbox spacing token so a retheme moves with the rest of the component. */
16487
- .ds-checkbox-group {
16487
+ .db-checkbox-group {
16488
16488
  display: flex;
16489
16489
  }
16490
16490
 
16491
- /* Horizontal (default): single non-wrapping row. `:not(.ds-stack)` keeps this
16491
+ /* Horizontal (default): single non-wrapping row. `:not(.db-stack)` keeps this
16492
16492
  * off the vertical element so it never fights the stack primitive's gap. */
16493
- .ds-checkbox-group:not(.ds-stack) {
16493
+ .db-checkbox-group:not(.db-stack) {
16494
16494
  flex-wrap: nowrap;
16495
16495
  column-gap: var(--db-checkbox-label-spacing);
16496
16496
  row-gap: 0;
16497
16497
  }
16498
16498
 
16499
- /* Vertical: .ds-stack supplies flex-direction + gap; we only retarget the knob. */
16500
- .ds-checkbox-group.ds-stack {
16501
- --ds-stack-gap: var(--db-checkbox-label-spacing);
16499
+ /* Vertical: .db-stack supplies flex-direction + gap; we only retarget the knob. */
16500
+ .db-checkbox-group.db-stack {
16501
+ --db-stack-gap: var(--db-checkbox-label-spacing);
16502
16502
  }
16503
16503
 
16504
16504
  :where(:root), :where(.du-bois-light) {
@@ -16547,12 +16547,12 @@ span.du-bois-light-typography-ellipsis-single-line {
16547
16547
  *
16548
16548
  * Structure (assumed by the React component):
16549
16549
  *
16550
- * <label class="ds-radio">
16550
+ * <label class="db-radio">
16551
16551
  * <input type="radio" />
16552
- * <span class="ds-radio-indicator"> ← circle border + fill react to state
16553
- * <span class="ds-radio-dot" /> ← visible when :checked
16552
+ * <span class="db-radio-indicator"> ← circle border + fill react to state
16553
+ * <span class="db-radio-dot" /> ← visible when :checked
16554
16554
  * </span>
16555
- * <span class="ds-radio-label">{children}</span>
16555
+ * <span class="db-radio-label">{children}</span>
16556
16556
  * </label>
16557
16557
  *
16558
16558
  * The root only ever has one <input> descendant, so a bare `input` selector is
@@ -16561,9 +16561,9 @@ span.du-bois-light-typography-ellipsis-single-line {
16561
16561
  * checkmark/dash, and there is no indeterminate state.
16562
16562
  *
16563
16563
  * TODO(DUBOIS-452): the indicator/dot state styles below are identical to
16564
- * NativeCheckbox.css — consolidate them into a shared `.ds-selection-toggle` class. */
16564
+ * NativeCheckbox.css — consolidate them into a shared `.db-selection-toggle` class. */
16565
16565
 
16566
- .ds-radio {
16566
+ .db-radio {
16567
16567
  /* `display: flex` (block-level), NOT `inline-flex`: see NativeCheckbox.css for
16568
16568
  * the line-box / sibling-spacing rationale. */
16569
16569
  display: flex;
@@ -16578,38 +16578,38 @@ span.du-bois-light-typography-ellipsis-single-line {
16578
16578
  /* Hover/press live on the root (label), not on the input: the input is
16579
16579
  * visually hidden (opacity:0), so an `input:hover` rule wouldn't be visible
16580
16580
  * anyway, and the whole label area should drive the feedback. */
16581
- .ds-radio:hover:has(input:not(:disabled, :checked)) .ds-radio-indicator {
16581
+ .db-radio:hover:has(input:not(:disabled, :checked)) .db-radio-indicator {
16582
16582
  background-color: var(--db-radio-surface-hover);
16583
16583
  border-color: var(--db-radio-border-hover);
16584
16584
  }
16585
16585
 
16586
- .ds-radio:active:has(input:not(:disabled, :checked)) .ds-radio-indicator {
16586
+ .db-radio:active:has(input:not(:disabled, :checked)) .db-radio-indicator {
16587
16587
  background-color: var(--db-radio-surface-press);
16588
16588
  border-color: var(--db-radio-border-press);
16589
16589
  }
16590
16590
 
16591
16591
  /* Selected fill. */
16592
- .ds-radio:has(input:checked) .ds-radio-indicator {
16592
+ .db-radio:has(input:checked) .db-radio-indicator {
16593
16593
  background-color: var(--db-radio-surface-checked);
16594
16594
  border-color: var(--db-radio-surface-checked);
16595
16595
  }
16596
16596
 
16597
16597
  /* AntD getRadioInputStyles checked hover: background = actionPrimaryBackgroundHover,
16598
16598
  * borderColor = actionPrimaryBackgroundPress (a darker ring than the fill). */
16599
- .ds-radio:hover:has(input:checked:not(:disabled)) .ds-radio-indicator {
16599
+ .db-radio:hover:has(input:checked:not(:disabled)) .db-radio-indicator {
16600
16600
  background-color: var(--db-radio-surface-checked-hover);
16601
16601
  border-color: var(--db-radio-border-checked-hover);
16602
16602
  }
16603
16603
 
16604
16604
  /* AntD getRadioInputStyles checked active: background = actionDefaultBackgroundPress,
16605
16605
  * borderColor = actionDefaultBorderPress (two-tone, not flat). */
16606
- .ds-radio:active:has(input:checked:not(:disabled)) .ds-radio-indicator {
16606
+ .db-radio:active:has(input:checked:not(:disabled)) .db-radio-indicator {
16607
16607
  background-color: var(--db-radio-surface-checked-press);
16608
16608
  border-color: var(--db-radio-border-checked-press);
16609
16609
  }
16610
16610
 
16611
16611
  /* Dot visibility. */
16612
- .ds-radio:has(input:checked) .ds-radio-dot {
16612
+ .db-radio:has(input:checked) .db-radio-dot {
16613
16613
  opacity: 1;
16614
16614
  }
16615
16615
 
@@ -16618,14 +16618,14 @@ span.du-bois-light-typography-ellipsis-single-line {
16618
16618
  *
16619
16619
  * UNCHECKED focus (AntD `&:not(disabled) > input:focus + inner`): only the border
16620
16620
  * color changes to actionPrimaryBackgroundDefault — NO outline ring. */
16621
- .ds-radio:has(input:focus-visible:not(:checked)) .ds-radio-indicator {
16621
+ .db-radio:has(input:focus-visible:not(:checked)) .db-radio-indicator {
16622
16622
  border-color: var(--db-radio-border-unchecked-focus);
16623
16623
  }
16624
16624
 
16625
16625
  /* CHECKED focus-visible (AntD `&.checked &:not(disabled) > input:focus-visible + inner`):
16626
16626
  * background = actionPrimaryBackgroundDefault, borderColor = actionDefaultBorderFocus,
16627
16627
  * outline = 1px solid actionPrimaryBackgroundDefault, outlineOffset = 1. */
16628
- .ds-radio:has(input:focus-visible:checked) .ds-radio-indicator {
16628
+ .db-radio:has(input:focus-visible:checked) .db-radio-indicator {
16629
16629
  background-color: var(--db-radio-surface-checked);
16630
16630
  border-color: var(--db-radio-border-focus);
16631
16631
  outline: 1px solid var(--db-radio-outline-checked-focus);
@@ -16634,21 +16634,21 @@ span.du-bois-light-typography-ellipsis-single-line {
16634
16634
 
16635
16635
  /* Disabled (covers checked and unchecked). Sourced from `input:disabled` so the
16636
16636
  * standalone-disabled and group-disabled paths both land here. */
16637
- .ds-radio:has(input:disabled) {
16637
+ .db-radio:has(input:disabled) {
16638
16638
  cursor: not-allowed;
16639
16639
  }
16640
16640
 
16641
- .ds-radio:has(input:disabled) .ds-radio-label {
16641
+ .db-radio:has(input:disabled) .db-radio-label {
16642
16642
  color: var(--db-radio-text-disabled);
16643
16643
  }
16644
16644
 
16645
- .ds-radio:has(input:disabled) .ds-radio-indicator {
16645
+ .db-radio:has(input:disabled) .db-radio-indicator {
16646
16646
  background-color: var(--db-radio-surface-disabled);
16647
16647
  border-color: var(--db-radio-border-disabled);
16648
16648
  box-shadow: none;
16649
16649
  }
16650
16650
 
16651
- .ds-radio:has(input:disabled) .ds-radio-dot {
16651
+ .db-radio:has(input:disabled) .db-radio-dot {
16652
16652
  background-color: var(--db-radio-mark-disabled);
16653
16653
  }
16654
16654
 
@@ -16661,7 +16661,7 @@ span.du-bois-light-typography-ellipsis-single-line {
16661
16661
  * `pointer-events: none` (the prior native-only behavior) is what regressed
16662
16662
  * interaction tests vs. the AntD variant. `cursor: inherit` tracks the label's
16663
16663
  * pointer / disabled `not-allowed` cursor so the circle keeps AntD's cursor too. */
16664
- .ds-radio input {
16664
+ .db-radio input {
16665
16665
  position: absolute;
16666
16666
  inset: 0;
16667
16667
  inline-size: var(--db-radio-size);
@@ -16674,7 +16674,7 @@ span.du-bois-light-typography-ellipsis-single-line {
16674
16674
  /* Indicator — circle with the border/fill that responds to state above.
16675
16675
  * Vertical math aligns the indicator to the cap-height of the first text line
16676
16676
  * so radio + label sit on the same visual baseline even when the label wraps. */
16677
- .ds-radio .ds-radio-indicator {
16677
+ .db-radio .db-radio-indicator {
16678
16678
  display: grid;
16679
16679
  place-items: center;
16680
16680
  flex-shrink: 0;
@@ -16696,7 +16696,7 @@ span.du-bois-light-typography-ellipsis-single-line {
16696
16696
  box-shadow var(--db-radio-transition-duration) ease;
16697
16697
  }
16698
16698
 
16699
- .ds-radio .ds-radio-indicator > .ds-radio-dot {
16699
+ .db-radio .db-radio-indicator > .db-radio-dot {
16700
16700
  grid-area: 1 / 1;
16701
16701
  inline-size: var(--db-radio-mark-size);
16702
16702
  block-size: var(--db-radio-mark-size);
@@ -16709,15 +16709,15 @@ span.du-bois-light-typography-ellipsis-single-line {
16709
16709
  /* Honour the user's reduced-motion preference: drop the state-change
16710
16710
  * transitions on the indicator and dot so checking/hovering is instant. */
16711
16711
  @media (prefers-reduced-motion: reduce) {
16712
- .ds-radio .ds-radio-indicator,
16713
- .ds-radio .ds-radio-indicator > .ds-radio-dot {
16712
+ .db-radio .db-radio-indicator,
16713
+ .db-radio .db-radio-indicator > .db-radio-dot {
16714
16714
  transition: none;
16715
16715
  }
16716
16716
  }
16717
16717
 
16718
16718
  /* Padding-inline replicates the AntD `.{prefix} + span` label gap and the
16719
16719
  * trailing whitespace that separates adjacent radios in a row. */
16720
- .ds-radio .ds-radio-label {
16720
+ .db-radio .db-radio-label {
16721
16721
  color: var(--db-radio-text);
16722
16722
  padding-inline: var(--db-radio-label-spacing);
16723
16723
  word-break: break-word;
@@ -16727,12 +16727,12 @@ span.du-bois-light-typography-ellipsis-single-line {
16727
16727
  * indent comes from AntD's getCommonRadioGroupStyles (`& > label + hint`) and applies
16728
16728
  * to BOTH layouts. The doubled root class pushes specificity to (0,3,0) to beat
16729
16729
  * FormMessage's runtime `&&` margin. */
16730
- .ds-radio.ds-radio + .du-bois-light-hint,
16731
- .ds-radio.ds-radio + .du-bois-dark-hint,
16732
- .ds-radio.ds-radio + .du-bois-light-form-message,
16733
- .ds-radio.ds-radio + .du-bois-dark-form-message,
16734
- .ds-radio.ds-radio + .du-bois-light-hint + .du-bois-light-form-message,
16735
- .ds-radio.ds-radio + .du-bois-dark-hint + .du-bois-dark-form-message {
16730
+ .db-radio.db-radio + .du-bois-light-hint,
16731
+ .db-radio.db-radio + .du-bois-dark-hint,
16732
+ .db-radio.db-radio + .du-bois-light-form-message,
16733
+ .db-radio.db-radio + .du-bois-dark-form-message,
16734
+ .db-radio.db-radio + .du-bois-light-hint + .du-bois-light-form-message,
16735
+ .db-radio.db-radio + .du-bois-dark-hint + .du-bois-dark-form-message {
16736
16736
  padding-inline-start: var(--db-spacing-sm);
16737
16737
  margin-top: 0;
16738
16738
  }
@@ -16741,70 +16741,70 @@ span.du-bois-light-typography-ellipsis-single-line {
16741
16741
  * after a radio gets `marginTop: -sm` (cancels the preceding radio's
16742
16742
  * `paddingBottom: sm` so the hint tucks directly under its label) and
16743
16743
  * `marginBottom: sm` (gap before the next radio). The negative top margin relies on
16744
- * the .ds-stack gap being 0 (set below). Scoped to .ds-stack so it never perturbs
16744
+ * the .db-stack gap being 0 (set below). Scoped to .db-stack so it never perturbs
16745
16745
  * the horizontal grid, where hints are positioned by grid-row instead. */
16746
- .ds-radio-group.ds-stack > .ds-radio.ds-radio + .du-bois-light-hint,
16747
- .ds-radio-group.ds-stack > .ds-radio.ds-radio + .du-bois-dark-hint,
16748
- .ds-radio-group.ds-stack > .ds-radio.ds-radio + .du-bois-light-form-message,
16749
- .ds-radio-group.ds-stack > .ds-radio.ds-radio + .du-bois-dark-form-message,
16750
- .ds-radio-group.ds-stack > .ds-radio.ds-radio + .du-bois-light-hint + .du-bois-light-form-message,
16751
- .ds-radio-group.ds-stack > .ds-radio.ds-radio + .du-bois-dark-hint + .du-bois-dark-form-message {
16746
+ .db-radio-group.db-stack > .db-radio.db-radio + .du-bois-light-hint,
16747
+ .db-radio-group.db-stack > .db-radio.db-radio + .du-bois-dark-hint,
16748
+ .db-radio-group.db-stack > .db-radio.db-radio + .du-bois-light-form-message,
16749
+ .db-radio-group.db-stack > .db-radio.db-radio + .du-bois-dark-form-message,
16750
+ .db-radio-group.db-stack > .db-radio.db-radio + .du-bois-light-hint + .du-bois-light-form-message,
16751
+ .db-radio-group.db-stack > .db-radio.db-radio + .du-bois-dark-hint + .du-bois-dark-form-message {
16752
16752
  margin-top: calc(-1 * var(--db-spacing-2xs));
16753
16753
  margin-bottom: var(--db-spacing-2xs);
16754
16754
  }
16755
16755
 
16756
16756
  /* AntD `& > label:last-of-type + hint { marginTop: 0 }`: the last radio has no
16757
16757
  * `paddingBottom` to cancel, so its trailing hint keeps its natural top position. */
16758
- .ds-radio-group.ds-stack > .ds-radio.ds-radio:last-of-type + .du-bois-light-hint,
16759
- .ds-radio-group.ds-stack > .ds-radio.ds-radio:last-of-type + .du-bois-dark-hint,
16760
- .ds-radio-group.ds-stack > .ds-radio.ds-radio:last-of-type + .du-bois-light-form-message,
16761
- .ds-radio-group.ds-stack > .ds-radio.ds-radio:last-of-type + .du-bois-dark-form-message,
16762
- .ds-radio-group.ds-stack > .ds-radio.ds-radio:last-of-type + .du-bois-light-hint + .du-bois-light-form-message,
16763
- .ds-radio-group.ds-stack > .ds-radio.ds-radio:last-of-type + .du-bois-dark-hint + .du-bois-dark-form-message {
16758
+ .db-radio-group.db-stack > .db-radio.db-radio:last-of-type + .du-bois-light-hint,
16759
+ .db-radio-group.db-stack > .db-radio.db-radio:last-of-type + .du-bois-dark-hint,
16760
+ .db-radio-group.db-stack > .db-radio.db-radio:last-of-type + .du-bois-light-form-message,
16761
+ .db-radio-group.db-stack > .db-radio.db-radio:last-of-type + .du-bois-dark-form-message,
16762
+ .db-radio-group.db-stack > .db-radio.db-radio:last-of-type + .du-bois-light-hint + .du-bois-light-form-message,
16763
+ .db-radio-group.db-stack > .db-radio.db-radio:last-of-type + .du-bois-dark-hint + .du-bois-dark-form-message {
16764
16764
  margin-top: 0;
16765
16765
  }
16766
16766
 
16767
- .du-bois-light-hint + .ds-radio-group.ds-radio-group,
16768
- .du-bois-dark-hint + .ds-radio-group.ds-radio-group,
16769
- .ds-radio-group.ds-radio-group + .du-bois-light-form-message,
16770
- .ds-radio-group.ds-radio-group + .du-bois-dark-form-message {
16767
+ .du-bois-light-hint + .db-radio-group.db-radio-group,
16768
+ .du-bois-dark-hint + .db-radio-group.db-radio-group,
16769
+ .db-radio-group.db-radio-group + .du-bois-light-form-message,
16770
+ .db-radio-group.db-radio-group + .du-bois-dark-form-message {
16771
16771
  margin-top: var(--db-spacing-2xs);
16772
16772
  }
16773
16773
 
16774
16774
  /* RadioGroup layout. Vertical (the default) delegates flex-direction to the
16775
- * .ds-stack primitive; horizontal is a two-row grid (mirroring AntD). */
16776
- .ds-radio-group {
16775
+ * .db-stack primitive; horizontal is a two-row grid (mirroring AntD). */
16776
+ .db-radio-group {
16777
16777
  display: flex;
16778
16778
  }
16779
16779
 
16780
- /* Vertical: .ds-stack supplies flex-direction: column. AntD's vertical helper
16780
+ /* Vertical: .db-stack supplies flex-direction: column. AntD's vertical helper
16781
16781
  * (getVerticalRadioGroupStyles) produces its item rhythm purely from
16782
16782
  * `& > label { paddingBottom: sm }` plus the negative-margin hint trick above — it
16783
16783
  * uses NO flex gap. The negative `marginTop` on hints only works if the stack adds
16784
16784
  * no gap of its own, so we zero out the gap and reproduce the rhythm via
16785
16785
  * padding-bottom on each radio. */
16786
- .ds-radio-group.ds-stack {
16787
- --ds-stack-gap: 0;
16786
+ .db-radio-group.db-stack {
16787
+ --db-stack-gap: 0;
16788
16788
  }
16789
16789
 
16790
16790
  /* AntD `& > label { paddingBottom: sm }`. */
16791
- .ds-radio-group.ds-stack > .ds-radio {
16791
+ .db-radio-group.db-stack > .db-radio {
16792
16792
  padding-bottom: var(--db-spacing-2xs);
16793
16793
  }
16794
16794
 
16795
16795
  /* AntD `& > label:last-of-type { paddingBottom: 0 }`. */
16796
- .ds-radio-group.ds-stack > .ds-radio:last-of-type {
16796
+ .db-radio-group.db-stack > .db-radio:last-of-type {
16797
16797
  padding-bottom: 0;
16798
16798
  }
16799
16799
 
16800
16800
  /* AntD getVerticalRadioGroupStyles `.${prefix}-radio-tile + .${prefix}-radio-tile {
16801
- * marginTop: md }`: RadioTiles are not matched by the `.ds-radio` padding-bottom
16801
+ * marginTop: md }`: RadioTiles are not matched by the `.db-radio` padding-bottom
16802
16802
  * rhythm above (the tile's own class is du-bois-{light,dark}-radio-tile), so space
16803
- * consecutive tiles explicitly. The .ds-stack gap is 0, so this margin is the spacing. */
16804
- .ds-radio-group.ds-stack > .du-bois-light-radio-tile + .du-bois-light-radio-tile,
16805
- .ds-radio-group.ds-stack > .du-bois-light-radio-tile + .du-bois-dark-radio-tile,
16806
- .ds-radio-group.ds-stack > .du-bois-dark-radio-tile + .du-bois-light-radio-tile,
16807
- .ds-radio-group.ds-stack > .du-bois-dark-radio-tile + .du-bois-dark-radio-tile {
16803
+ * consecutive tiles explicitly. The .db-stack gap is 0, so this margin is the spacing. */
16804
+ .db-radio-group.db-stack > .du-bois-light-radio-tile + .du-bois-light-radio-tile,
16805
+ .db-radio-group.db-stack > .du-bois-light-radio-tile + .du-bois-dark-radio-tile,
16806
+ .db-radio-group.db-stack > .du-bois-dark-radio-tile + .du-bois-light-radio-tile,
16807
+ .db-radio-group.db-stack > .du-bois-dark-radio-tile + .du-bois-dark-radio-tile {
16808
16808
  margin-top: var(--db-spacing-xs);
16809
16809
  }
16810
16810
 
@@ -16814,7 +16814,7 @@ span.du-bois-light-typography-ellipsis-single-line {
16814
16814
  * group class here matches that.
16815
16815
  * AntD: `display: grid; gridTemplateRows: [label] auto [hint] auto;
16816
16816
  * gridAutoColumns: max-content; gridColumnGap: md`. */
16817
- .ds-radio-group--horizontal.ds-radio-group--horizontal {
16817
+ .db-radio-group--horizontal.db-radio-group--horizontal {
16818
16818
  display: grid;
16819
16819
  grid-template-rows: [label] auto [hint] auto;
16820
16820
  grid-auto-columns: max-content;
@@ -16822,42 +16822,42 @@ span.du-bois-light-typography-ellipsis-single-line {
16822
16822
  }
16823
16823
 
16824
16824
  /* Equal column widths: AntD `gridAutoColumns: minmax(0, 1fr)`. */
16825
- .ds-radio-group--horizontal.ds-radio-group--equal-width {
16825
+ .db-radio-group--horizontal.db-radio-group--equal-width {
16826
16826
  grid-auto-columns: minmax(0, 1fr);
16827
16827
  }
16828
16828
 
16829
16829
  /* AntD `& > label, & > .${prefix}-radio-tile { gridRow: label / label; marginRight: 0 }`:
16830
16830
  * every radio (and every RadioTile button, whose own class is
16831
- * du-bois-{light,dark}-radio-tile and is NOT matched by `> .ds-radio`) lives in the
16831
+ * du-bois-{light,dark}-radio-tile and is NOT matched by `> .db-radio`) lives in the
16832
16832
  * label row. grid-auto-flow defaults to row, so successive items advance the implicit
16833
16833
  * column. */
16834
- .ds-radio-group--horizontal > .ds-radio,
16835
- .ds-radio-group--horizontal > .du-bois-light-radio-tile,
16836
- .ds-radio-group--horizontal > .du-bois-dark-radio-tile {
16834
+ .db-radio-group--horizontal > .db-radio,
16835
+ .db-radio-group--horizontal > .du-bois-light-radio-tile,
16836
+ .db-radio-group--horizontal > .du-bois-dark-radio-tile {
16837
16837
  grid-row: label / label;
16838
16838
  margin-inline-end: 0;
16839
16839
  }
16840
16840
 
16841
16841
  /* AntD `& > label + hint { display: inline-block; gridRow: hint / hint }`: a hint
16842
16842
  * following a radio drops into the hint row of the column its radio occupies. The
16843
- * vertical negative-margin rules are scoped to .ds-stack, so nothing to reset here. */
16844
- .ds-radio-group--horizontal > .du-bois-light-hint,
16845
- .ds-radio-group--horizontal > .du-bois-dark-hint {
16843
+ * vertical negative-margin rules are scoped to .db-stack, so nothing to reset here. */
16844
+ .db-radio-group--horizontal > .du-bois-light-hint,
16845
+ .db-radio-group--horizontal > .du-bois-dark-hint {
16846
16846
  display: inline-block;
16847
16847
  grid-row: hint / hint;
16848
16848
  }
16849
16849
 
16850
16850
  /* AntD `:has(> hint) { marginTop: sm }`: when the horizontal group contains a hint,
16851
16851
  * the group itself gets a top margin (room above the two-row grid). */
16852
- .ds-radio-group--horizontal:has(> .du-bois-light-hint),
16853
- .ds-radio-group--horizontal:has(> .du-bois-dark-hint) {
16852
+ .db-radio-group--horizontal:has(> .du-bois-light-hint),
16853
+ .db-radio-group--horizontal:has(> .du-bois-dark-hint) {
16854
16854
  margin-top: var(--db-spacing-2xs);
16855
16855
  }
16856
16856
 
16857
16857
  /* AntD `&& + form-message { marginTop: sm }` (horizontal): a form-message following
16858
16858
  * the whole group is separated by sm. */
16859
- .ds-radio-group--horizontal + .du-bois-light-form-message,
16860
- .ds-radio-group--horizontal + .du-bois-dark-form-message {
16859
+ .db-radio-group--horizontal + .du-bois-light-form-message,
16860
+ .db-radio-group--horizontal + .du-bois-dark-form-message {
16861
16861
  margin-top: var(--db-spacing-2xs);
16862
16862
  }
16863
16863
 
@@ -16900,7 +16900,7 @@ span.du-bois-light-typography-ellipsis-single-line {
16900
16900
  --db-switch-transition-duration: var(--db-selection-toggle-transition-duration);
16901
16901
  }
16902
16902
 
16903
- .ds-switch {
16903
+ .db-switch {
16904
16904
  /* flex, not inline-flex: an inline-flex root's line-box leading pushes block siblings
16905
16905
  * (e.g. a following FormMessage) down a few px, breaking the form-flow spacing. */
16906
16906
  display: flex;
@@ -16911,12 +16911,12 @@ span.du-bois-light-typography-ellipsis-single-line {
16911
16911
  margin-inline-end: var(--db-switch-label-spacing);
16912
16912
  }
16913
16913
 
16914
- .ds-switch:has(input:disabled) {
16914
+ .db-switch:has(input:disabled) {
16915
16915
  cursor: not-allowed;
16916
16916
  }
16917
16917
 
16918
16918
  /* The track. `appearance: none` strips the native checkbox rendering so the input itself can be styled. */
16919
- .ds-switch input {
16919
+ .db-switch input {
16920
16920
  appearance: none;
16921
16921
  position: relative;
16922
16922
  flex-shrink: 0;
@@ -16935,7 +16935,7 @@ span.du-bois-light-typography-ellipsis-single-line {
16935
16935
 
16936
16936
  /* The thumb. A pseudo-element keeps the input the switch's only element, so nothing can overlay it
16937
16937
  * and intercept clicks. Offset left by the border width to sit flush with the track's outer edge. */
16938
- .ds-switch input::before {
16938
+ .db-switch input::before {
16939
16939
  content: '';
16940
16940
  position: absolute;
16941
16941
  top: 50%;
@@ -16952,32 +16952,32 @@ span.du-bois-light-typography-ellipsis-single-line {
16952
16952
  }
16953
16953
 
16954
16954
  /* `<label for>` propagates `:hover` to the input, so scope hover/press to the control, not `input:hover`. */
16955
- .ds-switch:hover input:not(:disabled):not(:checked) {
16955
+ .db-switch:hover input:not(:disabled):not(:checked) {
16956
16956
  background-color: var(--db-switch-surface-hover);
16957
16957
  border-color: var(--db-switch-border-hover);
16958
16958
  }
16959
16959
 
16960
- .ds-switch:active input:not(:disabled):not(:checked) {
16960
+ .db-switch:active input:not(:disabled):not(:checked) {
16961
16961
  background-color: var(--db-switch-surface-press);
16962
16962
  border-color: var(--db-switch-border-press);
16963
16963
  }
16964
16964
 
16965
- .ds-switch input:checked {
16965
+ .db-switch input:checked {
16966
16966
  background-color: var(--db-switch-surface-checked);
16967
16967
  border-color: var(--db-switch-border-checked);
16968
16968
  }
16969
16969
 
16970
- .ds-switch:hover input:checked:not(:disabled) {
16970
+ .db-switch:hover input:checked:not(:disabled) {
16971
16971
  background-color: var(--db-switch-surface-checked-hover);
16972
16972
  border-color: var(--db-switch-border-checked-hover);
16973
16973
  }
16974
16974
 
16975
- .ds-switch:active input:checked:not(:disabled) {
16975
+ .db-switch:active input:checked:not(:disabled) {
16976
16976
  background-color: var(--db-switch-surface-checked-press);
16977
16977
  border-color: var(--db-switch-border-checked-press);
16978
16978
  }
16979
16979
 
16980
- .ds-switch input:checked::before {
16980
+ .db-switch input:checked::before {
16981
16981
  transform: translateY(-50%) translateX(calc(var(--db-switch-track-width) - var(--db-switch-thumb-size)));
16982
16982
  }
16983
16983
 
@@ -16985,72 +16985,72 @@ span.du-bois-light-typography-ellipsis-single-line {
16985
16985
  * the ring sits flush when off and gains a 1px offset when checked.
16986
16986
  * TODO: width/offset are hardcoded 1px to preserve the AntD look; adopt the system 2px focus ring
16987
16987
  * (var(--db-focus-ring-width)) in a separate change. */
16988
- .ds-switch input:focus-visible {
16988
+ .db-switch input:focus-visible {
16989
16989
  border-color: var(--db-switch-border-focus);
16990
16990
  outline: 1px solid var(--db-focus-ring-color);
16991
16991
  outline-offset: 0;
16992
16992
  }
16993
16993
 
16994
- .ds-switch input:checked:focus-visible {
16994
+ .db-switch input:checked:focus-visible {
16995
16995
  outline-offset: 1px;
16996
16996
  }
16997
16997
 
16998
- .ds-switch input:disabled {
16998
+ .db-switch input:disabled {
16999
16999
  cursor: not-allowed;
17000
17000
  background-color: var(--db-switch-surface-disabled);
17001
17001
  border-color: var(--db-switch-border-disabled);
17002
17002
  }
17003
17003
 
17004
17004
  /* Disabled + on: more specific than the plain disabled rule, so it wins regardless of source order. */
17005
- .ds-switch input:checked:disabled {
17005
+ .db-switch input:checked:disabled {
17006
17006
  background-color: var(--db-switch-surface-checked-disabled);
17007
17007
  border-color: var(--db-switch-surface-checked-disabled);
17008
17008
  }
17009
17009
 
17010
17010
  @media (prefers-reduced-motion: reduce) {
17011
- .ds-switch input,
17012
- .ds-switch input::before {
17011
+ .db-switch input,
17012
+ .db-switch input::before {
17013
17013
  transition: none;
17014
17014
  }
17015
17015
  }
17016
17016
 
17017
- .ds-switch-wrapper {
17017
+ .db-switch-wrapper {
17018
17018
  display: flex;
17019
17019
  align-items: center;
17020
17020
  }
17021
17021
 
17022
- .ds-switch-wrapper .ds-switch-state-message {
17022
+ .db-switch-wrapper .db-switch-state-message {
17023
17023
  margin-inline-start: auto;
17024
17024
  margin-inline-end: var(--db-switch-label-spacing);
17025
17025
  }
17026
17026
 
17027
17027
  /* `:first-child` scopes this to the label-first layout; the plain layout renders the label last. */
17028
- .ds-switch-wrapper > .du-bois-light-label:first-child,
17029
- .ds-switch-wrapper > .du-bois-dark-label:first-child {
17028
+ .db-switch-wrapper > .du-bois-light-label:first-child,
17029
+ .db-switch-wrapper > .du-bois-dark-label:first-child {
17030
17030
  margin-inline-end: var(--db-switch-label-spacing);
17031
17031
  }
17032
17032
 
17033
- .ds-switch-state-message {
17033
+ .db-switch-state-message {
17034
17034
  color: var(--db-switch-text);
17035
17035
  }
17036
17036
 
17037
- /* Target the <Label>'s class, not a bare `label` — that would also match the .ds-switch root <label>. */
17038
- .ds-switch-wrapper:has(input:disabled) .du-bois-light-label,
17039
- .ds-switch-wrapper:has(input:disabled) .du-bois-dark-label {
17037
+ /* Target the <Label>'s class, not a bare `label` — that would also match the .db-switch root <label>. */
17038
+ .db-switch-wrapper:has(input:disabled) .du-bois-light-label,
17039
+ .db-switch-wrapper:has(input:disabled) .du-bois-dark-label {
17040
17040
  color: var(--db-switch-text-disabled);
17041
17041
  }
17042
17042
 
17043
17043
  /* Indent a following hint/message past the track. The class is doubled to out-specify FormMessage's
17044
17044
  * own margin rule. */
17045
- :is(.ds-switch.ds-switch, .ds-switch-wrapper.ds-switch-wrapper)
17046
- + :is(.du-bois-light-hint, .du-bois-dark-hint, .du-bois-light-form-message, .du-bois-dark-form-message), :is(.ds-switch.ds-switch, .ds-switch-wrapper.ds-switch-wrapper)
17045
+ :is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper)
17046
+ + :is(.du-bois-light-hint, .du-bois-dark-hint, .du-bois-light-form-message, .du-bois-dark-form-message), :is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper)
17047
17047
  + :is(.du-bois-light-hint, .du-bois-dark-hint)
17048
17048
  + :is(.du-bois-light-form-message, .du-bois-dark-form-message) {
17049
17049
  padding-inline-start: calc(var(--db-spacing-2xs) + var(--db-switch-track-width));
17050
17050
  }
17051
17051
 
17052
- :is(.ds-switch.ds-switch, .ds-switch-wrapper.ds-switch-wrapper)
17053
- + :is(.du-bois-light-form-message, .du-bois-dark-form-message), :is(.ds-switch.ds-switch, .ds-switch-wrapper.ds-switch-wrapper)
17052
+ :is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper)
17053
+ + :is(.du-bois-light-form-message, .du-bois-dark-form-message), :is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper)
17054
17054
  + :is(.du-bois-light-hint, .du-bois-dark-hint)
17055
17055
  + :is(.du-bois-light-form-message, .du-bois-dark-form-message) {
17056
17056
  margin-top: 0;