Files
ewoooc/web/static/css/page-growth-bem.css
OoO dafde7e1a7
All checks were successful
CD Pipeline / deploy (push) Successful in 1m45s
強化 MOMO PChome 比價可信鏈路
2026-05-19 15:26:10 +08:00

414 lines
13 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-growth-bem.css — Turn B
* BEM 元件層page head / KPI / chart card / chart row
* 全部 scope 至 .growth-analysis-page
* ════════════════════════════════════════════════════════ */
/* ── Page head ──────────────────────────────────────── */
.growth-analysis-page .ga-page-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--momo-space-4, 16px);
padding: var(--momo-space-4, 16px) var(--momo-space-5, 24px);
margin-top: var(--momo-space-3, 12px);
background: var(--momo-bg-surface);
border: 1px solid var(--momo-border-subtle);
border-radius: var(--momo-radius-md, 4px);
box-shadow: var(--momo-shadow-md);
}
.growth-analysis-page .ga-page-head__title {
display: flex;
align-items: center;
gap: var(--momo-space-2, 8px);
min-width: 0;
}
.growth-analysis-page .ga-page-head__icon {
color: var(--momo-page-accent);
font-size: var(--momo-text-title);
}
.growth-analysis-page .ga-page-head__h1 {
margin: 0;
color: var(--momo-page-ink, var(--momo-text-primary));
font-family: var(--momo-font-display);
font-size: var(--momo-text-headline);
font-weight: var(--momo-font-weight-black);
line-height: var(--momo-line-height-tight);
letter-spacing: 0;
}
.growth-analysis-page .ga-page-head__meta {
flex: 0 0 auto;
color: var(--momo-text-secondary);
font-size: var(--momo-text-meta);
line-height: var(--momo-line-height-base);
text-align: right;
}
.growth-analysis-page .ga-page-head__meta strong {
color: var(--momo-text-primary);
font-family: var(--momo-font-mono);
font-weight: var(--momo-font-weight-bold);
font-feature-settings: "tnum";
}
.growth-analysis-page .ga-empty-state {
display: grid;
gap: var(--momo-space-2, 8px);
padding: var(--momo-space-7, 48px) var(--momo-space-5, 24px);
margin-bottom: var(--momo-space-4, 16px);
color: var(--momo-text-tertiary);
background: var(--momo-bg-surface);
border: 1px solid var(--momo-border-light);
border-radius: var(--momo-radius-md, 4px);
text-align: center;
}
.growth-analysis-page .ga-empty-state i {
color: var(--momo-page-accent-dark);
font-size: var(--momo-text-headline);
}
.growth-analysis-page .ga-empty-state h2 {
margin: 0;
color: var(--momo-text-primary);
font-size: var(--momo-text-title);
font-weight: var(--momo-font-weight-bold);
line-height: var(--momo-line-height-tight);
}
.growth-analysis-page .ga-empty-state p {
margin: 0;
color: var(--momo-text-secondary);
}
/* ── KPI Row ────────────────────────────────────────── */
.growth-analysis-page .ga-kpi-row {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: var(--momo-space-3, 12px);
}
@media (max-width: 992px) {
.growth-analysis-page .ga-kpi-row { grid-template-columns: 1fr; }
}
.growth-analysis-page .ga-kpi {
position: relative;
overflow: hidden;
min-height: 132px;
padding: var(--momo-space-5, 24px);
color: var(--momo-text-primary);
background: var(--momo-bg-elevated);
border: 1px solid var(--momo-border-strong);
border-left: 4px solid var(--ga-kpi-accent, var(--momo-page-accent));
border-radius: var(--momo-radius-md, 4px);
box-shadow: var(--momo-shadow-md);
}
.growth-analysis-page .ga-kpi--revenue {
--ga-kpi-accent: var(--momo-page-accent);
}
.growth-analysis-page .ga-kpi--aov {
--ga-kpi-accent: var(--momo-warning-text);
}
.growth-analysis-page .ga-kpi--orders {
--ga-kpi-accent: var(--momo-success-text);
}
.growth-analysis-page .ga-kpi__label {
position: relative;
z-index: 1;
margin-bottom: var(--momo-space-2, 8px);
color: var(--momo-text-secondary);
font-size: var(--momo-text-body-sm);
font-weight: var(--momo-font-weight-bold);
letter-spacing: 0;
line-height: var(--momo-line-height-tight);
}
.growth-analysis-page .ga-kpi__value {
position: relative;
z-index: 1;
margin-bottom: var(--momo-space-1, 4px);
color: var(--momo-text-primary);
font-family: var(--momo-font-mono);
font-feature-settings: "tnum";
font-size: var(--momo-text-display);
font-weight: var(--momo-font-weight-black);
letter-spacing: 0;
line-height: var(--momo-line-height-tight);
}
.growth-analysis-page .ga-kpi__delta {
position: relative;
z-index: 1;
display: flex;
flex-wrap: wrap;
align-items: center;
gap: var(--momo-space-1, 4px);
margin-top: var(--momo-space-2, 8px);
}
.growth-analysis-page .ga-kpi__chip {
display: inline-flex;
align-items: center;
padding: var(--momo-space-1, 4px) var(--momo-space-2, 8px);
color: var(--momo-tag-honey-text);
background: var(--momo-tag-honey-bg);
border: 1px solid var(--momo-tag-honey-border);
border-radius: var(--momo-radius-sm, 2px);
font-size: var(--momo-text-label);
font-weight: var(--momo-font-weight-bold);
line-height: 1;
letter-spacing: 0;
}
.growth-analysis-page .ga-kpi__yoy {
font-family: var(--momo-font-mono);
font-feature-settings: "tnum";
font-size: var(--momo-text-body-sm);
font-weight: var(--momo-font-weight-bold);
}
.growth-analysis-page .ga-kpi__yoy.is-up { color: var(--momo-danger-text); }
.growth-analysis-page .ga-kpi__yoy.is-down { color: var(--momo-success-text); }
.growth-analysis-page .ga-kpi__hint {
position: relative;
z-index: 1;
margin-top: var(--momo-space-1, 4px);
color: var(--momo-text-secondary);
font-size: var(--momo-text-meta);
}
.growth-analysis-page .ga-kpi__icon-bg {
position: absolute;
right: var(--momo-space-6, 32px);
bottom: var(--momo-space-3, 12px);
color: var(--ga-kpi-accent);
font-size: 72px;
opacity: 0.1;
transform: rotate(-15deg);
pointer-events: none;
}
/* ── Chart Row 變體 ─────────────────────────────────── */
.growth-analysis-page .ga-chart-row {
display: grid;
gap: var(--momo-space-3, 12px);
}
.growth-analysis-page .ga-chart-row--8-4 { grid-template-columns: 2fr 1fr; }
.growth-analysis-page .ga-chart-row--6-6 { grid-template-columns: 1fr 1fr; }
@media (max-width: 992px) {
.growth-analysis-page .ga-chart-row--8-4,
.growth-analysis-page .ga-chart-row--6-6 { grid-template-columns: 1fr; }
}
/* ── Chart Card ─────────────────────────────────────── */
.growth-analysis-page .ga-chart-card {
display: flex;
flex-direction: column;
background: var(--momo-bg-surface);
border: 1px solid var(--momo-border-strong);
border-radius: var(--momo-radius-md, 4px);
box-shadow: var(--momo-shadow-md);
overflow: hidden;
}
.growth-analysis-page .ga-chart-card__head {
padding: var(--momo-space-4, 16px) var(--momo-space-5, 24px);
background: var(--momo-bg-elevated);
border-bottom: 1px solid var(--momo-border-subtle);
}
.growth-analysis-page .ga-chart-card__title {
display: inline-flex;
align-items: center;
gap: var(--momo-space-2, 8px);
color: var(--momo-text-primary);
font-size: var(--momo-text-title);
font-weight: var(--momo-font-weight-bold);
line-height: var(--momo-line-height-tight);
letter-spacing: 0;
}
.growth-analysis-page .ga-chart-card__title i {
color: var(--momo-page-accent);
}
.growth-analysis-page .ga-chart-card__body {
padding: var(--momo-space-4, 16px);
height: var(--ga-chart-h, 320px);
}
.growth-analysis-page .ga-chart-card__body--lg {
height: 350px;
}
.growth-analysis-page .ga-chart-card__body--md {
height: 300px;
}
.growth-analysis-page .ga-chart-card__body canvas {
display: block;
width: 100% !important;
height: 100% !important;
}
.growth-analysis-page .ga-chart-card__body.chart-fallback-active canvas {
display: none !important;
}
.growth-analysis-page .ga-chart-card__body.chart-empty-active canvas {
display: none !important;
}
.growth-analysis-page .ga-chart-empty {
position: absolute;
inset: var(--momo-space-4, 16px);
border: 1px dashed var(--momo-page-accent-line);
border-radius: var(--momo-radius-md, 6px);
background: color-mix(in srgb, var(--momo-bg-paper) 86%, white);
color: var(--momo-text-secondary);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: var(--momo-space-2, 8px);
text-align: center;
padding: var(--momo-space-4, 16px);
}
.growth-analysis-page .ga-chart-empty strong {
color: var(--momo-text-primary);
font-size: var(--momo-text-body, 16px);
letter-spacing: 0;
}
.growth-analysis-page .ga-chart-empty span {
max-width: 34rem;
font-size: var(--momo-text-caption, 12px);
line-height: 1.6;
letter-spacing: 0;
}
.growth-analysis-page .ga-chart-fallback {
position: absolute;
inset: var(--momo-space-4, 16px);
display: flex;
align-items: flex-end;
gap: var(--momo-space-2, 8px);
}
.growth-analysis-page .ga-chart-card__body {
position: relative;
}
.growth-analysis-page .ga-chart-fallback__bar {
flex: 1 1 0;
height: var(--bar-h);
min-height: 8px;
border: 1px solid var(--momo-page-accent-line);
border-radius: 6px 6px 2px 2px;
background: color-mix(in srgb, var(--momo-page-accent) 72%, white);
display: flex;
flex-direction: column;
justify-content: flex-end;
padding: var(--momo-space-1, 4px);
}
.growth-analysis-page .ga-chart-fallback__bar.is-negative {
background: color-mix(in srgb, var(--momo-danger-bg) 84%, white);
}
.growth-analysis-page .ga-chart-fallback__bar span,
.growth-analysis-page .ga-chart-fallback__bar strong {
font-family: var(--momo-font-mono);
font-size: var(--momo-text-caption, 12px);
letter-spacing: 0;
}
.growth-analysis-page .ga-chart-snapshot {
position: absolute;
inset: var(--momo-space-4, 16px);
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: var(--momo-space-2, 8px);
align-content: center;
}
.growth-analysis-page .ga-chart-snapshot__item {
min-width: 0;
border: 1px solid var(--momo-page-accent-line);
border-radius: var(--momo-radius-md, 6px);
background: color-mix(in srgb, var(--momo-page-accent-soft) 72%, white);
padding: var(--momo-space-2, 8px);
display: flex;
justify-content: space-between;
gap: var(--momo-space-2, 8px);
}
.growth-analysis-page .ga-chart-snapshot__item b,
.growth-analysis-page .ga-chart-snapshot__item strong {
min-width: 0;
font-family: var(--momo-font-mono);
font-size: var(--momo-text-caption, 12px);
letter-spacing: 0;
}
.growth-analysis-page .ga-chart-snapshot__item b {
color: var(--momo-text-secondary);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.growth-analysis-page .ga-chart-snapshot__item strong {
color: var(--momo-text-primary);
white-space: nowrap;
}
.growth-analysis-page .ga-chart-card__body:not(.chart-fallback-active) .ga-chart-fallback,
.growth-analysis-page .ga-chart-card__body:not(.chart-fallback-active) .ga-chart-snapshot {
display: none !important;
}
.growth-analysis-page .ga-chart-card__body:not(.chart-empty-active) .ga-chart-empty {
display: none !important;
}
.growth-analysis-page .ga-chart-card__body.chart-fallback-active .ga-chart-fallback {
display: flex;
}
.growth-analysis-page .ga-chart-card__body.chart-fallback-active .ga-chart-snapshot {
display: grid;
}
.growth-analysis-page .ga-competitor-quality {
display: grid;
grid-template-columns: minmax(82px, 0.8fr) minmax(0, 1fr);
gap: 10px 12px;
align-items: center;
width: 100%;
}
.growth-analysis-page .ga-competitor-quality span {
color: var(--momo-text-secondary);
font-size: var(--momo-text-caption, 12px);
font-weight: 700;
}
.growth-analysis-page .ga-competitor-quality strong {
min-width: 0;
color: var(--momo-text-primary);
font-size: clamp(1rem, 1.5vw, 1.45rem);
overflow-wrap: anywhere;
}
@media (max-width: 640px) {
.growth-analysis-page .ga-page-head {
align-items: flex-start;
flex-direction: column;
padding: var(--momo-space-3, 12px) var(--momo-space-4, 16px);
}
.growth-analysis-page .ga-page-head__h1 {
font-size: var(--momo-text-title);
}
.growth-analysis-page .ga-page-head__meta {
width: 100%;
text-align: left;
}
.growth-analysis-page .ga-kpi {
min-height: 112px;
padding: var(--momo-space-4, 16px);
}
.growth-analysis-page .ga-kpi__value {
font-size: var(--momo-text-headline);
}
.growth-analysis-page .ga-kpi__icon-bg {
right: var(--momo-space-5, 24px);
bottom: var(--momo-space-2, 8px);
font-size: 54px;
opacity: 0.08;
}
.growth-analysis-page .ga-chart-card__body {
height: 260px !important;
padding: var(--momo-space-3, 12px);
}
}