@digiko-npm/designsystem 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- /* @ds/designsystem v0.2.2 */
1
+ /* @ds/designsystem v0.2.3 */
2
2
  /* ==========================================================================
3
3
  @digiko-npm/designsystem
4
4
 
@@ -169,9 +169,13 @@
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) */
@@ -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
 
@@ -503,6 +526,7 @@ strong, b {
503
526
 
504
527
  /* Overline / label style (like "PRODUCT DESIGNER & DEVELOPER") */
505
528
  .ds-overline {
529
+ font-family: var(--ds-font-sans);
506
530
  font-size: var(--ds-text-sm);
507
531
  font-weight: var(--ds-weight-medium);
508
532
  letter-spacing: var(--ds-tracking-wide);
@@ -510,6 +534,12 @@ strong, b {
510
534
  color: var(--ds-color-text-secondary);
511
535
  }
512
536
 
537
+ /* UI heading — body font for functional/interface headings (labels, settings, admin) */
538
+ .ds-heading-ui {
539
+ font-family: var(--ds-font-sans);
540
+ font-weight: var(--ds-weight-medium);
541
+ }
542
+
513
543
  /* Section title style */
514
544
  .ds-section-title {
515
545
  font-family: var(--ds-font-display);
@@ -632,8 +662,9 @@ hr {
632
662
  display: inline-flex;
633
663
  align-items: center;
634
664
  justify-content: center;
665
+ height: var(--ds-size-3);
635
666
  gap: var(--ds-space-2);
636
- padding: var(--ds-space-2) var(--ds-space-4);
667
+ padding: 0 var(--ds-space-4);
637
668
  font-family: var(--ds-font-sans);
638
669
  font-size: var(--ds-text-sm);
639
670
  font-weight: var(--ds-weight-medium);
@@ -642,7 +673,7 @@ hr {
642
673
  border-radius: var(--ds-radius-lg);
643
674
  border: 1px solid transparent;
644
675
  cursor: pointer;
645
- transition: all var(--ds-duration-fast) ease;
676
+ transition: all var(--ds-duration-fast) var(--ds-ease-default);
646
677
 
647
678
  /* Default: inverted (dark bg in light mode, light bg in dark mode) */
648
679
  background-color: var(--ds-color-inverted);
@@ -706,7 +737,7 @@ hr {
706
737
  }
707
738
  .ds-btn--danger:hover {
708
739
  background-color: var(--ds-color-error);
709
- color: #fff;
740
+ color: var(--ds-color-on-inverted);
710
741
  opacity: 1;
711
742
  }
712
743
 
@@ -717,21 +748,31 @@ hr {
717
748
  }
718
749
  .ds-btn--success:hover {
719
750
  background-color: var(--ds-color-success);
720
- color: #fff;
751
+ color: var(--ds-color-on-inverted);
721
752
  opacity: 1;
722
753
  }
723
754
 
724
755
  /* --- Sizes --- */
725
756
 
757
+ .ds-btn--xs {
758
+ height: var(--ds-size-1);
759
+ padding: 0 var(--ds-space-2);
760
+ font-size: var(--ds-text-xs);
761
+ gap: var(--ds-space-1);
762
+ border-radius: var(--ds-radius-md);
763
+ }
764
+
726
765
  .ds-btn--sm {
727
- padding: var(--ds-space-1-5) var(--ds-space-3);
766
+ height: var(--ds-size-2);
767
+ padding: 0 var(--ds-space-3);
728
768
  font-size: var(--ds-text-sm);
729
769
  gap: var(--ds-space-1-5);
730
770
  border-radius: var(--ds-radius-md);
731
771
  }
732
772
 
733
773
  .ds-btn--lg {
734
- padding: var(--ds-space-3) var(--ds-space-6);
774
+ height: var(--ds-size-4);
775
+ padding: 0 var(--ds-space-6);
735
776
  font-size: var(--ds-text-base);
736
777
  border-radius: var(--ds-radius-lg);
737
778
  }
@@ -739,11 +780,15 @@ hr {
739
780
  /* --- Pill (rounded-full, like hero CTAs) --- */
740
781
  .ds-btn--pill {
741
782
  border-radius: var(--ds-radius-full);
742
- padding: var(--ds-space-3) var(--ds-space-6);
783
+ padding: 0 var(--ds-space-6);
784
+ }
785
+
786
+ .ds-btn--pill.ds-btn--xs {
787
+ padding: 0 var(--ds-space-3);
743
788
  }
744
789
 
745
790
  .ds-btn--pill.ds-btn--sm {
746
- padding: var(--ds-space-2) var(--ds-space-5);
791
+ padding: 0 var(--ds-space-5);
747
792
  }
748
793
 
749
794
  /* --- Full Width --- */
@@ -752,14 +797,19 @@ hr {
752
797
  /* --- Icon Only --- */
753
798
  .ds-btn--icon {
754
799
  padding: 0;
755
- width: 2.25rem;
756
- height: 2.25rem;
800
+ width: var(--ds-size-3);
801
+ height: var(--ds-size-3);
757
802
  border-radius: var(--ds-radius-md);
758
803
  }
759
804
 
805
+ .ds-btn--icon.ds-btn--xs {
806
+ width: var(--ds-size-1);
807
+ height: var(--ds-size-1);
808
+ }
809
+
760
810
  .ds-btn--icon.ds-btn--sm {
761
- width: 2rem;
762
- height: 2rem;
811
+ width: var(--ds-size-2);
812
+ height: var(--ds-size-2);
763
813
  }
764
814
 
765
815
  /* --- Button Group --- */
@@ -931,7 +981,7 @@ hr {
931
981
  .ds-textarea,
932
982
  .ds-select {
933
983
  width: 100%;
934
- padding: var(--ds-space-2-5) var(--ds-space-4);
984
+ padding: 0 var(--ds-space-4);
935
985
  font-family: var(--ds-font-sans);
936
986
  font-size: var(--ds-text-sm);
937
987
  line-height: var(--ds-leading-normal);
@@ -939,7 +989,12 @@ hr {
939
989
  background-color: var(--ds-color-surface);
940
990
  border: 1px solid var(--ds-color-border);
941
991
  border-radius: var(--ds-radius-lg);
942
- transition: all var(--ds-duration-fast) ease;
992
+ transition: all var(--ds-duration-fast) var(--ds-ease-default);
993
+ }
994
+
995
+ .ds-input,
996
+ .ds-select {
997
+ height: var(--ds-size-3);
943
998
  }
944
999
 
945
1000
  .ds-input:hover,
@@ -976,14 +1031,23 @@ hr {
976
1031
  }
977
1032
 
978
1033
  /* Sizes */
1034
+ .ds-input--xs {
1035
+ height: var(--ds-size-1);
1036
+ padding: 0 var(--ds-space-1-5);
1037
+ font-size: var(--ds-text-xs);
1038
+ border-radius: var(--ds-radius-sm);
1039
+ }
1040
+
979
1041
  .ds-input--sm {
980
- padding: var(--ds-space-1) var(--ds-space-2);
1042
+ height: var(--ds-size-2);
1043
+ padding: 0 var(--ds-space-2);
981
1044
  font-size: var(--ds-text-xs);
982
1045
  border-radius: var(--ds-radius-md);
983
1046
  }
984
1047
 
985
1048
  .ds-input--lg {
986
- padding: var(--ds-space-3) var(--ds-space-4);
1049
+ height: var(--ds-size-4);
1050
+ padding: 0 var(--ds-space-4);
987
1051
  font-size: var(--ds-text-base);
988
1052
  }
989
1053
 
@@ -991,6 +1055,7 @@ hr {
991
1055
  .ds-textarea {
992
1056
  min-height: 6rem;
993
1057
  padding: var(--ds-space-2-5) var(--ds-space-4);
1058
+ height: auto;
994
1059
  resize: vertical;
995
1060
  }
996
1061
 
@@ -1079,13 +1144,13 @@ hr {
1079
1144
  .ds-badge--info {
1080
1145
  background-color: var(--ds-color-accent-blue-subtle);
1081
1146
  color: var(--ds-color-accent-blue);
1082
- border-color: rgba(37, 99, 235, 0.2);
1147
+ border-color: var(--ds-color-accent-blue-border);
1083
1148
  }
1084
1149
 
1085
1150
  .ds-badge--purple {
1086
1151
  background-color: var(--ds-color-accent-purple-subtle);
1087
1152
  color: var(--ds-color-accent-purple);
1088
- border-color: rgba(124, 58, 237, 0.2);
1153
+ border-color: var(--ds-color-accent-purple-border);
1089
1154
  }
1090
1155
 
1091
1156
  /* Outline (no bg) */
@@ -1107,7 +1172,7 @@ hr {
1107
1172
  /* Uppercase badge (like "NEW", "BETA") */
1108
1173
  .ds-badge--upper {
1109
1174
  text-transform: uppercase;
1110
- font-size: 10px;
1175
+ font-size: var(--ds-text-2xs);
1111
1176
  font-weight: var(--ds-weight-semibold);
1112
1177
  letter-spacing: var(--ds-tracking-wide);
1113
1178
  }
@@ -1302,7 +1367,7 @@ hr {
1302
1367
  background-color: var(--ds-color-surface);
1303
1368
  border: 1px solid var(--ds-color-border);
1304
1369
  border-radius: var(--ds-radius-xl);
1305
- box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
1370
+ box-shadow: var(--ds-shadow-lg);
1306
1371
  overflow: hidden;
1307
1372
  display: flex;
1308
1373
  flex-direction: column;
@@ -1422,7 +1487,7 @@ hr {
1422
1487
  color: var(--ds-color-text-tertiary);
1423
1488
  padding: var(--ds-space-1);
1424
1489
  border-radius: var(--ds-radius-sm);
1425
- transition: color var(--ds-duration-fast) ease;
1490
+ transition: color var(--ds-duration-fast) var(--ds-ease-default);
1426
1491
  }
1427
1492
  .ds-toast__close:hover {
1428
1493
  color: var(--ds-color-text);
@@ -1591,7 +1656,7 @@ hr {
1591
1656
  border-left: none;
1592
1657
  border-right: none;
1593
1658
  white-space: nowrap;
1594
- transition: all var(--ds-duration-fast) ease;
1659
+ transition: all var(--ds-duration-fast) var(--ds-ease-default);
1595
1660
  margin-bottom: -1px;
1596
1661
  }
1597
1662
 
@@ -1757,7 +1822,7 @@ hr {
1757
1822
  color: var(--ds-color-text-tertiary);
1758
1823
  border-radius: var(--ds-radius-sm);
1759
1824
  cursor: pointer;
1760
- transition: color var(--ds-duration-fast) ease;
1825
+ transition: color var(--ds-duration-fast) var(--ds-ease-default);
1761
1826
  }
1762
1827
 
1763
1828
  .ds-alert__close:hover {
@@ -2502,7 +2567,7 @@ hr {
2502
2567
  width: 1.25rem;
2503
2568
  height: 1.25rem;
2504
2569
  border-radius: var(--ds-radius-full);
2505
- background-color: #fff;
2570
+ background-color: var(--ds-color-surface);
2506
2571
  box-shadow: var(--ds-shadow-sm);
2507
2572
  transform: translateY(-50%);
2508
2573
  transition: transform var(--ds-duration-normal) var(--ds-ease-out);
@@ -2540,8 +2605,8 @@ hr {
2540
2605
  --------------------------------------------------------------------------- */
2541
2606
 
2542
2607
  .ds-toggle:focus-visible {
2543
- outline: 2px solid var(--ds-color-interactive);
2544
- outline-offset: 2px;
2608
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
2609
+ outline-offset: var(--ds-ring-offset);
2545
2610
  }
2546
2611
 
2547
2612
  /* ---------------------------------------------------------------------------
@@ -2660,8 +2725,8 @@ hr {
2660
2725
  }
2661
2726
 
2662
2727
  .ds-breadcrumb__link:focus-visible {
2663
- outline: 2px solid var(--ds-color-interactive);
2664
- outline-offset: 2px;
2728
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
2729
+ outline-offset: var(--ds-ring-offset);
2665
2730
  border-radius: var(--ds-radius-sm);
2666
2731
  }
2667
2732
 
@@ -2746,8 +2811,8 @@ hr {
2746
2811
  }
2747
2812
 
2748
2813
  .ds-pagination__item:focus-visible {
2749
- outline: 2px solid var(--ds-color-interactive);
2750
- outline-offset: 2px;
2814
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
2815
+ outline-offset: var(--ds-ring-offset);
2751
2816
  }
2752
2817
 
2753
2818
  /* ---------------------------------------------------------------------------
@@ -2805,8 +2870,8 @@ hr {
2805
2870
 
2806
2871
  .ds-pagination__prev:focus-visible,
2807
2872
  .ds-pagination__next:focus-visible {
2808
- outline: 2px solid var(--ds-color-interactive);
2809
- outline-offset: 2px;
2873
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
2874
+ outline-offset: var(--ds-ring-offset);
2810
2875
  }
2811
2876
 
2812
2877
  .ds-pagination__prev:disabled,
@@ -2880,7 +2945,7 @@ hr {
2880
2945
  font-size: var(--ds-text-xs);
2881
2946
  font-weight: var(--ds-weight-medium);
2882
2947
  font-family: var(--ds-font-sans);
2883
- line-height: 1;
2948
+ line-height: var(--ds-leading-none);
2884
2949
  border-radius: var(--ds-radius-full);
2885
2950
  background-color: var(--ds-color-bg-elevated);
2886
2951
  border: 1px solid var(--ds-color-border);
@@ -2959,7 +3024,7 @@ hr {
2959
3024
  background: transparent;
2960
3025
  color: currentColor;
2961
3026
  font-size: inherit;
2962
- line-height: 1;
3027
+ line-height: var(--ds-leading-none);
2963
3028
  opacity: 0.6;
2964
3029
  cursor: pointer;
2965
3030
  transition:
@@ -2975,8 +3040,8 @@ hr {
2975
3040
  }
2976
3041
 
2977
3042
  .ds-tag__remove:focus-visible {
2978
- outline: 2px solid var(--ds-color-interactive);
2979
- outline-offset: 1px;
3043
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
3044
+ outline-offset: var(--ds-ring-offset);
2980
3045
  opacity: 1;
2981
3046
  }
2982
3047
 
@@ -2994,7 +3059,7 @@ hr {
2994
3059
 
2995
3060
  .ds-tag--sm {
2996
3061
  padding: var(--ds-space-0-5, 0.125rem) var(--ds-space-2, 0.5rem);
2997
- font-size: 0.625rem;
3062
+ font-size: var(--ds-text-2xs);
2998
3063
  }
2999
3064
 
3000
3065
  .ds-tag--sm.ds-tag--removable {
@@ -3015,29 +3080,29 @@ hr {
3015
3080
  }
3016
3081
 
3017
3082
  /* ==========================================================================
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
- * ========================================================================== */
3083
+ Accordion / Collapse
3084
+ ==========================================================================
3085
+ A vertically stacked set of collapsible sections. Supports CSS-only
3086
+ open/close via the `.ds-accordion__item--open` modifier.
3038
3087
 
3039
- /* Container
3040
- * -------------------------------------------------------------------------- */
3088
+ Variants:
3089
+ --flush – borderless, full-bleed style
3090
+ --separated – visually detached items with individual borders
3091
+
3092
+ Usage:
3093
+ <div class="ds-accordion">
3094
+ <div class="ds-accordion__item ds-accordion__item--open">
3095
+ <button class="ds-accordion__trigger">Section</button>
3096
+ <div class="ds-accordion__content">
3097
+ <div class="ds-accordion__body">…</div>
3098
+ </div>
3099
+ </div>
3100
+ </div>
3101
+ ========================================================================== */
3102
+
3103
+ /* ---------------------------------------------------------------------------
3104
+ Container
3105
+ --------------------------------------------------------------------------- */
3041
3106
 
3042
3107
  .ds-accordion {
3043
3108
  border: 1px solid var(--ds-color-border);
@@ -3045,8 +3110,9 @@ hr {
3045
3110
  overflow: hidden;
3046
3111
  }
3047
3112
 
3048
- /* Item
3049
- * -------------------------------------------------------------------------- */
3113
+ /* ---------------------------------------------------------------------------
3114
+ Item
3115
+ --------------------------------------------------------------------------- */
3050
3116
 
3051
3117
  .ds-accordion__item {
3052
3118
  border-top: 1px solid var(--ds-color-border);
@@ -3056,8 +3122,9 @@ hr {
3056
3122
  border-top: 0;
3057
3123
  }
3058
3124
 
3059
- /* Trigger (button)
3060
- * -------------------------------------------------------------------------- */
3125
+ /* ---------------------------------------------------------------------------
3126
+ Trigger (button)
3127
+ --------------------------------------------------------------------------- */
3061
3128
 
3062
3129
  .ds-accordion__trigger {
3063
3130
  display: flex;
@@ -3100,8 +3167,9 @@ hr {
3100
3167
  transform: rotate(225deg);
3101
3168
  }
3102
3169
 
3103
- /* Collapsible content wrapper
3104
- * -------------------------------------------------------------------------- */
3170
+ /* ---------------------------------------------------------------------------
3171
+ Collapsible content wrapper
3172
+ --------------------------------------------------------------------------- */
3105
3173
 
3106
3174
  .ds-accordion__content {
3107
3175
  max-height: 0;
@@ -3115,15 +3183,16 @@ hr {
3115
3183
  max-height: 80rem;
3116
3184
  }
3117
3185
 
3118
- /* Inner body (visible content)
3119
- * -------------------------------------------------------------------------- */
3186
+ /* ---------------------------------------------------------------------------
3187
+ Inner body (visible content)
3188
+ --------------------------------------------------------------------------- */
3120
3189
 
3121
3190
  .ds-accordion__body {
3122
3191
  padding: var(--ds-space-4);
3123
3192
  padding-top: 0;
3124
3193
  font-size: var(--ds-text-sm);
3125
3194
  color: var(--ds-color-text-secondary);
3126
- line-height: 1.625;
3195
+ line-height: var(--ds-leading-relaxed);
3127
3196
  }
3128
3197
 
3129
3198
  /* ==========================================================================
@@ -3166,33 +3235,33 @@ hr {
3166
3235
  }
3167
3236
 
3168
3237
  /* ==========================================================================
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
- * ========================================================================== */
3238
+ Drawer / Sheet
3239
+ ==========================================================================
3240
+ A sliding overlay panel anchored to the edge of the viewport.
3241
+ Default direction is right; use `--left` or `--bottom` modifiers
3242
+ to change the slide origin.
3243
+
3244
+ Sizes:
3245
+ --sm 18 rem
3246
+ (default) 24 rem
3247
+ --lg 36 rem
3248
+
3249
+ Usage:
3250
+ <div class="ds-drawer ds-drawer--right ds-drawer--open">
3251
+ <div class="ds-drawer__content">
3252
+ <div class="ds-drawer__header">
3253
+ <h3>Title</h3>
3254
+ <button class="ds-drawer__close" aria-label="Close">&times;</button>
3255
+ </div>
3256
+ <div class="ds-drawer__body">…</div>
3257
+ <div class="ds-drawer__footer">…</div>
3258
+ </div>
3259
+ </div>
3260
+ ========================================================================== */
3193
3261
 
3194
- /* Overlay backdrop
3195
- * -------------------------------------------------------------------------- */
3262
+ /* ---------------------------------------------------------------------------
3263
+ Overlay backdrop
3264
+ --------------------------------------------------------------------------- */
3196
3265
 
3197
3266
  .ds-drawer {
3198
3267
  position: fixed;
@@ -3211,8 +3280,9 @@ hr {
3211
3280
  visibility: visible;
3212
3281
  }
3213
3282
 
3214
- /* Sliding panel
3215
- * -------------------------------------------------------------------------- */
3283
+ /* ---------------------------------------------------------------------------
3284
+ Sliding panel
3285
+ --------------------------------------------------------------------------- */
3216
3286
 
3217
3287
  .ds-drawer__content {
3218
3288
  position: fixed;
@@ -3339,7 +3409,7 @@ hr {
3339
3409
  background-color: transparent;
3340
3410
  color: var(--ds-color-text-tertiary);
3341
3411
  font-size: var(--ds-text-lg);
3342
- line-height: 1;
3412
+ line-height: var(--ds-leading-none);
3343
3413
  cursor: pointer;
3344
3414
  flex-shrink: 0;
3345
3415
  transition:
@@ -3376,44 +3446,43 @@ hr {
3376
3446
  }
3377
3447
 
3378
3448
  /* ==========================================================================
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
- * ========================================================================== */
3449
+ Progress Bar & Step Indicator
3450
+ ==========================================================================
3451
+ Two related components for communicating progress:
3452
+
3453
+ 1. Progress bar — a horizontal fill bar with optional label row.
3454
+ Sizes: --sm, (default), --lg
3455
+ Statuses: --success, --warning, --error, --info
3456
+
3457
+ 2. Step indicator — a numbered sequence of steps with connectors.
3458
+ States: --completed, --current, --error
3459
+ Layout: horizontal (default), --vertical
3460
+
3461
+ Progress bar usage:
3462
+ <div class="ds-progress__label">
3463
+ <span>Uploading…</span><span>64 %</span>
3464
+ </div>
3465
+ <div class="ds-progress">
3466
+ <div class="ds-progress__bar" style="width: 64%"></div>
3467
+ </div>
3468
+
3469
+ Step indicator usage:
3470
+ <div class="ds-steps">
3471
+ <div class="ds-step ds-step--completed">
3472
+ <div class="ds-step__indicator">1</div>
3473
+ <div class="ds-step__content">
3474
+ <span class="ds-step__title">Account</span>
3475
+ <span class="ds-step__description">Create your account</span>
3476
+ </div>
3477
+ </div>
3478
+ <div class="ds-step__connector"></div>
3479
+ <div class="ds-step ds-step--current">…</div>
3480
+ </div>
3481
+ ========================================================================== */
3413
3482
 
3414
3483
  /* ==========================================================================
3415
- * Progress Bar
3416
- * ========================================================================== */
3484
+ Progress Bar
3485
+ ========================================================================== */
3417
3486
 
3418
3487
  /* Label row (sits above the bar) */
3419
3488
  .ds-progress__label {
@@ -3442,8 +3511,9 @@ hr {
3442
3511
  transition: width var(--ds-duration-normal) var(--ds-ease-default);
3443
3512
  }
3444
3513
 
3445
- /* Sizes
3446
- * -------------------------------------------------------------------------- */
3514
+ /* ---------------------------------------------------------------------------
3515
+ Sizes
3516
+ --------------------------------------------------------------------------- */
3447
3517
 
3448
3518
  .ds-progress--sm {
3449
3519
  height: 0.25rem;
@@ -3453,8 +3523,9 @@ hr {
3453
3523
  height: 0.75rem;
3454
3524
  }
3455
3525
 
3456
- /* Status colours
3457
- * -------------------------------------------------------------------------- */
3526
+ /* ---------------------------------------------------------------------------
3527
+ Status colours
3528
+ --------------------------------------------------------------------------- */
3458
3529
 
3459
3530
  .ds-progress--success .ds-progress__bar {
3460
3531
  background-color: var(--ds-color-success);
@@ -3473,8 +3544,8 @@ hr {
3473
3544
  }
3474
3545
 
3475
3546
  /* ==========================================================================
3476
- * Step Indicator
3477
- * ========================================================================== */
3547
+ Step Indicator
3548
+ ========================================================================== */
3478
3549
 
3479
3550
  /* Steps container (horizontal by default) */
3480
3551
  .ds-steps {
@@ -3490,8 +3561,9 @@ hr {
3490
3561
  align-items: flex-start;
3491
3562
  }
3492
3563
 
3493
- /* Single step
3494
- * -------------------------------------------------------------------------- */
3564
+ /* ---------------------------------------------------------------------------
3565
+ Single step
3566
+ --------------------------------------------------------------------------- */
3495
3567
 
3496
3568
  .ds-step {
3497
3569
  display: flex;
@@ -3538,8 +3610,9 @@ hr {
3538
3610
  color: var(--ds-color-error);
3539
3611
  }
3540
3612
 
3541
- /* Step content
3542
- * -------------------------------------------------------------------------- */
3613
+ /* ---------------------------------------------------------------------------
3614
+ Step content
3615
+ --------------------------------------------------------------------------- */
3543
3616
 
3544
3617
  .ds-step__content {
3545
3618
  display: flex;
@@ -3557,8 +3630,9 @@ hr {
3557
3630
  color: var(--ds-color-text-tertiary);
3558
3631
  }
3559
3632
 
3560
- /* Connector (line between steps)
3561
- * -------------------------------------------------------------------------- */
3633
+ /* ---------------------------------------------------------------------------
3634
+ Connector (line between steps)
3635
+ --------------------------------------------------------------------------- */
3562
3636
 
3563
3637
  /* Horizontal connector */
3564
3638
  .ds-step__connector {
@@ -3593,28 +3667,27 @@ hr {
3593
3667
 
3594
3668
  /* === Tier 3 — Advanced === */
3595
3669
  /* ==========================================================================
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
- * ========================================================================== */
3670
+ Popover
3671
+ ==========================================================================
3672
+ Flexible popover component for displaying complex content anchored to a
3673
+ trigger element. Supports four placement directions (top, bottom, left,
3674
+ right) and multiple size variants. Default placement is bottom.
3675
+
3676
+ Usage:
3677
+ <div class="ds-popover ds-popover--open">
3678
+ <button>Trigger</button>
3679
+ <div class="ds-popover__content">...</div>
3680
+ </div>
3681
+
3682
+ Modifiers:
3683
+ .ds-popover--open — Shows the popover content
3684
+ .ds-popover--top Places content above the trigger
3685
+ .ds-popover--bottom — Places content below the trigger (default)
3686
+ .ds-popover--left — Places content to the left of the trigger
3687
+ .ds-popover--right — Places content to the right of the trigger
3688
+ .ds-popover__content--sm Smaller popover (12rem min-width)
3689
+ .ds-popover__content--lgLarger popover (24rem min-width)
3690
+ ========================================================================== */
3618
3691
 
3619
3692
  .ds-popover {
3620
3693
  position: relative;
@@ -3706,25 +3779,24 @@ hr {
3706
3779
  }
3707
3780
 
3708
3781
  /* ==========================================================================
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
- * ========================================================================== */
3782
+ Slider
3783
+ ==========================================================================
3784
+ Range slider input component with customizable thumb and track styling.
3785
+ Supports labels, value display, size variants, and disabled state.
3786
+
3787
+ Usage:
3788
+ <div class="ds-slider">
3789
+ <input type="range" min="0" max="100" value="50" />
3790
+ <div class="ds-slider__labels">
3791
+ <span>0</span>
3792
+ <span>100</span>
3793
+ </div>
3794
+ </div>
3795
+
3796
+ Modifiers:
3797
+ .ds-slider--sm — Smaller track and thumb
3798
+ .ds-slider--disabled Reduced opacity, no interaction
3799
+ ========================================================================== */
3728
3800
 
3729
3801
  .ds-slider {
3730
3802
  width: 100%;
@@ -3832,31 +3904,30 @@ hr {
3832
3904
  }
3833
3905
 
3834
3906
  /* ==========================================================================
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
- * ========================================================================== */
3907
+ Timeline
3908
+ ==========================================================================
3909
+ Vertical timeline component for roadmaps, activity feeds, and step-based
3910
+ flows. Each item has a dot indicator on a vertical line with support for
3911
+ completed, current, and error states.
3912
+
3913
+ Usage:
3914
+ <div class="ds-timeline">
3915
+ <div class="ds-timeline__item ds-timeline__item--completed">
3916
+ <div class="ds-timeline__dot"></div>
3917
+ <div class="ds-timeline__content">
3918
+ <div class="ds-timeline__title">Step one</div>
3919
+ <div class="ds-timeline__description">Details here.</div>
3920
+ <div class="ds-timeline__time">2 hours ago</div>
3921
+ </div>
3922
+ </div>
3923
+ </div>
3924
+
3925
+ Modifiers:
3926
+ .ds-timeline__item--completed — Green dot (success)
3927
+ .ds-timeline__item--current Inverted dot (active)
3928
+ .ds-timeline__item--error Red dot (error)
3929
+ .ds-timeline--compact Tighter spacing, smaller dots
3930
+ ========================================================================== */
3860
3931
 
3861
3932
  .ds-timeline {
3862
3933
  position: relative;
@@ -3964,25 +4035,24 @@ hr {
3964
4035
  }
3965
4036
 
3966
4037
  /* ==========================================================================
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
- * ========================================================================== */
4038
+ Kbd
4039
+ ==========================================================================
4040
+ Keyboard shortcut display component with a raised 3D key appearance.
4041
+ Use individually or group multiple keys with ds-kbd-group for combos
4042
+ like "Cmd + K".
4043
+
4044
+ Usage:
4045
+ <kbd class="ds-kbd">Esc</kbd>
4046
+
4047
+ <span class="ds-kbd-group">
4048
+ <kbd class="ds-kbd">Cmd</kbd>
4049
+ <span class="ds-kbd-group__separator">+</span>
4050
+ <kbd class="ds-kbd">K</kbd>
4051
+ </span>
4052
+
4053
+ Modifiers:
4054
+ .ds-kbd--lg — Larger key display
4055
+ ========================================================================== */
3986
4056
 
3987
4057
  .ds-kbd {
3988
4058
  display: inline-flex;
@@ -4020,38 +4090,37 @@ hr {
4020
4090
  }
4021
4091
 
4022
4092
  /* ==========================================================================
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
- * ========================================================================== */
4093
+ Command Palette
4094
+ ==========================================================================
4095
+ Command palette / search overlay following the Cmd+K pattern. Provides a
4096
+ full-screen overlay with a centered search dialog, grouped results,
4097
+ keyboard-navigable items, and a footer with shortcut hints.
4098
+
4099
+ Usage:
4100
+ <div class="ds-command ds-command--open">
4101
+ <div class="ds-command__content">
4102
+ <div class="ds-command__input-wrapper">
4103
+ <span class="ds-command__input-icon">...</span>
4104
+ <input class="ds-command__input" placeholder="Search..." />
4105
+ </div>
4106
+ <div class="ds-command__list">
4107
+ <div class="ds-command__group">
4108
+ <div class="ds-command__group-heading">Results</div>
4109
+ <div class="ds-command__item ds-command__item--active">
4110
+ <span class="ds-command__item-icon">...</span>
4111
+ <span class="ds-command__item-label">Item</span>
4112
+ <span class="ds-command__item-shortcut">Ctrl+N</span>
4113
+ </div>
4114
+ </div>
4115
+ <div class="ds-command__empty">No results found.</div>
4116
+ </div>
4117
+ <div class="ds-command__footer">...</div>
4118
+ </div>
4119
+ </div>
4120
+
4121
+ Modifiers:
4122
+ .ds-command--open — Shows the command palette
4123
+ ========================================================================== */
4055
4124
 
4056
4125
  /* Overlay */
4057
4126
  .ds-command {
@@ -4140,7 +4209,7 @@ hr {
4140
4209
  .ds-command__group-heading {
4141
4210
  font-size: var(--ds-text-xs);
4142
4211
  text-transform: uppercase;
4143
- letter-spacing: 0.05em;
4212
+ letter-spacing: var(--ds-tracking-wide);
4144
4213
  color: var(--ds-color-text-tertiary);
4145
4214
  padding: var(--ds-space-2) var(--ds-space-3);
4146
4215
  font-weight: var(--ds-weight-medium);