276 lines
5.7 KiB
CSS
276 lines
5.7 KiB
CSS
@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;
|
|
}
|