/* Breakpoints: medium from 40.063em, large from 64.063em. */

/* Base */

*, *::before, *::after {
    box-sizing: border-box;
}

html {
    font-size: 100%;
}

html, body {
    height: 100%;
}

body {
    margin: 0;
    background-color: #999999;
    color: #222222;
    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
    line-height: 1;
}

img {
    max-width: 100%;
    height: auto;
    display: inline-block;
    vertical-align: middle;
}

div, ul, li, h1, h2, h3, h4, p {
    margin: 0;
    padding: 0;
}

a {
    font-family: 'Lustria', serif;
    color: rgba(201, 201, 201, 1);
    text-decoration: none;
    line-height: inherit;
}

a:hover {
    color: rgba(231, 231, 231, 1);
}

p {
    font-size: 1rem;
    line-height: 1.6;
    margin-bottom: 1.25rem;
    text-rendering: optimizeLegibility;
}

h1, h2, h3, h4 {
    font-family: 'Lustria', serif;
    font-weight: normal;
    color: #333333;
    text-rendering: optimizeLegibility;
    margin-top: 0.2rem;
    margin-bottom: 0.5rem;
    line-height: 1.4;
}

h1 { font-size: 2.125rem; }
h2 { font-size: 1.6875rem; }
h3 { font-size: 1.375rem; }
h4 { font-size: 1.125rem; }

@media (min-width: 40.063em) {
    h1 { font-size: 2.75rem; }
    h2 { font-size: 2.3125rem; }
    h3 { font-size: 1.6875rem; }
    h4 { font-size: 1.4375rem; }
}

hr {
    border: solid #dddddd;
    border-width: 1px 0 0;
    clear: both;
    margin: 1.25rem 0 1.1875rem;
    height: 0;
}

ul {
    font-size: 1rem;
    line-height: 1.6;
    margin-bottom: 1.25rem;
    margin-left: 1.1rem;
}

ul li ul {
    margin-left: 1.25rem;
    margin-bottom: 0;
}

small {
    font-size: 60%;
    line-height: inherit;
}

.subheader {
    line-height: 1.4;
    font-weight: normal;
    margin-top: 0.2rem;
    margin-bottom: 0.5rem;
}

.text-right {
    text-align: right;
}

.inline-list {
    margin: 0 0 1.0625rem -1.375rem;
    list-style: none;
    overflow: hidden;
}

.inline-list > li {
    float: left;
    margin-left: 1.375rem;
}

.inline-list > li > * {
    display: block;
}

.icon {
    display: inline-block;
    width: 0.86em;
    height: 1em;
    margin-right: 10px;
    vertical-align: -0.14em;
    background-color: currentColor;
    mask: center / contain no-repeat;
}

.icon-plus {
    mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 14'%3E%3Cpath fill-rule='evenodd' d='M2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zm3 2.5v3H2v2h3v3h2v-3h3v-2H7v-3z'/%3E%3C/svg%3E");
}

.icon-pdf {
    mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 14'%3E%3Cpath fill-rule='evenodd' d='M1 1h6.5L11 4.5V13H1zm1 1v10h8V5H7V2zm2 6.5h1.2c.8 0 1.3.4 1.3 1.1s-.5 1.1-1.3 1.1H4.8V12H4zm.8.7v.8h.4c.3 0 .5-.1.5-.4s-.2-.4-.5-.4z'/%3E%3C/svg%3E");
}

/* Layout */

.row {
    display: flow-root;
    max-width: 62.5rem;
    margin: 0 auto;
    padding: 0 0.9375rem;
}

/* 1 column on small screens, `--medium` from 40.063em and `--large` from 64.063em. */
.grid {
    --cols: 1;
    display: grid;
    grid-template-columns: repeat(var(--cols), minmax(0, 1fr));
    margin: 0 -0.625rem;
    padding: 0;
    list-style: none;
}

.grid > li {
    padding: 0 0.625rem 1.25rem;
}

@media (min-width: 40.063em) {
    .grid { --cols: var(--medium, 1); }
}

@media (min-width: 64.063em) {
    .grid { --cols: var(--large, var(--medium, 1)); }
}

/* Header and footer */

