@digiko-npm/designsystem 0.7.2 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/designsystem.css +6682 -4515
  2. package/dist/designsystem.min.css +2 -2
  3. package/package.json +18 -3
  4. package/src/components/accordion.css +129 -128
  5. package/src/components/alert.css +137 -134
  6. package/src/components/avatar.css +77 -77
  7. package/src/components/badge.css +52 -52
  8. package/src/components/bottom-nav.css +71 -71
  9. package/src/components/bottom-sheet.css +146 -0
  10. package/src/components/breadcrumb.css +61 -61
  11. package/src/components/button.css +162 -154
  12. package/src/components/card.css +94 -72
  13. package/src/components/chip.css +38 -38
  14. package/src/components/collapsible.css +96 -100
  15. package/src/components/color-picker.css +82 -0
  16. package/src/components/combobox.css +418 -0
  17. package/src/components/command.css +141 -140
  18. package/src/components/copy-button.css +106 -0
  19. package/src/components/datepicker.css +257 -251
  20. package/src/components/description-list.css +89 -87
  21. package/src/components/divider.css +45 -45
  22. package/src/components/drawer.css +185 -174
  23. package/src/components/drop-zone.css +85 -84
  24. package/src/components/dropdown.css +148 -140
  25. package/src/components/empty-state.css +50 -50
  26. package/src/components/field.css +35 -0
  27. package/src/components/gallery.css +257 -0
  28. package/src/components/icon-btn.css +2 -1
  29. package/src/components/index.css +14 -3
  30. package/src/components/input.css +205 -146
  31. package/src/components/kbd.css +10 -10
  32. package/src/components/modal.css +92 -90
  33. package/src/components/nav.css +140 -138
  34. package/src/components/number-input.css +163 -0
  35. package/src/components/pagination.css +152 -139
  36. package/src/components/pin-input.css +136 -0
  37. package/src/components/popover.css +72 -72
  38. package/src/components/progress.css +128 -129
  39. package/src/components/result.css +53 -57
  40. package/src/components/scroll-area.css +73 -0
  41. package/src/components/search.css +10 -4
  42. package/src/components/segmented-control.css +93 -0
  43. package/src/components/skeleton.css +58 -58
  44. package/src/components/slider.css +102 -100
  45. package/src/components/sortable.css +44 -45
  46. package/src/components/spinner.css +27 -27
  47. package/src/components/star-rating.css +121 -0
  48. package/src/components/stat-card.css +38 -25
  49. package/src/components/table.css +288 -3
  50. package/src/components/tabs.css +121 -121
  51. package/src/components/tag.css +124 -124
  52. package/src/components/timeline.css +99 -99
  53. package/src/components/toast.css +37 -38
  54. package/src/components/toggle.css +88 -88
  55. package/src/components/toolbar.css +137 -121
  56. package/src/components/tooltip.css +150 -150
  57. package/src/components/truncated-text.css +75 -0
  58. package/src/tokens/tokens.json +413 -0
@@ -46,144 +46,223 @@
46
46
  height: var(--ds-size-3);
47
47
  }
48
48
 
