@duskmoon-dev/core 0.1.0 → 1.1.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 (86) hide show
  1. package/README.md +366 -78
  2. package/dist/components/accordion.css +244 -0
  3. package/dist/components/alert.css +199 -0
  4. package/dist/components/appbar.css +308 -0
  5. package/dist/components/autocomplete.css +269 -0
  6. package/dist/components/avatar.css +167 -0
  7. package/dist/components/badge.css +178 -0
  8. package/dist/components/bottom-navigation.css +263 -0
  9. package/dist/components/bottomsheet.css +334 -0
  10. package/dist/components/button.css +474 -0
  11. package/dist/components/card.css +220 -0
  12. package/dist/components/chip.css +211 -0
  13. package/dist/components/collapse.css +254 -0
  14. package/dist/components/datepicker.css +347 -0
  15. package/dist/components/dialog.css +173 -0
  16. package/dist/components/divider.css +284 -0
  17. package/dist/components/drawer.css +371 -0
  18. package/dist/components/file-upload.css +321 -0
  19. package/dist/components/form.css +441 -0
  20. package/dist/components/index.css +9994 -0
  21. package/dist/components/input.css +240 -0
  22. package/dist/components/list.css +188 -0
  23. package/dist/components/markdown-body.css +405 -0
  24. package/dist/components/modal.css +291 -0
  25. package/dist/components/navigation.css +392 -0
  26. package/dist/components/popover.css +326 -0
  27. package/dist/components/progress.css +238 -0
  28. package/dist/components/rating.css +230 -0
  29. package/dist/components/skeleton.css +216 -0
  30. package/dist/components/slider.css +327 -0
  31. package/dist/components/snackbar.css +311 -0
  32. package/dist/components/stepper.css +313 -0
  33. package/dist/components/switch.css +277 -0
  34. package/dist/components/table.css +199 -0
  35. package/dist/components/timeline.css +353 -0
  36. package/dist/components/toast.css +251 -0
  37. package/dist/components/tooltip.css +284 -0
  38. package/dist/esm/components/accordion.js +251 -0
  39. package/dist/esm/components/alert.js +206 -0
  40. package/dist/esm/components/appbar.js +315 -0
  41. package/dist/esm/components/autocomplete.js +276 -0
  42. package/dist/esm/components/avatar.js +174 -0
  43. package/dist/esm/components/badge.js +185 -0
  44. package/dist/esm/components/bottom-navigation.js +270 -0
  45. package/dist/esm/components/bottomsheet.js +341 -0
  46. package/dist/esm/components/button.js +481 -0
  47. package/dist/esm/components/card.js +227 -0
  48. package/dist/esm/components/chip.js +218 -0
  49. package/dist/esm/components/collapse.js +261 -0
  50. package/dist/esm/components/datepicker.js +354 -0
  51. package/dist/esm/components/dialog.js +180 -0
  52. package/dist/esm/components/divider.js +291 -0
  53. package/dist/esm/components/drawer.js +378 -0
  54. package/dist/esm/components/file-upload.js +328 -0
  55. package/dist/esm/components/form.js +448 -0
  56. package/dist/esm/components/input.js +247 -0
  57. package/dist/esm/components/list.js +195 -0
  58. package/dist/esm/components/markdown-body.js +412 -0
  59. package/dist/esm/components/modal.js +298 -0
  60. package/dist/esm/components/navigation.js +399 -0
  61. package/dist/esm/components/popover.js +333 -0
  62. package/dist/esm/components/progress.js +245 -0
  63. package/dist/esm/components/rating.js +237 -0
  64. package/dist/esm/components/skeleton.js +223 -0
  65. package/dist/esm/components/slider.js +334 -0
  66. package/dist/esm/components/snackbar.js +318 -0
  67. package/dist/esm/components/stepper.js +320 -0
  68. package/dist/esm/components/switch.js +284 -0
  69. package/dist/esm/components/table.js +206 -0
  70. package/dist/esm/components/timeline.js +360 -0
  71. package/dist/esm/components/toast.js +258 -0
  72. package/dist/esm/components/tooltip.js +291 -0
  73. package/dist/index.css +10699 -0
  74. package/dist/themes/moonlight.css +168 -0
  75. package/dist/themes/sunshine.css +166 -0
  76. package/dist/types/index.d.ts +14 -0
  77. package/dist/types/index.d.ts.map +1 -0
  78. package/dist/types/plugin.d.ts +69 -0
  79. package/dist/types/plugin.d.ts.map +1 -0
  80. package/dist/types/theme.d.ts +202 -0
  81. package/dist/types/theme.d.ts.map +1 -0
  82. package/package.json +207 -18
  83. package/dist/index.cjs +0 -243
  84. package/dist/index.cjs.map +0 -15
  85. package/dist/index.js +0 -211
  86. package/dist/index.js.map +0 -15
