@font-face{font-family:'Anton';src:url('assets/anton-latin.woff2') format('woff2');font-weight:400;font-display:swap}
@font-face{font-family:'Rozha One';src:url('assets/rozha-one-devanagari.woff2') format('woff2');font-weight:400;font-display:swap}
@font-face{font-family:'Space Mono';src:url('assets/space-mono-latin.woff2') format('woff2');font-weight:400;font-display:swap}

:root{--header-h:78px;--background:#0e0a08;--soot:#17100c;--red:#9b2a1c;--red-muted:#6e2a20;--oxblood:#651c18;--ember:#ff6a1f;--ochre:#c8904f;--text:#f3e6cf;--muted:#bca88c;--line:#3b2b23;--serif:'Anton','Arial Narrow',Impact,sans-serif;--sans:'Space Mono','Courier New',monospace;--paper:#ead7b1;--yellow:#f2b200;--black:#1a120d;--red-hot:#b8361f;--ember-glow:rgb(255 106 31 / .45);--focus:var(--yellow);--focus-halo:var(--black);color-scheme:dark;scrollbar-width:thin;scrollbar-color:#a8401c var(--background)}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:100px}body{margin:0;background:var(--background);color:var(--text);font-family:var(--sans);font-size:16px;line-height:1.65}a{color:inherit;text-decoration:none}button{font:inherit}a,button,summary{touch-action:manipulation;-webkit-tap-highlight-color:transparent}a:focus-visible,button:focus-visible,summary:focus-visible,[tabindex]:not([tabindex="-1"]):focus-visible{outline:3px solid var(--focus);outline-offset:3px;box-shadow:0 0 0 3px var(--focus-halo)}[tabindex="-1"]:focus-visible{outline:2px dashed var(--ochre);outline-offset:-6px}img{display:block;max-width:100%;height:auto}h1,h2,h3,p,figure{margin:0}h2{font-family:var(--serif);font-weight:400;font-size:clamp(2.8rem,5.4vw,5.6rem);line-height:.98;letter-spacing:.005em;text-transform:uppercase;text-wrap:balance;font-kerning:normal}em{font-style:normal;font-weight:400}::selection{background:var(--ember);color:var(--black);text-shadow:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:fixed;left:16px;top:12px;z-index:2147483100;padding:12px 20px;background:var(--yellow);color:var(--black);font-size:.75rem;letter-spacing:.14em;text-transform:uppercase;translate:0 -200%;transition:translate .35s var(--ease-out,ease)}.skip-link:focus{translate:none}.eyebrow{font-size:.72rem;font-weight:400;letter-spacing:.2em;text-transform:uppercase;line-height:1.6}.section-pad{padding:105px 7%}.section-label{margin-bottom:32px;color:var(--muted)}.section-label::before{content:"";display:inline-block;width:2.4em;height:1px;margin-right:1em;vertical-align:.3em;background:var(--ember);box-shadow:0 0 8px var(--ember-glow)}.site-header{position:fixed;left:0;right:0;top:0;z-index:20;min-height:78px;padding:15px 4.5%;display:flex;align-items:center;justify-content:space-between;gap:24px;background:var(--background);border-bottom:1px solid var(--line)}.wordmark{font-family:var(--serif);font-size:1.4rem;letter-spacing:-.02em;white-space:nowrap}.wordmark-dot{font-size:1.15rem;padding-left:12px;color:var(--red)}.site-header nav{display:flex;align-items:center;gap:23px;font-size:.875rem;font-weight:500}.site-header nav>a:not(.button){padding-block:10px}.text-link:hover{color:var(--text)}.ticket-pending{display:inline-flex;align-items:center;justify-content:center;min-height:50px;padding:13px 26px;background:var(--red);border:1px solid var(--red);color:var(--text);font-size:.875rem;line-height:1.4;font-weight:600}.nav-ticket{min-height:42px;padding:10px 16px;font-size:.8rem}.button{display:inline-flex;align-items:center;justify-content:center;gap:.6em;min-height:50px;padding:13px 27px;background:var(--red);color:var(--text);font-size:.8rem;line-height:1.2;text-transform:uppercase;font-weight:400;letter-spacing:.12em}.button:hover{background:var(--red-hot)}.text-link{position:relative;display:inline-block;padding:12px 0;border-bottom:1px solid var(--muted);font-size:.8rem;letter-spacing:.08em}.text-link::before{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:var(--ember);box-shadow:0 0 8px var(--ember-glow);transform:scaleX(0);transform-origin:right center;pointer-events:none}.text-link:hover::before,.text-link:focus-visible::before{transform:scaleX(1);transform-origin:left center}.menu-toggle{display:none;border:1px solid var(--red-muted);background:transparent;color:inherit;min-height:44px;padding:8px 12px}.countdown-strip{display:flex;align-items:center;justify-content:space-between;gap:30px;padding:28px 6%;background:var(--red)}.countdown{display:flex;gap:28px}.countdown p{display:flex;align-items:center;gap:14px}.countdown strong{font-family:var(--serif);font-size:3rem;line-height:1;font-weight:400;letter-spacing:-.04em}.countdown span{font-size:.75rem;letter-spacing:.09em}.countdown-date{font-family:var(--serif);font-size:1.3rem}.countdown-message{font-size:1rem;font-weight:600}.pending-note{font-size:.8125rem;color:var(--muted);margin-top:18px}.revealed-band{display:grid;grid-template-columns:40px 1fr 1fr;align-items:center;gap:35px;border-top:1px solid var(--line);padding:30px 0}.revealed-band h3{font-family:var(--serif);font-size:2.8rem;font-weight:400}.revealed-band p{font-size:1rem;margin-top:15px}.band-logo{max-width:180px;max-height:120px;object-fit:contain;object-position:left center;margin-bottom:20px}.band-photo{width:100%;aspect-ratio:4/3;object-fit:cover}@keyframes arrive{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
@media(min-width:1600px){.section-pad{padding-inline:max(7%,calc((100% - 1440px)/2))}}
@media(max-width:1080px){.site-header nav{gap:15px}.wordmark{font-size:1.2rem}.section-pad{padding:85px 6%}}
@media(max-width:900px){:root{--header-h:72px}.site-header{min-height:72px;flex-wrap:wrap}.menu-toggle:not([hidden]){display:inline-flex}.site-header nav{width:100%;display:flex;flex-wrap:wrap}.countdown-date{display:none}.countdown{gap:15px}}
@media(max-width:600px){html{scroll-padding-top:88px}.countdown-strip{padding:25px 7%;gap:22px;flex-wrap:wrap}.countdown-strip>.eyebrow{font-size:.75rem;letter-spacing:.06em}.countdown strong{font-size:2.6rem}.countdown span{font-size:.7rem;letter-spacing:.035em}.countdown:has(p:nth-child(2)){gap:15px;flex-wrap:wrap}.countdown:has(p:nth-child(2)) p{display:block;text-align:center}.countdown:has(p:nth-child(2)) strong{font-size:1.8rem;display:block}.countdown:has(p:nth-child(2)) span{font-size:.65rem}.section-pad{padding:70px 7%}.section-label{margin-bottom:26px}.revealed-band{grid-template-columns:25px 1fr;gap:18px}.band-photo{grid-column:2}.revealed-band h3{font-size:2.2rem}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}}