49
- /* Hover */
50
- .ds-input:hover,
51
- .ds-textarea:hover,
52
- .ds-select:hover {
53
- border-color: var(--ds-color-border-hover);
54
- }
49
+ .ds-input {
50
+ /* Hover */
51
+ &:hover {
52
+ border-color: var(--ds-color-border-hover);
53
+ }
55
54
 
56
- /* Focus — box-shadow ring instead of outline.
57
- Inputs always trigger :focus-visible (browser heuristic for text entry),
58
- so outline creates unavoidable double-border with offset.
59
- box-shadow follows border-radius perfectly and has no gap. */
60
- .ds-input:focus-visible,
61
- .ds-textarea:focus-visible,
62
- .ds-select:focus-visible {
63
- border-color: var(--ds-ring-color);
64
- box-shadow: 0 0 0 var(--ds-ring-width) var(--ds-ring-color);
65
- scroll-margin-block: var(--ds-space-16, 4rem);
66
- }
55
+ /* Focus — box-shadow ring instead of outline.
56
+ Inputs always trigger :focus-visible (browser heuristic for text entry),
57
+ so outline creates unavoidable double-border with offset.
58
+ box-shadow follows border-radius perfectly and has no gap. */
59
+ &:focus-visible {
60
+ border-color: var(--ds-ring-color);
61
+ box-shadow: 0 0 0 var(--ds-ring-width) var(--ds-ring-color);
62
+ scroll-margin-block: var(--ds-space-16, 4rem);
63
+ }
67
64
 
68
- .ds-input::placeholder,
69
- .ds-textarea::placeholder {
70
- color: var(--ds-color-text-tertiary);
71
- }
65
+ &::placeholder {
66
+ color: var(--ds-color-text-tertiary);
67
+ }
72
68
 
73
- /* States — error: border + ring match the semantic color */
74
- .ds-input--error,
75
- .ds-textarea--error {
76
- border-color: var(--ds-color-error);
77
- }
78
- .ds-input--error:hover,
79
- .ds-textarea--error:hover {
80
- border-color: var(--ds-color-error);
81
- }
82
- .ds-input--error:focus-visible,
83
- .ds-textarea--error:focus-visible {
84
- border-color: var(--ds-color-error);
85
- box-shadow: 0 0 0 var(--ds-ring-width) var(--ds-color-error);
86
- }
69
+ /* States — error: border + ring match the semantic color */
70
+ &--error {
71
+ border-color: var(--ds-color-error);
87
72
 
88
- /* States — success: border + ring match the semantic color */
89
- .ds-input--success {
90
- border-color: var(--ds-color-success);
91
- }
92
- .ds-input--success:hover {
93
- border-color: var(--ds-color-success);
94
- }
95
- .ds-input--success:focus-visible {
96
- border-color: var(--ds-color-success);
97
- box-shadow: 0 0 0 var(--ds-ring-width) var(--ds-color-success);
98
- }
73
+ &:hover {
74
+ border-color: var(--ds-color-error);
75
+ }
99
76
 
100
- /* Sizes */
101
- .ds-input--xs,
102
- .ds-select--xs {
103
- height: var(--ds-size-1);
104
- padding: 0 var(--ds-space-1-5);
105
- font-size: var(--ds-text-xs);
106
- border-radius: var(--ds-radius-sm);
107
- }
77
+ &:focus-visible {
78
+ border-color: var(--ds-color-error);
79
+ box-shadow: 0 0 0 var(--ds-ring-width) var(--ds-color-error);
80
+ }
81
+ }
108
82
 
109
- .ds-input--sm,
110
- .ds-select--sm {
111
- height: var(--ds-size-2);
112
- padding: 0 var(--ds-space-2);
113
- font-size: var(--ds-text-sm);
114
- border-radius: var(--ds-radius-md);
115
- }
83
+ /* States — success: border + ring match the semantic color */
84
+ &--success {
85
+ border-color: var(--ds-color-success);
116
86
 
117
- .ds-input--lg,
118
- .ds-select--lg {
119
- height: var(--ds-size-4);
120
- padding: 0 var(--ds-space-4);
121
- font-size: var(--ds-text-base);
122
- }
87
+ &:hover {
88
+ border-color: var(--ds-color-success);
89
+ }
123
90
 
124
- .ds-select--lg {
125
- padding-inline-end: var(--ds-space-8);
91
+ &:focus-visible {
92
+ border-color: var(--ds-color-success);
93
+ box-shadow: 0 0 0 var(--ds-ring-width) var(--ds-color-success);
94
+ }
95
+ }
96
+
97
+ /* Sizes */
98
+ &--xs {
99
+ height: var(--ds-size-1);
100
+ padding: 0 var(--ds-space-1-5);
101
+ font-size: var(--ds-text-xs);
102
+ border-radius: var(--ds-radius-sm);
103
+ }
104
+
105
+ &--sm {
106
+ height: var(--ds-size-2);
107
+ padding: 0 var(--ds-space-2);
108
+ font-size: var(--ds-text-sm);
109
+ border-radius: var(--ds-radius-md);
110
+ }
111
+
112
+ &--lg {
113
+ height: var(--ds-size-4);
114
+ padding: 0 var(--ds-space-4);
115
+ font-size: var(--ds-text-base);
116
+ }
117
+
118
+ /* --- Layout Modifiers ---
119
+ Override default width/display/chrome assumptions. */
120
+
121
+ /* Flush — naked input inside a styled container.
122
+ No border, no background, no padding, no focus ring.
123
+ The container handles visual chrome. */
124
+ &--flush {
125
+ background: transparent;
126
+ border: none;
127
+ padding: 0;
128
+ border-radius: 0;
129
+ box-shadow: none;
130
+ height: auto;
131
+
132
+ &:hover {
133
+ border-color: transparent;
134
+ }
135
+
136
+ &:focus-visible {
137
+ border-color: transparent;
138
+ box-shadow: none;
139
+ }
140
+ }
141
+
142
+ /* Inline — auto-width for use in flex rows */
143
+ &--inline {
144
+ width: auto;
145
+ display: inline-flex;
146
+ }
126
147
  }
127
148
 
128
- /* Textarea */
129
149
  .ds-textarea {
150
+ &:hover {
151
+ border-color: var(--ds-color-border-hover);
152
+ }
153
+
154
+ &:focus-visible {
155
+ border-color: var(--ds-ring-color);
156
+ box-shadow: 0 0 0 var(--ds-ring-width) var(--ds-ring-color);
157
+ scroll-margin-block: var(--ds-space-16, 4rem);
158
+ }
159
+
160
+ &::placeholder {
161
+ color: var(--ds-color-text-tertiary);
162
+ }
163
+
164
+ /* States — error */
165
+ &--error {
166
+ border-color: var(--ds-color-error);
167
+
168
+ &:hover {
169
+ border-color: var(--ds-color-error);
170
+ }
171
+
172
+ &:focus-visible {
173
+ border-color: var(--ds-color-error);
174
+ box-shadow: 0 0 0 var(--ds-ring-width) var(--ds-color-error);
175
+ }
176
+ }
177
+
178
+ /* Textarea */
130
179
  min-height: 6rem;
131
180
  padding: var(--ds-space-2-5) var(--ds-space-4);
132
181
  height: auto;
133
182
  resize: vertical;
134
183
  }
135
184
 
136
- /* Select */
137
185
  .ds-select {
186
+ &:hover {
187
+ border-color: var(--ds-color-border-hover);
188
+ }
189
+
190
+ &:focus-visible {
191
+ border-color: var(--ds-ring-color);
192
+ box-shadow: 0 0 0 var(--ds-ring-width) var(--ds-ring-color);
193
+ scroll-margin-block: var(--ds-space-16, 4rem);
194
+ }
195
+
196
+ /* Select */
138
197
  appearance: none;
139
198
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23a1a1aa' d='M2 4l4 4 4-4'/%3E%3C/svg%3E");
140
199
  background-repeat: no-repeat;
141
200
  background-position: right var(--ds-space-3) center;
142
201
  padding-inline-end: var(--ds-space-8);
143
- }
144
202
 
145
- /* --- Layout Modifiers ---
146
- Override default width/display/chrome assumptions. */
203
+ /* Sizes */
204
+ &--xs {
205
+ height: var(--ds-size-1);
206
+ padding: 0 var(--ds-space-1-5);
207
+ font-size: var(--ds-text-xs);
208
+ border-radius: var(--ds-radius-sm);
209
+ }
147
210
 
148
- /* Full width (opt-in for select, already default for input/textarea) */
149
- .ds-select--full {
150
- width: 100%;
151
- }
211
+ &--sm {
212
+ height: var(--ds-size-2);
213
+ padding: 0 var(--ds-space-2);
214
+ font-size: var(--ds-text-sm);
215
+ border-radius: var(--ds-radius-md);
216
+ }
152
217
 
153
- /* Flush — naked input inside a styled container.
154
- No border, no background, no padding, no focus ring.
155
- The container handles visual chrome. */
156
- .ds-input--flush {
157
- background: transparent;
158
- border: none;
159
- padding: 0;
160
- border-radius: 0;
161
- box-shadow: none;
162
- height: auto;
163
- }
164
- .ds-input--flush:hover {
165
- border-color: transparent;
166
- }
167
- .ds-input--flush:focus-visible {
168
- border-color: transparent;
169
- box-shadow: none;
170
- }
218
+ &--lg {
219
+ height: var(--ds-size-4);
220
+ padding: 0 var(--ds-space-4);
221
+ font-size: var(--ds-text-base);
222
+ padding-inline-end: var(--ds-space-8);
223
+ }
171
224
 
172
- /* Inline auto-width for use in flex rows */
173
- .ds-input--inline {
174
- width: auto;
175
- display: inline-flex;
225
+ /* Full width (opt-in for select, already default for input/textarea) */
226
+ &--full {
227
+ width: 100%;
228
+ }
176
229
  }
177
230
 
178
- /* --- Input Group: icon-right ---
179
- Move icon to the right side, flip input padding. */
180
- .ds-input-group--icon-right .ds-input-group__icon {
181
- inset-inline-start: auto;
182
- inset-inline-end: var(--ds-space-3);
183
- }
184
- .ds-input-group--icon-right .ds-input {
185
- padding-inline-start: var(--ds-space-4);
186
- padding-inline-end: calc(var(--ds-space-3) + 1rem + var(--ds-space-2));
231
+ /* --- Input Group ---
232
+ Wrapper for input with leading icon.
233
+ Icon sits inside the input via absolute positioning. */
234
+ .ds-input-group {
235
+ position: relative;
236
+
237
+ &__icon {
238
+ position: absolute;
239
+ inset-inline-start: var(--ds-space-3);
240
+ inset-block-start: 50%;
241
+ transform: translateY(-50%);
242
+ display: flex;
243
+ align-items: center;
244
+ justify-content: center;
245
+ color: var(--ds-color-text-tertiary);
246
+ pointer-events: none;
247
+ }
248
+
249
+ & .ds-input {
250
+ padding-inline-start: calc(var(--ds-space-3) + 1rem + var(--ds-space-2));
251
+ }
252
+
253
+ /* --- Input Group: icon-right ---
254
+ Move icon to the right side, flip input padding. */
255
+ &--icon-right {
256
+ & .ds-input-group__icon {
257
+ inset-inline-start: auto;
258
+ inset-inline-end: var(--ds-space-3);
259
+ }
260
+
261
+ & .ds-input {
262
+ padding-inline-start: var(--ds-space-4);
263
+ padding-inline-end: calc(var(--ds-space-3) + 1rem + var(--ds-space-2));
264
+ }
265
+ }
187
266
  }
188
267
 
189
268
  /* Help text */
@@ -191,8 +270,9 @@
191
270
  font-size: var(--ds-text-xs);
192
271
  color: var(--ds-color-text-tertiary);
193
272
  margin-block-start: var(--ds-space-1-5);
273
+
274
+ &--error { color: var(--ds-color-error); }
194
275
  }
195
- .ds-help--error { color: var(--ds-color-error); }
196
276
 
197
277
  /* Form Group (legacy — prefer ds-form) */
198
278
  .ds-form-group { margin-block-end: var(--ds-space-4); }
@@ -201,35 +281,14 @@
201
281
  Vertical form layout: comfortable spacing between fields (24px),
202
282
  extra breathing room before the action area (32px).
203
283
  Use ds-form__actions on the button/submit wrapper. */
204
- .ds-form > * + * {
205
- margin-block-start: var(--ds-space-6);
206
- }
284
+ .ds-form {
285
+ & > * + * {
286
+ margin-block-start: var(--ds-space-6);
287
+ }
207
288
 
208
- .ds-form__actions {
209
- margin-block-start: var(--ds-space-8);
210
- }
211
-
212
- /* --- Input Group ---
213
- Wrapper for input with leading icon.
214
- Icon sits inside the input via absolute positioning. */
215
- .ds-input-group {
216
- position: relative;
217
- }
218
-
219
- .ds-input-group__icon {
220
- position: absolute;
221
- inset-inline-start: var(--ds-space-3);
222
- inset-block-start: 50%;
223
- transform: translateY(-50%);
224
- display: flex;
225
- align-items: center;
226
- justify-content: center;
227
- color: var(--ds-color-text-tertiary);
228
- pointer-events: none;
229
- }
230
-
231
- .ds-input-group .ds-input {
232
- padding-inline-start: calc(var(--ds-space-3) + 1rem + var(--ds-space-2));
289
+ &__actions {
290
+ margin-block-start: var(--ds-space-8);
291
+ }
233
292
  }
234
293
 
235
294
  /* Checkbox / Radio */
@@ -241,12 +300,12 @@
241
300
  cursor: pointer;
242
301
  font-size: var(--ds-text-sm);
243
302
  color: var(--ds-color-text-secondary);
244
- }
245
- .ds-checkbox input,
246
- .ds-radio input {
247
- accent-color: var(--ds-color-interactive);
248
- width: 1rem;
249
- height: 1rem;
250
- min-width: 1.5rem; /* WCAG 2.5.8: minimum 24px target */
251
- min-height: 1.5rem;
303
+
304
+ & input {
305
+ accent-color: var(--ds-color-interactive);
306
+ width: 1rem;
307
+ height: 1rem;
308
+ min-width: 1.5rem; /* WCAG 2.5.8: minimum 24px target */
309
+ min-height: 1.5rem;
310
+ }
252
311
  }
@@ -32,12 +32,12 @@
32
32
  color: var(--ds-color-text-secondary);
33
33
  line-height: 1;
34
34
  vertical-align: baseline;
35
- }
36
35
 
