@font-face{font-family:'League Gothic';src:url('fonts/LeagueGothic-Condensed.ttf') format('truetype');font-weight:400;font-style:normal;font-stretch:75%;font-display:swap}

:root{color-scheme:dark;--bg:#141516;--panel:#1e2023;--text:#ececee;--muted:#a1a6af;--accent:#bac8e0;--line:#35383e}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:24px}body{margin:0;background:var(--bg);color:var(--text);font:14px 'Pretendard',sans-serif}button,input,select,textarea{font:inherit}button{cursor:pointer;border:0;min-height:40px}button:disabled{opacity:.4;cursor:default}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible,summary:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--accent);outline-offset:4px}h1,h2,h3,p{margin:0}[hidden]{display:none!important}.nav{height:86px;max-width:1240px;padding:0 50px;display:flex;align-items:center;justify-content:flex-end;margin:auto}.brand{font-weight:700;font-size:23px;letter-spacing:-1px}.brand span{color:var(--accent)}.nav-actions{display:flex;gap:14px;align-items:center}.primary{background:var(--text);color:#202327;padding:11px 18px;border-radius:5px;font-size:12px;font-weight:500}.primary:hover{background:var(--accent)}.outline{background:transparent;color:var(--text);border:1px solid var(--line);padding:10px 17px;border-radius:5px}.outline:hover{background:#292d33}.text-button{background:none;color:var(--muted);padding:8px 10px;font-size:11px}.text-button:hover{color:var(--accent)}.manage{position:relative}.manage summary{list-style:none;cursor:pointer;font-size:17px;letter-spacing:2px;padding:10px;width:40px;text-align:center}.manage summary::-webkit-details-marker{display:none}.manage-menu{position:absolute;right:0;top:44px;background:var(--panel);border:1px solid var(--line);border-radius:7px;width:182px;padding:6px;z-index:5;box-shadow:0 12px 30px #24293612}.manage-menu button{display:block;text-align:left;width:100%;padding:10px 12px;background:none;color:var(--text);font-size:12px;border-radius:3px}.manage-menu button:hover{background:#292d33}main{max-width:1080px;margin:auto;padding:0 40px}.concert-heading{text-align:center;padding:59px 0 72px}.concert-heading>p:first-child{font-size:13px;color:var(--muted);margin-bottom:15px}.concert-heading h1{font-size:clamp(42px,6vw,74px);font-weight:500;letter-spacing:-3.5px;line-height:1.15;overflow-wrap:anywhere}.concert-meta{display:flex;justify-content:center;align-items:center;gap:15px;margin-top:22px;color:#a1a6af;font-size:12px}.meta-separator{color:#5e646e;margin:0 9px}.concert-meta .meta-separator{margin:0}#owner{font-size:11px;color:var(--muted);margin-top:14px}.timeline-intro{border-top:1px solid var(--line);padding:25px 0 18px;display:flex;justify-content:space-between;align-items:center;gap:20px}.timeline-intro h2{font-size:17px;font-weight:500;letter-spacing:-.3px;margin-bottom:8px}.timeline-intro span,.timeline-intro a{font-size:10px;color:var(--muted)}.timeline-intro a:hover{color:var(--accent)}.sample-note{display:flex;justify-content:space-between;align-items:center;gap:20px;color:var(--muted);font-size:10px;margin:0 0 28px}.sample-note button{white-space:nowrap;min-height:32px;padding-right:0}#timeline{position:relative;padding:24px 0 0}#timeline:before{content:'';position:absolute;top:0;bottom:0;left:50%;width:1px;background:var(--line);transform:translateX(-50%)}.song-section{position:relative;padding:0 0 65px;scroll-margin-top:30px}.song-section.empty{padding-bottom:29px}.song-node{position:relative;display:flex;flex-direction:column;align-items:center;text-align:center;margin-bottom:23px}.song-node .number{display:flex;align-items:center;justify-content:center;position:relative;background:var(--bg);border:1px solid #454b55;border-radius:50%;width:32px;height:32px;font-size:10px;color:var(--muted);margin-bottom:8px}.song-section.is-current .number{border-color:var(--accent);color:var(--accent)}.song-node h3{position:relative;background:var(--bg);padding:5px 16px;font-size:18px;letter-spacing:-.5px;font-weight:500;max-width:80%;overflow-wrap:anywhere}.song-node small{background:var(--bg);padding:5px 12px;color:var(--muted);font-size:9px}/* A horizontal row of camera views for each song. */
.moment-grid{--angle-height:320px;display:flex;flex-wrap:nowrap;align-items:flex-start;gap:16px;position:relative;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;scrollbar-width:none;padding:5px 4px 8px;outline-offset:4px}.moment-grid::-webkit-scrollbar{display:none}.moment-grid:focus-visible{outline:1px solid var(--accent)}.moment-grid>.moment-card{scroll-snap-align:center}.moment-grid>.moment-card:only-child{margin-inline:auto}.angle-rail{background:var(--bg);position:relative}.angle-caption strong{display:block;color:var(--text);font-size:11px;font-weight:500;margin-bottom:4px}

.moment-card{padding:0;background:var(--bg);color:var(--text);text-align:left;position:relative;width:min(100%,calc(var(--angle-height) * var(--media-ratio, .5625)));flex:none;min-width:0;border-radius:5px}
.moment-card img,.moment-card video{width:100%;height:auto;aspect-ratio:var(--media-ratio,.5625);object-fit:cover;display:block;border-radius:5px;background:#08090a}
.moment-card:nth-child(even){margin-top:0}
.video-card.is-focused video{outline:1px solid #bac8e077;outline-offset:3px}
.export-moment{min-width:0}.export-moment img,.export-moment video{max-width:100%;height:auto}
.card-bottom{display:flex;justify-content:space-between;gap:12px;padding:10px 0;color:var(--muted);font-size:10px}
.caption{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.6}
.type-badge{position:absolute;top:10px;right:10px;background:#1e2023ed;font-size:9px;padding:5px 8px;border-radius:3px}
.sample-badge{position:absolute;bottom:45px;left:10px;background:#24293699;font-size:9px}
.song-upload{position:relative;display:flex;justify-content:center;margin-top:12px}.song-upload button{background:var(--bg);color:var(--muted);font-size:10px;padding:5px 13px;min-height:28px}.song-upload button:hover{color:var(--accent)}.song-section.empty .song-node{margin-bottom:0}.song-section.empty .song-node h3{font-size:14px;color:#b3b8c1}.song-section.empty .number{width:26px;height:26px;font-size:9px;margin-bottom:5px}.song-section.empty .song-upload{margin-top:0}.song-section.empty .song-upload button{font-size:9px}.timeline-end{position:relative;display:flex;align-items:center;flex-direction:column;gap:16px;text-align:center;margin-bottom:72px}.end-dot{height:6px;width:6px;border-radius:50%;background:#8b95a5}.timeline-end p{color:var(--muted);font-size:11px;background:var(--bg)}footer{border-top:1px solid var(--line);max-width:1140px;margin:0 auto;padding:22px 30px;display:flex;justify-content:space-between;color:var(--muted);font-size:10px}.export-moment{margin:0}.export-moment figcaption{font-size:11px;color:var(--muted);padding:12px 0;line-height:1.6}
dialog{background:var(--panel);color:var(--text);border:1px solid var(--line);border-radius:12px;padding:28px;width:min(570px,calc(100vw - 30px));max-height:90vh;box-shadow:0 20px 100px #24293626}dialog::backdrop{background:#24293666;backdrop-filter:blur(6px)}.dialog-head{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:12px}.dialog-head h2{font-size:24px;letter-spacing:-.7px}.close{font-size:27px;background:none;color:var(--muted);width:42px;padding:0}.close:hover{color:var(--text)}dialog p{color:var(--muted);line-height:1.6;font-size:13px;margin-bottom:22px}label{display:block;font-size:12px;margin:15px 0}label>span{color:var(--muted);font-size:11px;margin-left:6px}input,textarea,select{display:block;width:100%;margin-top:7px;border:1px solid var(--line);border-radius:5px;background:#191b1e;color:var(--text);padding:12px;min-width:0}textarea{resize:vertical}.form-row{display:grid;grid-template-columns:1fr 165px;gap:15px}.storage-note{font-size:11px!important}.dropzone{border:1px dashed #6f789a;border-radius:8px;padding:26px;text-align:center;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:9px}.dropzone.drag{border-color:var(--accent);background:#292d33}.dropzone>span{margin:0}.dropzone input{max-width:100%;font-size:11px;padding:8px}.upload-symbol{font-size:27px!important;color:var(--accent)!important}.file-name{display:flex;justify-content:space-between;gap:8px;font-size:11px;margin:8px 0;color:var(--muted)}.gallery-item{display:flex;justify-content:space-between;align-items:center;gap:18px;border-top:1px solid var(--line);padding:20px 0}.gallery-item h3{font-size:18px;margin-bottom:6px}.gallery-item p{margin:0;font-size:11px}.gallery-item .current{color:var(--accent);font-size:12px}#gallery-create{margin-top:20px}.setlist-row{display:flex;gap:7px;align-items:center;margin:7px 0}.setlist-row input{flex:1;margin:0}.setlist-row .row-number{width:20px;color:var(--muted);font-size:11px}.setlist-row button{color:var(--accent);background:#292d33;min-width:32px;border-radius:4px}.setlist-row button:disabled{cursor:default}.setlist-row .delete-song{color:#e49ab0}#setlist-form>.primary{float:right}#setlist-rows{margin:20px 0}#lightbox{width:min(1000px,calc(100vw - 25px))}#lightbox-media{display:flex;justify-content:center}#lightbox-media img,#lightbox-media video{width:auto;max-width:100%;max-height:58vh;object-fit:contain;background:transparent;border-radius:5px}#lightbox-song{font-size:12px;margin-bottom:5px}#lightbox-caption{font-size:18px}#moment-form{display:grid;grid-template-columns:1fr 1fr;column-gap:18px}.lightbox-actions{grid-column:1/-1;display:flex;gap:10px;flex-wrap:wrap;align-items:center}.danger{color:#e49ab0;margin-left:auto}#toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%) translateY(80px);opacity:0;background:var(--text);color:#202327;padding:14px 24px;border-radius:8px;z-index:20;transition:.2s;font-size:13px;max-width:90vw;box-shadow:0 6px 30px #0004}#toast.show{transform:translateX(-50%) translateY(0);opacity:1}
@media(max-width:640px){.nav{height:72px;padding:0 20px}.brand{font-size:22px}.primary{font-size:11px;padding:10px 14px}.nav-actions{gap:7px}main{padding:0 20px}.concert-heading{padding:42px 0 48px}.concert-heading h1{font-size:48px;letter-spacing:-2px}.concert-meta{font-size:10px;gap:8px;flex-wrap:wrap}.timeline-intro{padding:22px 0 13px;align-items:start}.timeline-intro h2{font-size:15px}.timeline-intro a{font-size:9px;white-space:nowrap;margin-top:4px}.timeline-intro span{font-size:9px}.sample-note{font-size:9px;gap:12px;line-height:1.6;margin-bottom:23px}.sample-note button{font-size:9px}#timeline{padding-top:15px}.song-section{padding-bottom:40px}.song-node h3{font-size:16px;max-width:95%;padding:4px 10px}.song-node{margin-bottom:18px}.moment-grid{--angle-height:290px;gap:12px}.moment-card:nth-child(even){margin-top:0}.card-bottom{font-size:9px;gap:5px;padding:10px 0}.type-badge{font-size:8px;top:7px;right:7px;padding:4px 6px}.sample-badge{bottom:44px;left:7px;font-size:8px;padding:4px 6px}.song-upload button{font-size:9px}.song-section.empty{padding-bottom:23px}.song-section.empty .song-node h3{font-size:13px}footer{margin:0 20px;padding:20px 0;font-size:9px}.timeline-end{margin-bottom:45px}dialog{padding:22px}.form-row{grid-template-columns:1fr}#moment-form{grid-template-columns:1fr}.lightbox-actions{gap:6px}.lightbox-actions button{font-size:11px;padding:9px 10px}.setlist-row{gap:4px}.setlist-row input{padding:10px 7px}.setlist-row button{min-width:30px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important}}

.nav .outline{font-size:12px;border-color:transparent;color:var(--muted)}.nav .outline:hover{color:var(--text);background:transparent}.nav-actions{gap:10px}@media(max-width:640px){.nav{padding:0 14px}.nav .outline{font-size:11px;padding:10px}.nav-actions{gap:5px}}
.form-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:22px}.step-count{font-size:11px;color:var(--muted);margin-bottom:16px}.review-file{display:grid;grid-template-columns:92px minmax(0,1fr);gap:15px;padding:16px 0;border-bottom:1px solid var(--line)}.review-preview{width:92px;height:110px;object-fit:contain;background:#141516;border-radius:5px}.review-details{min-width:0}.review-name{font-size:12px;overflow-wrap:anywhere}.review-details small{display:block;color:var(--muted);font-size:10px;margin-top:7px}.review-details select{font-size:12px;padding:9px}.review-details label{margin:10px 0 0}#unassigned-status{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:15px 0;margin-bottom:14px;color:var(--muted);font-size:12px}#upload-files{margin-top:16px}@media(max-width:640px){.review-file{grid-template-columns:74px minmax(0,1fr);gap:12px}.review-preview{width:74px;height:96px}}
.review-preview img,.review-preview video{display:block;width:100%;height:100%;object-fit:contain;border-radius:5px}
#reference-status{font-size:11px;margin:12px 0;line-height:1.5}.reference-link{display:block;font-size:10px;margin-top:12px;color:var(--accent)}.reference-link:hover{text-decoration:underline}
.social-frame{width:100%;height:620px;border:0;border-radius:5px;background:white}.social-actions{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--muted);font-size:11px;padding:8px 0}.social-actions a:hover{color:var(--text)}.review-preview>a{display:block;padding:15px 6px;font-size:11px;overflow-wrap:anywhere}.social-card:nth-child(even){margin-top:44px}#post-status{font-size:12px;margin:15px 0}@media(max-width:640px){.social-card{grid-column:1/-1!important;background:var(--bg)}.social-frame{height:580px}.social-card:nth-child(even){margin-top:0}}
.clip-actions{display:flex;justify-content:flex-end;padding:4px 0}.clip-actions button{font-size:10px;min-height:28px}.video-card video{object-fit:cover}.clip-fields{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr;gap:12px}.clip-fields small{grid-column:1/-1;color:var(--muted);font-size:11px}.clip-fields label{margin-bottom:0}.embed-fields{grid-column:1/-1}.embed-fields label{display:flex;align-items:center;gap:10px}.embed-fields input{width:auto;margin:0}.embed-fields p{font-size:11px;margin:8px 0}.video-card video:focus-visible{outline:2px solid var(--accent);outline-offset:3px}

.reference-card{min-width:min(356px,100%)}.reference-player{width:100%;aspect-ratio:16/9;background:#0b0c0e;border-radius:5px;overflow:hidden;display:grid;place-items:center}.reference-player iframe{width:100%;height:100%;border:0}.reference-play{background:transparent;color:var(--text);width:100%;height:100%;font-size:28px}.reference-player p{font-size:12px;padding:20px;color:var(--muted)}.clip-actions a{font-size:10px;color:var(--muted);padding:8px 0}

.angle-caption{display:flex;align-items:center;justify-content:space-between;gap:4px;min-height:26px;padding-top:6px;color:var(--muted);font-size:10px}.angle-navigation{display:flex;align-items:center;gap:3px;white-space:nowrap}.angle-navigation button{font-size:20px;min-height:24px;padding:0 5px}.angle-navigation span{font-size:9px}.angle-caption:empty{display:none}.reference-card .clip-actions{min-height:32px;align-items:center}

@media(max-width:400px){.reference-player{min-height:0}.moment-grid{--angle-height:270px}}

/* Reveal the actual video only after its first playing event, not its global thumbnail. */
.reference-player{position:relative}.reference-player iframe,.reference-player .reference-mount{position:absolute;inset:0;opacity:0;pointer-events:none;transition:opacity .16s ease}.reference-player.has-frame iframe{opacity:1;pointer-events:auto}.reference-play{position:absolute;inset:0;display:grid;place-items:center}.reference-player.has-frame .reference-play{display:none}.reference-player.is-starting .reference-play{font-size:0}.reference-player.is-starting .reference-play::after{content:"";width:18px;height:18px;border:1px solid #ffffff22;border-top-color:#bbb;border-radius:50%;animation:reference-loading .8s linear infinite}@keyframes reference-loading{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.reference-player iframe{transition:none}.reference-player.is-starting .reference-play::after{animation:none}}

.reference-player .reference-poster{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;pointer-events:none;transition:opacity .16s ease}.reference-player.has-frame .reference-poster{opacity:0}.reference-player:has(.reference-poster) .reference-play{background:linear-gradient(transparent,#0002);text-shadow:0 1px 12px #000}.reference-player.is-starting:has(.reference-poster) .reference-play{background:transparent}.clip-actions:has(a){justify-content:space-between;gap:12px}

#soundtrack-control{position:fixed;right:20px;bottom:18px;z-index:10;display:flex;gap:2px;align-items:center;max-width:calc(100vw - 40px);padding:3px;background:#141516b8;-webkit-backdrop-filter:blur(14px) saturate(1.2);backdrop-filter:blur(14px) saturate(1.2);border:1px solid #ffffff17;border-radius:999px;box-shadow:0 8px 28px #0006}#soundtrack-song{font-size:11px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#soundtrack-toggle{background:var(--text);color:var(--bg);border-radius:5px;padding:9px 13px;font-size:12px;white-space:nowrap}#concert-soundtrack{display:none}

.scene-label{background:var(--bg);color:var(--muted);font-size:11px;padding:4px 12px;margin:0;position:relative}

/* Three quiet, equally weighted navigation actions. */
.nav-actions{gap:6px}.nav-menu{position:relative}.nav-button,.manage summary.nav-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;width:auto;min-height:44px;padding:10px 12px;border:0;border-radius:6px;background:transparent;color:var(--muted);font-size:12px;letter-spacing:0;list-style:none;cursor:pointer}.nav-button:hover,.nav-menu[open]>.nav-button{background:#ffffff08;color:var(--text)}.nav-button::-webkit-details-marker{display:none}.nav-button svg{width:17px;height:17px}.nav-menu .manage-menu{top:calc(100% + 6px);z-index:20;width:168px;box-shadow:0 12px 30px #0004}.language-options button[aria-pressed="true"]::after{content:"";float:right;width:16px;height:16px;background:var(--accent);-webkit-mask:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M12%2022C17.5228%2022%2022%2017.5228%2022%2012C22%206.47715%2017.5228%202%2012%202C6.47715%202%202%206.47715%202%2012C2%2017.5228%206.47715%2022%2012%2022ZM17.4571%209.45711L11%2015.9142L6.79289%2011.7071L8.20711%2010.2929L11%2013.0858L16.0429%208.04289L17.4571%209.45711Z%22/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M12%2022C17.5228%2022%2022%2017.5228%2022%2012C22%206.47715%2017.5228%202%2012%202C6.47715%202%202%206.47715%202%2012C2%2017.5228%206.47715%2022%2012%2022ZM17.4571%209.45711L11%2015.9142L6.79289%2011.7071L8.20711%2010.2929L11%2013.0858L16.0429%208.04289L17.4571%209.45711Z%22/%3E%3C/svg%3E") center/contain no-repeat}.contribute-options{display:grid;gap:10px;margin-top:22px}.contribute-options button{padding:16px;text-align:left}.nav-menu summary::marker{content:""}#contribute-dialog,#share-dialog{max-width:380px;width:calc(100% - 32px)}#share-url{width:100%}@media(max-width:400px){.nav-button,.manage summary.nav-button{padding:10px 9px;gap:6px}.nav-actions{gap:2px}}

/* Let the new typeface breathe at both heading sizes. */
.concert-heading h1{letter-spacing:-.035em}.song-node h3{letter-spacing:-.015em}

/* Timeline cards show only the footage; information lives in the details dialog. */
#timeline .video-card{display:block;align-self:start;line-height:0;border:0;cursor:pointer}
#timeline .video-card video{pointer-events:none}
#timeline .video-card.is-focused video{outline:none}
#timeline .moment-card:focus-visible{outline:2px solid var(--accent);outline-offset:4px}
#timeline video::-webkit-media-controls{display:none!important}
.reference-details{position:absolute;inset:0;width:100%;height:100%;background:transparent;z-index:2;border-radius:5px}
.media-placeholder{display:block;width:100%;aspect-ratio:var(--media-ratio,.5625);background:var(--panel);border-radius:5px}
.details-actions{display:flex;align-items:center;justify-content:center;gap:12px;margin-top:18px}
@media(max-width:480px){.details-actions{flex-wrap:wrap}}

/* Captions overlay the playing camera and move with it during a swipe. */
#concert-captions{display:block;position:fixed;z-index:11;left:50%;bottom:calc(80px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);width:100%;max-width:720px;padding:0 16px;text-align:center;pointer-events:none;font-size:clamp(17px,2.2vw,22px);font-weight:500;line-height:1.4;color:#fff;text-shadow:0 1px 3px #000,0 2px 10px #000b}
#caption-line{white-space:pre-line;overflow-wrap:anywhere;padding:3px 7px;background:#0009;box-decoration-break:clone;-webkit-box-decoration-break:clone;border-radius:3px}
#captions-toggle{flex-shrink:0;position:relative;min-width:42px;padding:7px;background:transparent;border:1px solid var(--line);border-radius:5px;color:var(--muted);font-size:12px;font-weight:600;letter-spacing:.02em}
#captions-toggle[aria-pressed="true"]{color:var(--text)}
#captions-toggle[aria-pressed="false"]::after{content:"";position:absolute;left:9px;right:9px;top:50%;height:1px;background:currentColor;transform:rotate(-38deg)}
#soundtrack-control{bottom:calc(18px + env(safe-area-inset-bottom,0px))}
#soundtrack-toggle{flex-shrink:0}
.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
@media(max-width:480px){#soundtrack-control{right:12px;max-width:calc(100vw - 24px)}}


/* Larger camera views keep their native proportions and swipe within the rail. */
main{max-width:1320px}
.moment-grid{--angle-height:min(76svh,760px)}
@media(max-width:640px){main{padding-inline:12px}.moment-grid{--angle-height:min(72svh,680px)}}
#playback-toggle{display:grid;place-items:center;flex-shrink:0;width:42px;height:40px;padding:9px;background:transparent;color:var(--text);border:1px solid var(--line);border-radius:5px}
#playback-toggle:hover{background:#ffffff0c}
#playback-toggle svg{width:18px;height:18px;grid-area:1/1}

#playback-toggle .play-icon{display:none}
#playback-toggle[data-paused="true"] .pause-icon{display:none}
#playback-toggle[data-paused="true"] .play-icon{display:block}

/* Condensed tour-poster lettering, with spaced supporting labels. */
body{font-family:'Pretendard',sans-serif}
.concert-heading h1{font-family:'League Gothic',sans-serif;font-stretch:75%;font-size:clamp(100px,14vw,168px);font-weight:400;line-height:1.08;letter-spacing:.015em;text-transform:uppercase}
.song-node h3{font-family:'League Gothic',sans-serif;font-stretch:75%;font-weight:400;font-size:38px;line-height:1.2;letter-spacing:.025em;text-transform:uppercase;max-width:92%}
.song-node h3{padding:7px 16px}
.concert-meta{font-weight:600;font-size:11px;letter-spacing:.14em;text-transform:uppercase}
.scene-label{font-weight:500;letter-spacing:.055em}
.song-node .number,.song-node small{font-variant-numeric:tabular-nums;letter-spacing:.08em}
html:lang(en) .nav-button{font-weight:600;font-size:11px;letter-spacing:.13em;text-transform:uppercase}
@media(max-width:640px){.song-node h3{font-size:34px}.concert-meta{font-size:10px;letter-spacing:.09em}.concert-heading h1{font-size:clamp(88px,21vw,128px)}}

/* The setlist number doubles as a clockwise playback progress ring. */
.song-node .number.song-progress{--song-progress:0;width:36px;height:36px;border:0;background:conic-gradient(var(--muted) calc(var(--song-progress)*1%),var(--line) 0);isolation:isolate}
.song-node .number.song-progress::before{content:"";position:absolute;inset:2px;border-radius:50%;background:var(--bg);z-index:-1}
.song-node .number.song-progress.is-playing{background:conic-gradient(#e83a10 0,#ff8526 calc(var(--song-progress)*.55%),#ffd88a calc(var(--song-progress)*1%),var(--line) 0);color:var(--text)}
.number-text{position:relative;font-variant-numeric:tabular-nums}

/* Dim inactive scenes, including their line segment. Opacity only: blurring whole
   sections of playing video re-rasterised every frame and flickered on focus changes. */
#timeline .song-section{opacity:.42;transition:opacity .5s ease}
#timeline .song-section.is-focused-section{opacity:1}
#timeline .song-section::before{content:"";position:absolute;top:0;bottom:0;left:50%;width:1px;transform:translateX(-50%);background:var(--line);pointer-events:none}

/* Larger setlist titles and a quiet personal credit at the end. */
.song-node h3{font-size:clamp(44px,6vw,64px)}
.site-footer{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;max-width:1240px;margin:0 auto;padding:36px 20px calc(104px + env(safe-area-inset-bottom,0px));text-align:center;font-size:13px;line-height:1.6;color:var(--muted)}
.site-footer p{margin:0}.footer-made{font-weight:500}.footer-copyright{font-size:12px;letter-spacing:.025em}
.footer-social{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:0 8px;color:var(--muted);font-size:12px;text-decoration:none;border-radius:4px}.footer-social svg{width:20px;height:20px;fill:currentColor}.footer-social:hover{color:var(--text)}.footer-social:focus-visible{outline:2px solid var(--text);outline-offset:3px}
@media(max-width:640px){.song-node h3{font-size:clamp(44px,9vw,56px)}.site-footer{margin-inline:16px}}

/* A shared portrait frame keeps every camera the same size without cropping. */
#timeline .video-card{width:min(100%,calc(var(--angle-height) * .5625));min-width:0;aspect-ratio:9/16;background:#000}
#timeline .video-card video{width:100%;height:100%;aspect-ratio:9/16;object-fit:contain;background:#000}
#timeline .reference-player{height:100%;aspect-ratio:9/16;background:#000}
#timeline .reference-player iframe,#timeline .reference-player .reference-mount{top:50%;bottom:auto;height:31.640625%;transform:translateY(-50%)}
#timeline .reference-player .reference-poster{object-fit:contain;background:#000}

/* Centered dark intro, retaining the tour-poster typography. */
.concert-heading.poster-intro{--poster-aqua:#51bec1;--poster-paper:#f3e3b1;display:flex;min-height:clamp(520px,72svh,760px);padding:64px 28px 84px;margin:0;background:var(--bg);color:var(--text);text-align:center}
.poster-intro .hero-copy{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:44px;min-width:0;width:min(100%,940px);margin:auto}
.hero-type{width:100%}
.hero-tour{display:flex;align-items:center;justify-content:space-between;width:85%;margin:0 auto 28px}
.hero-tour-letter{position:relative;display:block;font-family:'League Gothic',sans-serif;font-stretch:75%;font-size:clamp(130px,13vw,230px);font-weight:400;line-height:.95;color:var(--poster-aqua);-webkit-text-stroke:1.5px var(--poster-paper)}
.hero-tour-letter small{position:absolute;left:50%;top:48%;transform:translate(-50%,-50%);font-family:'Pretendard',sans-serif;font-size:clamp(9px,.8vw,14px);font-weight:700;letter-spacing:.45em;text-transform:uppercase;white-space:nowrap;color:var(--text);text-shadow:0 1px 3px #000,0 0 6px #000;-webkit-text-stroke:0}
.poster-intro h1{font-size:clamp(130px,18vw,310px);line-height:.95;letter-spacing:-.01em;white-space:nowrap;overflow-wrap:normal;color:var(--text);-webkit-text-stroke:0}
.poster-intro .concert-meta{position:static;display:flex;justify-content:center;align-items:center;flex-wrap:wrap;gap:8px 24px;margin:0;color:var(--muted);font-size:14px;line-height:1.6;letter-spacing:.035em;text-transform:none;font-weight:500}
:is(.poster-intro,.intro-stage)+main{padding-top:40px}
@media(max-width:760px){
 .concert-heading.poster-intro{min-height:clamp(480px,66svh,660px);padding:48px 24px 64px}
 .poster-intro .hero-copy{gap:34px}
 .hero-tour{width:86%;margin-bottom:22px}
 .hero-tour-letter{font-size:clamp(124px,28vw,184px)}
 .hero-tour-letter small{font-size:10px;letter-spacing:.35em}
 .poster-intro h1{font-size:clamp(110px,31vw,230px)}
 .poster-intro .concert-meta{font-size:13px;flex-direction:column;gap:4px}
 :is(.poster-intro,.intro-stage)+main{padding-top:24px}
}
@media(max-width:380px){.concert-heading.poster-intro{padding-inline:20px}.hero-tour-letter small{font-size:8px}}

/* A living poster: tour lettering above footage, artist title below. */
.concert-heading.poster-intro{min-height:0;padding:32px 28px 72px}
.poster-intro .hero-copy{width:min(100%,760px);gap:28px}
.hero-tour{position:relative;z-index:2;width:96%;margin:0 auto -22px}
.hero-tour-letter{font-size:clamp(110px,12vw,154px)}
.hero-montage{position:relative;z-index:1;display:block;width:64%;max-width:400px;aspect-ratio:3/4;height:auto;object-fit:cover;margin:0 auto;background:#000;pointer-events:none}
.poster-intro h1{margin-top:16px;font-size:clamp(100px,12vw,154px)}
@media(max-width:760px){
 .concert-heading.poster-intro{padding:28px 24px 60px}
 .poster-intro .hero-copy{gap:24px}
 .hero-tour{width:96%;margin-bottom:-18px}
 .hero-tour-letter{font-size:clamp(98px,25vw,146px)}
 .hero-montage{width:68%}
 .poster-intro h1{font-size:clamp(80px,20vw,126px);margin-top:12px}
}

/* The living poster uses the reference artwork’s red-orange background. */
body:has(.poster-intro)>.nav{max-width:none;background:#ff451b}
body:has(.poster-intro)>.nav .nav-actions{width:100%;max-width:1140px;margin-inline:auto;justify-content:flex-end}
body:has(.poster-intro)>.nav .nav-button{color:#0b1217}
body:has(.poster-intro)>.nav .nav-button:hover,body:has(.poster-intro)>.nav .nav-menu[open]>.nav-button{background:#0000000c}
.concert-heading.poster-intro{background:#ff451b;color:#0b1217}
.poster-intro h1{color:#0b1217;-webkit-text-stroke:1px var(--poster-paper)}
.hero-tour-letter small{color:#0b1217;text-shadow:none}
.poster-intro .concert-meta{color:#0b1217;font-weight:600}

/* Metallic lettering with a light overlap at the top of the footage. */
.hero-letter-defs{position:absolute;pointer-events:none}
.hero-tour{margin-bottom:-24px}
.hero-tour-letter{-webkit-text-stroke:0}
.hero-tour-letter svg{display:block;width:.4em;height:.95em;overflow:visible}
.hero-tour-letter svg text{font-family:'League Gothic',sans-serif;font-stretch:75%;font-size:230px;font-weight:400;fill:url(#hero-letter-fill);stroke:url(#hero-letter-edge);stroke-width:3.2;stroke-linejoin:round;paint-order:stroke fill;-webkit-text-stroke:0}
.hero-tour-letter small{top:46%;font-weight:700;letter-spacing:.42em}
.poster-intro h1{position:relative;z-index:3;margin-top:12px;paint-order:stroke fill;-webkit-text-stroke:2px var(--poster-paper)}
@media(max-width:760px){.hero-tour{margin-bottom:-20px}.poster-intro h1{margin-top:10px}.hero-tour-letter small{letter-spacing:.35em}}

/* The opening poster occupies the first screen, including navigation. */
body:has(.poster-intro)>.nav{position:absolute;inset:0 0 auto;z-index:10}
.concert-heading.poster-intro{position:relative;min-height:100vh;min-height:100svh;padding:90px 24px;align-items:center}
.poster-intro .hero-copy{gap:22px}
.hero-tour-letter{font-size:clamp(60px,min(25vw,16svh),154px)}
.hero-montage{width:min(68%,400px,calc((100svh - 480px)*.75))}
.poster-intro h1{font-size:clamp(60px,min(20vw,14svh),154px)}
.intro-scroll{position:absolute;bottom:18px;left:50%;transform:translateX(-50%);display:flex;align-items:center;justify-content:center;width:48px;min-height:48px;padding:8px;color:#0b1217}
.intro-scroll svg{width:22px;height:22px;animation:intro-chevron-bounce 1.8s ease-in-out infinite}
@keyframes intro-chevron-bounce{0%,45%,75%,100%{transform:translateY(0)}25%{transform:translateY(7px)}60%{transform:translateY(3px)}}
@media(prefers-reduced-motion:reduce){.intro-scroll svg{animation:none}}
.intro-scroll:focus-visible{outline-color:#0b1217}
@media(max-height:560px){.concert-heading.poster-intro{padding-top:78px;padding-bottom:80px}.poster-intro .hero-copy{gap:12px}.hero-montage{width:min(55%,180px)}.hero-tour-letter{font-size:64px}.poster-intro h1{font-size:64px}}

/* Text selection echoes the midpoint of the ASIA lettering gradient. */
::selection{background:#49bcc8;color:#0b1217;text-shadow:none;-webkit-text-stroke:0}

/* One visual language for sound, playback and captions. */

#soundtrack-control>button{display:grid;place-items:center;flex:0 0 36px;width:36px;height:36px;min-width:36px;min-height:36px;padding:9px;border:0;border-radius:50%;background:transparent;color:var(--muted);transition:color .2s ease,background-color .2s ease}
#soundtrack-control>button:hover:not(:disabled){color:var(--text);background:#ffffff14}
#soundtrack-control>button[aria-pressed="true"],#soundtrack-control>#playback-toggle,#soundtrack-control>#playback-forward{color:var(--text)}
#soundtrack-control>button[aria-pressed="true"]{background:transparent}
#soundtrack-control>button svg{width:18px;height:18px;grid-area:1/1}
#soundtrack-toggle[aria-pressed="false"] .sound-waves,#soundtrack-toggle[aria-pressed="true"] .sound-muted,#captions-toggle[aria-pressed="true"] .captions-off,#captions-toggle:not([aria-pressed="true"]) .captions-on{display:none}
#captions-toggle::after{display:none}

/* Let the timeline emerge gradually from the opening poster. */
:is(.poster-intro,.intro-stage)+main #timeline{--timeline-lead-in:clamp(64px,8svh,96px);padding-top:var(--timeline-lead-in)}
#timeline::before{bottom:auto;height:var(--timeline-lead-in,24px)}

#timeline .song-section{padding-bottom:clamp(104px,14svh,160px)}

/* Opening transition: a dark mound with a warm edge cuts the pinned poster away,
   revealing the timeline that already sits beneath it, so there is no empty gap. */
.intro-stage{position:relative;background:var(--bg)}
.intro-transition{display:none;position:absolute;inset:0;overflow:hidden;z-index:4;pointer-events:none}
.intro-transition svg{display:block;width:100%;height:100%}
.intro-transition path{fill:none;stroke-linejoin:round}
.transition-halo{stroke:#ffe7a1;stroke-opacity:.6}
.transition-amber{stroke:#ffbe48;stroke-opacity:.85}
.transition-orange{stroke:#ff8526}
.transition-red{stroke:#e83a10}
.transition-ember{stroke:#7c1906}
.intro-transition .transition-dark{fill:var(--bg)}
@media(prefers-reduced-motion:no-preference){
 .scroll-motion-ready .intro-transition{display:block}
 .scroll-motion-ready .intro-stage{height:150vh;height:150svh}
 .scroll-motion-ready .intro-stage>.poster-intro{position:sticky;top:0;z-index:5}
 /* The timeline starts under the pinned poster: stage height minus one screen. */
 .scroll-motion-ready .intro-stage+main{margin-top:-100vh;margin-top:-100svh;padding-top:0}
 .scroll-motion-ready .intro-stage::after{content:"";position:absolute;left:50%;top:0;height:calc(100% - 100vh);height:calc(100% - 100svh);width:1px;transform:translateX(-50%);background:var(--line)}
 .scroll-motion-ready .intro-stage::before,.scroll-motion-ready #timeline::after,.scroll-motion-ready #timeline .song-section::after{content:"";position:absolute;left:50%;top:var(--line-glow-top,0px);width:1px;height:var(--line-glow-height,0px);transform:translateX(-50%);background:linear-gradient(to top,#fff3d4 0px,#ffbf83 8px,#ff733bc0 55px,#ef511a40 110px,transparent 180px);filter:drop-shadow(0 0 4px #ff9b48) drop-shadow(0 0 12px #ff4d1b);pointer-events:none;z-index:0}
 .scroll-motion-ready #timeline .song-node,.scroll-motion-ready #timeline .angle-rail{z-index:1}
}

/* One icon family: Remix Icon. Fill by default; Share and the intro chevron use Line. */
.nav-button svg,.intro-scroll svg,#soundtrack-control svg,.close svg,#share svg,.footer-social svg,.footer-heart,[data-up] svg,[data-down] svg{fill:currentColor;stroke:none}
[data-up] svg,[data-down] svg{width:14px;height:14px;display:block}
.close{display:grid;place-items:center}
.close svg{width:20px;height:20px}
@media(max-width:480px){#soundtrack-control{right:10px;bottom:calc(10px + env(safe-area-inset-bottom,0px))}}
/* Share stays reachable at top right once the opening poster has been covered. */
@keyframes share-pin-in{from{opacity:0;transform:translateY(-6px)}}
.intro-passed #share{position:fixed;top:calc(12px + env(safe-area-inset-top,0px));right:12px;z-index:11;width:44px;height:44px;min-height:44px;padding:0;border:1px solid #ffffff17;border-radius:50%;background:#141516b8;-webkit-backdrop-filter:blur(14px) saturate(1.2);backdrop-filter:blur(14px) saturate(1.2);box-shadow:0 8px 28px #0006;color:var(--text);animation:share-pin-in .25s ease}
.intro-passed #share:hover{background:#26282bcc}
.intro-passed #share span{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
@media(prefers-reduced-motion:reduce){.intro-passed #share{animation:none}}
/* The song node masks the centre line between the progress ring, the title and the cameras. */
#timeline .song-node{background:var(--bg);margin-bottom:0;padding-bottom:8px}
#timeline .song-section.empty .song-node{padding-bottom:0}
/* Even rhythm: number → title and title → cameras share one optical gap (~36px);
   a scene subtitle sits close under its title, then the same gap to the cameras. */
#timeline .song-node .number{margin-bottom:9px}
#timeline .song-section.song-scene .song-node{padding-bottom:37px}
#timeline .song-section.song-scene .song-node h3+.scene-label{margin-top:-10px}
@media(max-width:640px){#timeline .song-section.song-scene .song-node{padding-bottom:31px}#timeline .song-section.song-scene .song-node h3+.scene-label{margin-top:0}}

/* Direction and external-link marks drawn with the same icon family instead of text arrows. */
#previous::before,#next::after,.external-link::after{content:"";display:inline-block;width:1em;height:1em;vertical-align:-.15em;background:currentColor;-webkit-mask:var(--icon) center/contain no-repeat;mask:var(--icon) center/contain no-repeat}
#previous::before{--icon:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M12%2013V20L4%2012L12%204V11H20V13H12Z%22/%3E%3C/svg%3E");margin-right:.4em}
#next::after{--icon:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M12%2013H4V11H12V4L20%2012L12%2020V13Z%22/%3E%3C/svg%3E");margin-left:.4em}
.external-link::after{--icon:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M13.0508%2012.361L7.39395%2018.0179L5.97974%2016.6037L11.6366%2010.9468L6.68684%205.99707H18.0006V17.3108L13.0508%2012.361Z%22/%3E%3C/svg%3E");width:.85em;height:.85em;margin-left:.3em}

/* Song titles rise out of a mask and brighten left to right, like the reference headline.
   Scene subtitles follow the focus line, fading in softly like the reference chart notes. */
@media(prefers-reduced-motion:no-preference){
 .scroll-motion-ready #timeline .song-node h3{overflow:hidden}
 .scroll-motion-ready #timeline .title-line{display:inline-block;-webkit-mask-image:linear-gradient(90deg,#000 0 33%,#0006 50%,#0002 100%);mask-image:linear-gradient(90deg,#000 0 33%,#0006 50%,#0002 100%);-webkit-mask-size:300% 100%;mask-size:300% 100%;transform:translateY(calc((1 - var(--rise)) * 150%));-webkit-mask-position:calc((1 - var(--shine)) * 100%) 0;mask-position:calc((1 - var(--shine)) * 100%) 0}
 /* Scroll-linked: --reveal runs 0→1 as the ring travels from the bottom edge to the focus line.
    The ring appears first, the title rises, then brightens, finishing exactly as the ring lights up. */
 .scroll-motion-ready #timeline .song-node{--ring:clamp(0,var(--reveal,1) / .3,1);--rise:clamp(0,(var(--reveal,1) - .2) / .5,1);--shine:clamp(0,(var(--reveal,1) - .4) / .6,1)}
 .scroll-motion-ready #timeline .song-node .number{opacity:var(--ring);transform:scale(calc(.6 + .4 * var(--ring)))}
 .scroll-motion-ready #timeline .scene-label{opacity:0;filter:blur(3px);transform:translateY(6px);transition:opacity .45s ease,filter .45s ease,transform .45s ease}
 .scroll-motion-ready #timeline .is-focused-section .scene-label{opacity:1;filter:none;transform:none;transition-duration:.7s;transition-delay:.15s}
}

/* Footer: a heart for "Love", and logo-only brand links. */
.footer-heart{display:inline-block;width:1em;height:1em;vertical-align:-.14em;margin:0 .1em;color:#ff5a36}
.footer-socials{display:flex;gap:4px;justify-content:center}
.footer-socials .footer-social{width:44px;height:44px;padding:0}

/* Camera rails: neighbours are never cropped by the rail. Wide screens fit whole cameras
   (app.js sizeRailEdges); narrower ones run the rail to the screen edges. Cameras other than
   the one in focus are dimmed rather than cut. */
#timeline .moment-grid{--rail-gap:16px;--peek:72px;gap:var(--rail-gap)}
#timeline .moment-grid>.moment-card{width:min(calc(var(--angle-height) * .5625),calc(100% - 2 * (var(--rail-gap) + var(--peek))))}
@media(max-width:640px){#timeline .moment-grid{--rail-gap:10px;--peek:22px}}

/* The setlist ends the way it began: the centre line warms and fades into a glowing point. */
#timeline .song-section:last-child::before{background:linear-gradient(var(--line) 55%,#ff733b99 88%,transparent)}
.site-footer{position:relative;border-top:0}

/* Tapped cameras grow in place into a full-screen view (see media-details.js). The floating
   controls and Share stay on top; only the source credit is added. */
html.video-expanded{overflow:hidden}
/* No box of its own: a fixed wrapper would trap its children in one stacking context, but the
   backdrop must sit below the expanded card and the buttons above it. */
#video-stage{display:contents}
#video-stage[hidden]{display:none}
.stage-backdrop{position:fixed;inset:0;z-index:8;background:#000;opacity:0;transition:opacity .3s ease}
#video-stage.is-open .stage-backdrop{opacity:1}
/* Section dimming would create a stacking context and trap the card under the backdrop. */
#timeline .song-section.has-expanded-card{opacity:1;transition:none}
#timeline .song-section.has-expanded-card .angle-rail{z-index:9;background:transparent}
#timeline .song-section.has-expanded-card .moment-card:not(.is-expanded){visibility:hidden}
/* The placeholder holds the card's snap point, so the mandatory snap does not jump the rail. */
.stage-placeholder{flex:none;border-radius:5px;background:#000;scroll-snap-align:center}
#timeline .moment-card.is-expanded{position:fixed;z-index:9;margin:0;max-width:none;aspect-ratio:auto;background:#000;overflow:hidden}
#timeline .moment-card.is-expanded video{width:100%;height:100%;aspect-ratio:auto;object-fit:contain;border-radius:0}
#timeline .moment-card.is-expanded .reference-player{width:100%;height:100%;aspect-ratio:auto}
#timeline .moment-card.is-expanded .reference-player iframe,#timeline .moment-card.is-expanded .reference-player .reference-mount{height:min(100%,56.25vw)}
.stage-button,.stage-credit{position:fixed;z-index:10;background:#141516b8;-webkit-backdrop-filter:blur(14px) saturate(1.2);backdrop-filter:blur(14px) saturate(1.2);border:1px solid #ffffff17;box-shadow:0 8px 28px #0006;color:var(--text);opacity:0;transition:opacity .25s ease .1s,background-color .2s ease}
#video-stage.is-open .stage-button,#video-stage.is-open .stage-credit{opacity:1}
.stage-button{display:grid;place-items:center;width:44px;height:44px;padding:0;border-radius:50%}
.stage-button:hover,.stage-credit:hover{background:#26282bcc}
.stage-button[hidden],.stage-credit[hidden]{display:none}
.stage-button svg{width:20px;height:20px;fill:currentColor}
.stage-close{top:calc(12px + env(safe-area-inset-top,0px));right:12px}
/* While a video is expanded, Share steps aside for Close.
   Viewport captions already sit above the bottom controls and source credit. */
html.video-expanded #share{display:none}
/* Source credit: platform mark + handle in a capsule that mirrors the controls on the right. */
.stage-credit{left:20px;bottom:calc(18px + env(safe-area-inset-bottom,0px));display:inline-flex;align-items:center;gap:8px;max-width:calc(100vw - 200px);height:44px;padding:0 14px 0 13px;border-radius:999px;font-size:13px;font-weight:500;letter-spacing:.01em;text-decoration:none}
.stage-credit svg{flex:none;width:16px;height:16px;fill:currentColor}
.stage-credit>svg{width:13px;height:13px;opacity:.55;margin-left:-2px}
.stage-platform:empty{display:none}
.stage-platform{display:inline-flex}
.stage-handle{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media(max-width:480px){.stage-credit{left:10px;bottom:calc(10px + env(safe-area-inset-bottom,0px));max-width:calc(100vw - 200px)}}
@media(prefers-reduced-motion:reduce){.stage-backdrop,.stage-button,.stage-credit{transition:none}}

/* When the warm line reaches a ring, that scene takes focus: the ring glows, and its
   progress arc fills while the scene plays. */
#timeline .song-node .number.song-progress{transition:box-shadow .45s ease}
#timeline .song-section.is-focused-section .song-node .number.song-progress{box-shadow:0 0 0 1px #ff733b33,0 0 14px #ff733b80,0 0 30px #ff4d1b40}
#timeline .moment-card{transition:opacity .35s ease}
#timeline .moment-grid>.moment-card:not(.is-centered):not(.is-expanded){opacity:.35}

/* Intro montage: the frame carries the sizing; a small, faint credit names whoever filmed the shot on screen. */
.hero-montage{overflow:hidden}
.hero-montage-video{display:block;width:100%;height:100%;object-fit:cover;pointer-events:none}
.hero-credit{position:absolute;right:8px;bottom:6px;max-width:calc(100% - 16px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:9px;font-weight:400;letter-spacing:.06em;line-height:1.4;color:#ffffff94;text-shadow:0 1px 2px #0009;pointer-events:none;transition:opacity .3s ease}
.hero-credit:empty{opacity:0}

/* Footer sign-off set as a title, in the same condensed face as the song names. */
.site-footer .footer-made{margin-bottom:6px;font-family:'League Gothic',sans-serif;font-stretch:75%;font-weight:400;font-size:clamp(30px,4.4vw,44px);line-height:1.1;letter-spacing:.03em;text-transform:uppercase;color:var(--text)}
.site-footer .footer-made .footer-heart{width:.78em;height:.78em;vertical-align:-.04em;margin:0 .1em}

/* Intro meta in two lines: venue · date, then what this site is. */
.poster-intro .concert-meta{flex-direction:column;gap:2px}
.poster-intro .concert-meta .meta-line{display:flex;flex-wrap:wrap;justify-content:center;gap:0 .5em}
.poster-intro .concert-meta #venue:not(:empty)::after{content:"·";margin-left:.5em}
.poster-intro .concert-meta .fan-made{font-weight:500;opacity:.75}

/* THE WEEKND: no outline (matches the OG image). */
.poster-intro h1{-webkit-text-stroke:0}

/* Keep the root canvas dark during Safari overscroll and layer updates.
   The transition is a cached bitmap, not a full-screen animated SVG filter. */
html{background:var(--bg)}
.intro-transition{contain:strict}
.transition-wave{position:absolute;left:50%;top:0;max-width:none;transform-origin:50% 0;will-change:transform}
@media(prefers-reduced-motion:no-preference){
 .scroll-motion-ready .intro-stage>.poster-intro{isolation:isolate;will-change:opacity}
}

/* A real still remains visible until the camera begins rendering video. */
#timeline .video-preview{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;background:#000;pointer-events:none;z-index:1}
#timeline .has-video-frame>.video-preview{opacity:0}
