@import "tailwindcss"; @import "tw-animate-css"; @custom-variant dark (&:is(.dark *)); :root { /* "Rice Paper" & "Ink" Theme */ --background: oklch(0.97 0.01 90); /* Warm off-white */ --foreground: oklch(0.2 0.02 265); /* Deep Ink Black */ --card: oklch(0.98 0.005 90); --card-foreground: oklch(0.2 0.02 265); --popover: oklch(0.98 0.005 90); --popover-foreground: oklch(0.2 0.02 265); /* Chinese Red - Cinnabar */ --primary: oklch(0.45 0.15 25); --primary-foreground: oklch(0.98 0.01 90); /* Gold / Bronze */ --secondary: oklch(0.85 0.05 85); --secondary-foreground: oklch(0.3 0.05 50); --muted: oklch(0.92 0.01 90); --muted-foreground: oklch(0.45 0.02 265); --accent: oklch(0.94 0.02 85); --accent-foreground: oklch(0.3 0.05 50); --destructive: oklch(0.577 0.245 27.325); --destructive-foreground: oklch(0.98 0 0); --border: oklch(0.88 0.01 90); --input: oklch(0.88 0.01 90); --ring: oklch(0.45 0.15 25); --radius: 0.5rem; --sidebar: oklch(0.96 0.01 90); --sidebar-foreground: oklch(0.25 0.02 265); --sidebar-primary: oklch(0.45 0.15 25); --sidebar-primary-foreground: oklch(0.98 0.01 90); --sidebar-accent: oklch(0.93 0.01 90); --sidebar-accent-foreground: oklch(0.25 0.02 265); --sidebar-border: oklch(0.88 0.01 90); --sidebar-ring: oklch(0.45 0.15 25); /* Custom chart colors matching the theme */ --chart-1: oklch(0.45 0.15 25); /* Red */ --chart-2: oklch(0.65 0.12 50); /* Gold/Orange */ --chart-3: oklch(0.35 0.08 200); /* Deep Blue/Green */ --chart-4: oklch(0.55 0.05 265); /* Grey Blue */ --chart-5: oklch(0.75 0.1 85); /* Light Gold */ } .dark { /* Deep Ink Background */ --background: oklch(0.12 0.01 265); --foreground: oklch(0.95 0.01 90); --card: oklch(0.15 0.01 265); --card-foreground: oklch(0.95 0.01 90); --popover: oklch(0.15 0.01 265); --popover-foreground: oklch(0.95 0.01 90); --primary: oklch(0.6 0.15 25); /* Brighter Red for dark mode */ --primary-foreground: oklch(0.98 0.01 90); --secondary: oklch(0.3 0.05 50); --secondary-foreground: oklch(0.9 0.05 85); --muted: oklch(0.2 0.01 265); --muted-foreground: oklch(0.65 0.01 265); --accent: oklch(0.2 0.02 265); --accent-foreground: oklch(0.95 0.01 90); --destructive: oklch(0.396 0.141 25.723); --destructive-foreground: oklch(0.98 0 0); --border: oklch(0.25 0.01 265); --input: oklch(0.25 0.01 265); --ring: oklch(0.6 0.15 25); --sidebar: oklch(0.14 0.01 265); --sidebar-foreground: oklch(0.95 0.01 90); --sidebar-primary: oklch(0.6 0.15 25); --sidebar-primary-foreground: oklch(0.98 0.01 90); --sidebar-accent: oklch(0.2 0.01 265); --sidebar-accent-foreground: oklch(0.95 0.01 90); --sidebar-border: oklch(0.25 0.01 265); --sidebar-ring: oklch(0.6 0.15 25); } @theme inline { --font-sans: "Geist", "PingFang SC", "Microsoft YaHei", sans-serif; --font-serif: "Songti SC", "STSong", "SimSun", "Times New Roman", serif; --font-mono: "Geist Mono", monospace; --color-background: var(--background); --color-foreground: var(--foreground); --color-card: var(--card); --color-card-foreground: var(--card-foreground); --color-popover: var(--popover); --color-popover-foreground: var(--popover-foreground); --color-primary: var(--primary); --color-primary-foreground: var(--primary-foreground); --color-secondary: var(--secondary); --color-secondary-foreground: var(--secondary-foreground); --color-muted: var(--muted); --color-muted-foreground: var(--muted-foreground); --color-accent: var(--accent); --color-accent-foreground: var(--accent-foreground); --color-destructive: var(--destructive); --color-destructive-foreground: var(--destructive-foreground); --color-border: var(--border); --color-input: var(--input); --color-ring: var(--ring); --color-chart-1: var(--chart-1); --color-chart-2: var(--chart-2); --color-chart-3: var(--chart-3); --color-chart-4: var(--chart-4); --color-chart-5: var(--chart-5); --radius-sm: calc(var(--radius) - 4px); --radius-md: calc(var(--radius) - 2px); --radius-lg: var(--radius); --radius-xl: calc(var(--radius) + 4px); --color-sidebar: var(--sidebar); --color-sidebar-foreground: var(--sidebar-foreground); --color-sidebar-primary: var(--sidebar-primary); --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); --color-sidebar-accent: var(--sidebar-accent); --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); --color-sidebar-border: var(--sidebar-border); --color-sidebar-ring: var(--sidebar-ring); --animate-accordion-down: accordion-down 0.2s ease-out; --animate-accordion-up: accordion-up 0.2s ease-out; @keyframes accordion-down { from { height: 0; } to { height: var(--radix-accordion-content-height); } } @keyframes accordion-up { from { height: var(--radix-accordion-content-height); } to { height: 0; } } @keyframes scroll { 0% { transform: translateY(0); } 100% { transform: translateY(-50%); } } --animate-scroll: scroll 20s linear infinite; } @layer base { * { @apply border-border outline-ring/50; } body { @apply bg-background text-foreground font-serif; } h1, h2, h3, h4, h5, h6 { @apply font-serif tracking-tight; } p { @apply font-serif; } } /* ============================================ 中国风卡片样式系统 Chinese Traditional Card Styles ============================================ */ @layer components { /* 基础变量 */ :root { --chinese-gold: oklch(0.75 0.12 85); --chinese-gold-dark: oklch(0.55 0.10 50); --chinese-red: oklch(0.45 0.15 25); --chinese-red-light: oklch(0.55 0.12 25); --chinese-ink: oklch(0.2 0.02 265); --chinese-paper: oklch(0.97 0.01 90); --corner-size: 12px; --border-ornament: 2px; } .dark { --chinese-gold: oklch(0.65 0.10 85); --chinese-gold-dark: oklch(0.45 0.08 50); --chinese-paper: oklch(0.15 0.01 265); } /* ============ 默认中国风卡片 ============ */ .chinese-card-default { border: 1px solid var(--border); border-radius: 4px; box-shadow: 0 1px 3px rgba(0,0,0,0.06), 0 1px 2px rgba(0,0,0,0.04); background: linear-gradient( to bottom right, var(--card) 0%, oklch(from var(--card) l calc(c - 0.005) h) 100% ); transition: all 0.3s ease; } .chinese-card-default:hover { box-shadow: 0 4px 12px rgba(0,0,0,0.08), 0 2px 4px rgba(0,0,0,0.04); border-color: var(--chinese-red-light); } /* ============ 卷轴风格卡片 ============ */ .chinese-card-scroll { border: none; border-radius: 2px; background: var(--card); box-shadow: inset 0 0 0 1px var(--border), 0 2px 8px rgba(0,0,0,0.06); position: relative; padding-top: 8px; } /* 卷轴顶部装饰 */ .chinese-card-scroll::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 6px; background: linear-gradient( to right, var(--chinese-gold-dark) 0%, var(--chinese-gold) 15%, var(--chinese-gold) 85%, var(--chinese-gold-dark) 100% ); border-radius: 2px 2px 0 0; } /* 卷轴底部装饰 */ .chinese-card-scroll::after { content: ''; position: absolute; bottom: 0; left: 0; right: 0; height: 4px; background: linear-gradient( to right, var(--chinese-gold-dark) 0%, var(--chinese-gold) 15%, var(--chinese-gold) 85%, var(--chinese-gold-dark) 100% ); border-radius: 0 0 2px 2px; } /* ============ 牌匾风格卡片 ============ */ .chinese-card-plaque { border: 3px solid var(--chinese-gold-dark); border-radius: 2px; background: linear-gradient( 135deg, var(--card) 0%, oklch(from var(--card) calc(l - 0.02) c h) 100% ); box-shadow: inset 0 0 0 1px var(--chinese-gold), 0 4px 16px rgba(0,0,0,0.1); position: relative; } /* 牌匾内边框装饰 */ .chinese-card-plaque::before { content: ''; position: absolute; inset: 4px; border: 1px solid oklch(from var(--chinese-gold) l c h / 0.3); border-radius: 1px; pointer-events: none; } /* ============ 画像边框风格卡片 ============ */ .chinese-card-portrait { border: 2px solid var(--chinese-ink); border-radius: 0; background: var(--card); box-shadow: 4px 4px 0 0 oklch(from var(--chinese-ink) l c h / 0.15), inset 0 0 0 4px var(--card), inset 0 0 0 5px var(--border); position: relative; } .chinese-card-portrait::before { content: ''; position: absolute; inset: 8px; border: 1px dashed oklch(from var(--chinese-ink) l c h / 0.2); pointer-events: none; } /* ============ 竹简风格卡片 ============ */ .chinese-card-bamboo { border: none; border-radius: 0; background: repeating-linear-gradient( to right, var(--card) 0px, var(--card) 28px, oklch(from var(--border) l c h / 0.5) 28px, oklch(from var(--border) l c h / 0.5) 30px ); box-shadow: inset 0 2px 4px rgba(0,0,0,0.05), 0 2px 8px rgba(0,0,0,0.08); position: relative; padding: 16px 20px; } .chinese-card-bamboo::before, .chinese-card-bamboo::after { content: ''; position: absolute; left: 8px; right: 8px; height: 3px; background: var(--chinese-gold-dark); border-radius: 1px; } .chinese-card-bamboo::before { top: 6px; } .chinese-card-bamboo::after { bottom: 6px; } /* ============ 角饰样式 ============ */ .chinese-card-corner-ornament { position: relative; } .chinese-corner { position: absolute; width: var(--corner-size); height: var(--corner-size); pointer-events: none; } /* 角饰 - 回纹风格 */ .chinese-corner::before, .chinese-corner::after { content: ''; position: absolute; background: var(--chinese-red); } .chinese-corner::before { width: 100%; height: 2px; } .chinese-corner::after { width: 2px; height: 100%; } /* 四个角的位置 */ .chinese-corner-tl { top: 6px; left: 6px; } .chinese-corner-tl::before { top: 0; left: 0; } .chinese-corner-tl::after { top: 0; left: 0; } .chinese-corner-tr { top: 6px; right: 6px; } .chinese-corner-tr::before { top: 0; right: 0; } .chinese-corner-tr::after { top: 0; right: 0; } .chinese-corner-bl { bottom: 6px; left: 6px; } .chinese-corner-bl::before { bottom: 0; left: 0; } .chinese-corner-bl::after { bottom: 0; left: 0; } .chinese-corner-br { bottom: 6px; right: 6px; } .chinese-corner-br::before { bottom: 0; right: 0; } .chinese-corner-br::after { bottom: 0; right: 0; } /* ============ 顶部装饰条 ============ */ .chinese-card-header-decoration { height: 3px; background: linear-gradient( to right, transparent 0%, var(--chinese-red) 10%, var(--chinese-gold) 50%, var(--chinese-red) 90%, transparent 100% ); margin-bottom: 8px; } /* ============ 中国风分隔线 ============ */ .chinese-divider { height: 1px; width: 100%; margin: 12px 0; position: relative; } /* 波浪分隔线 */ .chinese-divider-wave { background: linear-gradient( 90deg, transparent, var(--border) 20%, var(--border) 80%, transparent ); } .chinese-divider-wave::before { content: '〰'; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); background: var(--card); padding: 0 8px; color: var(--chinese-red); font-size: 12px; letter-spacing: 4px; } /* 云纹分隔线 */ .chinese-divider-cloud { background: linear-gradient( 90deg, transparent, var(--border) 15%, var(--border) 85%, transparent ); } .chinese-divider-cloud::before { content: '☁'; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); background: var(--card); padding: 0 12px; color: var(--muted-foreground); font-size: 14px; } /* 回纹分隔线 */ .chinese-divider-meander { height: 8px; background: repeating-linear-gradient( 90deg, var(--chinese-red) 0px, var(--chinese-red) 4px, transparent 4px, transparent 8px ); opacity: 0.3; } /* 简约分隔线 */ .chinese-divider-simple { background: linear-gradient( 90deg, transparent, var(--chinese-red) 30%, var(--chinese-red) 70%, transparent ); opacity: 0.4; } /* ============ 悬停装饰效果 ============ */ .chinese-card-default:hover .chinese-corner::before, .chinese-card-default:hover .chinese-corner::after { background: var(--chinese-gold); } /* ============ 统计卡片特殊样式 ============ */ .chinese-stat-card { position: relative; overflow: hidden; } .chinese-stat-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient( to right, var(--chinese-red) 0%, var(--chinese-gold) 50%, var(--chinese-red) 100% ); } .chinese-stat-card:hover::after { content: ''; position: absolute; bottom: 0; left: 0; right: 0; height: 2px; background: linear-gradient( to right, transparent 0%, var(--chinese-red) 20%, var(--chinese-red) 80%, transparent 100% ); animation: stat-line-in 0.3s ease-out; } @keyframes stat-line-in { from { transform: scaleX(0); } to { transform: scaleX(1); } } /* ============ 印章装饰 ============ */ .chinese-seal { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; border: 2px solid var(--chinese-red); border-radius: 4px; color: var(--chinese-red); font-family: var(--font-serif); font-size: 14px; font-weight: bold; transform: rotate(-5deg); opacity: 0.8; } .chinese-seal-sm { width: 28px; height: 28px; font-size: 10px; border-width: 1.5px; } .chinese-seal-lg { width: 56px; height: 56px; font-size: 18px; border-width: 3px; } }