*{box-sizing:border-box}body{margin:0;font-family:'Segoe UI','Malgun Gothic',sans-serif;background:#08140f;color:#f7f4dd}button,input,select{font-family:inherit}a{color:#b9ffca}.loginBody{min-height:100vh;display:grid;place-items:center;background:radial-gradient(circle at 30% 20%,#22563a,#07130d 65%)}.authCard{width:min(430px,92vw);padding:32px;border:1px solid #5cc47e;border-radius:20px;background:rgba(8,18,12,.9);box-shadow:0 20px 80px rgba(0,0,0,.45),0 0 40px rgba(88,255,140,.12);text-align:center}.authCard h1{margin-top:0}.authCard form{display:grid;gap:12px}.authCard input,.adminPanel input,.adminPanel select{width:100%;padding:12px;border-radius:10px;border:1px solid #45604c;background:#101d15;color:#fff}.primary,.authCard button,.adminPanel button,#leftPanel button,#bottomHud button{background:linear-gradient(135deg,#1f8a46,#6bdd82);border:0;color:#06150b;font-weight:800;padding:10px 14px;border-radius:10px;cursor:pointer}.error{color:#fff;background:#9b2226;padding:10px;border-radius:8px;margin:10px}.muted,.hint{color:#b8c7b8}.lanBox{margin:18px 0 0;padding:12px;border:1px dashed #66cc88;border-radius:12px;color:#d8ffdd}.adminBody{background:#101510;padding-bottom:40px}.adminHeader{display:flex;justify-content:space-between;align-items:center;padding:18px 28px;background:#06130d;border-bottom:1px solid #375d3d}.notice{margin:20px auto;max-width:1100px;padding:12px;border-radius:10px;background:#1f4e2b}.adminGrid{display:grid;grid-template-columns:1fr 1fr;gap:18px;max-width:1180px;margin:20px auto;padding:0 16px}.adminPanel{background:#111b14;border:1px solid #395c42;border-radius:16px;padding:18px}.adminPanel label{display:block;margin:10px 0}.adminPanel table{width:100%;border-collapse:collapse}.adminPanel td,.adminPanel th{border-bottom:1px solid #2b4630;padding:8px;text-align:left}.gameBody{height:100vh;overflow:hidden;background:#050b07}#app{position:relative;width:100vw;height:100vh;background:linear-gradient(#1b5a79,#18351d)}#topHud{position:absolute;z-index:20;left:0;top:0;right:0;height:76px;display:flex;align-items:center;justify-content:space-between;padding:8px 16px;background:linear-gradient(180deg,rgba(0,0,0,.78),rgba(0,0,0,.2));pointer-events:auto}.profile{display:flex;align-items:center;gap:10px;min-width:330px}.portrait{width:58px;height:58px;border-radius:50%;border:2px solid #e7d083;background:#333;position:relative;overflow:hidden}.portrait:before{content:'';position:absolute;left:18px;top:8px;width:22px;height:22px;border-radius:50%;background:#f2c49a}.portrait:after{content:'';position:absolute;left:13px;top:28px;width:32px;height:36px;border-radius:14px 14px 6px 6px;background:#6f57d6}.portrait.archer:after{background:#3ca35c}.portrait.knight:after{background:#c9cdd2}.bar{width:220px;height:10px;background:#182018;border:1px solid rgba(255,255,255,.25);border-radius:10px;margin-top:3px;overflow:hidden}.bar i{display:block;height:100%;width:100%}.hp i{background:linear-gradient(90deg,#d53030,#ff8a5c)}.mp i{background:linear-gradient(90deg,#2684ff,#61d1ff)}.mapTitle{text-align:center;font-size:22px;text-shadow:0 2px 4px #000}.mapTitle small{display:block;font-size:12px;color:#d8f5d0}.currencies{font-size:16px}.panel{position:absolute;z-index:18;top:86px;bottom:86px;width:270px;padding:12px;background:rgba(7,14,9,.78);border:1px solid rgba(178,255,190,.35);border-radius:14px;backdrop-filter:blur(5px);overflow:auto}#leftPanel{left:12px}#rightPanel{right:12px}.panel h3{margin:7px 0 8px;color:#cfffbd}.classBtn{width:100%;margin:5px 0;text-align:left}.classBtn small{color:#163014}.scrollList{max-height:190px;overflow:auto}.itemCard{padding:8px;margin:6px 0;border:1px solid #375d3d;border-radius:10px;background:rgba(13,28,17,.9)}.itemCard button{float:right;padding:5px 9px}.rarity-common{color:#eee}.rarity-rare{color:#5db7ff}.rarity-hero{color:#d67cff}.rarity-legend{color:#ffb347}.rarity-mythic{color:#ff7575}.rarity-unique{color:#77fff3;text-shadow:0 0 8px #60ffff}#gameWrap{position:absolute;inset:0;overflow:hidden}#gameCanvas{width:100%;height:100%;display:block;background:#133a20}#toast{position:absolute;left:50%;top:95px;transform:translateX(-50%);background:rgba(0,0,0,.78);border:1px solid #81de92;border-radius:12px;padding:10px 16px;display:none;z-index:30}#bottomHud{position:absolute;z-index:22;left:300px;right:300px;bottom:10px;display:flex;gap:14px;align-items:flex-end;justify-content:space-between;pointer-events:auto}.chat{min-width:360px;max-width:560px;max-height:80px;overflow:hidden;padding:12px;background:rgba(0,0,0,.58);border:1px solid rgba(255,255,255,.18);border-radius:12px;color:#d9ffd2;font-size:13px}.skills{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}.skills button{min-width:88px;background:linear-gradient(135deg,#253a2b,#ffd56b);color:#fff;border:1px solid #e6c066;text-shadow:0 1px 2px #000}#mobileControls{display:none}.dmg{position:absolute;pointer-events:none;color:#fff}@media (max-width:900px){#topHud{height:64px;padding:5px 8px}.profile{min-width:auto;font-size:12px}.portrait{width:42px;height:42px}.bar{width:120px}.mapTitle{font-size:16px}.currencies{font-size:12px}.panel{display:none}#bottomHud{left:8px;right:8px;bottom:82px}.chat{display:none}.skills{gap:5px}.skills button{min-width:auto;padding:9px 10px;font-size:12px}#mobileControls{display:block;position:absolute;z-index:40;left:0;right:0;bottom:8px;pointer-events:none}.dpad,.actions{position:absolute;bottom:0;display:grid;gap:6px;pointer-events:auto}.dpad{left:12px;grid-template-columns:54px 54px 54px;grid-template-rows:42px 42px}.dpad button:nth-child(1){grid-column:2}.dpad button:nth-child(2){grid-column:1}.dpad button:nth-child(3){grid-column:2}.dpad button:nth-child(4){grid-column:3}.actions{right:12px;grid-template-columns:62px 62px 62px}.dpad button,.actions button{height:44px;border-radius:16px;border:1px solid rgba(255,255,255,.4);background:rgba(0,0,0,.45);color:#fff;font-size:19px}#leftPanel.mobileOpen,#rightPanel.mobileOpen{display:block;width:92vw;left:4vw;right:auto;top:70px;bottom:92px}.currencies a{display:none}}

/* v19.2: first-class selection and improved character presentation */
.lockedClassInfo{padding:9px;margin:6px 0 10px;border:1px solid rgba(209,255,173,.28);border-radius:12px;background:rgba(4,16,8,.55);line-height:1.45;color:#e8ffe2}.classBtn.selectedClass,.classChoice.selectedClass{outline:2px solid #ffe06b;box-shadow:0 0 18px rgba(255,224,107,.35)}.classBtn:disabled{filter:grayscale(.45);opacity:.48;cursor:not-allowed}.portrait.unselected:after{background:#555}.classSelectOverlay{position:absolute;z-index:80;inset:0;display:grid;place-items:center;background:radial-gradient(circle at 50% 40%,rgba(21,62,35,.78),rgba(0,0,0,.88));backdrop-filter:blur(7px);pointer-events:auto}.classSelectCard{width:min(930px,94vw);padding:28px;border:1px solid rgba(219,255,177,.48);border-radius:24px;background:linear-gradient(145deg,rgba(8,23,14,.96),rgba(20,44,25,.94));box-shadow:0 28px 100px rgba(0,0,0,.58),0 0 45px rgba(111,255,137,.18);text-align:center}.classSelectCard h1{margin:0 0 8px;font-size:31px;color:#fff5bc;text-shadow:0 3px 12px #000}.classSelectCard p{margin:0 0 20px;color:#d9f6d4}.classChoiceGrid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.classChoice{min-height:260px;border:1px solid rgba(255,255,255,.22);border-radius:20px;background:linear-gradient(180deg,rgba(255,255,255,.08),rgba(0,0,0,.23));color:#fff;padding:17px 12px;cursor:pointer;transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}.classChoice:hover{transform:translateY(-5px);border-color:#ffe06b;box-shadow:0 16px 42px rgba(0,0,0,.45),0 0 26px rgba(255,224,107,.24)}.classChoice b{display:block;margin:12px 0 7px;font-size:20px}.classChoice small{display:block;color:#e1f8d6;line-height:1.45}.choiceAvatar{display:block;margin:0 auto 8px;width:118px;height:132px;position:relative;border-radius:54px 54px 28px 28px;background:#456;box-shadow:inset 0 -18px 22px rgba(0,0,0,.18),0 12px 32px rgba(0,0,0,.38)}.choiceAvatar:before{content:'';position:absolute;left:41px;top:20px;width:36px;height:36px;border-radius:50%;background:#f2c49a;border:3px solid #241812}.choiceAvatar:after{content:'';position:absolute;left:29px;top:58px;width:60px;height:60px;border-radius:20px 20px 14px 14px;border:3px solid rgba(0,0,0,.55)}.healerAvatar{background:linear-gradient(#423185,#7259dc)}.healerAvatar:after{background:#6a56d7}.healerAvatar{--weapon:'✦'}.archerAvatar{background:linear-gradient(#204f2f,#40a35c)}.archerAvatar:after{background:#238b47}.knightAvatar{background:linear-gradient(#5c6571,#d8dde6)}.knightAvatar:after{background:#a9b1bd}.healerChoice .choiceAvatar span,.archerChoice .choiceAvatar span,.knightChoice .choiceAvatar span{display:none}.healerAvatar::selection{background:transparent}.healerChoice .choiceAvatar::marker{display:none}.healerAvatar + b:before{content:'🔥 ';}.archerAvatar + b:before{content:'🏹 ';}.knightAvatar + b:before{content:'🛡️ ';}.classSelectNotice{margin-top:15px;color:#ffe8a3;font-size:13px}.portrait.healer{background:radial-gradient(circle at 50% 25%,#6d5be6,#231542)}.portrait.archer{background:radial-gradient(circle at 50% 25%,#41b765,#10341b)}.portrait.knight{background:radial-gradient(circle at 50% 25%,#d7dce3,#344050)}
@media (max-width:900px){.classSelectCard{padding:18px;width:94vw;max-height:90vh;overflow:auto}.classChoiceGrid{grid-template-columns:1fr}.classChoice{min-height:150px}.choiceAvatar{width:82px;height:92px}.choiceAvatar:before{left:27px;top:12px;width:28px;height:28px}.choiceAvatar:after{left:20px;top:43px;width:43px;height:40px}.classSelectCard h1{font-size:23px}}


/* v20.5: class select and portrait use real character frame images */
.choiceAvatar{
  width:132px !important;
  height:142px !important;
  border-radius:18px !important;
  background-color:rgba(0,0,0,.20) !important;
  background-repeat:no-repeat !important;
  background-position:center bottom !important;
  background-size:contain !important;
  box-shadow:0 12px 32px rgba(0,0,0,.38), inset 0 0 22px rgba(255,255,255,.06) !important;
}
.choiceAvatar:before,.choiceAvatar:after{display:none !important;content:none !important;}
.healerAvatar{background-image:url('/static/assets/characters/frames/healer_down_1.png?v=20_7') !important;}
.archerAvatar{background-image:url('/static/assets/characters/frames/archer_down_1.png?v=20_7') !important;}
.knightAvatar{background-image:url('/static/assets/characters/frames/knight_down_1.png?v=20_7') !important;}
.portrait:before,.portrait:after{display:none !important;content:none !important;}
.portrait{background-repeat:no-repeat !important;background-position:center bottom !important;background-size:92% auto !important;background-color:rgba(0,0,0,.35) !important;}
.portrait.healer{background-image:url('/static/assets/characters/frames/healer_down_1.png?v=20_7') !important;}
.portrait.archer{background-image:url('/static/assets/characters/frames/archer_down_1.png?v=20_7') !important;}
.portrait.knight{background-image:url('/static/assets/characters/frames/knight_down_1.png?v=20_7') !important;}
#mobileControls button{touch-action:none;user-select:none;-webkit-user-select:none;}
@media (max-width:900px){
  .choiceAvatar{width:96px !important;height:104px !important;}
}


/* v20.6: tab panel toggle, rarity glow, smaller sprite UI */
body.uiHidden #leftPanel,
body.uiHidden #rightPanel{display:none !important;}
body.uiHidden #bottomHud{opacity:.18;pointer-events:none;}
.rarityGlow-common{box-shadow:inset 0 0 0 1px rgba(255,255,255,.10);}
.rarityGlow-uncommon{box-shadow:0 0 10px rgba(134,255,142,.18), inset 0 0 0 1px rgba(134,255,142,.35);}
.rarityGlow-rare{box-shadow:0 0 13px rgba(93,183,255,.22), inset 0 0 0 1px rgba(93,183,255,.45);}
.rarityGlow-hero{box-shadow:0 0 16px rgba(214,124,255,.28), inset 0 0 0 1px rgba(214,124,255,.55);}
.rarityGlow-legend{box-shadow:0 0 20px rgba(255,179,71,.34), inset 0 0 0 1px rgba(255,179,71,.65);}
.rarityGlow-mythic{box-shadow:0 0 24px rgba(255,94,94,.42), inset 0 0 0 1px rgba(255,94,94,.75);}
.rarityGlow-unique{box-shadow:0 0 28px rgba(119,255,243,.48), inset 0 0 0 1px rgba(119,255,243,.85);}
#topHud .mapTitle small::after{content:' · I 정보창 ON/OFF'; color:#ffef9a;}
body.uiHidden #leftPanel,body.uiHidden #rightPanel{display:none !important;}
body.uiHidden #bottomHud{opacity:.18;pointer-events:none;}

