mach-cms的前台,用vue写的
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

223 lines
5.9 KiB

/* SongUI · 檐下 — 设计契约实现
* 参照 frontendui/SongUI研究报告.md §2-§9 与 src/styles/tokens/{light,dark}.css
* :attr=light 天青昼 / :attr=dark 黛墨夜
*/
:root,
:root[data-theme='light'] {
color-scheme: light;
--song-bg: #f7f4ec;
--song-bg-elevated: #fffdf8;
--song-surface-3: #ece6d8;
--song-text: #3a4a52;
--song-text-secondary: #5a6b74;
--song-text-disabled: #7e8f98;
--song-primary: #4f78b8;
--song-primary-bg: #e7eef9;
--song-success: #4e7a45;
--song-success-bg: #e9f0e4;
--song-warning: #8f7a1e;
--song-warning-bg: #f6f1df;
--song-danger: #a84635;
--song-danger-bg: #f6e9e2;
/* 语义文字墨(置于 -bg 上满足 WCAG AA ≥4.5:1,"色相不可换,明度可校准") */
--song-primary-ink: #34537e;
--song-success-ink: #3d5c37;
--song-warning-ink: #6f5c0f;
--song-danger-ink: #a84635;
--song-border: rgba(58, 74, 82, 0.14);
--song-border-strong: rgba(58, 74, 82, 0.28);
--song-hover: rgba(79, 120, 184, 0.08);
--song-active: rgba(79, 120, 184, 0.14);
--song-btn-bg: #4f78b8;
--song-btn-text: #fff;
--song-seal: #a84635;
--song-shadow-1: 0 1px 2px rgba(20, 24, 27, 0.06);
--song-shadow-2: 0 2px 8px rgba(20, 24, 27, 0.08);
--song-shadow-3: 0 8px 24px rgba(20, 24, 27, 0.12);
--song-font-display: 'LXGW WenKai', 'Noto Serif SC', 'Songti SC', serif;
--song-font-serif: 'Noto Serif SC', 'Songti SC', serif;
--song-font-sans: 'Noto Sans SC', -apple-system, 'PingFang SC', 'Microsoft YaHei', system-ui, sans-serif;
--song-font-body: var(--song-font-sans);
--song-radius-s: 2px;
--song-radius-m: 4px;
--song-radius-l: 6px;
--song-space-1: 4px;
--song-space-2: 8px;
--song-space-3: 12px;
--song-space-4: 16px;
--song-space-5: 24px;
--song-space-6: 32px;
--song-space-8: 64px;
--song-ease: cubic-bezier(0.33, 1, 0.68, 1);
--song-dur-1: 200ms;
--song-dur-2: 320ms;
}
:root[data-theme='dark'] {
color-scheme: dark;
--song-bg: #14181b;
--song-bg-elevated: #1d2326;
--song-surface-3: #232b2f;
--song-text: #e6ecef;
--song-text-secondary: #a9b6be;
--song-text-disabled: #5e6a71;
--song-primary: #9dbeee;
--song-primary-bg: rgba(113, 150, 203, 0.16);
--song-success: #94b989;
--song-success-bg: rgba(148, 185, 137, 0.14);
--song-warning: #d3bc6a;
--song-warning-bg: rgba(211, 188, 106, 0.14);
--song-danger: #d08a79;
--song-danger-bg: rgba(208, 138, 121, 0.14);
--song-primary-ink: #9dbeee;
--song-success-ink: #94b989;
--song-warning-ink: #d3bc6a;
--song-danger-ink: #d08a79;
--song-border: rgba(230, 236, 239, 0.12);
--song-border-strong: rgba(230, 236, 239, 0.26);
--song-hover: rgba(157, 190, 238, 0.1);
--song-active: rgba(157, 190, 238, 0.16);
--song-btn-bg: #48689e;
--song-btn-text: #fff;
--song-seal: #c76a4f;
--song-shadow-1: 0 1px 2px rgba(0, 0, 0, 0.3);
--song-shadow-2: 0 2px 8px rgba(0, 0, 0, 0.35);
--song-shadow-3: 0 8px 24px rgba(0, 0, 0, 0.45);
}
/* ── 应用语义别名(两主题自适应) ───────────────────────────── */
:root {
--ac-bg: var(--song-bg);
--ac-bg-card: var(--song-bg-elevated);
--ac-surface: var(--song-surface-3);
--ac-text: var(--song-text);
--ac-text-secondary: var(--song-text-secondary);
--ac-text-disabled: var(--song-text-disabled);
--ac-primary: var(--song-primary);
--ac-primary-strong: var(--song-btn-bg);
--ac-primary-text: var(--song-btn-text);
--ac-primary-bg: var(--song-primary-bg);
--ac-primary-ink: var(--song-primary-ink);
--ac-success: var(--song-success);
--ac-success-bg: var(--song-success-bg);
--ac-success-ink: var(--song-success-ink);
--ac-warning: var(--song-warning);
--ac-warning-bg: var(--song-warning-bg);
--ac-warning-ink: var(--song-warning-ink);
--ac-danger: var(--song-danger);
--ac-danger-bg: var(--song-danger-bg);
--ac-danger-ink: var(--song-danger-ink);
--ac-border: var(--song-border);
--ac-border-strong: var(--song-border-strong);
--ac-input-border: var(--song-border-strong);
--ac-hover: var(--song-hover);
--ac-active: var(--song-active);
--ac-shadow-1: var(--song-shadow-1);
--ac-shadow-2: var(--song-shadow-2);
--ac-shadow-3: var(--song-shadow-3);
--ac-radius-s: 2px;
--ac-radius-m: 4px;
--ac-radius-l: 6px;
--ac-header-bg: #232d34;
--ac-header-text: #eef2f4;
--ac-header-muted: #a9b6be;
--ac-header-active-bg: #31404a;
}
:root[data-theme='dark'] {
--ac-header-bg: var(--song-bg-elevated);
--ac-header-text: var(--song-text);
--ac-header-muted: var(--song-text-secondary);
--ac-header-active-bg: var(--song-hover);
}
/* ── 基础 §3 ──────────────────────────────────────────────── */
*,
*::before,
*::after {
box-sizing: border-box;
}
html,
body {
margin: 0;
padding: 0;
}
body {
background: var(--song-bg);
color: var(--song-text);
font-family: var(--song-font-body);
font-size: 14px;
line-height: 22px;
-webkit-font-smoothing: antialiased;
transition: background-color var(--song-dur-2) var(--song-ease), color var(--song-dur-2) var(--song-ease);
}
a {
color: var(--ac-primary-ink);
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
/* 焦点态 §9 — 主色 2px 轮廓 */
:focus-visible {
outline: 2px solid var(--song-primary);
outline-offset: 2px;
border-radius: var(--song-radius-s);
}
/* 数字等宽 */
.tnum {
font-variant-numeric: tabular-nums;
}
/* 页面转场 — 雾隐淡入 §7 */
.page-enter-active,
.page-leave-active {
transition: opacity var(--song-dur-2) var(--song-ease), transform var(--song-dur-2) var(--song-ease);
}
.page-enter-from,
.page-leave-to {
opacity: 0;
transform: translateY(8px);
}
/* 动效可关 §7 */
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}