@digiko-npm/designsystem 0.3.32 → 0.3.34

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.
@@ -37,6 +37,12 @@
37
37
  border-color: var(--ds-color-border-hover);
38
38
  }
39
39
 
40
+ .ds-custom-select__trigger:focus-visible {
41
+ border-color: var(--ds-color-border-active);
42
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
43
+ outline-offset: -1px;
44
+ }
45
+
40
46
  .ds-custom-select__trigger--open {
41
47
  border-color: var(--ds-color-border-active);
42
48
  box-shadow: inset 0 0 0 1px var(--ds-color-border-active);
@@ -200,6 +206,10 @@
200
206
  background-color: var(--ds-color-bg-elevated);
201
207
  color: var(--ds-color-text);
202
208
  }
209
+ .ds-custom-select__option:focus-visible {
210
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
211
+ outline-offset: calc(-1 * var(--ds-ring-offset));
212
+ }
203
213
 
204
214
  .ds-custom-select__option--selected {
205
215
  background-color: var(--ds-color-bg-elevated);
@@ -308,3 +318,12 @@
308
318
  border-radius: 0;
309
319
  }
310
320
  }
321
+
322
+ @media (prefers-reduced-motion: reduce) {
323
+ .ds-custom-select__panel {
324
+ animation: none;
325
+ opacity: 1;
326
+ transform: scale(1);
327
+ }
328
+ .ds-custom-select__backdrop { animation: none; opacity: 1; }
329
+ }
@@ -57,11 +57,16 @@
57
57
  line-height: 1;
58
58
  }
59
59
 
60
+ .ds-datepicker__trigger:focus-visible {
61
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
62
+ outline-offset: var(--ds-ring-offset);
63
+ }
64
+
60
65
  /* Calendar panel */
61
66
  .ds-datepicker__panel {
62
67
  position: absolute;
63
68
  z-index: var(--ds-z-dropdown);
64
- top: calc(100% + 4px);
69
+ top: calc(100% + var(--ds-offset-sm));
65
70
  left: 0;
66
71
  background-color: var(--ds-color-surface);
67
72
  border: 1px solid var(--ds-color-border);
@@ -73,8 +78,8 @@
73
78
  visibility: hidden;
74
79
  transform: scale(0.96);
75
80
  transition:
76
- opacity var(--ds-duration-fast) var(--ds-ease),
77
- visibility var(--ds-duration-fast) var(--ds-ease),
81
+ opacity var(--ds-duration-fast) var(--ds-ease-default),
82
+ visibility var(--ds-duration-fast) var(--ds-ease-default),
78
83
  transform var(--ds-duration-fast) var(--ds-ease-out-expo);
79
84
  }
80
85
 
@@ -95,7 +100,7 @@
95
100
 
96
101
  .ds-datepicker__title {
97
102
  font-size: var(--ds-text-sm);
98
- font-weight: 600;
103
+ font-weight: var(--ds-weight-semibold);
99
104
  color: var(--ds-color-text);
100
105
  user-select: none;
101
106
  }
@@ -112,13 +117,17 @@
112
117
  color: var(--ds-color-text-secondary);
113
118
  cursor: pointer;
114
119
  font-size: var(--ds-text-base);
115
- transition: all var(--ds-duration-fast) var(--ds-ease);
120
+ transition: all var(--ds-duration-fast) var(--ds-ease-default);
116
121
  }
117
122
 
118
123
  .ds-datepicker__nav:hover {
119
124
  background-color: var(--ds-color-bg-elevated);
120
125
  color: var(--ds-color-text);
121
126
  }
127
+ .ds-datepicker__nav:focus-visible {
128
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
129
+ outline-offset: calc(-1 * var(--ds-ring-offset));
130
+ }
122
131
 
123
132
  /* Weekday header row */
124
133
  .ds-datepicker__weekdays {
@@ -133,7 +142,7 @@
133
142
  text-align: center;
134
143
  padding: var(--ds-space-1) 0;
135
144
  user-select: none;
136
- font-weight: 500;
145
+ font-weight: var(--ds-weight-medium);
137
146
  }
138
147
 
139
148
  /* Day grid */
