ui-style-kit-css 2.5.0 → 2.6.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 (61) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +84 -59
  3. package/dist/ui-style-kit.css +4089 -3591
  4. package/dist/ui-style-kit.min.css +3 -3
  5. package/dist/ui-style-kit.visual.css +4089 -3591
  6. package/dist/ui-style-kit.visual.min.css +3 -3
  7. package/dist/ui-style-kit.with-bridge.css +4089 -3591
  8. package/dist/ui-style-kit.with-bridge.min.css +3 -3
  9. package/dist/visual/art-deco.css +696 -339
  10. package/dist/visual/bauhaus.css +2 -2
  11. package/dist/visual/bento.css +2 -2
  12. package/dist/visual/brutalism.css +485 -170
  13. package/dist/visual/clay.css +2 -2
  14. package/dist/visual/cyberpunk.css +578 -263
  15. package/dist/visual/data-terminal.css +577 -262
  16. package/dist/visual/editorial-luxe.css +580 -265
  17. package/dist/visual/industrial-utility.css +644 -329
  18. package/dist/visual/maximalist.css +562 -247
  19. package/dist/visual/minimal-saas.css +511 -196
  20. package/dist/visual/neo-noir.css +2 -2
  21. package/dist/visual/neumorphism.css +534 -219
  22. package/dist/visual/organic-modern.css +2 -2
  23. package/dist/visual/paper-editorial.css +659 -344
  24. package/dist/visual/retro-glass.css +590 -275
  25. package/dist/visual/retrofuturism.css +539 -224
  26. package/dist/visual/tactile.css +552 -237
  27. package/dist/visual/technical-blueprint.css +618 -295
  28. package/dist/visual/y2k.css +521 -206
  29. package/docs/ART-DECO.md +2 -2
  30. package/docs/ECOSYSTEM.md +6 -6
  31. package/docs/PUBLISHING.md +7 -7
  32. package/docs/RELEASE-2.6.0.md +36 -0
  33. package/docs/STYLE-GUIDE.md +10 -0
  34. package/manifest.json +212 -179
  35. package/package.json +29 -1
  36. package/styles/art-deco.css +64 -1
  37. package/styles/bauhaus.css +8 -0
  38. package/styles/bento.css +10 -2
  39. package/styles/brutalism.css +8 -0
  40. package/styles/clay.css +11 -3
  41. package/styles/clean-defaults.css +295 -0
  42. package/styles/component-composition.css +829 -0
  43. package/styles/components.css +3 -3
  44. package/styles/cyberpunk.css +8 -0
  45. package/styles/data-terminal.css +8 -0
  46. package/styles/editorial-luxe.css +8 -0
  47. package/styles/industrial-utility.css +8 -0
  48. package/styles/interactive-surface-theme.css +23 -23
  49. package/styles/maximalist.css +8 -0
  50. package/styles/minimal-saas.css +8 -0
  51. package/styles/native-elements.css +7 -0
  52. package/styles/neo-noir.css +8 -0
  53. package/styles/neumorphism.css +8 -0
  54. package/styles/organic-modern.css +8 -0
  55. package/styles/paper-editorial.css +8 -0
  56. package/styles/retro-glass.css +8 -0
  57. package/styles/retrofuturism.css +8 -0
  58. package/styles/tactile.css +8 -0
  59. package/styles/technical-blueprint.css +16 -1
  60. package/styles/theme-colors.css +3 -0
  61. package/styles/y2k.css +8 -0
