/*
Theme Name: Heartworm
Description: The look of the Cold Cave and American Nightmare sites.
Version: 0.1.0
Requires at least: 6.5
Requires PHP: 8.1
Author: SEO LA
Text Domain: heartworm
*/

/* ---------- Tokens ---------- */
:root {
	--hw-black: #000;
	--hw-white: #fff;
	--hw-grey: #757575; /* brand #555 lightened to the nearest grey with 4.5:1 on black (4.56); #5a5a5a read too dim on phones */
	--hw-muted: #969696;
	--hw-soft: #b8b8b8;
	--hw-line: #32353c;
	--hw-font: "Inter", system-ui, sans-serif;
	--hw-display: "HelveticaNow-Black", "Helvetica Neue", Arial, sans-serif;
	--hw-gutter: clamp(16px, 4vw, 40px);
	--hw-wide: 1120px;
	--hw-content: 650px;
	--hw-logo-w: 86px; /* overridden per site from the logo upload (hw_logo_size) */
	--hw-logo-h: 86px;
	--hw-header-h: calc(var(--hw-logo-h) + 30px);
	--hw-socialbar-h: 56px;
}

/* ---------- Base ---------- */
*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; scroll-padding-top: calc(var(--hw-header-h) + 16px); }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }
body {
	margin: 0;
	background: var(--hw-black);
	color: var(--hw-white);
	font: 400 18px/1.6 var(--hw-font);
	text-underline-offset: 3px;
	-webkit-font-smoothing: antialiased;
	padding-bottom: var(--hw-socialbar-h);
}
img, video, svg { max-width: 100%; height: auto; }
a { color: var(--hw-white); text-decoration: underline; text-decoration-thickness: 1px; }
a:hover { text-decoration-style: dashed; }
:focus-visible { outline: 2px solid var(--hw-white); outline-offset: 3px; }
h1, h2, h3, h4, h5, h6 { font-family: var(--hw-display); font-weight: 900; line-height: 1.15; margin: 0 0 .5em; }
.screen-reader-text {
	border: 0; clip-path: inset(50%); height: 1px; margin: -1px; overflow: hidden;
	padding: 0; position: absolute; width: 1px; word-wrap: normal !important;
}
.screen-reader-text:focus {
	clip-path: none; height: auto; width: auto; margin: 0; z-index: 1000;
	top: 8px; left: 8px; padding: 12px 16px; background: var(--hw-white); color: var(--hw-black);
}
.hw-wrap { width: 100%; max-width: calc(var(--hw-wide) + 2 * var(--hw-gutter)); margin: 0 auto; padding: 0 var(--hw-gutter); }
.hw-label {
	font-family: var(--hw-display); font-size: 22px; line-height: 28px; letter-spacing: 2px;
	color: var(--hw-grey); text-transform: uppercase; margin: 0 0 10px;
}
.hw-icon { width: 1em; height: 1em; fill: currentColor; flex: none; }

