@import "tailwindcss"; @font-face { font-family: 'Aoyagi Reisho'; src: url('/fonts/AoyagiReisho.woff2') format('woff2'), url('/fonts/AoyagiReisho.ttf') format('truetype'); font-weight: normal; font-style: normal; font-display: swap; font-stretch: normal; } /* 字体加载优化 - 防止 FOUT */ .font-loading { font-family: 'STKaiti', 'KaiTi', serif; } .font-loaded { font-family: 'Aoyagi Reisho', 'STKaiti', 'KaiTi', serif; } @theme inline { --font-sans: var(--font-geist-sans); --font-mono: var(--font-geist-mono); --font-chinese: var(--font-noto-sans-sc); --font-calligraphy: 'Aoyagi Reisho', 'STKaiti', 'KaiTi', 'ZCOOL XiaoWei', serif; } :root { /* 主色调 - 墨黑系(水墨画主色) */ --color-primary: #1C1C1C; --color-primary-hover: #0A0A0A; --color-primary-light: #3D3D3D; --color-primary-lighter: #F5F5F5; /* 品牌色 - 朱砂红(印章红) */ --color-brand-primary: #C41E3A; --color-brand-primary-hover: #A01830; --color-brand-primary-light: #E04A68; --color-brand-primary-bg: #FEF2F4; /* 背景色系 - 宣纸白 */ --color-bg-primary: #FFFFFF; --color-bg-secondary: #FFFBF5; --color-bg-tertiary: #F5F5F5; --color-bg-hover: #EFEFEF; /* 文字色系 - 墨色层次 */ --color-text-primary: #1C1C1C; --color-text-secondary: #3D3D3D; --color-text-tertiary: #404040; /* 从 #4A4A4A 调整,提升对比度 */ --color-text-muted: #595959; /* 从 #6B6B6B 调整,确保 WCAG AA 合规 */ /* 边框色系 */ --color-border-primary: #E5E5E5; --color-border-secondary: #D4D4D4; --color-border-accent: #1C1C1C; /* 链接色 */ --color-link: #1C1C1C; --color-link-hover: #C41E3A; /* 状态色 */ --color-success: #16A34A; --color-success-bg: #F0FDF4; --color-warning: #D97706; --color-warning-bg: #FFFBEB; --color-info: #5C5C5C; --color-info-bg: #F5F5F5; --color-error: #C41E3A; --color-error-bg: #FEF2F4; /* 阴影 */ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05); --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.05); --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.05); --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.05); /* 尺寸变量 */ --font-size-xs: 0.75rem; --font-size-sm: 0.875rem; --font-size-base: 1rem; --font-size-lg: 1.125rem; --font-size-xl: 1.25rem; --font-size-2xl: 1.5rem; --font-size-3xl: 1.875rem; --font-size-4xl: 2.25rem; --font-size-5xl: 3rem; --font-size-6xl: 3.75rem; --line-height-tight: 1.1; --line-height-snug: 1.25; --line-height-normal: 1.5; --line-height-relaxed: 1.625; --letter-spacing-tight: -0.025em; --letter-spacing-normal: 0; --letter-spacing-wide: 0.025em; --spacing-xs: 0.25rem; --spacing-sm: 0.5rem; --spacing-md: 1rem; --spacing-lg: 1.5rem; --spacing-xl: 2rem; --spacing-2xl: 3rem; --spacing-3xl: 4rem; --spacing-4xl: 6rem; --spacing-5xl: 8rem; --border-width-thin: 0.5px; --border-width-normal: 1px; --transition-fast: 150ms; --transition-normal: 200ms; --transition-slow: 300ms; --ease-out: cubic-bezier(0.16, 1, 0.3, 1); --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1); } @layer base { * { @apply antialiased; border-color: var(--color-border-primary); } html { scroll-behavior: smooth; font-size: 16px; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; overflow-x: hidden; } @media (min-width: 640px) { html { font-size: 17px; } } @media (min-width: 1024px) { html { font-size: 18px; } } body { background-color: var(--color-bg-primary); color: var(--color-text-primary); font-family: var(--font-chinese), var(--font-sans), -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; line-height: var(--line-height-normal); letter-spacing: var(--letter-spacing-normal); position: relative; overflow-x: hidden; width: 100%; } body::before { content: ''; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: radial-gradient(ellipse at 15% 20%, rgba(28, 28, 28, 0.02) 0%, transparent 50%), radial-gradient(ellipse at 85% 80%, rgba(196, 30, 58, 0.02) 0%, transparent 50%); pointer-events: none; z-index: -1; } h1, h2, h3, h4, h5, h6 { font-weight: 600; line-height: var(--line-height-tight); letter-spacing: var(--letter-spacing-tight); color: var(--color-text-primary); } h1 { font-size: var(--font-size-5xl); font-family: 'Aoyagi Reisho', 'STKaiti', 'KaiTi', 'ZCOOL XiaoWei', serif; font-weight: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; } h2 { font-size: var(--font-size-4xl); } h3 { font-size: var(--font-size-2xl); } h4 { font-size: var(--font-size-xl); } p { color: var(--color-text-secondary); line-height: var(--line-height-relaxed); } a { color: var(--color-link); text-decoration: none; transition: color var(--transition-fast) var(--ease-out); } a:hover { color: var(--color-link-hover); } button { font-family: inherit; cursor: pointer; } input, textarea { font-family: inherit; outline: none; } input:focus, textarea:focus { outline: none; } ::selection { background-color: var(--color-text-primary); color: var(--color-bg-primary); } } @layer utilities { .container-narrow { width: 100%; max-width: 640px; margin-left: auto; margin-right: auto; padding-left: var(--spacing-lg); padding-right: var(--spacing-lg); } .container-wide { width: 100%; max-width: 1200px; margin-left: auto; margin-right: auto; padding-left: var(--spacing-lg); padding-right: var(--spacing-lg); } @media (min-width: 768px) { .container-wide { padding-left: var(--spacing-2xl); padding-right: var(--spacing-2xl); } } @media (min-width: 1024px) { .container-wide { padding-left: 4rem; padding-right: 4rem; } } .container-full { width: 100%; padding-left: var(--spacing-lg); padding-right: var(--spacing-lg); } @media (min-width: 768px) { .container-full { padding-left: var(--spacing-2xl); padding-right: var(--spacing-2xl); } } @media (min-width: 1024px) { .container-full { padding-left: 4rem; padding-right: 4rem; } } .section-padding { padding-top: var(--spacing-5xl); padding-bottom: var(--spacing-5xl); } .section-padding-sm { padding-top: var(--spacing-3xl); padding-bottom: var(--spacing-3xl); } .text-balance { text-wrap: balance; } .text-pretty { text-wrap: pretty; } .border-thin { border-width: var(--border-width-thin); } .transition-smooth { transition: all var(--transition-normal) var(--ease-out); } .transition-fast { transition: all var(--transition-fast) var(--ease-out); } /* 渐变背景 - Wickret 风格 */ .bg-gradient-modern { background: linear-gradient(135deg, var(--color-dark-bg) 0%, #1a1a2e 50%, #16213e 100%); } .bg-gradient-brand { background: linear-gradient(135deg, var(--color-gradient-start), var(--color-gradient-mid), var(--color-gradient-end)); } .bg-gradient-radial { background: radial-gradient(ellipse at center, var(--color-gradient-start) 0%, transparent 70%); } /* 渐变文字 */ .text-gradient-brand { background: linear-gradient(135deg, var(--color-gradient-start), var(--color-gradient-mid), var(--color-gradient-end)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .text-gradient-cyan { background: linear-gradient(135deg, var(--color-gradient-cyan), var(--color-gradient-mid)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } /* 青柳隶书体 - 与 Logo 保持一致 */ .font-calligraphy { font-family: 'Aoyagi Reisho', 'STKaiti', 'KaiTi', 'ZCOOL XiaoWei', serif !important; font-weight: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; } /* 发光效果 */ .bg-glow-red { background: radial-gradient(circle at center, var(--color-accent-red-glow) 0%, transparent 70%); } .bg-glow-purple { background: radial-gradient(circle at center, rgba(139, 92, 246, 0.3) 0%, transparent 70%); } .shadow-glow-purple { box-shadow: 0 0 30px rgba(139, 92, 246, 0.3); } .shadow-glow-red { box-shadow: 0 0 30px rgba(196, 30, 58, 0.3); } } @keyframes fadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeInUp { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideIn { from { opacity: 0; transform: translateX(-8px); } to { opacity: 1; transform: translateX(0); } } @keyframes scaleIn { from { opacity: 0; transform: scale(0.98); } to { opacity: 1; transform: scale(1); } } @keyframes drawLine { from { transform: scaleX(0); } to { transform: scaleX(1); } } @keyframes stampIn { 0% { opacity: 0; transform: scale(1.5) rotate(-15deg); } 50% { opacity: 0.8; transform: scale(0.95) rotate(0deg); } 70% { transform: scale(1.02) rotate(0deg); } 100% { opacity: 1; transform: scale(1) rotate(0deg); } } @keyframes inkSpread { 0% { opacity: 0; transform: scale(0.8); filter: blur(4px); } 100% { opacity: 0.03; transform: scale(1); filter: blur(0); } } @keyframes inkFlow { 0%, 100% { background-position: 0% 0%; } 50% { background-position: 100% 100%; } } @keyframes numberCount { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } @keyframes sectionReveal { from { opacity: 0; transform: translateY(40px); } to { opacity: 1; transform: translateY(0); } } @keyframes cornerFadeIn { from { opacity: 0; transform: scale(0); } to { opacity: 1; transform: scale(1); } } .animate-fade-in { animation: fadeIn 0.5s var(--ease-out) forwards; } .animate-fade-in-up { animation: fadeInUp 0.6s var(--ease-out) forwards; } .animate-slide-in { animation: slideIn 0.4s var(--ease-out) forwards; } .animate-scale-in { animation: scaleIn 0.3s var(--ease-out) forwards; } .animate-draw-line { animation: drawLine 0.4s var(--ease-out) forwards; transform-origin: left; } .animate-stamp-in { animation: stampIn 0.6s var(--ease-out) forwards; } .animate-ink-spread { animation: inkSpread 1s var(--ease-out) forwards; } .animate-section-reveal { animation: sectionReveal 0.8s var(--ease-out) forwards; } .animate-number-count { animation: numberCount 0.5s var(--ease-out) forwards; } .stagger-1 { animation-delay: 0.1s; } .stagger-2 { animation-delay: 0.2s; } .stagger-3 { animation-delay: 0.3s; } .stagger-4 { animation-delay: 0.4s; } .stagger-5 { animation-delay: 0.5s; } .stagger-6 { animation-delay: 0.6s; } .geometric-card { border: 1px solid rgba(196, 30, 58, 0.08); position: relative; background: rgba(255, 255, 255, 0.8); backdrop-filter: blur(8px); transition: all 0.3s var(--ease-out); } .geometric-card::before, .geometric-card::after { content: ''; position: absolute; width: 12px; height: 12px; border: 1px solid rgba(196, 30, 58, 0.15); opacity: 0; transition: all 0.3s var(--ease-out); } .geometric-card::before { top: -1px; left: -1px; border-right: none; border-bottom: none; border-radius: 4px 0 0 0; } .geometric-card::after { bottom: -1px; right: -1px; border-left: none; border-top: none; border-radius: 0 0 4px 0; } .geometric-card:hover { border-color: rgba(196, 30, 58, 0.2); transform: translateY(-4px); box-shadow: 0 12px 40px -12px rgba(196, 30, 58, 0.15); } .geometric-card:hover::before, .geometric-card:hover::after { opacity: 1; } .geometric-card:hover::before { animation: cornerFadeIn 0.3s var(--ease-out) forwards; } .geometric-card:hover::after { animation: cornerFadeIn 0.3s var(--ease-out) 0.1s forwards; } .ink-divider { height: 1px; background: linear-gradient(90deg, transparent, rgba(196, 30, 58, 0.2), transparent); position: relative; } .ink-divider::before { content: ''; position: absolute; left: 50%; top: -3px; width: 6px; height: 6px; background: var(--color-brand-primary); border-radius: 50%; transform: translateX(-50%); opacity: 0.3; } .chapter-title { position: relative; display: inline-block; } .chapter-title::after { content: ''; position: absolute; bottom: -8px; left: 0; width: 40px; height: 3px; background: var(--color-brand-primary); border-radius: 2px; } .scroll-reveal { opacity: 0; transform: translateY(30px); transition: all 0.8s var(--ease-out); } .scroll-reveal.revealed { opacity: 1; transform: translateY(0); } .ink-texture { position: relative; } .ink-texture::before { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E"); opacity: 0.015; pointer-events: none; } ::-webkit-scrollbar { width: 6px; height: 6px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: var(--color-border-accent); border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: var(--color-text-tertiary); } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } html { scroll-behavior: auto; } } @media (max-width: 768px) { :root { --font-size-5xl: 2.25rem; --font-size-4xl: 1.875rem; --font-size-3xl: 1.5rem; --font-size-2xl: 1.25rem; } .section-padding { padding-top: var(--spacing-3xl); padding-bottom: var(--spacing-3xl); } } @keyframes glow { 0%, 100% { box-shadow: 0 4px 12px rgba(196, 30, 58, 0.2); } 50% { box-shadow: 0 8px 24px rgba(196, 30, 58, 0.3); } } @keyframes float { 0%, 100% { transform: translateY(0px); } 50% { transform: translateY(-10px); } } @keyframes pulse-glow { 0%, 100% { opacity: 0.2; } 50% { opacity: 0.4; } } @keyframes ripple { 0% { transform: scale(0); opacity: 1; } 100% { transform: scale(4); opacity: 0; } } @keyframes inkDrop { 0% { transform: scale(0); opacity: 0; filter: blur(8px); } 50% { opacity: 0.8; filter: blur(2px); } 100% { transform: scale(1); opacity: 1; filter: blur(0); } } @keyframes brushStroke { 0% { stroke-dashoffset: 1000; opacity: 0; } 50% { opacity: 1; } 100% { stroke-dashoffset: 0; opacity: 1; } } @keyframes sealPress { 0% { transform: scale(1.8) rotate(-20deg); opacity: 0; } 60% { transform: scale(0.9) rotate(2deg); opacity: 1; } 80% { transform: scale(1.05) rotate(-1deg); } 100% { transform: scale(1) rotate(0deg); opacity: 1; } } @keyframes inkBleed { 0% { box-shadow: 0 0 0 0 rgba(28, 28, 28, 0.1); } 100% { box-shadow: 0 0 20px 10px rgba(28, 28, 28, 0); } } @keyframes shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } } @keyframes breathe { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.02); } } @keyframes slideUp { 0% { transform: translateY(100%); opacity: 0; } 100% { transform: translateY(0); opacity: 1; } } @keyframes slideDown { 0% { transform: translateY(-100%); opacity: 0; } 100% { transform: translateY(0); opacity: 1; } } @keyframes expandWidth { 0% { width: 0; opacity: 0; } 100% { width: 100%; opacity: 1; } } @keyframes typewriter { from { width: 0; } to { width: 100%; } } @keyframes blink { 0%, 50% { opacity: 1; } 51%, 100% { opacity: 0; } } .animate-glow { animation: glow 2s ease-in-out infinite; } .animate-float { animation: float 3s ease-in-out infinite; } .animate-pulse-glow { animation: pulse-glow 2s ease-in-out infinite; } .animate-ripple { animation: ripple 0.6s ease-out forwards; } .animate-ink-drop { animation: inkDrop 0.8s cubic-bezier(0.16, 1, 0.3, 1) forwards; } .animate-seal-press { animation: sealPress 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; } .animate-ink-bleed { animation: inkBleed 1s ease-out forwards; } .animate-shimmer { background: linear-gradient( 90deg, rgba(196, 30, 58, 0) 0%, rgba(196, 30, 58, 0.1) 50%, rgba(196, 30, 58, 0) 100% ); background-size: 200% 100%; animation: shimmer 2s infinite; } .animate-breathe { animation: breathe 4s ease-in-out infinite; } .animate-slide-up { animation: slideUp 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards; } .animate-slide-down { animation: slideDown 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards; } .animate-expand-width { animation: expandWidth 0.6s cubic-bezier(0.16, 1, 0.3, 1) forwards; } .hover-lift { transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.3s cubic-bezier(0.16, 1, 0.3, 1); } .hover-lift:hover { transform: translateY(-4px); box-shadow: 0 12px 24px rgba(28, 28, 28, 0.1); } .hover-scale { transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1); } .hover-scale:hover { transform: scale(1.02); } .hover-glow { transition: box-shadow 0.3s cubic-bezier(0.16, 1, 0.3, 1); } .hover-glow:hover { box-shadow: 0 0 20px rgba(196, 30, 58, 0.3); } .hover-ink { position: relative; overflow: hidden; } .hover-ink::before { content: ''; position: absolute; top: 50%; left: 50%; width: 0; height: 0; background: rgba(28, 28, 28, 0.05); border-radius: 50%; transform: translate(-50%, -50%); transition: width 0.6s cubic-bezier(0.16, 1, 0.3, 1), height 0.6s cubic-bezier(0.16, 1, 0.3, 1); } .hover-ink:hover::before { width: 300%; height: 300%; } .ink-border { position: relative; } .ink-border::after { content: ''; position: absolute; bottom: 0; left: 0; width: 0; height: 2px; background: linear-gradient(90deg, #1C1C1C, #C41E3A); transition: width 0.4s cubic-bezier(0.16, 1, 0.3, 1); } .ink-border:hover::after { width: 100%; } .seal-stamp { position: relative; } .seal-stamp::before { content: ''; position: absolute; inset: -4px; border: 2px solid rgba(196, 30, 58, 0.3); border-radius: inherit; opacity: 0; transform: scale(1.1); transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); } .seal-stamp:hover::before { opacity: 1; transform: scale(1); } .primary-gradient { background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-light) 100%); } .primary-gradient-text { background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-light) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .brand-gradient { background: linear-gradient(135deg, var(--color-brand-primary) 0%, var(--color-brand-primary-light) 100%); } .brand-gradient-text { background: linear-gradient(135deg, var(--color-brand-primary) 0%, var(--color-brand-primary-light) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .card-shadow { box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04); } .card-shadow-hover:hover { box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08); } .btn-primary { background: #C41E3A; color: #FFFFFF; border-radius: 8px; padding: 12px 32px; font-weight: 600; transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); } .btn-primary:hover { background: #A01830; transform: translateY(-2px); box-shadow: 0 4px 12px rgba(196, 30, 58, 0.25); } .btn-secondary { background: #1C1C1C; color: #FFFFFF; border-radius: 8px; padding: 12px 32px; font-weight: 600; transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); } .btn-secondary:hover { background: #0A0A0A; transform: translateY(-2px); box-shadow: 0 4px 12px rgba(28, 28, 28, 0.25); } .btn-outline { background: transparent; border: 2px solid #1C1C1C; color: #1C1C1C; border-radius: 8px; padding: 12px 32px; font-weight: 600; transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); } .btn-outline:hover { background: #F5F5F5; transform: translateY(-2px); box-shadow: 0 2px 8px rgba(28, 28, 28, 0.15); } .card-health { background: var(--color-bg-primary); border: 1px solid var(--color-border-primary); border-radius: 12px; padding: 24px; transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); } .card-health:hover { border-color: var(--color-primary); transform: translateY(-4px); box-shadow: 0 8px 24px rgba(0, 0, 0, 0.06); } .icon-container-primary { background: linear-gradient(135deg, rgba(0, 94, 184, 0.1), rgba(0, 163, 224, 0.1)); border-radius: 12px; transition: box-shadow 0.3s ease; } .icon-container-primary:hover { box-shadow: 0 4px 12px rgba(0, 94, 184, 0.15); } .icon-container-brand { background: linear-gradient(135deg, rgba(196, 30, 58, 0.1), rgba(224, 74, 104, 0.1)); border-radius: 12px; transition: box-shadow 0.3s ease; } .icon-container-brand:hover { box-shadow: 0 4px 12px rgba(196, 30, 58, 0.15); } /* 移动端安全区域适配 */ .safe-area-inset-bottom { padding-bottom: env(safe-area-inset-bottom, 0px); } /* 隐藏移动端底部导航栏时的页面底部间距 */ body { padding-bottom: 0; } @media (max-width: 767px) { body { padding-bottom: 64px; } /* 防止移动端内容溢出 */ .container-wide, .container-full, .container-narrow { padding-left: 1rem; padding-right: 1rem; max-width: 100%; overflow-x: hidden; } /* 优化移动端文字大小 */ h1 { font-size: 2rem; } h2 { font-size: 1.75rem; } h3 { font-size: 1.375rem; } /* 优化移动端按钮和链接的触摸目标 */ a, button { min-height: 44px; min-width: 44px; } /* 防止长文本溢出 */ p, li, span { overflow-wrap: break-word; word-wrap: break-word; } } /* 平板端优化 (768px - 1023px) */ @media (min-width: 768px) and (max-width: 1023px) { .container-wide, .container-full { padding-left: 2rem; padding-right: 2rem; } /* 平板端文字大小调整 */ h1 { font-size: 2.5rem; } h2 { font-size: 2rem; } h3 { font-size: 1.5rem; } /* 平板端section间距 */ .section-padding { padding-top: 4rem; padding-bottom: 4rem; } }