:root{--panel:rgba(255,255,255,.10);--line:rgba(255,255,255,.18);--muted:rgba(255,255,255,.72);--gold:#ffd76c;--good:#7cffb2;--bad:#ff8aa6}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;user-select:none}
html,body{margin:0;min-height:100%;font-family:-apple-system,BlinkMacSystemFont,"Hiragino Sans","Yu Gothic",sans-serif;color:#fff;background:linear-gradient(160deg,#2b3b23,#142011)}
body{padding:calc(10px + env(safe-area-inset-top)) 10px calc(16px + env(safe-area-inset-bottom));display:flex;justify-content:center}
.app{width:min(480px,100%)}
.screen{display:none;border:1px solid var(--line);border-radius:26px;background:var(--panel);backdrop-filter:blur(12px);overflow:hidden;box-shadow:0 20px 70px rgba(0,0,0,.35)}
.screen.active{display:block}
.pad{padding:14px}.topbar{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:10px}
button{font:inherit;color:inherit;touch-action:manipulation;cursor:pointer}
.btn,.mini,.cta{border:1px solid var(--line);background:rgba(255,255,255,.12);border-radius:16px;padding:11px 12px;font-weight:1000}
.btn:active,.mini:active,.cta:active{transform:scale(.98);background:rgba(255,255,255,.20)}
.cta{width:100%;font-size:18px;background:linear-gradient(180deg,#fff4aa,#ffcf45 55%,#ff9ecf);color:#3a2700;border:0;box-shadow:0 7px 0 rgba(94,61,0,.28),0 0 22px rgba(255,221,100,.25);border-radius:999px}
.logo{font-size:30px;text-align:center;font-weight:1000;color:#ffe277;text-shadow:0 4px 14px rgba(0,0,0,.28)}
.sub{text-align:center;color:var(--muted);font-weight:850;line-height:1.55;font-size:13px}
.titleBox{position:relative;border-radius:28px;overflow:hidden;border:2px solid rgba(255,255,255,.20);background:#26351f;margin-bottom:12px}
.titleBox img{display:block;width:100%;height:auto}
.hotStart{position:absolute;left:22%;right:22%;top:64%;height:8%;border:0;background:rgba(255,255,255,.01);border-radius:999px}
.titleBtns,.nav{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-top:12px}.titleBtns{padding:10px;border-radius:24px;background:linear-gradient(180deg,rgba(255,255,255,.16),rgba(255,255,255,.06));border:1px solid rgba(255,255,255,.18)}.titleBtns .btn{border:2px solid rgba(255,255,255,.42);box-shadow:0 6px 0 rgba(0,0,0,.18),0 0 16px rgba(255,255,255,.10);font-size:16px;text-shadow:0 2px 8px rgba(0,0,0,.24)}.titleBtns .btn:nth-child(1){background:linear-gradient(180deg,#ff8f77,#d94a45)}.titleBtns .btn:nth-child(2){background:linear-gradient(180deg,#78c8ff,#326ee7)}.titleBtns .btn:nth-child(3){background:linear-gradient(180deg,#a4ec79,#47aa47)}.titleBtns .btn:nth-child(4){background:linear-gradient(180deg,#d48cff,#8544df)}.titleBtns .btn:nth-child(5){background:linear-gradient(180deg,#ffd76c,#f09d2b);color:#4a2a00}.titleBtns .btn:nth-child(6){background:linear-gradient(180deg,#ffb1cf,#e25395)}
.currency{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:12px 0}.cur{border:1px solid var(--line);background:rgba(255,255,255,.10);border-radius:18px;padding:10px 12px;font-weight:1000;display:flex;justify-content:space-between}.cur small{display:block;font-size:10px;color:var(--muted)}
.section{border:1px solid var(--line);background:rgba(255,255,255,.09);border-radius:22px;padding:12px;margin-top:12px}.section h3{margin:0 0 10px;color:#ffe8a0;font-size:15px}
.scroll{display:flex;gap:10px;overflow-x:auto;padding-bottom:4px}.scroll::-webkit-scrollbar{display:none}
.stage-card,.leader-card,.card{border:1px solid var(--line);background:rgba(255,255,255,.11);border-radius:18px;padding:10px;position:relative}
.stage-card{min-width:158px}.stage-card.active,.leader-card.active,.card.selected{outline:3px solid var(--gold);background:rgba(255,215,108,.15)}
.name{font-weight:1000;color:#7cc7ff}.meta,.helper{font-size:11px;color:var(--muted);font-weight:850;line-height:1.45}.stars{font-size:16px;letter-spacing:1px;margin-top:7px;color:rgba(255,255,255,.25)}.stars .on{color:#ffd84e;text-shadow:0 0 10px rgba(255,216,78,.7)}.best{font-size:10px;font-weight:900;color:#fff7c3;margin-top:5px}
.leader-card{min-width:116px;text-align:center}.leader-card img{width:84px;height:84px;object-fit:contain;border-radius:18px;background:rgba(255,255,255,.08)}
.grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.card{text-align:center;padding:6px}.card img{width:100%;aspect-ratio:1/1;object-fit:contain;border-radius:16px;background:rgba(255,255,255,.07)}.card .name{font-size:11px;margin-top:4px;line-height:1.2}.badge{position:absolute;top:5px;right:5px;background:rgba(0,0,0,.50);border-radius:999px;padding:2px 6px;font-size:10px;font-weight:1000}.lv{left:5px;right:auto;background:rgba(255,255,255,.85);color:#55402c}.silhouette{filter:brightness(0) grayscale(1);opacity:.45}
.boardTop{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-bottom:10px}.stat{border:1px solid var(--line);border-radius:16px;background:rgba(255,255,255,.10);padding:8px;text-align:center;font-weight:1000}.stat small{display:block;font-size:10px;color:var(--muted)}
.bars{display:grid;gap:8px;margin-bottom:10px}.bar{height:18px;background:rgba(0,0,0,.25);border-radius:999px;overflow:hidden;border:1px solid var(--line)}.bar span{display:block;height:100%;width:100%;background:linear-gradient(90deg,#7cffb2,#ffe277,#ff8aa6)}
.board{display:grid;grid-template-columns:repeat(6,1fr);gap:5px;background:rgba(0,0,0,.15);padding:8px;border-radius:20px;border:1px solid var(--line);touch-action:none;position:relative}.cell{aspect-ratio:1/1;border:1px solid rgba(255,255,255,.16);border-radius:14px;background:rgba(255,255,255,.10);display:grid;place-items:center;overflow:hidden;touch-action:none;position:relative}.cell img{width:96%;height:96%;object-fit:contain;pointer-events:none}.cell.selected{outline:3px solid var(--gold);background:rgba(255,215,108,.24);transform:scale(.93);box-shadow:0 0 18px rgba(255,215,108,.35)}.cell.flash{outline:3px solid var(--gold)}.btn.modeActive{outline:3px solid var(--gold);background:rgba(255,215,108,.18);color:#fff5bf}#modeQuest,#modeEndless{border:2px solid rgba(255,255,255,.22)}
.resultHero{text-align:center;border:1px solid var(--line);background:rgba(255,255,255,.09);border-radius:22px;padding:16px}.resultStatus{font-size:34px;font-weight:1000;color:#ffe277}.resultScore{font-size:30px;font-weight:1000}.resultStars{font-size:34px;color:rgba(255,255,255,.25);margin:8px 0}.resultStars .on{color:#ffd84e;text-shadow:0 0 16px rgba(255,216,78,.8)}
.gachaOrb{width:190px;height:190px;border-radius:50%;margin:24px auto;background:radial-gradient(circle at 35% 30%,#fff8,#ff8ff5 25%,#8ad5ff 55%,#ffd76c 88%);box-shadow:0 0 35px rgba(255,255,255,.30)}
.skillOverlay{position:fixed;inset:0;z-index:1000;display:none;place-items:center;background:rgba(0,0,0,.35);padding:20px}.skillOverlay.show{display:grid}.skillCard{max-width:390px;width:100%;border-radius:26px;padding:16px;background:linear-gradient(135deg,rgba(34,22,73,.96),rgba(79,34,118,.92));border:2px solid rgba(255,255,255,.28);text-align:center}.skillCard img{width:180px;max-width:70%;height:auto;object-fit:contain}.skillTitle{font-size:24px;font-weight:1000;color:#ffe277}

.titlePad{padding:12px}
.imageStartBtn,.imageMenuBtn{display:block;border:0;background:transparent;padding:0;margin:0;touch-action:manipulation;cursor:pointer}
.imageStartBtn{width:100%;margin:12px auto 10px;filter:drop-shadow(0 8px 10px rgba(0,0,0,.22))}
.imageStartBtn img{display:block;width:100%;height:auto}
.titleImageBtns{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-top:8px;padding:10px;border-radius:24px;background:linear-gradient(180deg,rgba(255,255,255,.15),rgba(255,255,255,.05));border:1px solid rgba(255,255,255,.18)}
.imageMenuBtn{width:100%;filter:drop-shadow(0 6px 8px rgba(0,0,0,.22));transition:transform .08s ease, filter .08s ease}
.imageMenuBtn img{display:block;width:100%;height:auto;border-radius:18px}
.imageStartBtn:active,.imageMenuBtn:active{transform:scale(.97);filter:drop-shadow(0 3px 4px rgba(0,0,0,.20)) brightness(1.08)}
.titleBtns{display:none!important}
.hotStart{display:none!important}
@media(max-width:380px){.titleImageBtns{gap:7px;padding:8px}.titlePad{padding:10px}}


/* v20.8 redesign */
#titleScreen{max-height:100svh;overflow:hidden}
.titlePad{padding:10px 12px 14px}
.titleBox{max-height:50svh;display:flex;align-items:flex-start;justify-content:center;background:#21331f}
.titleBox>img{width:100%;height:100%;object-fit:cover;object-position:center top}
.logo{font-size:clamp(24px,6vw,32px);margin-top:8px}
.sub{font-size:12px}
.imageStartBtn{margin:8px auto 8px;max-width:94%}
.titleImageBtns{grid-template-columns:repeat(2,1fr);gap:7px;padding:8px}
.bossArea{display:grid;grid-template-columns:94px 1fr;gap:10px;align-items:center;margin:6px 0 10px;padding:10px;border-radius:20px;border:1px solid rgba(255,255,255,.18);background:linear-gradient(180deg,rgba(255,255,255,.13),rgba(255,255,255,.06))}
.bossPortraitWrap{width:94px;height:94px;border-radius:20px;background:rgba(255,255,255,.08);display:grid;place-items:center;overflow:hidden;border:1px solid rgba(255,255,255,.18)}
.bossPortraitWrap img{width:100%;height:100%;object-fit:contain}
.bossName{font-size:16px;font-weight:1000;color:#ffe8a0;margin-bottom:4px}
.battleBottom{position:sticky;bottom:0;z-index:5;margin-top:10px;padding:10px;border-radius:22px;border:1px solid rgba(255,255,255,.18);background:linear-gradient(180deg,rgba(44,62,39,.94),rgba(31,44,29,.98));display:grid;grid-template-columns:1fr 1fr;gap:10px}
.skillBig{grid-column:1/2;border:0;border-radius:18px;padding:14px 10px;background:linear-gradient(180deg,#fff0a0,#ffbb36 55%,#ff8fc8);color:#3a2700;font-weight:1000;box-shadow:0 6px 0 rgba(89,57,0,.32)}
.skillBig.ready{animation:pulseSkill .9s ease-in-out infinite alternate}
.shuffleBig{grid-column:2/3;border:1px solid rgba(255,255,255,.25);border-radius:18px;padding:14px 10px;background:rgba(255,255,255,.12);font-weight:1000}
.gaugeText{grid-column:1/3;text-align:center;font-size:12px;color:rgba(255,255,255,.82);font-weight:900}
@keyframes pulseSkill{from{filter:brightness(1)}to{filter:brightness(1.18);box-shadow:0 6px 0 rgba(89,57,0,.32),0 0 22px rgba(255,220,110,.62)}}
.skillCard{max-width:760px}
.skillCard img{width:100%;max-height:48vh;object-fit:contain;border-radius:18px}
.skillCard .skillTitle{font-size:clamp(26px,6vw,42px)}
.bossCutinOverlay{position:fixed;inset:0;z-index:1200;display:none;place-items:center;background:rgba(80,0,0,.42);padding:18px}
.bossCutinOverlay.show{display:grid;animation:bossFlash .9s ease forwards}
.bossCutinCard{max-width:480px;width:100%;border-radius:24px;background:rgba(30,10,10,.88);border:2px solid rgba(255,100,100,.65);box-shadow:0 20px 70px rgba(0,0,0,.45);text-align:center;padding:14px}
.bossCutinCard img{width:100%;max-height:55vh;object-fit:contain;border-radius:18px}
.bossCutinTitle{font-size:34px;font-weight:1000;color:#ffeb7a;text-shadow:0 3px 12px rgba(0,0,0,.45);margin-top:8px}
@keyframes bossFlash{0%{opacity:0;transform:scale(.94)}20%{opacity:1;transform:scale(1)}80%{opacity:1}100%{opacity:0;transform:scale(1.04)}}
#nextStageBtn{display:none!important}
#nextStageBtn.show{display:block!important}
.resultActions{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:12px}
.resultActions .wide{grid-column:1/3}
@media(max-height:780px){.titleBox{max-height:43svh}.imageStartBtn{margin-top:6px}.titleImageBtns{gap:6px}.logo{font-size:24px}.sub{display:none}}


/* v20.9 asset restore */
.assetHero{display:block;width:100%;border-radius:22px;border:1px solid rgba(255,255,255,.18);box-shadow:0 10px 28px rgba(0,0,0,.24);margin:8px 0 12px}
.tabs{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:8px 0 12px}
.tabs .active{outline:3px solid var(--gold);background:rgba(255,215,108,.18)}
.assetSheetRow{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}
.assetSheetRow img,.assetSheetSingle img{width:100%;border-radius:18px;border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.06)}
.missionCard2,.awakenCard,.itemCard2{display:grid;grid-template-columns:54px 1fr auto;gap:10px;align-items:center;border:1px solid rgba(255,255,255,.18);border-radius:18px;background:rgba(255,255,255,.09);padding:10px;margin-bottom:8px}
.missionIcon2,.itemIcon2{width:54px;height:54px;border-radius:16px;background:linear-gradient(180deg,rgba(255,255,255,.25),rgba(255,255,255,.08));display:grid;place-items:center;font-size:28px}
.progress2{height:10px;background:rgba(0,0,0,.25);border-radius:999px;overflow:hidden;margin-top:6px}
.progress2 span{display:block;height:100%;background:linear-gradient(90deg,#7cffb2,#ffe277,#ff9adb)}
.starImg{width:22px;height:22px;vertical-align:-4px;filter:drop-shadow(0 0 4px rgba(255,215,108,.45))}
.resultStars .starImg{width:42px;height:42px;margin:0 3px}
.stage-card .stars{display:flex;gap:2px;align-items:center}
.ratingPreview{display:block;width:100%;border-radius:18px;border:1px solid rgba(255,255,255,.15);margin-top:10px}
.awakenCard{grid-template-columns:82px 1fr}
.awakenCard img{width:82px;height:82px;object-fit:contain;border-radius:18px;background:rgba(255,255,255,.08)}
.itemCard2.selected{outline:3px solid var(--gold);background:rgba(255,215,108,.13)}
.itemCard2.unavailable{opacity:.55;filter:grayscale(.5)}
.itemSmall{font-size:11px;color:rgba(255,255,255,.72);font-weight:850;line-height:1.45}


/* v20.10 UI fix */
#titleScreen{max-height:none;overflow:visible}.titleBox{height:43svh;max-height:520px;min-height:320px;display:flex;align-items:center;justify-content:center;background:#21331f}.titleBox>img{width:100%;height:100%;object-fit:contain;object-position:center center}.imageStartBtn img{max-height:72px;object-fit:contain}.titleImageBtns{grid-template-columns:repeat(2,1fr);gap:7px;padding:8px;overflow:visible}.imageMenuBtn img{height:64px;object-fit:contain;border-radius:14px}@media(max-height:780px){.titleBox{height:38svh;min-height:260px}.imageMenuBtn img{height:54px}.imageStartBtn img{max-height:62px}}.resultRankImg{display:block;width:100%;max-width:420px;margin:12px auto;border-radius:22px;filter:drop-shadow(0 8px 18px rgba(0,0,0,.25))}#rewardText .ratingPreview{display:none!important}.awakenMiniCard{display:grid;grid-template-columns:92px 1fr;gap:12px;align-items:center;border:1px solid rgba(255,255,255,.18);background:rgba(255,255,255,.09);border-radius:22px;padding:12px;margin:10px 0}.awakenMiniCard .charIcon{width:92px;height:92px;border-radius:20px;background:rgba(255,255,255,.08);object-fit:contain}.awakenBadgeNow{width:72px;height:72px;object-fit:contain;vertical-align:middle;margin-right:8px}.awakenPreview{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin:10px 0}.awakenPreview div{border:1px solid rgba(255,255,255,.14);border-radius:16px;background:rgba(255,255,255,.07);padding:10px;text-align:center}.awakenSuccessOverlay{position:fixed;inset:0;z-index:1500;display:none;place-items:center;background:rgba(15,12,35,.72);padding:18px}.awakenSuccessOverlay.show{display:grid;animation:fadeAw .95s ease forwards}.awakenSuccessCard{width:min(460px,95vw);border-radius:28px;background:linear-gradient(180deg,rgba(255,235,135,.96),rgba(255,142,220,.96));border:3px solid rgba(255,255,255,.85);box-shadow:0 20px 80px rgba(0,0,0,.48);padding:18px;text-align:center;color:#432000}.awakenSuccessCard img{width:130px;height:130px;object-fit:contain}.awakenSuccessCard .big{font-size:34px;font-weight:1000}@keyframes fadeAw{0%{opacity:0;transform:scale(.92)}20%{opacity:1;transform:scale(1)}80%{opacity:1}100%{opacity:0;transform:scale(1.05)}}.itemCard2{grid-template-columns:76px 1fr auto}.itemIconImg{width:76px;height:76px;object-fit:contain;border-radius:18px;background:rgba(255,255,255,.08)}.itemHeroNote{border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.08);border-radius:18px;padding:10px;margin:8px 0 12px}#itemScreen .assetSheetSingle{display:none}#awakenScreen .assetSheetRow,#awakenScreen .ratingPreview{display:none}


/* v21 boss support */
.bossSupportGrid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-top:10px}
.bossSupportCard{position:relative;border:1px solid rgba(255,255,255,.16);border-radius:22px;background:rgba(255,255,255,.08);padding:10px;overflow:hidden;text-align:left;color:#fff;min-height:245px}
.bossSupportCard.selected{outline:3px solid var(--gold);background:rgba(255,215,108,.14)}
.bossSupportCard.locked{opacity:.62;filter:grayscale(.6)}
.bossFrameBox{position:relative;height:132px;display:grid;place-items:center;margin-bottom:6px}
.bossFrameBg{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;pointer-events:none}
.bossSupportBoss{position:relative;z-index:2;width:84px;height:84px;object-fit:contain;filter:drop-shadow(0 6px 8px rgba(0,0,0,.35))}
.bossSupportName{font-weight:1000;color:#ffe277;font-size:14px;line-height:1.25;margin-top:2px}
.bossSupportDesc{font-size:11px;color:rgba(255,255,255,.78);line-height:1.45;margin-top:4px;min-height:32px}
.bossSupportIcons{display:flex;gap:5px;margin-top:6px;align-items:center;flex-wrap:wrap}
.bossSupportIcons img{width:28px;height:28px;object-fit:contain;filter:drop-shadow(0 2px 4px rgba(0,0,0,.28))}
.supportBadge{position:absolute;right:8px;top:8px;border-radius:999px;background:rgba(0,0,0,.38);border:1px solid rgba(255,255,255,.2);padding:3px 7px;font-size:10px;font-weight:1000}
.supportEffectLine{display:flex;align-items:center;gap:6px;margin-top:6px;font-size:12px;color:#dfffe9;font-weight:800}
.supportEffectLine img{width:30px;height:30px;object-fit:contain}
.bossSupportUnlockOverlay{position:fixed;inset:0;z-index:1900;display:none;place-items:center;background:rgba(15,7,30,.74);padding:16px}
.bossSupportUnlockOverlay.show{display:grid;animation:supportUnlockFade 1.55s ease forwards}
.supportUnlockCard{width:min(760px,96vw);text-align:center}
.supportUnlockCard .unlockBanner{width:100%;border-radius:26px;box-shadow:0 22px 85px rgba(0,0,0,.5);border:2px solid rgba(255,230,140,.55)}
.supportUnlockBoss{margin:-38px auto 0;width:118px;height:118px;border-radius:50%;background:rgba(255,255,255,.15);border:3px solid rgba(255,230,140,.9);display:grid;place-items:center;box-shadow:0 12px 36px rgba(0,0,0,.4)}
.supportUnlockBoss img{width:105px;height:105px;object-fit:contain}
.supportUnlockName{font-size:24px;font-weight:1000;color:#ffe277;text-shadow:0 3px 12px rgba(0,0,0,.5);margin-top:8px}
@keyframes supportUnlockFade{0%{opacity:0;transform:scale(.94)}15%{opacity:1;transform:scale(1)}82%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(1.03)}}
.bossDexSupport{border-top:1px solid rgba(255,255,255,.12);margin-top:6px;padding-top:6px;font-size:11px;color:#dfffe9;line-height:1.4}
#bossSupportText b{color:#ffe277}
@media(max-width:380px){.bossSupportGrid{gap:8px}.bossSupportCard{padding:8px;min-height:235px}.bossFrameBox{height:116px}.bossSupportBoss{width:76px;height:76px}}


/* v21.1 compact boss support + gravity puzzle */
.bossSupportGrid{
  display:grid!important;
  grid-template-columns:repeat(2,1fr)!important;
  gap:8px!important;
  margin-top:8px!important;
}
.bossSupportCard{
  min-height:150px!important;
  padding:8px!important;
  border-radius:18px!important;
}
.bossSupportCard.selected{
  outline:3px solid var(--gold)!important;
  box-shadow:0 0 18px rgba(255,215,108,.32)!important;
}
.bossFrameBox{
  height:78px!important;
  margin-bottom:3px!important;
}
.bossFrameBg{
  width:100%!important;
  height:100%!important;
  object-fit:contain!important;
}
.bossSupportBoss{
  width:58px!important;
  height:58px!important;
}
.bossSupportName{
  font-size:12px!important;
  line-height:1.22!important;
  margin-top:0!important;
}
.bossSupportDesc{
  font-size:10px!important;
  line-height:1.28!important;
  min-height:0!important;
  max-height:28px!important;
  overflow:hidden!important;
  margin-top:2px!important;
}
.bossSupportIcons{gap:4px!important;margin-top:5px!important}
.bossSupportIcons img{width:24px!important;height:24px!important}
.supportBadge{top:6px!important;right:6px!important;font-size:10px!important;padding:2px 6px!important}
.bossDexSupport{font-size:10px!important}

.cell.removing{
  animation:popRemove .14s ease forwards;
}
.cell.spawn{
  animation:spawnDrop .18s ease both;
}
@keyframes popRemove{
  0%{transform:scale(1);opacity:1}
  100%{transform:scale(.2);opacity:0}
}
@keyframes spawnDrop{
  0%{transform:translateY(-22px) scale(.85);opacity:0}
  100%{transform:translateY(0) scale(1);opacity:1}
}
.comboPopup{
  position:fixed;
  left:50%;
  top:42%;
  transform:translate(-50%,-50%);
  z-index:1700;
  font-size:38px;
  font-weight:1000;
  color:#ffe277;
  text-shadow:0 4px 18px rgba(0,0,0,.55);
  pointer-events:none;
  opacity:0;
}
.comboPopup.show{
  animation:comboPop .72s ease forwards;
}
@keyframes comboPop{
  0%{opacity:0;transform:translate(-50%,-50%) scale(.72)}
  20%{opacity:1;transform:translate(-50%,-50%) scale(1.15)}
  100%{opacity:0;transform:translate(-50%,-74%) scale(1)}
}
@media(max-width:380px){
  .bossSupportCard{min-height:140px!important;padding:7px!important}
  .bossFrameBox{height:70px!important}
  .bossSupportBoss{width:52px!important;height:52px!important}
}


/* v21.2 paced effects */
.cell{transition:transform .18s ease, opacity .18s ease, filter .18s ease}
.cell.removing{
  animation:popRemoveSlow .36s ease forwards!important;
  z-index:3;
}
.cell.spawn{
  animation:spawnDropSlow .28s ease both!important;
}
@keyframes popRemoveSlow{
  0%{transform:scale(1);opacity:1;filter:brightness(1.2)}
  45%{transform:scale(1.12);opacity:1;filter:brightness(1.7)}
  100%{transform:scale(.18);opacity:0;filter:brightness(2)}
}
@keyframes spawnDropSlow{
  0%{transform:translateY(-30px) scale(.82);opacity:0}
  100%{transform:translateY(0) scale(1);opacity:1}
}
.comboPopup.show{
  animation:comboPop .95s ease forwards!important;
}
.skillOverlay.show,.bossCutinOverlay.show{
  pointer-events:auto;
}

/* v22.1 stable gravity: only changed cells animate */
.cell.spawn{
  animation:spawnDropStable .24s ease both!important;
}
@keyframes spawnDropStable{
  0%{transform:translateY(-26px) scale(.86);opacity:0}
  100%{transform:translateY(0) scale(1);opacity:1}
}
.cell.fell{
  animation:fallSettleStable .18s ease both;
}
@keyframes fallSettleStable{
  0%{transform:translateY(-10px)}
  100%{transform:translateY(0)}
}


/* v22.2 UI cleanup: previous button assets + compact support */
.logo,
.sub,
.titleTextRemoved {
  display: none !important;
}
.titlePad {
  gap: 8px !important;
}
.titleBox {
  margin-bottom: 4px !important;
}
.titleBox img {
  object-fit: contain !important;
}
.textStartBtn {
  min-height: 60px !important;
  border-radius: 18px !important;
  background: linear-gradient(180deg,#fff4a7,#ff9acb) !important;
  border: 3px solid rgba(255,226,119,.95) !important;
  box-shadow: 0 8px 0 rgba(138,82,0,.42), 0 14px 28px rgba(0,0,0,.22) !important;
  color: #5a3512 !important;
  font-size: 22px !important;
  font-weight: 1000 !important;
  text-shadow: 0 2px 0 rgba(255,255,255,.62) !important;
}
.textStartBtn span {
  display: block;
}
.titleImageBtns {
  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  gap: 10px 12px !important;
  padding: 10px !important;
}
.imageMenuBtn {
  background: transparent !important;
  border: 0 !important;
  box-shadow: none !important;
  padding: 0 !important;
  min-height: 78px !important;
  display: grid !important;
  place-items: center !important;
}
.imageMenuBtn img {
  width: 100% !important;
  max-width: 285px !important;
  height: auto !important;
  object-fit: contain !important;
  filter: drop-shadow(0 7px 10px rgba(0,0,0,.34)) !important;
}
.ratingPreview {
  display: none !important;
}
.compactHelpBtn {
  margin-top: 8px !important;
  min-height: 42px !important;
  font-size: 13px !important;
}
.ratingHelpPageImg {
  width: 100% !important;
  max-width: 720px !important;
  display: block !important;
  margin: 12px auto 0 !important;
  border-radius: 22px !important;
  box-shadow: 0 16px 34px rgba(0,0,0,.3) !important;
}

/* support now behaves as small sub-panel under character selection */
.bossSupportGrid {
  grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
  gap: 7px !important;
  margin-top: 8px !important;
}
.bossSupportCard {
  min-height: 112px !important;
  padding: 6px !important;
  border-radius: 15px !important;
}
.bossFrameBox {
  height: 54px !important;
  margin-bottom: 1px !important;
}
.bossSupportBoss {
  width: 40px !important;
  height: 40px !important;
}
.bossSupportName {
  font-size: 10px !important;
  line-height: 1.1 !important;
}
.bossSupportDesc {
  font-size: 8.5px !important;
  line-height: 1.15 !important;
  min-height: 0 !important;
  max-height: 22px !important;
  overflow: hidden !important;
}
.bossSupportIcons {
  gap: 3px !important;
  margin-top: 3px !important;
}
.bossSupportIcons img {
  width: 18px !important;
  height: 18px !important;
}
.supportBadge {
  top: 4px !important;
  right: 4px !important;
  font-size: 8px !important;
  padding: 1px 5px !important;
}
#bossSupportText {
  font-size: 12px !important;
  line-height: 1.35 !important;
}
@media(max-width:520px) {
  .titleImageBtns {
    gap: 7px !important;
    padding: 8px !important;
  }
  .imageMenuBtn {
    min-height: 64px !important;
  }
  .imageMenuBtn img {
    max-width: 235px !important;
  }
  .textStartBtn {
    min-height: 54px !important;
    font-size: 19px !important;
  }
  .bossSupportGrid {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  }
}


/* v22.3 high score */
.titleHighScoreBtn{
  width:min(360px,92%);
  margin:10px auto 0;
  min-height:46px!important;
  border-radius:999px!important;
  font-weight:1000!important;
}
.resultHighScoreBox{
  margin-top:10px;
  padding:10px;
  border-radius:16px;
  background:rgba(255,255,255,.10);
  border:1px solid rgba(255,255,255,.16);
  font-weight:900;
  color:#ffe277;
}
.resultHighScoreBox .newRecord{
  color:#fff;
  display:inline-block;
  background:linear-gradient(135deg,#ff69b4,#ffd76c);
  border-radius:999px;
  padding:4px 9px;
  margin:2px 4px 4px 0;
  box-shadow:0 4px 14px rgba(255,105,180,.32);
}
.highScoreStats{
  display:grid;
  grid-template-columns:repeat(2,1fr);
  gap:8px;
  margin-top:10px;
}
.highScoreStat{
  border-radius:18px;
  padding:12px;
  background:rgba(255,255,255,.10);
  border:1px solid rgba(255,255,255,.16);
  box-shadow:0 8px 22px rgba(0,0,0,.16);
}
.highScoreStat small{
  display:block;
  color:rgba(255,255,255,.72);
  font-size:11px;
  font-weight:900;
}
.highScoreStat b{
  display:block;
  color:#ffe277;
  font-size:20px;
  margin-top:4px;
}
.highScoreList{
  display:grid;
  gap:9px;
  margin-top:10px;
}
.highScoreStage{
  display:grid;
  grid-template-columns:42px 1fr auto;
  gap:9px;
  align-items:center;
  border-radius:18px;
  padding:10px;
  background:rgba(255,255,255,.09);
  border:1px solid rgba(255,255,255,.15);
}
.highScoreStage .stageIcon{
  width:42px;height:42px;border-radius:14px;
  display:grid;place-items:center;
  background:rgba(255,255,255,.12);
  font-size:24px;
}
.highScoreStage .stageName{font-weight:1000;color:#fff;font-size:14px;}
.highScoreStage .stageMeta{font-size:11px;color:rgba(255,255,255,.72);line-height:1.35;margin-top:2px;}
.highScoreStage .stageScore{text-align:right;font-weight:1000;color:#ffe277;font-size:14px;}
.highScoreStage .stageRank{font-size:10px;color:#fff;background:rgba(0,0,0,.32);border-radius:999px;padding:2px 7px;display:inline-block;margin-top:4px;}
@media(max-width:420px){.highScoreStats{grid-template-columns:1fr 1fr}.highScoreStat b{font-size:17px}.highScoreStage{grid-template-columns:36px 1fr}.highScoreStage .stageScore{grid-column:2;text-align:left}.highScoreStage .stageIcon{width:36px;height:36px;font-size:21px}}


/* v22.3.1 highscore UI */
.highscoreHeroImg{
  margin: 6px auto 12px;
  text-align:center;
}
.highscoreHeroImg img{
  width:100%;
  max-width:780px;
  border-radius:24px;
  box-shadow:0 16px 42px rgba(0,0,0,.35);
  border:1px solid rgba(255,255,255,.20);
}
.recordGrid,.modeRecordGrid{
  display:grid;
  grid-template-columns:repeat(2,1fr);
  gap:10px;
}
.recordCard{
  display:grid;
  grid-template-columns:50px 1fr;
  gap:9px;
  align-items:center;
  min-height:74px;
  padding:10px;
  border-radius:18px;
  background:rgba(255,255,255,.09);
  border:1px solid rgba(255,255,255,.16);
}
.recordCard img{
  width:48px;
  height:48px;
  object-fit:contain;
  filter:drop-shadow(0 4px 6px rgba(0,0,0,.28));
}
.recordLabel{
  font-size:11px;
  color:rgba(255,255,255,.74);
  font-weight:900;
}
.recordValue{
  font-size:18px;
  color:#ffe277;
  font-weight:1000;
  line-height:1.1;
}
.stageRecordList{
  display:grid;
  gap:10px;
}
.stageRecordCard{
  display:grid;
  grid-template-columns:58px 1fr;
  gap:10px;
  align-items:center;
  border-radius:18px;
  padding:10px;
  background:rgba(255,255,255,.08);
  border:1px solid rgba(255,255,255,.15);
}
.stageRecordCard.perfect{
  border-color:rgba(255,215,108,.78);
  box-shadow:0 0 20px rgba(255,215,108,.22);
}
.stageRecordIcon img{
  width:56px;
  height:56px;
  object-fit:contain;
  filter:drop-shadow(0 4px 7px rgba(0,0,0,.28));
}
.stageRecordName{
  font-size:14px;
  color:#ffe277;
  font-weight:1000;
}
.stageRecordBest{
  font-size:16px;
  color:#fff;
  font-weight:1000;
}
.stageRecordRank{
  font-size:12px;
  color:#dfffe9;
  font-weight:900;
}
.stageRecordBoss{
  font-size:11px;
  color:rgba(255,255,255,.72);
}
.newRecordBox{
  display:none;
  text-align:center;
  margin:10px 0;
}
.newRecordBox.show{
  display:block;
  animation:newRecordPop .85s ease both;
}
.newRecordBox img{
  width:100%;
  max-width:560px;
  border-radius:20px;
  box-shadow:0 12px 32px rgba(0,0,0,.36);
}
#newRecordText{
  margin-top:6px;
  font-size:16px;
  font-weight:1000;
  color:#ffe277;
}
@keyframes newRecordPop{
  0%{opacity:0;transform:scale(.88) translateY(8px)}
  40%{opacity:1;transform:scale(1.04) translateY(0)}
  100%{opacity:1;transform:scale(1)}
}
.resultHighScoreBox .newRecord{
  display:none;
}
.titleHighScoreBtn{
  min-height:54px!important;
  border-radius:18px!important;
  background:linear-gradient(180deg,#fff1a6,#f4ad37)!important;
  color:#5a2d03!important;
  font-weight:1000!important;
  box-shadow:0 8px 20px rgba(0,0,0,.25)!important;
}
@media(max-width:520px){
  .recordGrid,.modeRecordGrid{grid-template-columns:1fr}
  .recordCard{min-height:66px}
  .recordValue{font-size:16px}
}

/* v22.4 login bonus / present box / player rank */
.playerRankMini,.playerRankPanel,.playerExpResult{
  border-radius:18px;
  padding:10px;
  background:rgba(255,255,255,.09);
  border:1px solid rgba(255,255,255,.16);
  margin-top:8px;
}
.playerRankMini{max-width:420px;margin:8px auto 0}
.rankTitle{color:#ffe277;font-size:13px;font-weight:1000}
.rankExpText{color:rgba(255,255,255,.76);font-size:11px;font-weight:800}
.rankBar{height:8px;border-radius:99px;background:rgba(0,0,0,.28);overflow:hidden;margin-top:6px}
.rankBar span{display:block;height:100%;width:0%;background:linear-gradient(90deg,#ffe277,#ff8fd4)}

.heroBannerWrap{margin:4px auto 12px}
.heroBannerImage{display:block;width:min(100%,720px);margin:0 auto;height:auto;filter:drop-shadow(0 16px 32px rgba(0,0,0,.28))}
.loginStatusRow{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;margin:0 0 12px}
.loginStatPill{padding:10px 14px;border-radius:999px;background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.18);color:#fff;font-weight:900;font-size:13px;box-shadow:0 10px 24px rgba(0,0,0,.18)}
.todayRewardCard{
  display:grid;
  grid-template-columns:minmax(124px,160px) 1fr;
  gap:14px;
  align-items:center;
  border-radius:24px;
  padding:16px;
  background:linear-gradient(180deg, rgba(255,255,255,.12), rgba(255,255,255,.06));
  border:1px solid rgba(255,255,255,.20);
  box-shadow:0 16px 32px rgba(0,0,0,.20);
}
.todayRewardCard.special{border-color:rgba(255,215,108,.9);box-shadow:0 0 24px rgba(255,215,108,.24), 0 18px 36px rgba(0,0,0,.20)}
.todayFrameWrap,.dailyFrameWrap{position:relative}
.todayFrame{display:block;width:100%;height:auto;filter:drop-shadow(0 10px 18px rgba(0,0,0,.22))}
.todayRewardIcon{position:absolute;left:50%;top:46%;transform:translate(-50%,-50%);width:42%;height:auto;object-fit:contain;filter:drop-shadow(0 8px 12px rgba(0,0,0,.28))}
.todayRewardMeta{display:flex;flex-direction:column;gap:6px}
.todayRewardTitle{color:#ffe277;font-size:15px;font-weight:1000;letter-spacing:.03em}
.todayRewardLabel{color:#fff;font-size:21px;font-weight:1000;line-height:1.25}
.todayRewardDesc{color:rgba(255,255,255,.82);font-size:12px;font-weight:800}
.todayRewardState{font-size:12px;color:rgba(255,255,255,.82);font-weight:900;margin-top:4px}
.dailyRewardGrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.dailyRewardCard{
  min-height:194px;
  border-radius:20px;
  padding:8px 8px 10px;
  text-align:center;
  background:linear-gradient(180deg, rgba(255,255,255,.10), rgba(255,255,255,.05));
  border:1px solid rgba(255,255,255,.14);
  box-shadow:0 10px 24px rgba(0,0,0,.16);
}
.dailyRewardCard.today{border-color:#ffe277;box-shadow:0 0 18px rgba(255,215,108,.28), 0 10px 24px rgba(0,0,0,.16)}
.dailyRewardCard.claimed{opacity:.72;filter:grayscale(.18)}
.dailyRewardCard.special{background:linear-gradient(180deg, rgba(255,225,120,.20), rgba(255,130,80,.10))}
.dailyFrame{display:block;width:100%;height:auto}
.dailyRewardIcon{position:absolute;left:50%;top:44%;transform:translate(-50%,-50%);width:36%;height:auto;object-fit:contain;filter:drop-shadow(0 8px 10px rgba(0,0,0,.24))}
.dailyRewardChip{margin-top:6px;font-size:12px;font-weight:1000;color:#ffe277}
.dailyRewardLabel{font-size:11px;color:rgba(255,255,255,.82);line-height:1.35;font-weight:800;margin-top:3px}
.dailyRewardStateBadge{display:inline-block;margin-top:6px;padding:4px 8px;border-radius:999px;font-size:10px;font-weight:1000;background:rgba(255,255,255,.12);color:#fff}
.dailyRewardCard.today .dailyRewardStateBadge{background:rgba(255,226,119,.24);color:#ffe277}
.presentList{display:grid;gap:12px}
.presentCard{
  display:grid;
  grid-template-columns:74px 1fr auto;
  gap:12px;
  align-items:center;
  padding:12px;
  border-radius:18px;
  background:linear-gradient(180deg, rgba(255,255,255,.11), rgba(255,255,255,.06));
  border:1px solid rgba(255,255,255,.16);
  box-shadow:0 12px 26px rgba(0,0,0,.18);
}
.presentIcon{width:72px;height:72px;object-fit:contain;filter:drop-shadow(0 8px 10px rgba(0,0,0,.22))}
.presentTitle{color:#ffe277;font-size:15px;font-weight:1000}
.presentDesc{color:rgba(255,255,255,.74);font-size:11px;line-height:1.4}
.presentReward{color:#fff;font-size:13px;font-weight:900;margin-top:4px}
.presentDate{color:rgba(255,255,255,.54);font-size:10px;margin-top:4px}
.emptyPresent{padding:18px;text-align:center;border-radius:20px;background:rgba(255,255,255,.08);color:rgba(255,255,255,.72)}
.rewardGetOverlay,.rankUpOverlay{
  position:fixed;
  inset:0;
  z-index:2100;
  display:none;
  place-items:center;
  background:rgba(15,7,30,.72);
  padding:16px;
}
.rewardGetOverlay.show,.rankUpOverlay.show{display:grid;animation:rewardFade 1.15s ease forwards}
.rewardGetCard,.rankUpCard{
  width:min(680px,94vw);
  text-align:center;
  border-radius:30px;
  padding:16px 18px 20px;
  background:linear-gradient(180deg, rgba(255,226,119,.22), rgba(255,110,180,.14));
  border:2px solid rgba(255,215,108,.75);
  box-shadow:0 28px 88px rgba(0,0,0,.5);
}
.overlayBanner{display:block;width:min(100%,620px);margin:0 auto 10px;height:auto;filter:drop-shadow(0 12px 24px rgba(0,0,0,.22))}
.rewardGetIcon{width:116px;height:116px;object-fit:contain;filter:drop-shadow(0 8px 12px rgba(0,0,0,.26))}
.rewardGetTitle,.rankUpTitle{font-size:28px;color:#ffe277;font-weight:1000}
.rewardGetDesc,.rankUpDesc{font-size:14px;color:#fff;font-weight:900;margin-top:6px;line-height:1.5}
.rankUpLevel{font-size:22px;color:#fff;font-weight:1000}
.rankUpSub{font-size:13px;color:rgba(255,255,255,.84);font-weight:900;margin-top:8px}
@keyframes rewardFade{
  0%{opacity:0;transform:scale(.90)}
  18%{opacity:1;transform:scale(1.04)}
  78%{opacity:1;transform:scale(1)}
  100%{opacity:0;transform:scale(1.04)}
}
@media(max-width:700px){
  .dailyRewardGrid{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media(max-width:520px){
  .todayRewardCard{grid-template-columns:1fr;justify-items:center;text-align:center}
  .todayFrameWrap{width:min(54vw,220px)}
  .todayRewardMeta{align-items:center}
  .dailyRewardGrid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .presentCard{grid-template-columns:60px 1fr;gap:8px}
  .presentCard .mini{grid-column:1 / -1}
  .presentIcon{width:58px;height:58px}
  .loginStatusRow{gap:8px}
  .loginStatPill{font-size:12px;padding:8px 12px}
}


/* v22.5 item drop result UI */
.resultDropBox{
  display:none;
  margin-top:12px;
  padding:12px;
  border-radius:20px;
  background:linear-gradient(180deg,rgba(255,255,255,.12),rgba(255,255,255,.06));
  border:1px solid rgba(255,255,255,.18);
  box-shadow:0 12px 26px rgba(0,0,0,.18);
}
.resultDropBox.show{display:block;animation:dropBoxPop .35s ease both}
.dropTitle{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:8px;
  color:#ffe277;
  font-size:15px;
  font-weight:1000;
  margin-bottom:8px;
}
.dropSub{
  color:rgba(255,255,255,.72);
  font-size:11px;
  font-weight:800;
}
.dropGrid{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:8px;
}
.dropCard{
  position:relative;
  display:grid;
  grid-template-columns:54px 1fr;
  gap:8px;
  align-items:center;
  min-height:68px;
  padding:8px;
  border-radius:16px;
  background:rgba(255,255,255,.09);
  border:1px solid rgba(255,255,255,.16);
  overflow:hidden;
}
.dropCard.rare{
  border-color:rgba(130,210,255,.65);
  box-shadow:0 0 18px rgba(130,210,255,.18);
}
.dropCard.sr{
  border-color:rgba(255,215,108,.85);
  box-shadow:0 0 22px rgba(255,215,108,.24);
}
.dropCard img{
  width:52px;
  height:52px;
  object-fit:contain;
  filter:drop-shadow(0 6px 8px rgba(0,0,0,.25));
}
.dropName{
  color:#fff;
  font-size:13px;
  font-weight:1000;
  line-height:1.25;
}
.dropAmount{
  color:#ffe277;
  font-size:15px;
  font-weight:1000;
}
.dropRarity{
  display:inline-block;
  margin-top:3px;
  padding:2px 7px;
  border-radius:999px;
  font-size:10px;
  font-weight:1000;
  background:rgba(255,255,255,.12);
  color:rgba(255,255,255,.85);
}
.dropCard.rare .dropRarity{color:#9ee6ff;background:rgba(130,210,255,.16)}
.dropCard.sr .dropRarity{color:#ffe277;background:rgba(255,215,108,.18)}
.dropEmpty{
  padding:10px;
  border-radius:16px;
  background:rgba(255,255,255,.07);
  color:rgba(255,255,255,.72);
  font-weight:800;
  text-align:center;
  font-size:12px;
}
@keyframes dropBoxPop{
  from{opacity:0;transform:translateY(8px) scale(.98)}
  to{opacity:1;transform:translateY(0) scale(1)}
}
@media(max-width:520px){
  .dropGrid{grid-template-columns:1fr}
}

/* v22.6 difficulty / boss attack / notification */
.difficultyGrid{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:8px;
}
.difficultyBtn{
  position:relative;
  border:1px solid rgba(255,255,255,.16);
  background:rgba(255,255,255,.08);
  color:#fff;
  border-radius:18px;
  padding:10px;
  text-align:left;
  font-weight:900;
  box-shadow:0 8px 20px rgba(0,0,0,.16);
}
.difficultyBtn.active{
  border-color:#ffe277;
  box-shadow:0 0 18px rgba(255,226,119,.25), 0 8px 20px rgba(0,0,0,.16);
  background:linear-gradient(180deg,rgba(255,226,119,.18),rgba(255,255,255,.08));
}
.diffName{font-size:15px;color:#ffe277;font-weight:1000}
.diffMeta{font-size:12px;color:#fff;margin-top:2px}
.diffDesc{font-size:10px;color:rgba(255,255,255,.70);margin-top:4px;line-height:1.35}
.bossAttackCounter{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  margin:6px 0 5px;
  padding:6px 10px;
  min-width:118px;
  border-radius:999px;
  background:rgba(255,226,119,.16);
  color:#ffe277;
  border:1px solid rgba(255,226,119,.38);
  font-size:12px;
  font-weight:1000;
  box-shadow:0 8px 18px rgba(0,0,0,.14);
}
.bossAttackCounter.danger{
  background:rgba(255,80,80,.18);
  color:#ffb0b0;
  border-color:rgba(255,80,80,.55);
  animation:counterPulse .8s infinite;
}
.bossAttackCounter.attack{
  background:rgba(255,40,40,.24);
  color:#fff;
  border-color:rgba(255,80,80,.78);
}
@keyframes counterPulse{
  0%,100%{transform:scale(1)}
  50%{transform:scale(1.045)}
}
.damageFlash{
  position:fixed;
  inset:0;
  pointer-events:none;
  background:rgba(255,40,40,0);
  z-index:2200;
}
.damageFlash.show{animation:damageFlashAnim .45s ease}
@keyframes damageFlashAnim{
  0%{background:rgba(255,40,40,0)}
  25%{background:rgba(255,40,40,.38)}
  100%{background:rgba(255,40,40,0)}
}
.damagePopup{
  position:fixed;
  left:50%;
  top:34%;
  transform:translate(-50%,-50%);
  pointer-events:none;
  z-index:2250;
  font-size:34px;
  font-weight:1000;
  color:#ff6464;
  text-shadow:0 4px 0 #4a0000,0 0 18px rgba(255,0,0,.55);
  opacity:0;
}
.damagePopup.show{animation:damagePopupAnim .78s ease}
@keyframes damagePopupAnim{
  0%{opacity:0;transform:translate(-50%,-50%) scale(.7)}
  20%{opacity:1;transform:translate(-50%,-50%) scale(1.14)}
  100%{opacity:0;transform:translate(-50%,-78%) scale(1)}
}
.hpDamageShake{animation:hpDamageShake .42s ease}
@keyframes hpDamageShake{
  0%,100%{transform:translateX(0)}
  20%{transform:translateX(-8px)}
  40%{transform:translateX(7px)}
  60%{transform:translateX(-5px)}
  80%{transform:translateX(4px)}
}
.notifyBadge{
  position:absolute;
  right:-5px;
  top:-6px;
  min-width:20px;
  height:20px;
  padding:0 5px;
  border-radius:999px;
  display:flex;
  align-items:center;
  justify-content:center;
  font-size:11px;
  font-weight:1000;
  color:#fff;
  background:#ff3358;
  border:2px solid #fff;
  box-shadow:0 4px 12px rgba(0,0,0,.28);
  z-index:5;
}
.btn,.imageMenuBtn,.imageStartBtn,.mini,.cta{position:relative}
.missionClaimAllBtn{margin:10px 0 12px}
.endlessResultBadge{
  display:inline-block;
  margin:8px auto 6px;
  padding:8px 16px;
  border-radius:999px;
  background:linear-gradient(90deg,rgba(255,126,70,.22),rgba(255,226,119,.20));
  border:1px solid rgba(255,226,119,.48);
  color:#ffe277;
  font-weight:1000;
}
.dropCard img,.itemIconImg{
  background:rgba(255,255,255,.08);
  border-radius:14px;
}
@media(max-width:520px){
  .difficultyGrid{grid-template-columns:1fr}
  .bossAttackCounter{font-size:11px;min-width:96px;padding:5px 8px}
  .damagePopup{font-size:28px}
}


/* v22.6.1 skill ready UX */
.skillBig{
  position:relative;
  overflow:visible;
  transition:transform .18s ease, box-shadow .18s ease, filter .18s ease;
  isolation:isolate;
}
.skillBig.skill-near{
  box-shadow:
    0 6px 0 rgba(89,57,0,.32),
    0 0 10px rgba(255,226,119,.35),
    0 0 22px rgba(255,226,119,.18);
  filter:brightness(1.08);
}
.skillBig.skill-ready{
  animation:skillReadyPulse 1.25s ease-in-out infinite;
  box-shadow:
    0 6px 0 rgba(89,57,0,.32),
    0 0 14px rgba(255,226,119,.85),
    0 0 32px rgba(255,178,80,.55),
    0 0 52px rgba(255,130,220,.28);
  filter:brightness(1.2) saturate(1.18);
}
.skillBig.skill-using{
  transform:scale(.96);
  filter:brightness(.95);
}
.skillBig.skill-ready-burst{
  animation:skillReadyBurst .48s ease both;
}
.skillReadyLabel{
  position:absolute;
  left:50%;
  top:-18px;
  transform:translateX(-50%) scale(.85);
  padding:3px 9px;
  border-radius:999px;
  background:linear-gradient(180deg,#fff7b8,#ffb83d);
  color:#4b2700;
  font-size:11px;
  font-weight:1000;
  letter-spacing:.04em;
  border:2px solid #fff;
  box-shadow:0 4px 12px rgba(0,0,0,.25),0 0 18px rgba(255,226,119,.7);
  opacity:0;
  pointer-events:none;
  z-index:4;
  white-space:nowrap;
}
.skillBig.skill-ready .skillReadyLabel{
  opacity:1;
  animation:skillReadyLabelPop 1.25s ease-in-out infinite;
}
.skillSparkle{
  position:absolute;
  width:8px;
  height:8px;
  border-radius:50%;
  background:#fff6a8;
  box-shadow:
    0 0 8px rgba(255,246,168,.95),
    0 0 14px rgba(255,200,70,.65);
  opacity:0;
  pointer-events:none;
  z-index:3;
}
.skillSparkle:after{
  content:"";
  position:absolute;
  left:50%;
  top:50%;
  width:16px;
  height:2px;
  transform:translate(-50%,-50%);
  background:rgba(255,255,210,.8);
  border-radius:99px;
}
.skillSparkle.s1{left:10%;top:18%}
.skillSparkle.s2{right:12%;top:22%}
.skillSparkle.s3{left:48%;bottom:12%}
.skillBig.skill-near .skillSparkle.s1{
  animation:skillSparkleFloat 1.7s ease-in-out infinite;
}
.skillBig.skill-ready .skillSparkle.s1{
  animation:skillSparkleFloat 1.4s ease-in-out infinite;
}
.skillBig.skill-ready .skillSparkle.s2{
  animation:skillSparkleFloat 1.7s ease-in-out infinite .25s;
}
.skillBig.skill-ready .skillSparkle.s3{
  animation:skillSparkleFloat 1.6s ease-in-out infinite .45s;
}
@keyframes skillReadyPulse{
  0%,100%{transform:scale(1)}
  50%{transform:scale(1.045)}
}
@keyframes skillReadyLabelPop{
  0%,100%{transform:translateX(-50%) scale(.94)}
  50%{transform:translateX(-50%) scale(1.08)}
}
@keyframes skillSparkleFloat{
  0%{opacity:0;transform:translateY(6px) scale(.5) rotate(0deg)}
  35%{opacity:1;transform:translateY(0) scale(1) rotate(35deg)}
  100%{opacity:0;transform:translateY(-15px) scale(.5) rotate(70deg)}
}
@keyframes skillReadyBurst{
  0%{transform:scale(1);box-shadow:0 6px 0 rgba(89,57,0,.32),0 0 0 rgba(255,226,119,0)}
  45%{
    transform:scale(1.12);
    box-shadow:
      0 6px 0 rgba(89,57,0,.32),
      0 0 22px rgba(255,255,180,.95),
      0 0 52px rgba(255,226,119,.85),
      0 0 80px rgba(255,120,220,.42);
  }
  100%{transform:scale(1)}
}


/* v22.6.2 item icon update */
.dropCard img,
.itemIconImg,
.presentIcon{
  object-fit:contain;
  padding:4px;
  background:rgba(255,255,255,.08);
  border-radius:14px;
  box-sizing:border-box;
}
.dropCard img{
  width:60px;
  height:60px;
}
.itemIconImg{
  width:66px;
  height:66px;
}


/* v22.7 battle no-scroll */
body.battle-active{
  overflow:hidden;
  height:100dvh;
  overscroll-behavior:none;
}
body.battle-active #gameScreen{
  height:100dvh;
  overflow:hidden;
}
body.battle-active #gameScreen .pad{
  height:100dvh;
  overflow:hidden;
  display:grid;
  grid-template-rows:auto auto auto 1fr auto;
  gap:6px;
  padding:6px 10px calc(8px + env(safe-area-inset-bottom));
  box-sizing:border-box;
}
body.battle-active #gameScreen .topbar{
  min-height:0;
  padding:7px 10px;
  margin:0;
}
body.battle-active .bossArea{
  margin:2px 0 4px;
  padding:8px;
  min-height:0;
  gap:8px;
}
body.battle-active .bossPortraitWrap{
  width:68px;
  height:68px;
  border-radius:16px;
}
body.battle-active .bossName{
  font-size:14px;
  margin-bottom:2px;
}
body.battle-active .bossAttackCounter{
  margin:3px 0;
  padding:4px 8px;
  font-size:11px;
}
body.battle-active .helper{
  line-height:1.18;
}
body.battle-active .hud{
  gap:6px;
  margin:4px 0;
}
body.battle-active .stat{
  padding:7px 4px;
  border-radius:16px;
}
body.battle-active .stat small{
  font-size:10px;
}
body.battle-active .stat span{
  font-size:20px;
}
body.battle-active .bars{
  gap:4px;
  margin:4px 0;
}
body.battle-active .bar{
  height:12px;
}
body.battle-active .board{
  width:min(92vw,46dvh,430px);
  height:min(92vw,46dvh,430px);
  margin:4px auto;
  gap:5px;
  padding:8px;
  align-self:center;
  box-sizing:border-box;
}
body.battle-active .tile img{
  width:100%;
  height:100%;
  object-fit:cover;
}
body.battle-active .battleBottom{
  position:static;
  margin-top:4px;
  padding:8px;
  border-radius:18px;
  gap:8px;
}
body.battle-active .skillBig,
body.battle-active .shuffleBig{
  padding:10px 8px;
  min-height:46px;
}
body.battle-active .gaugeText{
  font-size:11px;
  line-height:1.2;
}
@media(max-height:760px){
  body.battle-active #gameScreen .pad{gap:4px;padding-top:5px}
  body.battle-active .bossPortraitWrap{width:56px;height:56px}
  body.battle-active .bossArea{padding:6px}
  body.battle-active .board{
    width:min(92vw,42dvh,390px);
    height:min(92vw,42dvh,390px);
    padding:6px;
    gap:4px;
  }
  body.battle-active .skillBig,
  body.battle-active .shuffleBig{min-height:42px;padding:9px 6px}
  body.battle-active .stat{padding:5px 3px}
  body.battle-active .stat span{font-size:18px}
}

/* v22.7 item drop deluxe fx */
.dropFxBox{
  position:relative;
  overflow:hidden;
  border-radius:24px;
  padding:12px;
  background:
    linear-gradient(180deg,rgba(255,255,255,.12),rgba(255,255,255,.04)),
    radial-gradient(circle at 50% 0%,rgba(255,226,119,.18),transparent 55%);
  border:1px solid rgba(255,226,119,.28);
  box-shadow:0 16px 38px rgba(0,0,0,.24);
}
.dropFxBox:before{
  content:"";
  position:absolute;
  inset:-20%;
  background:url("game_v22_7_drop_assets/drop_fx_sparkle.webp") center/cover no-repeat;
  opacity:.18;
  pointer-events:none;
}
.dropFxBanner{
  position:relative;
  z-index:1;
  display:block;
  width:min(100%,680px);
  margin:0 auto 8px;
  border-radius:16px;
  filter:drop-shadow(0 10px 18px rgba(0,0,0,.24));
}
.dropFxChestWrap{
  position:relative;
  z-index:1;
  height:118px;
  margin:0 auto 8px;
  overflow:hidden;
  border-radius:20px;
}
.dropFxChest{
  width:100%;
  height:100%;
  object-fit:cover;
  animation:dropChestPop .7s ease both;
}
.dropFxPanel{
  position:relative;
  z-index:1;
  border-radius:20px;
  padding:10px;
  background:rgba(15,12,40,.42);
  border:1px solid rgba(255,255,255,.16);
}
.dropFxTitle{
  text-align:center;
  font-size:18px;
  font-weight:1000;
  color:#ffe277;
  letter-spacing:.08em;
  text-shadow:0 2px 8px rgba(0,0,0,.4);
  margin-bottom:8px;
}
.dropFxGrid{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:8px;
}
.dropFxCard{
  position:relative;
  min-height:134px;
  border-radius:18px;
  display:grid;
  place-items:center;
  padding:6px;
  animation:dropCardPop .42s ease both;
}
.dropFrame{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  object-fit:contain;
  z-index:0;
  pointer-events:none;
}
.dropItemIcon{
  position:relative;
  z-index:1;
  width:62px;
  height:62px;
  object-fit:contain;
  filter:drop-shadow(0 8px 10px rgba(0,0,0,.24));
}
.dropItemName{
  position:relative;
  z-index:1;
  font-size:11px;
  font-weight:1000;
  color:#fff;
  text-align:center;
  line-height:1.2;
  text-shadow:0 2px 4px rgba(0,0,0,.4);
}
.dropItemAmount{
  position:relative;
  z-index:1;
  font-size:15px;
  font-weight:1000;
  color:#ffe277;
}
.dropItemRarity{
  position:relative;
  z-index:1;
  font-size:9px;
  font-weight:1000;
  padding:2px 7px;
  border-radius:999px;
  color:#fff;
  background:rgba(0,0,0,.28);
}
.dropFxCard.rarity-r{filter:drop-shadow(0 0 12px rgba(120,210,255,.35))}
.dropFxCard.rarity-sr{filter:drop-shadow(0 0 16px rgba(210,130,255,.42))}
.dropFxCard.rarity-ur{filter:drop-shadow(0 0 20px rgba(255,226,119,.55))}
.dropFxFooter{
  text-align:center;
  margin-top:8px;
  color:rgba(255,255,255,.76);
  font-size:11px;
  font-weight:900;
}
@keyframes dropChestPop{
  0%{opacity:0;transform:scale(.94);filter:brightness(.7)}
  45%{opacity:1;transform:scale(1.05);filter:brightness(1.35)}
  100%{opacity:1;transform:scale(1);filter:brightness(1)}
}
@keyframes dropCardPop{
  0%{opacity:0;transform:translateY(10px) scale(.82)}
  70%{opacity:1;transform:translateY(-2px) scale(1.04)}
  100%{opacity:1;transform:translateY(0) scale(1)}
}
@media(max-width:520px){
  .dropFxChestWrap{height:96px}
  .dropFxGrid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .dropFxCard{min-height:118px}
  .dropItemIcon{width:54px;height:54px}
  .dropItemName{font-size:10px}
}


/* v22.7.1 title compact + gacha fx */
body.title-active{
  overflow:hidden;
  height:100dvh;
  overscroll-behavior:none;
}
body.title-active #titleScreen{
  height:100dvh;
  overflow:hidden;
}
body.title-active #titleScreen .titlePad{
  height:100dvh;
  overflow:hidden;
  display:grid;
  grid-template-rows:minmax(0,34dvh) auto minmax(0,1fr) auto;
  gap:8px;
  padding:8px 12px calc(8px + env(safe-area-inset-bottom));
  box-sizing:border-box;
}
body.title-active .titleBox{
  height:100%;
  min-height:0;
  margin:0;
  border-radius:24px;
}
body.title-active .titleBox img{
  width:100%;
  height:100%;
  object-fit:cover;
  object-position:center center;
}
body.title-active .textStartBtn{
  margin:0 auto;
  min-height:54px;
}
body.title-active .titleImageBtns{
  margin:0;
  gap:7px;
  padding:8px;
  min-height:0;
  align-self:start;
}
body.title-active .imageMenuBtn img{
  max-height:86px;
  object-fit:contain;
}
.titleSubBtns{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:8px;
  margin:0;
}
body.title-active .playerRankMini{
  display:none;
}
@media(max-height:760px){
  body.title-active #titleScreen .titlePad{
    grid-template-rows:minmax(0,28dvh) auto minmax(0,1fr) auto;
    gap:6px;
    padding-top:6px;
  }
  body.title-active .textStartBtn{min-height:48px}
  body.title-active .titleImageBtns{gap:5px;padding:6px}
  body.title-active .imageMenuBtn img{max-height:72px}
}

/* gacha screen deluxe */
.gachaStage{
  position:relative;
  width:min(86vw,420px);
  height:min(58vw,280px);
  margin:12px auto 12px;
  border-radius:28px;
  overflow:hidden;
  border:1px solid rgba(255,226,119,.26);
  box-shadow:0 18px 42px rgba(0,0,0,.24),0 0 28px rgba(160,100,255,.18);
  display:grid;
  place-items:center;
}
.gachaBgImg{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  object-fit:cover;
  opacity:.82;
}
.gachaCircleImg{
  position:absolute;
  width:72%;
  height:auto;
  opacity:.65;
  mix-blend-mode:screen;
  animation:gachaCircleSpin 12s linear infinite;
  filter:drop-shadow(0 0 18px rgba(255,226,119,.35));
}
.gachaStage .gachaOrb{
  position:relative;
  z-index:2;
  width:120px;
  height:120px;
  margin:0;
}
.gachaFxOverlay{
  position:fixed;
  inset:0;
  z-index:2600;
  display:none;
  align-items:center;
  justify-content:center;
  background:rgba(5,4,20,.74);
  backdrop-filter:blur(4px);
  pointer-events:auto;
}
.gachaFxOverlay.show{display:flex}
.gachaFxCard{
  width:min(86vw,430px);
  aspect-ratio:1/1;
  border-radius:36px;
  position:relative;
  display:grid;
  place-items:center;
  border:2px solid rgba(255,226,119,.65);
  box-shadow:0 0 30px rgba(255,226,119,.45),0 0 80px rgba(150,80,255,.45);
  overflow:hidden;
  background:#15112f;
}
.gachaFxBg{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  object-fit:cover;
  opacity:.72;
  filter:saturate(1.1) brightness(.95);
}
.gachaFxCircle{
  position:absolute;
  width:82%;
  height:auto;
  opacity:.85;
  mix-blend-mode:screen;
  animation:gachaCircleSpin 2.4s linear infinite;
  filter:drop-shadow(0 0 24px rgba(255,226,119,.55));
}
.gachaFxOrb{
  position:absolute;
  width:44%;
  height:44%;
  border-radius:50%;
  background:radial-gradient(circle at 35% 30%,#fff,#ff9df8 22%,#8edcff 55%,#ffe277);
  box-shadow:0 0 30px rgba(255,255,255,.75),0 0 70px rgba(255,130,255,.55);
  animation:gachaOrbPulse .9s ease-in-out infinite;
}
.gachaFxCardBack{
  position:absolute;
  width:42%;
  height:auto;
  border-radius:18px;
  opacity:0;
  transform:translateY(30px) scale(.78) rotateY(90deg);
  filter:drop-shadow(0 14px 20px rgba(0,0,0,.32));
}
.gachaFxText{
  position:absolute;
  bottom:24px;
  color:#ffe277;
  font-size:18px;
  font-weight:1000;
  text-shadow:0 2px 8px rgba(0,0,0,.4);
}
.gachaFxRareText{
  position:absolute;
  top:24px;
  left:50%;
  transform:translateX(-50%) scale(.88);
  opacity:0;
  color:#fff7c3;
  font-size:25px;
  font-weight:1000;
  white-space:nowrap;
  text-shadow:0 4px 12px rgba(0,0,0,.5),0 0 20px rgba(255,226,119,.7);
}
.gachaFxOverlay.phase-open .gachaFxOrb{
  animation:gachaOrbOpen .45s ease both;
}
.gachaFxOverlay.phase-open .gachaFxCardBack{
  animation:gachaCardBackIn .48s ease both;
}
.gachaFxOverlay.phase-reveal .gachaFxCard{
  animation:gachaRevealFlash .38s ease both;
}
.gachaFxOverlay.phase-reveal .gachaFxRareText{
  opacity:1;
  animation:gachaRarePop .38s ease both;
}
@keyframes gachaCircleSpin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}
@keyframes gachaOrbPulse{0%,100%{transform:scale(1);filter:brightness(1)}50%{transform:scale(1.08);filter:brightness(1.25)}}
@keyframes gachaOrbOpen{0%{transform:scale(1)}100%{transform:scale(1.7);filter:brightness(1.9)}}
@keyframes gachaCardBackIn{0%{opacity:0;transform:translateY(28px) scale(.78) rotateY(90deg)}100%{opacity:1;transform:translateY(0) scale(1) rotateY(0)}}
@keyframes gachaRevealFlash{0%{filter:brightness(1)}50%{filter:brightness(2.2)}100%{filter:brightness(1)}}
@keyframes gachaRarePop{0%{transform:translateX(-50%) scale(.65);opacity:0}100%{transform:translateX(-50%) scale(1);opacity:1}}
.gachaResultCard{
  position:relative;
  overflow:hidden;
  border-radius:28px;
  padding:14px;
  background:linear-gradient(180deg,rgba(255,255,255,.12),rgba(255,255,255,.05));
  border:1px solid rgba(255,255,255,.18);
  box-shadow:0 18px 42px rgba(0,0,0,.24);
  text-align:center;
}
.gachaResultCard.new{
  border-color:rgba(255,226,119,.8);
  box-shadow:0 0 24px rgba(255,226,119,.38),0 18px 42px rgba(0,0,0,.24);
}
.gachaResultBanner{
  display:block;
  width:100%;
  max-height:112px;
  object-fit:contain;
  margin:0 auto 8px;
}
.gachaResultChara{
  width:150px;
  height:150px;
  object-fit:cover;
  border-radius:24px;
  margin:8px auto;
  display:block;
  background:rgba(255,255,255,.1);
}
.gachaResultBadge{
  font-size:28px;
  font-weight:1000;
  color:#ffe277;
  letter-spacing:.08em;
  text-shadow:0 3px 0 rgba(80,30,0,.6);
}


/* v22.8 stage map */
#stageMapScreen{
  height:100dvh;
  overflow:hidden;
}
.stageMapPage{
  height:100dvh;
  display:grid;
  grid-template-rows:auto 1fr auto;
  gap:8px;
  padding:8px 10px calc(8px + env(safe-area-inset-bottom));
  box-sizing:border-box;
}
.mapTopbar{
  display:grid;
  grid-template-columns:auto 1fr auto;
  gap:8px;
  align-items:center;
  padding:8px 10px;
  border:1px solid var(--line);
  border-radius:18px;
  background:rgba(255,255,255,.10);
}
.mapTopbar b{
  text-align:center;
  color:#fff;
}
.stageMapWrap{
  position:relative;
  overflow:hidden;
  border-radius:28px;
  border:1px solid rgba(255,255,255,.18);
  background:rgba(0,0,0,.18);
  box-shadow:0 18px 42px rgba(0,0,0,.24);
}
.stageMapBg{
  width:100%;
  height:100%;
  object-fit:cover;
  display:block;
}
.mapNodes{
  position:absolute;
  inset:0;
}
.mapNode{
  position:absolute;
  width:62px;
  height:62px;
  transform:translate(-50%,-50%);
  border:0;
  background:transparent;
  padding:0;
  touch-action:manipulation;
  filter:drop-shadow(0 8px 10px rgba(0,0,0,.28));
}
.mapNode img{
  width:100%;
  height:100%;
  object-fit:contain;
  display:block;
}
.mapNode.selected{
  animation:mapNodePulse 1.3s ease-in-out infinite;
}
.mapNode.locked{
  filter:grayscale(.2) brightness(.78) drop-shadow(0 6px 8px rgba(0,0,0,.32));
}
.mapNodeStars{
  position:absolute;
  left:50%;
  bottom:-4px;
  transform:translateX(-50%);
  color:#ffe277;
  font-size:12px;
  letter-spacing:-1px;
  text-shadow:0 2px 5px rgba(0,0,0,.8);
  pointer-events:none;
}
.mapMarker{
  position:absolute;
  width:72px;
  height:72px;
  object-fit:contain;
  transform:translate(-50%,-92%);
  pointer-events:none;
  filter:drop-shadow(0 8px 10px rgba(0,0,0,.30));
  animation:mapMarkerFloat 1.8s ease-in-out infinite;
}
.mapFooter{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:8px;
}
@keyframes mapNodePulse{
  0%,100%{transform:translate(-50%,-50%) scale(1)}
  50%{transform:translate(-50%,-50%) scale(1.08)}
}
@keyframes mapMarkerFloat{
  0%,100%{transform:translate(-50%,-92%) translateY(0)}
  50%{transform:translate(-50%,-92%) translateY(-5px)}
}
.stageInfoOverlay{
  position:fixed;
  inset:0;
  z-index:2700;
  display:none;
  align-items:center;
  justify-content:center;
  padding:18px;
  background:rgba(0,0,0,.55);
  backdrop-filter:blur(3px);
}
.stageInfoOverlay.show{
  display:flex;
}
.stageInfoCard{
  position:relative;
  width:min(92vw,430px);
  border-radius:28px;
  overflow:hidden;
  filter:drop-shadow(0 18px 32px rgba(0,0,0,.35));
}
.stageInfoFrame{
  display:block;
  width:100%;
  height:auto;
}
.stageInfoContent{
  position:absolute;
  inset:12% 11% 10%;
  display:flex;
  flex-direction:column;
  justify-content:center;
  gap:7px;
  text-align:center;
  color:#352403;
}
.stageInfoContent h2{
  margin:0;
  color:#5d3800;
  font-size:21px;
  line-height:1.18;
}
.stageInfoContent p{
  margin:0;
  font-size:13px;
  font-weight:900;
}
.stageInfoStars{
  font-size:22px;
  color:#e9a800;
  text-shadow:0 2px 4px rgba(0,0,0,.18);
}
.stageInfoContent .cta{
  margin-top:4px;
}
.stageInfoContent .btn{
  color:#3a2700;
  background:rgba(255,255,255,.72);
}
.mapOpenBannerOverlay{
  position:fixed;
  inset:0;
  z-index:2750;
  display:none;
  align-items:center;
  justify-content:center;
  pointer-events:none;
  background:rgba(0,0,0,.20);
}
.mapOpenBannerOverlay.show{
  display:flex;
}
.mapOpenBannerOverlay img{
  width:min(88vw,520px);
  height:auto;
  filter:drop-shadow(0 14px 24px rgba(0,0,0,.35));
  animation:mapOpenBannerPop 1.4s ease both;
}
@keyframes mapOpenBannerPop{
  0%{opacity:0;transform:scale(.78) translateY(16px)}
  18%{opacity:1;transform:scale(1.05) translateY(0)}
  80%{opacity:1;transform:scale(1)}
  100%{opacity:0;transform:scale(.94)}
}
@media(max-width:430px){
  .mapNode{width:56px;height:56px}
  .mapMarker{width:66px;height:66px}
  .stageInfoContent h2{font-size:19px}
  .stageInfoContent p{font-size:12px}
}
@media(max-height:760px){
  .stageMapPage{gap:6px;padding-top:6px}
  .mapTopbar{padding:6px 8px}
  .mapNode{width:52px;height:52px}
  .mapMarker{width:60px;height:60px}
}

/* v22.8.1 title map visible hotfix */
.titleSubBtns{
  grid-template-columns:repeat(3,1fr);
}
body.title-active .titleSubBtns .btn{
  padding:9px 7px;
  font-size:13px;
}

body.map-active{
  overflow:hidden;
  height:100dvh;
  overscroll-behavior:none;
}


/* v22.9 map driven UI */
body.home-active{
  min-height:100dvh;
}
body.title-active .titleImageBtns,
body.title-active .titleSubBtns,
body.title-active .playerRankMini{
  display:none !important;
}
body.title-active #titleScreen .titlePad{
  grid-template-rows:minmax(0,1fr) auto;
}
.homePad{
  min-height:100dvh;
  display:flex;
  flex-direction:column;
  gap:12px;
}
.homeTopbar{
  display:grid;
  grid-template-columns:auto 1fr auto;
  align-items:center;
  padding:8px 10px;
  border:1px solid var(--line);
  border-radius:18px;
  background:rgba(255,255,255,.10);
}
.homeTopbar b{
  text-align:center;
}
.homeCurrency{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:10px;
}
.homeMain{
  display:grid;
  grid-template-columns:1.25fr 1fr;
  gap:10px;
}
.homeMain .cta,
.homeMain .btn{
  min-height:58px;
}
.homeGrid{
  display:grid;
  grid-template-columns:repeat(2,1fr);
  gap:10px;
}
.homeGrid .btn{
  min-height:50px;
}
#stageMapScreen .mapFooter{
  display:none !important;
}
.sortiePad{
  min-height:100dvh;
  display:flex;
  flex-direction:column;
  gap:10px;
}
.sortiePad > .currency,
.sortiePad > .playerRankPanel,
.sortiePad > .nav,
.sortiePad .modeSection,
.sortiePad .stageSelectSection{
  display:none !important;
}
.prepStageSummary{
  border-radius:18px;
  padding:12px;
  background:rgba(255,255,255,.10);
  border:1px solid rgba(255,255,255,.16);
}
.prepStageName{
  font-size:18px;
  font-weight:1000;
  color:#ffe277;
  line-height:1.2;
}
.prepStageMeta{
  font-size:12px;
  opacity:.88;
  line-height:1.35;
}
.sortiePad .section{
  margin:0;
}
.sortiePad .section h3{
  margin-bottom:7px;
}
.sortiePad .difficultyGrid{
  gap:8px;
}
.sortiePad .difficultyBtn{
  padding:10px;
  min-height:auto;
}
.sortiePad .bossSupportGrid{
  max-height:260px;
  overflow:auto;
}
@media(max-height:760px){
  .homePad{gap:8px}
  .homeGrid{gap:7px}
  .homeGrid .btn{min-height:44px;font-size:13px}
  .homeMain .cta,.homeMain .btn{min-height:50px}
  .sortiePad{gap:8px}
  .prepStageSummary{padding:9px}
}


/* v22.9.1 highscore dedicated UI */
.highscoreHeroImg{
  margin:6px auto 12px;
  text-align:center;
}
.highscoreHeroImg img{
  width:100%;
  max-width:760px;
  max-height:190px;
  object-fit:contain;
  border-radius:0;
  box-shadow:none;
  border:0;
  filter:drop-shadow(0 18px 28px rgba(0,0,0,.32));
}
.highScoreHero{
  position:relative;
  overflow:hidden;
  border-color:rgba(255,226,119,.22);
  background:
    radial-gradient(circle at 50% 0%,rgba(255,226,119,.10),transparent 52%),
    linear-gradient(180deg,rgba(255,255,255,.10),rgba(255,255,255,.055));
}
.recordGrid,.modeRecordGrid{
  display:grid;
  grid-template-columns:repeat(2,1fr);
  gap:10px;
}
.recordCard.deluxe{
  display:grid;
  grid-template-columns:62px 1fr;
  gap:10px;
  align-items:center;
  min-height:78px;
  padding:10px;
  border-radius:20px;
  background:
    linear-gradient(180deg,rgba(255,255,255,.13),rgba(255,255,255,.055)),
    radial-gradient(circle at 0% 0%,rgba(255,226,119,.12),transparent 48%);
  border:1px solid rgba(255,226,119,.22);
  box-shadow:0 10px 24px rgba(0,0,0,.18), inset 0 1px 0 rgba(255,255,255,.08);
}
.recordCard.deluxe .recordIconImg,
.recordCard.deluxe > img{
  width:60px;
  height:60px;
  object-fit:contain;
  background:transparent!important;
  border-radius:0!important;
  filter:drop-shadow(0 7px 9px rgba(0,0,0,.30));
}
.recordLabel{
  font-size:11px;
  color:rgba(255,255,255,.80);
  font-weight:1000;
  letter-spacing:.03em;
}
.recordValue{
  font-size:18px;
  color:#ffe277;
  font-weight:1000;
  line-height:1.08;
  text-shadow:0 2px 7px rgba(0,0,0,.30);
}
.stageRecordList{
  display:grid;
  gap:10px;
}
.stageRecordCard.deluxe{
  position:relative;
  display:grid;
  grid-template-columns:62px 1fr;
  gap:10px;
  align-items:center;
  overflow:hidden;
  border-radius:20px;
  padding:11px;
  background:
    linear-gradient(180deg,rgba(255,255,255,.12),rgba(255,255,255,.055)),
    radial-gradient(circle at 100% 0%,rgba(255,226,119,.10),transparent 42%);
  border:1px solid rgba(255,226,119,.24);
  box-shadow:0 10px 24px rgba(0,0,0,.18);
}
.stageRecordCard.deluxe:before{
  content:"";
  position:absolute;
  inset:0;
  pointer-events:none;
  background:linear-gradient(90deg,rgba(255,226,119,.11),transparent 30%,transparent 70%,rgba(255,143,212,.06));
  opacity:.75;
}
.stageRecordCard.deluxe.perfect{
  border-color:rgba(255,226,119,.70);
  box-shadow:0 0 20px rgba(255,215,108,.25),0 10px 24px rgba(0,0,0,.20);
}
.stageRecordIcon{
  position:relative;
  z-index:1;
  width:62px;
  height:62px;
  display:grid;
  place-items:center;
}
.stageRecordIcon img{
  width:60px;
  height:60px;
  object-fit:contain;
  background:transparent!important;
  filter:drop-shadow(0 6px 8px rgba(0,0,0,.30));
}
.stageRecordBody{
  position:relative;
  z-index:1;
  text-align:left;
}
.stageRecordName{
  font-size:14px;
  color:#ffe277;
  font-weight:1000;
  line-height:1.12;
}
.stageRecordBest{
  display:flex;
  align-items:center;
  gap:5px;
  font-size:16px;
  color:#fff;
  font-weight:1000;
  margin-top:2px;
}
.stageRecordRank,.stageRecordBoss{
  display:flex;
  align-items:center;
  gap:5px;
  font-size:11px;
  color:rgba(255,255,255,.80);
  font-weight:900;
  line-height:1.25;
  margin-top:2px;
}
.miniHsBadge{
  width:36px;
  height:17px;
  object-fit:contain;
  flex:0 0 auto;
  filter:drop-shadow(0 2px 4px rgba(0,0,0,.28));
}
.miniHsBadge.bossBadge{
  width:34px;
}
.newRecordBox img{
  width:100%;
  max-width:600px;
  max-height:180px;
  object-fit:contain;
  border-radius:0;
  box-shadow:none;
  filter:drop-shadow(0 14px 26px rgba(0,0,0,.35));
}
@media(max-width:520px){
  .recordGrid,.modeRecordGrid{grid-template-columns:1fr}
  .recordCard.deluxe{min-height:70px;grid-template-columns:56px 1fr}
  .recordCard.deluxe .recordIconImg,.recordCard.deluxe > img{width:54px;height:54px}
  .recordValue{font-size:16px}
  .stageRecordCard.deluxe{grid-template-columns:56px 1fr;padding:9px}
  .stageRecordIcon{width:56px;height:56px}
  .stageRecordIcon img{width:54px;height:54px}
}


/* v23.0 isekai guest */
.homeGuestEventBanner{
  position:relative;
  display:block;
  border:1px solid rgba(255,226,119,.22);
  border-radius:22px;
  overflow:hidden;
  background:rgba(0,0,0,.18);
  min-height:96px;
  box-shadow:0 10px 26px rgba(0,0,0,.25);
}
.homeGuestEventBanner img{
  width:100%;
  height:124px;
  object-fit:cover;
  display:block;
  filter:saturate(1.06) brightness(.95);
}
.homeGuestText{
  position:absolute;
  inset:auto 12px 10px 12px;
  padding:8px 10px;
  border-radius:16px;
  background:linear-gradient(90deg,rgba(20,10,34,.80),rgba(90,40,15,.55));
  border:1px solid rgba(255,226,119,.25);
  text-shadow:0 2px 8px rgba(0,0,0,.5);
}
.homeGuestText b{
  display:block;
  color:#ffe277;
  font-size:15px;
}
.homeGuestText span{
  display:block;
  font-size:11px;
  opacity:.88;
}
.mapNode.guest{
  width:86px;
  height:86px;
  filter:drop-shadow(0 0 18px rgba(177,81,255,.46)) drop-shadow(0 10px 12px rgba(0,0,0,.35));
}
.mapNode.guest.selected{
  animation:mapGuestPulse 1.3s ease-in-out infinite;
}
@keyframes mapGuestPulse{
  0%,100%{transform:translate(-50%,-50%) scale(1)}
  50%{transform:translate(-50%,-50%) scale(1.1)}
}
.stageInfoThumb{
  width:100%;
  max-height:90px;
  object-fit:cover;
  border-radius:14px;
  border:1px solid rgba(255,226,119,.28);
  margin-bottom:4px;
  box-shadow:0 8px 14px rgba(0,0,0,.22);
}
.stageInfoCard.guestStageInfo .stageInfoContent h2{
  color:#ffe277;
  text-shadow:0 2px 8px rgba(0,0,0,.35);
}
body.battle-active #gameScreen{
  background-size:cover;
  background-position:center;
}
body.battle-active #gameScreen:before{
  content:"";
  position:absolute;
  inset:0;
  pointer-events:none;
  background:radial-gradient(circle at 50% 12%,rgba(255,180,86,.10),transparent 35%);
}
#gameScreen{
  position:relative;
}
#gameScreen > .pad{
  position:relative;
  z-index:1;
}
.collectionGuestBadge{
  display:inline-block;
  margin-top:2px;
  padding:2px 7px;
  border-radius:999px;
  background:linear-gradient(90deg,#7d39ff,#ff9d3d);
  color:#fff;
  font-size:10px;
  font-weight:1000;
}
@media(max-height:760px){
  .homeGuestEventBanner img{height:96px}
  .mapNode.guest{width:72px;height:72px}
}


/* v23.1 endless online ranking */
.rankingBanner{
  position:relative;
  border-radius:20px;
  overflow:hidden;
  border:1px solid rgba(255,226,119,.28);
  background:rgba(255,255,255,.08);
  margin-bottom:8px;
}
.rankingBanner img{
  width:100%;
  height:112px;
  display:block;
  object-fit:cover;
}
.onlineRankingSection h3{
  color:#ffe277;
  margin:8px 0 10px;
}
.rankingSettings{
  display:grid;
  grid-template-columns:1fr auto auto;
  gap:8px;
  align-items:end;
}
.rankNameLabel{
  display:flex;
  flex-direction:column;
  gap:4px;
  font-size:11px;
  font-weight:900;
  color:rgba(255,255,255,.78);
}
.rankNameLabel input{
  width:100%;
  border:1px solid rgba(255,255,255,.22);
  background:rgba(0,0,0,.28);
  color:#fff;
  border-radius:14px;
  padding:10px 11px;
  font:inherit;
  font-weight:900;
  outline:none;
}
.smallBtn{
  white-space:nowrap;
  padding:10px 11px;
  font-size:12px;
}
.rankingActions{
  display:grid;
  grid-template-columns:1fr auto;
  gap:8px;
  margin-top:10px;
}
.onlineStatus{
  margin-top:9px;
  padding:8px 10px;
  border-radius:14px;
  background:rgba(0,0,0,.18);
}
.onlineStatus.ok{
  color:#b9ffcf;
}
.onlineStatus.warn{
  color:#ffd18f;
}
.endlessRankingList{
  display:flex;
  flex-direction:column;
  gap:8px;
  margin-top:10px;
}
.rankingEmpty{
  padding:14px;
  border-radius:18px;
  background:rgba(255,255,255,.08);
  color:rgba(255,255,255,.76);
  font-weight:850;
  text-align:center;
}
.rankingRow{
  display:grid;
  grid-template-columns:38px 1fr auto;
  gap:9px;
  align-items:center;
  padding:10px;
  border-radius:18px;
  background:linear-gradient(180deg,rgba(255,255,255,.13),rgba(255,255,255,.06));
  border:1px solid rgba(255,255,255,.14);
}
.rankingRow.gold{
  border-color:rgba(255,215,108,.55);
  box-shadow:0 0 18px rgba(255,215,108,.16);
}
.rankingRow.silver{
  border-color:rgba(215,225,255,.40);
}
.rankingRow.bronze{
  border-color:rgba(255,174,112,.42);
}
.rankingRank{
  width:34px;
  height:34px;
  border-radius:50%;
  display:grid;
  place-items:center;
  background:linear-gradient(180deg,#fff4aa,#ffbd46);
  color:#4a2c00;
  font-weight:1000;
}
.rankingMain b{
  display:block;
  font-size:14px;
}
.rankingMain span{
  display:block;
  font-size:11px;
  color:rgba(255,255,255,.74);
  margin-top:2px;
}
.rankingCombo{
  font-size:11px;
  font-weight:1000;
  color:#ffe277;
  text-align:right;
}
#resultEndlessSubmitBtn{
  display:none;
  border-color:rgba(255,226,119,.35);
  background:linear-gradient(180deg,rgba(255,221,100,.28),rgba(151,75,255,.24));
}
#resultEndlessSubmitBtn.show{
  display:inline-block;
}
@media(max-width:420px){
  .rankingSettings{grid-template-columns:1fr 1fr}
  .rankNameLabel{grid-column:1/-1}
  .rankingActions{grid-template-columns:1fr}
  .rankingRow{grid-template-columns:34px 1fr}
  .rankingCombo{grid-column:2; text-align:left}
}


/* v23.2 sound settings */
.soundSettingsPanel{
  margin-top:10px;
  background:linear-gradient(180deg,rgba(255,255,255,.12),rgba(255,255,255,.06));
  border:1px solid rgba(255,226,119,.18);
}
.soundSettingsPanel h3{
  margin:0 0 8px;
  color:#ffe277;
}
.soundSettingGrid{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:8px;
  margin-bottom:8px;
}
.soundSliderLabel{
  display:grid;
  grid-template-columns:76px 1fr;
  gap:8px;
  align-items:center;
  font-size:12px;
  font-weight:1000;
  color:rgba(255,255,255,.84);
  margin:8px 0;
}
.soundSliderLabel input[type="range"]{
  width:100%;
  accent-color:#ffd76c;
}
#soundStatusText{
  padding:7px 9px;
  border-radius:12px;
  background:rgba(0,0,0,.16);
}


/* v23.3 profile / titles / expanded missions */
.profileMiniTitle{
  display:inline-block;
  margin-bottom:6px;
  padding:4px 9px;
  border-radius:999px;
  background:linear-gradient(180deg,#fff0a8,#ffc84d);
  color:#4b3000;
  font-size:11px;
  font-weight:1000;
  box-shadow:0 4px 12px rgba(255,203,86,.22);
}
.profileHero{
  text-align:center;
  background:
    radial-gradient(circle at 50% 0%,rgba(255,226,119,.28),transparent 46%),
    linear-gradient(180deg,rgba(255,255,255,.13),rgba(255,255,255,.06));
  border:1px solid rgba(255,226,119,.23);
}
.profileBadge{
  display:inline-block;
  padding:4px 10px;
  border-radius:999px;
  background:#fff0a8;
  color:#4b3000;
  font-weight:1000;
  font-size:12px;
}
.profileName{
  margin-top:8px;
  font-size:24px;
  font-weight:1000;
  color:#fff;
}
.profileTitle{
  display:inline-block;
  margin-top:8px;
  padding:7px 14px;
  border-radius:999px;
  background:linear-gradient(180deg,#fff4b8,#ffbd42);
  color:#553200;
  font-weight:1000;
}
.profileDesc{
  margin-top:8px;
  font-size:12px;
  color:rgba(255,255,255,.78);
}
.profileNameRow{
  display:grid;
  grid-template-columns:1fr auto;
  gap:8px;
}
.profileNameRow input{
  border:1px solid rgba(255,255,255,.22);
  background:rgba(0,0,0,.28);
  color:#fff;
  border-radius:14px;
  padding:11px 12px;
  font:inherit;
  font-weight:900;
  outline:none;
}
.profileStatsGrid{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:9px;
}
.profileStatsGrid div{
  padding:11px;
  border-radius:16px;
  background:rgba(255,255,255,.08);
  border:1px solid rgba(255,255,255,.12);
}
.profileStatsGrid small{
  display:block;
  color:rgba(255,255,255,.62);
  font-size:10px;
  font-weight:900;
}
.profileStatsGrid b{
  display:block;
  margin-top:4px;
  color:#ffe277;
  font-size:15px;
}
.titleGrid{
  display:grid;
  grid-template-columns:1fr;
  gap:8px;
  margin-top:10px;
}
.titleCard{
  text-align:left;
  border-radius:18px;
  border:1px solid rgba(255,255,255,.12);
  background:rgba(255,255,255,.07);
  color:#fff;
  padding:12px;
}
.titleCard.open{
  border-color:rgba(255,226,119,.25);
}
.titleCard.selected{
  background:linear-gradient(180deg,rgba(255,226,119,.22),rgba(255,255,255,.07));
  box-shadow:0 0 18px rgba(255,226,119,.14);
}
.titleCard.locked{
  opacity:.58;
  filter:saturate(.6);
}
.titleCardName{
  font-size:15px;
  font-weight:1000;
}
.titleCardDesc{
  margin-top:4px;
  color:rgba(255,255,255,.70);
  font-size:11px;
  line-height:1.35;
}
.titleCardState{
  margin-top:8px;
  color:#ffe277;
  font-size:11px;
  font-weight:1000;
}
.rankingTitle{
  display:inline-block;
  margin:2px 0 3px;
  padding:2px 7px;
  border-radius:999px;
  background:rgba(255,226,119,.18);
  color:#ffe277;
  font-style:normal;
  font-size:10px;
  font-weight:1000;
}
.tabs{
  flex-wrap:wrap;
}
@media(max-width:420px){
  .profileStatsGrid{grid-template-columns:1fr}
}


/* v23.4 stage balance */
.hardNotice{
  display:inline-block;
  margin-top:4px;
  color:#ffd18f;
  font-size:10px;
  font-weight:1000;
}
.missionEmpty{
  opacity:.86;
  border-style:dashed;
}


/* v23.5 endless boss rotation */
.endlessBossRotationOverlay{
  position:fixed;
  inset:0;
  z-index:2600;
  display:none;
  place-items:center;
  pointer-events:none;
  background:radial-gradient(circle at 50% 40%,rgba(255,226,119,.18),rgba(0,0,0,.48) 62%,rgba(0,0,0,.66));
}
.endlessBossRotationOverlay.show{
  display:grid;
  animation:endlessBossOverlayFade 1.15s ease both;
}
.endlessBossCard{
  width:min(86vw,430px);
  min-height:360px;
  position:relative;
  overflow:hidden;
  border-radius:30px;
  padding:24px 18px 18px;
  text-align:center;
  color:#fff;
  border:2px solid rgba(255,226,119,.7);
  background:
    radial-gradient(circle at 20% 0%,rgba(255,255,255,.25),transparent 28%),
    radial-gradient(circle at 84% 16%,rgba(255,92,196,.22),transparent 30%),
    linear-gradient(180deg,rgba(75,31,126,.96),rgba(19,16,43,.97));
  box-shadow:0 26px 70px rgba(0,0,0,.45),0 0 34px rgba(255,218,91,.22);
  transform-origin:center;
  animation:endlessBossCardPop 1.05s cubic-bezier(.18,1.15,.2,1) both;
}
.endlessBossCard:before,
.endlessBossCard:after{
  content:"";
  position:absolute;
  width:180px;
  height:180px;
  border-radius:50%;
  background:radial-gradient(circle,rgba(255,226,119,.35),transparent 62%);
  filter:blur(2px);
  pointer-events:none;
}
.endlessBossCard:before{left:-70px;top:-70px}
.endlessBossCard:after{right:-70px;bottom:-70px}
.endlessBossTop{
  position:relative;
  z-index:1;
  display:inline-block;
  padding:6px 16px;
  border-radius:999px;
  background:linear-gradient(180deg,#fff6b8,#ffbf38);
  color:#4a2c00;
  font-size:13px;
  font-weight:1000;
  letter-spacing:.04em;
}
.endlessBossOrder{
  position:relative;
  z-index:1;
  margin-top:14px;
  font-size:30px;
  font-weight:1000;
  color:#ffe277;
  text-shadow:0 4px 0 rgba(63,31,0,.42),0 0 20px rgba(255,226,119,.42);
}
.endlessBossName{
  position:relative;
  z-index:1;
  margin-top:4px;
  font-size:24px;
  font-weight:1000;
  line-height:1.14;
  text-shadow:0 4px 16px rgba(0,0,0,.48);
}
.endlessBossMeta{
  position:relative;
  z-index:1;
  margin-top:8px;
  font-size:12px;
  font-weight:900;
  color:rgba(255,255,255,.78);
}
.endlessBossPortrait{
  position:relative;
  z-index:1;
  margin:12px auto 8px;
  width:148px;
  height:148px;
  border-radius:28px;
  display:grid;
  place-items:center;
  background:rgba(255,255,255,.12);
  border:1px solid rgba(255,255,255,.18);
  box-shadow:inset 0 0 20px rgba(255,255,255,.10);
}
.endlessBossPortrait img{
  max-width:130px;
  max-height:130px;
  object-fit:contain;
  filter:drop-shadow(0 10px 14px rgba(0,0,0,.38));
}
.endlessBossRoute{
  position:relative;
  z-index:1;
  margin-top:8px;
  font-size:18px;
  letter-spacing:.02em;
  opacity:.9;
}
@keyframes endlessBossOverlayFade{
  0%{opacity:0}
  14%{opacity:1}
  82%{opacity:1}
  100%{opacity:0}
}
@keyframes endlessBossCardPop{
  0%{transform:scale(.75) translateY(18px);opacity:0}
  18%{transform:scale(1.04) translateY(0);opacity:1}
  62%{transform:scale(1) translateY(0);opacity:1}
  100%{transform:scale(.96) translateY(-10px);opacity:0}
}


/* v23.5.1 endless level */
.endlessBossMeta{
  color:#fff0a8;
}


/* v23.5.2 visibility improvement */
.cell{
  background:
    radial-gradient(circle at 28% 22%,rgba(255,255,255,.20),transparent 34%),
    rgba(255,255,255,.10);
}
.cell .piecePattern{
  position:absolute;
  inset:0;
  z-index:1;
  opacity:.24;
  pointer-events:none;
}
.cell .pieceChar{
  position:relative;
  z-index:2;
  width:96%;
  height:96%;
  object-fit:contain;
  pointer-events:none;
  filter:drop-shadow(0 2px 2px rgba(0,0,0,.30));
}
.cell .pieceAttr{
  position:absolute;
  z-index:5;
  top:2px;
  right:2px;
  width:28%;
  height:28%;
  object-fit:contain;
  pointer-events:none;
  filter:
    drop-shadow(0 1px 0 #fff)
    drop-shadow(0 -1px 0 #fff)
    drop-shadow(1px 0 0 #fff)
    drop-shadow(-1px 0 0 #fff)
    drop-shadow(0 2px 4px rgba(0,0,0,.42));
}
.pattern-dot{
  background-image:radial-gradient(circle, rgba(255,255,255,.9) 11%, transparent 13%);
  background-size:12px 12px;
}
.pattern-stripe{
  background-image:repeating-linear-gradient(45deg, rgba(255,255,255,.85) 0 3px, transparent 3px 10px);
}
.pattern-sparkle{
  background-image:
    radial-gradient(circle at 20% 30%, rgba(255,255,255,.95) 0 2px, transparent 3px),
    radial-gradient(circle at 62% 22%, rgba(255,255,255,.75) 0 1.5px, transparent 3px),
    radial-gradient(circle at 72% 66%, rgba(255,255,255,.85) 0 2px, transparent 3px),
    radial-gradient(circle at 38% 78%, rgba(255,255,255,.65) 0 1.5px, transparent 3px);
}
.pattern-check{
  background-image:
    linear-gradient(90deg, rgba(255,255,255,.40) 50%, transparent 50%),
    linear-gradient(0deg, rgba(255,255,255,.40) 50%, transparent 50%);
  background-size:12px 12px;
}
.pattern-wave{
  background-image:
    repeating-radial-gradient(ellipse at 0 50%, rgba(255,255,255,.42) 0 2px, transparent 3px 9px);
}
.pattern-halo{
  background-image:radial-gradient(circle, transparent 32%, rgba(255,255,255,.78) 35%, transparent 48%);
}
.attrMini,.cardAttr,.supportAttr{
  width:18px!important;
  height:18px!important;
  object-fit:contain;
  vertical-align:-4px;
  margin-right:4px;
  filter:
    drop-shadow(0 1px 0 #fff)
    drop-shadow(0 -1px 0 #fff)
    drop-shadow(1px 0 0 #fff)
    drop-shadow(-1px 0 0 #fff)
    drop-shadow(0 2px 4px rgba(0,0,0,.35));
}
.cardAttr{
  width:20px!important;
  height:20px!important;
}
.visibilityPreview{
  margin-top:8px;
  display:grid;
  gap:8px;
  padding:9px;
  border-radius:16px;
  background:rgba(0,0,0,.18);
  border:1px solid rgba(255,255,255,.12);
}
.visibilityPreview>div{
  display:block;
  padding:7px 8px;
  border-radius:13px;
  background:rgba(255,255,255,.07);
}
.visibilityPreview b{
  color:#ffe277;
  margin-right:8px;
}
.visibilityPreview span{
  font-size:11px;
  color:rgba(255,255,255,.78);
}
.visibilityPreview p{
  margin:0;
  font-size:11px;
  line-height:1.4;
  color:rgba(255,255,255,.68);
}
.miniTeamLine{
  display:flex;
  flex-wrap:wrap;
  gap:5px;
  margin-top:6px;
}
.miniTeamLine span,.supportChip,.supportNone{
  display:inline-flex;
  align-items:center;
  gap:2px;
  padding:3px 7px;
  border-radius:999px;
  background:rgba(255,255,255,.10);
  font-size:10px!important;
  color:#fff!important;
  white-space:nowrap;
}
.rosterCard{
  position:relative;
}
.roleBadge{
  position:absolute;
  left:6px;
  bottom:54px;
  z-index:4;
  padding:3px 7px;
  border-radius:999px;
  font-size:10px;
  font-weight:1000;
  color:#3a2500;
  background:#ffe277;
  box-shadow:0 4px 10px rgba(0,0,0,.22);
}
.roleBadge.support{
  background:#bfe8ff;
  color:#053045;
}
.rosterCard.support{
  opacity:.88;
  outline:2px dashed rgba(157,224,255,.45);
}
.rosterCard.sortie{
  outline:2px solid rgba(255,226,119,.48);
}


/* v23.5.4 ranking UX */
.rankingGuide{
  display:grid;
  gap:4px;
  padding:11px 12px;
  margin:8px 0 12px;
  border-radius:16px;
  background:linear-gradient(135deg,rgba(255,226,119,.20),rgba(115,211,255,.13));
  border:1px solid rgba(255,226,119,.35);
}
.rankingGuide b{
  color:#ffe277;
  font-size:15px;
}
.rankingGuide span{
  color:rgba(255,255,255,.82);
  font-size:12px;
  line-height:1.45;
}
.rankingSubmitBox{
  margin:10px 0;
  padding:11px 12px;
  border-radius:16px;
  border:1px dashed rgba(255,255,255,.22);
  background:rgba(255,255,255,.07);
  color:rgba(255,255,255,.78);
  font-size:12px;
  line-height:1.45;
}
.rankingSubmitBox.ok{
  border:1px solid rgba(120,255,179,.45);
  background:linear-gradient(135deg,rgba(60,255,150,.18),rgba(255,226,119,.12));
  color:#fff;
}
.rankingSubmitBox b{
  display:block;
  color:#9dffc2;
  font-size:15px;
  margin-bottom:3px;
}
.rankingSubmitBox span,.rankingSubmitBox em{
  display:block;
  font-style:normal;
}
.rankingSubmitBox em{
  margin-top:3px;
  font-size:11px;
  color:rgba(255,255,255,.72);
}
.top10Header{
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:8px;
  padding:7px 4px 9px;
  color:#ffe277;
}
.top10Header span{
  font-size:11px;
  color:rgba(255,255,255,.65);
}
.rankingRow.mine{
  outline:2px solid rgba(120,255,179,.55);
  background:linear-gradient(135deg,rgba(120,255,179,.16),rgba(255,255,255,.08));
}
.rankingEmpty{
  display:grid;
  gap:4px;
  padding:16px 12px;
  border-radius:16px;
  background:rgba(255,255,255,.07);
  color:rgba(255,255,255,.78);
  text-align:center;
}
.rankingEmpty b{
  color:#ffe277;
}
.rankingEmpty span{
  font-size:12px;
}
.resultRankingMessage{
  margin-top:10px;
  padding:10px 12px;
  border-radius:16px;
  border:1px dashed rgba(255,255,255,.22);
  background:rgba(255,255,255,.07);
  color:rgba(255,255,255,.75);
  font-size:12px;
}
.resultRankingMessage.ok{
  border-color:rgba(120,255,179,.45);
  background:linear-gradient(135deg,rgba(120,255,179,.16),rgba(255,226,119,.13));
  color:#fff;
}
.resultRankingMessage b,.resultRankingMessage span,.resultRankingMessage small{
  display:block;
}
.resultRankingMessage b{
  color:#9dffc2;
  font-size:15px;
}
.resultRankingMessage small{
  color:rgba(255,255,255,.72);
}