@@ -0,0 +1,405 @@
1
+ /**
2
+ * Markdown Body Component
3
+ * GitHub-style typography for rendered markdown content
4
+ * Uses DuskMoonUI color tokens for automatic theme switching
5
+ */
6
+
7
+ @layer components {
8
+ /* ============================================
9
+ * BASE CONTAINER (Phase 2: T005-T007)
10
+ * ============================================ */
11
+
12
+ .markdown-body {
13
+ /* Base typography */
14
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
15
+ font-size: 16px;
16
+ line-height: 1.5;
17
+ word-wrap: break-word;
18
+ color: var(--color-on-surface);
19
+ }
20
+
21
+ /* ============================================
22
+ * USER STORY 1: TYPOGRAPHY (Phase 3: T009-T016)
23
+ * ============================================ */
24
+
25
+ /* Headings */
26
+ .markdown-body h1,
27
+ .markdown-body h2,
28
+ .markdown-body h3,
29
+ .markdown-body h4,
30
+ .markdown-body h5,
31
+ .markdown-body h6 {
32
+ margin-block-start: 1.5rem;
33
+ margin-block-end: 1rem;
34
+ font-weight: 600;
35
+ line-height: 1.25;
36
+ }
37
+
38
+ .markdown-body h1 {
39
+ font-size: 2em;
40
+ padding-block-end: 0.3em;
41
+ border-bottom: 1px solid var(--color-outline-variant);
42
+ }
43
+
44
+ .markdown-body h2 {
45
+ font-size: 1.5em;
46
+ padding-block-end: 0.3em;
47
+ border-bottom: 1px solid var(--color-outline-variant);
48
+ }
49
+
50
+ .markdown-body h3 {
51
+ font-size: 1.25em;
52
+ }
53
+
54
+ .markdown-body h4 {
55
+ font-size: 1em;
56
+ }
57
+
58
+ .markdown-body h5 {
59
+ font-size: 0.875em;
60
+ }
61
+
62
+ .markdown-body h6 {
63
+ font-size: 0.85em;
64
+ color: var(--color-on-surface-variant);
65
+ }
66
+
67
+ /* Paragraphs */
68
+ .markdown-body p {
69
+ margin-block-end: 1rem;
70
+ }
71
+
72
+ /* Links */
73
+ .markdown-body a {
74
+ color: var(--color-primary);
75
+ text-decoration: none;
76
+ }
77
+
78
+ .markdown-body a:hover {
79
+ text-decoration: underline;
80
+ }
81
+
82
+ .markdown-body a:focus-visible {
83
+ outline: 2px solid var(--color-primary);
84
+ outline-offset: 2px;
85
+ }
86
+
87
+ /* Emphasis */
88
+ .markdown-body strong,
89
+ .markdown-body b {
90
+ font-weight: 600;
91
+ }
92
+
93
+ .markdown-body em,
94
+ .markdown-body i {
95
+ font-style: italic;
96
+ }
97
+
98
+ /* Lists */
99
+ .markdown-body ul,
100
+ .markdown-body ol {
101
+ margin-block-end: 1rem;
102
+ padding-inline-start: 2em;
103
+ }
104
+
105
+ .markdown-body ul {
106
+ list-style-type: disc;
107
+ }
108
+
109
+ .markdown-body ol {
110
+ list-style-type: decimal;
111
+ }
112
+
113
+ .markdown-body li {
114
+ margin-block-end: 0.25rem;
115
+ }
116
+
117
+ .markdown-body li > ul,
118
+ .markdown-body li > ol {
119
+ margin-block-start: 0.25rem;
120
+ margin-block-end: 0;
121
+ }
122
+
123
+ /* Nested list style progression */
124
+ .markdown-body ul ul {
125
+ list-style-type: circle;
126
+ }
127
+
128
+ .markdown-body ul ul ul {
129
+ list-style-type: square;
130
+ }
131
+
132
+ .markdown-body ol ol {
133
+ list-style-type: lower-alpha;
134
+ }
135
+
136
+ .markdown-body ol ol ol {
137
+ list-style-type: lower-roman;
138
+ }
139
+
140
+ /* Small, subscript, superscript, strikethrough */
141
+ .markdown-body small {
142
+ font-size: 0.875em;
143
+ }
144
+
145
+ .markdown-body sub,
146
+ .markdown-body sup {
147
+ font-size: 0.75em;
148
+ line-height: 0;
149
+ position: relative;
150
+ vertical-align: baseline;
151
+ }
152
+
153
+ .markdown-body sub {
154
+ bottom: -0.25em;
155
+ }
156
+
157
+ .markdown-body sup {
158
+ top: -0.5em;
159
+ }
160
+
161
+ .markdown-body del,
162
+ .markdown-body s {
163
+ text-decoration: line-through;
164
+ color: var(--color-on-surface-variant);
165
+ }
166
+
167
+ /* ============================================
168
+ * USER STORY 2: CODE (Phase 4: T017-T021)
169
+ * ============================================ */
170
+
171
+ /* Inline code */
172
+ .markdown-body code {
173
+ font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
174
+ font-size: 0.85em;
175
+ padding-block: 0.2em;
176
+ padding-inline: 0.4em;
177
+ background-color: var(--color-surface-container-high);
178
+ border-radius: 6px;
179
+ }
180
+
181
+ /* Code blocks */
182
+ .markdown-body pre {
183
+ font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
184
+ font-size: 0.85em;
185
+ line-height: 1.45;
186
+ padding: 1rem;
187
+ margin-block-end: 1rem;
188
+ overflow-x: auto;
189
+ background-color: var(--color-surface-container);
190
+ border-radius: 6px;
191
+ }
192
+
193
+ /* Reset code inside pre */
194
+ .markdown-body pre > code {
195
+ font-size: inherit;
196
+ padding: 0;
197
+ background-color: transparent;
198
+ border-radius: 0;
199
+ }
200
+
201
+ /* Keyboard input */
202
+ .markdown-body kbd {
203
+ font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
204
+ font-size: 0.85em;
205
+ padding-block: 0.2em;
206
+ padding-inline: 0.4em;
207
+ background-color: var(--color-surface-container);
208
+ border: 1px solid var(--color-outline-variant);
209
+ border-radius: 6px;
210
+ box-shadow: inset 0 -1px 0 var(--color-outline-variant);
211
+ }
212
+
213
+ /* Sample output */
214
+ .markdown-body samp {
215
+ font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
216
+ font-size: 0.85em;
217
+ }
218
+
219
+ /* ============================================
220
+ * USER STORY 3: TABLES (Phase 6: T026-T029)
221
+ * ============================================ */
222
+
223
+ .markdown-body table {
224
+ width: 100%;
225
+ border-collapse: collapse;
226
+ margin-block-end: 1rem;
227
+ overflow-x: auto;
228
+ display: block;
229
+ }
230
+
231
+ .markdown-body th {
232
+ font-weight: 600;
233
+ background-color: var(--color-surface-container);
234
+ }
235
+
236
+ .markdown-body th,
237
+ .markdown-body td {
238
+ padding-block: 0.5rem;
239
+ padding-inline: 0.75rem;
240
+ border: 1px solid var(--color-outline-variant);
241
+ text-align: start;
242
+ }
243
+
244
+ .markdown-body tr:nth-child(2n) {
245
+ background-color: var(--color-surface-container);
246
+ }
247
+
248
+ /* ============================================
249
+ * USER STORY 4: BLOCKQUOTES (Phase 7: T030-T031)
250
+ * ============================================ */
251
+
252
+ .markdown-body blockquote {
253
+ margin-block-end: 1rem;
254
+ margin-inline: 0;
255
+ padding-inline-start: 1em;
256
+ border-inline-start: 0.25em solid var(--color-outline-variant);
257
+ color: var(--color-on-surface-variant);
258
+ }
259
+
260
+ .markdown-body blockquote > :first-child {
261
+ margin-block-start: 0;
262
+ }
263
+
264
+ .markdown-body blockquote > :last-child {
265
+ margin-block-end: 0;
266
+ }
267
+
268
+ /* Nested blockquotes */
269
+ .markdown-body blockquote blockquote {
270
+ margin-block-start: 1rem;
271
+ }
272
+
273
+ /* ============================================
274
+ * USER STORY 6: IMAGES (Phase 8: T032-T034)
275
+ * ============================================ */
276
+
277
+ .markdown-body img {
278
+ max-width: 100%;
279
+ height: auto;
280
+ box-sizing: border-box;
281
+ }
282
+
283
+ .markdown-body figure {
284
+ margin-block-end: 1rem;
285
+ margin-inline: 0;
286
+ }
287
+
288
+ .markdown-body figcaption {
289
+ font-size: 0.875em;
290
+ color: var(--color-on-surface-variant);
291
+ margin-block-start: 0.5rem;
292
+ text-align: center;
293
+ }
294
+
295
+ /* Image alignment helpers */
296
+ .markdown-body img[align="left"] {
297
+ margin-inline-end: 1rem;
298
+ margin-block-end: 0.5rem;
299
+ }
300
+
301
+ .markdown-body img[align="right"] {
302
+ margin-inline-start: 1rem;
303
+ margin-block-end: 0.5rem;
304
+ }
305
+
306
+ /* ============================================
307
+ * USER STORY 7: TASK LISTS (Phase 9: T035-T036)
308
+ * ============================================ */
309
+
310
+ .markdown-body .task-list-item {
311
+ list-style-type: none;
312
+ }
313
+
314
+ .markdown-body .task-list-item input[type="checkbox"] {
315
+ margin-inline-start: -1.5em;
316
+ margin-inline-end: 0.5em;
317
+ vertical-align: middle;
318
+ }
319
+
320
+ /* ============================================
321
+ * PHASE 10: POLISH - ADDITIONAL ELEMENTS
322
+ * ============================================ */
323
+
324
+ /* Horizontal rule */
325
+ .markdown-body hr {
326
+ height: 0.25em;
327
+ margin-block: 1.5rem;
328
+ padding: 0;
329
+ background-color: var(--color-outline-variant);
330
+ border: 0;
331
+ }
332
+
333
+ /* Definition lists */
334
+ .markdown-body dl {
335
+ margin-block-end: 1rem;
336
+ }
337
+
338
+ .markdown-body dt {
339
+ font-weight: 600;
340
+ margin-block-start: 1rem;
341
+ }
342
+
343
+ .markdown-body dt:first-child {
344
+ margin-block-start: 0;
345
+ }
346
+
347
+ .markdown-body dd {
348
+ margin-block-start: 0.25rem;
349
+ margin-inline-start: 0;
350
+ padding-inline-start: 1rem;
351
+ }
352
+
353
+ /* Abbreviations */
354
+ .markdown-body abbr[title] {
355
+ text-decoration: underline dotted;
356
+ cursor: help;
357
+ border-bottom: none;
358
+ }
359
+
360
+ /* Highlights */
361
+ .markdown-body mark {
362
+ background-color: var(--color-tertiary-container);
363
+ color: var(--color-on-tertiary-container);
364
+ padding-block: 0.1em;
365
+ padding-inline: 0.2em;
366
+ border-radius: 2px;
367
+ }
368
+
369
+ /* Details/Summary */
370
+ .markdown-body details {
371
+ margin-block-end: 1rem;
372
+ }
373
+
374
+ .markdown-body summary {
375
+ font-weight: 600;
376
+ cursor: pointer;
377
+ }
378
+
379
+ .markdown-body details[open] > summary {
380
+ margin-block-end: 0.5rem;
381
+ }
382
+
383
+ /* ============================================
384
+ * EDGE CASES (T042-T043)
385
+ * ============================================ */
386
+
387
+ /* First/last child margin resets */
388
+ .markdown-body > :first-child {
389
+ margin-block-start: 0;
390
+ }
391
+
392
+ .markdown-body > :last-child {
393
+ margin-block-end: 0;
394
+ }
395
+
396
+ /* ============================================
397
+ * USER STORY 5: REDUCED MOTION (T025)
398
+ * ============================================ */
399
+
400
+ @media (prefers-reduced-motion: reduce) {
401
+ .markdown-body * {
402
+ transition: none;
403
+ }
404
+ }
405
+ }
@@ -0,0 +1,291 @@
1
+ /**
2
+ * Modal Component Styles
3
+ * DuskMoonUI - Material Design 3 inspired modal/dialog system
4
+ */
5
+
6
+ @layer components {
7
+ /* Modal Container */
8
+ .modal {
9
+ position: fixed;
10
+ inset: 0;
11
+ z-index: 999;
12
+ display: flex;
13
+ align-items: center;
14
+ justify-content: center;
15
+ padding: 1rem;
16
+ visibility: hidden;
17
+ opacity: 0;
18
+ transition: visibility 200ms ease-out, opacity 200ms ease-out;
19
+ }
20
+
21
+ /* Modal Open State */
22
+ .modal.modal-open,
23
+ .modal:target {
24
+ visibility: visible;
25
+ opacity: 1;
26
+ }
27
+
28
+ /* Modal Box */
29
+ .modal-box {
30
+ position: relative;
31
+ z-index: 1;
32
+ max-width: 32rem;
33
+ max-height: calc(100vh - 5rem);
34
+ padding: 1.5rem;
35
+ background-color: var(--color-surface);
36
+ color: var(--color-on-surface);
37
+ border-radius: 1rem;
38
+ box-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);
39
+ overflow-y: auto;
40
+ transform: scale(0.95);
41
+ transition: transform 200ms ease-out;
42
+ }
43
+
44
+ .modal.modal-open .modal-box,
45
+ .modal:target .modal-box {
46
+ transform: scale(1);
47
+ }
48
+
49
+ /* Modal Backdrop */
50
+ .modal-backdrop {
51
+ position: fixed;
52
+ inset: 0;
53
+ z-index: -1;
54
+ background-color: rgb(0 0 0 / 0.5);
55
+ cursor: pointer;
56
+ }
57
+
58
+ .modal-backdrop::before {
59
+ content: '';
60
+ position: absolute;
61
+ inset: 0;
62
+ }
63
+
64
+ /* Modal Action */
65
+ .modal-action {
66
+ display: flex;
67
+ justify-content: flex-end;
68
+ gap: 0.5rem;
69
+ margin-top: 1.5rem;
70
+ padding-top: 1rem;
71
+ }
72
+
73
+ /* Modal Toggle (CSS-only) */
74
+ .modal-toggle {
75
+ position: fixed;
76
+ width: 0;
77
+ height: 0;
78
+ appearance: none;
79
+ opacity: 0;
80
+ }
81
+
82
+ .modal-toggle:checked + .modal {
83
+ visibility: visible;
84
+ opacity: 1;
85
+ }
86
+
87
+ .modal-toggle:checked + .modal .modal-box {
88
+ transform: scale(1);
89
+ }
90
+
91
+ /* Modal Sizes */
92
+ .modal-sm .modal-box {
93
+ max-width: 20rem;
94
+ }
95
+
96
+ .modal-lg .modal-box {
97
+ max-width: 48rem;
98
+ }
99
+
100
+ .modal-full .modal-box {
101
+ max-width: calc(100vw - 2rem);
102
+ max-height: calc(100vh - 2rem);
103
+ width: 100%;
104
+ height: 100%;
105
+ }
106
+
107
+ /* Modal Positions */
108
+ .modal-top {
109
+ align-items: flex-start;
110
+ padding-top: 2rem;
111
+ }
112
+
113
+ .modal-bottom {
114
+ align-items: flex-end;
115
+ padding-bottom: 2rem;
116
+ }
117
+
118
+ .modal-middle {
119
+ align-items: center;
120
+ }
121
+
122
+ /* Modal Close Button */
123
+ .modal-close {
124
+ position: absolute;
125
+ top: 0.75rem;
126
+ right: 0.75rem;
127
+ display: flex;
128
+ align-items: center;
129
+ justify-content: center;
130
+ width: 2rem;
131
+ height: 2rem;
132
+ font-size: 1.25rem;
133
+ color: var(--color-on-surface-variant);
134
+ background-color: transparent;
135
+ border: none;
136
+ border-radius: 50%;
137
+ cursor: pointer;
138
+ transition: background-color 150ms ease-in-out, color 150ms ease-in-out;
139
+ }
140
+
141
+ .modal-close:hover {
142
+ background-color: var(--color-surface-container);
143
+ color: var(--color-on-surface);
144
+ }
145
+
146
+ .modal-close:focus-visible {
147
+ outline: 2px solid var(--color-primary);
148
+ outline-offset: 2px;
149
+ }
150
+
151
+ /* Modal Header */
152
+ .modal-header {
153
+ margin-bottom: 1rem;
154
+ padding-right: 2rem;
155
+ }
156
+
157
+ .modal-title {
158
+ font-size: 1.25rem;
159
+ font-weight: 600;
160
+ color: var(--color-on-surface);
161
+ margin: 0;
162
+ }
163
+
164
+ /* Modal Body */
165
+ .modal-body {
166
+ color: var(--color-on-surface-variant);
167
+ line-height: 1.5;
168
+ }
169
+
170
+ /* Responsive Modal */
171
+ @media (max-width: 640px) {
172
+ .modal-box {
173
+ max-width: calc(100vw - 2rem);
174
+ margin: 1rem;
175
+ }
176
+
177
+ .modal-responsive {
178
+ align-items: flex-end;
179
+ padding: 0;
180
+ }
181
+
182
+ .modal-responsive .modal-box {
183
+ max-width: 100%;
184
+ max-height: 90vh;
185
+ margin: 0;
186
+ border-radius: 1rem 1rem 0 0;
187
+ }
188
+ }
189
+
190
+ /* Drawer Modal */
191
+ .drawer-modal {
192
+ align-items: stretch;
193
+ justify-content: flex-end;
194
+ padding: 0;
195
+ }
196
+
197
+ .drawer-modal .modal-box {
198
+ max-width: 20rem;
199
+ max-height: 100vh;
200
+ height: 100%;
201
+ margin: 0;
202
+ border-radius: 0;
203
+ transform: translateX(100%);
204
+ }
205
+
206
+ .drawer-modal.modal-open .modal-box,
207
+ .drawer-modal:target .modal-box {
208
+ transform: translateX(0);
209
+ }
210
+
211
+ .drawer-modal-left {
212
+ justify-content: flex-start;
213
+ }
214
+
215
+ .drawer-modal-left .modal-box {
216
+ transform: translateX(-100%);
217
+ }
218
+
219
+ .drawer-modal-left.modal-open .modal-box,
220
+ .drawer-modal-left:target .modal-box {
221
+ transform: translateX(0);
222
+ }
223
+
224
+ /* Alert/Confirm Dialog */
225
+ .alert-dialog {
226
+ text-align: center;
227
+ }
228
+
229
+ .alert-dialog .modal-box {
230
+ max-width: 24rem;
231
+ }
232
+
233
+ .alert-dialog .modal-icon {
234
+ width: 4rem;
235
+ height: 4rem;
236
+ margin: 0 auto 1rem;
237
+ display: flex;
238
+ align-items: center;
239
+ justify-content: center;
240
+ border-radius: 50%;
241
+ font-size: 2rem;
242
+ }
243
+
244
+ .alert-dialog .modal-icon.info {
245
+ background-color: var(--color-info-container);
246
+ color: var(--color-on-info-container);
247
+ }
248
+
249
+ .alert-dialog .modal-icon.success {
250
+ background-color: var(--color-success-container);
251
+ color: var(--color-on-success-container);
252
+ }
253
+
254
+ .alert-dialog .modal-icon.warning {
255
+ background-color: var(--color-warning-container);
256
+ color: var(--color-on-warning-container);
257
+ }
258
+
259
+ .alert-dialog .modal-icon.error {
260
+ background-color: var(--color-error-container);
261
+ color: var(--color-on-error-container);
262
+ }
263
+
264
+ .alert-dialog .modal-action {
265
+ justify-content: center;
266
+ }
267
+
268
+ /* Reduce Motion */
269
+ @media (prefers-reduced-motion: reduce) {
270
+ .modal {
271
+ transition: visibility 0ms, opacity 0ms;
272
+ }
273
+
274
+ .modal-box {
275
+ transition: transform 0ms;
276
+ }
277
+ }
278
+
279
+ /* Focus Trap Helper */
280
+ .modal-focus-trap {
281
+ position: absolute;
282
+ width: 1px;
283
+ height: 1px;
284
+ padding: 0;
285
+ margin: -1px;
286
+ overflow: hidden;
287
+ clip: rect(0, 0, 0, 0);
288
+ white-space: nowrap;
289
+ border: 0;
290
+ }
291
+ }