.icon-container { display: flex; justify-content: center; align-content: center; background-color: var(--deepdrft-play-chip); border-radius: 50%; height: 60px; width: 60px; transition: background-color 1s ease-in-out; } .icon-container:hover { background-color: color-mix(in srgb, var(--deepdrft-play-chip), var(--deepdrft-navy-mid) 25%); } /* In dark mode the chip is moss-green and MudIconButton's Color.Primary/Secondary green glyph would vanish against it, so pin the glyph to --deepdrft-play-glyph (navy) in dark only. In light mode the token also resolves to navy, but applying it there overrides Color.Secondary (green-accent) on hero/row mounts — a visible regression. Scoping to .deepdrft-theme-dark preserves the MudBlazor Color prop in light and fixes only dark. ::deep reaches the portaled-in-scope MudIconButton icon, which doesn't carry this component's scope attribute. */ .deepdrft-theme-dark .icon-container ::deep .mud-icon-button { color: var(--deepdrft-play-glyph); } /* PlayStateIcon is authoritative over its own glyph colour — a surrounding .dd-accent-icon must NOT recolor the play-chip glyph in dark. The consolidation rule is: .dd-accent-icon .mud-icon-button .mud-icon-root (0,3,0) !important After Blazor scoped-CSS compilation this rule becomes: .deepdrft-theme-dark .icon-container[b-xxx] .mud-icon-button .mud-icon-root (0,5,0) !important (0,5,0) beats (0,3,0) — wins on specificity; !important parity is irrelevant. Dark only: light already renders the navy glyph via the MudBlazor Color prop. */ .deepdrft-theme-dark .icon-container ::deep .mud-icon-button .mud-icon-root { color: var(--deepdrft-play-glyph) !important; }