@import 'tailwindcss'; @theme { --font-sans: 'Plus Jakarta Sans Variable', ui-sans-serif, system-ui, sans-serif; --font-display: 'Sora Variable', ui-sans-serif, system-ui, sans-serif; --color-bg: var(--mf-bg); --color-elevated: var(--mf-elevated); --color-surface: var(--mf-surface); --color-surface-2: var(--mf-surface-2); --color-surface-hover: var(--mf-surface-hover); --color-hover: var(--mf-row-hover); --color-line: var(--mf-border); --color-line-strong: var(--mf-border-strong); --color-hairline: var(--mf-hairline); --color-track: var(--mf-track); --color-fg: var(--mf-text); --color-fg-2: var(--mf-text-2); --color-accent: var(--mf-accent); --color-accent-soft: var(--mf-accent-title); --color-accent-tint: var(--mf-accent-soft-bg); --color-accent-btn: var(--mf-accent-btn-bg); --color-accent-btn-hover: var(--mf-accent-btn-bg-hover); --color-ink: var(--mf-ink); --color-cta-strong: var(--mf-cta-strong-bg); --color-scrim: var(--mf-scrim); --color-on-art: var(--mf-on-art); --color-on-art-2: var(--mf-on-art-2); --color-danger: oklch(63.7% 0.15 25.331); --color-danger-fg: var(--mf-danger-fg); --color-btn: var(--mf-btn-bg); --color-btn-hover: var(--mf-btn-bg-hover); --color-cta-strong-hover: var(--mf-cta-strong-hover); --color-row-hover: var(--mf-row-hover); --radius-tag: 0.25rem; --radius-thumb: 0.5rem; --radius-control: 0.625rem; --radius-btn-sm: 0.6875rem; --radius-btn: 0.75rem; --radius-art: 0.8125rem; --radius-art-lg: 1.125rem; --radius-panel: 1.125rem; --radius-panel-lg: 1.375rem; --spacing-cover-xs: 2.25rem; --spacing-cover-sm: 2.625rem; --spacing-cover-md: 3rem; --spacing-cover-lg: 3.5rem; --spacing-cover-xl: 5.5rem; --spacing-cover-2xl: 8.5rem; --spacing-cover-hero: 9rem; --spacing-cover-hero-sm: 10.25rem; --spacing-icon-xs: 0.875rem; --spacing-icon-sm: 1rem; --spacing-icon-md: 1.125rem; --spacing-icon-lg: 1.25rem; --spacing-icon-xl: 2.25rem; --spacing-section: 2.875rem; --container-prose-sm: 26rem; --container-hero: 34rem; --container-search: 30rem; --container-cta: 20rem; --text-control-sm: 0.78125rem; --ease-snappy: var(--mf-ease); --default-transition-duration: var(--mf-motion-fast); --tracking-display: -0.02em; --tracking-eyebrow: 0.1em; --leading-body: 1.65; } @utility page-x { padding-inline: --spacing(4); @media (width >= 40rem) { padding-inline: --spacing(8); } } @utility media-grid { grid-template-columns: repeat(auto-fill, minmax(var(--mf-grid-min-mobile), 1fr)); @media (width >= 40rem) { grid-template-columns: repeat(auto-fill, minmax(var(--mf-grid-min), 1fr)); } } @utility track-grid { grid-template-columns: var(--mf-track-cols-mobile); @media (width >= 40rem) { grid-template-columns: var(--mf-track-cols); } } @utility scrollbar-stable { scrollbar-gutter: stable; } @utility text-display-1 { @apply font-display text-3xl font-medium tracking-tight sm:text-4xl; } @utility text-display-2 { @apply font-display text-2xl font-medium tracking-tight; } @utility text-display-3 { @apply font-display text-xl font-medium tracking-display; } @utility text-display-4 { @apply font-display text-lg font-medium tracking-tight; } @utility text-eyebrow { @apply text-xs font-medium tracking-widest uppercase; } @utility text-body { @apply text-sm leading-body; } @utility text-count { @apply text-xs tabular-nums; } @utility btn-transition { transition-property: color, background-color, border-color, outline-color, opacity, box-shadow, filter; transition-timing-function: var(--default-transition-timing-function); transition-duration: var(--default-transition-duration); } @utility glass-bar { background-color: var(--mf-bg); border-top: 1px solid var(--mf-hairline); } @utility grid-cards { display: grid; gap: --spacing(3); grid-template-columns: repeat(auto-fill, minmax(9.375rem, 1fr)); @media (width >= 40rem) { gap: --spacing(4); grid-template-columns: repeat(auto-fill, minmax(10.3125rem, 1fr)); } } @utility grid-cards-lg { display: grid; gap: --spacing(3); grid-template-columns: repeat(auto-fill, minmax(11.25rem, 1fr)); @media (width >= 40rem) { gap: --spacing(4); grid-template-columns: repeat(auto-fill, minmax(13.125rem, 1fr)); } } @utility grid-tiles { display: grid; gap: --spacing(5); grid-template-columns: repeat(auto-fill, minmax(10.25rem, 1fr)); } @utility grid-wide { display: grid; gap: --spacing(3.5); grid-template-columns: repeat(auto-fill, minmax(16.5rem, 1fr)); } @utility app-backdrop { pointer-events: none; position: fixed; inset: -10%; z-index: -10; background-color: var(--mf-bg); background-image: var(--mf-ambient); animation: ambient-drift 48s ease-in-out infinite alternate; will-change: transform; @media (prefers-reduced-motion: reduce) { animation: none; } } @utility app-vignette { pointer-events: none; position: fixed; inset: 0; z-index: -10; background: radial-gradient( 130% 85% at 50% 118%, color-mix(in oklch, var(--mf-scrim) 80%, transparent), transparent 62% ); } @utility queue-shell { display: flex; justify-content: flex-end; flex-shrink: 0; overflow: hidden; width: 0; visibility: hidden; transition: width var(--mf-motion-slow) ease-in-out, visibility var(--mf-motion-slow); &[data-open] { width: var(--mf-queue-w); visibility: visible; } } @utility app-main { --mf-dock-h: 0px; padding-bottom: calc(var(--mf-nav-h) + var(--mf-safe-b) + var(--mf-dock-h)); transition: padding var(--mf-motion-slow) var(--mf-ease); &[data-has-track] { --mf-dock-h: var(--mf-player-h); } } @utility genre-tile { background: linear-gradient( 140deg, oklch(var(--mf-tile-l) var(--mf-tile-c) var(--tile-hue)), oklch(var(--mf-tile-shade-l) var(--mf-tile-shade-c) var(--tile-hue)) ); } @utility surface-active { background-image: var(--mf-g-active); background-size: 125% 100%; animation: gradient-drift 14s ease-in-out infinite alternate; } @utility surface-active-hover { background-image: var(--mf-g-hover); background-size: 125% 100%; animation: gradient-drift 14s ease-in-out infinite alternate; } @utility hero-surface { background-image: var(--mf-hero-bg); background-size: 125% 100%; animation: gradient-drift 18s ease-in-out infinite alternate; } @utility spotlight-surface { background-size: 125% 100%, 100% 100%; animation: gradient-drift 18s ease-in-out infinite alternate; background-image: var(--mf-spotlight-bg), linear-gradient( to right, transparent 50%, color-mix(in oklch, var(--mf-scrim) 22%, transparent) 61%, transparent 92.5% ); } @utility glow-drift { background-size: 125% 100%; animation: gradient-drift 18s ease-in-out infinite alternate; } @utility field-control { @apply w-full rounded-control bg-surface py-3 text-sm text-fg transition placeholder:text-fg-2 focus:bg-surface-2 focus:outline-none; } @layer base { svg.lucide { stroke-width: 1.5; } } :root { color-scheme: dark; } button:not(:disabled), [role='button'], label:has(input[type='file']), summary { cursor: pointer; } button:disabled { cursor: not-allowed; } @keyframes fade-up { from { opacity: 0; transform: translateY(0.75rem); } to { opacity: 1; transform: none; } } @keyframes fade-in { from { opacity: 0; } to { opacity: 1; } } @keyframes pop-in { from { opacity: 0; transform: scale(0.98) translateY(0.25rem); } to { opacity: 1; transform: none; } } @keyframes slide-in-left { from { transform: translateX(-100%); } to { transform: translateX(0); } } @keyframes equalize { 0%, 100% { transform: scaleY(0.35); } 50% { transform: scaleY(1); } } @keyframes breathe { 0%, 100% { opacity: 0.55; transform: scale(1.2); } 50% { opacity: 0.78; transform: scale(1.32); } } @keyframes ambient-drift { 0% { transform: translate3d(-3%, -2%, 0) scale(1); } 50% { transform: translate3d(2%, 3%, 0) scale(1.06); } 100% { transform: translate3d(3%, -1%, 0) scale(1.02); } } @keyframes gradient-drift { from { background-position: 0% 50%; } to { background-position: 100% 50%; } } @keyframes sheen { from { background-position: 200% 0; } to { background-position: -200% 0; } } .animate-enter { animation: fade-up var(--mf-motion-slow) var(--mf-ease) both; animation-delay: calc(min(var(--i, 0), 10) * 40ms); } .animate-pop { animation: pop-in var(--mf-motion-base) var(--mf-ease) both; } .animate-fade { animation: fade-in var(--mf-motion-base) var(--mf-ease) both; } .glass-panel { background-color: var(--mf-panel-bg); background-image: var(--mf-modal-glow); backdrop-filter: blur(22px); -webkit-backdrop-filter: blur(22px); transition: background var(--mf-motion-slow) var(--mf-ease); } .glass-panel.glass-panel-danger { background-image: var(--mf-modal-glow-danger); } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.001ms !important; animation-iteration-count: 1 !important; animation-delay: 0ms !important; transition-duration: 0.001ms !important; scroll-behavior: auto !important; } } html { scroll-behavior: smooth; scrollbar-width: thin; scrollbar-color: var(--mf-scrollbar) transparent; background-color: var(--mf-bg); -webkit-tap-highlight-color: transparent; overflow-x: hidden; } ::selection { background-color: var(--mf-accent-dim); color: var(--mf-text); } body { position: relative; } body::after { content: ''; position: fixed; inset: 0; z-index: var(--z-grain); pointer-events: none; opacity: 0.035; mix-blend-mode: overlay; background-image: var(--mf-noise); } ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-thumb { background-color: var(--mf-scrollbar); border-radius: 9999px; } ::-webkit-scrollbar-thumb:hover { background-color: var(--mf-scrollbar-hover); } ::-webkit-scrollbar-track { background: transparent; }