@tailwind base; @tailwind components; @tailwind utilities; body { @apply bg-bgBody text-slate-100; font-family: "Pretendard", sans-serif; overflow-x: hidden; } /* 배경에 미묘한 그라디언트 패턴 추가 */ body::before { content: ""; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: radial-gradient( ellipse 80% 50% at 50% -20%, rgba(120, 119, 198, 0.15), transparent ), radial-gradient( ellipse 60% 40% at 100% 100%, rgba(56, 189, 248, 0.08), transparent ); pointer-events: none; z-index: -1; } /* 글래스모피즘 카드 기본 스타일 */ .glass-card { @apply bg-white/[0.03] backdrop-blur-xl border border-white/[0.08] rounded-2xl; box-shadow: 0 4px 24px -1px rgba(0, 0, 0, 0.2), inset 0 1px 0 0 rgba(255, 255, 255, 0.05); } /* 호버 시 글래스 효과 강화 */ .glass-card-hover { @apply transition-all duration-300; } .glass-card-hover:hover { @apply bg-white/[0.06] border-white/[0.15]; box-shadow: 0 8px 32px -4px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(255, 255, 255, 0.1), inset 0 1px 0 0 rgba(255, 255, 255, 0.1); transform: translateY(-2px); } /* 상태 표시등 펄스 애니메이션 */ @keyframes pulse-glow { 0%, 100% { opacity: 1; box-shadow: 0 0 0 0 currentColor; } 50% { opacity: 0.8; box-shadow: 0 0 12px 4px currentColor; } } .status-pulse { animation: pulse-glow 2s ease-in-out infinite; } /* 그라디언트 텍스트 */ .gradient-text { @apply bg-gradient-to-r from-blue-400 via-violet-400 to-purple-400 bg-clip-text text-transparent; } /* 아이콘 그라디언트 효과 */ .icon-gradient { @apply text-transparent bg-clip-text bg-gradient-to-br from-slate-400 to-slate-500; } /* 카드 내부 빛나는 효과 */ .inner-glow { position: relative; } .inner-glow::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: linear-gradient( 90deg, transparent, rgba(255, 255, 255, 0.1), transparent ); } /* 부드러운 스크롤바 */ ::-webkit-scrollbar { width: 6px; } ::-webkit-scrollbar-track { @apply bg-transparent; } ::-webkit-scrollbar-thumb { @apply bg-white/10 rounded-full; transition: background 0.2s; } ::-webkit-scrollbar-thumb:hover { @apply bg-white/20; } /* 차트 영역 글래스 효과 */ .chart-container { @apply bg-white/[0.02] backdrop-blur-sm border border-white/[0.06] rounded-2xl; box-shadow: inset 0 1px 0 0 rgba(255, 255, 255, 0.03); } /* 네온 글로우 효과 (온라인 상태용) */ .glow-green { box-shadow: 0 0 10px rgba(16, 185, 129, 0.5), 0 0 20px rgba(16, 185, 129, 0.3); } .glow-red { box-shadow: 0 0 10px rgba(244, 63, 94, 0.5), 0 0 20px rgba(244, 63, 94, 0.3); } /* 부드러운 페이드인 애니메이션 */ @keyframes fade-in-up { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } .animate-fade-in-up { animation: fade-in-up 0.4s ease-out; } /* 시머 효과 (로딩용) */ @keyframes shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } } .shimmer { background: linear-gradient( 90deg, transparent, rgba(255, 255, 255, 0.05), transparent ); background-size: 200% 100%; animation: shimmer 2s infinite; }