@imdz/react 0.0.0-stage → 0.2.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 (106) hide show
  1. package/LICENSE +21 -0
  2. package/OFL.txt +189 -0
  3. package/README.md +85 -2
  4. package/dist/accordion.d.ts +13 -0
  5. package/dist/accordion.js +12 -0
  6. package/dist/alert.d.ts +7 -0
  7. package/dist/alert.js +11 -0
  8. package/dist/avatar.d.ts +8 -0
  9. package/dist/avatar.js +21 -0
  10. package/dist/badge.d.ts +6 -0
  11. package/dist/badge.js +11 -0
  12. package/dist/button.d.ts +8 -0
  13. package/dist/button.js +11 -0
  14. package/dist/card.d.ts +6 -0
  15. package/dist/card.js +11 -0
  16. package/dist/checkbox.d.ts +3 -0
  17. package/dist/checkbox.js +12 -0
  18. package/dist/cx.d.ts +1 -0
  19. package/dist/cx.js +3 -0
  20. package/dist/dark.css +13 -0
  21. package/dist/dialog.d.ts +12 -0
  22. package/dist/dialog.js +24 -0
  23. package/dist/fonts/inter-latin-400-normal.woff2 +0 -0
  24. package/dist/fonts/inter-latin-600-normal.woff2 +0 -0
  25. package/dist/fonts/jetbrains-mono-latin-600-normal.woff2 +0 -0
  26. package/dist/fonts.css +24 -0
  27. package/dist/index.d.ts +17 -0
  28. package/dist/index.js +17 -0
  29. package/dist/input.d.ts +7 -0
  30. package/dist/input.js +17 -0
  31. package/dist/progress.d.ts +8 -0
  32. package/dist/progress.js +13 -0
  33. package/dist/select.d.ts +7 -0
  34. package/dist/select.js +19 -0
  35. package/dist/skeleton.d.ts +7 -0
  36. package/dist/skeleton.js +12 -0
  37. package/dist/spinner.d.ts +7 -0
  38. package/dist/spinner.js +11 -0
  39. package/dist/style.d.ts +5 -0
  40. package/dist/style.js +26 -0
  41. package/dist/styles/accordion.d.ts +1 -0
  42. package/dist/styles/accordion.js +1 -0
  43. package/dist/styles/alert.d.ts +1 -0
  44. package/dist/styles/alert.js +1 -0
  45. package/dist/styles/avatar.d.ts +1 -0
  46. package/dist/styles/avatar.js +1 -0
  47. package/dist/styles/badge.d.ts +1 -0
  48. package/dist/styles/badge.js +1 -0
  49. package/dist/styles/button.d.ts +1 -0
  50. package/dist/styles/button.js +1 -0
  51. package/dist/styles/card.d.ts +1 -0
  52. package/dist/styles/card.js +1 -0
  53. package/dist/styles/checkbox.d.ts +1 -0
  54. package/dist/styles/checkbox.js +1 -0
  55. package/dist/styles/dialog.d.ts +1 -0
  56. package/dist/styles/dialog.js +1 -0
  57. package/dist/styles/field.d.ts +1 -0
  58. package/dist/styles/field.js +1 -0
  59. package/dist/styles/fonts.d.ts +1 -0
  60. package/dist/styles/fonts.js +1 -0
  61. package/dist/styles/progress.d.ts +1 -0
  62. package/dist/styles/progress.js +1 -0
  63. package/dist/styles/select.d.ts +1 -0
  64. package/dist/styles/select.js +1 -0
  65. package/dist/styles/skeleton.d.ts +1 -0
  66. package/dist/styles/skeleton.js +1 -0
  67. package/dist/styles/spinner.d.ts +1 -0
  68. package/dist/styles/spinner.js +1 -0
  69. package/dist/styles/switch.d.ts +1 -0
  70. package/dist/styles/switch.js +1 -0
  71. package/dist/styles/tabs.d.ts +1 -0
  72. package/dist/styles/tabs.js +1 -0
  73. package/dist/styles/textarea.d.ts +1 -0
  74. package/dist/styles/textarea.js +1 -0
  75. package/dist/styles/tooltip.d.ts +1 -0
  76. package/dist/styles/tooltip.js +1 -0
  77. package/dist/styles.css +872 -0
  78. package/dist/switch.d.ts +3 -0
  79. package/dist/switch.js +12 -0
  80. package/dist/tabs.d.ts +12 -0
  81. package/dist/tabs.js +36 -0
  82. package/dist/textarea.d.ts +7 -0
  83. package/dist/textarea.js +18 -0
  84. package/dist/tokens.css +49 -0
  85. package/dist/tooltip.d.ts +7 -0
  86. package/dist/tooltip.js +12 -0
  87. package/package.json +54 -4
  88. package/src/accordion.tsx +35 -0
  89. package/src/alert.tsx +33 -0
  90. package/src/avatar.tsx +37 -0
  91. package/src/badge.tsx +31 -0
  92. package/src/button.tsx +32 -0
  93. package/src/card.tsx +24 -0
  94. package/src/checkbox.tsx +18 -0
  95. package/src/cx.ts +3 -0
  96. package/src/dialog.tsx +61 -0
  97. package/src/index.ts +26 -0
  98. package/src/input.tsx +50 -0
  99. package/src/progress.tsx +45 -0
  100. package/src/select.tsx +55 -0
  101. package/src/skeleton.tsx +20 -0
  102. package/src/spinner.tsx +23 -0
  103. package/src/switch.tsx +23 -0
  104. package/src/tabs.tsx +91 -0
  105. package/src/textarea.tsx +53 -0
  106. package/src/tooltip.tsx +21 -0
