Files
ewoooc/web/static/css/page-monthly-summary-bem.css
OoO 605250619c
All checks were successful
CD Pipeline / deploy (push) Successful in 1m3s
Frontend V3 responsive production update
2026-05-12 18:27:29 +08:00

287 lines
11 KiB
CSS
Raw 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.
/* ════════════════════════════════════════════════════════
* page-monthly-summary-bem.css — Turn B
* ────────────────────────────────────────────────────────
* monthly_summary_analysis.html 的 BEM 命名層
* 與 page-monthly-summary.css (token 化) 配對使用
* 載入順序tokens → page-monthly-summary.css → 本檔
*
* 命名前綴ms- (monthly-summary)
* ════════════════════════════════════════════════════════ */
/* ── 0. 頁面 scope ─────────────────────────────────────── */
.ms-page {
--ms-card-bg: rgba(250, 246, 238, 0.94);
--ms-card-border: var(--momo-border-light);
--ms-card-radius: var(--momo-radius-md, 8px);
--ms-head-bg: var(--momo-surface-2, rgba(250, 247, 240, 0.88));
--ms-icon: var(--momo-warm-caramel);
}
/* ── 1. Loading overlay重命名替換原 .loading-overlay ─ */
.ms-loading {
position: fixed;
inset: 0;
z-index: 9999;
display: none;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 14px;
background: rgba(250, 246, 238, 0.78);
backdrop-filter: blur(4px);
color: var(--momo-text-secondary);
font-family: var(--momo-font-mono);
font-size: var(--momo-text-meta, 12px);
letter-spacing: 0.04em;
}
.ms-loading[style*="flex"] { display: flex !important; }
.ms-loading__spinner {
width: 36px; height: 36px;
border: 3px solid var(--momo-warm-caramel-soft);
border-top-color: var(--momo-warm-caramel);
border-radius: 50%;
animation: ms-spin 0.9s linear infinite;
}
.ms-loading__text { text-transform: uppercase; }
@keyframes ms-spin { to { transform: rotate(360deg); } }
/* ── 2. Page head ─────────────────────────────────────── */
.ms-page-head {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: var(--momo-space-3, 16px);
align-items: center;
padding: var(--momo-space-5, 22px);
border: 1px solid var(--momo-border-strong);
border-radius: var(--ms-card-radius);
background: var(--momo-surface-raised);
box-shadow: var(--momo-shadow-soft);
}
.ms-page-head__main { display: flex; flex-direction: column; gap: 6px; }
.ms-page-head__title {
display: flex; align-items: center; gap: 10px; margin: 0;
color: var(--momo-text-primary);
font-family: var(--momo-font-display);
font-size: clamp(1.45rem, 2vw, 2.08rem);
font-weight: var(--momo-font-weight-black, 800);
}
.ms-page-head__icon { color: var(--ms-icon); }
.ms-page-head__sub {
margin: 0;
color: var(--momo-text-secondary);
font-size: var(--momo-text-body, 14px);
}
.ms-page-head__sub code { background: transparent; color: inherit; }
/* ── 3. Tag / pill ────────────────────────────────────── */
.ms-tag {
display: inline-flex; align-items: center; gap: 6px;
font-family: var(--momo-font-mono);
font-weight: var(--momo-font-weight-bold, 700);
}
.ms-tag--mono {
padding: 1px 6px;
border-radius: 4px;
background: var(--momo-warm-caramel-soft);
color: var(--momo-warm-caramel);
font-size: 0.92em;
}
.ms-tag--pill {
padding: 6px 10px;
border: 1px solid var(--momo-border);
border-radius: 999px;
background: rgba(250, 246, 238, 0.7);
color: var(--momo-text-secondary);
font-size: var(--momo-text-meta, 12px);
}
/* ── 4. Filter card ───────────────────────────────────── */
.ms-filter-card {
position: sticky;
top: 12px;
z-index: 30;
}
.ms-filter-group__label {
display: flex; align-items: center; gap: 6px;
font-family: var(--momo-font-display);
font-size: var(--momo-text-label, 11px);
font-weight: var(--momo-font-weight-semibold, 600);
letter-spacing: 0.06em;
text-transform: uppercase;
color: rgba(255, 248, 239, 0.78) !important;
}
.ms-filter-group__btn {
width: 100%;
}
/* 5 個 filter 群組各自的左側色條(語意暗示) */
.ms-filter-group { position: relative; }
.ms-filter-group::before {
content: "";
position: absolute;
left: -2px; top: 26px; bottom: 6px;
width: 2px;
border-radius: 2px;
opacity: 0.85;
}
.ms-filter-group--year::before { background: var(--momo-warm-caramel); }
.ms-filter-group--month::before { background: var(--momo-warm-honey); }
.ms-filter-group--area::before { background: var(--momo-warm-olive); }
.ms-filter-group--vendor::before { background: var(--momo-warm-clay); }
.ms-filter-group--trade::before { background: var(--momo-warm-apricot); }
.ms-filter-card__refresh {
background: var(--momo-warm-caramel);
color: var(--momo-on-accent, #fff8ef);
border: 1px solid transparent;
font-weight: var(--momo-font-weight-bold, 700);
border-radius: var(--ms-card-radius);
transition: filter 0.15s ease;
}
.ms-filter-card__refresh:hover { filter: brightness(0.92); color: var(--momo-on-accent, #fff8ef); }
/* ── 5. Highlight grid (Top 3) ────────────────────────── */
.ms-highlight {
border-radius: var(--ms-card-radius);
overflow: hidden;
border-top: 3px solid transparent;
}
.ms-highlight__head {
padding: 0.55rem 0.9rem;
border-bottom: 1px solid var(--ms-card-border);
display: flex; align-items: center;
}
.ms-highlight__title {
margin: 0;
font-size: var(--momo-text-body, 14px);
font-weight: var(--momo-font-weight-bold, 700);
display: inline-flex; align-items: center; gap: 6px;
color: var(--momo-on-accent, #fff8ef);
}
/* 取代 bg-primary / bg-success / bg-warning 三色 → 暖系語意 */
.ms-highlight--accent { border-top-color: var(--momo-warm-caramel); }
.ms-highlight--accent .ms-highlight__head {
background: var(--momo-surface-raised);
}
.ms-highlight--olive { border-top-color: var(--momo-warm-olive); }
.ms-highlight--olive .ms-highlight__head {
background: var(--momo-surface-raised);
}
.ms-highlight--honey { border-top-color: var(--momo-warm-honey); }
.ms-highlight--honey .ms-highlight__head {
background: var(--momo-surface-raised);
color: var(--momo-on-accent, #fff8ef);
}
.ms-highlight__table tbody tr:last-child td { border-bottom: 0; }
/* ── 6. Chart card 共用容器 ───────────────────────────── */
.ms-chart-card {
border: 1px solid var(--ms-card-border) !important;
border-radius: var(--ms-card-radius);
background: var(--ms-card-bg);
box-shadow: var(--momo-shadow-soft);
}
.ms-chart-card__head {
background: var(--ms-head-bg) !important;
border-bottom: 1px solid var(--ms-card-border);
padding: 1rem 1.25rem;
display: flex;
justify-content: space-between;
align-items: center;
}
.ms-chart-card__title {
margin: 0;
font-weight: var(--momo-font-weight-bold, 700);
font-size: var(--momo-text-title, 17px);
color: var(--momo-text-primary);
display: inline-flex; align-items: center; gap: 8px;
}
.ms-chart-card__icon { color: var(--ms-icon); }
.ms-chart-card__canvas { width: 100%; }
.ms-chart-card__table {
border-color: var(--ms-card-border) !important;
font-family: var(--momo-font-mono);
font-size: var(--momo-text-meta, 12px);
}
.ms-chart-card__table th,
.ms-chart-card__table td {
border-color: var(--ms-card-border) !important;
}
.ms-chart-card__scroll { max-height: 200px; overflow-y: auto; }
/* ── 7. Special area card4 個分類專屬) ─────────────── */
.ms-special {
border-radius: var(--ms-card-radius);
border: 1px solid var(--ms-card-border) !important;
background: var(--ms-card-bg);
box-shadow: var(--momo-shadow-soft);
overflow: hidden;
}
.ms-special__head {
background: var(--ms-head-bg) !important;
border-bottom: 1px solid var(--ms-card-border);
padding: 1rem 1.25rem;
display: flex;
justify-content: space-between;
align-items: center;
}
.ms-special__title {
margin: 0;
font-weight: var(--momo-font-weight-bold, 700);
font-size: var(--momo-text-title, 17px);
display: inline-flex; align-items: center; gap: 8px;
}
/* 4 個變體:取代 border-info / border-success / border-warning / border-danger */
.ms-special--info { border-left: 4px solid var(--momo-warm-caramel) !important; }
.ms-special--info .ms-special__title { color: var(--momo-warm-caramel); }
.ms-special--olive { border-left: 4px solid var(--momo-warm-olive, #6f7a4a) !important; }
.ms-special--olive .ms-special__title { color: var(--momo-warm-olive, #6f7a4a); }
.ms-special--honey { border-left: 4px solid var(--momo-warm-honey) !important; }
.ms-special--honey .ms-special__title { color: var(--momo-warm-honey); }
.ms-special--mahogany { border-left: 4px solid var(--momo-warm-mahogany, #7a3b2c) !important; }
.ms-special--mahogany .ms-special__title { color: var(--momo-warm-mahogany, #7a3b2c); }
/* ── 8. Data table ────────────────────────────────────── */
.ms-data-table {
border: 1px solid var(--ms-card-border) !important;
border-radius: var(--ms-card-radius);
background: var(--ms-card-bg);
box-shadow: var(--momo-shadow-soft);
}
.ms-data-table__head {
background: var(--momo-on-accent, #fff8ef) !important;
border-bottom: 1px solid var(--ms-card-border);
padding: 1rem 1.25rem;
display: flex; justify-content: space-between; align-items: center;
}
.ms-data-table__title {
margin: 0;
font-weight: var(--momo-font-weight-bold, 700);
font-size: var(--momo-text-title, 17px);
display: inline-flex; align-items: center; gap: 8px;
}
.ms-data-table__import {
border-color: var(--momo-warm-caramel);
color: var(--momo-warm-caramel);
font-family: var(--momo-font-mono);
}
.ms-data-table__import:hover {
background: var(--momo-warm-caramel);
color: var(--momo-on-accent, #fff8ef);
}
.ms-data-table__table thead th {
background: var(--ms-head-bg) !important;
color: var(--momo-text-secondary);
font-family: var(--momo-font-display);
font-size: var(--momo-text-label, 11px);
font-weight: var(--momo-font-weight-black, 800);
letter-spacing: 0.06em;
text-transform: uppercase;
border-bottom: 1px solid var(--ms-card-border);
}
/* ── 9. 響應式 ─────────────────────────────────────────── */
@media (max-width: 768px) {
.ms-page-head { grid-template-columns: 1fr; }
.ms-filter-card { position: static; }
}