@@ -155,7 +164,7 @@
155
164
  font-size: var(--ds-text-sm);
156
165
  color: var(--ds-color-text);
157
166
  cursor: pointer;
158
- transition: all var(--ds-duration-fast) var(--ds-ease);
167
+ transition: all var(--ds-duration-fast) var(--ds-ease-default);
159
168
  padding: 0;
160
169
  line-height: 1;
161
170
  user-select: none;
@@ -164,18 +173,22 @@
164
173
  .ds-datepicker__day:hover {
165
174
  background-color: var(--ds-color-bg-elevated);
166
175
  }
176
+ .ds-datepicker__day:focus-visible {
177
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
178
+ outline-offset: calc(-1 * var(--ds-ring-offset));
179
+ }
167
180
 
168
181
  /* Today — subtle ring */
169
182
  .ds-datepicker__day--today {
170
183
  box-shadow: inset 0 0 0 1px var(--ds-color-border-active);
171
- font-weight: 600;
184
+ font-weight: var(--ds-weight-semibold);
172
185
  }
173
186
 
174
187
  /* Selected — inverted fill */
175
188
  .ds-datepicker__day--selected {
176
189
  background-color: var(--ds-color-text);
177
190
  color: var(--ds-color-bg);
178
- font-weight: 600;
191
+ font-weight: var(--ds-weight-semibold);
179
192
  }
180
193
 
181
194
  .ds-datepicker__day--selected:hover {
@@ -200,14 +213,14 @@
200
213
 
201
214
  .ds-datepicker__today {
202
215
  font-size: var(--ds-text-xs);
203
- font-weight: 500;
216
+ font-weight: var(--ds-weight-medium);
204
217
  color: var(--ds-color-text-secondary);
205
218
  background: none;
206
219
  border: 1px solid var(--ds-color-border);
207
220
  border-radius: var(--ds-radius-full);
208
221
  padding: var(--ds-space-1) var(--ds-space-3);
209
222
  cursor: pointer;
210
- transition: all var(--ds-duration-fast) var(--ds-ease);
223
+ transition: all var(--ds-duration-fast) var(--ds-ease-default);
211
224
  }
212
225
 
213
226
  .ds-datepicker__today:hover {
@@ -215,6 +228,10 @@
215
228
  color: var(--ds-color-text);
216
229
  border-color: var(--ds-color-border-hover);
217
230
  }
231
+ .ds-datepicker__today:focus-visible {
232
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
233
+ outline-offset: var(--ds-ring-offset);
234
+ }
218
235
 
219
236
  /* Step arrows — prev/next day buttons beside the date text */
220
237
  .ds-datepicker__step {
@@ -229,7 +246,7 @@
229
246
  color: var(--ds-color-text-tertiary);
230
247
  cursor: pointer;
231
248
  font-size: var(--ds-text-xs);
232
- transition: all var(--ds-duration-fast) var(--ds-ease);
249
+ transition: all var(--ds-duration-fast) var(--ds-ease-default);
233
250
  padding: 0;
234
251
  flex-shrink: 0;
235
252
  }
@@ -238,6 +255,10 @@
238
255
  background-color: var(--ds-color-bg-elevated);
239
256
  color: var(--ds-color-text);
240
257
  }
258
+ .ds-datepicker__step:focus-visible {
259
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
260
+ outline-offset: calc(-1 * var(--ds-ring-offset));
261
+ }
241
262
 
242
263
  /* Compact mode — for inline table cells */
243
264
  .ds-datepicker--compact .ds-datepicker__panel {
@@ -256,7 +277,7 @@
256
277
  }
257
278
 
258
279
  .ds-datepicker--compact .ds-datepicker__weekday {
259
- font-size: 0.625rem;
280
+ font-size: var(--ds-text-2xs);
260
281
  }
261
282
 
262
283
  .ds-datepicker--compact .ds-datepicker__day {
@@ -264,7 +285,7 @@
264
285
  }
265
286
 
266
287
  .ds-datepicker--compact .ds-datepicker__today {
267
- font-size: 0.625rem;
288
+ font-size: var(--ds-text-2xs);
268
289
  padding: 2px var(--ds-space-2);
269
290
  }
