@tailwind base; @tailwind components; @tailwind utilities; /* 기본 body 스타일 - 다크 배경 (약간 밝게) */ body { background: linear-gradient(135deg, #141414 0%, #181a18 50%, #141414 100%); background-attachment: fixed; min-height: 100vh; } /* PC 레이아웃 - min-width 적용 */ body.desktop-layout { min-width: 1400px; } /* 모바일 레이아웃 */ body.mobile-layout { min-width: unset; width: 100%; overflow-x: hidden; min-height: auto; } @layer utilities { /* 텍스트 그림자 */ .text-shadow { text-shadow: 2px 2px 0px rgba(0, 0, 0, 0.5); } .text-shadow-sm { text-shadow: 1px 1px 0px rgba(0, 0, 0, 0.5); } .text-shadow-lg { text-shadow: 3px 3px 0px rgba(0, 0, 0, 0.5); } /* 그라디언트 텍스트 */ .text-gradient { background: linear-gradient(135deg, #4ade80 0%, #22d3ee 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } /* 글래스모피즘 (다크 테마) */ .glass { background: rgba(28, 28, 28, 0.8); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border: 1px solid rgba(74, 222, 128, 0.1); } .glass-dark { background: rgba(20, 20, 20, 0.9); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border: 1px solid rgba(255, 255, 255, 0.05); } /* 글로우 카드 효과 */ .glow-card { position: relative; background: linear-gradient( 135deg, rgba(28, 28, 28, 0.95) 0%, rgba(24, 24, 24, 0.95) 100% ); border: 1px solid rgba(74, 222, 128, 0.15); transition: all 0.3s ease; } .glow-card::before { content: ""; position: absolute; inset: -1px; background: linear-gradient( 135deg, rgba(74, 222, 128, 0.2) 0%, rgba(34, 211, 238, 0.2) 100% ); border-radius: inherit; z-index: -1; opacity: 0; transition: opacity 0.3s ease; } .glow-card:hover::before { opacity: 1; } .glow-card:hover { border-color: rgba(74, 222, 128, 0.4); transform: translateY(-2px); box-shadow: 0 10px 40px rgba(74, 222, 128, 0.15); } /* Shimmer 효과 */ .shimmer { background: linear-gradient( 90deg, rgba(37, 37, 37, 0.5) 25%, rgba(74, 222, 128, 0.1) 50%, rgba(37, 37, 37, 0.5) 75% ); background-size: 200% 100%; animation: shimmer 2s infinite linear; } /* 아이콘 글로우 */ .icon-glow { filter: drop-shadow(0 0 8px rgba(74, 222, 128, 0.5)); } /* 호버 리프트 효과 */ .hover-lift { transition: transform 0.2s ease, box-shadow 0.2s ease; } .hover-lift:hover { transform: translateY(-4px); box-shadow: 0 12px 24px rgba(0, 0, 0, 0.4); } /* 버튼 글로우 */ .btn-glow { position: relative; overflow: hidden; } .btn-glow::after { content: ""; position: absolute; inset: 0; background: linear-gradient( 135deg, transparent 0%, rgba(255, 255, 255, 0.1) 50%, transparent 100% ); transform: translateX(-100%); transition: transform 0.3s ease; } .btn-glow:hover::after { transform: translateX(100%); } } /* 온라인 상태 표시기 펄스 */ .online-pulse { animation: pulse-ring 1.5s cubic-bezier(0.455, 0.03, 0.515, 0.955) infinite; } @keyframes pulse-ring { 0% { box-shadow: 0 0 0 0 rgba(74, 222, 128, 0.6); } 70% { box-shadow: 0 0 0 8px rgba(74, 222, 128, 0); } 100% { box-shadow: 0 0 0 0 rgba(74, 222, 128, 0); } } /* 배경 파티클 효과용 */ .particles-bg { background-image: radial-gradient( circle at 20% 80%, rgba(74, 222, 128, 0.04) 0%, transparent 50% ), radial-gradient( circle at 80% 20%, rgba(34, 211, 238, 0.04) 0%, transparent 50% ), radial-gradient( circle at 40% 40%, rgba(74, 222, 128, 0.03) 0%, transparent 30% ); } /* 커스텀 스크롤바 */ .custom-scrollbar::-webkit-scrollbar { width: 8px; } .custom-scrollbar::-webkit-scrollbar-track { background: rgba(255, 255, 255, 0.05); border-radius: 4px; } .custom-scrollbar::-webkit-scrollbar-thumb { background: rgba(74, 222, 128, 0.3); border-radius: 4px; } .custom-scrollbar::-webkit-scrollbar-thumb:hover { background: rgba(74, 222, 128, 0.5); } /* 픽셀 이미지 렌더링 */ .pixelated { image-rendering: pixelated; image-rendering: -moz-crisp-edges; image-rendering: crisp-edges; } /* Details 펼치기/접기 애니메이션 */ details .details-content { display: grid; grid-template-rows: 0fr; transition: grid-template-rows 0.3s ease-out; } details[open] .details-content { grid-template-rows: 1fr; } details .details-content > div { overflow: hidden; }