@tailwind base; @tailwind components; @tailwind utilities; @layer base { :root { --background: 0 0% 100%; --foreground: 222.2 47.4% 11.2%; --muted: 210 40% 96.1%; --muted-foreground: 215.4 16.3% 46.9%; --border: 214.3 31.8% 91.4%; --input: 214.3 31.8% 91.4%; --ring: 222.2 84% 4.9%; } html { scroll-behavior: smooth; } body { @apply bg-background text-foreground antialiased; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif; } } @layer components { .container-page { @apply mx-auto w-full max-w-7xl px-4 sm:px-6 lg:px-8; } .prose-rich h1, .prose-rich h2, .prose-rich h3 { @apply mt-6 mb-3 font-semibold text-gray-900; } .prose-rich h1 { @apply text-2xl; } .prose-rich h2 { @apply text-xl; } .prose-rich h3 { @apply text-lg; } .prose-rich p { @apply my-3 leading-7 text-gray-700; } .prose-rich img { @apply my-4 rounded-lg; } .prose-rich ul, .prose-rich ol { @apply my-3 pl-6; } .prose-rich ul { @apply list-disc; } .prose-rich ol { @apply list-decimal; } .prose-rich a { @apply text-brand-600 underline underline-offset-2; } .prose-rich blockquote { @apply border-l-4 border-gray-200 pl-4 italic text-gray-600; } } /* react-quill 编辑器内部样式 */ .ql-editor { min-height: 240px; } /* ===== Hero 几何动画 ===== */ @keyframes hero-float { 0%, 100% { transform: translateY(0) rotate(0deg); } 50% { transform: translateY(-20px) rotate(6deg); } } @keyframes hero-float-rev { 0%, 100% { transform: translateY(0) rotate(0deg); } 50% { transform: translateY(16px) rotate(-8deg); } } @keyframes hero-spin-slow { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } @keyframes hero-pulse-ring { 0% { transform: scale(0.8); opacity: 0.6; } 50% { transform: scale(1.1); opacity: 0.2; } 100% { transform: scale(0.8); opacity: 0.6; } } @keyframes hero-slide { 0%, 100% { transform: translateX(0); } 50% { transform: translateX(12px); } } .hero-anim-float { animation: hero-float 6s ease-in-out infinite; } .hero-anim-float-rev { animation: hero-float-rev 7s ease-in-out infinite; } .hero-anim-spin { animation: hero-spin-slow 18s linear infinite; } .hero-anim-pulse { animation: hero-pulse-ring 4s ease-in-out infinite; } .hero-anim-slide { animation: hero-slide 5s ease-in-out infinite; } /* ===== Showcase 浮动动画 ===== */ @keyframes showcase-gentle-float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } @keyframes showcase-glow { 0%, 100% { opacity: 0.4; } 50% { opacity: 0.7; } } .showcase-anim-float { animation: showcase-gentle-float 5s ease-in-out infinite; } .showcase-anim-glow { animation: showcase-glow 4s ease-in-out infinite; }