270
291
 
@@ -185,6 +185,10 @@
185
185
  background-color: var(--ds-color-overlay);
186
186
  color: var(--ds-color-text);
187
187
  }
188
+ .ds-drawer__close:focus-visible {
189
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
190
+ outline-offset: var(--ds-ring-offset);
191
+ }
188
192
 
189
193
  /* ==========================================================================
190
194
  * Body
@@ -39,6 +39,10 @@
39
39
  transition:
40
40
  background-color var(--ds-duration-fast) var(--ds-ease-default);
41
41
  }
42
+ .ds-drop-zone:focus-visible {
43
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
44
+ outline-offset: var(--ds-ring-offset);
45
+ }
42
46
 
43
47
  :root:not(.dark) .ds-drop-zone {
44
48
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25'%3E%3Crect x='1' y='1' width='99%25' height='99%25' rx='16' ry='16' fill='none' stroke='%23d4d4d8' stroke-width='2' stroke-dasharray='10 8'/%3E%3C/svg%3E");
@@ -85,6 +85,10 @@
85
85
  background-color: var(--ds-color-bg-elevated);
86
86
  color: var(--ds-color-text);
87
87
  }
88
+ .ds-dropdown__item:focus-visible {
89
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
90
+ outline-offset: calc(-1 * var(--ds-ring-offset));
91
+ }
88
92
 
89
93
  .ds-dropdown__item--active {
90
94
  background-color: var(--ds-color-bg-elevated);
@@ -23,7 +23,11 @@
23
23
  background-color: var(--ds-color-surface);
24
24
  border: 1px solid var(--ds-color-border);
25
25
  border-radius: var(--ds-radius-lg);
26
- transition: all var(--ds-duration-fast) var(--ds-ease-default);
26
+ outline: none;
27
+ transition:
28
+ border-color var(--ds-duration-fast) var(--ds-ease-default),
29
+ box-shadow var(--ds-duration-fast) var(--ds-ease-default),
30
+ background-color var(--ds-duration-fast) var(--ds-ease-default);
27
31
  }
28
32
 
29
33
  .ds-input,
@@ -31,18 +35,22 @@
31
35
  height: var(--ds-size-3);
32
36
  }
33
37
 
38
+ /* Hover */
34
39
  .ds-input:hover,
35
40
  .ds-textarea:hover,
36
41
  .ds-select:hover {
37
42
  border-color: var(--ds-color-border-hover);
38
43
  }
39
44
 
40
- .ds-input:focus,
41
- .ds-textarea:focus,
42
- .ds-select:focus {
43
- border-color: var(--ds-color-border-active);
44
- box-shadow: inset 0 0 0 1px var(--ds-color-border-active);
45
- outline: none;
45
+ /* Focus — box-shadow ring instead of outline.
46
+ Inputs always trigger :focus-visible (browser heuristic for text entry),
47
+ so outline creates unavoidable double-border with offset.
48
+ box-shadow follows border-radius perfectly and has no gap. */
49
+ .ds-input:focus-visible,
50
+ .ds-textarea:focus-visible,
51
+ .ds-select:focus-visible {
52
+ border-color: var(--ds-ring-color);
53
+ box-shadow: 0 0 0 var(--ds-ring-width) var(--ds-ring-color);
46
54
  }
47
55
 
48
56
  .ds-input::placeholder,
@@ -50,19 +58,32 @@
50
58
  color: var(--ds-color-text-tertiary);
51
59
  }
52
60
 
53
- /* States */
61
+ /* States — error: border + ring match the semantic color */
54
62
  .ds-input--error,
55
63
  .ds-textarea--error {
56
64
  border-color: var(--ds-color-error);
57
65
  }
