Files
ewoooc/web/static/css/ewoooc-tokens.css
2026-05-12 22:17:31 +08:00

463 lines
22 KiB
CSS
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* EwoooC Design Token v3.0 — Production
* ─────────────────────────────────────────────────────────────
* DNA: MOMO Pro × Nothing × Claude
* 變更重點(相對 v2.x
* 1. 全站去除 linear-gradientradial-gradientbox-shadow blur改為單色 + 1px 線條
* 2. 五大導航群組各自 accent避免「全站焦糖橘」造成主次不分
* 3. 字級從 16 級壓到 8 級spacing scale 重新排序為 4/8/12/16/24/32/48
* 4. 米色背景統一 #f0ebe1介於原本 body 與 surface 之間)
* 5. 不純黑:所有 ink 都帶 5% 暖色,避免 var(--momo-text-strong) / var(--momo-on-accent, #fff8ef) 的數位刺眼
*
* 用法:
* .momo-app[data-active-page="..."] 由 _ewoooc_shell.html 自動套群組 accent
* 不要在 component CSS 裡再重新指定群組色,全部走 var(--momo-page-*)
*/
:root {
/* ════════════════════════════════════════════════════════
* 1. 中性色系 — 暖米基底
* ════════════════════════════════════════════════════════ */
/* 頁面層 */
--momo-bg-body: #f0ebe1; /* 主背景,比 v2 略提亮 */
--momo-bg-surface: #faf6ec; /* 卡片底 */
--momo-bg-elevated: #fdfaf2; /* 浮層、modal */
--momo-bg-paper: #f5efe2; /* 第二層卡片、表格列 */
--momo-bg-subtle: #e6e0d2; /* 分區底色 */
--momo-bg-muted: #d3cbb9; /* disabled 區塊 */
--momo-bg-sidebar: #ebe4d4; /* sidebar 米色(不再是黑底) */
--momo-bg-sidebar-hover: #e0d8c4;
/* 暖墨色(用於文字 / 線條,永遠不純黑) */
--momo-ink: #2a2520;
--momo-ink-strong: #1a1612;
--momo-ink-soft: #4a4138;
/* 主錦 KPI 深色家族 — 各群組獨立設計性格 */
--momo-ink-monitor: #3d2e22; /* walnut 胡桃 — 監控 */
--momo-ink-analytics: #3a2e1a; /* 焦糖糖蜜 — 分析 */
--momo-ink-ops: #3f2418; /* 深陶土 — 營運 */
--momo-ink-ai: #3a2a1f; /* espresso — AI */
--momo-ink-system: #352621; /* 烏木 — 系統 */
/* 文字三層 */
--momo-text-primary: #2a2520;
--momo-text-secondary: #6b6155;
--momo-text-tertiary: #9b9081;
--momo-text-disabled: #c4baa8;
--momo-text-inverse: #faf7f0;
/* 邊框 — 全部走低對比暖色 */
--momo-border: rgba(42, 37, 32, 0.16);
--momo-border-strong: rgba(42, 37, 32, 0.28);
--momo-border-light: rgba(42, 37, 32, 0.10);
--momo-border-faint: rgba(42, 37, 32, 0.06);
--momo-divider: rgba(42, 37, 32, 0.10);
/* ════════════════════════════════════════════════════════
* 2. 暖色家族 — 全站可用的 accent token
* ════════════════════════════════════════════════════════
* 所有 accent 都在「不太暗」的暖色域HSL L 3862
* 命名遵循「材質感」而非「明度」caramel/honey/clay/rust...
*/
--momo-warm-caramel: #c96442; /* 焦糖橘 — 監控群組 */
--momo-warm-clay: #b86f52; /* 陶土橘紅 — 營運群組 */
--momo-warm-honey: #c89043; /* 蜂蜜金 — 分析群組 */
--momo-warm-saffron: #b8792f; /* 番紅花橘 — AI 中樞群組 */
--momo-warm-terra: #a85d3d; /* 暖陶土 — 系統群組 */
--momo-warm-rose: #a84428; /* 磚紅 — danger only (HSL 12°真暖紅) */
--momo-warm-olive: #8a7340; /* 焦土 — 中性暖 */
--momo-warm-cream: #f7efe3; /* 奶油米白 */
--momo-warm-latte: #d8c1aa; /* 奶茶木 */
--momo-warm-apricot: #e7b98f; /* 杏色 */
--momo-warm-blush: #edd6cc; /* 霧粉 */
--momo-warm-greige: #b8aea2; /* 暖灰 */
/* 暖色 soft 版本(背景 / chip 用) */
--momo-warm-caramel-soft: rgba(201, 100, 66, 0.12);
--momo-warm-clay-soft: rgba(184, 111, 82, 0.12);
--momo-warm-honey-soft: rgba(200, 144, 67, 0.14);
--momo-warm-saffron-soft: rgba(184, 121, 47, 0.13);
--momo-warm-terra-soft: rgba(168, 93, 61, 0.12);
--momo-warm-rose-soft: rgba(168, 68, 40, 0.12);
--momo-warm-olive-soft: rgba(138, 115, 64, 0.12);
--momo-accent-strong: #8f4530; /* V2 compatibility: prefer --momo-page-accent-dark in new CSS */
/* ════════════════════════════════════════════════════════
* 3. 群組主題 — 五大導航群組各自 accent
* ════════════════════════════════════════════════════════
* 由 _ewoooc_shell.html 設置 data-page-group=""
* 未指定時 fallback 到 caramel
*
* 群組映射:
* monitor → caramel (商品看板 / 活動看板)
* analytics → honey (業績分析 / 月份總表 / 成長 / 當日)
* ops → clay (廠商缺貨 / 雲端匯入)
* ai → saffron (AI 助手 / AI 觀測台)
* system → terra (系統管理 / 設定)
*/
--momo-page-accent: var(--momo-warm-caramel);
--momo-page-accent-dark: #8f4530;
--momo-page-accent-soft: var(--momo-warm-caramel-soft);
--momo-page-accent-line: rgba(201, 100, 66, 0.32);
--momo-page-inverse: #fff8ef;
/* 圖表 / 視覺輔助色(屬於同群組的協和色) */
--momo-page-chart-1: var(--momo-warm-caramel);
--momo-page-chart-2: var(--momo-warm-apricot);
--momo-page-chart-3: var(--momo-warm-honey);
--momo-page-chart-4: var(--momo-warm-olive);
--momo-page-chart-5: var(--momo-warm-clay);
--momo-page-chart-6: var(--momo-warm-greige);
/* ════════════════════════════════════════════════════════
* 4. 狀態色 — 去飽和
* ════════════════════════════════════════════════════════ */
--momo-success: #5a7a3f;
--momo-success-bg: #e6ead6;
--momo-success-border: rgba(90, 122, 63, 0.32);
--momo-success-text: #3d5527;
--momo-warning: #b8792f;
--momo-warning-bg: #f3e7c4;
--momo-warning-border: rgba(184, 121, 47, 0.32);
--momo-warning-text: #6e500e;
--momo-danger: #a84428;
--momo-danger-bg: #efd3c4;
--momo-danger-border: rgba(168, 68, 40, 0.32);
--momo-danger-text: #7a3210;
--momo-info: #4a6b85;
--momo-info-bg: #dfe5ec;
--momo-info-border: rgba(74, 107, 133, 0.32);
--momo-info-text: #2d4459;
/* ════════════════════════════════════════════════════════
* 5. 標籤色Tag / Chip / Badge
* ════════════════════════════════════════════════════════
* 一個標籤 = 一組 (bg + border + text),三件成套
* 全部 WCAG AA on bg
*/
--momo-tag-caramel-bg: #f5e1d9;
--momo-tag-caramel-border: rgba(201, 100, 66, 0.32);
--momo-tag-caramel-text: #7a3520;
--momo-tag-honey-bg: #f3e7c4;
--momo-tag-honey-border: rgba(200, 144, 67, 0.36);
--momo-tag-honey-text: #6e500e;
--momo-tag-clay-bg: #ebd9cb;
--momo-tag-clay-border: rgba(184, 111, 82, 0.34);
--momo-tag-clay-text: #6f3a23;
--momo-tag-saffron-bg: #f0dfc1;
--momo-tag-saffron-border: rgba(184, 121, 47, 0.36);
--momo-tag-saffron-text: #6f4915;
--momo-tag-terra-bg: #ecdcd0;
--momo-tag-terra-border: rgba(168, 93, 61, 0.34);
--momo-tag-terra-text: #6a3621;
--momo-tag-rust-bg: #efd3c4;
--momo-tag-rust-border: rgba(168, 68, 40, 0.34);
--momo-tag-rust-text: #7a3210;
--momo-tag-olive-bg: #ece5d2;
--momo-tag-olive-border: rgba(138, 115, 64, 0.32);
--momo-tag-olive-text: #5a4a1c;
--momo-tag-ink-bg: #2a2520;
--momo-tag-ink-border: #2a2520;
--momo-tag-ink-text: #faf7f0;
--momo-tag-muted-bg: #e2dccf;
--momo-tag-muted-border: rgba(42, 37, 32, 0.16);
--momo-tag-muted-text: #645c52;
--momo-tag-success-bg: #e6ead6;
--momo-tag-success-border: rgba(90, 122, 63, 0.30);
--momo-tag-success-text: #3d5527;
/* P0 / P1 / P2 警示專用與蜂蜜黃同家族HSL 12° / 39° / 30° */
--momo-priority-p0-bg: #efd3c4;
--momo-priority-p0-border: rgba(168, 68, 40, 0.36);
--momo-priority-p0-text: #7a3210;
--momo-priority-p1-bg: #f3e7c4;
--momo-priority-p1-border: rgba(200, 144, 67, 0.36);
--momo-priority-p1-text: #6e500e;
--momo-priority-p2-bg: #ece5d2;
--momo-priority-p2-border: rgba(138, 115, 64, 0.32);
--momo-priority-p2-text: #5a4a1c;
/* ════════════════════════════════════════════════════════
* 6. Typography
* ════════════════════════════════════════════════════════ */
--momo-font-display:
"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI",
"PingFang TC", "Noto Sans TC", "Microsoft JhengHei", sans-serif;
--momo-font-family:
"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI",
"PingFang TC", "Noto Sans TC", "Microsoft JhengHei", sans-serif;
--momo-font-mono:
"JetBrains Mono", "SF Mono", Menlo, Consolas, monospace;
--momo-font-family-base: var(--momo-font-family);
--momo-font-family-mono: var(--momo-font-mono);
/* 字級 — 8 階 (從 28 種降到 8) */
--momo-text-display: 30px; /* hero 數字 */
--momo-text-headline: 22px; /* 區塊大數字 */
--momo-text-title: 17px; /* 卡片標題 */
--momo-text-body: 14px; /* 內文 */
--momo-text-body-sm: 13px; /* 表格內文 */
--momo-text-meta: 12px; /* mono 數據 / 次要 */
--momo-text-label: 11px; /* LABEL only */
--momo-text-label-tiny: 10px; /* 角落標籤 only */
/* 兼容 v2 命名 */
--momo-font-size-xs: 12px;
--momo-font-size-sm: 13px;
--momo-font-size-base: 14px;
--momo-font-size-lg: 17px;
--momo-font-size-xl: 22px;
--momo-font-size-2xl: 30px;
--momo-font-weight-normal: 400;
--momo-font-weight-medium: 500;
--momo-font-weight-semibold: 600;
--momo-font-weight-bold: 700;
--momo-font-weight-black: 800;
--momo-line-height-tight: 1.2;
--momo-line-height-base: 1.5;
--momo-line-height-loose: 1.7;
/* ════════════════════════════════════════════════════════
* 7. Spacing — 7 階
* ════════════════════════════════════════════════════════ */
--momo-space-1: 4px;
--momo-space-2: 8px;
--momo-space-3: 12px;
--momo-space-4: 16px;
--momo-space-5: 24px;
--momo-space-6: 32px;
--momo-space-7: 48px;
--momo-space-8: 64px;
/* ════════════════════════════════════════════════════════
* 8. Radius — 全站偏方角
* ════════════════════════════════════════════════════════ */
--momo-radius-sm: 2px;
--momo-radius-md: 4px;
--momo-radius-lg: 6px;
--momo-radius-xl: 10px; /* 只有 hero / modal */
--momo-radius-pill: 999px;
--momo-radius-circle: 50%;
/* ════════════════════════════════════════════════════════
* 9. Shadow — Nothing 風:用線條取代陰影
* ════════════════════════════════════════════════════════ */
--momo-shadow-sm: inset 0 -1px 0 var(--momo-border-light);
--momo-shadow-md: 0 0 0 1px var(--momo-border-light);
--momo-shadow-lg: 0 0 0 1px var(--momo-border-strong);
--momo-shadow-modal: 0 8px 28px -10px rgba(42, 37, 32, 0.18),
0 0 0 1px var(--momo-border-light);
--momo-shadow-focus: 0 0 0 3px var(--momo-page-accent-soft);
/* ════════════════════════════════════════════════════════
* 10. Transition
* ════════════════════════════════════════════════════════ */
--momo-duration-fast: 0.12s;
--momo-duration-normal: 0.2s;
--momo-duration-slow: 0.4s;
--momo-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
--momo-ease-out: cubic-bezier(0, 0, 0.2, 1);
--momo-transition-base:
color var(--momo-duration-fast) var(--momo-ease-in-out),
background-color var(--momo-duration-fast) var(--momo-ease-in-out),
border-color var(--momo-duration-fast) var(--momo-ease-in-out),
box-shadow var(--momo-duration-fast) var(--momo-ease-in-out);
/* ════════════════════════════════════════════════════════
* 10b. Dot Matrix — 點陣視覺語言Nothing Phone 風)
* ════════════════════════════════════════════════════════
* 全站共用 utility token不要在 component CSS 裡重新定義 dot 圖樣
* 尺寸 tokentight(8) / base(10) / loose(12) / wide(14)
* 濃度 tokenwhisper(0.06) / soft(0.14) / mid(0.28) / strong(0.55)
* 顏色:預設吃 currentColor由父層字色決定
*/
--momo-dot-size-tight: 8px;
--momo-dot-size-base: 10px;
--momo-dot-size-loose: 12px;
--momo-dot-size-wide: 14px;
--momo-dot-radius: 1.1px; /* 點半徑(用於 radial-gradient 半徑) */
--momo-dot-alpha-whisper: 0.06;
--momo-dot-alpha-soft: 0.14;
--momo-dot-alpha-mid: 0.28;
--momo-dot-alpha-strong: 0.55;
/* ════════════════════════════════════════════════════════
* 11. z-index
* ════════════════════════════════════════════════════════ */
--momo-z-base: 1;
--momo-z-dropdown: 1000;
--momo-z-sticky: 1020;
--momo-z-fixed: 1030;
--momo-z-modal-backdrop: 1040;
--momo-z-modal: 1050;
--momo-z-popover: 1060;
--momo-z-tooltip: 1070;
--momo-z-toast: 1080;
/* ════════════════════════════════════════════════════════
* 12. Layout
* ════════════════════════════════════════════════════════ */
--momo-sidebar-width: 240px;
--momo-sidebar-collapsed-width: 64px;
--momo-topbar-height: 56px;
--momo-content-max-width: 1600px;
--momo-content-padding-x: 28px;
--momo-content-padding-y: 24px;
}
/* ════════════════════════════════════════════════════════
* 群組主題切換 — 由 [data-page-group] 觸發
* ════════════════════════════════════════════════════════ */
.momo-app[data-page-group="monitor"] {
--momo-page-accent: var(--momo-warm-caramel);
--momo-page-accent-dark: #8f4530;
--momo-page-accent-soft: var(--momo-warm-caramel-soft);
--momo-page-accent-line: rgba(201, 100, 66, 0.32);
--momo-page-ink: var(--momo-ink-monitor);
--momo-page-chart-1: var(--momo-warm-caramel);
--momo-page-chart-2: var(--momo-warm-apricot);
--momo-page-chart-3: var(--momo-warm-honey);
--momo-page-chart-4: var(--momo-warm-olive);
--momo-page-chart-5: var(--momo-warm-clay);
--momo-page-chart-6: var(--momo-warm-greige);
}
.momo-app[data-page-group="analytics"] {
--momo-page-accent: var(--momo-warm-honey);
--momo-page-accent-dark: #80541a;
--momo-page-accent-soft: var(--momo-warm-honey-soft);
--momo-page-accent-line: rgba(200, 144, 67, 0.36);
--momo-page-ink: var(--momo-ink-analytics);
--momo-page-chart-1: var(--momo-warm-honey);
--momo-page-chart-2: var(--momo-warm-caramel);
--momo-page-chart-3: var(--momo-warm-olive);
--momo-page-chart-4: var(--momo-warm-apricot);
--momo-page-chart-5: var(--momo-warm-clay);
--momo-page-chart-6: var(--momo-warm-greige);
}
.momo-app[data-page-group="ops"] {
--momo-page-accent: var(--momo-warm-clay);
--momo-page-accent-dark: #6f3a23;
--momo-page-accent-soft: var(--momo-warm-clay-soft);
--momo-page-accent-line: rgba(184, 111, 82, 0.34);
--momo-page-ink: var(--momo-ink-ops);
--momo-page-chart-1: var(--momo-warm-clay);
--momo-page-chart-2: var(--momo-warm-terra);
--momo-page-chart-3: var(--momo-warm-honey);
--momo-page-chart-4: var(--momo-warm-caramel);
--momo-page-chart-5: var(--momo-warm-apricot);
--momo-page-chart-6: var(--momo-warm-greige);
}
.momo-app[data-page-group="ai"] {
--momo-page-accent: var(--momo-warm-saffron);
--momo-page-accent-dark: #6f4915;
--momo-page-accent-soft: var(--momo-warm-saffron-soft);
--momo-page-accent-line: rgba(184, 121, 47, 0.36);
--momo-page-ink: var(--momo-ink-ai);
--momo-page-chart-1: var(--momo-warm-saffron);
--momo-page-chart-2: var(--momo-warm-honey);
--momo-page-chart-3: var(--momo-warm-caramel);
--momo-page-chart-4: var(--momo-warm-olive);
--momo-page-chart-5: var(--momo-warm-apricot);
--momo-page-chart-6: var(--momo-warm-greige);
}
.momo-app[data-page-group="system"] {
--momo-page-accent: var(--momo-warm-terra);
--momo-page-accent-dark: #6a3621;
--momo-page-accent-soft: var(--momo-warm-terra-soft);
--momo-page-accent-line: rgba(168, 93, 61, 0.34);
--momo-page-ink: var(--momo-ink-system);
--momo-page-chart-1: var(--momo-warm-terra);
--momo-page-chart-2: var(--momo-warm-clay);
--momo-page-chart-3: var(--momo-warm-olive);
--momo-page-chart-4: var(--momo-warm-greige);
--momo-page-chart-5: var(--momo-warm-honey);
--momo-page-chart-6: var(--momo-warm-apricot);
}
/* ════════════════════════════════════════════════════════
* 全域基礎
* ════════════════════════════════════════════════════════ */
.momo-app {
font-family: var(--momo-font-family);
font-size: var(--momo-text-body);
line-height: var(--momo-line-height-base);
color: var(--momo-text-primary);
background-color: var(--momo-bg-body);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
letter-spacing: 0;
}
.momo-app *,
.momo-app *::before,
.momo-app *::after {
box-sizing: border-box;
}
.momo-mono {
font-family: var(--momo-font-mono);
font-feature-settings: "tnum";
}
.momo-display {
font-family: var(--momo-font-display);
font-feature-settings: "tnum", "ss01";
letter-spacing: 0;
}
.momo-label {
font-family: var(--momo-font-display);
font-size: var(--momo-text-label-tiny);
font-weight: 600;
letter-spacing: 0.10em;
text-transform: uppercase;
color: var(--momo-text-tertiary);
}
/* 滾動條 */
.momo-scroll::-webkit-scrollbar { width: 8px; height: 8px; }
.momo-scroll::-webkit-scrollbar-track { background: transparent; }
.momo-scroll::-webkit-scrollbar-thumb {
background: rgba(42, 37, 32, 0.18);
border-radius: var(--momo-radius-pill);
}
.momo-scroll::-webkit-scrollbar-thumb:hover { background: rgba(42, 37, 32, 0.32); }
.momo-app button:not(.btn):not(.btn-close) {
font-family: inherit;
}
/* 動畫 */
@keyframes momo-fade-in {
from { opacity: 0; transform: translateY(2px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes momo-pulse-dot {
0%, 100% { opacity: 1; }
50% { opacity: 0.3; }
}