@digiko-npm/designsystem 0.2.1 → 0.2.3

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.
@@ -1,4 +1,4 @@
1
- /* @ds/designsystem v0.2.1 */
1
+ /* @ds/designsystem v0.2.2 */
2
2
  /* ==========================================================================
3
3
  @digiko-npm/designsystem
4
4
 
@@ -87,7 +87,7 @@
87
87
  }
88
88
 
89
89
  /* Dark theme */
90
- [data-theme="dark"] {
90
+ [data-theme="dark"], .dark {
91
91
  /* --- Backgrounds — deep, refined zinc-900 palette --- */
92
92
  --ds-color-bg: #09090b;
93
93
  --ds-color-bg-subtle: #0f0f11;
@@ -169,13 +169,17 @@
169
169
  --ds-color-accent-green: #16a34a;
170
170
  --ds-color-accent-orange: #d97706;
171
171
  --ds-color-accent-blue-subtle: rgba(37, 99, 235, 0.1);
172
+ --ds-color-accent-blue-border: rgba(37, 99, 235, 0.2);
172
173
  --ds-color-accent-purple-subtle: rgba(124, 58, 237, 0.1);
174
+ --ds-color-accent-purple-border: rgba(124, 58, 237, 0.2);
173
175
  --ds-color-accent-green-subtle: rgba(22, 163, 74, 0.1);
176
+ --ds-color-accent-green-border: rgba(22, 163, 74, 0.2);
174
177
  --ds-color-accent-orange-subtle: rgba(217, 119, 6, 0.1);
178
+ --ds-color-accent-orange-border: rgba(217, 119, 6, 0.2);
175
179
  }
176
180
 
177
181
  /* Dark overrides for status/accent (brighter for contrast) */
178
- [data-theme="dark"] {
182
+ [data-theme="dark"], .dark {
179
183
  --ds-color-success: #4ade80;
180
184
  --ds-color-success-subtle: rgba(74, 222, 128, 0.1);
181
185
  --ds-color-success-border: rgba(74, 222, 128, 0.2);
@@ -197,9 +201,13 @@
197
201
  --ds-color-accent-green: #4ade80;
198
202
  --ds-color-accent-orange: #fbbf24;
199
203
  --ds-color-accent-blue-subtle: rgba(96, 165, 250, 0.1);
204
+ --ds-color-accent-blue-border: rgba(96, 165, 250, 0.2);
200
205
  --ds-color-accent-purple-subtle: rgba(167, 139, 250, 0.1);
206
+ --ds-color-accent-purple-border: rgba(167, 139, 250, 0.2);
201
207
  --ds-color-accent-green-subtle: rgba(74, 222, 128, 0.1);
208
+ --ds-color-accent-green-border: rgba(74, 222, 128, 0.2);
202
209
  --ds-color-accent-orange-subtle: rgba(251, 191, 36, 0.1);
210
+ --ds-color-accent-orange-border: rgba(251, 191, 36, 0.2);
203
211
  }
204
212
 
205
213
  /* ==========================================================================
@@ -220,6 +228,7 @@
220
228
  --ds-font-display-weight: 400;
221
229
 
222
230
  /* --- Font Sizes --- */
231
+ --ds-text-2xs: 0.625rem; /* 10px */
223
232
  --ds-text-xs: 0.75rem; /* 12px */
224
233
  --ds-text-sm: 0.875rem; /* 14px */
225
234
  --ds-text-base: 1rem; /* 16px */
@@ -279,6 +288,20 @@
279
288
  --ds-space-24: 6rem; /* 96px */
280
289
  --ds-space-32: 8rem; /* 128px */
281
290
 
291
+ /* --- Component Height Scale ---
292
+ Inline components at the same size tier share the same height.
293
+ Button SM + Input SM = both 32px. Always.
294
+ Based on Radix Themes convention (multiples of 8).
295
+
296
+ --ds-size-1: 24px — xs (btn--xs, input--xs)
297
+ --ds-size-2: 32px — sm (btn--sm, input--sm)
298
+ --ds-size-3: 40px — md (btn, input — default)
299
+ --ds-size-4: 48px — lg (btn--lg, input--lg) */
300
+ --ds-size-1: 1.5rem;
301
+ --ds-size-2: 2rem;
302
+ --ds-size-3: 2.5rem;
303
+ --ds-size-4: 3rem;
304
+
282
305
  /* --- Section Padding (responsive, generous) --- */
283
306
  --ds-section-padding: clamp(80px, 12vw, 160px);
284
307
 
@@ -510,6 +533,12 @@ strong, b {
510
533
  color: var(--ds-color-text-secondary);
511
534
  }
512
535
 
536
+ /* UI heading — body font for functional/interface headings (labels, settings, admin) */
537
+ .ds-heading-ui {
538
+ font-family: var(--ds-font-sans);
539
+ font-weight: var(--ds-weight-medium);
540
+ }
541
+
513
542
  /* Section title style */
514
543
  .ds-section-title {
515
544
  font-family: var(--ds-font-display);
@@ -632,8 +661,9 @@ hr {
632
661
  display: inline-flex;
633
662
  align-items: center;
634
663
  justify-content: center;
664
+ height: var(--ds-size-3);
635
665
  gap: var(--ds-space-2);
636
- padding: var(--ds-space-2) var(--ds-space-4);
666
+ padding: 0 var(--ds-space-4);
637
667
  font-family: var(--ds-font-sans);
638
668
  font-size: var(--ds-text-sm);
639
669
  font-weight: var(--ds-weight-medium);
@@ -642,7 +672,7 @@ hr {
642
672
  border-radius: var(--ds-radius-lg);
643
673
  border: 1px solid transparent;
644
674
  cursor: pointer;
645
- transition: all var(--ds-duration-fast) ease;
675
+ transition: all var(--ds-duration-fast) var(--ds-ease-default);
646
676
 
647
677
  /* Default: inverted (dark bg in light mode, light bg in dark mode) */
648
678
  background-color: var(--ds-color-inverted);
@@ -706,7 +736,7 @@ hr {
706
736
  }
707
737
  .ds-btn--danger:hover {
708
738
  background-color: var(--ds-color-error);
709
- color: #fff;
739
+ color: var(--ds-color-on-inverted);
710
740
  opacity: 1;
711
741
  }
712
742
 
@@ -717,21 +747,31 @@ hr {
717
747
  }
718
748
  .ds-btn--success:hover {
719
749
  background-color: var(--ds-color-success);
720
- color: #fff;
750
+ color: var(--ds-color-on-inverted);
721
751
  opacity: 1;
722
752
  }
723
753
 
724
754
  /* --- Sizes --- */
725
755
 
756
+ .ds-btn--xs {
757
+ height: var(--ds-size-1);
758
+ padding: 0 var(--ds-space-2);
759
+ font-size: var(--ds-text-xs);
760
+ gap: var(--ds-space-1);
761
+ border-radius: var(--ds-radius-md);
762
+ }
763
+
726
764
  .ds-btn--sm {
727
- padding: var(--ds-space-1-5) var(--ds-space-3);
765
+ height: var(--ds-size-2);
766
+ padding: 0 var(--ds-space-3);
728
767
  font-size: var(--ds-text-sm);
729
768
  gap: var(--ds-space-1-5);
730
769
  border-radius: var(--ds-radius-md);
731
770
  }
732
771
 
733
772
  .ds-btn--lg {
734
- padding: var(--ds-space-3) var(--ds-space-6);
773
+ height: var(--ds-size-4);
774
+ padding: 0 var(--ds-space-6);
735
775
  font-size: var(--ds-text-base);
736
776
  border-radius: var(--ds-radius-lg);
737
777
  }
@@ -739,11 +779,15 @@ hr {
739
779
  /* --- Pill (rounded-full, like hero CTAs) --- */
740
780
  .ds-btn--pill {
741
781
  border-radius: var(--ds-radius-full);
742
- padding: var(--ds-space-3) var(--ds-space-6);
782
+ padding: 0 var(--ds-space-6);
783
+ }
784
+
785
+ .ds-btn--pill.ds-btn--xs {
786
+ padding: 0 var(--ds-space-3);
743
787
  }
744
788
 
745
789
  .ds-btn--pill.ds-btn--sm {
746
- padding: var(--ds-space-2) var(--ds-space-5);
790
+ padding: 0 var(--ds-space-5);
747
791
  }
748
792
 
749
793
  /* --- Full Width --- */
@@ -752,14 +796,19 @@ hr {
752
796
  /* --- Icon Only --- */
753
797
  .ds-btn--icon {
754
798
  padding: 0;
755
- width: 2.25rem;
756
- height: 2.25rem;
799
+ width: var(--ds-size-3);
800
+ height: var(--ds-size-3);
757
801
  border-radius: var(--ds-radius-md);
758
802
  }
759
803
 
804
+ .ds-btn--icon.ds-btn--xs {
805
+ width: var(--ds-size-1);
806
+ height: var(--ds-size-1);
807
+ }
808
+
760
809
  .ds-btn--icon.ds-btn--sm {
761
- width: 2rem;
762
- height: 2rem;
810
+ width: var(--ds-size-2);
811
+ height: var(--ds-size-2);
763
812
  }
764
813
 
765
814
  /* --- Button Group --- */
@@ -931,7 +980,7 @@ hr {
931
980
  .ds-textarea,
932
981
  .ds-select {
933
982
  width: 100%;
934
- padding: var(--ds-space-2-5) var(--ds-space-4);
983
+ padding: 0 var(--ds-space-4);
935
984
  font-family: var(--ds-font-sans);
936
985
  font-size: var(--ds-text-sm);
937
986
  line-height: var(--ds-leading-normal);
@@ -939,7 +988,12 @@ hr {
939
988
  background-color: var(--ds-color-surface);
940
989
  border: 1px solid var(--ds-color-border);
941
990
  border-radius: var(--ds-radius-lg);
942
- transition: all var(--ds-duration-fast) ease;
991
+ transition: all var(--ds-duration-fast) var(--ds-ease-default);
992
+ }
993
+
994
+ .ds-input,
995
+ .ds-select {
996
+ height: var(--ds-size-3);
943
997
  }
944
998
 
945
999
  .ds-input:hover,
@@ -976,14 +1030,23 @@ hr {
976
1030
  }
977
1031
 
978
1032
  /* Sizes */
1033
+ .ds-input--xs {
1034
+ height: var(--ds-size-1);
1035
+ padding: 0 var(--ds-space-1-5);
1036
+ font-size: var(--ds-text-xs);
1037
+ border-radius: var(--ds-radius-sm);
1038
+ }
1039
+
979
1040
  .ds-input--sm {
980
- padding: var(--ds-space-1) var(--ds-space-2);
1041
+ height: var(--ds-size-2);
1042
+ padding: 0 var(--ds-space-2);
981
1043
  font-size: var(--ds-text-xs);
982
1044
  border-radius: var(--ds-radius-md);
983
1045
  }
984
1046
 
985
1047
  .ds-input--lg {
986
- padding: var(--ds-space-3) var(--ds-space-4);
1048
+ height: var(--ds-size-4);
1049
+ padding: 0 var(--ds-space-4);
987
1050
  font-size: var(--ds-text-base);
988
1051
  }
989
1052
 
@@ -991,6 +1054,7 @@ hr {
991
1054
  .ds-textarea {
992
1055
  min-height: 6rem;
993
1056
  padding: var(--ds-space-2-5) var(--ds-space-4);
1057
+ height: auto;
994
1058
  resize: vertical;
995
1059
  }
996
1060
 
@@ -1079,13 +1143,13 @@ hr {
1079
1143
  .ds-badge--info {
1080
1144
  background-color: var(--ds-color-accent-blue-subtle);
1081
1145
  color: var(--ds-color-accent-blue);
1082
- border-color: rgba(37, 99, 235, 0.2);
1146
+ border-color: var(--ds-color-accent-blue-border);
1083
1147
  }
1084
1148
 
1085
1149
  .ds-badge--purple {
1086
1150
  background-color: var(--ds-color-accent-purple-subtle);
1087
1151
  color: var(--ds-color-accent-purple);
1088
- border-color: rgba(124, 58, 237, 0.2);
1152
+ border-color: var(--ds-color-accent-purple-border);
1089
1153
  }
1090
1154
 
1091
1155
  /* Outline (no bg) */
@@ -1107,7 +1171,7 @@ hr {
1107
1171
  /* Uppercase badge (like "NEW", "BETA") */
1108
1172
  .ds-badge--upper {
1109
1173
  text-transform: uppercase;
1110
- font-size: 10px;
1174
+ font-size: var(--ds-text-2xs);
1111
1175
  font-weight: var(--ds-weight-semibold);
1112
1176
  letter-spacing: var(--ds-tracking-wide);
1113
1177
  }
@@ -1302,7 +1366,7 @@ hr {
1302
1366
  background-color: var(--ds-color-surface);
1303
1367
  border: 1px solid var(--ds-color-border);
1304
1368
  border-radius: var(--ds-radius-xl);
1305
- box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
1369
+ box-shadow: var(--ds-shadow-lg);
1306
1370
  overflow: hidden;
1307
1371
  display: flex;
1308
1372
  flex-direction: column;
@@ -1422,7 +1486,7 @@ hr {
1422
1486
  color: var(--ds-color-text-tertiary);
1423
1487
  padding: var(--ds-space-1);
1424
1488
  border-radius: var(--ds-radius-sm);
1425
- transition: color var(--ds-duration-fast) ease;
1489
+ transition: color var(--ds-duration-fast) var(--ds-ease-default);
1426
1490
  }
1427
1491
  .ds-toast__close:hover {
1428
1492
  color: var(--ds-color-text);
@@ -1591,7 +1655,7 @@ hr {
1591
1655
  border-left: none;
1592
1656
  border-right: none;
1593
1657
  white-space: nowrap;
1594
- transition: all var(--ds-duration-fast) ease;
1658
+ transition: all var(--ds-duration-fast) var(--ds-ease-default);
1595
1659
  margin-bottom: -1px;
1596
1660
  }
1597
1661
 
@@ -1757,7 +1821,7 @@ hr {
1757
1821
  color: var(--ds-color-text-tertiary);
1758
1822
  border-radius: var(--ds-radius-sm);
1759
1823
  cursor: pointer;
1760
- transition: color var(--ds-duration-fast) ease;
1824
+ transition: color var(--ds-duration-fast) var(--ds-ease-default);
1761
1825
  }
1762
1826
 
1763
1827
  .ds-alert__close:hover {
@@ -2502,7 +2566,7 @@ hr {
2502
2566
  width: 1.25rem;
2503
2567
  height: 1.25rem;
2504
2568
  border-radius: var(--ds-radius-full);
2505
- background-color: #fff;
2569
+ background-color: var(--ds-color-surface);
2506
2570
  box-shadow: var(--ds-shadow-sm);
2507
2571
  transform: translateY(-50%);
2508
2572
  transition: transform var(--ds-duration-normal) var(--ds-ease-out);
@@ -2540,8 +2604,8 @@ hr {
2540
2604
  --------------------------------------------------------------------------- */
2541
2605
 
2542
2606
  .ds-toggle:focus-visible {
2543
- outline: 2px solid var(--ds-color-interactive);
2544
- outline-offset: 2px;
2607
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
2608
+ outline-offset: var(--ds-ring-offset);
2545
2609
  }
2546
2610
 
2547
2611
  /* ---------------------------------------------------------------------------
@@ -2660,8 +2724,8 @@ hr {
2660
2724
  }
2661
2725
 
2662
2726
  .ds-breadcrumb__link:focus-visible {
2663
- outline: 2px solid var(--ds-color-interactive);
2664
- outline-offset: 2px;
2727
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
2728
+ outline-offset: var(--ds-ring-offset);
2665
2729
  border-radius: var(--ds-radius-sm);
2666
2730
  }
2667
2731
 
@@ -2746,8 +2810,8 @@ hr {
2746
2810
  }
2747
2811
 
2748
2812
  .ds-pagination__item:focus-visible {
2749
- outline: 2px solid var(--ds-color-interactive);
2750
- outline-offset: 2px;
2813
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
2814
+ outline-offset: var(--ds-ring-offset);
2751
2815
  }
2752
2816
 
2753
2817
  /* ---------------------------------------------------------------------------
@@ -2805,8 +2869,8 @@ hr {
2805
2869
 
2806
2870
  .ds-pagination__prev:focus-visible,
2807
2871
  .ds-pagination__next:focus-visible {
2808
- outline: 2px solid var(--ds-color-interactive);
2809
- outline-offset: 2px;
2872
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
2873
+ outline-offset: var(--ds-ring-offset);
2810
2874
  }
2811
2875
 
2812
2876
  .ds-pagination__prev:disabled,
@@ -2880,7 +2944,7 @@ hr {
2880
2944
  font-size: var(--ds-text-xs);
2881
2945
  font-weight: var(--ds-weight-medium);
2882
2946
  font-family: var(--ds-font-sans);
2883
- line-height: 1;
2947
+ line-height: var(--ds-leading-none);
2884
2948
  border-radius: var(--ds-radius-full);
2885
2949
  background-color: var(--ds-color-bg-elevated);
2886
2950
  border: 1px solid var(--ds-color-border);
@@ -2959,7 +3023,7 @@ hr {
2959
3023
  background: transparent;
2960
3024
  color: currentColor;
2961
3025
  font-size: inherit;
2962
- line-height: 1;
3026
+ line-height: var(--ds-leading-none);
2963
3027
  opacity: 0.6;
2964
3028
  cursor: pointer;
2965
3029
  transition:
@@ -2975,8 +3039,8 @@ hr {
2975
3039
  }
2976
3040
 
2977
3041
  .ds-tag__remove:focus-visible {
2978
- outline: 2px solid var(--ds-color-interactive);
2979
- outline-offset: 1px;
3042
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
3043
+ outline-offset: var(--ds-ring-offset);
2980
3044
  opacity: 1;
2981
3045
  }
2982
3046
 
@@ -2994,7 +3058,7 @@ hr {
2994
3058
 
2995
3059
  .ds-tag--sm {
2996
3060
  padding: var(--ds-space-0-5, 0.125rem) var(--ds-space-2, 0.5rem);
2997
- font-size: 0.625rem;
3061
+ font-size: var(--ds-text-2xs);
2998
3062
  }
2999
3063
 
3000
3064
  .ds-tag--sm.ds-tag--removable {
@@ -3015,29 +3079,29 @@ hr {
3015
3079
  }
3016
3080
 
3017
3081
  /* ==========================================================================
3018
- * Accordion / Collapse
3019
- * ==========================================================================
3020
- *
3021
- * A vertically stacked set of collapsible sections. Supports CSS-only
3022
- * open/close via the `.ds-accordion__item--open` modifier.
3023
- *
3024
- * Variants:
3025
- * --flush borderless, full-bleed style
3026
- * --separated – visually detached items with individual borders
3027
- *
3028
- * Markup:
3029
- * <div class="ds-accordion">
3030
- * <div class="ds-accordion__item ds-accordion__item--open">
3031
- * <button class="ds-accordion__trigger">Section</button>
3032
- * <div class="ds-accordion__content">
3033
- * <div class="ds-accordion__body">…</div>
3034
- * </div>
3035
- * </div>
3036
- * </div>
3037
- * ========================================================================== */
3082
+ Accordion / Collapse
3083
+ ==========================================================================
3084
+ A vertically stacked set of collapsible sections. Supports CSS-only
3085
+ open/close via the `.ds-accordion__item--open` modifier.
3086
+
3087
+ Variants:
3088
+ --flush – borderless, full-bleed style
3089
+ --separated visually detached items with individual borders
3038
3090
 
3039
- /* Container
3040
- * -------------------------------------------------------------------------- */
3091
+ Usage:
3092
+ <div class="ds-accordion">
3093
+ <div class="ds-accordion__item ds-accordion__item--open">
3094
+ <button class="ds-accordion__trigger">Section</button>
3095
+ <div class="ds-accordion__content">
3096
+ <div class="ds-accordion__body">…</div>
3097
+ </div>
3098
+ </div>
3099
+ </div>
3100
+ ========================================================================== */
3101
+
3102
+ /* ---------------------------------------------------------------------------
3103
+ Container
3104
+ --------------------------------------------------------------------------- */
3041
3105
 
3042
3106
  .ds-accordion {
3043
3107
  border: 1px solid var(--ds-color-border);
@@ -3045,8 +3109,9 @@ hr {
3045
3109
  overflow: hidden;
3046
3110
  }
3047
3111
 
3048
- /* Item
3049
- * -------------------------------------------------------------------------- */
3112
+ /* ---------------------------------------------------------------------------
3113
+ Item
3114
+ --------------------------------------------------------------------------- */
3050
3115
 
3051
3116
  .ds-accordion__item {
3052
3117
  border-top: 1px solid var(--ds-color-border);
@@ -3056,8 +3121,9 @@ hr {
3056
3121
  border-top: 0;
3057
3122
  }
3058
3123
 
3059
- /* Trigger (button)
3060
- * -------------------------------------------------------------------------- */
3124
+ /* ---------------------------------------------------------------------------
3125
+ Trigger (button)
3126
+ --------------------------------------------------------------------------- */
3061
3127
 
3062
3128
  .ds-accordion__trigger {
3063
3129
  display: flex;
@@ -3100,8 +3166,9 @@ hr {
3100
3166
  transform: rotate(225deg);
3101
3167
  }
3102
3168
 
3103
- /* Collapsible content wrapper
3104
- * -------------------------------------------------------------------------- */
3169
+ /* ---------------------------------------------------------------------------
3170
+ Collapsible content wrapper
3171
+ --------------------------------------------------------------------------- */
3105
3172
 
3106
3173
  .ds-accordion__content {
3107
3174
  max-height: 0;
@@ -3115,15 +3182,16 @@ hr {
3115
3182
  max-height: 80rem;
3116
3183
  }
3117
3184
 
3118
- /* Inner body (visible content)
3119
- * -------------------------------------------------------------------------- */
3185
+ /* ---------------------------------------------------------------------------
3186
+ Inner body (visible content)
3187
+ --------------------------------------------------------------------------- */
3120
3188
 
3121
3189
  .ds-accordion__body {
3122
3190
  padding: var(--ds-space-4);
3123
3191
  padding-top: 0;
3124
3192
  font-size: var(--ds-text-sm);
3125
3193
  color: var(--ds-color-text-secondary);
3126
- line-height: 1.625;
3194
+ line-height: var(--ds-leading-relaxed);
3127
3195
  }
3128
3196
 
3129
3197
  /* ==========================================================================
@@ -3166,33 +3234,33 @@ hr {
3166
3234
  }
3167
3235
 
3168
3236
  /* ==========================================================================
3169
- * Drawer / Sheet
3170
- * ==========================================================================
3171
- *
3172
- * A sliding overlay panel anchored to the edge of the viewport.
3173
- * Default direction is right; use `--left` or `--bottom` modifiers
3174
- * to change the slide origin.
3175
- *
3176
- * Sizes:
3177
- * --sm 18 rem
3178
- * (default) 24 rem
3179
- * --lg 36 rem
3180
- *
3181
- * Markup:
3182
- * <div class="ds-drawer ds-drawer--right ds-drawer--open">
3183
- * <div class="ds-drawer__content">
3184
- * <div class="ds-drawer__header">
3185
- * <h3>Title</h3>
3186
- * <button class="ds-drawer__close" aria-label="Close">&times;</button>
3187
- * </div>
3188
- * <div class="ds-drawer__body">…</div>
3189
- * <div class="ds-drawer__footer">…</div>
3190
- * </div>
3191
- * </div>
3192
- * ========================================================================== */
3237
+ Drawer / Sheet
3238
+ ==========================================================================
3239
+ A sliding overlay panel anchored to the edge of the viewport.
3240
+ Default direction is right; use `--left` or `--bottom` modifiers
3241
+ to change the slide origin.
3242
+
3243
+ Sizes:
3244
+ --sm 18 rem
3245
+ (default) 24 rem
3246
+ --lg 36 rem
3247
+
3248
+ Usage:
3249
+ <div class="ds-drawer ds-drawer--right ds-drawer--open">
3250
+ <div class="ds-drawer__content">
3251
+ <div class="ds-drawer__header">
3252
+ <h3>Title</h3>
3253
+ <button class="ds-drawer__close" aria-label="Close">&times;</button>
3254
+ </div>
3255
+ <div class="ds-drawer__body">…</div>
3256
+ <div class="ds-drawer__footer">…</div>
3257
+ </div>
3258
+ </div>
3259
+ ========================================================================== */
3193
3260
 
3194
- /* Overlay backdrop
3195
- * -------------------------------------------------------------------------- */
3261
+ /* ---------------------------------------------------------------------------
3262
+ Overlay backdrop
3263
+ --------------------------------------------------------------------------- */
3196
3264
 
3197
3265
  .ds-drawer {
3198
3266
  position: fixed;
@@ -3211,8 +3279,9 @@ hr {
3211
3279
  visibility: visible;
3212
3280
  }
3213
3281
 
3214
- /* Sliding panel
3215
- * -------------------------------------------------------------------------- */
3282
+ /* ---------------------------------------------------------------------------
3283
+ Sliding panel
3284
+ --------------------------------------------------------------------------- */
3216
3285
 
3217
3286
  .ds-drawer__content {
3218
3287
  position: fixed;
@@ -3339,7 +3408,7 @@ hr {
3339
3408
  background-color: transparent;
3340
3409
  color: var(--ds-color-text-tertiary);
3341
3410
  font-size: var(--ds-text-lg);
3342
- line-height: 1;
3411
+ line-height: var(--ds-leading-none);
3343
3412
  cursor: pointer;
3344
3413
  flex-shrink: 0;
3345
3414
  transition:
@@ -3376,44 +3445,43 @@ hr {
3376
3445
  }
3377
3446
 
3378
3447
  /* ==========================================================================
3379
- * Progress Bar & Step Indicator
3380
- * ==========================================================================
3381
- *
3382
- * Two related components for communicating progress:
3383
- *
3384
- * 1. **Progress bar** — a horizontal fill bar with optional label row.
3385
- * Sizes: --sm, (default), --lg
3386
- * Statuses: --success, --warning, --error, --info
3387
- *
3388
- * 2. **Step indicator** — a numbered sequence of steps with connectors.
3389
- * States: --completed, --current, --error
3390
- * Layout: horizontal (default), --vertical
3391
- *
3392
- * Progress bar markup:
3393
- * <div class="ds-progress__label">
3394
- * <span>Uploading…</span><span>64 %</span>
3395
- * </div>
3396
- * <div class="ds-progress">
3397
- * <div class="ds-progress__bar" style="width: 64%"></div>
3398
- * </div>
3399
- *
3400
- * Step indicator markup:
3401
- * <div class="ds-steps">
3402
- * <div class="ds-step ds-step--completed">
3403
- * <div class="ds-step__indicator">1</div>
3404
- * <div class="ds-step__content">
3405
- * <span class="ds-step__title">Account</span>
3406
- * <span class="ds-step__description">Create your account</span>
3407
- * </div>
3408
- * </div>
3409
- * <div class="ds-step__connector"></div>
3410
- * <div class="ds-step ds-step--current">…</div>
3411
- * </div>
3412
- * ========================================================================== */
3448
+ Progress Bar & Step Indicator
3449
+ ==========================================================================
3450
+ Two related components for communicating progress:
3451
+
3452
+ 1. Progress bar — a horizontal fill bar with optional label row.
3453
+ Sizes: --sm, (default), --lg
3454
+ Statuses: --success, --warning, --error, --info
3455
+
3456
+ 2. Step indicator — a numbered sequence of steps with connectors.
3457
+ States: --completed, --current, --error
3458
+ Layout: horizontal (default), --vertical
3459
+
3460
+ Progress bar usage:
3461
+ <div class="ds-progress__label">
3462
+ <span>Uploading…</span><span>64 %</span>
3463
+ </div>
3464
+ <div class="ds-progress">
3465
+ <div class="ds-progress__bar" style="width: 64%"></div>
3466
+ </div>
3467
+
3468
+ Step indicator usage:
3469
+ <div class="ds-steps">
3470
+ <div class="ds-step ds-step--completed">
3471
+ <div class="ds-step__indicator">1</div>
3472
+ <div class="ds-step__content">
3473
+ <span class="ds-step__title">Account</span>
3474
+ <span class="ds-step__description">Create your account</span>
3475
+ </div>
3476
+ </div>
3477
+ <div class="ds-step__connector"></div>
3478
+ <div class="ds-step ds-step--current">…</div>
3479
+ </div>
3480
+ ========================================================================== */
3413
3481
 
3414
3482
  /* ==========================================================================
3415
- * Progress Bar
3416
- * ========================================================================== */
3483
+ Progress Bar
3484
+ ========================================================================== */
3417
3485
 
3418
3486
  /* Label row (sits above the bar) */
3419
3487
  .ds-progress__label {
@@ -3442,8 +3510,9 @@ hr {
3442
3510
  transition: width var(--ds-duration-normal) var(--ds-ease-default);
3443
3511
  }
3444
3512
 
3445
- /* Sizes
3446
- * -------------------------------------------------------------------------- */
3513
+ /* ---------------------------------------------------------------------------
3514
+ Sizes
3515
+ --------------------------------------------------------------------------- */
3447
3516
 
3448
3517
  .ds-progress--sm {
3449
3518
  height: 0.25rem;
@@ -3453,8 +3522,9 @@ hr {
3453
3522
  height: 0.75rem;
3454
3523
  }
3455
3524
 
3456
- /* Status colours
3457
- * -------------------------------------------------------------------------- */
3525
+ /* ---------------------------------------------------------------------------
3526
+ Status colours
3527
+ --------------------------------------------------------------------------- */
3458
3528
 
3459
3529
  .ds-progress--success .ds-progress__bar {
3460
3530
  background-color: var(--ds-color-success);
@@ -3473,8 +3543,8 @@ hr {
3473
3543
  }
3474
3544
 
3475
3545
  /* ==========================================================================
3476
- * Step Indicator
3477
- * ========================================================================== */
3546
+ Step Indicator
3547
+ ========================================================================== */
3478
3548
 
3479
3549
  /* Steps container (horizontal by default) */
3480
3550
  .ds-steps {
@@ -3490,8 +3560,9 @@ hr {
3490
3560
  align-items: flex-start;
3491
3561
  }
3492
3562
 
3493
- /* Single step
3494
- * -------------------------------------------------------------------------- */
3563
+ /* ---------------------------------------------------------------------------
3564
+ Single step
3565
+ --------------------------------------------------------------------------- */
3495
3566
 
3496
3567
  .ds-step {
3497
3568
  display: flex;
@@ -3538,8 +3609,9 @@ hr {
3538
3609
  color: var(--ds-color-error);
3539
3610
  }
3540
3611
 
3541
- /* Step content
3542
- * -------------------------------------------------------------------------- */
3612
+ /* ---------------------------------------------------------------------------
3613
+ Step content
3614
+ --------------------------------------------------------------------------- */
3543
3615
 
3544
3616
  .ds-step__content {
3545
3617
  display: flex;
@@ -3557,8 +3629,9 @@ hr {
3557
3629
  color: var(--ds-color-text-tertiary);
3558
3630
  }
3559
3631
 
3560
- /* Connector (line between steps)
3561
- * -------------------------------------------------------------------------- */
3632
+ /* ---------------------------------------------------------------------------
3633
+ Connector (line between steps)
3634
+ --------------------------------------------------------------------------- */
3562
3635
 
3563
3636
  /* Horizontal connector */
3564
3637
  .ds-step__connector {
@@ -3593,28 +3666,27 @@ hr {
3593
3666
 
3594
3667
  /* === Tier 3 — Advanced === */
3595
3668
  /* ==========================================================================
3596
- * Popover
3597
- * ==========================================================================
3598
- *
3599
- * Flexible popover component for displaying complex content anchored to a
3600
- * trigger element. Supports four placement directions (top, bottom, left,
3601
- * right) and multiple size variants. Default placement is bottom.
3602
- *
3603
- * Usage:
3604
- * <div class="ds-popover ds-popover--open">
3605
- * <button>Trigger</button>
3606
- * <div class="ds-popover__content">...</div>
3607
- * </div>
3608
- *
3609
- * Modifiers:
3610
- * .ds-popover--open Shows the popover content
3611
- * .ds-popover--top — Places content above the trigger
3612
- * .ds-popover--bottom — Places content below the trigger (default)
3613
- * .ds-popover--left — Places content to the left of the trigger
3614
- * .ds-popover--right Places content to the right of the trigger
3615
- * .ds-popover__content--smSmaller popover (12rem min-width)
3616
- * .ds-popover__content--lg — Larger popover (24rem min-width)
3617
- * ========================================================================== */
3669
+ Popover
3670
+ ==========================================================================
3671
+ Flexible popover component for displaying complex content anchored to a
3672
+ trigger element. Supports four placement directions (top, bottom, left,
3673
+ right) and multiple size variants. Default placement is bottom.
3674
+
3675
+ Usage:
3676
+ <div class="ds-popover ds-popover--open">
3677
+ <button>Trigger</button>
3678
+ <div class="ds-popover__content">...</div>
3679
+ </div>
3680
+
3681
+ Modifiers:
3682
+ .ds-popover--open — Shows the popover content
3683
+ .ds-popover--top Places content above the trigger
3684
+ .ds-popover--bottom — Places content below the trigger (default)
3685
+ .ds-popover--left — Places content to the left of the trigger
3686
+ .ds-popover--right — Places content to the right of the trigger
3687
+ .ds-popover__content--sm Smaller popover (12rem min-width)
3688
+ .ds-popover__content--lgLarger popover (24rem min-width)
3689
+ ========================================================================== */
3618
3690
 
3619
3691
  .ds-popover {
3620
3692
  position: relative;
@@ -3706,25 +3778,24 @@ hr {
3706
3778
  }
3707
3779
 
3708
3780
  /* ==========================================================================
3709
- * Slider
3710
- * ==========================================================================
3711
- *
3712
- * Range slider input component with customizable thumb and track styling.
3713
- * Supports labels, value display, size variants, and disabled state.
3714
- *
3715
- * Usage:
3716
- * <div class="ds-slider">
3717
- * <input type="range" min="0" max="100" value="50" />
3718
- * <div class="ds-slider__labels">
3719
- * <span>0</span>
3720
- * <span>100</span>
3721
- * </div>
3722
- * </div>
3723
- *
3724
- * Modifiers:
3725
- * .ds-slider--sm Smaller track and thumb
3726
- * .ds-slider--disabled — Reduced opacity, no interaction
3727
- * ========================================================================== */
3781
+ Slider
3782
+ ==========================================================================
3783
+ Range slider input component with customizable thumb and track styling.
3784
+ Supports labels, value display, size variants, and disabled state.
3785
+
3786
+ Usage:
3787
+ <div class="ds-slider">
3788
+ <input type="range" min="0" max="100" value="50" />
3789
+ <div class="ds-slider__labels">
3790
+ <span>0</span>
3791
+ <span>100</span>
3792
+ </div>
3793
+ </div>
3794
+
3795
+ Modifiers:
3796
+ .ds-slider--sm — Smaller track and thumb
3797
+ .ds-slider--disabled Reduced opacity, no interaction
3798
+ ========================================================================== */
3728
3799
 
3729
3800
  .ds-slider {
3730
3801
  width: 100%;
@@ -3832,31 +3903,30 @@ hr {
3832
3903
  }
3833
3904
 
3834
3905
  /* ==========================================================================
3835
- * Timeline
3836
- * ==========================================================================
3837
- *
3838
- * Vertical timeline component for roadmaps, activity feeds, and step-based
3839
- * flows. Each item has a dot indicator on a vertical line with support for
3840
- * completed, current, and error states.
3841
- *
3842
- * Usage:
3843
- * <div class="ds-timeline">
3844
- * <div class="ds-timeline__item ds-timeline__item--completed">
3845
- * <div class="ds-timeline__dot"></div>
3846
- * <div class="ds-timeline__content">
3847
- * <div class="ds-timeline__title">Step one</div>
3848
- * <div class="ds-timeline__description">Details here.</div>
3849
- * <div class="ds-timeline__time">2 hours ago</div>
3850
- * </div>
3851
- * </div>
3852
- * </div>
3853
- *
3854
- * Modifiers:
3855
- * .ds-timeline__item--completed Green dot (success)
3856
- * .ds-timeline__item--current Inverted dot (active)
3857
- * .ds-timeline__item--error Red dot (error)
3858
- * .ds-timeline--compact — Tighter spacing, smaller dots
3859
- * ========================================================================== */
3906
+ Timeline
3907
+ ==========================================================================
3908
+ Vertical timeline component for roadmaps, activity feeds, and step-based
3909
+ flows. Each item has a dot indicator on a vertical line with support for
3910
+ completed, current, and error states.
3911
+
3912
+ Usage:
3913
+ <div class="ds-timeline">
3914
+ <div class="ds-timeline__item ds-timeline__item--completed">
3915
+ <div class="ds-timeline__dot"></div>
3916
+ <div class="ds-timeline__content">
3917
+ <div class="ds-timeline__title">Step one</div>
3918
+ <div class="ds-timeline__description">Details here.</div>
3919
+ <div class="ds-timeline__time">2 hours ago</div>
3920
+ </div>
3921
+ </div>
3922
+ </div>
3923
+
3924
+ Modifiers:
3925
+ .ds-timeline__item--completed — Green dot (success)
3926
+ .ds-timeline__item--current Inverted dot (active)
3927
+ .ds-timeline__item--error Red dot (error)
3928
+ .ds-timeline--compact Tighter spacing, smaller dots
3929
+ ========================================================================== */
3860
3930
 
3861
3931
  .ds-timeline {
3862
3932
  position: relative;
@@ -3964,25 +4034,24 @@ hr {
3964
4034
  }
3965
4035
 
3966
4036
  /* ==========================================================================
3967
- * Kbd
3968
- * ==========================================================================
3969
- *
3970
- * Keyboard shortcut display component with a raised 3D key appearance.
3971
- * Use individually or group multiple keys with ds-kbd-group for combos
3972
- * like "Cmd + K".
3973
- *
3974
- * Usage:
3975
- * <kbd class="ds-kbd">Esc</kbd>
3976
- *
3977
- * <span class="ds-kbd-group">
3978
- * <kbd class="ds-kbd">Cmd</kbd>
3979
- * <span class="ds-kbd-group__separator">+</span>
3980
- * <kbd class="ds-kbd">K</kbd>
3981
- * </span>
3982
- *
3983
- * Modifiers:
3984
- * .ds-kbd--lg — Larger key display
3985
- * ========================================================================== */
4037
+ Kbd
4038
+ ==========================================================================
4039
+ Keyboard shortcut display component with a raised 3D key appearance.
4040
+ Use individually or group multiple keys with ds-kbd-group for combos
4041
+ like "Cmd + K".
4042
+
4043
+ Usage:
4044
+ <kbd class="ds-kbd">Esc</kbd>
4045
+
4046
+ <span class="ds-kbd-group">
4047
+ <kbd class="ds-kbd">Cmd</kbd>
4048
+ <span class="ds-kbd-group__separator">+</span>
4049
+ <kbd class="ds-kbd">K</kbd>
4050
+ </span>
4051
+
4052
+ Modifiers:
4053
+ .ds-kbd--lg — Larger key display
4054
+ ========================================================================== */
3986
4055
 
3987
4056
  .ds-kbd {
3988
4057
  display: inline-flex;
@@ -4020,38 +4089,37 @@ hr {
4020
4089
  }
4021
4090
 
4022
4091
  /* ==========================================================================
4023
- * Command
4024
- * ==========================================================================
4025
- *
4026
- * Command palette / search overlay following the Cmd+K pattern. Provides a
4027
- * full-screen overlay with a centered search dialog, grouped results,
4028
- * keyboard-navigable items, and a footer with shortcut hints.
4029
- *
4030
- * Usage:
4031
- * <div class="ds-command ds-command--open">
4032
- * <div class="ds-command__content">
4033
- * <div class="ds-command__input-wrapper">
4034
- * <span class="ds-command__input-icon">...</span>
4035
- * <input class="ds-command__input" placeholder="Search..." />
4036
- * </div>
4037
- * <div class="ds-command__list">
4038
- * <div class="ds-command__group">
4039
- * <div class="ds-command__group-heading">Results</div>
4040
- * <div class="ds-command__item ds-command__item--active">
4041
- * <span class="ds-command__item-icon">...</span>
4042
- * <span class="ds-command__item-label">Item</span>
4043
- * <span class="ds-command__item-shortcut">Ctrl+N</span>
4044
- * </div>
4045
- * </div>
4046
- * <div class="ds-command__empty">No results found.</div>
4047
- * </div>
4048
- * <div class="ds-command__footer">...</div>
4049
- * </div>
4050
- * </div>
4051
- *
4052
- * Modifiers:
4053
- * .ds-command--open — Shows the command palette
4054
- * ========================================================================== */
4092
+ Command Palette
4093
+ ==========================================================================
4094
+ Command palette / search overlay following the Cmd+K pattern. Provides a
4095
+ full-screen overlay with a centered search dialog, grouped results,
4096
+ keyboard-navigable items, and a footer with shortcut hints.
4097
+
4098
+ Usage:
4099
+ <div class="ds-command ds-command--open">
4100
+ <div class="ds-command__content">
4101
+ <div class="ds-command__input-wrapper">
4102
+ <span class="ds-command__input-icon">...</span>
4103
+ <input class="ds-command__input" placeholder="Search..." />
4104
+ </div>
4105
+ <div class="ds-command__list">
4106
+ <div class="ds-command__group">
4107
+ <div class="ds-command__group-heading">Results</div>
4108
+ <div class="ds-command__item ds-command__item--active">
4109
+ <span class="ds-command__item-icon">...</span>
4110
+ <span class="ds-command__item-label">Item</span>
4111
+ <span class="ds-command__item-shortcut">Ctrl+N</span>
4112
+ </div>
4113
+ </div>
4114
+ <div class="ds-command__empty">No results found.</div>
4115
+ </div>
4116
+ <div class="ds-command__footer">...</div>
4117
+ </div>
4118
+ </div>
4119
+
4120
+ Modifiers:
4121
+ .ds-command--open — Shows the command palette
4122
+ ========================================================================== */
4055
4123
 
4056
4124
  /* Overlay */
4057
4125
  .ds-command {
@@ -4140,7 +4208,7 @@ hr {
4140
4208
  .ds-command__group-heading {
4141
4209
  font-size: var(--ds-text-xs);
4142
4210
  text-transform: uppercase;
4143
- letter-spacing: 0.05em;
4211
+ letter-spacing: var(--ds-tracking-wide);
4144
4212
  color: var(--ds-color-text-tertiary);
4145
4213
  padding: var(--ds-space-2) var(--ds-space-3);
4146
4214
  font-weight: var(--ds-weight-medium);