@@ -0,0 +1,872 @@
1
+ @font-face {
2
+ font-family: "imdz Inter";
3
+ font-style: normal;
4
+ font-weight: 400;
5
+ font-display: swap;
6
+ src: url(./fonts/inter-latin-400-normal.woff2) format("woff2");
7
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
8
+ }
9
+ @font-face {
10
+ font-family: "imdz Inter";
11
+ font-style: normal;
12
+ font-weight: 600;
13
+ font-display: swap;
14
+ src: url(./fonts/inter-latin-600-normal.woff2) format("woff2");
15
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
16
+ }
17
+ @font-face {
18
+ font-family: "imdz JetBrains Mono";
19
+ font-style: normal;
20
+ font-weight: 600;
21
+ font-display: swap;
22
+ src: url(./fonts/jetbrains-mono-latin-600-normal.woff2) format("woff2");
23
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
24
+ }
25
+
26
+ .imdz-accordion {
27
+ border-top: 1px solid var(--imdz-border, #c4c4c4);
28
+ font-family: var(--imdz-font, "imdz Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif);
29
+ }
30
+
31
+ .imdz-accordion-item {
32
+ border-bottom: 1px solid var(--imdz-border, #c4c4c4);
33
+ }
34
+
35
+ .imdz-accordion-summary {
36
+ display: flex;
37
+ align-items: center;
38
+ justify-content: space-between;
39
+ gap: 1rem;
40
+ padding: 0.875rem 0;
41
+ color: var(--imdz-text, #000000);
42
+ font: 600 0.75rem/1.3 var(--imdz-font-mono, "imdz JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace);
43
+ letter-spacing: var(--imdz-tracking, 0.08em);
44
+ text-transform: uppercase;
45
+ list-style: none;
46
+ cursor: pointer;
47
+ }
48
+
49
+ .imdz-accordion-summary::-webkit-details-marker {
50
+ display: none;
51
+ }
52
+
53
+ .imdz-accordion-summary::after {
54
+ content: "+";
55
+ color: var(--imdz-muted, #5e5e5e);
56
+ font-size: 1rem;
57
+ line-height: 1;
58
+ }
59
+
60
+ .imdz-accordion-item[open] > .imdz-accordion-summary::after {
61
+ content: "\2212";
62
+ }
63
+
64
+ .imdz-accordion-summary:hover::after {
65
+ color: var(--imdz-text, #000000);
66
+ }
67
+
68
+ .imdz-accordion-summary:focus-visible {
69
+ outline: 2px solid var(--imdz-focus, var(--imdz-text, #000000));
70
+ outline-offset: 2px;
71
+ }
72
+
73
+ .imdz-accordion-content {
74
+ padding-bottom: 1rem;
75
+ color: var(--imdz-muted, #5e5e5e);
76
+ font-size: 0.875rem;
77
+ line-height: 1.5;
78
+ }
79
+
80
+ .imdz-alert {
81
+ --imdz-alert-color: var(--imdz-text, #000000);
82
+
83
+ display: grid;
84
+ gap: 0.375rem;
85
+ box-sizing: border-box;
86
+ padding: 0.875rem 1rem;
87
+ border: 1px solid color-mix(in srgb, var(--imdz-alert-color) 45%, transparent);
88
+ border-left: 3px solid var(--imdz-alert-color);
89
+ border-radius: var(--imdz-radius, 0px);
90
+ background: color-mix(in srgb, var(--imdz-alert-color) 6%, transparent);
91
+ color: var(--imdz-text, #000000);
92
+ font: 400 0.875rem/1.5 var(--imdz-font, "imdz Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif);
93
+ }
94
+
95
+ .imdz-alert-title {
96
+ margin: 0;
97
+ color: var(--imdz-alert-color);
98
+ font: 600 0.75rem/1.3 var(--imdz-font-mono, "imdz JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace);
99
+ letter-spacing: var(--imdz-tracking, 0.08em);
100
+ text-transform: uppercase;
101
+ }
102
+
103
+ .imdz-alert-success {
104
+ --imdz-alert-color: var(--imdz-success, #0f7a3d);
105
+ }
106
+
107
+ .imdz-alert-warning {
108
+ --imdz-alert-color: var(--imdz-warning, #8f5a00);
109
+ }
110
+
111
+ .imdz-alert-danger {
112
+ --imdz-alert-color: var(--imdz-danger, #c4001a);
113
+ }
114
+
115
+ .imdz-avatar {
116
+ display: inline-grid;
117
+ place-items: center;
118
+ box-sizing: border-box;
119
+ width: 2.5rem;
120
+ height: 2.5rem;
121
+ overflow: hidden;
122
+ border: 1px solid var(--imdz-border, #c4c4c4);
123
+ border-radius: var(--imdz-radius, 0px);
124
+ background: var(--imdz-surface, #f2f2f2);
125
+ color: var(--imdz-text, #000000);
126
+ font: 600 0.75rem/1 var(--imdz-font-mono, "imdz JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace);
127
+ letter-spacing: var(--imdz-tracking, 0.08em);
128
+ text-transform: uppercase;
129
+ }
130
+
131
+ /* Photos are turned black and white to keep the palette. */
132
+ .imdz-avatar img {
133
+ width: 100%;
134
+ height: 100%;
135
+ object-fit: cover;
136
+ filter: grayscale(1);
137
+ }
138
+
139
+ .imdz-avatar-lg {
140
+ width: 3.5rem;
141
+ height: 3.5rem;
142
+ font-size: 1rem;
143
+ }
144
+
145
+ .imdz-badge {
146
+ --imdz-badge-color: var(--imdz-muted, #5e5e5e);
147
+
148
+ display: inline-flex;
149
+ align-items: center;
150
+ gap: 0.375rem;
151
+ padding: 0.25rem 0.5rem;
152
+ border: 1px solid var(--imdz-badge-color);
153
+ border-radius: var(--imdz-radius, 0px);
154
+ color: var(--imdz-badge-color);
155
+ font: 600 0.6875rem/1 var(--imdz-font-mono, "imdz JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace);
156
+ letter-spacing: var(--imdz-tracking, 0.08em);
157
+ text-transform: uppercase;
158
+ white-space: nowrap;
159
+ }
160
+
161
+ .imdz-badge::before {
162
+ content: "";
163
+ width: 0.375rem;
164
+ height: 0.375rem;
165
+ background: currentColor;
166
+ }
167
+
168
+ .imdz-badge-primary {
169
+ --imdz-badge-color: var(--imdz-text, #000000);
170
+
171
+ background: var(--imdz-text, #000000);
172
+ color: var(--imdz-bg, #ffffff);
173
+ }
174
+
175
+ .imdz-badge-success {
176
+ --imdz-badge-color: var(--imdz-success, #0f7a3d);
177
+ }
178
+
179
+ .imdz-badge-warning {
180
+ --imdz-badge-color: var(--imdz-warning, #8f5a00);
181
+ }
182
+
183
+ .imdz-badge-danger {
184
+ --imdz-badge-color: var(--imdz-danger, #c4001a);
185
+ }
186
+
187
+ .imdz-button {
188
+ --imdz-button-color: var(--imdz-primary, var(--imdz-text, #000000));
189
+ --imdz-button-on: var(--imdz-on-primary, var(--imdz-bg, #ffffff));
190
+
191
+ display: inline-flex;
192
+ align-items: center;
193
+ justify-content: center;
194
+ gap: 0.5rem;
195
+ box-sizing: border-box;
196
+ height: 2.5rem;
197
+ padding: 0 1.125rem;
198
+ border: 1px solid var(--imdz-button-color);
199
+ border-radius: var(--imdz-radius, 0px);
200
+ background: var(--imdz-button-color);
201
+ color: var(--imdz-button-on);
202
+ font: 600 0.75rem/1 var(--imdz-font-mono, "imdz JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace);
203
+ letter-spacing: var(--imdz-tracking, 0.08em);
204
+ text-decoration: none;
205
+ text-transform: uppercase;
206
+ white-space: nowrap;
207
+ cursor: pointer;
208
+ transition: background-color 150ms, color 150ms, border-color 150ms,
209
+ box-shadow 150ms;
210
+ }
211
+
212
+ /* On hover it inverts: just the outline with a glow. */
213
+ .imdz-button:hover:not(:disabled, [aria-disabled="true"]) {
214
+ background: transparent;
215
+ color: var(--imdz-button-color);
216
+ box-shadow: 0 0 18px
217
+ color-mix(in srgb, var(--imdz-button-color) 40%, transparent);
218
+ }
219
+
220
+ .imdz-button:focus-visible {
221
+ outline: 2px solid var(--imdz-focus, var(--imdz-text, #000000));
222
+ outline-offset: 3px;
223
+ }
224
+
225
+ .imdz-button:disabled,
226
+ .imdz-button[aria-disabled="true"] {
227
+ opacity: 0.4;
228
+ cursor: not-allowed;
229
+ }
230
+
231
+ .imdz-button-secondary {
232
+ border-color: var(--imdz-border, #c4c4c4);
233
+ background: transparent;
234
+ color: var(--imdz-text, #000000);
235
+ }
236
+
237
+ .imdz-button-secondary:hover:not(:disabled, [aria-disabled="true"]) {
238
+ border-color: var(--imdz-text, #000000);
239
+ background: var(--imdz-text, #000000);
240
+ color: var(--imdz-bg, #ffffff);
241
+ box-shadow: none;
242
+ }
243
+
244
+ .imdz-button-ghost {
245
+ border-color: transparent;
246
+ background: transparent;
247
+ color: var(--imdz-text, #000000);
248
+ }
249
+
250
+ .imdz-button-ghost:hover:not(:disabled, [aria-disabled="true"]) {
251
+ border-color: var(--imdz-border, #c4c4c4);
252
+ background: var(--imdz-surface, #f2f2f2);
253
+ color: var(--imdz-text, #000000);
254
+ box-shadow: none;
255
+ }
256
+
257
+ .imdz-button-danger {
258
+ --imdz-button-color: var(--imdz-danger, #c4001a);
259
+ --imdz-button-on: var(--imdz-on-danger, #ffffff);
260
+ }
261
+
262
+ .imdz-button-sm {
263
+ height: 2rem;
264
+ padding: 0 0.75rem;
265
+ font-size: 0.6875rem;
266
+ }
267
+
268
+ .imdz-button-lg {
269
+ height: 3rem;
270
+ padding: 0 1.5rem;
271
+ font-size: 0.8125rem;
272
+ }
273
+
274
+ .imdz-card {
275
+ position: relative;
276
+ display: grid;
277
+ gap: 0.75rem;
278
+ box-sizing: border-box;
279
+ padding: 1.25rem;
280
+ border: 1px solid var(--imdz-border, #c4c4c4);
281
+ border-radius: var(--imdz-radius, 0px);
282
+ background: var(--imdz-surface, #f2f2f2);
283
+ color: var(--imdz-text, #000000);
284
+ font-family: var(--imdz-font, "imdz Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif);
285
+ }
286
+
287
+ /* Corner brackets on two opposite corners. */
288
+ .imdz-card::before,
289
+ .imdz-card::after {
290
+ content: "";
291
+ position: absolute;
292
+ width: 0.625rem;
293
+ height: 0.625rem;
294
+ border: 0 solid var(--imdz-text, #000000);
295
+ pointer-events: none;
296
+ }
297
+
298
+ .imdz-card::before {
299
+ top: -1px;
300
+ left: -1px;
301
+ border-top-width: 1px;
302
+ border-left-width: 1px;
303
+ }
304
+
305
+ .imdz-card::after {
306
+ right: -1px;
307
+ bottom: -1px;
308
+ border-right-width: 1px;
309
+ border-bottom-width: 1px;
310
+ }
311
+
312
+ .imdz-card-title {
313
+ margin: 0;
314
+ font: 600 0.8125rem/1.3 var(--imdz-font-mono, "imdz JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace);
315
+ letter-spacing: var(--imdz-tracking, 0.08em);
316
+ text-transform: uppercase;
317
+ }
318
+
319
+ .imdz-card-body {
320
+ color: var(--imdz-muted, #5e5e5e);
321
+ font-size: 0.875rem;
322
+ line-height: 1.5;
323
+ }
324
+
325
+ .imdz-card-body > :first-child {
326
+ margin-top: 0;
327
+ }
328
+
329
+ .imdz-card-body > :last-child {
330
+ margin-bottom: 0;
331
+ }
332
+
333
+ .imdz-card-footer {
334
+ display: flex;
335
+ flex-wrap: wrap;
336
+ gap: 0.5rem;
337
+ margin-top: 0.25rem;
338
+ }
339
+
340
+ .imdz-checkbox {
341
+ display: inline-flex;
342
+ align-items: center;
343
+ gap: 0.625rem;
344
+ color: var(--imdz-text, #000000);
345
+ font: 400 0.875rem/1.4 var(--imdz-font, "imdz Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif);
346
+ cursor: pointer;
347
+ }
348
+
349
+ .imdz-checkbox-input {
350
+ display: grid;
351
+ flex: none;
352
+ place-content: center;
353
+ box-sizing: border-box;
354
+ width: 1.125rem;
355
+ height: 1.125rem;
356
+ margin: 0;
357
+ border: 1px solid var(--imdz-border, #c4c4c4);
358
+ border-radius: var(--imdz-radius, 0px);
359
+ background: transparent;
360
+ appearance: none;
361
+ cursor: pointer;
362
+ transition: border-color 150ms;
363
+ }
364
+
365
+ .imdz-checkbox-input::before {
366
+ content: "";
367
+ width: 0.5rem;
368
+ height: 0.5rem;
369
+ background: var(--imdz-text, #000000);
370
+ transform: scale(0);
371
+ transition: transform 120ms;
372
+ }
373
+
374
+ .imdz-checkbox-input:hover,
375
+ .imdz-checkbox-input:checked {
376
+ border-color: var(--imdz-text, #000000);
377
+ }
378
+
379
+ .imdz-checkbox-input:checked::before {
380
+ transform: scale(1);
381
+ }
382
+
383
+ .imdz-checkbox-input:focus-visible {
384
+ outline: 2px solid var(--imdz-focus, var(--imdz-text, #000000));
385
+ outline-offset: 3px;
386
+ }
387
+
388
+ .imdz-checkbox:has(.imdz-checkbox-input:disabled) {
389
+ opacity: 0.4;
390
+ cursor: not-allowed;
391
+ }
392
+
393
+ .imdz-dialog {
394
+ box-sizing: border-box;
395
+ width: min(28rem, calc(100vw - 2rem));
396
+ /* Explicit: some resets (e.g. Tailwind) undo the native centering. */
397
+ margin: auto;
398
+ padding: 1.25rem;
399
+ border: 1px solid var(--imdz-text, #000000);
400
+ border-radius: var(--imdz-radius, 0px);
401
+ background: var(--imdz-bg, #ffffff);
402
+ color: var(--imdz-text, #000000);
403
+ font-family: var(--imdz-font, "imdz Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif);
404
+ box-shadow: 0 0 48px color-mix(in srgb, var(--imdz-text, #000000) 18%, transparent);
405
+ }
406
+
407
+ .imdz-dialog::backdrop {
408
+ background: rgb(0 0 0 / 0.7);
409
+ backdrop-filter: blur(4px);
410
+ }
411
+
412
+ .imdz-dialog-header {
413
+ display: flex;
414
+ align-items: flex-start;
415
+ justify-content: space-between;
416
+ gap: 1rem;
417
+ }
418
+
419
+ .imdz-dialog-title {
420
+ margin: 0;
421
+ font: 600 0.875rem/1.4 var(--imdz-font-mono, "imdz JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace);
422
+ letter-spacing: var(--imdz-tracking, 0.08em);
423
+ text-transform: uppercase;
424
+ }
425
+
426
+ .imdz-dialog-close {
427
+ display: grid;
428
+ place-items: center;
429
+ width: 1.75rem;
430
+ height: 1.75rem;
431
+ padding: 0;
432
+ border: 1px solid var(--imdz-border, #c4c4c4);
433
+ border-radius: var(--imdz-radius, 0px);
434
+ background: transparent;
435
+ color: var(--imdz-muted, #5e5e5e);
436
+ font-size: 1.125rem;
437
+ line-height: 1;
438
+ cursor: pointer;
439
+ transition: background-color 150ms, color 150ms, border-color 150ms;
440
+ }
441
+
442
+ .imdz-dialog-close:hover {
443
+ border-color: var(--imdz-text, #000000);
444
+ background: var(--imdz-text, #000000);
445
+ color: var(--imdz-bg, #ffffff);
446
+ }
447
+
448
+ .imdz-dialog-close:focus-visible {
449
+ outline: 2px solid var(--imdz-focus, var(--imdz-text, #000000));
450
+ outline-offset: 2px;
451
+ }
452
+
453
+ .imdz-dialog-body {
454
+ margin-top: 0.75rem;
455
+ color: var(--imdz-muted, #5e5e5e);
456
+ font-size: 0.875rem;
457
+ line-height: 1.5;
458
+ }
459
+
460
+ .imdz-dialog-body > :first-child {
461
+ margin-top: 0;
462
+ }
463
+
464
+ .imdz-dialog-body > :last-child {
465
+ margin-bottom: 0;
466
+ }
467
+
468
+ .imdz-dialog-footer {
469
+ display: flex;
470
+ flex-wrap: wrap;
471
+ justify-content: flex-end;
472
+ gap: 0.5rem;
473
+ margin-top: 1.25rem;
474
+ }
475
+
476
+ .imdz-field {
477
+ display: grid;
478
+ gap: 0.5rem;
479
+ font-family: var(--imdz-font, "imdz Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif);
480
+ }
481
+
482
+ .imdz-field-label {
483
+ color: var(--imdz-muted, #5e5e5e);
484
+ font: 600 0.6875rem/1 var(--imdz-font-mono, "imdz JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace);
485
+ letter-spacing: var(--imdz-tracking, 0.08em);
486
+ text-transform: uppercase;
487
+ }
488
+
489
+ .imdz-field-hint,
490
+ .imdz-field-error {
491
+ margin: 0;
492
+ font-size: 0.8125rem;
493
+ }
494
+
495
+ .imdz-field-hint {
496
+ color: var(--imdz-muted, #5e5e5e);
497
+ }
498
+
499
+ .imdz-field-error {
500
+ color: var(--imdz-danger, #c4001a);
501
+ }
502
+
503
+ /* Base shared by input, textarea and select. */
504
+ .imdz-field-input {
505
+ box-sizing: border-box;
506
+ width: 100%;
507
+ height: 2.5rem;
508
+ padding: 0 0.75rem;
509
+ border: 1px solid var(--imdz-border, #c4c4c4);
510
+ border-radius: var(--imdz-radius, 0px);
511
+ background: transparent;
512
+ color: var(--imdz-text, #000000);
513
+ font: 400 0.875rem/1.4 var(--imdz-font, "imdz Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif);
514
+ transition: border-color 150ms, box-shadow 150ms;
515
+ }
516
+
517
+ .imdz-field-input::placeholder {
518
+ color: var(--imdz-muted, #5e5e5e);
519
+ }
520
+
521
+ .imdz-field-input:hover {
522
+ border-color: var(--imdz-muted, #5e5e5e);
523
+ }
524
+
525
+ .imdz-field-input:focus-visible {
526
+ border-color: var(--imdz-focus, var(--imdz-text, #000000));
527
+ outline: 1px solid var(--imdz-focus, var(--imdz-text, #000000));
528
+ box-shadow: 0 0 18px color-mix(in srgb, var(--imdz-focus, var(--imdz-text, #000000)) 25%, transparent);
529
+ }
530
+
531
+ .imdz-field-input[aria-invalid="true"] {
532
+ border-color: var(--imdz-danger, #c4001a);
533
+ }
534
+
535
+ .imdz-field-input:disabled {
536
+ opacity: 0.4;
537
+ cursor: not-allowed;
538
+ }
539
+
540
+ .imdz-progress {
541
+ display: grid;
542
+ gap: 0.5rem;
543
+ font-family: var(--imdz-font, "imdz Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif);
544
+ }
545
+
546
+ .imdz-progress-header {
547
+ display: flex;
548
+ justify-content: space-between;
549
+ gap: 1rem;
550
+ color: var(--imdz-muted, #5e5e5e);
551
+ font: 600 0.6875rem/1 var(--imdz-font-mono, "imdz JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace);
552
+ letter-spacing: var(--imdz-tracking, 0.08em);
553
+ text-transform: uppercase;
554
+ }
555
+
556
+ .imdz-progress-track {
557
+ box-sizing: border-box;
558
+ height: 0.75rem;
559
+ padding: 2px;
560
+ border: 1px solid var(--imdz-border, #c4c4c4);
561
+ border-radius: var(--imdz-radius, 0px);
562
+ }
563
+
564
+ /* Segmented bar. The width comes from the --imdz-progress-value variable. */
565
+ .imdz-progress-bar {
566
+ width: var(--imdz-progress-value, 0%);
567
+ height: 100%;
568
+ background: repeating-linear-gradient(
569
+ 90deg,
570
+ var(--imdz-text, #000000) 0 6px,
571
+ transparent 6px 8px
572
+ );
573
+ transition: width 300ms;
574
+ }
575
+
576
+ /* Used together with .input from field.css. */
577
+ .imdz-select {
578
+ appearance: none;
579
+ padding-right: 2.25rem;
580
+ /* Arrow drawn with two gradients, so it inherits the text color. */
581
+ background-image: linear-gradient(45deg, transparent 50%, currentColor 50%),
582
+ linear-gradient(135deg, currentColor 50%, transparent 50%);
583
+ background-position: right 1rem center, right 0.6875rem center;
584
+ background-size: 0.3125rem 0.3125rem;
585
+ background-repeat: no-repeat;
586
+ cursor: pointer;
587
+ }
588
+
589
+ .imdz-select option {
590
+ background: var(--imdz-bg, #ffffff);
591
+ color: var(--imdz-text, #000000);
592
+ }
593
+
594
+ /*
595
+ * Custom dropdown, no JavaScript, using CSS customizable select
596
+ * (appearance: base-select). Where the browser doesn't support it, you get
597
+ * the system's native list and the field above.
598
+ */
599
+ @supports (appearance: base-select) {
600
+ .imdz-select,
601
+ .imdz-select::picker(select) {
602
+ appearance: base-select;
603
+ }
604
+
605
+ .imdz-select {
606
+ align-items: center;
607
+ padding-right: 0.75rem;
608
+ background-image: none;
609
+ }
610
+
611
+ .imdz-select::picker-icon {
612
+ color: var(--imdz-muted, #5e5e5e);
613
+ transition: rotate 150ms;
614
+ }
615
+
616
+ .imdz-select:open::picker-icon {
617
+ rotate: 180deg;
618
+ }
619
+
620
+ .imdz-select::picker(select) {
621
+ margin: 0.25rem 0;
622
+ padding: 0;
623
+ border: 1px solid var(--imdz-text, #000000);
624
+ border-radius: var(--imdz-radius, 0px);
625
+ background: var(--imdz-bg, #ffffff);
626
+ box-shadow: 0 0 32px color-mix(in srgb, var(--imdz-text, #000000) 18%, transparent);
627
+ }
628
+
629
+ .imdz-select option {
630
+ display: flex;
631
+ align-items: center;
632
+ justify-content: space-between;
633
+ gap: 1rem;
634
+ padding: 0.625rem 0.75rem;
635
+ font: 400 0.875rem/1.4 var(--imdz-font, "imdz Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif);
636
+ cursor: pointer;
637
+ }
638
+
639
+ .imdz-select option:not(:last-child) {
640
+ border-bottom: 1px solid var(--imdz-border, #c4c4c4);
641
+ }
642
+
643
+ /* The option under the pointer or focus inverts, like the buttons. */
644
+ .imdz-select option:hover,
645
+ .imdz-select option:focus-visible {
646
+ outline: none;
647
+ background: var(--imdz-text, #000000);
648
+ color: var(--imdz-bg, #ffffff);
649
+ }
650
+
651
+ .imdz-select option:disabled {
652
+ opacity: 0.4;
653
+ cursor: not-allowed;
654
+ }
655
+
656
+ /* The selected option's mark is a square on the right. */
657
+ .imdz-select option::checkmark {
658
+ content: "";
659
+ order: 1;
660
+ width: 0.375rem;
661
+ height: 0.375rem;
662
+ background: currentColor;
663
+ }
664
+ }
665
+
666
+ .imdz-skeleton {
667
+ display: block;
668
+ height: 1rem;
669
+ border-radius: var(--imdz-radius, 0px);
670
+ background: linear-gradient(
671
+ 90deg,
672
+ var(--imdz-surface, #f2f2f2) 25%,
673
+ var(--imdz-border, #c4c4c4) 50%,
674
+ var(--imdz-surface, #f2f2f2) 75%
675
+ );
676
+ background-size: 200% 100%;
677
+ animation: imdz-shimmer 1.4s linear infinite;
678
+ }
679
+
680
+ @keyframes imdz-shimmer {
681
+ from {
682
+ background-position: 200% 0;
683
+ }
684
+ to {
685
+ background-position: -200% 0;
686
+ }
687
+ }
688
+
689
+ @media (prefers-reduced-motion: reduce) {
690
+ .imdz-skeleton {
691
+ animation: none;
692
+ }
693
+ }
694
+
695
+ .imdz-spinner {
696
+ display: inline-block;
697
+ box-sizing: border-box;
698
+ width: 1.25rem;
699
+ height: 1.25rem;
700
+ border: 2px solid var(--imdz-border, #c4c4c4);
701
+ border-top-color: var(--imdz-text, #000000);
702
+ border-radius: 50%;
703
+ animation: imdz-spin 700ms linear infinite;
704
+ }
705
+
706
+ .imdz-spinner-lg {
707
+ width: 2rem;
708
+ height: 2rem;
709
+ }
710
+
711
+ @keyframes imdz-spin {
712
+ to {
713
+ transform: rotate(360deg);
714
+ }
715
+ }
716
+
717
+ @media (prefers-reduced-motion: reduce) {
718
+ .imdz-spinner {
719
+ animation-duration: 2.4s;
720
+ }
721
+ }
722
+
723
+ .imdz-switch {
724
+ display: inline-flex;
725
+ align-items: center;
726
+ gap: 0.625rem;
727
+ color: var(--imdz-text, #000000);
728
+ font: 400 0.875rem/1.4 var(--imdz-font, "imdz Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif);
729
+ cursor: pointer;
730
+ }
731
+
732
+ .imdz-switch-input {
733
+ position: relative;
734
+ flex: none;
735
+ box-sizing: border-box;
736
+ width: 2.5rem;
737
+ height: 1.25rem;
738
+ margin: 0;
739
+ border: 1px solid var(--imdz-border, #c4c4c4);
740
+ border-radius: var(--imdz-radius, 0px);
741
+ background: transparent;
742
+ appearance: none;
743
+ cursor: pointer;
744
+ transition: border-color 150ms, background-color 150ms;
745
+ }
746
+
747
+ .imdz-switch-input::before {
748
+ content: "";
749
+ position: absolute;
750
+ top: 0.1875rem;
751
+ left: 0.1875rem;
752
+ width: 0.75rem;
753
+ height: 0.75rem;
754
+ background: var(--imdz-muted, #5e5e5e);
755
+ transition: transform 150ms, background-color 150ms;
756
+ }
757
+
758
+ .imdz-switch-input:hover {
759
+ border-color: var(--imdz-text, #000000);
760
+ }
761
+
762
+ .imdz-switch-input:checked {
763
+ border-color: var(--imdz-text, #000000);
764
+ background: var(--imdz-text, #000000);
765
+ }
766
+
767
+ .imdz-switch-input:checked::before {
768
+ background: var(--imdz-bg, #ffffff);
769
+ transform: translateX(1.25rem);
770
+ }
771
+
772
+ .imdz-switch-input:focus-visible {
773
+ outline: 2px solid var(--imdz-focus, var(--imdz-text, #000000));
774
+ outline-offset: 3px;
775
+ }
776
+
777
+ .imdz-switch:has(.imdz-switch-input:disabled) {
778
+ opacity: 0.4;
779
+ cursor: not-allowed;
780
+ }
781
+
782
+ .imdz-tabs {
783
+ font-family: var(--imdz-font, "imdz Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif);
784
+ }
785
+
786
+ .imdz-tabs-list {
787
+ display: flex;
788
+ overflow-x: auto;
789
+ overflow-y: hidden;
790
+ box-shadow: inset 0 -1px 0 var(--imdz-border, #c4c4c4);
791
+ }
792
+
793
+ .imdz-tabs-tab {
794
+ padding: 0.75rem 1rem;
795
+ border: 0;
796
+ background: transparent;
797
+ color: var(--imdz-muted, #5e5e5e);
798
+ font: 600 0.6875rem/1 var(--imdz-font-mono, "imdz JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace);
799
+ letter-spacing: var(--imdz-tracking, 0.08em);
800
+ text-transform: uppercase;
801
+ white-space: nowrap;
802
+ cursor: pointer;
803
+ transition: background-color 150ms, color 150ms;
804
+ }
805
+
806
+ .imdz-tabs-tab:hover {
807
+ color: var(--imdz-text, #000000);
808
+ }
809
+
810
+ .imdz-tabs-tab:focus-visible {
811
+ outline: 2px solid var(--imdz-focus, var(--imdz-text, #000000));
812
+ outline-offset: -4px;
813
+ }
814
+
815
+ /* The active tab is an inverted block. */
816
+ .imdz-tabs-tab[aria-selected="true"] {
817
+ background: var(--imdz-text, #000000);
818
+ color: var(--imdz-bg, #ffffff);
819
+ }
820
+
821
+ .imdz-tabs-tab[aria-selected="true"]:focus-visible {
822
+ outline-color: var(--imdz-bg, #ffffff);
823
+ }
824
+
825
+ .imdz-tabs-panel {
826
+ padding-top: 1rem;
827
+ color: var(--imdz-text, #000000);
828
+ font-size: 0.875rem;
829
+ line-height: 1.5;
830
+ }
831
+
832
+ /* Used together with .input from field.css. */
833
+ .imdz-textarea {
834
+ display: block;
835
+ height: auto;
836
+ min-height: 6rem;
837
+ padding: 0.625rem 0.75rem;
838
+ resize: vertical;
839
+ }
840
+
841
+ .imdz-tooltip {
842
+ position: relative;
843
+ display: inline-flex;
844
+ }
845
+
846
+ .imdz-tooltip-bubble {
847
+ position: absolute;
848
+ bottom: calc(100% + 0.5rem);
849
+ left: 50%;
850
+ z-index: 10;
851
+ padding: 0.375rem 0.5rem;
852
+ border-radius: var(--imdz-radius, 0px);
853
+ background: var(--imdz-text, #000000);
854
+ color: var(--imdz-bg, #ffffff);
855
+ font: 600 0.6875rem/1.2 var(--imdz-font-mono, "imdz JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace);
856
+ letter-spacing: var(--imdz-tracking, 0.08em);
857
+ text-transform: uppercase;
858
+ white-space: nowrap;
859
+ opacity: 0;
860
+ visibility: hidden;
861
+ pointer-events: none;
862
+ translate: -50% 0.25rem;
863
+ transition: opacity 120ms, translate 120ms, visibility 120ms;
864
+ }
865
+
866
+ /* Shows on hover and also on keyboard focus. */
867
+ .imdz-tooltip:hover .imdz-tooltip-bubble,
868
+ .imdz-tooltip:focus-within .imdz-tooltip-bubble {
869
+ opacity: 1;
870
+ visibility: visible;
871
+ translate: -50% 0;
872
+ }