167 lines
3.3 KiB
CSS
167 lines
3.3 KiB
CSS
@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;
|
|
}
|