424 lines
14 KiB
CSS
424 lines
14 KiB
CSS
/**
|
||
* AKSRT Design Tokens v7 — 1:1 legacy Alignment
|
||
* ------------------------------------------------------------
|
||
* 单一真理源(Single Source of Truth)
|
||
* 所有颜色、字体、间距、动效都从此处读取,禁止在组件内硬编码。
|
||
* 严格对齐 legacy main.css 的视觉值。
|
||
*/
|
||
|
||
:root {
|
||
/* ===== Primary — legacy theme-color (#f04494 pink) ===== */
|
||
--color-primary: #f04494;
|
||
--color-primary-hover: #e0307e;
|
||
--color-primary-active: #c9206d;
|
||
--color-primary-soft: rgba(240, 68, 148, 0.10);
|
||
--color-primary-softer: rgba(240, 68, 148, 0.05);
|
||
--color-on-primary: #FFFFFF;
|
||
|
||
/* ===== Ink (text) — 对齐 legacy --key-color / --main-color / --muted-color ===== */
|
||
--color-ink: #333333; /* legacy --key-color */
|
||
--color-ink-2: #4e5358; /* legacy --main-color */
|
||
--color-ink-3: #777777; /* legacy --muted-color */
|
||
--color-ink-4: #999999; /* legacy --muted-2-color */
|
||
|
||
/* ===== Surface — 对齐 legacy --body-bg-color / --main-bg-color / --muted-bg-color ===== */
|
||
--surface-page: #f5f6f7; /* legacy --body-bg-color */
|
||
--surface-1: #FFFFFF; /* legacy --main-bg-color */
|
||
--surface-2: #eeeeee; /* legacy --muted-bg-color #eee */
|
||
--surface-3: #e9ecef; /* 输入框 / code / 次级面 */
|
||
--surface-4: #f8f8f8; /* 分页 / 标签 / hover 薄层 */
|
||
|
||
/* ===== Borders — 对齐 legacy --main-border-color ===== */
|
||
--color-line: rgba(50, 50, 50, 0.06);
|
||
--color-line-soft: rgba(0, 0, 0, 0.03);
|
||
--color-line-stronger: rgba(50, 50, 50, 0.12);
|
||
|
||
/* ===== State colors ===== */
|
||
--color-success: #10B981;
|
||
--color-warning: #F59E0B;
|
||
--color-error: #EF4444;
|
||
--color-info: #3B82F6;
|
||
|
||
/* ===== Accent (action green — legacy tabbar/CTA) ===== */
|
||
--color-accent: #18a058;
|
||
--color-accent-soft: rgba(24, 160, 88, 0.12);
|
||
--color-accent-shadow: rgba(24, 160, 88, 0.28);
|
||
|
||
/* ===== Fonts — 对齐 legacy(系统默认字体栈)===== */
|
||
--font-display: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif;
|
||
--font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif;
|
||
--font-ui: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif;
|
||
--font-mono: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;
|
||
|
||
/* ===== Type scale ===== */
|
||
--text-xs: 0.75rem; /* 12 */
|
||
--text-sm: 0.875rem; /* 14 */
|
||
--text-base: 0.875rem; /* 14 — 对齐参考主题 bootstrap 基础字号 */
|
||
--text-md: 1.125rem; /* 18 */
|
||
--text-lg: 1.25rem; /* 20 */
|
||
--text-xl: 1.5rem; /* 24 */
|
||
--text-2xl: 1.875rem; /* 30 */
|
||
--text-3xl: 2.25rem; /* 36 */
|
||
--text-4xl: 3rem; /* 48 */
|
||
--text-5xl: 3.75rem; /* 60 */
|
||
--leading-tight: 1.2;
|
||
--leading-snug: 1.4;
|
||
--leading-normal: 1.6; /* legacy body line-height */
|
||
--leading-relaxed: 1.6;
|
||
|
||
/* ===== Spacing (4px base) ===== */
|
||
--space-1: 4px;
|
||
--space-2: 8px;
|
||
--space-3: 12px;
|
||
--space-4: 16px;
|
||
--space-5: 20px;
|
||
--space-6: 24px;
|
||
--space-7: 32px;
|
||
--space-8: 40px;
|
||
--space-9: 48px;
|
||
--space-10: 64px;
|
||
--space-11: 80px;
|
||
--space-12: 96px;
|
||
|
||
/* ===== Radius — 对齐 legacy --main-radius: 8px ===== */
|
||
--radius-xs: 3px;
|
||
--radius-sm: 4px;
|
||
--radius: 8px;
|
||
--radius-lg: 8px; /* legacy main-radius — was 10px */
|
||
--radius-xl: 12px;
|
||
--radius-2xl: 16px;
|
||
--radius-pill: 100px;
|
||
--radius-avatar: 50%;
|
||
|
||
/* ===== Shadows — 对齐 legacy --main-shadow: rgba(116,116,116,0.08) ===== */
|
||
--shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.03);
|
||
--shadow-sm: 0 0 10px rgba(116, 116, 116, 0.08);
|
||
--shadow: 0 0 10px rgba(116, 116, 116, 0.12);
|
||
--shadow-lg: 0 12px 32px rgba(18, 18, 18, 0.10);
|
||
--shadow-drawer: 0 18px 60px rgba(0, 0, 0, 0.20);
|
||
|
||
/* ===== Layout — 对齐 legacy --mian-max-width: 1200px ===== */
|
||
--nav-height: 60px;
|
||
--container: 1200px;
|
||
--container-wide: 1440px;
|
||
--container-read: 760px;
|
||
--container-page: 880px;
|
||
--sidebar-width: 311px;
|
||
--content-gap: 24px;
|
||
--section-gap: 24px;
|
||
--sidebar-bp: 992px;
|
||
|
||
/* ===== Motion ===== */
|
||
--ease: cubic-bezier(.4, 0, .2, 1);
|
||
--ease-out: cubic-bezier(.16, 1, .3, 1);
|
||
--ease-spring: cubic-bezier(.34, 1.56, .64, 1);
|
||
--dur-fast: 0.15s;
|
||
--dur: 0.25s;
|
||
--dur-slow: 0.4s;
|
||
|
||
/* ===== Focus Ring — 对齐 legacy focus-shadow-color ===== */
|
||
--focus-ring: 0 0 2px 3px rgba(253, 83, 161, 0.4);
|
||
|
||
/* ===== Z-index layers ===== */
|
||
--z-dropdown: 100;
|
||
--z-sticky: 200;
|
||
--z-fixed: 300;
|
||
--z-overlay: 400;
|
||
--z-modal: 500;
|
||
--z-popover: 600;
|
||
--z-toast: 700;
|
||
--z-tooltip: 800;
|
||
|
||
/* ===== Button sizes — 对齐 legacy ===== */
|
||
--radius-btn: 4px;
|
||
--btn-sm-h: 28px;
|
||
--btn-md-h: 34px;
|
||
--btn-lg-h: 44px;
|
||
|
||
/* ===== Card density — 对齐 legacy .box-body { padding: 15px } ===== */
|
||
--card-padding: 15px;
|
||
--card-padding-sm: 10px;
|
||
--card-gap: 16px;
|
||
--card-gap-lg: 20px;
|
||
|
||
/* ===== Skeleton loader ===== */
|
||
--skeleton-base: var(--surface-2);
|
||
--skeleton-shine: var(--surface-1);
|
||
|
||
/* ===== Extended tokens (used by components) ===== */
|
||
--color-primary-light: var(--color-primary-soft);
|
||
--color-surface: var(--surface-1);
|
||
--color-line-strong: var(--color-line);
|
||
--color-bg-hover: var(--surface-2);
|
||
--color-border-light: var(--color-line-soft);
|
||
--color-fill: var(--surface-2);
|
||
--color-warning-bg: #fffbe6;
|
||
--color-warning-text: #ad6800;
|
||
|
||
--text-secondary: var(--color-ink-3);
|
||
--text-tertiary: var(--color-ink-4);
|
||
|
||
--surface-active: var(--surface-2);
|
||
--surface-card: var(--surface-1);
|
||
--surface-hover: var(--surface-2);
|
||
--surface-secondary: var(--surface-2);
|
||
|
||
--radius-code: var(--radius);
|
||
--radius-full: 100px;
|
||
--shadow-xl: 0 0 10px rgba(116, 116, 116, 0.12);
|
||
--space-16: 64px;
|
||
--z-floating: 900;
|
||
|
||
--transition-fast: 0.15s ease;
|
||
--transition-base: 0.25s ease;
|
||
|
||
/* ===== Composite / Context tokens — 对齐 legacy ===== */
|
||
--header-bg: var(--blur-bg);
|
||
--header-color: var(--color-ink-2);
|
||
--footer-bg: var(--surface-1);
|
||
--footer-color: var(--color-ink-4);
|
||
--blur-bg: rgba(255, 255, 255, 0.80);
|
||
--float-btn-bg: rgba(200, 200, 200, 0.40);
|
||
|
||
/* ===== AKSRT-to-AKSRT canonical aliases ===== */
|
||
--font-heading: var(--font-ui);
|
||
--radius-card: var(--radius);
|
||
--radius-md: var(--radius);
|
||
--color-primary-50: var(--color-primary-soft);
|
||
--color-primary-dark: var(--color-primary-active);
|
||
--shadow-md: var(--shadow);
|
||
--mini-radius: calc(var(--radius) / 1.4);
|
||
|
||
/* ===== Avatar size system — legacy --this-size 等价 ===== */
|
||
--aksrt-avatar-size-xs: 24px;
|
||
--aksrt-avatar-size-sm: 32px;
|
||
--aksrt-avatar-size: 40px;
|
||
--aksrt-avatar-size-lg: 56px;
|
||
--aksrt-avatar-size-xl: 80px;
|
||
|
||
/* ===== Post card thumbnail scale ===== */
|
||
--aksrt-card-thumb-scale: 56.25%; /* 16:9 */
|
||
|
||
/* ===== Multi-color palette (for buttons / badges / gradients) ===== */
|
||
--aksrt-rose: #f43f5e;
|
||
--aksrt-rose-soft: rgba(244, 63, 94, 0.12);
|
||
--aksrt-blue: #3b82f6;
|
||
--aksrt-blue-soft: rgba(59, 130, 246, 0.12);
|
||
--aksrt-green: #10b981;
|
||
--aksrt-green-soft: rgba(16, 185, 129, 0.12);
|
||
--aksrt-orange: #f97316;
|
||
--aksrt-orange-soft:rgba(249, 115, 22, 0.12);
|
||
--aksrt-purple: #8b5cf6;
|
||
--aksrt-purple-soft:rgba(139, 92, 246, 0.12);
|
||
--aksrt-cyan: #06b6d4;
|
||
--aksrt-cyan-soft: rgba(6, 182, 212, 0.12);
|
||
--aksrt-yellow: #eab308;
|
||
--aksrt-yellow-soft:rgba(234, 179, 8, 0.12);
|
||
--aksrt-red: #ef4444;
|
||
--aksrt-red-soft: rgba(239, 68, 68, 0.12);
|
||
--aksrt-teal: #14b8a6;
|
||
--aksrt-teal-soft: rgba(20, 184, 166, 0.12);
|
||
--aksrt-indigo: #6366f1;
|
||
--aksrt-indigo-soft:rgba(99, 102, 241, 0.12);
|
||
--aksrt-pink: #ec4899;
|
||
--aksrt-pink-soft: rgba(236, 72, 153, 0.12);
|
||
|
||
/* ===== VIP / special gradients ===== */
|
||
--aksrt-vip-gold-1: #f6d365;
|
||
--aksrt-vip-gold-2: #fda085;
|
||
--aksrt-grad-sunset-1: #f093fb;
|
||
--aksrt-grad-sunset-2: #f5576c;
|
||
--aksrt-grad-ocean-1: #4facfe;
|
||
--aksrt-grad-ocean-2: #00f2fe;
|
||
--aksrt-grad-forest-1: #43e97b;
|
||
--aksrt-grad-forest-2: #38f9d7;
|
||
--aksrt-grad-night-1: #a18cd1;
|
||
--aksrt-grad-night-2: #fbc2eb;
|
||
--aksrt-grad-fire-1: #f83600;
|
||
--aksrt-grad-fire-2: #f9d423;
|
||
|
||
/* ===== Component sizing ===== */
|
||
--aksrt-toggle-w: 44px;
|
||
--aksrt-toggle-h: 24px;
|
||
--aksrt-stepper-h: 36px;
|
||
--aksrt-badge-h: 22px;
|
||
|
||
/* ===== Legacy name bridge ===== */
|
||
--text-1: var(--color-ink);
|
||
--text-2: var(--color-ink-2);
|
||
--text-3: var(--color-ink-3);
|
||
--border: var(--color-line);
|
||
--color-text-1: var(--color-ink);
|
||
--color-text-2: var(--color-ink-2);
|
||
--color-text-3: var(--color-ink-3);
|
||
--color-primary-bg: var(--color-primary-softer);
|
||
--color-danger: var(--color-error);
|
||
}
|
||
|
||
/* ============================================================
|
||
* Blur-bg fallback cascade (mirrors legacy behaviour)
|
||
* ============================================================ */
|
||
@supports not ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
|
||
:root {
|
||
--blur-bg: var(--surface-1);
|
||
--header-bg: var(--surface-1);
|
||
}
|
||
}
|
||
|
||
@supports not ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
|
||
html.dark,
|
||
body.dark-theme {
|
||
--blur-bg: #37383a;
|
||
--header-bg: #37383a;
|
||
}
|
||
}
|
||
|
||
body.modal-open,
|
||
body.dialog-open {
|
||
--blur-bg: var(--surface-1);
|
||
--header-bg: var(--surface-1);
|
||
}
|
||
|
||
body.modal-open .site-nav,
|
||
body.modal-open .footer-tabbar,
|
||
body.modal-open .float-right .float-btn,
|
||
body.dialog-open .site-nav,
|
||
body.dialog-open .footer-tabbar,
|
||
body.dialog-open .float-right .float-btn {
|
||
backdrop-filter: none !important;
|
||
-webkit-backdrop-filter: none !important;
|
||
}
|
||
|
||
html.dark body.modal-open,
|
||
html.dark body.dialog-open,
|
||
body.dark-theme.modal-open,
|
||
body.dark-theme.dialog-open {
|
||
--blur-bg: #37383a;
|
||
--header-bg: #37383a;
|
||
}
|
||
|
||
/* ============================================================
|
||
* Multi-level container responsive — 对齐 legacy --mian-max-width
|
||
* 不同视口宽度下容器自动调整
|
||
* ============================================================ */
|
||
@media (min-width: 992px) {
|
||
:root {
|
||
--container: 960px;
|
||
}
|
||
}
|
||
|
||
@media (min-width: 1200px) {
|
||
:root {
|
||
--container: 1140px;
|
||
}
|
||
}
|
||
|
||
@media (min-width: 1400px) {
|
||
:root {
|
||
--container: 1200px;
|
||
}
|
||
}
|
||
|
||
/* ============================================================
|
||
* Dark Theme — 对齐 legacy .dark-theme 精确 hex
|
||
* body.dark-theme 与 html.dark 同权(legacy 用 body class)
|
||
* ============================================================ */
|
||
html.dark,
|
||
body.dark-theme {
|
||
--color-ink: #f8fafc; /* legacy --key-color */
|
||
--color-ink-2: #e5eef7; /* legacy --main-color */
|
||
--color-ink-3: #b4b6bb; /* legacy --muted-color */
|
||
--color-ink-4: #888a8f; /* legacy --muted-2-color */
|
||
|
||
--surface-page: #292a2d; /* legacy --body-bg-color */
|
||
--surface-1: #323335; /* legacy --main-bg-color */
|
||
--surface-2: #2d2e31; /* legacy --muted-bg-color */
|
||
--surface-3: #3a3c42;
|
||
--surface-4: #26282d;
|
||
|
||
--color-line: rgba(114, 114, 114, 0.1);
|
||
--color-line-soft: rgba(184, 184, 184, 0.02);
|
||
--color-line-stronger: rgba(255, 255, 255, 0.12);
|
||
|
||
--color-primary-soft: rgba(240, 68, 148, 0.16);
|
||
--color-primary-softer: rgba(240, 68, 148, 0.08);
|
||
|
||
--color-primary-light: var(--color-primary-soft);
|
||
--color-surface: var(--surface-1);
|
||
--color-line-strong: var(--color-line);
|
||
--color-bg-hover: var(--surface-2);
|
||
--color-border-light: var(--color-line-soft);
|
||
--color-fill: var(--surface-2);
|
||
|
||
--text-secondary: var(--color-ink-3);
|
||
--text-tertiary: var(--color-ink-4);
|
||
|
||
--surface-active: var(--surface-2);
|
||
--surface-card: var(--surface-1);
|
||
--surface-hover: var(--surface-2);
|
||
--surface-secondary: var(--surface-2);
|
||
|
||
--shadow-xl: 0 0 10px rgba(24, 24, 24, 0.18);
|
||
--shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.18);
|
||
--shadow-sm: 0 0 10px rgba(24, 24, 24, 0.1); /* legacy --main-shadow dark */
|
||
--shadow: 0 0 10px rgba(24, 24, 24, 0.14);
|
||
--shadow-lg: 0 14px 36px rgba(0, 0, 0, 0.32);
|
||
--shadow-drawer: 0 20px 60px rgba(0, 0, 0, 0.60);
|
||
|
||
--blur-bg: rgba(50, 51, 53, 0.80);
|
||
--float-btn-bg: rgba(70, 70, 70, 0.40);
|
||
--header-bg: var(--blur-bg);
|
||
--footer-bg: var(--surface-1);
|
||
--footer-color: var(--color-ink-4);
|
||
--shadow-md: var(--shadow);
|
||
|
||
--skeleton-base: #3a3b3e;
|
||
--skeleton-shine: #444548;
|
||
|
||
/* Multi-color palette — dark mode: same hue, softer tint backgrounds */
|
||
--aksrt-rose-soft: rgba(244, 63, 94, 0.18);
|
||
--aksrt-blue-soft: rgba(59, 130, 246, 0.18);
|
||
--aksrt-green-soft: rgba(16, 185, 129, 0.18);
|
||
--aksrt-orange-soft:rgba(249, 115, 22, 0.18);
|
||
--aksrt-purple-soft:rgba(139, 92, 246, 0.18);
|
||
--aksrt-cyan-soft: rgba(6, 182, 212, 0.18);
|
||
--aksrt-yellow-soft:rgba(234, 179, 8, 0.18);
|
||
--aksrt-red-soft: rgba(239, 68, 68, 0.18);
|
||
--aksrt-teal-soft: rgba(20, 184, 166, 0.18);
|
||
--aksrt-indigo-soft:rgba(99, 102, 241, 0.18);
|
||
--aksrt-pink-soft: rgba(236, 72, 153, 0.18);
|
||
}
|
||
|
||
/* Dark mode component refinements */
|
||
html.dark .site-nav,
|
||
body.dark-theme .site-nav {
|
||
border-bottom-color: var(--color-line);
|
||
box-shadow: none;
|
||
}
|
||
|
||
html.dark .footer-tabbar,
|
||
body.dark-theme .footer-tabbar {
|
||
background: rgba(50, 51, 53, 0.80);
|
||
box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.20);
|
||
}
|
||
|
||
html.dark .n-drawer,
|
||
html.dark .n-modal,
|
||
html.dark .n-dialog,
|
||
body.dark-theme .n-drawer,
|
||
body.dark-theme .n-modal,
|
||
body.dark-theme .n-dialog {
|
||
background: var(--surface-1);
|
||
}
|
||
|
||
html.dark .post-card,
|
||
html.dark .widget,
|
||
html.dark .aksrt-theme-box,
|
||
html.dark .theme-box,
|
||
body.dark-theme .post-card,
|
||
body.dark-theme .widget,
|
||
body.dark-theme .aksrt-theme-box,
|
||
body.dark-theme .theme-box {
|
||
border-color: transparent;
|
||
}
|