overlapui 0.0.0-stage → 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/overlapui.css ADDED
@@ -0,0 +1,456 @@
1
+ /* overlapui.standalone.fscss
2
+ Full expand of overlapui for developers who link plain CSS only.
3
+ Selective / token-driven use: import from overlapui.fscss in your own .fscss file.
4
+ Build: npx fscss@1.2.5 overlapui.standalone.fscss overlapui.css
5
+ CI: .github/workflows/compile-standalone.yml
6
+ */
7
+
8
+ /* Expand every public mixin onto default selectors */
9
+
10
+ :root {
11
+ --ou-ring: #17203a;
12
+ --ou-ease: cubic-bezier(.3, 1.3, .5, 1);
13
+ --ou-time: .35s;
14
+ /* avatar-overlap */
15
+ --ou-size: 44px;
16
+ --ou-overlap: -14px;
17
+ --ou-gap: 6px;
18
+ --ou-c: #f59e0b;
19
+ --ou-letter: #fff;
20
+ --ou-ring-width: 3px;
21
+ /* card-overlap */
22
+ --ou-peek: 34px;
23
+ --ou-card-h: 76px;
24
+ --ou-card-gap: 10px;
25
+ --ou-card-bg: #1f2a48;
26
+ --ou-card-color: #cbd5ee;
27
+ --ou-card-title: #fff;
28
+ --ou-card-radius: 16px;
29
+ --ou-card-pad-y: 10px;
30
+ --ou-card-pad-x: 14px;
31
+ --ou-card-thumb: 48px;
32
+ --ou-card-thumb-radius: 12px;
33
+ /* img-overlap */
34
+ --ou-img: 96px;
35
+ --ou-img-overlap: -52px;
36
+ --ou-img-gap: 12px;
37
+ --ou-img-radius: 18px;
38
+ --ou-img-border: 3px;
39
+ --ou-img-tilt: -5deg;
40
+ --ou-img-tilt-even: 4deg;
41
+ /* circle-overlap */
42
+ --ou-item: 48px;
43
+ --ou-r: 86px;
44
+ --ou-center-bg: #ec4899;
45
+ --n: 6;
46
+ }
47
+
48
+ .avatar-overlap {
49
+ display: flex;
50
+ align-items: center;
51
+ width: max-content;
52
+ margin: 0;
53
+ padding: 0;
54
+ list-style: none;
55
+ }
56
+ .avatar-overlap > li {
57
+ position: relative;
58
+ display: grid;
59
+ place-items: center;
60
+ flex: none;
61
+ width: var(--ou-size);
62
+ height: var(--ou-size);
63
+ margin-left: var(--ou-overlap);
64
+ border-radius: 50%;
65
+ background: var(--ou-c);
66
+ box-shadow: 0 0 0 var(--ou-ring-width) var(--ou-ring);
67
+ font-size: 0;
68
+ cursor: pointer;
69
+ transition:
70
+ margin var(--ou-time) var(--ou-ease),
71
+ transform .2s ease;
72
+ }
73
+ .avatar-overlap > li:first-child {
74
+ margin-left: 0;
75
+ }
76
+ .avatar-overlap > li::before {
77
+ content: attr(data-alph);
78
+ text-transform: uppercase;
79
+ font: 700 calc(var(--ou-size) * .4)/1 system-ui, sans-serif;
80
+ color: var(--ou-letter);
81
+ }
82
+ .avatar-overlap > li > img {
83
+ position: absolute;
84
+ inset: 0;
85
+ width: 100%;
86
+ height: 100%;
87
+ border-radius: 50%;
88
+ object-fit: cover;
89
+ }
90
+ .avatar-overlap > li[data-alph] {
91
+ --ou-c: #9ca3af !important;
92
+ }.avatar-overlap > li[data-alph="a"] {
93
+ --ou-c: #ef4444 !important;
94
+ }
95
+ .avatar-overlap > li[data-alph="b"] {
96
+ --ou-c: #f97316 !important;
97
+ }
98
+ .avatar-overlap > li[data-alph="c"] {
99
+ --ou-c: #f59e0b !important;
100
+ }
101
+ .avatar-overlap > li[data-alph="d"] {
102
+ --ou-c: #eab308 !important;
103
+ }
104
+ .avatar-overlap > li[data-alph="e"] {
105
+ --ou-c: #84cc16 !important;
106
+ }
107
+ .avatar-overlap > li[data-alph="f"] {
108
+ --ou-c: #22c55e !important;
109
+ }
110
+ .avatar-overlap > li[data-alph="g"] {
111
+ --ou-c: #10b981 !important;
112
+ }
113
+ .avatar-overlap > li[data-alph="h"] {
114
+ --ou-c: #14b8a6 !important;
115
+ }
116
+ .avatar-overlap > li[data-alph="i"] {
117
+ --ou-c: #06b6d4 !important;
118
+ }
119
+ .avatar-overlap > li[data-alph="j"] {
120
+ --ou-c: #0ea5e9 !important;
121
+ }
122
+ .avatar-overlap > li[data-alph="k"] {
123
+ --ou-c: #3b82f6 !important;
124
+ }
125
+ .avatar-overlap > li[data-alph="l"] {
126
+ --ou-c: #6366f1 !important;
127
+ }
128
+ .avatar-overlap > li[data-alph="m"] {
129
+ --ou-c: #8b5cf6 !important;
130
+ }
131
+ .avatar-overlap > li[data-alph="n"] {
132
+ --ou-c: #a855f7 !important;
133
+ }
134
+ .avatar-overlap > li[data-alph="o"] {
135
+ --ou-c: #d946ef !important;
136
+ }
137
+ .avatar-overlap > li[data-alph="p"] {
138
+ --ou-c: #ec4899 !important;
139
+ }
140
+ .avatar-overlap > li[data-alph="q"] {
141
+ --ou-c: #f43f5e !important;
142
+ }
143
+ .avatar-overlap > li[data-alph="r"] {
144
+ --ou-c: #fb7185 !important;
145
+ }
146
+ .avatar-overlap > li[data-alph="s"] {
147
+ --ou-c: #fda4af !important;
148
+ }
149
+ .avatar-overlap > li[data-alph="t"] {
150
+ --ou-c: #fdba74 !important;
151
+ }
152
+ .avatar-overlap > li[data-alph="u"] {
153
+ --ou-c: #fde047 !important;
154
+ }
155
+ .avatar-overlap > li[data-alph="v"] {
156
+ --ou-c: #bef264 !important;
157
+ }
158
+ .avatar-overlap > li[data-alph="w"] {
159
+ --ou-c: #86efac !important;
160
+ }
161
+ .avatar-overlap > li[data-alph="x"] {
162
+ --ou-c: #5eead4 !important;
163
+ }
164
+ .avatar-overlap > li[data-alph="y"] {
165
+ --ou-c: #67e8f9 !important;
166
+ }
167
+ .avatar-overlap > li[data-alph="z"] {
168
+ --ou-c: #7dd3fc !important;
169
+ }.avatar-overlap > li[data-alph="A"] {
170
+ --ou-c: #ef4444 !important;
171
+ }
172
+ .avatar-overlap > li[data-alph="B"] {
173
+ --ou-c: #f97316 !important;
174
+ }
175
+ .avatar-overlap > li[data-alph="C"] {
176
+ --ou-c: #f59e0b !important;
177
+ }
178
+ .avatar-overlap > li[data-alph="D"] {
179
+ --ou-c: #eab308 !important;
180
+ }
181
+ .avatar-overlap > li[data-alph="E"] {
182
+ --ou-c: #84cc16 !important;
183
+ }
184
+ .avatar-overlap > li[data-alph="F"] {
185
+ --ou-c: #22c55e !important;
186
+ }
187
+ .avatar-overlap > li[data-alph="G"] {
188
+ --ou-c: #10b981 !important;
189
+ }
190
+ .avatar-overlap > li[data-alph="H"] {
191
+ --ou-c: #14b8a6 !important;
192
+ }
193
+ .avatar-overlap > li[data-alph="I"] {
194
+ --ou-c: #06b6d4 !important;
195
+ }
196
+ .avatar-overlap > li[data-alph="J"] {
197
+ --ou-c: #0ea5e9 !important;
198
+ }
199
+ .avatar-overlap > li[data-alph="K"] {
200
+ --ou-c: #3b82f6 !important;
201
+ }
202
+ .avatar-overlap > li[data-alph="L"] {
203
+ --ou-c: #6366f1 !important;
204
+ }
205
+ .avatar-overlap > li[data-alph="M"] {
206
+ --ou-c: #8b5cf6 !important;
207
+ }
208
+ .avatar-overlap > li[data-alph="N"] {
209
+ --ou-c: #a855f7 !important;
210
+ }
211
+ .avatar-overlap > li[data-alph="O"] {
212
+ --ou-c: #d946ef !important;
213
+ }
214
+ .avatar-overlap > li[data-alph="P"] {
215
+ --ou-c: #ec4899 !important;
216
+ }
217
+ .avatar-overlap > li[data-alph="Q"] {
218
+ --ou-c: #f43f5e !important;
219
+ }
220
+ .avatar-overlap > li[data-alph="R"] {
221
+ --ou-c: #fb7185 !important;
222
+ }
223
+ .avatar-overlap > li[data-alph="S"] {
224
+ --ou-c: #fda4af !important;
225
+ }
226
+ .avatar-overlap > li[data-alph="T"] {
227
+ --ou-c: #fdba74 !important;
228
+ }
229
+ .avatar-overlap > li[data-alph="U"] {
230
+ --ou-c: #fde047 !important;
231
+ }
232
+ .avatar-overlap > li[data-alph="V"] {
233
+ --ou-c: #bef264 !important;
234
+ }
235
+ .avatar-overlap > li[data-alph="W"] {
236
+ --ou-c: #86efac !important;
237
+ }
238
+ .avatar-overlap > li[data-alph="X"] {
239
+ --ou-c: #5eead4 !important;
240
+ }
241
+ .avatar-overlap > li[data-alph="Y"] {
242
+ --ou-c: #67e8f9 !important;
243
+ }
244
+ .avatar-overlap > li[data-alph="Z"] {
245
+ --ou-c: #7dd3fc !important;
246
+ }.avatar-overlap > li[data-alph="1"] {
247
+ --ou-c: #94a3b8 !important;
248
+ }
249
+ .avatar-overlap > li[data-alph="2"] {
250
+ --ou-c: #64748b !important;
251
+ }
252
+ .avatar-overlap > li[data-alph="3"] {
253
+ --ou-c: #475569 !important;
254
+ }
255
+ .avatar-overlap > li[data-alph="4"] {
256
+ --ou-c: #334155 !important;
257
+ }
258
+ .avatar-overlap > li[data-alph="5"] {
259
+ --ou-c: #1e293b !important;
260
+ }
261
+ .avatar-overlap > li[data-alph="6"] {
262
+ --ou-c: #0f172a !important;
263
+ }
264
+ .avatar-overlap > li[data-alph="7"] {
265
+ --ou-c: #78716c !important;
266
+ }
267
+ .avatar-overlap > li[data-alph="8"] {
268
+ --ou-c: #57534e !important;
269
+ }
270
+ .avatar-overlap > li[data-alph="9"] {
271
+ --ou-c: #44403c !important;
272
+ }
273
+ .avatar-overlap > li[data-alph="10"] {
274
+ --ou-c: #292524 !important;
275
+ }
276
+ .avatar-overlap:hover > li + li,
277
+ .avatar-overlap:focus-within > li + li {
278
+ margin-left: var(--ou-gap);
279
+ }
280
+ .avatar-overlap > li:hover {
281
+ transform: translateY(-4px);
282
+ z-index: 2;
283
+ }
284
+
285
+ .card-overlap {
286
+ display: flex;
287
+ flex-direction: column;
288
+ width: min(100%, 340px);
289
+ }
290
+ .card-overlap > div {
291
+ position: relative;
292
+ display: grid;
293
+ grid-template-columns: auto 1fr;
294
+ column-gap: 12px;
295
+ align-content: center;
296
+ min-height: var(--ou-card-h);
297
+ margin-top: calc(var(--ou-peek) - var(--ou-card-h));
298
+ padding: var(--ou-card-pad-y) var(--ou-card-pad-x);
299
+ border-radius: var(--ou-card-radius);
300
+ background: var(--ou-card-bg);
301
+ color: var(--ou-card-color);
302
+ font: 400 13px/1.3 system-ui, sans-serif;
303
+ box-shadow:
304
+ 0 -6px 16px rgba(0, 0, 0, .35),
305
+ 0 0 0 1px rgba(255, 255, 255, .06);
306
+ transition:
307
+ margin var(--ou-time) var(--ou-ease),
308
+ transform .2s ease;
309
+ }
310
+ .card-overlap > div:first-child {
311
+ margin-top: 0;
312
+ }
313
+ .card-overlap > div > img {
314
+ grid-row: span 2;
315
+ width: var(--ou-card-thumb);
316
+ height: var(--ou-card-thumb);
317
+ border-radius: var(--ou-card-thumb-radius);
318
+ object-fit: cover;
319
+ background: linear-gradient(135deg, #16D89D, #015E6B);
320
+ }
321
+ .card-overlap > div > h3 {
322
+ margin: 0;
323
+ align-self: end;
324
+ font-size: 15px;
325
+ color: var(--ou-card-title);
326
+ }
327
+ .card-overlap:hover > div + div,
328
+ .card-overlap:focus-within > div + div {
329
+ margin-top: var(--ou-card-gap);
330
+ }
331
+ .card-overlap > div:hover {
332
+ transform: translateX(6px);
333
+ }
334
+
335
+ .img-overlap {
336
+ display: flex;
337
+ align-items: center;
338
+ width: max-content;
339
+ padding: 10px;
340
+ }
341
+ .img-overlap > img {
342
+ flex: none;
343
+ width: var(--ou-img);
344
+ height: var(--ou-img);
345
+ margin-left: var(--ou-img-overlap);
346
+ border: var(--ou-img-border) solid var(--ou-ring);
347
+ border-radius: var(--ou-img-radius);
348
+ object-fit: cover;
349
+ background: linear-gradient(135deg, #16D89D, #015E6B);
350
+ box-shadow: 0 8px 18px rgba(0, 0, 0, .35);
351
+ transform: rotate(var(--ou-img-tilt));
352
+ transition:
353
+ margin var(--ou-time) var(--ou-ease),
354
+ transform var(--ou-time) var(--ou-ease);
355
+ }
356
+ .img-overlap > img:first-child {
357
+ margin-left: 0;
358
+ }
359
+ .img-overlap > img:nth-child(even) {
360
+ transform: rotate(var(--ou-img-tilt-even));
361
+ }
362
+ .img-overlap:hover > img,
363
+ .img-overlap:focus-within > img {
364
+ transform: rotate(0);
365
+ }
366
+ .img-overlap:hover > img + img,
367
+ .img-overlap:focus-within > img + img {
368
+ margin-left: var(--ou-img-gap);
369
+ }
370
+ .img-overlap > img:hover {
371
+ transform: translateY(-6px) scale(1.04);
372
+ z-index: 2;
373
+ }
374
+
375
+ .circle-overlap {
376
+ position: relative;
377
+ z-index: 0;
378
+ isolation: isolate;
379
+ width: var(--ou-item);
380
+ height: var(--ou-item);
381
+ margin: calc(var(--ou-r) + var(--ou-item));
382
+ }
383
+ .circle-overlap > * {
384
+ --c: #6366f1;
385
+ position: absolute;
386
+ inset: 0;
387
+ display: grid;
388
+ place-items: center;
389
+ border: 0;
390
+ border-radius: 50%;
391
+ background: var(--c);
392
+ color: #fff;
393
+ font: 700 18px/1 system-ui, sans-serif;
394
+ text-decoration: none;
395
+ box-shadow: 0 0 0 var(--ou-ring-width) var(--ou-ring);
396
+ cursor: pointer;
397
+ }
398
+ .circle-overlap > :first-child {
399
+ z-index: 2;
400
+ background: var(--ou-center-bg);
401
+ transition: transform var(--ou-time) var(--ou-ease);
402
+ }
403
+ .circle-overlap > :not(:first-child) {
404
+ --a: calc(360deg / var(--n) * var(--i, 0));
405
+ opacity: 0;
406
+ pointer-events: none;
407
+ transform: scale(.5);
408
+ transition:
409
+ transform var(--ou-time) var(--ou-ease),
410
+ opacity .2s ease;
411
+ transition-delay: calc(var(--i, 0) * 30ms);
412
+ }
413
+ .circle-overlap:hover::before,
414
+ .circle-overlap:focus-within::before {
415
+ content: "";
416
+ position: absolute;
417
+ inset: calc((var(--ou-r) + var(--ou-item)) * -1);
418
+ border-radius: 50%;
419
+ }
420
+ .circle-overlap:hover > :not(:first-child),
421
+ .circle-overlap:focus-within > :not(:first-child) {
422
+ opacity: 1;
423
+ pointer-events: auto;
424
+ transform:
425
+ rotate(var(--a))
426
+ translateY(calc(var(--ou-r) * -1))
427
+ rotate(calc(var(--a) * -1));
428
+ }
429
+ .circle-overlap:hover > :first-child,
430
+ .circle-overlap:focus-within > :first-child {
431
+ transform: rotate(45deg);
432
+ }
433
+ .circle-overlap > :not(:first-child):hover {
434
+ filter: brightness(1.15);
435
+ }
436
+ .circle-overlap > :nth-child(2) { --i: 0; }
437
+ .circle-overlap > :nth-child(3) { --i: 1; --c: #f59e0b; }
438
+ .circle-overlap > :nth-child(4) { --i: 2; --c: #22c55e; }
439
+ .circle-overlap > :nth-child(5) { --i: 3; --c: #06b6d4; }
440
+ .circle-overlap > :nth-child(6) { --i: 4; --c: #ef4444; }
441
+ .circle-overlap > :nth-child(7) { --i: 5; --c: #8b5cf6; }
442
+ .circle-overlap > :nth-child(8) { --i: 6; --c: #14b8a6; }
443
+ .circle-overlap > :nth-child(9) { --i: 7; --c: #f97316; }
444
+ .circle-overlap > :nth-child(10) { --i: 8; --c: #84cc16; }
445
+ .circle-overlap > :nth-child(11) { --i: 9; --c: #e11d48; }
446
+ .circle-overlap > :nth-child(12) { --i: 10; --c: #0ea5e9; }
447
+ .circle-overlap > :nth-child(13) { --i: 11; --c: #a855f7; }
448
+
449
+ @media (prefers-reduced-motion: reduce) {
450
+ .avatar-overlap > li,
451
+ .card-overlap > div,
452
+ .img-overlap > img,
453
+ .circle-overlap > * {
454
+ transition: none;
455
+ }
456
+ }