58
- .ds-input--error:focus,
59
- .ds-textarea--error:focus {
60
- box-shadow: inset 0 0 0 1px var(--ds-color-error);
66
+ .ds-input--error:hover,
67
+ .ds-textarea--error:hover {
68
+ border-color: var(--ds-color-error);
69
+ }
70
+ .ds-input--error:focus-visible,
71
+ .ds-textarea--error:focus-visible {
72
+ border-color: var(--ds-color-error);
73
+ box-shadow: 0 0 0 var(--ds-ring-width) var(--ds-color-error);
61
74
  }
62
75
 
76
+ /* States — success: border + ring match the semantic color */
63
77
  .ds-input--success {
64
78
  border-color: var(--ds-color-success);
65
79
  }
80
+ .ds-input--success:hover {
81
+ border-color: var(--ds-color-success);
82
+ }
83
+ .ds-input--success:focus-visible {
84
+ border-color: var(--ds-color-success);
85
+ box-shadow: 0 0 0 var(--ds-ring-width) var(--ds-color-success);
86
+ }
66
87
 
67
88
  /* Sizes */
68
89
  .ds-input--xs,
@@ -12,8 +12,8 @@
12
12
  justify-content: center;
13
13
  padding: var(--ds-space-4);
14
14
  background-color: var(--ds-color-overlay);
15
- backdrop-filter: blur(4px);
16
- -webkit-backdrop-filter: blur(4px);
15
+ backdrop-filter: blur(var(--ds-blur-sm));
16
+ -webkit-backdrop-filter: blur(var(--ds-blur-sm));
17
17
  opacity: 0;
18
18
  visibility: hidden;
19
19
  transition:
@@ -82,6 +82,10 @@
82
82
  .ds-modal__close:hover {
83
83
  color: var(--ds-color-text);
84
84
  }
85
+ .ds-modal__close:focus-visible {
86
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
87
+ outline-offset: var(--ds-ring-offset);
88
+ }
85
89
 
86
90
  .ds-modal__body {
87
91
  padding: var(--ds-space-5);
@@ -15,8 +15,8 @@
15
15
  height: 4rem;
16
16
  background-color: var(--ds-color-nav-bg);
17
17
  border-bottom: 1px solid var(--ds-color-nav-border);
18
- backdrop-filter: blur(20px) saturate(1.5);
19
- -webkit-backdrop-filter: blur(20px) saturate(1.5);
18
+ backdrop-filter: blur(var(--ds-blur-lg)) saturate(1.5);
19
+ -webkit-backdrop-filter: blur(var(--ds-blur-lg)) saturate(1.5);
20
20
  }
21
21
 
22
22
  .ds-nav--static {
@@ -53,8 +53,15 @@
53
53
  transition: color var(--ds-duration-normal) var(--ds-ease-default);
54
54
  }
55
55
 
56
- .ds-nav__link:hover {
57
- color: var(--ds-color-text);
56
+ @media (hover: hover) {
57
+ .ds-nav__link:hover {
58
+ color: var(--ds-color-text);
59
+ }
60
+ }
61
+
62
+ .ds-nav__link:focus-visible {
63
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
64
+ outline-offset: var(--ds-ring-offset);
58
65
  }
59
66
 
60
67
  .ds-nav__link--active {
@@ -79,9 +86,16 @@
79
86
  color: var(--ds-color-text-secondary);
80
87
  transition: all var(--ds-duration-normal) var(--ds-ease-default);
81
88
  }
82
- .ds-nav__icon-btn:hover {
83
- color: var(--ds-color-text);
84
- background-color: var(--ds-color-overlay-hover);
89
+ @media (hover: hover) {
90
+ .ds-nav__icon-btn:hover {
91
+ color: var(--ds-color-text);
92
+ background-color: var(--ds-color-overlay-hover);
93
+ }
94
+ }
95
+
96
+ .ds-nav__icon-btn:focus-visible {
97
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
98
+ outline-offset: var(--ds-ring-offset);
85
99
  }
86
100
 
87
101
  /* --- Mobile nav overlay --- */
@@ -90,7 +104,7 @@
90
104
  max-height: 0;
91
105
  border-bottom: 0 solid var(--ds-color-nav-border);
92
106
  background-color: var(--ds-color-nav-bg);
93
- backdrop-filter: blur(20px);
107
+ backdrop-filter: blur(var(--ds-blur-lg));
94
108
  transition: all var(--ds-duration-slow) var(--ds-ease-out-expo);
95
109
  }
96
110
 
@@ -151,9 +165,16 @@
151
165
  margin-top: var(--ds-space-1);
152
166
  }
153
167
 
154
- .ds-sidebar__link:hover {
155
- color: var(--ds-color-text);
156
- background-color: var(--ds-color-overlay-hover);
168
+ @media (hover: hover) {
169
+ .ds-sidebar__link:hover {
170
+ color: var(--ds-color-text);
171
+ background-color: var(--ds-color-overlay-hover);
172
+ }
173
+ }
174
+
175
+ .ds-sidebar__link:focus-visible {
176
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
177
+ outline-offset: calc(-1 * var(--ds-ring-offset));
157
178
  }
158
179
 
159
180
  .ds-sidebar__link--active {
@@ -54,7 +54,7 @@
54
54
  /* Placement: bottom (default) */
55
55
  .ds-popover__content,
56
56
  .ds-popover--bottom .ds-popover__content {
57
- top: calc(100% + 8px);
57
+ top: calc(100% + var(--ds-offset-md));
58
58
  left: 50%;
59
59
  transform: translateX(-50%) scale(0.96);
60
60
  }
@@ -66,7 +66,7 @@
66
66
 
67
67
  /* Placement: top */
68
68
  .ds-popover--top .ds-popover__content {
69
- bottom: calc(100% + 8px);
69
+ bottom: calc(100% + var(--ds-offset-md));
70
70
  top: auto;
71
71
  left: 50%;
72
72
  transform: translateX(-50%) scale(0.96);
@@ -78,7 +78,7 @@
78
78
 
79
79
  /* Placement: left */
80
80
  .ds-popover--left .ds-popover__content {
81
- right: calc(100% + 8px);
81
+ right: calc(100% + var(--ds-offset-md));
82
82
  top: 50%;
83
83
  left: auto;
84
84
  transform: translateY(-50%) scale(0.96);
@@ -90,7 +90,7 @@
90
90
 
91
91
  /* Placement: right */
92
92
  .ds-popover--right .ds-popover__content {
93
- left: calc(100% + 8px);
93
+ left: calc(100% + var(--ds-offset-md));
94
94
  top: 50%;
95
95
  transform: translateY(-50%) scale(0.96);
96
96
  }
@@ -94,3 +94,7 @@
94
94
  opacity: 0.4;
95
95
  }
96
96
  }
97
+
98
+ @media (prefers-reduced-motion: reduce) {
99
+ .ds-skeleton { animation: none; }
100
+ }
@@ -35,10 +35,10 @@
35
35
  animation: ds-toast-in var(--ds-duration-slow) var(--ds-ease-out-expo) forwards;
36
36
  }
37
37
 
38
- .ds-toast--info { border-left: 3px solid var(--ds-color-info); }
39
- .ds-toast--success { border-left: 3px solid var(--ds-color-success); }
40
- .ds-toast--warning { border-left: 3px solid var(--ds-color-warning); }
41
- .ds-toast--error { border-left: 3px solid var(--ds-color-error); }
38
+ .ds-toast--info { border-left: var(--ds-accent-border-width) solid var(--ds-color-info); }
39
+ .ds-toast--success { border-left: var(--ds-accent-border-width) solid var(--ds-color-success); }
40
+ .ds-toast--warning { border-left: var(--ds-accent-border-width) solid var(--ds-color-warning); }
41
+ .ds-toast--error { border-left: var(--ds-accent-border-width) solid var(--ds-color-error); }
42
42
 
43
43
  .ds-toast__message {
44
44
  flex: 1;
@@ -55,6 +55,10 @@
55
55
  .ds-toast__close:hover {
56
56
  color: var(--ds-color-text);
57
57
  }
58
+ .ds-toast__close:focus-visible {
59
+ outline: var(--ds-ring-width) solid var(--ds-ring-color);
60
+ outline-offset: var(--ds-ring-offset);
61
+ }
58
62
 
59
63
  @keyframes ds-toast-in {
60
64
  from { opacity: 0; transform: translateY(-8px); }
@@ -68,3 +72,8 @@
68
72
  @keyframes ds-toast-out {
69
73
  to { opacity: 0; transform: translateX(100%); }
70
74
  }
75
+
76
+ @media (prefers-reduced-motion: reduce) {
77
+ .ds-toast { animation: none; }
78
+ .ds-toast--exit { animation: none; opacity: 0; }
79
+ }
@@ -62,7 +62,7 @@
62
62
 
63
63
  .ds-tooltip .ds-tooltip__content,
64
64
  .ds-tooltip--top .ds-tooltip__content {
65
- bottom: calc(100% + 8px);
65
+ bottom: calc(100% + var(--ds-offset-md));
66
66
  left: 50%;
67
67
  transform: translateX(-50%) translateY(4px);
68
68
  }
@@ -86,7 +86,7 @@
86
86
  ============================================= */
87
87
 
88
88
  .ds-tooltip--bottom .ds-tooltip__content {
89
- top: calc(100% + 8px);
89
+ top: calc(100% + var(--ds-offset-md));
90
90
  bottom: auto;
91
91
  left: 50%;
92
92
  transform: translateX(-50%) translateY(-4px);
@@ -111,7 +111,7 @@
111
111
  ============================================= */
112
112
 
113
113
  .ds-tooltip--left .ds-tooltip__content {
114
- right: calc(100% + 8px);
114
+ right: calc(100% + var(--ds-offset-md));
115
115
  left: auto;
116
116
  bottom: auto;
117
117
  top: 50%;
@@ -138,7 +138,7 @@
138
138
  ============================================= */
139
139
 
140
140
  .ds-tooltip--right .ds-tooltip__content {
141
- left: calc(100% + 8px);
141
+ left: calc(100% + var(--ds-offset-md));
142
142
  right: auto;
143
143
  bottom: auto;
144
144
  top: 50%;
@@ -21,6 +21,35 @@
21
21
  --ds-ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
22
22
  --ds-ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
23
23
 
24
+ /* --- Backdrop Blur --- */
25
+ --ds-blur-sm: 4px;
26
+ --ds-blur-md: 12px;
27
+ --ds-blur-lg: 20px;
28
+
29
+ /* --- Indicator Sizes --- */
30
+ --ds-dot-size: 6px;
31
+
32
+ /* --- Accent Border --- */
33
+ --ds-accent-border-width: 3px;
34
+
35
+ /* --- Popover/Tooltip Offset --- */
36
+ --ds-offset-sm: 4px;
37
+ --ds-offset-md: 8px;
38
+
24
39
  /* --- Opacity --- */
25
40
  --ds-opacity-disabled: 0.5;
26
41
  }
42
+
43
+ /* --- Reduced Motion ---
44
+ Zero out duration tokens so every component that uses
45
+ var(--ds-duration-*) transitions instantly.
46
+ Keyframe animations are handled per-component.
47
+ -------------------------------------------------------- */
48
+ @media (prefers-reduced-motion: reduce) {
49
+ :root {
50
+ --ds-duration-fast: 0s;
51
+ --ds-duration-normal: 0s;
52
+ --ds-duration-slow: 0s;
53
+ --ds-duration-slower: 0s;
54
+ }
55
+ }
@@ -192,11 +192,15 @@
192
192
  .ds-z-60 { z-index: var(--ds-z-sticky); }
193
193
 
194
194
  /* --- Inset / Position Values --- */
195
- .ds-inset-0 { inset: 0; }
196
- .ds-top-0 { top: 0; }
197
- .ds-right-0 { right: 0; }
198
- .ds-bottom-0 { bottom: 0; }
199
- .ds-left-0 { left: 0; }
195
+ .ds-inset-0 { inset: 0; }
196
+ .ds-inset-x-0 { left: 0; right: 0; }
197
+ .ds-inset-y-0 { top: 0; bottom: 0; }
198
+ .ds-top-0 { top: 0; }
199
+ .ds-top-full { top: 100%; }
200
+ .ds-right-0 { right: 0; }
201
+ .ds-bottom-0 { bottom: 0; }
202
+ .ds-bottom-full { bottom: 100%; }
203
+ .ds-left-0 { left: 0; }
200
204
  .ds-top-2 { top: var(--ds-space-2); }
201
205
  .ds-right-2 { right: var(--ds-space-2); }
202
206
  .ds-left-2 { left: var(--ds-space-2); }