@databricks/design-system 2.0.4 → 2.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/design-guidance/docs/README.md +40 -0
  3. package/design-guidance/docs/review-contract.md +22 -0
  4. package/design-guidance/docs/tokens.md +35 -0
  5. package/design-guidance/docs/voice.md +40 -0
  6. package/design-guidance/skills/dbui-build-screen.md +24 -0
  7. package/design-guidance/skills/dbui-check-ecosystem.md +21 -0
  8. package/design-guidance/skills/dbui-check-guidelines.md +29 -0
  9. package/design-guidance/skills/dbui-check-principles.md +26 -0
  10. package/design-guidance/skills/dbui-check-voice.md +17 -0
  11. package/design-guidance/skills/dbui-pick-component.md +23 -0
  12. package/design-guidance/skills/dbui-pick-icon.md +23 -0
  13. package/design-guidance/skills/dbui-review.md +30 -0
  14. package/design-guidance/skills/dbui-validate.md +23 -0
  15. package/dist/RHFControlledTypeaheadComboboxV2-Ct9x3rC1.js +172 -0
  16. package/dist/RHFControlledTypeaheadComboboxV2-Ct9x3rC1.js.map +1 -0
  17. package/dist/{WizardStepContentWrapper-8bs2FwRi.js → WizardStepContentWrapper-6YTjeEaA.js} +1017 -840
  18. package/dist/WizardStepContentWrapper-6YTjeEaA.js.map +1 -0
  19. package/dist/icon-metadata.json +2064 -0
  20. package/dist/index-DiRpSwH2.js +8509 -0
  21. package/dist/index-DiRpSwH2.js.map +1 -0
  22. package/dist/index-dark.css +648 -113
  23. package/dist/index-dark.mitigated.css +648 -113
  24. package/dist/index.css +1045 -145
  25. package/dist/index.js +27 -8148
  26. package/dist/index.js.map +1 -1
  27. package/dist/index.mitigated.css +1046 -146
  28. package/dist/patterns.js +3 -3
  29. package/dist-types/design-system/Breadcrumb/Breadcrumb.d.ts +10 -3
  30. package/dist-types/design-system/Button/AntDButtonInternal.d.ts +21 -0
  31. package/dist-types/design-system/Button/Button.d.ts +3 -19
  32. package/dist-types/design-system/Button/NativeButton.d.ts +3 -0
  33. package/dist-types/design-system/Button/getBtnClassName.d.ts +17 -0
  34. package/dist-types/design-system/Button/index.d.ts +1 -0
  35. package/dist-types/design-system/DesignSystemProvider/DesignTokenScopeWithEmotionTheme.d.ts +4 -4
  36. package/dist-types/design-system/Drawer/Drawer.d.ts +3 -1
  37. package/dist-types/design-system/FormV2/RHFAdapters.d.ts +8 -0
  38. package/dist-types/design-system/FormV2/RHFControlledTypeaheadComboboxV2.d.ts +58 -0
  39. package/dist-types/design-system/Icon/AntdIcon.d.ts +3 -0
  40. package/dist-types/design-system/Icon/Icon.d.ts +21 -7
  41. package/dist-types/design-system/Icon/NativeIcon.d.ts +3 -0
  42. package/dist-types/design-system/Icon/__generated/icons/ColorMappingEditIcon.d.ts +4 -0
  43. package/dist-types/design-system/Icon/__generated/icons/ColorMappingIcon.d.ts +4 -0
  44. package/dist-types/design-system/Icon/__generated/icons/LakewatchIcon.d.ts +4 -0
  45. package/dist-types/design-system/Icon/__generated/icons/MicrophoneIcon.d.ts +4 -0
  46. package/dist-types/design-system/Icon/__generated/icons/MicrophoneOffIcon.d.ts +4 -0
  47. package/dist-types/design-system/Icon/__generated/icons/OperatorIcon.d.ts +4 -0
  48. package/dist-types/design-system/Icon/__generated/icons/VoiceModeIcon.d.ts +4 -0
  49. package/dist-types/design-system/Icon/__generated/icons/index.d.ts +7 -0
  50. package/dist-types/design-system/Icon/index.d.ts +1 -0
  51. package/dist-types/design-system/Icon/utils.d.ts +1 -0
  52. package/dist-types/design-system/Overflow/Overflow.d.ts +3 -1
  53. package/dist-types/design-system/Overflow/OverflowPopover.d.ts +2 -1
  54. package/dist-types/design-system/TypeaheadComboboxV2/TypeaheadComboboxMenu.d.ts +2 -0
  55. package/dist-types/design-system/_shared_/Tabs/styles.d.ts +2 -3
  56. package/dist-types/design-system/shape-tokens.d.ts +1 -1
  57. package/dist-types/test-utils/rtl/buttonVariants.d.ts +4 -4
  58. package/dist-types/~patterns/Wizard/WizardModal.d.ts +1 -1
  59. package/dist-types/~patterns/Wizard/WizardStepNavigation.d.ts +9 -0
  60. package/dist-types/~patterns/Wizard/index.d.ts +1 -0
  61. package/package.json +9 -5
  62. package/dist/WizardStepContentWrapper-8bs2FwRi.js.map +0 -1
