/* 타닥 던전 디자인 — dungeon.html 안에 있던 <style> 을 그대로 옮김(2026-10-15). 7일 보관이므로 고치면 dungeon.html 의 dungeon.css?v= 를 반드시 올릴 것.
   url(img/…) 는 이 파일 위치(사이트 맨 위) 기준이라 옮기기 전과 같은 주소. */
  /* ===================== v108 HUD (참고 이미지 톤: 전체 화면 장면 + 얇은 반투명 패널) ===================== */
  :root{--kr:'Gowun Batang',serif;--ui:'Gothic A1',sans-serif;--type-font:'Gowun Batang',serif;}
  *{box-sizing:border-box;} html,body{margin:0;padding:0;background:#070c09;} html{font-family:sans-serif;} body{font-family:var(--ui);color:#e3e9df;overflow:hidden;min-height:100vh;}
  [hidden]{display:none!important;}
  #gameDungeon{--hb:rgba(8,13,10,.58);--hb2:rgba(8,13,10,.8);--hl:rgba(214,226,214,.15);--hl2:rgba(214,226,214,.3);--ink:#e3e9df;--mut:#98a498;--dim:#66726a;--acc:#a8d8a5;--gold:#d9c98a;--red:#e07a76;--xp:#b9a86b;
    --serif:'Gowun Batang','Nanum Myeongjo',Batang,serif;--mono:ui-monospace,'Cascadia Mono',Consolas,'Courier New',monospace;
    position:fixed;inset:0;overflow:hidden;font-family:var(--ui);color:var(--ink);background:#070c09;}
  #gameDungeon button{font-family:inherit;}
  /* ----- 장면(전체 화면, 자체 zoom 으로 스프라이트 확대 — JS 좌표는 장면 로컬 px) ----- */
  .dn-lane{--gy:178px;position:absolute;inset:0;zoom:1.72;overflow:hidden;}   /* --gy = 땅 높이(장면 로컬 px, JS DN_GY 와 동일) */
  .dn-scene-bg{position:absolute;inset:0;background-size:cover;background-position:center 72%;background-repeat:no-repeat;filter:saturate(.82) brightness(.78);z-index:0;}
  .dn-vig{position:absolute;inset:0;z-index:0;pointer-events:none;background:linear-gradient(180deg,rgba(6,10,8,.7) 0%,rgba(6,10,8,.22) 24%,rgba(6,10,8,.06) 50%,rgba(6,10,8,.5) 80%,rgba(6,10,8,.88) 100%),radial-gradient(ellipse at 50% 60%,rgba(0,0,0,0) 45%,rgba(0,0,0,.45) 100%);}
  .dn-ground{display:none;}
  .dn-hero{position:absolute;left:200px;bottom:var(--gy);width:100px;height:132px;z-index:2;}
  .at-start .dn-hero{display:none;}
  .dn-mon{position:absolute;left:0;bottom:var(--gy);width:96px;will-change:transform;z-index:1;}
  .dn-mon.mv{transition:transform 50ms linear;}   /* 2026-10-17 점검 A65: 위치는 0.05초마다 바뀌므로 그 사이를 이어 그려 보스가 다가올 때 끊겨 보이지 않게(걷기 동작·그림 변화 없음 · 시간 정지 중엔 아래 tstop 규칙이 덮음) */
  .dn-mon.boss{width:140px;}
  .dn-mons{position:absolute;inset:0;z-index:1;}   /* v173 몬스터 전용 층 — 안에서 앞뒤 순서(z)를 매겨도 주인공(z 2) 아래 */
  .dn-mon{transform-origin:50% 100%;} .dn-mon .dn-mname, .dn-mon .dn-mhp{transition:opacity .15s;} .dn-mon.back .dn-mname, .dn-mon.back .dn-mhp{opacity:0;}   /* v173 줄 선 몬스터는 맨 앞만 이름표 */
  #gameDungeon .dn-mon.mo-fly{bottom:calc(var(--gy) + 20px);}
  .dn-mhp{position:absolute;left:50%;top:-24px;width:64px;height:2px;margin:0;transform:translateX(-50%);background:rgba(255,255,255,.2);border-radius:1px;overflow:hidden;}
  .dn-mhp b{display:block;height:100%;width:100%;background:var(--acc);box-shadow:none;}
  .dn-mname{position:absolute;left:50%;top:-46px;transform:translateX(-50%);margin:0;font-family:var(--ui);font-size:12px;font-weight:600;letter-spacing:.02em;color:#edf2ea;text-shadow:0 1px 2px #000,0 0 10px rgba(0,0,0,.7);white-space:nowrap;}
  .dn-mon.boss .dn-mhp{width:120px;height:3px;top:-26px;} .dn-mon.boss .dn-mname{font-size:14px;color:#f3dcae;top:-50px;}
  #gameDungeon .dn-mfx{position:absolute;left:0;width:100%;top:-58px;height:0;}   /* v168 position 이 빠져 top 이 안 먹던 것 — 피해 숫자가 체력 막대 아래에서 시작해 막대·이름 뒤로 겹쳐 지나갔음. 이제 이름 위에서 뜸 */
  #gameDungeon .dn-float{color:#eef2ea;text-shadow:0 1px 2px #000,0 0 8px rgba(0,0,0,.7);} #gameDungeon .dn-float.me{color:var(--red);} #gameDungeon .dn-float.xp{color:var(--acc);} #gameDungeon .dn-float.gold{color:var(--gold);} #dnHeroFx .dn-float.gold{left:calc(50% + 40px);} #gameDungeon .dn-float.skill{color:#fff;font-size:1rem;} #gameDungeon .dn-float.crit{color:#ffd166;font-size:1.3rem;text-shadow:0 0 10px #ff9d2e,0 1px 2px #000;}
  #gameDungeon .dn-float.r0{color:#cfd8dc;} #gameDungeon .dn-float.r1{color:#8fd9a6;} #gameDungeon .dn-float.r2{color:#7cc3ea;} #gameDungeon .dn-float.r3{color:#b68be6;} #gameDungeon .dn-float.r4{color:#e6b56a;}
  #gameDungeon .dn-slash{bottom:calc(var(--gy) + 84px);} #gameDungeon .dn-bigslash{bottom:calc(var(--gy) + 64px);} #gameDungeon .dn-whirl{bottom:calc(var(--gy) + 96px);} #gameDungeon .dn-loot{bottom:calc(var(--gy) + 110px);}
  #gameDungeon .dn-banner{position:absolute;left:0;right:0;top:118px;text-align:center;font-family:var(--serif);font-weight:700;font-size:20px;letter-spacing:.16em;color:#f1f4ee;text-shadow:0 2px 14px rgba(0,0,0,.85);opacity:0;pointer-events:none;z-index:6;}
  #gameDungeon .dn-flash{inset:0;border-radius:0;background:var(--red);}
  /* ----- 오버레이 화면 공통 ----- */
  .dn-hud{position:absolute;inset:0;z-index:5;}
  .dn-hud.dmg{animation:baShake .25s;}
  .hy-warn{position:absolute;top:128px;left:50%;transform:translateX(-50%);z-index:40;background:var(--red);color:#fff;font-size:12px;font-weight:600;padding:6px 14px;border-radius:3px;animation:hyShake .5s;}
  .dn-topbar{position:absolute;top:0;left:0;right:0;height:112px;display:grid;grid-template-columns:1fr auto 1fr;align-items:start;padding:20px 30px 0;pointer-events:none;z-index:7;}
  .dn-topbar>*{pointer-events:auto;}
  .dn-logo{display:flex;align-items:center;gap:12px;} .dn-logo i{width:36px;height:36px;border:1px solid var(--hl2);border-radius:4px;display:grid;place-items:center;font-family:var(--serif);font-style:normal;color:var(--acc);font-size:17px;background:var(--hb);}
  .dn-logo b{display:block;font-family:var(--serif);font-size:21px;letter-spacing:.16em;color:#eef2ea;font-weight:700;line-height:1.1;} .dn-logo small{display:block;font-size:10px;color:var(--mut);letter-spacing:.1em;margin-top:3px;}
  .dn-stagehead{text-align:center;padding-top:4px;}
  .dn-stageno{font-family:var(--mono);font-size:10px;letter-spacing:.34em;color:var(--mut);display:flex;align-items:center;gap:14px;justify-content:center;} .dn-stageno::before,.dn-stageno::after{content:"";width:40px;height:1px;background:var(--hl2);}
  .dn-stagename{font-family:var(--serif);font-size:27px;font-weight:700;letter-spacing:.08em;color:#f1f4ee;margin-top:6px;text-shadow:0 2px 14px rgba(0,0,0,.7);}
  .dn-stagectl{display:flex;gap:6px;justify-content:center;margin-top:10px;}
  .dn-stagectl button,.dn-toplinks button{font-family:var(--mono);font-size:10px;letter-spacing:.14em;color:var(--mut);background:var(--hb);border:1px solid var(--hl);border-radius:3px;padding:6px 10px;cursor:pointer;transition:color .15s,border-color .15s;}
  .dn-stagectl .dn-perklater{color:#f3dcae;border-color:rgba(243,220,174,.55);}   /* 2026-10-17 남겨 둔 특성 고르기 버튼 — 눈에 띄게 금색 */
  .dn-stagectl button:hover,.dn-toplinks button:hover{color:var(--ink);border-color:var(--hl2);}
  .dn-speedbtn.on{color:var(--acc)!important;border-color:rgba(168,216,165,.45)!important;}   /* v168 2배속일 때 버튼이 켜져 보이게(JS 가 .on 을 걸지만 규칙이 없었음) */
  .dn-bossbtn{color:#f3dcae!important;border-color:rgba(243,220,174,.45)!important;} .dn-bossbtn:hover{background:rgba(243,220,174,.12)!important;}
  .dn-bossbtn.charged{color:#fff4d6!important;border-color:rgba(255,226,160,.95)!important;background:rgba(243,220,174,.14)!important;animation:dnCharged 1.1s ease-in-out infinite alternate;}   /* 2026-09-28 마나 300 이상 = ④ 궁극기 준비 */
  @keyframes dnCharged{from{box-shadow:0 0 0 1px rgba(243,220,174,.35),0 0 6px rgba(243,220,174,.25);}to{box-shadow:0 0 0 1px rgba(255,230,170,.9),0 0 18px rgba(255,210,120,.65);}}
  .dn-exitbtn.lock{opacity:.35;cursor:not-allowed;}
  .dn-toplinks{display:flex;gap:12px;justify-content:flex-end;align-items:center;font-family:var(--mono);font-size:10px;letter-spacing:.16em;color:var(--mut);}
  .dn-clock{color:var(--mut);} .dn-clock span{color:var(--ink);}
  /* ----- 좌우 패널 ----- */
  .dn-panel{position:absolute;top:118px;width:262px;max-height:calc(100% - 150px);overflow:auto;scrollbar-width:none;padding:0 0 10px;z-index:6;--hb:rgba(7,11,9,.84);}   /* v176 상자 바탕을 진하게(.58 → .84) — 배경 그림이 비쳐 글자가 묻히던 것 */ .dn-panel::-webkit-scrollbar{display:none;}
  .dn-left{left:28px;} .dn-right{right:18px;width:272px;scrollbar-gutter:stable;scrollbar-width:thin;scrollbar-color:rgba(214,226,214,.3) transparent;} .dn-right>*{max-width:262px;} .dn-right>.dn-ptitle{max-width:258px;}   /* v130 특성이 많으면 오른쪽 패널 아래가 잘렸음 — 넘칠 때만 얇은 스크롤바 */
  .dn-ptitle{font-size:12px;font-weight:700;color:#d6ded2;letter-spacing:.08em;margin:14px 2px 7px;display:flex;justify-content:space-between;align-items:baseline;} .dn-ptitle:first-child{margin-top:0;} .dn-ptitle small{font-family:var(--mono);font-size:10px;letter-spacing:.16em;color:#98a498;font-weight:400;} .dn-panel .dn-ptitle{font-size:13px;color:#eef2ea;}   /* v176~177 양쪽 패널 제목 */
  .dn-right.pts #dnPtsTxt{color:var(--acc);animation:dnBlink 1s ease-in-out infinite alternate;}
  .dn-skills{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;}
  .dn-skill{display:grid;grid-template-columns:30px minmax(0,1fr);grid-template-rows:auto auto;column-gap:6px;row-gap:3px;align-items:center;text-align:left;background:var(--hb);border:1px solid var(--hl);border-radius:4px;padding:6px 6px;transition:border-color .2s,background .15s;}   /* 2026-09-28 스킬 4칸(2×2) — 칸을 가로형으로 줄여 왼쪽 패널 높이는 예전 1줄과 비슷하게 */ .dn-skill:not(.locked):hover{border-color:rgba(168,216,165,.45);background:rgba(16,26,20,.92);} .dn-skill.locked{opacity:.5;} .dn-skill.ready .dn-skico{border-color:var(--acc);box-shadow:0 0 10px rgba(168,216,165,.35);}
  .dn-skico{grid-column:1;grid-row:1;position:relative;width:30px;height:30px;margin:0;border:1px solid var(--hl2);border-radius:4px;display:grid;place-items:center;font-size:16px;background:linear-gradient(to top,rgba(168,216,165,.3) var(--p,0%),rgba(0,0,0,.25) var(--p,0%));}
  .dn-skill:not(.locked){cursor:pointer;} .dn-skill.off{opacity:.62;} .dn-skill.off .dn-skico{filter:grayscale(.85);}
  /* 2026-10-17 작은 화면(1366×768 · 125% 배율)에서 화면 전체가 0.7배쯤 줄어 6~8px 이 되던 글자들의 기준 크기를 올림: 스킬 ON/OFF 8→10 · 체력·LV 줄 10→13 · 경험치 숫자 9→12 · 입력 상자 위아래 줄 9→11 · 특성 카드 설명 11→13 · 상한 표시 9→10 · 안내 10→11 */
  .dn-skill .sw{grid-column:1;grid-row:2;display:block;margin:0 auto;width:fit-content;padding:0 4px;border:1px solid var(--hl);border-radius:999px;font-family:var(--mono);font-size:10px;line-height:13px;letter-spacing:.06em;color:#98a498;}
  .dn-skill.locked .dn-skico{grid-row:1 / span 2;} .dn-skill.act .dn-skico{border-color:#f3dcae;box-shadow:0 0 12px rgba(243,220,174,.55);background:linear-gradient(to top,rgba(243,220,174,.4) var(--p,0%),rgba(0,0,0,.25) var(--p,0%));}   /* 2026-09-28 ③이 켜져 있는 동안 = 남은 시간 */
  .dn-skill .sw.on{color:var(--acc);border-color:rgba(168,216,165,.45);}   /* v170 스킬 자동 사용 켜기/끄기 */
  .dn-skname{grid-column:2;grid-row:1 / span 2;min-width:0;font-size:12px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;} .dn-skname small{display:block;font-size:10px;color:#aab4a6;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;} .dn-skname small.tight{letter-spacing:-.8px;}   /* v130 숙련 두 자리면 '숙련 15 · 120 마나'가 칸을 1~4px 넘어 잘렸음 */
  .dn-slots{display:flex;flex-direction:column;gap:4px;}
  .dn-slot{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:7px 10px;background:var(--hb);border:1px solid var(--hl);border-radius:3px;cursor:pointer;font-size:12px;transition:border-color .15s,background .15s;} .dn-slot:not(.empty):hover{border-color:rgba(168,216,165,.45);background:rgba(16,26,20,.92);}
  .dn-slot i{font-style:normal;color:#bfc9bb;} .dn-slot b{font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:160px;} .dn-slot.empty b{color:#7d897f;font-weight:400;} .dn-slot.empty{cursor:default;}
  .dn-bagtools{display:flex;align-items:baseline;gap:8px;}   /* 2026-09-23 가방 제목 줄 오른쪽: 일괄 판매 버튼 + 칸 수 */
  .dn-sellall{font-family:var(--ui);font-size:10px;font-weight:600;letter-spacing:.02em;color:#c9d2c6;background:transparent;border:1px solid var(--hl2);border-radius:3px;padding:2px 7px;cursor:pointer;white-space:nowrap;transition:color .15s,border-color .15s,background .15s;}
  .dn-sellall:hover:not(:disabled){color:var(--ink);border-color:rgba(168,216,165,.55);} .dn-sellall.arm{color:#f3dcae;border-color:rgba(243,220,174,.6);background:rgba(243,220,174,.1);} .dn-sellall:disabled{opacity:.35;cursor:default;}
  .dn-tip .eb{font-style:normal;color:#f3dcae;margin-left:5px;}   /* 2026-09-23 툴팁 옵션: 기본값 옆 강화로 오른 값(+nn) */
  /* 2026-09-23 장비 옵션 줄 맞춤(사용자 선택 시안 A): 이름 | 기본값(흰) | 강화값(금) | 비교(▲▼) 네 칸 — 옵션이 여러 개여도 숫자가 세로로 줄 맞춰 섬 */
  .dn-tip .s.eqs{display:grid;grid-template-columns:1fr auto auto auto;column-gap:9px;row-gap:4px;align-items:baseline;}
  .dn-tip .row.g{display:contents;} .dn-tip .row.g span{color:#b9c3b5;}
  .dn-tip .row.g b{text-align:right;font-weight:700;color:#f3f6f0;font-variant-numeric:tabular-nums;}
  .dn-tip .row.g .eb{margin-left:0;font-family:ui-monospace,'Cascadia Mono',Consolas,monospace;font-weight:700;min-width:3ch;white-space:nowrap;}
  .dn-tip .row.g .dl{margin-left:0;text-align:right;min-width:4ch;white-space:nowrap;font-family:ui-monospace,'Cascadia Mono',Consolas,monospace;} .dn-tip .row.g.lost span,.dn-tip .row.g.lost b{color:#8c978a;}
  .dn-bag{display:grid;grid-template-columns:repeat(4,1fr);gap:5px;position:relative;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:rgba(168,216,165,.45) transparent;}   /* 2026-09-23 120칸 — 높이(3줄)는 dnRenderBag 이 칸 크기로 정함 · 끝까지 굴려도 패널이 따라 굴러가지 않게 · position = 새 칸 위치 계산 기준 */
  .dn-cell{aspect-ratio:1;background:var(--hb);border:1px solid var(--hl);border-radius:3px;font-size:9px;line-height:1.2;padding:3px;display:flex;align-items:center;justify-content:center;text-align:center;overflow:hidden;color:var(--ink);word-break:keep-all;}
  .dn-cell.has{cursor:pointer;background:var(--hb2);} .dn-cell.has:hover{background:rgba(16,26,20,.92);box-shadow:0 0 0 1px rgba(168,216,165,.55),0 0 10px rgba(168,216,165,.18);} .dn-cell.new{animation:dnCellPop .3s ease-out;}
  .r0{color:#cfd8dc;} .r1{color:#8fd9a6;} .r2{color:#7cc3ea;} .r3{color:#b68be6;} .r4{color:#e6b56a;}
  .dn-cell.has.r1{border-color:rgba(143,217,166,.45);} .dn-cell.has.r2{border-color:rgba(124,195,234,.45);} .dn-cell.has.r3{border-color:rgba(182,139,230,.5);} .dn-cell.has.r4{border-color:rgba(230,181,106,.55);}
  .dn-sidehint{font-size:11px;color:#98a498;margin-top:8px;letter-spacing:.04em;}
  .dn-iico{display:inline-block;flex-shrink:0;background:url(img/dn/items.webp) no-repeat;background-size:600% 700%;filter:drop-shadow(0 2px 3px rgba(0,0,0,.65));}   /* v132 장비 그림(시트 6×7, 칸 128px) */
  .dn-iico.h-heukyo{background-image:url(img/dn/items_heukyo.webp?v=1);background-size:600% 600%;} .dn-iico.h-eunseol{background-image:url(img/dn/items_eunseol.webp?v=1);background-size:600% 600%;} .dn-iico.h-danha{background-image:url(img/dn/items_danha.webp?v=1);background-size:600% 600%;} .dn-iico.h-mukha{background-image:url(img/dn/items_mukha.webp?v=1);background-size:600% 600%;}   /* v134 직업별 장비 그림 시트(6×6, 칸 128px · 행 = 부위 · 열 = 초A·초B·중A·중B·후A·후B) — dungeon.js 의 DN_GEAR_ON 이 켜진 직업에만 이 클래스가 붙음(꺼져 있으면 파일을 요청하지 않음). 그림을 고치면 ?v= 를 올릴 것 */
  .dn-cell.pic{padding:0;position:relative;} .dn-iico.bag{width:84%;height:84%;} .dn-cell .en{position:absolute;right:3px;bottom:2px;font:700 10px var(--mono);color:#f3dcae;text-shadow:0 1px 2px #000,0 0 3px #000;pointer-events:none;}
  .dn-iico.slot{width:22px;height:22px;margin-left:auto;margin-right:-2px;filter:drop-shadow(0 1px 2px rgba(0,0,0,.7));}
  .dn-tip .dn-iico.tip{float:right;width:46px;height:46px;margin:0 0 4px 10px;}
  .dn-enhrow .ico .dn-iico.enh{width:42px;height:42px;}
  .dn-tip{position:fixed;left:0;top:0;z-index:1000;min-width:190px;max-width:250px;padding:10px 12px 9px;background:rgba(8,13,10,.95);border:1px solid rgba(214,226,214,.3);border-top-width:2px;border-radius:4px;box-shadow:0 10px 28px rgba(0,0,0,.6);color:#e3e9df;font-family:var(--ui);font-size:11px;line-height:1.45;pointer-events:none;transform-origin:0 0;opacity:0;transition:opacity .08s ease-out;}   /* v125 장비 옵션 툴팁(body 에 붙음, 배율은 JS 가 transform 으로) */
  .dn-tip.on{opacity:1;} .dn-tip .n{font-family:var(--kr);font-size:14px;font-weight:700;letter-spacing:.02em;display:flow-root;word-break:keep-all;} .dn-tip .m{font-size:10px;color:#98a498;margin-top:2px;letter-spacing:.02em;}
  .dn-tip .s{margin:8px 0 7px;padding-top:7px;border-top:1px solid rgba(214,226,214,.15);display:flex;flex-direction:column;gap:3px;} .dn-tip .row{display:flex;justify-content:space-between;gap:16px;} .dn-tip .row span{color:#c9d2c6;} .dn-tip .row b{font-family:ui-monospace,'Cascadia Mono',Consolas,monospace;font-weight:600;color:#e8dfae;}
  .dn-tip .h{font-size:10px;color:#7d897f;} .dn-tip .h i{font-style:normal;white-space:nowrap;}   /* v136 고침: 이름 칸(.n)이 오른쪽 그림(float)을 피해 서게(flow-root) — 상자 폭이 '이름 + 그림'에 맞춰 늘어나 '+30'만 다음 줄로 떨어지지 않음 · 그래도 넘치면 낱말 단위로 줄바꿈(keep-all — '지팡 / 이' 처럼 글자 중간에서 안 끊김) · 안내 줄 끝의 괄호(이 중 강화분 …)는 통째로 다음 줄로 */
  .dn-tip.st{max-width:270px;} .dn-tip.st .n{display:flex;justify-content:space-between;align-items:baseline;gap:16px;} .dn-tip.st .n em{font-style:normal;font-family:ui-monospace,'Cascadia Mono',Consolas,monospace;font-size:13px;color:#f3f6f0;white-space:nowrap;}   /* v176 스탯·능력치 툴팁 */
  .dn-tip .x{font-size:10px;color:#98a498;margin:-2px 0 7px;}
  .dn-tip .row span,.dn-tip .row b,.dn-tip:not(.st) .m{white-space:nowrap;}   /* v177 비교 표시가 붙어도 이름·값이 두 줄로 안 갈리게(폭은 min-width 190 부터 내용에 맞춰 늘어남) */
  .dn-tip .dl{font-style:normal;font-size:10px;font-weight:700;margin-left:7px;} .dn-tip .dl.up{color:#8fd9a6;} .dn-tip .dl.dn{color:#e07a76;} .dn-tip .dl.eq{color:#7d897f;} .dn-tip .row.lost span{color:#8c978a;}   /* v177 착용 장비와 비교 ▲▼ */
  .dn-goldrow{display:flex;justify-content:space-between;align-items:center;padding:9px 12px;background:var(--hb);border:1px solid var(--hl);border-radius:4px;font-size:12px;color:#b9c3b5;} .dn-goldrow b{font-family:var(--mono);color:var(--gold);font-size:13px;letter-spacing:.06em;}
  .dn-herocard{display:flex;gap:12px;align-items:center;margin-top:8px;padding:12px;background:var(--hb);border:1px solid var(--hl);border-radius:4px;}
  .dn-herocard img{width:58px;height:58px;object-fit:cover;object-position:center;border:1px solid var(--hl2);border-radius:4px;background:rgba(0,0,0,.35);flex-shrink:0;}
  .dn-herocard small{display:block;font-size:11px;color:#b0baac;letter-spacing:.06em;} .dn-herocard b{display:block;font-family:var(--serif);font-size:20px;color:#f1f4ee;margin:2px 0 3px;letter-spacing:.1em;}
  .dn-attrs{display:flex;flex-direction:column;gap:4px;}
  .dn-attr{display:grid;grid-template-columns:auto auto auto 1fr;align-items:center;gap:8px;padding:6px 10px;background:var(--hb);border:1px solid var(--hl);border-radius:3px;font-size:12px;transition:border-color .12s,background .12s;} .dn-attr:hover{border-color:rgba(168,216,165,.45);background:rgba(16,26,20,.92);}
  .dn-attr .k{color:#c9d2c6;min-width:26px;} .dn-attr .v{font-family:var(--mono);color:var(--acc);font-size:14px;font-weight:700;}
  .dn-plus{width:20px;height:20px;border-radius:50%;border:1px solid var(--hl2);background:transparent;color:var(--ink);cursor:pointer;font-size:12px;line-height:1;padding:0;} .dn-plus:disabled{opacity:.22;cursor:default;} .dn-right.pts .dn-plus:not(:disabled){border-color:var(--acc);color:var(--acc);box-shadow:0 0 8px rgba(168,216,165,.35);}
  .dn-attr .fx{font-size:10.5px;color:#b3bdaf;text-align:right;justify-self:end;line-height:1.3;}
  .dn-stats{width:100%;border-collapse:separate;border-spacing:0;font-size:12px;background:var(--hb);border:1px solid var(--hl);border-radius:4px;overflow:hidden;}
  .dn-stats td{padding:6px 11px;border-bottom:1px solid rgba(214,226,214,.07);transition:background .12s;} .dn-stats tr:last-child td{border-bottom:none;} .dn-stats td:first-child{color:#bfc9bb;} .dn-stats td:last-child{text-align:right;font-family:var(--mono);color:#f4f7f1;font-weight:700;font-size:12.5px;letter-spacing:.02em;}
  .dn-stats td:last-child small{font-family:var(--ui);font-size:10.5px;font-weight:400;color:#98a498;margin-right:4px;}   /* v176 '초당'·'2초마다' 같은 단위는 작게 */
  .dn-stats tr:hover td{background:rgba(168,216,165,.1);} .dn-stats tr:hover td:first-child{color:#f1f4ee;box-shadow:inset 2px 0 0 #a8d8a5;}   /* v176 마우스를 올린 줄 */
  .dn-stats .cap,.dn-tip .cap{font-style:normal;font-family:var(--ui);font-size:10px;font-weight:600;color:#e8dfae;border:1px solid rgba(232,223,174,.5);border-radius:3px;padding:0 4px;margin-left:5px;vertical-align:1px;}   /* v176 상한·최대 표시 */
  .dn-perks{display:flex;flex-wrap:wrap;gap:4px;} .dn-perks span{font-size:11px;padding:4px 9px;border:1px solid rgba(214,226,214,.22);border-radius:3px;background:var(--hb);color:#e9eee5;} .dn-perks .none{color:var(--dim);border-style:dashed;}
  /* ----- 하단 중앙: 상태바 + 문장 패널 ----- */
  .dn-bottom{position:absolute;left:50%;bottom:22px;transform:translateX(-50%);width:640px;z-index:6;}
  .dn-status{background:var(--hb2);border:1px solid var(--hl);border-radius:4px;padding:8px 12px 12px;backdrop-filter:blur(4px);}
  .dn-srow{display:flex;justify-content:space-between;align-items:baseline;font-family:var(--mono);font-size:13px;letter-spacing:.14em;color:var(--mut);} .dn-srow b{color:#eef2ea;font-weight:700;} .dn-srow b .dn-heroname{font-family:var(--ui);letter-spacing:.06em;} .dn-srow em{font-style:normal;}
  .dn-hp{height:5px;margin-top:7px;background:rgba(255,255,255,.1);border-radius:2px;overflow:hidden;} .dn-hp b{display:block;height:100%;width:100%;background:var(--acc);transition:width .2s;}
  .dn-xp{position:relative;height:3px;margin-top:7px;margin-bottom:10px;background:rgba(255,255,255,.08);border-radius:2px;} .dn-xp b{display:block;height:100%;width:0;background:var(--xp);transition:width .2s;border-radius:2px;} .dn-xp.pop b{animation:dnPop .32s;}
  .dn-xp small{position:absolute;right:0;top:6px;font-family:var(--mono);font-size:12px;letter-spacing:.12em;color:var(--dim);}
  .dn-typebox{margin-top:10px;background:var(--hb2);border:1px solid var(--hl);border-radius:4px;padding:10px 14px 9px;backdrop-filter:blur(4px);}
  .dn-thead,.dn-tfoot{display:flex;justify-content:space-between;font-family:var(--mono);font-size:11px;letter-spacing:.14em;color:var(--mut);} .dn-tfoot span:first-child{color:var(--dim);}
  .ta-textwrap{position:relative;margin:8px 0 7px;}
  .ta-text{font-family:var(--type-font,var(--kr));line-height:1.65;padding:0;background:none;border:none;}
  .dn-target{font-size:20px;text-align:center;color:#c9d2c6;min-height:1.65em;word-break:keep-all;}
  .dn-typed{margin-top:8px;min-height:40px;padding:7px 12px;border:1px solid var(--hl2);border-radius:3px;background:rgba(0,0,0,.28);font-size:17px;text-align:center;color:#eef2ea;word-break:break-all;}
  .ta-ch{position:relative;} .ta-ch.ok{color:#eef2ea;} .ta-ch.bad{color:var(--red);} .ta-ch.cur{color:#f4f7f1;box-shadow:inset 0 -2px 0 var(--acc);}
  .dn-tch.ok{color:#eef2ea;} .dn-tch.bad{color:var(--red);background:rgba(224,122,118,.16);border-radius:2px;} .dn-tch.comp{color:var(--acc);border-bottom:1px solid var(--acc);}
  .dn-caret{display:inline-block;width:2px;height:1.05em;vertical-align:-.15em;background:var(--acc);margin-left:1px;animation:dnCaret 1s steps(1) infinite;}
  .ta-io{position:absolute;inset:0;width:100%;height:100%;opacity:0;border:none;background:none;resize:none;font-family:var(--type-font,var(--kr));   /* 숨은 입력 칸도 타자 글꼴로(index.html 의 .ta-io 와 같게) — inherit 면 Gothic A1 로 잡혀, 치는 도중에 잠깐 생기는 글자 때문에 Gothic A1 의 나머지 글꼴 파일(173KB)을 받게 됨 */ font-size:inherit;color:transparent;caret-color:transparent;padding:0;margin:0;outline:none;}
  /* ----- 특성 선택 ----- */
  .dn-perkbox{position:absolute;inset:0;z-index:20;background:rgba(5,9,7,.8);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:22px;}
  .dn-perktitle{font-family:var(--serif);font-size:22px;letter-spacing:.12em;color:#f1f4ee;} .dn-perktitle small{font-family:var(--mono);font-size:10px;letter-spacing:.22em;color:var(--mut);margin-left:12px;}
  .dn-cards{display:flex;gap:14px;} .dn-card{width:196px;padding:18px 16px;background:var(--hb2);border:1px solid var(--hl2);border-radius:4px;text-align:center;cursor:pointer;transition:border-color .15s,transform .15s;} .dn-card:hover{border-color:var(--acc);transform:translateY(-2px);}
  .dn-card .k{display:inline-block;font-family:var(--mono);font-size:11px;border:1px solid var(--hl2);border-radius:3px;padding:2px 7px;color:var(--mut);} .dn-card .n{font-family:var(--serif);font-size:17px;color:#f1f4ee;margin:10px 0 6px;letter-spacing:.06em;} .dn-card .n em{font-style:normal;color:var(--acc);font-size:13px;} .dn-card .d{font-size:13px;color:var(--mut);line-height:1.5;}
  .dn-card.mast{border-color:rgba(243,220,174,.55);background:linear-gradient(to bottom,rgba(243,220,174,.1),rgba(0,0,0,0) 60%),var(--hb2);} .dn-card.mast .n{color:#f3dcae;} .dn-card.mast .d small{font-size:10px;color:#c9b98f;}   /* 2026-09-28 ③④ 숙련 카드 */
  /* ----- 시작 · 강화 · 결과 화면(장면 위 가운데 패널) ----- */
  .dn-screen{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:8;background:var(--hb2);border:1px solid var(--hl2);border-radius:6px;backdrop-filter:blur(6px);box-shadow:0 20px 60px rgba(0,0,0,.55);}
  #dnStart{width:620px;padding:20px 34px 26px;display:flex;flex-direction:column;align-items:center;text-align:center;}
  .game-back{align-self:flex-start;background:none;border:none;color:var(--mut);cursor:pointer;font-family:var(--mono);font-size:10px;letter-spacing:.16em;padding:0;margin-bottom:8px;} .game-back:hover{color:var(--ink);}
  #dnStart .dn-stageno{margin-top:2px;} #dnStart .ta-title{font-family:var(--serif);font-size:30px;letter-spacing:.16em;color:#f1f4ee;margin:8px 0 16px;font-weight:700;}
  .dn-heroes{display:flex;gap:16px;justify-content:center;}
  .dn-heropick{background:rgba(0,0,0,.28);border:1px solid var(--hl);border-radius:4px;padding:10px 18px 8px;cursor:pointer;color:var(--mut);font-family:var(--serif);font-size:15px;letter-spacing:.12em;transition:border-color .15s,color .15s;}
  .dn-heropick img{display:block;height:150px;width:auto;margin:0 auto 6px;filter:drop-shadow(0 3px 3px rgba(0,0,0,.5));} .dn-heropick span{display:block;}
  .dn-heropick small{display:block;font-family:var(--ui);font-size:10px;letter-spacing:.24em;color:var(--mut);margin-top:3px;} .dn-heropick.on small{color:var(--acc);} .dn-heropick{min-width:140px;}
  .dn-heropick em{display:block;font-style:normal;font-family:var(--ui);font-size:10.5px;letter-spacing:.01em;line-height:1.45;color:var(--mut);margin-top:7px;white-space:nowrap;} .dn-heropick.on em{color:#dfe6da;}   /* v165 직업 한 줄 설명 */
  .dn-perks .pas{border-color:var(--gold);color:var(--gold);}   /* v165 직업 기본기 */
  #gameDungeon .dn-float.bleed{color:#ff7a7a;font-size:.76rem;} #gameDungeon .dn-float.burst{color:#a9e0ff;font-size:.8rem;} #gameDungeon .dn-float.far{color:#ffe7a3;} #gameDungeon .dn-float.ult{color:#fff3c4;font-size:1.75rem;text-shadow:0 0 14px #ffb347,0 0 4px #ff8a00,0 1px 2px #000;}   /* v165 출혈 · 서리 폭발 · 원거리 가중 피해 숫자 */
  .dn-heropick:hover{border-color:var(--hl2);} .dn-heropick.on{border-color:var(--acc);color:#f1f4ee;box-shadow:0 0 0 1px rgba(168,216,165,.3),0 0 20px rgba(168,216,165,.12);}
  .ta-info{font-size:12px;color:var(--mut);line-height:1.7;margin:16px 0 14px;} .ta-info b{color:var(--ink);font-weight:600;}
  .dn-char{font-size:12px;color:var(--ink);padding:10px 16px;border:1px solid var(--hl);border-radius:4px;background:rgba(0,0,0,.25);line-height:1.6;} .dn-char b{color:var(--acc);} .dn-char b.gold{color:var(--gold);} .dn-char small{color:var(--mut);} .dn-char small.fled{color:var(--red);} .dn-char small.note{color:var(--acc);}   /* v168 보스전 도중에 나갔다 온 경우의 패배 처리 안내 · v134 장비 변환 안내(.note) */
  .dn-startbtns{display:flex;gap:10px;margin-top:18px;}   /* v178 최고 기록 줄이 빠진 자리(캐릭터 상자와 입장 버튼 사이) */ .ta-play{font-family:var(--serif);font-size:17px;letter-spacing:.16em;padding:12px 42px;background:#e8eee5;color:#0c1410;border:none;border-radius:3px;cursor:pointer;font-weight:700;} .ta-play:hover{background:#fff;}
  .dn-enhopen{display:block;width:100%;margin-top:8px;padding:8px 0;font-size:12px;font-weight:700;letter-spacing:.1em;color:#f3dcae;background:rgba(243,220,174,.07);border:1px solid rgba(243,220,174,.45);border-radius:3px;cursor:pointer;transition:background .15s,border-color .15s;} .dn-enhopen:hover{background:rgba(243,220,174,.16);border-color:rgba(243,220,174,.75);}   /* v130 가방 아래 강화 버튼(보스 소환 버튼과 같은 금색 톤) */
  .dn-acct{position:absolute;top:16px;right:34px;font-family:var(--mono);font-size:10px;letter-spacing:.14em;color:var(--mut);background:none;border:1px solid var(--hl);border-radius:3px;padding:6px 10px;cursor:pointer;transition:color .15s,border-color .15s;} .dn-acct:hover{color:var(--ink);border-color:var(--hl2);}   /* v135 로그인 · 내 계정(시작 화면 상자 오른쪽 위 — '← 타닥으로'와 같은 높이) */
  .dn-syncnote{font-size:11px;color:var(--mut);line-height:1.55;margin-top:8px;max-width:540px;word-break:keep-all;} .dn-syncnote small{display:block;font-size:10px;color:var(--dim);} .dn-syncnote .tdk-link{font-size:11px;color:var(--acc);margin-left:2px;}   /* v135 서버 저장 안내 줄(account.js 가 글자를 넣음 · 캐릭터 상자 바로 아래) */
  .dn-syncmark{color:var(--gold);border:1px solid rgba(217,201,138,.4);border-radius:3px;padding:5px 9px;letter-spacing:.12em;white-space:nowrap;}   /* v135 전투 화면: 서버 저장이 멈췄을 때만 보임(이 브라우저에는 계속 저장) */
  .ta-hint{font-size:11px;color:var(--dim);margin-top:12px;letter-spacing:.04em;} .dn-reset{margin-top:12px;background:none;border:1px solid var(--hl);color:var(--dim);font-size:11px;padding:5px 10px;border-radius:3px;cursor:pointer;} .dn-reset:hover{color:var(--ink);} .dn-reset:disabled{cursor:default;color:var(--acc);border-color:var(--hl2);}
  /* ----- v131 꾸민 강화 창: 금테 모서리 장식 · 대장간 머리글 · 확률 칩 · 부위 아이콘 카드 · 단계 막대 · 금색 강화 버튼 · 성공/실패 연출 ----- */
  .dn-enhmodal{position:absolute;inset:0;z-index:25;background:radial-gradient(ellipse at 50% 45%,rgba(5,9,7,.58),rgba(5,9,7,.88));display:flex;align-items:center;justify-content:center;} .dn-enhmodal[hidden]{display:none!important;}   /* 플레이 화면 위(열려 있는 동안 전투 멈춤) */
  .dn-enhmodal:not([hidden]) .dn-enhwin{animation:dnEnhIn .2s ease-out;}
  .dn-enhwin{position:relative;width:850px;max-height:calc(100% - 110px);display:flex;flex-direction:column;padding:22px 24px 14px;border:1px solid rgba(217,201,138,.4);border-radius:6px;background:radial-gradient(120% 70% at 50% -12%,rgba(217,201,138,.14),rgba(217,201,138,0) 60%),linear-gradient(180deg,rgba(17,23,19,.97),rgba(7,11,9,.98));box-shadow:0 30px 90px rgba(0,0,0,.72),inset 0 0 0 1px rgba(0,0,0,.55),inset 0 0 46px rgba(217,201,138,.05);}
  .dn-enhwin::before{content:"";position:absolute;inset:7px;pointer-events:none;border:1px solid rgba(217,201,138,.12);border-radius:3px;background:linear-gradient(#d9c98a,#d9c98a) 0 0/16px 2px,linear-gradient(#d9c98a,#d9c98a) 0 0/2px 16px,linear-gradient(#d9c98a,#d9c98a) 100% 0/16px 2px,linear-gradient(#d9c98a,#d9c98a) 100% 0/2px 16px,linear-gradient(#d9c98a,#d9c98a) 0 100%/16px 2px,linear-gradient(#d9c98a,#d9c98a) 0 100%/2px 16px,linear-gradient(#d9c98a,#d9c98a) 100% 100%/16px 2px,linear-gradient(#d9c98a,#d9c98a) 100% 100%/2px 16px;background-repeat:no-repeat;opacity:.8;}
  .dn-enhhead{position:relative;display:flex;align-items:center;gap:14px;padding:0 4px 14px;border-bottom:1px solid rgba(217,201,138,.18);}
  .dn-enhtitle{display:flex;align-items:center;gap:13px;flex:1;} .dn-enhico{width:44px;height:44px;padding:9px;border:1px solid rgba(217,201,138,.5);border-radius:50%;color:#ecdca0;background:radial-gradient(circle at 50% 35%,rgba(217,201,138,.25),rgba(0,0,0,.4));box-shadow:0 0 20px rgba(217,201,138,.2);}
  .dn-enhtitle small{display:block;font-family:var(--mono);font-size:9px;letter-spacing:.46em;color:rgba(217,201,138,.72);} .dn-enhtitle b{display:block;margin-top:2px;font-family:var(--serif);font-size:24px;font-weight:700;letter-spacing:.16em;color:#f4eed8;text-shadow:0 2px 14px rgba(0,0,0,.6);}
  .dn-enhgold{display:flex;align-items:baseline;gap:6px;padding:7px 15px;border:1px solid rgba(217,201,138,.38);border-radius:999px;background:linear-gradient(180deg,rgba(217,201,138,.14),rgba(217,201,138,.03));font-family:var(--mono);color:#ecdca0;} .dn-enhgold.bump{animation:dnEnhBump .35s ease-out;}
  .dn-enhgold i{font-style:normal;color:#f3dcae;text-shadow:0 0 9px rgba(243,220,174,.65);} .dn-enhgold span{font-size:16px;font-weight:700;letter-spacing:.04em;} .dn-enhgold small{font-size:10px;color:rgba(217,201,138,.75);}
  .dn-enhx{width:32px;height:32px;flex-shrink:0;border-radius:50%;border:1px solid var(--hl2);background:rgba(0,0,0,.3);color:var(--mut);font-size:13px;line-height:1;cursor:pointer;transition:color .15s,border-color .15s,background .15s;} .dn-enhx:hover{color:#fff;border-color:rgba(217,201,138,.65);background:rgba(217,201,138,.08);}
  .dn-enhrules{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:12px 4px 0;} .dn-enhrules .c{font-size:10px;color:var(--mut);padding:3px 10px;border:1px solid var(--hl);border-radius:999px;background:rgba(0,0,0,.28);} .dn-enhrules .c b{font-family:var(--mono);font-weight:600;color:var(--ink);margin-right:6px;}
  .dn-enhrules .n{flex-basis:100%;font-size:10px;color:var(--dim);margin-top:3px;letter-spacing:.02em;}
  .dn-enhmsg{min-height:20px;margin:8px 4px 4px;text-align:center;font-size:12px;font-weight:700;letter-spacing:.04em;opacity:0;transform:translateY(-3px);transition:opacity .2s,transform .2s;} .dn-enhmsg.on{opacity:1;transform:none;} .dn-enhmsg.ok{color:#f3dcae;text-shadow:0 0 14px rgba(243,220,174,.5);} .dn-enhmsg.bad{color:var(--red);}
  .dn-enhlist{flex:1;min-height:0;overflow:auto;padding:2px 6px 6px 4px;display:flex;flex-direction:column;gap:7px;scrollbar-width:thin;scrollbar-color:rgba(217,201,138,.35) transparent;}
  .dn-enhsec{display:flex;align-items:center;gap:8px;margin:6px 2px 0;font-size:11px;font-weight:700;letter-spacing:.14em;color:#d6ded2;} .dn-enhsec small{font-family:var(--mono);font-size:9px;font-weight:400;color:var(--dim);} .dn-enhsec::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,rgba(217,201,138,.32),rgba(217,201,138,0));}
  .dn-enhrow{--rc:207,216,220;position:relative;flex-shrink:0;display:grid;grid-template-columns:48px 1fr auto;align-items:center;gap:15px;padding:10px 12px 10px 11px;border:1px solid rgba(var(--rc),.17);border-left:2px solid rgba(var(--rc),.65);border-radius:5px;background:linear-gradient(90deg,rgba(var(--rc),.08),rgba(0,0,0,.3) 42%);transition:border-color .15s;}
  .dn-enhrow:hover{border-color:rgba(var(--rc),.42);} .dn-enhrow.q1{--rc:143,217,166;} .dn-enhrow.q2{--rc:124,195,234;} .dn-enhrow.q3{--rc:182,139,230;} .dn-enhrow.q4{--rc:230,181,106;}
  .dn-enhrow .ico{position:relative;width:48px;height:48px;border-radius:7px;display:grid;place-items:center;color:rgb(var(--rc));border:1px solid rgba(var(--rc),.45);background:radial-gradient(circle at 50% 30%,rgba(var(--rc),.24),rgba(0,0,0,.45) 72%);box-shadow:inset 0 0 12px rgba(0,0,0,.5);}
  .dn-enhrow .ico svg{width:26px;height:26px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 0 4px rgba(var(--rc),.5));}
  .dn-enhrow .ico b{position:absolute;right:-7px;bottom:-6px;min-width:24px;padding:1px 5px;border-radius:999px;background:linear-gradient(180deg,#f5e2b0,#b8964f);color:#1a1408;font-family:var(--mono);font-size:10px;font-weight:700;text-align:center;box-shadow:0 2px 6px rgba(0,0,0,.65);}
  .dn-enhrow .i{min-width:0;} .dn-enhrow .nm{display:flex;align-items:baseline;gap:8px;} .dn-enhrow .nm b{font-family:var(--serif);font-size:15px;font-weight:700;letter-spacing:.03em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;} .dn-enhrow .nm small{font-size:10px;color:var(--dim);letter-spacing:.06em;white-space:nowrap;}
  .dn-enhrow .ps{display:flex;flex-wrap:wrap;gap:3px 14px;margin-top:5px;font-size:11px;} .dn-enhrow .p{display:inline-flex;align-items:baseline;gap:5px;color:var(--mut);} .dn-enhrow .p i{font-style:normal;} .dn-enhrow .p b{font-family:var(--mono);font-weight:600;color:var(--ink);}
  .dn-enhrow .p em{font-style:normal;font-family:var(--mono);font-weight:700;color:var(--acc);} .dn-enhrow .p em.eb{color:#f3dcae;}   /* 2026-09-23 강화로 오른 값(+nn) — 강화 단계 배지와 같은 금색 */
  /* 2026-09-23 옵션마다 칸 3열(사용자 선택 시안 A) — 칸 안은 이름 | 기본값 | 강화값 | ▸ 다음(또는 '강화 제외') */
  /* v136 고침: 숫자가 길어지면(강화 단계가 높은 장비) 칸 밖으로 넘쳐 옆 칸 글자와 겹치던 것 — 평소엔 그대로 3등분, 내용이 3등분보다 넓은 칸은 내용만큼 넓어지고(나머지 칸이 남은 폭을 나눔), 세 칸이 한 줄에 다 안 들어가면 다음 줄로 넘어감. 창 폭 800 → 850(세 자리 수치가 3등분 칸에 들어가는 폭) */
  .dn-enhrow .ps{display:flex;flex-wrap:wrap;gap:4px 10px;}
  .dn-enhrow .p{flex:1 1 0;min-width:max-content;max-width:calc((100% - 20px) / 3);display:grid;grid-template-columns:auto 1fr auto auto;align-items:baseline;gap:5px;padding:3px 7px;border:1px solid rgba(214,226,214,.1);border-radius:3px;background:rgba(0,0,0,.18);white-space:nowrap;}
  .dn-enhrow .p b{text-align:right;} .dn-enhrow .p em.nx{min-width:5ch;} .dn-enhrow .p u{text-decoration:none;font-size:9px;color:var(--dim);border:1px solid var(--hl);border-radius:3px;padding:0 4px;}
  .dn-enhrow .lv{display:flex;align-items:center;gap:9px;margin-top:7px;} .dn-enhrow .lv small{font-family:var(--mono);font-size:9px;letter-spacing:.08em;color:var(--dim);white-space:nowrap;}
  .dn-enhrow .bar{position:relative;flex:0 1 230px;height:5px;border-radius:3px;overflow:hidden;background:linear-gradient(90deg,#e6cf8e var(--p),rgba(255,255,255,.09) var(--p));box-shadow:0 0 7px rgba(217,201,138,.14);}
  .dn-enhrow .bar::after{content:"";position:absolute;inset:0;background:repeating-linear-gradient(90deg,transparent 0 calc(100% / var(--n) - 1px),rgba(8,12,10,.95) calc(100% / var(--n) - 1px) calc(100% / var(--n)));}
  .dn-enhdo{min-width:158px;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 14px 7px;border-radius:4px;cursor:pointer;border:1px solid rgba(243,220,174,.7);color:#1b1406;background:linear-gradient(180deg,#f5e4b3 0%,#d9b96d 55%,#b48d45 100%);box-shadow:0 2px 0 rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.55),0 0 16px rgba(217,185,108,.18);transition:transform .08s,filter .15s,box-shadow .15s;}
  .dn-enhdo:hover{filter:brightness(1.07);box-shadow:0 2px 0 rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.55),0 0 24px rgba(217,185,108,.38);} .dn-enhdo:active{transform:translateY(1px);}
  .dn-enhdo .t{font-family:var(--serif);font-size:14px;font-weight:700;letter-spacing:.08em;} .dn-enhdo .c{display:flex;align-items:center;gap:6px;font-family:var(--mono);font-size:10px;font-weight:700;color:#3b2d10;} .dn-enhdo .c i{font-style:normal;}
  .dn-enhdo em{font-style:normal;padding:0 5px;border-radius:3px;background:rgba(22,15,4,.8);} .dn-enhdo em.hi{color:#a8e0a5;} .dn-enhdo em.mid{color:#eedd9e;} .dn-enhdo em.lo{color:#f2b071;} .dn-enhdo em.bad{color:#f28c86;}
  .dn-enhdo.poor{filter:grayscale(.9) brightness(.52);box-shadow:none;cursor:not-allowed;} .dn-enhdo.poor .t::after{content:" · 골드 부족";font-family:var(--ui);font-size:10px;letter-spacing:0;}
  .dn-enhmax{min-width:158px;text-align:center;padding:11px 12px;border:1px dashed rgba(217,201,138,.55);border-radius:4px;font-family:var(--serif);font-size:13px;font-weight:700;letter-spacing:.1em;color:#ecdca0;background:rgba(217,201,138,.07);text-shadow:0 0 10px rgba(243,220,174,.35);}
  .dn-enhempty{font-size:12px;color:var(--mut);padding:28px 2px;text-align:center;}
  .dn-enhfoot{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:8px 4px 0;padding-top:10px;border-top:1px solid rgba(217,201,138,.14);font-size:10px;color:var(--dim);} .dn-enhfoot b{font-weight:600;} .dn-enhfoot .k{font-family:var(--mono);letter-spacing:.18em;}
  .dn-enhrow.fx-ok{animation:dnEnhOk .75s ease-out;} .dn-enhrow.fx-ok .ico b{animation:dnEnhBadge .5s ease-out;} .dn-enhrow.fx-bad{animation:dnEnhBad .45s ease-in-out;}
  @keyframes dnEnhIn{from{opacity:0;transform:translateY(10px) scale(.985);}to{opacity:1;transform:none;}}
  @keyframes dnEnhOk{0%{box-shadow:0 0 0 0 rgba(243,220,174,0);}22%{box-shadow:0 0 0 2px rgba(243,220,174,.8),0 0 30px rgba(243,220,174,.5);}100%{box-shadow:0 0 0 0 rgba(243,220,174,0);}}
  @keyframes dnEnhBadge{0%{transform:scale(.4);}60%{transform:scale(1.4);}100%{transform:scale(1);}}
  @keyframes dnEnhBad{0%{transform:translateX(0);box-shadow:0 0 0 0 rgba(224,122,118,0);}20%{transform:translateX(-6px);box-shadow:0 0 0 2px rgba(224,122,118,.75);}40%{transform:translateX(5px);}60%{transform:translateX(-4px);}80%{transform:translateX(2px);}100%{transform:translateX(0);box-shadow:0 0 0 0 rgba(224,122,118,0);}}
  @keyframes dnEnhBump{0%{transform:scale(1);}40%{transform:scale(1.08);}100%{transform:scale(1);}}
  #dnResult{width:580px;padding:26px 34px 28px;display:flex;flex-direction:column;align-items:center;text-align:center;}
  .ta-result-title{font-family:var(--serif);font-size:20px;color:var(--mut);letter-spacing:.06em;} .ta-result-score{margin:12px 0 4px;} .ta-result-score span{font-family:var(--serif);font-size:56px;color:#f1f4ee;line-height:1;font-weight:700;} .ta-result-score small{font-size:12px;color:var(--mut);margin-left:8px;}
  .ta-result-grid{display:flex;gap:8px;width:100%;margin:18px 0;} .ta-result-grid>div{flex:1;background:rgba(0,0,0,.25);border:1px solid var(--hl);border-radius:4px;padding:10px 6px;} .ta-result-grid .rk{font-family:var(--mono);font-size:9px;letter-spacing:.16em;color:var(--dim);margin-bottom:4px;} .ta-result-grid .rv{font-family:var(--mono);font-size:17px;color:#eef2ea;}
  .dn-rperks{font-size:12px;color:var(--mut);margin:3px 0;line-height:1.5;word-break:keep-all;} .dn-gold-line{color:var(--gold);} .dn-keep{color:var(--ink);}
  .ta-result-btns{display:flex;gap:10px;margin-top:18px;} .ta-result-btns button{font-family:var(--serif);font-size:15px;letter-spacing:.12em;padding:11px 30px;border-radius:3px;cursor:pointer;font-weight:700;} .ta-result-btns .primary{background:#e8eee5;color:#0c1410;border:none;} .ta-result-btns .primary:hover{background:#fff;} .ta-result-btns .ghost{background:transparent;color:var(--mut);border:1px solid var(--hl2);} .ta-result-btns .ghost:hover{color:var(--ink);}
  /* ----- v117 공격 애니메이션: 프레임은 같은 셀(왼쪽·아래 정렬), 잔상·궤적. 회전·돌진·숨쉬기 없음 ----- */
  #gameDungeon .dn-hbody{justify-content:flex-start;transform-origin:50% 100%;will-change:transform;}
  #gameDungeon .dn-hero.attack .dn-hbody,#gameDungeon .dn-hero.skill .dn-hbody,#gameDungeon .dn-hero.spin .dn-hbody{animation:none!important;}
  #gameDungeon .dn-hsprite{height:130px;width:auto;animation:none!important;}
  #gameDungeon .dn-ghost{position:absolute;left:0;bottom:0;opacity:.45;pointer-events:none;animation:dnGhostFade .09s linear forwards;filter:drop-shadow(0 4px 4px rgba(0,0,0,.55)) brightness(1.3);}
  @keyframes dnGhostFade{0%{opacity:.45}100%{opacity:0}}
  #gameDungeon .dn-trail{position:absolute;width:150px;height:150px;border:6px solid #fff;border-color:#fff #fff transparent transparent;border-radius:50%;transform-origin:50% 50%;pointer-events:none;z-index:4;opacity:0;filter:drop-shadow(0 0 10px rgba(255,255,255,.95)) blur(.4px);animation:dnTrailAnim .22s ease-out forwards;}
  #gameDungeon .dn-trail.big{width:230px;height:230px;border-width:9px;border-color:#fff3c4 #fff3c4 transparent transparent;filter:drop-shadow(0 0 16px rgba(255,230,160,.95)) blur(.4px);animation-duration:.3s;}
  @keyframes dnTrailAnim{0%{opacity:0;transform:rotate(-95deg) scale(.7)}22%{opacity:1}70%{opacity:.8}100%{opacity:0;transform:rotate(35deg) scale(1.08)}}
  #gameDungeon .dn-vfx{position:absolute;left:0;top:0;width:100%;height:100%;display:block;pointer-events:none;z-index:4;}   /* v122 공격 이펙트 캔버스 */
  /* ----- 기존 이펙트 · 모션 · 스프라이트 규칙(그대로) ----- */
  @keyframes hyShake{0%,100%{transform:translateX(-50%);}20%{transform:translateX(calc(-50% - 9px));}40%{transform:translateX(calc(-50% + 9px));}60%{transform:translateX(calc(-50% - 5px));}80%{transform:translateX(calc(-50% + 5px));}}
  @keyframes dnCaret{0%,50%{opacity:1;}51%,100%{opacity:0;}}
  @keyframes baShake{0%,100%{transform:translateX(0)}20%{transform:translateX(-7px)}60%{transform:translateX(7px)}}
  .dn-cell.new{animation:dnCellPop .5s;}
  @keyframes dnCellPop{0%{transform:scale(.6);filter:brightness(2)}100%{transform:none}}
  @keyframes dnBlink{from{opacity:.55}to{opacity:1}}
  .dn-hero.skill .dn-hshape{animation:dnSkillPulse .4s ease-out;}
  @keyframes dnSkillPulse{0%{transform:scale(1)}40%{transform:scale(1.35);filter:brightness(1.9)}100%{transform:scale(1)}}
  .dn-bigslash{position:absolute;bottom:24px;width:72px;height:72px;border:4px solid #fff;border-color:#fff transparent transparent transparent;border-radius:50%;box-shadow:0 -3px 18px var(--accent2);animation:dnBigSlash .36s ease-out forwards;pointer-events:none;z-index:4;}
  @keyframes dnBigSlash{0%{opacity:0;transform:rotate(-100deg) scale(.5)}30%{opacity:1}100%{opacity:0;transform:rotate(20deg) scale(1.25)}}
  .dn-whirl{position:absolute;left:var(--x);bottom:46px;width:20px;height:20px;border-radius:50%;border:3px solid var(--accent);box-shadow:0 0 18px var(--accent),inset 0 0 18px var(--accent-soft);transform:translate(-50%,50%);animation:dnWhirl .52s ease-out forwards;pointer-events:none;z-index:4;}
  @keyframes dnWhirl{from{opacity:1;width:20px;height:20px}to{opacity:0;width:var(--d);height:var(--d)}}
  .dn-float.skill{color:#fff;text-shadow:0 0 10px var(--accent2);font-size:1rem;}
  .dn-hero.guard{filter:drop-shadow(0 0 10px rgba(150,200,255,.75));}   /* v154 그림자 베기 보호 중 */
  .dn-float.crit{color:#ffd166;font-size:1.3rem;text-shadow:0 0 10px #ff9d2e,0 1px 2px #000;}   /* v139 치명타 */
  .dn-mon.slow .dn-mbody, .dn-mon.slow .dn-mshape{filter:saturate(.55) brightness(1.08) drop-shadow(0 0 7px #9be7ff);}   /* v144 눈보라 둔화 */
  .dn-flash{position:absolute;inset:-6px;pointer-events:none;border-radius:16px;background:var(--err);opacity:0;z-index:5;}
  .dn-flash.on{animation:dnFlash .38s ease-out;}
  .dn-flash.ult{background:#fff1cf;animation:dnFlashUlt .46s ease-out;} @keyframes dnFlashUlt{from{opacity:.26}to{opacity:0}}   /* 2026-09-28 ④ 궁극기 번쩍임 */
  @keyframes dnFlash{from{opacity:.28}to{opacity:0}}
  .dn-hero.attack .dn-hshape{animation:dnThrust .27s ease-out;}
  @keyframes dnThrust{0%{transform:translateX(0)}35%{transform:translateX(24px) scale(1.08)}100%{transform:translateX(0)}}
  .dn-hero.attack .dn-sword{animation:dnSwing .27s ease-out;}
  @keyframes dnSwing{0%{transform:rotate(-75deg)}40%{transform:translateX(22px) rotate(20deg)}100%{transform:rotate(-25deg)}}
  .dn-hero.hurt .dn-hshape{background:var(--err);box-shadow:0 0 18px var(--err);}
  .dn-mshape{width:44px;height:44px;margin:0 auto;background:var(--dn-col,#7dffb0);box-shadow:0 0 12px var(--dn-col,#7dffb0);}
  .dn-mshape.circle{border-radius:50%;}
  .dn-mshape.square{border-radius:9px;}
  .dn-mshape.tri{clip-path:polygon(50% 0,100% 100%,0 100%);box-shadow:none;}
  .dn-mshape.hex{clip-path:polygon(25% 4%,75% 4%,100% 50%,75% 96%,25% 96%,0 50%);box-shadow:none;}
  .dn-mshape.diamond{clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);box-shadow:none;}
  .dn-mshape.pent{clip-path:polygon(50% 0,100% 38%,82% 100%,18% 100%,0 38%);box-shadow:none;}
  .dn-mshape.ghost{border-radius:50% 50% 34% 34%;opacity:.72;}
  .dn-mshape.mush{border-radius:50% 50% 16% 16%/60% 60% 16% 16%;}
  .dn-mshape.star{clip-path:polygon(50% 0,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%);box-shadow:none;}
  .dn-mshape.kite{clip-path:polygon(50% 0,92% 38%,50% 100%,8% 38%);box-shadow:none;}
  .dn-mshape.oval{border-radius:50%;transform:scaleX(1.25);}
  .dn-mshape.bar{border-radius:22px;transform:scale(1.3,.62);}
  .dn-mon.hit .dn-mshape{animation:dnMHit .17s ease-out;}
  @keyframes dnMHit{0%{filter:brightness(2.4);transform:scale(.86)}100%{filter:none;transform:none}}
  .dn-mon.lunge .dn-mshape{animation:dnMLunge .32s ease-out;}
  @keyframes dnMLunge{0%{transform:translateX(0)}40%{transform:translateX(-24px) scale(1.12)}100%{transform:translateX(0)}}
  .dn-mon.dead{transition:opacity .4s;opacity:0;}
  .dn-mon.dead .dn-mshape{transition:transform .4s ease-in;transform:scale(0) rotate(90deg);}
  .dn-lane.area-forest .dn-scene-bg{background-image:url(img/dn/bg_forest.jpg);}
  .dn-lane.area-cave .dn-scene-bg{background-image:url(img/dn/bg_cave.jpg);}
  .dn-lane.area-castle .dn-scene-bg{background-image:url(img/dn/bg_castle.jpg);}
  .dn-lane.area-desert .dn-scene-bg{background-image:url(img/dn/bg_desert.jpg);}
  .dn-lane.area-snow .dn-scene-bg{background-image:url(img/dn/bg_snow.jpg);}
  .dn-lane.area-swamp .dn-scene-bg{background-image:url(img/dn/bg_swamp.jpg);}
  .dn-lane.area-volcano .dn-scene-bg{background-image:url(img/dn/bg_volcano.jpg);}
  .dn-lane.area-coast .dn-scene-bg{background-image:url(img/dn/bg_coast.jpg);}
  .dn-lane.area-ruins .dn-scene-bg{background-image:url(img/dn/bg_ruins.jpg);}
  .dn-lane.area-grave .dn-scene-bg{background-image:url(img/dn/bg_grave.jpg);}
  .dn-lane.area-icecave .dn-scene-bg{background-image:url(img/dn/bg_icecave.jpg);}
  .dn-lane.area-sky .dn-scene-bg{background-image:url(img/dn/bg_sky.jpg);}
  .dn-lane.area-abyss .dn-scene-bg{background-image:url(img/dn/bg_abyss.jpg);}
  .dn-lane.area-hell .dn-scene-bg{background-image:url(img/dn/bg_hell.jpg);}
  .dn-hbody{position:absolute;left:0;right:0;bottom:0;display:flex;justify-content:center;align-items:flex-end;}
  .dn-hsprite{display:block;height:130px;width:auto;filter:drop-shadow(0 4px 4px rgba(0,0,0,.55));}
  .dn-hero.rally .dn-hsprite{filter:drop-shadow(0 4px 4px rgba(0,0,0,.55)) drop-shadow(0 0 4px var(--rc,#ffd27a)) drop-shadow(0 0 11px var(--rc,#ffd27a));}   /* 2026-09-28 ③ 각성기 켜짐 */
  .dn-shadow{position:absolute;left:50%;bottom:-7px;width:70px;height:14px;transform:translateX(-50%);border-radius:50%;background:rgba(0,0,0,.5);filter:blur(3px);z-index:-1;}
  .dn-hero.attack .dn-hbody{animation:dnThrust .27s ease-out;}
  .dn-hero.hurt .dn-hsprite{filter:drop-shadow(0 4px 4px rgba(0,0,0,.55)) brightness(1.5) sepia(1) hue-rotate(-45deg) saturate(4);}
  .dn-hero.skill .dn-hbody{animation:dnSkillPulse .4s ease-out;transform-origin:50% 100%;}
  .dn-mbody{position:relative;display:block;width:max-content;margin:0 auto;}
  .dn-msprite{display:block;height:88px;width:auto;filter:brightness(var(--mdim,1)) drop-shadow(0 4px 4px rgba(0,0,0,.55));}   /* 2026-10-17 점검 A56: 변수 이름을 --mdim 으로 — 글자색 변수 --dim(#66726a)과 이름이 같아, 줄을 선 적 없는 맨 앞 몬스터·보스는 brightness(#66726a) 로 줄 전체가 무효(그림자 없음)였음 */
  .dn-mon.hit .dn-msprite{animation:dnMHit .17s ease-out;}
  .dn-mon.lunge .dn-mbody{animation:dnMLunge .32s ease-out;}
  .dn-mon.dead .dn-mbody{transition:transform .4s ease-in;transform:scale(0) rotate(90deg);}
  #gameDungeon .dn-slash{width:66px;height:66px;border-width:4px;border-color:#fff3c4 transparent transparent transparent;box-shadow:0 -3px 16px rgba(255,220,120,.9);}
  #gameDungeon .dn-slash::after{content:"";position:absolute;inset:-10px;border:2px solid rgba(255,230,160,.75);border-color:rgba(255,230,160,.75) transparent transparent transparent;border-radius:50%;}
  #gameDungeon .dn-hero.attack .dn-hbody{animation:dnThrust2 .3s ease-out;} @keyframes dnThrust2{0%{transform:translateX(0)}35%{transform:translateX(34px) rotate(-4deg)}60%{transform:translateX(30px) rotate(-2deg)}100%{transform:translateX(0)}}
  #gameDungeon .dn-bigslash{border-color:#fff3c4 transparent transparent transparent;box-shadow:0 -3px 22px rgba(255,220,120,.9);} #gameDungeon .dn-whirl{border-color:var(--dg2);box-shadow:0 0 18px rgba(217,169,74,.7),inset 0 0 18px rgba(217,169,74,.3);}
  .dn-mon .dn-mbody{transform-origin:50% 100%;}
  .dn-mon.walk.mo-hop .dn-mbody{animation:dnMoHop .55s ease-in-out infinite;}
  @keyframes dnMoHop{0%,100%{transform:translateY(0) scale(1,1)}25%{transform:translateY(-16px) scale(.94,1.08)}50%{transform:translateY(-4px) scale(1,1)}62%{transform:translateY(0) scale(1.1,.9)}80%{transform:translateY(0) scale(1,1)}}
  .dn-mon.walk.mo-trot .dn-mbody{animation:dnMoTrot .34s ease-in-out infinite;}
  @keyframes dnMoTrot{0%,100%{transform:translateY(0) rotate(0)}30%{transform:translateY(-5px) rotate(-2.5deg)}70%{transform:translateY(-1px) rotate(1.5deg)}}
  .dn-mon.walk.mo-step .dn-mbody{animation:dnMoStep .46s ease-in-out infinite;}
  @keyframes dnMoStep{0%,100%{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-3px) rotate(2deg)}}
  .dn-mon.walk.mo-stomp .dn-mbody{animation:dnMoStomp .8s ease-in-out infinite;}
  @keyframes dnMoStomp{0%,100%{transform:translateY(0) scale(1,1)}35%{transform:translateY(-6px) scale(.98,1.03)}55%{transform:translateY(0) scale(1.04,.96)}70%{transform:translateY(0) scale(1,1)}}
  .dn-mon.walk.mo-sway .dn-mbody{animation:dnMoSway .9s ease-in-out infinite;}
  @keyframes dnMoSway{0%,100%{transform:skewX(-4deg) translateY(0)}50%{transform:skewX(4deg) translateY(-3px)}}
  .dn-mon.boss.walk .dn-mbody{animation-duration:.34s;}   /* v151 보스는 빨리 걸어오므로 걷는 그림도 그만큼 빠르게 */
  .dn-mon.mo-fly{bottom:44px;} .dn-mon.mo-fly .dn-mbody{animation:dnMoFly 1.6s ease-in-out infinite;} .dn-mon.walk.mo-fly .dn-mbody{animation:dnMoFlyMove 1.1s ease-in-out infinite;}
  @keyframes dnMoFly{0%,100%{transform:translateY(0)}50%{transform:translateY(-8px)}} @keyframes dnMoFlyMove{0%,100%{transform:translateY(-2px) rotate(3deg)}50%{transform:translateY(-10px) rotate(-1deg)}}
  .dn-mon.hit .dn-mbody{animation:dnMKnock .18s ease-out!important;} @keyframes dnMKnock{0%{transform:translateX(0)}40%{transform:translateX(12px) rotate(3deg)}100%{transform:translateX(0)}}
  .dn-mon.lunge .dn-mbody{animation:dnMLunge .32s ease-out!important;}
  .dn-mon.dead .dn-mbody{animation:dnMDie .42s ease-in forwards!important;transition:none;}
  @keyframes dnMDie{0%{transform:scale(1);filter:brightness(1)}30%{transform:scale(1.15);filter:brightness(2.2)}100%{transform:scale(0) rotate(40deg);opacity:0;filter:brightness(2.2)}}
  .dn-spark{position:absolute;width:36px;height:36px;margin-left:-18px;pointer-events:none;z-index:5;background:radial-gradient(circle,#fff8d8 0 16%,rgba(255,220,120,.95) 20% 30%,transparent 34%),conic-gradient(from 0deg,transparent 0 11%,#ffe08a 11% 14%,transparent 14% 36%,#ffe08a 36% 39%,transparent 39% 61%,#ffe08a 61% 64%,transparent 64% 86%,#ffe08a 86% 89%,transparent 89%);animation:dnSpark .22s ease-out forwards;}
  @keyframes dnSpark{0%{transform:scale(.3) rotate(0);opacity:1}100%{transform:scale(1.6) rotate(40deg);opacity:0}}
  .dn-lane.shake2{animation:dnShake2 .44s ease-out;} @keyframes dnShake2{0%,100%{transform:translate(0,0)}10%{transform:translate(7px,-4px)}25%{transform:translate(-6px,3px)}40%{transform:translate(5px,-2px)}60%{transform:translate(-3px,2px)}80%{transform:translate(2px,-1px)}}   /* 2026-09-28 ④ 궁극기 */
  .dn-lane.shake{animation:dnShake .12s;} @keyframes dnShake{0%,100%{transform:translate(0,0)}30%{transform:translate(2px,-1px)}60%{transform:translate(-2px,1px)}}
  .dn-puff{position:absolute;width:10px;height:10px;border-radius:50%;background:rgba(255,240,200,.92);pointer-events:none;z-index:5;animation:dnPuff .5s ease-out forwards;}
  @keyframes dnPuff{0%{transform:translate(0,0) scale(1);opacity:1}100%{transform:translate(var(--dx),var(--dy)) scale(.2);opacity:0}}
  .dn-fx{position:absolute;inset:0;pointer-events:none;z-index:3;}
  .dn-float{position:absolute;left:50%;top:-14px;transform:translateX(-50%);font-family:ui-monospace,"SF Mono",Menlo,Consolas,monospace;font-weight:800;font-size:.92rem;color:var(--accent);text-shadow:0 0 8px var(--accent);animation:dnFloat .7s ease-out forwards;white-space:nowrap;}
  @keyframes dnFloat{from{opacity:1;transform:translate(-50%,0)}to{opacity:0;transform:translate(-50%,-34px)}}
  .dn-slash{position:absolute;bottom:38px;width:46px;height:46px;border:3px solid #fff;border-color:#fff transparent transparent transparent;border-radius:50%;box-shadow:0 -2px 10px var(--accent);animation:dnSlashAnim .27s ease-out forwards;pointer-events:none;z-index:4;}
  @keyframes dnSlashAnim{0%{opacity:0;transform:rotate(-85deg) scale(.6)}30%{opacity:1}100%{opacity:0;transform:rotate(15deg) scale(1.15)}}
  .dn-loot{position:absolute;bottom:62px;left:0;width:16px;height:16px;background:var(--dn-col,#cfd8dc);box-shadow:0 0 12px var(--dn-col,#cfd8dc);animation:dnLootFly .68s ease-in-out forwards;z-index:5;pointer-events:none;}
  @keyframes dnLootFly{0%{transform:translate(var(--from),0) rotate(45deg) scale(.5);opacity:0}30%{transform:translate(var(--from),-30px) rotate(45deg) scale(1.15);opacity:1}100%{transform:translate(var(--to),-14px) rotate(45deg) scale(.7);opacity:1}}
  .dn-banner.slow{animation:dnBanner 5s ease-out forwards;} #gameDungeon .dn-banner .sync{display:inline-block;font-family:var(--ui);font-size:11px;font-weight:600;letter-spacing:.02em;line-height:1.5;padding:6px 14px;border-radius:3px;background:rgba(8,13,10,.78);border:1px solid rgba(217,201,138,.45);color:#f3dcae;text-shadow:none;}   /* v135 계정 쪽 알림(서버 저장이 멈췄어요 …): 긴 문장이라 작은 글자 한 줄 · 5초(평소 알림이 오면 dnBanner 가 slow 를 먼저 떼어 그쪽이 처음부터 다시 시작함 · 시작 화면으로 나오면 dnShowStart 가 끔) */
  .dn-banner.show{animation:dnBanner 1.7s ease-out forwards;}
  @keyframes dnBanner{0%{opacity:0;transform:translateY(8px)}20%{opacity:1;transform:none}75%{opacity:1}100%{opacity:0}}
  @keyframes dnPop{50%{transform:scaleY(1.7)}}
  @keyframes taCaret{0%,50%{box-shadow:inset 0 -2px 0 var(--accent);}51%,100%{box-shadow:inset 0 -2px 0 transparent;}}
  /* 2026-09-29 검사 ③④ 새 연출: 배경 어둡게 · 새벽빛 · 잔상 · 보스 멈칫/묶임 · 궁극기 빛남 · 전체 화면 연출(일러스트 영상) */
  #gameDungeon .dn-dim{position:absolute;inset:0;z-index:0;background:#04070a;opacity:0;pointer-events:none}
  #gameDungeon .dn-dawn{position:absolute;inset:0;z-index:0;opacity:0;pointer-events:none;mix-blend-mode:screen;background:radial-gradient(ellipse 85% 70% at 80% 100%,rgba(255,200,120,.55),rgba(255,130,60,.2) 45%,rgba(255,130,60,0) 75%)}
  .dn-hghost{position:absolute;left:0;bottom:0;pointer-events:none}
  #gameDungeon .dn-mon.hstop .dn-mbody,#gameDungeon .dn-mon.bind .dn-mbody{animation-play-state:paused!important}
  #gameDungeon .dn-mon.hstop .dn-msprite{filter:brightness(2.2) saturate(.35)!important}
  #gameDungeon .dn-mon.frozen2 .dn-msprite{filter:grayscale(1) sepia(1) hue-rotate(165deg) saturate(1.6) brightness(1.18) drop-shadow(0 0 6px rgba(120,200,255,.75));}   /* v123 마법사 궁극기: 얼어붙은 청록 */
  #gameDungeon .dn-mon.ulthide .dn-mname,#gameDungeon .dn-mon.ulthide .dn-mhp{opacity:0!important}   /* v123 빙하가 이름표·체력 막대를 조각조각 가리지 않게 잠깐 숨김 */
  .dn-hero.ultglow .dn-hsprite{filter:drop-shadow(0 4px 4px rgba(0,0,0,.55)) drop-shadow(0 0 4px #ff9224) drop-shadow(0 0 12px #ff9224)}
  #gameDungeon .dn-cine{position:absolute;inset:0;z-index:6;pointer-events:none;overflow:hidden;visibility:hidden}
  #gameDungeon .dn-cine.on{visibility:visible}
  .dn-cine-back{position:absolute;inset:0;background:radial-gradient(ellipse at 50% 45%,rgba(18,10,6,.9),rgba(0,0,0,.96));opacity:0}
  .dn-cine-pan{position:absolute;overflow:hidden;background:#120a06;clip-path:polygon(0 0,0 0,0 100%,0 100%);box-shadow:0 0 40px rgba(255,146,36,.25)}
  .dn-cine-pan video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transform-origin:62% 38%}
  .dn-cine-pan::before,.dn-cine-pan::after{content:'';position:absolute;left:0;right:0;height:2px;z-index:2;background:linear-gradient(90deg,transparent 5%,#ffcf7a 25%,#fff1cf 50%,#ffcf7a 75%,transparent 95%);box-shadow:0 0 10px #ff9224}
  .dn-cine-pan::before{top:0} .dn-cine-pan::after{bottom:0}
  .dn-cine-sheen{position:absolute;inset:0;z-index:1;background:linear-gradient(100deg,transparent 40%,rgba(255,244,214,.55) 49%,rgba(255,255,255,.85) 50%,rgba(255,244,214,.55) 51%,transparent 60%);mix-blend-mode:screen;transform:translateX(-120%)}
  .dn-cine-name{position:absolute;right:5%;bottom:9%;z-index:3;text-align:right;opacity:0}
  .dn-cine-name small{display:block;font:700 11px/1 var(--ui);letter-spacing:.6em;color:#ffcf7a;margin-bottom:8px;text-shadow:0 0 8px rgba(0,0,0,.8)}
  .dn-cine-name b{display:block;font-family:var(--serif);font-weight:700;font-size:40px;letter-spacing:.16em;color:#fff4dc;text-shadow:0 0 16px rgba(255,146,36,.95),0 0 3px #000,0 3px 0 #3a0610}
  .dn-cine-flash{position:absolute;inset:0;background:#fff8e8;opacity:0;z-index:4}
  /* 2026-09-29 마법사 ③④: 차가운 빛 · 궁극기 얼음 빛남 · 연출 화면 얼음 색 테두리 */
  #gameDungeon .dn-frost{position:absolute;inset:0;z-index:0;opacity:0;pointer-events:none;mix-blend-mode:screen;background:radial-gradient(ellipse 80% 70% at 75% 90%,rgba(170,220,255,.55),rgba(70,160,255,.2) 45%,rgba(70,160,255,0) 75%)}
  .dn-hero.ultglow.ice .dn-hsprite{filter:drop-shadow(0 4px 4px rgba(0,0,0,.55)) drop-shadow(0 0 4px #46a0ff) drop-shadow(0 0 12px #46a0ff)}
  #gameDungeon .dn-cine.ice .dn-cine-pan{box-shadow:0 0 40px rgba(70,160,255,.3)}
  #gameDungeon .dn-cine.ice .dn-cine-pan::before,#gameDungeon .dn-cine.ice .dn-cine-pan::after{background:linear-gradient(90deg,transparent 5%,#9fd4ff 25%,#f0faff 50%,#9fd4ff 75%,transparent 95%);box-shadow:0 0 10px #46a0ff}
  #gameDungeon .dn-cine.ice .dn-cine-name small{color:#9fd4ff}
  #gameDungeon .dn-cine.ice .dn-cine-name b{text-shadow:0 0 16px rgba(70,160,255,.95),0 0 3px #000,0 3px 0 #06203a}
  /* 2026-09-29 v113 ④ 번쩍임 색: #gameDungeon .dn-flash(빨강)가 .dn-flash.ult 를 덮고 있었음 → 검사 = 따뜻한 흰빛(원래 의도) · 마법사 = 차가운 흰빛 */
  #gameDungeon .dn-flash.ult{background:#fff1cf}
  #gameDungeon .dn-flash.ultice{background:#e8f7ff;animation:dnFlashUlt .46s ease-out}
  /* 2026-09-29 도적 ③④: 궁극기 진홍 빛남 · 연출 화면 진홍 테두리 · 마무리 번쩍임 */
  .dn-hero.ultglow.crim .dn-hsprite{filter:drop-shadow(0 4px 4px rgba(0,0,0,.55)) drop-shadow(0 0 4px #ff2856) drop-shadow(0 0 12px #ff2856)}
  #gameDungeon .dn-cine.crim .dn-cine-pan{box-shadow:0 0 40px rgba(255,40,86,.28)}
  #gameDungeon .dn-cine.crim .dn-cine-pan::before,#gameDungeon .dn-cine.crim .dn-cine-pan::after{background:linear-gradient(90deg,transparent 5%,#ff5a7a 25%,#ffe2e8 50%,#ff5a7a 75%,transparent 95%);box-shadow:0 0 10px #ff2856}
  #gameDungeon .dn-cine.crim .dn-cine-name small{color:#ff96aa}
  #gameDungeon .dn-cine.crim .dn-cine-name b{text-shadow:0 0 16px rgba(255,40,86,.95),0 0 3px #000,0 3px 0 #28040c}
  #gameDungeon .dn-flash.ultcrim{background:#ffe6ea;animation:dnFlashUlt .46s ease-out}
  /* 2026-10-01 검사 ④ 궁극기 새 스킬 모션: 시간이 멎은 잿빛(tstop) · 위아래 검은 띠(lbox) · 화면 가르기(splitting + .dn-split) — dnHkQ */
  #gameDungeon .dn-lane.tstop .dn-scene-bg{filter:grayscale(1) brightness(.58);transition:filter .15s linear}
  #gameDungeon .dn-lane.tstop .dn-mon{filter:grayscale(1) brightness(.85);transition:filter .15s linear,opacity .4s}
  #gameDungeon .dn-lane.tstop .dn-mon *{animation-play-state:paused!important}
  .dn-lbox{position:absolute;left:0;right:0;height:0;background:#000;z-index:3;pointer-events:none;transition:height .2s ease-out}
  .dn-lbox.t{top:0} .dn-lbox.b{bottom:0}
  .dn-lane.lbox .dn-lbox.t{height:var(--lbt,26px)} .dn-lane.lbox .dn-lbox.b{height:var(--lbb,26px)}
  .dn-lane.splitting > .dn-scene-bg,.dn-lane.splitting > .dn-vig,.dn-lane.splitting > .dn-mons{visibility:hidden}
  .dn-split{position:absolute;inset:0;z-index:1;pointer-events:none}
  .dn-split-part{position:absolute;inset:0;transition:transform .07s cubic-bezier(.2,1.5,.4,1)}
  .dn-split-dawn{position:absolute;inset:0}
  .dn-split-tint{position:absolute;inset:0;opacity:0;transition:opacity .2s}
  #dnHero.clickfx .dn-hsprite{filter:drop-shadow(0 0 1px #fff) drop-shadow(0 0 2px #fff) brightness(1.6)}
