Revert "調整暖色系為鮮明純色"

This reverts commit dc137e33ca.
This commit is contained in:
OoO
2026-05-06 22:04:17 +08:00
parent 9e857ee04a
commit 57e4c575b1
12 changed files with 153 additions and 149 deletions

2
app.py
View File

@@ -96,7 +96,7 @@ except Exception as e:
# 🚩 系統版本定義 (備份與顯示用)
# 🚩 2026-05-01 V10.76: Move monthly analysis report onto V2 shell
SYSTEM_VERSION = "V10.87"
SYSTEM_VERSION = "V10.86"
# ==========================================
# 🔒 SQL Injection 防護函數

View File

@@ -314,7 +314,7 @@ YOUTUBE_API_KEY = os.getenv('YOUTUBE_API_KEY', '')
# ==========================================
# 系統版本與路徑
# ==========================================
SYSTEM_VERSION = "V10.87"
SYSTEM_VERSION = "V10.86"
LOG_FILE_PATH = os.path.join(BASE_DIR, 'logs/system.log')
public_url = PUBLIC_URL # 用於模板顯示

View File

@@ -97,15 +97,14 @@ REQUIRED_SHELL_SNIPPETS = [
"momo-nav-subtitle",
"momo-nav-sublink",
"rgba(255, 248, 238, 0.72)",
"background: #f2eadf",
"var(--momo-page-accent, #e4573d)",
"linear-gradient(180deg",
]
FORBIDDEN_SHELL_PATTERNS = [
Rule(
"pure_black_sidebar",
re.compile(r"\.momo-sidebar\s*\{[^}]*background\s*:\s*(#000|black)\b", re.IGNORECASE | re.DOTALL),
"側欄不得回退成純黑背景;必須維持暖色系新版 shell",
"側欄不得回退成純黑背景;必須維持暖深咖啡漸層",
),
Rule(
"low_contrast_sublink",

View File

@@ -17,7 +17,9 @@
padding: 22px;
border: 1px solid var(--momo-border-strong);
border-radius: 8px;
background: var(--momo-warm-cream);
background:
radial-gradient(circle at 16px 16px, rgba(42, 37, 32, 0.11) 1px, transparent 1px),
linear-gradient(135deg, rgba(247, 239, 227, 0.98), rgba(237, 214, 204, 0.5) 48%, rgba(198, 154, 74, 0.12));
background-size: 18px 18px, auto;
box-shadow: var(--momo-shadow-soft);
}
@@ -44,20 +46,19 @@
}
.auto-import-page .card-header {
background: var(--momo-warm-apricot);
color: var(--momo-text-primary);
border: 0;
border-bottom: 1px solid var(--momo-warm-latte);
background: linear-gradient(135deg, var(--momo-warm-terracotta), var(--momo-warm-copper));
color: var(--momo-page-inverse);
border: none;
border-radius: 8px 8px 0 0 !important;
padding: 1rem 1.25rem;
}
.auto-import-page .card:nth-of-type(2) .card-header {
background: var(--momo-warm-amber);
background: linear-gradient(135deg, var(--momo-warm-apricot), var(--momo-warm-caramel));
}
.auto-import-page .card:nth-of-type(3) .card-header {
background: var(--momo-warm-cream);
background: linear-gradient(135deg, var(--momo-warm-copper), var(--momo-warm-olive));
}
.auto-import-page .card-header h5 {
@@ -66,19 +67,19 @@
}
.auto-import-page .btn-primary {
background: var(--momo-warm-terracotta);
background: linear-gradient(135deg, var(--momo-warm-terracotta), var(--momo-warm-copper));
border: none;
border-radius: 8px;
padding: 0.6rem 1.5rem;
font-weight: 750;
box-shadow: 0 4px 12px rgba(228, 87, 61, 0.18);
box-shadow: 0 4px 12px rgba(184, 111, 82, 0.18);
transition: all 0.3s ease;
}
.auto-import-page .btn-primary:hover {
transform: translateY(-2px);
box-shadow: 0 6px 16px rgba(228, 87, 61, 0.24);
background: var(--momo-accent-600);
box-shadow: 0 6px 16px rgba(184, 111, 82, 0.24);
background: linear-gradient(135deg, var(--momo-warm-copper), var(--momo-warm-terracotta));
}
.auto-import-page .btn-secondary {
@@ -92,7 +93,7 @@
}
.auto-import-page .btn-success {
background: var(--momo-warm-olive);
background: linear-gradient(135deg, var(--momo-warm-olive), var(--momo-warm-amber));
border: none;
border-radius: 8px;
padding: 0.6rem 1.5rem;
@@ -104,7 +105,7 @@
.auto-import-page .btn-success:hover {
transform: translateY(-2px);
box-shadow: 0 6px 16px rgba(143, 137, 104, 0.24);
background: color-mix(in srgb, var(--momo-warm-olive) 88%, var(--momo-text-primary));
background: linear-gradient(135deg, var(--momo-warm-amber), var(--momo-warm-olive));
}
.auto-import-page .table {
@@ -113,9 +114,9 @@
}
.auto-import-page .table thead th {
background: var(--momo-warm-cream);
background: linear-gradient(90deg, var(--momo-warm-copper), var(--momo-warm-terracotta));
border-bottom: 0;
color: var(--momo-text-primary);
color: var(--momo-page-inverse);
font-weight: 800;
text-transform: uppercase;
font-size: 0.75rem;
@@ -153,12 +154,12 @@
.auto-import-page .badge-downloading {
background: var(--momo-warm-peach-soft);
color: var(--momo-accent-700);
color: #5f4035;
}
.auto-import-page .badge-importing {
background: var(--momo-warm-mahogany-soft);
color: var(--momo-accent-700);
color: #5f4035;
}
.auto-import-page .badge-completed {
@@ -178,7 +179,7 @@
}
.auto-import-page .progress-bar {
background: var(--momo-warm-terracotta);
background: linear-gradient(90deg, var(--momo-warm-terracotta), var(--momo-warm-apricot), var(--momo-warm-amber));
}
.auto-import-page .form-label {
@@ -189,7 +190,7 @@
.auto-import-page .form-control:focus {
border-color: var(--momo-warm-terracotta);
box-shadow: 0 0 0 0.2rem rgba(228, 87, 61, 0.15);
box-shadow: 0 0 0 0.2rem rgba(184, 111, 82, 0.15);
}
.auto-import-page .alert {
@@ -197,9 +198,10 @@
}
.auto-import-page .alert-info {
color: var(--momo-accent-700);
background: rgba(255, 224, 211, 0.46);
border-color: rgba(228, 87, 61, 0.22);
color: #5f4035;
background:
linear-gradient(135deg, rgba(237, 214, 204, 0.58), rgba(247, 239, 227, 0.88));
border-color: rgba(184, 111, 82, 0.22);
}
.auto-import-page .alert-light {

View File

@@ -38,7 +38,7 @@
}
.analysis-report-tab.is-active {
border-color: var(--momo-page-accent-dark, #a95846);
background: var(--momo-page-accent, #c8796a);
background: linear-gradient(135deg, var(--momo-page-accent, #d96f52), var(--momo-page-accent-dark, #a95846));
color: var(--momo-page-inverse, #fff8ee);
}
.analysis-report-tab.is-external {

View File

@@ -18,7 +18,9 @@
<style>
.momo-sidebar {
background: #f2eadf !important;
background:
radial-gradient(circle at 28px 30px, rgba(184, 111, 82, 0.05), transparent 36px),
linear-gradient(180deg, #f4ecdf 0%, #e8dfd0 100%) !important;
border-right: 1px solid rgba(42, 37, 32, 0.14);
box-shadow: inset -1px 0 0 rgba(255, 248, 238, 0.72), 16px 0 32px rgba(61, 38, 27, 0.08);
}
@@ -40,7 +42,7 @@
text-rendering: geometricPrecision;
}
.momo-logo-mark {
background: var(--momo-warm-terracotta, #e4573d);
background: linear-gradient(135deg, var(--momo-warm-copper, #7f5a49), var(--momo-warm-caramel, #b98a5f));
color: var(--momo-bg-elevated, #fdfaf3);
box-shadow: none;
}
@@ -59,9 +61,9 @@
color: var(--momo-page-accent-dark, var(--momo-accent-700, #8f4530)) !important;
}
.momo-nav-link.is-active {
background: var(--momo-page-accent, #e4573d) !important;
background: linear-gradient(135deg, var(--momo-page-accent, #d06d49), var(--momo-page-accent-dark, #c45f3f)) !important;
color: var(--momo-page-inverse, #fff8ee) !important;
box-shadow: 0 10px 22px rgba(228, 87, 61, 0.18);
box-shadow: 0 10px 22px rgba(127, 90, 73, 0.18);
}
.momo-nav-link .momo-nav-code {
color: var(--momo-text-tertiary, #9b9184) !important;
@@ -99,8 +101,10 @@
.momo-nav-subtree {
margin: 0.42rem 0 0.72rem 1.05rem;
padding: 0.42rem 0 0.42rem 0.78rem;
border-left: 1px solid color-mix(in srgb, var(--momo-page-accent, #e4573d) 34%, transparent);
background: rgba(255, 248, 238, 0.48);
border-left: 1px solid color-mix(in srgb, var(--momo-page-accent, #b86f52) 34%, transparent);
background:
radial-gradient(circle at 6px 8px, rgba(184, 111, 82, 0.1) 1px, transparent 1.4px),
linear-gradient(180deg, rgba(255, 248, 238, 0.48), rgba(255, 252, 246, 0.18));
background-size: 10px 10px, auto;
border-radius: 0 0.95rem 0.95rem 0;
}
@@ -131,7 +135,7 @@
}
.momo-nav-sublink:hover,
.momo-nav-sublink.is-active {
background: rgba(255, 248, 238, 0.92);
background: linear-gradient(135deg, rgba(255, 248, 238, 0.92), rgba(201, 100, 66, 0.13));
color: var(--momo-page-accent-dark, var(--momo-accent-700, #8f4530));
box-shadow: inset 0 0 0 1px rgba(201, 100, 66, 0.22), 0 8px 18px rgba(70, 46, 28, 0.08);
transform: translateX(2px);
@@ -167,7 +171,7 @@
align-items: center;
justify-content: center;
border: 1px solid rgba(255, 248, 238, 0.86);
background: var(--momo-page-accent, #e4573d);
background: linear-gradient(135deg, var(--momo-page-accent, #d76a45), var(--momo-page-accent-dark, #9d4a32));
color: var(--momo-page-inverse, #fff8ee);
box-shadow: 0 8px 18px rgba(132, 58, 34, 0.26);
font-size: 0.62rem;

View File

@@ -14,9 +14,9 @@
--momo-legacy-paper: #f3eee2;
--momo-legacy-ink: #2a2520;
--momo-legacy-muted: #645c52;
--momo-legacy-accent: #e4573d;
--momo-legacy-accent-dark: #9f332a;
--momo-legacy-accent-soft: rgba(228, 87, 61, 0.12);
--momo-legacy-accent: #d96f52;
--momo-legacy-accent-dark: #a95846;
--momo-legacy-accent-soft: rgba(201, 100, 66, 0.12);
--momo-legacy-line: rgba(42, 37, 32, 0.16);
--momo-legacy-inverse: #fff8ee;
}
@@ -29,7 +29,9 @@
.navbar.navbar-dark,
.navbar.bg-custom-dark,
.navbar-dark.bg-primary {
background: var(--momo-legacy-accent) !important;
background:
radial-gradient(circle at 24px 24px, rgba(255, 248, 238, 0.16) 1px, transparent 1px),
linear-gradient(135deg, var(--momo-legacy-accent-dark), var(--momo-legacy-accent)) !important;
background-size: 10px 10px, auto;
border-bottom: 1px solid rgba(255, 248, 238, 0.18);
box-shadow: 0 10px 24px rgba(61, 38, 27, 0.16) !important;
@@ -92,15 +94,15 @@
.page-item.active .page-link,
.card-header.bg-primary {
color: var(--momo-legacy-inverse) !important;
background: var(--momo-legacy-accent) !important;
background: linear-gradient(135deg, var(--momo-legacy-accent), var(--momo-legacy-accent-dark)) !important;
border-color: var(--momo-legacy-accent-dark) !important;
}
.btn-primary:hover,
.btn-primary:focus {
color: var(--momo-legacy-inverse) !important;
background: #cc4935 !important;
border-color: #9f332a !important;
background: linear-gradient(135deg, #c65f45, #9f4f3e) !important;
border-color: #7a3520 !important;
}
.btn-outline-primary {

View File

@@ -18,7 +18,9 @@
padding: 22px;
border: 1px solid var(--momo-border-strong);
border-radius: 8px;
background: var(--momo-warm-cream);
background:
radial-gradient(circle at 18px 18px, rgba(42, 37, 32, 0.12) 1px, transparent 1px),
linear-gradient(135deg, rgba(242, 178, 90, 0.22), rgba(255, 255, 255, 0.94) 46%, rgba(42, 37, 32, 0.06));
background-size: 18px 18px, auto;
box-shadow: var(--momo-shadow-soft);
}
@@ -129,7 +131,7 @@
}
.bg-purple {
background: var(--momo-warm-rose);
background: linear-gradient(135deg, var(--momo-warm-rust), var(--momo-warm-mahogany));
}
.chart-container {
@@ -202,7 +204,7 @@
}
.calendar-nav button {
background: var(--momo-page-accent);
background: linear-gradient(135deg, var(--momo-warm-caramel), var(--momo-warm-mahogany));
border: none;
border-radius: 10px;
padding: 0.6rem 1.2rem;
@@ -253,11 +255,11 @@
transform: translateY(-3px) scale(1.02);
box-shadow: 0 8px 20px rgba(217, 111, 82, 0.16);
border-color: var(--momo-warm-caramel);
background: var(--momo-warm-peach-soft);
background: linear-gradient(135deg, #ffffff 0%, var(--momo-warm-peach-soft) 100%);
}
.calendar-day.has-data {
background: rgba(255, 248, 238, 0.9);
background: linear-gradient(135deg, #ffffff 0%, rgba(255, 248, 238, 0.9) 100%);
border-color: #d0d5e0;
}
@@ -275,7 +277,7 @@
border-color: var(--momo-warm-caramel) !important;
border-width: 5px !important;
box-shadow: 0 0 0 6px rgba(217, 111, 82, 0.22), 0 12px 32px rgba(217, 111, 82, 0.28), inset 0 2px 10px rgba(217, 111, 82, 0.12) !important;
background: var(--momo-warm-peach-soft) !important;
background: linear-gradient(135deg, var(--momo-warm-peach-soft) 0%, var(--momo-warm-caramel-soft) 100%) !important;
transform: scale(1.08) !important;
position: relative;
animation: pulseGlow 2s ease-in-out infinite;
@@ -288,7 +290,7 @@
right: -8px;
width: 32px;
height: 32px;
background: var(--momo-page-accent);
background: linear-gradient(135deg, var(--momo-warm-caramel), var(--momo-warm-mahogany));
border-radius: 50%;
color: white;
display: flex;
@@ -375,26 +377,26 @@
}
.calendar-day.has-data.dod-up .calendar-day-badge {
background: var(--momo-warm-rose);
background: linear-gradient(135deg, #ff6b6b 0%, #ee5a6f 100%);
color: #fff;
border: none;
}
.calendar-day.has-data.dod-down .calendar-day-badge {
background: var(--momo-warm-olive);
background: linear-gradient(135deg, #51cf66 0%, #37b24d 100%);
color: #fff;
border: none;
}
/* 週末與假日背景 */
.calendar-day.is-weekend {
background: var(--momo-warm-cream);
border-color: var(--momo-warm-latte);
background: linear-gradient(135deg, #f8f9ff 0%, #f0f4ff 100%);
border-color: #d0d5ff;
}
.calendar-day.is-holiday {
background: var(--momo-warm-blush);
border-color: rgba(217, 108, 117, 0.32);
background: linear-gradient(135deg, #fff5f7 0%, #ffe8ed 100%);
border-color: #ffc9d0;
}
.calendar-day.is-holiday .calendar-day-number {
@@ -420,7 +422,7 @@
/* 頁面標題樣式 */
.page-header {
background: var(--momo-page-accent);
background: linear-gradient(135deg, var(--momo-warm-caramel), var(--momo-warm-mahogany));
padding: 2rem;
border-radius: 16px;
margin-bottom: 2rem;
@@ -452,7 +454,7 @@
/* 按鈕樣式優化 */
.btn-success {
background: var(--momo-warm-olive);
background: linear-gradient(135deg, var(--momo-warm-earth), var(--momo-warm-honey));
border: none;
border-radius: 10px;
padding: 0.6rem 1.5rem;
@@ -464,7 +466,7 @@
.btn-success:hover {
transform: translateY(-2px);
box-shadow: 0 6px 16px rgba(154, 143, 89, 0.32);
background: color-mix(in srgb, var(--momo-warm-olive) 88%, var(--momo-text-primary));
background: linear-gradient(135deg, var(--momo-warm-honey), var(--momo-warm-earth));
}
/* 表格樣式優化 */
@@ -474,7 +476,7 @@
}
.table thead {
background: var(--momo-page-accent);
background: linear-gradient(135deg, var(--momo-warm-mahogany), var(--momo-warm-caramel));
color: #fff;
}
@@ -492,7 +494,7 @@
}
.table tbody tr:hover {
background: var(--momo-warm-cream);
background: linear-gradient(135deg, #f8f9ff 0%, #f0f4ff 100%);
transform: scale(1.01);
}
@@ -1311,16 +1313,16 @@
Chart.defaults.font.family = "'Noto Sans TC', 'Inter', system-ui, sans-serif";
const chartPalette = {
caramel: 'rgba(217, 138, 74, 1)',
caramelSoft: 'rgba(217, 138, 74, 0.14)',
honey: 'rgba(242, 184, 75, 1)',
honeySoft: 'rgba(242, 184, 75, 0.14)',
rust: 'rgba(228, 87, 61, 1)',
rustSoft: 'rgba(228, 87, 61, 0.12)',
mahogany: 'rgba(217, 108, 117, 1)',
mahoganySoft: 'rgba(217, 108, 117, 0.12)',
earth: 'rgba(145, 168, 90, 1)',
earthSoft: 'rgba(145, 168, 90, 0.12)',
caramel: 'rgba(201, 100, 66, 1)',
caramelSoft: 'rgba(201, 100, 66, 0.14)',
honey: 'rgba(184, 132, 22, 1)',
honeySoft: 'rgba(184, 132, 22, 0.14)',
rust: 'rgba(181, 52, 47, 1)',
rustSoft: 'rgba(181, 52, 47, 0.12)',
mahogany: 'rgba(143, 69, 48, 1)',
mahoganySoft: 'rgba(143, 69, 48, 0.12)',
earth: 'rgba(138, 90, 43, 1)',
earthSoft: 'rgba(138, 90, 43, 0.12)',
muted: 'rgba(126, 111, 92, 0.52)'
};

View File

@@ -24,17 +24,14 @@
{% block extra_css %}{% endblock %}
<style>
.momo-app[data-active-page="dashboard"] {
--momo-page-accent: var(--momo-warm-terracotta);
--momo-page-accent-dark: var(--momo-accent-700);
--momo-page-accent: var(--momo-warm-caramel);
--momo-page-accent-dark: var(--momo-warm-mahogany);
--momo-page-accent-soft: var(--momo-warm-caramel-soft);
--momo-page-accent-2: var(--momo-warm-apricot);
--momo-page-accent-3: var(--momo-warm-amber);
--momo-page-accent-4: var(--momo-warm-olive);
}
.momo-app[data-active-page="edm"],
.momo-app[data-active-page="campaigns"] {
--momo-page-accent: var(--momo-warm-amber);
--momo-page-accent-dark: var(--momo-warm-terracotta);
--momo-page-accent-dark: var(--momo-warm-copper);
--momo-page-accent-soft: var(--momo-warm-honey-soft);
--momo-page-accent-2: var(--momo-warm-apricot);
--momo-page-accent-3: var(--momo-warm-terracotta);
@@ -44,13 +41,9 @@
.momo-app[data-active-page="daily_sales"],
.momo-app[data-active-page="monthly"],
.momo-app[data-active-page="growth"] {
--momo-page-accent: var(--momo-warm-terracotta);
--momo-page-accent-dark: var(--momo-accent-700);
--momo-page-accent: var(--momo-warm-caramel);
--momo-page-accent-dark: var(--momo-warm-mahogany);
--momo-page-accent-soft: var(--momo-warm-peach-soft);
--momo-page-accent-2: var(--momo-warm-apricot);
--momo-page-accent-3: var(--momo-warm-amber);
--momo-page-accent-4: var(--momo-warm-rose);
--momo-page-accent-5: var(--momo-warm-olive);
}
.momo-app[data-active-page="vendor_stockout"] {
--momo-page-accent: var(--momo-warm-rust);
@@ -67,7 +60,7 @@
.momo-app[data-active-page="auto_import"],
.momo-app[data-active-page="market_intel"] {
--momo-page-accent: var(--momo-warm-terracotta);
--momo-page-accent-dark: var(--momo-accent-700);
--momo-page-accent-dark: var(--momo-warm-copper);
--momo-page-accent-soft: var(--momo-warm-mahogany-soft);
--momo-page-accent-2: var(--momo-warm-amber);
--momo-page-accent-3: var(--momo-warm-apricot);
@@ -81,7 +74,7 @@
.momo-app[data-active-page="user_management"],
.momo-app[data-active-page="ai_automation_smoke"] {
--momo-page-accent: var(--momo-warm-caramel);
--momo-page-accent-dark: var(--momo-accent-700);
--momo-page-accent-dark: var(--momo-warm-mahogany);
--momo-page-accent-soft: var(--momo-warm-caramel-soft);
}
@@ -116,22 +109,22 @@
.momo-app .bg-primary,
.momo-app .bg-dark {
color: var(--momo-page-inverse) !important;
background: var(--momo-page-accent) !important;
border-color: color-mix(in srgb, var(--momo-page-accent) 72%, var(--momo-warm-copper)) !important;
background: linear-gradient(135deg, var(--momo-page-accent), var(--momo-page-accent-dark)) !important;
border-color: var(--momo-page-accent-dark) !important;
}
.momo-app .dashboard-kpi.is-accent,
.momo-app .kpi-card.text-white:nth-child(2n),
.momo-app .card:nth-of-type(2) .card-header.bg-gradient,
.momo-app .auto-import-page .btn-success {
background: var(--momo-page-accent-2) !important;
background: linear-gradient(135deg, var(--momo-page-accent-2), var(--momo-page-accent-5, var(--momo-warm-olive))) !important;
border-color: var(--momo-page-accent-5, var(--momo-warm-olive)) !important;
}
.momo-app .campaign-tab.is-active,
.momo-app .campaign-slot-tab.active,
.momo-app .auto-import-page .progress-bar {
background: var(--momo-page-accent) !important;
background: linear-gradient(90deg, var(--momo-page-accent), var(--momo-page-accent-2), var(--momo-page-accent-3)) !important;
}
.momo-app .page-header h1,
@@ -173,7 +166,7 @@
.momo-app .dashboard-kpi.is-accent::before,
.momo-app .momo-status-card::before {
background-image: none !important;
background-image: radial-gradient(circle, rgba(255, 248, 238, 0.2) 1px, transparent 1px) !important;
}
.momo-app .dashboard-table th,
@@ -185,8 +178,8 @@
.momo-app .monthly-analysis-page .table-light th,
.momo-app .ai-intel-page .table thead th {
color: var(--momo-page-inverse) !important;
background: var(--momo-page-accent) !important;
border-bottom-color: color-mix(in srgb, var(--momo-page-accent) 62%, #fff8ee) !important;
background: linear-gradient(90deg, var(--momo-page-accent-dark), var(--momo-page-accent)) !important;
border-bottom-color: color-mix(in srgb, var(--momo-page-accent-dark) 70%, #fff8ee) !important;
}
.momo-app .dashboard-table th a,

View File

@@ -33,15 +33,15 @@
.growth-analysis-page .bg-primary,
.growth-analysis-page .bg-success,
.growth-analysis-page .bg-info {
background: var(--momo-page-accent) !important;
background: linear-gradient(135deg, var(--momo-page-accent-dark), var(--momo-page-accent)) !important;
}
.growth-analysis-page .bg-success {
background: var(--momo-warm-olive) !important;
background: linear-gradient(135deg, var(--momo-warm-earth), var(--momo-warm-honey)) !important;
}
.growth-analysis-page .bg-info {
background: var(--momo-warm-rose) !important;
background: linear-gradient(135deg, var(--momo-warm-rust), var(--momo-warm-caramel)) !important;
}
.growth-analysis-page .text-success,
@@ -177,14 +177,14 @@
<script>
const data = JSON.parse(document.getElementById('chart-data').textContent);
const chartPalette = {
caramel: 'rgba(217, 138, 74, 1)',
caramelSoft: 'rgba(217, 138, 74, 0.58)',
honey: 'rgba(242, 184, 75, 1)',
honeySoft: 'rgba(242, 184, 75, 0.58)',
rust: 'rgba(228, 87, 61, 1)',
rustSoft: 'rgba(228, 87, 61, 0.42)',
mahogany: 'rgba(217, 108, 117, 1)',
mahoganySoft: 'rgba(217, 108, 117, 0.12)'
caramel: 'rgba(201, 100, 66, 1)',
caramelSoft: 'rgba(201, 100, 66, 0.58)',
honey: 'rgba(184, 132, 22, 1)',
honeySoft: 'rgba(184, 132, 22, 0.58)',
rust: 'rgba(181, 52, 47, 1)',
rustSoft: 'rgba(181, 52, 47, 0.48)',
mahogany: 'rgba(143, 69, 48, 1)',
mahoganySoft: 'rgba(143, 69, 48, 0.12)'
};
Chart.defaults.color = '#6f665a';

View File

@@ -127,7 +127,7 @@
left: 0;
width: 100%;
height: 100%;
background: rgba(255, 244, 230, 0.95);
background: linear-gradient(135deg, rgba(255, 255, 255, 0.95) 0%, rgba(240, 245, 255, 0.95) 100%);
z-index: 9999;
display: none;
flex-direction: column;
@@ -150,11 +150,14 @@
#loadingOverlay .loading-logo {
z-index: 3;
animation: cloud-float 3s ease-in-out infinite;
/* V-Fix: 極簡設計 - 純文字 */
/* V-Fix: 極簡設計 - 純漸層文字 */
font-size: 2.5rem;
font-weight: 800;
font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
color: var(--momo-page-accent);
background: linear-gradient(135deg, var(--momo-warm-caramel), var(--momo-warm-rust));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
letter-spacing: 4px;
filter: drop-shadow(0 4px 15px rgba(217, 111, 82, 0.32));
}
@@ -230,7 +233,7 @@
position: absolute;
width: 100px;
height: 100px;
background: rgba(228, 87, 61, 0.18);
background: radial-gradient(circle, rgba(79, 70, 229, 0.3) 0%, transparent 70%);
border-radius: 50%;
animation: pulse-expand 2s ease-out infinite;
}
@@ -279,7 +282,7 @@
position: absolute;
width: 8px;
height: 8px;
background: var(--momo-page-accent);
background: linear-gradient(135deg, var(--momo-warm-caramel), var(--momo-warm-rust));
border-radius: 50%;
box-shadow: 0 0 10px rgba(217, 111, 82, 0.68);
}
@@ -409,7 +412,7 @@
#loadingOverlay .loading-progress-bar {
height: 100%;
background: var(--momo-page-accent);
background: linear-gradient(90deg, var(--momo-warm-caramel), var(--momo-warm-rust), var(--momo-warm-honey));
background-size: 200% 100%;
animation: progress-flow 1.5s linear infinite;
width: 100%;
@@ -469,7 +472,7 @@
/* Custom Dark Gray Navbar */
.navbar.bg-custom-dark {
background: var(--momo-page-accent);
background: linear-gradient(135deg, #1f2937 0%, #374151 100%);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
@@ -504,13 +507,13 @@
.sales-analysis-page .bg-primary,
.sales-analysis-page .btn-primary {
background: var(--momo-page-accent) !important;
border-color: var(--momo-accent-700) !important;
background: linear-gradient(135deg, var(--momo-warm-caramel), var(--momo-warm-mahogany)) !important;
border-color: var(--momo-warm-mahogany) !important;
}
.sales-analysis-page .btn-success,
.sales-analysis-page .bg-success {
background: var(--momo-warm-olive) !important;
background: linear-gradient(135deg, var(--momo-warm-earth), var(--momo-warm-honey)) !important;
border-color: var(--momo-warm-earth) !important;
}
@@ -610,7 +613,7 @@
<!-- V-New: 控制面板 (篩選器) -->
<div class="card mb-4 shadow-sm" style="z-index: 100; transform: none !important; transition: none;">
<div class="card-header bg-gradient"
style="background: var(--momo-page-accent); border: none;">
style="background: linear-gradient(135deg, var(--momo-warm-caramel), var(--momo-warm-mahogany)); border: none;">
<div class="d-flex justify-content-between align-items-center">
<h5 class="mb-0 text-white"><i class="fas fa-sliders-h me-2"></i>進階篩選與分析</h5>
<!-- V-New: 分析維度切換(更顯眼的設計) -->
@@ -1167,7 +1170,7 @@
{% if abc_stats %}
<div class="row mb-4">
<div class="col-12">
<div class="card border-0 shadow-sm" style="background: rgba(255, 252, 247, 0.94);">
<div class="card border-0 shadow-sm" style="background: linear-gradient(to right, #f8f9fa, #fff);">
<div class="card-body py-3">
<div class="d-flex align-items-center justify-content-between">
<h6 class="mb-0 fw-bold text-dark"><i
@@ -3032,8 +3035,8 @@
{
label: `${year2}`,
data: year2Data,
backgroundColor: 'rgba(228, 87, 61, 0.6)',
borderColor: 'rgba(228, 87, 61, 1)',
backgroundColor: 'rgba(79, 70, 229, 0.6)',
borderColor: 'rgba(79, 70, 229, 1)',
borderWidth: 1
}
]

View File

@@ -1,7 +1,7 @@
/**
* MOMO Pro × Nothing × Claude 設計 Token v2.0
* — Nothing 的點陣骨架(黑白、像素、工業)
* — Cream / warm coral / apricot / marigold / dusty rose palette
* — Cream / warm wood / muted rose / apricot / terra cotta palette
*/
:root {
@@ -23,32 +23,31 @@
--momo-line-faint: rgba(42,37,32,0.10);
/* EwoooC refined warm accent */
--momo-accent: #e4573d; /* tomato coral */
--momo-accent-50: #fff3ed;
--momo-accent-100: #ffd8c7;
--momo-accent-200: #ffb49c;
--momo-accent-500: #e4573d;
--momo-accent-600: #cc4935;
--momo-accent-700: #9f332a;
--momo-accent-soft: rgba(228,87,61,0.12);
--momo-accent: #b86f52; /* muted terra cotta */
--momo-accent-50: #fbf4ee;
--momo-accent-100: #f2dfd2;
--momo-accent-200: #dfb89f;
--momo-accent-500: #b86f52;
--momo-accent-600: #9f5f49;
--momo-accent-700: #7a4d3f;
--momo-accent-soft: rgba(184,111,82,0.12);
--momo-accent-strong: var(--momo-accent-700);
/* ===== EwoooC 暖色家族(全站運用) =====
* 全部留在暖色域(coral / apricot / marigold / dusty rose / olive避免髒棕與冷藍紫
* 全部留在暖色域(terracotta / apricot / amber / dusty rose / olive bronze),避免髒棕與冷藍紫
* 用法:活動頁 / 標籤色 / 圖表分類色 / 各區段視覺主軸
*/
--momo-warm-cream: #fff4e6; /* 奶油米白 — 大面積背景 */
--momo-warm-latte: #e6cfba; /* 奶茶木色 — 邊界 / 分隔 */
--momo-warm-caramel: #d98a4a; /* 杏焦橘 — 次重點 */
--momo-warm-terracotta: #e4573d; /* 番茄珊瑚 — CTA / active */
--momo-warm-coral: #ff7a59; /* 亮珊瑚 — 小面積亮點 */
--momo-warm-apricot: #ffb36b; /* 杏橘 — hover / 淡暖層次 */
--momo-warm-amber: #f2b84b; /* 金盞黃提醒 / 數字亮點 */
--momo-warm-rose: #d96c75; /* 乾燥玫瑰 — 風險 / 區塊底 */
--momo-warm-copper: #9a6a52; /* 暖只做文字 / 細邊 */
--momo-warm-olive: #91a85a; /* 暖橄欖中性成功 / 輔助 */
--momo-warm-greige: #b7aa9d; /* 暖灰次文字 / disabled */
--momo-warm-blush: #ffe0d3; /* 霧粉 — 柔和分區底 */
--momo-warm-cream: #f7efe3; /* 奶油米白 — 大面積背景 */
--momo-warm-latte: #d8c1aa; /* 奶茶木色 — 邊界 / 分隔 */
--momo-warm-caramel: #b98a5f; /* 低飽和焦糖 — 次重點 */
--momo-warm-terracotta: #b86f52; /* 磚紅土陶 — CTA / active */
--momo-warm-apricot: #e7b98f; /* 杏色 — hover / 淡暖層次 */
--momo-warm-amber: #c69a4a; /* 柔琥珀 — 提醒 / 數字亮點 */
--momo-warm-rose: #b98286; /* 乾燥玫瑰風險 / 區塊底 */
--momo-warm-copper: #7f5a49; /* 溫潤木棕 — 深色 active / 邊界 */
--momo-warm-olive: #8f8968; /* 暖橄欖中性成功 / 輔助 */
--momo-warm-greige: #b8aea2; /* 暖次文字 / disabled */
--momo-warm-blush: #edd6cc; /* 霧粉柔和分區底 */
/* 舊命名相容 */
--momo-warm-peach: var(--momo-warm-apricot);
@@ -57,12 +56,12 @@
--momo-warm-mahogany: var(--momo-warm-copper);
--momo-warm-earth: var(--momo-warm-olive);
/* 對應淡色(背景 / 軟標籤用) */
--momo-warm-caramel-soft: rgba(217,138,74,0.15);
--momo-warm-peach-soft: rgba(255,179,107,0.22);
--momo-warm-honey-soft: rgba(242,184,75,0.17);
--momo-warm-rust-soft: rgba(217,108,117,0.16);
--momo-warm-mahogany-soft:rgba(154,106,82,0.10);
--momo-warm-earth-soft: rgba(145,168,90,0.16);
--momo-warm-caramel-soft: rgba(185,138,95,0.14);
--momo-warm-peach-soft: rgba(231,185,143,0.22);
--momo-warm-honey-soft: rgba(198,154,74,0.15);
--momo-warm-rust-soft: rgba(185,130,134,0.14);
--momo-warm-mahogany-soft:rgba(127,90,73,0.12);
--momo-warm-earth-soft: rgba(143,137,104,0.15);
--momo-page-accent-2: var(--momo-warm-apricot);
--momo-page-accent-3: var(--momo-warm-amber);
@@ -160,7 +159,7 @@
--momo-primary-600: var(--momo-accent-600);
--momo-primary-700: var(--momo-accent-700);
--momo-primary-800: var(--momo-accent-700);
--momo-primary-900: #7f241f;
--momo-primary-900: #5f4035;
/* 導航Nothing 黑) */
--momo-nav-start: #1a1a1a;
@@ -170,14 +169,14 @@
--momo-nav-hover: rgba(255,255,255,0.08);
--momo-nav-active: rgba(255,255,255,0.14);
/* 漸層相容 token實際輸出改為純色避免大面積混色變髒 */
/* 漸層 → Nothing 風幾乎不用,保留低調黑灰漸層 */
--momo-gradient-primary: #1a1a1a;
--momo-gradient-nav: #1a1a1a;
--momo-gradient-nav: linear-gradient(180deg, #1a1a1a 0%, #000 100%);
--momo-gradient-success: #2a7a3f;
--momo-gradient-danger: var(--momo-warm-rust);
--momo-gradient-warning: var(--momo-warm-honey);
--momo-gradient-info: #2d5d80;
--momo-gradient-subtle: #f7f1e8;
--momo-gradient-subtle: linear-gradient(180deg, #f7f5ef 0%, #ebe8e1 100%);
/* 狀態色(去飽和化、配合米色底) */
--momo-success: #2a7a3f;