/* Printed notice: type, paper, and a ticket stub. */
h2,.hero h1,.wordmark,.footer-wordmark{letter-spacing:0;font-variant-ligatures:none}
.site-header nav{font-size:.875rem;gap:20px}.wordmark{font-size:1.65rem}
.gig-notice{padding:90px 0 45px;overflow:clip;color:var(--black);color-scheme:light}
.gig-paper{position:relative;isolation:isolate;background:var(--paper);padding:75px 5% 70px;clip-path:polygon(0 .5%,4% .8%,8% .2%,14% .6%,19% 0,26% .5%,31% .1%,38% .7%,45% .2%,54% .8%,61% .1%,68% .5%,75% 0,83% .6%,91% .1%,97% .8%,100% .3%,100% 99.5%,95% 99%,89% 99.8%,81% 99.2%,74% 100%,67% 99.3%,59% 99.8%,50% 99.2%,41% 100%,33% 99.4%,26% 99.9%,19% 99.2%,11% 99.8%,4% 99.2%,0 99.7%)}
.gig-paper:before{content:"";position:absolute;inset:0;z-index:3;pointer-events:none;opacity:.13;mix-blend-mode:multiply;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='grain'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.7' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath fill='%23171716' filter='url(%23grain)' d='M0 0h180v180H0z'/%3E%3C/svg%3E")}
.gig-title{position:relative;z-index:1;font-family:var(--serif);font-size:clamp(5rem,11.7vw,11.5rem);font-weight:400;line-height:1.04;letter-spacing:-.005em;text-transform:uppercase;transform:rotate(-2deg);margin-left:-1.5%;max-width:1100px;padding-bottom:20px}
.gig-hindustani{display:block;position:relative;text-shadow:2px 1px 0 var(--red)}
.gig-rock{display:inline-block;margin-left:3%;font-size:1.07em;line-height:1.1}
.gig-loud{display:inline-block;margin-left:3%;color:var(--red);text-shadow:-2px 1px 0 var(--black);transform:translateY(13px) rotate(1.5deg)}
.gig-hindi{position:absolute;right:1%;top:-6px;z-index:2;font-family:'Rozha One',serif;font-size:.72em;line-height:1.5;letter-spacing:0;color:var(--red);text-shadow:none;text-transform:none;transform:rotate(8deg) translateY(-18%);background:var(--yellow);padding:0 19px 2px;clip-path:polygon(2% 3%,98% 0,100% 91%,96% 100%,0 95%)}
.gig-bottom{position:relative;display:flex;align-items:flex-start;gap:7%;padding:0 4% 0 8%;margin-top:35px}
.gig-copy{font-family:var(--sans);font-size:clamp(.9375rem,1.25vw,1.1rem);line-height:1.85;flex:1;max-width:480px;margin-top:40px}
.gig-ticket{position:relative;flex:0 0 43%;max-width:460px;background:var(--yellow);padding:30px 30px 25px;transform:rotate(2deg);margin-top:-18px;border:1px solid var(--black)}
.gig-ticket:before{content:"";position:absolute;top:-15px;left:25%;width:40%;height:28px;transform:rotate(-6deg);background:#d1c9b2cc;clip-path:polygon(0 7%,99% 0,96% 96%,3% 100%)}
.gig-ticket:after{content:"";position:absolute;inset:0 16px 0 auto;border-left:2px dashed #17171666;pointer-events:none}
.gig-ticket dl{margin:0 0 25px}.gig-ticket dl>div{display:block;margin-bottom:16px}.gig-ticket dt{font-size:.75rem;letter-spacing:.1em;text-transform:uppercase;margin-bottom:3px}.gig-ticket dd{margin:0;font-size:.95rem;line-height:1.55;font-weight:400}.gig-ticket dd span{font-size:.75rem}.gig-ticket .button{display:flex;position:relative;z-index:4;width:calc(100% - 8px);background:var(--black);color:var(--paper);border:1px solid var(--black);font-weight:400;font-size:.85rem;letter-spacing:0;min-height:52px}.gig-ticket .button:hover{background:var(--red);border-color:var(--red)}.gig-ticket-credit{font-size:.75rem;margin-top:11px;max-width:90%}.gig-ticket .ticket-pending{background:var(--black);color:var(--paper)}
.gig-reveal{display:flex;align-items:center;justify-content:space-between;gap:24px;width:67%;margin:65px 0 0 2%;padding:18px 20px;border:1.5px dashed var(--black);transform:rotate(-.6deg)}.gig-reveal>span{font-family:var(--serif);font-size:1.35rem;line-height:1.25;text-transform:uppercase}.gig-reveal a{max-width:260px;font-size:.75rem;text-decoration:underline;text-underline-offset:4px}.gig-edge-code{position:absolute;right:-11px;bottom:70px;writing-mode:vertical-rl;font-size:1.15rem;letter-spacing:.12em;font-family:var(--serif)}
.gig-notice a:focus-visible{outline-color:var(--black);outline-offset:5px}.gig-ticket .button:focus-visible{outline:3px solid var(--black);outline-offset:5px}
@media(min-width:1600px){.gig-paper{padding-inline:max(5%,calc((100% - 1500px)/2))}.gig-title{max-width:1250px}}
@media(max-width:1000px){.gig-title{font-size:12vw}.gig-hindi{right:-1%;font-size:.72em;top:0}.gig-bottom{padding-left:3%;padding-right:1%;gap:6%}.gig-ticket{flex-basis:46%;padding:27px 24px 22px}.gig-copy{font-size:1rem}.gig-reveal{width:76%;margin-top:50px}.site-header nav{gap:13px;font-size:.875rem}}
@media(max-width:700px){.gig-notice{padding-top:50px;padding-bottom:15px}.gig-paper{padding:80px 6% 60px}.gig-title{font-size:12.1vw;margin-left:-2%;padding-top:22px;padding-bottom:0}.gig-hindi{font-size:.9em;right:0;top:-44px;padding:0 12px;transform:rotate(7deg)}.gig-rock{margin-left:0}.gig-loud{margin-left:7%;transform:translateY(9px) rotate(1.5deg)}.gig-bottom{display:block;padding:0;margin-top:28px}.gig-copy{max-width:540px;margin:0 4% 35px 0;font-size:1rem;line-height:1.85}.gig-ticket{width:88%;max-width:450px;margin:0 0 0 auto;transform:rotate(1.4deg);padding:28px 24px 24px}.gig-ticket dd{font-size:.9375rem}.gig-reveal{width:93%;margin:42px 0 0;padding:17px;gap:18px;align-items:flex-start;flex-direction:column}.gig-reveal a{max-width:none;font-size:.75rem}.gig-edge-code{right:-6px;bottom:52px;font-size:.9rem}.wordmark{font-size:1.4rem}}
@media(max-width:360px){.gig-title{font-size:12vw}.gig-paper{padding-inline:5%}.gig-ticket{width:94%}.gig-ticket dd{font-size:.875rem}.gig-copy{font-size:1rem}.gig-reveal{width:94%}}

@media(max-width:700px){.gig-hindustani{text-shadow:1px 1px 0 var(--red)}.gig-copy{font-size:1rem}}

/* Lineup: all rules live in css/lineup.css. */
/* Motion: scroll reveals and hover states. Reveal hiding only applies once html.js is set, and all of it is off under prefers-reduced-motion. */
:root{--ease-out:cubic-bezier(.22,1,.36,1);--ease-spring:cubic-bezier(.34,1.56,.64,1)}
a,summary{transition:color .25s ease}
.button{transition:background-color .3s ease,border-color .3s ease,color .3s ease,translate .35s var(--ease-spring),scale .25s var(--ease-spring),box-shadow .4s ease}
.button:hover{box-shadow:0 16px 34px -16px var(--ember-glow),0 10px 22px -14px #000c}
.button:not(.fx-magnetic):hover{translate:0 -2px}
.button:active{scale:.97;box-shadow:none;transition-duration:.1s}
.text-link{transition:border-color .25s ease}
.text-link[href^="#"]::after{content:"\2193";display:inline-block;margin-left:.5em;transition:translate .35s var(--ease-spring)}
.text-link[href^="#"]:hover::after{translate:0 4px}
.text-link::before{transition:transform .5s var(--ease-out)}
/* Header bar, hide/reveal, progress fuse, nav brush underline, toggle morph and mobile menu: css/fx.css. */
.wordmark-dot{display:inline-block;transform-origin:50% 50%;animation:spin 16s linear infinite}
.hero h1:hover,.wordmark:hover{animation:misprint .55s steps(1) 1}
.gig-ticket{transition:opacity .7s ease,translate .9s var(--ease-spring),rotate .9s var(--ease-spring),box-shadow .4s ease}
.gig-ticket:hover{translate:0 -5px;box-shadow:0 18px 30px -14px #0006}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes twinkle{0%,100%{opacity:.35;transform:scale(.8)}50%{opacity:1;transform:scale(1.1) rotate(45deg)}}
@keyframes misprint{0%,100%{text-shadow:none}15%{text-shadow:3px 0 var(--red),-3px 0 var(--yellow)}35%{text-shadow:-2px 1px var(--red),2px -1px var(--yellow)}55%{text-shadow:2px -1px var(--red),-3px 1px var(--yellow)}75%{text-shadow:-1px 0 var(--red),1px 0 var(--yellow)}}
@keyframes arrive{from{opacity:0;transform:translateY(22px)}to{opacity:1;transform:translateY(0)}}
@keyframes ping{0%{opacity:.8;scale:1}70%,100%{opacity:0;scale:1.14 1.6}}
@keyframes grain{0%{translate:0 0}12.5%{translate:-3% -4%}25%{translate:4% -2%}37.5%{translate:-2% 3%}50%{translate:3% 4%}62.5%{translate:-4% 1%}75%{translate:2% -3%}87.5%{translate:-1% 2%}100%{translate:0 0}}
@media(prefers-reduced-motion:no-preference){
.countdown-strip .eyebrow,.countdown-strip .countdown-date,.countdown strong,.countdown span,.countdown-message{transition:opacity .6s ease,translate .8s var(--ease-out)}
.countdown strong{transition-delay:.12s}
.countdown span{transition-delay:.3s}
.countdown-date{transition-delay:.25s}
:where(html.js) .countdown-strip:not(.is-in) .eyebrow{opacity:0;translate:-24px 0}
:where(html.js) .countdown-strip:not(.is-in) .countdown-date{opacity:0;translate:24px 0}
:where(html.js) .countdown-strip:not(.is-in) .countdown strong{opacity:0;translate:0 .45em}
:where(html.js) .countdown-strip:not(.is-in) .countdown span{opacity:0;translate:-10px 0}
:where(html.js) .countdown-strip:not(.is-in) .countdown-message{opacity:0;translate:0 10px}
:where(html.js) :where([data-reveal]){transition:opacity .7s ease,translate .9s var(--ease-out),scale .9s var(--ease-out),rotate .9s var(--ease-out),clip-path .9s var(--ease-out)}
:where(html.js) :where([data-reveal="drop"],[data-reveal="scale"],[data-reveal="spin"],[data-reveal="toss"]){transition-timing-function:ease,var(--ease-spring),var(--ease-spring),var(--ease-spring),var(--ease-out)}
:where(html.js) :where([data-reveal="wipe"]){clip-path:inset(-10% -10% -10% -10%)}
:where(html.js) :where([data-reveal]:not(.is-in)){opacity:0}
:where(html.js) :where([data-reveal=""]:not(.is-in)){translate:0 28px}
:where(html.js) :where([data-reveal="left"]:not(.is-in)){translate:-36px 0}
:where(html.js) :where([data-reveal="right"]:not(.is-in)){translate:20px 0}
:where(html.js) :where([data-reveal="scale"]:not(.is-in)){scale:1.18}
:where(html.js) :where([data-reveal="drop"]:not(.is-in)){translate:0 -40px;rotate:-6deg}
:where(html.js) :where([data-reveal="toss"]:not(.is-in)){translate:70px 30px;rotate:7deg}
:where(html.js) :where([data-reveal="spin"]:not(.is-in)){rotate:-120deg;scale:.4}
:where(html.js) :where([data-reveal="wipe"]:not(.is-in)){clip-path:inset(-10% 110% -10% -10%)}
:where(html.js) :where([data-reveal="strip"]:not(.is-in)){opacity:1}
}
/* Film grain: static everywhere, it only crawls on larger screens with motion allowed. */
body::after{content:"";position:fixed;inset:-8%;z-index:998;pointer-events:none;opacity:.05;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 240 240'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.82' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3CfeComponentTransfer%3E%3CfeFuncR type='linear' slope='1.5' intercept='-.25'/%3E%3CfeFuncG type='linear' slope='1.5' intercept='-.25'/%3E%3CfeFuncB type='linear' slope='1.5' intercept='-.25'/%3E%3C/feComponentTransfer%3E%3C/filter%3E%3Crect width='240' height='240' filter='url(%23g)'/%3E%3C/svg%3E") 0 0/240px 240px}
@media(prefers-reduced-motion:no-preference) and (min-width:701px){
body::after{opacity:.075;animation:grain .8s steps(1) infinite}
}
html::-webkit-scrollbar{width:9px}html::-webkit-scrollbar-track{background:var(--background)}html::-webkit-scrollbar-thumb{background:linear-gradient(var(--red),#c2491d);border:2px solid var(--background);border-radius:9px}
:root[data-motion="reduce"]{scroll-behavior:auto}
:root[data-motion="reduce"] *,:root[data-motion="reduce"] *::before,:root[data-motion="reduce"] *::after{animation:none!important;transition:none!important}
/* Decorative loops pause while their section is off screen (app.mjs toggles .is-offscreen). */
.is-offscreen,.is-offscreen *,.is-offscreen *::before,.is-offscreen *::after{animation-play-state:paused!important}
/* The header's spinning star is the only loop that's always on screen; touch screens get it still. */
@media (hover:none),(max-width:700px){.wordmark-dot{animation:none!important}}