@@ -0,0 +1,829 @@
1
+ /* =========================================================
2
+ UI Style Kit CSS - Component Composition
3
+
4
+ Framework-neutral geometry for reusable usk-* component
5
+ classes. Visual paint remains preset-owned.
6
+ ========================================================= */
7
+
8
+ @layer ui-style-kit.components {
9
+ /* Shared component composition keeps icon content aligned without overriding preset paint. */
10
+ .usk-button__icon {
11
+ display: inline-flex;
12
+ flex: 0 0 auto;
13
+ align-items: center;
14
+ justify-content: center;
15
+ line-height: 1;
16
+ }
17
+
18
+ .usk-button-scope,
19
+ .usk-tooltip-anchor {
20
+ display: inline-flex;
21
+ }
22
+
23
+ .usk-toolbar__spacer {
24
+ flex: 1 1 auto;
25
+ }
26
+
27
+ /* Typography and media composition stays responsive while preset CSS owns paint. */
28
+ .usk-heading,
29
+ .usk-text,
30
+ .usk-small,
31
+ .usk-blockquote {
32
+ max-inline-size: 100%;
33
+ overflow-wrap: anywhere;
34
+ }
35
+
36
+ .usk-image,
37
+ .usk-video,
38
+ .usk-audio,
39
+ .usk-iframe,
40
+ .usk-embed,
41
+ .usk-object,
42
+ .usk-canvas,
43
+ .usk-svg {
44
+ max-inline-size: 100%;
45
+ }
46
+
47
+ .usk-image,
48
+ .usk-video,
49
+ .usk-iframe,
50
+ .usk-embed,
51
+ .usk-object,
52
+ .usk-canvas,
53
+ .usk-svg {
54
+ display: block;
55
+ }
56
+
57
+ .usk-image,
58
+ .usk-video {
59
+ block-size: auto;
60
+ }
61
+
62
+ /* Form composition supplements library-owned paint, interaction, and flow contracts. */
63
+ .usk-form-field,
64
+ .usk-form-control {
65
+ min-inline-size: 0;
66
+ }
67
+
68
+ .usk-form-choice {
69
+ max-inline-size: 100%;
70
+ }
71
+
72
+ .usk-form-choice-label {
73
+ min-inline-size: 0;
74
+ overflow-wrap: anywhere;
75
+ }
76
+
77
+ .usk-form-error {
78
+ color: rgb(var(--usk-danger-rgb, 185 63 63));
79
+ }
80
+
81
+ /* Table composition keeps the native semantics usable within responsive layouts. */
82
+ .usk-table-wrap,
83
+ .usk-table {
84
+ min-inline-size: 0;
85
+ max-inline-size: 100%;
86
+ }
87
+
88
+ .usk-table-wrap {
89
+ overscroll-behavior-inline: contain;
90
+ }
91
+
92
+ .usk-table__caption,
93
+ .usk-table__header-cell,
94
+ .usk-table__cell {
95
+ overflow-wrap: anywhere;
96
+ }
97
+
98
+ .usk-table__caption {
99
+ text-align: start;
100
+ }
101
+
102
+ /* Shared composition for compact feedback and status primitives. */
103
+ .usk-badge,
104
+ .usk-alert__title,
105
+ .usk-alert__body {
106
+ overflow-wrap: anywhere;
107
+ }
108
+
109
+ .usk-loader {
110
+ display: inline-flex;
111
+ align-items: center;
112
+ max-inline-size: 100%;
113
+ gap: 0.5rem;
114
+ }
115
+
116
+ .usk-loader--sm {
117
+ --usk-loader-size: 0.875rem;
118
+ }
119
+
120
+ .usk-loader--md {
121
+ --usk-loader-size: 1.25rem;
122
+ }
123
+
124
+ .usk-loader--lg {
125
+ --usk-loader-size: 1.75rem;
126
+ }
127
+
128
+ .usk-loader__spinner {
129
+ inline-size: var(--usk-loader-size);
130
+ block-size: var(--usk-loader-size);
131
+ flex: 0 0 auto;
132
+ }
133
+
134
+ .usk-loader__label {
135
+ min-inline-size: 0;
136
+ overflow-wrap: anywhere;
137
+ }
138
+
139
+ .usk-visually-hidden {
140
+ position: absolute;
141
+ inline-size: 1px;
142
+ block-size: 1px;
143
+ padding: 0;
144
+ margin: -1px;
145
+ overflow: hidden;
146
+ clip-path: inset(50%);
147
+ white-space: nowrap;
148
+ border: 0;
149
+ }
150
+
151
+ .usk-skip-link {
152
+ position: fixed;
153
+ z-index: var(--usk-skip-link-z-index, 1100);
154
+ inset-block-start: -10rem;
155
+ inset-inline-start: 1rem;
156
+ }
157
+
158
+ .usk-skip-link:focus-visible {
159
+ inset-block-start: 1rem;
160
+ }
161
+
162
+ /* Value-bearing controls use preset paint while this library owns composition. */
163
+ .usk-progress-field {
164
+ display: grid;
165
+ min-inline-size: 0;
166
+ gap: 0.375rem;
167
+ }
168
+
169
+ .usk-progress__header {
170
+ display: flex;
171
+ align-items: baseline;
172
+ justify-content: space-between;
173
+ min-inline-size: 0;
174
+ gap: 1rem;
175
+ }
176
+
177
+ .usk-progress__label {
178
+ min-inline-size: 0;
179
+ overflow-wrap: anywhere;
180
+ }
181
+
182
+ .usk-progress__value {
183
+ flex: 0 0 auto;
184
+ font-variant-numeric: tabular-nums;
185
+ }
186
+
187
+ .usk-meter-field {
188
+ display: grid;
189
+ min-inline-size: 0;
190
+ gap: 0.375rem;
191
+ }
192
+
193
+ .usk-meter__header {
194
+ display: flex;
195
+ align-items: baseline;
196
+ justify-content: space-between;
197
+ min-inline-size: 0;
198
+ gap: 1rem;
199
+ }
200
+
201
+ .usk-meter__label {
202
+ min-inline-size: 0;
203
+ overflow-wrap: anywhere;
204
+ }
205
+
206
+ .usk-meter__value {
207
+ flex: 0 0 auto;
208
+ font-variant-numeric: tabular-nums;
209
+ }
210
+
211
+ .usk-meter {
212
+ inline-size: 100%;
213
+ }
214
+
215
+ .usk-toast-stack {
216
+ position: fixed;
217
+ inset-block-end: 1rem;
218
+ inset-inline-end: 1rem;
219
+ z-index: var(--usk-toast-stack-z-index, 1000);
220
+ inline-size: min(24rem, calc(100vw - 2rem));
221
+ }
222
+
223
+ .usk-progress {
224
+ inline-size: 100%;
225
+ overflow: hidden;
226
+ }
227
+
228
+ .usk-progress__bar {
229
+ display: block;
230
+ block-size: 100%;
231
+ transition: width 160ms ease;
232
+ }
233
+
234
+ .usk-progress--indeterminate .usk-progress__bar {
235
+ inline-size: 40%;
236
+ animation: usk-progress-indeterminate 1.2s ease-in-out infinite;
237
+ }
238
+
239
+ .usk-slider {
240
+ display: grid;
241
+ grid-template-columns: minmax(0, 1fr) auto;
242
+ align-items: center;
243
+ gap: 0.375rem 0.75rem;
244
+ }
245
+
246
+ .usk-slider .usk-form-label,
247
+ .usk-slider .usk-form-help,
248
+ .usk-slider .usk-form-error {
249
+ grid-column: 1 / -1;
250
+ }
251
+
252
+ .usk-slider__control {
253
+ inline-size: 100%;
254
+ min-inline-size: 0;
255
+ }
256
+
257
+ .usk-slider__value {
258
+ min-inline-size: 3ch;
259
+ font-variant-numeric: tabular-nums;
260
+ text-align: end;
261
+ }
262
+
263
+ @keyframes usk-progress-indeterminate {
264
+ from {
265
+ transform: translateX(-110%);
266
+ }
267
+
268
+ to {
269
+ transform: translateX(260%);
270
+ }
271
+ }
272
+
273
+ @media (prefers-reduced-motion: reduce) {
274
+ .usk-progress__bar {
275
+ transition: none;
276
+ }
277
+
278
+ .usk-progress--indeterminate .usk-progress__bar {
279
+ animation: none;
280
+ }
281
+ }
282
+
283
+ /* Generic tooltip geometry complements the preset-owned `.usk-tooltip` appearance. */
284
+ .usk-tooltip-anchor {
285
+ position: relative;
286
+ }
287
+
288
+ .usk-tooltip {
289
+ position: absolute;
290
+ z-index: var(--usk-tooltip-z-index, 1000);
291
+ inline-size: max-content;
292
+ max-inline-size: min(20rem, calc(100vw - 2rem));
293
+ pointer-events: none;
294
+ }
295
+
296
+ .usk-tooltip--top,
297
+ .usk-tooltip--bottom {
298
+ inset-inline-start: 50%;
299
+ transform: translateX(-50%);
300
+ }
301
+
302
+ .usk-tooltip--top {
303
+ inset-block-end: calc(100% + var(--usk-tooltip-offset, 0.5rem));
304
+ }
305
+
306
+ .usk-tooltip--bottom {
307
+ inset-block-start: calc(100% + var(--usk-tooltip-offset, 0.5rem));
308
+ }
309
+
310
+ .usk-tooltip--right,
311
+ .usk-tooltip--left {
312
+ inset-block-start: 50%;
313
+ transform: translateY(-50%);
314
+ }
315
+
316
+ .usk-tooltip--right {
317
+ inset-inline-start: calc(100% + var(--usk-tooltip-offset, 0.5rem));
318
+ }
319
+
320
+ .usk-tooltip--left {
321
+ inset-inline-end: calc(100% + var(--usk-tooltip-offset, 0.5rem));
322
+ }
323
+
324
+ /* Native dialog geometry preserves UI Style Kit paint and platform top-layer behavior. */
325
+ .usk-modal {
326
+ inline-size: min(var(--usk-modal-width, 42rem), calc(100vw - 2rem));
327
+ max-inline-size: calc(100vw - 2rem);
328
+ max-block-size: calc(100svh - 2rem);
329
+ margin: auto;
330
+ overflow: hidden;
331
+ overscroll-behavior: contain;
332
+ }
333
+
334
+ .usk-modal--sm {
335
+ --usk-modal-width: 28rem;
336
+ }
337
+
338
+ .usk-modal--md {
339
+ --usk-modal-width: 42rem;
340
+ }
341
+
342
+ .usk-modal--lg {
343
+ --usk-modal-width: 64rem;
344
+ }
345
+
346
+ .usk-modal--full {
347
+ --usk-modal-width: calc(100vw - 2rem);
348
+ }
349
+
350
+ .usk-modal__surface {
351
+ display: grid;
352
+ grid-template-rows: auto auto minmax(0, 1fr) auto;
353
+ max-block-size: calc(100svh - 2rem);
354
+ gap: 0;
355
+ }
356
+
357
+ .usk-modal__header,
358
+ .usk-modal__footer {
359
+ min-inline-size: 0;
360
+ padding: var(--usk-modal-padding, 1rem);
361
+ }
362
+
363
+ .usk-modal__header {
364
+ flex-wrap: nowrap;
365
+ justify-content: space-between;
366
+ border-block-end: 1px solid var(--usk-native-border, currentColor);
367
+ }
368
+
369
+ .usk-modal__title {
370
+ min-inline-size: 0;
371
+ margin: 0;
372
+ overflow-wrap: anywhere;
373
+ }
374
+
375
+ .usk-modal__close {
376
+ flex: 0 0 auto;
377
+ }
378
+
379
+ .usk-modal__description {
380
+ margin: 0;
381
+ padding: var(--usk-modal-padding, 1rem);
382
+ padding-block-end: 0;
383
+ overflow-wrap: anywhere;
384
+ }
385
+
386
+ .usk-modal__body {
387
+ min-block-size: 0;
388
+ min-inline-size: 0;
389
+ padding: var(--usk-modal-padding, 1rem);
390
+ overflow: auto;
391
+ overscroll-behavior: contain;
392
+ }
393
+
394
+ .usk-modal__footer {
395
+ justify-content: flex-end;
396
+ border-block-start: 1px solid var(--usk-native-border, currentColor);
397
+ }
398
+
399
+ /* Drawers reuse modal behavior and only replace the top-layer edge geometry. */
400
+ .usk-drawer {
401
+ --usk-modal-width: min(24rem, calc(100vw - 2rem));
402
+
403
+ border-radius: 0;
404
+ }
405
+
406
+ .usk-drawer--left,
407
+ .usk-drawer--right {
408
+ inline-size: min(var(--usk-modal-width), calc(100vw - 2rem));
409
+ block-size: 100svh;
410
+ max-block-size: 100svh;
411
+ }
412
+
413
+ .usk-drawer--left {
414
+ margin: 0 auto 0 0;
415
+ }
416
+
417
+ .usk-drawer--right {
418
+ margin: 0 0 0 auto;
419
+ }
420
+
421
+ .usk-drawer--top,
422
+ .usk-drawer--bottom {
423
+ inline-size: 100vw;
424
+ max-inline-size: 100vw;
425
+ max-block-size: min(80svh, 40rem);
426
+ }
427
+
428
+ .usk-drawer--top {
429
+ margin: 0 auto auto;
430
+ }
431
+
432
+ .usk-drawer--bottom {
433
+ margin: auto auto 0;
434
+ }
435
+
436
+ .usk-drawer .usk-modal__surface {
437
+ block-size: 100%;
438
+ max-block-size: inherit;
439
+ }
440
+
441
+ /* Screen-edge navigation uses Layout Style flow and UI Style Kit toolbar paint. */
442
+ .usk-navigation {
443
+ z-index: var(--usk-navigation-z-index, 900);
444
+ min-inline-size: 0;
445
+ max-inline-size: 100%;
446
+ gap: var(--usk-navigation-gap, 0.5rem);
447
+ padding: var(--usk-navigation-padding, 0.5rem);
448
+ overflow: auto;
449
+ overscroll-behavior: contain;
450
+ scrollbar-gutter: stable;
451
+ }
452
+
453
+ .usk-navigation--top,
454
+ .usk-navigation--bottom {
455
+ inline-size: 100%;
456
+ flex-wrap: nowrap;
457
+ }
458
+
459
+ .usk-navigation--left,
460
+ .usk-navigation--right {
461
+ align-self: start;
462
+ max-block-size: 100svh;
463
+ }
464
+
465
+ .usk-navigation--sticky {
466
+ position: sticky;
467
+ }
468
+
469
+ .usk-navigation--top.usk-navigation--sticky {
470
+ inset-block-start: 0;
471
+ }
472
+
473
+ .usk-navigation--bottom.usk-navigation--sticky {
474
+ inset-block-end: 0;
475
+ }
476
+
477
+ .usk-navigation--left.usk-navigation--sticky,
478
+ .usk-navigation--right.usk-navigation--sticky {
479
+ inset-block-start: 0;
480
+ }
481
+
482
+ .usk-navigation--left.usk-navigation--sticky {
483
+ inset-inline-start: 0;
484
+ }
485
+
486
+ .usk-navigation--right.usk-navigation--sticky {
487
+ inset-inline-end: 0;
488
+ }
489
+
490
+ .usk-navigation--top.usk-navigation--safe-area {
491
+ padding-block-start: max(
492
+ var(--usk-navigation-padding, 0.5rem),
493
+ env(safe-area-inset-top)
494
+ );
495
+ }
496
+
497
+ .usk-navigation--right.usk-navigation--safe-area {
498
+ padding-inline-end: max(
499
+ var(--usk-navigation-padding, 0.5rem),
500
+ env(safe-area-inset-right)
501
+ );
502
+ }
503
+
504
+ .usk-navigation--bottom.usk-navigation--safe-area {
505
+ padding-block-end: max(
506
+ var(--usk-navigation-padding, 0.5rem),
507
+ env(safe-area-inset-bottom)
508
+ );
509
+ }
510
+
511
+ .usk-navigation--left.usk-navigation--safe-area {
512
+ padding-inline-start: max(
513
+ var(--usk-navigation-padding, 0.5rem),
514
+ env(safe-area-inset-left)
515
+ );
516
+ }
517
+
518
+ /* Section navigation switches one content tree between persistent and drawer modes. */
519
+ .usk-section-navigation {
520
+ inline-size: min(var(--usk-section-navigation-width, 18rem), 100%);
521
+ min-inline-size: 0;
522
+ max-inline-size: 100%;
523
+ }
524
+
525
+ .usk-section-navigation__title {
526
+ padding: var(--usk-navigation-padding, 0.5rem);
527
+ overflow-wrap: anywhere;
528
+ font-weight: 700;
529
+ }
530
+
531
+ .usk-section-navigation__navigation {
532
+ inline-size: 100%;
533
+ align-items: stretch;
534
+ }
535
+
536
+ .usk-section-navigation-mobile {
537
+ display: inline-flex;
538
+ max-inline-size: 100%;
539
+ }
540
+
541
+ .usk-section-navigation__trigger {
542
+ min-inline-size: 2.75rem;
543
+ min-block-size: 2.75rem;
544
+ }
545
+
546
+ .usk-section-navigation__drawer .usk-navigation {
547
+ inline-size: 100%;
548
+ max-block-size: none;
549
+ padding: 0;
550
+ overflow: visible;
551
+ scrollbar-gutter: auto;
552
+ }
553
+
554
+ /* Portable content shells retain Layout Style flow while UI Style Kit owns paint. */
555
+ .usk-content-section,
556
+ .usk-accordion,
557
+ .usk-content-renderer,
558
+ .usk-rich-text {
559
+ min-inline-size: 0;
560
+ }
561
+
562
+ .usk-content-section {
563
+ overflow: clip;
564
+ }
565
+
566
+ .usk-content-section__header,
567
+ .usk-content-section__body,
568
+ .usk-accordion__panel {
569
+ padding: var(--usk-content-padding, 1rem);
570
+ }
571
+
572
+ .usk-content-section__heading-content,
573
+ .usk-content-section__heading-copy {
574
+ display: flex;
575
+ min-inline-size: 0;
576
+ }
577
+
578
+ .usk-content-section__heading-content {
579
+ inline-size: 100%;
580
+ align-items: center;
581
+ gap: var(--usk-content-gap, 0.75rem);
582
+ text-align: start;
583
+ }
584
+
585
+ .usk-content-section__heading-copy {
586
+ flex: 1 1 auto;
587
+ flex-direction: column;
588
+ gap: 0.25rem;
589
+ }
590
+
591
+ .usk-content-section__title,
592
+ .usk-accordion__title,
593
+ .usk-accordion__heading {
594
+ margin: 0;
595
+ }
596
+
597
+ .usk-content-section__eyebrow {
598
+ font-size: 0.75em;
599
+ font-weight: 700;
600
+ letter-spacing: 0.08em;
601
+ text-transform: uppercase;
602
+ }
603
+
604
+ .usk-content-section__subtitle,
605
+ .usk-content-section__title,
606
+ .usk-accordion__trigger {
607
+ overflow-wrap: anywhere;
608
+ }
609
+
610
+ .usk-content-section__trigger,
611
+ .usk-accordion__trigger {
612
+ inline-size: 100%;
613
+ justify-content: space-between;
614
+ text-align: start;
615
+ }
616
+
617
+ .usk-content-section__indicator,
618
+ .usk-content-section__icon {
619
+ flex: 0 0 auto;
620
+ }
621
+
622
+ .usk-accordion__items {
623
+ gap: var(--usk-accordion-gap, 0.75rem);
624
+ }
625
+
626
+ .usk-accordion__item {
627
+ overflow: clip;
628
+ }
629
+
630
+ .usk-accordion__heading .usk-accordion__trigger {
631
+ border-radius: inherit;
632
+ }
633
+
634
+ .usk-rich-text {
635
+ overflow-wrap: anywhere;
636
+ }
637
+
638
+ .usk-rich-text > :first-child {
639
+ margin-block-start: 0;
640
+ }
641
+
642
+ .usk-rich-text > :last-child {
643
+ margin-block-end: 0;
644
+ }
645
+
646
+ .usk-rich-text pre {
647
+ max-inline-size: 100%;
648
+ overflow: auto;
649
+ }
650
+
651
+ /* Preview surfaces provide responsive geometry without replacing theme paint. */
652
+ .usk-document-preview__viewport,
653
+ .usk-image-preview__viewport {
654
+ min-inline-size: 0;
655
+ max-inline-size: 100%;
656
+ overflow: auto;
657
+ overscroll-behavior: contain;
658
+ }
659
+
660
+ .usk-document-preview__paper {
661
+ inline-size: min(100%, var(--usk-document-preview-width, 52rem));
662
+ min-block-size: var(--usk-document-preview-min-height, 36rem);
663
+ margin-inline: auto;
664
+ padding: var(--usk-document-preview-padding, clamp(1rem, 4vw, 3rem));
665
+ background: var(--usk-native-surface, Canvas);
666
+ color: var(--usk-native-text, CanvasText);
667
+ box-shadow: var(--usk-native-shadow, 0 0.5rem 2rem rgb(0 0 0 / 15%));
668
+ }
669
+
670
+ .usk-document-preview__actions,
671
+ .usk-image-preview__controls {
672
+ justify-content: flex-end;
673
+ }
674
+
675
+ .usk-image-preview {
676
+ min-inline-size: 0;
677
+ margin: 0;
678
+ }
679
+
680
+ .usk-image-preview__trigger {
681
+ inline-size: 100%;
682
+ padding: 0;
683
+ overflow: hidden;
684
+ }
685
+
686
+ .usk-image-preview__thumbnail {
687
+ inline-size: 100%;
688
+ }
689
+
690
+ .usk-image-preview__caption,
691
+ .usk-image-preview__modal-caption {
692
+ margin-block-start: 0.5rem;
693
+ overflow-wrap: anywhere;
694
+ }
695
+
696
+ .usk-image-preview__viewport {
697
+ display: grid;
698
+ min-block-size: min(60svh, 32rem);
699
+ place-items: center;
700
+ }
701
+
702
+ .usk-image-preview__expanded {
703
+ max-inline-size: 100%;
704
+ max-block-size: 70svh;
705
+ transform-origin: center;
706
+ }
707
+
708
+ /* Application framing and global utilities remain product-neutral. */
709
+ .usk-footer {
710
+ min-inline-size: 0;
711
+ gap: var(--usk-footer-gap, 1rem);
712
+ padding: var(--usk-footer-padding, 1rem);
713
+ }
714
+
715
+ .usk-footer__content,
716
+ .usk-footer__meta {
717
+ min-inline-size: 0;
718
+ }
719
+
720
+ .usk-footer__meta {
721
+ justify-content: space-between;
722
+ }
723
+
724
+ .usk-footer__actions {
725
+ justify-content: flex-end;
726
+ }
727
+
728
+ .usk-back-to-top {
729
+ position: fixed;
730
+ z-index: var(--usk-back-to-top-z-index, 850);
731
+ inset-inline-end: max(1rem, env(safe-area-inset-right));
732
+ inset-block-end: max(1rem, env(safe-area-inset-bottom));
733
+ transition:
734
+ opacity 160ms ease-out,
735
+ visibility 160ms ease-out;
736
+ }
737
+
738
+ .usk-back-to-top.is-hidden {
739
+ visibility: hidden;
740
+ pointer-events: none;
741
+ opacity: 0;
742
+ }
743
+
744
+ .usk-back-to-top.is-visible {
745
+ visibility: visible;
746
+ opacity: 1;
747
+ }
748
+
749
+ .usk-accessibility-menu {
750
+ gap: var(--usk-accessibility-menu-gap, 1rem);
751
+ }
752
+
753
+ @media print {
754
+ .usk-document-preview__actions,
755
+ .usk-back-to-top {
756
+ display: none;
757
+ }
758
+
759
+ .usk-document-preview__paper {
760
+ inline-size: 100%;
761
+ min-block-size: 0;
762
+ padding: 0;
763
+ box-shadow: none;
764
+ }
765
+ }
766
+
767
+ @media (prefers-reduced-motion: no-preference) {
768
+ .usk-modal[open] {
769
+ animation: usk-modal-enter 160ms ease-out;
770
+ }
771
+
772
+ .usk-drawer--left[open] {
773
+ animation-name: usk-drawer-enter-left;
774
+ }
775
+
776
+ .usk-drawer--right[open] {
777
+ animation-name: usk-drawer-enter-right;
778
+ }
779
+
780
+ .usk-drawer--top[open] {
781
+ animation-name: usk-drawer-enter-top;
782
+ }
783
+
784
+ .usk-drawer--bottom[open] {
785
+ animation-name: usk-drawer-enter-bottom;
786
+ }
787
+ }
788
+
789
+ @media (prefers-reduced-motion: reduce) {
790
+ .usk-back-to-top {
791
+ transition: none;
792
+ }
793
+ }
794
+
795
+ @keyframes usk-modal-enter {
796
+ from {
797
+ opacity: 0;
798
+ transform: scale(0.98);
799
+ }
800
+ }
801
+
802
+ @keyframes usk-drawer-enter-left {
803
+ from {
804
+ opacity: 0;
805
+ transform: translateX(-1.5rem);
806
+ }
807
+ }
808
+
809
+ @keyframes usk-drawer-enter-right {
810
+ from {
811
+ opacity: 0;
812
+ transform: translateX(1.5rem);
813
+ }
814
+ }
815
+
816
+ @keyframes usk-drawer-enter-top {
817
+ from {
818
+ opacity: 0;
819
+ transform: translateY(-1.5rem);
820
+ }
821
+ }
822
+
823
+ @keyframes usk-drawer-enter-bottom {
824
+ from {
825
+ opacity: 0;
826
+ transform: translateY(1.5rem);
827
+ }
828
+ }
829
+ }