/* style-genre-cards.min.css - homepage dj-card parity for /genre/ pages (extracted from /style.css production rules) */
.artist-list>.dj-card-slot{display:flex;flex-direction:column;height:100%;min-height:100%}
.artist-list .dj-card-slot>.dj-card{flex:1 1 auto;height:100%}
.dj-card{background:var(--card-bg);border:1px solid #1a1a1a;transition:0.3s;min-height:380px;height:100%;display:flex;flex-direction:column;position:relative;overflow:hidden;opacity:0;transform:translateY(20px);width:100%;cursor:pointer}
.card-image .waveform-canvas{position:absolute;left:0;bottom:0;width:100%;height:60px;pointer-events:none;z-index:6}
media (hover:none) and (pointer:coarse){.dj-card .card-image{touch-action:manipulation}
.dj-card .card-image::after{content:'\25B6';position:absolute;left:10px;bottom:10px;z-index:8;width:36px;height:36px;display:flex;align-items:center;justify-content:center;font-size:13px;line-height:1;color:var(--neon);background:rgba(0,0,0,0.62);border:1px solid rgba(0,210,255,0.34);border-radius:50%;box-shadow:0 0 10px rgba(0,210,255,0.12);pointer-events:none}
.dj-card.is-preview-playing .card-image::after{content:'\25A0';font-size:11px}
.dj-card.is-preview-playing{border-color:var(--neon)}
.dj-card .waveform-canvas,.card-image .waveform-canvas{display:block;height:48px;opacity:0;transition:opacity 0.2s ease}
.dj-card.is-preview-playing .waveform-canvas{opacity:1}
.dj-card.unveiled{opacity:1;transform:translateY(0)}
.dj-card:hover{border-color:var(--neon);transform:translateY(-8px)}
.card-image{flex:0 0 auto;width:100%;min-height:0;aspect-ratio:1 / 1;background-color:#0a0a0a;background-size:cover;background-position:center;background-repeat:no-repeat;position:relative;overflow:hidden;border:1px solid #666;box-sizing:border-box;box-shadow:0 0 10px rgba(0,210,255,0.35),0 0 4px rgba(0,210,255,0.25)}
.dj-card:hover .card-image{box-shadow:0 0 14px rgba(0,210,255,0.5),0 0 6px rgba(0,210,255,0.35)}
.card-info,.card-content{flex-shrink:0;padding:25px 20px;text-align:center;width:100%;overflow:hidden}
.card-info h2,.card-content h2{font-family:var(--font-head);font-size:1.1rem;letter-spacing:2px;margin:0 0 8px;overflow-wrap:anywhere;color:#fff}
.dj-card-name-row{display:flex;align-items:center;justify-content:center;gap:10px;margin:0 0 8px;min-width:0;min-height:2.85em;line-height:1.35}
.card-info .dj-card-name,.card-content .dj-card-name,a.dj-card .dj-card-name,a.dj-card:visited .dj-card-name,a.dj-card:hover .dj-card-name,a.dj-card:focus-visible .dj-card-name{font-family:var(--font-head);font-size:1.1rem;letter-spacing:2px;line-height:1.35;margin:0;overflow-wrap:anywhere;color:var(--neon);flex:1 1 auto;min-width:0;text-align:center}
.card-info .status-badge{width:fit-content;max-width:100%}
.dj-card.playing-today .status-badge.status-live{border-color:rgba(255,80,80,0.45);color:#ff6b6b;background:rgba(255,0,0,0.08)}
.dj-card.playing-today .status-badge.status-live .status-dot{background:#ff4444;box-shadow:0 0 8px #ff4444;animation:beacon-blink 1.5s ease-in-out infinite}
.dj-card.playing-today .dj-signal .dj-signal__bar.is-on{background:var(--neon)}
a.dj-card,a.dj-card:visited,a.dj-card:hover,a.dj-card:focus-visible,a.dj-card:active{color:#fff;text-decoration:none}
a.dj-card .tour-info{color:#fff}
.artist-list .dj-card .card-info{flex-shrink:0;min-height:7.25rem;box-sizing:border-box}
.star-toggle{position:absolute;top:5px;right:5px;font-size:40px!important;cursor:pointer;z-index:50;color:#fff;-webkit-text-stroke:1px #ffffff;transition:transform 0.2s,color 0.2s;display:flex;align-items:center;justify-content:center;filter:drop-shadow(0 0 10px rgba(0,0,0,0.8))}
.star-toggle:hover{animation:megaPulse 1.2s ease-in-out infinite;color:#ff0055!important;text-shadow:0 0 30px rgba(255,0,85,1);-webkit-text-stroke:1px #fff}
.star-toggle.starred{color:#ff0055!important;-webkit-text-stroke:2px #000;text-shadow:0 0 20px rgba(255,0,85,0.5)}
.waveform-canvas{transition:opacity 0.3s ease-in-out;opacity:0;pointer-events:none;position:absolute;bottom:0;left:0;width:100%;height:80px;z-index:10}
.dj-card:hover .waveform-canvas{opacity:1}
.star-toggle:hover{animation:heartbeat 1.5s ease-in-out infinite both;color:#ff0055!important;text-shadow:0 0 10px rgba(255,0,85,0.8)}
.waveform-canvas{z-index:5;background:linear-gradient(to top,rgba(0,210,255,0.1),transparent);image-rendering:pixelated}
.dj-card:hover .waveform-canvas{opacity:1!important}
.dj-card:hover .card-tour-overlay{opacity:1}
.dj-card:hover .tour-item{transform:translateY(0)}
.dj-card.on-hiatus{filter:grayscale(100%);opacity:0.6;transition:0.3s ease}
.dj-card.on-hiatus:hover{filter:grayscale(30%);opacity:0.8}
.dj-card .dj-name{display:flex;align-items:center;flex-wrap:wrap}
.fav-card .waveform-canvas{position:absolute;left:0;bottom:0;width:100%;height:60px;z-index:6;pointer-events:none;opacity:0;transition:opacity 0.3s ease-in-out;background:linear-gradient(to top,rgba(0,210,255,0.1),transparent)}
.fav-card:hover .waveform-canvas,.fav-card.is-preview-playing .waveform-canvas{opacity:1}
.fav-card-info{position:absolute;bottom:0;left:0;width:100%;padding:15px;box-sizing:border-box;background:linear-gradient(transparent,#191919);pointer-events:none;z-index:2}
.home-hero .card-image{width:100%;aspect-ratio:1 / 1;background-color:#0a0a0a;background-size:cover;background-position:center;position:relative;overflow:hidden;border:1px solid #666;box-sizing:border-box}
.card-image img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center 20%;display:block;transition:opacity 0.35s ease}
.waveform-canvas{position:absolute;bottom:0;left:0;width:100%;height:60px;pointer-events:none;opacity:0;transition:0.3s;z-index:5}
.dj-card{min-width:0}
media (prefers-reduced-motion:reduce){.dj-card{opacity:1;transform:none;transition:border-color 0.2s}
.card-image-sharp{width:100%;height:100%;min-height:100%;object-fit:cover;position:absolute;inset:0;z-index:2;opacity:1;transition:opacity 0.4s ease-in-out}
.card-image-sharp:not(.is-loaded){opacity:0}
.dj-card-rss:hover,.dj-card-rss:focus-visible{color:#fff;border-color:var(--neon);background:rgba(0,210,255,0.12);outline:none;transform:translateY(-1px)}
.dj-card-rss .rss-icon{display:block;width:22px;height:22px}
body.home-hero .dj-card-slot{position:relative;display:flex;flex-direction:column;height:100%}
body.home-hero .dj-card-rss{position:absolute;left:10px;bottom:12px;z-index:6;padding:5px;background:rgba(0,0,0,0.75)}
body.home-hero .dj-card-rss .rss-icon{width:16px;height:16px}
body.home-hero .artist-list .dj-card,body.home-hero .artist-list .dj-card-slot .dj-card{opacity:1;transform:none}
.dj-card{background:#0a0a0a;border:1px solid #111;cursor:pointer;transition:all 0.4s cubic-bezier(0.16,1,0.3,1);position:relative;overflow:hidden}
.dj-card::before{content:"";position:absolute;inset:0;background:linear-gradient(135deg,rgba(0,210,255,0.07) 0%,rgba(0,210,255,0) 50%,rgba(0,210,255,0.04) 100%);opacity:0;transition:opacity 0.4s ease;z-index:8;pointer-events:none}
.dj-card:hover{border-color:#00d2ff;transform:translateY(-4px);box-shadow:0 0 0 1px rgba(0,210,255,0.3),0 10px 40px rgba(0,210,255,0.15),0 0 80px rgba(0,210,255,0.05)}
.dj-card:hover::before{opacity:1}
.dj-card:hover .card-image-sharp{transform:scale(1.05);filter:brightness(1.1) contrast(1.05);transition:transform 0.6s cubic-bezier(0.16,1,0.3,1),filter 0.6s ease}
.card-image-sharp{transition:transform 0.6s cubic-bezier(0.16,1,0.3,1),filter 0.6s ease}
#djGrid a.dj-card.playing-today,a.dj-card.playing-today,.dj-card.playing-today{position:relative!important;z-index:10;overflow:visible!important;border-style:solid!important;border-width:2px;border-color:rgba(230,55,55,0.78);background-color:rgba(255,0,0,0.04)!important;animation:djTodayOuterPulse 2.1s ease-in-out infinite}
.dj-card-slot:has(.dj-card.playing-today),.artist-list .dj-card-slot:has(.playing-today){overflow:visible}
media (prefers-reduced-motion:reduce){#djGrid a.dj-card.playing-today,a.dj-card.playing-today,.dj-card.playing-today{animation:none;border-width:2px;border-color:rgba(255,60,60,0.85);box-shadow:0 0 0 8px rgba(255,0,0,0.28)}
.dj-card.is-video-preview .card-image>img{opacity:0}
body.calendar-page.tag-genre-page .genre-artists-grid .dj-card{border:none}
body.calendar-page.tag-genre-page .genre-artists-grid .dj-card-slot{display:flex;flex-direction:column;min-height:0}
body.calendar-page.tag-genre-page .genre-artists-grid .dj-card{min-height:300px;opacity:1;transform:none;cursor:pointer}
body.calendar-page.tag-genre-page .genre-artists-grid .dj-card:hover{transform:translateY(-6px)}
body.calendar-page.tag-genre-page .genre-artists-grid .card-image{width:100%;aspect-ratio:1 / 1;background-color:#0a0a0a;background-size:cover;background-position:center;position:relative;overflow:hidden;border:1px solid #666;box-sizing:border-box}
body.calendar-page.tag-genre-page .genre-artists-grid .card-image img{width:100%;height:100%;object-fit:cover;display:block}
body.calendar-page.tag-genre-page .genre-artists-grid .card-info{min-height:4.2rem;padding:8px 10px 10px;box-sizing:border-box}
body.calendar-page.tag-genre-page .genre-artists-grid .dj-card-name-row{min-height:1.5em;margin-bottom:6px;gap:6px}
body.calendar-page.tag-genre-page .genre-artists-grid .dj-card-name{font-size:clamp(0.68rem,1.6vw,0.78rem);letter-spacing:1px;line-height:1.3}
body.calendar-page.tag-genre-page .genre-artists-grid .card-image .waveform-canvas{height:24px}
/* ── genre card grid (homepage #djGrid parity) ── */
.artist-list{display:grid;gap:15px;grid-template-columns:repeat(2,1fr);padding:0}
@media(min-width:900px){.artist-list{grid-template-columns:repeat(4,1fr)}}
@media(min-width:1280px){.artist-list{grid-template-columns:repeat(5,1fr)}}
.artist-list .dj-card{min-height:340px}
/* genre meta line (shows · cities) */
.dj-card-genre-meta{font-family:var(--font-main);font-size:.72rem;font-weight:600;letter-spacing:1px;color:rgba(255,255,255,.35);text-transform:uppercase;padding:0 12px 8px;display:block}
/* placeholder tile when no image */
.dj-card-initial{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-family:var(--font-head);font-weight:900;font-size:4rem;color:#00d2ff;background:linear-gradient(160deg,rgba(0,210,255,.12),rgba(0,0,0,.4)),#0a0e12}
