/* DeepDrft Global Styles - Simplified & Maintainable Note: the palette / token layer (--deepdrft-*, --theme-*, --gradient-*, and the .deepdrft-theme-dark override block) lives in DeepDrftShared.Client and is served at _content/DeepDrftShared.Client/styles/deepdrft-tokens.css. Link that file BEFORE this one in App.razor — every rule below depends on those tokens. */ /* ============================================================================= 1. PAGE BASELINE ============================================================================= */ /* Base page colours — use MudBlazor's theme-injected variables so they switch automatically when IsDarkMode toggles. The --mud-palette-background and --mud-palette-text-primary variables are injected by MudThemeProvider and update in both light and dark modes. */ html, body { background-color: var(--mud-palette-background); color: var(--mud-palette-text-primary); } /* Ensure the theme wrapper fills the full viewport so no background gap shows. */ .deepdrft-theme-dark, .deepdrft-theme-light { min-height: 100vh; } /* ============================================================================= 2. GRADIENTS ============================================================================= */ .deepdrft-gradient-primary, .deepdrft-gradient-hero { background: linear-gradient(135deg, var(--gradient-base) 0%, color-mix(in srgb, var(--gradient-base) 90%, var(--gradient-accent) 10%) 50%, color-mix(in srgb, var(--gradient-base) 80%, var(--gradient-accent) 20%) 100%); } .deepdrft-gradient-soft-primary { background: linear-gradient(45deg, color-mix(in srgb, var(--gradient-accent) 4%, transparent) 0%, color-mix(in srgb, var(--gradient-warm) 6%, transparent) 100%); } .deepdrft-gradient-soft-secondary { background: linear-gradient(45deg, color-mix(in srgb, var(--gradient-light) 6%, transparent) 0%, color-mix(in srgb, var(--gradient-accent) 4%, transparent) 100%); } .deepdrft-gradient-soft-accent { background: linear-gradient(135deg, color-mix(in srgb, var(--gradient-accent) 3%, transparent) 0%, color-mix(in srgb, var(--gradient-light) 5%, transparent) 100%); } .deepdrft-gradient-soft-tertiary { background: linear-gradient(135deg, color-mix(in srgb, var(--gradient-warm) 5%, transparent) 0%, color-mix(in srgb, var(--gradient-accent) 3%, transparent) 100%); } .deepdrft-gradient-features { background: linear-gradient(to right, color-mix(in srgb, var(--gradient-accent) 2%, transparent) 0%, color-mix(in srgb, var(--gradient-warm) 3%, transparent) 100%); } /* ============================================================================= 3. TYPOGRAPHY ============================================================================= */ /* Hero text */ h1, .deepdrft-text-hero { font-family: var(--deepdrft-font-display); font-weight: bold; text-shadow: 2px 2px 4px rgba(0,0,0,0.5); } /* Suppress the browser focus ring that FocusOnNavigate triggers on h1 after navigation. */ h1:focus-visible { outline: none; } /* Headers */ h2, h3, h4, h5, h6, .deepdrft-text-subtitle { font-family: var(--deepdrft-font-display); } .deepdrft-text-subtitle { font-weight: 300; text-shadow: 1px 1px 2px rgba(0,0,0,0.3); } /* Body */ body, p, span, div, .deepdrft-text-description, .deepdrft-text-readable { font-family: var(--deepdrft-font-body); } .deepdrft-text-description { font-weight: 400; opacity: 0.9; } .deepdrft-text-bold { font-weight: bold; } .deepdrft-text-readable { line-height: 1.6; } /* MudBlazor font overrides */ .mud-typography-h1, .mud-typography-h2, .mud-typography-h3, .mud-typography-h4, .mud-typography-h5, .mud-typography-h6, .mud-navlink-text, .mud-appbar-content { font-family: var(--deepdrft-font-display) !important; } .mud-button-text, .mud-typography-caption, .mud-typography-overline { font-family: var(--deepdrft-font-mono) !important; } .mud-typography-body1, .mud-typography-body2, .mud-input-text, .mud-select-text, .mud-form-label { font-family: var(--deepdrft-font-body) !important; } /* ============================================================================= 4. HERO SECTION ============================================================================= */ .deepdrft-hero-container { min-height: 60vh; display: flex; flex-direction: column; justify-content: center; } .deepdrft-hero-text-container { max-width: 600px; } /* Light mode hero text */ .deepdrft-theme-light .deepdrft-hero-title { color: var(--deepdrft-primary); } .deepdrft-theme-light .deepdrft-hero-subtitle { color: var(--deepdrft-secondary); } .deepdrft-theme-light .deepdrft-hero-description { color: var(--theme-surface-soft); } /* Dark mode hero text */ .deepdrft-theme-dark .deepdrft-hero-title { color: var(--theme-surface); } .deepdrft-theme-dark .deepdrft-hero-subtitle { color: var(--deepdrft-tertiary); } .deepdrft-theme-dark .deepdrft-hero-description { color: var(--theme-surface-soft); } /* Hero buttons - Light */ .deepdrft-theme-light .deepdrft-hero-button-filled.mud-button-filled { background-color: var(--deepdrft-primary); color: var(--gradient-base); } .deepdrft-theme-light .deepdrft-hero-button-outlined.mud-button-outlined { border-color: var(--deepdrft-primary); color: var(--deepdrft-primary); } /* Hero buttons - Dark */ .deepdrft-theme-dark .deepdrft-hero-button-filled.mud-button-filled { background-color: var(--deepdrft-primary); color: var(--gradient-base); } .deepdrft-theme-dark .deepdrft-hero-button-outlined.mud-button-outlined { border-color: var(--theme-surface); color: var(--theme-surface); } /* ============================================================================= 5. APPBAR ============================================================================= */ .deepdrft-theme-light .mud-appbar, .deepdrft-theme-light .mud-appbar *, .deepdrft-theme-light .mud-appbar .mud-icon-button { color: var(--gradient-base); } .deepdrft-theme-dark .mud-appbar, .deepdrft-theme-dark .mud-appbar *, .deepdrft-theme-dark .mud-appbar .mud-icon-button { color: var(--theme-surface); } /* ============================================================================= 6. BORDERS (Only used variants) ============================================================================= */ .deepdrft-border-left-secondary { border-left: 4px solid var(--theme-secondary); } .deepdrft-border-left-tertiary { border-left: 4px solid var(--theme-tertiary); } .deepdrft-border-top-quaternary { border-top: 4px solid var(--theme-quaternary); } .deepdrft-border-top-senary { border-top: 4px solid var(--theme-senary); } /* ============================================================================= 7. CARDS & TINTS (Only used variants) ============================================================================= */ .deepdrft-feature-card, .deepdrft-about-card { height: 100%; } .deepdrft-feature-icon-container { text-align: center; } /* Card tints - using theme variables */ .deepdrft-card-purple-tint { background: color-mix(in srgb, var(--deepdrft-secondary) 10%, transparent); } .deepdrft-card-pink-tint { background: color-mix(in srgb, var(--gradient-warm) 10%, transparent); } .deepdrft-card-indigo-tint { background: color-mix(in srgb, var(--gradient-accent) 8%, transparent); } .deepdrft-card-lavender-tint { background: color-mix(in srgb, var(--theme-quinary) 10%, transparent); } /* ============================================================================= 8. TRACK CARDS ============================================================================= */ /* Container — always transparent so MudCard's paper background never competes with the absolute-positioned fallback panel or album art. */ .deepdrft-track-card-container { width: 250px; height: 250px; min-width: 250px; position: relative; overflow: hidden; background: transparent !important; } /* Dark: glass edge to match NowPlayingCard vocabulary */ .deepdrft-theme-dark .deepdrft-track-card-container { border: 1px solid rgba(250, 250, 248, 0.12); } .deepdrft-track-card-bg { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-size: cover; background-position: center; filter: brightness(0.7); } .deepdrft-track-card-content { position: relative; z-index: 1; height: 100%; display: flex; flex-direction: column; justify-content: space-between; padding: 16px; } /* Scrim behind text — guarantees legibility over album art and fallback glass */ .deepdrft-theme-dark .deepdrft-track-card-content { background: linear-gradient(to top, rgba(13, 27, 42, 0.75) 0%, rgba(13, 27, 42, 0.35) 45%, rgba(13, 27, 42, 0.00) 100%); } /* Fallback panel — layout + stable dark default. Base rule sets navy-mid so the card never flashes grey/surface-teal even if the theme wrapper class is absent during WASM hydration. */ .deepdrft-track-card-fallback { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: var(--deepdrft-navy-mid, #162437) !important; } /* Fallback panel — navy-glass, dark theme. Mirrors NowPlayingCard's .now-playing glass. */ .deepdrft-theme-dark .deepdrft-track-card-fallback { background: color-mix(in srgb, var(--deepdrft-navy) 55%, transparent) !important; border: 1px solid rgba(250, 250, 248, 0.12); backdrop-filter: blur(8px); } /* Fallback panel — light theme: subtle navy tint on off-white */ .deepdrft-theme-light .deepdrft-track-card-fallback { background: color-mix(in srgb, var(--deepdrft-navy) 8%, var(--deepdrft-white)) !important; border: 1px solid var(--deepdrft-border); } /* Card text — unconditional dark defaults (glass-language colors). These fire even if the theme wrapper class is absent during WASM hydration, preventing a "blue text" flash. Light-mode overrides below correct legibility. */ .deepdrft-track-title { color: var(--deepdrft-white, #FAFAF8); } .deepdrft-track-artist { color: var(--deepdrft-green-accent, #3D7A68); } .deepdrft-track-meta { color: rgba(250, 250, 248, 0.55); } /* Light-mode text overrides — legible on the near-white light fallback */ .deepdrft-theme-light .deepdrft-track-title { color: var(--deepdrft-navy, #0D1B2A); } .deepdrft-theme-light .deepdrft-track-artist { color: var(--deepdrft-green, #1A3C34); } .deepdrft-theme-light .deepdrft-track-meta { color: var(--deepdrft-muted, #8A9BB0); } .deepdrft-track-info-middle { margin: 8px 0; } .deepdrft-track-info-bottom { display: flex; justify-content: space-between; align-items: center; } .deepdrft-track-gallery-item-center { display: flex; justify-content: center; } /* ============================================================================= 9. CHIPS & BUTTONS ============================================================================= */ .deepdrft-chip-spacing { margin: 2px; } .deepdrft-genre-chip { opacity: 0.9; margin-top: 4px; } .deepdrft-button-spaced { margin: 8px; } /* Extended palette chips */ .mud-chip.deepdrft-chip-quaternary { background-color: var(--theme-quaternary); color: white; } .mud-chip.deepdrft-chip-quinary { background-color: var(--theme-quinary); color: white; } .mud-chip.deepdrft-chip-senary { background-color: var(--theme-senary); color: white; } /* ============================================================================= 10. EXTENDED PALETTE TEXT COLORS (Only used variants) ============================================================================= */ .deepdrft-text-quaternary { color: var(--theme-quaternary); } .deepdrft-text-quinary { color: var(--theme-quinary); } .deepdrft-text-senary { color: var(--theme-senary); } /* ============================================================================= 11. CTA SECTION ============================================================================= */ .deepdrft-cta-container { border-radius: 16px; text-align: center; } .deepdrft-cta-buttons { margin-bottom: 16px; } /* ============================================================================= 12. ICONS & UTILITIES ============================================================================= */ .deepdrft-icon-large { font-size: 3rem; } /* ============================================================================= 13. RESPONSIVE ============================================================================= */ @media (max-width: 768px) { .deepdrft-hero-text { font-size: clamp(1.5rem, 6vw, 3rem) !important; } .deepdrft-cta-buttons .mud-button { margin: 4px !important; width: 100%; } } @media (max-width: 480px) { .deepdrft-track-card-container { min-width: 200px; width: 200px; height: 200px; } }