.top-border {
    margin-top: 1px;
    border-top: 12px solid #000;
}

.logo {
    font-family: 'Lustria', serif;
    margin: 10px auto;
    text-align: center;
    font-size: 5rem;
    color: #303030;
}

.logo a {
    color: #303030;
}

.menu {
    margin-bottom: 20px;
}

.menu hr.top {
    border-top: 1px solid #868282;
    margin-top: 0;
}

.menu hr.bottom {
    border: 3px solid #000;
    margin-bottom: 0;
}

.top-bar {
    position: relative;
    height: 45px;
    overflow: hidden;
    line-height: 45px;
    background-color: #999;
}

.top-bar.expanded {
    height: auto;
}

.menu-toggle {
    display: block;
    width: 100%;
    height: 45px;
    margin: 0;
    padding: 0 15px;
    border: 0;
    background: #000;
    color: #fff;
    font: bold 0.8125rem/45px 'Lustria', serif;
    text-align: right;
    text-transform: uppercase;
    cursor: pointer;
}

.top-bar ul {
    margin: 0;
    list-style: none;
    font-size: 16px;
}

.top-bar li > a {
    display: block;
    padding: 12px 0 12px 15px;
    background-color: #999;
    color: #292929;
    font-size: 1.2rem;
}

.top-bar li.active > a {
    background-color: rgba(138, 138, 138, 1);
}

.top-bar li > a:hover {
    background: #272727;
    color: #fff;
}

@media (min-width: 40.063em) {
    .top-bar {
        overflow: visible;
    }

    .menu-toggle {
        display: none;
    }

    .top-bar ul {
        display: table;
        margin: 0 auto;
    }

    .top-bar li {
        float: left;
    }

    .top-bar li > a {
        padding: 0 15px;
        line-height: 45px;
    }

    .top-bar li.active > a {
        color: #fff;
    }
}

.bottom-footer {
    margin: 20px auto;
    text-align: center;
}

.bottom-footer p {
    font-size: 0.8rem;
    font-style: italic;
}

/* Shared */

.author {
    font-size: 0.6rem;
    text-align: right;
}

.read-more {
    margin-left: 10px;
    font-weight: normal;
    font-style: normal;
}

.read-more a {
    font-size: 0.8rem;
}

.red {
    color: red;
}

/* Two-column text: press reviews and the repertory flatpage */

.reviews, #columns {
    column-count: 1;
    column-gap: 1.875rem;
    padding: 0 0.9375rem;
}

/* Two columns once the text box is at least 600px wide. */
@media (min-width: 630px) {
    .reviews, #columns {
        column-count: 2;
        /* Two columns drop the last review's bottom margin, so it goes here. */
        padding-bottom: 30px;
    }
}

.dontsplit {
    break-inside: avoid;
}

.review {
    margin-bottom: 30px;
}

.reviews .review > p:first-of-type {
    margin-bottom: 5px;
}

.reviews .review > p:first-of-type::before {
    content: "« ";
}

.reviews .review > p:first-of-type::after {
    content: " »";
}

.review p.extra-info {
    font-weight: bold;
    font-style: italic;
}

@media (min-width: 64.063em) {
    .review-detail {
        display: grid;
        grid-template-columns: 1fr 1fr;
        column-gap: 1.875rem;
    }
}

.repertory h2 {
    font-size: 1.2rem;
}

.repertory h3 {
    margin-top: 20px;
    font-size: 1.1rem;
    font-weight: bold;
}

.repertory ul {
    list-style-type: none;
}

/* Homepage */

.intro {
    margin-top: 20px;
    margin-bottom: 20px;
    height: 220px;
    padding: 10px;
}

.quotes {
    width: 83.33333%;
    margin: 0 auto;
}

.quotes ul {
    display: grid;
    margin: 0;
    list-style: none;
}

.quotes li {
    grid-area: 1 / 1;
    opacity: 0;
    transition: opacity 400ms ease-in-out;
}

.quotes li.active {
    opacity: 1;
}

.intro .lead, .intro .subheader {
    font-family: 'Lustria', serif;
    color: #FFF;
    opacity: 0.9;
}

.intro .subheader {
    color: #d2d2d2;
}