37
- /* Large variant */
38
- .ds-kbd--lg {
39
- font-size: var(--ds-text-sm);
40
- padding: var(--ds-space-1) var(--ds-space-2);
36
+ /* Large variant */
37
+ &--lg {
38
+ font-size: var(--ds-text-sm);
39
+ padding: var(--ds-space-1) var(--ds-space-2);
40
+ }
41
41
  }
42
42
 
43
43
  /* Key group (for combos like Cmd + K) */
@@ -45,10 +45,10 @@
45
45
  display: inline-flex;
46
46
  align-items: center;
47
47
  gap: var(--ds-space-1);
48
- }
49
48
 
50
- /* Separator between keys */
51
- .ds-kbd-group__separator {
52
- font-size: var(--ds-text-xs);
53
- color: var(--ds-color-text-tertiary);
49
+ /* Separator between keys */
50
+ &__separator {
51
+ font-size: var(--ds-text-xs);
52
+ color: var(--ds-color-text-tertiary);
53
+ }
54
54
  }
@@ -27,108 +27,110 @@
27
27
  transition:
28
28
  opacity var(--ds-duration-slow) var(--ds-ease-default),
29
29
  visibility var(--ds-duration-slow) var(--ds-ease-default);
30
- }
31
30
 
32
- .ds-modal[open],
33
- .ds-modal--open {
34
- opacity: 1;
35
- visibility: visible;
36
- }
31
+ &[open],
32
+ &--open {
33
+ opacity: 1;
34
+ visibility: visible;
35
+ }
37
36
 
