@adamarant/designsystem 0.11.2

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 (84) hide show
  1. package/README.md +101 -0
  2. package/dist/designsystem.css +13494 -0
  3. package/dist/designsystem.js +67 -0
  4. package/dist/designsystem.min.css +2 -0
  5. package/package.json +111 -0
  6. package/src/base/index.css +2 -0
  7. package/src/base/reset.css +119 -0
  8. package/src/base/typography.css +172 -0
  9. package/src/components/accordion.css +166 -0
  10. package/src/components/admin-layout.css +371 -0
  11. package/src/components/alert.css +159 -0
  12. package/src/components/avatar.css +109 -0
  13. package/src/components/badge.css +80 -0
  14. package/src/components/bottom-nav.css +125 -0
  15. package/src/components/bottom-sheet.css +146 -0
  16. package/src/components/breadcrumb.css +102 -0
  17. package/src/components/button.css +250 -0
  18. package/src/components/card.css +117 -0
  19. package/src/components/chip.css +79 -0
  20. package/src/components/collapsible.css +112 -0
  21. package/src/components/color-picker.css +82 -0
  22. package/src/components/combobox.css +420 -0
  23. package/src/components/command.css +210 -0
  24. package/src/components/context-menu.css +162 -0
  25. package/src/components/copy-button.css +106 -0
  26. package/src/components/custom-select.css +446 -0
  27. package/src/components/datepicker.css +301 -0
  28. package/src/components/description-list.css +100 -0
  29. package/src/components/divider.css +66 -0
  30. package/src/components/drawer.css +234 -0
  31. package/src/components/drop-zone.css +166 -0
  32. package/src/components/dropdown.css +169 -0
  33. package/src/components/empty-state.css +75 -0
  34. package/src/components/field.css +112 -0
  35. package/src/components/gallery.css +257 -0
  36. package/src/components/hero.css +111 -0
  37. package/src/components/icon-btn.css +103 -0
  38. package/src/components/index.css +74 -0
  39. package/src/components/input.css +311 -0
  40. package/src/components/kbd.css +54 -0
  41. package/src/components/media-library.css +230 -0
  42. package/src/components/modal.css +136 -0
  43. package/src/components/nav.css +198 -0
  44. package/src/components/number-input.css +163 -0
  45. package/src/components/pagination.css +175 -0
  46. package/src/components/pin-input.css +136 -0
  47. package/src/components/popover.css +111 -0
  48. package/src/components/progress.css +217 -0
  49. package/src/components/prose.css +337 -0
  50. package/src/components/result.css +80 -0
  51. package/src/components/scroll-area.css +73 -0
  52. package/src/components/search.css +311 -0
  53. package/src/components/segmented-control.css +94 -0
  54. package/src/components/skeleton.css +100 -0
  55. package/src/components/slider.css +133 -0
  56. package/src/components/sortable.css +70 -0
  57. package/src/components/spinner.css +60 -0
  58. package/src/components/star-rating.css +121 -0
  59. package/src/components/stat-card.css +44 -0
  60. package/src/components/table.css +359 -0
  61. package/src/components/tabs.css +215 -0
  62. package/src/components/tag.css +188 -0
  63. package/src/components/timeline.css +130 -0
  64. package/src/components/toast.css +90 -0
  65. package/src/components/toggle.css +173 -0
  66. package/src/components/toolbar.css +206 -0
  67. package/src/components/tooltip.css +167 -0
  68. package/src/components/truncated-text.css +75 -0
  69. package/src/index.css +21 -0
  70. package/src/js/theme.js +67 -0
  71. package/src/tokens/colors.css +256 -0
  72. package/src/tokens/index.css +11 -0
  73. package/src/tokens/shadows.css +55 -0
  74. package/src/tokens/spacing.css +82 -0
  75. package/src/tokens/tokens.json +413 -0
  76. package/src/tokens/typography.css +90 -0
  77. package/src/utilities/a11y.css +102 -0
  78. package/src/utilities/index.css +7 -0
  79. package/src/utilities/interactive.css +121 -0
  80. package/src/utilities/layout.css +273 -0
  81. package/src/utilities/sizing.css +85 -0
  82. package/src/utilities/spacing.css +204 -0
  83. package/src/utilities/states.css +182 -0
  84. package/src/utilities/text.css +381 -0
