/* ════════════════════════════════════════════════════════ * 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 card(4 個分類專屬) ─────────────── */ .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; } }