@@ -15820,7 +15820,7 @@ span.du-bois-light-typography-ellipsis-single-line {
15820
15820
  */
15821
15821
  .db-stack {
15822
15822
  /* These variables act as the *parameters* for the stack instance. */
15823
- --db-stack-gap: var(--db-spacing-xs);
15823
+ --db-stack-gap: var(--db-space-4);
15824
15824
  --db-stack-align: stretch;
15825
15825
 
15826
15826
  display: flex;
@@ -15848,7 +15848,7 @@ span.du-bois-light-typography-ellipsis-single-line {
15848
15848
  */
15849
15849
  .db-cluster {
15850
15850
  /* These variables act as the *parameters* for the cluster instance. */
15851
- --db-cluster-gap: var(--db-spacing-2xs);
15851
+ --db-cluster-gap: var(--db-space-2);
15852
15852
  --db-cluster-align: center;
15853
15853
  --db-cluster-justify: flex-start;
15854
15854
 
@@ -15861,81 +15861,106 @@ span.du-bois-light-typography-ellipsis-single-line {
15861
15861
 
15862
15862
  :where(:root), :where(.du-bois-light) {
15863
15863
  /* Neutral */
15864
- --db-neutral-surface: var(--db-color-background-primary);
15865
- --db-subtle-neutral-surface: var(--db-color-background-secondary);
15866
- --db-strong-neutral-surface: initial; /* TODO */
15864
+ --db-surface-base: var(--db-color-background-primary);
15865
+ --db-surface-subtle: var(--db-color-background-secondary);
15866
+ --db-surface-strong: initial; /* TODO */
15867
15867
 
15868
- --db-text-on-neutral-surface: var(--db-color-text-primary);
15869
- --db-subtle-text-on-neutral-surface: var(--db-color-text-secondary);
15870
- --db-strong-text-on-neutral-surface: initial; /* TODO */
15868
+ --db-surface-inverse: initial; /* TODO */
15869
+ --db-surface-active: var(--db-color-table-background-selected-default);
15870
+ --db-surface-hover: var(--db-color-table-background-unselected-hover);
15871
+ --db-surface-disabled: var(--db-color-action-disabled-background);
15871
15872
 
15872
- --db-neutral-border: var(--db-color-border);
15873
- --db-subtle-neutral-border: initial; /* TODO */
15874
- --db-strong-neutral-border: var(--db-color-border-accessible);
15873
+ --db-surface-selected: var(--db-color-table-background-selected-hover);
15874
+ --db-surface-selected-hover: initial; /* TODO */;
15875
+ --db-surface-selected-active: var(--db-color-table-background-selected-hover); /* no distinct active value */
15875
15876
 
15876
- --db-neutral-surface-active: var(--db-color-table-background-selected-default);
15877
- --db-neutral-surface-hover: var(--db-color-table-background-unselected-hover);
15878
- --db-neutral-surface-pressed: var(--db-color-table-background-selected-hover);
15879
- --db-neutral-surface-disabled: var(--db-color-action-disabled-background);
15880
- --db-text-on-neutral-surface-disabled: var(--db-color-action-disabled-text);
15877
+ /* Surface alpha-blending modifiers */
15878
+ --db-surface-backdrop: initial; /* TODO */;
15879
+ /* TODO: surface-tint for containers that distinguish some content */
15881
15880
 
15882
- /* Primary */
15883
- --db-primary-surface: var(--db-color-action-primary-background-default);
15884
- --db-subtle-primary-surface: var(--db-color-action-default-background-hover);
15885
- --db-strong-primary-surface: var(--db-color-action-primary-background-hover);
15881
+ --db-text-base: var(--db-color-text-primary);
15882
+ --db-text-subtle: var(--db-color-text-secondary);
15883
+ --db-text-strong: initial; /* TODO */
15884
+ --db-text-disabled: var(--db-color-action-disabled-text);
15885
+ --db-text-suggestion: initial; /* TODO - e.g. input placeholder, loading text */
15886
+ --db-text-inverse: initial; /* TODO, stark contrast e.g. tooltip text */
15886
15887
 
15887
- --db-text-on-primary-surface: var(--db-color-action-primary-text-default);
15888
- --db-primary-text-on-neutral-surface: var(--db-color-action-link-default);
15889
- --db-subtle-text-on-primary-surface: initial; /* TODO */
15890
- --db-strong-text-on-primary-surface: var(--db-color-action-primary-text-default);
15888
+ --db-border-base: var(--db-color-border);
15889
+ --db-border-subtle: initial; /* TODO */
15890
+ --db-border-strong: var(--db-color-border-accessible);
15891
+ --db-border-hover: initial; /* TODO */
15892
+ --db-border-active: initial; /* TODO */
15893
+ --db-border-disabled: initial; /* TODO */
15891
15894
 
15892
- --db-primary-border: var(--db-color-action-primary-background-default);
15893
- --db-subtle-primary-border: initial; /* TODO */
15894
- --db-strong-primary-border: var(--db-color-action-primary-background-press);
15895
+ /* Accent */
15896
+ --db-accent-surface: var(--db-color-action-primary-background-default);
15897
+ --db-accent-surface-subtle: var(--db-color-action-default-background-hover);
15898
+ --db-accent-surface-strong: var(--db-color-action-primary-background-hover);
15895
15899
 
15896
- --db-primary-surface-active: initial; /* TODO */
15897
- --db-primary-surface-hover: var(--db-color-action-primary-background-hover);
15898
- --db-primary-surface-pressed: var(--db-color-action-primary-background-press);
15899
- --db-primary-surface-disabled: var(--db-color-action-disabled-background);
15900
- --db-text-on-primary-surface-disabled: var(--db-color-action-disabled-text);
15900
+ --db-accent-surface-hover: var(--db-color-action-primary-background-hover);
15901
+ --db-accent-surface-active: var(--db-color-action-primary-background-press); /* no distinct active value */
15902
+ --db-accent-surface-selected: var(--db-color-action-primary-background-press);
15901
15903
 
15902
- /* Error */
15903
- --db-error-surface: var(--db-color-action-danger-primary-background-default);
15904
- --db-subtle-error-surface: var(--db-color-background-danger);
15905
- --db-strong-error-surface: var(--db-color-action-danger-primary-background-hover);
15904
+ /* In the current design, the text color for an accent surface does not change with hover, active, etc. */
15905
+ --db-accent-text: var(--db-color-action-link-default);
15906
+ --db-text-on-accent-surface: var(--db-color-action-primary-text-default);
15906
15907
 
15907
- --db-text-on-error-surface: var(--db-color-action-danger-primary-text);
15908
- --db-error-text-on-neutral-surface: var(--db-color-text-validation-danger);
15909
- --db-subtle-text-on-error-surface: initial; /* TODO */
15910
- --db-strong-text-on-error-surface: var(--db-color-action-danger-primary-text);
15908
+ --db-accent-border: var(--db-color-action-primary-background-default);
15909
+ --db-accent-border-hover: var(--db-color-action-primary-background-press);
15910
+ --db-accent-border-active: initial; /* TODO */;
15911
15911
 
15912
- --db-error-border: var(--db-color-action-danger-default-border-default);
15913
- --db-subtle-error-border: var(--db-color-border-danger);
15914
- --db-strong-error-border: var(--db-color-action-danger-primary-background-press);
15912
+ /* Negative */
15913
+ --db-negative-surface: var(--db-color-action-danger-primary-background-default);
15914
+ --db-negative-surface-subtle: var(--db-color-background-danger);
15915
+ --db-negative-surface-strong: var(--db-color-action-danger-primary-background-hover);
15915
15916
 
15916
- --db-error-surface-active: initial; /* TODO */
15917
- --db-error-surface-hover: var(--db-color-action-danger-primary-background-hover);
15918
- --db-error-surface-pressed: var(--db-color-action-danger-primary-background-press);
15919
- --db-error-surface-disabled: var(--db-color-action-disabled-background);
15920
- --db-text-on-error-surface-disabled: var(--db-color-action-disabled-text);
15917
+ --db-negative-surface-hover: var(--db-color-action-danger-primary-background-hover);
15918
+ --db-negative-surface-active: var(--db-color-action-danger-primary-background-press); /* no distinct active value */
15919
+ --db-negative-surface-selected: var(--db-color-action-danger-primary-background-press);
15921
15920
 
15922
- /* Warning */
15923
- --db-warning-surface: initial; /* TODO */
15924
- --db-subtle-warning-surface: var(--db-color-background-warning);
15921
+ --db-negative-text: var(--db-color-text-validation-danger);
15922
+ --db-text-on-negative-surface: var(--db-color-action-danger-primary-text);
15925
15923
 
15926
- --db-text-on-warning-surface: initial; /* TODO */
15927
- --db-warning-text-on-neutral-surface: var(--db-color-text-validation-warning);
15924
+ --db-negative-border: var(--db-color-action-danger-default-border-default);
15925
+ --db-negative-border-hover: initial; /* TODO */
15926
+ --db-negative-border-active: initial; /* TODO */
15928
15927
 
15929
- --db-warning-border: var(--db-color-border-warning);
15928
+ /* Caution */
15929
+ --db-caution-surface: initial; /* TODO */
15930
+ --db-caution-surface-subtle: var(--db-color-background-warning);
15931
+ --db-caution-surface-strong: initial; /* TODO */
15930
15932
 
15931
- /* Success */
15932
- --db-success-surface: initial; /* TODO */
15933
- --db-subtle-success-surface: var(--db-color-background-success);
15933
+ --db-caution-surface-hover: initial; /* TODO */
15934
+ --db-caution-surface-active: initial; /* TODO */
15935
+ --db-caution-surface-selected: initial; /* TODO */
15934
15936
 
15935
- --db-text-on-success-surface: initial; /* TODO */
15936
- --db-success-text-on-neutral-surface: var(--db-color-text-validation-success);
15937
+ --db-caution-text: var(--db-color-text-validation-warning);
15938
+ --db-text-on-caution-surface: initial; /* TODO */
15937
15939
 
15938
- --db-success-border: initial; /* TODO */
15940
+ --db-caution-border: var(--db-color-border-warning);
15941
+ --db-caution-border-hover: initial; /* TODO */
15942
+ --db-caution-border-active: initial; /* TODO */
15943
+
15944
+ /* Positive */
15945
+ --db-positive-surface: initial; /* TODO */
15946
+ --db-positive-surface-subtle: var(--db-color-background-success);
15947
+ --db-positive-surface-strong: initial; /* TODO */
15948
+
15949
+ --db-positive-surface-hover: initial; /* TODO */
15950
+ --db-positive-surface-active: initial; /* TODO */
15951
+ --db-positive-surface-selected: initial; /* TODO */
15952
+
15953
+ --db-positive-text: var(--db-color-text-validation-success);
15954
+ --db-text-on-positive-surface: initial; /* TODO */
15955
+
15956
+ --db-positive-border: initial; /* TODO */
15957
+ --db-positive-border-hover: initial; /* TODO */
15958
+ --db-positive-border-active: initial; /* TODO */
15959
+
15960
+ /* Branded */
15961
+ --db-ai-gradient-start: #4299e0;
15962
+ --db-ai-gradient-mid: #ca42e0;
15963
+ --db-ai-gradient-end: #ff5f46;
15939
15964
  }
15940
15965
 
15941
15966
 
@@ -15944,32 +15969,39 @@ span.du-bois-light-typography-ellipsis-single-line {
15944
15969
  --db-layout-unit: 0.25rem; /* 4px */
15945
15970
  --db-density-scalar: 1;
15946
15971
  --db-size-scalar: 1;
15947
- --db-spacing-scalar: 1;
15972
+ --db-space-scalar: 1;
15948
15973
 
15949
15974
  /* Size and spacing are the same steps, but with their own scalars included in the calc. */
15950
15975
 
15951
- --db-size-3xs: calc(var(--db-layout-unit) * 1 * var(--db-density-scalar) * var(--db-size-scalar)); /* 4px */
15952
- --db-size-2xs: calc(var(--db-layout-unit) * 2 * var(--db-density-scalar) * var(--db-size-scalar)); /* 8px */
15953
- --db-size-xs: calc(var(--db-layout-unit) * 4 * var(--db-density-scalar) * var(--db-size-scalar)); /* 16px */
15954
- --db-size-sm: calc(var(--db-layout-unit) * 6 * var(--db-density-scalar) * var(--db-size-scalar)); /* 24px */
15955
- --db-size-md: calc(var(--db-layout-unit) * 8 * var(--db-density-scalar) * var(--db-size-scalar)); /* 32px */
15956
- --db-size-lg: calc(var(--db-layout-unit) * 10 * var(--db-density-scalar) * var(--db-size-scalar)); /* 40px */
15957
-
15958
- --db-spacing-3xs: calc(var(--db-layout-unit) * 1 * var(--db-density-scalar) * var(--db-spacing-scalar)); /* 4px */
15959
- --db-spacing-2xs: calc(var(--db-layout-unit) * 2 * var(--db-density-scalar) * var(--db-spacing-scalar)); /* 8px */
15960
- --db-spacing-xs: calc(var(--db-layout-unit) * 4 * var(--db-density-scalar) * var(--db-spacing-scalar)); /* 16px */
15961
- --db-spacing-sm: calc(var(--db-layout-unit) * 6 * var(--db-density-scalar) * var(--db-spacing-scalar)); /* 24px */
15962
- --db-spacing-md: calc(var(--db-layout-unit) * 8 * var(--db-density-scalar) * var(--db-spacing-scalar)); /* 32px */
15963
- --db-spacing-lg: calc(var(--db-layout-unit) * 10 * var(--db-density-scalar) * var(--db-spacing-scalar)); /* 40px */
15976
+ --db-size-1: calc(var(--db-layout-unit) * 1 * var(--db-density-scalar) * var(--db-size-scalar)); /* 4px */
15977
+ --db-size-2: calc(var(--db-layout-unit) * 2 * var(--db-density-scalar) * var(--db-size-scalar)); /* 8px */
15978
+ --db-size-3: calc(var(--db-layout-unit) * 3 * var(--db-density-scalar) * var(--db-size-scalar)); /* 12px */
15979
+ --db-size-4: calc(var(--db-layout-unit) * 4 * var(--db-density-scalar) * var(--db-size-scalar)); /* 16px */
15980
+ --db-size-5: calc(var(--db-layout-unit) * 5 * var(--db-density-scalar) * var(--db-size-scalar)); /* 20px */
15981
+ --db-size-6: calc(var(--db-layout-unit) * 6 * var(--db-density-scalar) * var(--db-size-scalar)); /* 24px */
15982
+ --db-size-7: calc(var(--db-layout-unit) * 7 * var(--db-density-scalar) * var(--db-size-scalar)); /* 28px */
15983
+ --db-size-8: calc(var(--db-layout-unit) * 8 * var(--db-density-scalar) * var(--db-size-scalar)); /* 32px */
15984
+ --db-size-10: calc(var(--db-layout-unit) * 10 * var(--db-density-scalar) * var(--db-size-scalar)); /* 40px */
15985
+ --db-size-12: calc(var(--db-layout-unit) * 12 * var(--db-density-scalar) * var(--db-size-scalar)); /* 48px */
15986
+
15987
+ --db-space-0-5: calc(var(--db-layout-unit) * 0.5 * var(--db-density-scalar) * var(--db-space-scalar)); /* 2px */
15988
+ --db-space-1: calc(var(--db-layout-unit) * 1 * var(--db-density-scalar) * var(--db-space-scalar)); /* 4px */
15989
+ --db-space-2: calc(var(--db-layout-unit) * 2 * var(--db-density-scalar) * var(--db-space-scalar)); /* 8px */
15990
+ --db-space-3: calc(var(--db-layout-unit) * 3 * var(--db-density-scalar) * var(--db-space-scalar)); /* 12px */
15991
+ --db-space-4: calc(var(--db-layout-unit) * 4 * var(--db-density-scalar) * var(--db-space-scalar)); /* 16px */
15992
+ --db-space-6: calc(var(--db-layout-unit) * 6 * var(--db-density-scalar) * var(--db-space-scalar)); /* 24px */
15993
+ --db-space-8: calc(var(--db-layout-unit) * 8 * var(--db-density-scalar) * var(--db-space-scalar)); /* 32px */
15994
+ --db-space-10: calc(var(--db-layout-unit) * 10 * var(--db-density-scalar) * var(--db-space-scalar)); /* 40px */
15964
15995
  }
15965
15996
 
15966
15997
  :where(:root), :where(.du-bois-light) {
15967
15998
  --db-font-family:
15968
15999
  "DM Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
16000
+ --db-numeric-font-family: var(--db-font-family);
15969
16001
  --db-mono-font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
15970
16002
 
15971
- --db-font-size-2xs: 0.6875rem; /* 11px */
15972
- --db-font-size-xs: 0.75rem; /* 12px */
16003
+ --db-font-size-xs: 0.6875rem; /* 11px */
16004
+ --db-font-size-sm: 0.75rem; /* 12px */
15973
16005
  --db-font-size-base: 0.8125rem; /* 13px */
15974
16006
  --db-font-size-md: 0.875rem; /* 14px */
15975
16007
  --db-font-size-lg: 0.9375rem; /* 15px */
@@ -15978,6 +16010,8 @@ span.du-bois-light-typography-ellipsis-single-line {
15978
16010
  --db-font-size-3xl: 1.5rem; /* 24px */
15979
16011
  --db-font-size-4xl: 2rem; /* 32px */
15980
16012
 
16013
+ /* TODO: media query for mobile font sizes */
16014
+
15981
16015
  /* Du Bois v1 ships 400 and 600 only */
15982
16016
  --db-font-weight-normal: 400;
15983
16017
  --db-font-weight-medium: initial; /* TODO */
@@ -15995,6 +16029,57 @@ span.du-bois-light-typography-ellipsis-single-line {
15995
16029
  :where(:root), :where(.du-bois-light) {
15996
16030
  --db-focus-ring-color: var(--db-color-action-default-border-focus);
15997
16031
  --db-focus-ring-width: 2px;
16032
+ --db-focus-ring-offset: 2px;
16033
+ }
16034
+
16035
+ :where(:root), :where(.du-bois-light) {
16036
+ --db-shape-control: 4px;
16037
+ --db-shape-control-large: 999px;
16038
+ --db-shape-container-small: 8px;
16039
+ --db-shape-container-medium: 12px;
16040
+ --db-shape-container-large: 16px;
16041
+ --db-shape-pill: 999px;
16042
+ }
16043
+
16044
+ :where(:root), :where(.du-bois-light) {
16045
+ /* Shape */
16046
+ /* Mirrors the ShapeTokens host-override var used by list items; falls back to the theme radius. */
16047
+ --db-list-item-border-radius: var(--list-item-border-radius, 4px);
16048
+
16049
+ /* Color */
16050
+ --db-list-surface: var(--db-surface-base);
16051
+ --db-list-text: var(--db-text-base);
16052
+ --db-list-header-text: var(--db-text-subtle);
16053
+ --db-list-separator: var(--db-border-subtle);
16054
+
16055
+ --db-list-item-surface-hover: var(--db-surface-hover);
16056
+ --db-list-item-surface-active: var(--db-surface-active);
16057
+ --db-list-item-surface-selected: var(--db-accent-surface-subtle);
16058
+ --db-list-item-surface-disabled: var(--db-surface-disabled);
16059
+
16060
+ --db-list-item-text-selected: var(--db-accent-text);
16061
+ --db-list-item-text-disabled: var(--db-text-disabled);
16062
+
16063
+ --db-list-item-danger-text: var(--db-negative-text);
16064
+ --db-list-item-danger-surface-hover: var(--db-negative-surface-subtle);
16065
+
16066
+ /* Density */
16067
+ --db-list-item-padding: var(--db-space-2);
16068
+ --db-list-item-height: var(--db-size-8);
16069
+ }
16070
+
16071
+ :where(:root), :where(.du-bois-light) {
16072
+ /* Shape */
16073
+ /* Mirrors the ShapeTokens host-override var; falls back to the v1 value (borderRadiusSm). */
16074
+ --db-popup-border-radius: var(--popup-border-radius, 4px);
16075
+
16076
+ /* Color */
16077
+ --db-popup-surface: var(--db-surface-base);
16078
+ --db-popup-text: var(--db-text-base);
16079
+ --db-popup-border: var(--db-border-base);
16080
+
16081
+ /* Elevation */
16082
+ --db-popup-elevation: var(--db-elevation-med);
15998
16083
  }
15999
16084
 
16000
16085
  :where(:root), :where(.du-bois-light) {
@@ -16002,36 +16087,451 @@ span.du-bois-light-typography-ellipsis-single-line {
16002
16087
  --db-selection-toggle-border-radius: 4px;
16003
16088
 
16004
16089
  /* Color */
16005
- --db-selection-toggle-surface: var(--db-neutral-surface);
16006
- --db-selection-toggle-mark: var(--db-text-on-primary-surface);
16007
- --db-selection-toggle-text: var(--db-text-on-neutral-surface);
16008
- --db-selection-toggle-border: var(--db-strong-neutral-border);
16009
-
16010
- --db-selection-toggle-surface-hover: var(--db-neutral-surface-hover);
16011
- --db-selection-toggle-surface-press: var(--db-neutral-surface-pressed);
16012
- --db-selection-toggle-surface-checked: var(--db-primary-surface);
16013
- --db-selection-toggle-surface-checked-hover: var(--db-primary-surface-hover);
16014
- --db-selection-toggle-surface-checked-press: var(--db-primary-surface-pressed);
16015
- --db-selection-toggle-surface-disabled: var(--db-neutral-surface-disabled);
16016
- --db-selection-toggle-surface-checked-disabled: var(--db-neutral-surface-disabled);
16017
-
16018
- --db-selection-toggle-border-hover: var(--db-primary-surface-hover);
16019
- --db-selection-toggle-border-press: var(--db-primary-surface-pressed);
16020
- --db-selection-toggle-border-disabled: var(--db-neutral-border);
16021
-
16022
- --db-selection-toggle-mark-disabled: var(--db-text-on-neutral-surface-disabled);
16023
- --db-selection-toggle-text-disabled: var(--db-text-on-neutral-surface-disabled);
16090
+ --db-selection-toggle-surface: var(--db-surface-base);
16091
+ --db-selection-toggle-mark: var(--db-text-on-accent-surface);
16092
+ --db-selection-toggle-text: var(--db-text-base);
16093
+ --db-selection-toggle-border: var(--db-border-strong);
16094
+
16095
+ --db-selection-toggle-surface-hover: var(--db-surface-hover);
16096
+ --db-selection-toggle-surface-active: var(--db-surface-selected-active);
16097
+ --db-selection-toggle-surface-checked: var(--db-accent-surface);
16098
+ --db-selection-toggle-surface-checked-hover: var(--db-accent-surface-hover);
16099
+ --db-selection-toggle-surface-checked-active: var(--db-accent-surface-active);
16100
+ --db-selection-toggle-surface-disabled: var(--db-surface-disabled);
16101
+ --db-selection-toggle-surface-checked-disabled: var(--db-surface-disabled);
16102
+
16103
+ --db-selection-toggle-border-hover: var(--db-accent-surface-hover);
16104
+ --db-selection-toggle-border-active: var(--db-accent-surface-active);
16105
+ --db-selection-toggle-border-disabled: var(--db-border-base);
16106
+
16107
+ --db-selection-toggle-mark-disabled: var(--db-text-disabled);
16108
+ --db-selection-toggle-text-disabled: var(--db-text-disabled);
16024
16109
 
16025
16110
  --db-selection-toggle-shadow-checked: 0 0 0 1px var(--db-color-action-primary-background-default);
16026
16111
 
16027
16112
  /* Density */
16028
- --db-selection-toggle-size: var(--db-size-xs);
16029
- --db-selection-toggle-label-spacing: var(--db-spacing-2xs);
16113
+ --db-selection-toggle-size: var(--db-size-4);
16114
+ --db-selection-toggle-label-spacing: var(--db-space-2);
16030
16115
 
16031
16116
  /* Motion */
16032
16117
  --db-selection-toggle-transition-duration: 120ms;
16033
16118
  }
16034
16119
 
16120
+
16121
+
16122
+ /* Component-tier tokens for the native <Button>, grouped by area (density, shape, typography, color).
16123
+ * Colors alias the action-* system tokens; sizes alias the system density scale.
16124
+ *
16125
+ * Follows the mortar/action.css pattern: one semantic set (surface / border / text, each with
16126
+ * -hover / -active / -disabled) whose defaults are the secondary variant. The variant classes that
16127
+ * re-set these tokens per variant live in NativeButton.css; this file declares only tokens. */
16128
+
16129
+ /* Declared under the theme classes too (not just :root) so the var() chain re-resolves inside a
16130
+ * `.du-bois-dark` subtree (or a portal that re-applies the theme class) instead of freezing at the root values. */
16131
+ :where(:root), :where(.du-bois-light) {
16132
+ /* ── Density ──────────────────────────────────────────────────────────── */
16133
+ --db-btn-height: var(--db-size-8);
16134
+ --db-btn-height-small: var(--db-size-6);
16135
+ --db-btn-icon-size: var(--db-size-4);
16136
+ --db-btn-border-width: 1px;
16137
+ --db-btn-padding-vertical: var(--db-space-1);
16138
+ --db-btn-padding-horizontal: var(--db-space-3);
16139
+ --db-btn-padding-horizontal-small: var(--db-space-2);
16140
+ /* Icon/force-icon horizontal padding: half the standard horizontal padding. */
16141
+ --db-btn-padding-horizontal-icon: calc(var(--db-space-3) / 2); /* 6px */
16142
+ --db-btn-gap: var(--db-space-1);
16143
+ --db-btn-end-icon-gap: var(--db-space-2);
16144
+ --db-btn-end-icon-gap-small: var(--db-space-1);
16145
+ /* Width of a content-less button while loading, so the standalone spinner has room. */
16146
+ --db-btn-loading-empty-width: var(--db-size-10);
16147
+
16148
+ /* ── Shape ────────────────────────────────────────────────────────────── */
16149
+ --db-btn-border-radius: var(--db-shape-control);
16150
+
16151
+ /* ── Typography ───────────────────────────────────────────────────────── */
16152
+ --db-btn-font-size: var(--db-font-size-base);
16153
+ --db-btn-icon-only-font-size: var(--db-font-size-lg); /* 15px */
16154
+ --db-btn-font-weight: var(--db-font-weight-normal);
16155
+ /* Line heights are hard-coded until the typography scale ships computed per-level line-height tokens. */
16156
+ --db-btn-line-height: 1.25rem; /* 20px */
16157
+ --db-btn-line-height-small: 1rem; /* 16px */
16158
+
16159
+ /* ── Color: semantic set (defaults = secondary variant) ───────────────── */
16160
+ --db-btn-surface: var(--db-color-action-default-background-default);
16161
+ --db-btn-surface-hover: var(--db-color-action-default-background-hover);
16162
+ --db-btn-surface-active: var(--db-color-action-default-background-press);
16163
+ --db-btn-surface-disabled: transparent;
16164
+ --db-btn-border: var(--db-color-action-default-border-default);
16165
+ --db-btn-border-hover: var(--db-color-action-default-border-hover);
16166
+ --db-btn-border-active: var(--db-color-action-default-border-press);
16167
+ --db-btn-border-disabled: var(--db-color-action-disabled-border);
16168
+ --db-btn-text: var(--db-color-action-default-text-default);
16169
+ --db-btn-text-hover: var(--db-color-action-default-text-hover);
16170
+ --db-btn-text-active: var(--db-color-action-default-text-press);
16171
+ --db-btn-text-disabled: var(--db-color-action-disabled-text);
16172
+
16173
+ /* ── Focus & icon ─────────────────────────────────────────────────────── */
16174
+ --db-btn-focus-ring: var(--db-color-action-default-border-focus);
16175
+ --db-btn-danger-focus-ring: var(--db-color-action-danger-primary-background-default);
16176
+ --db-btn-icon-glyph: var(--db-color-text-secondary);
16177
+ }
16178
+
16179
+ /* Native <Button> visual styles. Consumes the component-tier `--db-btn-*` tokens (see tokens.css);
16180
+ * the variant classes below re-set those tokens per variant and the rules that follow paint them.
16181
+ * Shipped via mortar.css. */
16182
+
16183
+ /* ── 0. Variant token re-sets ──────────────────────────────────────────────
16184
+ * Each variant class re-sets the semantic tokens declared in tokens.css; combined classes win by
16185
+ * specificity, which beats the `:where(:root)` (specificity 0) defaults regardless of file order. */
16186
+ .db-btn-primary {
16187
+ --db-btn-surface: var(--db-color-action-primary-background-default);
16188
+ --db-btn-surface-hover: var(--db-color-action-primary-background-hover);
16189
+ --db-btn-surface-active: var(--db-color-action-primary-background-press);
16190
+ --db-btn-surface-disabled: var(--db-color-action-disabled-border);
16191
+ --db-btn-border: transparent;
16192
+ --db-btn-border-hover: transparent;
16193
+ --db-btn-border-active: transparent;
16194
+ --db-btn-border-disabled: transparent;
16195
+ --db-btn-text: var(--db-color-action-primary-text-default);
16196
+ --db-btn-text-hover: var(--db-color-action-primary-text-hover);
16197
+ --db-btn-text-active: var(--db-color-action-primary-text-press);
16198
+ --db-btn-text-disabled: var(--db-color-action-primary-text-default);
16199
+ }
16200
+ .db-btn-tertiary,
16201
+ .db-btn-link {
16202
+ --db-btn-surface: var(--db-color-action-tertiary-background-default);
16203
+ --db-btn-surface-disabled: var(--db-color-action-tertiary-background-default);
16204
+ --db-btn-border: var(--db-color-action-tertiary-background-default);
16205
+ --db-btn-border-hover: transparent;
16206
+ --db-btn-border-active: transparent;
16207
+ --db-btn-border-disabled: transparent;
16208
+ --db-btn-text: var(--db-color-action-tertiary-text-default);
16209
+ --db-btn-text-hover: var(--db-color-action-tertiary-text-hover);
16210
+ --db-btn-text-active: var(--db-color-action-tertiary-text-press);
16211
+ --db-btn-text-disabled: var(--db-color-action-disabled-text);
16212
+ }
16213
+ .db-btn-tertiary {
16214
+ --db-btn-surface-hover: var(--db-color-action-tertiary-background-hover);
16215
+ --db-btn-surface-active: var(--db-color-action-tertiary-background-press);
16216
+ }
16217
+ /* Link is borderless and text-only, so its hover/press surface stays transparent. */
16218
+ .db-btn-link {
16219
+ --db-btn-surface-hover: transparent;
16220
+ --db-btn-surface-active: transparent;
16221
+ }
16222
+ /* Every danger button (icon included) disables to the filled treatment. */
16223
+ .db-btn-danger {
16224
+ --db-btn-surface-disabled: var(--db-color-action-disabled-border);
16225
+ --db-btn-border-disabled: transparent;
16226
+ --db-btn-text-disabled: var(--db-color-action-primary-text-default);
16227
+ }
16228
+ /* Danger, filled (primary): re-set only the surface; text/transparent border come from primary. */
16229
+ .db-btn-primary.db-btn-danger:not(.db-btn-icon-only) {
16230
+ --db-btn-surface: var(--db-color-action-danger-primary-background-default);
16231
+ --db-btn-surface-hover: var(--db-color-action-danger-primary-background-hover);
16232
+ --db-btn-surface-active: var(--db-color-action-danger-primary-background-press);
16233
+ }
16234
+ /* Danger, secondary/outlined. */
16235
+ .db-btn-danger:not(.db-btn-primary):not(.db-btn-tertiary):not(.db-btn-link):not(.db-btn-icon-only) {
16236
+ --db-btn-surface: var(--db-color-action-danger-default-background-default);
16237
+ --db-btn-surface-hover: var(--db-color-action-danger-default-background-hover);
16238
+ --db-btn-surface-active: var(--db-color-action-danger-default-background-press);
16239
+ --db-btn-border: var(--db-color-action-danger-default-border-default);
16240
+ --db-btn-border-hover: var(--db-color-action-danger-default-border-hover);
16241
+ --db-btn-border-active: var(--db-color-action-danger-default-border-press);
16242
+ --db-btn-text: var(--db-color-action-danger-default-text-default);
16243
+ --db-btn-text-hover: var(--db-color-action-danger-default-text-hover);
16244
+ --db-btn-text-active: var(--db-color-action-danger-default-text-press);
16245
+ }
16246
+ /* Danger, tertiary/link: danger text everywhere, danger surface on hover/press; resting/disabled
16247
+ * surface stay the tertiary ghost (override the filled danger-disabled set above). */
16248
+ .db-btn-tertiary.db-btn-danger,
16249
+ .db-btn-link.db-btn-danger {
16250
+ --db-btn-surface-hover: var(--db-color-action-danger-default-background-hover);
16251
+ --db-btn-surface-active: var(--db-color-action-danger-default-background-press);
16252
+ --db-btn-surface-disabled: var(--db-color-action-tertiary-background-default);
16253
+ --db-btn-text: var(--db-color-action-danger-default-text-default);
16254
+ --db-btn-text-hover: var(--db-color-action-danger-default-text-hover);
16255
+ --db-btn-text-active: var(--db-color-action-danger-default-text-press);
16256
+ --db-btn-text-disabled: var(--db-color-action-disabled-text);
16257
+ }
16258
+ /* Icon-only renders as the ghost (tertiary) treatment regardless of variant; re-set the semantic set
16259
+ * so the icon-only rules paint from these component tokens. */
16260
+ .db-btn-icon-only {
16261
+ --db-btn-surface: var(--db-color-action-tertiary-background-default);
16262
+ --db-btn-surface-hover: var(--db-color-action-tertiary-background-hover);
16263
+ --db-btn-surface-active: var(--db-color-action-tertiary-background-press);
16264
+ --db-btn-text: var(--db-color-action-tertiary-text-default);
16265
+ --db-btn-text-hover: var(--db-color-action-tertiary-text-hover);
16266
+ --db-btn-text-active: var(--db-color-action-tertiary-text-press);
16267
+ }
16268
+ /* Danger icon-only keeps the ghost resting surface (inherited above) but uses danger text and a
16269
+ * danger hover/press surface. */
16270
+ .db-btn-icon-only.db-btn-danger {
16271
+ --db-btn-surface-hover: var(--db-color-action-danger-default-background-hover);
16272
+ --db-btn-surface-active: var(--db-color-action-danger-default-background-press);
16273
+ --db-btn-text: var(--db-color-action-danger-default-text-default);
16274
+ --db-btn-text-hover: var(--db-color-action-danger-default-text-hover);
16275
+ --db-btn-text-active: var(--db-color-action-danger-default-text-press);
16276
+ }
16277
+
16278
+ /* ── 1. Base — paints the default (secondary) variant ────────────────────── */
16279
+ .db-btn {
16280
+ appearance: none;
16281
+ box-sizing: border-box;
16282
+ position: relative; /* anchors the loading spinner */
16283
+ display: inline-flex !important;
16284
+ align-items: center !important;
16285
+ justify-content: center !important;
16286
+ vertical-align: middle;
16287
+ white-space: nowrap;
16288
+ user-select: none;
16289
+ cursor: pointer;
16290
+ height: var(--db-btn-height) !important;
16291
+ font-family: inherit;
16292
+ font-size: var(--db-btn-font-size);
16293
+ font-weight: var(--db-btn-font-weight);
16294
+ line-height: var(--db-btn-line-height) !important;
16295
+ text-decoration: none !important;
16296
+ border: var(--db-btn-border-width) solid var(--db-btn-border);
16297
+ border-color: var(--db-btn-border) !important;
16298
+ border-radius: var(--db-btn-border-radius) !important;
16299
+ box-shadow: none !important;
16300
+ background-color: var(--db-btn-surface) !important;
16301
+ color: var(--db-btn-text) !important;
16302
+ }
16303
+
16304
+ /* ── 2. Padding ──────────────────────────────────────────────────────────── */
16305
+ .db-btn.db-btn:where(:not(.db-btn-icon-only, .db-btn-force-icon, .db-btn-link)) {
16306
+ padding: var(--db-btn-padding-vertical) var(--db-btn-padding-horizontal) !important;
16307
+ }
16308
+ .db-btn.db-btn-small:where(:not(.db-btn-icon-only, .db-btn-force-icon, .db-btn-link)) {
16309
+ padding: 0 var(--db-btn-padding-horizontal-small) !important;
16310
+ }
16311
+ .db-btn.db-btn-link {
16312
+ padding: 0 !important;
16313
+ }
16314
+ .db-btn.db-btn-force-icon {
16315
+ padding: 0 var(--db-btn-padding-horizontal-icon) !important;
16316
+ }
16317
+
16318
+ /* ── 3. Interactive states ───────────────────────────────────────────────── */
16319
+ .db-btn:hover:not(:disabled, .db-btn-loading) {
16320
+ background-color: var(--db-btn-surface-hover) !important;
16321
+ border-color: var(--db-btn-border-hover) !important;
16322
+ color: var(--db-btn-text-hover) !important;
16323
+ }
16324
+ .db-btn:active:not(:disabled, .db-btn-loading) {
16325
+ background-color: var(--db-btn-surface-active) !important;
16326
+ border-color: var(--db-btn-border-active) !important;
16327
+ color: var(--db-btn-text-active) !important;
16328
+ }
16329
+
16330
+ /* ── 4. Focus ────────────────────────────────────────────────────────────── */
16331
+ .db-btn:focus-visible {
16332
+ outline: 2px solid var(--db-btn-focus-ring);
16333
+ outline-offset: -2px;
16334
+ }
16335
+ .db-btn-primary:focus-visible {
16336
+ outline-offset: 1px;
16337
+ }
16338
+ .db-btn-use-focus-pseudo-class:focus {
16339
+ outline: 2px solid var(--db-btn-focus-ring);
16340
+ outline-offset: 1px;
16341
+ }
16342
+
16343
+ /* ── 5. Small / block (full-width) / empty ────────────────────────────────── */
16344
+ .db-btn-small {
16345
+ height: var(--db-btn-height-small) !important;
16346
+ }
16347
+ .db-btn-block {
16348
+ width: 100%;
16349
+ }
16350
+ .db-btn-empty {
16351
+ background-color: transparent !important;
16352
+ border-color: transparent !important;
16353
+ }
16354
+ .db-btn-default.db-btn-empty {
16355
+ color: var(--db-btn-icon-glyph) !important;
16356
+ }
16357
+ .db-btn-empty.db-btn-loading {
16358
+ width: var(--db-btn-loading-empty-width);
16359
+ }
16360
+
16361
+ /* ── 6. Tertiary & link ──────────────────────────────────────────────────── */
16362
+ .db-btn-link {
16363
+ height: auto !important;
16364
+ border: none !important;
16365
+ }
16366
+ /* Re-declare the text color for a non-icon-only tertiary/link at two-class weight so a plain
16367
+ * call-site `color` override loses; an icon-only glyph stays at base weight so its override wins. */
16368
+ .db-btn-tertiary:not(.db-btn-icon-only),
16369
+ .db-btn-link:not(.db-btn-icon-only) {
16370
+ color: var(--db-btn-text) !important;
16371
+ }
16372
+ /* Keep the resting border at two-class weight (parity with the shielded border-color). */
16373
+ .db-btn.db-btn-tertiary,
16374
+ .db-btn.db-btn-link {
16375
+ border-color: var(--db-btn-border) !important;
16376
+ }
16377
+
16378
+ /* ── 7. Danger ───────────────────────────────────────────────────────────── */
16379
+ .db-btn-danger:focus-visible {
16380
+ outline-color: var(--db-btn-danger-focus-ring);
16381
+ }
16382
+
16383
+ /* ── 8. Icon-only ────────────────────────────────────────────────────────── */
16384
+ .db-btn-icon-only {
16385
+ padding: 0;
16386
+ border: none !important;
16387
+ background-color: var(--db-btn-surface) !important;
16388
+ font-size: var(--db-btn-icon-only-font-size);
16389
+ }
16390
+ /* `:where()` keeps this at (0,1,0) so a call-site `css` width override wins, as it does for `height`. */
16391
+ .db-btn-icon-only:where(:not(.db-btn-small)) {
16392
+ width: var(--db-btn-height) !important;
16393
+ }
16394
+ .db-btn-icon-only:not(.db-btn-link, .db-btn-tertiary, [href], :hover, :active, :disabled) {
16395
+ color: var(--db-btn-icon-glyph) !important;
16396
+ }
16397
+ /* `:where()` on the exclusion holds this at (0,2,0): enough to tint an un-overridden icon-only link
16398
+ * over the base color, while still letting a consumer's own icon-color override win on source order. */
16399
+ .db-btn-icon-only[href]:where(:not(.db-btn-tertiary, .db-btn-link, .db-btn-danger, :disabled)) {
16400
+ color: var(--db-btn-text) !important;
16401
+ }
16402
+ .db-btn-icon-only:where(.db-btn-small) {
16403
+ width: var(--db-btn-height-small);
16404
+ }
16405
+ .db-btn-icon-only.db-btn-small {
16406
+ line-height: var(--db-btn-line-height-small) !important;
16407
+ }
16408
+ .db-btn-icon-only:hover:not(:disabled, .db-btn-loading) {
16409
+ background-color: var(--db-btn-surface-hover) !important;
16410
+ color: var(--db-btn-text-hover) !important;
16411
+ }
16412
+ .db-btn-icon-only:active:not(:disabled, .db-btn-loading) {
16413
+ background-color: var(--db-btn-surface-active) !important;
16414
+ color: var(--db-btn-text-active) !important;
16415
+ }
16416
+ .db-btn-icon-only:enabled:not(.db-btn-primary, .db-btn-tertiary, .db-btn-link, .db-btn-danger, :hover, :active)
16417
+ > .anticon {
16418
+ color: var(--db-btn-icon-glyph);
16419
+ }
16420
+ .db-btn-icon-only.db-btn-danger:not(:hover, :active) > .anticon {
16421
+ color: var(--db-btn-text);
16422
+ }
16423
+ .db-btn-icon-only.db-btn-danger:hover:not(:disabled, .db-btn-loading) {
16424
+ background-color: var(--db-btn-surface-hover) !important;
16425
+ color: var(--db-btn-text-hover) !important;
16426
+ }
16427
+ .db-btn-icon-only.db-btn-danger:active:not(:disabled, .db-btn-loading) {
16428
+ background-color: var(--db-btn-surface-active) !important;
16429
+ color: var(--db-btn-text-active) !important;
16430
+ }
16431
+
16432
+ /* ── 9. Disabled — base rules paint the per-variant `*-disabled` tokens (see tokens.css) ──────── */
16433
+ .db-btn:disabled {
16434
+ cursor: not-allowed;
16435
+ background-color: var(--db-btn-surface-disabled) !important;
16436
+ color: var(--db-btn-text-disabled) !important;
16437
+ }
16438
+ /* Empty disabled buttons keep a transparent border (set elsewhere), so exclude them.
16439
+ * `:where()` on the exclusion holds this at (0,2,0): enough to beat the base border, while still
16440
+ * letting a consumer's own `[disabled]` border override win on source order. */
16441
+ .db-btn:disabled:where(:not(.db-btn-empty)) {
16442
+ border-color: var(--db-btn-border-disabled) !important;
16443
+ }
16444
+ .db-btn-icon-only:disabled {
16445
+ border: none;
16446
+ }
16447
+ .db-btn-icon-only:disabled:hover {
16448
+ background-color: transparent !important;
16449
+ }
16450
+ .db-btn:disabled > .anticon {
16451
+ color: inherit !important;
16452
+ }
16453
+
16454
+ /* ── 10. Icon & content layout ───────────────────────────────────────────── */
16455
+ /* The leading icon renders unwrapped as the button's direct `.anticon` child (see NativeButton.tsx),
16456
+ * so `> .anticon` targets only a real icon glyph — a non-glyph `icon` (e.g. a Spinner) keeps its own
16457
+ * sizing — and out-specifies AntD's runtime-injected global `.anticon` rule. */
16458
+ .db-btn > .anticon,
16459
+ .db-btn-end-icon,
16460
+ .db-btn-end-icon > .anticon {
16461
+ display: inline-flex;
16462
+ align-items: center;
16463
+ font-size: var(--db-btn-icon-size) !important;
16464
+ line-height: 0;
16465
+ }
16466
+ .db-btn-small > .anticon .anticon {
16467
+ line-height: 0;
16468
+ }
16469
+ .db-btn > .db-btn-content > .anticon {
16470
+ display: inline-flex;
16471
+ align-items: center;
16472
+ line-height: 0;
16473
+ }
16474
+ .db-btn-content {
16475
+ display: inline-flex;
16476
+ align-items: center;
16477
+ }
16478
+ .db-btn > .anticon + .db-btn-content {
16479
+ margin-inline-start: var(--db-btn-gap) !important;
16480
+ }
16481
+ .db-btn-end-icon {
16482
+ margin-inline-start: var(--db-btn-end-icon-gap) !important;
16483
+ }
16484
+ .db-btn-small .db-btn-end-icon {
16485
+ margin-inline-start: var(--db-btn-end-icon-gap-small) !important;
16486
+ }
16487
+ .db-btn-default:not(.db-btn-danger, [href], :hover, :active, :disabled) > .anticon {
16488
+ color: var(--db-btn-icon-glyph);
16489
+ }
16490
+ .db-btn-default[href]:not(.db-btn-danger, :hover, :active, :disabled) .db-btn-end-icon {
16491
+ color: var(--db-btn-icon-glyph);
16492
+ }
16493
+ .db-btn-default:not([href], .db-btn-danger, :hover, :active, :disabled)
16494
+ > .db-btn-content
16495
+ > .db-btn-end-icon
16496
+ > .anticon {
16497
+ color: var(--db-btn-icon-glyph);
16498
+ }
16499
+
16500
+ /* ── 11. Loading ─────────────────────────────────────────────────────────── */
16501
+ .db-btn-loading {
16502
+ cursor: default;
16503
+ }
16504
+ .db-btn-force-icon.db-btn-loading:disabled {
16505
+ border-color: transparent !important;
16506
+ }
16507
+ .db-btn-spinner {
16508
+ color: inherit !important;
16509
+ pointer-events: none;
16510
+ }
16511
+ .db-btn-loading-with-icon .db-btn-content {
16512
+ padding-inline-start: calc(var(--db-btn-icon-size) + var(--db-btn-gap));
16513
+ }
16514
+ .db-btn-loading .db-btn-spinner {
16515
+ position: absolute;
16516
+ left: 50%;
16517
+ top: 50%;
16518
+ transform: translate(-50%, -50%);
16519
+ }
16520
+ .db-btn-loading.db-btn-icon-only .db-btn-spinner {
16521
+ position: static;
16522
+ transform: none;
16523
+ }
16524
+
16525
+ /* ── 12. dangerouslySetForceIconStyles ───────────────────────────────────── */
16526
+ .db-btn-force-icon {
16527
+ width: var(--db-btn-height) !important;
16528
+ color: var(--db-btn-icon-glyph) !important;
16529
+ }
16530
+ .db-btn-force-icon.db-btn-small {
16531
+ width: var(--db-btn-height-small) !important;
16532
+ }
16533
+
16534
+
16035
16535
  :where(:root), :where(.du-bois-light) {
16036
16536
  /* Shape */
16037
16537
  --db-checkbox-border-radius: var(--db-selection-toggle-border-radius);
@@ -16040,15 +16540,15 @@ span.du-bois-light-typography-ellipsis-single-line {
16040
16540
  /* Color */
16041
16541
  --db-checkbox-surface: var(--db-selection-toggle-surface);
16042
16542
  --db-checkbox-surface-hover: var(--db-color-action-default-background-hover);
16043
- --db-checkbox-surface-press: var(--db-color-action-default-background-press);
16543
+ --db-checkbox-surface-active: var(--db-color-action-default-background-press);
16044
16544
  --db-checkbox-surface-checked: var(--db-selection-toggle-surface-checked);
16045
16545
  --db-checkbox-surface-checked-hover: var(--db-selection-toggle-surface-checked-hover);
16046
- --db-checkbox-surface-checked-press: var(--db-selection-toggle-surface-checked-press);
16546
+ --db-checkbox-surface-checked-active: var(--db-selection-toggle-surface-checked-active);
16047
16547
  --db-checkbox-surface-disabled: var(--db-selection-toggle-surface-disabled);
16048
16548
 
16049
16549
  --db-checkbox-border: var(--db-color-action-default-border-default);
16050
16550
  --db-checkbox-border-hover: var(--db-selection-toggle-border-hover);
16051
- --db-checkbox-border-press: var(--db-selection-toggle-border-press);
16551
+ --db-checkbox-border-active: var(--db-selection-toggle-border-active);
16052
16552
  --db-checkbox-focus-ring: var(--db-focus-ring-color);
16053
16553
  --db-checkbox-border-disabled: var(--db-color-action-disabled-border);
16054
16554
 
@@ -16063,8 +16563,8 @@ span.du-bois-light-typography-ellipsis-single-line {
16063
16563
  --db-checkbox-size: var(--db-selection-toggle-size);
16064
16564
  --db-checkbox-label-spacing: var(--db-selection-toggle-label-spacing);
16065
16565
  --db-checkbox-focus-ring-width: var(--db-focus-ring-width);
16066
- --db-checkbox-indeterminate-mark-width: var(--db-size-2xs); /* 8px */
16067
- --db-checkbox-indeterminate-mark-height: calc(var(--db-size-3xs) * 0.75); /* 3px */
16566
+ --db-checkbox-indeterminate-mark-width: var(--db-size-2); /* 8px */
16567
+ --db-checkbox-indeterminate-mark-height: calc(var(--db-size-1) * 0.75); /* 3px */
16068
16568
 
16069
16569
  /* Motion */
16070
16570
  --db-checkbox-transition-duration: var(--db-selection-toggle-transition-duration);
@@ -16124,8 +16624,8 @@ span.du-bois-light-typography-ellipsis-single-line {
16124
16624
  }
16125
16625
 
16126
16626
  .db-checkbox:active:has(.db-checkbox-input:not(:disabled, :checked, :indeterminate)) .db-checkbox-indicator {
16127
- background-color: var(--db-checkbox-surface-press);
16128
- border-color: var(--db-checkbox-border-press);
16627
+ background-color: var(--db-checkbox-surface-active);
16628
+ border-color: var(--db-checkbox-border-active);
16129
16629
  }
16130
16630
 
16131
16631
  /* Selected fill — checked and indeterminate share the same surface. */
@@ -16140,8 +16640,8 @@ span.du-bois-light-typography-ellipsis-single-line {
16140
16640
  }
16141
16641
 
16142
16642
  .db-checkbox:active:has(.db-checkbox-input:is(:checked, :indeterminate):not(:disabled)) .db-checkbox-indicator {
16143
- background-color: var(--db-checkbox-surface-checked-press);
16144
- border-color: var(--db-checkbox-surface-checked-press);
16643
+ background-color: var(--db-checkbox-surface-checked-active);
16644
+ border-color: var(--db-checkbox-surface-checked-active);
16145
16645
  }
16146
16646
 
16147
16647
  /* Mark visibility. */
@@ -16291,18 +16791,20 @@ span.du-bois-light-typography-ellipsis-single-line {
16291
16791
  .db-checkbox.db-checkbox + .du-bois-dark-form-message,
16292
16792
  .db-checkbox.db-checkbox + .du-bois-light-hint + .du-bois-light-form-message,
16293
16793
  .db-checkbox.db-checkbox + .du-bois-dark-hint + .du-bois-dark-form-message {
16294
- padding-left: var(--db-spacing-sm);
16794
+ padding-left: var(--db-space-6);
16295
16795
  margin-top: 0;
16296
16796
  }
16297
16797
 
16298
16798
  /* Group spacing against sibling form text — 8px gap above the group when it
16299
- * follows a Hint, 8px gap above a FormMessage when it follows the group.
16799
+ * follows a Label or Hint, 8px gap above a FormMessage when it follows the group.
16300
16800
  * Doubled class on the group side beats FormMessage's `&&` for the same reason. */
16801
+ .du-bois-light-label + .db-checkbox-group.db-checkbox-group,
16802
+ .du-bois-dark-label + .db-checkbox-group.db-checkbox-group,
16301
16803
  .du-bois-light-hint + .db-checkbox-group.db-checkbox-group,
16302
16804
  .du-bois-dark-hint + .db-checkbox-group.db-checkbox-group,
16303
16805
  .db-checkbox-group.db-checkbox-group + .du-bois-light-form-message,
16304
16806
  .db-checkbox-group.db-checkbox-group + .du-bois-dark-form-message {
16305
- margin-top: var(--db-spacing-2xs);
16807
+ margin-top: var(--db-space-2);
16306
16808
  }
16307
16809
 
16308
16810
  /* CheckboxGroup layout. Vertical delegates to the `.db-stack` primitive; the
@@ -16327,6 +16829,228 @@ span.du-bois-light-typography-ellipsis-single-line {
16327
16829
  --db-stack-gap: var(--db-checkbox-label-spacing);
16328
16830
  }
16329
16831
 
16832
+
16833
+
16834
+ :where(:root), :where(.du-bois-light) {
16835
+ /* Density */
16836
+ --db-drawer-padding-horizontal: var(--db-space-6);
16837
+ --db-drawer-padding-horizontal-small: var(--db-space-4);
16838
+ --db-drawer-content-padding-top: var(--db-space-4);
16839
+ --db-drawer-content-padding-top-small: var(--db-space-2);
16840
+ --db-drawer-footer-padding-top: var(--db-space-4);
16841
+ --db-drawer-footer-padding-bottom: var(--db-space-6);
16842
+ --db-drawer-footer-padding-bottom-small: var(--db-space-4);
16843
+ --db-drawer-title-margin-bottom: var(--db-space-2);
16844
+ --db-drawer-close-button-margin: var(--db-space-1);
16845
+
16846
+ /* Color */
16847
+ --db-drawer-surface: var(--db-surface-base);
16848
+ --db-drawer-text: var(--db-text-base);
16849
+ --db-drawer-border: var(--db-border-base);
16850
+ /* No v2 token holds the drawer scrim yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
16851
+ --db-drawer-overlay: var(--db-color-overlay-overlay);
16852
+ }
16853
+
16854
+ :where(:root), :where(.du-bois-light) {
16855
+ /* Elevation */
16856
+ --db-drawer-shadow: var(--db-elevation-high);
16857
+ }
16858
+
16859
+
16860
+
16861
+
16862
+
16863
+
16864
+
16865
+
16866
+
16867
+
16868
+ /* Component tokens for the native Icon. */
16869
+ :where(:root),
16870
+ :where(.du-bois-light) {
16871
+ --db-icon-size: var(--db-font-size-xl);
16872
+ --db-icon-color-danger: var(--db-color-text-validation-danger);
16873
+ --db-icon-color-warning: var(--db-color-text-validation-warning);
16874
+ --db-icon-color-success: var(--db-color-text-validation-success);
16875
+ --db-icon-ai-gradient-start: var(--db-ai-gradient-start);
16876
+ --db-icon-ai-gradient-mid: var(--db-ai-gradient-mid);
16877
+ --db-icon-ai-gradient-end: var(--db-ai-gradient-end);
16878
+ }
16879
+
16880
+ /* Native Icon styles. Ships through mortar.css and reads only component-tier --db-icon-* tokens.
16881
+ * Icon size is driven solely by the `--db-icon-size` design token: to resize an icon, set that
16882
+ * token in scope (default 16px in tokens.css) rather than overriding `font-size`. */
16883
+ .db-icon {
16884
+ display: inline-block;
16885
+ color: inherit;
16886
+ font-style: normal;
16887
+ font-size: var(--db-icon-size);
16888
+ line-height: 0;
16889
+ text-align: center;
16890
+ text-transform: none;
16891
+ vertical-align: -0.125em;
16892
+ text-rendering: optimizelegibility;
16893
+ -webkit-font-smoothing: antialiased;
16894
+ -moz-osx-font-smoothing: grayscale;
16895
+ }
16896
+
16897
+ .db-icon svg {
16898
+ display: inline-block;
16899
+ line-height: 1;
16900
+ }
16901
+
16902
+ /* TODO: remove once clickable-icon callsites are gone. Kept for backwards compatibility with the
16903
+ * AntD icon, which made icons clickable via onClick; some callsites still rely on it. Actual icons
16904
+ * should never carry a tabindex — a clickable icon belongs inside a button. */
16905
+ .db-icon[tabindex] {
16906
+ cursor: pointer;
16907
+ }
16908
+
16909
+ /* Semantic colors set `color` only; the SVG glyph paints its `fill`/`stroke` from `currentColor`,
16910
+ * so setting the text color recolors the icon. */
16911
+ .db-icon-danger {
16912
+ color: var(--db-icon-color-danger);
16913
+ }
16914
+
16915
+ .db-icon-warning {
16916
+ color: var(--db-icon-color-warning);
16917
+ }
16918
+
16919
+ .db-icon-success {
16920
+ color: var(--db-icon-color-success);
16921
+ }
16922
+
16923
+ .db-icon-ai svg * {
16924
+ fill: var(--db-icon-gradient);
16925
+ }
16926
+
16927
+ .db-icon-ai-gradient-start {
16928
+ stop-color: var(--db-icon-ai-gradient-start);
16929
+ }
16930
+
16931
+ .db-icon-ai-gradient-mid {
16932
+ stop-color: var(--db-icon-ai-gradient-mid);
16933
+ }
16934
+
16935
+ .db-icon-ai-gradient-end {
16936
+ stop-color: var(--db-icon-ai-gradient-end);
16937
+ }
16938
+
16939
+ .db-icon-gradient-definitions {
16940
+ position: absolute;
16941
+ width: 1px;
16942
+ height: 1px;
16943
+ padding: 0;
16944
+ margin: -1px;
16945
+ overflow: hidden;
16946
+ clip: rect(0, 0, 0, 0);
16947
+ white-space: nowrap;
16948
+ border: 0;
16949
+ }
16950
+
16951
+ .db-icon-spin {
16952
+ display: inline-block;
16953
+ animation: db-icon-loading-circle 1s infinite linear;
16954
+ }
16955
+
16956
+ @keyframes db-icon-loading-circle {
16957
+ 100% {
16958
+ transform: rotate(360deg);
16959
+ }
16960
+ }
16961
+
16962
+ @media (prefers-reduced-motion: reduce) {
16963
+ .db-icon-spin {
16964
+ animation: none;
16965
+ }
16966
+ }
16967
+
16968
+
16969
+
16970
+
16971
+ :where(:root), :where(.du-bois-light) {
16972
+ /* Shape */
16973
+ /* Must not scale with density; no non-scaling system token holds it. TODO(FEINF-6505): adopt a v2 system token when one is added. */
16974
+ --db-navigation-menu-indicator-thickness: 4px;
16975
+ /* No system token holds this control-specific inset. TODO(FEINF-6505): adopt a v2 system token when one is added. */
16976
+ --db-navigation-menu-focus-ring-offset: -1px;
16977
+
16978
+ /* Color */
16979
+ --db-navigation-menu-indicator: var(--db-accent-surface);
16980
+ --db-navigation-menu-focus-ring: var(--db-focus-ring-color);
16981
+ --db-navigation-menu-text: var(--db-text-subtle);
16982
+ --db-navigation-menu-text-selected: var(--db-text-base);
16983
+ /* No v2 semantic for default-action link text yet; bridges on the v1 --db-color-* token. */
16984
+ --db-navigation-menu-text-hover: var(--db-color-action-default-text-hover);
16985
+ --db-navigation-menu-text-active: var(--db-color-action-default-text-press);
16986
+
16987
+ /* Density */
16988
+ --db-navigation-menu-item-height: var(--db-size-8);
16989
+ --db-navigation-menu-item-min-width: var(--db-size-6);
16990
+ --db-navigation-menu-link-padding-top: var(--db-space-1);
16991
+ --db-navigation-menu-link-padding-bottom: var(--db-space-2);
16992
+ --db-navigation-menu-focus-ring-width: var(--db-focus-ring-width);
16993
+ }
16994
+
16995
+
16996
+ :where(:root), :where(.du-bois-light) {
16997
+ /* Color */
16998
+ /* No v2 token holds tertiary action-text states yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
16999
+ --db-overflow-trigger-text: var(--db-color-action-tertiary-text-default);
17000
+ --db-overflow-trigger-text-hover: var(--db-color-action-tertiary-text-hover);
17001
+ --db-overflow-trigger-text-press: var(--db-color-action-tertiary-text-press);
17002
+
17003
+ /* Density */
17004
+ --db-overflow-spacing: var(--db-space-2);
17005
+ --db-overflow-menu-spacing: var(--db-space-1);
17006
+ }
17007
+
17008
+
17009
+
17010
+ /* Popover is a neutral-card member of the popup family: surface, text, border, and radius come
17011
+ * from --db-popup-*. Link, focus, and spacing are popover-specific and reference system tokens
17012
+ * directly. The popup elevation scale is light-only, so the dark shadow is re-declared below. */
17013
+
17014
+ :where(:root), :where(.du-bois-light) {
17015
+ /* Shape */
17016
+ --db-popover-border-radius: var(--db-popup-border-radius);
17017
+
17018
+ /* Color */
17019
+ --db-popover-surface: var(--db-popup-surface);
17020
+ --db-popover-text: var(--db-popup-text);
17021
+ --db-popover-border: var(--db-popup-border);
17022
+ /* No v2 token holds the tertiary link text yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17023
+ --db-popover-link-text: var(--db-color-action-tertiary-text-default);
17024
+ --db-popover-link-text-hover: var(--db-color-action-tertiary-text-hover);
17025
+ --db-popover-focus-ring: var(--db-focus-ring-color);
17026
+
17027
+ /* Density */
17028
+ --db-popover-spacing: var(--db-space-2);
17029
+ --db-popover-focus-ring-width: var(--db-focus-ring-width);
17030
+
17031
+ /* Elevation */
17032
+ --db-popover-shadow: var(--db-popup-elevation);
17033
+ }
17034
+
17035
+
17036
+ /* Declared under the theme classes too (not just :root) so the var() chain re-resolves inside a
17037
+ * `.du-bois-dark` subtree instead of freezing at the light values. */
17038
+ :where(:root), :where(.du-bois-light) {
17039
+ /* Shape */
17040
+ --db-progress-border-radius: var(--db-shape-pill);
17041
+
17042
+ /* Color */
17043
+ --db-progress-track: var(--db-color-progress-track);
17044
+ --db-progress-fill: var(--db-color-progress-fill);
17045
+
17046
+ /* Density */
17047
+ --db-progress-size: var(--db-size-2);
17048
+
17049
+ /* Motion */
17050
+ /* No v2 motion token holds this duration. TODO(FEINF-6505): adopt a v2 motion token when one is added. */
17051
+ --db-progress-transition-duration: 300ms;
17052
+ }
17053
+
16330
17054
  :where(:root), :where(.du-bois-light) {
16331
17055
  /* Shape */
16332
17056
  --db-radio-border-radius: var(--db-radius-full);
@@ -16335,19 +17059,19 @@ span.du-bois-light-typography-ellipsis-single-line {
16335
17059
  /* Color */
16336
17060
  --db-radio-surface: var(--db-selection-toggle-surface);
16337
17061
  --db-radio-surface-hover: var(--db-color-action-default-background-hover);
16338
- --db-radio-surface-press: var(--db-color-action-default-background-press);
17062
+ --db-radio-surface-active: var(--db-color-action-default-background-press);
16339
17063
  --db-radio-surface-checked: var(--db-selection-toggle-surface-checked);
16340
17064
  --db-radio-surface-checked-hover: var(--db-selection-toggle-surface-checked-hover);
16341
- --db-radio-surface-checked-press: var(--db-color-action-default-background-press);
17065
+ --db-radio-surface-checked-active: var(--db-color-action-default-background-press);
16342
17066
  --db-radio-surface-disabled: var(--db-selection-toggle-surface-disabled);
16343
17067
 
16344
17068
  --db-radio-border: var(--db-color-action-default-border-default);
16345
17069
  --db-radio-border-hover: var(--db-selection-toggle-border-hover);
16346
- --db-radio-border-press: var(--db-selection-toggle-border-press);
17070
+ --db-radio-border-active: var(--db-selection-toggle-border-active);
16347
17071
  --db-radio-border-focus: var(--db-focus-ring-color);
16348
17072
  --db-radio-border-disabled: var(--db-color-action-disabled-border);
16349
- --db-radio-border-checked-hover: var(--db-selection-toggle-border-press);
16350
- --db-radio-border-checked-press: var(--db-color-action-default-border-press);
17073
+ --db-radio-border-checked-hover: var(--db-selection-toggle-border-active);
17074
+ --db-radio-border-checked-active: var(--db-color-action-default-border-press);
16351
17075
  --db-radio-border-unchecked-focus: var(--db-color-action-primary-background-default);
16352
17076
  --db-radio-outline-checked-focus: var(--db-color-action-primary-background-default);
16353
17077
 
@@ -16359,7 +17083,7 @@ span.du-bois-light-typography-ellipsis-single-line {
16359
17083
  /* Density */
16360
17084
  --db-radio-size: var(--db-selection-toggle-size);
16361
17085
  --db-radio-label-spacing: var(--db-selection-toggle-label-spacing);
16362
- --db-radio-mark-size: var(--db-size-3xs);
17086
+ --db-radio-mark-size: var(--db-size-1);
16363
17087
 
16364
17088
  /* Motion */
16365
17089
  --db-radio-transition-duration: var(--db-selection-toggle-transition-duration);
@@ -16410,8 +17134,8 @@ span.du-bois-light-typography-ellipsis-single-line {
16410
17134
  }
16411
17135
 
16412
17136
  .db-radio:active:has(input:not(:disabled, :checked)) .db-radio-indicator {
16413
- background-color: var(--db-radio-surface-press);
16414
- border-color: var(--db-radio-border-press);
17137
+ background-color: var(--db-radio-surface-active);
17138
+ border-color: var(--db-radio-border-active);
16415
17139
  }
16416
17140
 
16417
17141
  /* Selected fill. */
@@ -16430,8 +17154,8 @@ span.du-bois-light-typography-ellipsis-single-line {
16430
17154
  /* AntD getRadioInputStyles checked active: background = actionDefaultBackgroundPress,
16431
17155
  * borderColor = actionDefaultBorderPress (two-tone, not flat). */
16432
17156
  .db-radio:active:has(input:checked:not(:disabled)) .db-radio-indicator {
16433
- background-color: var(--db-radio-surface-checked-press);
16434
- border-color: var(--db-radio-border-checked-press);
17157
+ background-color: var(--db-radio-surface-checked-active);
17158
+ border-color: var(--db-radio-border-checked-active);
16435
17159
  }
16436
17160
 
16437
17161
  /* Dot visibility. */
@@ -16559,7 +17283,7 @@ span.du-bois-light-typography-ellipsis-single-line {
16559
17283
  .db-radio.db-radio + .du-bois-dark-form-message,
16560
17284
  .db-radio.db-radio + .du-bois-light-hint + .du-bois-light-form-message,
16561
17285
  .db-radio.db-radio + .du-bois-dark-hint + .du-bois-dark-form-message {
16562
- padding-inline-start: var(--db-spacing-sm);
17286
+ padding-inline-start: var(--db-space-6);
16563
17287
  margin-top: 0;
16564
17288
  }
16565
17289
 
@@ -16575,8 +17299,8 @@ span.du-bois-light-typography-ellipsis-single-line {
16575
17299
  .db-radio-group.db-stack > .db-radio.db-radio + .du-bois-dark-form-message,
16576
17300
  .db-radio-group.db-stack > .db-radio.db-radio + .du-bois-light-hint + .du-bois-light-form-message,
16577
17301
  .db-radio-group.db-stack > .db-radio.db-radio + .du-bois-dark-hint + .du-bois-dark-form-message {
16578
- margin-top: calc(-1 * var(--db-spacing-2xs));
16579
- margin-bottom: var(--db-spacing-2xs);
17302
+ margin-top: calc(-1 * var(--db-space-2));
17303
+ margin-bottom: var(--db-space-2);
16580
17304
  }
16581
17305
 
16582
17306
  /* AntD `& > label:last-of-type + hint { marginTop: 0 }`: the last radio has no
@@ -16590,11 +17314,13 @@ span.du-bois-light-typography-ellipsis-single-line {
16590
17314
  margin-top: 0;
16591
17315
  }
16592
17316
 
17317
+ .du-bois-light-label + .db-radio-group.db-radio-group,
17318
+ .du-bois-dark-label + .db-radio-group.db-radio-group,
16593
17319
  .du-bois-light-hint + .db-radio-group.db-radio-group,
16594
17320
  .du-bois-dark-hint + .db-radio-group.db-radio-group,
16595
17321
  .db-radio-group.db-radio-group + .du-bois-light-form-message,
16596
17322
  .db-radio-group.db-radio-group + .du-bois-dark-form-message {
16597
- margin-top: var(--db-spacing-2xs);
17323
+ margin-top: var(--db-space-2);
16598
17324
  }
16599
17325
 
16600
17326
  /* RadioGroup layout. Vertical (the default) delegates flex-direction to the
@@ -16615,7 +17341,7 @@ span.du-bois-light-typography-ellipsis-single-line {
16615
17341
 
16616
17342
  /* AntD `& > label { paddingBottom: sm }`. */
16617
17343
  .db-radio-group.db-stack > .db-radio {
16618
- padding-bottom: var(--db-spacing-2xs);
17344
+ padding-bottom: var(--db-space-2);
16619
17345
  }
16620
17346
 
16621
17347
  /* AntD `& > label:last-of-type { paddingBottom: 0 }`. */
@@ -16631,7 +17357,7 @@ span.du-bois-light-typography-ellipsis-single-line {
16631
17357
  .db-radio-group.db-stack > .du-bois-light-radio-tile + .du-bois-dark-radio-tile,
16632
17358
  .db-radio-group.db-stack > .du-bois-dark-radio-tile + .du-bois-light-radio-tile,
16633
17359
  .db-radio-group.db-stack > .du-bois-dark-radio-tile + .du-bois-dark-radio-tile {
16634
- margin-top: var(--db-spacing-xs);
17360
+ margin-top: var(--db-space-4);
16635
17361
  }
16636
17362
 
16637
17363
  /* Horizontal: AntD `getHorizontalRadioGroupStyles` is a TWO-ROW grid (NOT a flex
@@ -16644,7 +17370,7 @@ span.du-bois-light-typography-ellipsis-single-line {
16644
17370
  display: grid;
16645
17371
  grid-template-rows: [label] auto [hint] auto;
16646
17372
  grid-auto-columns: max-content;
16647
- column-gap: var(--db-spacing-xs);
17373
+ column-gap: var(--db-space-4);
16648
17374
  }
16649
17375
 
16650
17376
  /* Equal column widths: AntD `gridAutoColumns: minmax(0, 1fr)`. */
@@ -16677,16 +17403,85 @@ span.du-bois-light-typography-ellipsis-single-line {
16677
17403
  * the group itself gets a top margin (room above the two-row grid). */
16678
17404
  .db-radio-group--horizontal:has(> .du-bois-light-hint),
16679
17405
  .db-radio-group--horizontal:has(> .du-bois-dark-hint) {
16680
- margin-top: var(--db-spacing-2xs);
17406
+ margin-top: var(--db-space-2);
16681
17407
  }
16682
17408
 
16683
17409
  /* AntD `&& + form-message { marginTop: sm }` (horizontal): a form-message following
16684
17410
  * the whole group is separated by sm. */
16685
17411
  .db-radio-group--horizontal + .du-bois-light-form-message,
16686
17412
  .db-radio-group--horizontal + .du-bois-dark-form-message {
16687
- margin-top: var(--db-spacing-2xs);
17413
+ margin-top: var(--db-space-2);
17414
+ }
17415
+
17416
+
17417
+
17418
+
17419
+
17420
+ :where(:root), :where(.du-bois-light) {
17421
+ /* Shape */
17422
+ --db-slider-border-radius: var(--db-shape-pill);
17423
+
17424
+ /* Color */
17425
+ /* No v2 token holds the track + disabled-range surface yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17426
+ --db-slider-track-surface: #e8ecf0;
17427
+ --db-slider-range-surface-disabled: #e8ecf0;
17428
+ /* No v2 token holds the range fill yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17429
+ --db-slider-range-surface: #2272b4;
17430
+
17431
+ --db-slider-thumb-surface: var(--db-accent-surface);
17432
+ --db-slider-thumb-surface-hover: var(--db-accent-surface-hover);
17433
+ --db-slider-thumb-surface-press: var(--db-accent-surface-active);
17434
+ /* No v2 token holds the disabled thumb yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17435
+ --db-slider-thumb-surface-disabled: #d1d9e1;
17436
+
17437
+ /* Density */
17438
+ --db-slider-size: var(--db-size-5); /* 20px */
17439
+ --db-slider-thumb-size: var(--db-size-5); /* 20px */
17440
+ --db-slider-track-thickness: calc(var(--db-size-1) * 0.75); /* 3px */
17441
+ }
17442
+
17443
+ :where(:root), :where(.du-bois-light) {
17444
+ /* Shape */
17445
+ /* TODO(FEINF-6505): adopt --db-shape-container-* once a 4px container radius exists; kept on --db-radius-sm to preserve 4px. */
17446
+ --db-snackbar-border-radius: var(--db-radius-sm);
17447
+
17448
+ /* Density */
17449
+ --db-snackbar-spacing-vertical: var(--db-space-3);
17450
+ --db-snackbar-spacing-horizontal: var(--db-space-4);
17451
+ --db-snackbar-close-button-spacing: var(--db-space-2);
17452
+
17453
+ /* Color */
17454
+ /* No v1/v2 system token holds this theme-invariant white. TODO(FEINF-6505): adopt a v2 system token when one is added. */
17455
+ --db-snackbar-text: #ffffff;
17456
+ /* No v1/v2 system token holds these theme-invariant close-icon colors. TODO(FEINF-6505): adopt a v2 system token when one is added. */
17457
+ --db-snackbar-close-icon: #e8ecf0;
17458
+ --db-snackbar-close-icon-hover: #8acaff;
17459
+ --db-snackbar-close-icon-active: #bae1fc;
17460
+ }
17461
+
17462
+ :where(:root), :where(.du-bois-light) {
17463
+ /* Color */
17464
+ /* No v1/v2 system token holds this light/dark surface pair. TODO(FEINF-6505): adopt a v2 system token when one is added. */
17465
+ --db-snackbar-surface: #11171c;
17466
+
17467
+ /* Elevation */
17468
+ --db-snackbar-shadow: var(--db-elevation-med);
17469
+ }
17470
+
17471
+ /* Spacer's height is a spacing step. The size prop (xs/sm/mid/md/lg) selects one component token,
17472
+ * each aliasing the system space scale — theme-invariant, so a single block (no light/dark split). */
17473
+
17474
+ :where(:root), :where(.du-bois-light) {
17475
+ /* Density */
17476
+ --db-spacer-size-xs: var(--db-space-1); /* 4px */
17477
+ --db-spacer-size-sm: var(--db-space-2); /* 8px */
17478
+ --db-spacer-size-mid: var(--db-space-3); /* 12px */
17479
+ --db-spacer-size-md: var(--db-space-4); /* 16px */
17480
+ --db-spacer-size-lg: var(--db-space-6); /* 24px */
16688
17481
  }
16689
17482
 
17483
+
17484
+
16690
17485
  :where(:root), :where(.du-bois-light) {
16691
17486
  /* Shape */
16692
17487
  --db-switch-border-radius: var(--db-radius-full);
@@ -16695,20 +17490,20 @@ span.du-bois-light-typography-ellipsis-single-line {
16695
17490
  /* Color */
16696
17491
  --db-switch-surface: var(--db-selection-toggle-surface);
16697
17492
  --db-switch-surface-hover: var(--db-color-action-default-background-hover);
16698
- --db-switch-surface-press: var(--db-color-action-default-background-press);
17493
+ --db-switch-surface-active: var(--db-color-action-default-background-press);
16699
17494
  --db-switch-surface-checked: var(--db-selection-toggle-surface-checked);
16700
17495
  --db-switch-surface-checked-hover: var(--db-selection-toggle-surface-checked-hover);
16701
- --db-switch-surface-checked-press: var(--db-selection-toggle-surface-checked-press);
17496
+ --db-switch-surface-checked-active: var(--db-selection-toggle-surface-checked-active);
16702
17497
  --db-switch-surface-disabled: var(--db-selection-toggle-surface-disabled);
16703
17498
  --db-switch-surface-checked-disabled: var(--db-color-action-disabled-text);
16704
17499
 
16705
17500
  --db-switch-border: var(--db-color-action-default-border-default);
16706
17501
  --db-switch-border-hover: var(--db-selection-toggle-border-hover);
16707
- --db-switch-border-press: var(--db-selection-toggle-border-press);
17502
+ --db-switch-border-active: var(--db-selection-toggle-border-active);
16708
17503
  --db-switch-border-disabled: var(--db-color-action-disabled-border);
16709
17504
  --db-switch-border-checked: var(--db-selection-toggle-surface-checked);
16710
17505
  --db-switch-border-checked-hover: var(--db-selection-toggle-surface-checked-hover);
16711
- --db-switch-border-checked-press: var(--db-selection-toggle-surface-checked-press);
17506
+ --db-switch-border-checked-active: var(--db-selection-toggle-surface-checked-active);
16712
17507
  --db-switch-border-focus: var(--db-selection-toggle-surface-checked);
16713
17508
 
16714
17509
  --db-switch-thumb: var(--db-selection-toggle-surface);
@@ -16717,8 +17512,8 @@ span.du-bois-light-typography-ellipsis-single-line {
16717
17512
  --db-switch-text-disabled: var(--db-selection-toggle-text-disabled);
16718
17513
 
16719
17514
  /* Density */
16720
- --db-switch-track-width: calc(var(--db-size-xs) * 1.75); /* 28px */
16721
- --db-switch-track-height: var(--db-size-xs); /* 16px */
17515
+ --db-switch-track-width: calc(var(--db-size-4) * 1.75); /* 28px */
17516
+ --db-switch-track-height: var(--db-size-4); /* 16px */
16722
17517
  --db-switch-thumb-size: var(--db-switch-track-height);
16723
17518
  --db-switch-label-spacing: var(--db-selection-toggle-label-spacing);
16724
17519
 
@@ -16784,8 +17579,8 @@ span.du-bois-light-typography-ellipsis-single-line {
16784
17579
  }
16785
17580
 
16786
17581
  .db-switch:active input:not(:disabled):not(:checked) {
16787
- background-color: var(--db-switch-surface-press);
16788
- border-color: var(--db-switch-border-press);
17582
+ background-color: var(--db-switch-surface-active);
17583
+ border-color: var(--db-switch-border-active);
16789
17584
  }
16790
17585
 
16791
17586
  .db-switch input:checked {
@@ -16799,8 +17594,8 @@ span.du-bois-light-typography-ellipsis-single-line {
16799
17594
  }
16800
17595
 
16801
17596
  .db-switch:active input:checked:not(:disabled) {
16802
- background-color: var(--db-switch-surface-checked-press);
16803
- border-color: var(--db-switch-border-checked-press);
17597
+ background-color: var(--db-switch-surface-checked-active);
17598
+ border-color: var(--db-switch-border-checked-active);
16804
17599
  }
16805
17600
 
16806
17601
  .db-switch input:checked::before {
@@ -16867,21 +17662,126 @@ span.du-bois-light-typography-ellipsis-single-line {
16867
17662
  }
16868
17663
 
16869
17664
  /* Indent a following hint/message past the track. The class is doubled to out-specify FormMessage's
16870
- * own margin rule. */
16871
- :is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper)
16872
- + :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)
17665
+ * own margin rule. Each rule's key (rightmost) selector is a single class, not a multi-item :is(),
17666
+ * so Chromium can hash-reject it instead of attempting the match against every element on every
17667
+ * recalc (the leading/middle :is() groups aren't the key selector, so they're left as-is). */
17668
+ :is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper) + .du-bois-light-hint, :is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper) + .du-bois-dark-hint, :is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper) + .du-bois-light-form-message, :is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper) + .du-bois-dark-form-message, :is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper)
17669
+ + :is(.du-bois-light-hint, .du-bois-dark-hint)
17670
+ + .du-bois-light-form-message, :is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper)
16873
17671
  + :is(.du-bois-light-hint, .du-bois-dark-hint)
16874
- + :is(.du-bois-light-form-message, .du-bois-dark-form-message) {
16875
- padding-inline-start: calc(var(--db-spacing-2xs) + var(--db-switch-track-width));
17672
+ + .du-bois-dark-form-message {
17673
+ padding-inline-start: calc(var(--db-space-2) + var(--db-switch-track-width));
16876
17674
  }
16877
17675
 
16878
- :is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper)
16879
- + :is(.du-bois-light-form-message, .du-bois-dark-form-message), :is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper)
17676
+ :is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper) + .du-bois-light-form-message, :is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper) + .du-bois-dark-form-message, :is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper)
16880
17677
  + :is(.du-bois-light-hint, .du-bois-dark-hint)
16881
- + :is(.du-bois-light-form-message, .du-bois-dark-form-message) {
17678
+ + .du-bois-light-form-message, :is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper)
17679
+ + :is(.du-bois-light-hint, .du-bois-dark-hint)
17680
+ + .du-bois-dark-form-message {
16882
17681
  margin-top: 0;
16883
17682
  }
16884
17683
 
17684
+ /* Component tokens for Tabs (no family). Re-declared under the theme classes, not only :root, so the
17685
+ * var() chain re-resolves inside a .du-bois-dark subtree instead of freezing at the light value. */
17686
+ :where(:root), :where(.du-bois-light) {
17687
+ /* ── Density ──────────────────────────────────────────────────────────── */
17688
+ --db-tabs-height: var(--db-size-8);
17689
+ --db-tabs-trigger-min-width: var(--db-size-6);
17690
+ --db-tabs-trigger-min-width-closable: var(--db-size-10);
17691
+ --db-tabs-list-margin-bottom: var(--db-space-4);
17692
+ --db-tabs-trigger-gap: var(--db-space-4);
17693
+ --db-tabs-trigger-padding-top: var(--db-space-1);
17694
+ --db-tabs-trigger-padding-bottom: var(--db-space-2);
17695
+ --db-tabs-close-icon-gap: var(--db-space-1);
17696
+ --db-tabs-add-button-margin-top: var(--db-space-0-5);
17697
+ /* No 1.5-unit space step exists; synthesize 6px from the nearest. TODO: use a direct step if one lands. */
17698
+ --db-tabs-add-button-margin-bottom: calc(var(--db-space-1) * 1.5);
17699
+
17700
+ /* ── Shape ────────────────────────────────────────────────────────────── */
17701
+ --db-tabs-scrollbar-radius: var(--db-shape-control);
17702
+ --db-tabs-focus-ring-width: var(--db-focus-ring-width);
17703
+
17704
+ /* ── Typography ───────────────────────────────────────────────────────── */
17705
+ --db-tabs-font-size: var(--db-font-size-base);
17706
+ --db-tabs-font-weight: var(--db-font-weight-semibold);
17707
+ /* No v2 token holds the tab line-height yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17708
+ --db-tabs-line-height: 1.25rem;
17709
+
17710
+ /* ── Color ────────────────────────────────────────────────────────────── */
17711
+ /* No v2 token holds the tab text / hover / press / active / disabled colors yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17712
+ --db-tabs-text: var(--db-color-text-secondary);
17713
+ --db-tabs-text-hover: var(--db-color-action-default-text-hover);
17714
+ --db-tabs-text-press: var(--db-color-action-default-text-press);
17715
+ --db-tabs-text-active: var(--db-color-text-primary);
17716
+ --db-tabs-text-disabled: var(--db-color-action-disabled-text);
17717
+ /* No v2 token holds the tab panel content text color yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17718
+ --db-tabs-content-text: var(--db-color-text-primary);
17719
+ /* No v2 token holds the active-tab underline yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17720
+ --db-tabs-indicator: var(--db-color-action-primary-background-default);
17721
+ /* No v2 token holds the list divider yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17722
+ --db-tabs-border: var(--db-color-action-default-border-default);
17723
+ /* No v2 token holds the focus ring color yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17724
+ --db-tabs-focus-ring: var(--db-color-action-default-border-focus);
17725
+ }
17726
+
17727
+ /* No v2 token holds the scrollbar thumb yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17728
+ :where(:root), :where(.du-bois-light) {
17729
+ --db-tabs-scrollbar-thumb: rgba(17, 23, 28, 0.2);
17730
+ --db-tabs-scrollbar-thumb-hover: rgba(17, 23, 28, 0.3);
17731
+ }
17732
+
17733
+
17734
+
17735
+ :where(:root), :where(.du-bois-light) {
17736
+ /* Shape */
17737
+ --db-toolbar-border-radius: var(--db-shape-control);
17738
+
17739
+ /* Color */
17740
+ --db-toolbar-surface: var(--db-surface-subtle);
17741
+ --db-toolbar-border: var(--db-border-base);
17742
+ --db-toolbar-separator-surface: var(--db-border-base);
17743
+ --db-toolbar-toggle-item-text: var(--db-text-base);
17744
+ /* No v2 token holds the toggle hover / press text yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17745
+ --db-toolbar-toggle-item-text-hover: var(--db-color-action-default-text-hover);
17746
+ --db-toolbar-toggle-item-text-press: var(--db-color-action-default-text-press);
17747
+ --db-toolbar-shadow: var(--db-elevation-med);
17748
+
17749
+ /* Density */
17750
+ --db-toolbar-gap: var(--db-space-4);
17751
+ --db-toolbar-spacing: var(--db-space-2);
17752
+ }
17753
+
17754
+ /* Tooltip renders an inverted surface (dark chip in light mode, light chip in dark mode), so it does
17755
+ * not draw from the popover family's neutral surface. Surface/text reference the v1 tooltip
17756
+ * primitives from tokens-groups until a v2 semantic exists. */
17757
+
17758
+ :where(:root), :where(.du-bois-light) {
17759
+ /* Shape */
17760
+ --db-tooltip-border-radius: var(--db-radius-sm);
17761
+
17762
+ /* Density */
17763
+ --db-tooltip-spacing-vertical: var(--db-space-1);
17764
+ --db-tooltip-spacing-horizontal: var(--db-space-2);
17765
+
17766
+ /* Typography */
17767
+ --db-tooltip-font-size: var(--db-font-size-base);
17768
+ --db-tooltip-font-weight: var(--db-font-weight-normal);
17769
+ }
17770
+
17771
+ :where(:root), :where(.du-bois-light) {
17772
+ /* Color */
17773
+ --db-tooltip-surface: var(--db-color-tooltip-background-tooltip);
17774
+ --db-tooltip-text: var(--db-color-tooltip-text-tooltip);
17775
+ /* v1 blue primitives, held as literals until a v2 link-on-tooltip semantic exists. */
17776
+ --db-tooltip-link-text: #4299e0; /* blue500 */
17777
+ --db-tooltip-link-text-hover: #8acaff; /* blue400 */
17778
+ --db-tooltip-link-text-active: #bae1fc; /* blue300 */
17779
+
17780
+ /* Elevation */
17781
+ --db-tooltip-shadow: var(--db-elevation-med);
17782
+ }
17783
+
17784
+
16885
17785
 
16886
17786
  :where(.du-bois-light-btn-icon-only) > :where(.anticon),
16887
17787
  :where(.du-bois-light-btn-icon-only) > :where(.du-bois-light-btn-loading-icon) {