spectrum-er 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.
@@ -0,0 +1,820 @@
1
+ // Layout-specific styles
2
+ // =====================
3
+
4
+ // Page layouts
5
+ .page-wrapper {
6
+ max-width: var(--site-max-width);
7
+ margin: 0 auto;
8
+ padding: 0 1rem;
9
+ min-height: 100vh;
10
+ display: flex;
11
+ flex-direction: column;
12
+ }
13
+
14
+ .main-content {
15
+ flex: 1;
16
+ padding-top: 6rem; // Account for fixed navigation
17
+ }
18
+
19
+ // About page layout
20
+ .about-page {
21
+
22
+ .about-content {
23
+ margin-bottom: 2rem;
24
+ text-align: left;
25
+ width: 100%; // 전체 너비 사용
26
+ }
27
+
28
+ .about-text {
29
+ font-size: 0.95rem;
30
+ line-height: 1.6;
31
+ margin-bottom: 1.5rem;
32
+ max-width: var(--content-max-width);
33
+ margin-left: auto;
34
+ margin-right: auto;
35
+ width: 100%; // 명시적 전체 너비
36
+ }
37
+
38
+ .about-details {
39
+ display: flex;
40
+ justify-content: center;
41
+ gap: 2rem;
42
+ flex-wrap: wrap;
43
+ margin-bottom: 2rem;
44
+ width: 100%;
45
+ }
46
+
47
+ .detail-item {
48
+ display: flex;
49
+ flex-direction: column;
50
+ align-items: center;
51
+ gap: 0.25rem;
52
+ }
53
+
54
+ .detail-label {
55
+ font-size: 0.8rem;
56
+ color: var(--text-muted);
57
+ text-transform: uppercase;
58
+ letter-spacing: 0.05em;
59
+ }
60
+
61
+ .detail-value {
62
+ font-weight: 400;
63
+ color: var(--text-color);
64
+ font-size: 0.9rem;
65
+ }
66
+ }
67
+
68
+ // Tech Bites list page layout
69
+ .tech-bite-list-page {
70
+ .tech-bites-grid {
71
+ display: flex;
72
+ flex-direction: column;
73
+ gap: 0;
74
+ margin-bottom: 3rem;
75
+ max-width: var(--content-max-width);
76
+ margin-left: auto;
77
+ margin-right: auto;
78
+
79
+ .tech-bite-card {
80
+ width: 100%;
81
+ box-sizing: border-box;
82
+ margin-left: 0;
83
+ margin-right: 0;
84
+ }
85
+ }
86
+
87
+ .pagination {
88
+ display: flex;
89
+ justify-content: space-between;
90
+ align-items: center;
91
+ margin-top: 3rem;
92
+ padding-top: 2rem;
93
+ border-top: 1px solid var(--border-color);
94
+ }
95
+
96
+ .pagination-info {
97
+ color: var(--text-secondary);
98
+ font-size: 0.875rem;
99
+ }
100
+
101
+ .pagination-links {
102
+ display: flex;
103
+ align-items: center;
104
+ gap: 1rem;
105
+ }
106
+
107
+ .pagination-btn {
108
+ padding: 0.5rem 1rem;
109
+ border: 1px solid var(--border-color);
110
+ background-color: var(--bg-color);
111
+ color: var(--text-color);
112
+ border-radius: var(--radius-md);
113
+ cursor: pointer;
114
+ transition: all var(--transition-fast);
115
+
116
+ &:hover:not(:disabled) {
117
+ background-color: var(--primary-color);
118
+ color: white;
119
+ border-color: var(--primary-color);
120
+ }
121
+
122
+ &:disabled {
123
+ opacity: 0.5;
124
+ cursor: not-allowed;
125
+ }
126
+ }
127
+
128
+ .pagination-current {
129
+ color: var(--text-secondary);
130
+ font-size: 0.875rem;
131
+ }
132
+ }
133
+
134
+ // Tech Bite individual page layout
135
+ .tech-bite-page {
136
+ .page-meta {
137
+ display: flex;
138
+ justify-content: center;
139
+ align-items: center;
140
+ gap: 1rem;
141
+ flex-wrap: wrap;
142
+ margin-top: 1rem;
143
+ }
144
+
145
+ .post-date {
146
+ color: var(--text-secondary);
147
+ font-size: 0.875rem;
148
+ }
149
+
150
+ .post-categories {
151
+ display: flex;
152
+ gap: 0.5rem;
153
+ flex-wrap: wrap;
154
+ }
155
+
156
+ .category-tag {
157
+ background-color: var(--primary-color);
158
+ color: white;
159
+ padding: 0.25rem 0.5rem;
160
+ border-radius: var(--radius-sm);
161
+ font-size: 0.75rem;
162
+ }
163
+
164
+ .tech-bite-content {
165
+ max-width: var(--content-max-width);
166
+ margin: 0 auto 3rem;
167
+ font-size: 1rem;
168
+ line-height: 1.6;
169
+
170
+ h1, h2, h3, h4, h5, h6 {
171
+ margin-top: 2rem;
172
+ margin-bottom: 1rem;
173
+ color: var(--text-color);
174
+ }
175
+
176
+ h1 { font-size: 1.5rem; font-weight: 600; }
177
+ h2 { font-size: 1.3rem; font-weight: 500; }
178
+ h3 { font-size: 1.1rem; font-weight: 500; }
179
+
180
+ p {
181
+ margin-bottom: 1.5rem;
182
+ color: var(--text-color);
183
+ }
184
+
185
+ ul, ol {
186
+ margin-bottom: 1.5rem;
187
+ padding-left: 1.5rem;
188
+
189
+ li {
190
+ margin-bottom: 0.5rem;
191
+ color: var(--text-color);
192
+ }
193
+ }
194
+
195
+ blockquote {
196
+ margin: 2rem 0;
197
+ padding: 1.5rem;
198
+ background-color: var(--bg-secondary);
199
+ border-left: 4px solid var(--primary-color);
200
+ border-radius: var(--radius-md);
201
+ font-style: italic;
202
+ color: var(--text-secondary);
203
+ }
204
+
205
+ code {
206
+ background-color: var(--bg-secondary);
207
+ padding: 0.25rem 0.5rem;
208
+ border-radius: var(--radius-sm);
209
+ font-size: 0.875rem;
210
+ color: var(--text-color);
211
+ }
212
+
213
+ pre {
214
+ background-color: var(--bg-secondary);
215
+ padding: 1.5rem;
216
+ border-radius: var(--radius-md);
217
+ overflow-x: auto;
218
+ margin: 2rem 0;
219
+
220
+ code {
221
+ background: none;
222
+ padding: 0;
223
+ color: var(--text-color);
224
+ }
225
+ }
226
+
227
+ a {
228
+ color: var(--primary-color);
229
+ text-decoration: none;
230
+
231
+ &:hover {
232
+ text-decoration: underline;
233
+ }
234
+ }
235
+
236
+ img {
237
+ max-width: 100%;
238
+ height: auto;
239
+ border-radius: var(--radius-md);
240
+ margin: 1.5rem 0;
241
+ }
242
+ }
243
+
244
+ .post-navigation {
245
+ max-width: var(--content-max-width);
246
+ margin: 0 auto;
247
+ display: flex;
248
+ justify-content: space-between;
249
+ gap: 1rem;
250
+ padding-top: 2rem;
251
+ border-top: 1px solid var(--border-light);
252
+ }
253
+
254
+ .nav-link {
255
+ flex: 1;
256
+ padding: 1rem;
257
+ text-decoration: none;
258
+ color: var(--text-color);
259
+ transition: all var(--transition-fast);
260
+ border-radius: var(--radius-md);
261
+
262
+ &:hover {
263
+ background-color: var(--bg-secondary);
264
+ color: var(--primary-color);
265
+ }
266
+
267
+ .nav-direction {
268
+ display: block;
269
+ font-size: 0.875rem;
270
+ color: var(--text-muted);
271
+ margin-bottom: 0.5rem;
272
+ }
273
+
274
+ .nav-title {
275
+ display: block;
276
+ font-weight: 500;
277
+ line-height: 1.4;
278
+ }
279
+
280
+ &.nav-prev {
281
+ text-align: left;
282
+ }
283
+
284
+ &.nav-next {
285
+ text-align: right;
286
+ }
287
+ }
288
+ }
289
+
290
+ // Section previews on about page
291
+ .tech-bites-preview {
292
+ margin: 4rem 0;
293
+ padding: 3rem 0;
294
+ border-top: 1px solid var(--border-color);
295
+
296
+ .section-header {
297
+ text-align: center;
298
+ margin-bottom: 2rem;
299
+
300
+ .section-title {
301
+ font-size: 1.5rem;
302
+ font-weight: 500;
303
+ color: var(--text-color);
304
+ margin-bottom: 0.5rem;
305
+ }
306
+
307
+ .section-description {
308
+ font-size: 0.95rem;
309
+ color: var(--text-secondary);
310
+ line-height: 1.5;
311
+ }
312
+ }
313
+
314
+ .tech-bites-grid {
315
+ max-width: var(--content-max-width);
316
+ margin-left: auto;
317
+ margin-right: auto;
318
+
319
+ .tech-bite-card {
320
+ width: 100%;
321
+ box-sizing: border-box;
322
+ margin-left: 0;
323
+ margin-right: 0;
324
+ }
325
+ }
326
+
327
+ .section-footer {
328
+ text-align: center;
329
+
330
+ .section-button {
331
+ display: inline-flex;
332
+ align-items: center;
333
+ gap: 0.5rem;
334
+ padding: 0.75rem 1.5rem;
335
+ font-size: 0.9rem;
336
+ font-weight: 400;
337
+ text-decoration: none;
338
+ color: var(--primary-color);
339
+ border: 1px solid var(--primary-color);
340
+ border-radius: var(--radius-md);
341
+ background-color: transparent;
342
+ transition: all var(--transition-fast);
343
+
344
+ &:hover {
345
+ background-color: var(--primary-color);
346
+ color: white;
347
+ transform: translateY(-1px);
348
+ box-shadow: 0 4px 12px rgba(52, 152, 219, 0.3);
349
+ }
350
+
351
+ .btn-icon {
352
+ font-size: 1rem;
353
+ transition: transform var(--transition-fast);
354
+ }
355
+
356
+ &:hover .btn-icon {
357
+ transform: translateX(2px);
358
+ }
359
+ }
360
+ }
361
+ }
362
+
363
+ // Gallery Track Preview Section
364
+ .gallery-track-preview {
365
+ margin: 4rem 0;
366
+ padding: 3rem 0;
367
+ border-top: 1px solid var(--border-color);
368
+ overflow: hidden; // 가로 스크롤 방지
369
+
370
+ .section-header {
371
+ text-align: center;
372
+ margin-bottom: 2rem;
373
+
374
+ .section-title {
375
+ font-size: 1.5rem;
376
+ font-weight: 500;
377
+ color: var(--text-color);
378
+ margin-bottom: 0.5rem;
379
+ }
380
+
381
+ .section-description {
382
+ font-size: 0.95rem;
383
+ color: var(--text-secondary);
384
+ line-height: 1.5;
385
+ }
386
+ }
387
+
388
+ .section-content {
389
+ max-width: var(--content-max-width);
390
+ margin-left: auto;
391
+ margin-right: auto;
392
+ }
393
+
394
+ .gallery-track-container {
395
+ position: relative;
396
+ overflow: hidden;
397
+ margin-bottom: 2rem;
398
+ border-radius: var(--radius-lg);
399
+
400
+ // Hide scrollbars while maintaining scroll functionality
401
+ &::-webkit-scrollbar {
402
+ display: none;
403
+ }
404
+ -ms-overflow-style: none;
405
+ scrollbar-width: none;
406
+ }
407
+
408
+ .gallery-track {
409
+ display: flex;
410
+ gap: 1rem;
411
+ width: fit-content;
412
+ will-change: transform;
413
+ transform: translateX(0);
414
+ overflow-x: auto;
415
+ scrollbar-width: none;
416
+ -ms-overflow-style: none;
417
+
418
+ &::-webkit-scrollbar {
419
+ display: none;
420
+ }
421
+
422
+ &:hover {
423
+ animation-play-state: paused;
424
+ }
425
+ }
426
+
427
+ .gallery-item {
428
+ flex: 0 0 auto;
429
+ width: 280px; // 기본 크기
430
+ height: 200px;
431
+ border-radius: var(--radius-lg);
432
+ overflow: hidden;
433
+ background-color: var(--bg-color);
434
+ border: 1px solid var(--border-color);
435
+ transition: all var(--transition-normal);
436
+
437
+ &:hover {
438
+ transform: translateY(-2px);
439
+ box-shadow: 0 8px 25px var(--shadow-light);
440
+ }
441
+
442
+ .gallery-link {
443
+ display: block;
444
+ width: 100%;
445
+ height: 100%;
446
+ text-decoration: none;
447
+ color: inherit;
448
+ position: relative;
449
+
450
+ &:focus {
451
+ outline: 2px solid var(--primary-color);
452
+ outline-offset: 2px;
453
+ border-radius: var(--radius-lg);
454
+ }
455
+
456
+ .gallery-image {
457
+ width: 100%;
458
+ height: 100%;
459
+ object-fit: cover;
460
+ object-position: center;
461
+ transition: transform var(--transition-normal);
462
+ }
463
+
464
+ .gallery-overlay {
465
+ position: absolute;
466
+ top: 0;
467
+ left: 0;
468
+ width: 100%;
469
+ height: 100%;
470
+ background: linear-gradient(
471
+ to bottom,
472
+ rgba(0, 0, 0, 0) 0%,
473
+ rgba(0, 0, 0, 0.1) 50%,
474
+ rgba(0, 0, 0, 0.7) 100%
475
+ );
476
+ opacity: 0;
477
+ transition: opacity var(--transition-normal);
478
+ display: flex;
479
+ align-items: flex-end;
480
+ padding: 1rem;
481
+
482
+ .gallery-info {
483
+ color: white;
484
+ text-align: left;
485
+
486
+ .gallery-title {
487
+ font-size: 0.9rem;
488
+ font-weight: 500;
489
+ line-height: 1.2;
490
+ display: block;
491
+ }
492
+ }
493
+ }
494
+
495
+ &:hover {
496
+ .gallery-image {
497
+ transform: scale(1.05);
498
+ }
499
+
500
+ .gallery-overlay {
501
+ opacity: 1;
502
+ }
503
+ }
504
+ }
505
+ }
506
+
507
+ .section-footer {
508
+ text-align: center;
509
+
510
+ .section-button {
511
+ display: inline-flex;
512
+ align-items: center;
513
+ gap: 0.5rem;
514
+ padding: 0.75rem 1.5rem;
515
+ font-size: 0.9rem;
516
+ font-weight: 400;
517
+ text-decoration: none;
518
+ color: var(--primary-color);
519
+ border: 1px solid var(--primary-color);
520
+ border-radius: var(--radius-md);
521
+ background-color: transparent;
522
+ transition: all var(--transition-fast);
523
+
524
+ &:hover {
525
+ background-color: var(--primary-color);
526
+ color: white;
527
+ transform: translateY(-1px);
528
+ box-shadow: 0 4px 12px rgba(52, 152, 219, 0.3);
529
+ }
530
+
531
+ .btn-icon {
532
+ font-size: 1rem;
533
+ transition: transform var(--transition-fast);
534
+ }
535
+
536
+ &:hover .btn-icon {
537
+ transform: translateX(2px);
538
+ }
539
+ }
540
+ }
541
+ }
542
+
543
+ // Gallery track animation keyframes
544
+ @keyframes scroll-left {
545
+ 0% {
546
+ transform: translateX(0%);
547
+ }
548
+ 100% {
549
+ transform: translateX(-50%);
550
+ }
551
+ }
552
+
553
+ // Films page layout
554
+ .films-page {
555
+ .films-grid {
556
+ display: grid;
557
+ grid-template-columns: repeat(2, 1fr);
558
+ gap: 1.5rem;
559
+ margin-bottom: 3rem;
560
+ max-width: var(--content-max-width);
561
+ margin-left: auto;
562
+ margin-right: auto;
563
+
564
+ @media (max-width: 767px) {
565
+ grid-template-columns: 1fr;
566
+ gap: 1rem;
567
+ }
568
+ }
569
+
570
+ .photo-card {
571
+ // Core card properties - ensures consistent behavior across all card types
572
+ background-color: var(--bg-color);
573
+ border: 1px solid var(--border-color);
574
+ border-radius: var(--radius-lg);
575
+ overflow: hidden;
576
+ transition: all var(--transition-normal);
577
+ box-sizing: border-box;
578
+ width: 100%;
579
+ padding: 0;
580
+ position: relative;
581
+
582
+ // Consistent hover effects across all card types
583
+ &:hover {
584
+ box-shadow: 0 8px 25px var(--shadow-light);
585
+ transform: translateY(-2px);
586
+ }
587
+
588
+ .photo-container {
589
+ position: relative;
590
+ width: 100%;
591
+ height: 0;
592
+ padding-bottom: 100%; // Square aspect ratio
593
+ overflow: hidden;
594
+
595
+ .photo-link {
596
+ position: absolute;
597
+ top: 0;
598
+ left: 0;
599
+ width: 100%;
600
+ height: 100%;
601
+ display: block;
602
+ text-decoration: none;
603
+ color: inherit;
604
+
605
+ .photo-image {
606
+ position: absolute;
607
+ top: 0;
608
+ left: 0;
609
+ width: 100%;
610
+ height: 100%;
611
+ object-fit: cover;
612
+ object-position: center;
613
+ transition: transform var(--transition-normal);
614
+ }
615
+
616
+ .photo-overlay {
617
+ position: absolute;
618
+ top: 0;
619
+ left: 0;
620
+ width: 100%;
621
+ height: 100%;
622
+ background: linear-gradient(
623
+ to bottom,
624
+ rgba(0, 0, 0, 0) 0%,
625
+ rgba(0, 0, 0, 0.1) 50%,
626
+ rgba(0, 0, 0, 0.7) 100%
627
+ );
628
+ opacity: 0;
629
+ transition: opacity var(--transition-normal);
630
+ display: flex;
631
+ align-items: flex-end;
632
+ padding: 1rem;
633
+
634
+ .photo-info {
635
+ color: white;
636
+ text-align: left;
637
+
638
+ .photo-title {
639
+ font-size: 0.9rem;
640
+ font-weight: 500;
641
+ margin: 0 0 0.25rem 0;
642
+ line-height: 1.2;
643
+ }
644
+
645
+ .photo-meta {
646
+ font-size: 0.75rem;
647
+ opacity: 0.8;
648
+ text-transform: uppercase;
649
+ letter-spacing: 0.05em;
650
+ }
651
+ }
652
+ }
653
+
654
+ &:hover {
655
+ .photo-image {
656
+ transform: scale(1.05);
657
+ }
658
+
659
+ .photo-overlay {
660
+ opacity: 1;
661
+ }
662
+ }
663
+
664
+ &:focus {
665
+ outline: 2px solid var(--primary-color);
666
+ outline-offset: 2px;
667
+ border-radius: var(--radius-lg);
668
+ }
669
+ }
670
+ }
671
+ }
672
+ }
673
+
674
+ // Responsive layout adjustments
675
+ @media (max-width: 767px) {
676
+ .main-content {
677
+ padding-top: 5rem;
678
+ }
679
+
680
+ .about-page .page-title {
681
+ font-size: 1.5rem;
682
+ }
683
+
684
+ .tech-bite-list-page .page-title {
685
+ font-size: 1.5rem;
686
+ }
687
+
688
+ .tech-bite-page {
689
+ .page-title {
690
+ font-size: 1.5rem;
691
+ }
692
+
693
+ .tech-bite-content {
694
+ padding: 0 1rem;
695
+ }
696
+
697
+ .post-navigation {
698
+ flex-direction: column;
699
+ gap: 1rem;
700
+ }
701
+
702
+ .page-meta {
703
+ flex-direction: column;
704
+ gap: 0.5rem;
705
+ }
706
+ }
707
+
708
+ .about-page {
709
+ .about-content {
710
+ margin-bottom: 1.5rem;
711
+ padding: 0;
712
+ }
713
+
714
+ .about-text {
715
+ font-size: 0.9rem;
716
+ line-height: 1.5;
717
+ margin-bottom: 1rem;
718
+ max-width: 100%; // 모바일에서 최대 너비 제거
719
+ padding: 0 0.25rem; // 최소 패딩만 유지
720
+ }
721
+
722
+ .about-details {
723
+ flex-direction: column;
724
+ gap: 1rem;
725
+ margin-bottom: 1.5rem;
726
+ padding: 1rem 0.5rem 0; // 상단 패딩 추가
727
+ }
728
+
729
+ .detail-item {
730
+ gap: 0.125rem;
731
+ }
732
+
733
+ .detail-label {
734
+ font-size: 0.75rem;
735
+ }
736
+
737
+ .detail-value {
738
+ font-size: 0.85rem;
739
+ }
740
+ }
741
+
742
+ .tech-bites-grid {
743
+ max-width: 100%;
744
+ margin-left: 0;
745
+ margin-right: 0;
746
+
747
+ .tech-bite-card {
748
+ width: 100%;
749
+ margin-left: 0;
750
+ margin-right: 0;
751
+ }
752
+ }
753
+
754
+ // Gallery track responsive adjustments for mobile
755
+ .gallery-track-preview {
756
+ margin: 2rem 0;
757
+ padding: 1.5rem 0;
758
+
759
+ .section-header {
760
+ margin-bottom: 1.5rem;
761
+
762
+ .section-title {
763
+ font-size: 1.3rem;
764
+ }
765
+
766
+ .section-description {
767
+ font-size: 0.9rem;
768
+ }
769
+ }
770
+
771
+ .gallery-track {
772
+ gap: 0.5rem;
773
+ padding: 0 0.75rem;
774
+ }
775
+
776
+ .gallery-item {
777
+ width: 200px; // 모바일에서 더 작은 크기
778
+ height: 140px;
779
+ }
780
+ }
781
+ }
782
+
783
+ // Very small screens (480px and below)
784
+ @media (max-width: 480px) {
785
+ .gallery-track-preview {
786
+ .gallery-item {
787
+ width: 160px;
788
+ height: 120px;
789
+ }
790
+ }
791
+
792
+ .about-page {
793
+ .about-text {
794
+ font-size: 0.85rem;
795
+ padding: 0;
796
+ }
797
+
798
+ .about-details {
799
+ padding: 1rem 0.25rem 0; // 상단 패딩 추가
800
+ }
801
+ }
802
+ }
803
+
804
+ // Tablet responsive adjustments
805
+ @media (min-width: 768px) and (max-width: 1023px) {
806
+ // Gallery track responsive adjustments for tablet
807
+ .gallery-track-preview {
808
+ margin: 3.5rem 0;
809
+ padding: 2.5rem 0;
810
+
811
+ .gallery-item {
812
+ width: 260px;
813
+ height: 185px;
814
+ }
815
+
816
+ .gallery-track {
817
+ gap: 0.875rem;
818
+ }
819
+ }
820
+ }