38
- .ds-modal__content {
39
- width: 100%;
40
- max-width: 28rem;
41
- max-height: 90dvh;
42
- background-color: var(--ds-color-surface);
43
- border: 1px solid var(--ds-color-border);
44
- border-radius: var(--ds-radius-xl);
45
- box-shadow: var(--ds-shadow-lg);
46
- overflow: hidden;
47
- display: flex;
48
- flex-direction: column;
49
- transform: scale(0.96);
50
- transition: transform var(--ds-duration-slow) var(--ds-ease-out-expo);
51
- }
37
+ &__content {
38
+ width: 100%;
39
+ max-width: 28rem;
40
+ max-height: 90dvh;
41
+ background-color: var(--ds-color-surface);
42
+ border: 1px solid var(--ds-color-border);
43
+ border-radius: var(--ds-radius-xl);
44
+ box-shadow: var(--ds-shadow-lg);
45
+ overflow: hidden;
46
+ display: flex;
47
+ flex-direction: column;
48
+ transform: scale(0.96);
49
+ transition: transform var(--ds-duration-slow) var(--ds-ease-out-expo);
50
+ }
52
51
 
53
- .ds-modal[open] .ds-modal__content,
54
- .ds-modal--open .ds-modal__content {
55
- transform: scale(1);
56
- }
52
+ &[open] .ds-modal__content,
53
+ &--open .ds-modal__content {
54
+ transform: scale(1);
55
+ }
57
56
 
