// 캐러셀 카드 .carousel-card { flex: 0 0 300px; background: white; border-radius: 12px; overflow: hidden; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); transition: transform 0.3s ease, box-shadow 0.3s ease; cursor: pointer; display: block; text-decoration: none; color: inherit; &:hover { transform: translateY(-4px); box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15); } // 태블릿에서 캐러셀 카드 크기 조정 @media (min-width: 481px) and (max-width: 768px) { flex: 0 0 280px; } // 데스크톱에서 캐러셀 카드 크기 조정 @media (min-width: 769px) { flex: 0 0 320px; } @media (max-width: 480px) { flex: 0 0 250px; } } .carousel-thumbnail { position: relative; width: 100%; height: 0; padding-bottom: 56.25%; overflow: hidden; background: #f8fafc; .viewer-count { position: absolute; top: 0.5rem; right: 0.5rem; background: rgba(0, 0, 0, 0.7); color: white; padding: 0.25rem 0.5rem; border-radius: 4px; font-size: 0.7rem; font-weight: bold; } .hot-indicator { position: absolute; bottom: 0.5rem; right: 0.5rem; @media (max-width: 480px) { bottom: 0.4rem; right: 0.4rem; transform: scale(0.8); } } } .carousel-info { padding: 1rem; } .carousel-title { font-size: 0.9rem; font-weight: 600; color: #1f2937; margin: 0 0 0.5rem 0; line-height: 1.3; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .carousel-channel { font-size: 0.8rem; color: #6b7280; margin: 0; font-weight: 500; } // 비디오 카드 .video-card { border: 1px solid #e5e7eb; border-radius: 12px; overflow: hidden; transition: all 0.3s ease; background: white; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); cursor: pointer; display: block; text-decoration: none; color: inherit; &:hover { transform: translateY(-6px); box-shadow: 0 12px 32px rgba(0, 0, 0, 0.15); border-color: #d1d5db; } // 모바일에서 전체 너비 사용 @media (max-width: 479px) { width: 100%; max-width: 100%; box-sizing: border-box; } } .video-thumbnail { position: relative; width: 100%; height: 0; padding-bottom: 56.25%; // 16:9 비율 overflow: hidden; background: #f8fafc; } // 공통 placeholder 스타일 .placeholder-thumbnail { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; font-weight: 600; font-size: 0.9rem; text-align: center; padding: 1rem; &::before { content: "▶"; font-size: 1.5rem; margin-bottom: 0.5rem; opacity: 0.8; } } // 공통 LIVE 인디케이터 .live-indicator { position: absolute; top: 0.5rem; left: 0.5rem; background: rgba(255, 0, 0, 0.9); color: white; padding: 0.25rem 0.5rem; border-radius: 4px; font-size: 0.7rem; font-weight: bold; animation: livePulse 2s infinite; @media (min-width: 481px) { top: 0.75rem; left: 0.75rem; font-size: 0.75rem; } } .video-info { padding: 1.2rem; // 모바일에서 패딩 조정 @media (max-width: 480px) { padding: 1rem; } } .video-title { margin: 0 0 0.5rem 0; font-size: 1.1rem; font-weight: 600; color: #1f2937; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; // 모바일에서 폰트 크기 조정 @media (max-width: 480px) { font-size: 1rem; line-height: 1.3; } } .video-meta { display: flex; flex-direction: column; gap: 0.25rem; color: #6b7280; font-size: 0.875rem; // 모바일에서 폰트 크기 조정 @media (max-width: 480px) { font-size: 0.8rem; gap: 0.2rem; } } .video-channel { font-weight: 500; color: #4b5563; } .video-stats { display: flex; flex-direction: column; gap: 0.25rem; .viewers { display: flex; align-items: center; gap: 0.25rem; color: #dc2626; font-weight: 600; } .category { color: #7c3aed; font-weight: 500; font-size: 0.8rem; } .live-status { color: #16a34a; font-weight: 500; font-size: 0.8rem; } } @keyframes livePulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.7; } }