@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap'); @tailwind base; @tailwind components; @tailwind utilities; @layer base { :root { --background: 0 0% 100%; --foreground: 222.2 84% 4.9%; --card: 0 0% 100%; --card-foreground: 222.2 84% 4.9%; --popover: 0 0% 100%; --popover-foreground: 222.2 84% 4.9%; --primary: 222.2 47.4% 11.2%; --primary-foreground: 210 40% 98%; --secondary: 210 40% 96.1%; --secondary-foreground: 222.2 47.4% 11.2%; --muted: 210 40% 96.1%; --muted-foreground: 215.4 16.3% 46.9%; --accent: 210 40% 96.1%; --accent-foreground: 222.2 47.4% 11.2%; --destructive: 0 84.2% 60.2%; --destructive-foreground: 210 40% 98%; --border: 214.3 31.8% 91.4%; --input: 214.3 31.8% 91.4%; --ring: 222.2 84% 4.9%; --radius: 1rem; --sidebar-background: 0 0% 98%; --sidebar-foreground: 240 5.3% 26.1%; --sidebar-primary: 240 5.9% 10%; --sidebar-primary-foreground: 0 0% 98%; --sidebar-accent: 240 4.8% 95.9%; --sidebar-accent-foreground: 240 5.9% 10%; --sidebar-border: 220 13% 91%; --sidebar-ring: 217.2 91.2% 59.8%; /* Safe area 값 */ --safe-area-top: 0px; --safe-area-bottom: 0px; --safe-area-left: 0px; --safe-area-right: 0px; } .dark { --background: 222.2 84% 4.9%; --foreground: 210 40% 98%; --card: 222.2 84% 4.9%; --card-foreground: 210 40% 98%; --popover: 222.2 84% 4.9%; --popover-foreground: 210 40% 98%; --primary: 210 40% 98%; --primary-foreground: 222.2 47.4% 11.2%; --secondary: 217.2 32.6% 17.5%; --secondary-foreground: 210 40% 98%; --muted: 217.2 32.6% 17.5%; --muted-foreground: 215 20.2% 65.1%; --accent: 217.2 32.6% 17.5%; --accent-foreground: 210 40% 98%; --destructive: 0 62.8% 30.6%; --destructive-foreground: 210 40% 98%; --border: 217.2 32.6% 17.5%; --input: 217.2 32.6% 17.5%; --ring: 212.7 26.8% 83.9%; --sidebar-background: 240 5.9% 10%; --sidebar-foreground: 240 4.8% 95.9%; --sidebar-primary: 224.3 76.3% 48%; --sidebar-primary-foreground: 0 0% 100%; --sidebar-accent: 240 3.7% 15.9%; --sidebar-accent-foreground: 240 4.8% 95.9%; --sidebar-border: 240 3.7% 15.9%; --sidebar-ring: 217.2 91.2% 59.8%; } } @layer base { * { @apply border-border; } body { @apply bg-neuro-background text-foreground font-inter antialiased; } html, body, #root { @apply h-full overflow-x-hidden; } } @layer components { .neuro-flat { @apply bg-neuro-background shadow-neuro-flat rounded-xl; } .neuro-pressed { @apply bg-neuro-background shadow-neuro-pressed rounded-xl; } .neuro-convex { @apply bg-neuro-background shadow-neuro-convex rounded-xl; } .neuro-text { @apply font-medium tracking-wide; } .page-transition-enter { @apply animate-fade-in; } .glass-effect { @apply bg-white/10 backdrop-blur-lg border border-white/20 rounded-xl; } .neuro-button { @apply neuro-flat px-4 py-3 text-neuro-accent font-medium transition-all duration-200 hover:shadow-neuro-convex hover:text-neuro-accent-light active:shadow-neuro-pressed; } .neuro-card { @apply neuro-flat p-6 transition-all duration-300 hover:shadow-neuro-convex; } .neuro-input { @apply neuro-pressed px-4 py-3 w-full focus:outline-none focus:ring-2 focus:ring-neuro-accent/30; } /* 안전 영역 관련 클래스 */ .has-safe-area-top { padding-top: max(1rem, env(safe-area-inset-top)); } .has-safe-area-bottom { padding-bottom: max(1rem, env(safe-area-inset-bottom)); } .ios-header { padding-top: max(1rem, env(safe-area-inset-top)); } /* 모바일 화면에서의 추가 스타일 */ @media (max-width: 768px) { .neuro-card { @apply w-full; } #root { @apply p-0; } /* 모바일에서 팝업과 다이얼로그 스타일 보정 */ [role="dialog"] { @apply rounded-xl overflow-hidden; } /* 다이얼로그 내용에 적용되는 스타일 */ .DialogContent, .PopoverContent, .AlertDialogContent, .DrawerContent, .SheetContent { @apply rounded-xl overflow-hidden; } } /* 데스크탑 화면에서의 추가 스타일 */ @media (min-width: 769px) { #root { @apply px-0; } .desktop-container { @apply max-w-md mx-auto; } .desktop-card { @apply w-full mx-auto; } } /* 추가 애니메이션 정의 */ @keyframes pulse-subtle { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.05); } } @keyframes bounce-gentle { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-5px); } } @keyframes spin-slow { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .animate-pulse-subtle { animation: pulse-subtle 2s infinite ease-in-out; } .animate-bounce-gentle { animation: bounce-gentle 1.5s infinite ease-in-out; } .animate-spin-slow { animation: spin-slow 6s linear infinite; } @keyframes fade-in { from { opacity: 0; } to { opacity: 1; } } .animate-fade-in { animation: fade-in 0.5s ease-in-out; } } /* iOS 전용 스타일 */ @supports (-webkit-touch-callout: none) { .ios-safe-area-top { --safe-area-top: env(safe-area-inset-top); padding-top: var(--safe-area-top); } .ios-safe-area-bottom { --safe-area-bottom: env(safe-area-inset-bottom); padding-bottom: var(--safe-area-bottom); } } .font-inter { font-family: 'Inter', sans-serif; }