@jjlmoya/utils-creative 1.3.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,5 @@
1
1
  ---
2
2
  import { Icon } from 'astro-icon/components';
3
- import './style.css';
4
3
  import type { ExcuseGeneratorUI } from './index';
5
4
 
6
5
  interface Props {
@@ -138,3 +137,322 @@ const { ui } = Astro.props;
138
137
 
139
138
  els.genBtn?.addEventListener('click', generateExcuse);
140
139
  </script>
140
+
141
+ <style>
142
+ .excuse-generator {
143
+ --excuse-generator-bg: #fff;
144
+ --excuse-generator-bg-transparent: rgba(255, 255, 255, 0.8);
145
+ --excuse-generator-bg-muted: #f1f5f9;
146
+ --excuse-generator-text: #0f172a;
147
+ --excuse-generator-text-muted: #475569;
148
+ --excuse-generator-text-dim: #64748b;
149
+ --excuse-generator-border: #e2e8f0;
150
+ --excuse-generator-shadow: rgba(0, 0, 0, 0.05);
151
+ --excuse-generator-primary: #ec4899;
152
+ --excuse-generator-primary-on: #fff;
153
+ --excuse-generator-accent: #f43f5e;
154
+ --excuse-generator-success: #10b981;
155
+ --excuse-generator-warning: #f59e0b;
156
+ --excuse-generator-error: #f43f5e;
157
+ --excuse-generator-ring: rgba(236, 72, 153, 0.2);
158
+ }
159
+
160
+ :global(.theme-dark) .excuse-generator {
161
+ --excuse-generator-bg: #0f172a;
162
+ --excuse-generator-bg-transparent: rgba(15, 23, 42, 0.8);
163
+ --excuse-generator-bg-muted: #1e293b;
164
+ --excuse-generator-text: #f8fafc;
165
+ --excuse-generator-text-muted: #94a3b8;
166
+ --excuse-generator-text-dim: #64748b;
167
+ --excuse-generator-border: #334155;
168
+ --excuse-generator-shadow: rgba(0, 0, 0, 0.3);
169
+ --excuse-generator-primary: #f472b6;
170
+ --excuse-generator-primary-on: #fff;
171
+ --excuse-generator-accent: #fb7185;
172
+ --excuse-generator-success: #34d399;
173
+ --excuse-generator-warning: #fbbf24;
174
+ --excuse-generator-error: #fb7185;
175
+ --excuse-generator-ring: rgba(244, 114, 182, 0.2);
176
+ }
177
+
178
+ .excuse-generator-root {
179
+ max-width: 64rem;
180
+ margin-left: auto;
181
+ margin-right: auto;
182
+ padding: 1rem;
183
+ }
184
+
185
+ @media (min-width: 768px) {
186
+ .excuse-generator-root {
187
+ padding: 2rem;
188
+ }
189
+ }
190
+
191
+ .excuse-generator-card {
192
+ position: relative;
193
+ background-color: var(--excuse-generator-bg-transparent);
194
+ backdrop-filter: blur(24px);
195
+ border-radius: 2rem;
196
+ padding: 2rem;
197
+ box-shadow: 0 25px 50px -12px var(--excuse-generator-shadow);
198
+ border: 1px solid var(--excuse-generator-border);
199
+ min-height: 500px;
200
+ display: flex;
201
+ flex-direction: column;
202
+ align-items: center;
203
+ justify-content: center;
204
+ text-align: center;
205
+ overflow: hidden;
206
+ }
207
+
208
+ @media (min-width: 768px) {
209
+ .excuse-generator-card {
210
+ padding: 3rem;
211
+ }
212
+ }
213
+
214
+ .excuse-generator-blob {
215
+ position: absolute;
216
+ width: 24rem;
217
+ height: 24rem;
218
+ border-radius: 9999px;
219
+ filter: blur(64px);
220
+ pointer-events: none;
221
+ }
222
+
223
+ .excuse-generator-blob-1 {
224
+ top: 0;
225
+ right: 0;
226
+ transform: translate(50%, -50%);
227
+ background-color: rgba(244, 114, 182, 0.2);
228
+ }
229
+
230
+ .excuse-generator-blob-2 {
231
+ bottom: 0;
232
+ left: 0;
233
+ transform: translate(-50%, 50%);
234
+ background-color: rgba(251, 113, 133, 0.2);
235
+ }
236
+
237
+ .excuse-generator-slots {
238
+ position: relative;
239
+ z-index: 10;
240
+ width: 100%;
241
+ max-width: 80rem;
242
+ min-height: 200px;
243
+ display: flex;
244
+ flex-direction: column;
245
+ gap: 1rem;
246
+ margin-bottom: 3rem;
247
+ }
248
+
249
+ @media (min-width: 1024px) {
250
+ .excuse-generator-slots {
251
+ flex-direction: row;
252
+ align-items: center;
253
+ }
254
+ }
255
+
256
+ .excuse-generator-slot {
257
+ position: relative;
258
+ flex: 1;
259
+ min-width: 200px;
260
+ background-color: rgba(255, 255, 255, 0.6);
261
+ backdrop-filter: blur(4px);
262
+ border-radius: 1rem;
263
+ padding: 1.5rem;
264
+ border: 2px solid var(--excuse-generator-border);
265
+ box-shadow: 0 10px 15px -3px var(--excuse-generator-shadow);
266
+ display: flex;
267
+ align-items: center;
268
+ justify-content: center;
269
+ text-align: center;
270
+ transition-property: all;
271
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
272
+ transition-duration: 300ms;
273
+ }
274
+
275
+ :global(.theme-dark) .excuse-generator-slot {
276
+ background-color: rgba(15, 23, 42, 0.6);
277
+ }
278
+
279
+ .excuse-generator-slot:hover {
280
+ transform: scale(1.05);
281
+ background-color: var(--excuse-generator-bg);
282
+ border-color: var(--excuse-generator-primary);
283
+ }
284
+
285
+ .excuse-generator-slot-label {
286
+ position: absolute;
287
+ top: 0.5rem;
288
+ left: 50%;
289
+ transform: translateX(-50%);
290
+ color: var(--excuse-generator-text-dim);
291
+ font-size: 0.75rem;
292
+ line-height: 1rem;
293
+ text-transform: uppercase;
294
+ letter-spacing: 0.1em;
295
+ opacity: 0.5;
296
+ }
297
+
298
+ .excuse-generator-slot-text {
299
+ font-size: 1.5rem;
300
+ font-weight: 900;
301
+ color: var(--excuse-generator-primary);
302
+ line-height: 1.25;
303
+ overflow-wrap: break-word;
304
+ width: 100%;
305
+ transition-property: all;
306
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
307
+ transition-duration: 100ms;
308
+ }
309
+
310
+ @media (min-width: 768px) {
311
+ .excuse-generator-slot-text {
312
+ font-size: 1.875rem;
313
+ line-height: 2.25rem;
314
+ }
315
+ }
316
+
317
+ .excuse-generator-slot-text.blur {
318
+ filter: blur(3px);
319
+ opacity: 0.7;
320
+ transform: scale(0.95);
321
+ }
322
+
323
+ .excuse-generator-separator {
324
+ display: none;
325
+ font-size: 2rem;
326
+ color: var(--excuse-generator-border);
327
+ }
328
+
329
+ @media (min-width: 1024px) {
330
+ .excuse-generator-separator {
331
+ display: block;
332
+ }
333
+ }
334
+
335
+ .excuse-generator-separator-mobile {
336
+ display: flex;
337
+ justify-content: center;
338
+ color: var(--excuse-generator-border);
339
+ }
340
+
341
+ @media (min-width: 1024px) {
342
+ .excuse-generator-separator-mobile {
343
+ display: none;
344
+ }
345
+ }
346
+
347
+ .excuse-generator-actions {
348
+ position: relative;
349
+ z-index: 10;
350
+ display: flex;
351
+ flex-direction: column;
352
+ gap: 1.5rem;
353
+ align-items: center;
354
+ }
355
+
356
+ .excuse-generator-btn {
357
+ position: relative;
358
+ padding-left: 2.5rem;
359
+ padding-right: 2.5rem;
360
+ padding-top: 1.25rem;
361
+ padding-bottom: 1.25rem;
362
+ background-color: #0f172a;
363
+ border-radius: 1rem;
364
+ color: #fff;
365
+ font-weight: 900;
366
+ font-size: 1.25rem;
367
+ line-height: 1.75rem;
368
+ box-shadow: 0 25px 50px -12px rgba(236, 72, 153, 0.2);
369
+ border: none;
370
+ cursor: pointer;
371
+ overflow: hidden;
372
+ transition-property: all;
373
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
374
+ transition-duration: 300ms;
375
+ }
376
+
377
+ :global(.theme-dark) .excuse-generator-btn {
378
+ background-color: #f8fafc;
379
+ color: #0f172a;
380
+ }
381
+
382
+ .excuse-generator-btn:hover {
383
+ transform: translateY(-0.25rem);
384
+ box-shadow: 0 25px 50px -12px rgba(236, 72, 153, 0.4);
385
+ }
386
+
387
+ .excuse-generator-btn:active {
388
+ transform: translateY(0);
389
+ }
390
+
391
+ .excuse-generator-btn:disabled {
392
+ opacity: 0.7;
393
+ cursor: not-allowed;
394
+ }
395
+
396
+ .excuse-generator-btn-content {
397
+ position: relative;
398
+ z-index: 10;
399
+ display: flex;
400
+ align-items: center;
401
+ gap: 0.75rem;
402
+ }
403
+
404
+ .excuse-generator-btn-gradient {
405
+ position: absolute;
406
+ inset: 0;
407
+ background-image: linear-gradient(to right, var(--excuse-generator-primary), var(--excuse-generator-accent), var(--excuse-generator-primary));
408
+ opacity: 0;
409
+ transition-property: opacity;
410
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
411
+ transition-duration: 300ms;
412
+ }
413
+
414
+ .excuse-generator-btn:hover .excuse-generator-btn-gradient {
415
+ opacity: 1;
416
+ }
417
+
418
+ .excuse-generator-btn:hover .excuse-generator-btn-content {
419
+ color: var(--excuse-generator-primary-on);
420
+ }
421
+
422
+ .excuse-generator-copy {
423
+ background: none;
424
+ border: none;
425
+ cursor: pointer;
426
+ color: var(--excuse-generator-text-dim);
427
+ font-size: 0.875rem;
428
+ line-height: 1.25rem;
429
+ font-weight: 700;
430
+ display: flex;
431
+ align-items: center;
432
+ gap: 0.5rem;
433
+ transition-property: all;
434
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
435
+ transition-duration: 200ms;
436
+ opacity: 0;
437
+ pointer-events: none;
438
+ transform: translateY(0.5rem);
439
+ }
440
+
441
+ .excuse-generator-copy.visible {
442
+ opacity: 1;
443
+ pointer-events: auto;
444
+ transform: translateY(0);
445
+ }
446
+
447
+ .excuse-generator-copy:hover {
448
+ color: var(--excuse-generator-primary);
449
+ }
450
+
451
+ .excuse-generator-copy-success {
452
+ color: var(--excuse-generator-success);
453
+ font-weight: 700;
454
+ display: flex;
455
+ align-items: center;
456
+ gap: 0.5rem;
457
+ }
458
+ </style>
@@ -1,6 +1,5 @@
1
1
  ---
2
2
  import { Icon } from 'astro-icon/components';
3
- import './style.css';
4
3
  import type { FortuneCookieUI } from './index';
5
4
 
6
5
  interface Props {
@@ -297,3 +296,338 @@ const ASSETS = {
297
296
 
298
297
  new FortuneCookie();
299
298
  </script>
299
+
300
+ <style>
301
+ .fortune-cookie {
302
+ --fortune-cookie-bg: #fff;
303
+ --fortune-cookie-bg-muted: #fffbeb;
304
+ --fortune-cookie-text: #0f172a;
305
+ --fortune-cookie-text-muted: #475569;
306
+ --fortune-cookie-text-dim: #64748b;
307
+ --fortune-cookie-border: #fef3c7;
308
+ --fortune-cookie-shadow: rgba(0, 0, 0, 0.05);
309
+ --fortune-cookie-primary: #f59e0b;
310
+ --fortune-cookie-primary-on: #fff;
311
+ --fortune-cookie-accent: #fcd34d;
312
+ --fortune-cookie-success: #10b981;
313
+ --fortune-cookie-warning: #f59e0b;
314
+ --fortune-cookie-error: #f43f5e;
315
+ }
316
+
317
+ :global(.theme-dark) .fortune-cookie {
318
+ --fortune-cookie-bg: #0f172a;
319
+ --fortune-cookie-bg-muted: #1e293b;
320
+ --fortune-cookie-text: #f8fafc;
321
+ --fortune-cookie-text-muted: #94a3b8;
322
+ --fortune-cookie-text-dim: #64748b;
323
+ --fortune-cookie-border: #334155;
324
+ --fortune-cookie-shadow: rgba(0, 0, 0, 0.3);
325
+ --fortune-cookie-primary: #fbbf24;
326
+ --fortune-cookie-primary-on: #fff;
327
+ --fortune-cookie-accent: #fcd34d;
328
+ --fortune-cookie-success: #34d399;
329
+ --fortune-cookie-warning: #fbbf24;
330
+ --fortune-cookie-error: #fb7185;
331
+ }
332
+
333
+ .fortune-cookie-root {
334
+ width: 100%;
335
+ max-width: 64rem;
336
+ margin-left: auto;
337
+ margin-right: auto;
338
+ }
339
+
340
+ .fortune-cookie-card {
341
+ position: relative;
342
+ background-color: var(--fortune-cookie-bg);
343
+ border-radius: 1.5rem;
344
+ box-shadow: 0 25px 50px -12px var(--fortune-cookie-shadow);
345
+ overflow: hidden;
346
+ border: 1px solid var(--fortune-cookie-border);
347
+ min-height: 600px;
348
+ display: flex;
349
+ flex-direction: column;
350
+ align-items: center;
351
+ justify-content: center;
352
+ padding: 2rem;
353
+ }
354
+
355
+ .fortune-cookie-glow {
356
+ position: absolute;
357
+ inset: 0;
358
+ opacity: 0.1;
359
+ pointer-events: none;
360
+ background-image: radial-gradient(circle at center, var(--fortune-cookie-primary), transparent, transparent);
361
+ }
362
+
363
+ .fortune-cookie-content {
364
+ position: relative;
365
+ z-index: 10;
366
+ width: 100%;
367
+ display: flex;
368
+ flex-direction: column;
369
+ align-items: center;
370
+ }
371
+
372
+ .fortune-cookie-instruction {
373
+ font-size: 1.25rem;
374
+ line-height: 1.75rem;
375
+ font-weight: 700;
376
+ color: #92400e;
377
+ margin-bottom: 2rem;
378
+ text-transform: uppercase;
379
+ letter-spacing: 0.1em;
380
+ animation: fortune-cookie-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
381
+ }
382
+
383
+ :global(.theme-dark) .fortune-cookie-instruction {
384
+ color: #fbbf24;
385
+ }
386
+
387
+ @keyframes fortune-cookie-pulse {
388
+ 0%, 100% { opacity: 1; }
389
+ 50% { opacity: .5; }
390
+ }
391
+
392
+ .fortune-cookie-stage {
393
+ position: relative;
394
+ width: 20rem;
395
+ height: 20rem;
396
+ cursor: pointer;
397
+ }
398
+
399
+ @media (min-width: 768px) {
400
+ .fortune-cookie-stage {
401
+ width: 24rem;
402
+ height: 24rem;
403
+ }
404
+ }
405
+
406
+ .fortune-cookie-body {
407
+ position: absolute;
408
+ inset: 2rem;
409
+ transition-property: transform;
410
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
411
+ transition-duration: 100ms;
412
+ }
413
+
414
+ @media (min-width: 768px) {
415
+ .fortune-cookie-body {
416
+ inset: 3rem;
417
+ }
418
+ }
419
+
420
+ .fortune-cookie-body:active {
421
+ transform: scale(0.95);
422
+ }
423
+
424
+ .fortune-cookie-img {
425
+ width: 100%;
426
+ height: 100%;
427
+ object-fit: contain;
428
+ z-index: 10;
429
+ position: relative;
430
+ }
431
+
432
+ .fortune-cookie-broken {
433
+ position: absolute;
434
+ inset: 2rem;
435
+ pointer-events: none;
436
+ }
437
+
438
+ .fortune-cookie-broken.hidden {
439
+ display: none;
440
+ }
441
+
442
+ @media (min-width: 768px) {
443
+ .fortune-cookie-broken {
444
+ inset: 3rem;
445
+ }
446
+ }
447
+
448
+ .fortune-cookie-half {
449
+ position: absolute;
450
+ width: 50%;
451
+ height: 100%;
452
+ object-fit: contain;
453
+ transition-property: all;
454
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
455
+ transition-duration: 1000ms;
456
+ }
457
+
458
+ .fortune-cookie-half-left {
459
+ left: 0;
460
+ transform-origin: bottom left;
461
+ }
462
+
463
+ .fortune-cookie-half-right {
464
+ right: 0;
465
+ transform-origin: bottom right;
466
+ }
467
+
468
+ .fortune-cookie-paper {
469
+ position: absolute;
470
+ top: 50%;
471
+ left: 50%;
472
+ transform: translate(-50%, -50%) scale(0.5);
473
+ width: 75%;
474
+ max-width: 280px;
475
+ opacity: 0;
476
+ transition-property: all;
477
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
478
+ transition-duration: 1000ms;
479
+ z-index: 0;
480
+ }
481
+
482
+ .fortune-cookie-paper.visible {
483
+ opacity: 1;
484
+ transform: translate(-50%, -50%) scale(1);
485
+ z-index: 20;
486
+ }
487
+
488
+ .fortune-cookie-paper-img {
489
+ width: 100%;
490
+ filter: drop-shadow(0 20px 13px rgba(0, 0, 0, 0.03)) drop-shadow(0 8px 5px rgba(0, 0, 0, 0.08));
491
+ transform: rotate(1deg);
492
+ }
493
+
494
+ .fortune-cookie-paper-content {
495
+ position: absolute;
496
+ inset: 0;
497
+ display: flex;
498
+ flex-direction: column;
499
+ align-items: center;
500
+ justify-content: center;
501
+ padding: 2rem;
502
+ text-align: center;
503
+ }
504
+
505
+ .fortune-cookie-text {
506
+ color: #0f172a;
507
+ font-weight: 900;
508
+ font-size: 1.125rem;
509
+ line-height: 1.25;
510
+ transform: rotate(-1deg);
511
+ user-select: text;
512
+ }
513
+
514
+ @media (min-width: 768px) {
515
+ .fortune-cookie-text {
516
+ font-size: 1.25rem;
517
+ line-height: 1.75rem;
518
+ }
519
+ }
520
+
521
+ .fortune-cookie-lucky-numbers {
522
+ margin-top: 1rem;
523
+ display: flex;
524
+ flex-wrap: wrap;
525
+ gap: 0.5rem;
526
+ justify-content: center;
527
+ transform: rotate(-1deg);
528
+ }
529
+
530
+ .fortune-cookie-number {
531
+ font-size: 0.75rem;
532
+ line-height: 1rem;
533
+ font-weight: 700;
534
+ background-color: rgba(255, 255, 255, 0.9);
535
+ color: #450a0a;
536
+ padding-left: 0.5rem;
537
+ padding-right: 0.5rem;
538
+ padding-top: 0.125rem;
539
+ padding-bottom: 0.125rem;
540
+ border-radius: 0.25rem;
541
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
542
+ border: 1px solid #fee2e2;
543
+ }
544
+
545
+ .fortune-cookie-particles {
546
+ position: absolute;
547
+ inset: 0;
548
+ pointer-events: none;
549
+ overflow: visible;
550
+ z-index: 20;
551
+ }
552
+
553
+ .fortune-cookie-reset {
554
+ display: none;
555
+ margin-top: 3rem;
556
+ flex-direction: column;
557
+ align-items: center;
558
+ gap: 1rem;
559
+ }
560
+
561
+ .fortune-cookie-reset.visible {
562
+ display: flex;
563
+ }
564
+
565
+ .fortune-cookie-status {
566
+ font-size: 0.875rem;
567
+ line-height: 1.25rem;
568
+ color: var(--fortune-cookie-text-dim);
569
+ }
570
+
571
+ .fortune-cookie-share-btn {
572
+ padding-left: 1.5rem;
573
+ padding-right: 1.5rem;
574
+ padding-top: 0.5rem;
575
+ padding-bottom: 0.5rem;
576
+ background-color: #f1f5f9;
577
+ color: #334155;
578
+ border-radius: 9999px;
579
+ font-size: 0.875rem;
580
+ line-height: 1.25rem;
581
+ font-weight: 700;
582
+ border: none;
583
+ cursor: pointer;
584
+ display: flex;
585
+ align-items: center;
586
+ gap: 0.5rem;
587
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
588
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
589
+ transition-duration: 150ms;
590
+ }
591
+
592
+ :global(.theme-dark) .fortune-cookie-share-btn {
593
+ background-color: #1e293b;
594
+ color: #cbd5e1;
595
+ }
596
+
597
+ .fortune-cookie-share-btn:hover {
598
+ background-color: #e2e8f0;
599
+ }
600
+
601
+ :global(.theme-dark) .fortune-cookie-share-btn:hover {
602
+ background-color: #334155;
603
+ }
604
+
605
+ .fortune-cookie-shake-1 {
606
+ animation: fortune-cookie-shake 0.3s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
607
+ }
608
+
609
+ .fortune-cookie-shake-2 {
610
+ animation: fortune-cookie-shake 0.4s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
611
+ }
612
+
613
+ .fortune-cookie-shake-3 {
614
+ animation: fortune-cookie-shake 0.5s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
615
+ }
616
+
617
+ @keyframes fortune-cookie-shake {
618
+ 10%, 90% { transform: translate3d(-1px, 0, 0) rotate(-1deg); }
619
+ 20%, 80% { transform: translate3d(2px, 0, 0) rotate(2deg); }
620
+ 30%, 50%, 70% { transform: translate3d(-4px, 0, 0) rotate(-4deg); }
621
+ 40%, 60% { transform: translate3d(4px, 0, 0) rotate(4deg); }
622
+ }
623
+
624
+ .fortune-cookie-crumb {
625
+ position: absolute;
626
+ width: 20px;
627
+ height: 20px;
628
+ background-image: url("/images/utilities/fortune/fc-crumbs.webp");
629
+ background-size: contain;
630
+ background-repeat: no-repeat;
631
+ pointer-events: none;
632
+ }
633
+ </style>