@jjlmoya/utils-social 1.9.0 → 1.10.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,898 @@
1
+ .tfo-root {
2
+ --tfo-pink: #FD297B;
3
+ --tfo-orange: #FF5864;
4
+ --tfo-gradient: linear-gradient(45deg, #FD297B, #FF5864, #FF655B);
5
+ --tfo-text: #1a1a1a;
6
+ --tfo-muted: #64748b;
7
+ --tfo-bg: #f8fafc;
8
+ --tfo-panel-bg: rgba(255, 255, 255, 0.95);
9
+ --tfo-panel-border: rgba(255, 255, 255, 0.3);
10
+ --tfo-metric-bg: #f8fafc;
11
+ --tfo-metric-border: #f1f5f9;
12
+ --tfo-action-bg: #fff;
13
+ --tfo-action-border: #f1f5f9;
14
+ --tfo-action-color: #475569;
15
+ --tfo-btn-icon-bg: #f8fafc;
16
+ --tfo-btn-icon-color: #64748b;
17
+ --tfo-analysis-bg: #fff;
18
+ --tfo-alert-color: #1a1a1a;
19
+ --tfo-switch-off: #e2e8f0;
20
+ }
21
+
22
+ :global(.theme-dark) .tfo-root {
23
+ --tfo-text: #f1f5f9;
24
+ --tfo-muted: #94a3b8;
25
+ --tfo-bg: #0f172a;
26
+ --tfo-panel-bg: rgba(15, 23, 42, 0.85);
27
+ --tfo-panel-border: rgba(255, 255, 255, 0.08);
28
+ --tfo-metric-bg: rgba(255, 255, 255, 0.05);
29
+ --tfo-metric-border: rgba(255, 255, 255, 0.08);
30
+ --tfo-action-bg: rgba(255, 255, 255, 0.04);
31
+ --tfo-action-border: rgba(255, 255, 255, 0.08);
32
+ --tfo-action-color: #94a3b8;
33
+ --tfo-btn-icon-bg: rgba(255, 255, 255, 0.06);
34
+ --tfo-btn-icon-color: #94a3b8;
35
+ --tfo-analysis-bg: rgba(15, 23, 42, 0.6);
36
+ --tfo-alert-color: #e2e8f0;
37
+ --tfo-switch-off: #334155;
38
+ }
39
+
40
+ .tfo-container {
41
+ display: grid;
42
+ grid-template-columns: 1fr 380px;
43
+ gap: 3rem;
44
+ padding: 3rem;
45
+ max-width: 1300px;
46
+ margin: 2rem auto;
47
+ color: var(--tfo-text);
48
+ background: var(--tfo-bg);
49
+ border-radius: 3rem;
50
+ border: 1px solid rgba(0, 0, 0, 0.05);
51
+ box-shadow: 0 40px 80px rgba(0, 0, 0, 0.08);
52
+ position: relative;
53
+ overflow: hidden;
54
+ }
55
+
56
+ :global(.theme-dark) .tfo-container {
57
+ border-color: rgba(255, 255, 255, 0.06);
58
+ }
59
+
60
+ .tfo-container::before {
61
+ content: '';
62
+ position: absolute;
63
+ top: -20%;
64
+ right: -10%;
65
+ width: 60%;
66
+ height: 60%;
67
+ background: radial-gradient(circle at center, rgba(254, 60, 114, 0.08) 0%, transparent 70%);
68
+ pointer-events: none;
69
+ }
70
+
71
+ @media (max-width: 1200px) {
72
+ .tfo-container {
73
+ grid-template-columns: 1fr;
74
+ gap: 2rem;
75
+ padding: 2rem;
76
+ margin: 1rem;
77
+ border-radius: 2rem;
78
+ }
79
+ .tfo-sidebar { order: 2; }
80
+ .tfo-editor { order: 1; }
81
+ }
82
+
83
+ @media (max-width: 640px) {
84
+ .tfo-container {
85
+ padding: 1.25rem;
86
+ margin: 0.5rem;
87
+ gap: 1.5rem;
88
+ border-radius: 1.5rem;
89
+ }
90
+ .tfo-panel {
91
+ padding: 1.25rem;
92
+ border-radius: 20px;
93
+ }
94
+ .tfo-analysis-board { margin-top: 1.5rem; }
95
+ .tfo-alert { font-size: 0.9rem; }
96
+ }
97
+
98
+ .tfo-editor {
99
+ display: flex;
100
+ flex-direction: column;
101
+ gap: 2rem;
102
+ min-width: 0;
103
+ }
104
+
105
+ .tfo-simulator-wrapper {
106
+ position: relative;
107
+ width: 100%;
108
+ max-width: 380px;
109
+ margin: 0 auto;
110
+ }
111
+
112
+ .tfo-sidebar {
113
+ display: flex;
114
+ flex-direction: column;
115
+ gap: 1.5rem;
116
+ }
117
+
118
+ .tfo-panel {
119
+ background: var(--tfo-panel-bg);
120
+ backdrop-filter: blur(20px);
121
+ border: 1px solid var(--tfo-panel-border);
122
+ border-radius: 28px;
123
+ padding: 1.8rem;
124
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.03), 0 1px 1px rgba(0, 0, 0, 0.01);
125
+ transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
126
+ }
127
+
128
+ .tfo-panel:hover {
129
+ box-shadow: 0 20px 50px rgba(0, 0, 0, 0.07);
130
+ transform: translateY(-4px);
131
+ border-color: rgba(253, 41, 123, 0.1);
132
+ }
133
+
134
+ .tfo-panel h3 {
135
+ font-size: 0.75rem;
136
+ margin: 0 0 1.2rem;
137
+ color: var(--tfo-pink);
138
+ text-transform: uppercase;
139
+ letter-spacing: 1.2px;
140
+ font-weight: 800;
141
+ }
142
+
143
+ .tfo-control-group {
144
+ display: flex;
145
+ flex-direction: column;
146
+ gap: 0.8rem;
147
+ margin-bottom: 1.2rem;
148
+ }
149
+
150
+ .tfo-control-group label {
151
+ font-size: 0.85rem;
152
+ font-weight: 600;
153
+ color: var(--tfo-muted);
154
+ display: flex;
155
+ justify-content: space-between;
156
+ }
157
+
158
+ input[type="range"] {
159
+ width: 100%;
160
+ accent-color: var(--tfo-pink);
161
+ }
162
+
163
+ .tfo-toggles-grid {
164
+ display: flex;
165
+ flex-direction: column;
166
+ gap: 1.2rem;
167
+ }
168
+
169
+ .tfo-switch-item {
170
+ display: flex;
171
+ align-items: center;
172
+ justify-content: space-between;
173
+ cursor: pointer;
174
+ padding: 0.5rem 0;
175
+ }
176
+
177
+ .tfo-switch-info {
178
+ display: flex;
179
+ flex-direction: column;
180
+ gap: 0.2rem;
181
+ }
182
+
183
+ .tfo-switch-label {
184
+ font-size: 0.95rem;
185
+ font-weight: 700;
186
+ color: var(--tfo-text);
187
+ transition: color 0.2s;
188
+ }
189
+
190
+ .tfo-switch-item:hover .tfo-switch-label { color: var(--tfo-pink); }
191
+
192
+ .tfo-switch-desc {
193
+ font-size: 0.75rem;
194
+ color: var(--tfo-muted);
195
+ }
196
+
197
+ .tfo-switch-wrapper {
198
+ position: relative;
199
+ display: inline-block;
200
+ width: 44px;
201
+ height: 24px;
202
+ flex-shrink: 0;
203
+ }
204
+
205
+ .tfo-switch-wrapper input {
206
+ opacity: 0;
207
+ width: 0;
208
+ height: 0;
209
+ }
210
+
211
+ .tfo-track {
212
+ position: absolute;
213
+ cursor: pointer;
214
+ inset: 0;
215
+ background-color: var(--tfo-switch-off);
216
+ transition: 0.4s;
217
+ border-radius: 24px;
218
+ }
219
+
220
+ .tfo-track::before {
221
+ position: absolute;
222
+ content: "";
223
+ height: 18px;
224
+ width: 18px;
225
+ left: 3px;
226
+ bottom: 3px;
227
+ background-color: white;
228
+ transition: 0.4s;
229
+ border-radius: 50%;
230
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
231
+ }
232
+
233
+ input:checked + .tfo-track { background: var(--tfo-gradient); }
234
+ input:checked + .tfo-track::before { transform: translateX(20px); }
235
+
236
+ .tfo-metrics-grid {
237
+ display: grid;
238
+ grid-template-columns: repeat(3, 1fr);
239
+ gap: 0.8rem;
240
+ margin-top: 0.5rem;
241
+ }
242
+
243
+ @media (max-width: 480px) {
244
+ .tfo-metrics-grid { grid-template-columns: repeat(2, 1fr); }
245
+ }
246
+
247
+ .tfo-metric-card {
248
+ background: var(--tfo-metric-bg);
249
+ padding: 0.8rem 0.4rem;
250
+ border-radius: 16px;
251
+ display: flex;
252
+ flex-direction: column;
253
+ align-items: center;
254
+ text-align: center;
255
+ border: 1px solid var(--tfo-metric-border);
256
+ transition: all 0.3s ease;
257
+ min-width: 0;
258
+ overflow: hidden;
259
+ }
260
+
261
+ .tfo-metric-card:hover {
262
+ border-color: var(--tfo-pink);
263
+ box-shadow: 0 4px 12px rgba(253, 41, 123, 0.05);
264
+ transform: scale(1.05);
265
+ }
266
+
267
+ .tfo-metric-value {
268
+ font-size: 0.85rem;
269
+ font-weight: 800;
270
+ color: var(--tfo-pink);
271
+ margin-bottom: 2px;
272
+ white-space: nowrap;
273
+ overflow: hidden;
274
+ text-overflow: ellipsis;
275
+ max-width: 100%;
276
+ }
277
+
278
+ .tfo-metric-label {
279
+ font-size: 0.65rem;
280
+ text-transform: uppercase;
281
+ letter-spacing: 0.5px;
282
+ color: var(--tfo-muted);
283
+ font-weight: 600;
284
+ }
285
+
286
+ .tfo-actions-panel { padding: 1.2rem; }
287
+
288
+ .tfo-action-grid {
289
+ display: grid;
290
+ grid-template-columns: 1fr 1fr;
291
+ gap: 1rem;
292
+ }
293
+
294
+ .tfo-action-btn {
295
+ display: flex;
296
+ flex-direction: column;
297
+ align-items: center;
298
+ gap: 0.6rem;
299
+ padding: 1rem 0.5rem;
300
+ background: var(--tfo-action-bg);
301
+ border: 1.5px solid var(--tfo-action-border);
302
+ border-radius: 16px;
303
+ color: var(--tfo-action-color);
304
+ cursor: pointer;
305
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
306
+ }
307
+
308
+ .tfo-btn-icon {
309
+ width: 40px;
310
+ height: 40px;
311
+ background: var(--tfo-btn-icon-bg);
312
+ border-radius: 12px;
313
+ display: flex;
314
+ align-items: center;
315
+ justify-content: center;
316
+ color: var(--tfo-btn-icon-color);
317
+ transition: all 0.3s;
318
+ }
319
+
320
+ .tfo-action-btn span {
321
+ font-size: 0.8rem;
322
+ font-weight: 700;
323
+ }
324
+
325
+ .tfo-action-btn:hover {
326
+ border-color: var(--tfo-pink);
327
+ transform: translateY(-4px);
328
+ box-shadow: 0 10px 20px rgba(253, 41, 123, 0.1);
329
+ }
330
+
331
+ .tfo-action-btn:hover .tfo-btn-icon {
332
+ background: #fff5f7;
333
+ color: var(--tfo-pink);
334
+ }
335
+
336
+ :global(.theme-dark) .tfo-action-btn:hover .tfo-btn-icon {
337
+ background: rgba(253, 41, 123, 0.15);
338
+ color: var(--tfo-pink);
339
+ }
340
+
341
+ .tfo-action-btn.is-active {
342
+ background: #fff5f7;
343
+ border-color: var(--tfo-pink);
344
+ color: var(--tfo-pink);
345
+ }
346
+
347
+ :global(.theme-dark) .tfo-action-btn.is-active {
348
+ background: rgba(253, 41, 123, 0.1);
349
+ }
350
+
351
+ .tfo-action-btn.is-active .tfo-btn-icon {
352
+ background: var(--tfo-pink);
353
+ color: white;
354
+ }
355
+
356
+ .tfo-export-desc {
357
+ font-size: 11px;
358
+ margin-bottom: 1rem;
359
+ color: var(--tfo-muted);
360
+ }
361
+
362
+ .tfo-export-btn {
363
+ width: 100%;
364
+ padding: 1.2rem;
365
+ background: var(--tfo-gradient);
366
+ border: none;
367
+ border-radius: 16px;
368
+ color: white;
369
+ font-weight: 800;
370
+ font-size: 1.05rem;
371
+ cursor: pointer;
372
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
373
+ box-shadow: 0 10px 25px rgba(253, 41, 123, 0.2);
374
+ }
375
+
376
+ .tfo-export-btn:hover {
377
+ transform: translateY(-3px);
378
+ box-shadow: 0 15px 35px rgba(253, 41, 123, 0.35);
379
+ filter: brightness(1.05);
380
+ }
381
+
382
+ .tfo-analysis-board {
383
+ display: flex;
384
+ flex-direction: column;
385
+ gap: 1rem;
386
+ margin-top: 2rem;
387
+ width: 100%;
388
+ }
389
+
390
+ .tfo-analysis-col {
391
+ display: none;
392
+ background: var(--tfo-analysis-bg);
393
+ border-radius: 20px;
394
+ padding: 1rem;
395
+ border: 1px solid rgba(0, 0, 0, 0.05);
396
+ flex-direction: column;
397
+ gap: 0.5rem;
398
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.02);
399
+ }
400
+
401
+ :global(.theme-dark) .tfo-analysis-col {
402
+ border-color: rgba(255, 255, 255, 0.06);
403
+ }
404
+
405
+ .tfo-col-header {
406
+ display: flex;
407
+ align-items: center;
408
+ gap: 0.6rem;
409
+ font-size: 0.75rem;
410
+ font-weight: 800;
411
+ text-transform: uppercase;
412
+ letter-spacing: 0.5px;
413
+ opacity: 0.7;
414
+ margin-bottom: 0.2rem;
415
+ }
416
+
417
+ .tfo-col-icon {
418
+ width: 18px;
419
+ height: 18px;
420
+ display: flex;
421
+ align-items: center;
422
+ justify-content: center;
423
+ }
424
+
425
+ .tfo-analysis-col--success .tfo-col-header { color: #10b981; }
426
+ .tfo-analysis-col--warning .tfo-col-header { color: #f59e0b; }
427
+ .tfo-analysis-col--error .tfo-col-header { color: #ef4444; }
428
+
429
+ .tfo-alerts-stack {
430
+ display: flex;
431
+ flex-direction: column;
432
+ gap: 0.5rem;
433
+ }
434
+
435
+ .tfo-alert {
436
+ display: flex;
437
+ align-items: flex-start;
438
+ gap: 0.8rem;
439
+ padding: 0.6rem 0;
440
+ font-size: 0.85rem;
441
+ font-weight: 600;
442
+ color: var(--tfo-alert-color);
443
+ border-bottom: 1px solid rgba(0, 0, 0, 0.03);
444
+ line-height: 1.4;
445
+ overflow-wrap: break-word;
446
+ }
447
+
448
+ :global(.theme-dark) .tfo-alert {
449
+ border-bottom-color: rgba(255, 255, 255, 0.04);
450
+ }
451
+
452
+ .tfo-alert:last-child { border-bottom: none; }
453
+
454
+ .tfo-alert::before {
455
+ content: '';
456
+ margin-top: 0.6rem;
457
+ width: 8px;
458
+ height: 8px;
459
+ border-radius: 50%;
460
+ flex-shrink: 0;
461
+ }
462
+
463
+ .tfo-alert--success::before {
464
+ background: #10b981;
465
+ box-shadow: 0 0 10px rgba(16, 185, 129, 0.4);
466
+ }
467
+
468
+ .tfo-alert--warning::before {
469
+ background: #f59e0b;
470
+ box-shadow: 0 0 10px rgba(245, 158, 11, 0.4);
471
+ }
472
+
473
+ .tfo-alert--error::before {
474
+ background: #ef4444;
475
+ box-shadow: 0 0 10px rgba(239, 68, 68, 0.4);
476
+ }
477
+
478
+ .tfo-ai-loader {
479
+ position: absolute;
480
+ inset: 0;
481
+ background: rgba(255, 255, 255, 0.85);
482
+ backdrop-filter: blur(12px);
483
+ z-index: 5;
484
+ display: flex;
485
+ align-items: center;
486
+ justify-content: center;
487
+ border-radius: 40px;
488
+ }
489
+
490
+ :global(.theme-dark) .tfo-ai-loader {
491
+ background: rgba(15, 23, 42, 0.85);
492
+ }
493
+
494
+ .tfo-loader-content {
495
+ display: flex;
496
+ flex-direction: column;
497
+ align-items: center;
498
+ gap: 1.5rem;
499
+ color: var(--tfo-pink);
500
+ }
501
+
502
+ .tfo-scanner-bar {
503
+ position: absolute;
504
+ top: 0;
505
+ left: 0;
506
+ width: 100%;
507
+ height: 4px;
508
+ background: var(--tfo-gradient);
509
+ box-shadow: 0 0 20px var(--tfo-pink);
510
+ animation: tfo-scan 2s cubic-bezier(0.4, 0, 0.2, 1) infinite;
511
+ z-index: 1001;
512
+ }
513
+
514
+ @keyframes tfo-scan {
515
+ 0% { top: 10%; }
516
+ 50% { top: 90%; }
517
+ 100% { top: 10%; }
518
+ }
519
+
520
+ .tfo-hidden {
521
+ display: none;
522
+ }
523
+
524
+ .tfo-device {
525
+ width: 100%;
526
+ aspect-ratio: 9/19;
527
+ background: #fff;
528
+ display: flex;
529
+ flex-direction: column;
530
+ position: relative;
531
+ user-select: none;
532
+ border-radius: 54px;
533
+ border: 14px solid #1a1a1a;
534
+ box-shadow: 0 50px 100px rgba(0, 0, 0, 0.15);
535
+ overflow: hidden;
536
+ }
537
+
538
+ @media (max-width: 640px) {
539
+ .tfo-device {
540
+ border-width: 8px;
541
+ border-radius: 36px;
542
+ }
543
+
544
+ .tfo-status-bar {
545
+ height: 34px;
546
+ padding: 0 15px;
547
+ }
548
+
549
+ .tfo-dynamic-island {
550
+ width: 80px;
551
+ height: 20px;
552
+ }
553
+
554
+ .tfo-app-header {
555
+ height: 44px;
556
+ padding: 0 15px;
557
+ }
558
+
559
+ .tfo-card-info {
560
+ padding-bottom: 15px;
561
+ }
562
+
563
+ .tfo-name {
564
+ font-size: 22px;
565
+ }
566
+
567
+ .tfo-job {
568
+ font-size: 14px;
569
+ }
570
+
571
+ .tfo-tags {
572
+ font-size: 10px;
573
+ }
574
+ }
575
+
576
+ .tfo-status-bar {
577
+ height: 44px;
578
+ padding: 0 20px;
579
+ display: flex;
580
+ justify-content: space-between;
581
+ align-items: center;
582
+ font-size: 14px;
583
+ font-weight: 600;
584
+ color: #1a1a1a;
585
+ }
586
+
587
+ .tfo-dynamic-island {
588
+ width: 100px;
589
+ height: 25px;
590
+ background: #000;
591
+ border-radius: 20px;
592
+ }
593
+
594
+ .tfo-status-icons {
595
+ display: flex;
596
+ gap: 6px;
597
+ }
598
+
599
+ .tfo-app-header {
600
+ height: 50px;
601
+ display: flex;
602
+ justify-content: space-between;
603
+ align-items: center;
604
+ padding: 0 20px;
605
+ border-bottom: 1px solid #f1f5f9;
606
+ background: #fff;
607
+ }
608
+
609
+ .tfo-logo {
610
+ flex: 1;
611
+ display: flex;
612
+ justify-content: center;
613
+ }
614
+
615
+ .tfo-icon-placeholder, .tfo-settings-icon {
616
+ width: 40px;
617
+ height: 40px;
618
+ display: flex;
619
+ align-items: center;
620
+ justify-content: center;
621
+ color: #cbd5e1;
622
+ }
623
+
624
+ .tfo-card-container {
625
+ flex: 1;
626
+ padding: 12px;
627
+ display: flex;
628
+ align-items: center;
629
+ justify-content: center;
630
+ background: #fff;
631
+ }
632
+
633
+ .tfo-main-card {
634
+ position: relative;
635
+ width: 100%;
636
+ height: 100%;
637
+ border-radius: 24px;
638
+ overflow: hidden;
639
+ background: #000;
640
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
641
+ }
642
+
643
+ .tfo-canvas {
644
+ width: 100%;
645
+ height: 100%;
646
+ object-fit: cover;
647
+ }
648
+
649
+ .tfo-card-overlay {
650
+ position: absolute;
651
+ inset: 0;
652
+ display: flex;
653
+ flex-direction: column;
654
+ justify-content: space-between;
655
+ padding: 12px;
656
+ pointer-events: none;
657
+ background: linear-gradient(to top, rgba(0, 0, 0, 0.6) 0%, transparent 40%),
658
+ linear-gradient(to bottom, rgba(0, 0, 0, 0.3) 0%, transparent 15%);
659
+ }
660
+
661
+ .tfo-progress {
662
+ display: flex;
663
+ gap: 4px;
664
+ }
665
+
666
+ .tfo-segment {
667
+ flex: 1;
668
+ height: 3px;
669
+ background: rgba(255, 255, 255, 0.4);
670
+ border-radius: 2px;
671
+ }
672
+
673
+ .tfo-segment--active { background: #fff; }
674
+
675
+ .tfo-card-info {
676
+ color: #fff;
677
+ padding-bottom: 20px;
678
+ z-index: 20;
679
+ }
680
+
681
+ .tfo-primary-info {
682
+ display: flex;
683
+ align-items: center;
684
+ gap: 8px;
685
+ margin-bottom: 4px;
686
+ }
687
+
688
+ .tfo-badge {
689
+ width: 20px;
690
+ height: 20px;
691
+ background: #1da1f2;
692
+ border-radius: 50%;
693
+ display: flex;
694
+ align-items: center;
695
+ justify-content: center;
696
+ }
697
+
698
+ .tfo-name {
699
+ font-size: 28px;
700
+ font-weight: 800;
701
+ margin: 0;
702
+ }
703
+
704
+ .tfo-secondary-info {
705
+ display: flex;
706
+ flex-direction: column;
707
+ gap: 4px;
708
+ }
709
+
710
+ .tfo-job {
711
+ font-size: 16px;
712
+ font-weight: 600;
713
+ }
714
+
715
+ .tfo-tags {
716
+ display: flex;
717
+ gap: 12px;
718
+ font-size: 12px;
719
+ font-weight: 500;
720
+ opacity: 0.9;
721
+ }
722
+
723
+ .tfo-tag {
724
+ display: flex;
725
+ align-items: center;
726
+ gap: 4px;
727
+ }
728
+
729
+ .tfo-device-actions {
730
+ height: 100px;
731
+ display: flex;
732
+ justify-content: space-evenly;
733
+ align-items: center;
734
+ padding: 0 10px;
735
+ background: #fff;
736
+ }
737
+
738
+ .tfo-btn-circular {
739
+ width: 44px;
740
+ height: 44px;
741
+ border-radius: 50%;
742
+ background: #fff;
743
+ border: none;
744
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
745
+ display: flex;
746
+ align-items: center;
747
+ justify-content: center;
748
+ cursor: pointer;
749
+ transition: all 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
750
+ }
751
+
752
+ .tfo-btn-nope, .tfo-btn-like {
753
+ width: 54px;
754
+ height: 54px;
755
+ box-shadow: 0 6px 15px rgba(0, 0, 0, 0.12);
756
+ }
757
+
758
+ .tfo-btn-circular:active { transform: scale(0.92); }
759
+ .tfo-btn-circular:hover {
760
+ transform: translateY(-2px);
761
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15);
762
+ }
763
+
764
+ .tfo-nav-bar {
765
+ height: 60px;
766
+ display: flex;
767
+ justify-content: space-evenly;
768
+ align-items: center;
769
+ border-top: 1px solid #f1f5f9;
770
+ color: #94a3b8;
771
+ background: #fff;
772
+ }
773
+
774
+ .tfo-nav-item--active { color: #FD297B; }
775
+
776
+ .tfo-grid-overlay {
777
+ position: absolute;
778
+ inset: 0;
779
+ display: grid;
780
+ grid-template-columns: repeat(3, 1fr);
781
+ grid-template-rows: repeat(3, 1fr);
782
+ pointer-events: none;
783
+ z-index: 1;
784
+ }
785
+
786
+ .tfo-grid-overlay div {
787
+ border: 0.5px solid rgba(255, 255, 255, 0.3);
788
+ }
789
+
790
+ .tfo-deadzones {
791
+ position: absolute;
792
+ inset: 0;
793
+ pointer-events: none;
794
+ z-index: 2;
795
+ }
796
+
797
+ .tfo-deadzone {
798
+ position: absolute;
799
+ left: 0;
800
+ width: 100%;
801
+ background: rgba(255, 0, 0, 0.2);
802
+ border: 2px dashed rgba(255, 0, 0, 0.5);
803
+ display: flex;
804
+ align-items: center;
805
+ justify-content: center;
806
+ color: #fff;
807
+ font-size: 10px;
808
+ font-weight: 700;
809
+ text-transform: uppercase;
810
+ }
811
+
812
+ .tfo-deadzone--top {
813
+ top: 0;
814
+ height: 15%;
815
+ }
816
+
817
+ .tfo-deadzone--bottom {
818
+ bottom: 0;
819
+ height: 28%;
820
+ }
821
+
822
+ .tfo-deadzone span {
823
+ background: #ff4458;
824
+ padding: 2px 6px;
825
+ border-radius: 4px;
826
+ }
827
+
828
+ .tfo-reset-btn {
829
+ background: none;
830
+ border: none;
831
+ color: #94a3b8;
832
+ cursor: pointer;
833
+ padding: 8px;
834
+ border-radius: 50%;
835
+ transition: all 0.3s ease;
836
+ display: flex;
837
+ align-items: center;
838
+ justify-content: center;
839
+ }
840
+
841
+ .tfo-reset-btn:hover {
842
+ background: #f1f5f9;
843
+ color: var(--tfo-pink);
844
+ }
845
+
846
+ .tfo-upload-overlay {
847
+ position: absolute;
848
+ inset: 0;
849
+ background: #0a0a0a;
850
+ display: flex;
851
+ flex-direction: column;
852
+ align-items: center;
853
+ justify-content: center;
854
+ color: white;
855
+ cursor: pointer;
856
+ z-index: 3;
857
+ transition: all 0.4s ease;
858
+ padding: 2rem;
859
+ text-align: center;
860
+ }
861
+
862
+ .tfo-upload-overlay.tfo-hidden {
863
+ opacity: 0;
864
+ pointer-events: none;
865
+ transform: scale(1.1);
866
+ }
867
+
868
+ .tfo-upload-circle {
869
+ width: 80px;
870
+ height: 80px;
871
+ background: rgba(255, 255, 255, 0.05);
872
+ border: 2px dashed rgba(255, 255, 255, 0.2);
873
+ border-radius: 50%;
874
+ display: flex;
875
+ align-items: center;
876
+ justify-content: center;
877
+ margin-bottom: 1.5rem;
878
+ transition: all 0.3s ease;
879
+ }
880
+
881
+ .tfo-main-card:hover .tfo-upload-circle {
882
+ background: rgba(253, 41, 123, 0.1);
883
+ border-color: var(--tfo-pink);
884
+ color: var(--tfo-pink);
885
+ transform: translateY(-5px);
886
+ }
887
+
888
+ .tfo-upload-overlay h3 {
889
+ margin: 0;
890
+ font-size: 1.2rem;
891
+ font-weight: 700;
892
+ }
893
+
894
+ .tfo-upload-overlay p {
895
+ margin: 0.5rem 0 0;
896
+ font-size: 0.9rem;
897
+ opacity: 0.5;
898
+ }