barua-ui 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.
@@ -0,0 +1,574 @@
1
+ /* ==========================================================================
2
+ Barua UI — Overlays
3
+ Modal/Dialog, Alert Dialog, Sheet, Bottom Sheet, Popover, Tooltip,
4
+ Hover Card, Lightbox, Fullscreen Overlay.
5
+ Built on native <dialog> and the Popover API.
6
+ ========================================================================== */
7
+
8
+ @layer components {
9
+ /* ---- Modal / Dialog ------------------------------------------------------ */
10
+ .b-modal {
11
+ width: min(28rem, calc(100vw - 2rem));
12
+ padding: 0;
13
+ background: var(--b-elevated);
14
+ color: var(--b-text);
15
+ border: 1px solid var(--b-hairline);
16
+ border-radius: var(--b-radius-xl);
17
+ box-shadow: var(--b-elevation-5);
18
+ transition: opacity var(--b-duration-normal) var(--b-ease-out),
19
+ scale var(--b-duration-normal) var(--b-ease-spring),
20
+ display var(--b-duration-normal) allow-discrete,
21
+ overlay var(--b-duration-normal) allow-discrete;
22
+ }
23
+ /* Hidden-state props live on the CLOSED selector so a static (non-dialog
24
+ or [open]) instance renders normally. */
25
+ dialog.b-modal:not([open]) { opacity: 0; scale: 0.96; }
26
+ .b-modal[open] { opacity: 1; scale: 1; }
27
+ @starting-style {
28
+ .b-modal[open] { opacity: 0; scale: 0.96; }
29
+ }
30
+ .b-modal::backdrop {
31
+ background: var(--b-scrim);
32
+ -webkit-backdrop-filter: blur(var(--b-blur-xs));
33
+ backdrop-filter: blur(var(--b-blur-xs));
34
+ transition: opacity var(--b-duration-normal) var(--b-ease-out),
35
+ display var(--b-duration-normal) allow-discrete,
36
+ overlay var(--b-duration-normal) allow-discrete;
37
+ opacity: 0;
38
+ }
39
+ .b-modal[open]::backdrop { opacity: 1; }
40
+ @starting-style {
41
+ .b-modal[open]::backdrop { opacity: 0; }
42
+ }
43
+
44
+ .b-modal--glass {
45
+ position: relative;
46
+ background: color-mix(in srgb, var(--b-elevated) 82%, transparent);
47
+ -webkit-backdrop-filter: var(--b-glass-heavy);
48
+ backdrop-filter: var(--b-glass-heavy);
49
+ border-color: light-dark(rgba(255, 255, 255, 0.18), rgba(255, 255, 255, 0.04));
50
+ box-shadow: var(--b-glass-shadow);
51
+ overflow: hidden;
52
+ }
53
+ .b-modal--glass::before {
54
+ content: "";
55
+ position: absolute;
56
+ inset: 0;
57
+ border-radius: inherit;
58
+ box-shadow: var(--b-glass-edge);
59
+ pointer-events: none;
60
+ }
61
+
62
+ .b-modal--glass :is(.b-input, .b-textarea, .b-select) {
63
+ background: var(--b-fill-quaternary);
64
+ }
65
+ .b-modal--sm { width: min(22rem, calc(100vw - 2rem)); }
66
+ .b-modal--lg { width: min(40rem, calc(100vw - 2rem)); }
67
+ .b-modal--xl { width: min(56rem, calc(100vw - 2rem)); }
68
+
69
+ .b-modal__header {
70
+ display: flex;
71
+ align-items: center;
72
+ justify-content: space-between;
73
+ gap: var(--b-space-3);
74
+ padding: var(--b-space-4) var(--b-space-5);
75
+ border-bottom: 1px solid var(--b-separator);
76
+ }
77
+ .b-modal__title { font-size: var(--b-text-headline); font-weight: var(--b-weight-semibold); }
78
+ .b-modal__body { padding: var(--b-space-5); max-height: 65vh; overflow: auto; }
79
+ .b-modal__footer {
80
+ display: flex;
81
+ justify-content: flex-end;
82
+ gap: var(--b-space-2);
83
+ padding: var(--b-space-4) var(--b-space-5);
84
+ border-top: 1px solid var(--b-separator);
85
+ }
86
+ .b-modal__close {
87
+ display: grid;
88
+ place-items: center;
89
+ width: 1.75rem; height: 1.75rem;
90
+ font-size: var(--b-text-callout);
91
+ color: var(--b-text-secondary);
92
+ background: var(--b-fill-tertiary);
93
+ border: none;
94
+ border-radius: 50%;
95
+ cursor: pointer;
96
+ transition: background var(--b-duration-fast);
97
+ }
98
+ .b-modal__close:hover { background: var(--b-fill-secondary); color: var(--b-text); }
99
+
100
+ /* ---- Alert Dialog (centered, compact) --------------------------------------- */
101
+ .b-alert-dialog { width: min(18.5rem, calc(100vw - 2rem)); text-align: center; }
102
+ .b-alert-dialog .b-modal__body {
103
+ padding: var(--b-space-6) var(--b-space-5) var(--b-space-4);
104
+ }
105
+ .b-alert-dialog__title { font-size: var(--b-text-headline); font-weight: var(--b-weight-semibold); }
106
+ .b-alert-dialog__desc {
107
+ margin-block-start: var(--b-space-1);
108
+ font-size: var(--b-text-footnote);
109
+ color: var(--b-text-secondary);
110
+ }
111
+ .b-alert-dialog__actions {
112
+ display: flex;
113
+ flex-direction: column;
114
+ border-top: 1px solid var(--b-separator);
115
+ }
116
+ .b-alert-dialog__actions button {
117
+ padding: var(--b-space-3);
118
+ font-size: var(--b-text-body);
119
+ font-weight: var(--b-weight-medium);
120
+ color: var(--b-color-accent-text);
121
+ background: none;
122
+ border: none;
123
+ cursor: pointer;
124
+ }
125
+ .b-alert-dialog__actions button:hover { background: var(--b-fill-quaternary); }
126
+ .b-alert-dialog__actions button + button { border-top: 1px solid var(--b-separator); }
127
+ .b-alert-dialog__actions .is-destructive { color: var(--b-color-danger); }
128
+ .b-alert-dialog__actions .is-primary { font-weight: var(--b-weight-semibold); }
129
+ .b-alert-dialog__actions--row { flex-direction: row; }
130
+ .b-alert-dialog__actions--row button { flex: 1; }
131
+ .b-alert-dialog__actions--row button + button {
132
+ border-top: none;
133
+ border-inline-start: 1px solid var(--b-separator);
134
+ }
135
+
136
+ /* ---- Sheet (side) ------------------------------------------------------------- */
137
+ .b-sheet {
138
+ position: fixed;
139
+ inset-block: 0;
140
+ inset-inline-start: auto;
141
+ inset-inline-end: 0;
142
+ margin: 0;
143
+ width: min(26rem, 92vw);
144
+ max-height: none;
145
+ height: 100dvh;
146
+ padding: 0;
147
+ background: var(--b-elevated);
148
+ border: none;
149
+ border-inline-start: 1px solid var(--b-hairline);
150
+ box-shadow: var(--b-elevation-5);
151
+ transition: translate var(--b-duration-slow) var(--b-ease-spring),
152
+ display var(--b-duration-slow) allow-discrete,
153
+ overlay var(--b-duration-slow) allow-discrete;
154
+ }
155
+ dialog.b-sheet:not([open]) { translate: 100% 0; }
156
+ .b-sheet[open] { translate: 0 0; }
157
+ @starting-style {
158
+ .b-sheet[open] { translate: 100% 0; }
159
+ }
160
+ .b-sheet::backdrop { background: var(--b-scrim); }
161
+ .b-sheet__header {
162
+ display: flex;
163
+ align-items: center;
164
+ justify-content: space-between;
165
+ padding: var(--b-space-4) var(--b-space-5);
166
+ border-bottom: 1px solid var(--b-separator);
167
+ }
168
+ .b-sheet__body { padding: var(--b-space-5); overflow-y: auto; height: 100%; }
169
+
170
+ /* ---- Bottom Sheet --------------------------------------------------------------- */
171
+ .b-bottom-sheet {
172
+ position: fixed;
173
+ inset-inline: 0;
174
+ inset-block-start: auto;
175
+ inset-block-end: 0;
176
+ margin: 0 auto;
177
+ width: min(34rem, 100vw);
178
+ max-height: 85dvh;
179
+ padding: 0;
180
+ background: var(--b-material-thick-bg);
181
+ -webkit-backdrop-filter: var(--b-glass-heavy);
182
+ backdrop-filter: var(--b-glass-heavy);
183
+ border: 1px solid light-dark(rgba(255, 255, 255, 0.18), rgba(255, 255, 255, 0.04));
184
+ border-bottom: none;
185
+ border-radius: var(--b-radius-2xl) var(--b-radius-2xl) 0 0;
186
+ box-shadow: var(--b-glass-shadow);
187
+ overflow: hidden;
188
+ transition: translate var(--b-duration-slow) var(--b-ease-spring),
189
+ display var(--b-duration-slow) allow-discrete,
190
+ overlay var(--b-duration-slow) allow-discrete;
191
+ }
192
+ .b-bottom-sheet::before {
193
+ content: "";
194
+ position: absolute;
195
+ inset: 0;
196
+ border-radius: inherit;
197
+ box-shadow: var(--b-glass-edge);
198
+ pointer-events: none;
199
+ z-index: 1;
200
+ }
201
+ dialog.b-bottom-sheet:not([open]),
202
+ .b-bottom-sheet[popover]:not(:popover-open) { translate: 0 100%; }
203
+ .b-bottom-sheet[open] { translate: 0 0; }
204
+ @starting-style {
205
+ .b-bottom-sheet[open] { translate: 0 100%; }
206
+ }
207
+ .b-bottom-sheet::backdrop { background: var(--b-scrim); }
208
+ .b-bottom-sheet__grabber {
209
+ width: 2.25rem;
210
+ height: 0.3rem;
211
+ margin: var(--b-space-2) auto 0;
212
+ background: var(--b-fill);
213
+ border-radius: var(--b-radius-full);
214
+ }
215
+ .b-bottom-sheet__body {
216
+ padding: var(--b-space-4) var(--b-space-5);
217
+ padding-bottom: max(var(--b-space-5), env(safe-area-inset-bottom));
218
+ overflow-y: auto;
219
+ }
220
+
221
+
222
+ /* ---- Action Sheet (SwiftUI confirmationDialog) ---------------------------
223
+ Bottom-anchored stack: a glass group of choices, then a separate Cancel.
224
+ ----------------------------------------------------------------------------- */
225
+ .b-action-sheet {
226
+ position: fixed;
227
+ inset-inline: 0;
228
+ inset-block-start: auto;
229
+ inset-block-end: 0;
230
+ margin: 0 auto;
231
+ width: min(26rem, calc(100vw - 1rem));
232
+ max-height: 85dvh;
233
+ padding: var(--b-space-2);
234
+ padding-bottom: max(var(--b-space-2), env(safe-area-inset-bottom));
235
+ background: transparent;
236
+ border: none;
237
+ box-shadow: none;
238
+ overflow: visible;
239
+ transition: translate var(--b-duration-slow) var(--b-ease-spring),
240
+ display var(--b-duration-slow) allow-discrete,
241
+ overlay var(--b-duration-slow) allow-discrete;
242
+ }
243
+ dialog.b-action-sheet:not([open]) { translate: 0 100%; }
244
+ .b-action-sheet[open] { translate: 0 0; }
245
+ @starting-style {
246
+ .b-action-sheet[open] { translate: 0 100%; }
247
+ }
248
+ .b-action-sheet::backdrop { background: var(--b-scrim); }
249
+ .b-action-sheet__group {
250
+ background: var(--b-material-thick-bg);
251
+ -webkit-backdrop-filter: var(--b-glass-heavy);
252
+ backdrop-filter: var(--b-glass-heavy);
253
+ border: 1px solid var(--b-hairline);
254
+ border-radius: var(--b-radius-lg);
255
+ box-shadow: var(--b-glass-edge), var(--b-shadow-lg);
256
+ overflow: hidden;
257
+ }
258
+ .b-action-sheet__title {
259
+ padding: var(--b-space-3) var(--b-space-4);
260
+ font-size: var(--b-text-footnote);
261
+ color: var(--b-text-secondary);
262
+ text-align: center;
263
+ }
264
+ .b-action-sheet__group button {
265
+ display: block;
266
+ width: 100%;
267
+ padding: var(--b-space-3);
268
+ font-size: var(--b-text-body);
269
+ color: var(--b-color-accent-text);
270
+ text-align: center;
271
+ background: none;
272
+ border: none;
273
+ border-top: 1px solid var(--b-separator);
274
+ cursor: pointer;
275
+ }
276
+ .b-action-sheet__group button:first-child { border-top: none; }
277
+ .b-action-sheet__group button:hover { background: var(--b-fill-quaternary); }
278
+ .b-action-sheet__group button.is-destructive { color: var(--b-color-danger); }
279
+ .b-action-sheet__cancel {
280
+ margin-block-start: var(--b-space-2);
281
+ font-weight: var(--b-weight-semibold);
282
+ }
283
+ .b-action-sheet__cancel button { border-top: none; font-weight: var(--b-weight-semibold); }
284
+
285
+ /* Bottom sheet detents (SwiftUI presentationDetents) */
286
+ .b-bottom-sheet--medium { max-height: 50dvh; }
287
+ .b-bottom-sheet--large { max-height: 92dvh; }
288
+
289
+ /* ---- Popover (positioned card) ---------------------------------------------------- */
290
+ .b-popover {
291
+ padding: var(--b-space-4);
292
+ min-width: 14rem;
293
+ max-width: 20rem;
294
+ background: color-mix(in srgb, var(--b-elevated) 88%, transparent);
295
+ -webkit-backdrop-filter: var(--b-glass);
296
+ backdrop-filter: var(--b-glass);
297
+ border: 1px solid light-dark(rgba(255, 255, 255, 0.18), rgba(255, 255, 255, 0.04));
298
+ border-radius: var(--b-radius-lg);
299
+ box-shadow: var(--b-glass-shadow);
300
+ font-size: var(--b-text-footnote);
301
+ position: relative;
302
+ overflow: hidden;
303
+ }
304
+ .b-popover::before {
305
+ content: "";
306
+ position: absolute;
307
+ inset: 0;
308
+ border-radius: inherit;
309
+ box-shadow: var(--b-glass-edge);
310
+ pointer-events: none;
311
+ }
312
+ /* Popovers open centered (native popover centering); use --anchored
313
+ when positioning against a trigger yourself. */
314
+ .b-popover[popover] { position: fixed; overflow: visible; }
315
+ .b-popover--anchored[popover] { inset: auto; margin: 0; }
316
+ .b-popover[popover]:popover-open { animation: b-pop-in var(--b-duration-fast) var(--b-ease-out); }
317
+ @keyframes b-pop-in {
318
+ from { opacity: 0; scale: 0.96; translate: 0 -3px; }
319
+ }
320
+ .b-popover__title { font-weight: var(--b-weight-semibold); margin-block-end: var(--b-space-1); }
321
+
322
+ /* Arrowed popover — Apple-style caret pointing at the anchor.
323
+ Direction names the popover's position relative to the anchor:
324
+ --arrow-top (popover ABOVE, caret at its bottom), --arrow-bottom,
325
+ --arrow-start, --arrow-end. */
326
+ .b-popover[class*="b-popover--arrow"] { overflow: visible; }
327
+ .b-popover[class*="b-popover--arrow"]::before {
328
+ content: "";
329
+ position: absolute;
330
+ width: 0.85rem;
331
+ height: 0.85rem;
332
+ background: inherit;
333
+ border: 1px solid var(--b-hairline);
334
+ rotate: 45deg;
335
+ z-index: -1;
336
+ }
337
+ .b-popover--arrow-bottom::before { /* popover below anchor, caret on top */
338
+ top: -0.475rem;
339
+ inset-inline-start: calc(50% - 0.425rem);
340
+ border-inline-end: none;
341
+ border-block-end: none;
342
+ }
343
+ .b-popover--arrow-top::before {
344
+ bottom: -0.475rem;
345
+ inset-inline-start: calc(50% - 0.425rem);
346
+ border-inline-start: none;
347
+ border-block-start: none;
348
+ }
349
+ .b-popover--arrow-end::before { /* popover after anchor, caret at start */
350
+ inset-inline-start: -0.475rem;
351
+ top: calc(50% - 0.425rem);
352
+ border-inline-end: none;
353
+ border-block-start: none;
354
+ }
355
+ .b-popover--arrow-start::before {
356
+ inset-inline-end: -0.475rem;
357
+ top: calc(50% - 0.425rem);
358
+ border-inline-start: none;
359
+ border-block-end: none;
360
+ }
361
+
362
+ /* Popover card — structured panel: header / body / footer actions */
363
+ .b-popover--card {
364
+ padding: 0;
365
+ max-width: 22rem;
366
+ overflow: hidden;
367
+ }
368
+ .b-popover--card[class*="b-popover--arrow"] { overflow: visible; }
369
+ .b-popover__header {
370
+ display: flex;
371
+ align-items: center;
372
+ gap: var(--b-space-2);
373
+ padding: var(--b-space-3) var(--b-space-4);
374
+ border-bottom: 1px solid var(--b-separator);
375
+ font-weight: var(--b-weight-semibold);
376
+ font-size: var(--b-text-subheadline);
377
+ }
378
+ .b-popover__body { padding: var(--b-space-4); }
379
+ .b-popover__footer {
380
+ display: flex;
381
+ justify-content: flex-end;
382
+ gap: var(--b-space-2);
383
+ padding: var(--b-space-3) var(--b-space-4);
384
+ border-top: 1px solid var(--b-separator);
385
+ background: var(--b-fill-quaternary);
386
+ }
387
+
388
+ /* Anchored wrapper fallback (no anchor positioning): .b-popover-anchor */
389
+ .b-popover-anchor { position: relative; display: inline-block; }
390
+ .b-popover-anchor > .b-popover {
391
+ position: absolute;
392
+ top: calc(100% + var(--b-space-2));
393
+ inset-inline-start: 50%;
394
+ translate: -50% 0;
395
+ z-index: var(--b-z-popover);
396
+ }
397
+
398
+ /* ---- Tooltip ------------------------------------------------------------------------
399
+ CSS-only: <span class="b-tooltip-host" data-tooltip="Label">…</span>
400
+ --------------------------------------------------------------------------------------- */
401
+ .b-tooltip-host { position: relative; }
402
+ .b-tooltip-host::after {
403
+ content: attr(data-tooltip);
404
+ position: absolute;
405
+ inset-block-end: calc(100% + var(--b-space-2));
406
+ inset-inline-start: 50%;
407
+ translate: -50% 4px;
408
+ z-index: var(--b-z-tooltip);
409
+ padding: var(--b-space-1) var(--b-space-2);
410
+ font-size: var(--b-text-caption);
411
+ font-weight: var(--b-weight-medium);
412
+ line-height: 1.35;
413
+ white-space: nowrap;
414
+ color: light-dark(#fff, #0c0c10);
415
+ background: light-dark(rgba(24, 26, 34, 0.92), rgba(245, 246, 250, 0.95));
416
+ border-radius: var(--b-radius-sm);
417
+ box-shadow: var(--b-shadow-sm);
418
+ opacity: 0;
419
+ pointer-events: none;
420
+ transition: opacity var(--b-duration-fast) var(--b-ease-out),
421
+ translate var(--b-duration-fast) var(--b-ease-out);
422
+ }
423
+ .b-tooltip-host:hover::after,
424
+ .b-tooltip-host:focus-visible::after {
425
+ opacity: 1;
426
+ translate: -50% 0;
427
+ transition-delay: 350ms;
428
+ }
429
+ .b-tooltip-host--bottom::after {
430
+ inset-block-end: auto;
431
+ inset-block-start: calc(100% + var(--b-space-2));
432
+ translate: -50% -4px;
433
+ }
434
+ .b-tooltip-host--bottom:hover::after { translate: -50% 0; }
435
+
436
+ /* ---- Hover Card ----------------------------------------------------------------------- */
437
+ .b-hover-card-host { position: relative; display: inline-block; }
438
+ .b-hover-card {
439
+ position: absolute;
440
+ inset-block-start: calc(100% + var(--b-space-2));
441
+ inset-inline-start: 0;
442
+ z-index: var(--b-z-popover);
443
+ width: 18rem;
444
+ padding: var(--b-space-4);
445
+ background: color-mix(in srgb, var(--b-elevated) 88%, transparent);
446
+ -webkit-backdrop-filter: var(--b-glass);
447
+ backdrop-filter: var(--b-glass);
448
+ border: 1px solid light-dark(rgba(255, 255, 255, 0.18), rgba(255, 255, 255, 0.04));
449
+ border-radius: var(--b-radius-lg);
450
+ box-shadow: var(--b-glass-shadow);
451
+ opacity: 0;
452
+ translate: 0 4px;
453
+ visibility: hidden;
454
+ overflow: hidden;
455
+ transition: opacity var(--b-duration-normal) var(--b-ease-out),
456
+ translate var(--b-duration-normal) var(--b-ease-out),
457
+ visibility var(--b-duration-normal);
458
+ }
459
+ .b-hover-card::before {
460
+ content: "";
461
+ position: absolute;
462
+ inset: 0;
463
+ border-radius: inherit;
464
+ box-shadow: var(--b-glass-edge);
465
+ pointer-events: none;
466
+ }
467
+ .b-hover-card-host:hover .b-hover-card,
468
+ .b-hover-card-host:focus-within .b-hover-card {
469
+ opacity: 1;
470
+ translate: 0 0;
471
+ visibility: visible;
472
+ transition-delay: 250ms;
473
+ }
474
+
475
+ /* ---- Lightbox --------------------------------------------------------------------------- */
476
+ .b-lightbox {
477
+ width: 100vw;
478
+ height: 100dvh;
479
+ max-width: none;
480
+ max-height: none;
481
+ margin: 0;
482
+ padding: var(--b-space-6);
483
+ display: grid;
484
+ place-items: center;
485
+ background: transparent;
486
+ border: none;
487
+ }
488
+ .b-lightbox::backdrop {
489
+ background: rgba(0, 0, 0, 0.82);
490
+ -webkit-backdrop-filter: blur(var(--b-blur-sm));
491
+ backdrop-filter: blur(var(--b-blur-sm));
492
+ }
493
+ .b-lightbox img {
494
+ max-width: 92vw;
495
+ max-height: 86dvh;
496
+ border-radius: var(--b-radius-lg);
497
+ box-shadow: var(--b-elevation-5);
498
+ }
499
+ /* A document preview — PDF, text, anything the browser can render itself.
500
+ Sized like the image slot so both feel like one Quick Look. */
501
+ .b-lightbox__frame {
502
+ width: min(92vw, 58rem);
503
+ height: 84dvh;
504
+ background: var(--b-surface);
505
+ border: none;
506
+ border-radius: var(--b-radius-lg);
507
+ box-shadow: var(--b-elevation-5);
508
+ }
509
+ /* What a file that cannot be previewed shows instead: its glyph and a way
510
+ to get it. Glass, because it floats on the lightbox's own darkness. */
511
+ .b-lightbox__empty {
512
+ display: grid;
513
+ justify-items: center;
514
+ gap: var(--b-space-2);
515
+ width: min(92vw, 22rem);
516
+ padding: var(--b-space-8) var(--b-space-6);
517
+ text-align: center;
518
+ color: #fff;
519
+ background: rgba(255, 255, 255, 0.08);
520
+ -webkit-backdrop-filter: var(--b-glass);
521
+ backdrop-filter: var(--b-glass);
522
+ border: 1px solid rgba(255, 255, 255, 0.14);
523
+ border-radius: var(--b-radius-xl);
524
+ }
525
+ .b-lightbox__empty svg { width: 3.25rem; height: 3.25rem; }
526
+ .b-lightbox__actions {
527
+ display: flex;
528
+ flex-wrap: wrap;
529
+ justify-content: center;
530
+ gap: var(--b-space-2);
531
+ margin-block-start: var(--b-space-3);
532
+ }
533
+ .b-lightbox__caption {
534
+ margin-block-start: var(--b-space-3);
535
+ color: rgba(255, 255, 255, 0.75);
536
+ font-size: var(--b-text-footnote);
537
+ text-align: center;
538
+ }
539
+ .b-lightbox .b-modal__close {
540
+ position: fixed;
541
+ inset-block-start: var(--b-space-4);
542
+ inset-inline-end: var(--b-space-4);
543
+ background: rgba(255, 255, 255, 0.14);
544
+ color: #fff;
545
+ }
546
+
547
+ /* ---- Fullscreen Overlay ------------------------------------------------------------------- */
548
+ .b-fullscreen {
549
+ width: 100vw;
550
+ height: 100dvh;
551
+ max-width: none;
552
+ max-height: none;
553
+ margin: 0;
554
+ padding: 0;
555
+ background: var(--b-bg);
556
+ border: none;
557
+ transition: opacity var(--b-duration-normal) var(--b-ease-out),
558
+ display var(--b-duration-normal) allow-discrete,
559
+ overlay var(--b-duration-normal) allow-discrete;
560
+ }
561
+ dialog.b-fullscreen:not([open]) { opacity: 0; }
562
+ .b-fullscreen[open] { opacity: 1; }
563
+ @starting-style {
564
+ .b-fullscreen[open] { opacity: 0; }
565
+ }
566
+ .b-fullscreen__bar {
567
+ display: flex;
568
+ align-items: center;
569
+ justify-content: space-between;
570
+ padding: var(--b-space-3) var(--b-space-5);
571
+ border-bottom: 1px solid var(--b-separator);
572
+ }
573
+ .b-fullscreen__body { padding: var(--b-space-6); overflow: auto; height: calc(100dvh - var(--b-topbar-h)); }
574
+ }