@@ -0,0 +1,121 @@
1
+ /* ==========================================================================
2
+ Utilities: Interactive
3
+ Hover states, reveal patterns, focus rings, and cursor utilities.
4
+ ========================================================================== */
5
+
6
+ /* --- Hover Row (background elevation on hover) --- */
7
+ .ds-hover-row {
8
+ transition: background-color var(--ds-duration-fast) var(--ds-ease-default);
9
+ }
10
+ .ds-hover-row:hover {
11
+ background-color: var(--ds-color-surface-hover);
12
+ }
13
+
14
+ /* Subtle variant (semi-transparent) */
15
+ .ds-hover-row--subtle {
16
+ transition: background-color var(--ds-duration-fast) var(--ds-ease-default);
17
+ }
18
+ .ds-hover-row--subtle:hover {
19
+ background-color: color-mix(in srgb, var(--ds-color-surface-hover) 50%, transparent);
20
+ }
21
+
22
+ /* --- Group Reveal (children appear on parent hover) — .ds-group-reveal --- */
23
+ .ds-group-reveal {
24
+ opacity: 0;
25
+ transition: opacity var(--ds-duration-fast) var(--ds-ease-default);
26
+ }
27
+ .group:hover > .ds-group-reveal,
28
+ .group:hover .ds-group-reveal {
29
+ opacity: 1;
30
+ }
31
+
32
+ /* --- Editable Cell (pointer + bg on hover) --- */
33
+ .ds-editable {
34
+ cursor: pointer;
35
+ border-radius: var(--ds-radius-md);
36
+ transition: background-color var(--ds-duration-fast) var(--ds-ease-default);
37
+ }
38
+ .ds-editable:hover {
39
+ background-color: var(--ds-color-surface-hover);
40
+ }
41
+
42
+ /* --- Hover Border --- */
43
+ .ds-hover-border {
44
+ transition: border-color var(--ds-duration-fast) var(--ds-ease-default);
45
+ }
46
+ .ds-hover-border:hover {
47
+ border-color: var(--ds-color-border-hover);
48
+ }
49
+
50
+ /* --- Hover Zoom (scale on hover) --- */
51
+ .ds-hover-zoom {
52
+ transition: transform var(--ds-duration-fast) var(--ds-ease-default);
53
+ }
54
+ .ds-hover-zoom:hover {
55
+ transform: scale(1.05);
56
+ }
57
+
58
+ /* --- Opacity Hover (dim → full on hover) --- */
59
+ .ds-opacity-hover {
60
+ opacity: 0.5;
61
+ transition: opacity var(--ds-duration-fast) var(--ds-ease-default);
62
+ }
63
+ .ds-opacity-hover:hover {
64
+ opacity: 1;
65
+ }
66
+
67
+ /* --- Focus Ring (inset ring for custom inputs) --- */
68
+ .ds-focus-ring:focus {
69
+ border-color: var(--ds-color-border-active);
70
+ box-shadow: inset 0 0 0 1px var(--ds-color-border-active);
71
+ outline: none;
72
+ }
73
+
74
+ /* --- Ring States --- */
75
+ .ds-ring-active {
76
+ box-shadow: 0 0 0 2px var(--ds-color-border-active);
77
+ }
78
+
79
+ .ds-ring-selected {
80
+ box-shadow: 0 0 0 2px var(--ds-color-interactive), 0 0 0 3px var(--ds-color-surface);
81
+ }
82
+
83
+ /* --- Semi-transparent Backgrounds --- */
84
+ .ds-bg-elevated-50 {
85
+ background-color: color-mix(in srgb, var(--ds-color-surface-hover) 50%, transparent);
86
+ }
87
+
88
+ .ds-bg-base-50 {
89
+ background-color: color-mix(in srgb, var(--ds-color-bg) 50%, transparent);
90
+ }
91
+
92
+ /* --- Hover Color Variants --- */
93
+ .ds-hover-text-error:hover {
94
+ color: var(--ds-color-error);
95
+ }
96
+
97
+ .ds-hover-bg-error:hover {
98
+ background-color: color-mix(in srgb, var(--ds-color-error) 10%, transparent);
99
+ }
100
+
101
+ /* --- Cursor Utilities --- */
102
+ .ds-cursor-grab {
103
+ cursor: grab;
104
+ }
105
+ .ds-cursor-grab:active {
106
+ cursor: grabbing;
107
+ }
108
+
109
+ /* --- Grip Icon (secondary → primary on group hover) --- */
110
+ .ds-grip {
111
+ color: var(--ds-color-text-secondary);
112
+ transition: color var(--ds-duration-fast) var(--ds-ease-default);
113
+ }
114
+ .group:hover .ds-grip {
115
+ color: var(--ds-color-text);
116
+ }
117
+
118
+ /* --- Backdrop Blur (extended) --- */
119
+ .ds-backdrop-blur-lg { backdrop-filter: blur(16px); }
120
+ .ds-backdrop-blur-xl { backdrop-filter: blur(24px); }
121
+ .ds-backdrop-blur-2xl { backdrop-filter: blur(40px); }
@@ -0,0 +1,273 @@
1
+ /* ==========================================================================
2
+ Utilities: Layout
3
+ Container with clamp padding, generous responsive grid.
4
+ ========================================================================== */
5
+
6
+ /* --- Container --- */
7
+ .ds-container {
8
+ width: 100%;
9
+ max-width: var(--ds-container-max);
10
+ margin-inline: auto;
11
+ padding-inline: var(--ds-container-padding);
12
+ }
13
+
14
+ /* --- Section (generous vertical rhythm) --- */
15
+ .ds-section {
16
+ padding-block: var(--ds-section-padding);
17
+ }
18
+
19
+ /* --- Flex --- */
20
+ .ds-flex { display: flex; }
21
+ .ds-inline-flex { display: inline-flex; }
22
+ .ds-flex-col { flex-direction: column; }
23
+ .ds-flex-row { flex-direction: row; }
24
+ .ds-flex-wrap { flex-wrap: wrap; }
25
+ .ds-flex-1 { flex: 1 1 0%; }
26
+ .ds-flex-auto { flex: 1 1 auto; }
27
+ .ds-flex-none { flex: none; }
28
+ .ds-shrink-0 { flex-shrink: 0; }
29
+
30
+ /* --- Alignment --- */
31
+ .ds-items-start { align-items: flex-start; }
32
+ .ds-items-center { align-items: center; }
33
+ .ds-items-end { align-items: flex-end; }
34
+ .ds-items-stretch { align-items: stretch; }
35
+ .ds-items-baseline { align-items: baseline; }
36
+
37
+ .ds-justify-start { justify-content: flex-start; }
38
+ .ds-justify-center { justify-content: center; }
39
+ .ds-justify-end { justify-content: flex-end; }
40
+ .ds-justify-between { justify-content: space-between; }
41
+ .ds-justify-around { justify-content: space-around; }
42
+ .ds-justify-evenly { justify-content: space-evenly; }
43
+
44
+ .ds-self-start { align-self: flex-start; }
45
+ .ds-self-center { align-self: center; }
46
+ .ds-self-end { align-self: flex-end; }
47
+
48
+ /* --- Grid --- */
49
+ .ds-grid {
50
+ display: grid;
51
+ gap: var(--ds-space-6);
52
+ }
53
+
54
+ .ds-grid-cols-1 { grid-template-columns: repeat(1, 1fr); }
55
+ .ds-grid-cols-2 { grid-template-columns: repeat(2, 1fr); }
56
+ .ds-grid-cols-3 { grid-template-columns: repeat(3, 1fr); }
57
+ .ds-grid-cols-4 { grid-template-columns: repeat(4, 1fr); }
58
+
59
+ /* --- Column Span --- */
60
+ .ds-col-span-1 { grid-column: span 1 / span 1; }
61
+ .ds-col-span-2 { grid-column: span 2 / span 2; }
62
+ .ds-col-span-3 { grid-column: span 3 / span 3; }
63
+ .ds-col-span-4 { grid-column: span 4 / span 4; }
64
+ .ds-col-span-full { grid-column: 1 / -1; }
65
+
66
+ @media (min-width: 640px) {
67
+ .ds-sm\:grid-cols-2 { grid-template-columns: repeat(2, 1fr); }
68
+ .ds-sm\:grid-cols-3 { grid-template-columns: repeat(3, 1fr); }
69
+ }
70
+
71
+ @media (min-width: 768px) {
72
+ .ds-md\:grid-cols-2 { grid-template-columns: repeat(2, 1fr); }
73
+ .ds-md\:grid-cols-3 { grid-template-columns: repeat(3, 1fr); }
74
+ .ds-md\:grid-cols-4 { grid-template-columns: repeat(4, 1fr); }
75
+ .ds-md\:col-span-1 { grid-column: span 1 / span 1; }
76
+ .ds-md\:col-span-2 { grid-column: span 2 / span 2; }
77
+ .ds-md\:col-span-3 { grid-column: span 3 / span 3; }
78
+ .ds-md\:flex-row { flex-direction: row; }
79
+ }
80
+
81
+ @media (min-width: 1024px) /* --ds-breakpoint-lg */ {
82
+ .ds-lg\:grid-cols-2 { grid-template-columns: repeat(2, 1fr); }
83
+ .ds-lg\:grid-cols-3 { grid-template-columns: repeat(3, 1fr); }
84
+ .ds-lg\:grid-cols-4 { grid-template-columns: repeat(4, 1fr); }
85
+ .ds-lg\:col-span-1 { grid-column: span 1 / span 1; }
86
+ .ds-lg\:col-span-2 { grid-column: span 2 / span 2; }
87
+ .ds-lg\:col-span-3 { grid-column: span 3 / span 3; }
88
+ }
89
+
90
+ /* --- Gap --- */
91
+ .ds-gap-0 { gap: var(--ds-space-0); }
92
+ .ds-gap-1 { gap: var(--ds-space-1); }
93
+ .ds-gap-2 { gap: var(--ds-space-2); }
94
+ .ds-gap-3 { gap: var(--ds-space-3); }
95
+ .ds-gap-4 { gap: var(--ds-space-4); }
96
+ .ds-gap-5 { gap: var(--ds-space-5); }
97
+ .ds-gap-6 { gap: var(--ds-space-6); }
98
+ .ds-gap-8 { gap: var(--ds-space-8); }
99
+ .ds-gap-10 { gap: var(--ds-space-10); }
100
+ .ds-gap-12 { gap: var(--ds-space-12); }
101
+ .ds-gap-16 { gap: var(--ds-space-16); }
102
+ .ds-gap-20 { gap: var(--ds-space-20); }
103
+
104
+ /* --- Display --- */
105
+ .ds-block { display: block; }
106
+ .ds-inline-block { display: inline-block; }
107
+ .ds-inline { display: inline; }
108
+ .ds-hidden { display: none; }
109
+
110
+ @media (min-width: 768px) {
111
+ .ds-md\:hidden { display: none; }
112
+ .ds-md\:block { display: block; }
113
+ .ds-md\:flex { display: flex; }
114
+ }
115
+
116
+ /* --- Position --- */
117
+ .ds-relative { position: relative; }
118
+ .ds-absolute { position: absolute; }
119
+ .ds-fixed { position: fixed; }
120
+ .ds-sticky { position: sticky; inset-block-start: 0; }
121
+
122
+ /* --- Overflow --- */
123
+ .ds-overflow-hidden { overflow: hidden; }
124
+ .ds-overflow-auto { overflow: auto; }
125
+ .ds-overflow-x-auto { overflow-x: auto; }
126
+
127
+ /* --- Width/Height --- */
128
+ .ds-w-full { width: 100%; }
129
+ .ds-h-full { height: 100%; }
130
+ .ds-h-screen { height: 100dvh; }
131
+ .ds-min-h-screen { min-height: 100dvh; }
132
+
133
+ /* --- Stack (vertical spacing) ---
134
+ :where() lowers specificity so ds-mt-* can override individual children. */
135
+ :where(.ds-stack) > * + * {
136
+ margin-block-start: var(--ds-space-4);
137
+ }
138
+
139
+ :where(.ds-stack--sm) > * + * { margin-block-start: var(--ds-space-2); }
140
+ :where(.ds-stack--lg) > * + * { margin-block-start: var(--ds-space-8); }
141
+ :where(.ds-stack--xl) > * + * { margin-block-start: var(--ds-space-12); }
142
+ :where(.ds-stack--2xl) > * + * { margin-block-start: var(--ds-space-16); }
143
+ :where(.ds-stack--3xl) > * + * { margin-block-start: var(--ds-space-24); }
144
+
145
+ /* --- Center content --- */
146
+ .ds-center {
147
+ display: flex;
148
+ align-items: center;
149
+ justify-content: center;
150
+ }
151
+
152
+ /* --- Fixed Sizing --- */
153
+ .ds-w-0\.5 { width: var(--ds-space-0-5); }
154
+ .ds-w-2\.5 { width: var(--ds-space-2-5); }
155
+ .ds-w-3 { width: var(--ds-space-3); }
156
+ .ds-w-4 { width: var(--ds-space-4); }
157
+ .ds-w-5 { width: var(--ds-space-5); }
158
+ .ds-w-8 { width: var(--ds-space-8); }
159
+ .ds-w-9 { width: 2.25rem; }
160
+ .ds-w-10 { width: var(--ds-space-10); }
161
+
162
+ .ds-h-2\.5 { height: var(--ds-space-2-5); }
163
+ .ds-h-3 { height: var(--ds-space-3); }
164
+ .ds-h-4 { height: var(--ds-space-4); }
165
+ .ds-h-5 { height: var(--ds-space-5); }
166
+ .ds-h-8 { height: var(--ds-space-8); }
167
+ .ds-h-9 { height: 2.25rem; }
168
+ .ds-h-10 { height: var(--ds-space-10); }
169
+ .ds-h-11 { height: 2.75rem; }
170
+ .ds-h-16 { height: var(--ds-space-16); }
171
+
172
+ .ds-min-h-svh { min-height: 100svh; }
173
+
174
+ /* --- Max Width --- */
175
+ .ds-max-w-xs { max-width: 20rem; }
176
+ .ds-max-w-sm { max-width: 24rem; }
177
+ .ds-max-w-md { max-width: 28rem; }
178
+ .ds-max-w-lg { max-width: 32rem; }
179
+ .ds-max-w-xl { max-width: 36rem; }
180
+ .ds-max-w-2xl { max-width: 42rem; }
181
+ .ds-max-w-3xl { max-width: 48rem; }
182
+ .ds-max-w-none { max-width: none; }
183
+
184
+ /* --- Min Width --- */
185
+ .ds-min-w-0 { min-width: 0; }
186
+
187
+ /* --- Z-Index --- */
188
+ .ds-z-0 { z-index: var(--ds-z-base); }
189
+ .ds-z-10 { z-index: 10; }
190
+ .ds-z-40 { z-index: 40; }
191
+ .ds-z-50 { z-index: var(--ds-z-dropdown); }
192
+ .ds-z-60 { z-index: var(--ds-z-sticky); }
193
+
194
+ /* --- Inset / Position Values --- */
195
+ .ds-inset-0 { inset: 0; }
196
+ .ds-inset-x-0 { inset-inline-start: 0; inset-inline-end: 0; }
197
+ .ds-inset-y-0 { inset-block-start: 0; inset-block-end: 0; }
198
+ .ds-top-0 { inset-block-start: 0; }
199
+ .ds-top-full { inset-block-start: 100%; }
200
+ .ds-right-0 { inset-inline-end: 0; }
201
+ .ds-bottom-0 { inset-block-end: 0; }
202
+ .ds-bottom-full { inset-block-end: 100%; }
203
+ .ds-left-0 { inset-inline-start: 0; }
204
+ .ds-top-2 { inset-block-start: var(--ds-space-2); }
205
+ .ds-right-2 { inset-inline-end: var(--ds-space-2); }
206
+ .ds-left-2 { inset-inline-start: var(--ds-space-2); }
207
+ .ds-top-3 { inset-block-start: var(--ds-space-3); }
208
+ .ds-right-3 { inset-inline-end: var(--ds-space-3); }
209
+ .ds-left-3 { inset-inline-start: var(--ds-space-3); }
210
+ .ds-top-1\/2 { inset-block-start: 50%; }
211
+ .ds-left-1\/2 { inset-inline-start: 50%; }
212
+
213
+ /* --- Object Fit --- */
214
+ .ds-object-cover { object-fit: cover; }
215
+ .ds-object-contain { object-fit: contain; }
216
+
217
+ /* --- Overflow (extended) --- */
218
+ .ds-overflow-y-auto { overflow-y: auto; }
219
+
220
+ /* --- Responsive: Display --- */
221
+ @media (min-width: 640px) {
222
+ .ds-sm\:hidden { display: none; }
223
+ .ds-sm\:block { display: block; }
224
+ .ds-sm\:flex { display: flex; }
225
+ .ds-sm\:flex-row { flex-direction: row; }
226
+ .ds-sm\:table-cell { display: table-cell; }
227
+ }
228
+
229
+ @media (min-width: 1024px) /* --ds-breakpoint-lg */ {
230
+ .ds-lg\:hidden { display: none; }
231
+ .ds-lg\:block { display: block; }
232
+ .ds-lg\:flex { display: flex; }
233
+ }
234
+
235
+ /* --- Responsive: Grid (extended) --- */
236
+ @media (min-width: 640px) {
237
+ .ds-sm\:grid-cols-4 { grid-template-columns: repeat(4, 1fr); }
238
+ }
239
+
240
+ @media (min-width: 1024px) /* --ds-breakpoint-lg */ {
241
+ .ds-lg\:grid-cols-2 { grid-template-columns: repeat(2, 1fr); }
242
+ .ds-lg\:grid-cols-5 { grid-template-columns: repeat(5, 1fr); }
243
+ }
244
+
245
+ @media (min-width: 1280px) {
246
+ .ds-xl\:grid-cols-6 { grid-template-columns: repeat(6, 1fr); }
247
+ }
248
+
249
+ /* --- Responsive: Flex (extended) --- */
250
+ @media (min-width: 640px) {
251
+ .ds-sm\:flex-none { flex: none; }
252
+ .ds-sm\:items-center { align-items: center; }
253
+ .ds-sm\:justify-between { justify-content: space-between; }
254
+ .ds-sm\:gap-4 { gap: var(--ds-space-4); }
255
+ .ds-sm\:gap-8 { gap: var(--ds-space-8); }
256
+ .ds-sm\:inline { display: inline; }
257
+ }
258
+
259
+ @media (min-width: 768px) {
260
+ .ds-md\:grid-cols-5 { grid-template-columns: repeat(5, 1fr); }
261
+ }
262
+
263
+ @media (min-width: 1024px) /* --ds-breakpoint-lg */ {
264
+ .ds-lg\:flex-row { flex-direction: row; }
265
+ .ds-lg\:gap-4 { gap: var(--ds-space-4); }
266
+ .ds-lg\:gap-6 { gap: var(--ds-space-6); }
267
+ .ds-lg\:gap-8 { gap: var(--ds-space-8); }
268
+ }
269
+
270
+ /* --- Aspect Ratio --- */
271
+ .ds-aspect-square { aspect-ratio: 1; }
272
+ .ds-aspect-video { aspect-ratio: 16/9; }
273
+ .ds-aspect-card { aspect-ratio: 16/10; }
@@ -0,0 +1,85 @@
1
+ /* ==========================================================================
2
+ Utilities: Sizing
3
+ Width, height, min/max constraints.
4
+ Extends the base sizing in layout.css with the full spacing scale.
5
+ ========================================================================== */
6
+
7
+ /* --- Width (values not already in layout.css) --- */
8
+ .ds-w-0 { width: var(--ds-space-0); }
9
+ .ds-w-1 { width: var(--ds-space-1); }
10
+ .ds-w-1\.5 { width: var(--ds-space-1-5); }
11
+ .ds-w-2 { width: var(--ds-space-2); }
12
+ .ds-w-3\.5 { width: 0.875rem; }
13
+ .ds-w-6 { width: var(--ds-space-6); }
14
+ .ds-w-12 { width: var(--ds-space-12); }
15
+ .ds-w-16 { width: var(--ds-space-16); }
16
+ .ds-w-20 { width: var(--ds-space-20); }
17
+ .ds-w-24 { width: var(--ds-space-24); }
18
+ .ds-w-28 { width: 7rem; }
19
+ .ds-w-32 { width: var(--ds-space-32); }
20
+ .ds-w-48 { width: 12rem; }
21
+ .ds-w-56 { width: 14rem; }
22
+ .ds-w-64 { width: 16rem; }
23
+ .ds-w-80 { width: 20rem; }
24
+ .ds-w-96 { width: 24rem; }
25
+ .ds-w-auto { width: auto; }
26
+ .ds-w-screen { width: 100vw; }
27
+
28
+ /* --- Height (values not already in layout.css) --- */
29
+ .ds-h-0 { height: var(--ds-space-0); }
30
+ .ds-h-0\.5 { height: var(--ds-space-0-5); }
31
+ .ds-h-1 { height: var(--ds-space-1); }
32
+ .ds-h-1\.5 { height: var(--ds-space-1-5); }
33
+ .ds-h-2 { height: var(--ds-space-2); }
34
+ .ds-h-3\.5 { height: 0.875rem; }
35
+ .ds-h-6 { height: var(--ds-space-6); }
36
+ .ds-h-12 { height: var(--ds-space-12); }
37
+ .ds-h-14 { height: 3.5rem; }
38
+ .ds-h-20 { height: var(--ds-space-20); }
39
+ .ds-h-24 { height: var(--ds-space-24); }
40
+ .ds-h-28 { height: 7rem; }
41
+ .ds-h-32 { height: var(--ds-space-32); }
42
+ .ds-h-48 { height: 12rem; }
43
+ .ds-h-64 { height: 16rem; }
44
+ .ds-h-96 { height: 24rem; }
45
+ .ds-h-auto { height: auto; }
46
+ .ds-h-px { height: 1px; }
47
+
48
+ /* --- Max Width (extended) --- */
49
+ .ds-max-w-4xl { max-width: 56rem; }
50
+ .ds-max-w-5xl { max-width: 64rem; }
51
+ .ds-max-w-6xl { max-width: 72rem; }
52
+ .ds-max-w-7xl { max-width: 80rem; }
53
+ .ds-max-w-full { max-width: 100%; }
54
+
55
+ /* --- Max Height --- */
56
+ .ds-max-h-64 { max-height: 16rem; }
57
+ .ds-max-h-80 { max-height: 20rem; }
58
+ .ds-max-h-96 { max-height: 24rem; }
59
+ .ds-max-h-screen { max-height: 100dvh; }
60
+
61
+ /* --- Responsive: Sizing --- */
62
+ @media (min-width: 640px) {
63
+ .ds-sm\:w-12 { width: var(--ds-space-12); }
64
+ .ds-sm\:w-16 { width: var(--ds-space-16); }
65
+ .ds-sm\:w-32 { width: var(--ds-space-32); }
66
+ .ds-sm\:w-64 { width: 16rem; }
67
+ .ds-sm\:w-96 { width: 24rem; }
68
+ .ds-sm\:w-auto { width: auto; }
69
+ .ds-sm\:h-12 { height: var(--ds-space-12); }
70
+ .ds-sm\:h-32 { height: var(--ds-space-32); }
71
+ }
72
+
73
+ @media (min-width: 768px) {
74
+ .ds-md\:w-auto { width: auto; }
75
+ }
76
+
77
+ /* --- Decimal sizing --- */
78
+ .ds-w-0\.5 { width: 0.125rem; }
79
+ .ds-w-1\.5 { width: 0.375rem; }
80
+ .ds-w-2\.5 { width: 0.625rem; }
81
+ .ds-w-3\.5 { width: 0.875rem; }
82
+ .ds-h-0\.5 { height: 0.125rem; }
83
+ .ds-h-1\.5 { height: 0.375rem; }
84
+ .ds-h-2\.5 { height: 0.625rem; }
85
+ .ds-h-3\.5 { height: 0.875rem; }
@@ -0,0 +1,204 @@
1
+ /* ==========================================================================
2
+ Utilities: Spacing (margin & padding)
3
+ Pattern: ds-{m|p}{side}-{size}
4
+ ========================================================================== */
5
+
6
+ /* --- Padding --- */
7
+ .ds-p-0 { padding: var(--ds-space-0); }
8
+ .ds-p-1 { padding: var(--ds-space-1); }
9
+ .ds-p-2 { padding: var(--ds-space-2); }
10
+ .ds-p-3 { padding: var(--ds-space-3); }
11
+ .ds-p-4 { padding: var(--ds-space-4); }
12
+ .ds-p-5 { padding: var(--ds-space-5); }
13
+ .ds-p-6 { padding: var(--ds-space-6); }
14
+ .ds-p-8 { padding: var(--ds-space-8); }
15
+ .ds-p-10 { padding: var(--ds-space-10); }
16
+ .ds-p-12 { padding: var(--ds-space-12); }
17
+
18
+ .ds-px-0 { padding-inline: var(--ds-space-0); }
19
+ .ds-px-2 { padding-inline: var(--ds-space-2); }
20
+ .ds-px-3 { padding-inline: var(--ds-space-3); }
21
+ .ds-px-4 { padding-inline: var(--ds-space-4); }
22
+ .ds-px-5 { padding-inline: var(--ds-space-5); }
23
+ .ds-px-6 { padding-inline: var(--ds-space-6); }
24
+ .ds-px-8 { padding-inline: var(--ds-space-8); }
25
+
26
+ .ds-py-0 { padding-block: var(--ds-space-0); }
27
+ .ds-py-2 { padding-block: var(--ds-space-2); }
28
+ .ds-py-3 { padding-block: var(--ds-space-3); }
29
+ .ds-py-4 { padding-block: var(--ds-space-4); }
30
+ .ds-py-5 { padding-block: var(--ds-space-5); }
31
+ .ds-py-6 { padding-block: var(--ds-space-6); }
32
+ .ds-py-8 { padding-block: var(--ds-space-8); }
33
+ .ds-py-10 { padding-block: var(--ds-space-10); }
34
+ .ds-py-12 { padding-block: var(--ds-space-12); }
35
+ .ds-py-16 { padding-block: var(--ds-space-16); }
36
+ .ds-py-20 { padding-block: var(--ds-space-20); }
37
+ .ds-py-24 { padding-block: var(--ds-space-24); }
38
+
39
+ .ds-pt-2 { padding-block-start: var(--ds-space-2); }
40
+ .ds-pt-4 { padding-block-start: var(--ds-space-4); }
41
+ .ds-pt-6 { padding-block-start: var(--ds-space-6); }
42
+ .ds-pt-8 { padding-block-start: var(--ds-space-8); }
43
+ .ds-pt-12 { padding-block-start: var(--ds-space-12); }
44
+ .ds-pt-16 { padding-block-start: var(--ds-space-16); }
45
+
46
+ .ds-pb-4 { padding-block-end: var(--ds-space-4); }
47
+ .ds-pb-8 { padding-block-end: var(--ds-space-8); }
48
+
49
+ /* --- Margin --- */
50
+ .ds-m-0 { margin: var(--ds-space-0); }
51
+ .ds-m-auto { margin: auto; }
52
+
53
+ .ds-mx-auto { margin-inline: auto; }
54
+ .ds-mx-2 { margin-inline: var(--ds-space-2); }
55
+ .ds-mx-4 { margin-inline: var(--ds-space-4); }
56
+
57
+ .ds-my-0 { margin-block: var(--ds-space-0); }
58
+ .ds-my-2 { margin-block: var(--ds-space-2); }
59
+ .ds-my-4 { margin-block: var(--ds-space-4); }
60
+ .ds-my-6 { margin-block: var(--ds-space-6); }
61
+ .ds-my-8 { margin-block: var(--ds-space-8); }
62
+
63
+ .ds-mt-0 { margin-block-start: var(--ds-space-0); }
64
+ .ds-mt-1 { margin-block-start: var(--ds-space-1); }
65
+ .ds-mt-2 { margin-block-start: var(--ds-space-2); }
66
+ .ds-mt-4 { margin-block-start: var(--ds-space-4); }
67
+ .ds-mt-6 { margin-block-start: var(--ds-space-6); }
68
+ .ds-mt-8 { margin-block-start: var(--ds-space-8); }
69
+
70
+ .ds-mb-0 { margin-block-end: var(--ds-space-0); }
71
+ .ds-mb-1 { margin-block-end: var(--ds-space-1); }
72
+ .ds-mb-2 { margin-block-end: var(--ds-space-2); }
73
+ .ds-mb-4 { margin-block-end: var(--ds-space-4); }
74
+ .ds-mb-6 { margin-block-end: var(--ds-space-6); }
75
+ .ds-mb-8 { margin-block-end: var(--ds-space-8); }
76
+
77
+ .ds-mt-auto { margin-block-start: auto; }
78
+ .ds-mb-auto { margin-block-end: auto; }
79
+ .ds-ml-auto { margin-inline-start: auto; }
80
+ .ds-mr-auto { margin-inline-end: auto; }
81
+ .ds-ml-2 { margin-inline-start: var(--ds-space-2); }
82
+ .ds-ml-4 { margin-inline-start: var(--ds-space-4); }
83
+ .ds-mr-2 { margin-inline-end: var(--ds-space-2); }
84
+ .ds-mr-4 { margin-inline-end: var(--ds-space-4); }
85
+
86
+ .ds-mt-0\.5 { margin-block-start: var(--ds-space-0-5); }
87
+ .ds-mt-3 { margin-block-start: var(--ds-space-3); }
88
+ .ds-mt-10 { margin-block-start: var(--ds-space-10); }
89
+ .ds-mt-12 { margin-block-start: var(--ds-space-12); }
90
+ .ds-mt-16 { margin-block-start: var(--ds-space-16); }
91
+ .ds-mb-0\.5 { margin-block-end: var(--ds-space-0-5); }
92
+ .ds-mb-3 { margin-block-end: var(--ds-space-3); }
93
+ .ds-mb-10 { margin-block-end: var(--ds-space-10); }
94
+ .ds-mb-12 { margin-block-end: var(--ds-space-12); }
95
+ .ds-mb-16 { margin-block-end: var(--ds-space-16); }
96
+ .ds-mb-20 { margin-block-end: var(--ds-space-20); }
97
+
98
+ /* --- Padding (granular) --- */
99
+ .ds-p-0\.5 { padding: var(--ds-space-0-5); }
100
+ .ds-p-1\.5 { padding: var(--ds-space-1-5); }
101
+
102
+ .ds-px-1 { padding-inline: var(--ds-space-1); }
103
+ .ds-px-1\.5 { padding-inline: var(--ds-space-1-5); }
104
+
105
+ .ds-py-0\.5 { padding-block: var(--ds-space-0-5); }
106
+ .ds-py-1 { padding-block: var(--ds-space-1); }
107
+ .ds-py-1\.5 { padding-block: var(--ds-space-1-5); }
108
+
109
+ .ds-pb-2 { padding-block-end: var(--ds-space-2); }
110
+ .ds-pb-6 { padding-block-end: var(--ds-space-6); }
111
+
112
+ .ds-pl-2 { padding-inline-start: var(--ds-space-2); }
113
+ .ds-pl-3 { padding-inline-start: var(--ds-space-3); }
114
+ .ds-pl-4 { padding-inline-start: var(--ds-space-4); }
115
+ .ds-pr-2 { padding-inline-end: var(--ds-space-2); }
116
+ .ds-pr-3 { padding-inline-end: var(--ds-space-3); }
117
+ .ds-pr-4 { padding-inline-end: var(--ds-space-4); }
118
+ .ds-pr-7 { padding-inline-end: 1.75rem; }
119
+ .ds-pr-10 { padding-inline-end: var(--ds-space-10); }
120
+
121
+ /* --- Gap (fractional) --- */
122
+ .ds-gap-0\.5 { gap: var(--ds-space-0-5); }
123
+ .ds-gap-1\.5 { gap: var(--ds-space-1-5); }
124
+
125
+ /* --- Space-Y (owl selector) --- */
126
+ .ds-space-y-1 > * + * { margin-block-start: var(--ds-space-1); }
127
+ .ds-space-y-2 > * + * { margin-block-start: var(--ds-space-2); }
128
+ .ds-space-y-3 > * + * { margin-block-start: var(--ds-space-3); }
129
+ .ds-space-y-4 > * + * { margin-block-start: var(--ds-space-4); }
130
+ .ds-space-y-6 > * + * { margin-block-start: var(--ds-space-6); }
131
+ .ds-space-y-8 > * + * { margin-block-start: var(--ds-space-8); }
132
+
133
+ /* --- Space-Y (fractional) --- */
134
+ .ds-space-y-1\.5 > * + * { margin-block-start: var(--ds-space-1-5); }
135
+
136
+ /* --- Responsive: Padding --- */
137
+ @media (min-width: 640px) {
138
+ .ds-sm\:p-6 { padding: var(--ds-space-6); }
139
+ .ds-sm\:px-0 { padding-inline: var(--ds-space-0); }
140
+ .ds-sm\:px-3 { padding-inline: var(--ds-space-3); }
141
+ .ds-sm\:px-4 { padding-inline: var(--ds-space-4); }
142
+ .ds-sm\:px-6 { padding-inline: var(--ds-space-6); }
143
+ .ds-sm\:py-3 { padding-block: var(--ds-space-3); }
144
+ }
145
+
146
+ @media (min-width: 768px) {
147
+ .ds-md\:px-4 { padding-inline: var(--ds-space-4); }
148
+ .ds-md\:px-6 { padding-inline: var(--ds-space-6); }
149
+ .ds-md\:px-8 { padding-inline: var(--ds-space-8); }
150
+ .ds-md\:py-8 { padding-block: var(--ds-space-8); }
151
+ .ds-md\:py-12 { padding-block: var(--ds-space-12); }
152
+ .ds-md\:py-16 { padding-block: var(--ds-space-16); }
153
+ }
154
+
155
+ @media (min-width: 1024px) /* --ds-breakpoint-lg */ {
156
+ .ds-lg\:px-6 { padding-inline: var(--ds-space-6); }
157
+ .ds-lg\:px-8 { padding-inline: var(--ds-space-8); }
158
+ .ds-lg\:py-16 { padding-block: var(--ds-space-16); }
159
+ .ds-lg\:py-20 { padding-block: var(--ds-space-20); }
160
+ .ds-lg\:py-24 { padding-block: var(--ds-space-24); }
161
+ }
162
+
163
+ /* --- Space-X (horizontal gap between children) --- */
164
+ .ds-space-x-1 > * + * { margin-inline-start: var(--ds-space-1); }
165
+ .ds-space-x-2 > * + * { margin-inline-start: var(--ds-space-2); }
166
+ .ds-space-x-3 > * + * { margin-inline-start: var(--ds-space-3); }
167
+ .ds-space-x-4 > * + * { margin-inline-start: var(--ds-space-4); }
168
+
169
+ /* --- Decimal spacing (0.5 = 0.125rem, 1.5 = 0.375rem, 2.5 = 0.625rem) --- */
170
+ .ds-gap-0\.5 { gap: 0.125rem; }
171
+ .ds-gap-1\.5 { gap: 0.375rem; }
172
+ .ds-gap-2\.5 { gap: 0.625rem; }
173
+ .ds-p-0\.5 { padding: 0.125rem; }
174
+ .ds-p-1\.5 { padding: 0.375rem; }
175
+ .ds-px-0\.5 { padding-inline: 0.125rem; }
176
+ .ds-px-1\.5 { padding-inline: 0.375rem; }
177
+ .ds-py-0\.5 { padding-inline: 0.125rem; }
178
+ .ds-py-1\.5 { padding-block: 0.375rem; }
179
+ .ds-mt-0\.5 { margin-block-start: 0.125rem; }
180
+ .ds-mb-0\.5 { margin-block-end: 0.125rem; }
181
+ .ds-space-y-0\.5 > * + * { margin-block-start: 0.125rem; }
182
+ .ds-space-y-1\.5 > * + * { margin-block-start: 0.375rem; }
183
+ .ds-space-x-0\.5 > * + * { margin-inline-start: 0.125rem; }
184
+ .ds-space-x-1\.5 > * + * { margin-inline-start: 0.375rem; }
185
+
186
+ /* --- Responsive: md (768px) — all-sides padding --- */
187
+ @media (min-width: 768px) {
188
+ .ds-md\:p-2 { padding: var(--ds-space-2); }
189
+ .ds-md\:p-3 { padding: var(--ds-space-3); }
190
+ .ds-md\:p-4 { padding: var(--ds-space-4); }
191
+ .ds-md\:p-5 { padding: var(--ds-space-5); }
192
+ .ds-md\:p-6 { padding: var(--ds-space-6); }
193
+ .ds-md\:p-8 { padding: var(--ds-space-8); }
194
+ .ds-md\:p-10 { padding: var(--ds-space-10); }
195
+ .ds-md\:p-12 { padding: var(--ds-space-12); }
196
+ }
197
+
198
+ /* --- Responsive: lg (1024px) — all-sides padding --- */
199
+ @media (min-width: 1024px) {
200
+ .ds-lg\:p-6 { padding: var(--ds-space-6); }
201
+ .ds-lg\:p-8 { padding: var(--ds-space-8); }
202
+ .ds-lg\:p-10 { padding: var(--ds-space-10); }
203
+ .ds-lg\:p-12 { padding: var(--ds-space-12); }
204
+ }