#front-image {
    position: relative;
}

.concerts {
    margin: 0 -0.9375rem;
    padding: 20px;
    background: #000;
    opacity: 0.5;
}

@media (min-width: 40.063em) {
    .concerts {
        position: absolute;
        top: 0;
        right: 15px;
        width: 25%;
        margin: 0;
        opacity: 0.7;
    }
}

.concerts ul {
    margin-left: 0;
    list-style: none;
}

.concerts h2 {
    font-size: 20px;
    color: #aaa;
}

.concerts h4 {
    font-size: 14px;
    margin-top: 15px;
    margin-bottom: 0;
    color: #aaa;
}

.concerts p {
    font-size: 12px;
    margin-bottom: 0;
    color: #ccc;
}

.concerts small {
    color: #fff;
}

.concerts small.red {
    color: red;
}

.concerts .read-more {
    margin: 0;
}

.concerts .read-more a {
    font-size: 11px;
    color: #fff;
}

/* Flatpages */

.short-bio-div {
    margin-bottom: 20px;
}

@media (min-width: 64.063em) {
    .image-container {
        float: left;
        width: 50%;
        padding-right: 20px;
    }

    .short-bio-div {
        margin-top: -20px;
    }
}

.content em strong {
    font-size: 0.9rem;
    color: #2B2B2B;
}

/* Recordings */

.recordings {
    grid-auto-rows: 1fr;
}

.record {
    display: flex;
    flex-direction: column;
    margin-bottom: 25px;
}

.record h2 {
    font-size: 1.1rem;
    font-weight: bold;
    margin-bottom: 5px;
}

.record .description {
    font-size: 0.9rem;
}

.record .description p {
    font-size: 0.8rem;
    margin-bottom: 5px;
    color: rgb(46, 46, 46);
}

.record .record-label {
    font-size: 0.8rem;
    color: #777;
}

/* Play and pause icons, shared by the track and video buttons. */
.track .play-pause::before, .video-play::before {
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7 4.5v15l12.5-7.5z'/%3E%3C/svg%3E") center / contain no-repeat;
}

.tracks {
    margin-top: auto;
    padding-top: 10px;
    border-top: 1px solid rgba(0, 0, 0, 0.15);
}

.track {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 6px 0;
}

.track .play-pause {
    flex: none;
    display: grid;
    place-items: center;
    width: 36px;
    height: 36px;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: #141414;
    cursor: pointer;
    transition: background-color 150ms, transform 150ms;
}

.track .play-pause:hover {
    background: #333;
    transform: scale(1.06);
}

.track .play-pause:focus-visible {
    outline: 2px solid #141414;
    outline-offset: 2px;
}

.track .play-pause::before {
    content: "";
    width: 16px;
    height: 16px;
    margin-left: 2px;
    background: #fff;
}

.track .play-pause[data-state="playing"]::before {
    margin-left: 0;
    mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6 4.5h4.5v15H6zm7.5 0H18v15h-4.5z'/%3E%3C/svg%3E");
}

.track .play-pause[data-state="loading"]::before {
    margin-left: 0;
    border: 2px solid #fff;
    border-right-color: transparent;
    border-radius: 50%;
    background: none;
    mask: none;
    animation: spin 0.8s linear infinite;
}

.track .play-pause[data-state="error"] {
    background: #777;
    cursor: not-allowed;
    transform: none;
}

@keyframes spin {
    to { transform: rotate(360deg); }
}

.track-body {
    flex: 1;
    min-width: 0;
}

.track-head {
    display: flex;
    align-items: baseline;
    gap: 8px;
    margin-bottom: 6px;
}

.track-title {
    flex: 1;
    margin: 0;
    font-family: 'Lustria', serif;
    font-size: 0.8rem;
    line-height: 1.3;
    color: #222;
}

.track-time {
    flex: none;
    font-size: 0.65rem;
    color: #444;
    font-variant-numeric: tabular-nums;
}

/* Seek bar: a thin line that fills as the track plays, with a dot on hover. */
.track-seek {
    --progress: 0%;
    display: block;
    width: 100%;
    height: 12px;
    margin: 0;
    background: transparent;
    cursor: pointer;
    appearance: none;
}

