duoop-ui 1.0.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.
package/lib/styles.css ADDED
@@ -0,0 +1,3817 @@
1
+ /* Shared foundation for copied Duoop components. No catalogue layout or reset. */
2
+ :root {
3
+ --duoop-font:
4
+ 'DM Sans', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
5
+ }
6
+ *,
7
+ *::before,
8
+ *::after {
9
+ box-sizing: border-box;
10
+ }
11
+ body {
12
+ margin: 0;
13
+ font-family: var(--duoop-font);
14
+ color: #252a34;
15
+ background: #fff;
16
+ }
17
+ button,
18
+ input,
19
+ select,
20
+ textarea {
21
+ font: inherit;
22
+ }
23
+ button,
24
+ a,
25
+ input,
26
+ select,
27
+ textarea {
28
+ -webkit-tap-highlight-color: transparent;
29
+ }
30
+ button {
31
+ cursor: pointer;
32
+ }
33
+ button:disabled {
34
+ cursor: not-allowed;
35
+ }
36
+ .sr-only {
37
+ position: absolute;
38
+ width: 1px;
39
+ height: 1px;
40
+ padding: 0;
41
+ margin: -1px;
42
+ overflow: hidden;
43
+ clip: rect(0, 0, 0, 0);
44
+ white-space: nowrap;
45
+ border: 0;
46
+ }
47
+ :focus-visible {
48
+ outline: 2px solid currentColor;
49
+ outline-offset: -4px;
50
+ }
51
+ @media (prefers-reduced-motion: reduce) {
52
+ html {
53
+ scroll-behavior: auto;
54
+ }
55
+ }
56
+ .duoop-breadcrumb {
57
+ color: #373434;
58
+ font-family: "DM Sans", sans-serif;
59
+ font-size: 14px;
60
+ min-inline-size: 0;
61
+ }
62
+ .duoop-breadcrumb__list {
63
+ display: flex;
64
+ align-items: center;
65
+ flex-wrap: wrap;
66
+ gap: 4px 8px;
67
+ list-style: none;
68
+ padding: 0;
69
+ margin: 0;
70
+ }
71
+ .duoop-breadcrumb__item {
72
+ display: inline-flex;
73
+ min-inline-size: 0;
74
+ max-inline-size: 100%;
75
+ }
76
+ .duoop-breadcrumb__link,
77
+ .duoop-breadcrumb__page {
78
+ display: inline-flex;
79
+ align-items: center;
80
+ min-block-size: 44px;
81
+ padding: 8px 12px;
82
+ border: 2px solid transparent;
83
+ border-radius: 10px;
84
+ overflow-wrap: anywhere;
85
+ }
86
+ .duoop-breadcrumb__link {
87
+ color: #686565;
88
+ text-decoration: none;
89
+ transition:
90
+ transform 180ms cubic-bezier(0.2, 0.8, 0.2, 1),
91
+ box-shadow 180ms ease-out,
92
+ background-color 150ms ease-out,
93
+ border-color 150ms ease-out,
94
+ color 150ms ease-out;
95
+ }
96
+ .duoop-breadcrumb__link:hover {
97
+ color: #373434;
98
+ background: #fff;
99
+ border-color: #373434;
100
+ box-shadow: 2px 2px 0 #1d1b1b;
101
+ transform: translateY(-2px);
102
+ }
103
+ .duoop-breadcrumb__link:active {
104
+ transform: translate(1px, 1px);
105
+ box-shadow: none;
106
+ }
107
+ .duoop-breadcrumb__link:focus-visible {
108
+ outline: none;
109
+ border-color: #373434;
110
+ text-decoration: underline;
111
+ text-decoration-thickness: 2px;
112
+ text-underline-offset: 4px;
113
+ }
114
+ .duoop-breadcrumb__page {
115
+ background: #f0eeee;
116
+ border-color: #373434;
117
+ font-weight: 600;
118
+ box-shadow: 2px 2px 0 #1d1b1b;
119
+ }
120
+ .duoop-breadcrumb__separator {
121
+ color: #777474;
122
+ flex: 0 0 auto;
123
+ user-select: none;
124
+ }
125
+ @media (prefers-reduced-motion: reduce) {
126
+ .duoop-breadcrumb__link {
127
+ transition: none;
128
+ }
129
+ .duoop-breadcrumb__link:hover,
130
+ .duoop-breadcrumb__link:active {
131
+ transform: none;
132
+ }
133
+ }
134
+ .duoop-separator {
135
+ --separator-color: #777474;
136
+ flex-shrink: 0;
137
+ background: var(--separator-color);
138
+ border: 0;
139
+ border-radius: 1px;
140
+ }
141
+ .duoop-separator[data-orientation="horizontal"] {
142
+ block-size: 1px;
143
+ inline-size: 100%;
144
+ margin-block: 24px;
145
+ }
146
+ .duoop-separator[data-orientation="vertical"] {
147
+ inline-size: 1px;
148
+ align-self: stretch;
149
+ min-block-size: 24px;
150
+ margin-inline: 16px;
151
+ }
152
+ @media (forced-colors: active) {
153
+ .duoop-separator {
154
+ background: CanvasText;
155
+ forced-color-adjust: none;
156
+ }
157
+ }
158
+ .duoop-button {
159
+ --button-face: #373434; --button-text: #fff; --button-edge: #1d1b1b; --button-depth: 4px;
160
+ appearance: none; display: inline-grid; place-items: center; position: relative;
161
+ min-height: 44px; max-width: 100%; padding: 10px 20px;
162
+ border: 2px solid var(--button-edge); border-radius: 10px;
163
+ background: var(--button-face); color: var(--button-text);
164
+ box-shadow: 0 var(--button-depth) 0 var(--button-edge);
165
+ font: inherit; font-size: 14px; font-weight: 650; line-height: 1.4;
166
+ text-align: center; text-decoration: none; overflow-wrap: anywhere; cursor: pointer; touch-action: manipulation;
167
+ transition: transform 100ms ease, box-shadow 100ms ease, background-color 100ms ease;
168
+ }
169
+ .duoop-button--outline { --button-face: #fff; --button-text: #191919; --button-edge: #191919; }
170
+ .duoop-button--ghost { --button-face: transparent; --button-text: #191919; --button-edge: transparent; --button-depth: 0px; }
171
+ .duoop-button--sm { --button-depth: 3px; padding: 8px 14px; font-size: 12px; }
172
+ .duoop-button--lg { --button-depth: 5px; min-height: 52px; padding: 12px 26px; font-size: 16px; }
173
+ .duoop-button--ghost { --button-depth: 0px; }
174
+
175
+ .duoop-button--icon { width: 44px; padding-inline: 10px; }
176
+ .duoop-button--icon.duoop-button--lg { width: 52px; }
177
+ .duoop-button--full { width: 100%; }
178
+ .duoop-button-content { display: flex; align-items: center; justify-content: center; gap: 8px; min-width: 0; }
179
+ .duoop-button-content > span { min-width: 0; }
180
+ .duoop-button-icon { display: inline-flex; flex: 0 0 auto; }
181
+ .duoop-button-icon svg { width: 1.15em; height: 1.15em; }
182
+ .duoop-button-status { position: absolute; inset: 0; display: grid; place-items: center; font-size: 20px; pointer-events: none; }
183
+ .duoop-button[data-status]:not([data-status=idle]) .duoop-button-content { visibility: hidden; }
184
+ .duoop-button[aria-pressed=true] { --button-face: #dedede; --button-text: #111; --button-edge: #111; box-shadow: none; transform: translateY(var(--button-depth)); }
185
+ .duoop-button[data-intent=destructive] .duoop-button-content { text-decoration: underline; text-underline-offset: 3px; }
186
+ @media (hover: hover) {
187
+ .duoop-button:hover:not([aria-disabled=true]) { background: #302e2e; }
188
+ .duoop-button--outline:hover:not([aria-disabled=true]), .duoop-button--ghost:hover:not([aria-disabled=true]), .duoop-button[aria-pressed=true]:hover { background: #ededed; }
189
+ }
190
+ .duoop-button:active:not([aria-disabled=true]) { transform: translateY(var(--button-depth)); box-shadow: none; }
191
+ .duoop-button:focus-visible { outline:none; }
192
+ .duoop-button:disabled, .duoop-button[aria-disabled=true]:not([data-status=loading]):not([data-status=success]) { --button-face: #efefef; --button-text: #777; --button-edge: #ccc; opacity: 1; cursor: not-allowed; }
193
+ .duoop-button[data-status=loading] { cursor: progress; }
194
+ .duoop-button[data-status=success] { cursor: default; }
195
+ .duoop-spinner { width: 17px; height: 17px; border: 2px solid currentColor; border-right-color: transparent; border-radius: 50%; animation: duoop-spin .7s linear infinite; }
196
+ .duoop-sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
197
+ @keyframes duoop-spin { to { transform: rotate(360deg); } }
198
+ @media (prefers-reduced-motion: reduce) { .duoop-button { transition: none; } .duoop-spinner { animation: none; border-style: solid; } }
199
+
200
+
201
+ /* A shared mechanical response; intensity changes travel and spring. */
202
+ .duoop-button { --lift: -1px; --arrow-travel: 3px; --return-ease: cubic-bezier(.2,1.5,.4,1); isolation: isolate; transition: transform 220ms var(--return-ease), box-shadow 220ms var(--return-ease), background-color 160ms ease, color 160ms ease; }
203
+ .duoop-button[data-motion=discreet] { --lift: 0px; --arrow-travel: 1px; --return-ease: ease-out; }
204
+ .duoop-button[data-motion=expressive] { --lift: -2px; --arrow-travel: 5px; --return-ease: cubic-bezier(.2,1.9,.4,1); }
205
+ .duoop-button-content, .duoop-button-status, .duoop-button-reserve { grid-area: 1 / 1; }
206
+ .duoop-button-content { position: relative; z-index: 1; width: 100%; }
207
+ .duoop-button-status { position: relative; inset: auto; z-index: 1; display: flex; justify-content: center; align-items: center; gap: 8px; font-size: inherit; }
208
+ .duoop-button-reserve { display: grid; visibility: hidden; height: 0; pointer-events: none; }
209
+ .duoop-button-reserve > span { grid-area: 1 / 1; }
210
+ .duoop-button-icon { transition: transform 160ms ease; }
211
+ @media (hover: hover) {
212
+ .duoop-button:hover:not([aria-disabled=true]):not([aria-pressed=true]) { transform: translateY(var(--lift)); box-shadow: 0 calc(var(--button-depth) - var(--lift)) 0 var(--button-edge); }
213
+ .duoop-button:hover:not([aria-disabled=true]) [data-icon-motion=arrow] { transform: translateX(var(--arrow-travel)); }
214
+ }
215
+ .duoop-button:active:not([aria-disabled=true]) { transform: translateY(var(--button-depth)) !important; box-shadow: none !important; transition-duration: 80ms; transition-timing-function: ease-out; }
216
+ .duoop-button[aria-pressed=true] { transform: translateY(var(--button-depth)); box-shadow: none; }
217
+ .duoop-button--ghost:hover:not([aria-disabled=true]) { box-shadow: none; }
218
+ .duoop-check { width: 20px; height: 20px; flex-shrink: 0; animation: duoop-confirm 280ms ease-out; }
219
+ .duoop-check path { stroke-dasharray: 1; stroke-dashoffset: 0; animation: duoop-draw 240ms ease-out; }
220
+ .duoop-button[data-status=error] .duoop-button-status { animation: duoop-error 240ms ease-out; }
221
+ .duoop-button [data-icon-motion=plus][data-activated=true] { animation: duoop-add 240ms ease-out; }
222
+ .duoop-button[aria-pressed=true] [data-icon-motion=star] { animation: duoop-confirm 280ms ease-out; }
223
+ .duoop-button[data-motion=discreet] .duoop-check, .duoop-button[data-motion=discreet] .duoop-button-status, .duoop-button[data-motion=discreet] .duoop-button-icon { animation: none; }
224
+ @keyframes duoop-draw { from { stroke-dashoffset: 1; } to { stroke-dashoffset: 0; } }
225
+ @keyframes duoop-confirm { 0% { transform: scale(.85); } 60% { transform: scale(1.12); } 100% { transform: scale(1); } }
226
+ @keyframes duoop-error { 25% { transform: translateX(-2px); } 65% { transform: translateX(2px); } 100% { transform: translateX(0); } }
227
+ @keyframes duoop-add { to { transform: rotate(90deg); } }
228
+ @media (prefers-reduced-motion: reduce) {
229
+ .duoop-button, .duoop-button *, .duoop-button::before { transition: none !important; animation: none !important; }
230
+ .duoop-button:hover:not([aria-disabled=true]):not([aria-pressed=true]) { transform: none; box-shadow: 0 var(--button-depth) 0 var(--button-edge); }
231
+ .duoop-button:hover [data-icon-motion=arrow] { transform: none; }
232
+ }
233
+ .duoop-button[data-motion=discreet] .favorite-star { animation: none; }
234
+
235
+ /* Intent variants share the same mechanical geometry. */
236
+ .duoop-button--destructive { --button-face: #b42332; --button-text: #fff; --button-edge: #681322; }
237
+ .duoop-button--destructive-outline { --button-face: #fff; --button-text: #a51d2d; --button-edge: #a51d2d; }
238
+ .duoop-button--destructive:focus-visible, .duoop-button--destructive-outline:focus-visible { outline-color: #a51d2d; }
239
+ .duoop-button--destructive[aria-pressed=true] { --button-face: #801b29; --button-text: #fff; --button-edge: #681322; }
240
+ .duoop-button--destructive-outline[aria-pressed=true] { --button-face: #ffe9ec; --button-text: #8a1927; --button-edge: #a51d2d; }
241
+ .duoop-button--link { --button-face: transparent; --button-text: #191919; --button-edge: transparent; --button-depth: 0px; padding-inline: 8px; border-radius: 4px; }
242
+ .duoop-button--link .duoop-button-label { text-decoration: underline; text-decoration-color: #b8b8b8; text-underline-offset: 5px; text-decoration-thickness: 1px; position: relative; }
243
+ .duoop-button--link .duoop-button-label::after { content: ''; position: absolute; inset: auto 0 -3px; height: 2px; background: currentColor; transform: scaleX(0); transform-origin: left; transition: transform 160ms ease-out; pointer-events: none; }
244
+ .duoop-button--link[aria-pressed=true] { --button-face: #efefef; --button-edge: transparent; }
245
+ .duoop-button--link:focus-visible .duoop-button-label::after { transform: scaleX(1); }
246
+ @media (hover: hover) {
247
+ .duoop-button--destructive:hover:not([aria-disabled=true]) { background: #981f2d; }
248
+ .duoop-button--destructive-outline:hover:not([aria-disabled=true]) { background: #fff0f2; }
249
+ .duoop-button--link:hover:not([aria-disabled=true]):not([aria-pressed=true]) { background: transparent; transform: none; box-shadow: none; }
250
+ .duoop-button--link:hover:not([aria-disabled=true]) .duoop-button-label::after { transform: scaleX(1); }
251
+ }
252
+ .duoop-button--link:disabled, .duoop-button--link[aria-disabled=true] { --button-depth: 0px; --button-edge: transparent; }
253
+ @media (prefers-reduced-motion: reduce) { .duoop-button--link .duoop-button-label::after { transition: none; } }
254
+ /* Custom palettes retain the semantics of filled, outlined and text variants. */
255
+ .duoop-button[data-custom-color] { --button-face:var(--custom-face); --button-text:var(--custom-text); --button-edge:var(--custom-edge); }
256
+ .duoop-button[data-custom-color]:is(.duoop-button--outline,.duoop-button--destructive-outline) { --button-face:#fff; --button-text:var(--custom-ink); --button-edge:var(--custom-ink); }
257
+ .duoop-button[data-custom-color]:is(.duoop-button--ghost,.duoop-button--link) { --button-face:transparent; --button-text:var(--custom-ink); --button-edge:transparent; }
258
+ .duoop-button[data-custom-color][aria-pressed=true] { --button-face:var(--custom-hover); }
259
+ .duoop-button[data-custom-color][aria-pressed=true]:is(.duoop-button--outline,.duoop-button--destructive-outline,.duoop-button--ghost,.duoop-button--link) { --button-face:var(--custom-tint); }
260
+ .duoop-button[data-custom-color]:focus-visible { outline-color:var(--custom-ink); }
261
+ @media (hover:hover) {
262
+ .duoop-button[data-custom-color]:hover:not([aria-disabled=true]) { background:var(--custom-hover); }
263
+ .duoop-button[data-custom-color]:is(.duoop-button--outline,.duoop-button--destructive-outline,.duoop-button--ghost,.duoop-button--link):hover:not([aria-disabled=true]) { background:var(--custom-tint); }
264
+ }
265
+ .duoop-button[data-custom-color]:disabled,.duoop-button[data-custom-color][aria-disabled=true]:not([data-status=loading]):not([data-status=success]) { --button-face:#efefef; --button-text:#777; --button-edge:#ccc; }
266
+
267
+ /* Outcomes share one visual rhythm: reveal, traced ring, then check. */
268
+ .action-feedback { --feedback-ink:#356247; --feedback-soft:#edf5ef; font-size: 12px; line-height:1.6; }
269
+ .action-feedback[data-tone=error] { --feedback-ink:#a51d2d; --feedback-soft:#fff2f3; }
270
+ .action-feedback-content { display:flex; align-items:center; gap:12px; padding:14px 16px; border-radius:10px; background:var(--feedback-soft); color:var(--feedback-ink); animation:feedback-reveal 280ms cubic-bezier(.2,.8,.2,1); }
271
+ .action-feedback-content svg { width:32px; height:32px; flex-shrink:0; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }
272
+ .feedback-orbit { stroke-dasharray:1; animation:feedback-trace 360ms ease-out both; transform:rotate(-90deg); transform-origin:center; }
273
+ .feedback-symbol { stroke-dasharray:1; animation:feedback-trace 240ms 160ms ease-out both; }
274
+ @keyframes feedback-trace { from { stroke-dashoffset:1; } to { stroke-dashoffset:0; } }
275
+ @keyframes feedback-reveal { from { opacity:0; transform:translateY(6px); } to { opacity:1; transform:translateY(0); } }
276
+ .duoop-button[data-status=success] { --button-face:#356247; --button-edge:#234631; --button-text:#fff; background:var(--button-face); color:var(--button-text); animation:feedback-reveal 240ms ease-out; }
277
+ .duoop-button[data-status=error] { --button-face:#a51d2d; --button-edge:#761725; --button-text:#fff; background:var(--button-face); color:var(--button-text); }
278
+ .duoop-button:focus-visible { outline:none; }
279
+ .duoop-button:focus-visible::after { content:''; position:absolute; inset:5px; border:1px solid currentColor; border-radius:4px; pointer-events:none; }
280
+ @media(prefers-reduced-motion:reduce) { .action-feedback-content,.feedback-orbit,.feedback-symbol,.duoop-button[data-status=success] { animation:none; } }
281
+
282
+ .action-feedback:empty { display:none; }
283
+ .duoop-badge {
284
+ --badge-strong:#373434; --badge-soft:#efeeee; --badge-edge:#1d1b1b;
285
+ display:inline-flex; align-items:center; justify-content:center; gap:6px; max-width:100%;
286
+ border:2px solid var(--badge-edge); box-shadow:0 2px 0 var(--badge-edge);
287
+ background:var(--badge-soft); color:var(--badge-strong);
288
+ font: 650 11px/1 var(--duoop-font, 'DM Sans', sans-serif); letter-spacing:.01em; white-space:nowrap;
289
+ vertical-align:middle; text-decoration:none; transform:translateY(0);
290
+ animation:badge-settle 260ms cubic-bezier(.2,1.55,.35,1) both;
291
+ }
292
+ .duoop-badge svg { width:1.15em; height:1.15em; flex:none; }
293
+ .duoop-badge--sm { min-height:23px; padding:4px 7px; font-size: 10px; }
294
+ .duoop-badge--md { min-height:29px; padding:6px 9px; }
295
+ .duoop-badge--lg { min-height:35px; padding:7px 12px; font-size: 12px; }
296
+ .duoop-badge--rounded { border-radius:6px; }
297
+ .duoop-badge--pill { border-radius:999px; padding-inline:11px; }
298
+ .duoop-badge--circle { width:2.75em; height:2.75em; padding:0; border-radius:8px; }
299
+ .duoop-badge--neutral { --badge-strong:#373434; --badge-soft:#efeeee; --badge-edge:#1d1b1b; }
300
+ .duoop-badge--brand { --badge-strong:#303b51; --badge-soft:#e9edf5; --badge-edge:#20283a; }
301
+ .duoop-badge--info { --badge-strong:#274e65; --badge-soft:#e7f2f7; --badge-edge:#214559; }
302
+ .duoop-badge--success { --badge-strong:#234f34; --badge-soft:#e8f4ec; --badge-edge:#234631; }
303
+ .duoop-badge--warning { --badge-strong:#62470e; --badge-soft:#fbf1cf; --badge-edge:#5a410e; }
304
+ .duoop-badge--danger { --badge-strong:#961b2a; --badge-soft:#fff0f2; --badge-edge:#761725; }
305
+ .duoop-badge.duoop-badge--solid { background:var(--badge-strong); color:#fff; }
306
+ .duoop-badge.duoop-badge--soft { background:var(--badge-soft); color:var(--badge-strong); }
307
+ .duoop-badge.duoop-badge--outline { background:#fff; color:var(--badge-strong); }
308
+ .duoop-badge--interactive { cursor:pointer; transition:transform 220ms cubic-bezier(.2,1.7,.35,1),box-shadow 220ms cubic-bezier(.2,1.7,.35,1),background-color 150ms ease-out,color 150ms ease-out; }
309
+ @media(hover:hover) { .duoop-badge--interactive:hover { transform:translateY(-2px) rotate(-1deg); box-shadow:0 4px 0 var(--badge-edge); } }
310
+ .duoop-badge--interactive:active { transform:translateY(2px) scale(.97); box-shadow:none; transition-duration:80ms; }
311
+ .duoop-badge--interactive:focus-visible,.duoop-badge__remove:focus-visible { outline:2px solid currentColor; outline-offset:-5px; border-style:solid; }
312
+ .duoop-badge[data-disabled] { opacity:.5; pointer-events:none; }
313
+ .duoop-badge__label { overflow:hidden; text-overflow:ellipsis; }
314
+ .duoop-badge__dot { width:8px; height:8px; flex:none; border:1.5px solid currentColor; background:currentColor; transform:rotate(45deg); border-radius:1px; }
315
+ .duoop-badge__spinner { width:12px; height:12px; border:2px solid currentColor; border-right-color:transparent; border-radius:50%; animation:badge-spin .65s linear infinite; }
316
+ .duoop-badge-group { display:inline-flex; align-items:stretch; max-width:100%; filter:drop-shadow(0 2px 0 var(--badge-edge,#1d1b1b)); }
317
+ .duoop-badge-group>.duoop-badge { border-radius:6px 0 0 6px; box-shadow:none; }
318
+ .duoop-badge__remove { min-width:32px; border:2px solid #1d1b1b; border-left:0; border-radius:0 6px 6px 0; background:#fff; color:#373434; font-size: 17px; font-weight:650; transition:transform 100ms ease-out,background-color 150ms ease-out; }
319
+ .duoop-badge__remove:hover { background:#e8e5e5; }
320
+ .duoop-badge__remove:active { transform:translateY(2px); }
321
+ @keyframes badge-spin { to { transform:rotate(360deg); } }
322
+ @keyframes badge-settle { from { opacity:0; transform:translateY(4px) scale(.94); } 70% { transform:translateY(-1px) scale(1.03); } to { opacity:1; transform:none; } }
323
+ @media(prefers-reduced-motion:reduce) {
324
+ .duoop-badge,.duoop-badge--interactive,.duoop-badge__remove { animation:none; transition:none; }
325
+ .duoop-badge--interactive:hover,.duoop-badge--interactive:active { transform:none; }
326
+ .duoop-badge__spinner { animation:none; border-style:solid; }
327
+ }
328
+ .duoop-dialog {
329
+ inset: 0; margin: auto; width: max-content; height: max-content; max-width: none;
330
+ max-height: none; padding: 0; border: 0; background: transparent; color: #373434; overflow: visible;
331
+ }
332
+ .duoop-dialog::backdrop { background: rgb(37 42 52 / .38); backdrop-filter: blur(3px); animation: dialog-backdrop 200ms ease-out; }
333
+ .duoop-dialog[open] { animation: dialog-enter 250ms cubic-bezier(.2,.8,.2,1); }
334
+ .duoop-dialog__surface {
335
+ position: relative; display: flex; flex-direction: column; width: min(calc(100vw - 32px),560px);
336
+ max-height: min(calc(100dvh - 48px),760px); border: 2px solid #373434; border-radius: 16px;
337
+ background: #fff; box-shadow: 0 6px 0 #1d1b1b; overflow: hidden;
338
+ }
339
+ .duoop-dialog--sm .duoop-dialog__surface { width: min(calc(100vw - 32px),420px); }
340
+ .duoop-dialog--lg .duoop-dialog__surface { width: min(calc(100vw - 32px),760px); }
341
+ .duoop-dialog--xl .duoop-dialog__surface { width: min(calc(100vw - 32px),980px); }
342
+ .duoop-dialog--fullscreen .duoop-dialog__surface { width: calc(100vw - 32px); height: calc(100dvh - 32px); max-height: none; }
343
+ .duoop-dialog__header { flex-shrink: 0; padding: 32px 76px 24px 32px; background: #f7f6f5; border-bottom: 2px solid #373434; }
344
+ .duoop-dialog__header h2 { margin: 0 0 10px; font-size: 28px; font-weight: 600; line-height: 1.15; letter-spacing: -.9px; text-wrap: balance; }
345
+ .duoop-dialog__header p { margin: 0; color: #686565; font-size: 13px; line-height: 1.65; max-width: 48ch; }
346
+ .duoop-dialog__body { padding: 28px 32px; min-height: 0; overflow: auto; overscroll-behavior: contain; font-size: 13px; line-height: 1.65; }
347
+ .duoop-dialog__body > :first-child { margin-top: 0; }
348
+ .duoop-dialog__body > :last-child { margin-bottom: 0; }
349
+ .duoop-dialog__body > * + .action-feedback { margin-block-start: 20px; }
350
+ .duoop-dialog__footer { flex-shrink: 0; padding: 20px 32px 24px; border-top: 1px solid #dedada; background: #faf9f8; display: flex; justify-content: flex-end; gap: 12px; }
351
+ .duoop-dialog__footer[data-bare] { border: 0; background: #fff; padding-top: 0; }
352
+ .duoop-dialog__close { position: absolute; z-index: 1; inset-block-start: 24px; inset-inline-end: 24px; width: 44px; height: 44px; color: inherit; border: 2px solid #373434; border-radius: 10px; background: #fff; box-shadow: 0 3px 0 #1d1b1b; display: grid; place-items: center; cursor: pointer; transition: transform 180ms cubic-bezier(.2,.8,.2,1),box-shadow 180ms ease,background 150ms ease; }
353
+ .duoop-dialog__close:hover { background: #f0eeee; transform: translateY(-2px); box-shadow: 0 5px 0 #1d1b1b; }
354
+ .duoop-dialog__close:active { transform: translateY(3px); box-shadow: 0 0 0 #1d1b1b; }
355
+ .duoop-dialog__close:focus-visible { outline: 2px solid #373434; outline-offset: -7px; }
356
+ .duoop-dialog__close svg { width: 19px; height: 19px; fill: none; stroke: currentColor; stroke-width: 2; }
357
+ .duoop-dialog__body input,.duoop-dialog__body textarea { box-sizing: border-box; width: 100%; min-height: 46px; margin-top: 8px; border: 2px solid #777474; border-radius: 10px; padding: 12px 14px; background: #fff; color: #373434; font: inherit; font-weight: 400; transition: border-color 150ms ease,background 150ms ease; }
358
+ .duoop-dialog__body input:focus,.duoop-dialog__body textarea:focus { outline: none; border-color: #373434; background: #faf9f8; box-shadow: inset 3px 0 #373434; }
359
+ .duoop-dialog__body [aria-invalid=true] { border-color: #a51d2d; background: #fff2f3; color: #a51d2d; }
360
+ .duoop-dialog__body label { display: block; font-weight: 600; }
361
+ .duoop-dialog__body label + label { margin-top: 20px; }
362
+ .duoop-dialog__body textarea { resize: vertical; }
363
+ .dialog-demo-eyebrow { display: block; margin-bottom: 16px; color: #686565; font-size: 10px; font-weight: 600; letter-spacing: 1.6px; text-transform: uppercase; }
364
+ .dialog-demo-project { display: flex; align-items: center; gap: 18px; margin-bottom: 24px; }
365
+ .dialog-demo-project svg { width: 48px; height: 56px; flex-shrink: 0; fill: #f0eeee; stroke: #373434; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
366
+ .dialog-demo-project strong { display: block; font-size: 19px; font-weight: 600; letter-spacing: -.4px; }
367
+ .dialog-demo-project span { display: block; margin-block-start: 5px; color: #686565; font-size: 12px; }
368
+ .dialog-demo-details { margin: 0; border-block: 1px solid #dedada; }
369
+ .dialog-demo-details > div { display: flex; justify-content: space-between; gap: 20px; padding: 13px 0; }
370
+ .dialog-demo-details > div + div { border-top: 1px solid #e9e6e4; }
371
+ .dialog-demo-details dt { color: #686565; }
372
+ .dialog-demo-details dd { margin: 0; font-weight: 550; text-align: end; }
373
+ .dialog-demo-note { margin: 20px 0 0; color: #686565; font-size: 12px; }
374
+ .dialog-demo-note + .duoop-button { margin-block-start: 16px; }
375
+ .dialog-demo-error { color: #a51d2d; margin: 8px 0 20px; font-size: 12px; }
376
+ .dialog-demo-section { padding-block: 20px; border-bottom: 1px solid #dedada; }
377
+ .dialog-demo-section h3 { font-size: 16px; margin: 0 0 8px; }
378
+ .dialog-demo-section p { margin: 0; color: #686565; }
379
+ @keyframes dialog-enter { from { opacity: 0; transform: translateY(18px) scale(.975); } to { opacity: 1; transform: none; } }
380
+ @keyframes dialog-backdrop { from { opacity: 0; } to { opacity: 1; } }
381
+ @media (max-width:600px) {
382
+ .duoop-dialog--mobile-bottom { inset: auto 0 0; margin: 0; width: 100%; }
383
+ .duoop-dialog--mobile-bottom .duoop-dialog__surface { width: 100%; box-sizing: border-box; max-height: 88dvh; border-radius: 16px 16px 0 0; border-bottom: 0; }
384
+ .duoop-dialog--mobile-fullscreen { margin: 0; width: 100%; }
385
+ .duoop-dialog--mobile-fullscreen .duoop-dialog__surface { width: 100%; box-sizing: border-box; height: 100dvh; max-height: none; border: 0; border-radius: 0; box-shadow: none; }
386
+ .duoop-dialog__header { padding: 24px 72px 22px 20px; }
387
+ .duoop-dialog__header h2 { font-size: 25px; }
388
+ .duoop-dialog__close { inset-block-start: 20px; inset-inline-end: 18px; }
389
+ .duoop-dialog__body { padding: 24px 20px; }
390
+ .duoop-dialog__footer { padding: 18px 20px max(24px,env(safe-area-inset-bottom)); flex-wrap: wrap; }
391
+ .duoop-dialog__footer > .duoop-button { flex: 1; }
392
+ .duoop-dialog__body input,.duoop-dialog__body textarea { font-size: 16px; }
393
+ }
394
+ @media(prefers-reduced-motion:reduce) { .duoop-dialog[open],.duoop-dialog::backdrop { animation: dialog-backdrop 120ms ease-out; } .duoop-dialog__close { transition: none; } .duoop-dialog__close:hover,.duoop-dialog__close:active { transform: none; } }
395
+ /* Placement is kept separate from the surface styling. */
396
+ .duoop-dialog { inset: 0; margin: auto; }
397
+ @media (max-width: 600px) {
398
+ .duoop-dialog--mobile-bottom { inset: auto 0 0; margin: 0; }
399
+ .duoop-dialog--mobile-fullscreen { inset: 0; margin: 0; }
400
+ }
401
+ .feedback-surface {
402
+ --feedback-face:#fff; --feedback-ink:#373434; --feedback-muted:#686565;
403
+ --feedback-edge:#1d1b1b; --feedback-track:#e8e4e4; --feedback-soft:#f0eeee;
404
+ --feedback-success:#356247; --feedback-success-soft:#edf5ef;
405
+ --feedback-error:#a51d2d; --feedback-error-soft:#fff2f3;
406
+ --feedback-warning:#80521a; --feedback-warning-soft:#fff5e5;
407
+ color:var(--feedback-ink); color-scheme:light;
408
+ }
409
+ .feedback-surface[data-theme=dark] {
410
+ --feedback-face:#252323; --feedback-ink:#f3eeee; --feedback-muted:#bdb5b5;
411
+ --feedback-edge:#b0a6a6; --feedback-track:#4c4545; --feedback-soft:#383333;
412
+ --feedback-success:#9cd5ad; --feedback-success-soft:#25392c;
413
+ --feedback-error:#ff9dab; --feedback-error-soft:#3b282d;
414
+ --feedback-warning:#edc48a; --feedback-warning-soft:#403222; color-scheme:dark;
415
+ }
416
+ .feedback-icon { width:24px; height:24px; flex:none; }
417
+ .feedback-surface .duoop-button--outline { --button-face:var(--feedback-face); --button-text:var(--feedback-ink); --button-edge:var(--feedback-edge); }
418
+ .feedback-surface .duoop-button--outline:hover:not([aria-disabled=true]) { background:var(--feedback-soft); }
419
+ .feedback-demo { width:100%; min-width:0; display:flex; flex-direction:column; gap:24px; }
420
+ .feedback-demo-actions { display:flex; gap:12px; align-items:center; flex-wrap:wrap; }
421
+ .feedback-demo-note { margin:0; font-size: 12px; line-height:1.7; color:var(--feedback-muted); }
422
+ .feedback-lab { margin:0 0 48px; border:1px solid var(--border); border-radius:12px; overflow:hidden; }
423
+ .feedback-lab-heading { padding:24px 28px; border-bottom:1px solid var(--border); }
424
+ .feedback-lab-heading h3 { margin:0 0 8px; font-size: 20px; }
425
+ .feedback-lab-heading p { margin:0; font-size: 13px; color:var(--muted); line-height:1.7; }
426
+ .feedback-lab-layout { display:grid; grid-template-columns:minmax(230px,.8fr) minmax(0,1.2fr); }
427
+ .feedback-lab-controls { display:grid; align-content:start; grid-template-columns:repeat(2,minmax(0,1fr)); gap:20px; padding:28px; }
428
+ .feedback-lab-controls>label { display:flex; flex-direction:column; gap:8px; font-size: 12px; font-weight:600; min-width:0; }
429
+ .feedback-lab-controls input[type=range] { width:100%; margin:0; appearance:none; height:44px; background:transparent; padding:0; accent-color:#373434; cursor:pointer; }
430
+ .feedback-lab-controls input[type=range]::-webkit-slider-runnable-track { height:8px; border:2px solid #1d1b1b; border-radius:4px; background:#e8e4e4; }
431
+ .feedback-lab-controls input[type=range]::-webkit-slider-thumb { appearance:none; width:20px; height:24px; margin-top:-10px; border:2px solid #1d1b1b; border-radius:5px; background:#fff; box-shadow:0 3px 0 #1d1b1b; }
432
+ .feedback-lab-controls input[type=range]::-moz-range-track { height:5px; border:2px solid #1d1b1b; border-radius:4px; background:#e8e4e4; }
433
+ .feedback-lab-controls input[type=range]::-moz-range-thumb { width:16px; height:20px; border:2px solid #1d1b1b; border-radius:5px; background:#fff; box-shadow:0 3px 0 #1d1b1b; }
434
+ .feedback-lab-controls input[type=range]:focus-visible { outline:2px solid #373434; outline-offset:-4px; border-radius:4px; }
435
+ .feedback-lab-controls .duoop-switch { grid-column:1/-1; }
436
+ .feedback-lab-stage { background:var(--feedback-soft); padding:40px; display:flex; flex-direction:column; justify-content:center; gap:28px; min-width:0; min-height:330px; }
437
+ .toast-showcase .gallery-card-preview,.progress-showcase .gallery-card-preview { padding:32px 24px; min-height:280px; align-items:center; }
438
+ .toast-showcase .gallery-grid,.progress-showcase .gallery-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
439
+ @media(max-width:1000px) { .feedback-lab-layout { grid-template-columns:1fr; } }
440
+ @media(max-width:650px) { .toast-showcase .gallery-grid,.progress-showcase .gallery-grid { grid-template-columns:1fr; } .feedback-lab-stage { padding:28px 20px; } .feedback-lab-controls,.feedback-lab-heading { padding:20px; } .toast-showcase .gallery-card-preview,.progress-showcase .gallery-card-preview { padding:28px 20px; } }
441
+ .feedback-lab-controls .duoop-select-field { min-width:0; }
442
+ .feedback-lab-controls .duoop-select { min-width:0; }
443
+ @media(max-width:500px) { .feedback-lab-controls { grid-template-columns:minmax(0,1fr); } }
444
+ /* Shared presentation for the three related catalogue families. */
445
+ .stepper-showcase .gallery-grid,.reaction-button-showcase .gallery-grid,.achievement-showcase .gallery-grid { grid-template-columns:repeat(2,minmax(0,1fr)); align-items:start; }
446
+ .stepper-showcase .gallery-card--wide,.achievement-showcase .gallery-card--wide { grid-column:1 / -1; }
447
+ .stepper-showcase .gallery-card-preview,.reaction-button-showcase .gallery-card-preview,.achievement-showcase .gallery-card-preview { min-height:280px; padding:36px 28px; }
448
+ .experience-demo { width:100%; min-width:0; display:flex; flex-direction:column; align-items:stretch; gap:24px; }
449
+ .experience-demo[data-theme=dark] { padding:24px; background:var(--feedback-face); border-radius:10px; }
450
+ .experience-kicker { margin:0; color:var(--feedback-muted); font-size: 10px; font-weight:650; letter-spacing:.12em; text-transform:uppercase; }
451
+ .experience-demo h4,.experience-demo h5 { margin:0; color:var(--feedback-ink); }
452
+ .experience-demo p { overflow-wrap:anywhere; }
453
+ .experience-actions { display:flex; align-items:center; flex-wrap:wrap; gap:12px; }
454
+ .experience-note { margin:0; font-size: 12px; line-height:1.7; color:var(--feedback-muted); }
455
+ .experience-state-list { display:grid; gap:16px; }
456
+ .experience-panel { padding:24px; border:2px solid var(--feedback-edge); border-radius:10px; box-shadow:0 4px 0 var(--feedback-edge); background:var(--feedback-face); display:grid; gap:16px; min-width:0; }
457
+ .experience-panel h4 { font-size: 18px; letter-spacing:-.4px; }
458
+ .experience-panel p { margin:0; font-size: 13px; line-height:1.7; color:var(--feedback-muted); }
459
+ .experience-error { color:var(--feedback-error); font-size: 12px; line-height:1.7; margin:0; }
460
+ .experience-surface .duoop-badge { --badge-strong:var(--feedback-ink); --badge-soft:var(--feedback-soft); --badge-edge:var(--feedback-edge); }
461
+ .experience-surface .duoop-badge--success { --badge-strong:var(--feedback-success); --badge-soft:var(--feedback-success-soft); --badge-edge:var(--feedback-success); }
462
+ .experience-surface .duoop-badge--warning { --badge-strong:var(--feedback-warning); --badge-soft:var(--feedback-warning-soft); --badge-edge:var(--feedback-warning); }
463
+ .experience-surface .duoop-badge--danger { --badge-strong:var(--feedback-error); --badge-soft:var(--feedback-error-soft); --badge-edge:var(--feedback-error); }
464
+ .experience-surface .duoop-badge--outline { background:var(--feedback-face); }
465
+ .experience-surface .duoop-button--outline[aria-pressed=true] { --button-face:var(--feedback-soft); --button-text:var(--feedback-ink); --button-edge:var(--feedback-edge); }
466
+ .experience-surface[data-theme=dark] .duoop-button--solid { --button-face:#f3eeee; --button-text:#252323; --button-edge:#b0a6a6; }
467
+ .experience-surface[data-theme=dark] .duoop-button--solid:hover:not([aria-disabled=true]) { background:#d8cece; }
468
+ .experience-surface[data-theme=dark] .duoop-button:disabled { --button-face:#383333; --button-text:#bdb5b5; --button-edge:#746a6a; }
469
+ .experience-surface .duoop-checkbox { --check-fg:var(--feedback-ink); --check-muted:var(--feedback-muted); --check-bg:var(--feedback-face); --check-border:var(--feedback-edge); --check-soft:var(--feedback-soft); --check-error:var(--feedback-error); --check-shadow:var(--feedback-edge); }
470
+ @media(max-width:700px) {
471
+ .stepper-showcase .gallery-grid,.reaction-button-showcase .gallery-grid,.achievement-showcase .gallery-grid { grid-template-columns:minmax(0,1fr); }
472
+ .stepper-showcase .gallery-card-preview,.reaction-button-showcase .gallery-card-preview,.achievement-showcase .gallery-card-preview { padding:28px 20px; }
473
+ }
474
+ .duoop-reaction { position:relative; display:inline-flex; align-items:center; flex-wrap:wrap; gap:12px; max-width:100%; color:var(--feedback-ink,#373434); }
475
+ .reaction-control-wrap { position:relative; display:inline-flex; max-width:100%; }
476
+ .reaction-button .duoop-button-label { display:flex; align-items:center; gap:12px; }
477
+ .reaction-label { display:inline-grid; }
478
+ .reaction-label>span { grid-area:1 / 1; }
479
+ .reaction-label-reserve { visibility:hidden; height:0; pointer-events:none; }
480
+ .reaction-button .duoop-button-reserve { display:none; }
481
+ .reaction-button { min-width:100px; }
482
+ .reaction-button.duoop-button--icon { min-width:44px; }
483
+ .reaction-glyph { display:inline-flex; align-items:center; justify-content:center; }
484
+ .reaction-button .duoop-button-icon svg { width:20px; height:20px; }
485
+ .reaction-count { display:inline-block; font-variant-numeric:tabular-nums; animation:reaction-count-in 220ms cubic-bezier(.2,1.5,.3,1); }
486
+ .reaction-button .reaction-count { border-inline-start:1px solid currentColor; padding-inline-start:12px; }
487
+ .duoop-reaction[data-feedback=pulse] .reaction-glyph[data-activated=true],.duoop-reaction[data-feedback=particles] .reaction-glyph[data-activated=true] { animation:reaction-pop 360ms cubic-bezier(.2,1.5,.3,1); }
488
+ .duoop-reaction[data-feedback=soft] .reaction-glyph[data-activated=true] { animation:reaction-fade 180ms ease-out; }
489
+ .duoop-reaction[data-feedback=instant] .reaction-count,.duoop-reaction[data-feedback=instant] .duoop-button { animation:none; transition:none; }
490
+ .duoop-reaction[data-state=error] .reaction-button { --button-face:var(--feedback-error-soft,#fff2f3); --button-text:var(--feedback-error,#a51d2d); --button-edge:var(--feedback-error,#a51d2d); }
491
+ .duoop-reaction[data-state=error] .reaction-button:hover { background:var(--feedback-error-soft,#fff2f3); }
492
+ .reaction-message { flex-basis:100%; font-size: 12px; line-height:1.65; color:var(--feedback-muted,#686565); }
493
+ .duoop-reaction[data-state=error] .reaction-message { color:var(--feedback-error,#a51d2d); }
494
+ .reaction-readonly { display:inline-flex; align-items:center; gap:12px; min-height:44px; padding:8px 14px; border:2px solid var(--feedback-edge,#1d1b1b); border-radius:10px; background:var(--feedback-soft,#f0eeee); font-size: 13px; }
495
+ .reaction-readonly svg { width:20px; height:20px; }
496
+ .reaction-group { display:flex; align-items:flex-start; gap:16px; flex-wrap:wrap; }
497
+ .reaction-particles { pointer-events:none; position:absolute; inset:50% auto auto 22px; width:1px; height:1px; color:var(--feedback-ink,#373434); }
498
+ .reaction-particles i { position:absolute; width:4px; height:7px; border-radius:1px; background:currentColor; opacity:0; animation:reaction-particle 480ms ease-out both; --particle-distance:40px; }
499
+ .reaction-summary { display:flex; align-items:center; gap:16px; flex-wrap:wrap; font-size: 13px; }
500
+ .reaction-summary-marks { display:flex; padding-inline-end:6px; }
501
+ .reaction-summary-marks>span,.reaction-person-icon { display:grid; place-items:center; width:36px; height:36px; border:2px solid var(--feedback-edge,#1d1b1b); border-radius:8px; background:var(--feedback-face,#fff); box-shadow:0 3px 0 var(--feedback-edge,#1d1b1b); }
502
+ .reaction-summary-marks>span+span { margin-inline-start:-6px; }
503
+ .reaction-summary-marks svg,.reaction-person-icon svg { width:20px; height:20px; }
504
+ .reaction-picker { z-index:1200; max-width:calc(100vw - 24px); padding:16px; border:2px solid var(--feedback-edge); border-radius:10px; background:var(--feedback-face); box-shadow:0 5px 0 var(--feedback-edge); animation:reaction-picker-in 200ms cubic-bezier(.2,.8,.2,1); }
505
+ .reaction-picker>p { font-size: 12px; font-weight:650; margin:0 0 14px; }
506
+ .reaction-picker>div { display:grid; grid-template-columns:repeat(3,44px); gap:14px; justify-content:space-between; }
507
+ .reaction-picker svg { width:20px; height:20px; }
508
+ .reaction-detail-filters { display:flex; gap:12px; flex-wrap:wrap; margin-bottom:24px; }
509
+ .reaction-details ul { padding:0; margin:0 0 16px; list-style:none; }
510
+ .reaction-details li { display:flex; align-items:center; gap:16px; padding:16px 0; border-bottom:1px solid var(--feedback-track); }
511
+ .reaction-details li>span:nth-child(2) { flex:1; min-width:0; }
512
+ .reaction-details strong { display:block; font-size: 13px; }
513
+ .reaction-details small { display:block; font-size: 12px; color:var(--feedback-muted); margin-top:5px; }
514
+ .reaction-details li>svg { width:20px; height:20px; }
515
+ .reaction-editorial { border-block-start:2px solid var(--feedback-edge); padding-top:20px; display:grid; gap:20px; }
516
+ .reaction-editorial h4 { font-size: 21px; line-height:1.3; letter-spacing:-.5px; }
517
+ .reaction-editorial>p { font-size: 13px; line-height:1.8; color:var(--feedback-muted); margin:0; }
518
+ @keyframes reaction-pop { 0% { transform:scale(.75) rotate(-12deg); } 55% { transform:scale(1.3) rotate(8deg); } to { transform:none; } }
519
+ @keyframes reaction-count-in { from { opacity:.4; transform:translateY(5px); } to { opacity:1; transform:none; } }
520
+ @keyframes reaction-fade { from { opacity:.35; } to { opacity:1; } }
521
+ @keyframes reaction-particle { 0% { opacity:0; transform:rotate(var(--particle-angle)) translateY(-10px) scale(.4); } 20% { opacity:1; } to { opacity:0; transform:rotate(var(--particle-angle)) translateY(calc(-1 * var(--particle-distance))) scale(.4); } }
522
+ @keyframes reaction-picker-in { from { opacity:0; translate:0 6px; } to { opacity:1; translate:0 0; } }
523
+ @media(prefers-reduced-motion:reduce) { .reaction-glyph,.reaction-count,.reaction-picker,.reaction-particles i { animation:none !important; transition:none; } .reaction-particles { display:none; } }
524
+
525
+ .reaction-button-showcase .experience-state-list>div:has(>.experience-kicker) { display:flex; flex-direction:column; align-items:flex-start; gap:12px; }
526
+ .reaction-button-showcase .experience-state-list { gap:28px; }
527
+ .duoop-input {
528
+ display:block; width:100%; min-width:0; min-height:44px; margin:0; padding:10px 13px;
529
+ border:2px solid #777474; border-radius:10px; background:#fff; color:#252323;
530
+ box-shadow:none; font: inherit; font-size: 14px; line-height:1.4;
531
+ transition:border-color 140ms ease,box-shadow 180ms ease-out; caret-color:#252323;
532
+ }
533
+ .duoop-input--sm { min-height:36px; padding:7px 11px; font-size: 12px; box-shadow:none; }
534
+ .duoop-input--lg { min-height:52px; padding:12px 16px; font-size: 16px; }
535
+ .duoop-input::placeholder { color:#767171; opacity:1; }
536
+ .duoop-input:hover:not(:disabled) { border-color:#373434; }
537
+ .duoop-input:focus { border-color:#373434; outline:none; box-shadow:0 3px 0 #373434; }
538
+ .duoop-input:disabled { background:#efefef; color:#777; border-color:#ccc; box-shadow:none; cursor:not-allowed; }
539
+ .duoop-input[aria-invalid=true] { border-color:#a51d2d; box-shadow:none; }
540
+ .duoop-input[aria-invalid=true]:focus { box-shadow:0 3px 0 #a51d2d; }
541
+ .duoop-input[type=file] { font-size: 12px; padding:6px; }
542
+ .duoop-input::file-selector-button { border:0; border-right:1px solid #d1cece; padding:7px 10px; margin-right:10px; background:#efeded; color:#373434; font: inherit; font-weight:600; border-radius:5px; cursor:pointer; }
543
+ .duoop-field { display:flex; flex-direction:column; gap:10px; width:100%; min-width:0; }
544
+ .duoop-field>label { font-size: 13px; font-weight:600; color:#373434; }
545
+ .field-required { font-size: 11px; font-weight:400; color:#717171; }
546
+ .duoop-field p { margin:0; font-size: 12px; line-height:1.6; }
547
+ .duoop-field .field-help { color:#686565; }
548
+ .duoop-field .field-message { color:#a51d2d; }
549
+ .duoop-field[data-state=success] .field-message { color:#37633f; }
550
+ .duoop-field[data-state=success] .duoop-input { border-color:#527a59; box-shadow:none; }
551
+ .duoop-field[data-state=success] .duoop-input:focus { box-shadow:0 3px 0 #527a59; }
552
+ .duoop-field>div:empty { display:none; }
553
+ .forms-showcase .gallery-card-preview { min-height:190px; }
554
+ .form-demo { width:100%; max-width:380px; display:flex; flex-direction:column; gap:20px; }
555
+ .form-demo .duoop-input { margin:0; }
556
+ .input-adjacent { display:flex; align-items:start; gap:10px; width:100%; }
557
+ .input-adjacent .duoop-button { flex-shrink:0; padding-inline:12px; }
558
+ .form-notice { margin:0; font-size: 12px; line-height:1.6; color:#37633f; }
559
+ .forms-showcase .gallery-card-preview:has(.form-demo) { align-items:start; }
560
+ @media(prefers-reduced-motion:reduce) { .duoop-input { transition:none; } }
561
+ @media(max-width:380px) { .input-adjacent { flex-direction:column; } }
562
+
563
+
564
+
565
+ .form-validation-error { display:flex; align-items:center; gap:9px; margin:0; padding:10px 12px; border:2px solid #a51d2d; border-radius:10px; color:#a51d2d; background:#fff5f5; font-size: 12px; line-height:1.6; animation:form-feedback-in 180ms ease-out; }
566
+ .form-validation-error>span { flex-shrink:0; display:grid; place-items:center; width:18px; height:18px; border:1.5px solid currentColor; border-radius:50%; font-size: 11px; font-weight:700; }
567
+ .form-demo>div:empty { display:none; }
568
+ @keyframes form-feedback-in { from { opacity:0; transform:translateY(-3px); } to { opacity:1; transform:translateY(0); } }
569
+ @media(prefers-reduced-motion:reduce) { .form-validation-error { animation:none; } }
570
+
571
+ .field-content { display:flex; flex-direction:column; gap:10px; min-width:0; }
572
+ .field-feedback:empty { display:none; }
573
+ .duoop-field label, .duoop-field p { overflow-wrap:anywhere; }
574
+ .duoop-field[data-disabled=true]>label { color:#686565; }
575
+ .field-help a { color:inherit; text-decoration:underline; text-underline-offset:3px; }
576
+ .field-help a:focus-visible { outline:none; text-decoration-thickness:3px; }
577
+ .field-message { display:flex; align-items:baseline; gap:9px; }
578
+ .field-group { width:100%; min-width:0; margin:0; padding:0; border:0; }
579
+ .field-group legend { padding:0; margin-bottom:16px; font-size: 14px; font-weight:600; }
580
+ .field-group .duoop-field + .duoop-field { margin-top:16px; }
581
+ @media(min-width:768px) {
582
+ .duoop-field--horizontal { display:grid; grid-template-columns:minmax(0, 1fr) minmax(0, 2fr); align-items:start; gap:16px; }
583
+ .duoop-field--horizontal>label { padding-top:12px; }
584
+ }
585
+ /* Error palettes include content and surfaces, not just an isolated red edge. */
586
+ .duoop-field[data-state=error] > label { color:#a51d2d; }
587
+ .duoop-input[aria-invalid=true] { color:#a51d2d; background:#fff5f5; }
588
+ .duoop-field[data-state=error] .field-required, .duoop-field[data-state=error] .field-help { color:#945663; }
589
+ .duoop-field[data-state=success] .field-message { padding:12px; border-radius:8px; background:#edf5ef; }
590
+ .duoop-field[data-state=success] .field-message>span { display:grid; place-items:center; width:24px; height:24px; border:1px solid currentColor; border-radius:50%; animation:field-confirm 300ms ease-out; }
591
+ @keyframes field-confirm { from { opacity:0; transform:scale(.6) rotate(-20deg); } to { opacity:1; transform:scale(1); } }
592
+ @media(prefers-reduced-motion:reduce) { .duoop-field[data-state=success] .field-message>span { animation:none; } }
593
+
594
+ .duoop-textarea { min-height:112px; }
595
+ .duoop-textarea.duoop-input--sm { min-height:84px; }
596
+ .duoop-textarea.duoop-input--lg { min-height:144px; }
597
+ .duoop-input-group { display:flex; flex-wrap:wrap; align-items:center; gap:8px; width:100%; min-width:0; padding:4px 10px; border:2px solid #777474; border-radius:10px; background:#fff; color:#686565; transition:border-color 140ms ease,box-shadow 180ms ease-out; }
598
+ .duoop-input-group:hover { border-color:#373434; }
599
+ .duoop-input-group:focus-within { border-color:#373434; box-shadow:0 3px 0 #373434; }
600
+ .duoop-input-group:has([aria-invalid=true]) { border-color:#a51d2d; }
601
+ .duoop-input-group:has([aria-invalid=true]):focus-within { box-shadow:0 3px 0 #a51d2d; }
602
+ .duoop-input-group>.duoop-input { order:1; flex:1; width:0; min-width:0; min-height:32px; padding:4px 0; border:0; border-radius:0; background:transparent; box-shadow:none; }
603
+ .duoop-input-group>.duoop-textarea { flex-basis:100%; width:100%; min-height:100px; }
604
+ .input-group-addon { display:flex; align-items:center; gap:8px; flex-shrink:0; font-size: 13px; }
605
+ .input-group-addon--inline-start { order:0; }
606
+ .input-group-addon--inline-end { order:2; }
607
+ .input-group-addon--block-start { order:0; flex-basis:100%; padding:6px 0; }
608
+ .input-group-addon--block-end { order:3; flex-basis:100%; justify-content:space-between; padding:6px 0; }
609
+ .duoop-input-group--sm>.duoop-input { min-height:24px; font-size: 12px; }
610
+ .duoop-input-group--lg>.duoop-input { min-height:40px; font-size: 16px; }
611
+ .duoop-input-group .duoop-button { padding:5px 9px; min-height:30px; }
612
+ .duoop-input-group .duoop-button--icon { width:30px; padding:5px; }
613
+ .form-icon { width:17px; height:17px; flex-shrink:0; }
614
+ .input-group-text { white-space:nowrap; }
615
+ .input-group-badge,.input-group-kbd { padding:3px 6px; border:1px solid #ccc; border-radius:5px; background:#f3f1f1; font-size: 10px; white-space:nowrap; }
616
+ .input-group-label { font-size: 11px; font-weight:600; }
617
+ .form-tooltip { position:relative; display:flex; }
618
+ .form-tooltip [role=tooltip] { position:absolute; bottom:calc(100% + 10px); right:0; width:180px; padding:10px; border-radius:7px; background:#373434; color:white; font-size: 12px; line-height:1.5; z-index:4; box-shadow:0 3px 8px #0002; }
619
+ .textarea-counter { text-align:right; font-size: 12px; color:#686565; margin:0; font-variant-numeric:tabular-nums; }
620
+ .textarea-counter[data-limit=true] { color:#a51d2d; }
621
+ .enriched-demo { width:100%; display:flex; flex-direction:column; gap:10px; }
622
+ .enriched-demo .form-notice:empty { display:none; }
623
+ .mini-textarea { min-height:86px; white-space:normal; }
624
+ @media(prefers-reduced-motion:reduce) { .duoop-input-group { transition:none; } }
625
+ /* Compound controls use one border and one focus treatment. */
626
+ .duoop-textarea { scrollbar-width:thin; scrollbar-color:#aaa5a5 transparent; }
627
+ .textarea-resizable { position:relative; width:100%; min-width:0; padding-bottom:18px; border:2px solid #777474; border-radius:10px; background:#fff; transition:border-color 140ms ease,box-shadow 180ms ease-out; }
628
+ .textarea-resizable:hover { border-color:#373434; }
629
+ .textarea-resizable:focus-within { border-color:#373434; box-shadow:0 3px 0 #373434; }
630
+ .textarea-resizable>.duoop-textarea { border:0; border-radius:8px; box-shadow:none; }
631
+ .textarea-resize-handle { position:absolute; bottom:0; left:calc(50% - 24px); width:48px; height:24px; display:grid; place-items:center; border:0; background:transparent; cursor:ns-resize; touch-action:none; padding:0; }
632
+ .textarea-resize-handle span { width:24px; height:3px; border-radius:3px; background:#b3adad; transition:background 140ms ease; }
633
+ .textarea-resize-handle:hover span,.textarea-resize-handle:focus-visible span { background:#373434; }
634
+ .textarea-resize-handle:focus-visible { outline:2px solid #373434; outline-offset:0; border-radius:4px; }
635
+ .duoop-input[type=search]::-webkit-search-cancel-button,.duoop-input[type=search]::-webkit-search-decoration { -webkit-appearance:none; appearance:none; }
636
+ .group-icon-action,.group-loading-action { display:grid; place-items:center; flex-shrink:0; width:32px; height:32px; padding:0; border:0; border-radius:6px; background:transparent; color:#686565; transition:background 140ms ease,color 140ms ease,transform 140ms ease; }
637
+ .group-icon-action:hover,.group-loading-action:hover { background:#efeded; color:#252323; }
638
+ .group-icon-action:active,.group-loading-action:active { transform:scale(.94); }
639
+ .group-icon-action:focus,.group-loading-action:focus { outline:none; }
640
+ .group-icon-action:focus-visible,.group-loading-action:focus-visible { background:#e5e1e1; color:#252323; box-shadow:inset 0 -2px #373434; }
641
+ .group-icon-action--send .form-icon { width:22px; height:22px; }
642
+ .group-send-action { display:flex; align-items:center; justify-content:center; gap:9px; min-height:32px; padding:5px 4px 5px 12px; border:0; border-left:1px solid #dedada; border-radius:0; background:transparent; color:#373434; font-size: 12px; font-weight:650; white-space:nowrap; }
643
+ .group-send-action .form-icon { width:19px; height:19px; transition:transform 160ms ease; }
644
+ .group-send-action:hover .form-icon { transform:translateX(2px); }
645
+ .group-send-action:active .form-icon { transform:translateX(3px) scale(.94); }
646
+ .group-send-action:focus { outline:none; }
647
+ .group-send-action:focus-visible { background:#efeded; box-shadow:inset 0 -2px #373434; border-radius:4px; }
648
+ .group-status { font-size: 11px; line-height:1.5; color:#777171; }
649
+ .group-status:empty { display:none; }
650
+ .group-loader { display:block; width:18px; height:18px; border:2px solid #ddd8d8; border-top-color:#373434; border-radius:50%; animation:duoop-spin .75s linear infinite; }
651
+ .message-composer { padding:0; gap:0; overflow:hidden; }
652
+ .message-composer>.duoop-textarea { margin:0; padding:16px; min-height:144px; border-radius:0; }
653
+ .message-composer .composer-toolbar { display:flex; align-items:center; justify-content:space-between; gap:12px; min-height:52px; padding:10px 14px; background:#f8f7f7; }
654
+ .composer-toolbar.input-group-addon--block-start { border-bottom:1px solid #e8e5e5; }
655
+ .composer-toolbar.input-group-addon--block-end { border-top:1px solid #e8e5e5; }
656
+ .composer-label { display:flex; align-items:center; gap:8px; color:#686565; font-size: 12px; font-weight:500; }
657
+ .composer-count { color:#686565; font-size: 11px; font-variant-numeric:tabular-nums; }
658
+ .composer-toolbar .group-send-action { border:0; border-radius:6px; padding:6px 10px; background:#eae7e7; }
659
+ .composer-toolbar .group-send-action:hover { background:#e1dddd; }
660
+ @media(prefers-reduced-motion:reduce) { .group-loader { animation:none; border-style:solid; } .group-icon-action,.group-loading-action,.group-send-action .form-icon,.textarea-resizable,.textarea-resize-handle span { transition:none; } }
661
+ .textarea-resize-handle:focus { outline:none; }
662
+ .textarea-resize-handle:focus-visible { outline:none; background:#efeded; }
663
+ @supports selector(::-webkit-scrollbar) {
664
+ .duoop-textarea { scrollbar-width:auto; scrollbar-color:auto; }
665
+ }
666
+ [data-done=true] .form-icon { animation:send-confirm 300ms ease-out; color:#356247; }
667
+ [data-done=true] .form-icon path { stroke-dasharray:32; animation:send-trace 280ms ease-out; }
668
+ @keyframes send-confirm { from { transform:scale(.65) rotate(-15deg); opacity:0; } to { transform:scale(1); opacity:1; } }
669
+ @keyframes send-trace { from { stroke-dashoffset:32; } to { stroke-dashoffset:0; } }
670
+ .duoop-input-group:has([aria-invalid=true]) { background:#fff5f5; color:#a51d2d; }
671
+ @media(prefers-reduced-motion:reduce) { [data-done=true] .form-icon,[data-done=true] .form-icon path { animation:none; } }
672
+ .duoop-input {
673
+ display:block; width:100%; min-width:0; min-height:44px; margin:0; padding:10px 13px;
674
+ border:2px solid #777474; border-radius:10px; background:#fff; color:#252323;
675
+ box-shadow:none; font: inherit; font-size: 14px; line-height:1.4;
676
+ transition:border-color 140ms ease,box-shadow 180ms ease-out; caret-color:#252323;
677
+ }
678
+ .duoop-input--sm { min-height:36px; padding:7px 11px; font-size: 12px; box-shadow:none; }
679
+ .duoop-input--lg { min-height:52px; padding:12px 16px; font-size: 16px; }
680
+ .duoop-input::placeholder { color:#767171; opacity:1; }
681
+ .duoop-input:hover:not(:disabled) { border-color:#373434; }
682
+ .duoop-input:focus { border-color:#373434; outline:none; box-shadow:0 3px 0 #373434; }
683
+ .duoop-input:disabled { background:#efefef; color:#777; border-color:#ccc; box-shadow:none; cursor:not-allowed; }
684
+ .duoop-input[aria-invalid=true] { border-color:#a51d2d; box-shadow:none; }
685
+ .duoop-input[aria-invalid=true]:focus { box-shadow:0 3px 0 #a51d2d; }
686
+ .duoop-input[type=file] { font-size: 12px; padding:6px; }
687
+ .duoop-input::file-selector-button { border:0; border-right:1px solid #d1cece; padding:7px 10px; margin-right:10px; background:#efeded; color:#373434; font: inherit; font-weight:600; border-radius:5px; cursor:pointer; }
688
+ .duoop-field { display:flex; flex-direction:column; gap:10px; width:100%; min-width:0; }
689
+ .duoop-field>label { font-size: 13px; font-weight:600; color:#373434; }
690
+ .field-required { font-size: 11px; font-weight:400; color:#717171; }
691
+ .duoop-field p { margin:0; font-size: 12px; line-height:1.6; }
692
+ .duoop-field .field-help { color:#686565; }
693
+ .duoop-field .field-message { color:#a51d2d; }
694
+ .duoop-field[data-state=success] .field-message { color:#37633f; }
695
+ .duoop-field[data-state=success] .duoop-input { border-color:#527a59; box-shadow:none; }
696
+ .duoop-field[data-state=success] .duoop-input:focus { box-shadow:0 3px 0 #527a59; }
697
+ .duoop-field>div:empty { display:none; }
698
+ .forms-showcase .gallery-card-preview { min-height:190px; }
699
+ .form-demo { width:100%; max-width:380px; display:flex; flex-direction:column; gap:20px; }
700
+ .form-demo .duoop-input { margin:0; }
701
+ .input-adjacent { display:flex; align-items:start; gap:10px; width:100%; }
702
+ .input-adjacent .duoop-button { flex-shrink:0; padding-inline:12px; }
703
+ .form-notice { margin:0; font-size: 12px; line-height:1.6; color:#37633f; }
704
+ .forms-showcase .gallery-card-preview:has(.form-demo) { align-items:start; }
705
+ @media(prefers-reduced-motion:reduce) { .duoop-input { transition:none; } }
706
+ @media(max-width:380px) { .input-adjacent { flex-direction:column; } }
707
+
708
+
709
+
710
+ .form-validation-error { display:flex; align-items:center; gap:9px; margin:0; padding:10px 12px; border:2px solid #a51d2d; border-radius:10px; color:#a51d2d; background:#fff5f5; font-size: 12px; line-height:1.6; animation:form-feedback-in 180ms ease-out; }
711
+ .form-validation-error>span { flex-shrink:0; display:grid; place-items:center; width:18px; height:18px; border:1.5px solid currentColor; border-radius:50%; font-size: 11px; font-weight:700; }
712
+ .form-demo>div:empty { display:none; }
713
+ @keyframes form-feedback-in { from { opacity:0; transform:translateY(-3px); } to { opacity:1; transform:translateY(0); } }
714
+ @media(prefers-reduced-motion:reduce) { .form-validation-error { animation:none; } }
715
+
716
+ .field-content { display:flex; flex-direction:column; gap:10px; min-width:0; }
717
+ .field-feedback:empty { display:none; }
718
+ .duoop-field label, .duoop-field p { overflow-wrap:anywhere; }
719
+ .duoop-field[data-disabled=true]>label { color:#686565; }
720
+ .field-help a { color:inherit; text-decoration:underline; text-underline-offset:3px; }
721
+ .field-help a:focus-visible { outline:none; text-decoration-thickness:3px; }
722
+ .field-message { display:flex; align-items:baseline; gap:9px; }
723
+ .field-group { width:100%; min-width:0; margin:0; padding:0; border:0; }
724
+ .field-group legend { padding:0; margin-bottom:16px; font-size: 14px; font-weight:600; }
725
+ .field-group .duoop-field + .duoop-field { margin-top:16px; }
726
+ @media(min-width:768px) {
727
+ .duoop-field--horizontal { display:grid; grid-template-columns:minmax(0, 1fr) minmax(0, 2fr); align-items:start; gap:16px; }
728
+ .duoop-field--horizontal>label { padding-top:12px; }
729
+ }
730
+ /* Error palettes include content and surfaces, not just an isolated red edge. */
731
+ .duoop-field[data-state=error] > label { color:#a51d2d; }
732
+ .duoop-input[aria-invalid=true] { color:#a51d2d; background:#fff5f5; }
733
+ .duoop-field[data-state=error] .field-required, .duoop-field[data-state=error] .field-help { color:#945663; }
734
+ .duoop-field[data-state=success] .field-message { padding:12px; border-radius:8px; background:#edf5ef; }
735
+ .duoop-field[data-state=success] .field-message>span { display:grid; place-items:center; width:24px; height:24px; border:1px solid currentColor; border-radius:50%; animation:field-confirm 300ms ease-out; }
736
+ @keyframes field-confirm { from { opacity:0; transform:scale(.6) rotate(-20deg); } to { opacity:1; transform:scale(1); } }
737
+ @media(prefers-reduced-motion:reduce) { .duoop-field[data-state=success] .field-message>span { animation:none; } }
738
+ .number-field { width:100%; min-width:0; }
739
+ .number-control { display:flex; align-items:stretch; min-height:44px; border:2px solid #777474; border-radius:10px; background:#fff; transition:border-color 140ms ease,box-shadow 180ms ease-out; overflow:hidden; }
740
+ .number-control:hover { border-color:#373434; }
741
+ .number-control:focus-within { border-color:#373434; box-shadow:0 3px 0 #373434; }
742
+ .number-control input { width:100%; min-width:0; margin:0; padding:10px 4px; border:0; border-radius:0; background:transparent; color:#252323; font: inherit; font-size: 14px; text-align:center; font-variant-numeric:tabular-nums; outline:none; }
743
+ .number-control button { flex:0 0 42px; padding:0; border:0; border-radius:0; color:#373434; background:transparent; font: inherit; font-size: 20px; cursor:pointer; transition:background 140ms ease,transform 120ms ease; }
744
+ .number-control button:hover:not(:disabled) { background:#efeded; }
745
+ .number-control button:active:not(:disabled) { transform:translateY(2px); }
746
+ .number-control button:focus-visible { outline:2px solid #373434; outline-offset:-5px; border-radius:8px; }
747
+ .number-control button:disabled { color:#b2adad; cursor:not-allowed; }
748
+ .number-field--sm .number-control { min-height:36px; }
749
+ .number-field--sm input { padding:7px 4px; font-size: 12px; }
750
+ .number-field--lg .number-control { min-height:52px; }
751
+ .number-field--lg input { font-size: 16px; padding:12px 4px; }
752
+ .number-scrub { display:flex; align-items:center; gap:8px; width:fit-content; margin-bottom:10px; color:#686565; font-size: 12px; cursor:ew-resize; touch-action:none; user-select:none; }
753
+ .number-field[data-invalid=true] .number-control { border-color:#a51d2d; }
754
+ .number-field[data-invalid=true] .number-control:focus-within { box-shadow:0 3px 0 #a51d2d; }
755
+ .number-error { color:#a51d2d; font-size: 12px; margin:10px 0 0; }
756
+ .number-field[data-disabled=true] .number-control { border-color:#ccc; background:#efefef; box-shadow:none; }
757
+ .number-field[data-disabled=true] input { color:#777; cursor:not-allowed; }
758
+ .number-field[data-disabled=true] .number-scrub { cursor:not-allowed; }
759
+ .otp-field { position:relative; width:100%; max-width:340px; min-width:0; }
760
+ .otp-field>input { position:absolute; inset:0; z-index:1; width:100%; height:100%; margin:0; opacity:0; cursor:text; font-size: 16px; }
761
+ .otp-slots { display:flex; gap:6px; align-items:center; }
762
+ .otp-slot { display:grid; place-items:center; flex:1; min-width:0; height:44px; border:2px solid #777474; border-radius:10px; background:#fff; color:#767171; font-size: 18px; font-variant-numeric:tabular-nums; transition:border-color 140ms ease,box-shadow 180ms ease-out; }
763
+ .otp-slot[data-filled=true] { color:#252323; }
764
+ .otp-slot[data-filled=true]>span { animation:otp-character-in 150ms ease-out; }
765
+ .otp-slot[data-active=true] { border-color:#373434; box-shadow:0 3px 0 #373434; }
766
+ .otp-field--lg .otp-slot { height:52px; font-size: 22px; }
767
+ .otp-separator { color:#8d8585; font-size: 12px; }
768
+ .otp-field[data-invalid=true] .otp-slot { border-color:#a51d2d; }
769
+ .otp-field[data-invalid=true] .otp-slot[data-active=true] { box-shadow:0 3px 0 #a51d2d; }
770
+ .duoop-field[data-state=success] .otp-slot { border-color:#527a59; }
771
+ .otp-field[data-disabled=true] .otp-slot { background:#efefef; border-color:#ccc; color:#777; }
772
+ .otp-field[data-disabled=true]>input { cursor:not-allowed; }
773
+ @keyframes otp-character-in { from { opacity:0; transform:translateY(3px); } to { opacity:1; transform:translateY(0); } }
774
+ @media(prefers-reduced-motion:reduce) { .number-control,.number-control button,.otp-slot { transition:none; } .otp-slot[data-filled=true]>span { animation:none; } .number-control button:active:not(:disabled) { transform:none; } }
775
+ .number-field[data-invalid=true] .number-control, .otp-field[data-invalid=true] .otp-slot { background:#fff5f5; color:#a51d2d; }
776
+ .number-field[data-invalid=true] .number-control input, .number-field[data-invalid=true] .number-control button:not(:disabled) { color:#a51d2d; }
777
+ .duoop-field[data-state=success] .otp-slot { background:#edf5ef; color:#356247; }
778
+ .duoop-checkbox, .duoop-checkbox-group, .checkbox-surface {
779
+ --check-fg:#373434; --check-muted:#686565; --check-bg:#fff; --check-border:#777474; --check-soft:#f0eeee; --check-error:#a51d2d; --check-shadow:#1d1b1b;
780
+ color:var(--check-fg); min-width:0;
781
+ }
782
+ .checkbox-surface[data-theme=dark] { --check-fg:#f3eeee; --check-muted:#bdb5b5; --check-bg:#252323; --check-border:#b0a6a6; --check-soft:#383333; --check-error:#ff9dab; --check-shadow:#111; background:var(--check-bg); color:var(--check-fg); color-scheme:dark; }
783
+
784
+ /* Theme tokens inherit through each primitive, including nested groups. */
785
+ .checkbox-surface[data-theme=dark] :is(.duoop-checkbox,.duoop-checkbox-group) { --check-fg:#f3eeee; --check-muted:#bdb5b5; --check-bg:#252323; --check-border:#b0a6a6; --check-soft:#383333; --check-error:#ff9dab; --check-shadow:#111; }
786
+ .duoop-checkbox { --check-size:20px; font-size: 13px; line-height:1.5; }
787
+ .duoop-checkbox--sm { --check-size:16px; font-size: 12px; }
788
+ .duoop-checkbox--lg { --check-size:24px; font-size: 15px; }
789
+ .checkbox-label { display:flex; align-items:flex-start; gap:11px; min-height:44px; padding-block:11px; cursor:pointer; margin:0; font: inherit; }
790
+ .checkbox-control { position:relative; flex:0 0 var(--check-size); width:var(--check-size); height:var(--check-size); margin-block:1px; }
791
+ .checkbox-control input { position:absolute; inset:0; opacity:0; width:100%; height:100%; min-height:0; padding:0; margin:0; cursor:inherit; z-index:1; }
792
+ .checkbox-box { position:absolute; inset:0; display:grid; place-items:center; background:var(--check-bg); border:2px solid var(--check-border); border-radius:5px; box-shadow:0 2px 0 var(--check-border); transition:background-color 140ms ease, border-color 140ms ease, transform 140ms ease, box-shadow 140ms ease; }
793
+ .checkbox-box svg { width:100%; height:100%; stroke:var(--check-bg); stroke-width:2.3; stroke-linecap:round; stroke-linejoin:round; }
794
+ .checkbox-tick { stroke-dasharray:18; stroke-dashoffset:18; opacity:0; transition:stroke-dashoffset 160ms ease-out, opacity 100ms ease; }
795
+ .checkbox-dash { opacity:0; transform:scaleX(.4); transform-origin:center; transition:transform 140ms ease, opacity 100ms ease; }
796
+ .checkbox-control input:checked + .checkbox-box, .checkbox-control input:indeterminate + .checkbox-box { background:var(--check-fg); border-color:var(--check-fg); box-shadow:0 2px 0 var(--check-shadow); }
797
+ .checkbox-control input:checked:not(:indeterminate) + .checkbox-box .checkbox-tick { stroke-dashoffset:0; opacity:1; }
798
+ .checkbox-control input:indeterminate + .checkbox-box .checkbox-dash { opacity:1; transform:scaleX(1); }
799
+ .checkbox-label:hover .checkbox-control input:not(:disabled) + .checkbox-box { border-color:var(--check-fg); }
800
+ .checkbox-label:active .checkbox-control input:not(:disabled):not([readonly]) + .checkbox-box { transform:translateY(2px); box-shadow:0 0 0 var(--check-shadow); }
801
+ .checkbox-control input:focus-visible + .checkbox-box { outline:2px solid currentColor; outline-offset:-5px; border-style:solid; }
802
+ .checkbox-content { display:flex; flex:1; min-width:0; flex-direction:column; gap:5px; }
803
+ .checkbox-title { display:flex; align-items:baseline; flex-wrap:wrap; gap:5px 7px; font-weight:550; overflow-wrap:anywhere; }
804
+ .checkbox-title small { color:var(--check-muted); font-size: 11px; font-weight:400; }
805
+ .checkbox-description { color:var(--check-muted); font-size: 12px; line-height:1.65; overflow-wrap:anywhere; }
806
+ .checkbox-badge { border:1px solid var(--check-border); border-radius:5px; padding:0 6px; font-size: 10px; font-weight:500; }
807
+ .checkbox-icon { line-height:1; }
808
+ .duoop-checkbox[data-position=after] .checkbox-control { order:2; }
809
+ .duoop-checkbox--row .checkbox-label, .duoop-checkbox--card .checkbox-label { padding:16px; border:2px solid var(--check-border); border-radius:10px; transition:background-color 140ms ease,border-color 140ms ease,box-shadow 140ms ease; }
810
+ .duoop-checkbox--row .checkbox-label { padding:12px; border-color:transparent; }
811
+ .duoop-checkbox--card .checkbox-label:has(input:checked), .duoop-checkbox--card .checkbox-label:has(input:indeterminate) { background:var(--check-soft); border-color:var(--check-fg); box-shadow:0 3px 0 var(--check-shadow); }
812
+ .duoop-checkbox--row .checkbox-label:hover:not(:has(input:disabled)), .duoop-checkbox--card .checkbox-label:hover:not(:has(input:disabled)) { background:var(--check-soft); }
813
+ .checkbox-label:has(input:disabled) { opacity:.5; cursor:not-allowed; }
814
+ .duoop-checkbox[data-readonly] .checkbox-label { cursor:default; }
815
+ .checkbox-control input[aria-invalid=true] + .checkbox-box { border-color:var(--check-error); box-shadow:0 2px 0 var(--check-error); }
816
+ .duoop-checkbox--card .checkbox-label:has(input[aria-invalid=true]) { border-color:var(--check-error); box-shadow:0 3px 0 var(--check-error); }
817
+ .checkbox-error { margin:8px 0 0; color:var(--check-error); font-size: 12px; line-height:1.6; }
818
+ .duoop-checkbox-group { width:100%; padding:0; margin:0; border:0; }
819
+ .duoop-checkbox-group legend { font-size: 13px; font-weight:600; padding:0; margin-bottom:12px; }
820
+ .checkbox-group-description { color:var(--check-muted); font-size: 12px; line-height:1.6; margin:0 0 12px; }
821
+ .checkbox-options { display:flex; flex-direction:column; gap:8px; }
822
+ .checkbox-options--horizontal { flex-direction:row; flex-wrap:wrap; gap:8px 20px; }
823
+ .checkbox-options--grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,180px),1fr)); gap:12px; }
824
+ .checkbox-children { padding-inline-start:22px; margin-inline-start:9px; border-inline-start:1px solid var(--check-border); }
825
+ .checkbox-illustration { display:grid; place-items:center; height:65px; border-radius:6px; background:var(--check-soft); }
826
+ .checkbox-illustration svg { width:48px; height:48px; stroke:currentColor; }
827
+ @media(prefers-reduced-motion:reduce) { .checkbox-box,.checkbox-tick,.checkbox-dash,.duoop-checkbox--row .checkbox-label,.duoop-checkbox--card .checkbox-label { transition:none; } }
828
+ @media(forced-colors:active) { .checkbox-box { forced-color-adjust:none; background:Canvas; border-color:ButtonText; } .checkbox-control input:checked + .checkbox-box,.checkbox-control input:indeterminate + .checkbox-box { background:Highlight; border-color:Highlight; } .checkbox-box svg { stroke:HighlightText; } }
829
+
830
+
831
+
832
+ /* Invalid is a complete palette, never a red edge around a neutral fill. */
833
+ .duoop-checkbox:has(input[aria-invalid=true]) { --check-fg:var(--check-error); --check-border:var(--check-error); --check-shadow:var(--check-error); --check-soft:#fff2f3; --check-muted:#945663; }
834
+ .checkbox-surface[data-theme=dark] .duoop-checkbox:has(input[aria-invalid=true]) { --check-fg:var(--check-error); --check-border:var(--check-error); --check-shadow:#ad6070; --check-soft:#3b282d; --check-muted:#dfadba; }
835
+ .checkbox-control input:focus { outline:none; }
836
+ .checkbox-error { animation:checkbox-feedback 220ms ease-out; }
837
+ @keyframes checkbox-feedback { from { opacity:0; transform:translateY(-3px); } to { opacity:1; transform:translateY(0); } }
838
+ /* An illustrated option reads as a document cover, with the control in its header. */
839
+ .duoop-checkbox:has(.checkbox-illustration) .checkbox-label { position:relative; padding:22px; }
840
+ .duoop-checkbox:has(.checkbox-illustration) .checkbox-control { position:absolute; inset-block-start:20px; inset-inline-end:20px; }
841
+ .checkbox-illustration { height:138px; margin:-6px -6px 12px; background:transparent; }
842
+ .checkbox-illustration svg { width:156px; height:118px; overflow:visible; }
843
+ .brief-sheet { fill:var(--check-bg); stroke:var(--check-border); transition:transform 300ms cubic-bezier(.2,.8,.2,1); transform-origin:center; }
844
+ .brief-sheet--back { fill:var(--check-soft); transform:rotate(-9deg) translate(-8px,2px); }
845
+ .checkbox-label:hover .brief-sheet--back { transform:rotate(-14deg) translate(-12px,0); }
846
+ .checkbox-label:has(input:checked) .brief-sheet--front { transform:translateY(-4px) rotate(3deg); }
847
+ .brief-lines { stroke:var(--check-border); }
848
+ @media(prefers-reduced-motion:reduce) { .checkbox-error { animation:none; } .brief-sheet { transition:none; } }
849
+ @media(forced-colors:active) { .checkbox-control input:focus-visible + .checkbox-box { border:3px solid Highlight; } }
850
+ .selection-group, .duoop-switch, .selection-surface { color:var(--selection-fg,#373434); font-size: 13px; line-height:1.5; min-width:0; }
851
+ .selection-surface { --selection-fg:#373434; --selection-muted:#686565; --selection-bg:#fff; --selection-border:#777474; --selection-soft:#f0eeee; --selection-shadow:#1d1b1b; --selection-error:#a51d2d; padding:24px; border-radius:10px; background:var(--selection-bg); }
852
+ .selection-surface[data-theme=dark] { --selection-fg:#f3eeee; --selection-muted:#bdb5b5; --selection-bg:#252323; --selection-border:#b0a6a6; --selection-soft:#383333; --selection-shadow:#111; --selection-error:#ff9dab; color-scheme:dark; }
853
+ .selection-group { border:0; padding:0; margin:0; width:100%; }
854
+ .selection-group legend { font-size: 13px; font-weight:600; padding:0; margin-bottom:12px; }
855
+ .selection-group small,.selection-title small { font-size: 11px; font-weight:400; }
856
+ .selection-help { display:block; margin:0; color:var(--selection-muted,#686565); font-size: 12px; line-height:1.7; overflow-wrap:anywhere; }
857
+ .selection-group > .selection-help { margin-bottom:14px; }
858
+ .radio-options { display:flex; flex-direction:column; gap:10px; }
859
+ .radio-options--horizontal { flex-direction:row; flex-wrap:wrap; gap:8px 24px; }
860
+ .radio-options--grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,160px),1fr)); gap:16px; }
861
+ .radio-option,.switch-label { display:flex; align-items:center; gap:12px; min-height:44px; margin:0; padding:10px 0; cursor:pointer; font: inherit; position:relative; }
862
+ .radio-option { align-items:flex-start; }
863
+ .selection-content { display:flex; flex:1; min-width:0; flex-direction:column; gap:6px; }
864
+ .selection-title { display:flex; flex-wrap:wrap; align-items:center; gap:8px; font-size: 13px; font-weight:550; overflow-wrap:anywhere; }
865
+ .selection-icon { display:inline-block; margin-inline-end:8px; font-size: 19px; vertical-align:middle; }
866
+ .selection-icon svg { display:block; }
867
+ .selection-badge { border:1px solid var(--selection-border,#777474); border-radius:5px; padding:1px 6px; font-size: 10px; font-weight:500; }
868
+ .radio-control { flex:0 0 20px; width:20px; height:20px; position:relative; margin-block:1px; }
869
+ .radio-control input,.switch-control input { position:absolute; inset:0; width:100%; height:100%; min-height:0; margin:0; padding:0; opacity:0; cursor:inherit; z-index:1; }
870
+ .radio-control input:focus,.switch-control input:focus { outline:none; }
871
+ .radio-disc { position:absolute; inset:0; border:2px solid var(--selection-border,#777474); border-radius:50%; background:var(--selection-bg,#fff); box-shadow:0 2px 0 var(--selection-border,#777474); display:grid; place-items:center; transition:transform 180ms cubic-bezier(.2,.8,.2,1),box-shadow 120ms ease,border-color 140ms ease,background-color 140ms ease; }
872
+ .radio-disc > span { width:8px; height:8px; border-radius:50%; background:var(--selection-fg,#373434); transform:scale(0); opacity:0; transition:transform 180ms cubic-bezier(.2,1.5,.4,1),opacity 120ms ease; }
873
+ .radio-control input:checked + .radio-disc { border-color:var(--selection-fg,#373434); box-shadow:0 2px 0 var(--selection-shadow,#1d1b1b); }
874
+ .radio-control input:checked + .radio-disc > span { opacity:1; transform:scale(1); }
875
+ .radio-option:hover:not(:has(:disabled)) .radio-disc { border-color:var(--selection-fg,#373434); }
876
+ .radio-option:active:not(:has(:disabled)) .radio-disc { transform:translateY(2px) scale(.94); box-shadow:0 0 0 var(--selection-shadow,#1d1b1b); }
877
+ .radio-control input:focus-visible + .radio-disc,.switch-control input:focus-visible + .switch-track { border-style:solid; outline:2px solid currentColor; outline-offset:-5px; }
878
+ .radio-option--row,.radio-option--card { padding:18px; border:2px solid var(--selection-border,#777474); border-radius:10px; transition:background-color 160ms ease, border-color 160ms ease, transform 180ms cubic-bezier(.2,.8,.2,1),box-shadow 140ms ease; }
879
+ .radio-option--row:has(:checked),.radio-option--card:has(:checked) { background:var(--selection-soft,#f0eeee); border-color:var(--selection-fg,#373434); box-shadow:0 3px 0 var(--selection-shadow,#1d1b1b); }
880
+ .radio-option--row:hover:not(:has(:disabled)),.radio-option--card:hover:not(:has(:disabled)) { background:var(--selection-soft,#f0eeee); transform:translateY(-1px); }
881
+ .radio-option--row:active:not(:has(:disabled)),.radio-option--card:active:not(:has(:disabled)) { transform:translateY(2px); box-shadow:0 0 0 var(--selection-shadow,#1d1b1b); }
882
+ .radio-option[data-indicator=corner] { padding-top:48px; }
883
+ .radio-option[data-indicator=corner] .radio-control { position:absolute; inset-inline-end:16px; inset-block-start:16px; }
884
+ .radio-options--list { gap:0; border:2px solid var(--selection-border,#777474); border-radius:10px; overflow:hidden; }
885
+ .radio-option--list { padding:16px; }
886
+ .radio-option--list + .radio-option--list { border-top:1px solid var(--selection-border,#777474); }
887
+ .radio-option--list:has(:checked),.radio-option--list:hover:not(:has(:disabled)) { background:var(--selection-soft,#f0eeee); }
888
+ .radio-option:has(:disabled),.switch-label:has(:disabled) { opacity:.48; cursor:not-allowed; }
889
+ .selection-price { font-size: 25px; font-weight:600; margin-block:6px; letter-spacing:-.7px; }
890
+ .selection-price small { font-size: 11px; font-weight:400; letter-spacing:0; color:var(--selection-muted,#686565); }
891
+ .selection-features { display:flex; flex-direction:column; gap:8px; margin-top:10px; font-size: 12px; }
892
+ .selection-swatch { width:100%; height:76px; border:1px solid var(--selection-border,#777474); border-radius:6px; }
893
+ .selection-image { display:block; margin-bottom:12px; }
894
+ .selection-image svg { width:100%; height:110px; display:block; transition:transform 260ms cubic-bezier(.2,.8,.2,1); }
895
+ .radio-option:hover .selection-image svg,.radio-option:has(:checked) .selection-image svg { transform:translateY(-3px) rotate(-1deg); }
896
+ .duoop-switch { --switch-width:44px; --switch-height:26px; --switch-travel:18px; }
897
+ .duoop-switch--sm { --switch-width:36px; --switch-height:22px; --switch-travel:14px; }
898
+ .duoop-switch--lg { --switch-width:54px; --switch-height:32px; --switch-travel:22px; }
899
+ .switch-control { position:relative; width:var(--switch-width); height:var(--switch-height); flex:0 0 var(--switch-width); }
900
+ .switch-track { position:absolute; inset:0; border:2px solid var(--selection-border,#777474); border-radius:40px; background:var(--selection-soft,#f0eeee); box-shadow:0 2px 0 var(--selection-border,#777474); transition:background-color 180ms ease,border-color 180ms ease,box-shadow 120ms ease,transform 120ms ease; }
901
+ .switch-thumb { position:absolute; inset-block-start:3px; inset-inline-start:3px; width:calc(var(--switch-height) - 10px); height:calc(var(--switch-height) - 10px); border-radius:50%; background:var(--selection-bg,#fff); box-shadow:0 1px 2px #0005; border:1px solid var(--selection-border,#777474); display:grid; place-items:center; transition:translate 210ms cubic-bezier(.2,1.2,.35,1),scale 100ms ease; }
902
+ .switch-control input:checked + .switch-track { background:var(--selection-fg,#373434); border-color:var(--selection-fg,#373434); box-shadow:0 2px 0 var(--selection-shadow,#1d1b1b); }
903
+ .switch-control input:checked + .switch-track .switch-thumb { translate:var(--switch-travel) 0; }
904
+ [dir=rtl] .switch-control input:checked + .switch-track .switch-thumb { translate:calc(-1 * var(--switch-travel)) 0; }
905
+ .switch-label:hover:not(:has(:disabled)) .switch-track { border-color:var(--selection-fg,#373434); }
906
+ .switch-label:active:not(:has(:disabled)) .switch-track { transform:translateY(1px); box-shadow:0 1px 0 var(--selection-shadow,#1d1b1b); }
907
+ .switch-label:active:not(:has(:disabled)) .switch-thumb { scale:1.12 .94; }
908
+ .switch-label[data-position=end] .switch-control { order:3; margin-inline-start:auto; }
909
+ .switch-state { font-size: 11px; color:var(--selection-muted,#686565); min-width:52px; }
910
+ .switch-state-on,.switch-label:has(:checked) .switch-state-off { display:none; }
911
+ .switch-label:has(:checked) .switch-state-on { display:inline; }
912
+ .switch-track-icons { position:absolute; inset:0 4px; display:flex; justify-content:space-between; align-items:center; font-size: 10px; color:var(--selection-muted,#686565); }
913
+ .switch-control input:checked + .switch-track .switch-track-icons { color:var(--selection-bg,#fff); }
914
+ .duoop-switch--card .switch-label { border:2px solid var(--selection-border,#777474); border-radius:10px; padding:18px; transition:background-color 160ms ease,box-shadow 160ms ease; }
915
+ .duoop-switch--card .switch-label:has(:checked) { background:var(--selection-soft,#f0eeee); box-shadow:0 3px 0 var(--selection-shadow,#1d1b1b); }
916
+ .duoop-switch--row .switch-label { padding-block:16px; }
917
+ .switch-spinner { width:10px; height:10px; border:2px solid var(--selection-border,#777474); border-top-color:transparent; border-radius:50%; animation:selection-spin 650ms linear infinite; }
918
+ @keyframes selection-spin { to { rotate:360deg; } }
919
+ .selection-error { font-size: 12px; line-height:1.7; color:var(--selection-error,#a51d2d); margin:12px 0 0; animation:selection-reveal 220ms ease-out; }
920
+ [data-invalid=true].selection-group,[data-invalid=true].duoop-switch { --selection-fg:var(--selection-error,#a51d2d); --selection-border:var(--selection-error,#a51d2d); --selection-shadow:var(--selection-error,#a51d2d); --selection-soft:#fff2f3; }
921
+ .selection-surface[data-theme=dark] [data-invalid=true] { --selection-soft:#3b282d; }
922
+ .selection-reveal { margin-top:18px; padding-top:18px; border-top:1px solid var(--selection-border,#777474); animation:selection-reveal 240ms ease-out; }
923
+ @keyframes selection-reveal { from { opacity:0; transform:translateY(-5px); } to { opacity:1; transform:translateY(0); } }
924
+ @media(prefers-reduced-motion:reduce) { .radio-disc,.radio-disc > span,.radio-option,.selection-image svg,.switch-track,.switch-thumb,.duoop-switch--card .switch-label { transition:none; } .selection-error,.selection-reveal,.switch-spinner { animation:none; } }
925
+ @media(forced-colors:active) { .radio-disc,.switch-track { forced-color-adjust:none; background:Canvas; border-color:ButtonText; } .radio-disc > span { background:Highlight; } .switch-control input:checked + .switch-track { background:Highlight; border-color:Highlight; } .switch-thumb { background:Canvas; border-color:ButtonText; } }
926
+ .duoop-select-field{position:relative;display:grid;gap:7px;width:max-content;max-width:100%;color:#373434;font-size: 13px}.duoop-select-field>label{font-weight:600}.duoop-select-field--fixed{width:280px}.duoop-select-field--full{width:100%}.duoop-select__help,.duoop-select__error{font-size: 11px;line-height:1.5;color:#686565}.duoop-select__error{color:#a51d2d}.duoop-select{--select-face:#fff;--select-edge:#373434;min-width:220px;max-width:100%;height:48px;padding:0 13px 0 15px;border:2px solid var(--select-edge);border-radius:10px;background:var(--select-face);box-shadow:0 3px 0 #1d1b1b;color:#373434;display:flex;align-items:center;gap:12px;text-align:left;font: 500 13px/1.3 inherit;cursor:pointer;transition:transform 100ms ease,box-shadow 120ms ease,background 150ms ease}.duoop-select>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.duoop-select>span[data-placeholder]{color:#777474}.duoop-select>svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;flex:none;transition:transform 200ms ease}.duoop-select[aria-expanded=true]>svg{transform:rotate(180deg)}.duoop-select:hover:not(:disabled){background:#f4f2f2}.duoop-select:active:not(:disabled){transform:translateY(2px);box-shadow:0 1px 0 #1d1b1b}.duoop-select:focus-visible{outline:2px solid var(--select-edge);outline-offset:-6px}.duoop-select:disabled{opacity:.45;cursor:not-allowed}.duoop-select[aria-invalid=true]{--select-edge:#a51d2d;background:#fff5f5;box-shadow:0 3px 0 #761725}.duoop-select--sm{height:40px;min-width:180px}.duoop-select--lg{height:56px;min-width:260px;font-size: 14px}.duoop-select--ghost{border-color:transparent;box-shadow:none}.duoop-select--filled{background:#f0eeee}.duoop-select-field--full .duoop-select{width:100%}.duoop-select__popup{position:absolute;z-index:30;inset-block-start:calc(100% + 9px);inset-inline:0;min-width:max(100%,240px);animation:select-open 180ms cubic-bezier(.2,.8,.2,1);transform-origin:top}.duoop-select__popup ul{list-style:none;margin:0;padding:7px;max-height:280px;overflow:auto;overscroll-behavior:contain;border:2px solid #373434;border-radius:10px;background:#fff;box-shadow:0 5px 0 #1d1b1b}.duoop-select__popup [role=option]{min-height:42px;padding:8px 10px;border-radius:6px;display:flex;align-items:center;gap:10px;cursor:pointer}.duoop-select__popup [role=option][data-active]{background:#f0eeee}.duoop-select__popup [role=option][aria-disabled=true]{opacity:.4;cursor:not-allowed}.duoop-select__option-copy{min-width:0;display:grid;gap:2px;flex:1}.duoop-select__option-copy strong{font-size: 12px;font-weight:600}.duoop-select__option-copy small{font-size: 11px;color:#686565}.duoop-select__option-meta{font-size: 10px;color:#686565}.duoop-select__option-icon{display:grid;place-items:center}.duoop-select__option-icon svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8}.duoop-select__check{width:18px;height:18px;fill:none;stroke:#373434;stroke-width:2.2;opacity:0;transform:scale(.7);transition:opacity 120ms ease,transform 160ms cubic-bezier(.2,.8,.2,1)}[role=option][data-selected] .duoop-select__check{opacity:1;transform:scale(1)}.duoop-select__group{padding:9px 10px 5px;color:#686565;font-size: 10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.duoop-select__separator{height:1px;background:#e0dddd;margin:6px}.duoop-select__popup *{scrollbar-width:thin;scrollbar-color:#aaa5a5 transparent}@keyframes select-open{from{opacity:0;transform:translateY(-5px) scale(.98)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.duoop-select,.duoop-select>svg,.duoop-select__popup,.duoop-select__check{animation:none;transition:none}}
927
+ .duoop-select__popup{min-width:240px}
928
+ .duoop-select__popup--bottom-end{inset-inline:unset 0}
929
+ .duoop-select__popup--top-start,.duoop-select__popup--top-end{inset-block:unset calc(100% + 9px);transform-origin:bottom}
930
+ .duoop-select__popup--top-end{inset-inline:unset 0}
931
+ .select-rich-value{display:flex;align-items:center;gap:8px;min-width:0}
932
+ .select-rich-value svg{width:18px;height:18px;flex:none;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
933
+ .duoop-autocomplete { width:100%; min-width:0; color:#373434; }
934
+ .autocomplete-control { display:flex; align-items:center; width:100%; min-width:0; min-height:44px; border:2px solid #373434; border-radius:10px; background:#fff; box-shadow:0 3px 0 #1d1b1b; transition:box-shadow 180ms cubic-bezier(.2,.8,.2,1),border-color 140ms ease,background 140ms ease; }
935
+ .autocomplete-control:hover { background:#fcfbfb; }
936
+ .autocomplete-control[data-open] { box-shadow:0 4px 0 #1d1b1b; }
937
+ .autocomplete-control input { display:block; flex:1; min-width:0; width:100%; margin:0; padding:11px 12px; border:0; border-radius:8px; background:transparent; color:inherit; box-shadow:none; font: inherit; font-size: 14px; line-height:1.4; }
938
+ .autocomplete-control input:focus { outline:none; box-shadow:none; }
939
+ .autocomplete-control input:focus-visible { box-shadow:inset 0 -2px 0 currentColor; }
940
+ .autocomplete-control input::placeholder { color:#767171; }
941
+ .autocomplete-control--sm { min-height:36px; }
942
+ .autocomplete-control--sm input { padding-block:7px; font-size: 12px; }
943
+ .autocomplete-control--lg { min-height:52px; }
944
+ .autocomplete-control--lg input { padding-block:13px; font-size: 16px; }
945
+ .autocomplete-control[data-invalid=true] { color:#a51d2d; border-color:#a51d2d; background:#fff5f5; box-shadow:0 3px 0 #761725; }
946
+ .duoop-autocomplete[data-disabled] .autocomplete-control { background:#f0eeee; border-color:#aaa5a5; box-shadow:0 2px 0 #aaa5a5; color:#686565; }
947
+ .duoop-autocomplete[data-disabled] input { cursor:not-allowed; }
948
+ .autocomplete-addon { display:grid; place-items:center; margin-inline-start:12px; }
949
+ .autocomplete-addon svg,.autocomplete-action svg,.autocomplete-option svg { width:20px; height:20px; fill:none; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }
950
+ .autocomplete-action { flex:none; display:grid; place-items:center; width:36px; align-self:stretch; margin:2px; padding:0; border:0; border-radius:6px; background:transparent; color:inherit; cursor:pointer; transition:background 140ms ease,transform 100ms ease; }
951
+ .autocomplete-action:hover:not(:disabled) { background:#f0eeee; }
952
+ .autocomplete-action:active:not(:disabled) { transform:translateY(2px); }
953
+ .autocomplete-action:focus-visible { outline:2px solid currentColor; outline-offset:-4px; }
954
+ .autocomplete-action:disabled { opacity:.35; cursor:default; }
955
+ .autocomplete-trigger svg { transition:transform 200ms cubic-bezier(.2,.8,.2,1); }
956
+ .autocomplete-trigger[aria-expanded=true] svg { transform:rotate(180deg); }
957
+ .autocomplete-popup { z-index:100; width:0; max-width:calc(100vw - 24px); border:2px solid #373434; border-radius:10px; background:#fff; color:#373434; box-shadow:0 5px 0 #1d1b1b; font-family:inherit; animation:autocomplete-reveal 200ms cubic-bezier(.2,.8,.2,1); transform-origin:top; }
958
+ .autocomplete-popup[data-side=top] { transform-origin:bottom; }
959
+ .autocomplete-list { max-height:min(272px,45dvh); padding:6px; overflow:auto; overscroll-behavior:contain; scrollbar-width:thin; scrollbar-color:#aaa5a5 transparent; }
960
+ .autocomplete-list:empty { padding:0; }
961
+ .autocomplete-option { display:flex; align-items:center; gap:12px; min-height:44px; padding:10px; border:1px solid transparent; border-radius:6px; cursor:pointer; transition:background 140ms ease,border-color 140ms ease; }
962
+ .autocomplete-option>span { flex:1; min-width:0; display:grid; gap:4px; overflow-wrap:anywhere; }
963
+ .autocomplete-option strong { font-size: 13px; font-weight:500; }
964
+ .autocomplete-option small { font-size: 12px; line-height:1.5; color:#686565; }
965
+ .autocomplete-option[data-active] { background:#f0eeee; border-color:#d1cccc; }
966
+ .autocomplete-option svg { flex:none; width:16px; height:16px; opacity:0; transform:translateX(-4px); transition:opacity 140ms ease,transform 180ms cubic-bezier(.2,.8,.2,1); }
967
+ .autocomplete-option[data-active] svg { opacity:1; transform:none; }
968
+ .autocomplete-option[aria-disabled=true] { opacity:.45; cursor:not-allowed; }
969
+ .autocomplete-group { padding:12px 11px 5px; font-size: 11px; font-weight:600; color:#686565; }
970
+ .autocomplete-footer { display:flex; justify-content:space-between; flex-wrap:wrap; gap:8px; border-top:1px solid #e7e9ed; padding:10px 12px; color:#686565; font-size: 11px; }
971
+ .autocomplete-empty { margin:0; padding:20px 16px; font-size: 13px; line-height:1.7; }
972
+ .autocomplete-demo { width:100%; max-width:360px; display:grid; gap:20px; }
973
+ .autocomplete-demo-note { margin:0; font-size: 12px; line-height:1.6; color:#686565; }
974
+ .autocomplete-showcase .gallery-card-preview { min-height:238px; }
975
+ .autocomplete-preview { width:215px; display:grid; gap:8px; text-align:start; color:#373434; }
976
+ .autocomplete-preview>span { border:2px solid #373434; border-radius:8px; padding:10px 12px; background:#fff; box-shadow:0 3px 0 #1d1b1b; font-size: 12px; }
977
+ .autocomplete-preview>span:last-child { padding:5px; display:grid; gap:3px; }
978
+ .autocomplete-preview i { padding:7px; border-radius:4px; font-style:normal; font-size: 11px; }
979
+ .autocomplete-preview i:first-child { background:#f0eeee; }
980
+ @keyframes autocomplete-reveal { from { opacity:0; transform:translateY(-5px) scale(.98); } to { opacity:1; transform:none; } }
981
+ @media (pointer:coarse) { .autocomplete-action { width:44px; min-height:40px; } }
982
+ @media (max-width:600px) { .autocomplete-control input { font-size: 16px; } .autocomplete-key-hint { display:none; } }
983
+ @media (prefers-reduced-motion:reduce) { .autocomplete-control,.autocomplete-action,.autocomplete-trigger svg,.autocomplete-option,.autocomplete-option svg { transition:none; } .autocomplete-popup { animation:none; } }
984
+ .duoop-tabs {
985
+ --tabs-ink: #373434;
986
+ --tabs-muted: #686565;
987
+ --tabs-edge: #1d1b1b;
988
+ --tabs-face: #373434;
989
+ min-width: 0;
990
+ color: var(--tabs-ink);
991
+ }
992
+ .duoop-tabs__list {
993
+ position: relative;
994
+ isolation: isolate;
995
+ display: flex;
996
+ gap: 6px;
997
+ padding: 6px 6px 9px;
998
+ border: 2px solid var(--tabs-edge);
999
+ border-radius: 10px;
1000
+ background: #f0eeee;
1001
+ box-shadow: 0 3px 0 var(--tabs-edge);
1002
+ }
1003
+ .duoop-tabs--horizontal > .duoop-tabs__list {
1004
+ align-items: stretch;
1005
+ overflow: auto;
1006
+ scrollbar-width: thin;
1007
+ scrollbar-color: #aaa5a5 transparent;
1008
+ }
1009
+ .duoop-tabs--vertical {
1010
+ display: grid;
1011
+ grid-template-columns: minmax(150px, 0.38fr) minmax(0, 1fr);
1012
+ gap: 20px;
1013
+ align-items: start;
1014
+ }
1015
+ .duoop-tabs--vertical > .duoop-tabs__list {
1016
+ flex-direction: column;
1017
+ }
1018
+ .duoop-tabs--align-center > .duoop-tabs__list {
1019
+ justify-content: safe center;
1020
+ }
1021
+ .duoop-tabs--align-end > .duoop-tabs__list {
1022
+ justify-content: safe flex-end;
1023
+ }
1024
+ .duoop-tabs--full > .duoop-tabs__list > .duoop-tabs__tab {
1025
+ flex: 1 0 auto;
1026
+ }
1027
+ .duoop-tabs__tab {
1028
+ position: relative;
1029
+ z-index: 1;
1030
+ display: inline-flex;
1031
+ flex: 0 0 auto;
1032
+ align-items: center;
1033
+ justify-content: center;
1034
+ gap: 9px;
1035
+ border: 0;
1036
+ border-radius: 6px;
1037
+ background: transparent;
1038
+ color: var(--tabs-muted);
1039
+ font: 600 13px/1.2 var(--duoop-font, 'DM Sans', sans-serif);
1040
+ white-space: nowrap;
1041
+ text-decoration: none;
1042
+ cursor: pointer;
1043
+ transition:
1044
+ color 150ms ease-out,
1045
+ transform 220ms cubic-bezier(0.2, 1.5, 0.35, 1),
1046
+ background-color 150ms ease-out;
1047
+ }
1048
+ .duoop-tabs--sm > .duoop-tabs__list > .duoop-tabs__tab {
1049
+ min-height: 36px;
1050
+ padding: 8px 12px;
1051
+ font-size: 12px;
1052
+ }
1053
+ .duoop-tabs--md > .duoop-tabs__list > .duoop-tabs__tab {
1054
+ min-height: 44px;
1055
+ padding: 10px 16px;
1056
+ }
1057
+ .duoop-tabs--lg > .duoop-tabs__list > .duoop-tabs__tab {
1058
+ min-height: 52px;
1059
+ padding: 12px 20px;
1060
+ font-size: 14px;
1061
+ }
1062
+ @media (hover: hover) {
1063
+ .duoop-tabs__tab:hover:not(:disabled):not([aria-disabled='true']) {
1064
+ color: var(--tabs-ink);
1065
+ background: #e5e1e1;
1066
+ transform: translateY(-1px);
1067
+ }
1068
+ .duoop-tabs--contained > .duoop-tabs__list > .duoop-tabs__tab[aria-selected='true']:hover {
1069
+ color: #fff;
1070
+ background: transparent;
1071
+ }
1072
+ }
1073
+ .duoop-tabs__tab:active:not(:disabled):not([aria-disabled='true']) {
1074
+ transform: translateY(2px) scale(0.98);
1075
+ transition-duration: 80ms;
1076
+ }
1077
+ .duoop-tabs__tab[aria-selected='true'] {
1078
+ color: var(--tabs-ink);
1079
+ }
1080
+ .duoop-tabs--contained > .duoop-tabs__list > .duoop-tabs__tab[aria-selected='true'] {
1081
+ color: #fff;
1082
+ }
1083
+ .duoop-tabs__tab[aria-selected='true'] .duoop-tabs__icon {
1084
+ animation: tabs-icon-settle 280ms cubic-bezier(0.2, 1.5, 0.35, 1);
1085
+ }
1086
+ .duoop-tabs__tab:disabled,
1087
+ .duoop-tabs__tab[aria-disabled='true'] {
1088
+ opacity: 0.42;
1089
+ cursor: not-allowed;
1090
+ }
1091
+ .duoop-tabs__tab:focus-visible {
1092
+ outline: 2px solid currentColor;
1093
+ outline-offset: -5px;
1094
+ }
1095
+ .duoop-tabs__indicator {
1096
+ background: var(--tabs-face);
1097
+ border-radius: 6px;
1098
+ position: absolute;
1099
+ z-index: 0;
1100
+ pointer-events: none;
1101
+ opacity: 0;
1102
+ transition:
1103
+ transform 340ms cubic-bezier(0.2, 1.45, 0.3, 1),
1104
+ width 240ms cubic-bezier(0.2, 0.8, 0.2, 1),
1105
+ height 240ms cubic-bezier(0.2, 0.8, 0.2, 1),
1106
+ opacity 120ms ease-out;
1107
+ }
1108
+ .duoop-tabs__list[data-indicator-ready] .duoop-tabs__indicator {
1109
+ opacity: 1;
1110
+ }
1111
+ .duoop-tabs__indicator::before {
1112
+ content: '';
1113
+ position: absolute;
1114
+ inset: 0;
1115
+ background: var(--tabs-face);
1116
+ border: 2px solid var(--tabs-edge);
1117
+ border-radius: 6px;
1118
+ box-shadow:
1119
+ 0 3px 0 var(--tabs-edge),
1120
+ inset 0 1px 0 #ffffff26;
1121
+ transition:
1122
+ transform 180ms cubic-bezier(0.2, 0.8, 0.2, 1),
1123
+ box-shadow 180ms ease-out;
1124
+ }
1125
+ .duoop-tabs__list:has(.duoop-tabs__tab[aria-selected='true']:active)
1126
+ .duoop-tabs__indicator::before {
1127
+ transform: translateY(2px);
1128
+ box-shadow: 0 1px 0 var(--tabs-edge);
1129
+ transition-duration: 80ms;
1130
+ }
1131
+ .duoop-tabs--contained.duoop-tabs--horizontal > .duoop-tabs__list > .duoop-tabs__indicator {
1132
+ top: 6px;
1133
+ left: 0;
1134
+ width: var(--tabs-indicator-w);
1135
+ height: calc(100% - 15px);
1136
+ transform: translateX(var(--tabs-indicator-x));
1137
+ }
1138
+ .duoop-tabs--contained.duoop-tabs--vertical > .duoop-tabs__list > .duoop-tabs__indicator {
1139
+ inset-inline: 6px;
1140
+ top: 0;
1141
+ height: var(--tabs-indicator-h);
1142
+ transform: translateY(var(--tabs-indicator-y));
1143
+ }
1144
+ .duoop-tabs--underline > .duoop-tabs__list {
1145
+ background: #fff;
1146
+ padding-bottom: 12px;
1147
+ }
1148
+ .duoop-tabs--underline > .duoop-tabs__list > .duoop-tabs__indicator {
1149
+ height: 4px;
1150
+ bottom: 5px;
1151
+ left: 0;
1152
+ width: var(--tabs-indicator-w);
1153
+ transform: translateX(var(--tabs-indicator-x));
1154
+ }
1155
+ .duoop-tabs--underline > .duoop-tabs__list > .duoop-tabs__indicator::before {
1156
+ border: 0;
1157
+ border-radius: 2px;
1158
+ box-shadow: 0 1px 0 var(--tabs-edge);
1159
+ }
1160
+ .duoop-tabs--underline > .duoop-tabs__list > .duoop-tabs__tab[aria-selected='true'] {
1161
+ background: #f0eeee;
1162
+ }
1163
+ .duoop-tabs--underline.duoop-tabs--vertical > .duoop-tabs__list > .duoop-tabs__indicator {
1164
+ width: 4px;
1165
+ height: var(--tabs-indicator-h);
1166
+ inset-inline-end: 5px;
1167
+ bottom: auto;
1168
+ left: auto;
1169
+ top: 0;
1170
+ transform: translateY(var(--tabs-indicator-y));
1171
+ }
1172
+ .duoop-tabs__panels {
1173
+ min-width: 0;
1174
+ }
1175
+ .duoop-tabs__panel {
1176
+ min-width: 0;
1177
+ margin-top: 18px;
1178
+ padding: 24px;
1179
+ border: 2px solid var(--tabs-edge);
1180
+ border-radius: 10px;
1181
+ background: #fff;
1182
+ box-shadow: 0 3px 0 var(--tabs-edge);
1183
+ font-size: 13px;
1184
+ line-height: 1.65;
1185
+ }
1186
+ .duoop-tabs--vertical > .duoop-tabs__panels > .duoop-tabs__panel {
1187
+ margin-top: 0;
1188
+ }
1189
+ .duoop-tabs__panel:focus-visible {
1190
+ outline:2px solid currentColor; outline-offset:-5px;
1191
+ border-style: solid;
1192
+ }
1193
+ .duoop-tabs[data-transition='fade'] > .duoop-tabs__panels > .duoop-tabs__panel {
1194
+ animation: tabs-panel-pop 240ms cubic-bezier(0.2, 0.8, 0.2, 1);
1195
+ }
1196
+ .duoop-tabs__icon {
1197
+ display: inline-flex;
1198
+ flex-shrink: 0;
1199
+ }
1200
+ .duoop-tabs__icon svg {
1201
+ width: 18px;
1202
+ height: 18px;
1203
+ }
1204
+ .duoop-tabs__label {
1205
+ display: inline-flex;
1206
+ align-items: center;
1207
+ gap: 6px;
1208
+ }
1209
+ .duoop-tabs__label:has(> .sr-only) {
1210
+ position: absolute;
1211
+ }
1212
+ .duoop-tabs__label svg {
1213
+ width: 14px;
1214
+ height: 14px;
1215
+ }
1216
+ @keyframes tabs-icon-settle {
1217
+ 0% {
1218
+ transform: scale(0.85) rotate(-6deg);
1219
+ }
1220
+ 60% {
1221
+ transform: scale(1.1) rotate(2deg);
1222
+ }
1223
+ 100% {
1224
+ transform: none;
1225
+ }
1226
+ }
1227
+ @keyframes tabs-panel-pop {
1228
+ from {
1229
+ opacity: 0;
1230
+ transform: translateY(5px);
1231
+ }
1232
+ to {
1233
+ opacity: 1;
1234
+ transform: none;
1235
+ }
1236
+ }
1237
+ @media (max-width: 540px) {
1238
+ .duoop-tabs--vertical {
1239
+ grid-template-columns: 1fr;
1240
+ gap: 18px;
1241
+ }
1242
+ .duoop-tabs__panel {
1243
+ padding: 20px;
1244
+ }
1245
+ }
1246
+ @media (prefers-reduced-motion: reduce) {
1247
+ .duoop-tabs__indicator,
1248
+ .duoop-tabs__indicator::before,
1249
+ .duoop-tabs__tab {
1250
+ transition: none;
1251
+ }
1252
+ .duoop-tabs__tab[aria-selected='true'] .duoop-tabs__icon,
1253
+ .duoop-tabs[data-transition] > .duoop-tabs__panels > .duoop-tabs__panel {
1254
+ animation: none;
1255
+ }
1256
+ .duoop-tabs .duoop-tabs__tab:hover,
1257
+ .duoop-tabs .duoop-tabs__tab:active,
1258
+ .duoop-tabs__list:has(.duoop-tabs__tab:active) .duoop-tabs__indicator::before {
1259
+ transform: none;
1260
+ }
1261
+ }
1262
+ .duoop-menu{position:relative;display:inline-block;color:#373434}.duoop-menu__trigger{min-height:44px;padding:0 14px;border:2px solid #373434;border-radius:10px;background:#fff;box-shadow:0 3px 0 #1d1b1b;color:inherit;font: 600 13px inherit;cursor:pointer;transition:transform 100ms ease,box-shadow 120ms ease,background 150ms ease}.duoop-menu__trigger:hover{background:#f4f2f2}.duoop-menu__trigger:active,.duoop-menu__trigger[aria-expanded=true]{transform:translateY(2px);box-shadow:0 1px 0 #1d1b1b}.duoop-menu__trigger:focus-visible,.duoop-menu__item:focus-visible{outline:2px solid #373434;outline-offset:-6px}.duoop-menu__position{position:absolute;z-index:35;min-width:230px}.duoop-menu__position--bottom-start{inset-block-start:calc(100% + 8px);inset-inline-start:0}.duoop-menu__position--bottom-end{inset-block-start:calc(100% + 8px);inset-inline-end:0}.duoop-menu__position--top-start{inset-block-end:calc(100% + 8px);inset-inline-start:0}.duoop-menu__position--top-end{inset-block-end:calc(100% + 8px);inset-inline-end:0}.duoop-menu__popup,.duoop-menu__subpopup{padding:7px;border:2px solid #373434;border-radius:10px;background:#fff;box-shadow:0 5px 0 #1d1b1b;animation:menu-open 170ms cubic-bezier(.2,.8,.2,1)}.duoop-menu__item{width:100%;min-height:42px;padding:8px 10px;border:0;border-radius:6px;background:transparent;color:inherit;display:flex;align-items:center;gap:10px;text-align:left;text-decoration:none;font: inherit;cursor:pointer}.duoop-menu__item:hover,.duoop-menu__item:focus-visible{background:#f0eeee}.duoop-menu__item[aria-disabled=true]{opacity:.38;cursor:not-allowed}.duoop-menu__item[data-destructive]{color:#a51d2d}.duoop-menu__mark{width:20px;height:20px;display:grid;place-items:center;flex:none}.duoop-menu__mark svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.duoop-menu__copy{display:grid;gap:2px;min-width:0;flex:1}.duoop-menu__copy strong{font-size: 12px;font-weight:600}.duoop-menu__copy small{font-size: 10px;line-height:1.35;color:#686565}.duoop-menu__item kbd{font:
1263
+ 10px Consolas,
1264
+ monospace;color:#686565}.duoop-menu__label{padding:9px 10px 5px;color:#686565;font-size: 10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.duoop-menu__separator{height:1px;background:#dedada;margin:6px}.duoop-menu__submenu{position:relative}.duoop-menu__subpopup{position:absolute;z-index:1;inset-inline-start:calc(100% + 6px);inset-block-start:-7px;min-width:210px}.duoop-menu__popup{max-height:min(360px,70vh);overflow:auto;overscroll-behavior:contain}@keyframes menu-open{from{opacity:0;transform:translateY(-4px) scale(.98)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.duoop-menu__trigger,.duoop-menu__popup,.duoop-menu__subpopup{animation:none;transition:none}}
1265
+ .duoop-menu__subpopup[style]{z-index:36}
1266
+ .duoop-stepper { --step-mark:40px; --step-ink:var(--feedback-ink,#373434); --step-face:var(--feedback-face,#fff); --step-edge:var(--feedback-edge,#1d1b1b); --step-soft:var(--feedback-soft,#f0eeee); --step-muted:var(--feedback-muted,#686565); width:100%; min-width:0; color:var(--step-ink); container-type:inline-size; }
1267
+ .duoop-stepper[data-size=sm] { --step-mark:32px; }
1268
+ .duoop-stepper[data-size=lg] { --step-mark:48px; }
1269
+ .stepper-list { list-style:none; display:flex; padding:4px 2px 10px; margin:0; gap:0; }
1270
+ .stepper-item { position:relative; flex:1 0 112px; min-width:112px; }
1271
+ .stepper-control { position:relative; z-index:1; display:flex; flex-direction:column; align-items:center; gap:14px; width:100%; padding:0 8px; border:0; background:transparent; color:inherit; font: inherit; text-align:center; min-height:44px; border-radius:8px; }
1272
+ button.stepper-control { cursor:pointer; }
1273
+ .stepper-marker { position:relative; display:grid; place-items:center; width:var(--step-mark); height:var(--step-mark); flex:none; border:2px solid var(--step-edge); border-radius:10px; background:var(--step-face); box-shadow:0 3px 0 var(--step-edge); font-size: 14px; font-weight:700; transition:transform 220ms cubic-bezier(.2,1.6,.4,1),box-shadow 220ms cubic-bezier(.2,1.6,.4,1),background-color 160ms ease,color 160ms ease; }
1274
+ .stepper-marker svg { width:21px; height:21px; }
1275
+ .stepper-copy { display:flex; flex-direction:column; gap:6px; min-width:0; overflow-wrap:anywhere; }
1276
+ .stepper-copy strong { font-size: 13px; line-height:1.5; font-weight:650; }
1277
+ .stepper-copy>span { color:var(--step-muted); font-size: 12px; line-height:1.65; }
1278
+ .stepper-copy small { color:var(--step-muted); font-size: 11px; line-height:1.6; }
1279
+ .stepper-item[data-active=true] .stepper-marker { background:var(--step-ink); color:var(--step-face); animation:stepper-arrive 300ms cubic-bezier(.2,1.6,.3,1); }
1280
+ .stepper-item[data-state=complete] .stepper-marker { background:var(--feedback-success-soft,#edf5ef); color:var(--feedback-success,#356247); border-color:currentColor; box-shadow:0 3px 0 currentColor; }
1281
+ .stepper-item[data-state=complete] { --step-edge:var(--feedback-success,#356247); }
1282
+ .stepper-item[data-state=error] { --step-edge:var(--feedback-error,#a51d2d); }
1283
+ .stepper-item[data-state=error] .stepper-marker { background:var(--feedback-error-soft,#fff2f3); color:var(--feedback-error,#a51d2d); border-color:currentColor; box-shadow:0 3px 0 currentColor; animation:duoop-error 240ms ease-out; }
1284
+ .stepper-item[data-state=error] .stepper-copy small { color:var(--feedback-error,#a51d2d); }
1285
+ .stepper-item[data-state=skipped] .stepper-marker { border-style:solid; background:var(--step-soft); }
1286
+ .stepper-item[data-state=disabled] .stepper-control,.stepper-item[data-state=blocked] .stepper-control { color:var(--step-muted); }
1287
+ .stepper-control:disabled { opacity:1; cursor:not-allowed; }
1288
+ .stepper-control:focus-visible { outline:none; }
1289
+ .stepper-control:focus-visible .stepper-marker { outline:2px solid currentColor; outline-offset:-6px; }
1290
+ .stepper-connector { position:absolute; z-index:0; top:calc(var(--step-mark) / 2 - 2px); inset-inline-start:50%; width:100%; height:6px; border-block:1px solid var(--step-edge); background:var(--step-soft); pointer-events:none; }
1291
+ .stepper-connector i { display:block; width:100%; height:100%; background:var(--step-ink); transform:scaleX(var(--step-progress)); transform-origin:left; transition:transform 320ms cubic-bezier(.2,.8,.2,1); }
1292
+ .duoop-stepper:dir(rtl) .stepper-connector i { transform-origin:right; }
1293
+ .duoop-stepper[data-connector=segments] .stepper-connector { inset-inline-start:calc(50% + var(--step-mark) / 2 + 8px); width:calc(100% - var(--step-mark) - 16px); border:1px solid var(--step-edge); border-radius:3px; overflow:hidden; }
1294
+ .duoop-stepper[data-connector=none] .stepper-connector { display:none; }
1295
+ .stepper-dot { width:9px; height:9px; background:currentColor; border-radius:2px; transform:rotate(45deg); }
1296
+ .duoop-stepper[data-presentation=compact] .stepper-copy { position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); }
1297
+ .duoop-stepper[data-labels=beside] .stepper-item { flex-basis:220px; min-width:220px; display:flex; gap:20px; align-items:flex-start; }
1298
+ .duoop-stepper[data-labels=beside] .stepper-control { flex-direction:row; align-items:center; text-align:start; width:auto; flex:0 1 auto; padding:0; order:0; }
1299
+ .duoop-stepper[data-labels=beside] .stepper-copy { background:transparent; padding:0; }
1300
+ .duoop-stepper[data-labels=beside] .stepper-connector { position:relative; inset-inline-start:auto; flex:1; min-width:28px; width:auto; margin-inline-end:16px; order:1; border:1px solid var(--step-edge); border-radius:3px; }
1301
+ .duoop-stepper[data-orientation=vertical] .stepper-list { flex-direction:column; }
1302
+ .duoop-stepper[data-orientation=vertical] .stepper-item { display:block; flex:auto; min-width:0; }
1303
+ .duoop-stepper[data-orientation=vertical] .stepper-control { flex-direction:row; align-items:flex-start; text-align:start; padding:0 0 28px; }
1304
+ .duoop-stepper[data-orientation=vertical] .stepper-connector { position:absolute; min-width:0; top:calc(var(--step-mark) / 2); inset-inline-start:calc(var(--step-mark) / 2 - 3px); width:6px; height:100%; border-block:0; border-inline:1px solid var(--step-edge); }
1305
+ .duoop-stepper[data-orientation=vertical] .stepper-connector i { transform:scaleY(var(--step-progress)); transform-origin:top; }
1306
+ .duoop-stepper[data-orientation=vertical] .stepper-item:last-child .stepper-control { padding-bottom:0; }
1307
+ .stepper-inline-panel { position:relative; margin-inline-start:calc(var(--step-mark) + 14px); padding-block:16px 32px; }
1308
+ .stepper-item:has(>.stepper-inline-panel:not([hidden]))>.stepper-control { padding-bottom:0; }
1309
+ .stepper-panel { margin-top:24px; }
1310
+ .stepper-panel>div,.stepper-inline-panel>* { animation:stepper-panel-in 240ms ease-out; }
1311
+ .stepper-gap { position:relative; display:flex; flex-direction:column; justify-content:flex-start; align-items:center; gap:14px; flex:1 0 112px; min-width:112px; }
1312
+ .stepper-gap .duoop-button { position:relative; z-index:1; width:var(--step-mark); min-height:var(--step-mark); height:var(--step-mark); padding:8px; }
1313
+ .stepper-gap .duoop-button-icon svg { width:22px; height:22px; }
1314
+ .stepper-gap>small { color:var(--step-muted); font-size: 11px; line-height:1.6; }
1315
+ .stepper-navigation { overflow:auto; padding-bottom:6px; scrollbar-width:thin; }
1316
+ .stepper-mobile-summary { display:none; align-items:center; gap:16px; }
1317
+ .stepper-mobile-summary>div { min-width:0; }
1318
+ .stepper-mobile-summary small,.stepper-mobile-summary strong { display:block; overflow-wrap:anywhere; }
1319
+ .stepper-mobile-summary small { font-size: 11px; color:var(--step-muted); margin-bottom:6px; }
1320
+ .stepper-mobile-summary strong { font-size: 14px; }
1321
+ .stepper-summary-actions { display:flex; gap:8px; margin-inline-start:auto; }
1322
+ .stepper-empty { margin:0; font-size: 13px; }
1323
+ .stepper-state-reference .stepper-marker,.stepper-state-reference .stepper-marker * { animation:none; }
1324
+ @media(hover:hover) { button.stepper-control:hover:not(:disabled) .stepper-marker { transform:translateY(-2px); box-shadow:0 5px 0 var(--step-edge); } }
1325
+ button.stepper-control:active:not(:disabled) .stepper-marker { transform:translateY(3px); box-shadow:none; transition-duration:80ms; }
1326
+ @keyframes stepper-arrive { 0% { transform:translateY(3px) scale(.92); } 65% { transform:translateY(-2px) scale(1.06); } to { transform:none; } }
1327
+ @keyframes stepper-panel-in { from { opacity:0; transform:translateY(5px); } to { opacity:1; transform:none; } }
1328
+ @container(max-width:460px) {
1329
+ .duoop-stepper[data-mobile=summary] .stepper-navigation { display:none; }
1330
+ .duoop-stepper[data-mobile=summary] .stepper-mobile-summary { display:flex; }
1331
+ .duoop-stepper[data-mobile=vertical] .stepper-list { flex-direction:column; }
1332
+ .duoop-stepper[data-mobile=vertical] .stepper-item { display:block; flex:auto; min-width:0; }
1333
+ .duoop-stepper[data-mobile=vertical] .stepper-control { flex-direction:row; text-align:start; align-items:flex-start; padding:0 0 24px; }
1334
+ .duoop-stepper[data-mobile=vertical] .stepper-connector { position:absolute; min-width:0; top:calc(var(--step-mark) / 2); inset-inline-start:calc(var(--step-mark) / 2 - 3px); width:6px; height:100%; border-block:0; border-inline:1px solid var(--step-edge); }
1335
+ .duoop-stepper[data-mobile=vertical] .stepper-connector i { transform:scaleY(var(--step-progress)); transform-origin:top; }
1336
+ .duoop-stepper[data-mobile=vertical] .stepper-item:last-child .stepper-control { padding-bottom:0; }
1337
+ }
1338
+ @media(prefers-reduced-motion:reduce) { .stepper-marker,.stepper-marker *,.stepper-connector i,.stepper-panel>div,.stepper-inline-panel>* { animation:none; transition:none; } button.stepper-control:hover:not(:disabled) .stepper-marker,button.stepper-control:active:not(:disabled) .stepper-marker { transform:none; } }
1339
+
1340
+ .stepper-progress-control { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 12px; }
1341
+ .stepper-progress-control > input[type=range] { display: block; margin: 0; width: 128px; max-width: 100%; accent-color: var(--step-ink, #373434); }
1342
+ .duoop-accordion {
1343
+ --acc-edge: #373434;
1344
+ --acc-face: #fff;
1345
+ --acc-muted: #686565;
1346
+ --acc-soft: #f0eeee;
1347
+ --acc-shadow: #1d1b1b;
1348
+ --acc-inset: 20px;
1349
+ width: min(100%, 620px);
1350
+ color: var(--acc-edge);
1351
+ text-align: start;
1352
+ }
1353
+ .duoop-accordion__item {
1354
+ background: var(--acc-face);
1355
+ border: 2px solid var(--acc-edge);
1356
+ border-radius: 10px;
1357
+ box-shadow: 0 3px 0 var(--acc-shadow);
1358
+ transition: box-shadow 180ms ease, transform 180ms cubic-bezier(.2,.8,.2,1);
1359
+ }
1360
+ .duoop-accordion__item + .duoop-accordion__item { margin-top: 12px; }
1361
+ .duoop-accordion__heading { margin: 0; font: inherit; }
1362
+ .duoop-accordion__trigger {
1363
+ width: 100%;
1364
+ min-height: 64px;
1365
+ border: 0;
1366
+ border-radius: 8px;
1367
+ background: transparent;
1368
+ color: inherit;
1369
+ display: flex;
1370
+ align-items: center;
1371
+ gap: 12px;
1372
+ padding: 16px var(--acc-inset);
1373
+ text-align: start;
1374
+ font-family: inherit;
1375
+ font-size: 14px;
1376
+ font-weight: 600;
1377
+ line-height: 1.45;
1378
+ cursor: pointer;
1379
+ transition: background 160ms ease, color 160ms ease;
1380
+ }
1381
+ .duoop-accordion__trigger:hover:not(:disabled) { background: var(--acc-soft); }
1382
+ .duoop-accordion__trigger:focus-visible { outline: 2px solid currentColor; outline-offset: -6px; }
1383
+ .duoop-accordion__trigger[aria-expanded=true] { border-end-start-radius: 0; border-end-end-radius: 0; }
1384
+ .duoop-accordion__copy { display: grid; gap: 6px; min-width: 0; flex: 1; overflow-wrap: anywhere; }
1385
+ .duoop-accordion__copy small { font-size: 12px; font-weight: 400; line-height: 1.6; color: var(--acc-muted); }
1386
+ .duoop-accordion__meta { flex: none; font-size: 11px; border: 1px solid var(--acc-edge); border-radius: 5px; padding: 3px 7px; background: var(--acc-face); color: var(--acc-edge); }
1387
+ .duoop-accordion__meta:has(.duoop-badge) { border: 0; padding: 0; background: transparent; }
1388
+ .duoop-accordion__meta .duoop-badge { white-space: nowrap; }
1389
+ .duoop-accordion__leading, .duoop-accordion__chevron { display: grid; place-items: center; flex: none; }
1390
+ .duoop-accordion__leading svg { width: 22px; height: 22px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
1391
+ .duoop-accordion__chevron {
1392
+ width: 28px; height: 28px;
1393
+ border: 2px solid var(--acc-edge); border-radius: 6px;
1394
+ background: var(--acc-face); color: var(--acc-edge);
1395
+ box-shadow: 0 2px 0 var(--acc-shadow);
1396
+ transition: transform 220ms cubic-bezier(.2,.8,.2,1), box-shadow 160ms ease, background 160ms ease, color 160ms ease;
1397
+ }
1398
+ .duoop-accordion__chevron svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; transition: transform 280ms cubic-bezier(.22,1.3,.36,1); }
1399
+ .duoop-accordion__trigger:hover:not(:disabled) .duoop-accordion__chevron { transform: translateY(-2px); box-shadow: 0 4px 0 var(--acc-shadow); }
1400
+ .duoop-accordion__trigger:active:not(:disabled) .duoop-accordion__chevron { transform: translateY(2px); box-shadow: 0 0 0 var(--acc-shadow); }
1401
+ .duoop-accordion__trigger[aria-expanded=true] .duoop-accordion__chevron { background: var(--acc-edge); color: var(--acc-face); }
1402
+ .duoop-accordion__trigger[aria-expanded=true] .duoop-accordion__chevron svg { transform: rotate(180deg); }
1403
+ .duoop-accordion__region { display: grid; grid-template-rows: 0fr; opacity: 0; visibility: hidden; transition: grid-template-rows 300ms cubic-bezier(.2,.8,.2,1), opacity 180ms ease, visibility 300ms; }
1404
+ .duoop-accordion__region[data-open] { grid-template-rows: 1fr; opacity: 1; visibility: visible; }
1405
+ .duoop-accordion__clip { min-height: 0; overflow: hidden; }
1406
+ .duoop-accordion__content { margin-inline: var(--acc-inset); padding: 4px 0 22px; color: var(--acc-muted); font-size: 13px; line-height: 1.8; overflow-wrap: anywhere; transform: translateY(-6px); transition: transform 300ms cubic-bezier(.2,.8,.2,1); }
1407
+ .duoop-accordion__region[data-open] > .duoop-accordion__clip > .duoop-accordion__content { transform: translateY(0); }
1408
+ .duoop-accordion__content > :first-child { margin-top: 0; }
1409
+ .duoop-accordion__content > :last-child { margin-bottom: 0; }
1410
+ .duoop-accordion__item[data-disabled] { color: var(--acc-muted); box-shadow: none; border-style: solid; }
1411
+ .duoop-accordion__trigger:disabled { cursor: not-allowed; opacity: .6; }
1412
+ .duoop-accordion--outline, .duoop-accordion--contained { border: 2px solid var(--acc-edge); border-radius: 10px; box-shadow: 0 4px 0 var(--acc-shadow); background: var(--acc-face); }
1413
+ .duoop-accordion--outline > .duoop-accordion__item, .duoop-accordion--contained > .duoop-accordion__item { border: 0; border-radius: 0; box-shadow: none; margin: 0; }
1414
+ .duoop-accordion--outline > .duoop-accordion__item + .duoop-accordion__item, .duoop-accordion--contained > .duoop-accordion__item + .duoop-accordion__item { border-top: 2px solid var(--acc-edge); }
1415
+ .duoop-accordion--outline > .duoop-accordion__item:first-child, .duoop-accordion--contained > .duoop-accordion__item:first-child { border-radius: 8px 8px 0 0; }
1416
+ .duoop-accordion--outline > .duoop-accordion__item:last-child, .duoop-accordion--contained > .duoop-accordion__item:last-child { border-radius: 0 0 8px 8px; }
1417
+ .duoop-accordion--contained > .duoop-accordion__item > .duoop-accordion__heading > .duoop-accordion__trigger { background: var(--acc-soft); border-radius: inherit; }
1418
+ .duoop-accordion--contained > .duoop-accordion__item > .duoop-accordion__heading > .duoop-accordion__trigger[aria-expanded=true] { background: var(--acc-edge); color: var(--acc-face); }
1419
+ .duoop-accordion--contained > .duoop-accordion__item > .duoop-accordion__heading > .duoop-accordion__trigger[aria-expanded=true] .duoop-accordion__copy small { color: #e1dcdc; }
1420
+ .duoop-accordion--contained > .duoop-accordion__item > .duoop-accordion__heading > .duoop-accordion__trigger[aria-expanded=true] > .duoop-accordion__chevron { background: var(--acc-face); color: var(--acc-edge); }
1421
+ .duoop-accordion--contained > .duoop-accordion__item:only-child { border-radius: 8px; }
1422
+ .duoop-accordion--contained > .duoop-accordion__item > .duoop-accordion__heading { border-radius: inherit; }
1423
+ .duoop-accordion--contained > .duoop-accordion__item > .duoop-accordion__region > .duoop-accordion__clip > .duoop-accordion__content { padding-top: 18px; }
1424
+ .duoop-accordion--ghost > .duoop-accordion__item { box-shadow: none; border: 0; border-bottom: 2px solid var(--acc-edge); border-radius: 0; margin: 0; }
1425
+ .duoop-accordion--sm { --acc-inset: 14px; }
1426
+ .duoop-accordion--sm > .duoop-accordion__item > .duoop-accordion__heading > .duoop-accordion__trigger { min-height: 48px; padding-block: 10px; font-size: 13px; }
1427
+ .duoop-accordion--lg { --acc-inset: 24px; }
1428
+ .duoop-accordion--lg > .duoop-accordion__item > .duoop-accordion__heading > .duoop-accordion__trigger { min-height: 76px; padding-block: 20px; font-size: 16px; }
1429
+ @media (prefers-reduced-motion: reduce) {
1430
+ .duoop-accordion__item, .duoop-accordion__trigger, .duoop-accordion__chevron, .duoop-accordion__chevron svg, .duoop-accordion__region, .duoop-accordion__content { transition: none; }
1431
+ .duoop-accordion__trigger .duoop-accordion__chevron, .duoop-accordion__content { transform: none; }
1432
+ }
1433
+
1434
+
1435
+ .duoop-card,.duoop-card-frame {
1436
+ --card-ink:#252323; --card-muted:#5f5a5a; --card-border:#1d1b1b;
1437
+ --card-soft:#f0eeee; --card-shadow:#1d1b1b; --card-paper:#faf8f4;
1438
+ color:var(--card-ink); background:#fff; text-align:initial; min-width:0; position:relative;
1439
+ }
1440
+ .duoop-card { display:flex; width:100%; padding:0; appearance:none; overflow:hidden; border:2px solid var(--card-border); font: inherit; animation:card-arrive 300ms cubic-bezier(.2,.8,.2,1) backwards; }
1441
+ .duoop-card--vertical { flex-direction:column; }
1442
+ .duoop-card--horizontal { flex-direction:row; }
1443
+ .duoop-card--outline { background:#fff; }
1444
+ .duoop-card--elevated { box-shadow:0 5px 0 var(--card-shadow); }
1445
+ .duoop-card--filled { background:var(--card-soft); }
1446
+ .duoop-card--ghost { background:transparent; border-style:solid; }
1447
+ .duoop-card--radius-sm { border-radius:6px; }
1448
+ .duoop-card--radius-md { border-radius:10px; }
1449
+ .duoop-card--radius-lg { border-radius:16px; }
1450
+ .duoop-card--sm { --card-pad:12px; }
1451
+ .duoop-card--md { --card-pad:24px; }
1452
+ .duoop-card--lg { --card-pad:28px; }
1453
+ .duoop-card--interactive { cursor:pointer; text-decoration:none; transition:transform 240ms cubic-bezier(.2,1.65,.35,1), box-shadow 240ms cubic-bezier(.2,1.65,.35,1), background-color 160ms ease-out; }
1454
+ @media(hover:hover) {
1455
+ .duoop-card--interactive:hover { transform:translateY(-3px); box-shadow:0 7px 0 var(--card-shadow); }
1456
+ .duoop-card:hover .duoop-card__title { transform:translateX(3px); }
1457
+ }
1458
+ .duoop-card--interactive:active { transform:translateY(3px) scale(.99); box-shadow:0 1px 0 var(--card-shadow); transition-duration:90ms; }
1459
+ .duoop-card--interactive:focus-visible { outline:2px solid currentColor; outline-offset:-5px; border-style:solid; }
1460
+ .duoop-card--interactive:not(a):not(button) { cursor:default; }
1461
+ .duoop-card--interactive:not(a):not(button):is(:hover,:active) { transform:none; }
1462
+ .duoop-card--interactive:not(a):not(button):focus-within { box-shadow:0 7px 0 var(--card-shadow); border-style:solid; }
1463
+ .duoop-card[data-selected] { background:var(--card-soft); box-shadow:0 3px 0 var(--card-shadow); }
1464
+ .duoop-card[data-selected] .duoop-card__title { animation:card-title-pop 300ms cubic-bezier(.2,1.7,.35,1); }
1465
+ .duoop-card[data-disabled] { opacity:.48; pointer-events:none; }
1466
+ .duoop-card__header,.duoop-card__content,.duoop-card__footer { padding:var(--card-pad); }
1467
+ .duoop-card__header { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:8px 16px; align-items:start; }
1468
+ .duoop-card__header .duoop-card__description { grid-column:1/-1; }
1469
+ .duoop-card__title { margin:0; min-width:0; font-size: 19px; font-weight:650; letter-spacing:-.6px; line-height:1.25; overflow-wrap:anywhere; transition:transform 220ms cubic-bezier(.2,1.5,.35,1); }
1470
+ .duoop-card__title::after { content:''; display:block; width:28px; height:3px; margin-top:12px; background:var(--card-border); transform:scaleX(.6); transform-origin:left; transition:transform 260ms cubic-bezier(.2,1.6,.35,1); }
1471
+ @media(hover:hover) { .duoop-card:hover .duoop-card__title::after { transform:scaleX(1); } }
1472
+ .duoop-card__description { margin:6px 0 0; color:var(--card-muted); font-size: 13px; line-height:1.7; overflow-wrap:anywhere; }
1473
+ .duoop-card__action { display:flex; gap:8px; align-items:center; }
1474
+ .duoop-card__content { padding-top:0; min-width:0; font-size: 13px; line-height:1.65; }
1475
+ .duoop-card__footer { margin-top:auto; padding-block:16px; background:var(--card-paper); border-top:2px solid var(--card-border); display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:12px; font-size: 12px; }
1476
+ .duoop-card__footer>strong { font-size: 25px; letter-spacing:-1px; font-variant-numeric:tabular-nums; }
1477
+ .duoop-card__media { min-height:120px; overflow:hidden; display:grid; place-items:center; background:var(--card-paper); border-bottom:2px solid var(--card-border); }
1478
+ .duoop-card__media img { width:100%; height:100%; object-fit:cover; display:block; }
1479
+ .duoop-card--horizontal .duoop-card__media { flex:0 0 38%; min-width:110px; border-bottom:0; border-inline-end:2px solid var(--card-border); }
1480
+ .duoop-card--horizontal>div:not(.duoop-card__media) { min-width:0; }
1481
+ .duoop-card-frame { width:100%; border:2px solid var(--card-border); border-radius:12px; overflow:hidden; box-shadow:0 4px 0 var(--card-shadow); animation:card-arrive 300ms cubic-bezier(.2,.8,.2,1) backwards; }
1482
+ .duoop-card-frame__header,.duoop-card-frame__footer { padding:20px 22px; display:grid; grid-template-columns:minmax(0,1fr) auto; gap:8px 16px; align-items:center; }
1483
+ .duoop-card-frame__header { border-bottom:2px solid var(--card-border); background:var(--card-paper); }
1484
+ .duoop-card-frame__header .duoop-card__description { grid-column:1/-1; }
1485
+ .duoop-card-frame__footer { border-top:2px solid var(--card-border); font-size: 12px; }
1486
+ .duoop-card-frame>.duoop-card__content { padding:20px 22px; }
1487
+ .duoop-card__skeleton { padding:var(--card-pad,20px); display:grid; gap:12px; width:100%; }
1488
+ .duoop-card__skeleton i { display:block; border:1px solid #c8c2c2; border-radius:5px; background:linear-gradient(90deg,#ddd8d5 25%,#f7f5f4 45%,#ddd8d5 65%); background-size:240% 100%; animation:card-shimmer 1.15s ease-in-out infinite; }
1489
+ .skeleton-media { height:82px; }
1490
+ .skeleton-line { height:11px; }
1491
+ .skeleton-line:last-child { width:68%; }
1492
+ @keyframes card-arrive { from { opacity:0; transform:translateY(7px) scale(.985); } 70% { transform:translateY(-1px) scale(1.004); } to { opacity:1; transform:none; } }
1493
+ @keyframes card-title-pop { 50% { transform:translateX(5px); } }
1494
+ @keyframes card-shimmer { to { background-position:-240% 0; } }
1495
+ @media(max-width:520px) {
1496
+ .duoop-card--horizontal { flex-direction:column; }
1497
+ .duoop-card--horizontal .duoop-card__media { flex-basis:auto; min-height:110px; border-inline-end:0; border-bottom:2px solid var(--card-border); }
1498
+ .duoop-card--lg { --card-pad:20px; }
1499
+ .duoop-card-frame__header,.duoop-card-frame__footer { padding:18px 20px; }
1500
+ }
1501
+ @media(prefers-reduced-motion:reduce) {
1502
+ .duoop-card,.duoop-card-frame,.duoop-card__title,.duoop-card__title::after { animation:none; transition:none; }
1503
+ .duoop-card--interactive:hover,.duoop-card--interactive:active,.duoop-card:hover .duoop-card__title { transform:none; }
1504
+ .duoop-card__skeleton i { animation:none; background:#e4dfdc; }
1505
+ }
1506
+ .duoop-bento { container-type:inline-size; width:100%; color:var(--feedback-ink,#373434); }
1507
+ .duoop-bento__grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:20px; }
1508
+ .duoop-bento__item { min-width:0; padding:24px; border:2px solid var(--feedback-edge,#1d1b1b); border-radius:10px; background:var(--feedback-face,#fff); box-shadow:0 4px 0 var(--feedback-edge,#1d1b1b); display:flex; flex-direction:column; gap:14px; overflow-wrap:anywhere; transition:transform 220ms cubic-bezier(.2,.8,.2,1),box-shadow 220ms cubic-bezier(.2,.8,.2,1); }
1509
+ .duoop-bento__item--soft { background:var(--feedback-soft,#f0eeee); }
1510
+ .duoop-bento__item--feature { grid-column:span 2; grid-row:span 2; }
1511
+ .duoop-bento__item--wide { grid-column:span 2; flex-direction:row; align-items:center; justify-content:space-between; gap:24px; }
1512
+ .duoop-bento__item:focus-within { border-style:solid; }
1513
+ @media(hover:hover) { .duoop-bento__item:hover { transform:translateY(-3px); box-shadow:0 7px 0 var(--feedback-edge,#1d1b1b); } }
1514
+ .bento-demo { width:100%; min-width:0; }
1515
+ .bento-demo[data-theme=dark] { padding:24px; border-radius:12px; background:var(--feedback-face); }
1516
+ .bento-kicker { display:flex; align-items:center; justify-content:space-between; gap:12px; font-size: 10px; font-weight:600; letter-spacing:.08em; color:var(--feedback-muted); }
1517
+ .bento-kicker svg { width:22px; height:22px; flex:none; color:var(--feedback-ink); }
1518
+ .duoop-bento__item h3 { margin:0; font-size: 20px; font-weight:600; line-height:1.3; letter-spacing:-.6px; color:inherit; }
1519
+ .duoop-bento__item p { margin:0; font-size: 13px; line-height:1.75; color:var(--feedback-muted); }
1520
+ .bento-hero-copy { padding-top:24px; }
1521
+ .bento-hero-copy h3 { font-size: clamp(30px, 5.6cqi, 54px); line-height:1.08; letter-spacing:-2px; margin-bottom:20px; }
1522
+ .bento-drawing { width:100%; max-width:440px; align-self:center; margin:auto 0; padding:12px 0; flex:none; }
1523
+ .bento-drawing__layout { animation:bento-layout-in 280ms ease-out; transform-origin:center; }
1524
+ @keyframes bento-layout-in { from { opacity:.35; transform:translateY(6px); } to { opacity:1; transform:translateY(0); } }
1525
+ .bento-footer { display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:16px; font-size: 11px; color:var(--feedback-muted); }
1526
+ .bento-metric { font-size: 52px; font-weight:600; letter-spacing:-2px; line-height:1.15; font-variant-numeric:tabular-nums; }
1527
+ .bento-metric span { font-size: 20px; color:var(--feedback-muted); letter-spacing:-.5px; }
1528
+ .bento-meter { display:flex; gap:5px; margin-top:auto; padding-top:8px; }
1529
+ .bento-meter i { flex:1; height:20px; border:1px solid var(--feedback-edge); border-radius:3px; background:var(--feedback-ink); }
1530
+ .bento-save { display:flex; flex-wrap:wrap; align-items:center; gap:12px; margin-top:auto; }
1531
+ .bento-status { font-size: 11px; color:var(--feedback-muted); min-height:18px; }
1532
+ .bento-bottom-copy { display:grid; gap:12px; }
1533
+ .bento-formats { display:flex; align-items:flex-end; gap:8px; flex:none; }
1534
+ .bento-formats span { width:52px; height:40px; border:2px solid var(--feedback-edge); border-radius:5px; box-shadow:0 3px 0 var(--feedback-edge); background:var(--feedback-soft); }
1535
+ .bento-formats span:nth-child(2) { width:30px; height:44px; }.bento-formats span:nth-child(3) { width:22px; height:34px; }
1536
+ .bento-playground { padding:28px; margin-bottom:48px; background:#fafbfc; border:1px solid #e7e9ed; border-radius:12px; }
1537
+ .bento-playground__heading { display:flex; flex-wrap:wrap; justify-content:space-between; gap:12px; margin-bottom:24px; }.bento-playground__heading>span:last-child { font-size: 11px; color:#646c78; }
1538
+ .bento-grid-showcase .gallery-card-preview { padding:28px; }.bento-grid-showcase .gallery-card--wide { grid-column:1 / -1; }
1539
+ .bento-mini { display:grid; grid-template-columns:1.6fr 1fr; grid-template-rows:48px 48px 36px; gap:8px; width:235px; color:#373434; }
1540
+ .bento-mini>span { border:2px solid #373434; border-radius:6px; box-shadow:0 3px 0 #1d1b1b; background:white; padding:10px; display:flex; align-items:center; justify-content:center; gap:5px; }.bento-mini>span:first-child { grid-row:span 2; flex-direction:column; align-items:flex-start; gap:12px; background:#f0eeee; }.bento-mini small { font-size: 7px; letter-spacing:.1em; }.bento-mini strong { font-size: 15px; line-height:1.2; letter-spacing:-.5px; }.bento-mini>span:last-child { grid-column:span 2; justify-content:space-between; font-size: 10px; }.bento-mini svg { width:20px; height:20px; }.bento-mini i { width:10px; height:18px; border:1px solid #373434; background:#f0eeee; border-radius:2px; }.bento-mini i:nth-child(2) { height:26px; }
1541
+ @container(max-width:700px) { .duoop-bento__grid { grid-template-columns:repeat(2,minmax(0,1fr)); }.duoop-bento__item--feature { grid-row:auto; }.duoop-bento__item--wide { grid-column:span 1; flex-direction:column; align-items:flex-start; }.bento-hero-copy h3 { font-size: 42px; } }
1542
+ @container(max-width:440px) { .duoop-bento__grid { grid-template-columns:minmax(0,1fr); gap:18px; }.duoop-bento__item { grid-column:auto; grid-row:auto; padding:20px; }.bento-hero-copy h3 { font-size: 36px; }.bento-hero-copy { padding-top:12px; } }
1543
+ @media(max-width:600px) { .bento-playground,.bento-grid-showcase .gallery-card-preview { padding:16px; }.bento-demo[data-theme=dark] { padding:12px; } }
1544
+ @media(prefers-reduced-motion:reduce) { .duoop-bento__item { transition:none; }.duoop-bento__item:hover { transform:none; box-shadow:0 4px 0 var(--feedback-edge,#1d1b1b); }.bento-drawing__layout { animation:none; } }
1545
+ .cards-carousel__rail::-webkit-scrollbar { display:none; }
1546
+ .cards-carousel { width:100%; min-width:0; background:var(--feedback-face); color:var(--feedback-ink); --story-border:var(--feedback-edge); }
1547
+ .cards-carousel__heading { display:flex; align-items:end; justify-content:space-between; gap:24px; padding:32px 32px 12px; }
1548
+ .cards-carousel__eyebrow { display:block; font-size: 10px; line-height:1.5; letter-spacing:1.2px; font-weight:600; text-transform:uppercase; }
1549
+ .cards-carousel__heading h3 { margin:12px 0 0; max-width:440px; font-size: clamp(24px, 3vw, 36px); line-height:1.12; font-weight:600; letter-spacing:-1.2px; text-wrap:balance; }
1550
+ .cards-carousel__hint { max-width:150px; font-size: 12px; color:var(--feedback-muted); line-height:1.7; }
1551
+ .cards-carousel__rail { display:flex; gap:20px; overflow-x:auto; overscroll-behavior-x:contain; scroll-snap-type:x mandatory; scroll-padding-inline:32px; padding:20px 32px 28px; scrollbar-width:none; }
1552
+ .cards-carousel__card { position:relative; flex:0 0 300px; min-width:0; padding:0; display:flex; flex-direction:column; text-align:start; font: inherit; color:inherit; background:var(--feedback-face); border:2px solid var(--story-border); border-radius:10px; box-shadow:0 5px 0 var(--story-border); overflow:hidden; scroll-snap-align:start; cursor:pointer; transition:transform 200ms cubic-bezier(.2,.8,.2,1),box-shadow 200ms ease-out; }
1553
+ .cards-carousel__copy { display:block; min-height:140px; padding:24px; }
1554
+ .cards-carousel__copy strong { display:block; margin-top:12px; font-size: 25px; font-weight:600; line-height:1.16; letter-spacing:-.7px; text-wrap:balance; overflow-wrap:anywhere; }
1555
+ .cards-carousel__image { width:100%; height:240px; object-fit:cover; display:block; border-block:2px solid var(--story-border); }
1556
+ .cards-carousel__image-fallback { display:grid; place-items:center; background:var(--feedback-soft); color:var(--feedback-muted); font-size: 12px; }
1557
+ .cards-carousel__card-footer { display:flex; align-items:center; justify-content:space-between; gap:12px; padding:16px 20px; font-size: 11px; }
1558
+ .cards-carousel__plus { display:grid; place-items:center; width:36px; height:36px; border:2px solid var(--story-border); border-radius:8px; box-shadow:0 3px 0 var(--story-border); transition:transform 180ms ease-out,box-shadow 180ms ease-out; }
1559
+ .cards-carousel__plus svg { width:20px; height:20px; }
1560
+ @media(hover:hover) { .cards-carousel__card:hover { transform:translateY(-4px); box-shadow:0 8px 0 var(--story-border); }.cards-carousel__card:hover .cards-carousel__plus { transform:rotate(90deg); } }
1561
+ .cards-carousel__card:active { transform:translateY(3px); box-shadow:0 2px 0 var(--story-border); }
1562
+ .cards-carousel__card:focus-visible { outline:2px solid var(--feedback-ink); outline-offset:-7px; }
1563
+ .cards-carousel__navigation { display:flex; align-items:center; justify-content:space-between; gap:20px; padding:16px 32px 32px; }
1564
+ .cards-carousel__navigation>span { font-size: 12px; line-height:1.6; color:var(--feedback-muted); }
1565
+ .cards-carousel__navigation>div { display:flex; gap:12px; }
1566
+ .cards-carousel__navigation .duoop-button,.cards-carousel__detail-heading .duoop-button { width:44px; height:44px; flex-shrink:0; }
1567
+ .cards-carousel__empty { padding:48px 0; color:var(--feedback-muted); }
1568
+ .cards-carousel[data-size=compact] .cards-carousel__card { flex-basis:240px; }
1569
+ .cards-carousel[data-size=compact] .cards-carousel__copy { min-height:132px; padding:20px; }
1570
+ .cards-carousel[data-size=compact] .cards-carousel__copy strong { font-size: 22px; }
1571
+ .cards-carousel[data-size=compact] .cards-carousel__image { height:180px; }
1572
+ .cards-carousel__dialog { width:min(800px,calc(100% - 32px)); max-height:calc(100dvh - 48px); padding:0; border:2px solid var(--story-border); border-radius:12px; background:var(--feedback-face); color:var(--feedback-ink); box-shadow:0 6px 0 var(--story-border); overscroll-behavior:contain; scrollbar-width:thin; scrollbar-color:var(--feedback-muted) transparent; }
1573
+ .cards-carousel__dialog[open] { animation:story-enter 240ms cubic-bezier(.2,.8,.2,1); }
1574
+ .cards-carousel__dialog::backdrop { background:rgb(29 27 27 / .6); animation:story-fade 180ms ease-out; }
1575
+ .cards-carousel__detail-toolbar { display:flex; align-items:center; justify-content:space-between; gap:20px; padding:16px 32px; border-bottom:1px solid var(--feedback-track); }
1576
+ .cards-carousel__detail-toolbar>.cards-carousel__eyebrow { color:var(--feedback-muted); }
1577
+ .cards-carousel__detail-toolbar>.cards-carousel__eyebrow>span { margin-inline:12px; }
1578
+ .cards-carousel__detail-toolbar .duoop-button,.cards-carousel__detail-footer nav .duoop-button { width:44px; height:44px; flex-shrink:0; }
1579
+ .cards-carousel__story { animation:story-enter 240ms cubic-bezier(.2,.8,.2,1); }
1580
+ .cards-carousel__detail-heading { display:flex; align-items:start; gap:24px; padding:28px 32px; }
1581
+ .cards-carousel__story-number { display:grid; place-items:center; flex:0 0 56px; height:64px; font-size: 27px; font-weight:500; letter-spacing:-1px; border:2px solid var(--story-border); border-radius:8px; box-shadow:0 4px 0 var(--story-border); background:var(--feedback-soft); font-variant-numeric:tabular-nums; }
1582
+ .cards-carousel__detail-heading h2 { max-width:570px; margin:10px 0 0; font-size: clamp(26px, 4vw, 36px); line-height:1.15; font-weight:600; letter-spacing:-1px; text-wrap:balance; }
1583
+ .cards-carousel__detail-heading h2:focus { outline:none; }
1584
+ .cards-carousel__detail-heading h2:focus-visible { text-decoration:underline; text-decoration-style:solid; text-decoration-thickness:1px; text-underline-offset:6px; }
1585
+ .cards-carousel__figure { margin:0 32px; }
1586
+ .cards-carousel__detail-image { display:block; width:100%; height:240px; object-fit:cover; border:2px solid var(--story-border); border-radius:8px; }
1587
+ .cards-carousel__figure figcaption { display:flex; justify-content:space-between; gap:16px; padding-top:10px; font-size: 11px; line-height:1.5; color:var(--feedback-muted); }
1588
+ .cards-carousel__figure figcaption>span:last-child { flex-shrink:0; font-variant-numeric:tabular-nums; }
1589
+ .cards-carousel__detail-content { display:flex; align-items:start; gap:28px; padding:28px 32px 32px; font-size: 14px; line-height:1.8; }
1590
+ .cards-carousel__prose { flex:1; min-width:0; }
1591
+ .cards-carousel__detail-content h3 { margin:0 0 12px; font-size: 21px; line-height:1.3; letter-spacing:-.4px; }
1592
+ .cards-carousel__detail-content p { margin:0 0 20px; color:var(--feedback-muted); }
1593
+ .cards-carousel__detail-content p:last-child { margin:0; }
1594
+ .cards-carousel__takeaway { flex:0 0 180px; padding:16px 0 0 20px; border-inline-start:2px solid var(--story-border); }
1595
+ .cards-carousel__takeaway>svg { display:block; width:32px; height:32px; margin-bottom:16px; }
1596
+ .cards-carousel__takeaway .cards-carousel__eyebrow { margin-bottom:10px; }
1597
+ .cards-carousel__detail-content .cards-carousel__takeaway p { font-size: 12px; line-height:1.8; color:var(--feedback-ink); }
1598
+ .cards-carousel__detail-footer { display:flex; align-items:center; justify-content:space-between; gap:20px; padding:20px 32px 24px; border-top:2px solid var(--story-border); background:var(--feedback-soft); }
1599
+ .cards-carousel__detail-footer nav { display:flex; align-items:center; gap:16px; }
1600
+ .cards-carousel__story-position { white-space:nowrap; font-size: 12px; font-weight:600; font-variant-numeric:tabular-nums; }
1601
+ .cards-carousel__story-position>span { color:var(--feedback-muted); font-weight:400; }
1602
+ .cards-carousel__detail-footer .duoop-button-reserve { display:none; }
1603
+ .cards-playground { margin-top:32px; border:1px solid var(--border); border-radius:12px; overflow:hidden; }
1604
+ .cards-controls { display:flex; flex-wrap:wrap; gap:32px; padding:24px 32px; border-top:1px solid var(--border); }
1605
+ .cards-controls fieldset { padding:0; margin:0; border:0; min-width:0; }
1606
+ .cards-controls legend { margin-bottom:12px; font-size: 12px; font-weight:600; }
1607
+ .cards-controls fieldset>div { display:flex; flex-wrap:wrap; gap:12px; }
1608
+ .cards-controls .duoop-button-reserve { display:none; }
1609
+ .cards-carousel-showcase .gallery-grid { grid-template-columns:minmax(0,1fr); }
1610
+ .cards-carousel-showcase .gallery-card-preview { padding:0; }
1611
+ .cards-mini { display:flex; gap:12px; width:262px; transform:rotate(-3deg); }
1612
+ .cards-mini>span { flex:0 0 124px; display:flex; flex-direction:column; border:2px solid #1d1b1b; border-radius:8px; background:#fff; overflow:hidden; box-shadow:0 4px 0 #1d1b1b; transition:transform 200ms ease-out; }
1613
+ .cards-mini strong { font-size: 13px; line-height:1.2; padding:12px; }
1614
+ .cards-mini img { width:100%; height:90px; object-fit:cover; border-top:2px solid #1d1b1b; }
1615
+ .library-card:hover .cards-mini>span:last-child { transform:translateY(-6px); }
1616
+ @keyframes story-enter { from { opacity:0; transform:translateY(16px) scale(.98); } to { opacity:1; transform:none; } }
1617
+ @keyframes story-fade { from { opacity:0; } to { opacity:1; } }
1618
+ @media(max-width:600px) { .cards-carousel__heading { padding:24px 20px 8px; }.cards-carousel__hint { display:none; }.cards-carousel__rail { padding-inline:20px; scroll-padding-inline:20px; }.cards-carousel__card,.cards-carousel[data-size=compact] .cards-carousel__card { flex-basis:min(280px,88%); }.cards-carousel__copy { padding:20px; }.cards-carousel__navigation { padding:16px 20px 24px; }.cards-controls { padding:24px 20px; gap:24px; }.cards-carousel__detail-heading,.cards-carousel__detail-content { padding:24px 20px; }.cards-carousel__detail-heading { gap:16px; }.cards-carousel__story-number { flex-basis:42px; height:50px; font-size: 22px; }.cards-carousel__detail-toolbar { padding:12px 20px; }.cards-carousel__detail-toolbar>.cards-carousel__eyebrow>span { margin-inline:4px; }.cards-carousel__figure { margin-inline:20px; }.cards-carousel__detail-image { height:200px; }.cards-carousel__detail-content { flex-direction:column; gap:24px; }.cards-carousel__takeaway { flex:auto; width:100%; padding:16px 20px; border:1px solid var(--feedback-track); border-inline-start:2px solid var(--story-border); border-radius:0 8px 8px 0; background:var(--feedback-soft); }.cards-carousel__takeaway>svg { display:none; }.cards-carousel__detail-footer { padding:20px; flex-wrap:wrap; }.cards-carousel__detail-footer nav { justify-content:space-between; flex:1; }.cards-carousel__return { order:1; width:100%; } }
1619
+ @media(prefers-reduced-motion:reduce) { .cards-carousel__card,.cards-carousel__plus,.cards-mini>span { transition:none; }.cards-carousel__card:hover,.cards-carousel__card:active,.cards-carousel__card:hover .cards-carousel__plus,.library-card:hover .cards-mini>span:last-child { transform:none; }.cards-carousel__dialog[open],.cards-carousel__story { animation:story-fade 120ms ease-out; } }
1620
+ .duoop-avatar { --avatar-size:48px; --avatar-face:var(--feedback-face,#fff); --avatar-ink:var(--feedback-ink,#373434); --avatar-edge:var(--feedback-edge,#1d1b1b); position:relative; display:inline-flex; flex:none; width:var(--avatar-size); height:var(--avatar-size); color:var(--avatar-ink); vertical-align:middle; }
1621
+ .duoop-avatar--sm { --avatar-size:32px; }
1622
+ .duoop-avatar--lg { --avatar-size:64px; }
1623
+ .duoop-avatar--xl { --avatar-size:88px; }
1624
+ .duoop-avatar__face { position:relative; isolation:isolate; display:grid; place-items:center; width:100%; height:100%; overflow:hidden; border:0; border-radius:10px; background:var(--avatar-edge); box-shadow:0 3px 0 var(--avatar-edge); transition:transform 220ms cubic-bezier(.2,.8,.2,1),box-shadow 220ms ease; }
1625
+ .duoop-avatar__face::after { content:""; position:absolute; inset:0; z-index:1; border:var(--avatar-border-width,2px) solid var(--avatar-edge); border-radius:inherit; pointer-events:none; }
1626
+ .duoop-avatar__fallback { position:absolute; inset:var(--avatar-border-width,2px); display:grid; place-items:center; border-radius:calc(10px - var(--avatar-border-width,2px)); background:var(--avatar-face); font-size: calc(var(--avatar-size) * 0.3); font-weight:650; letter-spacing:-.04em; }
1627
+ .duoop-avatar img { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; clip-path:inset(var(--avatar-border-width,2px) round calc(10px - var(--avatar-border-width,2px))); opacity:0; transition:opacity 240ms ease-out; }
1628
+ .duoop-avatar__face:has(img[data-loaded=true]) .duoop-avatar__fallback { visibility:hidden; }
1629
+ .duoop-avatar img[data-loaded=true] { opacity:1; }
1630
+ .duoop-avatar img[data-cached=true] { transition:none; }
1631
+ .duoop-avatar__status { position:absolute; inset-inline-end:-5px; bottom:-6px; display:grid; place-items:center; width:20px; height:20px; border:2px solid var(--avatar-edge); border-radius:5px; background:var(--avatar-face); box-shadow:0 2px 0 var(--avatar-edge); }
1632
+ .duoop-avatar__status[data-status=online] { color:var(--feedback-success,#356247); background:var(--feedback-success-soft,#edf5ef); }
1633
+ .duoop-avatar__status svg { width:13px; height:13px; }
1634
+ .duoop-avatar-group { display:inline-flex; align-items:center; padding-block:4px 8px; padding-inline-end:4px; }
1635
+ .duoop-avatar-group > * + * { margin-inline-start:-10px; }
1636
+ .duoop-avatar-group > * { position:relative; }
1637
+ .duoop-avatar-group > :hover { z-index:2; }
1638
+ .avatar-choice { position:relative; display:inline-flex; align-items:center; justify-content:center; padding:8px; min-width:48px; min-height:60px; border:0; background:transparent; border-radius:12px; color:inherit; cursor:pointer; }
1639
+ .avatar-choice:hover:not(:disabled) .duoop-avatar__face { transform:translateY(-4px) rotate(-3deg); box-shadow:0 6px 0 var(--avatar-edge); }
1640
+ .avatar-choice:active:not(:disabled) .duoop-avatar__face { transform:translateY(2px); box-shadow:0 1px 0 var(--avatar-edge); transition-duration:90ms; }
1641
+ .avatar-choice:focus-visible { outline:none; }
1642
+ .avatar-choice:focus-visible::after { content:""; position:absolute; bottom:0; left:calc(50% - 10px); width:20px; height:3px; border-radius:1px; background:currentColor; }
1643
+ .avatar-choice[aria-pressed=true] .duoop-avatar__face { --avatar-border-width:3px; }
1644
+ .avatar-choice:disabled { opacity:.45; cursor:not-allowed; }
1645
+ @media(prefers-reduced-motion:reduce) { .duoop-avatar__face,.duoop-avatar img { transition:none; } .avatar-choice:hover:not(:disabled) .duoop-avatar__face,.avatar-choice:active:not(:disabled) .duoop-avatar__face { transform:none; } }
1646
+ .testimonials { --testimonial-ink:#373434; --testimonial-edge:#1d1b1b; width:100%; min-width:0; container-type:inline-size; color:var(--testimonial-ink); padding:40px; background:#f7f6f4; border-radius:10px; }
1647
+ .testimonials__heading { max-width:500px; margin-bottom:32px; }
1648
+ .testimonials__eyebrow { display:block; font-size: 10px; font-weight:600; letter-spacing:.13em; text-transform:uppercase; margin-bottom:12px; }
1649
+ .testimonials .testimonials__heading h3 { margin:0; font-size: clamp(26px, 4cqi, 38px); line-height:1.15; letter-spacing:-.045em; font-weight:600; }
1650
+ .testimonials .testimonials__heading p { margin:16px 0 0; font-size: 13px; line-height:1.7; color:#686565; max-width:380px; }
1651
+ .testimonials__stage { min-width:0; }
1652
+ .testimonials__paper { background:#fff; border:2px solid var(--testimonial-edge); border-radius:10px; box-shadow:0 5px 0 var(--testimonial-edge); padding:28px; min-width:0; }
1653
+ .testimonials__company { display:flex; align-items:center; justify-content:space-between; gap:16px; font-size: 18px; font-weight:650; letter-spacing:-.04em; }
1654
+ .testimonials__company > span { color:#686565; font-size: 10px; font-weight:450; letter-spacing:0; }
1655
+ .testimonials__quote { margin:0; min-width:0; }
1656
+ .testimonials__mark { width:36px; height:30px; flex:none; }
1657
+ .testimonials blockquote { margin:16px 0 24px; font-size: 14px; line-height:1.7; letter-spacing:-.015em; overflow-wrap:anywhere; }
1658
+ .testimonials__quote--featured { padding-top:28px; }
1659
+ .testimonials__quote--featured blockquote { font-size: clamp(20px, 3.6cqi, 30px); font-weight:500; line-height:1.45; letter-spacing:-.035em; min-height:4.35em; }
1660
+ .testimonials__author { display:flex; gap:12px; align-items:center; }
1661
+ .testimonials__author > span:last-child { display:grid; gap:4px; min-width:0; }
1662
+ .testimonials__author strong { font-size: 12px; font-weight:600; }
1663
+ .testimonials__author small { font-size: 11px; color:#686565; line-height:1.5; }
1664
+ .testimonials__footer { display:flex; justify-content:space-between; align-items:center; gap:16px; border-top:1px solid #e2dede; padding-top:20px; margin-top:28px; }
1665
+ .testimonials__footer > span { font-size: 11px; font-variant-numeric:tabular-nums; color:#686565; }
1666
+ .testimonials__footer > div { display:flex; gap:12px; }
1667
+ .testimonials__footer .duoop-button { min-width:44px; min-height:44px; }
1668
+ .testimonials__story { animation:testimonial-arrive 320ms cubic-bezier(.2,.8,.2,1) both; }
1669
+ .testimonials__wall { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,2.15fr) minmax(0,1fr); align-items:start; gap:20px; padding-bottom:8px; }
1670
+ .testimonials__wall-column, .testimonials__wall-center { display:grid; gap:24px; min-width:0; align-content:start; }
1671
+ .testimonials__wall-lower { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:20px; align-items:start; }
1672
+ .testimonials__wall .testimonials__quote { padding:20px; margin:0; background:#fff; border:2px solid var(--testimonial-edge); border-radius:10px; box-shadow:0 4px 0 var(--testimonial-edge); }
1673
+ .testimonials__wall blockquote { font-size: 13px; line-height:1.75; margin:12px 0 24px; }
1674
+ .testimonials__wall .testimonials__mark { width:28px; height:24px; }
1675
+ .testimonials__wall .testimonials__author { align-items:flex-start; gap:10px; }
1676
+ .testimonials__wall .testimonials__author small { font-size: 10px; }
1677
+ .testimonials__wall .testimonials__quote--featured { padding:32px 28px 0; overflow:hidden; }
1678
+ .testimonials__wall .testimonials__quote--featured blockquote { font-size: clamp(20px, 2.7cqi, 28px); line-height:1.55; font-weight:550; min-height:0; margin-bottom:32px; }
1679
+ .testimonials__wall .testimonials__quote--featured .testimonials__author { padding:24px 28px; margin-inline:-28px; border-top:1px solid #e2dede; background:#f7f6f4; }
1680
+ .testimonials--wall .testimonials__heading { text-align:center; margin:0 auto 32px; }
1681
+ .testimonials--wall .testimonials__heading p { margin-inline:auto; }
1682
+ .testimonials__choices { display:flex; flex-direction:column; gap:16px; min-width:0; }
1683
+ .testimonials__choices .duoop-button { width:100%; min-height:76px; }
1684
+ .testimonials__choice { display:grid; gap:5px; padding:4px; text-align:start; }
1685
+ .testimonials__choice strong { font-size: 16px; letter-spacing:-.03em; }
1686
+ .testimonials__choice small { font-size: 11px; font-weight:400; }
1687
+ .testimonials--voices .testimonials__stage { display:grid; grid-template-columns:180px minmax(0,1fr); gap:24px; align-items:start; }
1688
+ .testimonials--voices { background:#eeece9; }
1689
+ .testimonials-showcase .gallery-card--wide { grid-column:1 / -1; }
1690
+ .testimonials-showcase .gallery-card-preview { padding:20px; }
1691
+ .testimonials-showcase .individual-preview { display:block; }
1692
+ .testimonials-reference { font-size: 12px; color:#717781; line-height:1.7; }
1693
+ .testimonials-mini { display:grid; width:220px; padding:20px; border:2px solid #1d1b1b; border-radius:10px; background:#fff; box-shadow:0 4px 0 #1d1b1b; gap:10px; transform:rotate(-3deg); color:#373434; }
1694
+ .testimonials-mini .testimonials__mark { width:26px; height:22px; }
1695
+ .testimonials-mini strong { font-size: 15px; letter-spacing:-.03em; }
1696
+ .testimonials-mini small { font-size: 10px; color:#686565; }
1697
+ @container (max-width:700px) { .testimonials__wall { grid-template-columns:1fr 1fr; } .testimonials__wall-center { grid-column:1 / -1; grid-row:1; } .testimonials--voices .testimonials__stage { grid-template-columns:1fr; } .testimonials__choices { flex-direction:row; flex-wrap:wrap; } .testimonials__choices .duoop-button { flex:1; min-width:120px; } }
1698
+ @container (max-width:420px) { .testimonials__wall, .testimonials__wall-lower { grid-template-columns:1fr; gap:24px; } .testimonials__wall .testimonials__quote--featured { padding:24px 20px 0; } .testimonials__wall .testimonials__quote--featured .testimonials__author { margin-inline:-20px; padding:20px; } .testimonials__paper { padding:20px; } .testimonials__company { flex-wrap:wrap; } .testimonials__quote--featured blockquote { min-height:0; } }
1699
+ @media(max-width:650px) { .testimonials { padding:24px 16px; } .testimonials-showcase .gallery-card-preview { padding:8px; } }
1700
+ @keyframes testimonial-arrive { from { opacity:0; transform:translateY(10px) rotate(.4deg); } to { opacity:1; transform:translateY(0) rotate(0); } }
1701
+ @media(prefers-reduced-motion:reduce) { .testimonials__story { animation:none; } }
1702
+
1703
+
1704
+ .duoop-progress { --progress-tone:var(--feedback-ink,#373434); width:100%; min-width:0; display:flex; flex-direction:column; gap:12px; color:var(--feedback-ink,#373434); }
1705
+ .duoop-progress[data-state=success] { --progress-tone:var(--feedback-success,#356247); }
1706
+ .duoop-progress[data-state=error] { --progress-tone:var(--feedback-error,#a51d2d); }
1707
+ .duoop-progress[data-state=partial] { --progress-tone:var(--feedback-warning,#80521a); }
1708
+ .duoop-progress:is([data-state=paused],[data-state=cancelled],[data-state=waiting]) { --progress-tone:var(--feedback-muted,#686565); }
1709
+ .progress-heading { display:flex; justify-content:space-between; gap:16px; align-items:baseline; font-size: 13px; font-weight:600; line-height:1.5; }
1710
+ .progress-heading>span { overflow-wrap:anywhere; }
1711
+ .progress-value { font-variant-numeric:tabular-nums; flex-shrink:0; color:var(--progress-tone); }
1712
+ .progress-track { position:relative; height:16px; border-radius:6px; box-shadow:0 3px 0 var(--feedback-edge,#1d1b1b); background:var(--feedback-track,#e8e4e4); overflow:hidden; isolation:isolate; }
1713
+ .duoop-progress[data-size=sm] .progress-track { height:8px; border-radius:3px; box-shadow:0 2px 0 var(--feedback-edge,#1d1b1b); }
1714
+ .duoop-progress[data-size=lg] .progress-track { height:24px; border-radius:7px; }
1715
+ .duoop-progress[data-rounded=false] .progress-track { border-radius:0; }
1716
+ .progress-track::after { content:''; position:absolute; inset:0; border:2px solid var(--feedback-edge,#1d1b1b); border-radius:inherit; z-index:2; pointer-events:none; }
1717
+ .progress-fill,.progress-buffer { position:absolute; inset:0; transform-origin:left; transition:background-color 240ms ease; }
1718
+ .progress-buffer { transition:transform 750ms cubic-bezier(.2,.8,.2,1),background-color 240ms ease; }
1719
+ [dir=rtl] .progress-fill,[dir=rtl] .progress-buffer { transform-origin:right; }
1720
+ .progress-fill { background:var(--progress-tone); overflow:hidden; }
1721
+ .progress-fill::before { content:''; position:absolute; inset:3px 6px auto; height:3px; border-radius:3px; background:var(--feedback-face,#fff); opacity:.28; }
1722
+ .duoop-progress[data-size=sm] .progress-fill::before { inset-block-start:2px; height:1px; }
1723
+ .duoop-progress[data-size=lg] .progress-fill::before { inset-block-start:4px; height:4px; }
1724
+ .progress-meter { position:relative; }
1725
+ .progress-arrival { position:absolute; inset:-4px; border:2px solid var(--progress-tone); border-radius:9px; pointer-events:none; opacity:0; animation:progress-arrival 750ms cubic-bezier(.16,1,.3,1) both; }
1726
+ .duoop-progress[data-shape=circular] .progress-arrival { border-radius:50%; inset:4px; }
1727
+ .duoop-progress[data-shape=linear][data-state=success] .progress-track { animation:progress-land 600ms cubic-bezier(.2,1.5,.3,1); }
1728
+ .progress-buffer { background:var(--progress-tone); opacity:.24; }
1729
+ .progress-segments { position:absolute; inset:0; }
1730
+ .progress-segments i { position:absolute; top:0; bottom:0; width:4px; background:var(--feedback-face,#fff); border-inline-start:1px solid var(--feedback-edge,#1d1b1b); }
1731
+ .duoop-progress[data-indeterminate=true] .progress-fill { width:35%; animation:progress-sweep 1.4s cubic-bezier(.4,0,.2,1) infinite; }
1732
+ .progress-caption { display:flex; flex-direction:column; gap:8px; font-size: 12px; line-height:1.65; color:var(--feedback-muted,#686565); overflow-wrap:anywhere; }
1733
+ .progress-caption:has(.progress-status:empty):not(:has(>span+span)) { display:none; }
1734
+ .progress-status { display:flex; gap:8px; align-items:center; color:var(--progress-tone); font-weight:600; }
1735
+ .progress-status:empty { display:none; }
1736
+ .progress-status svg { width:18px; height:18px; }
1737
+ .duoop-progress[data-shape=circular] { align-items:center; text-align:center; }
1738
+ .progress-ring { width:124px; height:124px; position:relative; }
1739
+ .duoop-progress[data-size=sm] .progress-ring { width:76px; height:76px; }
1740
+ .duoop-progress[data-size=lg] .progress-ring { width:164px; height:164px; }
1741
+ .progress-ring>svg { width:100%; height:100%; fill:none; transform:rotate(-90deg); overflow:visible; filter:drop-shadow(-2px 0 0 var(--feedback-edge,#1d1b1b)); }
1742
+ .progress-ring-edge { stroke:var(--feedback-edge,#1d1b1b); stroke-width:12; }
1743
+ .progress-ring-track { stroke:var(--feedback-track,#e8e4e4); stroke-width:8; }
1744
+ .progress-ring-fill { stroke:var(--progress-tone); stroke-width:8.5; stroke-linecap:round; transition:stroke 240ms ease; }
1745
+ .duoop-progress[data-rounded=false] .progress-ring-fill { stroke-linecap:butt; }
1746
+ .progress-ring-center { position:absolute; inset:18%; display:flex; flex-direction:column; gap:4px; align-items:center; justify-content:center; color:var(--progress-tone); font-size: 20px; font-variant-numeric:tabular-nums; }
1747
+ .progress-ring-center>svg { width:36px; height:36px; }
1748
+ .progress-ring-center small { font-size: 11px; }
1749
+ .duoop-progress[data-size=sm] .progress-ring-center { font-size: 12px; }
1750
+ .duoop-progress[data-indeterminate=true] .progress-ring>svg { animation:duoop-spin 1.3s linear infinite; }
1751
+ .duoop-progress:is([data-state=paused],[data-state=cancelled],[data-state=error]) * { animation-play-state:paused; }
1752
+ .duoop-progress[data-state=success] .progress-ring-center { animation:progress-confirm 650ms cubic-bezier(.16,1,.3,1) both; }
1753
+ .duoop-progress[data-state=success] .progress-ring-center .duoop-check { animation:none; }
1754
+ .duoop-progress[data-state=success] .progress-ring-center .duoop-check path { animation:duoop-draw 420ms ease-out 180ms both; }
1755
+ .duoop-progress[data-shape=linear][data-text-position=below] .progress-heading { order:1; }
1756
+ .duoop-progress[data-shape=linear][data-text-position=below] .progress-caption { order:2; }
1757
+ .duoop-progress[data-shape=linear][data-text-position=beside] { display:grid; grid-template-columns:minmax(0,1fr) minmax(80px,1fr); align-items:center; }
1758
+ .duoop-progress[data-shape=linear][data-text-position=beside] .progress-caption { grid-column:1/-1; }
1759
+ .progress-transfer { display:flex; align-items:center; gap:16px; }
1760
+ .progress-file-icon { display:grid; place-items:center; width:48px; height:56px; flex:none; border:2px solid var(--feedback-edge); border-radius:8px; box-shadow:0 3px 0 var(--feedback-edge); background:var(--feedback-face); }
1761
+ .progress-transfer>div { flex:1; min-width:0; }
1762
+ .progress-page-demo { border:2px solid var(--feedback-edge); border-radius:10px; background:var(--feedback-face); overflow:hidden; box-shadow:0 4px 0 var(--feedback-edge); }
1763
+ .progress-page-demo .progress-track { border:0; border-radius:0; box-shadow:none; }
1764
+ .progress-page-demo .progress-track::after { border:0; }
1765
+ .progress-page-demo .progress-caption { padding:0 20px; }
1766
+ .progress-page-copy { padding:28px 20px; display:flex; flex-direction:column; gap:12px; font-size: 13px; }
1767
+ .progress-page-copy span { color:var(--feedback-muted); font-size: 12px; }
1768
+ .progress-multiple { display:flex; flex-direction:column; gap:24px; }
1769
+ .progress-multiple>div+div { border-top:1px solid var(--feedback-track); padding-top:20px; }
1770
+ @keyframes progress-sweep { from { transform:translateX(-110%); } to { transform:translateX(390%); } }
1771
+ @keyframes progress-confirm { 0% { opacity:0; transform:translateY(8px) scale(.55) rotate(-18deg); } 60% { opacity:1; transform:translateY(-2px) scale(1.12) rotate(3deg); } to { opacity:1; transform:none; } }
1772
+ @keyframes progress-arrival { from { opacity:.5; transform:scale(.96); } to { opacity:0; transform:scale(1.1,1.6); } }
1773
+ .duoop-progress[data-shape=circular] .progress-arrival { animation-name:progress-ring-arrival; }
1774
+ @keyframes progress-ring-arrival { from { opacity:.55; transform:scale(.92); } to { opacity:0; transform:scale(1.24); } }
1775
+ @keyframes progress-land { 0% { transform:scaleY(.8); } 45% { transform:scaleY(1.15); } to { transform:none; } }
1776
+ @media(prefers-reduced-motion:reduce) { .progress-fill,.progress-buffer,.progress-ring-fill { transition:none; } .duoop-progress[data-indeterminate=true] .progress-fill,.duoop-progress[data-indeterminate=true] .progress-ring>svg,.duoop-progress[data-state=success] .progress-ring-center { animation:none; } .duoop-progress[data-indeterminate=true] .progress-fill { transform:translateX(90%); } }
1777
+ @media(prefers-reduced-motion:reduce) { .progress-arrival { display:none; }.duoop-progress[data-state=success] .progress-track,.duoop-progress[data-state=success] .progress-ring-center .duoop-check path { animation:none; } }
1778
+
1779
+ .duoop-toast { --toast-tone:var(--feedback-ink); --toast-tint:var(--feedback-soft); position:relative; display:flex; align-items:flex-start; gap:12px; width:100%; padding:20px; border:2px solid var(--feedback-edge); border-radius:10px; background:var(--feedback-face); color:var(--feedback-ink); box-shadow:0 4px 0 var(--feedback-edge); animation:toast-enter 280ms cubic-bezier(.2,1.2,.4,1) both; transition:border-color 220ms ease; overflow-wrap:anywhere; }
1780
+ .duoop-toast[data-tone=success] { --toast-tone:var(--feedback-success); --toast-tint:var(--feedback-success-soft); }
1781
+ .duoop-toast[data-tone=error] { --toast-tone:var(--feedback-error); --toast-tint:var(--feedback-error-soft); }
1782
+ .duoop-toast[data-tone=warning] { --toast-tone:var(--feedback-warning); --toast-tint:var(--feedback-warning-soft); }
1783
+ .duoop-toast[data-appearance=tinted] { background:var(--toast-tint); border-color:var(--toast-tone); box-shadow:0 4px 0 var(--toast-tone); }
1784
+ .duoop-toast[data-appearance=solid] { background:var(--toast-tone); color:var(--feedback-face); border-color:var(--feedback-edge); }
1785
+ .duoop-toast[data-appearance=solid] .toast-status-icon,.duoop-toast[data-appearance=solid] .toast-content>p { color:inherit; }
1786
+ .toast-status-icon { width:24px; min-height:24px; display:grid; place-items:center; flex:none; color:var(--toast-tone); animation:toast-status-in 260ms ease-out; }
1787
+ .toast-content { flex:1; min-width:0; display:flex; flex-direction:column; gap:10px; }
1788
+ .toast-title { font-size: 13px; line-height:1.65; font-weight:650; animation:toast-renotify 240ms ease-out; }
1789
+ .toast-content>p { font-size: 12px; line-height:1.7; color:var(--feedback-muted); margin:0; }
1790
+ .toast-content>.duoop-button { align-self:flex-start; margin-top:4px; }
1791
+ .duoop-toast .toast-close { width:28px; min-height:28px; padding:4px; border-radius:6px; --button-depth:2px; flex:none; margin:-4px -4px 0 0; }
1792
+ .toast-close .feedback-icon { width:14px; height:14px; }
1793
+ .duoop-toast[data-density=compact] { padding:12px; gap:8px; }
1794
+ .duoop-toast[data-density=compact] .toast-title { font-size: 12px; }
1795
+ .toast-countdown { height:4px; border-radius:2px; overflow:hidden; background:var(--feedback-track); }
1796
+ .toast-countdown>span { display:block; height:100%; width:100%; background:var(--toast-tone); transform-origin:left; transition:transform 100ms linear; }
1797
+ .duoop-toast[data-leaving=true] { animation:toast-exit 220ms ease-in forwards; pointer-events:none; }
1798
+ .toast-viewport { position:fixed; width:380px; max-width:calc(100vw - 32px); z-index:1500; pointer-events:none; outline:none; }
1799
+ .toast-viewport[data-position^=bottom] { bottom:max(24px,env(safe-area-inset-bottom)); }
1800
+ .toast-viewport[data-position^=top] { top:max(24px,env(safe-area-inset-top)); }
1801
+ .toast-viewport[data-position$=right] { right:24px; }
1802
+ .toast-viewport[data-position$=left] { left:24px; }
1803
+ .toast-viewport[data-position$=center] { left:50%; transform:translateX(-50%); }
1804
+ .toast-viewport:focus-visible .toast-stack .duoop-toast { border-style:solid; }
1805
+ .toast-viewport.toast-viewport--inline { position:relative; width:100%; max-width:none; inset:auto; transform:none; z-index:1; }
1806
+ .toast-stack { position:relative; pointer-events:auto; transition:height 260ms cubic-bezier(.2,.8,.2,1); }
1807
+ .toast-slot { position:absolute; inset:0 0 auto; transform-origin:top center; transition:transform 280ms cubic-bezier(.2,.8,.2,1); }
1808
+ .toast-slot[data-covered=true] { pointer-events:none; }
1809
+ .toast-slot[data-covered=true] .duoop-toast>* { opacity:0; }
1810
+ .toast-slot .duoop-toast>* { transition:opacity 160ms ease; }
1811
+ .toast-queue-count { display:block; text-align:center; font-size: 11px; color:var(--feedback-muted); margin-top:14px; padding:4px; background:var(--feedback-face); }
1812
+ .toast-anchor { z-index:1600; width:max-content; max-width:min(380px,calc(100vw - 24px)); }
1813
+ .toast-anchor .duoop-toast { width:100%; }
1814
+ .toast-demo-stage { min-height:100px; display:flex; align-items:center; width:100%; }
1815
+ .toast-demo-stage>.toast-viewport { flex:1; }
1816
+ .toast-file-state { display:flex; align-items:center; gap:10px; min-height:28px; font-size: 12px; color:var(--feedback-muted); }
1817
+ .toast-file-state>svg { width:20px; height:20px; }
1818
+ .toast-anchor-preview { display:flex; flex-direction:column; gap:16px; }
1819
+ .toast-copy-path { font-size: 12px; overflow-wrap:anywhere; }
1820
+ .toast-file-details { border-top:1px solid var(--feedback-track); padding-top:20px; font-size: 13px; line-height:1.7; }
1821
+ .toast-file-details:focus { outline:none; border-top-style:solid; }
1822
+ .toast-viewport:not(.toast-viewport--inline) { max-height:calc(100dvh - 64px); overflow-y:auto; padding-bottom:6px; }
1823
+ @keyframes toast-enter { from { opacity:0; transform:translateY(12px) scale(.96); } to { opacity:1; transform:translateY(0) scale(1); } }
1824
+ @keyframes toast-exit { to { opacity:0; transform:translateY(8px) scale(.96); } }
1825
+ @keyframes toast-status-in { from { opacity:0; transform:scale(.7); } to { opacity:1; transform:scale(1); } }
1826
+ @keyframes toast-renotify { from { opacity:.4; transform:translateY(3px); } to { opacity:1; transform:translateY(0); } }
1827
+ @media(pointer:coarse) { .duoop-toast .toast-close { min-width:44px; min-height:44px; } }
1828
+ @media(max-width:650px) { .toast-viewport:not(.toast-viewport--inline) { width:calc(100vw - 32px); } .toast-viewport[data-position$=right] { right:16px; } .toast-viewport[data-position$=left] { left:16px; } }
1829
+ @media(prefers-reduced-motion:reduce) { .duoop-toast,.toast-status-icon,.toast-title,.duoop-toast[data-leaving=true] { animation:none; } .duoop-toast[data-leaving=true] { opacity:0; } .toast-slot,.toast-stack,.toast-countdown>span,.toast-slot .duoop-toast>* { transition:none; } }
1830
+ .toast-placement-field { grid-template-columns:minmax(0,1fr) minmax(180px,220px); align-items:center; gap:16px; }
1831
+ .toast-placement-field .duoop-select { min-width:0; }
1832
+ @media(max-width:500px) { .toast-placement-field { grid-template-columns:minmax(0,1fr); } }
1833
+ .duoop-achievement { --card-ink:var(--feedback-ink,#373434); --card-border:var(--feedback-edge,#1d1b1b); --card-shadow:var(--card-border); --card-muted:var(--feedback-muted,#686565); background:var(--feedback-face,#fff); overflow:visible; color:var(--card-ink); }
1834
+ .achievement-heading { display:flex; align-items:center; gap:24px; padding:32px 28px 28px; min-width:0; }
1835
+ .achievement-copy { display:flex; flex-direction:column; align-items:flex-start; gap:10px; min-width:0; }
1836
+ .achievement-copy h4 { font-size:22px; font-weight:700; line-height:1.35; letter-spacing:-.4px; margin:0; overflow-wrap:anywhere; }
1837
+ .achievement-copy>p { margin:0; font-size:13px; line-height:1.65; color:var(--card-muted); }
1838
+ .achievement-copy .achievement-eyebrow { text-transform:uppercase; font-size: 10px; line-height:1.5; letter-spacing:.1em; font-weight:650; }
1839
+ .achievement-emblem { --emblem-width:100px; display:block; flex:none; width:var(--emblem-width); aspect-ratio:100 / 116; color:var(--feedback-ink,#373434); }
1840
+ .achievement-emblem>svg { display:block; width:100%; height:100%; overflow:visible; stroke:currentColor; stroke-width:2; stroke-linecap:round; stroke-linejoin:round; }
1841
+ .achievement-svg-shadow { fill:currentColor; stroke:currentColor; }
1842
+ .achievement-medal-face { fill:var(--feedback-face,#fff); }
1843
+ .achievement-ribbon,.achievement-medal-inset,.achievement-laurel { fill:var(--feedback-soft,#f0eeee); }
1844
+ .achievement-medal-inset { stroke-width:1.8; }
1845
+ .achievement-medal-glint { stroke:var(--feedback-face,#fff); stroke-width:3; }
1846
+ .achievement-emblem[data-visual=icon] { --emblem-width:56px; aspect-ratio:64 / 68; }
1847
+ .achievement-emblem[data-visual=illustration] { --emblem-width:180px; aspect-ratio:200 / 160; }
1848
+ .duoop-achievement[data-concealed=true] .achievement-medal-inset { stroke-dasharray:none; }
1849
+ .achievement-progress { padding:0 28px 24px; }
1850
+ .achievement-progress-label { display:flex; align-items:baseline; justify-content:space-between; gap:12px; margin:0 0 12px; font-size: 12px; font-weight:600; font-variant-numeric:tabular-nums; }
1851
+ .achievement-progress .progress-caption:empty { display:none; }
1852
+ .achievement-quantity { margin:0; display:flex; align-items:baseline; gap:10px; }
1853
+ .achievement-quantity strong { font-size: 25px; letter-spacing:-1px; font-variant-numeric:tabular-nums; }
1854
+ .achievement-quantity>span { font-size: 12px; color:var(--card-muted); }
1855
+ .achievement-checklist { margin:0; padding:0; list-style:none; display:grid; gap:16px; }
1856
+ .achievement-metadata { margin:0; padding:0 28px 24px; display:grid; gap:12px; }
1857
+ .achievement-metadata>div { display:grid; grid-template-columns:85px minmax(0,1fr); gap:16px; font-size: 12px; line-height:1.7; }
1858
+ .achievement-metadata dt { color:var(--card-muted); }
1859
+ .achievement-metadata dd { margin:0; overflow-wrap:anywhere; }
1860
+ .achievement-footer { border-top:2px solid var(--card-border); padding:16px 24px; display:flex; gap:16px; align-items:center; justify-content:space-between; flex-wrap:wrap; background:var(--feedback-face,#fff); border-radius:0 0 8px 8px; }
1861
+ .achievement-reward { display:inline-flex; align-items:center; gap:8px; font-size: 12px; font-weight:600; }
1862
+ .achievement-reward svg { width:28px; height:28px; flex:none; }
1863
+ .achievement-reward>span { display:grid; gap:4px; }
1864
+ .achievement-reward small { font-size:10px; font-weight:500; color:var(--card-muted); }
1865
+ .achievement-reward strong { font-size:13px; font-weight:650; line-height:1.5; }
1866
+ .achievement-footer>.experience-actions:empty { display:none; }
1867
+ .achievement-progress-label>span:last-child { flex-shrink:0; font-weight:750; }
1868
+ .achievement-progress-label>span:first-child { color:var(--card-muted); }
1869
+ .duoop-achievement:is([data-state=unlocked],[data-state=claimable],[data-state=claimed]) .achievement-footer { background:var(--feedback-success-soft,#edf5ef); }
1870
+ .duoop-achievement[data-state=claimable] .achievement-reward { color:var(--feedback-success,#356247); }
1871
+ .duoop-achievement[data-visual=illustration] .achievement-heading { flex-direction:column; text-align:center; }
1872
+ .duoop-achievement[data-visual=illustration] .achievement-copy { align-items:center; }
1873
+ .duoop-achievement[data-visual=illustration] .achievement-emblem { --emblem-width:200px; max-width:100%; }
1874
+ .achievement-summary-icon { flex-shrink:0; }
1875
+ .achievement-collection>li>.duoop-achievement { height:100%; }
1876
+ .achievement-collection .achievement-footer { margin-top:auto; }
1877
+ .achievement-claim-error { margin:0; padding:16px 24px; color:var(--feedback-error,#a51d2d); font-size: 12px; line-height:1.7; }
1878
+ .duoop-achievement[data-presentation=badge] { border:0; background:transparent; align-items:center; box-shadow:none; }
1879
+ .duoop-achievement[data-presentation=badge] .achievement-heading { flex-direction:column; text-align:center; padding:12px; gap:20px; }
1880
+ .duoop-achievement[data-presentation=badge] .achievement-copy { align-items:center; }
1881
+ .duoop-achievement[data-presentation=badge] .achievement-emblem { --emblem-width:116px; }
1882
+ .duoop-achievement[data-presentation=row] .achievement-heading { padding:20px; gap:20px; }
1883
+ .duoop-achievement[data-presentation=row] .achievement-emblem { --emblem-width:48px; }
1884
+ .duoop-achievement[data-presentation=row] .achievement-copy h4 { font-size: 14px; }
1885
+ .duoop-achievement[data-presentation=row] .achievement-copy { gap:8px; }
1886
+ .duoop-achievement[data-presentation=row] .achievement-progress { padding:0 20px 20px; }
1887
+ .duoop-achievement[data-size=sm] .achievement-heading { padding:20px; gap:16px; }
1888
+ .duoop-achievement[data-size=sm] .achievement-emblem { --emblem-width:48px; }
1889
+ .duoop-achievement[data-size=lg] .achievement-emblem { --emblem-width:100px; }
1890
+ .duoop-achievement[data-size=lg] .achievement-heading { padding:32px; }
1891
+ .achievement-collection { padding:0; margin:0; list-style:none; display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:24px; }
1892
+ .achievement-collection[data-layout=list] { grid-template-columns:1fr; gap:16px; }
1893
+ .achievement-collection>li { min-width:0; display:flex; }
1894
+ .achievement-summary { display:flex; gap:16px; align-items:center; }
1895
+ .achievement-summary-icon { display:grid; place-items:center; width:48px; height:48px; border:2px solid var(--feedback-edge,#1d1b1b); box-shadow:0 3px 0 var(--feedback-edge,#1d1b1b); background:var(--feedback-face,#fff); border-radius:10px; }
1896
+ .achievement-summary-icon svg { width:25px; height:25px; }
1897
+ .achievement-summary>div { flex:1; min-width:0; display:grid; gap:12px; }
1898
+ .achievement-summary strong { font-size: 14px; }
1899
+ .achievement-tiers { margin:0; padding:0; list-style:none; display:grid; gap:20px; }
1900
+ .achievement-error { display:grid; gap:16px; padding:24px; justify-items:start; }
1901
+ .achievement-error>svg { width:28px; height:28px; }
1902
+ .achievement-error>p { color:var(--feedback-error,#a51d2d); font-size: 13px; line-height:1.7; margin:0; }
1903
+ .achievement-unlock { position:relative; background:var(--feedback-face,#fff); border:2px solid var(--feedback-edge,#1d1b1b); border-radius:10px; box-shadow:0 4px 0 var(--feedback-edge,#1d1b1b); padding:32px; display:grid; justify-items:center; gap:24px; }
1904
+ .achievement-unlock-body { position:relative; display:flex; flex-direction:column; align-items:center; gap:16px; text-align:center; color:var(--feedback-ink,#373434); }
1905
+ .achievement-unlock-body h4 { margin:0; font-size:28px; letter-spacing:-.6px; line-height:1.35; }
1906
+ .achievement-unlock-body>.achievement-emblem { --emblem-width:120px; }
1907
+ .achievement-unlock-body>p { margin:0; font-size: 13px; color:var(--feedback-muted,#686565); }
1908
+ .achievement-unlock-body:is([data-celebration=brief],[data-celebration=confetti]) .achievement-emblem { animation:achievement-earned 1050ms cubic-bezier(.16,1,.3,1) both; transform-origin:50% 65%; }
1909
+ .achievement-unlock-body:is([data-celebration=brief],[data-celebration=confetti])>.experience-kicker { animation:achievement-copy-in 500ms cubic-bezier(.16,1,.3,1) 180ms both; }
1910
+ .achievement-unlock-body:is([data-celebration=brief],[data-celebration=confetti])>h4 { animation:achievement-copy-in 600ms cubic-bezier(.16,1,.3,1) 260ms both; }
1911
+ .achievement-unlock-body:is([data-celebration=brief],[data-celebration=confetti])>p { animation:achievement-copy-in 600ms cubic-bezier(.16,1,.3,1) 360ms both; }
1912
+ .achievement-unlock-body:is([data-celebration=brief],[data-celebration=confetti])::before { content:''; position:absolute; width:110px; height:110px; top:0; border:2px solid currentColor; border-radius:50%; opacity:0; pointer-events:none; animation:achievement-halo 950ms cubic-bezier(.16,1,.3,1) 140ms both; }
1913
+ .achievement-unlock-body:is([data-celebration=brief],[data-celebration=confetti]) .achievement-medal-inset { stroke-dasharray:190; animation:achievement-engrave 800ms ease-out 180ms both; }
1914
+ .achievement-unlock-body[data-celebration=accent] .achievement-emblem { animation:achievement-accent 280ms ease-out; }
1915
+ .achievement-unlock[data-mode=banner] .achievement-unlock-body { display:grid; grid-template-columns:auto minmax(0,1fr); text-align:start; gap:8px 20px; width:100%; }
1916
+ .achievement-unlock[data-mode=banner] .achievement-emblem { grid-column:1; grid-row:1 / 4; --emblem-width:56px; }
1917
+ .achievement-unlock[data-mode=banner] .achievement-unlock-body>p,.achievement-unlock[data-mode=banner] .achievement-unlock-body>h4 { grid-column:2; }
1918
+ .achievement-unlock[data-mode=banner] h4 { font-size: 18px; }
1919
+ .achievement-unlock[data-mode=banner] .achievement-unlock-body::before { width:64px; height:64px; inset-inline-start:-4px; }
1920
+ .achievement-toast { position:fixed; z-index:1200; inset:auto 24px 24px auto; width:min(390px,calc(100vw - 48px)); }
1921
+ .achievement-confetti { pointer-events:none; position:absolute; top:65px; left:50%; }
1922
+ .achievement-confetti i { position:absolute; width:6px; height:10px; border:1px solid var(--feedback-edge,#1d1b1b); border-radius:1px; background:var(--feedback-soft,#f0eeee); animation:achievement-confetti 1100ms cubic-bezier(.12,.7,.2,1) calc(180ms + var(--confetti-delay)) both; opacity:0; }
1923
+ .achievement-confetti i:nth-child(3n) { background:var(--feedback-ink,#373434); }
1924
+ .achievement-demo-checklist { display:grid; gap:16px; }
1925
+ .achievement-streak { display:grid; grid-template-columns:repeat(7,minmax(0,1fr)); gap:8px; }
1926
+ .achievement-streak>span { display:grid; place-items:center; min-height:35px; border:2px solid var(--feedback-edge); border-radius:6px; font-size: 11px; color:var(--feedback-muted); }
1927
+ .achievement-streak>span[data-done=true] { background:var(--feedback-success-soft); color:var(--feedback-success); box-shadow:0 3px 0 var(--feedback-edge); }
1928
+ @keyframes achievement-earned { 0% { opacity:0; transform:perspective(500px) translateY(28px) rotateY(-75deg) rotate(-14deg) scale(.55); } 48% { opacity:1; transform:perspective(500px) translateY(-8px) rotateY(12deg) rotate(5deg) scale(1.13); } 72% { transform:perspective(500px) translateY(2px) rotateY(-4deg) rotate(-2deg) scale(.98); } to { opacity:1; transform:none; } }
1929
+ @keyframes achievement-confetti { 0% { opacity:0; transform:translate(0,0) scale(.3); } 15% { opacity:1; } 55% { opacity:1; transform:translate(var(--confetti-x),var(--confetti-y)) rotate(var(--confetti-turn)) scale(1); } to { opacity:0; transform:translate(calc(var(--confetti-x) * 1.2),calc(var(--confetti-y) + 60px)) rotate(calc(var(--confetti-turn) * 1.6)) scale(.65); } }
1930
+ @keyframes achievement-copy-in { from { opacity:0; transform:translateY(12px); } to { opacity:1; transform:none; } }
1931
+ @keyframes achievement-halo { from { opacity:.5; transform:scale(.55); } to { opacity:0; transform:scale(1.65); } }
1932
+ @keyframes achievement-engrave { from { stroke-dashoffset:190; } to { stroke-dashoffset:0; } }
1933
+ @keyframes achievement-accent { from { opacity:.45; } to { opacity:1; } }
1934
+ @media(max-width:600px) { .achievement-collection { grid-template-columns:1fr; } .achievement-heading { padding:24px 20px; gap:20px; flex-direction:column; align-items:flex-start; } .achievement-progress,.achievement-metadata { padding-inline:20px; } .duoop-achievement[data-presentation=row] .achievement-heading { flex-direction:row; } .achievement-toast { inset-inline:16px; bottom:16px; width:auto; } }
1935
+ @media(prefers-reduced-motion:reduce) { .achievement-unlock-body .achievement-emblem,.achievement-confetti i { animation:none !important; } .achievement-confetti { display:none; } }
1936
+ @media(prefers-reduced-motion:reduce) { .achievement-unlock-body:is([data-celebration=brief],[data-celebration=confetti])>:is(.experience-kicker,h4,p),.achievement-unlock-body:is([data-celebration=brief],[data-celebration=confetti]) .achievement-medal-inset { animation:none; }.achievement-unlock-body::before { display:none; } }
1937
+
1938
+ .achievement-trophy-shade { fill:var(--feedback-soft,#f0eeee); }
1939
+
1940
+ /* Adapt to the card's actual width, including narrow gallery columns. */
1941
+ .duoop-achievement { container-type:inline-size; }
1942
+ @container (max-width:340px) {
1943
+ .achievement-heading { gap:16px; padding:24px 20px; }
1944
+ .achievement-emblem { --emblem-width:76px; }
1945
+ .achievement-copy h4 { font-size:19px; }
1946
+ .achievement-footer { padding:16px 20px; }
1947
+ .achievement-metadata>div { grid-template-columns:1fr; gap:4px; }
1948
+ }
1949
+ .kinetic-type { display:block; margin:0; font: inherit; }
1950
+ .kinetic-type__accessible { position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip-path:inset(50%); white-space:pre; }
1951
+ .kinetic-type__visual { display:block; perspective:800px; }
1952
+ .kinetic-type__line { display:block; white-space:nowrap; }
1953
+ .kinetic-type__letter { display:inline-block; transform-origin:50% 65%; }
1954
+
1955
+ .kinetic-type-showcase { grid-template-columns:minmax(0,1fr); }
1956
+ .kinetic-playground { margin-top:32px; border:1px solid var(--border); border-radius:12px; background:#fafbfc; overflow:hidden; }
1957
+ .kinetic-stage { background:var(--feedback-face,#fff); color:var(--feedback-ink,#373434); border:2px solid var(--feedback-edge,#1d1b1b); border-radius:10px; box-shadow:0 4px 0 var(--feedback-edge,#1d1b1b); position:relative; overflow:hidden; container-type:inline-size; }
1958
+ .kinetic-playground>.kinetic-stage { margin:28px 28px 32px; }
1959
+ .kinetic-stage__meta,.kinetic-stage__footer { display:flex; align-items:center; justify-content:space-between; gap:16px; position:relative; z-index:1; padding:24px 28px; font-size: 10px; letter-spacing:.12em; text-transform:uppercase; color:var(--feedback-muted); }
1960
+ .kinetic-stage__body { min-height:300px; padding:40px 6%; display:flex; align-items:center; justify-content:center; }
1961
+ .kinetic-stage .kinetic-type { position:relative; z-index:1; width:100%; text-align:center; font-family:inherit; font-weight:650; font-size: var(--kinetic-size, 19cqi); line-height:1.08; letter-spacing:-.05em; }
1962
+ .kinetic-stage__footer { border-top:1px solid var(--feedback-track); text-transform:none; letter-spacing:0; font-size: 12px; }
1963
+ .kinetic-stage__footer p { margin:0; line-height:1.7; }
1964
+ .kinetic-stage__actions { display:flex; gap:12px; }
1965
+ .kinetic-controls { padding:28px; display:grid; grid-template-columns:1.3fr 1.2fr 1fr; gap:24px; border-top:1px solid var(--border); background:#fff; }
1966
+ .kinetic-controls label,.kinetic-controls fieldset { display:flex; flex-direction:column; gap:10px; font-size: 12px; font-weight:600; min-width:0; }
1967
+ .kinetic-controls fieldset { margin:0; padding:0; border:0; }
1968
+ .kinetic-controls legend { margin-bottom:10px; padding:0; }
1969
+ .kinetic-controls .duoop-textarea { min-height:100px; font-weight:400; }
1970
+ .kinetic-controls .duoop-select { min-width:0; }
1971
+ .kinetic-controls .duoop-select-field>label { font-size: 12px; }
1972
+ .kinetic-controls__stack { display:grid; gap:24px; align-content:start; }
1973
+ .kinetic-presets { display:flex; gap:12px; flex-wrap:wrap; padding-bottom:4px; }
1974
+ .kinetic-presets .duoop-button { flex:1; }
1975
+ .kinetic-presets .duoop-button-reserve { display:none; }
1976
+ .kinetic-controls input[type=range] { width:100%; margin:0; appearance:none; height:44px; background:transparent; padding:0; cursor:pointer; }
1977
+ .kinetic-controls input[type=range]::-webkit-slider-runnable-track { height:8px; border:2px solid #1d1b1b; border-radius:4px; background:#e8e4e4; }
1978
+ .kinetic-controls input[type=range]::-webkit-slider-thumb { appearance:none; width:20px; height:24px; margin-top:-10px; border:2px solid #1d1b1b; border-radius:5px; background:#fff; box-shadow:0 3px 0 #1d1b1b; }
1979
+ .kinetic-controls input[type=range]::-moz-range-track { height:5px; border:2px solid #1d1b1b; border-radius:4px; background:#e8e4e4; }
1980
+ .kinetic-controls input[type=range]::-moz-range-thumb { width:16px; height:20px; border:2px solid #1d1b1b; border-radius:5px; background:#fff; box-shadow:0 3px 0 #1d1b1b; }
1981
+ .kinetic-note { margin:0; padding:14px 24px; border-top:1px solid var(--border); color:var(--muted); font-size: 11px; line-height:1.6; }
1982
+ .kinetic-demo { width:100%; }
1983
+ .kinetic-demo .kinetic-stage__body { min-height:220px; padding:32px 7%; }
1984
+ .kinetic-demo .kinetic-stage__footer { padding:20px; flex-wrap:wrap; }
1985
+ .kinetic-type-showcase .gallery-card-preview { padding:28px 20px; }
1986
+ .library-card-preview--builtin-kinetic-type { background:#fafbfc; color:#373434; }
1987
+ .kinetic-mini { width:250px; max-width:100%; display:block; padding:16px; border:2px solid #1d1b1b; border-radius:10px; box-shadow:0 4px 0 #1d1b1b; background:#fff; container-type:inline-size; text-align:center; }
1988
+ .kinetic-mini .kinetic-type { font-family:inherit; font-weight:650; font-size: 22cqi; line-height:1.05; letter-spacing:-.05em; }
1989
+ @media(max-width:800px) { .kinetic-controls { grid-template-columns:1fr 1fr; }.kinetic-controls>label { grid-column:1/-1; }.kinetic-stage__body { min-height:280px; } }
1990
+ @media(max-width:480px) { .kinetic-playground>.kinetic-stage { margin:16px 16px 20px; }.kinetic-controls { grid-template-columns:1fr; gap:24px; padding:20px; }.kinetic-controls .duoop-textarea { font-size: 16px; }.kinetic-stage__meta { padding:20px 16px; flex-wrap:wrap; gap:8px; }.kinetic-stage__body { min-height:220px; }.kinetic-stage__footer { padding:20px 16px; flex-wrap:wrap; }.kinetic-stage__actions { width:100%; flex-wrap:wrap; }.kinetic-stage__actions button { flex:1 0 auto; } }
1991
+ @media(prefers-reduced-motion:reduce) { .kinetic-type__letter { transform:none!important; opacity:1!important; } }
1992
+ .shuffle-deck { width:100%; min-width:0; color:var(--feedback-ink,#373434); }
1993
+ .shuffle-deck__viewport { position:relative; height:350px; width:100%; max-width:430px; margin:0 auto; touch-action:pan-y; cursor:grab; user-select:none; outline-offset:-6px; }
1994
+ .shuffle-deck__viewport:active { cursor:grabbing; }
1995
+ .shuffle-deck__card { position:absolute; inset:38px 40px 22px; padding:28px; display:flex; flex-direction:column; gap:20px; border:2px solid var(--feedback-edge,#1d1b1b); border-radius:10px; background:var(--feedback-face,#fff); box-shadow:0 5px 0 var(--feedback-edge,#1d1b1b); transform-origin:50% 85%; overflow:hidden; }
1996
+ .shuffle-deck__card[aria-hidden=true] { pointer-events:none; }
1997
+ .shuffle-deck__eyebrow { font-size: 10px; letter-spacing:.12em; text-transform:uppercase; color:var(--feedback-muted,#686565); }
1998
+ .shuffle-deck__card h3,.shuffle-deck__card h4 { font-size: 32px; font-weight:600; line-height:1.15; letter-spacing:-1px; margin:0; overflow-wrap:anywhere; }
1999
+ .shuffle-deck__card p { font-size: 13px; line-height:1.7; margin:0; color:var(--feedback-muted,#686565); }
2000
+ .shuffle-deck__card-footer { margin-top:auto; border-top:1px solid var(--feedback-track,#e8e4e4); padding-top:16px; display:flex; justify-content:space-between; align-items:center; font-size: 11px; }
2001
+ .shuffle-deck__navigation { display:flex; align-items:center; justify-content:center; gap:28px; padding:4px 0 12px; }
2002
+ .shuffle-deck__navigation>span { min-width:50px; text-align:center; font-size: 13px; font-weight:600; font-variant-numeric:tabular-nums; }
2003
+ .shuffle-deck__navigation>span>span { color:var(--feedback-muted,#686565); font-weight:400; }
2004
+ .shuffle-deck__navigation .duoop-button { width:44px; padding:8px; }
2005
+ .shuffle-deck__navigation .duoop-button-reserve { display:none; }
2006
+ .shuffle-deck__empty { padding:40px; text-align:center; }
2007
+ .shuffle-playground { margin-top:32px; border:1px solid var(--border); border-radius:12px; overflow:hidden; }
2008
+ .shuffle-playground__preview { display:grid; grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr); align-items:center; padding:40px; gap:32px; background:var(--feedback-soft,#f0eeee); }
2009
+ .shuffle-playground__copy { display:grid; gap:20px; }
2010
+ .shuffle-playground__copy h3 { font-size: 36px; line-height:1.15; font-weight:600; letter-spacing:-1.2px; margin:0; }
2011
+ .shuffle-playground__copy p { font-size: 13px; line-height:1.8; color:var(--feedback-muted); max-width:32ch; margin:0; }
2012
+ .shuffle-playground__copy small { font-size: 11px; color:var(--feedback-muted); }
2013
+ .shuffle-controls { display:flex; gap:32px; flex-wrap:wrap; padding:28px; border-top:1px solid var(--border); background:#fff; }
2014
+ .shuffle-controls fieldset { border:0; padding:0; margin:0; min-width:0; }
2015
+ .shuffle-controls legend { font-size: 12px; font-weight:600; margin-bottom:12px; }
2016
+ .shuffle-controls fieldset>div { display:flex; flex-wrap:wrap; gap:12px; }
2017
+ .shuffle-controls .duoop-button-reserve { display:none; }
2018
+ .shuffle-controls .duoop-select { min-width:180px; }
2019
+ .shuffle-reference { margin:0; padding:16px 28px; border-top:1px solid var(--border); font-size: 12px; line-height:1.7; color:var(--muted); }
2020
+ .shuffle-reference a { text-decoration:underline; text-underline-offset:3px; }
2021
+ .shuffle-deck-showcase .gallery-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
2022
+ .shuffle-deck-showcase .gallery-card-preview { padding:24px 12px; overflow:hidden; }
2023
+ .shuffle-demo { width:100%; border-radius:10px; padding:12px 0; background:var(--feedback-soft); }
2024
+ .shuffle-deck-showcase .shuffle-demo .shuffle-deck__card { padding:24px; }
2025
+ .shuffle-demo .shuffle-deck__card h4 { font-size: 26px; }
2026
+ .shuffle-mini { position:relative; display:block; width:190px; height:135px; }
2027
+ .shuffle-mini>span { position:absolute; inset:14px 10px 0; border:2px solid #1d1b1b; border-radius:10px; box-shadow:0 4px 0 #1d1b1b; background:#fff; padding:20px; display:flex; flex-direction:column; gap:10px; transition:transform 450ms cubic-bezier(.2,.8,.2,1); }
2028
+ .shuffle-mini>span:first-child { transform:translateY(-10px) rotate(-8deg); }
2029
+ .shuffle-mini>span:nth-child(2) { transform:translateY(-5px) rotate(5deg); }
2030
+ .shuffle-mini small { font-size: 9px; color:#686565; letter-spacing:.1em; }
2031
+ .shuffle-mini strong { font-size: 22px; font-weight:600; letter-spacing:-.6px; }
2032
+ .library-card:hover .shuffle-mini>span:first-child,.library-card:focus-visible .shuffle-mini>span:first-child { transform:translate(-17px,-12px) rotate(-13deg); }
2033
+ .library-card:hover .shuffle-mini>span:nth-child(2),.library-card:focus-visible .shuffle-mini>span:nth-child(2) { transform:translate(17px,-8px) rotate(11deg); }
2034
+ @media(max-width:1000px) { .shuffle-playground__preview { grid-template-columns:1fr; gap:20px; padding:28px; }.shuffle-playground__copy { gap:12px; }.shuffle-playground__copy h3 { font-size: 29px; }.shuffle-playground__copy p { max-width:55ch; } }
2035
+ @media(max-width:700px) { .shuffle-deck-showcase .gallery-grid { grid-template-columns:1fr; } }
2036
+ @media(max-width:480px) { .shuffle-playground__preview { padding:24px 12px; }.shuffle-playground__copy { padding:0 12px; }.shuffle-deck__card { inset:36px 26px 22px; padding:22px; gap:16px; }.shuffle-deck__card h3,.shuffle-deck__card h4 { font-size: 26px; }.shuffle-controls { padding:24px; gap:24px; }.shuffle-reference { padding:16px 24px; } }
2037
+ @media(prefers-reduced-motion:reduce) { .shuffle-mini>span { transition:none; }.library-card:hover .shuffle-mini>span:first-child,.library-card:focus-visible .shuffle-mini>span:first-child { transform:translateY(-10px) rotate(-8deg); }.library-card:hover .shuffle-mini>span:nth-child(2),.library-card:focus-visible .shuffle-mini>span:nth-child(2) { transform:translateY(-5px) rotate(5deg); } }
2038
+ .text-loop { width:100%; min-width:0; overflow:hidden; }
2039
+ .text-loop-svg { display:block; width:100%; height:auto; overflow:hidden; }
2040
+ .text-loop-measure { visibility:hidden; white-space:pre; }
2041
+ .text-loop-text { font-family:inherit; white-space:pre; }
2042
+ .text-loop-showcase { grid-template-columns:minmax(0,1fr); }
2043
+ .text-loop-playground { margin-top:32px; background:#fafbfc; border:1px solid var(--border); border-radius:12px; overflow:hidden; }
2044
+ .text-loop-stage { width:100%; min-width:0; background:var(--feedback-soft); border:2px solid var(--feedback-edge); border-radius:10px; box-shadow:0 4px 0 var(--feedback-edge); overflow:hidden; }
2045
+ .text-loop-playground>.text-loop-stage { width:auto; margin:28px 28px 32px; }
2046
+ .text-loop-meta,.text-loop-footer { display:flex; align-items:center; justify-content:space-between; gap:16px; padding:20px 24px; color:var(--feedback-muted); }
2047
+ .text-loop-meta { font-size: 10px; letter-spacing:.12em; }
2048
+ .text-loop-footer { background:var(--feedback-face); border-top:1px solid var(--feedback-track); font-size: 12px; flex-wrap:wrap; }
2049
+ .text-loop-footer p { margin:0; line-height:1.7; }
2050
+ .text-loop-controls { grid-template-columns:repeat(3,minmax(0,1fr)); border-top:1px solid var(--border); background:#fff; align-items:start; }
2051
+ .text-loop-actions { display:flex; align-items:center; flex-wrap:wrap; gap:12px; padding-top:20px; }
2052
+ .text-loop-note { margin:0; padding:16px 28px; font-size: 12px; line-height:1.7; color:var(--muted); border-top:1px solid var(--border); }
2053
+ .text-loop-showcase .gallery-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
2054
+ .text-loop-showcase .gallery-card-preview { padding:24px 20px; }
2055
+ .text-loop-mini { display:block; width:100%; }
2056
+ @media(max-width:800px) { .text-loop-controls { grid-template-columns:repeat(2,minmax(0,1fr)); }.text-loop-words { grid-column:1/-1; } }
2057
+ @media(max-width:600px) { .text-loop-showcase .gallery-grid { grid-template-columns:minmax(0,1fr); }.text-loop-playground>.text-loop-stage { margin:16px 16px 20px; }.text-loop-meta,.text-loop-footer { padding:16px; }.text-loop-meta { flex-wrap:wrap; }.text-loop-controls { grid-template-columns:minmax(0,1fr); }.text-loop-controls .duoop-input { font-size: 16px; }.text-loop-actions { padding-top:0; }.text-loop-stage .text-loop-svg { width:180%; max-width:none; margin-inline-start:-40%; }.text-loop-note { padding:16px 20px; } }
2058
+ .depth-carousel { width:100%; min-width:0; color:var(--feedback-ink,#373434); --depth-paper:var(--feedback-face,#fff); --depth-fill:var(--feedback-soft,#f0eeee); }
2059
+ .depth-carousel__viewport { position:relative; height:370px; perspective:1200px; overflow:hidden; touch-action:pan-y; user-select:none; cursor:grab; border-radius:10px; }
2060
+ .depth-carousel__viewport:active { cursor:grabbing; }
2061
+ .depth-carousel__viewport:focus-visible { outline:2px solid var(--feedback-ink,#373434); outline-offset:-8px; }
2062
+ .depth-carousel__card { position:absolute; top:50%; left:50%; width:min(270px,65%); height:310px; display:flex; flex-direction:column; background:var(--depth-paper); border:2px solid var(--feedback-edge,#1d1b1b); border-radius:10px; box-shadow:0 5px 0 var(--feedback-edge,#1d1b1b); overflow:hidden; transform:translate(-50%,-50%); pointer-events:none; }
2063
+ .depth-carousel__card::after { content:''; position:absolute; inset:0; background:var(--feedback-ink,#373434); opacity:var(--depth-shade,0); pointer-events:none; }
2064
+ .depth-carousel__card>img { width:100%; height:100%; object-fit:cover; }
2065
+ .depth-carousel__card>h4 { margin:16px; }
2066
+ .depth-carousel__navigation { display:flex; justify-content:center; align-items:center; gap:24px; padding:4px 0; }
2067
+ .depth-carousel__navigation .duoop-button { width:44px; height:44px; }
2068
+ .depth-carousel__counter { font-size: 13px; font-weight:600; font-variant-numeric:tabular-nums; }
2069
+ .depth-carousel__counter>span { color:var(--feedback-muted,#686565); font-weight:400; }
2070
+ .depth-carousel__indicators { display:flex; justify-content:center; }
2071
+ .depth-carousel__indicators button { width:36px; height:44px; padding:12px 8px; border:0; background:transparent; color:inherit; cursor:pointer; }
2072
+ .depth-carousel__indicators button>span { display:block; height:6px; border:1.5px solid currentColor; border-radius:2px; transition:transform 180ms ease-out,background-color 180ms ease-out; }
2073
+ .depth-carousel__indicators button[aria-pressed=true]>span { background:currentColor; transform:translateY(-2px); box-shadow:0 2px 0 var(--feedback-edge,#1d1b1b); }
2074
+ .depth-carousel__indicators button:hover>span { transform:translateY(-3px); }
2075
+ .depth-carousel__indicators button:focus-visible { outline:2px solid currentColor; outline-offset:-7px; border-radius:8px; }
2076
+ .depth-carousel__empty { text-align:center; padding:120px 24px; font-size: 13px; }
2077
+ .depth-playground .depth-carousel { max-width:780px; }
2078
+ .depth-playground .depth-carousel__viewport { height:520px; }
2079
+ .depth-playground .depth-carousel__card { width:min(380px,65%); height:460px; }
2080
+ .depth-mini img { display:block; width:100%; height:100%; object-fit:cover; }
2081
+ .depth-playground { margin-top:32px; border:1px solid var(--border); border-radius:12px; overflow:hidden; }
2082
+ .depth-playground__preview { display:flex; justify-content:center; padding:24px; background:var(--feedback-soft,#f0eeee); color:var(--feedback-ink,#373434); }
2083
+ .depth-controls { display:flex; justify-content:center; flex-wrap:wrap; gap:28px; padding:28px; border-top:1px solid var(--border); }
2084
+ .depth-controls fieldset { padding:0; border:0; margin:0; min-width:0; }
2085
+ .depth-controls legend { font-size: 12px; font-weight:600; margin-bottom:12px; }
2086
+ .depth-controls fieldset>div { display:flex; flex-wrap:wrap; gap:12px; }
2087
+ .depth-controls .duoop-button-reserve { display:none; }
2088
+ .depth-carousel-showcase .gallery-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
2089
+ .depth-carousel-showcase .gallery-card-preview { padding:16px; }
2090
+ .depth-demo { width:100%; min-width:0; padding:8px 0; border-radius:10px; background:var(--feedback-soft,#f0eeee); }
2091
+ .depth-mini { display:block; position:relative; width:220px; height:155px; perspective:700px; --depth-paper:#fff; --depth-fill:#f0eeee; }
2092
+ .depth-mini>span { position:absolute; left:20px; top:0; width:140px; height:150px; border:2px solid #1d1b1b; border-radius:10px; box-shadow:0 4px 0 #1d1b1b; background:#fff; overflow:hidden; transition:transform 350ms cubic-bezier(.2,.8,.2,1); }
2093
+ .depth-mini>span:first-child { transform:translate(68px,0) scale(.72) rotateY(-15deg); background:#dedada; }
2094
+ .depth-mini>span:nth-child(2) { transform:translate(37px,0) scale(.85) rotateY(-15deg); background:#f0eeee; }
2095
+ .library-card:hover .depth-mini>span:last-child { transform:translateX(-8px); }
2096
+
2097
+ @media(max-width:700px) { .depth-carousel-showcase .gallery-grid { grid-template-columns:1fr; } }
2098
+ @media(max-width:480px) { .depth-playground__preview { padding:16px 4px 8px; }.depth-controls { padding:20px; gap:20px; }.depth-carousel__card { width:72%; }.depth-carousel__viewport { height:355px; }.depth-playground .depth-carousel__viewport { height:420px; }.depth-playground .depth-carousel__card { width:72%; height:360px; } }
2099
+ @media(prefers-reduced-motion:reduce) { .depth-mini>span,.depth-carousel__indicators button>span { transition:none; }.library-card:hover .depth-mini>span:last-child { transform:none; } }
2100
+
2101
+
2102
+ .card-spread { width:100%; min-width:0; color:var(--feedback-ink,#373434); }
2103
+ .card-spread__fan { position:relative; width:88%; margin:0 auto; aspect-ratio:1.7; isolation:isolate; }
2104
+ .card-spread__card { position:absolute; left:calc(50% + var(--x)); top:calc(15% + var(--y)); width:23%; height:59%; padding:0; border:2px solid #1d1b1b; border-radius:10px; background:#1d1b1b; color:var(--feedback-ink,#373434); box-shadow:0 4px 0 #1d1b1b; overflow:hidden; cursor:pointer; transform:translate(calc(-50% + var(--shift)),var(--lift)) rotate(var(--angle)); transform-origin:50% 70%; transition:transform 480ms cubic-bezier(.25,.8,.25,1),box-shadow 180ms ease-out; -webkit-tap-highlight-color:transparent; }
2105
+ .card-spread__card img { position:absolute; inset:-1px; width:calc(100% + 2px); height:calc(100% + 2px); object-fit:cover; display:block; pointer-events:none; }
2106
+ .card-spread__card:focus-visible { outline:none; }
2107
+ .card-spread__card:focus-visible::after { content:''; position:absolute; inset:5px; border:2px solid #1d1b1b; border-radius:5px; pointer-events:none; }
2108
+ .card-spread__card:active { box-shadow:0 1px 0 #1d1b1b; }
2109
+ .card-spread__empty { padding:48px 24px; text-align:center; }
2110
+ .spread-playground { margin-top:32px; border:1px solid var(--border); border-radius:12px; overflow:hidden; }
2111
+ .spread-stage { background:var(--feedback-soft,#f0eeee); padding:32px 40px 16px; color:var(--feedback-ink,#373434); }
2112
+ .spread-stage__heading { display:flex; justify-content:space-between; align-items:baseline; gap:20px; }
2113
+ .spread-stage__heading h3 { margin:0; font-size: 20px; font-weight:600; letter-spacing:-.5px; }
2114
+ .spread-stage__heading span { font-size: 10px; letter-spacing:.1em; color:var(--feedback-muted,#686565); }
2115
+ .spread-stage>p { margin:0; text-align:center; font-size: 12px; line-height:1.7; color:var(--feedback-muted,#686565); }
2116
+ .spread-controls { display:flex; gap:12px; padding:20px 28px; border-top:1px solid var(--border); }
2117
+ .spread-demo { width:100%; padding:20px; background:var(--feedback-soft,#f0eeee); border-radius:10px; }
2118
+ .card-spread-showcase .gallery-grid { grid-template-columns:1fr; }
2119
+ .card-spread-showcase .gallery-card-preview { padding:24px; }
2120
+ .spread-mini { display:block; position:relative; width:240px; height:150px; }
2121
+ .spread-mini>span { position:absolute; left:calc(50% + var(--offset) * 23px); top:calc(16px + var(--drop) * 5px); width:58px; height:90px; border:2px solid #1d1b1b; border-radius:6px; box-shadow:0 3px 0 #1d1b1b; overflow:hidden; transform:translateX(-50%) rotate(calc(var(--offset) * 15deg)); background:#fff; }
2122
+ .spread-mini img { width:100%; height:100%; object-fit:cover; }
2123
+ @media(max-width:600px) { .spread-stage { padding:24px 8px 20px; }.spread-stage__heading { padding:0 12px; }.spread-stage__heading span { display:none; }.card-spread__fan { aspect-ratio:1.4; }.card-spread__card { height:49%; top:calc(22% + var(--y)); }.spread-stage>p { padding:0 16px; }.spread-demo { padding:8px; }.card-spread-showcase .gallery-card-preview { padding:12px; } }
2124
+ @media(prefers-reduced-motion:reduce) { .card-spread__card { transition:none; } }
2125
+ .map-experience { width:100%; min-width:0; color:#373434; text-align:start; container-type:inline-size; }
2126
+ .map-atlas { border:2px solid #373434; border-radius:12px; box-shadow:4px 5px 0 #1d1b1b; overflow:hidden; background:#fff; }
2127
+ .map-atlas-heading { display:flex; justify-content:space-between; align-items:center; gap:24px; padding:28px 32px; border-bottom:2px solid #373434; }
2128
+ .map-eyebrow { font-size: 10px; font-weight:600; letter-spacing:.13em; color:#686565; }
2129
+ .map-atlas-heading h3 { font-size: 38px; font-weight:550; letter-spacing:-1.6px; margin:9px 0 0; line-height:1.1; }
2130
+ .map-atlas-heading h3 span { color:#777474; }
2131
+ .map-coordinates { font-size: 11px; line-height:1.9; letter-spacing:.06em; text-align:end; color:#686565; font-variant-numeric:tabular-nums; }
2132
+ .duoop-map { position:relative; height:510px; isolation:isolate; background:#eeece8; }
2133
+ .duoop-map-canvas { width:100%; height:100%; background:#eeece8; font-family:var(--duoop-font, 'DM Sans', sans-serif); }
2134
+ .duoop-map .leaflet-tile-pane { filter:grayscale(1) contrast(.72) brightness(1.15); }
2135
+ .duoop-map-canvas:focus-visible { outline:3px solid #373434; outline-offset:-6px; }
2136
+ .duoop-map-controls { position:absolute; z-index:800; right:22px; top:22px; display:grid; gap:12px; }
2137
+ .duoop-map-controls .duoop-button { width:44px; height:44px; }
2138
+ .duoop-map-controls .duoop-button:last-child { margin-top:4px; }
2139
+ .duoop-map .leaflet-control-attribution { font-size: 10px; background:#ffffffeb; padding:3px 7px; }
2140
+ .duoop-map .leaflet-control-attribution a { color:#484646; }
2141
+ .duoop-map-message { position:absolute; z-index:900; left:20px; right:86px; top:20px; padding:16px; border:2px solid #373434; border-radius:8px; background:#fff; font-size: 12px; display:grid; gap:12px; }
2142
+ .map-atlas-footer { display:flex; justify-content:space-between; gap:16px; padding:19px 32px; border-top:2px solid #373434; font-size: 11px; color:#686565; line-height:1.6; }
2143
+ .map-atlas-footer span:first-child { color:#373434; font-weight:500; }
2144
+ .map-atlas-footer i { font-style:normal; color:#aaa5a5; padding:0 8px; }
2145
+ .map-showcase .gallery-card-preview { padding:30px; display:block; }
2146
+ .map-showcase .gallery-card--wide { grid-column:1/-1; }
2147
+ .mini-map { position:relative; display:block; width:250px; height:150px; background:#eae8e2; border:2px solid #373434; border-radius:10px; box-shadow:4px 5px 0 #1d1b1b; overflow:hidden; }
2148
+ .mini-map svg { position:absolute; inset:0; width:100%; height:100%; }
2149
+ .mini-map b { position:absolute; top:14px; left:14px; color:#373434; font-size: 20px; font-weight:600; letter-spacing:-.7px; }
2150
+ .mini-map small { position:absolute; bottom:0; left:0; right:0; background:white; padding:8px 14px; border-top:1px solid #373434; font-size: 9px; letter-spacing:.08em; }
2151
+ @container (max-width:580px) { .map-atlas-heading { padding:22px 20px; } .map-atlas-heading h3 { font-size: 30px; } .map-coordinates { font-size: 10px; } .duoop-map { height:430px; } .map-atlas-footer { padding:16px 20px; flex-direction:column; gap:4px; } .duoop-map-controls { top:16px; right:16px; } }
2152
+ @media(max-width:600px) { .map-showcase .gallery-card-preview { padding:18px 12px 22px; } }
2153
+ .duoop-tooltip {
2154
+ z-index: 120;
2155
+ max-width: min(280px, var(--radix-tooltip-content-available-width));
2156
+ padding: 10px 14px;
2157
+ border: 2px solid #1d1b1b;
2158
+ border-radius: 8px;
2159
+ background: #373434;
2160
+ color: #fff;
2161
+ box-shadow: 0 3px 0 #1d1b1b;
2162
+ font:
2163
+ 500 13px/1.5 'DM Sans',
2164
+ sans-serif;
2165
+ overflow-wrap: anywhere;
2166
+ transform-origin: var(--radix-tooltip-content-transform-origin);
2167
+ animation: duoop-tooltip-in 160ms ease-out;
2168
+ }
2169
+ .duoop-tooltip[data-state='closed'] {
2170
+ animation: duoop-tooltip-out 100ms ease-in;
2171
+ }
2172
+ .duoop-tooltip__arrow {
2173
+ fill: #373434;
2174
+ }
2175
+ .duoop-tooltip-disabled {
2176
+ display: inline-flex;
2177
+ border-radius: 10px;
2178
+ }
2179
+ .duoop-tooltip-disabled:focus-visible {
2180
+ outline: 2px dashed #373434;
2181
+ outline-offset: -3px;
2182
+ }
2183
+ @keyframes duoop-tooltip-in {
2184
+ from {
2185
+ opacity: 0;
2186
+ transform: translateY(3px) scale(0.96);
2187
+ }
2188
+ to {
2189
+ opacity: 1;
2190
+ transform: none;
2191
+ }
2192
+ }
2193
+ @keyframes duoop-tooltip-out {
2194
+ to {
2195
+ opacity: 0;
2196
+ }
2197
+ }
2198
+ @media (prefers-reduced-motion: reduce) {
2199
+ .duoop-tooltip,
2200
+ .duoop-tooltip[data-state='closed'] {
2201
+ animation: none;
2202
+ }
2203
+ }
2204
+ .duoop-popover {
2205
+ z-index: 110;
2206
+ box-sizing: border-box;
2207
+ width: 320px;
2208
+ max-width: min(calc(100vw - 24px), var(--radix-popover-content-available-width));
2209
+ max-height: var(--radix-popover-content-available-height);
2210
+ overflow: auto;
2211
+ padding: 24px;
2212
+ border: 2px solid #373434;
2213
+ border-radius: 12px;
2214
+ background: #fff;
2215
+ color: #373434;
2216
+ box-shadow: 0 5px 0 #1d1b1b;
2217
+ font:
2218
+ 400 14px/1.6 'DM Sans',
2219
+ sans-serif;
2220
+ transform-origin: var(--radix-popover-content-transform-origin);
2221
+ animation: duoop-popover-in 200ms cubic-bezier(0.2, 0.8, 0.2, 1);
2222
+ }
2223
+ .duoop-popover[data-state='closed'] {
2224
+ animation: duoop-popover-out 120ms ease-in;
2225
+ }
2226
+ .duoop-popover:focus-visible {
2227
+ outline: 2px dashed #373434;
2228
+ outline-offset: -6px;
2229
+ }
2230
+ .duoop-popover h3 {
2231
+ margin: 0 0 8px;
2232
+ font-size: 17px;
2233
+ }
2234
+ .duoop-popover p {
2235
+ margin: 0;
2236
+ }
2237
+ @keyframes duoop-popover-in {
2238
+ from {
2239
+ opacity: 0;
2240
+ transform: translateY(6px) scale(0.97);
2241
+ }
2242
+ to {
2243
+ opacity: 1;
2244
+ transform: none;
2245
+ }
2246
+ }
2247
+ @keyframes duoop-popover-out {
2248
+ to {
2249
+ opacity: 0;
2250
+ transform: scale(0.98);
2251
+ }
2252
+ }
2253
+ @media (prefers-reduced-motion: reduce) {
2254
+ .duoop-popover,
2255
+ .duoop-popover[data-state='closed'] {
2256
+ animation: none;
2257
+ }
2258
+ }
2259
+ .duoop-slider {
2260
+ width: 100%;
2261
+ min-width: 0;
2262
+ color: #373434;
2263
+ font:
2264
+ 500 14px/1.5 'DM Sans',
2265
+ sans-serif;
2266
+ }
2267
+ .duoop-slider__heading {
2268
+ display: flex;
2269
+ justify-content: space-between;
2270
+ gap: 20px;
2271
+ margin-bottom: 12px;
2272
+ }
2273
+ .duoop-slider output {
2274
+ font-variant-numeric: tabular-nums;
2275
+ color: #686565;
2276
+ }
2277
+ .duoop-slider__control {
2278
+ display: flex;
2279
+ align-items: center;
2280
+ position: relative;
2281
+ height: 44px;
2282
+ width: 100%;
2283
+ touch-action: none;
2284
+ user-select: none;
2285
+ }
2286
+ .duoop-slider__track {
2287
+ position: relative;
2288
+ flex: 1;
2289
+ height: 10px;
2290
+ border: 2px solid #777474;
2291
+ border-radius: 5px;
2292
+ background: #f0eeee;
2293
+ overflow: hidden;
2294
+ }
2295
+ .duoop-slider__range {
2296
+ position: absolute;
2297
+ height: 100%;
2298
+ background: #373434;
2299
+ }
2300
+ .duoop-slider__thumb {
2301
+ display: block;
2302
+ position: relative;
2303
+ width: 24px;
2304
+ height: 28px;
2305
+ box-sizing: border-box;
2306
+ border: 2px solid #373434;
2307
+ border-radius: 7px;
2308
+ background: #fff;
2309
+ box-shadow: 0 3px 0 #1d1b1b;
2310
+ transition:
2311
+ transform 120ms ease-out,
2312
+ box-shadow 160ms ease-out,
2313
+ background 160ms;
2314
+ }
2315
+ .duoop-slider__thumb::before {
2316
+ content: '';
2317
+ position: absolute;
2318
+ inset: -10px;
2319
+ }
2320
+ .duoop-slider__thumb::after {
2321
+ content: '';
2322
+ position: absolute;
2323
+ inset: 7px 8px;
2324
+ border-inline: 1px solid #777474;
2325
+ }
2326
+ .duoop-slider__thumb:hover {
2327
+ background: #f0eeee;
2328
+ transform: translateY(-1px);
2329
+ }
2330
+ .duoop-slider__thumb:active {
2331
+ transform: translateY(2px);
2332
+ box-shadow: 0 1px 0 #1d1b1b;
2333
+ }
2334
+ .duoop-slider__thumb:focus-visible {
2335
+ outline: none;
2336
+ border-style: dashed;
2337
+ background: #f0eeee;
2338
+ }
2339
+ .duoop-slider__marks {
2340
+ height: 24px;
2341
+ position: relative;
2342
+ margin-inline: 12px;
2343
+ font-size: 12px;
2344
+ color: #686565;
2345
+ }
2346
+ .duoop-slider__marks span {
2347
+ position: absolute;
2348
+ transform: translateX(-50%);
2349
+ }
2350
+ .duoop-slider[dir='rtl'] .duoop-slider__marks span {
2351
+ transform: translateX(50%);
2352
+ }
2353
+ .duoop-slider[data-disabled] {
2354
+ opacity: 0.5;
2355
+ }
2356
+ @media (prefers-reduced-motion: reduce) {
2357
+ .duoop-slider__thumb {
2358
+ transition: none;
2359
+ }
2360
+ }
2361
+ .duoop-calendar {
2362
+ --day-size: 40px;
2363
+ box-sizing: border-box;
2364
+ width: 324px;
2365
+ max-width: 100%;
2366
+ padding: 20px;
2367
+ border: 2px solid #373434;
2368
+ border-radius: 12px;
2369
+ box-shadow: 0 4px 0 #1d1b1b;
2370
+ background: #fff;
2371
+ color: #373434;
2372
+ font:
2373
+ 400 14px/1.5 'DM Sans',
2374
+ sans-serif;
2375
+ }
2376
+ .duoop-calendar .rdp-months {
2377
+ position: relative;
2378
+ display: flex;
2379
+ gap: 24px;
2380
+ flex-wrap: wrap;
2381
+ }
2382
+ .duoop-calendar .rdp-month {
2383
+ min-width: 0;
2384
+ }
2385
+ .duoop-calendar .rdp-month_caption {
2386
+ display: flex;
2387
+ align-items: center;
2388
+ height: 44px;
2389
+ margin-bottom: 16px;
2390
+ padding-inline-end: 86px;
2391
+ font-weight: 600;
2392
+ }
2393
+ .duoop-calendar .rdp-caption_label {
2394
+ display: flex;
2395
+ gap: 4px;
2396
+ align-items: center;
2397
+ white-space: nowrap;
2398
+ }
2399
+ .duoop-calendar .rdp-dropdowns {
2400
+ display: flex;
2401
+ gap: 8px;
2402
+ align-items: center;
2403
+ }
2404
+ .duoop-calendar .rdp-dropdown_root {
2405
+ position: relative;
2406
+ border-bottom: 1px solid #777474;
2407
+ }
2408
+ .duoop-calendar .rdp-dropdown {
2409
+ position: absolute;
2410
+ inset: 0;
2411
+ width: 100%;
2412
+ opacity: 0;
2413
+ cursor: pointer;
2414
+ }
2415
+ .duoop-calendar .rdp-dropdown_root:focus-within {
2416
+ border-bottom: 2px dashed #373434;
2417
+ }
2418
+ .duoop-calendar .rdp-nav {
2419
+ position: absolute;
2420
+ inset-inline-end: 0;
2421
+ top: 0;
2422
+ display: flex;
2423
+ gap: 6px;
2424
+ }
2425
+ .duoop-calendar .rdp-button_previous,
2426
+ .duoop-calendar .rdp-button_next {
2427
+ display: grid;
2428
+ place-items: center;
2429
+ height: 36px;
2430
+ width: 36px;
2431
+ border: 2px solid #777474;
2432
+ border-radius: 8px;
2433
+ background: #fff;
2434
+ color: #373434;
2435
+ box-shadow: 0 2px 0 #1d1b1b;
2436
+ }
2437
+ .duoop-calendar .rdp-chevron {
2438
+ width: 16px;
2439
+ height: 16px;
2440
+ fill: currentColor;
2441
+ }
2442
+ .duoop-calendar .rdp-month_grid {
2443
+ border-collapse: collapse;
2444
+ table-layout: fixed;
2445
+ width: 100%;
2446
+ }
2447
+ .duoop-calendar .rdp-weekday {
2448
+ height: 32px;
2449
+ font-size: 11px;
2450
+ color: #686565;
2451
+ font-weight: 500;
2452
+ text-align: center;
2453
+ }
2454
+ .duoop-calendar .rdp-day {
2455
+ width: calc(100% / 7);
2456
+ height: 44px;
2457
+ padding: 2px 0;
2458
+ text-align: center;
2459
+ }
2460
+ .duoop-calendar .rdp-day_button {
2461
+ position: relative;
2462
+ display: grid;
2463
+ place-items: center;
2464
+ width: 100%;
2465
+ max-width: var(--day-size);
2466
+ height: 38px;
2467
+ padding: 0;
2468
+ margin: 0 auto;
2469
+ border: 2px solid transparent;
2470
+ border-radius: 8px;
2471
+ background: transparent;
2472
+ color: inherit;
2473
+ font: inherit;
2474
+ cursor: pointer;
2475
+ transition:
2476
+ background 140ms,
2477
+ transform 120ms,
2478
+ box-shadow 140ms;
2479
+ }
2480
+ .duoop-calendar .rdp-day_button:hover:not(:disabled) {
2481
+ border-color: #777474;
2482
+ background: #f0eeee;
2483
+ }
2484
+ .duoop-calendar .rdp-day_button:active:not(:disabled) {
2485
+ transform: translateY(2px);
2486
+ box-shadow: none;
2487
+ }
2488
+ .duoop-calendar .rdp-selected .rdp-day_button {
2489
+ border-color: #1d1b1b;
2490
+ background: #373434;
2491
+ color: #fff;
2492
+ box-shadow: 0 2px 0 #1d1b1b;
2493
+ font-weight: 600;
2494
+ }
2495
+ .duoop-calendar .rdp-selected .rdp-day_button:hover {
2496
+ background: #373434;
2497
+ }
2498
+ .duoop-calendar .rdp-today:not(.rdp-selected) .rdp-day_button {
2499
+ border-color: #777474;
2500
+ }
2501
+ .duoop-calendar .rdp-range_middle {
2502
+ background: #f0eeee;
2503
+ }
2504
+ .duoop-calendar .rdp-range_middle .rdp-day_button {
2505
+ border-color: transparent;
2506
+ background: transparent;
2507
+ color: #373434;
2508
+ box-shadow: none;
2509
+ }
2510
+ .duoop-calendar .rdp-outside {
2511
+ color: #777474;
2512
+ }
2513
+ .duoop-calendar .rdp-disabled {
2514
+ opacity: 0.35;
2515
+ }
2516
+ .duoop-calendar button:disabled {
2517
+ cursor: not-allowed;
2518
+ }
2519
+ .duoop-calendar button:focus-visible {
2520
+ outline: none;
2521
+ border: 2px dashed currentColor;
2522
+ }
2523
+ .duoop-calendar .rdp-hidden {
2524
+ visibility: hidden;
2525
+ }
2526
+ .duoop-calendar .rdp-footer {
2527
+ margin-top: 16px;
2528
+ font-size: 12px;
2529
+ color: #686565;
2530
+ }
2531
+ @media (max-width: 480px) {
2532
+ .duoop-calendar {
2533
+ --day-size: 34px;
2534
+ padding: 12px;
2535
+ }
2536
+ .duoop-calendar .rdp-month_caption {
2537
+ font-size: 12px;
2538
+ }
2539
+ .duoop-calendar .rdp-dropdowns {
2540
+ gap: 5px;
2541
+ }
2542
+ }
2543
+ @media (prefers-reduced-motion: reduce) {
2544
+ .duoop-calendar .rdp-day_button {
2545
+ transition: none;
2546
+ }
2547
+ }
2548
+ .duoop-date-picker {
2549
+ display: grid;
2550
+ gap: 10px;
2551
+ width: 100%;
2552
+ font:
2553
+ 500 14px/1.5 'DM Sans',
2554
+ sans-serif;
2555
+ color: #373434;
2556
+ }
2557
+ .duoop-date-picker__trigger {
2558
+ width: 100%;
2559
+ }
2560
+ .duoop-date-picker__trigger .duoop-button-content {
2561
+ width: 100%;
2562
+ justify-content: space-between;
2563
+ }
2564
+ .duoop-date-picker__trigger .duoop-button-label {
2565
+ white-space: normal;
2566
+ text-align: start;
2567
+ }
2568
+ .duoop-date-picker__popup {
2569
+ width: 328px;
2570
+ padding: 0;
2571
+ }
2572
+ .duoop-date-picker__popup .duoop-calendar {
2573
+ width: 100%;
2574
+ border: 0;
2575
+ box-shadow: none;
2576
+ border-radius: 0;
2577
+ }
2578
+ .duoop-date-picker__footer {
2579
+ display: flex;
2580
+ align-items: center;
2581
+ justify-content: space-between;
2582
+ gap: 12px;
2583
+ padding: 12px 20px;
2584
+ border-top: 1px solid #e7e9ed;
2585
+ font-size: 12px;
2586
+ color: #686565;
2587
+ }
2588
+ .duoop-pagination {
2589
+ display: flex;
2590
+ align-items: center;
2591
+ justify-content: center;
2592
+ gap: 10px;
2593
+ font:
2594
+ 500 13px/1.5 'DM Sans',
2595
+ sans-serif;
2596
+ color: #373434;
2597
+ }
2598
+ .duoop-pagination__pages {
2599
+ display: flex;
2600
+ align-items: center;
2601
+ gap: 8px;
2602
+ }
2603
+ .duoop-pagination .duoop-button {
2604
+ min-width: 36px;
2605
+ padding-inline: 10px;
2606
+ }
2607
+ .duoop-pagination__gap {
2608
+ width: 16px;
2609
+ text-align: center;
2610
+ }
2611
+ .duoop-pagination__compact {
2612
+ display: none;
2613
+ min-width: 64px;
2614
+ text-align: center;
2615
+ font-variant-numeric: tabular-nums;
2616
+ }
2617
+ @media (max-width: 600px) {
2618
+ .duoop-pagination__pages {
2619
+ display: none;
2620
+ }
2621
+ .duoop-pagination__compact {
2622
+ display: inline;
2623
+ }
2624
+ .duoop-pagination .duoop-button {
2625
+ min-width: 44px;
2626
+ min-height: 44px;
2627
+ }
2628
+ }
2629
+ .duoop-data-table {
2630
+ width: 100%;
2631
+ min-width: 0;
2632
+ color: #373434;
2633
+ font:
2634
+ 400 14px/1.6 'DM Sans',
2635
+ sans-serif;
2636
+ }
2637
+ .duoop-table-scroll {
2638
+ width: 100%;
2639
+ overflow: auto;
2640
+ border: 2px solid #373434;
2641
+ border-radius: 10px;
2642
+ box-shadow: 0 4px 0 #1d1b1b;
2643
+ background: #fff;
2644
+ }
2645
+ .duoop-table-scroll:focus-visible {
2646
+ outline: 2px dashed #373434;
2647
+ outline-offset: -5px;
2648
+ }
2649
+ .duoop-table {
2650
+ width: 100%;
2651
+ border-collapse: collapse;
2652
+ text-align: start;
2653
+ font:
2654
+ 400 14px/1.6 'DM Sans',
2655
+ sans-serif;
2656
+ color: #373434;
2657
+ }
2658
+ .duoop-table caption {
2659
+ padding: 18px 20px;
2660
+ text-align: start;
2661
+ border-bottom: 1px solid #e7e9ed;
2662
+ font-weight: 600;
2663
+ }
2664
+ .duoop-table th {
2665
+ background: #f7f6f6;
2666
+ font-size: 12px;
2667
+ font-weight: 600;
2668
+ }
2669
+ .duoop-table th,
2670
+ .duoop-table td {
2671
+ padding: 14px 20px;
2672
+ border-bottom: 1px solid #e7e9ed;
2673
+ white-space: nowrap;
2674
+ text-align: start;
2675
+ }
2676
+ .duoop-table th .duoop-button {
2677
+ margin: -8px;
2678
+ font-size: 12px;
2679
+ }
2680
+ .duoop-table tr:last-child td {
2681
+ border-bottom: 0;
2682
+ }
2683
+ .duoop-table tbody tr {
2684
+ transition: background 160ms;
2685
+ }
2686
+ .duoop-table tbody tr:hover {
2687
+ background: #faf9f9;
2688
+ }
2689
+ .duoop-table tbody tr[data-selected] {
2690
+ background: #f0eeee;
2691
+ }
2692
+ .duoop-table__select {
2693
+ width: 48px;
2694
+ }
2695
+ .duoop-data-table__footer {
2696
+ display: flex;
2697
+ flex-wrap: wrap;
2698
+ justify-content: space-between;
2699
+ align-items: center;
2700
+ gap: 20px;
2701
+ padding-top: 24px;
2702
+ }
2703
+ .duoop-data-table__footer > span {
2704
+ color: #686565;
2705
+ font-size: 12px;
2706
+ }
2707
+ .duoop-table__empty {
2708
+ text-align: center;
2709
+ padding: 40px 12px;
2710
+ white-space: normal;
2711
+ }
2712
+ .duoop-table__empty strong {
2713
+ font-size: 16px;
2714
+ }
2715
+ .duoop-table__empty p {
2716
+ color: #686565;
2717
+ margin: 8px 0 20px;
2718
+ }
2719
+ @media (prefers-reduced-motion: reduce) {
2720
+ .duoop-table tbody tr {
2721
+ transition: none;
2722
+ }
2723
+ }
2724
+ .duoop-sheet-overlay {
2725
+ position: fixed;
2726
+ inset: 0;
2727
+ z-index: 130;
2728
+ background: rgb(29 27 27 / 0.3);
2729
+ animation: duoop-sheet-fade 180ms ease-out;
2730
+ }
2731
+ .duoop-sheet {
2732
+ position: fixed;
2733
+ z-index: 131;
2734
+ box-sizing: border-box;
2735
+ padding: 32px;
2736
+ background: #fff;
2737
+ color: #373434;
2738
+ border: 2px solid #373434;
2739
+ font:
2740
+ 400 14px/1.6 'DM Sans',
2741
+ sans-serif;
2742
+ overflow: auto;
2743
+ overscroll-behavior: contain;
2744
+ animation: duoop-sheet-in 240ms cubic-bezier(0.2, 0.8, 0.2, 1);
2745
+ }
2746
+ .duoop-sheet[data-side='right'] {
2747
+ inset: 12px 12px 12px auto;
2748
+ width: min(420px, calc(100vw - 24px));
2749
+ border-radius: 12px;
2750
+ box-shadow: 4px 4px 0 #1d1b1b;
2751
+ --sheet-x: 32px;
2752
+ --sheet-y: 0px;
2753
+ }
2754
+ .duoop-sheet[data-side='left'] {
2755
+ inset: 12px auto 12px 12px;
2756
+ width: min(420px, calc(100vw - 24px));
2757
+ border-radius: 12px;
2758
+ box-shadow: 4px 4px 0 #1d1b1b;
2759
+ --sheet-x: -32px;
2760
+ --sheet-y: 0px;
2761
+ }
2762
+ .duoop-sheet[data-side='bottom'] {
2763
+ inset: auto 0 0;
2764
+ max-height: 85dvh;
2765
+ border-radius: 16px 16px 0 0;
2766
+ padding-bottom: max(32px, env(safe-area-inset-bottom));
2767
+ --sheet-x: 0px;
2768
+ --sheet-y: 40px;
2769
+ }
2770
+ .duoop-sheet[data-side='top'] {
2771
+ inset: 0 0 auto;
2772
+ max-height: 85dvh;
2773
+ border-radius: 0 0 16px 16px;
2774
+ padding-top: max(32px, env(safe-area-inset-top));
2775
+ --sheet-x: 0px;
2776
+ --sheet-y: -40px;
2777
+ }
2778
+ .duoop-sheet h2 {
2779
+ margin: 0 48px 8px 0;
2780
+ font-size: 24px;
2781
+ }
2782
+ .duoop-sheet p {
2783
+ color: #686565;
2784
+ margin: 0 0 28px;
2785
+ }
2786
+ .duoop-sheet__close {
2787
+ position: absolute;
2788
+ top: 20px;
2789
+ right: 20px;
2790
+ }
2791
+ .duoop-sheet[data-state='closed'] {
2792
+ animation: duoop-sheet-out 160ms ease-in;
2793
+ }
2794
+ .duoop-sheet-overlay[data-state='closed'] {
2795
+ animation: duoop-sheet-fade 140ms ease-in reverse;
2796
+ }
2797
+ @keyframes duoop-sheet-in {
2798
+ from {
2799
+ opacity: 0;
2800
+ transform: translate(var(--sheet-x), var(--sheet-y));
2801
+ }
2802
+ to {
2803
+ opacity: 1;
2804
+ transform: none;
2805
+ }
2806
+ }
2807
+ @keyframes duoop-sheet-out {
2808
+ to {
2809
+ opacity: 0;
2810
+ transform: translate(var(--sheet-x), var(--sheet-y));
2811
+ }
2812
+ }
2813
+ @keyframes duoop-sheet-fade {
2814
+ from {
2815
+ opacity: 0;
2816
+ }
2817
+ to {
2818
+ opacity: 1;
2819
+ }
2820
+ }
2821
+ @media (max-width: 480px) {
2822
+ .duoop-sheet {
2823
+ padding: 24px 20px;
2824
+ }
2825
+ }
2826
+ @media (prefers-reduced-motion: reduce) {
2827
+ .duoop-sheet,
2828
+ .duoop-sheet[data-state='closed'],
2829
+ .duoop-sheet-overlay,
2830
+ .duoop-sheet-overlay[data-state='closed'] {
2831
+ animation-duration: 1ms;
2832
+ }
2833
+ }
2834
+ .duoop-file-upload {
2835
+ width: 100%;
2836
+ color: #373434;
2837
+ font:
2838
+ 400 14px/1.6 'DM Sans',
2839
+ sans-serif;
2840
+ }
2841
+ .duoop-file-upload h3 {
2842
+ margin: 0 0 16px;
2843
+ font-size: 15px;
2844
+ }
2845
+ .duoop-dropzone {
2846
+ display: flex;
2847
+ flex-direction: column;
2848
+ align-items: center;
2849
+ text-align: center;
2850
+ gap: 16px;
2851
+ padding: 32px 24px;
2852
+ border: 2px dashed #777474;
2853
+ border-radius: 12px;
2854
+ background: #fff;
2855
+ transition:
2856
+ background 160ms,
2857
+ border-color 160ms;
2858
+ }
2859
+ .duoop-dropzone[data-active] {
2860
+ border-color: #373434;
2861
+ border-style: solid;
2862
+ background: #f0eeee;
2863
+ }
2864
+ .duoop-dropzone[data-disabled] {
2865
+ opacity: 0.5;
2866
+ }
2867
+ .duoop-dropzone__icon {
2868
+ display: grid;
2869
+ place-items: center;
2870
+ width: 52px;
2871
+ height: 60px;
2872
+ border: 2px solid #373434;
2873
+ border-radius: 9px;
2874
+ box-shadow: 0 4px 0 #1d1b1b;
2875
+ background: #f7f6f6;
2876
+ transition: transform 200ms;
2877
+ }
2878
+ .duoop-dropzone[data-active] .duoop-dropzone__icon {
2879
+ transform: translateY(-4px) rotate(-4deg);
2880
+ }
2881
+ .duoop-dropzone__icon svg {
2882
+ width: 30px;
2883
+ height: 30px;
2884
+ }
2885
+ .duoop-dropzone p {
2886
+ margin: -8px 0 0;
2887
+ font-size: 13px;
2888
+ color: #686565;
2889
+ }
2890
+ .duoop-dropzone small {
2891
+ font-size: 12px;
2892
+ color: #686565;
2893
+ }
2894
+ .duoop-file-upload__errors p,
2895
+ .duoop-file-upload__info p {
2896
+ color: #a51d2d;
2897
+ font-size: 12px;
2898
+ overflow-wrap: anywhere;
2899
+ }
2900
+ .duoop-file-upload__list {
2901
+ margin: 20px 0;
2902
+ padding: 0;
2903
+ list-style: none;
2904
+ display: grid;
2905
+ gap: 12px;
2906
+ }
2907
+ .duoop-file-upload__list li {
2908
+ display: flex;
2909
+ align-items: center;
2910
+ gap: 12px;
2911
+ padding: 14px;
2912
+ border: 1px solid #d0cccc;
2913
+ border-radius: 10px;
2914
+ background: #fff;
2915
+ animation: duoop-file-in 200ms ease-out;
2916
+ }
2917
+ .duoop-file-upload__list li[data-state='error'] {
2918
+ border-color: #a51d2d;
2919
+ background: #fff2f3;
2920
+ }
2921
+ .duoop-file-upload__preview {
2922
+ width: 40px;
2923
+ height: 44px;
2924
+ flex-shrink: 0;
2925
+ display: grid;
2926
+ place-items: center;
2927
+ }
2928
+ .duoop-file-upload__preview img {
2929
+ width: 100%;
2930
+ height: 100%;
2931
+ object-fit: cover;
2932
+ border-radius: 6px;
2933
+ }
2934
+ .duoop-file-upload__preview svg {
2935
+ width: 28px;
2936
+ height: 28px;
2937
+ }
2938
+ .duoop-file-upload__info {
2939
+ flex: 1;
2940
+ min-width: 0;
2941
+ }
2942
+ .duoop-file-upload__info strong {
2943
+ display: block;
2944
+ overflow-wrap: anywhere;
2945
+ font-size: 13px;
2946
+ }
2947
+ .duoop-file-upload__info small {
2948
+ display: block;
2949
+ color: #686565;
2950
+ font-size: 12px;
2951
+ }
2952
+ .duoop-file-upload__success {
2953
+ width: 24px;
2954
+ color: #356247;
2955
+ }
2956
+ .duoop-file-upload__list .duoop-button svg {
2957
+ width: 18px;
2958
+ height: 18px;
2959
+ }
2960
+ @keyframes duoop-file-in {
2961
+ from {
2962
+ opacity: 0;
2963
+ transform: translateY(5px);
2964
+ }
2965
+ to {
2966
+ opacity: 1;
2967
+ transform: none;
2968
+ }
2969
+ }
2970
+ @media (max-width: 480px) {
2971
+ .duoop-dropzone {
2972
+ padding: 24px 16px;
2973
+ }
2974
+ .duoop-file-upload__list li {
2975
+ padding: 10px;
2976
+ gap: 8px;
2977
+ flex-wrap: wrap;
2978
+ }
2979
+ }
2980
+ @media (prefers-reduced-motion: reduce) {
2981
+ .duoop-dropzone,
2982
+ .duoop-dropzone__icon,
2983
+ .duoop-file-upload__list li {
2984
+ animation: none;
2985
+ transition: none;
2986
+ }
2987
+ }
2988
+ .duoop-skeleton {
2989
+ display: block;
2990
+ position: relative;
2991
+ box-sizing: border-box;
2992
+ overflow: hidden;
2993
+ width: 100%;
2994
+ height: 12px;
2995
+ border: 1px solid #d0cccc;
2996
+ border-radius: 4px;
2997
+ background: #eae7e7;
2998
+ }
2999
+ .duoop-skeleton::after {
3000
+ content: '';
3001
+ position: absolute;
3002
+ inset: 0;
3003
+ background: linear-gradient(
3004
+ 90deg,
3005
+ transparent,
3006
+ rgb(255 255 255 / 0.7),
3007
+ transparent
3008
+ );
3009
+ transform: translateX(-100%);
3010
+ animation: duoop-skeleton-shimmer 1.8s ease-in-out infinite;
3011
+ }
3012
+ .duoop-skeleton--avatar {
3013
+ width: 44px;
3014
+ height: 44px;
3015
+ border-radius: 12px;
3016
+ flex-shrink: 0;
3017
+ }
3018
+ .duoop-skeleton--card {
3019
+ border-radius: 8px;
3020
+ height: 140px;
3021
+ }
3022
+ .duoop-skeleton-text {
3023
+ display: grid;
3024
+ width: 100%;
3025
+ gap: 12px;
3026
+ }
3027
+ .duoop-skeleton-card {
3028
+ display: grid;
3029
+ gap: 24px;
3030
+ width: 100%;
3031
+ box-sizing: border-box;
3032
+ padding: 24px;
3033
+ border: 2px solid #777474;
3034
+ border-radius: 12px;
3035
+ background: #fff;
3036
+ box-shadow: 0 3px 0 #373434;
3037
+ }
3038
+ .duoop-skeleton-person {
3039
+ display: flex;
3040
+ align-items: center;
3041
+ gap: 16px;
3042
+ }
3043
+ .duoop-skeleton-table {
3044
+ width: 100%;
3045
+ border: 2px solid #777474;
3046
+ border-radius: 10px;
3047
+ background: #fff;
3048
+ overflow: hidden;
3049
+ }
3050
+ .duoop-skeleton-table > div {
3051
+ display: grid;
3052
+ gap: 24px;
3053
+ padding: 22px;
3054
+ border-bottom: 1px solid #e7e9ed;
3055
+ }
3056
+ .duoop-skeleton-table > div:last-child {
3057
+ border: 0;
3058
+ }
3059
+ @keyframes duoop-skeleton-shimmer {
3060
+ to {
3061
+ transform: translateX(100%);
3062
+ }
3063
+ }
3064
+ @media (prefers-reduced-motion: reduce) {
3065
+ .duoop-skeleton::after {
3066
+ animation: none;
3067
+ display: none;
3068
+ }
3069
+ }
3070
+ .duoop-alert {
3071
+ --alert-ink: #373434;
3072
+ --alert-bg: #f7f6f6;
3073
+ --alert-shadow: #1d1b1b;
3074
+ display: flex;
3075
+ align-items: flex-start;
3076
+ gap: 14px;
3077
+ width: 100%;
3078
+ box-sizing: border-box;
3079
+ padding: 20px;
3080
+ border: 2px solid var(--alert-ink);
3081
+ border-radius: 10px;
3082
+ box-shadow: 0 3px 0 var(--alert-shadow);
3083
+ background: var(--alert-bg);
3084
+ color: var(--alert-ink);
3085
+ font:
3086
+ 400 14px/1.6 'DM Sans',
3087
+ sans-serif;
3088
+ animation: duoop-alert-in 220ms ease-out;
3089
+ }
3090
+ .duoop-alert[data-tone='success'] {
3091
+ --alert-ink: #356247;
3092
+ --alert-bg: #edf5ef;
3093
+ --alert-shadow: #234631;
3094
+ }
3095
+ .duoop-alert[data-tone='warning'] {
3096
+ --alert-ink: #79521a;
3097
+ --alert-bg: #fff8e8;
3098
+ --alert-shadow: #543a15;
3099
+ }
3100
+ .duoop-alert[data-tone='error'] {
3101
+ --alert-ink: #a51d2d;
3102
+ --alert-bg: #fff2f3;
3103
+ --alert-shadow: #761725;
3104
+ }
3105
+ .duoop-alert__icon {
3106
+ display: grid;
3107
+ place-items: center;
3108
+ flex: 0 0 24px;
3109
+ padding-top: 1px;
3110
+ }
3111
+ .duoop-alert .feedback-icon {
3112
+ width: 22px;
3113
+ height: 22px;
3114
+ }
3115
+ .duoop-alert__body {
3116
+ flex: 1;
3117
+ min-width: 0;
3118
+ overflow-wrap: anywhere;
3119
+ }
3120
+ .duoop-alert h3 {
3121
+ font:
3122
+ 600 14px/1.6 'DM Sans',
3123
+ sans-serif;
3124
+ margin: 0;
3125
+ color: inherit;
3126
+ }
3127
+ .duoop-alert__description {
3128
+ margin-top: 6px;
3129
+ font-size: 13px;
3130
+ }
3131
+ .duoop-alert__description p {
3132
+ margin: 0;
3133
+ }
3134
+ .duoop-alert__action {
3135
+ margin-top: 16px;
3136
+ }
3137
+ .duoop-alert .duoop-alert__dismiss {
3138
+ color: inherit;
3139
+ margin: -8px -8px 0 0;
3140
+ }
3141
+ @keyframes duoop-alert-in {
3142
+ from {
3143
+ opacity: 0;
3144
+ transform: translateY(5px);
3145
+ }
3146
+ to {
3147
+ opacity: 1;
3148
+ transform: none;
3149
+ }
3150
+ }
3151
+ @media (prefers-reduced-motion: reduce) {
3152
+ .duoop-alert {
3153
+ animation: none;
3154
+ }
3155
+ }
3156
+ /* required styles */
3157
+
3158
+ .leaflet-pane,
3159
+ .leaflet-tile,
3160
+ .leaflet-marker-icon,
3161
+ .leaflet-marker-shadow,
3162
+ .leaflet-tile-container,
3163
+ .leaflet-pane > svg,
3164
+ .leaflet-pane > canvas,
3165
+ .leaflet-zoom-box,
3166
+ .leaflet-image-layer,
3167
+ .leaflet-layer {
3168
+ position: absolute;
3169
+ left: 0;
3170
+ top: 0;
3171
+ }
3172
+ .leaflet-container {
3173
+ overflow: hidden;
3174
+ }
3175
+ .leaflet-tile,
3176
+ .leaflet-marker-icon,
3177
+ .leaflet-marker-shadow {
3178
+ -webkit-user-select: none;
3179
+ -moz-user-select: none;
3180
+ user-select: none;
3181
+ -webkit-user-drag: none;
3182
+ }
3183
+ /* Prevents IE11 from highlighting tiles in blue */
3184
+ .leaflet-tile::selection {
3185
+ background: transparent;
3186
+ }
3187
+ /* Safari renders non-retina tile on retina better with this, but Chrome is worse */
3188
+ .leaflet-safari .leaflet-tile {
3189
+ image-rendering: -webkit-optimize-contrast;
3190
+ }
3191
+ /* hack that prevents hw layers "stretching" when loading new tiles */
3192
+ .leaflet-safari .leaflet-tile-container {
3193
+ width: 1600px;
3194
+ height: 1600px;
3195
+ -webkit-transform-origin: 0 0;
3196
+ }
3197
+ .leaflet-marker-icon,
3198
+ .leaflet-marker-shadow {
3199
+ display: block;
3200
+ }
3201
+ /* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */
3202
+ /* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */
3203
+ .leaflet-container .leaflet-overlay-pane svg {
3204
+ max-width: none !important;
3205
+ max-height: none !important;
3206
+ }
3207
+ .leaflet-container .leaflet-marker-pane img,
3208
+ .leaflet-container .leaflet-shadow-pane img,
3209
+ .leaflet-container .leaflet-tile-pane img,
3210
+ .leaflet-container img.leaflet-image-layer,
3211
+ .leaflet-container .leaflet-tile {
3212
+ max-width: none !important;
3213
+ max-height: none !important;
3214
+ width: auto;
3215
+ padding: 0;
3216
+ }
3217
+
3218
+ .leaflet-container img.leaflet-tile {
3219
+ /* See: https://bugs.chromium.org/p/chromium/issues/detail?id=600120 */
3220
+ mix-blend-mode: plus-lighter;
3221
+ }
3222
+
3223
+ .leaflet-container.leaflet-touch-zoom {
3224
+ -ms-touch-action: pan-x pan-y;
3225
+ touch-action: pan-x pan-y;
3226
+ }
3227
+ .leaflet-container.leaflet-touch-drag {
3228
+ -ms-touch-action: pinch-zoom;
3229
+ /* Fallback for FF which doesn't support pinch-zoom */
3230
+ touch-action: none;
3231
+ touch-action: pinch-zoom;
3232
+ }
3233
+ .leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {
3234
+ -ms-touch-action: none;
3235
+ touch-action: none;
3236
+ }
3237
+ .leaflet-container {
3238
+ -webkit-tap-highlight-color: transparent;
3239
+ }
3240
+ .leaflet-container a {
3241
+ -webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);
3242
+ }
3243
+ .leaflet-tile {
3244
+ filter: inherit;
3245
+ visibility: hidden;
3246
+ }
3247
+ .leaflet-tile-loaded {
3248
+ visibility: inherit;
3249
+ }
3250
+ .leaflet-zoom-box {
3251
+ width: 0;
3252
+ height: 0;
3253
+ -moz-box-sizing: border-box;
3254
+ box-sizing: border-box;
3255
+ z-index: 800;
3256
+ }
3257
+ /* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
3258
+ .leaflet-overlay-pane svg {
3259
+ -moz-user-select: none;
3260
+ }
3261
+
3262
+ .leaflet-pane { z-index: 400; }
3263
+
3264
+ .leaflet-tile-pane { z-index: 200; }
3265
+ .leaflet-overlay-pane { z-index: 400; }
3266
+ .leaflet-shadow-pane { z-index: 500; }
3267
+ .leaflet-marker-pane { z-index: 600; }
3268
+ .leaflet-tooltip-pane { z-index: 650; }
3269
+ .leaflet-popup-pane { z-index: 700; }
3270
+
3271
+ .leaflet-map-pane canvas { z-index: 100; }
3272
+ .leaflet-map-pane svg { z-index: 200; }
3273
+
3274
+ .leaflet-vml-shape {
3275
+ width: 1px;
3276
+ height: 1px;
3277
+ }
3278
+ .lvml {
3279
+ behavior: url(#default#VML);
3280
+ display: inline-block;
3281
+ position: absolute;
3282
+ }
3283
+
3284
+
3285
+ /* control positioning */
3286
+
3287
+ .leaflet-control {
3288
+ position: relative;
3289
+ z-index: 800;
3290
+ pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
3291
+ pointer-events: auto;
3292
+ }
3293
+ .leaflet-top,
3294
+ .leaflet-bottom {
3295
+ position: absolute;
3296
+ z-index: 1000;
3297
+ pointer-events: none;
3298
+ }
3299
+ .leaflet-top {
3300
+ top: 0;
3301
+ }
3302
+ .leaflet-right {
3303
+ right: 0;
3304
+ }
3305
+ .leaflet-bottom {
3306
+ bottom: 0;
3307
+ }
3308
+ .leaflet-left {
3309
+ left: 0;
3310
+ }
3311
+ .leaflet-control {
3312
+ float: left;
3313
+ clear: both;
3314
+ }
3315
+ .leaflet-right .leaflet-control {
3316
+ float: right;
3317
+ }
3318
+ .leaflet-top .leaflet-control {
3319
+ margin-top: 10px;
3320
+ }
3321
+ .leaflet-bottom .leaflet-control {
3322
+ margin-bottom: 10px;
3323
+ }
3324
+ .leaflet-left .leaflet-control {
3325
+ margin-left: 10px;
3326
+ }
3327
+ .leaflet-right .leaflet-control {
3328
+ margin-right: 10px;
3329
+ }
3330
+
3331
+
3332
+ /* zoom and fade animations */
3333
+
3334
+ .leaflet-fade-anim .leaflet-popup {
3335
+ opacity: 0;
3336
+ -webkit-transition: opacity 0.2s linear;
3337
+ -moz-transition: opacity 0.2s linear;
3338
+ transition: opacity 0.2s linear;
3339
+ }
3340
+ .leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
3341
+ opacity: 1;
3342
+ }
3343
+ .leaflet-zoom-animated {
3344
+ -webkit-transform-origin: 0 0;
3345
+ -ms-transform-origin: 0 0;
3346
+ transform-origin: 0 0;
3347
+ }
3348
+ svg.leaflet-zoom-animated {
3349
+ will-change: transform;
3350
+ }
3351
+
3352
+ .leaflet-zoom-anim .leaflet-zoom-animated {
3353
+ -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
3354
+ -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
3355
+ transition: transform 0.25s cubic-bezier(0,0,0.25,1);
3356
+ }
3357
+ .leaflet-zoom-anim .leaflet-tile,
3358
+ .leaflet-pan-anim .leaflet-tile {
3359
+ -webkit-transition: none;
3360
+ -moz-transition: none;
3361
+ transition: none;
3362
+ }
3363
+
3364
+ .leaflet-zoom-anim .leaflet-zoom-hide {
3365
+ visibility: hidden;
3366
+ }
3367
+
3368
+
3369
+ /* cursors */
3370
+
3371
+ .leaflet-interactive {
3372
+ cursor: pointer;
3373
+ }
3374
+ .leaflet-grab {
3375
+ cursor: -webkit-grab;
3376
+ cursor: -moz-grab;
3377
+ cursor: grab;
3378
+ }
3379
+ .leaflet-crosshair,
3380
+ .leaflet-crosshair .leaflet-interactive {
3381
+ cursor: crosshair;
3382
+ }
3383
+ .leaflet-popup-pane,
3384
+ .leaflet-control {
3385
+ cursor: auto;
3386
+ }
3387
+ .leaflet-dragging .leaflet-grab,
3388
+ .leaflet-dragging .leaflet-grab .leaflet-interactive,
3389
+ .leaflet-dragging .leaflet-marker-draggable {
3390
+ cursor: move;
3391
+ cursor: -webkit-grabbing;
3392
+ cursor: -moz-grabbing;
3393
+ cursor: grabbing;
3394
+ }
3395
+
3396
+ /* marker & overlays interactivity */
3397
+ .leaflet-marker-icon,
3398
+ .leaflet-marker-shadow,
3399
+ .leaflet-image-layer,
3400
+ .leaflet-pane > svg path,
3401
+ .leaflet-tile-container {
3402
+ pointer-events: none;
3403
+ }
3404
+
3405
+ .leaflet-marker-icon.leaflet-interactive,
3406
+ .leaflet-image-layer.leaflet-interactive,
3407
+ .leaflet-pane > svg path.leaflet-interactive,
3408
+ svg.leaflet-image-layer.leaflet-interactive path {
3409
+ pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
3410
+ pointer-events: auto;
3411
+ }
3412
+
3413
+ /* visual tweaks */
3414
+
3415
+ .leaflet-container {
3416
+ background: #ddd;
3417
+ outline-offset: 1px;
3418
+ }
3419
+ .leaflet-container a {
3420
+ color: #0078A8;
3421
+ }
3422
+ .leaflet-zoom-box {
3423
+ border: 2px dotted #38f;
3424
+ background: rgba(255,255,255,0.5);
3425
+ }
3426
+
3427
+
3428
+ /* general typography */
3429
+ .leaflet-container {
3430
+ font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
3431
+ font-size: 12px;
3432
+ font-size: 0.75rem;
3433
+ line-height: 1.5;
3434
+ }
3435
+
3436
+
3437
+ /* general toolbar styles */
3438
+
3439
+ .leaflet-bar {
3440
+ box-shadow: 0 1px 5px rgba(0,0,0,0.65);
3441
+ border-radius: 4px;
3442
+ }
3443
+ .leaflet-bar a {
3444
+ background-color: #fff;
3445
+ border-bottom: 1px solid #ccc;
3446
+ width: 26px;
3447
+ height: 26px;
3448
+ line-height: 26px;
3449
+ display: block;
3450
+ text-align: center;
3451
+ text-decoration: none;
3452
+ color: black;
3453
+ }
3454
+ .leaflet-bar a,
3455
+ .leaflet-control-layers-toggle {
3456
+ background-position: 50% 50%;
3457
+ background-repeat: no-repeat;
3458
+ display: block;
3459
+ }
3460
+ .leaflet-bar a:hover,
3461
+ .leaflet-bar a:focus {
3462
+ background-color: #f4f4f4;
3463
+ }
3464
+ .leaflet-bar a:first-child {
3465
+ border-top-left-radius: 4px;
3466
+ border-top-right-radius: 4px;
3467
+ }
3468
+ .leaflet-bar a:last-child {
3469
+ border-bottom-left-radius: 4px;
3470
+ border-bottom-right-radius: 4px;
3471
+ border-bottom: none;
3472
+ }
3473
+ .leaflet-bar a.leaflet-disabled {
3474
+ cursor: default;
3475
+ background-color: #f4f4f4;
3476
+ color: #bbb;
3477
+ }
3478
+
3479
+ .leaflet-touch .leaflet-bar a {
3480
+ width: 30px;
3481
+ height: 30px;
3482
+ line-height: 30px;
3483
+ }
3484
+ .leaflet-touch .leaflet-bar a:first-child {
3485
+ border-top-left-radius: 2px;
3486
+ border-top-right-radius: 2px;
3487
+ }
3488
+ .leaflet-touch .leaflet-bar a:last-child {
3489
+ border-bottom-left-radius: 2px;
3490
+ border-bottom-right-radius: 2px;
3491
+ }
3492
+
3493
+ /* zoom control */
3494
+
3495
+ .leaflet-control-zoom-in,
3496
+ .leaflet-control-zoom-out {
3497
+ font: bold 18px 'Lucida Console', Monaco, monospace;
3498
+ text-indent: 1px;
3499
+ }
3500
+
3501
+ .leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {
3502
+ font-size: 22px;
3503
+ }
3504
+
3505
+
3506
+ /* layers control */
3507
+
3508
+ .leaflet-control-layers {
3509
+ box-shadow: 0 1px 5px rgba(0,0,0,0.4);
3510
+ background: #fff;
3511
+ border-radius: 5px;
3512
+ }
3513
+ .leaflet-control-layers-toggle {
3514
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAQAAAADQ4RFAAACf0lEQVR4AY1UM3gkARTePdvdoTxXKc+qTl3aU5U6b2Kbkz3Gtq3Zw6ziLGNPzrYx7946Tr6/ee/XeCQ4D3ykPtL5tHno4n0d/h3+xfuWHGLX81cn7r0iTNzjr7LrlxCqPtkbTQEHeqOrTy4Yyt3VCi/IOB0v7rVC7q45Q3Gr5K6jt+3Gl5nCoDD4MtO+j96Wu8atmhGqcNGHObuf8OM/x3AMx38+4Z2sPqzCxRFK2aF2e5Jol56XTLyggAMTL56XOMoS1W4pOyjUcGGQdZxU6qRh7B9Zp+PfpOFlqt0zyDZckPi1ttmIp03jX8gyJ8a/PG2yutpS/Vol7peZIbZcKBAEEheEIAgFbDkz5H6Zrkm2hVWGiXKiF4Ycw0RWKdtC16Q7qe3X4iOMxruonzegJzWaXFrU9utOSsLUmrc0YjeWYjCW4PDMADElpJSSQ0vQvA1Tm6/JlKnqFs1EGyZiFCqnRZTEJJJiKRYzVYzJck2Rm6P4iH+cmSY0YzimYa8l0EtTODFWhcMIMVqdsI2uiTvKmTisIDHJ3od5GILVhBCarCfVRmo4uTjkhrhzkiBV7SsaqS+TzrzM1qpGGUFt28pIySQHR6h7F6KSwGWm97ay+Z+ZqMcEjEWebE7wxCSQwpkhJqoZA5ivCdZDjJepuJ9IQjGGUmuXJdBFUygxVqVsxFsLMbDe8ZbDYVCGKxs+W080max1hFCarCfV+C1KATwcnvE9gRRuMP2prdbWGowm1KB1y+zwMMENkM755cJ2yPDtqhTI6ED1M/82yIDtC/4j4BijjeObflpO9I9MwXTCsSX8jWAFeHr05WoLTJ5G8IQVS/7vwR6ohirYM7f6HzYpogfS3R2OAAAAAElFTkSuQmCC);
3515
+ width: 36px;
3516
+ height: 36px;
3517
+ }
3518
+ .leaflet-retina .leaflet-control-layers-toggle {
3519
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAQAAABvcdNgAAAEsklEQVR4AWL4TydIhpZK1kpWOlg0w3ZXP6D2soBtG42jeI6ZmQTHzAxiTbSJsYLjO9HhP+WOmcuhciVnmHVQcJnp7DFvScowZorad/+V/fVzMdMT2g9Cv9guXGv/7pYOrXh2U+RRR3dSd9JRx6bIFc/ekqHI29JC6pJ5ZEh1yWkhkbcFeSjxgx3L2m1cb1C7bceyxA+CNjT/Ifff+/kDk2u/w/33/IeCMOSaWZ4glosqT3DNnNZQ7Cs58/3Ce5HL78iZH/vKVIaYlqzfdLu8Vi7dnvUbEza5Idt36tquZFldl6N5Z/POLof0XLK61mZCmJSWjVF9tEjUluu74IUXvgttuVIHE7YxSkaYhJZam7yiM9Pv82JYfl9nptxZaxMJE4YSPty+vF0+Y2up9d3wwijfjZbabqm/3bZ9ecKHsiGmRflnn1MW4pjHf9oLufyn2z3y1D6n8g8TZhxyzipLNPnAUpsOiuWimg52psrTZYnOWYNDTMuWBWa0tJb4rgq1UvmutpaYEbZlwU3CLJm/ayYjHW5/h7xWLn9Hh1vepDkyf7dE7MtT5LR4e7yYpHrkhOUpEfssBLq2pPhAqoSWKUkk7EDqkmK6RrCEzqDjhNDWNE+XSMvkJRDWlZTmCW0l0PHQGRZY5t1L83kT0Y3l2SItk5JAWHl2dCOBm+fPu3fo5/3v61RMCO9Jx2EEYYhb0rmNQMX/vm7gqOEJLcXTGw3CAuRNeyaPWwjR8PRqKQ1PDA/dpv+on9Shox52WFnx0KY8onHayrJzm87i5h9xGw/tfkev0jGsQizqezUKjk12hBMKJ4kbCqGPVNXudyyrShovGw5CgxsRICxF6aRmSjlBnHRzg7Gx8fKqEubI2rahQYdR1YgDIRQO7JvQyD52hoIQx0mxa0ODtW2Iozn1le2iIRdzwWewedyZzewidueOGqlsn1MvcnQpuVwLGG3/IR1hIKxCjelIDZ8ldqWz25jWAsnldEnK0Zxro19TGVb2ffIZEsIO89EIEDvKMPrzmBOQcKQ+rroye6NgRRxqR4U8EAkz0CL6uSGOm6KQCdWjvjRiSP1BPalCRS5iQYiEIvxuBMJEWgzSoHADcVMuN7IuqqTeyUPq22qFimFtxDyBBJEwNyt6TM88blFHao/6tWWhuuOM4SAK4EI4QmFHA+SEyWlp4EQoJ13cYGzMu7yszEIBOm2rVmHUNqwAIQabISNMRstmdhNWcFLsSm+0tjJH1MdRxO5Nx0WDMhCtgD6OKgZeljJqJKc9po8juskR9XN0Y1lZ3mWjLR9JCO1jRDMd0fpYC2VnvjBSEFg7wBENc0R9HFlb0xvF1+TBEpF68d+DHR6IOWVv2BECtxo46hOFUBd/APU57WIoEwJhIi2CdpyZX0m93BZicktMj1AS9dClteUFAUNUIEygRZCtik5zSxI9MubTBH1GOiHsiLJ3OCoSZkILa9PxiN0EbvhsAo8tdAf9Seepd36lGWHmtNANTv5Jd0z4QYyeo/UEJqxKRpg5LZx6btLPsOaEmdMyxYdlc8LMaJnikDlhclqmPiQnTEpLUIZEwkRagjYkEibQErwhkTAKCLQEbUgkzJQWc/0PstHHcfEdQ+UAAAAASUVORK5CYII=);
3520
+ background-size: 26px 26px;
3521
+ }
3522
+ .leaflet-touch .leaflet-control-layers-toggle {
3523
+ width: 44px;
3524
+ height: 44px;
3525
+ }
3526
+ .leaflet-control-layers .leaflet-control-layers-list,
3527
+ .leaflet-control-layers-expanded .leaflet-control-layers-toggle {
3528
+ display: none;
3529
+ }
3530
+ .leaflet-control-layers-expanded .leaflet-control-layers-list {
3531
+ display: block;
3532
+ position: relative;
3533
+ }
3534
+ .leaflet-control-layers-expanded {
3535
+ padding: 6px 10px 6px 6px;
3536
+ color: #333;
3537
+ background: #fff;
3538
+ }
3539
+ .leaflet-control-layers-scrollbar {
3540
+ overflow-y: scroll;
3541
+ overflow-x: hidden;
3542
+ padding-right: 5px;
3543
+ }
3544
+ .leaflet-control-layers-selector {
3545
+ margin-top: 2px;
3546
+ position: relative;
3547
+ top: 1px;
3548
+ }
3549
+ .leaflet-control-layers label {
3550
+ display: block;
3551
+ font-size: 13px;
3552
+ font-size: 1.08333em;
3553
+ }
3554
+ .leaflet-control-layers-separator {
3555
+ height: 0;
3556
+ border-top: 1px solid #ddd;
3557
+ margin: 5px -10px 5px -6px;
3558
+ }
3559
+
3560
+ /* Default icon URLs */
3561
+ .leaflet-default-icon-path { /* used only in path-guessing heuristic, see L.Icon.Default */
3562
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=);
3563
+ }
3564
+
3565
+
3566
+ /* attribution and scale controls */
3567
+
3568
+ .leaflet-container .leaflet-control-attribution {
3569
+ background: #fff;
3570
+ background: rgba(255, 255, 255, 0.8);
3571
+ margin: 0;
3572
+ }
3573
+ .leaflet-control-attribution,
3574
+ .leaflet-control-scale-line {
3575
+ padding: 0 5px;
3576
+ color: #333;
3577
+ line-height: 1.4;
3578
+ }
3579
+ .leaflet-control-attribution a {
3580
+ text-decoration: none;
3581
+ }
3582
+ .leaflet-control-attribution a:hover,
3583
+ .leaflet-control-attribution a:focus {
3584
+ text-decoration: underline;
3585
+ }
3586
+ .leaflet-attribution-flag {
3587
+ display: inline !important;
3588
+ vertical-align: baseline !important;
3589
+ width: 1em;
3590
+ height: 0.6669em;
3591
+ }
3592
+ .leaflet-left .leaflet-control-scale {
3593
+ margin-left: 5px;
3594
+ }
3595
+ .leaflet-bottom .leaflet-control-scale {
3596
+ margin-bottom: 5px;
3597
+ }
3598
+ .leaflet-control-scale-line {
3599
+ border: 2px solid #777;
3600
+ border-top: none;
3601
+ line-height: 1.1;
3602
+ padding: 2px 5px 1px;
3603
+ white-space: nowrap;
3604
+ -moz-box-sizing: border-box;
3605
+ box-sizing: border-box;
3606
+ background: rgba(255, 255, 255, 0.8);
3607
+ text-shadow: 1px 1px #fff;
3608
+ }
3609
+ .leaflet-control-scale-line:not(:first-child) {
3610
+ border-top: 2px solid #777;
3611
+ border-bottom: none;
3612
+ margin-top: -2px;
3613
+ }
3614
+ .leaflet-control-scale-line:not(:first-child):not(:last-child) {
3615
+ border-bottom: 2px solid #777;
3616
+ }
3617
+
3618
+ .leaflet-touch .leaflet-control-attribution,
3619
+ .leaflet-touch .leaflet-control-layers,
3620
+ .leaflet-touch .leaflet-bar {
3621
+ box-shadow: none;
3622
+ }
3623
+ .leaflet-touch .leaflet-control-layers,
3624
+ .leaflet-touch .leaflet-bar {
3625
+ border: 2px solid rgba(0,0,0,0.2);
3626
+ background-clip: padding-box;
3627
+ }
3628
+
3629
+
3630
+ /* popup */
3631
+
3632
+ .leaflet-popup {
3633
+ position: absolute;
3634
+ text-align: center;
3635
+ margin-bottom: 20px;
3636
+ }
3637
+ .leaflet-popup-content-wrapper {
3638
+ padding: 1px;
3639
+ text-align: left;
3640
+ border-radius: 12px;
3641
+ }
3642
+ .leaflet-popup-content {
3643
+ margin: 13px 24px 13px 20px;
3644
+ line-height: 1.3;
3645
+ font-size: 13px;
3646
+ font-size: 1.08333em;
3647
+ min-height: 1px;
3648
+ }
3649
+ .leaflet-popup-content p {
3650
+ margin: 17px 0;
3651
+ margin: 1.3em 0;
3652
+ }
3653
+ .leaflet-popup-tip-container {
3654
+ width: 40px;
3655
+ height: 20px;
3656
+ position: absolute;
3657
+ left: 50%;
3658
+ margin-top: -1px;
3659
+ margin-left: -20px;
3660
+ overflow: hidden;
3661
+ pointer-events: none;
3662
+ }
3663
+ .leaflet-popup-tip {
3664
+ width: 17px;
3665
+ height: 17px;
3666
+ padding: 1px;
3667
+
3668
+ margin: -10px auto 0;
3669
+ pointer-events: auto;
3670
+
3671
+ -webkit-transform: rotate(45deg);
3672
+ -moz-transform: rotate(45deg);
3673
+ -ms-transform: rotate(45deg);
3674
+ transform: rotate(45deg);
3675
+ }
3676
+ .leaflet-popup-content-wrapper,
3677
+ .leaflet-popup-tip {
3678
+ background: white;
3679
+ color: #333;
3680
+ box-shadow: 0 3px 14px rgba(0,0,0,0.4);
3681
+ }
3682
+ .leaflet-container a.leaflet-popup-close-button {
3683
+ position: absolute;
3684
+ top: 0;
3685
+ right: 0;
3686
+ border: none;
3687
+ text-align: center;
3688
+ width: 24px;
3689
+ height: 24px;
3690
+ font: 16px/24px Tahoma, Verdana, sans-serif;
3691
+ color: #757575;
3692
+ text-decoration: none;
3693
+ background: transparent;
3694
+ }
3695
+ .leaflet-container a.leaflet-popup-close-button:hover,
3696
+ .leaflet-container a.leaflet-popup-close-button:focus {
3697
+ color: #585858;
3698
+ }
3699
+ .leaflet-popup-scrolled {
3700
+ overflow: auto;
3701
+ }
3702
+
3703
+ .leaflet-oldie .leaflet-popup-content-wrapper {
3704
+ -ms-zoom: 1;
3705
+ }
3706
+ .leaflet-oldie .leaflet-popup-tip {
3707
+ width: 24px;
3708
+ margin: 0 auto;
3709
+
3710
+ -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
3711
+ filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
3712
+ }
3713
+
3714
+ .leaflet-oldie .leaflet-control-zoom,
3715
+ .leaflet-oldie .leaflet-control-layers,
3716
+ .leaflet-oldie .leaflet-popup-content-wrapper,
3717
+ .leaflet-oldie .leaflet-popup-tip {
3718
+ border: 1px solid #999;
3719
+ }
3720
+
3721
+
3722
+ /* div icon */
3723
+
3724
+ .leaflet-div-icon {
3725
+ background: #fff;
3726
+ border: 1px solid #666;
3727
+ }
3728
+
3729
+
3730
+ /* Tooltip */
3731
+ /* Base styles for the element that has a tooltip */
3732
+ .leaflet-tooltip {
3733
+ position: absolute;
3734
+ padding: 6px;
3735
+ background-color: #fff;
3736
+ border: 1px solid #fff;
3737
+ border-radius: 3px;
3738
+ color: #222;
3739
+ white-space: nowrap;
3740
+ -webkit-user-select: none;
3741
+ -moz-user-select: none;
3742
+ -ms-user-select: none;
3743
+ user-select: none;
3744
+ pointer-events: none;
3745
+ box-shadow: 0 1px 3px rgba(0,0,0,0.4);
3746
+ }
3747
+ .leaflet-tooltip.leaflet-interactive {
3748
+ cursor: pointer;
3749
+ pointer-events: auto;
3750
+ }
3751
+ .leaflet-tooltip-top:before,
3752
+ .leaflet-tooltip-bottom:before,
3753
+ .leaflet-tooltip-left:before,
3754
+ .leaflet-tooltip-right:before {
3755
+ position: absolute;
3756
+ pointer-events: none;
3757
+ border: 6px solid transparent;
3758
+ background: transparent;
3759
+ content: "";
3760
+ }
3761
+
3762
+ /* Directions */
3763
+
3764
+ .leaflet-tooltip-bottom {
3765
+ margin-top: 6px;
3766
+ }
3767
+ .leaflet-tooltip-top {
3768
+ margin-top: -6px;
3769
+ }
3770
+ .leaflet-tooltip-bottom:before,
3771
+ .leaflet-tooltip-top:before {
3772
+ left: 50%;
3773
+ margin-left: -6px;
3774
+ }
3775
+ .leaflet-tooltip-top:before {
3776
+ bottom: 0;
3777
+ margin-bottom: -12px;
3778
+ border-top-color: #fff;
3779
+ }
3780
+ .leaflet-tooltip-bottom:before {
3781
+ top: 0;
3782
+ margin-top: -12px;
3783
+ margin-left: -6px;
3784
+ border-bottom-color: #fff;
3785
+ }
3786
+ .leaflet-tooltip-left {
3787
+ margin-left: -6px;
3788
+ }
3789
+ .leaflet-tooltip-right {
3790
+ margin-left: 6px;
3791
+ }
3792
+ .leaflet-tooltip-left:before,
3793
+ .leaflet-tooltip-right:before {
3794
+ top: 50%;
3795
+ margin-top: -6px;
3796
+ }
3797
+ .leaflet-tooltip-left:before {
3798
+ right: 0;
3799
+ margin-right: -12px;
3800
+ border-left-color: #fff;
3801
+ }
3802
+ .leaflet-tooltip-right:before {
3803
+ left: 0;
3804
+ margin-left: -12px;
3805
+ border-right-color: #fff;
3806
+ }
3807
+
3808
+ /* Printing */
3809
+
3810
+ @media print {
3811
+ /* Prevent printers from removing background-images of controls. */
3812
+ .leaflet-control {
3813
+ -webkit-print-color-adjust: exact;
3814
+ print-color-adjust: exact;
3815
+ }
3816
+ }
3817
+ /*$vite$:1*/