@import "./fonts.css"; @import "tailwindcss"; @import "tw-animate-css"; @plugin "@tailwindcss/typography"; /* Blog List Component Styles */ .line-clamp-3 { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; } /* Modern Design Elements */ .gradient-text { background: var(--ui-title-gradient); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .glass-effect { background: rgba(255, 255, 255, 0.1); backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.2); box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); } .dark .glass-effect { background: rgba(0, 0, 0, 0.2); border: 1px solid rgba(255, 255, 255, 0.05); } .hover-lift { transition: transform 0.3s ease, box-shadow 0.3s ease; } .hover-lift:hover { transform: translateY(-5px); box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1); } @custom-variant dark (&:is(.dark *)); :root { --radius: 0.75rem; --background: #F8FAFC; /* 稍微浅一点,增加与卡片的区分度 */ --foreground: #0F172A; /* 更深的颜色,提高对比度 */ --card: #FFFFFF; --card-foreground: #0F172A; --popover: #FFFFFF; --popover-foreground: #0F172A; --primary: #2563EB; --primary-foreground: #FFFFFF; --secondary: #F1F5F9; --secondary-foreground: #0F172A; --muted: #F1F5F9; --muted-foreground: #64748B; --accent: #F97316; --accent-foreground: #FFFFFF; --destructive: #EF4444; --border: #E2E8F0; --input: #E2E8F0; --ring: #2563EB; --chart-1: oklch(0.646 0.222 41.116); --chart-2: oklch(0.6 0.118 184.704); --chart-3: oklch(0.398 0.07 227.392); --chart-4: oklch(0.828 0.189 84.429); --chart-5: oklch(0.769 0.188 70.08); --sidebar: oklch(0.985 0 0); --sidebar-foreground: oklch(0.145 0 0); --sidebar-primary: oklch(0.205 0 0); --sidebar-primary-foreground: oklch(0.985 0 0); --sidebar-accent: oklch(0.97 0 0); --sidebar-accent-foreground: oklch(0.205 0 0); --sidebar-border: oklch(0.922 0 0); --sidebar-ring: oklch(0.708 0 0); --transition-standard: 0.3s cubic-bezier(0.4, 0, 0.2, 1); --svg-filter-color: invert(0%) sepia(0%) saturate(0%) hue-rotate(324deg) brightness(96%) contrast(104%); /* Modern Design Variables */ --gradient-primary: linear-gradient(135deg, #2563EB, #F97316); --gradient-secondary: linear-gradient(135deg, #3B82F6, #10B981); --gradient-accent: linear-gradient(135deg, #F97316, #FB923C); --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05); --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); --animation-bounce: cubic-bezier(0.34, 1.56, 0.64, 1); --animation-smooth: cubic-bezier(0.65, 0, 0.35, 1); --animation-spring: cubic-bezier(0.22, 1, 0.36, 1); /* Global UI Design Tokens */ --ui-hero-overlay: linear-gradient(135deg, rgb(30 58 138 / 0.05), rgb(37 99 235 / 0.03), rgb(154 52 18 / 0.05)); --ui-title-gradient: linear-gradient(90deg, #0F172A 0%, #2563EB 50%, #ea580c 100%); --ui-surface-bg: rgb(255 255 255 / 0.8); --ui-surface-border: rgb(226 232 240 / 0.8); --ui-surface-shadow: 0 4px 12px -2px rgb(0 0 0 / 0.05); --ui-surface-blur: 12px; --ui-section-soft-bg: rgb(37 99 235 / 0.03); } .dark { --background: #09090B; --foreground: #F8FAFC; --card: #18181B; --card-foreground: #F8FAFC; --popover: #18181B; --popover-foreground: #F8FAFC; --primary: #3B82F6; --primary-foreground: #FFFFFF; --secondary: #27272A; --secondary-foreground: #F8FAFC; --muted: #27272A; --muted-foreground: #A1A1AA; --accent: #FB923C; --accent-foreground: #09090B; --destructive: #EF4444; --border: #27272A; --input: #27272A; --ring: #3B82F6; --chart-1: oklch(0.488 0.243 264.376); --chart-2: oklch(0.696 0.17 162.48); --chart-3: oklch(0.769 0.188 70.08); --chart-4: oklch(0.627 0.265 303.9); --chart-5: oklch(0.645 0.246 16.439); --sidebar: oklch(0.205 0 0); --sidebar-foreground: oklch(0.985 0 0); --sidebar-primary: oklch(0.488 0.243 264.376); --sidebar-primary-foreground: oklch(0.985 0 0); --sidebar-accent: oklch(0.269 0 0); --sidebar-accent-foreground: oklch(0.985 0 0); --sidebar-border: oklch(1 0 0 / 10%); --sidebar-ring: oklch(0.556 0 0); --svg-filter-color: invert(100%) sepia(0%) saturate(0%) hue-rotate(324deg) brightness(102%) contrast(101%); /* Dark Mode Modern Design Variables */ --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.3); --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4); --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.5); --shadow-xl: 0 12px 40px rgba(59, 130, 246, 0.2); /* Global UI Design Tokens - Dark */ --ui-hero-overlay: linear-gradient(135deg, rgb(30 58 138 / 0.3), rgb(37 99 235 / 0.2), rgb(154 52 18 / 0.3)); --ui-title-gradient: linear-gradient(90deg, #ffffff 0%, #bfdbfe 50%, #fdba74 100%); --ui-surface-bg: rgb(24 24 27 / 0.7); --ui-surface-border: rgb(39 39 42 / 0.7); --ui-surface-shadow: var(--shadow-sm); --ui-section-soft-bg: rgb(37 99 235 / 0.1); } @theme inline { --radius-sm: calc(var(--radius) - 4px); --radius-md: calc(var(--radius) - 2px); --radius-lg: var(--radius); --radius-xl: calc(var(--radius) + 4px); --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-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); --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); --color-page-surface: var(--ui-surface-bg); --color-page-surface-border: var(--ui-surface-border); --color-page-section-soft: var(--ui-section-soft-bg); } @layer base { * { @apply border-border outline-ring/50; line-height: 1.5; } body { @apply bg-background text-foreground; font-family: "Space Grotesk", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", "Inter", "Segoe UI", Roboto, Helvetica, Arial, sans-serif; font-feature-settings: "ss01", "ss02", "cv01", "cv02"; } h1, h2, h3, h4, h5, h6 { @apply font-bold tracking-tight; font-family: "Archivo", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", "Inter", "Segoe UI", Roboto, Helvetica, Arial, sans-serif; line-height: 1.2; } a { @apply transition-colors duration-200; } img { @apply rounded-md; } } /* Animation utilities */ @layer utilities { .page-hero-overlay { @apply absolute inset-0 pointer-events-none; background-image: var(--ui-hero-overlay); } .page-title-gradient { @apply bg-clip-text text-transparent; background-image: var(--ui-title-gradient); } .page-surface { @apply rounded-2xl border; background: var(--ui-surface-bg); border-color: var(--ui-surface-border); box-shadow: var(--ui-surface-shadow); backdrop-filter: blur(var(--ui-surface-blur)); } .page-section-soft { background: var(--ui-section-soft-bg); } .page-content-main { @apply w-full lg:w-10/12 lg:mx-auto; } .page-content-narrow { @apply w-full lg:w-8/12 lg:mx-auto; } .animate-fade-in { animation: fadeIn 0.6s ease-out forwards; } .animate-fade-in-up { animation: fadeInUp 0.6s ease-out forwards; } .animate-slide-in-left { animation: slideInLeft 0.5s ease-out forwards; } .animate-slide-in-right { animation: slideInRight 0.5s ease-out forwards; } .animate-scale-in { animation: scaleIn 0.4s ease-out forwards; } .animate-bounce-in { animation: bounceIn 0.6s cubic-bezier(0.22, 1, 0.36, 1) forwards; } .hover-lift { transition: transform 0.3s ease, box-shadow 0.3s ease; } .hover-lift:hover { transform: translateY(-5px); box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1); } .dark .hover-lift:hover { box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.3); } .gradient-text-primary { background: linear-gradient(135deg, #2563EB, #F97316); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .gradient-text-accent { background: linear-gradient(135deg, #F97316, #FB923C); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } /* Scroll reveal animations */ .reveal { opacity: 0; transform: translateY(20px); transition: opacity 0.6s ease-out, transform 0.6s ease-out; } .reveal.active { opacity: 1; transform: translateY(0); } /* Reduced motion support */ @media (prefers-reduced-motion: reduce) { .animate-fade-in, .animate-fade-in-up, .animate-slide-in-left, .animate-slide-in-right, .animate-scale-in, .animate-bounce-in, .reveal { animation: none; opacity: 1; transform: none; } } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes fadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideInLeft { from { opacity: 0; transform: translateX(-20px); } to { opacity: 1; transform: translateX(0); } } @keyframes slideInRight { from { opacity: 0; transform: translateX(20px); } to { opacity: 1; transform: translateX(0); } } @keyframes scaleIn { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } @keyframes bounceIn { from { opacity: 0; transform: scale(0.9); } to { opacity: 1; transform: scale(1); } }