:host { --transition-durition: 750ms; } main { background: var(--color-3); color: white; display: flex; flex-direction: column; font-size: var(--fs-sm); height: 100%; opacity: 1 !important; overflow: hidden; position: relative; transition: background-color var(--transition-durition), color var(--transition-durition), opacity var(--transition-durition); } /* Artwork */ .artwork { app-region: drag; flex: 1; position: relative; user-select: none; } .artwork img { height: 100%; left: 0; object-fit: cover; opacity: 0; position: absolute; top: 0; transition-duration: var(--transition-durition); transition-property: opacity; width: 100%; z-index: 0; } .artwork label { background: oklch(0 0 0); border-radius: var(--radius-sm); box-shadow: var(--box-shadow-lg); font-size: var(--fs-2xs); font-weight: 600; left: var(--space-xs); letter-spacing: var(--tracking-wide); line-height: 1; padding: 8px 6px; position: absolute; text-box: trim-both cap alphabetic; text-transform: uppercase; top: var(--space-xs); transition: background-color var(--transition-durition), color var(--transition-durition); z-index: 10; } /* Progress bars */ progress { appearance: none; border: 0; display: block; height: 4px; width: 100%; } progress, progress::-webkit-progress-bar { background-color: color-mix(in oklch, currentColor 40%, transparent); overflow: hidden; border-radius: 4px; } progress[value]::-webkit-progress-value { border-radius: 4px; background-color: color-mix(in oklch, currentColor 90%, transparent); } progress[value]::-moz-progress-bar { border-radius: 4px; background-color: color-mix(in oklch, currentColor 50%, transparent); } /* Controller */ .controller { flex-shrink: 0; padding: 0 var(--space-md) var(--space-md); position: relative; } .controller__background { inset: 0; opacity: 0.5; position: absolute; transition: background-color var(--transition-durition); z-index: 1; } .controller__inner { position: relative; transition-duration: var(--transition-durition); transition-property: color; z-index: 10; } .controller__inner.controller__inner--light-mode { color: rgba(0, 0, 0, 0.6); } /* Button row */ .button-row { display: inline-flex; gap: 1px; button { background: color-mix(in oklch, currentColor 7.5%, transparent); border: 0; color: color-mix(in oklch, currentColor 50%, transparent); cursor: pointer; font-size: var(--fs-base); font-size: calc(var(--fs-base) * 0.9); padding: calc(var(--space-2xs) + 1px) var(--space-sm) var(--space-2xs); &[data-enabled="t"] { background-color: color-mix(in oklch, currentColor 25%, transparent); color: currentColor; } } button:first-child { border-bottom-left-radius: var(--radius-xl); border-top-left-radius: var(--radius-xl); } button:last-child { border-bottom-right-radius: var(--radius-xl); border-top-right-radius: var(--radius-xl); } } /* Now playing */ cite { display: block; font-style: normal; text-shadow: var(--text-shadow-sm); & > span, & > strong { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } } .controller__inner--light-mode cite { text-shadow: none; } /* Progress */ .progress { cursor: pointer; margin: var(--space-xs) 0; padding-top: var(--space-2xs); } .timestamps { display: flex; font-size: var(--fs-2xs); font-weight: 500; justify-content: space-between; margin-top: var(--space-3xs); opacity: 0.4; text-shadow: var(--text-shadow-xs); } .controller__inner--light-mode .timestamps { text-shadow: none; } /* Controls */ .controller menu { align-items: center; display: flex; font-size: var(--fs-lg); gap: var(--space-lg); justify-content: center; margin: var(--space-md) 0; padding: 0; text-align: center; } .controller .menu__loader { line-height: 0; transform-origin: center; } .controller li { cursor: pointer; line-height: 0; list-style: none; transition-duration: var(--transition-durition); transition-property: opacity; } .controller .ph-pause, .controller .ph-play, .controller .menu__loader { font-size: var(--fs-xl); } /* Volume */ .volume { align-items: center; display: flex; font-size: var(--fs-xs); gap: var(--space-2xs); justify-content: space-between; } .volume .progress-bar { cursor: pointer; flex: 1; padding: var(--space-2xs) 0; } .volume i { cursor: pointer; } /* Footer */ footer { align-items: center; display: flex; gap: var(--space-2xs); justify-content: center; margin-top: var(--space-sm); } /* Gradient blur */ .gradient-blur { bottom: 0; height: 150%; left: 0; pointer-events: none; position: absolute; right: 0; z-index: 2; } .gradient-blur > div { position: absolute; inset: 0; } .gradient-blur > div:nth-of-type(1) { backdrop-filter: blur(1px); mask: linear-gradient( to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 4.166666665%, rgba(0, 0, 0, 1) 8.333333332%, rgba(0, 0, 0, 0) 12.499999999% ); z-index: 1; } .gradient-blur > div:nth-of-type(2) { backdrop-filter: blur(2px); mask: linear-gradient( to bottom, rgba(0, 0, 0, 0) 4.166666665%, rgba(0, 0, 0, 1) 8.333333332%, rgba(0, 0, 0, 1) 12.499999999%, rgba(0, 0, 0, 0) 16.666666666% ); z-index: 2; } .gradient-blur > div:nth-of-type(3) { backdrop-filter: blur(4px); mask: linear-gradient( to bottom, rgba(0, 0, 0, 0) 8.333333332%, rgba(0, 0, 0, 1) 12.499999999%, rgba(0, 0, 0, 1) 16.666666666%, rgba(0, 0, 0, 0) 20.833333333% ); z-index: 3; } .gradient-blur > div:nth-of-type(4) { backdrop-filter: blur(8px); mask: linear-gradient( to bottom, rgba(0, 0, 0, 0) 12.499999999%, rgba(0, 0, 0, 1) 16.666666666%, rgba(0, 0, 0, 1) 20.833333333%, rgba(0, 0, 0, 0) 25% ); z-index: 4; } .gradient-blur > div:nth-of-type(5) { backdrop-filter: blur(16px); mask: linear-gradient( to bottom, rgba(0, 0, 0, 0) 16.666666666%, rgba(0, 0, 0, 1) 20.833333333%, rgba(0, 0, 0, 1) 25%, rgba(0, 0, 0, 0) 100% ); z-index: 5; } .gradient-blur > div:nth-of-type(6) { backdrop-filter: blur(32px); mask: linear-gradient( to bottom, rgba(0, 0, 0, 0) 20.833333333%, rgba(0, 0, 0, 1) 25%, rgba(0, 0, 0, 1) 100% ); z-index: 6; } .gradient-blur > div:nth-of-type(7) { backdrop-filter: blur(64px); mask: linear-gradient(to bottom, rgba(0, 0, 0, 0) 25%, rgba(0, 0, 0, 1) 100%); z-index: 7; }