:root{--velvet:#5a0f17;--deep:#120507;--gold:#FFC94A;--cream:#fdf1d6;--pop:#ffe066}
*{box-sizing:border-box}
body{margin:0;background:radial-gradient(ellipse at 50% -10%,#8b1a26 0%,var(--velvet) 25%,var(--deep) 70%);background-attachment:fixed;color:var(--cream);font-family:'Courier Prime',monospace;min-height:100vh}
body::before{content:"";position:fixed;inset:0;pointer-events:none;background:repeating-linear-gradient(90deg,rgba(0,0,0,.25) 0 18px,rgba(255,255,255,.02) 18px 36px);mask:linear-gradient(90deg,#000 0 6%,transparent 14% 86%,#000 94%);z-index:0}
.grain{position:fixed;inset:-50%;pointer-events:none;z-index:50;opacity:.08;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence baseFrequency='.9'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");animation:grain .5s steps(4) infinite}
@keyframes grain{0%{transform:translate(0,0)}50%{transform:translate(-3%,2%)}100%{transform:translate(2%,-3%)}}
#root{position:relative;z-index:1}
.font-marquee{font-family:'Bungee Shade',cursive}
.font-bungee{font-family:'Bungee',cursive}
.font-serif{font-family:'Fraunces',serif}
.marquee{position:relative;border:4px solid var(--gold);border-radius:18px;padding:22px 18px;background:linear-gradient(#2a0a0e,#160406);box-shadow:0 0 40px rgba(255,201,74,.25),inset 0 0 30px rgba(0,0,0,.8)}
.bulbs{position:absolute;inset:6px;pointer-events:none;border-radius:12px;background-image:radial-gradient(circle,var(--pop) 0 3px,transparent 4px);background-size:22px 22px;mask:linear-gradient(#000 0 0) content-box exclude,linear-gradient(#000 0 0);padding:6px;-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;animation:blink 1s steps(2) infinite}
@keyframes blink{50%{filter:brightness(.35)}}
.ticket{background:var(--cream);color:#2a0a0e;border-radius:14px;position:relative;
  -webkit-mask:radial-gradient(circle 14px at 0 50%,transparent 98%,#000) left/51% 100% no-repeat,radial-gradient(circle 14px at 100% 50%,transparent 98%,#000) right/51% 100% no-repeat}
.stitch{border:2px dashed rgba(90,15,23,.45);border-radius:10px}
.chip{border:2px solid var(--gold);color:var(--gold);padding:4px 10px;border-radius:999px;font-size:13px;cursor:pointer;transition:.15s;background:transparent}
.chip.on{background:var(--gold);color:#2a0a0e;font-weight:700}
.chip:hover{transform:translateY(-1px)}
.mash{font-family:'Bungee',cursive;background:var(--pop);color:#2a0a0e;border-radius:14px;padding:16px 26px;font-size:22px;box-shadow:0 6px 0 #a3741a,0 0 30px rgba(255,224,102,.6);transition:.1s;position:relative}
.mash:active{transform:translateY(5px);box-shadow:0 1px 0 #a3741a}
.mash:disabled{opacity:.6}
.clap{display:block;height:10px;margin:-16px -26px 10px;border-radius:14px 14px 0 0;background:repeating-linear-gradient(-45deg,#111 0 10px,#fff 10px 20px);transform-origin:left bottom}
.mash.snap .clap{animation:snap .35s}
@keyframes snap{0%{transform:rotate(-25deg)}100%{transform:rotate(0)}}
.curtain-wrap{position:relative;overflow:hidden;border-radius:16px}
.curtain{position:absolute;top:0;bottom:0;width:51%;z-index:5;background:repeating-linear-gradient(90deg,#7a1420 0 20px,#4a0a12 20px 40px);animation:open 1.4s cubic-bezier(.7,0,.3,1) forwards}
.curtain.l{left:0}.curtain.r{right:0;animation-name:openr}
@keyframes open{to{transform:translateX(-100%)}}@keyframes openr{to{transform:translateX(100%)}}
.developing{background:linear-gradient(110deg,#2a0a0e 30%,#5a2a14 50%,#2a0a0e 70%);background-size:200% 100%;animation:dev 1.5s linear infinite}
@keyframes dev{to{background-position:-200% 0}}
.btn{border:2px solid var(--gold);color:var(--gold);padding:8px 12px;border-radius:10px;font-weight:700;font-size:14px;transition:.15s}
.btn:hover{background:var(--gold);color:#2a0a0e}
input.slot{background:transparent;border:none;border-bottom:3px solid #5a0f17;font-family:'Fraunces',serif;font-weight:900;font-size:22px;width:100%;outline:none;color:#2a0a0e;padding:4px 0}
.fade-up{animation:fu .6s both}@keyframes fu{from{opacity:0;transform:translateY(16px)}}
input[type=range]{accent-color:var(--gold)}