/* 9471WIN 夜市 — the night-market layer on top of the Lacquer design system:
   3D lobby, living mascot, red-packet transitions, BIG WIN, festival skins. Scene colours are tokens per skin. */
:root, html[data-skin="classic"] { --sky1:#07020a; --sky2:#2a0610; --sky3:#5c0f14; --lan1:#d9201a; --lan2:#ec4a1f; --glow:#ffb347; --accent:#f2c34c; --roof:#14040b; --roof2:#22070e; --win:#ffb347; --ground:#0d0306; }
html[data-skin="cny"] { --sky1:#1a0204; --sky2:#5e0a0e; --sky3:#a3141a; --lan1:#e0261c; --lan2:#f2561e; --glow:#ffcf66; --accent:#ffd257; --roof:#2a0507; --roof2:#3d070a; --win:#ffd27a; --ground:#1a0405; }
html[data-skin="midautumn"] { --sky1:#03061a; --sky2:#0c1640; --sky3:#26326f; --lan1:#ff9a2e; --lan2:#ffc94d; --glow:#ffcf73; --accent:#ffd98a; --roof:#050a22; --roof2:#0a1233; --win:#ffcf73; --ground:#04071a; }
html[data-skin="deepavali"] { --sky1:#0c0216; --sky2:#3a0a4a; --sky3:#7a1d5e; --lan1:#ff7b1c; --lan2:#ff4fa3; --glow:#ffb347; --accent:#ffc94d; --roof:#14041e; --roof2:#22072e; --win:#ffb347; --ground:#12031a; }
html[data-skin="christmas"] { --sky1:#01080d; --sky2:#062633; --sky3:#0b4646; --lan1:#d42020; --lan2:#1f9d55; --glow:#ffe08a; --accent:#f2c34c; --roof:#02101a; --roof2:#062030; --win:#ffe08a; --ground:#020d12; }

.logo img { height: 38px; }
.main.lobby-mode { padding: 0; overflow: hidden; }

/* ---------- lobby ---------- */
.nm-lobby { --rx: 0; --ry: 0; position: absolute; inset: 0; overflow: hidden; overflow: clip; user-select: none; -webkit-user-select: none; }
.nm-scene { position: absolute; inset: 0; overflow: hidden; background: linear-gradient(180deg, var(--sky1) 0%, var(--sky2) 48%, var(--sky3) 78%, var(--ground) 100%); }
.nm-layer { position: absolute; inset: -60px; pointer-events: none; transform: translate3d(calc(var(--rx) * var(--k) * -1px), calc(var(--ry) * var(--k) * -.6px), 0); will-change: transform; }
.nm-stars { background-image: radial-gradient(1px 1px at 12% 18%, #fff8, transparent), radial-gradient(1px 1px at 32% 8%, #fff6, transparent), radial-gradient(1.5px 1.5px at 58% 14%, #fff9, transparent), radial-gradient(1px 1px at 76% 6%, #fff7, transparent), radial-gradient(1px 1px at 88% 22%, #fff5, transparent), radial-gradient(1.2px 1.2px at 22% 32%, #fff6, transparent); animation: nmTwinkle 4s ease-in-out infinite alternate; }
@keyframes nmTwinkle { to { opacity: .45; } }
.nm-roofs svg { position: absolute; left: 0; right: 0; bottom: 34%; width: 100%; height: 34%; }
.nm-roofs.near svg { bottom: 27%; height: 30%; }
.nm-roofs .w { fill: var(--win); animation: nmWin 5s ease-in-out infinite alternate; }
@keyframes nmWin { to { opacity: .35; } }
.nm-wire { position: absolute; left: 0; top: 0; overflow: visible; }
.nm-wire path { fill: none; stroke: color-mix(in srgb, var(--gold) 45%, transparent); stroke-width: 1.2; }
.nm-lan { position: absolute; display: flex; flex-direction: column; align-items: center; transform-origin: 50% 0; animation: nmSwing var(--sw, 3.2s) ease-in-out infinite alternate; animation-delay: var(--d); }
@keyframes nmSwing { from { transform: translateX(-50%) rotate(-5deg); } to { transform: translateX(-50%) rotate(5deg); } }
.nm-lan .str { width: 1px; height: var(--l); background: color-mix(in srgb, var(--gold) 55%, transparent); }
.nm-lan .cap { width: calc(var(--s) * 18px); height: calc(var(--s) * 5px); border-radius: 2px; background: linear-gradient(var(--gold-txt), var(--gold2)); position: relative; z-index: 1; }
.nm-lan .bd { width: calc(var(--s) * 42px); height: calc(var(--s) * 46px); margin: calc(var(--s) * -2px) 0; border-radius: 50%; position: relative; overflow: hidden;
  background: radial-gradient(ellipse at 50% 45%, #fff3c0 0%, #ffcf66 16%, var(--c) 52%, color-mix(in srgb, var(--c) 50%, #000) 100%);
  box-shadow: 0 0 calc(var(--s) * 30px) calc(var(--s) * 7px) color-mix(in srgb, var(--glow) 42%, transparent); animation: nmFlick 2.6s ease-in-out infinite alternate; animation-delay: var(--d); }
.nm-lan .bd::before { content: ""; position: absolute; inset: 0; border-radius: 50%; background: repeating-linear-gradient(90deg, transparent 0 calc(var(--s) * 6px), rgba(70,0,0,.3) calc(var(--s) * 6px) calc(var(--s) * 7.5px)); }
.nm-lan .tas { width: calc(var(--s) * 5px); height: calc(var(--s) * 24px); background: linear-gradient(var(--gold), var(--c)); border-radius: 0 0 3px 3px; }
@keyframes nmFlick { to { filter: brightness(1.18); } }
.nm-ground { position: absolute; left: 0; right: 0; bottom: 0; height: 42%; background: linear-gradient(transparent, var(--ground) 45%); }
.nm-ground::before { content: ""; position: absolute; left: -60%; right: -60%; top: 8%; height: 130%; transform: perspective(380px) rotateX(64deg); transform-origin: top;
  background: repeating-linear-gradient(90deg, rgba(242,195,76,.09) 0 1px, transparent 1px 54px), repeating-linear-gradient(0deg, rgba(242,195,76,.09) 0 1px, transparent 1px 54px);
  -webkit-mask-image: linear-gradient(transparent, #000 25%, #000 70%, transparent); mask-image: linear-gradient(transparent, #000 25%, #000 70%, transparent); }
.nm-ground::after { content: ""; position: absolute; left: 10%; right: 10%; top: 0; height: 60%; background: radial-gradient(ellipse at 50% 0, color-mix(in srgb, var(--glow) 30%, transparent), transparent 70%); }
.nm-amb { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
.nm-deco > * { display: none; }
html[data-skin="midautumn"] .nm-deco .moon { display: block; position: absolute; top: 15%; right: 18%; width: 110px; height: 110px; border-radius: 50%;
  background: radial-gradient(circle at 62% 58%, rgba(214,170,90,.35) 0 12px, transparent 13px), radial-gradient(circle at 35% 65%, rgba(214,170,90,.25) 0 8px, transparent 9px), radial-gradient(circle at 45% 40%, #fffbe8, #ffe7a3 55%, #f0b850);
  box-shadow: 0 0 70px 24px rgba(255,214,130,.35); }
html[data-skin="cny"] .nm-deco .crk { display: block; position: absolute; top: 70px; width: 12px; height: 170px; border-radius: 4px; transform-origin: top; animation: nmSwing 2.4s ease-in-out infinite alternate;
  background: repeating-linear-gradient(180deg, #e0261c 0 9px, var(--gold) 9px 11px, #9e0c10 11px 18px); box-shadow: 0 0 18px rgba(255,120,60,.5); }
html[data-skin="cny"] .nm-deco .crk.l { left: 76px; } html[data-skin="cny"] .nm-deco .crk.r { right: 76px; animation-delay: -1.2s; }
html[data-skin="cny"] .nm-deco .fud { display: grid; place-items: center; position: absolute; top: 120px; width: 44px; height: 44px; transform: rotate(45deg); background: linear-gradient(135deg, #e0261c, #9e0c10); border: 2px solid var(--gold); box-shadow: 0 0 22px rgba(255,180,60,.5); }
html[data-skin="cny"] .nm-deco .fud span { transform: rotate(-45deg); font: 900 22px/1 var(--display); color: var(--gold-txt); }
html[data-skin="cny"] .nm-deco .fud.l { left: 128px; } html[data-skin="cny"] .nm-deco .fud.r { right: 128px; top: 104px; }
html[data-skin="deepavali"] .nm-deco .diyas { display: flex; position: absolute; left: 190px; right: 84px; bottom: 210px; justify-content: space-between; }
.nm-diya { position: relative; width: 24px; height: 11px; border-radius: 0 0 14px 14px; background: linear-gradient(#e07a2e, #8a3b10); }
.nm-diya::before { content: ""; position: absolute; left: 50%; bottom: 9px; width: 9px; height: 16px; margin-left: -4.5px; border-radius: 50% 50% 50% 50% / 62% 62% 38% 38%; background: radial-gradient(ellipse at 50% 75%, #fff8d0, #ffcf3a 45%, #ff6a00 80%); box-shadow: 0 0 14px 5px rgba(255,170,40,.55); transform-origin: 50% 100%; animation: nmFlame .18s ease-in-out infinite alternate; }
@keyframes nmFlame { to { transform: scale(.9, 1.1) skewX(4deg); } }
html[data-skin="deepavali"] .nm-deco .rangoli { display: block; position: absolute; left: 50%; bottom: 170px; width: 420px; height: 420px; margin-left: -210px; border-radius: 50%; transform: perspective(500px) rotateX(74deg); opacity: .5;
  background: radial-gradient(circle, #ffd257 0 7%, transparent 7.5%), repeating-conic-gradient(#ff4fa3 0 15deg, #ff7b1c 15deg 30deg, #8b3dff 30deg 45deg, #ffd257 45deg 60deg);
  -webkit-mask-image: radial-gradient(circle, #000 0 18%, transparent 18.5% 24%, #000 24.5% 44%, transparent 45%); mask-image: radial-gradient(circle, #000 0 18%, transparent 18.5% 24%, #000 24.5% 44%, transparent 45%); }
html[data-skin="christmas"] .nm-deco .xstar { display: block; position: absolute; top: 10%; left: 50%; margin-left: -22px; width: 44px; height: 44px; background: var(--gold-txt); clip-path: polygon(50% 0, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%); filter: drop-shadow(0 0 14px #ffe08a); }

/* top bar, jackpot, wallet row, feed */
.nm-top { position: absolute; z-index: 30; left: 0; right: 0; top: 0; padding: 10px 12px 0; display: flex; align-items: center; gap: 6px; }
.nm-top .logo { margin-right: auto; } .nm-top .logo img { height: 32px; }
.nm-chip { position: relative; display: flex; align-items: center; gap: 5px; height: 32px; padding: 0 10px; border-radius: 99px; background: rgba(8,2,4,.55); border: 1px solid var(--line); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); font: 600 12px var(--font); white-space: nowrap; color: var(--ink); }
.nm-chip.ic { width: 32px; padding: 0; justify-content: center; } .nm-chip svg { width: 16px; height: 16px; }
.nm-chip .dot { position: absolute; top: 4px; right: 5px; width: 7px; height: 7px; border-radius: 50%; background: var(--danger); }
.nm-chip b { color: var(--gold-txt); font-weight: 700; }
.nm-jp { position: absolute; z-index: 30; left: 12px; right: 12px; top: 50px; height: 54px; display: flex; align-items: center; gap: 10px; padding: 0 12px; overflow: hidden;
  background: linear-gradient(100deg, #5a080b, #a3141a 50%, #5a080b); border: 1.5px solid var(--accent); clip-path: polygon(10px 0, calc(100% - 10px) 0, 100% 10px, 100% calc(100% - 10px), calc(100% - 10px) 100%, 10px 100%, 0 calc(100% - 10px), 0 10px); }
.nm-jp::after { content: ""; position: absolute; inset: 0; background: linear-gradient(100deg, transparent 35%, rgba(255,240,190,.3) 50%, transparent 65%); transform: translateX(-100%); animation: nmShine 4.5s ease-in-out infinite; pointer-events: none; }
@keyframes nmShine { 60%, 100% { transform: translateX(100%); } }
.nm-jp img { width: 30px; }
.nm-jp small { display: block; font: 600 9.5px/1 var(--font); letter-spacing: .14em; color: var(--gold-txt); opacity: .85; }
.nm-odo { font: 800 21px/1 var(--font); color: #fff; margin-top: 4px; text-shadow: 0 0 12px rgba(255,200,80,.6); white-space: nowrap; }
.nm-odo .dg { display: inline-block; height: 1em; overflow: hidden; vertical-align: top; }
.nm-odo .dg i { display: block; font-style: normal; transition: transform .8s cubic-bezier(.2,.9,.25,1); }
.nm-jp .cd { margin-left: auto; text-align: right; font: 600 9.5px/1.3 var(--font); color: var(--gold-txt); }
.nm-jp .cd b { display: block; font: 700 13px var(--font); color: #fff; font-variant-numeric: tabular-nums; }
.nm-wal { position: absolute; z-index: 30; left: 12px; right: 12px; top: 112px; display: grid; grid-template-columns: 1.5fr 1fr 1fr 1fr; gap: 6px; }
.nm-wal a.bal { flex-direction: column; align-items: flex-start; justify-content: center; gap: 0; padding: 0 10px; line-height: 1.15; }
.nm-wal a.bal small { font-size: 9.5px; color: var(--muted); font-weight: 500; } .nm-wal a.bal b { font-size: 13px; color: var(--gold-txt); white-space: nowrap; }
.nm-wal a { height: 36px; display: flex; align-items: center; justify-content: center; gap: 5px; border-radius: 10px; font-size: 12.5px; font-weight: 600; background: rgba(8,2,4,.55); border: 1px solid var(--line); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); }
.nm-wal a svg { width: 16px; height: 16px; }
.nm-wal a.pri { background: var(--g); color: var(--on-gold); border: 0; font-weight: 800; }
.nm-feed { position: absolute; z-index: 31; left: 12px; right: 12px; top: 156px; height: 30px; pointer-events: none; }
.nm-toast { position: absolute; left: 0; max-width: 100%; display: flex; align-items: center; gap: 8px; height: 28px; padding: 0 12px 0 4px; border-radius: 99px; background: rgba(8,2,4,.66); border: 1px solid var(--line); backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); font-size: 11.5px; white-space: nowrap; overflow: hidden; animation: nmTin 4.2s cubic-bezier(.2,.9,.25,1) forwards; }
.nm-toast b { color: var(--accent); font-weight: 600; } .nm-toast em { font: 700 11.5px var(--font); font-style: normal; color: var(--gold-txt); }
.nm-toast .lv { width: 20px; height: 20px; border-radius: 50%; display: grid; place-items: center; flex: none; font-size: 11px; background: var(--coin); color: var(--on-gold); }
@keyframes nmTin { 0% { transform: translateX(110%); opacity: 0; } 8%, 88% { transform: none; opacity: 1; } 100% { transform: translateY(-12px); opacity: 0; } }

/* 3D stall carousel */
.nm-stalls { position: absolute; z-index: 10; left: 0; right: 0; top: 196px; bottom: calc(178px + var(--safe-bottom)); perspective: 1100px; touch-action: none; }
.nm-ring { position: absolute; inset: 0; transform-style: preserve-3d; transform: rotateY(calc(var(--rx) * 8deg)) rotateX(calc(var(--ry) * -6deg)); }
.nm-stall { position: absolute; left: 50%; top: 56%; height: min(100%, 410px); max-height: calc(100% - 30px); display: flex; flex-direction: column; padding: 28px 11px 11px; border-radius: 8px 8px 16px 16px;
  background: linear-gradient(180deg, #8e1013, #7a0d10 40%, #3a0507); box-shadow: inset 0 0 0 2px var(--accent), inset 0 0 0 5px #3a0507, inset 0 0 0 6px rgba(242,195,76,.45), 0 30px 60px rgba(0,0,0,.6), 0 0 50px color-mix(in srgb, var(--glow) 18%, transparent);
  backface-visibility: hidden; cursor: pointer; }
.nm-stall .eave { position: absolute; left: -9%; width: 118%; top: -28px; height: 48px; overflow: visible; filter: drop-shadow(0 6px 6px rgba(0,0,0,.5)); }
.nm-stall .sl { position: absolute; top: 12px; width: 16px; height: 20px; border-radius: 50%; background: radial-gradient(ellipse at 50% 45%, #fff3c0, #ffcf66 20%, var(--lan1) 60%, #5a0608); box-shadow: 0 0 18px 5px color-mix(in srgb, var(--glow) 45%, transparent); animation: nmSwing 2.2s ease-in-out infinite alternate; transform-origin: 50% -10px; }
.nm-stall .sl.l { left: -8px; } .nm-stall .sl.r { right: -8px; animation-delay: -1.1s; }
.nm-plaque { position: relative; z-index: 2; align-self: center; text-align: center; padding: 5px 16px 6px; margin-bottom: 9px; border-radius: 6px; background: linear-gradient(#1c0507, #320709); border: 1.5px solid var(--accent); box-shadow: 0 4px 12px rgba(0,0,0,.5); }
.nm-plaque b { display: block; font: 900 23px/1.15 var(--display); color: var(--gold-txt); text-shadow: 0 0 14px rgba(255,200,80,.45); white-space: nowrap; letter-spacing: .04em; }
.nm-plaque small { display: block; font: 600 9px var(--font); letter-spacing: .18em; text-transform: uppercase; color: var(--muted); }
.nm-art { position: relative; flex: 1; min-height: 0; border-radius: 10px; overflow: hidden; background: radial-gradient(circle at 50% 60%, color-mix(in srgb, var(--glow) 55%, transparent), transparent 70%), linear-gradient(#2a0507, #140204); border: 1px solid var(--line); }
.nm-art img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; object-position: 50% 100%; }
.nm-art img.cover { object-fit: cover; object-position: 50% 30%; }
.nm-tag { position: absolute; z-index: 3; right: 10px; top: 70px; font: 800 10px var(--font); letter-spacing: .08em; padding: 3px 8px; border-radius: 6px; color: var(--on-gold); background: var(--g); transform: rotate(4deg); }
.nm-sfoot { display: flex; align-items: center; gap: 8px; margin-top: 9px; }
.nm-sfoot p { margin: 0; flex: 1; min-width: 0; font-size: 11.5px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nm-enter { height: 32px; padding: 0 15px; border-radius: 99px; font-weight: 700; font-size: 13px; color: var(--on-gold); background: var(--g); box-shadow: 0 4px 14px rgba(242,195,76,.35); white-space: nowrap; }
.nm-sheen { position: absolute; inset: 0; border-radius: inherit; pointer-events: none; background: linear-gradient(115deg, transparent 32%, rgba(255,240,200,.16) 46%, transparent 60%); background-size: 260% 100%; background-position: calc(50% + var(--rx) * 45%) 0; }
.nm-stall:not(.center) .nm-enter { opacity: .5; }
.nm-dots { position: absolute; z-index: 11; left: 0; right: 0; bottom: calc(158px + var(--safe-bottom)); display: flex; justify-content: center; gap: 7px; }
.nm-dots i { width: 7px; height: 7px; border-radius: 99px; background: rgba(255,240,210,.3); transition: width .3s, background .3s; }
.nm-dots i.on { width: 22px; background: var(--accent); }
.nm-maint { position: absolute; z-index: 32; left: 12px; right: 12px; top: 156px; padding: 6px 12px; border-radius: 10px; background: var(--hi); font-size: 12px; text-align: center; }

/* ---------- mascot (global) ---------- */
.nm-ss { position: absolute; z-index: 45; left: 4px; bottom: calc(64px + var(--safe-bottom)); width: 98px; height: 106px; transform-origin: 30% 100%; transition: transform .45s cubic-bezier(.3,1.4,.5,1), opacity .3s; cursor: pointer; }
.nm-ss.away { transform: translateX(-140px); opacity: 0; pointer-events: none; }
.nm-ss[data-m="big"] { z-index: 66; transform: scale(1.3) translate(18px, -40px); }
.nm-ssb { position: absolute; inset: 0; display: flex; align-items: flex-end; justify-content: center; transform-origin: 50% 100%; animation: nmBob 3s ease-in-out infinite; }
.nm-ssb img { max-width: 100%; max-height: 100%; filter: drop-shadow(0 8px 10px rgba(0,0,0,.55)); }
.nm-ss::before { content: ""; position: absolute; left: 18%; right: 18%; bottom: -4px; height: 12px; border-radius: 50%; background: radial-gradient(rgba(0,0,0,.55), transparent 70%); }
@keyframes nmBob { 50% { transform: translateY(-5px); } }
.nm-ss[data-m="greet"] .nm-ssb { animation: nmWave .42s ease-in-out 6 alternate; }
@keyframes nmWave { from { transform: rotate(-7deg); } to { transform: rotate(7deg); } }
.nm-ss[data-m="win"] .nm-ssb, .nm-ss[data-m="big"] .nm-ssb { animation: nmDance .42s ease-in-out infinite alternate; }
@keyframes nmDance { 0% { transform: translateY(0) rotate(-9deg) scale(1.04, .96); } 50% { transform: translateY(-24px) rotate(0) scale(.95, 1.06); } 100% { transform: translateY(0) rotate(9deg) scale(1.04, .96); } }
.nm-ss[data-m="loss"] .nm-ssb { animation: nmSlump 1s ease forwards; } .nm-ss[data-m="loss"] img { filter: drop-shadow(0 8px 10px rgba(0,0,0,.55)) saturate(.75) brightness(.9); }
@keyframes nmSlump { to { transform: translateY(8px) rotate(-7deg) scale(.95); } }
.nm-ss[data-m="doze"] .nm-ssb { animation: nmBreathe 3.2s ease-in-out infinite; } .nm-ss[data-m="doze"] img { filter: drop-shadow(0 8px 10px rgba(0,0,0,.55)) brightness(.72); }
@keyframes nmBreathe { 0%, 100% { transform: rotate(-11deg) translateY(4px) scale(1); } 50% { transform: rotate(-13deg) translateY(4px) scale(1.035, .98); } }
.nm-ss[data-m="wake"] .nm-ssb, .nm-ss[data-m="tap"] .nm-ssb { animation: nmHop .5s cubic-bezier(.3,1.6,.5,1); }
@keyframes nmHop { 40% { transform: translateY(-26px) scale(.95, 1.07); } }
.nm-zz { position: absolute; left: 84px; top: 0; display: none; font: 800 16px var(--font); color: var(--gold-txt); }
.nm-ss[data-m="doze"] .nm-zz { display: block; }
.nm-zz span { position: absolute; opacity: 0; animation: nmZz 2.4s ease-out infinite; } .nm-zz span:nth-child(2) { animation-delay: .8s; font-size: 20px; } .nm-zz span:nth-child(3) { animation-delay: 1.6s; font-size: 24px; }
@keyframes nmZz { 0% { transform: translate(0, 20px); opacity: 0; } 30% { opacity: 1; } 100% { transform: translate(26px, -30px); opacity: 0; } }
.nm-bub { position: absolute; z-index: 67; left: 96px; bottom: calc(136px + var(--safe-bottom)); max-width: 230px; padding: 9px 13px; border-radius: 16px 16px 16px 4px; background: #fff7e6; color: #3a1208; font-size: 13.5px; font-weight: 700; line-height: 1.35; box-shadow: 0 10px 30px rgba(0,0,0,.45); transform-origin: 0 100%; transform: scale(.4); opacity: 0; transition: transform .35s cubic-bezier(.3,1.5,.5,1), opacity .2s; pointer-events: none; }
.nm-bub small { display: block; font-weight: 500; font-size: 11px; color: #8a5a3a; margin-top: 2px; }
.nm-bub.show { transform: none; opacity: 1; }

/* ---------- big win ---------- */
.nm-bw { position: absolute; z-index: 65; inset: 0; display: grid; place-items: center; background: radial-gradient(circle at 50% 42%, rgba(150,12,14,.55), rgba(0,0,0,.88) 75%); animation: nmFade .3s ease both; }
@keyframes nmFade { from { opacity: 0; } }
.nm-rays { position: absolute; left: 50%; top: 42%; width: 1000px; height: 1000px; margin: -500px 0 0 -500px; border-radius: 50%; background: repeating-conic-gradient(rgba(255,214,110,.26) 0 7deg, transparent 7deg 18deg);
  -webkit-mask-image: radial-gradient(circle, #000 12%, transparent 60%); mask-image: radial-gradient(circle, #000 12%, transparent 60%); animation: nmSpin 16s linear infinite; }
@keyframes nmSpin { to { transform: rotate(360deg); } }
.nm-bw-in { position: relative; text-align: center; margin-top: -90px; }
.nm-bw-zh { font: 900 112px/1 var(--display); background: linear-gradient(#fffbe6, #ffe08a 30%, var(--gold) 50%, #b8740c 58%, #ffe08a 85%); -webkit-background-clip: text; background-clip: text; color: transparent;
  filter: drop-shadow(0 5px 0 #5a1d00) drop-shadow(0 0 30px rgba(255,190,60,.65)); animation: nmSlam .7s cubic-bezier(.2,1.5,.4,1) both; }
@keyframes nmSlam { from { transform: scale(3.2); opacity: 0; } }
.nm-bw-en { font: 900 italic 44px/1 var(--font); letter-spacing: .04em; margin-top: 6px; background: linear-gradient(#fff, var(--gold-txt) 40%, var(--gold) 60%, #fff3c0); -webkit-background-clip: text; background-clip: text; color: transparent; filter: drop-shadow(0 3px 0 #5a1d00); animation: nmSlam .6s .25s cubic-bezier(.2,1.5,.4,1) both; }
.nm-bw-amt { margin-top: 18px; font: 800 34px/1 var(--font); color: #fff; font-variant-numeric: tabular-nums; text-shadow: 0 0 20px rgba(255,200,80,.85), 0 2px 0 #5a1d00; animation: nmFade .4s .5s both; }
.nm-bw-go { margin-top: 26px; height: 46px; padding: 0 30px; border-radius: 99px; font-weight: 800; font-size: 15px; color: var(--on-gold); background: var(--g); box-shadow: 0 0 30px rgba(242,195,76,.6); animation: nmFade .4s both; }
.app.nm-shake { animation: nmShake .8s cubic-bezier(.36,.07,.19,.97); }
@keyframes nmShake { 10%, 90% { transform: translate(-2px, 1px); } 20%, 80% { transform: translate(5px, -3px); } 30%, 50%, 70% { transform: translate(-9px, 4px); } 40%, 60% { transform: translate(9px, -4px); } }
.nm-fx { position: absolute; z-index: 101; inset: 0; width: 100%; height: 100%; pointer-events: none; }

/* ---------- transitions ---------- */
.nm-tr { position: absolute; z-index: 100; inset: 0; }
.nm-tr-tear { background: rgba(5,0,2,.6); animation: nmFade .25s both; transition: background .45s; }
.nm-tr-tear.rip { background: transparent; }
.nm-tpk { position: absolute; left: 50%; top: 50%; width: 220px; height: 302px; margin: -151px 0 0 -110px; animation: nmPkIn .34s cubic-bezier(.2,1.4,.5,1) both; }
@keyframes nmPkIn { from { transform: scale(.2) rotate(-12deg); opacity: 0; } }
.nm-tr-tear.shk .nm-tpk { animation: nmJit .07s linear infinite; }
@keyframes nmJit { 25% { transform: translate(-4px, 2px) rotate(-1deg); } 75% { transform: translate(4px, -2px) rotate(1deg); } }
.nm-half { position: absolute; inset: 0; transition: transform .6s cubic-bezier(.5,0,.75,0); }
.nm-half.top { clip-path: polygon(0 0, 100% 0, 100% 53%, 92% 48%, 84% 55%, 75% 47%, 66% 54%, 58% 47%, 50% 55%, 42% 47%, 33% 54%, 25% 47%, 16% 55%, 8% 48%, 0 53%); }
.nm-half.bot { clip-path: polygon(0 53%, 8% 48%, 16% 55%, 25% 47%, 33% 54%, 42% 47%, 50% 55%, 58% 47%, 66% 54%, 75% 47%, 84% 55%, 92% 48%, 100% 53%, 100% 100%, 0 100%); }
.rip .nm-half.top { transform: translate(-30px, -520px) rotate(-24deg); }
.rip .nm-half.bot { transform: translate(40px, 560px) rotate(18deg); }
.nm-flash { position: absolute; left: 50%; top: 50%; width: 40px; height: 40px; margin: -20px; border-radius: 50%; background: radial-gradient(#fffbe6, #ffd257 40%, transparent 70%); opacity: 0; }
.rip .nm-flash { animation: nmFlash .6s ease-out; }
@keyframes nmFlash { 0% { opacity: 1; transform: scale(1); } 100% { opacity: 0; transform: scale(28); } }
.nm-pk { position: absolute; inset: 0; border-radius: 18px; overflow: hidden; background: linear-gradient(#e2231c, #a30d10 70%, #8a0a0d); box-shadow: inset 0 0 0 3px rgba(255,214,120,.7), inset 0 0 0 8px #b8141a, inset 0 0 0 9px rgba(255,214,120,.5); }
.nm-pk-flap { position: absolute; left: -12%; right: -12%; top: -22%; height: 58%; border-radius: 0 0 50% 50%; background: linear-gradient(#c4161a, #820a0e); box-shadow: 0 6px 12px rgba(0,0,0,.35), inset 0 -2px 0 rgba(255,214,120,.6); }
.nm-pk-seal { position: absolute; left: 50%; top: 36%; width: 70px; height: 70px; margin-left: -35px; border-radius: 50%; display: grid; place-items: center; font: 900 38px/1 var(--display); color: #6b2a00; background: var(--coin); box-shadow: 0 4px 12px rgba(0,0,0,.4); }
.nm-pk-txt { position: absolute; left: 0; right: 0; bottom: 30px; text-align: center; font: 900 italic 34px/1 var(--font); color: var(--gold-txt); text-shadow: 0 2px 0 #5a1d00; }
.nm-pk-txt small { font-size: 18px; margin-left: 1px; }
.nm-disc { position: absolute; left: 50%; top: 55%; width: 20px; height: 20px; margin: -10px; border-radius: 50%; background: radial-gradient(#fff6c8, var(--gold) 35%, #c4161a 70%, #3a0507); animation: nmDisc .45s cubic-bezier(.6,0,.9,.5) forwards; transition: opacity .45s; }
@keyframes nmDisc { to { transform: scale(110); } }
.nm-tr-coins.out .nm-disc { opacity: 0; }
.nm-door { position: absolute; top: 0; bottom: 0; width: 50.5%; overflow: hidden; transition: transform .42s cubic-bezier(.7,0,.3,1);
  background: repeating-linear-gradient(0deg, rgba(242,195,76,.32) 0 2px, transparent 2px 30px), repeating-linear-gradient(90deg, rgba(242,195,76,.32) 0 2px, transparent 2px 30px), linear-gradient(90deg, #4a0609, #a3141a 50%, #4a0609);
  box-shadow: inset 0 0 0 4px var(--gold2), inset 0 0 0 7px #4a0609, inset 0 0 0 8px var(--gold); }
.nm-door.l { left: 0; transform: translateX(-102%); } .nm-door.r { right: 0; transform: translateX(102%); }
.nm-door i { position: absolute; top: 50%; width: 110px; height: 110px; margin-top: -55px; border-radius: 50%; display: grid; place-items: center; font: 900 60px/1 var(--display); font-style: normal; color: #6b2a00; background: var(--coin); box-shadow: 0 0 0 4px #4a0609, 0 0 0 6px var(--gold); }
.nm-door.l i { right: -55px; } .nm-door.r i { left: -55px; }
.nm-tr-doors.close .nm-door { transform: none; }
.nm-tr-doors.open .nm-door { transition-duration: .55s; } .nm-tr-doors.open .nm-door.l { transform: translateX(-102%); } .nm-tr-doors.open .nm-door.r { transform: translateX(102%); }

/* festival skin picker (inside the existing dialog) */
.nm-skins { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin: 10px 0 4px; }
.nm-sk { text-align: left; padding: 10px 12px; border-radius: 14px; border: 1px solid var(--line); background: rgba(255,255,255,.03); }
.nm-sk.on { border-color: var(--gold); background: var(--soft); }
.nm-sk b { display: block; font-size: 14px; } .nm-sk small { font-size: 11px; color: var(--muted); }
.nm-sk .sw { display: flex; gap: 4px; margin-top: 6px; } .nm-sk .sw i { width: 16px; height: 16px; border-radius: 50%; border: 1px solid rgba(255,255,255,.2); }
.nm-sk.auto { grid-column: 1 / -1; }
@media (prefers-reduced-motion: reduce) { .nm-lan, .nm-stars, .nm-jp::after, .nm-rays { animation: none !important; } }
