405 lines
16 KiB
CSS
405 lines
16 KiB
CSS
/**
|
||
* MOMO Pro × Nothing × Claude 設計 Token v2.0
|
||
* — Nothing 的點陣骨架(黑白、像素、工業)
|
||
* — Claude 的暖米基底(#f0eee9、焦糖橘 #c96442)
|
||
*/
|
||
|
||
:root {
|
||
/* ===== 1. 色彩 ===== */
|
||
/* Claude 暖系基底(紙張 / 米色)— 加深暖度 */
|
||
--momo-bg-body: #ebe6dc; /* Claude 米色頁面底(加深暖度)*/
|
||
--momo-bg-surface: #faf7f0; /* 卡片改為米白,不純白 */
|
||
--momo-bg-elevated: #fdfaf3;
|
||
--momo-bg-subtle: #e2dccf; /* 米色微深 */
|
||
--momo-bg-muted: #cfc7b5;
|
||
--momo-bg-paper: #f3eee2; /* 卡片紙張感 */
|
||
|
||
/* Nothing 黑(用暖墨色,不純黑)*/
|
||
--momo-ink: #2a2520; /* 暖墨色 */
|
||
--momo-ink-strong: #1a1612;
|
||
--momo-ink-soft: #3d362f;
|
||
--momo-line: #2a2520;
|
||
--momo-line-soft: rgba(42,37,32,0.18);
|
||
--momo-line-faint: rgba(42,37,32,0.10);
|
||
|
||
/* Claude 焦糖橘(accent) */
|
||
--momo-accent: #c96442; /* 主 accent */
|
||
--momo-accent-50: #fbf2ef;
|
||
--momo-accent-100: #f5e1d9;
|
||
--momo-accent-200: #ecc3b3;
|
||
--momo-accent-500: #c96442;
|
||
--momo-accent-600: #b1543a;
|
||
--momo-accent-700: #8f4530;
|
||
--momo-accent-soft: rgba(201,100,66,0.12);
|
||
|
||
/* ===== EwoooC 暖色家族(全站運用) =====
|
||
* 全部留在暖色域(紅/橘/金/土),不混入冷色
|
||
* 用法:活動頁 / 標籤色 / 圖表分類色 / 各區段視覺主軸
|
||
*/
|
||
--momo-warm-caramel: #c96442; /* 焦糖橘 — 主 accent / 限時搶購 */
|
||
--momo-warm-honey: #b88416; /* 蜂蜜金 — 1.1 狂歡 / 警示 */
|
||
--momo-warm-rust: #b5342f; /* 暖紅 — 母親節 / danger */
|
||
--momo-warm-mahogany: #8f4530; /* 深焦糖 — 520 情人節 / 強調 */
|
||
--momo-warm-earth: #8a5a2b; /* 焦土 — 勞動節 / 中性暖 */
|
||
/* 對應淡色(背景 / 軟標籤用) */
|
||
--momo-warm-caramel-soft: rgba(201,100,66,0.12);
|
||
--momo-warm-honey-soft: rgba(184,132,22,0.12);
|
||
--momo-warm-rust-soft: rgba(181,52,47,0.12);
|
||
--momo-warm-mahogany-soft:rgba(143,69,48,0.12);
|
||
--momo-warm-earth-soft: rgba(138,90,43,0.12);
|
||
|
||
/* ===== 標籤色系統(Tag / Chip / Badge 統一規範) =====
|
||
* 規則:
|
||
* 1. 全部留在暖色域(caramel/honey/rust/mahogany/earth + 中性 ink)
|
||
* 2. 一個標籤 = 一組 (bg + border + text),三者一起用,不要混用
|
||
* 3. 文字色一定是 *-text,已對 *-bg 做過 WCAG AA 對比驗證
|
||
* 4. 不要任意指定 #色碼到標籤上
|
||
*
|
||
* 用途分配(語義化,不是看心情挑色):
|
||
* caramel → 主強調 / 推薦 / 焦點品 / accent 動作
|
||
* honey → 警示 / AI 挑品 / 待處理 / 提醒
|
||
* rust → 危險 / 漲價 / 異常 / 警報
|
||
* mahogany→ 次強調 / 已選 / 已標記
|
||
* earth → 中性分類 / 一般標籤 / 商品分類
|
||
* ink → 平台標 / 狀態標 / mono 標籤(PChome 領先 / MOMO 領先)
|
||
* muted → 弱資訊 / 待比對 / 已下架
|
||
*/
|
||
|
||
/* caramel — 主焦點 */
|
||
--momo-tag-caramel-bg: #f5e1d9;
|
||
--momo-tag-caramel-border: #ecc3b3;
|
||
--momo-tag-caramel-text: #7a3520; /* AA on bg */
|
||
|
||
/* honey — 警示 / AI */
|
||
--momo-tag-honey-bg: #f3e7c4;
|
||
--momo-tag-honey-border: #d9c590;
|
||
--momo-tag-honey-text: #6e500e; /* AA on bg */
|
||
|
||
/* rust — 漲價 / 異常 */
|
||
--momo-tag-rust-bg: #f0d8d4;
|
||
--momo-tag-rust-border: #d9b1ac;
|
||
--momo-tag-rust-text: #7d2520; /* AA on bg */
|
||
|
||
/* mahogany — 次強調 */
|
||
--momo-tag-mahogany-bg: #ecdcd4;
|
||
--momo-tag-mahogany-border:#d4b8ab;
|
||
--momo-tag-mahogany-text: #5e2e20;
|
||
|
||
/* earth — 中性分類(最常用,不搶眼)*/
|
||
--momo-tag-earth-bg: #ede4d2;
|
||
--momo-tag-earth-border: #d4c5a3;
|
||
--momo-tag-earth-text: #5a3f1c;
|
||
|
||
/* ink — 平台 / mono */
|
||
--momo-tag-ink-bg: #2a2520;
|
||
--momo-tag-ink-border: #2a2520;
|
||
--momo-tag-ink-text: #faf7f0;
|
||
|
||
/* muted — 弱資訊 */
|
||
--momo-tag-muted-bg: #e2dccf;
|
||
--momo-tag-muted-border: rgba(42,37,32,0.16);
|
||
--momo-tag-muted-text: #645c52;
|
||
|
||
/* success / 降價(綠色保留,但去飽和對齊暖底)*/
|
||
--momo-tag-success-bg: #dde6cf;
|
||
--momo-tag-success-border: #c2d0a6;
|
||
--momo-tag-success-text: #1f5a2d;
|
||
|
||
/* ===== 字體層級規範(避免眼睛疲勞) =====
|
||
* 原則:
|
||
* 1. 主要內文 ≥ 13px (0.8125rem);說明文 ≥ 12px (0.75rem) 但只用於 mono / 數據
|
||
* 2. 11px / 10px 只給 LABEL(uppercase 標籤),且必須 letter-spacing ≥ 0.06em
|
||
* 3. 顏色用 text-primary / secondary / tertiary 三層;tertiary 不放重點資訊
|
||
* 4. 數據 (mono) 用 tnum 等寬,避免跳動
|
||
* 5. line-height:標題 1.2 / 內文 1.5 / 鬆散段落 1.7
|
||
*/
|
||
--momo-text-display: 2rem; /* 32px - hero 大數字 */
|
||
--momo-text-headline: 1.5rem; /* 24px - 區塊大數字 */
|
||
--momo-text-title: 1.0625rem; /* 17px - 卡片標題 */
|
||
--momo-text-body: 0.875rem; /* 14px - 內文(提升 1px,減少疲勞)*/
|
||
--momo-text-body-sm: 0.8125rem; /* 13px - 表格內文最小值 */
|
||
--momo-text-meta: 0.75rem; /* 12px - mono 數據 / 次要說明 */
|
||
--momo-text-label: 0.6875rem; /* 11px - LABEL only */
|
||
--momo-text-label-tiny: 0.625rem; /* 10px - 角落標籤 only */
|
||
|
||
/* 沿用 primary 命名以相容(指向 accent) */
|
||
--momo-primary: var(--momo-accent);
|
||
--momo-primary-50: var(--momo-accent-50);
|
||
--momo-primary-100: var(--momo-accent-100);
|
||
--momo-primary-200: var(--momo-accent-200);
|
||
--momo-primary-300: var(--momo-accent-200);
|
||
--momo-primary-400: var(--momo-accent-500);
|
||
--momo-primary-500: var(--momo-accent-500);
|
||
--momo-primary-600: var(--momo-accent-600);
|
||
--momo-primary-700: var(--momo-accent-700);
|
||
--momo-primary-800: var(--momo-accent-700);
|
||
--momo-primary-900: #5e2e20;
|
||
|
||
/* 導航(Nothing 黑) */
|
||
--momo-nav-start: #1a1a1a;
|
||
--momo-nav-end: #000000;
|
||
--momo-nav-text: #ffffff;
|
||
--momo-nav-text-muted: rgba(255,255,255,0.55);
|
||
--momo-nav-hover: rgba(255,255,255,0.08);
|
||
--momo-nav-active: rgba(255,255,255,0.14);
|
||
|
||
/* 漸層 → Nothing 風幾乎不用,保留低調黑灰漸層 */
|
||
--momo-gradient-primary: #1a1a1a;
|
||
--momo-gradient-nav: linear-gradient(180deg, #1a1a1a 0%, #000 100%);
|
||
--momo-gradient-success: #2a7a3f;
|
||
--momo-gradient-danger: #b5342f;
|
||
--momo-gradient-warning: #b88416;
|
||
--momo-gradient-info: #2d5d80;
|
||
--momo-gradient-subtle: linear-gradient(180deg, #f7f5ef 0%, #ebe8e1 100%);
|
||
|
||
/* 狀態色(去飽和化、配合米色底) */
|
||
--momo-success: #2a7a3f;
|
||
--momo-success-bg: #e3ebd9;
|
||
--momo-success-border: #c5d4b0;
|
||
--momo-success-text: #1f5a2d;
|
||
--momo-danger: #b5342f;
|
||
--momo-danger-bg: #f0d8d4;
|
||
--momo-danger-border: #d9b1ac;
|
||
--momo-danger-text: #7d2520;
|
||
--momo-warning: #b88416;
|
||
--momo-warning-bg: #f3e7c4;
|
||
--momo-warning-border: #d9c590;
|
||
--momo-warning-text: #6e500e;
|
||
--momo-info: #2d5d80;
|
||
--momo-info-bg: #d8e2ea;
|
||
--momo-info-border: #b5c5d2;
|
||
--momo-info-text: #1d3e54;
|
||
|
||
/* 文字(暖墨)*/
|
||
--momo-text-primary: #2a2520;
|
||
--momo-text-secondary: #645c52;
|
||
--momo-text-tertiary: #9b9081;
|
||
--momo-text-disabled: #c4baa8;
|
||
--momo-text-inverse: #faf7f0;
|
||
--momo-text-link: #c96442;
|
||
--momo-text-link-hover: #8f4530;
|
||
|
||
/* 邊框(暖色調線)*/
|
||
--momo-border: #2a2520;
|
||
--momo-border-light: rgba(42,37,32,0.16);
|
||
--momo-border-dark: #2a2520;
|
||
--momo-border-focus: #c96442;
|
||
--momo-divider: rgba(42,37,32,0.12);
|
||
|
||
/* Overlay */
|
||
--momo-bg-overlay: rgba(26, 26, 26, 0.7);
|
||
--momo-bg-backdrop: rgba(26, 26, 26, 0.3);
|
||
|
||
/* ===== 2. Typography ===== */
|
||
/* 標題:JetBrains Mono / Space Mono — 帶等寬機械感(替代 Ndot) */
|
||
--momo-font-display:
|
||
"JetBrains Mono", "Space Mono", "SF Mono", Menlo, Consolas, monospace;
|
||
/* 內文:中英混排 */
|
||
--momo-font-family:
|
||
"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI",
|
||
"PingFang TC", "Noto Sans TC", "Microsoft JhengHei",
|
||
sans-serif;
|
||
/* 等寬:數據 */
|
||
--momo-font-family-mono:
|
||
"JetBrains Mono", "SF Mono", Menlo, Consolas, monospace;
|
||
|
||
--momo-font-size-xs: 0.75rem;
|
||
--momo-font-size-sm: 0.8125rem;
|
||
--momo-font-size-base: 0.9375rem;
|
||
--momo-font-size-lg: 1.0625rem;
|
||
--momo-font-size-xl: 1.625rem;
|
||
--momo-font-size-2xl: 2.25rem;
|
||
|
||
--momo-font-weight-normal: 400;
|
||
--momo-font-weight-medium: 500;
|
||
--momo-font-weight-semibold: 600;
|
||
--momo-font-weight-bold: 700;
|
||
|
||
--momo-line-height-tight: 1.15;
|
||
--momo-line-height-base: 1.5;
|
||
--momo-line-height-loose: 1.7;
|
||
|
||
/* ===== 3. Spacing ===== */
|
||
--momo-space-1: 0.25rem;
|
||
--momo-space-2: 0.5rem;
|
||
--momo-space-3: 0.75rem;
|
||
--momo-space-4: 1rem;
|
||
--momo-space-5: 1.5rem;
|
||
--momo-space-6: 2rem;
|
||
--momo-space-7: 3rem;
|
||
--momo-space-8: 4rem;
|
||
|
||
/* ===== 4. Shadow(Nothing 風幾乎不用陰影,改用線條) ===== */
|
||
--momo-shadow-sm: 0 0 0 1px rgba(26,26,26,0.08);
|
||
--momo-shadow-md: 0 0 0 1px rgba(26,26,26,0.10);
|
||
--momo-shadow-lg: 0 12px 40px -8px rgba(26,26,26,0.18), 0 0 0 1px rgba(26,26,26,0.10);
|
||
--momo-shadow-colored: 0 0 0 2px rgba(201,100,66,0.25);
|
||
--momo-shadow-inner: inset 0 1px 2px 0 rgba(26,26,26,0.08);
|
||
|
||
/* ===== 5. Radius(Nothing 風偏方角,僅輕微圓角) ===== */
|
||
--momo-radius-sm: 0.125rem; /* 2px */
|
||
--momo-radius-md: 0.25rem; /* 4px */
|
||
--momo-radius-lg: 0.375rem; /* 6px */
|
||
--momo-radius-pill: 50rem;
|
||
--momo-radius-circle: 50%;
|
||
|
||
/* ===== 6. 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-ease-in: cubic-bezier(0.4, 0, 1, 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);
|
||
|
||
/* ===== 7. 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;
|
||
}
|
||
|
||
/* 全域 */
|
||
.momo-app {
|
||
font-family: var(--momo-font-family);
|
||
font-size: var(--momo-font-size-base);
|
||
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.005em;
|
||
}
|
||
.momo-app *, .momo-app *::before, .momo-app *::after { box-sizing: border-box; }
|
||
.momo-app button {
|
||
font-family: inherit; cursor: pointer; border: none; background: none; padding: 0; color: inherit;
|
||
}
|
||
.momo-app input, .momo-app select, .momo-app textarea {
|
||
font-family: inherit; font-size: inherit; color: inherit;
|
||
}
|
||
|
||
/* Display class for big numbers / titles in Nothing-mono */
|
||
.momo-display {
|
||
font-family: var(--momo-font-display);
|
||
font-feature-settings: "tnum", "ss01";
|
||
letter-spacing: -0.02em;
|
||
}
|
||
.momo-mono {
|
||
font-family: var(--momo-font-family-mono);
|
||
font-feature-settings: "tnum";
|
||
}
|
||
.momo-label {
|
||
font-family: var(--momo-font-display);
|
||
font-size: 10px;
|
||
font-weight: 500;
|
||
letter-spacing: 0.12em;
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
/* Dot matrix 背景圖案(Nothing 招牌點陣) */
|
||
.momo-dot-bg {
|
||
background-image: radial-gradient(circle, rgba(255,255,255,0.18) 1px, transparent 1px);
|
||
background-size: 8px 8px;
|
||
}
|
||
.momo-dot-bg-dark {
|
||
background-image: radial-gradient(circle, rgba(26,26,26,0.12) 1px, transparent 1px);
|
||
background-size: 8px 8px;
|
||
}
|
||
|
||
/* 滾動條 */
|
||
.momo-scroll::-webkit-scrollbar { width: 8px; height: 8px; }
|
||
.momo-scroll::-webkit-scrollbar-track { background: transparent; }
|
||
.momo-scroll::-webkit-scrollbar-thumb { background: rgba(26,26,26,0.18); border-radius: var(--momo-radius-pill); }
|
||
.momo-scroll::-webkit-scrollbar-thumb:hover { background: rgba(26,26,26,0.32); }
|
||
|
||
/* 動畫 */
|
||
@keyframes momo-fade-in { from { opacity: 0; transform: translateY(2px); } to { opacity: 1; transform: translateY(0); } }
|
||
@keyframes momo-slide-up { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } }
|
||
@keyframes momo-pulse-dot { 0%,100% { opacity: 1; } 50% { opacity: 0.3; } }
|
||
|
||
/* ===== 商品看板響應式 ===== */
|
||
.dash-page { container-type: inline-size; }
|
||
@container (max-width: 900px) {
|
||
.dash-kpi-num { font-size: 30px !important; }
|
||
.dash-focus { grid-template-columns: 1fr 1fr !important; }
|
||
}
|
||
@container (max-width: 720px) {
|
||
.dash-kpis { grid-template-columns: repeat(2, 1fr) !important; }
|
||
.dash-kpis > div { border-right: none !important; border-bottom: 1px solid var(--momo-border-light) !important; }
|
||
.dash-kpis > div:nth-child(odd) { border-right: 1px solid var(--momo-border-light) !important; }
|
||
.dash-kpis > div:nth-child(n+3) { border-bottom: none !important; }
|
||
.dash-kpi-num { font-size: 28px !important; }
|
||
.dash-focus { grid-template-columns: 1fr !important; }
|
||
}
|
||
@media (max-width: 900px) {
|
||
.dash-focus { grid-template-columns: 1fr 1fr !important; }
|
||
}
|
||
@media (max-width: 720px) {
|
||
.dash-kpis { grid-template-columns: repeat(2, 1fr) !important; }
|
||
.dash-focus { grid-template-columns: 1fr !important; }
|
||
}
|
||
|
||
/* ===== 活動看板響應式 ===== */
|
||
.camp-page { container-type: inline-size; }
|
||
@container (max-width: 900px) {
|
||
.camp-hero { padding: 22px 24px !important; }
|
||
.camp-hero-title { font-size: 32px !important; }
|
||
.camp-hero-meta { gap: 20px !important; }
|
||
.camp-hero-total { font-size: 28px !important; }
|
||
}
|
||
@container (max-width: 720px) {
|
||
.camp-hero { padding: 20px 20px !important; }
|
||
.camp-hero-title { font-size: 26px !important; }
|
||
.camp-hero-meta-row { flex-direction: column !important; align-items: flex-start !important; gap: 14px !important; }
|
||
.camp-hero-total-wrap { margin-left: 0 !important; text-align: left !important; }
|
||
.camp-hero-total { font-size: 24px !important; }
|
||
.camp-kpis { grid-template-columns: repeat(2, 1fr) !important; }
|
||
.camp-kpis > div { border-right: none !important; border-bottom: 1px solid var(--momo-border-light) !important; }
|
||
.camp-kpis > div:nth-child(odd) { border-right: 1px solid var(--momo-border-light) !important; }
|
||
.camp-kpis > div:nth-child(n+3) { border-bottom: none !important; }
|
||
.camp-kpi-num { font-size: 28px !important; }
|
||
.camp-th-cat, .camp-td-cat { display: none !important; }
|
||
.camp-table th, .camp-table td { padding: 12px 12px !important; }
|
||
}
|
||
@media (max-width: 900px) {
|
||
.camp-hero { padding: 22px 24px !important; }
|
||
.camp-hero-title { font-size: 32px !important; }
|
||
}
|
||
@media (max-width: 720px) {
|
||
.camp-hero-meta-row { flex-direction: column !important; align-items: flex-start !important; gap: 14px !important; }
|
||
.camp-hero-total-wrap { margin-left: 0 !important; text-align: left !important; }
|
||
.camp-kpis { grid-template-columns: repeat(2, 1fr) !important; }
|
||
.camp-th-cat, .camp-td-cat { display: none !important; }
|
||
}
|
||
|
||
/* Topbar responsive */
|
||
.momo-topbar { container-type: inline-size; }
|
||
@container (max-width: 1024px) {
|
||
.momo-schedule-pill { display: none !important; }
|
||
}
|
||
@container (max-width: 880px) {
|
||
.momo-user-meta { display: none !important; }
|
||
}
|
||
@container (max-width: 720px) {
|
||
.momo-search-text { display: none !important; }
|
||
}
|
||
/* fallback:若瀏覽器不支援 container query,仍用 viewport */
|
||
@media (max-width: 1024px) {
|
||
.momo-schedule-pill { display: none !important; }
|
||
}
|
||
@media (max-width: 880px) {
|
||
.momo-user-meta { display: none !important; }
|
||
}
|
||
@media (max-width: 720px) {
|
||
.momo-search-text { display: none !important; }
|
||
}
|