/* Public calendar: source data and booking decisions remain in the core. */
.programme-view-switch { display:flex; flex-wrap:wrap; gap:var(--space-2); margin:var(--space-6) 0; }
.programme-view-switch [aria-current] { background:var(--gold); color:var(--bg); border-color:var(--gold); }
.concert-calendar-heading { display:flex; align-items:baseline; justify-content:space-between; gap:var(--space-4); flex-wrap:wrap; margin:var(--space-8) 0 var(--space-5); }
.concert-calendar-heading h2 { margin:0; font-size:var(--heading-md); }
.concert-months { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:var(--space-3); }
.concert-months a { display:flex; justify-content:center; align-items:center; min-height:48px; padding:var(--space-3); border:1px solid var(--line); background:var(--panel); color:var(--text); text-align:center; text-decoration:none; overflow-wrap:anywhere; }
.concert-months [aria-current] { background:var(--gold); color:var(--bg); }
.concert-month-picker { display:flex; flex-wrap:wrap; align-items:center; gap:var(--space-3); margin:var(--space-5) 0 var(--space-7); }
.concert-month-picker input { width:auto; max-width:100%; }

.concert-calendar { --calendar-date-bg:#e9e5cf; --calendar-date-ink:#14181c; --calendar-date-height:28px; --calendar-gap:8px; }
.concert-weekdays,.concert-days { display:grid; grid-template-columns:repeat(7,minmax(0,1fr)); gap:var(--calendar-gap); }
.concert-weekdays { text-align:center; color:var(--muted); margin-bottom:var(--space-3); font-size:var(--text-xs); }
/* Children are positioned inside the square and can never enlarge its grid track. */
.concert-day { position:relative; min-width:0; width:100%; aspect-ratio:1; min-height:0; align-self:start; container-type:inline-size; border:1px solid var(--line); background:var(--panel); }
.concert-day.is-today { border-color:var(--gold); box-shadow:inset 0 0 0 1px var(--gold); }
.concert-day-date { position:absolute; inset:0 0 auto; height:var(--calendar-date-height); margin:0; display:flex; gap:4px; align-items:center; justify-content:space-between; padding:4px 6px; background:var(--calendar-date-bg); font:600 var(--text-caption)/1 var(--sans); color:var(--calendar-date-ink); overflow:hidden; }
.is-today .concert-day-date { background:var(--gold); color:var(--bg); }
.concert-day-content { overflow-wrap:anywhere; }
.concert-day > .concert-day-content { position:absolute; inset:var(--calendar-date-height) 0 0; padding:8px; overflow:auto; }
.is-mobile-calendar .concert-day > .concert-day-content { overflow:hidden; }
.concert-day h4 { margin:0 0 5px; font:700 clamp(1.125rem,10cqw,1.5rem)/1.12 var(--display); }
.concert-day h4 a { color:var(--text); text-decoration:none; }
.concert-day h4 a:hover { color:var(--gold); text-decoration:underline; }
.concert-day p { font-size:clamp(.75rem,6.8cqw,.875rem); line-height:1.35; margin:3px 0; }
.concert-day .concert-calendar-event p:has(time) { font-size:clamp(.75rem,6.6cqw,.875rem); line-height:1.3; }
.concert-day .concert-genre { color:var(--gold); margin-bottom:6px; }
.concert-calendar-event + .concert-calendar-event { margin-top:16px; border-top:1px solid var(--line); padding-top:12px; }
.concert-day .concert-bar-text,.concert-empty { color:var(--muted); }
.concert-booking { display:inline-flex; align-items:center; min-height:44px; margin-top:6px; font-size:var(--text-sm); color:var(--gold); }
.concert-day-open { display:none; }
/* One full-tile control; the visible title and times remain readable beneath it. */
.is-mobile-calendar .concert-day-open { display:block; position:absolute; inset:0; z-index:2; width:100%; height:100%; padding:0; border:0; border-radius:0; background:transparent; cursor:pointer; }
.is-mobile-calendar:not(.is-compact-calendar) .concert-day:not(.is-compact-day) > .concert-day-open > span { display:none; }
/* Narrow grids, large text and individual long days use the same full-content dialog. */
:is(.is-compact-calendar .concert-day,.concert-day.is-compact-day) > :is(.concert-day-date,.concert-day-content) { display:none; }
:is(.is-compact-calendar .concert-day,.concert-day.is-compact-day) > .concert-day-open { position:absolute; inset:0; display:grid; grid-template-rows:var(--calendar-date-height) minmax(0,1fr) 22px; width:100%; height:100%; min-width:0; min-height:0; padding:0; border:0; border-radius:0; background:transparent; color:var(--text); font:400 var(--text-sm)/1 var(--sans); cursor:pointer; }
.concert-mini-date { display:flex; justify-content:center; align-items:center; background:var(--calendar-date-bg); color:var(--calendar-date-ink); }
.concert-mini-label { overflow-wrap:anywhere; align-self:center; padding:0 6px; font:700 clamp(1.125rem,10cqw,1.5rem)/1.1 var(--display); display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:3; overflow:hidden; }
.concert-mini-marker { display:flex; justify-content:center; align-items:center; color:var(--gold); font-size:min(.6875rem,12px); }
.is-today .concert-mini-date { background:var(--gold); color:var(--bg); }
.concert-day-open:focus-visible { outline:var(--focus-width) solid var(--gold); outline-offset:2px; }
:root:is([data-bn-palette="light"],[data-bn-palette="dark"]) .concert-calendar { --calendar-date-bg:var(--text); --calendar-date-ink:var(--bg); }
@media(min-width:901px) { .archive-page:has(.concert-calendar) { width:calc(100% - 64px); max-width:1760px; } }
@media(max-width:900px) {
    .concert-calendar { --calendar-gap:4px; }
    .is-compact-calendar .concert-day > .concert-day-open { grid-template-rows:1fr 1fr; font-size:min(.875rem,16px); }
    .is-compact-calendar .concert-mini-label { display:none; }
    .concert-months { gap:6px; }
    .concert-months a { font-size:var(--text-caption); padding:8px 4px; }
}
.concert-day-dialog { width:min(36rem,calc(100% - 28px)); max-height:calc(100dvh - 32px); padding:var(--space-6); border:1px solid var(--line); border-radius:var(--radius-md); background:var(--panel); color:var(--text); overflow:auto; overscroll-behavior:contain; }
.concert-day-dialog::backdrop { background:rgb(0 0 0 / .75); }
.concert-dialog-header { display:flex; flex-wrap:wrap; align-items:start; gap:var(--space-4); justify-content:space-between; margin-bottom:var(--space-5); }
.concert-dialog-header h2 { margin:0; font:600 var(--text-lead)/1.35 var(--sans); max-width:100%; overflow-wrap:anywhere; }
.concert-day-dialog .concert-day-content { padding:0; }
.concert-day-dialog h4 { font:700 var(--heading-sm)/1.2 var(--display); margin:0 0 var(--space-3); overflow-wrap:anywhere; }
.concert-day-dialog h4 a { color:var(--text); }
.concert-day-dialog p { font-size:var(--text-base); line-height:var(--leading-body); margin:var(--space-3) 0; }
.concert-day-dialog .concert-genre { color:var(--gold); }
body:has(.concert-day-dialog[open]) { overflow:hidden; }

.concert-month-tools > summary { cursor:pointer; color:var(--muted); font-size:var(--text-sm); min-height:44px; padding-block:12px; }
@media(min-width:1101px) { .concert-month-tools > summary { display:none; } }
@media(max-width:900px) {
    .archive-page:has(.is-mobile-calendar) { padding-top:24px; }
    .archive-page:has(.is-mobile-calendar) > h1 { margin-bottom:16px; }
    .archive-page:has(.is-mobile-calendar) .archive-toolbar { gap:12px 18px; margin-bottom:16px; }
    .archive-page:has(.is-mobile-calendar) .programme-view-switch { margin-block:16px; }
    .is-mobile-calendar .concert-calendar-heading { gap:12px; margin-top:20px; margin-bottom:16px; }
    .is-mobile-calendar .concert-calendar-heading h2 { font-size:var(--text-lead); }
    .is-mobile-calendar .concert-month-tools .concert-month-picker { margin-top:8px; }
    .concert-calendar.is-mobile-calendar .concert-weekdays { margin-top:8px; }
}

/* A compact editorial header, with navigation and view choice sharing one row. */
.archive-page:has(.concert-calendar) { display:grid; grid-template-columns:minmax(0,1fr) auto; column-gap:24px; align-content:start; padding-block:28px 64px; }
.archive-page:has(.concert-calendar) > :is(.eyebrow,h1,.concert-calendar,.concert-calendar-error,[role="status"],noscript) { grid-column:1 / -1; }
.archive-page:has(.concert-calendar) > .eyebrow { margin:0 0 8px; }
.archive-page:has(.concert-calendar) > h1 { margin:0 0 16px; font-size:clamp(2.25rem,calc(4vw * var(--bn-text-scale, 1)),3.5rem); line-height:1.08; }
.archive-page:has(.concert-calendar) .archive-toolbar { grid-column:1; align-self:center; gap:12px 24px; margin:0; }
.archive-page:has(.concert-calendar) .programme-view-switch { grid-column:2; align-self:center; justify-self:end; margin:0; }
.archive-page:has(.concert-calendar) .concert-calendar-heading { margin:20px 0 12px; }
.archive-page:has(.concert-calendar) .concert-month-picker { margin:12px 0 16px; }
.concert-calendar { overflow-anchor:none; }
.concert-calendar[aria-busy="true"] .concert-days { opacity:.65; }
.concert-calendar-error { color:var(--text); font-size:var(--text-sm); line-height:1.6; margin:16px 0; }
.concert-calendar-error[hidden] { display:none; }
@media(max-width:850px) {
    .archive-page:has(.concert-calendar) { grid-template-columns:minmax(0,1fr); padding-top:20px; }
    .archive-page:has(.concert-calendar) .programme-view-switch { grid-column:1; justify-self:start; margin-top:12px; }
}
:root[data-bn-large-text="true"] .archive-page:has(.concert-calendar) { grid-template-columns:minmax(0,1fr); }
:root[data-bn-large-text="true"] .archive-page:has(.concert-calendar) .programme-view-switch { grid-column:1; justify-self:start; margin-top:12px; }
/* The document already reserves the fixed header via scroll-padding. */
.concert-calendar :is(.concert-months a,.concert-month-picker input,.concert-month-picker button,.concert-month-picker a,.concert-month-tools summary) { scroll-margin-block:0; }

.concert-event-details { display:none; }
.concert-day-dialog .concert-event-details { display:flex; align-items:center; justify-content:flex-end; gap:8px; width:fit-content; max-width:100%; min-height:44px; margin:20px 0 0 auto; color:var(--gold); font-size:var(--text-sm); text-decoration:none; }
.concert-event-details span { overflow-wrap:anywhere; }
.concert-event-details svg { flex:0 0 auto; }
.concert-day-dialog .concert-event-details:hover span { text-decoration:underline; text-underline-offset:.2em; }

/* Bar evenings stay visually quieter than billed concerts. */
.concert-day--bar .concert-mini-label { font:400 min(.875rem,16px)/1.25 var(--sans); color:var(--muted); }
.concert-day--bar h4 { font:400 .875rem/1.3 var(--sans); color:var(--muted); }

/* Neighbouring dates are real public data, visually recessed rather than bright header cards. */
.concert-day--outside { opacity:.45; background:transparent; border-color:color-mix(in srgb,var(--line) 40%,var(--bg)); box-shadow:none; }
.concert-day--outside :is(.concert-day-date,.concert-mini-date) { background:transparent; color:color-mix(in srgb,var(--text) 60%,var(--bg)); }
.concert-day--outside :is(h4,h4 a,p,.concert-genre,.concert-mini-label,.concert-mini-marker,.concert-booking) { color:color-mix(in srgb,var(--text) 60%,var(--bg)); }
.concert-day--outside:has(.concert-day-open:is(:hover,:focus-visible)) { opacity:1; border-color:var(--control-border); background:var(--panel); }
.concert-day--outside :is(h4,.concert-mini-label) { font-family:var(--sans); font-weight:400; }
.concert-day--outside :is(.concert-day-date,.concert-mini-date,strong,time) { font-weight:400; }
.is-mobile-calendar .concert-day > .concert-day-content .concert-admission { display:none; }
.concert-day-dialog .concert-admission { margin-top:var(--space-5); padding-top:var(--space-3); border-top:1px solid var(--line); }