.track-seek:disabled {
    cursor: default;
}

.track-seek::-webkit-slider-runnable-track {
    height: 3px;
    border-radius: 2px;
    background: linear-gradient(to right, #141414 var(--progress), rgba(0, 0, 0, 0.2) var(--progress));
}

.track-seek::-moz-range-track {
    height: 3px;
    border-radius: 2px;
    background: linear-gradient(to right, #141414 var(--progress), rgba(0, 0, 0, 0.2) var(--progress));
}

.track-seek::-webkit-slider-thumb {
    width: 11px;
    height: 11px;
    margin-top: -4px;
    border: 0;
    border-radius: 50%;
    background: #141414;
    transform: scale(0);
    transition: transform 150ms;
    appearance: none;
}

.track-seek::-moz-range-thumb {
    width: 11px;
    height: 11px;
    border: 0;
    border-radius: 50%;
    background: #141414;
    transform: scale(0);
    transition: transform 150ms;
}

.track-seek:enabled:hover::-webkit-slider-thumb,
.track-seek:focus-visible::-webkit-slider-thumb {
    transform: scale(1);
}

.track-seek:enabled:hover::-moz-range-thumb,
.track-seek:focus-visible::-moz-range-thumb {
    transform: scale(1);
}

.track-seek:focus-visible {
    outline: 2px solid #141414;
    outline-offset: 2px;
}

/* Videos */

.video-list > li {
    margin-bottom: 1rem;
    overflow: hidden;
}

/* Every video starts as a thumbnail with a play button; site.js swaps in the player. */
.video {
    position: relative;
    aspect-ratio: 16 / 9;
    background: #000;
    cursor: pointer;
}

.video > img, .video > iframe, .video > video {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    border: 0;
    object-fit: cover;
}

.video > video {
    object-fit: contain;
}

.video-play {
    position: absolute;
    top: 50%;
    left: 50%;
    display: grid;
    place-items: center;
    width: 72px;
    height: 72px;
    padding: 0;
    border: 3px solid #fff;
    border-radius: 50%;
    background: rgba(0, 0, 0, 0.75);
    cursor: pointer;
    transform: translate(-50%, -50%);
    transition: background-color 150ms, transform 150ms;
}

.video-play::before {
    content: "";
    width: 30px;
    height: 30px;
    margin-left: 4px;
    background: #fff;
    transition: background-color 150ms;
}

.video:hover .video-play {
    background: #fff;
    transform: translate(-50%, -50%) scale(1.1);
}

.video:hover .video-play::before {
    background: #000;
}

.video-play:focus-visible {
    outline: 4px solid #fff;
    outline-offset: 2px;
}

.video-list h4 {
    font-size: 1.1rem;
    font-weight: bold;
    margin-bottom: 5px;
}

.video-list p.description {
    font-size: 0.8rem;
    margin-bottom: 5px;
    color: rgb(46, 46, 46);
}

/* Photos */

/* site.js adds .masonry once the images have loaded; until then it's a plain grid. */
.photo-list.masonry {
    display: block;
    position: relative;
}

.photo-list.masonry > li {
    position: absolute;
    width: calc(100% / var(--cols));
}

.lightbox {
    width: 100%;
    max-width: none;
    height: 100%;
    max-height: none;
    margin: 0;
    padding: 0;
    border: 0;
    background: #333;
    text-align: center;
}

.lightbox img {
    max-height: 100%;
    vertical-align: top;
}

.lightbox button {
    position: absolute;
    padding: 0;
    border: 0;
    background: none;
    color: #ccc;
    cursor: pointer;
}

.lightbox .close {
    top: 10px;
    right: 20px;
    font-size: 30px;
    line-height: 1;
}

.lightbox .prev, .lightbox .next {
    top: 0;
    width: 40px;
    height: 100%;
}

.lightbox .prev { left: 0; }
.lightbox .next { right: 0; }

.lightbox .prev::after, .lightbox .next::after {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    margin: -12px 0 0 -6px;
    border: 12px solid transparent;
}

.lightbox .prev::after {
    margin-left: -18px;
    border-right-color: #ccc;
}

.lightbox .next::after {
    border-left-color: #ccc;
}
