minecraft-web/frontend/src/index.css

269 lines
5.6 KiB
CSS
Raw Normal View History

2025-12-16 08:40:32 +09:00
@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);
}
/* 기본 html, body 스타일 */
html {
scrollbar-gutter: stable; /* 스크롤바 공간 예약 (세로 스크롤바) */
}
2025-12-16 08:40:32 +09:00
body {
background: var(--bg-primary);
color: var(--text-primary);
2025-12-16 08:40:32 +09:00
min-height: 100vh;
transition: background-color 0.3s ease, color 0.3s ease;
2025-12-16 08:40:32 +09:00
}
/* PC 레이아웃 - min-width 적용 */
body.desktop-layout {
min-width: 1400px;
}
/* 모바일 레이아웃 */
body.mobile-layout {
min-width: unset;
width: 100%;
overflow-x: hidden;
min-height: auto;
2025-12-16 08:40:32 +09:00
}
@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;
}