@tailwind base; @tailwind components; @tailwind utilities; :root { /* === 水墨雅致 · 色彩体系 === */ --color-primary: #1A1A1A; --color-primary-hover: #0D0D0D; --color-primary-light: #3D3D3D; --color-primary-lighter: #F5F4F0; --color-primary-rgb: 26, 26, 26; /* 朱砂点睛:品牌红仅作点缀 */ --color-brand-primary: #C41E3A; --color-brand-primary-hover: #A01830; --color-brand-primary-light: #E04A68; --color-brand-primary-bg: #FEF2F4; /* 宣纸暖白 + 水墨灰梯度 */ --color-bg-primary: #FAFAF7; --color-bg-secondary: #F5F4F0; --color-bg-tertiary: #E8E6E0; --color-bg-section: #F2F1EC; --color-bg-hover: #EDECE7; /* 墨色文字梯度 */ --color-text-primary: #1A1A1A; --color-text-secondary: #3A3835; --color-text-tertiary: #4A4742; --color-text-muted: #6B6560; --color-text-subtle: #9C978F; --color-text-placeholder: #7A756D; --color-text-hint: #A09A92; /* 水墨边框 */ --color-border-primary: #E0DDD6; --color-border-secondary: #D4D0C8; --color-border-accent: #1A1A1A; --color-border-light: #EDEBE5; --color-border-dark: #3A3835; --color-link: #1A1A1A; --color-link-hover: #C41E3A; --color-success: #16A34A; --color-success-hover: #15803D; --color-success-bg: #F0FDF4; --color-warning: #D97706; --color-warning-hover: #B45309; --color-warning-bg: #FFFBEB; --color-info: #5C5C5C; --color-info-bg: #F5F5F5; --color-error: #C41E3A; --color-error-bg: #FEF2F4; --color-accent-blue: #3B6B9E; --color-accent-purple: #6B4C8A; --color-accent-cyan: #2D7A8A; --color-brand-primary-rgb: 196, 30, 58; --color-warning-rgb: 217, 119, 6; --color-success-rgb: 22, 163, 74; --color-accent-blue-rgb: 59, 107, 158; --color-accent-purple-rgb: 107, 76, 138; --color-accent-cyan-rgb: 45, 122, 138; /* 深墨色底部区域 */ --color-footer-bg: #1A1816; --color-cta-bg: #1A1816; --color-hero-dark-end: #1A1816; --color-footer-text: #B5AFA5; --color-footer-text-muted: #8A8478; --color-footer-text-dim: #9E988C; --color-footer-text-link: #D4CFC5; --color-footer-border: #3A3630; --color-challenge-isolation: #FEF2F4; --color-challenge-isolation-hover: #FDE8EC; --color-challenge-growth: #FFFBEB; --color-challenge-growth-hover: #FEF3C7; --color-challenge-compliance: #F0FDF4; --color-challenge-compliance-hover: #DCFCE7; --color-flip-card-bg: #F5F4F0; --color-flip-card-border: #E0DDD6; --color-flip-card-divider: #A09A92; --color-flip-card-divider-subtle: #D4D0C8; /* 宣纸纹理色彩 */ --color-ink-wash-light: rgba(26, 26, 26, 0.04); --color-ink-wash-medium: rgba(26, 26, 26, 0.08); --color-ink-wash-dark: rgba(26, 26, 26, 0.15); --color-toast-success-bg: #F0FDF4; --color-toast-success-border: #BBF7D0; --color-toast-error-bg: #FEF2F4; --color-toast-error-border: #FECACA; --color-toast-info-bg: #EFF6FF; --color-toast-info-border: #BFDBFE; --color-toast-close: #A3A3A3; --color-toast-close-hover: #595959; --color-skeleton-bg: #E5E5E5; /* 水墨雅致阴影 - 更柔和 */ --shadow-sm: 0 1px 3px rgba(26, 24, 22, 0.04); --shadow-md: 0 4px 8px rgba(26, 24, 22, 0.05); --shadow-lg: 0 10px 20px rgba(26, 24, 22, 0.06); --shadow-xl: 0 20px 40px rgba(26, 24, 22, 0.08); --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.15; --line-height-snug: 1.35; --line-height-normal: 1.6; --line-height-relaxed: 1.8; --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: 200ms; --transition-normal: 300ms; --transition-slow: 500ms; --ease-out: cubic-bezier(0.25, 1, 0.5, 1); --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1); } [data-theme="dark"] { /* === 水墨雅致 · 暗色模式 === */ --color-primary: #E0DCD4; --color-primary-hover: #EDEAE2; --color-primary-light: #A09A92; --color-primary-lighter: #2A2722; --color-primary-rgb: 224, 220, 212; --color-brand-primary: #D43650; --color-brand-primary-hover: #E04A68; --color-brand-primary-light: #C41E3A; --color-brand-primary-bg: rgba(196, 30, 58, 0.15); --color-bg-primary: #0E0D0B; --color-bg-secondary: #151412; --color-bg-tertiary: #1E1C18; --color-bg-section: #181614; --color-bg-hover: #2A2722; --color-text-primary: #E0DCD4; --color-text-secondary: #B5AFA5; --color-text-tertiary: #9E988C; --color-text-muted: #8A8478; --color-text-subtle: #6B6560; --color-text-placeholder: #6B6560; --color-text-hint: #5A554D; --color-border-primary: #2A2722; --color-border-secondary: #3A3630; --color-border-accent: #E0DCD4; --color-border-light: #1E1C18; --color-border-dark: #B5AFA5; --color-link: #E0DCD4; --color-link-hover: #E04A68; --color-success: #22C55E; --color-success-hover: #16A34A; --color-success-bg: rgba(22, 163, 74, 0.15); --color-warning: #F59E0B; --color-warning-hover: #D97706; --color-warning-bg: rgba(217, 119, 6, 0.15); --color-info: #8C8C8C; --color-info-bg: #1A1A1A; --color-error: #D43650; --color-error-bg: rgba(196, 30, 58, 0.15); --color-accent-blue: #5A8BB8; --color-accent-purple: #8B6BAE; --color-accent-cyan: #4A9AAA; --color-brand-primary-rgb: 212, 54, 80; --color-warning-rgb: 245, 158, 11; --color-success-rgb: 34, 197, 94; --color-accent-blue-rgb: 90, 139, 184; --color-accent-purple-rgb: 139, 107, 174; --color-accent-cyan-rgb: 74, 154, 170; --color-footer-bg: #0A0908; --color-cta-bg: #141210; --color-hero-dark-end: #141210; --color-footer-text: #9E988C; --color-footer-text-muted: #6B6560; --color-footer-text-dim: #8A8478; --color-footer-text-link: #B5AFA5; --color-footer-border: #2A2722; --color-challenge-isolation: rgba(196, 30, 58, 0.12); --color-challenge-isolation-hover: rgba(196, 30, 58, 0.2); --color-challenge-growth: rgba(217, 119, 6, 0.12); --color-challenge-growth-hover: rgba(217, 119, 6, 0.2); --color-challenge-compliance: rgba(22, 163, 74, 0.12); --color-challenge-compliance-hover: rgba(22, 163, 74, 0.2); --color-flip-card-bg: #1E1C18; --color-flip-card-border: #2A2722; --color-flip-card-divider: #5A554D; --color-flip-card-divider-subtle: #3A3630; --color-toast-success-bg: rgba(22, 163, 74, 0.15); --color-toast-success-border: rgba(34, 197, 94, 0.3); --color-toast-error-bg: rgba(196, 30, 58, 0.15); --color-toast-error-border: rgba(224, 74, 104, 0.3); --color-toast-info-bg: rgba(59, 130, 246, 0.15); --color-toast-info-border: rgba(59, 130, 246, 0.3); --color-toast-close: #666666; --color-toast-close-hover: #A3A3A3; --color-skeleton-bg: #2A2722; --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.25); --shadow-md: 0 4px 8px rgba(0, 0, 0, 0.25); --shadow-lg: 0 10px 20px rgba(0, 0, 0, 0.25); --shadow-xl: 0 20px 40px rgba(0, 0, 0, 0.3); } @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-sans); 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 20% 15%, rgba(var(--color-primary-rgb), 0.015) 0%, transparent 50%), radial-gradient(ellipse at 80% 85%, rgba(var(--color-brand-primary-rgb), 0.015) 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); } 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; } .font-calligraphy { font-family: var(--font-ma-shan-zheng), 'Ma Shan Zheng', 'ZCOOL XiaoWei', 'STKaiti', 'KaiTi', serif !important; font-weight: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; } .font-brand { font-family: var(--font-aoyagi-reisho), 'Aoyagi Reisho', 'Ma Shan Zheng', 'ZCOOL XiaoWei', 'STKaiti', 'KaiTi', serif !important; font-weight: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; } ::selection { background-color: var(--color-text-primary); color: var(--color-bg-primary); } } @layer utilities { .container-wide { width: 100%; max-width: 1280px; 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); } @media (min-width: 1024px) { .section-padding { padding-top: 10rem; padding-bottom: 10rem; } } /* ===== 背景纹理系统 ===== */ .bg-texture-grid { background-image: linear-gradient(rgba(var(--color-border-primary-rgb, 229, 229, 229), 0.3) 1px, transparent 1px), linear-gradient(90deg, rgba(var(--color-border-primary-rgb, 229, 229, 229), 0.3) 1px, transparent 1px); background-size: 60px 60px; } .bg-texture-dots { background-image: radial-gradient(circle, rgba(var(--color-border-primary-rgb, 229, 229, 229), 0.4) 1px, transparent 1px); background-size: 24px 24px; } .bg-texture-noise { position: relative; } .bg-texture-noise::before { content: ''; position: absolute; inset: 0; opacity: 0.03; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E"); background-repeat: repeat; background-size: 128px 128px; pointer-events: none; z-index: 0; } .bg-gradient-radial-brand { background: radial-gradient(ellipse at 30% 20%, rgba(var(--color-brand-primary-rgb), 0.04) 0%, transparent 50%), radial-gradient(ellipse at 70% 80%, rgba(var(--color-primary-rgb), 0.02) 0%, transparent 50%); } .bg-gradient-subtle-warm { background: radial-gradient(ellipse at 50% 0%, rgba(var(--color-brand-primary-rgb), 0.03) 0%, transparent 60%); } /* ===== 水墨雅致 · 宣纸纹理 ===== */ .bg-paper-texture { position: relative; } .bg-paper-texture::before { content: ''; position: absolute; inset: 0; opacity: 0.025; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='paper'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='5' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23paper)'/%3E%3C/svg%3E"); background-repeat: repeat; background-size: 200px 200px; pointer-events: none; z-index: 0; } /* 水墨渐淡分隔线 */ .ink-divider { height: 1px; background: linear-gradient(90deg, transparent, var(--color-border-primary), transparent); } /* 水墨淡染背景块 */ .ink-wash-block { background: radial-gradient(ellipse at 50% 50%, var(--color-ink-wash-light) 0%, transparent 70%); } } @keyframes fadeInUp { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: translateY(0); } } @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); } } .animate-fade-in-up { animation: fadeInUp 0.6s var(--ease-out) forwards; } .animate-stamp-in { animation: stampIn 0.6s var(--ease-out) forwards; } .stagger-1 { animation-delay: 0.1s; } .stagger-2 { animation-delay: 0.2s; } ::-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); } } .safe-area-inset-bottom { padding-bottom: env(safe-area-inset-bottom, 0px); } body { padding-bottom: 0; text-wrap: pretty; } @media (max-width: 767px) { body { padding-bottom: 64px; } .container-wide, .container-full { 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:not(nav[aria-label="breadcrumb"] a), button { min-height: 44px; min-width: 44px; } nav[aria-label="breadcrumb"] a { min-height: 0; min-width: 0; } p, li, span { overflow-wrap: break-word; word-wrap: break-word; } } @property --border-angle { syntax: ''; initial-value: 0deg; inherits: false; } @keyframes rotateBorder { from { --border-angle: 0deg; } to { --border-angle: 360deg; } } .ink-glow-border { animation: rotateBorder 6s linear infinite paused; } .ink-glow-border::before { content: ''; position: absolute; inset: -1px; border-radius: inherit; padding: 1px; background: conic-gradient(from var(--border-angle), var(--glow-start, var(--color-text-muted)), var(--glow-end, var(--color-border-primary)), var(--glow-start, var(--color-text-muted))); -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); -webkit-mask-composite: xor; mask-composite: exclude; opacity: 0; transition: opacity 0.6s var(--ease-out); } .ink-glow-border:hover::before { opacity: 0.8; } .ink-glow-border::after { content: ''; position: absolute; inset: -6px; border-radius: inherit; background: conic-gradient(from var(--border-angle), var(--glow-start, var(--color-text-muted)), var(--glow-end, var(--color-border-primary)), var(--glow-start, var(--color-text-muted))); filter: blur(16px); opacity: 0; transition: opacity 0.6s var(--ease-out); z-index: -1; } .ink-glow-border:hover::after { opacity: 0.2; } .ink-glow-border:hover { animation-play-state: running; } @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-padding { padding-top: 4rem; padding-bottom: 4rem; } } .page-transition-loader { width: 120px; height: 3px; background: var(--color-bg-section); border-radius: 2px; overflow: hidden; } .page-transition-loader__bar { width: 40%; height: 100%; background: var(--color-brand-primary); border-radius: 2px; animation: page-loader-slide 1.2s ease-in-out infinite; } @keyframes page-loader-slide { 0% { transform: translateX(-100%); } 50% { transform: translateX(200%); } 100% { transform: translateX(-100%); } } @media (prefers-reduced-motion: reduce) { .page-transition-loader__bar { animation: none; width: 100%; } } @keyframes ripple { 0% { transform: scale(0); opacity: 0.5; } 100% { transform: scale(4); opacity: 0; } } .animate-ripple { animation: ripple 0.6s ease-out forwards; } @keyframes skeletonPulse { 0%, 100% { background-color: var(--color-skeleton-bg); opacity: 1; } 50% { background-color: color-mix(in srgb, var(--color-brand-primary) 8%, var(--color-skeleton-bg)); opacity: 0.8; } } .skeleton-brand { animation: skeletonPulse 2s ease-in-out infinite; } /* ===== 背景纹理系统 - Dark Mode ===== */ [data-theme="dark"] .bg-texture-grid { background-image: linear-gradient(rgba(var(--color-border-primary-rgb, 42, 39, 34), 0.5) 1px, transparent 1px), linear-gradient(90deg, rgba(var(--color-border-primary-rgb, 42, 39, 34), 0.5) 1px, transparent 1px); } [data-theme="dark"] .bg-texture-dots { background-image: radial-gradient(circle, rgba(var(--color-border-primary-rgb, 42, 39, 34), 0.5) 1px, transparent 1px); } [data-theme="dark"] .bg-paper-texture::before { opacity: 0.04; } [data-theme="dark"] .bg-texture-noise::before { opacity: 0.05; } [data-theme="dark"] .bg-gradient-radial-brand { background: radial-gradient(ellipse at 30% 20%, rgba(var(--color-brand-primary-rgb), 0.06) 0%, transparent 50%), radial-gradient(ellipse at 70% 80%, rgba(var(--color-primary-rgb), 0.03) 0%, transparent 50%); } [data-theme="dark"] .bg-gradient-subtle-warm { background: radial-gradient(ellipse at 50% 0%, rgba(var(--color-brand-primary-rgb), 0.05) 0%, transparent 60%); } [data-theme="dark"] .ink-divider { background: linear-gradient(90deg, transparent, var(--color-border-secondary), transparent); } [data-theme="dark"] .ink-wash-block { background: radial-gradient(ellipse at 50% 50%, rgba(var(--color-primary-rgb), 0.03) 0%, transparent 70%); }