58
- .ds-modal__header {
59
- display: flex;
60
- align-items: flex-start;
61
- justify-content: space-between;
62
- padding: var(--ds-space-4) var(--ds-space-5);
63
- border-block-end: 1px solid var(--ds-color-border);
64
- }
57
+ &__header {
58
+ display: flex;
59
+ align-items: flex-start;
60
+ justify-content: space-between;
61
+ padding: var(--ds-space-4) var(--ds-space-5);
62
+ border-block-end: 1px solid var(--ds-color-border);
65
63
 
66
- .ds-modal__header h3 {
67
- font-family: var(--ds-font-display);
68
- font-weight: var(--ds-font-display-weight);
69
- font-size: var(--ds-text-lg);
70
- color: var(--ds-color-text);
71
- }
64
+ & h3 {
65
+ font-family: var(--ds-font-display);
66
+ font-weight: var(--ds-font-display-weight);
67
+ font-size: var(--ds-text-lg);
68
+ color: var(--ds-color-text);
69
+ }
72
70
 
73
- .ds-modal__header p {
74
- font-size: var(--ds-text-sm);
75
- color: var(--ds-color-text-tertiary);
76
- margin-block-start: var(--ds-space-1);
77
- }
71
+ & p {
72
+ font-size: var(--ds-text-sm);
73
+ color: var(--ds-color-text-tertiary);
74
+ margin-block-start: var(--ds-space-1);
75
+ }
76
+ }
78
77
 
