@jjlmoya/utils-pets 1.10.0 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,650 @@
1
+ .hidden {
2
+ display: none;
3
+ }
4
+
5
+ .pet-age-calculator {
6
+ position: relative;
7
+ max-width: 650px;
8
+ margin: 2rem auto;
9
+ background: var(--color-surface, #fff);
10
+ border-radius: 2rem;
11
+ padding: 2.5rem;
12
+ box-shadow: 0 20px 50px -15px rgba(0, 0, 0, 0.08);
13
+ color: var(--color-text, #334155);
14
+ border: 1px solid var(--color-border, #f1f5f9);
15
+ min-height: 400px;
16
+ }
17
+
18
+ .theme-dark .pet-age-calculator {
19
+ background: var(--color-surface-dark, #1e293b);
20
+ color: var(--color-text-dark, #e2e8f0);
21
+ border-color: var(--color-border-dark, #334155);
22
+ box-shadow: 0 20px 50px -15px rgba(0, 0, 0, 0.3);
23
+ }
24
+
25
+ .age-loader {
26
+ position: absolute;
27
+ top: 0;
28
+ left: 0;
29
+ width: 100%;
30
+ height: 100%;
31
+ background: var(--color-surface, #fff);
32
+ display: flex;
33
+ align-items: center;
34
+ justify-content: center;
35
+ border-radius: 2rem;
36
+ z-index: 50;
37
+ transition:
38
+ opacity 0.4s cubic-bezier(0.4, 0, 0.2, 1),
39
+ visibility 0.4s;
40
+ }
41
+
42
+ .theme-dark .age-loader {
43
+ background: var(--color-surface-dark, #1e293b);
44
+ }
45
+
46
+ .age-loader.hidden {
47
+ opacity: 0;
48
+ visibility: hidden;
49
+ pointer-events: none;
50
+ }
51
+
52
+ .age-loader-spinner {
53
+ width: 3rem;
54
+ height: 3rem;
55
+ color: var(--color-accent, #f59e0b);
56
+ animation: age-spin 2s infinite linear;
57
+ }
58
+
59
+ @keyframes age-spin {
60
+ from {
61
+ transform: rotate(0deg);
62
+ }
63
+ to {
64
+ transform: rotate(360deg);
65
+ }
66
+ }
67
+
68
+ .age-container {
69
+ display: flex;
70
+ flex-direction: column;
71
+ gap: 3rem;
72
+ animation: age-fade-up 0.6s cubic-bezier(0.4, 0, 0.2, 1);
73
+ }
74
+
75
+ @keyframes age-fade-up {
76
+ from {
77
+ opacity: 0;
78
+ transform: translateY(10px);
79
+ }
80
+ to {
81
+ opacity: 1;
82
+ transform: translateY(0);
83
+ }
84
+ }
85
+
86
+ .age-section {
87
+ border-bottom: 1px dashed var(--color-border-dashed, #e2e8f0);
88
+ padding-bottom: 2rem;
89
+ }
90
+
91
+ .age-section:last-of-type {
92
+ border-bottom: none;
93
+ }
94
+
95
+ .theme-dark .age-section {
96
+ border-bottom-color: var(--color-border-dark, #334155);
97
+ }
98
+
99
+ .age-section-title {
100
+ font-size: 1.1rem;
101
+ font-weight: 950;
102
+ color: var(--color-heading, #0f172a);
103
+ margin-bottom: 2rem;
104
+ display: flex;
105
+ align-items: center;
106
+ gap: 0.75rem;
107
+ text-transform: uppercase;
108
+ letter-spacing: 0.05em;
109
+ }
110
+
111
+ .theme-dark .age-section-title {
112
+ color: var(--color-heading-dark, #f8fafc);
113
+ }
114
+
115
+ .age-section-title svg {
116
+ width: 1.25rem;
117
+ height: 1.25rem;
118
+ }
119
+
120
+ .age-input-item {
121
+ margin-bottom: 2rem;
122
+ }
123
+
124
+ .age-input-item:last-child {
125
+ margin-bottom: 0;
126
+ }
127
+
128
+ .age-label {
129
+ display: block;
130
+ font-size: 0.75rem;
131
+ font-weight: 800;
132
+ text-transform: uppercase;
133
+ color: var(--color-label, #94a3b8);
134
+ margin-bottom: 1rem;
135
+ letter-spacing: 0.1em;
136
+ }
137
+
138
+ .age-text-input {
139
+ width: 100%;
140
+ padding: 0.875rem 1.25rem;
141
+ background: var(--color-btn-bg, #f8fafc);
142
+ border: 2px solid var(--color-btn-border, #e2e8f0);
143
+ border-radius: 1rem;
144
+ font-size: 1rem;
145
+ font-weight: 700;
146
+ color: var(--color-text, #334155);
147
+ outline: none;
148
+ transition:
149
+ border-color 0.2s,
150
+ box-shadow 0.2s;
151
+ box-sizing: border-box;
152
+ }
153
+
154
+ .age-text-input::placeholder {
155
+ color: var(--color-label, #94a3b8);
156
+ font-weight: 500;
157
+ }
158
+
159
+ .age-text-input:focus {
160
+ border-color: var(--color-accent, #f59e0b);
161
+ box-shadow: 0 0 0 4px rgba(245, 158, 11, 0.1);
162
+ }
163
+
164
+ .theme-dark .age-text-input {
165
+ background: var(--color-btn-bg-dark, #0f172a);
166
+ border-color: var(--color-btn-border-dark, #334155);
167
+ color: var(--color-text-dark, #e2e8f0);
168
+ }
169
+
170
+ .age-species-selector {
171
+ display: flex;
172
+ gap: 1rem;
173
+ }
174
+
175
+ .pet-type-btn {
176
+ flex: 1;
177
+ display: flex;
178
+ align-items: center;
179
+ justify-content: center;
180
+ gap: 0.5rem;
181
+ padding: 1.25rem 0.75rem;
182
+ background: var(--color-btn-bg, #f8fafc);
183
+ border: 2px solid var(--color-btn-border, #e2e8f0);
184
+ border-radius: 1rem;
185
+ cursor: pointer;
186
+ font-weight: 800;
187
+ font-size: 1rem;
188
+ color: var(--color-text, #334155);
189
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
190
+ }
191
+
192
+ .theme-dark .pet-type-btn {
193
+ background: var(--color-btn-bg-dark, #0f172a);
194
+ border-color: var(--color-btn-border-dark, #334155);
195
+ color: var(--color-text-dark, #e2e8f0);
196
+ }
197
+
198
+ .pet-type-btn.active {
199
+ background: var(--color-surface, #fff);
200
+ border-color: var(--color-accent, #f59e0b);
201
+ color: var(--color-accent, #f59e0b);
202
+ box-shadow: 0 4px 15px rgba(245, 158, 11, 0.15);
203
+ transform: translateY(-2px);
204
+ }
205
+
206
+ .theme-dark .pet-type-btn.active {
207
+ background: var(--color-surface-elevated-dark, #1e293b);
208
+ }
209
+
210
+ .age-icon {
211
+ width: 1.5rem;
212
+ height: 1.5rem;
213
+ }
214
+
215
+ .age-segmented {
216
+ display: flex;
217
+ background: var(--color-btn-bg, #f8fafc);
218
+ padding: 6px;
219
+ border-radius: 1rem;
220
+ border: 1px solid var(--color-btn-border, #e2e8f0);
221
+ }
222
+
223
+ .theme-dark .age-segmented {
224
+ background: var(--color-btn-bg-dark, #0f172a);
225
+ border-color: var(--color-btn-border-dark, #334155);
226
+ }
227
+
228
+ .size-btn {
229
+ flex: 1;
230
+ text-align: center;
231
+ padding: 0.85rem;
232
+ border-radius: 0.75rem;
233
+ cursor: pointer;
234
+ font-weight: 700;
235
+ font-size: 0.85rem;
236
+ border: none;
237
+ background: transparent;
238
+ color: var(--color-muted, #64748b);
239
+ transition: all 0.2s;
240
+ }
241
+
242
+ .size-btn.active {
243
+ background: var(--color-accent, #f59e0b);
244
+ color: var(--color-on-accent, #fff);
245
+ box-shadow: 0 4px 12px rgba(245, 158, 11, 0.3);
246
+ }
247
+
248
+ .age-year-wrap {
249
+ display: flex;
250
+ justify-content: center;
251
+ }
252
+
253
+ .age-year-input {
254
+ width: 200px;
255
+ text-align: center;
256
+ padding: 1rem;
257
+ background: var(--color-btn-bg, #f8fafc);
258
+ border: 2px solid var(--color-btn-border, #e2e8f0);
259
+ border-radius: 1rem;
260
+ font-size: 2.5rem;
261
+ font-weight: 900;
262
+ color: var(--color-text, #334155);
263
+ outline: none;
264
+ transition:
265
+ border-color 0.2s,
266
+ box-shadow 0.2s;
267
+ box-sizing: border-box;
268
+ }
269
+
270
+ .age-year-input::placeholder {
271
+ color: var(--color-label, #94a3b8);
272
+ font-weight: 400;
273
+ font-size: 1rem;
274
+ }
275
+
276
+ .age-year-input:focus,
277
+ .age-year-input.age-input-valid {
278
+ border-color: var(--color-accent, #f59e0b);
279
+ box-shadow: 0 0 0 4px rgba(245, 158, 11, 0.1);
280
+ }
281
+
282
+ .age-year-input.age-input-error {
283
+ border-color: #ef4444;
284
+ box-shadow: 0 0 0 4px rgba(239, 68, 68, 0.1);
285
+ }
286
+
287
+ .theme-dark .age-year-input {
288
+ background: var(--color-btn-bg-dark, #0f172a);
289
+ border-color: var(--color-btn-border-dark, #334155);
290
+ color: var(--color-text-dark, #e2e8f0);
291
+ }
292
+
293
+ .age-year-input::-webkit-inner-spin-button,
294
+ .age-year-input::-webkit-outer-spin-button {
295
+ -webkit-appearance: none;
296
+ margin: 0;
297
+ }
298
+ .age-year-input[type="number"] {
299
+ -moz-appearance: textfield;
300
+ }
301
+
302
+ .age-results {
303
+ background: var(--color-results-bg, #0f172a);
304
+ border-radius: 2rem;
305
+ padding: 2.5rem;
306
+ color: var(--color-results-text, #fff);
307
+ box-shadow: 0 20px 40px -10px rgba(15, 23, 42, 0.3);
308
+ }
309
+
310
+ .theme-dark .age-results {
311
+ background: var(--color-accent, #f59e0b);
312
+ color: var(--color-results-text-dark, #0f172a);
313
+ box-shadow: 0 20px 40px -10px rgba(245, 158, 11, 0.2);
314
+ }
315
+
316
+ .age-res-main {
317
+ text-align: center;
318
+ margin-bottom: 1.5rem;
319
+ }
320
+
321
+ .age-res-label {
322
+ display: block;
323
+ font-size: 0.8rem;
324
+ font-weight: 900;
325
+ text-transform: uppercase;
326
+ color: var(--color-accent, #f59e0b);
327
+ letter-spacing: 0.15em;
328
+ margin-bottom: 0.5rem;
329
+ }
330
+
331
+ .theme-dark .age-res-label {
332
+ color: var(--color-results-bg, #0f172a);
333
+ opacity: 0.7;
334
+ }
335
+
336
+ .age-res-number {
337
+ font-size: 5rem;
338
+ font-weight: 950;
339
+ line-height: 1;
340
+ display: flex;
341
+ align-items: baseline;
342
+ justify-content: center;
343
+ gap: 0.5rem;
344
+ }
345
+
346
+ .age-res-number small {
347
+ font-size: 1.5rem;
348
+ font-weight: 700;
349
+ opacity: 0.6;
350
+ }
351
+
352
+ .age-res-divider {
353
+ height: 1px;
354
+ background: rgba(255, 255, 255, 0.1);
355
+ margin: 1.5rem 0;
356
+ }
357
+
358
+ .theme-dark .age-res-divider {
359
+ background: rgba(0, 0, 0, 0.1);
360
+ }
361
+
362
+ .age-res-grid {
363
+ display: grid;
364
+ grid-template-columns: 1fr 1fr;
365
+ gap: 1rem;
366
+ margin-bottom: 1.5rem;
367
+ }
368
+
369
+ .age-res-card {
370
+ background: rgba(255, 255, 255, 0.08);
371
+ border: 1px solid rgba(255, 255, 255, 0.1);
372
+ border-radius: 1rem;
373
+ padding: 1rem;
374
+ display: flex;
375
+ flex-direction: column;
376
+ align-items: center;
377
+ gap: 0.5rem;
378
+ text-align: center;
379
+ }
380
+
381
+ .theme-dark .age-res-card {
382
+ background: rgba(0, 0, 0, 0.1);
383
+ border-color: rgba(0, 0, 0, 0.1);
384
+ }
385
+
386
+ .age-res-card-label {
387
+ font-size: 0.7rem;
388
+ font-weight: 900;
389
+ text-transform: uppercase;
390
+ letter-spacing: 0.1em;
391
+ opacity: 0.6;
392
+ }
393
+
394
+ .age-res-card-val {
395
+ font-size: 0.9rem;
396
+ font-weight: 700;
397
+ line-height: 1.2;
398
+ }
399
+
400
+ .age-res-footer {
401
+ display: flex;
402
+ justify-content: center;
403
+ padding-top: 1.5rem;
404
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
405
+ }
406
+
407
+ .theme-dark .age-res-footer {
408
+ border-top-color: rgba(0, 0, 0, 0.1);
409
+ }
410
+
411
+ .age-share-btn {
412
+ display: flex;
413
+ align-items: center;
414
+ gap: 0.5rem;
415
+ background: rgba(255, 255, 255, 0.1);
416
+ border: 1px solid rgba(255, 255, 255, 0.2);
417
+ color: #fff;
418
+ padding: 0.75rem 1.5rem;
419
+ border-radius: 2rem;
420
+ font-weight: 700;
421
+ font-size: 0.85rem;
422
+ cursor: pointer;
423
+ transition: all 0.2s;
424
+ }
425
+
426
+ .age-share-btn:hover {
427
+ background: rgba(255, 255, 255, 0.2);
428
+ }
429
+
430
+ .theme-dark .age-share-btn {
431
+ background: rgba(0, 0, 0, 0.15);
432
+ border-color: rgba(0, 0, 0, 0.2);
433
+ color: var(--color-results-bg, #0f172a);
434
+ }
435
+
436
+ .age-share-btn.age-btn-success {
437
+ background: rgba(255, 255, 255, 0.25);
438
+ }
439
+
440
+ .age-icon-sm {
441
+ width: 1rem;
442
+ height: 1rem;
443
+ }
444
+
445
+ .age-share-overlay {
446
+ position: fixed;
447
+ inset: 0;
448
+ z-index: 100;
449
+ display: none;
450
+ flex-direction: column;
451
+ align-items: center;
452
+ justify-content: center;
453
+ background: #0f172a;
454
+ padding: 1.5rem;
455
+ }
456
+
457
+ .age-share-overlay.visible {
458
+ display: flex;
459
+ }
460
+
461
+ .age-share-wrap {
462
+ width: 100%;
463
+ max-width: 420px;
464
+ display: flex;
465
+ flex-direction: column;
466
+ align-items: center;
467
+ gap: 2rem;
468
+ }
469
+
470
+ .age-share-card {
471
+ width: 100%;
472
+ background: rgba(255, 255, 255, 0.05);
473
+ border: 1px solid rgba(255, 255, 255, 0.1);
474
+ border-radius: 2.5rem;
475
+ overflow: hidden;
476
+ color: #fff;
477
+ }
478
+
479
+ .age-share-card-header {
480
+ padding: 2rem;
481
+ display: flex;
482
+ flex-direction: column;
483
+ align-items: center;
484
+ gap: 1rem;
485
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
486
+ }
487
+
488
+ .age-share-badge {
489
+ background: rgba(99, 102, 241, 0.8);
490
+ color: #fff;
491
+ font-size: 0.65rem;
492
+ font-weight: 900;
493
+ text-transform: uppercase;
494
+ letter-spacing: 0.2em;
495
+ padding: 0.4rem 1rem;
496
+ border-radius: 2rem;
497
+ }
498
+
499
+ .age-share-animal {
500
+ width: 5rem;
501
+ height: 5rem;
502
+ background: rgba(15, 23, 42, 0.8);
503
+ border-radius: 50%;
504
+ border: 2px solid rgba(255, 255, 255, 0.15);
505
+ display: flex;
506
+ align-items: center;
507
+ justify-content: center;
508
+ color: #a5b4fc;
509
+ }
510
+
511
+ .age-share-animal svg {
512
+ width: 3rem;
513
+ height: 3rem;
514
+ }
515
+
516
+ #share-pet-name {
517
+ font-size: 2rem;
518
+ font-weight: 900;
519
+ text-align: center;
520
+ color: #fff;
521
+ margin: 0;
522
+ }
523
+
524
+ .age-share-card-body {
525
+ padding: 2rem;
526
+ display: flex;
527
+ flex-direction: column;
528
+ align-items: center;
529
+ gap: 0.75rem;
530
+ }
531
+
532
+ .age-share-human-label {
533
+ font-size: 0.7rem;
534
+ font-weight: 900;
535
+ text-transform: uppercase;
536
+ letter-spacing: 0.2em;
537
+ color: rgba(165, 180, 252, 0.7);
538
+ }
539
+
540
+ #share-human-age {
541
+ font-size: 7rem;
542
+ font-weight: 900;
543
+ line-height: 0.9;
544
+ color: #fff;
545
+ }
546
+
547
+ .age-share-years-label {
548
+ font-size: 1.5rem;
549
+ font-weight: 900;
550
+ text-transform: uppercase;
551
+ letter-spacing: 0.1em;
552
+ color: rgba(255, 255, 255, 0.4);
553
+ margin-top: -0.5rem;
554
+ }
555
+
556
+ .age-share-info-grid {
557
+ display: grid;
558
+ grid-template-columns: 1fr 1fr;
559
+ gap: 0.75rem;
560
+ width: 100%;
561
+ margin-top: 0.75rem;
562
+ }
563
+
564
+ .age-share-info-item {
565
+ background: rgba(255, 255, 255, 0.05);
566
+ border: 1px solid rgba(255, 255, 255, 0.05);
567
+ border-radius: 1rem;
568
+ padding: 0.75rem;
569
+ display: flex;
570
+ flex-direction: column;
571
+ align-items: center;
572
+ gap: 0.25rem;
573
+ text-align: center;
574
+ }
575
+
576
+ .age-share-info-label {
577
+ font-size: 0.65rem;
578
+ font-weight: 900;
579
+ text-transform: uppercase;
580
+ letter-spacing: 0.1em;
581
+ color: rgba(165, 180, 252, 0.5);
582
+ }
583
+
584
+ .age-share-info-val {
585
+ font-size: 0.85rem;
586
+ font-weight: 700;
587
+ color: #fff;
588
+ }
589
+
590
+ .age-share-card-footer {
591
+ padding: 1rem;
592
+ background: rgba(0, 0, 0, 0.2);
593
+ border-top: 1px solid rgba(255, 255, 255, 0.05);
594
+ text-align: center;
595
+ font-size: 0.65rem;
596
+ font-weight: 900;
597
+ letter-spacing: 0.3em;
598
+ text-transform: uppercase;
599
+ color: rgba(255, 255, 255, 0.3);
600
+ }
601
+
602
+ .age-share-new-btn {
603
+ display: flex;
604
+ align-items: center;
605
+ gap: 0.5rem;
606
+ background: rgba(255, 255, 255, 0.05);
607
+ border: 1px solid rgba(255, 255, 255, 0.1);
608
+ color: rgba(255, 255, 255, 0.6);
609
+ padding: 0.75rem 1.5rem;
610
+ border-radius: 2rem;
611
+ font-size: 0.75rem;
612
+ font-weight: 700;
613
+ text-transform: uppercase;
614
+ letter-spacing: 0.1em;
615
+ cursor: pointer;
616
+ transition: all 0.2s;
617
+ }
618
+
619
+ .age-share-new-btn:hover {
620
+ background: rgba(255, 255, 255, 0.1);
621
+ color: #fff;
622
+ }
623
+
624
+ .age-share-new-btn svg {
625
+ width: 1rem;
626
+ height: 1rem;
627
+ }
628
+
629
+ @media (max-width: 600px) {
630
+ .pet-age-calculator {
631
+ padding: 1.5rem;
632
+ margin: 1rem;
633
+ }
634
+
635
+ .age-species-selector {
636
+ flex-direction: column;
637
+ }
638
+
639
+ .age-res-grid {
640
+ grid-template-columns: 1fr;
641
+ }
642
+
643
+ .age-res-number {
644
+ font-size: 4rem;
645
+ }
646
+
647
+ .age-year-input {
648
+ font-size: 2rem;
649
+ }
650
+ }