| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- @import "tailwindcss";
- /* 参考 Edulan 类 LMS:清爽蓝系主色、大留白、卡片阴影与分区背景;结合本站金融教育调性 */
- :root {
- --background: #f0f4fa;
- --foreground: #0f172a;
- --muted: #64748b;
- --card: #ffffff;
- --border: #e2e8f0;
- --accent: #d4a012;
- --accent-hover: #e5b82a;
- --accent-foreground: #0f172a;
- --navy: #0c1929;
- --navy-soft: #152a45;
- --primary: #1d4ed8;
- --primary-soft: #3b82f6;
- --surface-muted: #e8eef7;
- --hero-glow: rgba(59, 130, 246, 0.35);
- --container-max: 80rem;
- --container-px: 1rem;
- --section-py: 4rem;
- }
- @theme inline {
- --color-background: var(--background);
- --color-foreground: var(--foreground);
- --color-muted: var(--muted);
- --color-card: var(--card);
- --color-border: var(--border);
- --color-accent: var(--accent);
- --color-accent-hover: var(--accent-hover);
- --color-navy: var(--navy);
- --color-navy-soft: var(--navy-soft);
- --color-primary-500: var(--primary-soft);
- --color-primary-600: #2563eb;
- --color-primary-700: #1d4ed8;
- --font-sans: var(--font-noto-sans);
- --font-serif: var(--font-noto-serif);
- --shadow-card: 0 4px 6px -1px rgb(15 23 42 / 0.06), 0 12px 24px -4px rgb(15 23 42 / 0.08);
- --shadow-card-hover: 0 12px 32px -8px rgb(15 23 42 / 0.12), 0 4px 12px -2px rgb(15 23 42 / 0.06);
- --radius-card: 1.25rem;
- }
- body {
- background: var(--background);
- color: var(--foreground);
- font-family: var(--font-sans), system-ui, sans-serif;
- }
- .site-container {
- margin-inline: auto;
- width: 100%;
- max-width: var(--container-max);
- padding-inline: var(--container-px);
- }
- .section-block {
- padding-block: var(--section-py);
- }
- .section-block-compact {
- padding-block: clamp(2.25rem, 7vw, 3.5rem);
- }
- .mobile-safe-pb {
- padding-bottom: max(1rem, env(safe-area-inset-bottom));
- }
- /*
- 布局约定(新页面请按类型选一种,勿混用 site-container + max-w-*):
- - .site-container:全站主栏 max 80rem,与顶栏/底栏对齐。
- - .section-block / .section-block-compact:区块上下留白。
- - .page-shell*:正文阅读区,横向 padding 用 --container-px,与顶栏一致。
- - .auth-page-shell:表单窄页 max 28rem,禁止再包 site-container。
- */
- .page-shell {
- box-sizing: border-box;
- margin-inline: auto;
- width: 100%;
- max-width: 48rem;
- padding-inline: var(--container-px);
- padding-block: clamp(2.5rem, 5vw, 3rem);
- }
- @media (min-width: 768px) {
- .page-shell {
- padding-block: 3rem;
- }
- }
- .page-shell-wide {
- max-width: 1200px;
- }
- .page-shell-md {
- max-width: 36rem;
- }
- .page-shell-sm {
- max-width: 32rem;
- }
- /* 登录/注册等窄页:不要用 site-container(会与 max-w-md 抢 max-width,导致 PC 上表单过宽) */
- .auth-page-shell {
- margin-inline: auto;
- width: 100%;
- max-width: 28rem;
- padding-inline: 1rem;
- padding-block: clamp(2.5rem, 8vw, 4rem);
- }
- @media (min-width: 768px) {
- .auth-page-shell {
- padding-block: 4rem;
- }
- }
- .font-serif {
- font-family: var(--font-serif), "Noto Serif SC", serif;
- }
- .text-muted-foreground {
- color: var(--muted);
- }
- /* 页面底纹:网格 + 柔光(Edulan 常见层次) */
- .bg-page {
- background-color: var(--background);
- background-image:
- linear-gradient(180deg, rgb(255 255 255 / 0.72) 0%, transparent 32%),
- radial-gradient(ellipse 80% 50% at 50% -20%, rgb(59 130 246 / 0.12), transparent),
- linear-gradient(
- rgb(15 23 42 / 0.03) 1px,
- transparent 1px
- ),
- linear-gradient(
- 90deg,
- rgb(15 23 42 / 0.03) 1px,
- transparent 1px
- );
- background-size: auto, auto, 48px 48px, 48px 48px;
- }
- @media (min-width: 640px) {
- :root {
- --container-px: 1.25rem;
- }
- }
- @media (min-width: 768px) {
- :root {
- --container-px: 2rem;
- --section-py: 5rem;
- }
- }
- @media (min-width: 1024px) {
- :root {
- --container-px: 2rem;
- --section-py: 5rem;
- }
- }
- @media (max-width: 767px) {
- .bg-page {
- background-size: auto, auto, 32px 32px, 32px 32px;
- }
- }
- .shadow-card {
- box-shadow: var(--shadow-card);
- }
- .shadow-card-hover {
- box-shadow: var(--shadow-card-hover);
- }
- /* 英雄区网格纹理 */
- .hero-grid {
- background-image:
- linear-gradient(rgb(255 255 255 / 0.04) 1px, transparent 1px),
- linear-gradient(90deg, rgb(255 255 255 / 0.04) 1px, transparent 1px);
- background-size: 40px 40px;
- }
- /* 底部波浪装饰 */
- .footer-wave {
- background: linear-gradient(180deg, var(--background) 0%, var(--navy) 100%);
- }
- /* Reusable interaction primitives */
- @keyframes ui-fade-up {
- from {
- opacity: 0;
- transform: translateY(10px);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
- }
- @keyframes ui-skeleton-shimmer {
- 0% {
- background-position: 200% 0;
- }
- 100% {
- background-position: -200% 0;
- }
- }
- .ui-enter {
- animation: ui-fade-up 0.45s ease both;
- }
- .ui-enter-delay-1 {
- animation-delay: 0.08s;
- }
- .ui-enter-delay-2 {
- animation-delay: 0.16s;
- }
- .ui-enter-delay-3 {
- animation-delay: 0.24s;
- }
- .ui-interactive-card {
- transition: transform 280ms ease, box-shadow 280ms ease, border-color 280ms ease;
- transform: translateY(0);
- }
- .ui-interactive-card:hover {
- transform: translateY(-4px);
- box-shadow: var(--shadow-card-hover);
- border-color: rgb(148 163 184 / 0.35);
- }
- .ui-interactive-btn {
- transition: transform 220ms ease, box-shadow 220ms ease, filter 220ms ease;
- }
- .ui-interactive-btn:hover {
- transform: translateY(-1px);
- filter: brightness(1.03);
- }
- .ui-interactive-btn:active {
- transform: translateY(0);
- }
- .ui-skeleton {
- background: linear-gradient(90deg, #e8edf5 25%, #f3f6fb 37%, #e8edf5 63%);
- background-size: 400% 100%;
- animation: ui-skeleton-shimmer 1.4s ease infinite;
- }
|