css-drawer 0.3.1 → 0.4.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.
@@ -1,334 +0,0 @@
1
- /* CSS Drawer - Vaul-quality drawer with auto-nesting and directions */
2
-
3
- :root {
4
- /* Visual */
5
- --drawer-bg: #fff;
6
- --drawer-radius: 24px;
7
- --drawer-backdrop: hsl(0 0% 0% / 0.4);
8
- --drawer-backdrop-blur: 4px;
9
-
10
- /* Sizing */
11
- --drawer-max-height: 96dvh;
12
- --drawer-modal-width: fit-content;
13
- --drawer-modal-height: fit-content;
14
-
15
- /* Handle */
16
- --drawer-handle-bg: hsl(0 0% 80%);
17
- --drawer-handle-bg-hover: hsl(0 0% 60%);
18
- --drawer-handle-width: 48px;
19
- --drawer-handle-width-hover: 56px;
20
- --drawer-handle-height: 5px;
21
- --drawer-handle-padding-block: 1rem 0.5rem;
22
- --drawer-handle-padding-inline: 0;
23
-
24
- /* Shadows */
25
- --drawer-shadow-bottom: 0 -10px 60px hsl(0 0% 0% / 0.12), 0 -4px 20px hsl(0 0% 0% / 0.08);
26
- --drawer-shadow-top: 0 10px 60px hsl(0 0% 0% / 0.12), 0 4px 20px hsl(0 0% 0% / 0.08);
27
- --drawer-shadow-right: -10px 0 60px hsl(0 0% 0% / 0.12), -4px 0 20px hsl(0 0% 0% / 0.08);
28
- --drawer-shadow-left: 10px 0 60px hsl(0 0% 0% / 0.12), 4px 0 20px hsl(0 0% 0% / 0.08);
29
- --drawer-shadow-modal: 0 25px 50px -12px hsl(0 0% 0% / 0.25);
30
-
31
- /* Animation */
32
- --drawer-duration: 0.5s;
33
- --drawer-duration-close: 0.35s;
34
- --drawer-ease: cubic-bezier(0.32, 0.72, 0, 1);
35
-
36
- /* Nesting effects */
37
- --drawer-nested-scale: 0.94;
38
- --drawer-nested-offset: 20px;
39
- --drawer-nested-brightness: 0.92;
40
- --drawer-nested-backdrop: hsl(0 0% 0% / 0.15);
41
- }
42
-
43
- @media (prefers-color-scheme: dark) {
44
- :root {
45
- --drawer-bg: hsl(0 0% 12%);
46
- --drawer-handle-bg: hsl(0 0% 35%);
47
- --drawer-handle-bg-hover: hsl(0 0% 50%);
48
- --drawer-shadow-bottom: 0 -10px 60px hsl(0 0% 0% / 0.4), 0 -4px 20px hsl(0 0% 0% / 0.3);
49
- --drawer-shadow-top: 0 10px 60px hsl(0 0% 0% / 0.4), 0 4px 20px hsl(0 0% 0% / 0.3);
50
- --drawer-shadow-right: -10px 0 60px hsl(0 0% 0% / 0.4), -4px 0 20px hsl(0 0% 0% / 0.3);
51
- --drawer-shadow-left: 10px 0 60px hsl(0 0% 0% / 0.4), 4px 0 20px hsl(0 0% 0% / 0.3);
52
- --drawer-shadow-modal: 0 25px 50px -12px hsl(0 0% 0% / 0.5);
53
- }
54
- }
55
-
56
- /* Background scale effect */
57
- body {
58
- transition: scale var(--drawer-duration) var(--drawer-ease), border-radius var(--drawer-duration) var(--drawer-ease);
59
- transform-origin: center top;
60
- }
61
-
62
- body:has(.drawer[open]) {
63
- overflow: hidden;
64
- scale: var(--drawer-nested-scale);
65
- border-radius: var(--drawer-radius);
66
- }
67
-
68
- /* Base drawer */
69
- .drawer {
70
- border: none;
71
- padding: 0;
72
- margin: 0;
73
- max-width: 100%;
74
- max-height: 100%;
75
- position: fixed;
76
- background: var(--drawer-bg);
77
- overflow: hidden;
78
- opacity: 0;
79
- transition:
80
- display var(--drawer-duration-close) allow-discrete,
81
- overlay var(--drawer-duration-close) allow-discrete,
82
- translate var(--drawer-duration-close) var(--drawer-ease),
83
- scale var(--drawer-duration-close) var(--drawer-ease),
84
- filter var(--drawer-duration-close) ease,
85
- opacity var(--drawer-duration-close) ease;
86
-
87
- /* Default: bottom */
88
- --_translate-closed: 0 100%;
89
- --_border-radius: var(--drawer-radius) var(--drawer-radius) 0 0;
90
- inset: auto 0 0 0;
91
- margin-inline: auto;
92
- width: var(--drawer-width, 100%);
93
- max-width: var(--drawer-max-width, none);
94
- height: var(--drawer-height, auto);
95
- max-height: var(--drawer-max-height, 96dvh);
96
- border-radius: var(--drawer-border-radius, var(--_border-radius));
97
- box-shadow: var(--drawer-shadow-bottom);
98
- translate: var(--_translate-closed);
99
- }
100
-
101
- .drawer::backdrop {
102
- background: var(--drawer-backdrop);
103
- opacity: 0;
104
- backdrop-filter: blur(var(--drawer-backdrop-blur));
105
- -webkit-backdrop-filter: blur(var(--drawer-backdrop-blur));
106
- transition:
107
- display var(--drawer-duration-close) allow-discrete,
108
- overlay var(--drawer-duration-close) allow-discrete,
109
- opacity var(--drawer-duration-close) ease;
110
- }
111
-
112
- .drawer[open] {
113
- opacity: 1;
114
- translate: 0 0;
115
- transition:
116
- display var(--drawer-duration) allow-discrete,
117
- overlay var(--drawer-duration) allow-discrete,
118
- translate var(--drawer-duration) var(--drawer-ease),
119
- scale var(--drawer-duration) var(--drawer-ease),
120
- filter var(--drawer-duration) ease,
121
- opacity 0.15s ease;
122
- }
123
-
124
- .drawer[open]::backdrop {
125
- opacity: 1;
126
- transition: display var(--drawer-duration) allow-discrete, overlay var(--drawer-duration) allow-discrete, opacity 0.2s ease;
127
- }
128
-
129
- @starting-style {
130
- .drawer[open] { opacity: 0; translate: var(--_translate-closed); }
131
- .drawer[open]::backdrop { opacity: 0; }
132
- }
133
-
134
- /* ===== DIRECTIONS ===== */
135
-
136
- /* Right */
137
- .drawer[data-direction="right"] {
138
- --_translate-closed: 100% 0;
139
- --_border-radius: var(--drawer-radius) 0 0 var(--drawer-radius);
140
- inset: 0 0 0 auto;
141
- margin: 0;
142
- width: var(--drawer-width, 500px);
143
- max-width: var(--drawer-max-width, 90%);
144
- height: var(--drawer-height, 100dvh);
145
- max-height: 100dvh;
146
- box-shadow: var(--drawer-shadow-right);
147
- }
148
-
149
- /* Left */
150
- .drawer[data-direction="left"] {
151
- --_translate-closed: -100% 0;
152
- --_border-radius: 0 var(--drawer-radius) var(--drawer-radius) 0;
153
- inset: 0 auto 0 0;
154
- margin: 0;
155
- width: var(--drawer-width, 500px);
156
- max-width: var(--drawer-max-width, 90%);
157
- height: var(--drawer-height, 100dvh);
158
- max-height: 100dvh;
159
- box-shadow: var(--drawer-shadow-left);
160
- }
161
-
162
- /* Top */
163
- .drawer[data-direction="top"] {
164
- --_translate-closed: 0 -100%;
165
- --_border-radius: 0 0 var(--drawer-radius) var(--drawer-radius);
166
- inset: 0 0 auto 0;
167
- margin-inline: auto;
168
- width: var(--drawer-width, 100%);
169
- max-width: var(--drawer-max-width, none);
170
- height: var(--drawer-height, auto);
171
- max-height: var(--drawer-max-height, 96dvh);
172
- box-shadow: var(--drawer-shadow-top);
173
- }
174
-
175
- /* Modal (centered) */
176
- .drawer[data-direction="modal"] {
177
- --_translate-closed: 0 0;
178
- --_border-radius: var(--drawer-radius);
179
- inset: 0;
180
- margin: auto;
181
- width: var(--drawer-modal-width, fit-content);
182
- max-width: var(--drawer-max-width, 90%);
183
- height: var(--drawer-modal-height, fit-content);
184
- max-height: var(--drawer-max-height, 96dvh);
185
- box-shadow: var(--drawer-shadow-modal);
186
- scale: var(--drawer-nested-scale);
187
- }
188
-
189
- .drawer[data-direction="modal"][open] {
190
- scale: 1;
191
- }
192
-
193
- @starting-style {
194
- .drawer[data-direction="modal"][open] {
195
- scale: var(--drawer-nested-scale);
196
- }
197
- }
198
-
199
- /* ===== AUTO-NESTING (up to 5 levels) ===== */
200
- /* Uses sibling combinators to count open drawers */
201
-
202
- /* 1+ open drawers after */
203
- .drawer[open]:has(~ .drawer[open]) {
204
- scale: var(--drawer-nested-scale);
205
- translate: 0 calc(-1 * var(--drawer-nested-offset));
206
- border-radius: var(--drawer-radius);
207
- filter: brightness(var(--drawer-nested-brightness));
208
- pointer-events: none;
209
- }
210
-
211
- /* 2+ open drawers after */
212
- .drawer[open]:has(~ .drawer[open] ~ .drawer[open]) {
213
- scale: calc(var(--drawer-nested-scale) * var(--drawer-nested-scale));
214
- translate: 0 calc(-2 * var(--drawer-nested-offset));
215
- filter: brightness(calc(var(--drawer-nested-brightness) * var(--drawer-nested-brightness)));
216
- }
217
-
218
- /* 3+ open drawers after */
219
- .drawer[open]:has(~ .drawer[open] ~ .drawer[open] ~ .drawer[open]) {
220
- scale: calc(var(--drawer-nested-scale) * var(--drawer-nested-scale) * var(--drawer-nested-scale));
221
- translate: 0 calc(-3 * var(--drawer-nested-offset));
222
- filter: brightness(calc(var(--drawer-nested-brightness) * var(--drawer-nested-brightness) * var(--drawer-nested-brightness)));
223
- }
224
-
225
- /* 4+ open drawers after */
226
- .drawer[open]:has(~ .drawer[open] ~ .drawer[open] ~ .drawer[open] ~ .drawer[open]) {
227
- scale: calc(var(--drawer-nested-scale) * var(--drawer-nested-scale) * var(--drawer-nested-scale) * var(--drawer-nested-scale));
228
- translate: 0 calc(-4 * var(--drawer-nested-offset));
229
- filter: brightness(calc(var(--drawer-nested-brightness) * var(--drawer-nested-brightness) * var(--drawer-nested-brightness) * var(--drawer-nested-brightness)));
230
- }
231
-
232
- /* 5+ open drawers after */
233
- .drawer[open]:has(~ .drawer[open] ~ .drawer[open] ~ .drawer[open] ~ .drawer[open] ~ .drawer[open]) {
234
- scale: calc(var(--drawer-nested-scale) * var(--drawer-nested-scale) * var(--drawer-nested-scale) * var(--drawer-nested-scale) * var(--drawer-nested-scale));
235
- translate: 0 calc(-5 * var(--drawer-nested-offset));
236
- filter: brightness(calc(var(--drawer-nested-brightness) * var(--drawer-nested-brightness) * var(--drawer-nested-brightness) * var(--drawer-nested-brightness) * var(--drawer-nested-brightness)));
237
- }
238
-
239
- /* Lighter backdrop for stacked drawers */
240
- .drawer[open] ~ .drawer[open]::backdrop {
241
- background: var(--drawer-nested-backdrop);
242
- backdrop-filter: none;
243
- }
244
-
245
- /* Handle */
246
- .drawer-handle {
247
- display: flex;
248
- justify-content: center;
249
- padding-block: var(--drawer-handle-padding-block);
250
- padding-inline: var(--drawer-handle-padding-inline);
251
- cursor: grab;
252
- }
253
-
254
- .drawer-handle::before {
255
- content: '';
256
- width: var(--drawer-handle-width);
257
- height: var(--drawer-handle-height);
258
- background: var(--drawer-handle-bg);
259
- border-radius: 100px;
260
- transition: width 0.2s var(--drawer-ease), height 0.2s var(--drawer-ease), background 0.2s ease;
261
- }
262
-
263
- .drawer-handle:hover::before {
264
- width: var(--drawer-handle-width-hover);
265
- background: var(--drawer-handle-bg-hover);
266
- }
267
-
268
- /* Vertical handle for left/right drawers */
269
- .drawer[data-direction="left"] .drawer-handle,
270
- .drawer[data-direction="right"] .drawer-handle {
271
- flex-direction: column;
272
- align-items: center;
273
- justify-content: center;
274
- padding-block: var(--drawer-handle-padding-inline);
275
- padding-inline: var(--drawer-handle-padding-block);
276
- height: 100%;
277
- position: absolute;
278
- top: 0;
279
- writing-mode: vertical-lr;
280
- }
281
-
282
- .drawer[data-direction="left"] .drawer-handle { right: 0; }
283
- .drawer[data-direction="right"] .drawer-handle { left: 0; }
284
-
285
- .drawer[data-direction="left"] .drawer-handle::before,
286
- .drawer[data-direction="right"] .drawer-handle::before {
287
- width: var(--drawer-handle-height);
288
- height: var(--drawer-handle-width);
289
- }
290
-
291
- .drawer[data-direction="left"] .drawer-handle:hover::before,
292
- .drawer[data-direction="right"] .drawer-handle:hover::before {
293
- width: var(--drawer-handle-height);
294
- height: var(--drawer-handle-width-hover);
295
- }
296
-
297
- /* Content - structural only, no opinionated padding */
298
- .drawer-content {
299
- overflow-x: hidden;
300
- overflow-y: auto;
301
- overscroll-behavior: contain;
302
- flex: 1;
303
- min-height: 0;
304
- }
305
-
306
- /* Content sizing for directions */
307
- .drawer[data-direction="left"] .drawer-content,
308
- .drawer[data-direction="right"] .drawer-content {
309
- height: 100%;
310
- }
311
-
312
- /* Reduced motion */
313
- @media (prefers-reduced-motion: reduce) {
314
- *, *::before, *::after {
315
- transition-duration: 0.01ms !important;
316
- }
317
-
318
- body:has(.drawer[open]) {
319
- scale: 1;
320
- }
321
-
322
- .drawer[open]:has(~ .drawer[open]),
323
- .drawer[open]:has(~ .drawer[open] ~ .drawer[open]),
324
- .drawer[open]:has(~ .drawer[open] ~ .drawer[open] ~ .drawer[open]),
325
- .drawer[open]:has(~ .drawer[open] ~ .drawer[open] ~ .drawer[open] ~ .drawer[open]),
326
- .drawer[open]:has(~ .drawer[open] ~ .drawer[open] ~ .drawer[open] ~ .drawer[open] ~ .drawer[open]) {
327
- scale: 1;
328
- translate: 0 0;
329
- filter: none;
330
- }
331
- }
332
-
333
-
334
- /*# sourceMappingURL=observer-QD6bSdOu.css.map*/
@@ -1 +0,0 @@
1
- {"version":3,"file":"observer-QD6bSdOu.css","names":[],"sources":["../src/drawer.css"],"sourcesContent":["/* CSS Drawer - Vaul-quality drawer with auto-nesting and directions */\n\n:root {\n /* Visual */\n --drawer-bg: #fff;\n --drawer-radius: 24px;\n --drawer-backdrop: hsl(0 0% 0% / 0.4);\n --drawer-backdrop-blur: 4px;\n\n /* Sizing */\n --drawer-max-height: 96dvh;\n --drawer-modal-width: fit-content;\n --drawer-modal-height: fit-content;\n\n /* Handle */\n --drawer-handle-bg: hsl(0 0% 80%);\n --drawer-handle-bg-hover: hsl(0 0% 60%);\n --drawer-handle-width: 48px;\n --drawer-handle-width-hover: 56px;\n --drawer-handle-height: 5px;\n --drawer-handle-padding-block: 1rem 0.5rem;\n --drawer-handle-padding-inline: 0;\n\n /* Shadows */\n --drawer-shadow-bottom: 0 -10px 60px hsl(0 0% 0% / 0.12), 0 -4px 20px hsl(0 0% 0% / 0.08);\n --drawer-shadow-top: 0 10px 60px hsl(0 0% 0% / 0.12), 0 4px 20px hsl(0 0% 0% / 0.08);\n --drawer-shadow-right: -10px 0 60px hsl(0 0% 0% / 0.12), -4px 0 20px hsl(0 0% 0% / 0.08);\n --drawer-shadow-left: 10px 0 60px hsl(0 0% 0% / 0.12), 4px 0 20px hsl(0 0% 0% / 0.08);\n --drawer-shadow-modal: 0 25px 50px -12px hsl(0 0% 0% / 0.25);\n\n /* Animation */\n --drawer-duration: 0.5s;\n --drawer-duration-close: 0.35s;\n --drawer-ease: cubic-bezier(0.32, 0.72, 0, 1);\n\n /* Nesting effects */\n --drawer-nested-scale: 0.94;\n --drawer-nested-offset: 20px;\n --drawer-nested-brightness: 0.92;\n --drawer-nested-backdrop: hsl(0 0% 0% / 0.15);\n}\n\n@media (prefers-color-scheme: dark) {\n :root {\n --drawer-bg: hsl(0 0% 12%);\n --drawer-handle-bg: hsl(0 0% 35%);\n --drawer-handle-bg-hover: hsl(0 0% 50%);\n --drawer-shadow-bottom: 0 -10px 60px hsl(0 0% 0% / 0.4), 0 -4px 20px hsl(0 0% 0% / 0.3);\n --drawer-shadow-top: 0 10px 60px hsl(0 0% 0% / 0.4), 0 4px 20px hsl(0 0% 0% / 0.3);\n --drawer-shadow-right: -10px 0 60px hsl(0 0% 0% / 0.4), -4px 0 20px hsl(0 0% 0% / 0.3);\n --drawer-shadow-left: 10px 0 60px hsl(0 0% 0% / 0.4), 4px 0 20px hsl(0 0% 0% / 0.3);\n --drawer-shadow-modal: 0 25px 50px -12px hsl(0 0% 0% / 0.5);\n }\n}\n\n/* Background scale effect */\nbody {\n transition: scale var(--drawer-duration) var(--drawer-ease), border-radius var(--drawer-duration) var(--drawer-ease);\n transform-origin: center top;\n}\n\nbody:has(.drawer[open]) {\n overflow: hidden;\n scale: var(--drawer-nested-scale);\n border-radius: var(--drawer-radius);\n}\n\n/* Base drawer */\n.drawer {\n border: none;\n padding: 0;\n margin: 0;\n max-width: 100%;\n max-height: 100%;\n position: fixed;\n background: var(--drawer-bg);\n overflow: hidden;\n opacity: 0;\n transition:\n display var(--drawer-duration-close) allow-discrete,\n overlay var(--drawer-duration-close) allow-discrete,\n translate var(--drawer-duration-close) var(--drawer-ease),\n scale var(--drawer-duration-close) var(--drawer-ease),\n filter var(--drawer-duration-close) ease,\n opacity var(--drawer-duration-close) ease;\n\n /* Default: bottom */\n --_translate-closed: 0 100%;\n --_border-radius: var(--drawer-radius) var(--drawer-radius) 0 0;\n inset: auto 0 0 0;\n margin-inline: auto;\n width: var(--drawer-width, 100%);\n max-width: var(--drawer-max-width, none);\n height: var(--drawer-height, auto);\n max-height: var(--drawer-max-height, 96dvh);\n border-radius: var(--drawer-border-radius, var(--_border-radius));\n box-shadow: var(--drawer-shadow-bottom);\n translate: var(--_translate-closed);\n}\n\n.drawer::backdrop {\n background: var(--drawer-backdrop);\n opacity: 0;\n backdrop-filter: blur(var(--drawer-backdrop-blur));\n -webkit-backdrop-filter: blur(var(--drawer-backdrop-blur));\n transition:\n display var(--drawer-duration-close) allow-discrete,\n overlay var(--drawer-duration-close) allow-discrete,\n opacity var(--drawer-duration-close) ease;\n}\n\n.drawer[open] {\n opacity: 1;\n translate: 0 0;\n transition:\n display var(--drawer-duration) allow-discrete,\n overlay var(--drawer-duration) allow-discrete,\n translate var(--drawer-duration) var(--drawer-ease),\n scale var(--drawer-duration) var(--drawer-ease),\n filter var(--drawer-duration) ease,\n opacity 0.15s ease;\n}\n\n.drawer[open]::backdrop {\n opacity: 1;\n transition: display var(--drawer-duration) allow-discrete, overlay var(--drawer-duration) allow-discrete, opacity 0.2s ease;\n}\n\n@starting-style {\n .drawer[open] { opacity: 0; translate: var(--_translate-closed); }\n .drawer[open]::backdrop { opacity: 0; }\n}\n\n/* ===== DIRECTIONS ===== */\n\n/* Right */\n.drawer[data-direction=\"right\"] {\n --_translate-closed: 100% 0;\n --_border-radius: var(--drawer-radius) 0 0 var(--drawer-radius);\n inset: 0 0 0 auto;\n margin: 0;\n width: var(--drawer-width, 500px);\n max-width: var(--drawer-max-width, 90%);\n height: var(--drawer-height, 100dvh);\n max-height: 100dvh;\n box-shadow: var(--drawer-shadow-right);\n}\n\n/* Left */\n.drawer[data-direction=\"left\"] {\n --_translate-closed: -100% 0;\n --_border-radius: 0 var(--drawer-radius) var(--drawer-radius) 0;\n inset: 0 auto 0 0;\n margin: 0;\n width: var(--drawer-width, 500px);\n max-width: var(--drawer-max-width, 90%);\n height: var(--drawer-height, 100dvh);\n max-height: 100dvh;\n box-shadow: var(--drawer-shadow-left);\n}\n\n/* Top */\n.drawer[data-direction=\"top\"] {\n --_translate-closed: 0 -100%;\n --_border-radius: 0 0 var(--drawer-radius) var(--drawer-radius);\n inset: 0 0 auto 0;\n margin-inline: auto;\n width: var(--drawer-width, 100%);\n max-width: var(--drawer-max-width, none);\n height: var(--drawer-height, auto);\n max-height: var(--drawer-max-height, 96dvh);\n box-shadow: var(--drawer-shadow-top);\n}\n\n/* Modal (centered) */\n.drawer[data-direction=\"modal\"] {\n --_translate-closed: 0 0;\n --_border-radius: var(--drawer-radius);\n inset: 0;\n margin: auto;\n width: var(--drawer-modal-width, fit-content);\n max-width: var(--drawer-max-width, 90%);\n height: var(--drawer-modal-height, fit-content);\n max-height: var(--drawer-max-height, 96dvh);\n box-shadow: var(--drawer-shadow-modal);\n scale: var(--drawer-nested-scale);\n}\n\n.drawer[data-direction=\"modal\"][open] {\n scale: 1;\n}\n\n@starting-style {\n .drawer[data-direction=\"modal\"][open] {\n scale: var(--drawer-nested-scale);\n }\n}\n\n/* ===== AUTO-NESTING (up to 5 levels) ===== */\n/* Uses sibling combinators to count open drawers */\n\n/* 1+ open drawers after */\n.drawer[open]:has(~ .drawer[open]) {\n scale: var(--drawer-nested-scale);\n translate: 0 calc(-1 * var(--drawer-nested-offset));\n border-radius: var(--drawer-radius);\n filter: brightness(var(--drawer-nested-brightness));\n pointer-events: none;\n}\n\n/* 2+ open drawers after */\n.drawer[open]:has(~ .drawer[open] ~ .drawer[open]) {\n scale: calc(var(--drawer-nested-scale) * var(--drawer-nested-scale));\n translate: 0 calc(-2 * var(--drawer-nested-offset));\n filter: brightness(calc(var(--drawer-nested-brightness) * var(--drawer-nested-brightness)));\n}\n\n/* 3+ open drawers after */\n.drawer[open]:has(~ .drawer[open] ~ .drawer[open] ~ .drawer[open]) {\n scale: calc(var(--drawer-nested-scale) * var(--drawer-nested-scale) * var(--drawer-nested-scale));\n translate: 0 calc(-3 * var(--drawer-nested-offset));\n filter: brightness(calc(var(--drawer-nested-brightness) * var(--drawer-nested-brightness) * var(--drawer-nested-brightness)));\n}\n\n/* 4+ open drawers after */\n.drawer[open]:has(~ .drawer[open] ~ .drawer[open] ~ .drawer[open] ~ .drawer[open]) {\n scale: calc(var(--drawer-nested-scale) * var(--drawer-nested-scale) * var(--drawer-nested-scale) * var(--drawer-nested-scale));\n translate: 0 calc(-4 * var(--drawer-nested-offset));\n filter: brightness(calc(var(--drawer-nested-brightness) * var(--drawer-nested-brightness) * var(--drawer-nested-brightness) * var(--drawer-nested-brightness)));\n}\n\n/* 5+ open drawers after */\n.drawer[open]:has(~ .drawer[open] ~ .drawer[open] ~ .drawer[open] ~ .drawer[open] ~ .drawer[open]) {\n scale: calc(var(--drawer-nested-scale) * var(--drawer-nested-scale) * var(--drawer-nested-scale) * var(--drawer-nested-scale) * var(--drawer-nested-scale));\n translate: 0 calc(-5 * var(--drawer-nested-offset));\n filter: brightness(calc(var(--drawer-nested-brightness) * var(--drawer-nested-brightness) * var(--drawer-nested-brightness) * var(--drawer-nested-brightness) * var(--drawer-nested-brightness)));\n}\n\n/* Lighter backdrop for stacked drawers */\n.drawer[open] ~ .drawer[open]::backdrop {\n background: var(--drawer-nested-backdrop);\n backdrop-filter: none;\n}\n\n/* Handle */\n.drawer-handle {\n display: flex;\n justify-content: center;\n padding-block: var(--drawer-handle-padding-block);\n padding-inline: var(--drawer-handle-padding-inline);\n cursor: grab;\n}\n\n.drawer-handle::before {\n content: '';\n width: var(--drawer-handle-width);\n height: var(--drawer-handle-height);\n background: var(--drawer-handle-bg);\n border-radius: 100px;\n transition: width 0.2s var(--drawer-ease), height 0.2s var(--drawer-ease), background 0.2s ease;\n}\n\n.drawer-handle:hover::before {\n width: var(--drawer-handle-width-hover);\n background: var(--drawer-handle-bg-hover);\n}\n\n/* Vertical handle for left/right drawers */\n.drawer[data-direction=\"left\"] .drawer-handle,\n.drawer[data-direction=\"right\"] .drawer-handle {\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding-block: var(--drawer-handle-padding-inline);\n padding-inline: var(--drawer-handle-padding-block);\n height: 100%;\n position: absolute;\n top: 0;\n writing-mode: vertical-lr;\n}\n\n.drawer[data-direction=\"left\"] .drawer-handle { right: 0; }\n.drawer[data-direction=\"right\"] .drawer-handle { left: 0; }\n\n.drawer[data-direction=\"left\"] .drawer-handle::before,\n.drawer[data-direction=\"right\"] .drawer-handle::before {\n width: var(--drawer-handle-height);\n height: var(--drawer-handle-width);\n}\n\n.drawer[data-direction=\"left\"] .drawer-handle:hover::before,\n.drawer[data-direction=\"right\"] .drawer-handle:hover::before {\n width: var(--drawer-handle-height);\n height: var(--drawer-handle-width-hover);\n}\n\n/* Content - structural only, no opinionated padding */\n.drawer-content {\n overflow-x: hidden;\n overflow-y: auto;\n overscroll-behavior: contain;\n flex: 1;\n min-height: 0;\n}\n\n/* Content sizing for directions */\n.drawer[data-direction=\"left\"] .drawer-content,\n.drawer[data-direction=\"right\"] .drawer-content {\n height: 100%;\n}\n\n/* Reduced motion */\n@media (prefers-reduced-motion: reduce) {\n *, *::before, *::after {\n transition-duration: 0.01ms !important;\n }\n\n body:has(.drawer[open]) {\n scale: 1;\n }\n\n .drawer[open]:has(~ .drawer[open]),\n .drawer[open]:has(~ .drawer[open] ~ .drawer[open]),\n .drawer[open]:has(~ .drawer[open] ~ .drawer[open] ~ .drawer[open]),\n .drawer[open]:has(~ .drawer[open] ~ .drawer[open] ~ .drawer[open] ~ .drawer[open]),\n .drawer[open]:has(~ .drawer[open] ~ .drawer[open] ~ .drawer[open] ~ .drawer[open] ~ .drawer[open]) {\n scale: 1;\n translate: 0 0;\n filter: none;\n }\n}\n"],"mappings":"AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}