/* ---------- Header ---------- */
.hw-header {
	position: sticky; top: 0; z-index: 50;
	background: var(--hw-black);
	transition: box-shadow .3s;
}
.admin-bar .hw-header { top: 32px; }
@media (max-width: 782px) { .admin-bar .hw-header { top: 46px; } }
@media (max-width: 600px) { .admin-bar .hw-header { top: 0; } }
/* Matches the old sites' sticky header: black glow + the 1px line (#32353c) under the bar. */
.hw-header.is-stuck { box-shadow: 0 1px 0 var(--hw-line), 0 0 40px #000, 0 0 20px #000; }
.hw-header__bar {
	display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 40px;
	padding-block: 20px 0; transition: padding .3s;
}
.hw-logo { display: block; line-height: 0; transition: opacity .25s; }
.hw-logo:hover { opacity: .5; }
.hw-logo img { width: var(--hw-logo-w); height: var(--hw-logo-h); max-width: none; object-fit: contain; transition: transform .3s; }
.hw-header.is-stuck .hw-logo img { transform: scale(.9); }
.home .hw-header:not(.is-stuck) .hw-header__bar { padding-bottom: 10px; }
.hw-header.is-stuck .hw-header__bar { padding-block: 3px; }
.home .hw-header.is-stuck .hw-header__bar { padding-bottom: 5px; }
.hw-logo__text { font-family: var(--hw-display); font-size: 28px; line-height: 1; letter-spacing: 2px; text-decoration: none; text-transform: uppercase; }
.hw-nav ul { list-style: none; margin: 0; padding: 0; display: flex; gap: 40px; align-items: center; }
.hw-nav--left ul { justify-content: flex-end; }
.hw-nav a {
	display: inline-block; padding: 4px 0; position: relative;
	font-size: 19px; letter-spacing: 2px; text-decoration: none; text-transform: uppercase;
}
.hw-nav a::after {
	content: ""; position: absolute; left: 0; bottom: 0; height: 2px; width: 0;
	background: currentColor; transition: width .3s;
}
.hw-nav a:hover::after,
.hw-nav .current-menu-item > a::after,
.hw-nav .current_page_item > a::after { width: 100%; }
.hw-nav img { width: 25px; height: auto; display: block; }
.hw-burger {
	display: none; justify-self: end; width: 48px; height: 48px; padding: 12px;
	background: none; border: 0; color: var(--hw-white); cursor: pointer;
}
.hw-burger span { display: block; height: 2px; background: currentColor; }
.hw-burger span + span { margin-top: 10px; }

/* Home: header floats over the hero until the page scrolls. */
.home .hw-header:not(.is-stuck) { background: transparent; }
.home .hw-header { margin-bottom: calc(-1 * var(--hw-header-h) - 10px); }

@media (max-width: 1024px) {
	.hw-nav a { font-size: 16px; }
	.hw-nav ul { gap: 24px; }
	.hw-header__bar { gap: 24px; }
}
@media (max-width: 767px) {
	.hw-header__bar { grid-template-columns: auto 1fr; gap: 0; padding: 15px 0 15px 15px; }
	.home .hw-header:not(.is-stuck) .hw-header__bar { padding-bottom: 15px; }
	.hw-header.is-stuck .hw-header__bar, .home .hw-header.is-stuck .hw-header__bar { padding-block: 8px; }
	.hw-header.is-stuck .hw-logo img { transform-origin: left center; }
	.hw-nav--left, .hw-nav--right { display: none; }
	/* Measured from the old sites: 24px lines, 2px thick, 8px apart, 30px from the edge, 4px above the bar's middle; 52px tap target. */
	.hw-burger { display: flex; flex-direction: column; justify-content: center; width: 52px; height: 52px; padding: 10px 14px; margin-right: 16px; transform: translateY(-4px); }
	.hw-burger span + span { margin-top: 8px; }
}

/* ---------- Off-canvas menu (phones/tablets) ---------- */
.hw-panel {
	position: fixed; inset: 0; z-index: 100;
	background: var(--hw-black) var(--hw-panel-bg, none) center / cover no-repeat;
	display: flex; flex-direction: column; justify-content: center; align-items: flex-end;
	padding: 96px var(--hw-gutter) 40px; gap: 40px;
	opacity: 0; visibility: hidden; transition: opacity .3s, visibility .3s;
	overflow-y: auto;
}
.hw-panel[hidden] { display: none; }
.hw-panel.is-open { opacity: 1; visibility: visible; transition: opacity .3s, visibility 0s; }
.hw-panel__close {
	position: absolute; top: 14px; right: var(--hw-gutter); width: 48px; height: 48px;
	background: none; border: 0; color: var(--hw-white); font-size: 40px; line-height: 1; cursor: pointer;
}
.hw-panel ul { list-style: none; margin: 0; padding: 0; text-align: right; }
.hw-panel li a {
	display: inline-block; padding: 8px 0; font-size: 24px; line-height: 1.5; letter-spacing: 2px;
	text-decoration: none; text-transform: uppercase;
}
.hw-panel .current-menu-item > a, .hw-panel li a:hover { text-decoration: underline; text-underline-offset: 6px; }
.hw-panel .hw-socials { justify-content: flex-end; }
body.hw-panel-open { overflow: hidden; }

/* ---------- Socials ---------- */
.hw-socials { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; justify-content: center; gap: 4px 6px; }
.hw-socials a { display: grid; place-items: center; width: 44px; height: 44px; color: #666; transition: color .2s, transform .2s; }
.hw-socials a:hover { color: var(--hw-white); transform: scale(1.1); }
.hw-socials .hw-icon { width: 30px; height: 30px; }
.hw-socialbar {
	position: fixed; left: 0; right: 0; bottom: 0; z-index: 40;
	background: var(--hw-black); border-top: 1px solid var(--hw-line);
	box-shadow: 0 0 30px #000; padding: 6px 0;
}
@media (max-width: 480px) {
	:root { --hw-socialbar-h: 48px; }
	.hw-socialbar { padding: 2px 0; }
	.hw-socialbar .hw-socials { gap: 0; flex-wrap: nowrap; }
	.hw-socialbar .hw-icon { width: 24px; height: 24px; }
}

/* ---------- Back to top ---------- */
.hw-top {
	position: fixed; right: 20px; bottom: calc(var(--hw-socialbar-h) + 16px); z-index: 45;
	width: 56px; height: 56px; display: grid; place-items: center;
	background: none; border: 0; color: #777; cursor: pointer;
	opacity: 0; visibility: hidden; transition: opacity .3s, visibility .3s, color .2s;
}
.hw-top.is-visible { opacity: 1; visibility: visible; }
.hw-top:hover { color: var(--hw-white); }
.hw-top svg { width: 56px; height: 34px; }
@media (max-width: 480px) { .hw-top { right: 8px; width: 44px; height: 44px; } .hw-top svg { width: 40px; height: 24px; } }

/* ---------- Home hero ---------- */
.hw-hero {
	position: relative; min-height: 75vh; min-height: max(75svh, 480px);
	display: grid; place-items: center; text-align: center; overflow: hidden;
	padding: calc(var(--hw-header-h) + 40px) var(--hw-gutter) 80px;
	isolation: isolate;
}
.hw-hero__media, .hw-hero__media img, .hw-hero__media video {
	position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: -2;
}
/* Vimeo background: a 16:9 iframe scaled to cover the hero (container units = the hero's box). */
.hw-hero__media { container-type: size; }
.hw-hero__vimeo { position: absolute; inset: 0; overflow: hidden; pointer-events: none; }
.hw-hero__vimeo iframe {
	position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); border: 0;
	width: max(100cqw, 177.78cqh); height: max(100cqh, 56.25cqw); opacity: 0; transition: opacity .8s;
}
.hw-hero__vimeo iframe.is-ready { opacity: 1; }
.hw-hero::after {
	content: ""; position: absolute; inset: 0; z-index: -1;
	background: linear-gradient(180deg, #000 7%, rgba(0,0,0,0) 40%, rgba(0,0,0,0) 80%, #000 95%), rgba(0,0,0,.25);
}
.hw-hero__title {
	font-family: var(--hw-display); font-weight: 900;
	font-size: clamp(34px, 6vw, 52px); letter-spacing: 5px; line-height: 1.05; margin: 0 0 .35em;
	text-shadow: 0 0 10px rgba(0,0,0,.2); text-transform: uppercase;
}
.hw-hero__sub { color: var(--hw-soft); margin: 0 0 16px; text-shadow: 0 0 20px rgba(0,0,0,.9); text-transform: uppercase; letter-spacing: 1px; }
/* A tagline on its own (no title, e.g. American Nightmare) keeps its own case. */
/* coldcave.net tagline ("New album out now"): live 23px, normal tracking (round 6). */
.hw-site-cold-cave .hw-hero__sub:not(:first-child) { font-size: 23px; letter-spacing: normal; line-height: 1.5; }
.hw-hero__sub:first-child { text-transform: none; color: var(--hw-white); font-size: clamp(17px, 2vw, 22px); letter-spacing: .5px; }
.hw-hero__links { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; justify-content: center; gap: 8px 28px; }
.hw-hero__links a { display: inline-flex; align-items: center; gap: 8px; min-height: 44px; color: var(--hw-white); font-size: 18px; text-decoration: none; } /* live: white 18px (detail pass 11/04) */
.hw-hero__links a:hover { color: var(--hw-white); text-decoration: underline; text-decoration-style: dashed; }
.hw-hero__links .hw-icon { width: 18px; height: 18px; }
@media (max-width: 767px) {
	/* As on the old sites' phones: content right under the logo, hero at least a square (AN 390px), else as tall as its content (CC). */
	.hw-hero { min-height: calc(100vw + 10px); align-items: start; padding: calc(var(--hw-header-h) + 34px) var(--hw-gutter) 89px; }
	.hw-hero::after { background: linear-gradient(180deg, #000 5%, rgba(0,0,0,0) 30%, rgba(0,0,0,0) 55%, #000 100%), rgba(0,0,0,.35); }
	.hw-hero__links { flex-direction: column; align-items: center; gap: 0; }
	.hw-hero__links a { font-size: 17px; }
}

/* ---------- News grid ---------- */
.hw-news { padding-block: 60px 40px; }
.hw-news__grid {
	list-style: none; margin: 0; padding: 0;
	display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 56px 48px; align-items: start;
}
@media (max-width: 1024px) { .hw-news__grid { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 48px 32px; } }
@media (max-width: 767px) { .hw-news__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 40px 20px; } }
@media (max-width: 480px) { .hw-news__grid { grid-template-columns: 1fr; gap: 48px; } }
.hw-card__img { display: block; border: 1px solid #666; margin-bottom: 18px; overflow: hidden; background: #111; }
.hw-card__img img { display: block; width: 100%; height: auto; filter: grayscale(1) brightness(1.2); transition: filter .4s; }
.hw-card__img:hover img { filter: none; }
.hw-card__title { font-size: 24px; line-height: 30px; text-transform: uppercase; margin: 0 0 10px; overflow-wrap: anywhere; }
.hw-card__title a { text-decoration-thickness: 1px; text-underline-offset: 4px; }
.hw-card__date { font-size: 14px; color: var(--hw-muted); }
@media (max-width: 480px) { .hw-card__title { font-size: 26px; line-height: 1.15; } }
.hw-more { text-align: center; margin-top: 56px; }
.hw-button {
	display: inline-block; padding: 20px 40px; min-height: 44px; /* live: #555, 14px/600, 2.4px tracking, 20px 40px (detail pass 11/04) */
	background: #555; color: var(--hw-white); border: 0; border-radius: 0;
	font: 600 14px/1 var(--hw-font); letter-spacing: 2.4px; text-transform: uppercase; text-decoration: none; cursor: pointer;
}
.hw-button:hover { background: #777; text-decoration: none; }
.hw-button[aria-busy="true"] { opacity: .6; cursor: progress; }

/* ---------- Year archive list ---------- */
.hw-years { text-align: center; padding-block: 40px 80px; color: #565656; }
.hw-years ul { list-style: none; margin: 0; padding: 0; display: inline; }
.hw-years li { display: inline; }
.hw-years li + li::before { content: " | "; color: #565656; }
.hw-years a { text-decoration: underline; } /* live underlines the year links (detail pass 11/04) */
.hw-years a:hover { text-decoration-style: dashed; }
@media (max-width: 600px) {
	.hw-years ul { display: flex; flex-wrap: wrap; justify-content: center; gap: 0 4px; }
	.hw-years li + li::before { content: none; }
	.hw-years a { display: inline-block; min-width: 44px; padding: 11px 8px; line-height: 22px; }
}

/* ---------- Page / post content ---------- */
.hw-main { padding-block: 60px 100px; }
.hw-entry { max-width: var(--hw-content); margin: 0 auto; }
.hw-entry a[href^="mailto:"] { overflow-wrap: anywhere; } /* long addresses (CONTACT) overflowed at 320 px */
.hw-entry__title {
	font-size: clamp(30px, 5vw, 44px); text-transform: uppercase; letter-spacing: 1px;
	border-bottom: 2px solid var(--hw-grey); padding-bottom: 16px; margin-bottom: 16px;
}
.hw-entry__meta { color: var(--hw-muted); font-size: 15px; margin-bottom: 40px; }
.hw-entry__content > * { max-width: 100%; }
/* Content headings: the old site's grey uppercase section labels (past-h2, lyrics-h2, watch-h2…), now one rule. */
.hw-entry__content h2 { font-size: 26px; line-height: 28px; letter-spacing: 1px; color: var(--hw-grey); text-transform: uppercase; margin: 2em 0 .6em; }
.hw-entry__content h3 { font-size: 22px; line-height: 28px; letter-spacing: 2px; color: var(--hw-grey); text-transform: uppercase; margin: 1.6em 0 .4em; }
.hw-entry__content figcaption { font-size: 16px; line-height: 1.4; color: var(--hw-white); }
.hw-entry__content .alignwide { max-width: var(--hw-wide); margin-inline: calc((var(--hw-content) - min(var(--hw-wide), 100vw - 2 * var(--hw-gutter))) / 2); }
.hw-archive-title { text-align: center; text-transform: uppercase; letter-spacing: 2px; font-size: clamp(28px, 5vw, 40px); margin-bottom: 48px; }
.nav-links { display: flex; justify-content: center; gap: 16px; margin-top: 56px; }
.page-numbers.current { font-weight: 700; }

/* ---------- Pages (wider column than news posts; grey titles as on the old site) ---------- */
.page .hw-entry { max-width: 800px; }
.single-post .hw-entry { max-width: 780px; } /* live news column 780px (round 6) */
/* WATCH, as on live: ~1120px column, Wes's posters, faint #222 frame (round 6). */
.hw-page-watch .hw-entry { max-width: 1120px; }
.hw-page-watch .hw-yt__frame { border: 1px solid #222; }
.hw-page-watch .hw-yt__btn img { opacity: 1; filter: grayscale(1); } /* live shows the posters black and white (grayscale(1) on the overlay) */
.single-post .hw-entry__title { color: var(--hw-grey); font-size: clamp(34px, 6vw, 50px); letter-spacing: 2px; } /* live: grey 50px, 2px (detail pass 11/04) */
.page .hw-entry__title { color: var(--hw-grey); font-size: clamp(34px, 6vw, 50px); letter-spacing: 2px; border-bottom: 1px solid var(--hw-grey); padding-bottom: 8px; margin-bottom: 40px; }

/* ---------- Video embeds (YouTube facade) ---------- */
.wp-block-embed { margin: 0 0 12px; }
.hw-yt__frame { position: relative; aspect-ratio: 16 / 9; background: #111; overflow: hidden; }
.hw-yt__frame iframe, .hw-yt__btn { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.hw-yt__btn { padding: 0; background: #000; cursor: pointer; }
.hw-yt__btn img { width: 100%; height: 100%; object-fit: cover; display: block; opacity: .85; transition: opacity .3s; }
.hw-yt__play {
	position: absolute; left: 50%; top: 50%; width: 72px; height: 72px; transform: translate(-50%, -50%);
	border-radius: 50%; border: 2px solid #fff; background: rgba(0,0,0,.35); transition: background .3s;
}
.hw-yt__play::after { content: ""; position: absolute; left: 29px; top: 22px; border-style: solid; border-width: 14px 0 14px 22px; border-color: transparent transparent transparent #fff; }
.hw-yt__btn:hover img, .hw-yt__btn:focus-visible img { opacity: 1; }
.hw-yt__btn:hover .hw-yt__play, .hw-yt__btn:focus-visible .hw-yt__play { background: rgba(0,0,0,.8); }
.hw-entry__content .wp-block-columns { gap: 40px; margin-bottom: 48px; }
.hw-entry__content .wp-block-embed + h2 { margin-top: 0; font-size: 22px; line-height: 28px; letter-spacing: 2px; text-align: center; } /* live centres WATCH titles (detail pass 11/04) */
.hw-entry__content > .wp-block-embed + h2 { margin-bottom: 56px; }
@media (max-width: 781px) { .hw-entry__content .wp-block-columns { gap: 0; margin-bottom: 0; } .hw-entry__content .wp-block-column .wp-block-embed + h2 { margin-bottom: 48px; } }

/* ---------- LISTEN: cover grid + releases ---------- */
.hw-entry__content .hw-covers { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 40px 32px; margin: 0 0 80px; }
.hw-entry__content .hw-covers .wp-block-image { margin: 0; width: auto !important; }
.hw-covers img { display: block; border: 1px solid var(--hw-grey); filter: brightness(.72); transition: filter .3s; }
/* Core's cropped-gallery rules use an ID-level selector (:not(#individual-image)), hence !important. */
.hw-covers figure.wp-block-image { align-self: start; height: auto !important; }
.hw-covers figure.wp-block-image > a { display: block !important; flex: none !important; height: auto !important; }
.hw-covers figure.wp-block-image img { width: 100% !important; height: auto !important; aspect-ratio: 1 / 1; object-fit: cover; flex: none !important; }
.hw-covers a:hover img, .hw-covers a:focus-visible img { filter: none; }
.hw-entry__content .wp-block-gallery.hw-covers figure.wp-block-image { display: block; }
.hw-entry__content .wp-block-gallery.hw-covers figure.wp-block-image::before { content: none; }
.hw-entry__content .wp-block-gallery.hw-covers figure.wp-block-image figcaption {
	position: static; background: none; max-height: none; overflow: visible; padding: 0; margin-top: 10px;
	font-size: 15px; font-weight: 700; line-height: 1.3; text-align: center; color: var(--hw-white); text-shadow: none;
}
@media (max-width: 767px) { .hw-entry__content .hw-covers { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 28px 16px; } .hw-entry__content .wp-block-gallery.hw-covers figure.wp-block-image figcaption { font-size: 13px; } }
.hw-release { text-align: center; padding: 24px 0 72px; }
.hw-release .hw-release__year { font-family: var(--hw-display); font-size: 19px; line-height: 22px; letter-spacing: 2px; color: #777; margin: 28px 0 4px; }
.hw-entry__content .hw-release .hw-release__title { font-size: 22px; line-height: 28px; letter-spacing: 2px; margin: 0 0 8px; }
.hw-release p { margin: 0 0 6px; }
/* Release covers get the same 1px grey edge as the grid and tap-to-load covers; border-box keeps the 350px box (no shift). */
.hw-release .hw-release__cover img { border: 1px solid var(--hw-grey); box-sizing: border-box; }
/* Dim text between links on LISTEN ("|" separators, "Lyrics (soon)"). --hw-grey #757575 = 4.56:1 on black. */
.hw-dim { color: var(--hw-grey); }
.hw-bandcamp { display: flex; justify-content: center; }
.hw-bandcamp > div { width: 100%; display: flex; justify-content: center; }
.hw-bandcamp iframe { border: 0; width: 350px; max-width: 100%; display: block; }
/* Tap-to-load Bandcamp (inc/embeds.php): the cover until pressed, then the real player. */
.hw-bandcamp > .hw-bc { width: 350px; max-width: 100%; margin: 0 auto; display: block; }
.hw-bc__btn { position: relative; display: block; width: 100%; padding: 0; border: 1px solid var(--hw-grey); background: #000; color: var(--hw-white); cursor: pointer; font: inherit; }
.hw-bc__btn img { display: block; width: 100%; height: auto; aspect-ratio: 1 / 1; object-fit: cover; opacity: .85; transition: opacity .3s; }
.hw-bc__btn .hw-yt__play { top: calc(50% - 22px); }
.hw-bc__label { display: block; padding: 12px; font-weight: 700; font-size: 15px; letter-spacing: .5px; }
.hw-bc__btn:hover img, .hw-bc__btn:focus-visible img { opacity: 1; }
.hw-bc__btn:hover .hw-yt__play, .hw-bc__btn:focus-visible .hw-yt__play { background: rgba(0,0,0,.8); }

/* LISTEN cover filter (All / Albums / EPs & Singles / Compilations). Shown only once JS wires it. */
.hw-filter[hidden] { display: none; }
.hw-filter { display: flex; flex-wrap: wrap; justify-content: center; gap: 4px 24px; margin: 0 0 32px; }
.hw-filter button { min-height: 44px; padding: 0 4px; border: 0; background: none; color: var(--hw-muted); font: 400 18px/1 var(--hw-font); text-transform: uppercase; cursor: pointer; }
.hw-filter button:hover, .hw-filter button:focus-visible { color: var(--hw-white); }
.hw-filter button[aria-pressed="true"] { color: var(--hw-white); text-decoration: underline; text-underline-offset: 6px; }
.hw-covers .wp-block-image[hidden] { display: none !important; }
@media (max-width: 767px) { .hw-filter { gap: 0 16px; } .hw-filter button { font-size: 15px; } }

/* ---------- Lyrics pages ---------- */
.hw-lyrics { text-align: center; }
.hw-lyrics .hw-lyrics__cover img { width: min(600px, 100%); height: auto; border: 1px solid #666; }
.hw-lyrics .hw-release__year { font-family: var(--hw-display); font-size: 19px; letter-spacing: 2px; color: #777; margin: 16px 0 4px; }
.hw-entry__content .hw-lyrics h2 { font-size: 22px; line-height: 28px; letter-spacing: 4px; margin: 64px 0 16px; } /* live 4px (detail pass 11/04) */
.hw-lyrics p { margin: 0 0 1.2em; }
.hw-lyrics .wp-block-separator { border: 0; border-top: 1px solid var(--hw-grey); width: min(270px, 60%); margin: 32px auto; }
.hw-songlist { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; align-items: center; }
.hw-songlist a { display: inline-block; padding: 6px 0; min-height: 44px; line-height: 32px; text-decoration: underline; } /* live underlines the track list (detail pass 11/04) */
.hw-songlist a:hover { text-decoration: underline; text-decoration-style: dashed; }

/* ---------- Shows (Heartworm Shows plugin markup; plugin CSS is off, see inc/setup.php) ---------- */
.hws-shows { margin: 0 0 40px; }
.hws-show {
	display: grid; grid-template-columns: minmax(0, 1fr); gap: 0 32px; align-items: start;
	padding: 32px 24px 40px; position: relative; font-size: 18px; line-height: 1.5;
}
.hws-show::after { content: ""; position: absolute; left: 50%; bottom: 0; width: min(270px, 60%); transform: translateX(-50%); border-bottom: 1px solid var(--hw-grey); }
.hws-show--has-poster { grid-template-columns: minmax(0, 1fr) 184px; }
.hws-show__poster { order: 2; display: block; border: 1px solid transparent; transition: border-color .2s; line-height: 0; }
.hws-show__poster:hover { border-color: var(--hw-grey); }
.hws-show__poster img { width: 100%; height: auto; }
.hws-show .hws-show__body > * { margin: 0; }
.hws-show .hws-show__date { font-family: var(--hw-font); font-size: 18px; line-height: 1.5; font-weight: 700; letter-spacing: 0; color: var(--hw-white); text-transform: none; margin: 0 0 4px; }
.hws-show__date a { text-decoration: none; }
.hws-show__artists { color: var(--hw-white); font-style: normal; } /* live: white (detail pass 11/04) */
.hws-show .hws-show__tickets { margin-top: 8px; }
.hws-ticket { font-weight: 700; margin-right: 16px; display: inline-block; min-height: 44px; line-height: 44px; }
.hws-ticket--soldout { color: var(--hw-muted); font-weight: 400; }
.hws-ticket__note { display: block; color: var(--hw-muted); font-size: 15px; line-height: 1.4; font-weight: 400; }
.hws-shows--empty p { color: var(--hw-white); font-style: italic; } /* live: white (detail pass 11/04) */
@media (max-width: 600px) {
	.hws-show { padding: 24px 0 32px; gap: 0 16px; font-size: 16px; }
	/* Phones: poster full width above the show text, as on live (round 6). */
	.hws-show--has-poster { grid-template-columns: minmax(0, 1fr); }
	.hws-show--has-poster .hws-show__poster { order: -1; margin: 0 0 16px; }
	.hws-show .hws-show__date { font-size: 17px; }
}
/* Past list */
.hws-past__years { display: flex; flex-wrap: wrap; justify-content: center; gap: 0 4px; margin: 0 0 24px; padding: 0; list-style: none; }
.hws-past__years a { display: inline-block; min-width: 44px; padding: 11px 8px; line-height: 22px; text-align: center; }
.hws-shows .hws-past__year { font-size: 26px; line-height: 28px; letter-spacing: 1px; color: var(--hw-grey); text-transform: uppercase; margin: 64px 0 16px; }
.hws-past__list { list-style: none; margin: 0; padding: 0; }
.hws-past__list li { margin: 0 0 20px; line-height: 1.5; }
.hws-past__artists { color: var(--hw-soft); font-style: normal; }

/* ---------- Footer ---------- */
.hw-footer { border-top: 1px solid var(--hw-grey); margin-top: 40px; }
.hw-feature { display: grid; grid-template-columns: 289px 1fr; gap: 48px; align-items: center; padding: 80px 0; max-width: 1000px; margin: 0 auto; }
.hw-feature__logo img { width: 289px; height: auto; } /* live 289px (detail pass 11/04) */
.hw-feature__title { font-size: clamp(28px, 4vw, 40px); letter-spacing: 2px; text-transform: uppercase; margin: 0; }
.hw-feature__by { color: var(--hw-white); margin: 0 0 16px; } /* live: white (detail pass 11/04) */
.hw-feature__sig img { display: block; width: 87px; height: auto; margin: 0 0 24px; }
.hw-feature p { margin: 0 0 20px; }
@media (max-width: 767px) {
	.hw-feature { grid-template-columns: 1fr; text-align: center; gap: 24px; padding: 56px 0; }
	.hw-feature__sig img { margin: 0 auto 24px; }
	.hw-feature__logo img { width: 140px; margin: 0 auto; }
}
.hw-footer__main { position: relative; isolation: isolate; text-align: center; padding: 60px 0; min-height: 300px; overflow: hidden; }
.hw-footer__main video, .hw-footer__bgimg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: -2; opacity: .5; pointer-events: none; }
.hw-footer__main::after { content: ""; position: absolute; inset: 0; z-index: -1; background: linear-gradient(180deg, #000 0%, rgba(0,0,0,.4) 50%, #000 100%); }
.hw-footer__booking { font-size: 16px; margin-top: 24px; }
.hw-footer__booking a { overflow-wrap: anywhere; }
.hw-footer__words { display: block; margin: 40px auto 0; max-width: min(597px, 90%); opacity: .8; }
