a, button { cursor: pointer; }
a,
button.link {
    color: var(--fg-1);
    text-decoration: none;
}
a.scroll_target {
    display: block;
    height: 0;
}
a:hover,
button.link:hover {
    color: var(--fg-1-focus);
}
a * { pointer-events: none; }
.actions {
    align-items: flex-start;
    display:flex;
    flex-wrap: wrap;
    gap: .5rem;
    margin-bottom: 1rem;
    margin-top: 1rem;
}
.actions a,
.actions button {
    background: var(--bg-2);
    border-radius: .3rem;
    color: var(--fg-1);
    padding: .2em .5em .3em .5em;
    text-align: center;
}
.actions a:focus-visible,
.actions a:hover,
.actions button:focus-visible,
.actions button:hover {
    background: var(--bg-3);
    color: var(--fg-1);
}
.actions svg {
    display: inline-block;
    margin-right: .1em;
    position: relative;
    top: .15em;
}
.actions.primary { font-size: 1.2rem; }
.actions.primary > .more { padding: .2em .35em .3em .35em; }
.actions > .emphasized {
    background: var(--bg-acc);
    color: var(--fg-acc);
}
.actions > .emphasized:hover {
    background: var(--fg-2);
    color: var(--fg-acc);
}
.additional { background-color: var(--fg-1-veil); }
.artist {
    align-items: center;
    display: flex;
    gap: 1rem;
    justify-content: flex-end;
}
.artist:not(:first-child) { margin-top: 1rem; }
.artist > :first-child { font-size: 1.2rem; }
.artist > :not(:first-child) {
    aspect-ratio: 1;
    width: 4rem;
}
body {
    background-color: var(--bg-1);
    color: var(--fg-2);
    margin: 0;
    min-height: 100vh;
}
#browser {
    background: var(--bg-1-overlay);
    bottom: 0;
    left: 0;
    position: fixed;
    right: 0;
    top: 0;
    z-index: 10;
}
#browser:not(.active) { display: none; }
button {
    background: none;
    border: none;
    color: var(--fg-1);
}
button, input { font-size: 1em; }
button,
input[type="number"],
input[type="text"],
.button {
    border-radius: .3rem;
    padding: .25rem .5rem .4rem .5rem;
}
button.link {
    background: none;
    padding: 0;
}
button svg { display: inline-block; }
.cover { display: block; }
.cover img,
.image img {
    border-radius: var(--cover-border-radius);
}
.cover_listing {
    display: block;
    margin-bottom: .5rem;
}
.divider {
    color: var(--bg-3);
    display: flex;
}
.divider > span { border-bottom: 1px solid; }
.divider > span:first-child,
.divider > span:last-child {
    width: .5rem;
}
.divider > span:nth-child(2) {
    opacity: .2;
    flex-grow: 1;
}
.docked_player {
    bottom: 0;
    left: 0;
    position: fixed;
    right: 0;
    z-index: 1;
}
.docked_player:not(.active) {
    display: none;
}
.docked_player .artists {
    font-size: .9rem;
    margin-bottom: .2rem;
}
.docked_player .artists a { color: var(--fg-3); }
.docked_player .artists a:hover { color: var(--fg-3-focus); }
.docked_player button {
    color: var(--fg-1);
    padding: .8em .6em;
}
.docked_player button:focus-visible,
.docked_player button:hover {
    color: var(--fg-2);
}
.docked_player button[disabled] { color: var(--bg-3); }
.docked_player button svg {
    position: relative;
    top: .1em;
}
.docked_player .elements {
    align-items: center;
    background: var(--bg-1-overlay);
    display: flex;
}
.docked_player .number { margin-right: .5rem; }
.docked_player .playback { margin-left: .4rem; }
.docked_player .timeline {
    cursor: pointer;
    height: .8rem;
    margin-bottom: -.3rem;
    position: relative;
}
.docked_player .timeline .base,
.docked_player .timeline .progress {
    bottom: .3rem;
    height: .15rem;
    position: absolute;
}
.docked_player .timeline .base {
    background: var(--bg-2);
    width: 100%;
}
.docked_player .timeline .progress { background: var(--mg-acc); }
.docked_player .timeline:hover .base,
.docked_player .timeline:hover .progress {
    height: .25rem;
}
.docked_player .timeline input {
    height: 100%;
    left: 0;
    margin: 0;
    opacity: 0;
    pointer-events: none;
    position: absolute;
    top: 0;
    width: 100%;
    z-index: 1;
}
.docked_player .title_wrapper {
    display: inline-flex;
    flex-direction: column;
    margin-right: .6rem;
}
.docked_player .track_info {
    align-items: center;
    display: flex;
    margin-left: .2em;
    margin-right: .6em;
    overflow-x: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.docked_player .volume_hint {
    margin-left: .2em;
    margin-right: 1.2em;
}
.docked_player.tall .elements { height: 3.8rem; }
.docked_player.tall .number { margin-right: .8rem; }
.docked_player.tall .timeline .base,
.docked_player.tall .timeline .progress {
    height: .2rem;
}
.docked_player.tall .title_wrapper { margin-right: .9rem; }
.download_entry { display: flex; }
.download_formats {
    display: flex;
    flex-direction: column;
    row-gap: .1rem;
}
.download_group { margin: 1.2rem 0; }
.download_hints {
    display: flex;
    flex-direction: column;
    font-size: .83rem;
    margin: 2rem 0;
    row-gap: .8rem;
}
.download_hints span { color: var(--fg-3); }
.download_options div { margin-bottom: .5rem; }
.download_underline {
    border-bottom: 1px solid var(--bg-2);
    bottom: .1rem;
    flex-grow: 1;
    margin: 0 .2rem;
    position: relative;
}
.embed_code { white-space: pre-wrap; }
.embed_code_wrapper {
    background-color: var(--fg-1-veil);
    border-radius: .3rem;
    margin-top: 1rem;
    padding: 1rem;
}
.embed_split {
    align-items: center;
    column-gap: .3rem;
    display: flex;
    justify-content: space-between;
}
.embed_split svg {
    display: inline-block;
    height: 1rem;
    position: relative;
    top: .2rem;
    width: 1rem;
}
.embed_syntax_special { color: var(--mg); }
.embed_syntax_value { color: var(--fg-3); }
.faircamp_notice {
    bottom: 3rem;
    color: var(--mg);
    left: 0;
    position: absolute;
    right: 0;
    text-align: center;
}
.faircamp_notice a {
    color: var(--fg-3);
    text-decoration: underline;
    text-decoration-color: var(--bg-3);
    text-underline-position: under;
}
.faircamp_notice a:hover {
    color: var(--fg-3-focus);
    text-decoration-color: var(--bg-2);
}
.faircamp_notice svg {
    display: inline-block;
    font-size: 1.2rem;
    position: relative;
    top: .3rem;
}
h1 {
    color: var(--fg-1);
    font-size: 2rem;
    font-weight: 400;
    margin: 0;
}
h2 {
    font-size: 1.17rem;
    font-weight: 400;
    margin: 0;
}
.hcenter_unconstrained { margin: 0 auto; }
.hcenter_wide {
    margin-left: auto;
    margin-right: auto;
    max-width: 33rem;
}
header {
    align-items: center;
    box-sizing: border-box;
    display: flex;
    height: 2.5rem;
    justify-content: space-between;
    padding-left: .3rem;
    padding-right: .8rem;
    position: absolute;
    width: 100%;
    z-index: 1;
}
header > a,
header > button {
    align-items: center;
    column-gap: .3rem;
    display: flex;
    padding: .4rem;
}
header #browse { display: none; }
header #browse { color: var(--fg-3); }
header #browse:hover {
    color: var(--fg-3-focus);
}
header svg {
    position: relative;
    top: .1em;
}
.home_image {
    height: 40vw;
    object-fit: cover;
    width: 100vw;
}
img {
    display: block;
    max-width: 100%;
}
.image {
    display: block;
    height: 100%;
    width: 100%;
}
.image img,
.image svg {
    aspect-ratio: 1;
    width: 100%;
}
.image svg { height: 100%; }
.large_type { font-size: 1.4rem; }
.links {
    display:flex;
    flex-direction: column;
    margin-bottom: 3rem;
    margin-top: 3rem;
    row-gap: 1rem;
}
.links svg {
    display: inline-block;
    margin-right: .1rem;
    position: relative;
    top: .2rem;
}
#logo { flex-shrink: 0; }
#logo svg {
    height: 1.4em;
    width: 1.4em;
}
main { box-sizing: border-box; }
.mobile_hpadding {
    padding-left: 1rem;
    padding-right: 1rem;
}
path.loading_left {
    /* The loading icon is at first the pause icon, but after about 500ms
       (400ms delay + ~100ms until first tweening occurs) the loading
       animation (loading-left-shrink) sets in, then . */
    animation:
        loading-left-shrink 1600ms cubic-bezier(.65, .05, .36, 1) 400ms 1,
        loading-left-shuffle 1600ms cubic-bezier(.65, .05, .36, 1) 2000ms infinite;
    transform-origin: 50% 50%;
}
@keyframes loading-left-shrink {
    0% { transform: translateX(0) scaleY(1); }
    25% { transform: translateX(0) scaleY(1); }
    50% { transform: translateX(40%) scaleY(.35); }
    75% { transform: translateX(40%) scaleY(.35); }
    100% { transform: translateX(0%) scaleY(.35); }
}
@keyframes loading-left-shuffle {
    0% { transform: translateX(0) scaleY(.35); }
    25% {
        opacity: 1;
        transform: translateX(0) scaleY(.35);
    }
    37.25% { opacity: .5; }
    50% {
        opacity: 1;
        transform: translateX(40%) scaleY(.35);
    }
    75% { transform: translateX(40%) scaleY(.35); }
    100% { transform: translateX(0%) scaleY(.35); }
}
path.loading_right {
    animation:
        loading-right-shrink 1600ms cubic-bezier(.65, .05, .36, 1) 400ms 1,
        loading-right-shuffle 1600ms cubic-bezier(.65, .05, .36, 1) 2000ms infinite;
    transform-origin: 50% 50%;
}
@keyframes loading-right-shrink {
    0% { transform: translateX(0) scaleY(1); }
    25% { transform: translateX(0) scaleY(1); }
    50% { transform: translateX(-40%) scaleY(.35); }
    75% { transform: translateX(-40%) scaleY(.35); }
    100% { transform: translateX(0%) scaleY(.35); }
}
@keyframes loading-right-shuffle {
    0% { transform: translateX(0) scaleY(.35); }
    25% { transform: translateX(0) scaleY(.35); }
    50% { transform: translateX(-40%) scaleY(.35); }
    75% {
        opacity: 1;
        transform: translateX(-40%) scaleY(.35);
    }
    87.25% { opacity: .5; }
    100% {
        opacity: 1;
        transform: translateX(0%) scaleY(.35);
    }
}
#overlay {
    align-items: center;
    background-color: var(--bg-1-overlay);
    bottom: 0;
    display: none;
    flex-direction: column;
    justify-content: center;
    left: 0;
    position: fixed;
    right: 0;
    row-gap: .2rem;
    top: 0;
    z-index: 999;
}
#overlay:target { display: flex; }
#overlay img {
    max-height: calc(100vh - 4rem);
    max-width: calc(100vw - 4rem);
    object-fit: scale-down;
}
.page {
    --page-margin-h: 1rem;
    position: relative;
}
.page_center {
    align-items: center;
    display: flex;
    justify-content: center;
    min-height: 100vh;
}
.page_center > *,
.page_grid > *,
.page_split > * {
    margin: 3rem var(--page-margin-h);
    max-width: calc(100vw - var(--page-margin-h) * 2);
}
.page_grid {
    align-items: center;
    display: flex;
    justify-content: center;
    min-height: 100vh;
}
.page_grid > div {
    display: grid;
    gap: 3rem;
    grid-template-columns: 1fr;
}
.page_split {
    align-items: center;
    display: flex;
    justify-content: center;
    min-height: 100vh;
}
pre { margin: 0; }
.release { width: 14rem; }
.release > a { font-size: 1.1rem; }
.release > :first-child {
    aspect-ratio: 1;
    display: block;
    margin-bottom: .5rem;
    width: 100%;
}
.release a svg {
    max-height: 100%;
    max-width: 100%;
}
.release img { width: 100% }
.release_artists { font-size: 1.1rem; }
.release_artists a { color: var(--fg-3); }
.release_artists a:hover { color: var(--fg-3-focus); }
.release_compact {
    align-items: center;
    column-gap: .8rem;
    display: flex;
    margin: 2em 0;
}
.release_compact > a {
    height: 4rem;
    width: 4rem;
}
.release_compact > a svg {
    max-height: 100%;
    max-width: 100%;
}
.release_info {
    align-items: center;
    column-gap: 1rem;
    display: flex;
    font-size: 1.14rem;
    margin-bottom: 3rem;
    margin-top: 3rem;
}
.scroll_hints {
    bottom: 5rem;
    position: fixed;
    right: 2rem;
}
.scroll_hints > :first-child { margin-bottom: .5rem; }
.scroll_hints > a {
    align-items: center;
    color: var(--bg-mg);
    column-gap: .3rem;
    display: flex;
    padding: .5rem;
    transition: opacity 200ms ease;
}
.scroll_hints > a:not(.active) {
    opacity: 0;
    pointer-events: none;
}
.scroll_hints > a:hover { color: var(--fg-mg); }
.scroll_hints svg { font-size: 1.2rem; }
.scroll_hints > a.up svg { transform: rotate(180deg); }
svg {
    display: block;
    fill: currentColor;
}
svg * { pointer-events: none; /* prevent click events on sub elements of an svg */ }
.text {
    line-height: 1.4;
    margin-bottom: 3rem;
    margin-top: 3rem;
}
.text a {
    text-decoration: underline;
    text-underline-offset: .3rem;
}
.text a:focus-visible,
.text a:hover {
    text-decoration: none;
}
.text ol,
.text ul {
    padding-left: 0;
}
.text ol li::marker,
.text ul li::marker {
    color: var(--fg-3);
}
.text ul { list-style: circle; }
.track {
    height: 3.5rem;
    padding-top: .4rem;
    position: relative;
}
.track.compact { height: 1.5rem; }
.track:focus-within .more,
.track:hover .more,
.track.active .more {
    display: flex;
}
.track:focus-within .more_button,
.track.active .more_button {
    height: 0;
    margin-left: 0;
    width: 0;
}
@media (any-hover: none) {
    /* In chromium based browsers, on a pointer-less device, when doing a touch on the
       .more_button element, any focus or click states are preceded by a hover state
       on the .more_button, which displaces/hides the .more_button if we just
       use ".track:hover .more_button" before any focus or click state could occur.
       This then leads to the focus/click happening on the element that "replaces"
       it spatially - e.g. the playback button. Hence we patch this with an exception. */
    .track:hover .more_button:not(:hover) {
        height: 0;
        margin-left: 0;
        width: 0;
    }
}
@media (any-hover: hover) {
    .track:hover .more_button {
        height: 0;
        margin-left: 0;
        width: 0;
    }
}
.track.active .duration,
.track.active .number.outer {
    color: var(--fg-1);
}
.track button {
    color: var(--fg-1);
    padding: 0;
}
.track button:focus-visible,
.track button:hover {
    color: var(--fg-1-focus);
}
.track .more {
    align-items: center;
    column-gap: .4rem;
    display: none;
    margin-left: .4rem;
}
.track .more svg {
    position: relative;
    top: .15rem;
}
.track .more_button {
    margin-left: .4rem;
    overflow: hidden;
}
.track .number { color: var(--fg-3); }
.track .number.inner { padding-right: .3rem; }
.track .number.outer {
    padding-right: .5rem;
    pointer-events: none;
    position: absolute;
    right: calc(100%);
    text-align: right;
}
.track .time { margin-left: .4rem; }
.track_download_option { position: relative; }
.track_header { display: flex; }
.docked_player .number,
.docked_player .time,
.track .time {
    color: var(--fg-3);
    user-select: none;
    white-space: nowrap;
}
.track .title {
    color: var(--fg-1);
    flex-shrink: 1;
    overflow-x: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.track .title:focus-visible,
.track .title:hover {
    color: var(--fg-1-focus);
}
input[type="number"],
input[type="text"] {
    background-color: var(--bg-1-overlay);
    border: 1px solid var(--bg-mg);
    color: var(--fg-2);
}
button:not(.link).disabled,
input[type="number"].disabled,
input[type="text"].disabled,
.button.disabled {
    cursor: default;
    opacity: .2; /* TODO: Make-shift way to indicate disabledness, implement properly */
}
.unlock_scripted { display: none; }
#unlock {
    column-gap: .5rem;
    display: flex;
    margin-bottom: 2rem;
}
.unlock_code { margin-right: .3rem; }
.vcenter_page {
    box-sizing: border-box;
    display: flex;
    flex-direction: column;
    flex-grow: 1;
    justify-content: center;
    min-height: 100vh;
}
.vcenter_page_outer {
    display: flex;
    flex-direction: column;
    justify-content: center;
    min-height: 100vh;
}
.volume {
    align-items: center;
    display: flex;
}
.volume input {
    opacity: 0;
    margin-right: 0;
    transition: opacity 200ms ease, margin-right 200ms ease, width 200ms ease;
    width: 0;
}
.volume button { color: var(--fg-1); }
.volume button path.inactive_range { color: var(--bg-2); }
.volume_hint {
    background: var(--fg-1);
    border-radius: .2rem;
    color: var(--bg-1);
    font-size: .8rem;
    font-weight: 600;
    padding: .3rem .4rem;
}
.volume_hint:not(.active) { display: none; }
.volume:hover input,
.volume input:focus-visible,
.volume button:focus-visible + .slider input {
    opacity: 1;
    margin-right: .6rem;
    width: 6rem;
}
.vpad {
    margin-bottom: 1rem;
    margin-top: 1rem;
}
.waveform {
    cursor: pointer;
    margin-top: .5rem;
    position: relative;
    width: max-content;
}
.waveform .decoration {
    background: var(--bg-2-overlay);
    border-color: var(--fg-3);
    border-left: 1px solid;
    border-radius: .2rem;
    border-right: 1px solid;
    display: none;
    height: 100%;
    left: -1px;
    pointer-events: none;
    position: absolute;
    top: 0;
    width: 100%;
    z-index: -1;
}
.waveform input {
    height: 100%;
    left: 0;
    margin: 0;
    opacity: 0;
    pointer-events: none;
    position: absolute;
    top: 0;
    width: 100%;
    z-index: 1;
}
.waveform input:focus-visible:not(.focus_from_click) + .decoration { display: block; }
.waveform path { fill: none; }
.waveform path.base {
    stroke: var(--fg-2);
    stroke-width: .025px;
}
.waveform path.playback { stroke-width: .06px; }
.waveform path.seek { stroke-width: .02px; }
.waveform:not(.seek) path.seek { opacity: 0; }
.waveform.seek path.base { stroke: var(--mg); }
.unlisted {
    border-radius: .2em;
    border: 1px solid var(--bg-mg);
    color: var(--fg-3);
    font-size: .7em;
    margin-left: .1em;
    padding: .2em;
    position: relative;
    top: -.1em;
}
/* In js-enabled browsers we put .js_enabled on the body on each page load */
.js_enabled audio { display: none; }
.js_enabled .payment,
.js_enabled .unlock_manual { display: none; }
.js_enabled .unlock_scripted { display: unset; }
.js_enabled .payment.active { display: unset; }
@media (max-width: 29.999rem) {
    .track .number.outer { display: none; }
}
@media (min-width: 30rem) {
    .docked_player { font-size: 1.14rem;  }
    header {
        font-size: 1.14rem;
        height: 3.2rem;
    }
    .home_image { height: 12rem; }
    .mobile_hpadding {
        padding-left: 0;
        padding-right: 0;
    }
    .track .number.inner { display: none; }
    .vcenter_page_outer { min-height: calc(100vh - 3.2rem); }
}
@media (min-width: 40rem) {
    .page_grid > div { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 39.999rem) {
    .text ol { padding-left: 1rem; }
    .text ul { padding-left: .7rem; }
}
@media (max-width: 49.999rem) {
    .page_split { flex-direction: column; }
    .page_split > :last-child:not(:first-child) { margin-top: 0; }
    .scroll_hints { display: none; }
}
@media (min-width: 50rem) {
    .page { --page-margin-h: calc(1rem + (100vw - 50rem) * 0.4); } /* Between 50-55rem viewport width, --page-margin-h goes from 1-3rem */
    .page_split > :last-child:not(:first-child) { margin-left: 0; }
}
@media (min-width: 55rem) {
    .page { --page-margin-h: 3rem; }
}
@media (min-width: 60rem) {
    .home_image {
        border-radius: var(--cover-border-radius);
        width: 27rem;
    }
    .page_grid > div { grid-template-columns: 1fr 1fr 1fr; }
}
@media (prefers-reduced-motion: no-preference) {
    html { scroll-behavior: smooth; }
}
