mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-13 12:36:15 -08:00
The Material theme setup in apps/web/src/m3-theme.scss uses the older M3 API (mat.define-theme + mat.all-component-themes), which emits component tokens but never emits the --mat-sys-* system tokens. As a result ~540 var(--mat-sys-*) references across the app were silent no-ops: the declarations were invalid at computed-value time and fell back to inherited/initial values, so many backgrounds, borders and dividers never rendered and several text/icon colors sat at the wrong contrast. Rather than migrate to mat.theme() (which would flip every no-op at once with M3 azure-palette values foreign to the hand-tuned design), remap the high-visibility usages to the existing --app-* design tokens defined for both themes in m3-theme.scss, verified screenshot-driven in light and dark via Electron CDP. Changes: - Add --app-error-color and --app-accent-color tokens (light + dark). - Fix high-visibility surfaces: settings area, workspace shell header, playlist switcher, downloads, channel-details dialog, account-info, group/category management dialogs, sources context/filters panels, nav-list, and the .dark-theme app background. - Point the Tailwind color palette at --app-* tokens instead of --mat-sys-*. - Strip ~150 dead var(--app-x, var(--mat-sys-y)) fallbacks repo-wide (the fallback can never be taken). - UI polish surfaced by the remap: suppress Material's circular icon-button state layer in the header (keep the rounded-rectangle hover), remove the orphan divider before the download button, remove the redundant right-edge accent bar on active rail items (the filled chip is enough), and raise the header/switcher control icons from the muted tier to --app-body-color so they no longer read as disabled. Guard against regressions: - tools/styles/check-mat-sys-usage.mjs fails on any new var(--mat-sys-*) reference; legacy usages are grandfathered in a shrink-only baseline (tools/styles/mat-sys-baseline.mjs). Wired into the CI Lint job and exposed as `pnpm run lint:styles`. Docs: - docs/architecture/theme-design-tokens.md documents why the tokens are no-ops, the --app-* mapping table, and the screenshot-driven migration protocol. CLAUDE.md updated with the token policy and the new lint check. Scrollbar-related --mat-sys-* usages are intentionally left untouched here; they belong to the separate branch claude/iptvnator-dark-scrollbar-2600aa. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
60 lines
1.3 KiB
SCSS
60 lines
1.3 KiB
SCSS
@mixin standard-panel-header(
|
|
$sticky: false,
|
|
$padding: 0 20px,
|
|
$gap: 12px,
|
|
$min-height: 52px,
|
|
$z-index: 2,
|
|
$border-color: var(--app-widget-header-border, rgba(255, 255, 255, 0.05))
|
|
) {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
gap: $gap;
|
|
padding: $padding;
|
|
min-height: $min-height;
|
|
flex-shrink: 0;
|
|
background: var(--app-widget-header-bg);
|
|
border-bottom: 1px solid $border-color;
|
|
|
|
@if $sticky {
|
|
position: sticky;
|
|
top: 0;
|
|
z-index: $z-index;
|
|
}
|
|
}
|
|
|
|
@mixin standard-panel-meta($gap: 10px) {
|
|
min-width: 0;
|
|
display: flex;
|
|
align-items: baseline;
|
|
gap: $gap;
|
|
flex: 1;
|
|
}
|
|
|
|
@mixin standard-panel-title($font-size: 0.95rem) {
|
|
margin: 0;
|
|
font-size: $font-size;
|
|
font-weight: 600;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
color: var(--app-heading-color);
|
|
letter-spacing: -0.01em;
|
|
}
|
|
|
|
@mixin standard-panel-subtitle(
|
|
$font-size: 0.78rem,
|
|
$font-weight: 500,
|
|
$padding: 2px 8px,
|
|
$color: var(--app-body-color),
|
|
$background: var(--mat-sys-surface-container)
|
|
) {
|
|
white-space: nowrap;
|
|
font-size: $font-size;
|
|
font-weight: $font-weight;
|
|
color: $color;
|
|
background: $background;
|
|
padding: $padding;
|
|
border-radius: 999px;
|
|
flex-shrink: 0;
|
|
} |