79
- .ds-modal__close {
80
- display: flex;
81
- align-items: center;
82
- justify-content: center;
83
- width: 2rem;
84
- height: 2rem;
85
- color: var(--ds-color-text-tertiary);
86
- border-radius: var(--ds-radius-md);
87
- transition: all var(--ds-duration-fast) var(--ds-ease-default);
88
- flex-shrink: 0;
89
- }
90
- .ds-modal__close:hover {
91
- color: var(--ds-color-text);
92
- }
93
- .ds-modal__close:focus-visible {
94
- outline: none;
95
- box-shadow: 0 0 0 var(--ds-ring-width) var(--ds-ring-color);
96
- scroll-margin-block: var(--ds-space-16, 4rem);
97
- }
78
+ &__close {
79
+ display: flex;
80
+ align-items: center;
81
+ justify-content: center;
82
+ width: 2rem;
83
+ height: 2rem;
84
+ color: var(--ds-color-text-tertiary);
85
+ border-radius: var(--ds-radius-md);
86
+ transition: all var(--ds-duration-fast) var(--ds-ease-default);
87
+ flex-shrink: 0;
98
88
 
99
- .ds-modal__body {
100
- padding: var(--ds-space-5);
101
- overflow-y: auto;
102
- flex: 1;
103
- }
89
+ &:hover {
90
+ color: var(--ds-color-text);
91
+ }
104
92
 
105
- .ds-modal__footer {
106
- display: flex;
107
- align-items: center;
108
- justify-content: flex-end;
109
- gap: var(--ds-space-2);
110
- padding: var(--ds-space-4) var(--ds-space-5);
111
- border-block-start: 1px solid var(--ds-color-border);
112
- }
93
+ &:focus-visible {
94
+ outline: none;
95
+ box-shadow: 0 0 0 var(--ds-ring-width) var(--ds-ring-color);
96
+ scroll-margin-block: var(--ds-space-16, 4rem);
97
+ }
98
+ }
113
99
 
114
- /* Size variants */
115
- .ds-modal--md .ds-modal__content { max-width: var(--ds-container-md); }
116
- .ds-modal--lg .ds-modal__content { max-width: var(--ds-container-lg); }
100
+ &__body {
101
+ padding: var(--ds-space-5);
102
+ overflow-y: auto;
103
+ flex: 1;
104
+ }
117
105
 
118
- /* Fullscreen on mobile */
119
- @media (max-width: 1023px) /* below --ds-breakpoint-lg */ {
120
- .ds-modal--fullscreen-mobile .ds-modal__content {
121
- max-width: none;
122
- max-height: none;
123
- width: 100%;
124
- height: 100dvh;
125
- margin: 0;
126
- border-radius: 0;
127
- border: none;
128
- box-shadow: none;
106
+ &__footer {
107
+ display: flex;
108
+ align-items: center;
109
+ justify-content: flex-end;
110
+ gap: var(--ds-space-2);
111
+ padding: var(--ds-space-4) var(--ds-space-5);
112
+ border-block-start: 1px solid var(--ds-color-border);
129
113
  }
130
114
 
131
- .ds-modal--fullscreen-mobile {
132
- padding: 0;
115
+ /* Size variants */
116
+ &--md .ds-modal__content { max-width: var(--ds-container-md); }
117
+ &--lg .ds-modal__content { max-width: var(--ds-container-lg); }
118
+
119
+ /* Fullscreen on mobile */
120
+ @media (max-width: 1023px) /* below --ds-breakpoint-lg */ {
121
+ &--fullscreen-mobile .ds-modal__content {
122
+ max-width: none;
123
+ max-height: none;
124
+ width: 100%;
125
+ height: 100dvh;
126
+ margin: 0;
127
+ border-radius: 0;
128
+ border: none;
129
+ box-shadow: none;
130
+ }
131
+
132
+ &--fullscreen-mobile {
133
+ padding: 0;
134
+ }
133
135
  }
134
136
  }