@whykusanagi/corrupted-theme 0.1.0 → 0.1.2

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,933 @@
1
+ /* extensions.css — Extended Components for Corrupted Theme */
2
+ /*
3
+ * Additional components built for production use on whykusanagi.xyz
4
+ * These extend the core theme with gallery, lightbox, social links, and countdown widgets
5
+ *
6
+ * Components:
7
+ * - Gallery System (grid layout, filtering, items)
8
+ * - Lightbox (fullscreen image viewer)
9
+ * - Social Links (link-in-bio style layout)
10
+ * - Countdown Widget (event countdown with shapes)
11
+ * - NSFW Content Blur (content warning overlay)
12
+ */
13
+
14
+ /* ========== GALLERY SYSTEM ========== */
15
+ /*
16
+ * Responsive gallery grid with filtering support.
17
+ * Works with gallery.js for interactive filtering and lightbox.
18
+ *
19
+ * Usage:
20
+ * <div class="gallery-container">
21
+ * <div class="gallery-item" data-tags="category1">
22
+ * <img src="..." alt="...">
23
+ * <div class="gallery-caption">Caption</div>
24
+ * </div>
25
+ * </div>
26
+ */
27
+
28
+ .gallery-container {
29
+ display: grid;
30
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
31
+ gap: var(--spacing-lg);
32
+ }
33
+
34
+ .gallery-container.compact {
35
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
36
+ gap: var(--spacing-md);
37
+ }
38
+
39
+ .gallery-container.large {
40
+ grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
41
+ gap: var(--spacing-xl);
42
+ }
43
+
44
+ .gallery-item {
45
+ background: var(--glass);
46
+ padding: var(--spacing-md);
47
+ border-radius: var(--radius-lg);
48
+ border: 1px solid var(--border);
49
+ backdrop-filter: blur(10px);
50
+ transition: all var(--transition-normal);
51
+ overflow: hidden;
52
+ position: relative;
53
+ }
54
+
55
+ .gallery-item:hover {
56
+ transform: translateY(-4px);
57
+ border-color: var(--border-light);
58
+ box-shadow: 0 12px 40px rgba(217, 79, 144, 0.2);
59
+ }
60
+
61
+ .gallery-item img {
62
+ width: 100%;
63
+ height: auto;
64
+ border-radius: var(--radius-md);
65
+ cursor: pointer;
66
+ transition: transform var(--transition-normal);
67
+ display: block;
68
+ }
69
+
70
+ .gallery-item:hover img {
71
+ transform: scale(1.02);
72
+ }
73
+
74
+ .gallery-caption {
75
+ margin-top: var(--spacing-sm);
76
+ font-size: 0.95rem;
77
+ color: var(--text-secondary);
78
+ line-height: 1.5;
79
+ }
80
+
81
+ .gallery-caption .title {
82
+ color: var(--text);
83
+ font-weight: 600;
84
+ margin-bottom: var(--spacing-xs);
85
+ }
86
+
87
+ .gallery-caption .meta {
88
+ font-size: 0.85rem;
89
+ color: var(--text-muted);
90
+ }
91
+
92
+ /* Gallery item with aspect ratio */
93
+ .gallery-item.square img {
94
+ aspect-ratio: 1 / 1;
95
+ object-fit: cover;
96
+ }
97
+
98
+ .gallery-item.portrait img {
99
+ aspect-ratio: 3 / 4;
100
+ object-fit: cover;
101
+ }
102
+
103
+ .gallery-item.landscape img {
104
+ aspect-ratio: 16 / 9;
105
+ object-fit: cover;
106
+ }
107
+
108
+ /* ========== FILTER BAR ========== */
109
+ /*
110
+ * Category filter buttons for gallery filtering.
111
+ * Works with gallery.js for interactive filtering.
112
+ *
113
+ * Usage:
114
+ * <div class="filter-bar">
115
+ * <button class="btn filter-btn active" data-filter="all">All</button>
116
+ * <button class="btn filter-btn" data-filter="photos">Photos</button>
117
+ * </div>
118
+ */
119
+
120
+ .filter-bar {
121
+ display: flex;
122
+ flex-wrap: wrap;
123
+ justify-content: center;
124
+ gap: var(--spacing-sm);
125
+ margin-bottom: var(--spacing-xl);
126
+ }
127
+
128
+ .filter-bar.left {
129
+ justify-content: flex-start;
130
+ }
131
+
132
+ .filter-bar.right {
133
+ justify-content: flex-end;
134
+ }
135
+
136
+ .filter-btn {
137
+ background: var(--glass);
138
+ border: 1px solid var(--border);
139
+ color: var(--text-secondary);
140
+ padding: var(--spacing-sm) var(--spacing-md);
141
+ border-radius: var(--radius-md);
142
+ font-size: 0.9rem;
143
+ font-weight: 500;
144
+ cursor: pointer;
145
+ transition: all var(--transition-fast);
146
+ }
147
+
148
+ .filter-btn:hover {
149
+ border-color: var(--accent);
150
+ color: var(--accent);
151
+ background: rgba(217, 79, 144, 0.1);
152
+ }
153
+
154
+ .filter-btn.active {
155
+ background: var(--gradient-accent);
156
+ border-color: var(--accent);
157
+ color: #fff;
158
+ }
159
+
160
+ /* ========== LIGHTBOX ========== */
161
+ /*
162
+ * Fullscreen image viewer with keyboard navigation.
163
+ * Works with gallery.js for integration.
164
+ *
165
+ * Usage:
166
+ * <div class="lightbox" id="lightbox">
167
+ * <button class="lightbox-close">&times;</button>
168
+ * <button class="lightbox-prev"><i class="fas fa-chevron-left"></i></button>
169
+ * <img class="lightbox-image" src="" alt="">
170
+ * <button class="lightbox-next"><i class="fas fa-chevron-right"></i></button>
171
+ * <div class="lightbox-caption"></div>
172
+ * </div>
173
+ */
174
+
175
+ .lightbox {
176
+ position: fixed;
177
+ inset: 0;
178
+ background: rgba(0, 0, 0, 0.95);
179
+ backdrop-filter: blur(10px);
180
+ z-index: var(--z-modal);
181
+ display: flex;
182
+ align-items: center;
183
+ justify-content: center;
184
+ opacity: 0;
185
+ visibility: hidden;
186
+ transition: all var(--transition-normal);
187
+ }
188
+
189
+ .lightbox.active {
190
+ opacity: 1;
191
+ visibility: visible;
192
+ }
193
+
194
+ .lightbox-image {
195
+ max-width: 90vw;
196
+ max-height: 85vh;
197
+ object-fit: contain;
198
+ border-radius: var(--radius-lg);
199
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
200
+ transform: scale(0.9);
201
+ transition: transform var(--transition-normal);
202
+ }
203
+
204
+ .lightbox.active .lightbox-image {
205
+ transform: scale(1);
206
+ }
207
+
208
+ .lightbox-close {
209
+ position: absolute;
210
+ top: var(--spacing-lg);
211
+ right: var(--spacing-lg);
212
+ background: var(--glass);
213
+ border: 1px solid var(--border);
214
+ color: var(--text);
215
+ width: 48px;
216
+ height: 48px;
217
+ border-radius: 50%;
218
+ font-size: 1.5rem;
219
+ cursor: pointer;
220
+ display: flex;
221
+ align-items: center;
222
+ justify-content: center;
223
+ transition: all var(--transition-fast);
224
+ z-index: 10;
225
+ }
226
+
227
+ .lightbox-close:hover {
228
+ background: var(--accent);
229
+ border-color: var(--accent);
230
+ color: #fff;
231
+ transform: rotate(90deg);
232
+ }
233
+
234
+ .lightbox-prev,
235
+ .lightbox-next {
236
+ position: absolute;
237
+ top: 50%;
238
+ transform: translateY(-50%);
239
+ background: var(--glass);
240
+ border: 1px solid var(--border);
241
+ color: var(--text);
242
+ width: 56px;
243
+ height: 56px;
244
+ border-radius: 50%;
245
+ font-size: 1.25rem;
246
+ cursor: pointer;
247
+ display: flex;
248
+ align-items: center;
249
+ justify-content: center;
250
+ transition: all var(--transition-fast);
251
+ z-index: 10;
252
+ }
253
+
254
+ .lightbox-prev {
255
+ left: var(--spacing-lg);
256
+ }
257
+
258
+ .lightbox-next {
259
+ right: var(--spacing-lg);
260
+ }
261
+
262
+ .lightbox-prev:hover,
263
+ .lightbox-next:hover {
264
+ background: var(--accent);
265
+ border-color: var(--accent);
266
+ color: #fff;
267
+ }
268
+
269
+ .lightbox-prev:disabled,
270
+ .lightbox-next:disabled {
271
+ opacity: 0.3;
272
+ cursor: not-allowed;
273
+ }
274
+
275
+ .lightbox-caption {
276
+ position: absolute;
277
+ bottom: var(--spacing-xl);
278
+ left: 50%;
279
+ transform: translateX(-50%);
280
+ background: var(--glass);
281
+ border: 1px solid var(--border);
282
+ border-radius: var(--radius-lg);
283
+ padding: var(--spacing-md) var(--spacing-lg);
284
+ color: var(--text);
285
+ font-size: 0.95rem;
286
+ text-align: center;
287
+ max-width: 80vw;
288
+ backdrop-filter: blur(10px);
289
+ }
290
+
291
+ .lightbox-counter {
292
+ position: absolute;
293
+ top: var(--spacing-lg);
294
+ left: var(--spacing-lg);
295
+ background: var(--glass);
296
+ border: 1px solid var(--border);
297
+ border-radius: var(--radius-md);
298
+ padding: var(--spacing-sm) var(--spacing-md);
299
+ color: var(--text-secondary);
300
+ font-size: 0.875rem;
301
+ backdrop-filter: blur(10px);
302
+ }
303
+
304
+ /* ========== NSFW CONTENT BLUR ========== */
305
+ /*
306
+ * Content warning overlay with blur effect.
307
+ * Click to reveal, integrates with lightbox.
308
+ *
309
+ * Usage:
310
+ * <div class="gallery-item nsfw-content">
311
+ * <img src="..." alt="...">
312
+ * </div>
313
+ */
314
+
315
+ .nsfw-content {
316
+ position: relative;
317
+ overflow: hidden;
318
+ cursor: pointer;
319
+ }
320
+
321
+ .nsfw-content img {
322
+ filter: blur(20px);
323
+ transition: filter var(--transition-normal);
324
+ pointer-events: none;
325
+ }
326
+
327
+ .nsfw-content::before {
328
+ content: '';
329
+ position: absolute;
330
+ inset: 0;
331
+ background: rgba(0, 0, 0, 0.6);
332
+ z-index: 10;
333
+ transition: all var(--transition-normal);
334
+ }
335
+
336
+ .nsfw-content::after {
337
+ content: attr(data-warning);
338
+ position: absolute;
339
+ top: 50%;
340
+ left: 50%;
341
+ transform: translate(-50%, -50%);
342
+ z-index: 11;
343
+ background: var(--accent);
344
+ color: #fff;
345
+ padding: var(--spacing-md) var(--spacing-lg);
346
+ border-radius: var(--radius-lg);
347
+ font-size: 0.95rem;
348
+ font-weight: 700;
349
+ white-space: nowrap;
350
+ pointer-events: none;
351
+ transition: all var(--transition-normal);
352
+ text-align: center;
353
+ letter-spacing: 0.5px;
354
+ box-shadow: 0 8px 24px rgba(217, 79, 144, 0.4);
355
+ }
356
+
357
+ .nsfw-content[data-warning=""]::after,
358
+ .nsfw-content:not([data-warning])::after {
359
+ content: '18+ Click to View';
360
+ }
361
+
362
+ .nsfw-content:hover::before {
363
+ background: rgba(0, 0, 0, 0.75);
364
+ }
365
+
366
+ .nsfw-content:hover::after {
367
+ transform: translate(-50%, -50%) scale(1.05);
368
+ box-shadow: 0 12px 32px rgba(217, 79, 144, 0.5);
369
+ }
370
+
371
+ /* Revealed state */
372
+ .nsfw-content.revealed img {
373
+ filter: blur(0);
374
+ pointer-events: auto;
375
+ }
376
+
377
+ .nsfw-content.revealed::before,
378
+ .nsfw-content.revealed::after {
379
+ opacity: 0;
380
+ visibility: hidden;
381
+ pointer-events: none;
382
+ }
383
+
384
+ /* NSFW in lightbox - auto reveal */
385
+ .lightbox .nsfw-content img,
386
+ .lightbox.active .lightbox-image.nsfw-revealed {
387
+ filter: blur(0) !important;
388
+ }
389
+
390
+ /* ========== SOCIAL LINKS LIST ========== */
391
+ /*
392
+ * Link-in-bio style social links layout.
393
+ * Perfect for profile pages and link aggregation.
394
+ *
395
+ * Usage:
396
+ * <div class="social-links-container">
397
+ * <img src="..." class="profile-avatar">
398
+ * <h1 class="profile-name">@username</h1>
399
+ * <p class="profile-bio">Bio text</p>
400
+ * <div class="link-list">
401
+ * <a href="..." class="link-item">Twitter</a>
402
+ * </div>
403
+ * </div>
404
+ */
405
+
406
+ .social-links-container {
407
+ display: flex;
408
+ flex-direction: column;
409
+ align-items: center;
410
+ max-width: 500px;
411
+ margin: 0 auto;
412
+ padding: var(--spacing-xl);
413
+ }
414
+
415
+ .profile-avatar {
416
+ width: 140px;
417
+ height: 140px;
418
+ border-radius: 50%;
419
+ border: 4px solid var(--accent);
420
+ box-shadow: 0 0 20px rgba(217, 79, 144, 0.5),
421
+ 0 0 40px rgba(217, 79, 144, 0.3);
422
+ object-fit: cover;
423
+ margin-bottom: var(--spacing-lg);
424
+ transition: all var(--transition-normal);
425
+ }
426
+
427
+ .profile-avatar:hover {
428
+ transform: scale(1.05);
429
+ box-shadow: 0 0 30px rgba(217, 79, 144, 0.6),
430
+ 0 0 60px rgba(217, 79, 144, 0.4);
431
+ }
432
+
433
+ .profile-avatar.sm {
434
+ width: 100px;
435
+ height: 100px;
436
+ border-width: 3px;
437
+ }
438
+
439
+ .profile-avatar.lg {
440
+ width: 180px;
441
+ height: 180px;
442
+ border-width: 5px;
443
+ }
444
+
445
+ .profile-name {
446
+ font-size: 1.75rem;
447
+ font-weight: 700;
448
+ color: var(--text);
449
+ margin-bottom: var(--spacing-sm);
450
+ text-align: center;
451
+ }
452
+
453
+ .profile-bio {
454
+ color: var(--text-secondary);
455
+ text-align: center;
456
+ font-size: 1rem;
457
+ line-height: 1.6;
458
+ margin-bottom: var(--spacing-lg);
459
+ max-width: 400px;
460
+ }
461
+
462
+ .link-list {
463
+ width: 100%;
464
+ display: flex;
465
+ flex-direction: column;
466
+ gap: var(--spacing-md);
467
+ }
468
+
469
+ .link-item {
470
+ background: var(--glass);
471
+ border: 1px solid var(--border);
472
+ padding: var(--spacing-md) var(--spacing-lg);
473
+ border-radius: var(--radius-lg);
474
+ color: var(--text);
475
+ text-align: center;
476
+ text-decoration: none;
477
+ font-size: 1.05rem;
478
+ font-weight: 600;
479
+ transition: all var(--transition-normal);
480
+ display: flex;
481
+ justify-content: center;
482
+ align-items: center;
483
+ gap: var(--spacing-sm);
484
+ backdrop-filter: blur(8px);
485
+ }
486
+
487
+ .link-item:hover {
488
+ background: var(--gradient-accent);
489
+ border-color: var(--accent);
490
+ color: #fff;
491
+ transform: translateY(-3px);
492
+ box-shadow: 0 8px 24px rgba(217, 79, 144, 0.35);
493
+ }
494
+
495
+ .link-item i,
496
+ .link-item svg {
497
+ font-size: 1.2rem;
498
+ }
499
+
500
+ /* Link item variants */
501
+ .link-item.twitter:hover {
502
+ background: linear-gradient(135deg, #1da1f2, #0d8bd9);
503
+ border-color: #1da1f2;
504
+ }
505
+
506
+ .link-item.instagram:hover {
507
+ background: linear-gradient(135deg, #833ab4, #fd1d1d, #fcb045);
508
+ border-color: #833ab4;
509
+ }
510
+
511
+ .link-item.youtube:hover {
512
+ background: linear-gradient(135deg, #ff0000, #cc0000);
513
+ border-color: #ff0000;
514
+ }
515
+
516
+ .link-item.github:hover {
517
+ background: linear-gradient(135deg, #333, #24292e);
518
+ border-color: #333;
519
+ }
520
+
521
+ .link-item.discord:hover {
522
+ background: linear-gradient(135deg, #5865f2, #4752c4);
523
+ border-color: #5865f2;
524
+ }
525
+
526
+ .link-item.twitch:hover {
527
+ background: linear-gradient(135deg, #9146ff, #6441a5);
528
+ border-color: #9146ff;
529
+ }
530
+
531
+ /* ========== COUNTDOWN WIDGET ========== */
532
+ /*
533
+ * Event countdown with configurable shapes and animations.
534
+ * Supports diamond, circle, heart, star, hexagon, octagon shapes.
535
+ *
536
+ * Usage:
537
+ * <div id="countdown-widget"></div>
538
+ * <script>initCountdown({ event: 'kirara' })</script>
539
+ */
540
+
541
+ #countdown-widget {
542
+ display: flex;
543
+ justify-content: center;
544
+ align-items: center;
545
+ min-height: 100vh;
546
+ font-family: inherit;
547
+ color: var(--text);
548
+ }
549
+
550
+ .countdown-container {
551
+ position: relative;
552
+ width: 600px;
553
+ height: 600px;
554
+ margin: auto;
555
+ }
556
+
557
+ /* Shape Container - Base */
558
+ .shape-container {
559
+ position: absolute;
560
+ width: 375px;
561
+ height: 375px;
562
+ top: 50%;
563
+ left: 50%;
564
+ transform: translate(-50%, -50%);
565
+ border: 12px solid var(--accent-dark);
566
+ box-shadow: 0 0 30px rgba(217, 79, 144, 0.4),
567
+ inset 0 0 30px rgba(217, 79, 144, 0.1);
568
+ overflow: hidden;
569
+ z-index: 2;
570
+ background: radial-gradient(circle, rgba(54, 83, 161, 0.6) 10%, rgba(217, 79, 144, 0.6) 60%);
571
+ animation: countdown-pulse 2.5s ease-in-out infinite alternate;
572
+ transition: all var(--transition-normal);
573
+ }
574
+
575
+ .shape-content {
576
+ width: 100%;
577
+ height: 100%;
578
+ display: flex;
579
+ justify-content: center;
580
+ align-items: center;
581
+ position: relative;
582
+ }
583
+
584
+ /* Shape Variants */
585
+ .shape-container.diamond {
586
+ transform: translate(-50%, -50%) rotate(45deg);
587
+ border-radius: var(--radius-xl);
588
+ }
589
+
590
+ .shape-container.diamond .shape-content {
591
+ transform: rotate(-45deg);
592
+ }
593
+
594
+ .shape-container.circle {
595
+ border-radius: 50%;
596
+ }
597
+
598
+ .shape-container.star {
599
+ clip-path: polygon(
600
+ 50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%
601
+ );
602
+ border: none;
603
+ background: var(--glass);
604
+ }
605
+
606
+ .shape-container.star::before {
607
+ content: '';
608
+ position: absolute;
609
+ inset: 8px;
610
+ clip-path: polygon(
611
+ 50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%
612
+ );
613
+ background: radial-gradient(circle, rgba(54, 83, 161, 0.6) 10%, rgba(217, 79, 144, 0.6) 60%);
614
+ }
615
+
616
+ .shape-container.hexagon {
617
+ clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);
618
+ border: none;
619
+ border-radius: 0;
620
+ }
621
+
622
+ .shape-container.octagon {
623
+ clip-path: polygon(30% 0%, 70% 0%, 100% 30%, 100% 70%, 70% 100%, 30% 100%, 0% 70%, 0% 30%);
624
+ border: none;
625
+ border-radius: 0;
626
+ }
627
+
628
+ .shape-container.heart {
629
+ clip-path: path('M187.5,56.25 C150,18.75 93.75,18.75 56.25,56.25 C18.75,93.75 18.75,168.75 56.25,225 L187.5,356.25 L318.75,225 C356.25,168.75 356.25,93.75 318.75,56.25 C281.25,18.75 225,18.75 187.5,56.25 Z');
630
+ border: none;
631
+ border-radius: 0;
632
+ }
633
+
634
+ /* Character Image */
635
+ .countdown-character {
636
+ position: absolute;
637
+ width: 150%;
638
+ height: 150%;
639
+ top: 50%;
640
+ left: 50%;
641
+ transform: translate(-50%, -50%) scale(0.9);
642
+ object-fit: cover;
643
+ object-position: center;
644
+ z-index: 2;
645
+ transition: transform var(--transition-normal);
646
+ }
647
+
648
+ /* Overlay Image (e.g., tentacles, effects) */
649
+ .countdown-overlay-wrapper {
650
+ position: absolute;
651
+ top: 50%;
652
+ left: 50%;
653
+ width: 150%;
654
+ height: 150%;
655
+ transform: translate(-50%, -50%) scale(0.9);
656
+ z-index: 1;
657
+ overflow: hidden;
658
+ }
659
+
660
+ .countdown-overlay-wrapper.front {
661
+ z-index: 3;
662
+ }
663
+
664
+ .countdown-overlay-img {
665
+ width: 100%;
666
+ height: 100%;
667
+ object-fit: cover;
668
+ }
669
+
670
+ .countdown-overlay-img.animate-float {
671
+ animation: countdown-float 4s ease-in-out infinite alternate;
672
+ }
673
+
674
+ /* Countdown Timer Box */
675
+ .countdown-box {
676
+ position: absolute;
677
+ width: 100%;
678
+ text-align: center;
679
+ background: var(--accent);
680
+ padding: var(--spacing-md);
681
+ border-radius: var(--radius-2xl);
682
+ border: 8px solid var(--accent-dark);
683
+ z-index: 4;
684
+ bottom: 20px;
685
+ box-shadow: 0 8px 32px rgba(217, 79, 144, 0.4);
686
+ }
687
+
688
+ .countdown-title {
689
+ font-size: 1rem;
690
+ font-weight: 600;
691
+ color: rgba(255, 255, 255, 0.9);
692
+ margin-bottom: var(--spacing-xs);
693
+ text-transform: uppercase;
694
+ letter-spacing: 1px;
695
+ }
696
+
697
+ .countdown-timer {
698
+ font-size: 2rem;
699
+ font-weight: 800;
700
+ color: #fff;
701
+ text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
702
+ font-variant-numeric: tabular-nums;
703
+ }
704
+
705
+ .countdown-timer .unit {
706
+ display: inline-block;
707
+ min-width: 3.5rem;
708
+ }
709
+
710
+ .countdown-timer .separator {
711
+ opacity: 0.7;
712
+ margin: 0 0.25rem;
713
+ }
714
+
715
+ /* Countdown Popup */
716
+ .countdown-popup {
717
+ position: absolute;
718
+ top: 50%;
719
+ left: 50%;
720
+ transform: translate(-50%, -50%);
721
+ width: calc(100% - 40px);
722
+ max-width: 500px;
723
+ text-align: center;
724
+ font-size: 1.1rem;
725
+ font-weight: 600;
726
+ color: var(--text);
727
+ background: var(--glass);
728
+ padding: var(--spacing-lg);
729
+ border-radius: var(--radius-2xl);
730
+ border: 4px solid var(--accent);
731
+ backdrop-filter: blur(15px);
732
+ z-index: 5;
733
+ opacity: 0;
734
+ visibility: hidden;
735
+ transition: all var(--transition-normal);
736
+ box-shadow: 0 20px 60px rgba(217, 79, 144, 0.4);
737
+ }
738
+
739
+ .countdown-popup.active {
740
+ opacity: 1;
741
+ visibility: visible;
742
+ }
743
+
744
+ .countdown-popup a {
745
+ color: var(--accent-light);
746
+ text-decoration: underline;
747
+ }
748
+
749
+ .countdown-popup a:hover {
750
+ color: var(--accent);
751
+ }
752
+
753
+ /* Countdown Animations */
754
+ @keyframes countdown-pulse {
755
+ 0% {
756
+ box-shadow: 0 0 30px rgba(217, 79, 144, 0.4),
757
+ inset 0 0 30px rgba(217, 79, 144, 0.1);
758
+ }
759
+ 100% {
760
+ box-shadow: 0 0 50px rgba(217, 79, 144, 0.6),
761
+ inset 0 0 40px rgba(217, 79, 144, 0.2);
762
+ transform: translate(-50%, -50%) scale(1.02);
763
+ }
764
+ }
765
+
766
+ .shape-container.diamond {
767
+ animation: countdown-pulse-diamond 2.5s ease-in-out infinite alternate;
768
+ }
769
+
770
+ @keyframes countdown-pulse-diamond {
771
+ 0% {
772
+ box-shadow: 0 0 30px rgba(217, 79, 144, 0.4),
773
+ inset 0 0 30px rgba(217, 79, 144, 0.1);
774
+ }
775
+ 100% {
776
+ box-shadow: 0 0 50px rgba(217, 79, 144, 0.6),
777
+ inset 0 0 40px rgba(217, 79, 144, 0.2);
778
+ transform: translate(-50%, -50%) rotate(45deg) scale(1.02);
779
+ }
780
+ }
781
+
782
+ @keyframes countdown-float {
783
+ 0% { transform: translateY(-3%); }
784
+ 100% { transform: translateY(3%); }
785
+ }
786
+
787
+ /* Countdown Completed State */
788
+ .countdown-box.completed .countdown-timer {
789
+ font-size: 1.5rem;
790
+ animation: countdown-glow 1.5s ease-in-out infinite alternate;
791
+ }
792
+
793
+ @keyframes countdown-glow {
794
+ 0% { text-shadow: 0 0 10px rgba(255, 255, 255, 0.5); }
795
+ 100% { text-shadow: 0 0 20px rgba(255, 255, 255, 0.8), 0 0 40px rgba(217, 79, 144, 0.6); }
796
+ }
797
+
798
+ /* ========== RESPONSIVE EXTENSIONS ========== */
799
+
800
+ @media screen and (max-width: 768px) {
801
+ /* Gallery */
802
+ .gallery-container {
803
+ grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
804
+ gap: var(--spacing-md);
805
+ }
806
+
807
+ .gallery-item {
808
+ padding: var(--spacing-sm);
809
+ }
810
+
811
+ .gallery-caption {
812
+ font-size: 0.85rem;
813
+ }
814
+
815
+ /* Filter Bar */
816
+ .filter-bar {
817
+ gap: var(--spacing-xs);
818
+ }
819
+
820
+ .filter-btn {
821
+ padding: var(--spacing-xs) var(--spacing-sm);
822
+ font-size: 0.85rem;
823
+ }
824
+
825
+ /* Lightbox */
826
+ .lightbox-image {
827
+ max-width: 95vw;
828
+ max-height: 80vh;
829
+ border-radius: var(--radius-md);
830
+ }
831
+
832
+ .lightbox-close {
833
+ top: var(--spacing-md);
834
+ right: var(--spacing-md);
835
+ width: 40px;
836
+ height: 40px;
837
+ font-size: 1.25rem;
838
+ }
839
+
840
+ .lightbox-prev,
841
+ .lightbox-next {
842
+ width: 44px;
843
+ height: 44px;
844
+ font-size: 1rem;
845
+ }
846
+
847
+ .lightbox-prev {
848
+ left: var(--spacing-sm);
849
+ }
850
+
851
+ .lightbox-next {
852
+ right: var(--spacing-sm);
853
+ }
854
+
855
+ .lightbox-caption {
856
+ bottom: var(--spacing-lg);
857
+ padding: var(--spacing-sm) var(--spacing-md);
858
+ font-size: 0.85rem;
859
+ }
860
+
861
+ /* Social Links */
862
+ .social-links-container {
863
+ padding: var(--spacing-lg);
864
+ }
865
+
866
+ .profile-avatar {
867
+ width: 120px;
868
+ height: 120px;
869
+ }
870
+
871
+ .profile-name {
872
+ font-size: 1.5rem;
873
+ }
874
+
875
+ .link-item {
876
+ padding: var(--spacing-md);
877
+ font-size: 1rem;
878
+ }
879
+
880
+ /* Countdown */
881
+ .countdown-container {
882
+ width: 100%;
883
+ max-width: 400px;
884
+ height: 400px;
885
+ }
886
+
887
+ .shape-container {
888
+ width: 250px;
889
+ height: 250px;
890
+ border-width: 8px;
891
+ }
892
+
893
+ .countdown-box {
894
+ padding: var(--spacing-sm) var(--spacing-md);
895
+ border-width: 6px;
896
+ bottom: 10px;
897
+ }
898
+
899
+ .countdown-title {
900
+ font-size: 0.85rem;
901
+ }
902
+
903
+ .countdown-timer {
904
+ font-size: 1.5rem;
905
+ }
906
+
907
+ .countdown-popup {
908
+ font-size: 1rem;
909
+ padding: var(--spacing-md);
910
+ }
911
+ }
912
+
913
+ @media screen and (max-width: 480px) {
914
+ .gallery-container {
915
+ grid-template-columns: 1fr;
916
+ }
917
+
918
+ .countdown-container {
919
+ max-width: 320px;
920
+ height: 350px;
921
+ }
922
+
923
+ .shape-container {
924
+ width: 200px;
925
+ height: 200px;
926
+ border-width: 6px;
927
+ }
928
+
929
+ .countdown-timer {
930
+ font-size: 1.25rem;
931
+ }
932
+ }
933
+