- 팝업 메뉴 순서 변경: 시스템/라이트/다크 - glass, glow-card CSS 클래스를 CSS 변수화 - 라이트 테마에 카드/글래스 배경 변수 추가 - 모든 페이지의 카드가 라이트 모드에서 밝게 표시
282 lines
6 KiB
CSS
282 lines
6 KiB
CSS
@tailwind base;
|
|
@tailwind components;
|
|
@tailwind utilities;
|
|
|
|
/* 테마 CSS 변수 */
|
|
:root {
|
|
/* 다크 테마 (기본) */
|
|
--bg-primary: #141414;
|
|
--bg-secondary: #1c1c1c;
|
|
--bg-tertiary: #252525;
|
|
--bg-card: #1c1c1c;
|
|
--bg-hover: rgba(255, 255, 255, 0.05);
|
|
|
|
--text-primary: #ffffff;
|
|
--text-secondary: #a1a1aa;
|
|
--text-tertiary: #71717a;
|
|
--text-muted: #52525b;
|
|
|
|
--border-color: rgba(255, 255, 255, 0.1);
|
|
--border-subtle: rgba(255, 255, 255, 0.05);
|
|
|
|
--shadow-color: rgba(0, 0, 0, 0.3);
|
|
}
|
|
|
|
/* 라이트 테마 */
|
|
.light {
|
|
--bg-primary: #f8fafc;
|
|
--bg-secondary: #ffffff;
|
|
--bg-tertiary: #f1f5f9;
|
|
--bg-card: #ffffff;
|
|
--bg-hover: rgba(0, 0, 0, 0.05);
|
|
|
|
--text-primary: #18181b;
|
|
--text-secondary: #52525b;
|
|
--text-tertiary: #71717a;
|
|
--text-muted: #a1a1aa;
|
|
|
|
--border-color: rgba(0, 0, 0, 0.1);
|
|
--border-subtle: rgba(0, 0, 0, 0.05);
|
|
|
|
--shadow-color: rgba(0, 0, 0, 0.1);
|
|
|
|
/* 글래스 및 카드 */
|
|
--glass-bg: rgba(255, 255, 255, 0.9);
|
|
--glass-border: rgba(0, 0, 0, 0.1);
|
|
--glass-dark-bg: rgba(248, 250, 252, 0.95);
|
|
--card-bg: linear-gradient(
|
|
135deg,
|
|
rgba(255, 255, 255, 0.98) 0%,
|
|
rgba(248, 250, 252, 0.98) 100%
|
|
);
|
|
--card-border: rgba(0, 0, 0, 0.1);
|
|
}
|
|
|
|
/* 기본 html, body 스타일 */
|
|
html {
|
|
scrollbar-gutter: stable; /* 스크롤바 공간 예약 (세로 스크롤바) */
|
|
}
|
|
|
|
body {
|
|
background: var(--bg-primary);
|
|
color: var(--text-primary);
|
|
min-height: 100vh;
|
|
transition: background-color 0.3s ease, color 0.3s ease;
|
|
}
|
|
|
|
/* 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: var(--glass-bg, rgba(28, 28, 28, 0.8));
|
|
backdrop-filter: blur(12px);
|
|
-webkit-backdrop-filter: blur(12px);
|
|
border: 1px solid var(--glass-border, rgba(74, 222, 128, 0.1));
|
|
}
|
|
|
|
.glass-dark {
|
|
background: var(--glass-dark-bg, rgba(20, 20, 20, 0.9));
|
|
backdrop-filter: blur(16px);
|
|
-webkit-backdrop-filter: blur(16px);
|
|
border: 1px solid var(--border-subtle);
|
|
}
|
|
|
|
/* 글로우 카드 효과 */
|
|
.glow-card {
|
|
position: relative;
|
|
background: var(
|
|
--card-bg,
|
|
linear-gradient(
|
|
135deg,
|
|
rgba(28, 28, 28, 0.95) 0%,
|
|
rgba(24, 24, 24, 0.95) 100%
|
|
)
|
|
);
|
|
border: 1px solid var(--card-border, 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;
|
|
}
|