:root {
  --bg:#07090d;
  --panel:#12100f;
  --panel-2:#1d1814;
  --panel-3:#0e0d0c;
  --ink:#f1e7cf;
  --muted:#b8aa93;
  --gold:#d9ae58;
  --gold-bright:#f3d58a;
  --blue:#4f7891;
  --red:#a74943;
  --green:#6b9e69;
  --border:#5b4a35;
  --border-hi:#9b7b46;
  --shadow:0 18px 46px rgba(0,0,0,.58);
}
*{box-sizing:border-box}
html{background:var(--bg)}
body{
  margin:0;min-height:100vh;color:var(--ink);
  background:
    radial-gradient(circle at 50% -10%,rgba(95,75,45,.2),transparent 38%),
    repeating-linear-gradient(0deg,rgba(255,255,255,.018) 0 1px,transparent 1px 4px),
    linear-gradient(180deg,#090b10 0%,#050608 100%);
  font-family:Georgia,"Times New Roman",serif;
}
button{font:inherit}
button:focus-visible{outline:3px solid var(--gold-bright);outline-offset:3px}
.game-shell{width:min(1160px,calc(100% - 28px));margin:0 auto;padding:20px 0 42px}
.topbar{
  display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:14px;
  padding:11px 15px;border:1px solid #4c3b2b;border-radius:8px;
  background:linear-gradient(180deg,rgba(30,25,21,.97),rgba(13,12,11,.97));
  box-shadow:inset 0 1px rgba(255,255,255,.05),0 8px 24px rgba(0,0,0,.32)
}
h1,h2,p{margin-top:0} h1{margin-bottom:0;font-size:clamp(1.35rem,3vw,2rem);letter-spacing:.05em;color:#f3dfb5;text-shadow:0 2px 0 #000}
h2{margin-bottom:10px;color:#ead2a1}.eyebrow{margin-bottom:6px;color:var(--gold);font-size:.72rem;letter-spacing:.15em;font-weight:800;font-family:ui-monospace,Consolas,monospace}.hidden{display:none!important}
.screen,.leaderboard-card{
  background:linear-gradient(180deg,rgba(19,17,15,.98),rgba(8,8,8,.98));
  border:2px solid #51402d;box-shadow:var(--shadow),inset 0 0 0 1px rgba(218,174,88,.08);border-radius:10px;
}
.screen{position:relative}
.screen::after,.leaderboard-card::after{content:"";position:absolute;pointer-events:none;inset:6px;border:1px solid rgba(222,184,111,.12);border-radius:6px}

.title-screen{display:grid;grid-template-columns:minmax(0,1.72fr) minmax(280px,.72fr);overflow:hidden;min-height:610px;background:#090a0c}
.hero-panel{
  position:relative;min-height:610px;padding:42px;overflow:hidden;
  background:
    radial-gradient(circle at 76% 16%,#f0e4bd 0 5%,#b7bdc4 5.5% 7%,transparent 7.5%),
    linear-gradient(155deg,transparent 0 48%,rgba(21,28,38,.95) 48.5% 64%,transparent 64.5%),
    linear-gradient(205deg,transparent 0 54%,rgba(14,21,31,.98) 54.5% 70%,transparent 70.5%),
    linear-gradient(180deg,#111b2c 0%,#172237 45%,#0d1017 74%,#070809 100%);
  border-right:2px solid #5b432c;
}
.hero-panel::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:
    linear-gradient(90deg,transparent 0 65%,rgba(0,0,0,.22) 100%),
    repeating-linear-gradient(90deg,transparent 0 62px,rgba(255,255,255,.018) 63px 64px),
    linear-gradient(180deg,transparent 0 67%,rgba(0,0,0,.48) 100%);
}
.moon{display:block;position:absolute;right:14%;top:12%;width:88px;height:88px;border-radius:50%;background:rgba(232,229,203,.13);box-shadow:0 0 48px rgba(224,218,179,.15)}
.mountains{display:block;position:absolute;left:-6%;right:-6%;bottom:23%;height:38%;opacity:.82;clip-path:polygon(0 100%,0 72%,12% 43%,20% 64%,31% 24%,42% 62%,54% 31%,63% 57%,74% 19%,84% 55%,94% 35%,100% 70%,100% 100%);background:#090d13}
.town{display:block;position:absolute;left:8%;right:8%;bottom:18%;height:16%;background:linear-gradient(90deg,transparent 0 8%,#0b0b0c 8% 18%,transparent 18% 21%,#090a0b 21% 38%,transparent 38% 42%,#0b0b0c 42% 61%,transparent 61% 65%,#08090a 65% 81%,transparent 81%);filter:drop-shadow(0 -4px 0 #11151a)}
.title-copy{
  position:absolute;left:34px;right:34px;bottom:30px;padding:22px 24px 20px;
  background:linear-gradient(180deg,rgba(9,9,10,.78),rgba(7,7,7,.9));border:1px solid #83643d;border-radius:7px;
  box-shadow:0 10px 35px rgba(0,0,0,.48),inset 0 0 0 1px rgba(246,214,142,.08);backdrop-filter:blur(2px)
}
.title-copy::before{content:"◆";position:absolute;top:-13px;left:50%;transform:translateX(-50%);color:var(--gold-bright);background:#17120e;padding:0 8px;font-size:.95rem}
.title-copy h2{font-size:clamp(2rem,4.6vw,3.8rem);line-height:.96;margin-bottom:12px;color:#f1d89d;text-shadow:0 3px 0 #201109,0 0 18px rgba(210,154,57,.25)}
.title-copy p:last-child{max-width:660px;margin-bottom:0;line-height:1.55;color:#e9e0cf;text-shadow:0 1px 2px #000}
.menu-card{display:flex;flex-direction:column;justify-content:center;gap:13px;padding:34px;background:linear-gradient(90deg,#17120f,#0d0d0e 65%);position:relative}
.menu-card::before{content:"DESCEND • SURVIVE • RETURN";display:block;margin-bottom:10px;padding-bottom:14px;border-bottom:1px solid #5b4731;color:#a99371;font-size:.7rem;letter-spacing:.15em;text-align:center;font-family:ui-monospace,Consolas,monospace}
.warning{margin:12px 0 0;padding:15px;color:#e5c4b5;border:1px solid #74453a;background:#261714;border-radius:6px;line-height:1.45}

.primary-button,.secondary-button,.danger-button,.small-button{border-radius:5px;border:1px solid transparent;padding:13px 16px;cursor:pointer;transition:transform .12s ease,filter .12s ease,box-shadow .12s ease;font-weight:800;box-shadow:inset 0 1px rgba(255,255,255,.06),0 3px 0 rgba(0,0,0,.34)}
.primary-button:hover,.secondary-button:hover,.danger-button:hover,.small-button:hover{transform:translateY(-1px);filter:brightness(1.09);box-shadow:inset 0 1px rgba(255,255,255,.08),0 5px 8px rgba(0,0,0,.3)}
.primary-button{background:linear-gradient(#7d3a31,#5d2823);color:#fff1d2;border-color:#ad7652}
.secondary-button{background:linear-gradient(#28313a,#1a2026);color:var(--ink);border-color:#59616a}
.danger-button{background:linear-gradient(#663330,#3c1d1b);color:#ffe8de;border-color:#9b514a}.small-button{background:#211d19;color:#e9dec9;border-color:#61513f;padding:9px 12px}

#gameScreen{padding:16px;background:linear-gradient(180deg,rgba(18,15,13,.98),rgba(7,8,9,.98))}
.status-grid{
  position:relative;display:grid;grid-template-columns:repeat(5,1fr);gap:7px;margin-bottom:14px;padding:10px;
  background:linear-gradient(180deg,#2a2119,#100e0d);border:2px solid #6c5436;border-radius:7px;
  box-shadow:inset 0 0 0 2px #17110c,inset 0 0 24px rgba(0,0,0,.55),0 7px 16px rgba(0,0,0,.28)
}
.status-grid::before{content:"ADVENTURER STATUS";position:absolute;left:20px;top:-9px;padding:0 9px;background:#1b1612;color:#c9a65e;font-size:.58rem;letter-spacing:.16em;font-family:ui-monospace,Consolas,monospace}
.status-card{min-height:72px;padding:11px 12px;background:linear-gradient(180deg,#18191a,#101112);border:1px solid #4a4035;border-radius:4px;box-shadow:inset 0 0 0 1px rgba(223,188,115,.04)}
.status-card span{display:block;font-family:ui-monospace,Consolas,monospace;font-size:.64rem;color:#a99982;text-transform:uppercase;letter-spacing:.1em}.status-card strong{display:block;margin-top:5px;font-size:1.08rem;color:#f3dfb3}.status-card small{display:block;margin-top:5px;color:#ad9f8d;font-size:.68rem;line-height:1.3}.gear-status strong{font-size:.88rem;line-height:1.25}
.game-layout{display:grid;grid-template-columns:1.6fr .82fr;gap:14px}.scene-card,.command-card,.log-card{background:linear-gradient(180deg,#171512,#0d0e0f);border:1px solid #5a4732;border-radius:7px;overflow:hidden;box-shadow:inset 0 0 0 1px rgba(224,181,91,.05)}
.scene{position:relative;min-height:440px;overflow:hidden;display:flex;align-items:center;justify-content:center;padding:26px;border-bottom:1px solid #51402e;background-position:center;background-size:cover}
.town-scene{
  background-image:
    radial-gradient(circle at 18% 35%,rgba(255,176,70,.34) 0 1.4%,transparent 2.2%),
    radial-gradient(circle at 47% 30%,rgba(255,176,70,.28) 0 1.3%,transparent 2.1%),
    radial-gradient(circle at 78% 38%,rgba(255,176,70,.3) 0 1.4%,transparent 2.2%),
    linear-gradient(118deg,transparent 0 11%,#2a211c 11.3% 27%,transparent 27.3%),
    linear-gradient(242deg,transparent 0 12%,#211b18 12.3% 29%,transparent 29.3%),
    linear-gradient(90deg,#241c18 0 18%,#171516 18% 22%,#2c221b 22% 43%,#141315 43% 48%,#261e19 48% 68%,#141315 68% 73%,#2a211b 73% 100%),
    linear-gradient(180deg,#1c2632 0 42%,#16191c 42% 58%,#2a231c 58% 100%);
  background-size:auto,auto,auto,42% 34%,42% 34%,100% 45%,100% 100%;
  background-position:center,center,center,left 43%,right 43%,center bottom,center;
  background-repeat:no-repeat;
}
.dungeon-scene{
  background-image:
    radial-gradient(circle at 18% 32%,rgba(230,120,44,.34) 0 2%,transparent 5%),
    radial-gradient(circle at 82% 32%,rgba(230,120,44,.34) 0 2%,transparent 5%),
    linear-gradient(90deg,transparent 0 11%,#08090b 11% 14%,transparent 14% 86%,#08090b 86% 89%,transparent 89%),
    repeating-linear-gradient(0deg,rgba(255,255,255,.025) 0 1px,transparent 1px 36px),
    repeating-linear-gradient(90deg,rgba(255,255,255,.02) 0 1px,transparent 1px 72px),
    radial-gradient(ellipse at 50% 47%,#242529 0 20%,#17191d 48%,#0a0b0d 100%);
}
.boss-scene{
  background-image:
    radial-gradient(circle at 18% 32%,rgba(193,55,36,.32) 0 2%,transparent 6%),
    radial-gradient(circle at 82% 32%,rgba(193,55,36,.32) 0 2%,transparent 6%),
    linear-gradient(90deg,transparent 0 11%,#070607 11% 14%,transparent 14% 86%,#070607 86% 89%,transparent 89%),
    repeating-linear-gradient(0deg,rgba(160,45,35,.05) 0 1px,transparent 1px 36px),
    repeating-linear-gradient(90deg,rgba(160,45,35,.04) 0 1px,transparent 1px 72px),
    radial-gradient(ellipse at 50% 47%,#2b1719 0 20%,#181114 48%,#080709 100%);
  filter:none;
}
.scene::before{content:"";position:absolute;inset:0;opacity:.42;background:linear-gradient(90deg,rgba(0,0,0,.42),transparent 18%,transparent 82%,rgba(0,0,0,.46)),linear-gradient(180deg,rgba(0,0,0,.06),transparent 70%,rgba(0,0,0,.35));pointer-events:none}
.scene::after{content:"";position:absolute;inset:8px;border:1px solid rgba(216,169,80,.17);box-shadow:inset 0 0 40px rgba(0,0,0,.42);pointer-events:none;z-index:1}
.scene-title{position:absolute;top:18px;left:18px;z-index:4;padding:8px 13px;background:linear-gradient(#251b13,#120e0b);border:1px solid #86643a;border-radius:4px;font-weight:800;color:#edd6a0;box-shadow:0 5px 12px rgba(0,0,0,.42);text-shadow:0 1px #000}
.enemy-art{position:relative;z-index:2;display:grid;place-items:center;width:min(350px,68%);aspect-ratio:1;padding:12px}.enemy-art::after{content:"";position:absolute;left:14%;right:14%;bottom:7%;height:12%;border-radius:50%;background:rgba(0,0,0,.5);filter:blur(7px);z-index:-1}.enemy-art img{display:block;width:100%;height:100%;object-fit:contain;image-rendering:pixelated;filter:drop-shadow(0 12px 2px rgba(0,0,0,.5))}
.battle-enemy-info{position:absolute;z-index:5;top:58px;left:50%;transform:translateX(-50%);width:min(430px,calc(100% - 36px));padding:11px 14px;text-align:center;background:linear-gradient(180deg,rgba(25,18,14,.94),rgba(8,8,9,.94));border:1px solid #8a663b;border-radius:4px;box-shadow:0 8px 22px rgba(0,0,0,.42)}
.battle-enemy-info .eyebrow{margin-bottom:3px}.battle-enemy-info h2{margin-bottom:9px;font-size:1.35rem}.enemy-hp-row{display:grid;grid-template-columns:1fr auto;align-items:center;gap:10px}.enemy-hp-row strong{font-size:.78rem;white-space:nowrap}.scene.battle-active{padding-top:132px;padding-bottom:20px}.scene.battle-active .scene-title{opacity:.78}
.progress-track{height:12px;margin:14px 16px 7px;background:#151719;border-radius:2px;overflow:hidden;border:1px solid #5c4a35;box-shadow:inset 0 2px 5px #000}.progress-fill{width:0%;height:100%;background:linear-gradient(90deg,#47754d,#c59d4f);transition:width .25s ease}.floor-labels{display:grid;grid-template-columns:repeat(11,1fr);color:#9c8d79;font-size:.7rem;text-align:center;padding:0 8px 14px;font-family:ui-monospace,Consolas,monospace}
.command-card{padding:20px;background:linear-gradient(180deg,#17120f,#0b0b0c)}.command-card>div>h2{padding-bottom:9px;border-bottom:1px solid #5a4530}.command-card p{color:#c6b8a5;line-height:1.55}.command-card button{width:100%;margin-top:10px}.shop-box{margin:16px 0 6px;padding:14px;background:linear-gradient(180deg,#100f0e,#090a0b);border:1px solid #5f4a31;border-radius:5px;box-shadow:inset 0 0 18px rgba(0,0,0,.45)}.shop-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.shop-row strong,.shop-row small{display:block}.shop-row strong{color:#e8d3a7}.shop-row small{margin-top:4px;color:var(--muted);line-height:1.35}.shop-row button{width:auto;min-width:84px;margin:0;padding:10px 12px}.gear-shop .gear-row+.gear-row{margin-top:12px;padding-top:12px;border-top:1px solid #3f3328}.shop-row button:disabled{opacity:.55;cursor:not-allowed;transform:none;filter:none}.shop-message{min-height:2.7em;margin:10px 0 0!important;font-size:.8rem;color:#c7baa7!important}
.button-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.button-grid button{margin:0}.enemy-hp-bar{height:12px;border-radius:2px;background:#2b1514;border:1px solid #70413a;overflow:hidden}.enemy-hp-bar div{height:100%;width:100%;background:linear-gradient(90deg,#8f2f2d,#d06d49);transition:width .2s ease}.log-card{margin-top:14px;padding:16px}.log-card h2{font-size:1rem;margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid #493a2b}.game-log{min-height:92px;max-height:150px;overflow:auto;padding:11px;background:#08090a;border:1px solid #342b23;border-radius:4px;color:#d6cab7;line-height:1.5;font-size:.9rem;font-family:ui-monospace,Consolas,monospace}.log-entry+.log-entry{margin-top:5px}
.end-screen{text-align:center;padding:54px 20px;background:radial-gradient(circle at 50% 32%,rgba(142,92,39,.18),transparent 34%),linear-gradient(#17130f,#09090a)}.end-screen h2{font-size:clamp(2rem,5vw,3.5rem);margin-bottom:10px}.end-screen>p{max-width:620px;margin-left:auto;margin-right:auto;line-height:1.55;color:#cdbfa9}.final-score{display:inline-flex;flex-direction:column;gap:6px;margin:12px 0 26px;padding:18px 28px;background:#0d0d0e;border:2px solid #735936;border-radius:5px;box-shadow:inset 0 0 20px rgba(200,150,63,.05)}.final-score span{color:#b8a78e;font-size:.75rem;text-transform:uppercase;letter-spacing:.1em}.final-score strong{color:var(--gold-bright);font-size:2.5rem}.end-screen button{min-width:180px;margin:5px}.leaderboard-card{margin-top:16px;padding:18px;position:relative}.leaderboard-heading,.dialog-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}
#helpDialog{width:min(620px,calc(100% - 28px));color:var(--ink);background:#12100f;border:2px solid #665039;border-radius:8px;box-shadow:var(--shadow)}#helpDialog::backdrop{background:rgba(0,0,0,.78)}.dialog-content{padding:8px}.dialog-content ol{padding-left:22px;line-height:1.6;color:#d0c3b0}.dialog-content li+li{margin-top:9px}
.battle-button-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.command-card .battle-button-grid button{margin-top:0}.battle-button-grid .retreat-action{grid-column:1/-1}
@media(max-width:800px){.title-screen,.game-layout{grid-template-columns:1fr}.status-grid{grid-template-columns:repeat(4,1fr)}.menu-card{border-top:2px solid var(--border);border-left:0}.hero-panel{min-height:480px;border-right:0}.title-copy{left:20px;right:20px;bottom:20px}.scene{min-height:340px}}
@media(max-width:520px){.status-grid{grid-template-columns:1fr 1fr}.game-shell{width:min(100% - 16px,1160px);padding-top:10px}.topbar{align-items:flex-start}.hero-panel{min-height:420px;padding:20px;background-position:56% center}.title-copy{padding:17px}.title-copy h2{font-size:1.8rem}.button-grid,.battle-button-grid{grid-template-columns:1fr}.battle-button-grid .retreat-action{grid-column:auto}.scene{min-height:310px;padding:18px}.enemy-art{width:min(260px,80%)}.battle-enemy-info{top:52px;width:calc(100% - 24px)}.scene.battle-active{padding-top:126px}}

/* v1.10 final visual polish: scenery is decorative only; HUD remains separate. */
.environment-art{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden}
.scene-title,.battle-enemy-info,.enemy-art{z-index:4}

.town-scene{
  background:
    radial-gradient(circle at 50% 12%,rgba(174,194,214,.18),transparent 24%),
    linear-gradient(180deg,#172332 0 43%,#202126 43% 51%,#332b22 51% 100%);
}
.town-environment::before{content:"";position:absolute;left:-5%;right:-5%;bottom:35%;height:22%;background:#111820;clip-path:polygon(0 70%,8% 42%,17% 58%,26% 27%,35% 52%,45% 19%,54% 47%,64% 26%,74% 56%,84% 29%,94% 55%,100% 42%,100% 100%,0 100%);opacity:.75}
.town-hill{position:absolute;left:-8%;right:-8%;bottom:0;height:37%;background:linear-gradient(180deg,#3b3228,#211c18);clip-path:polygon(0 38%,12% 25%,28% 34%,42% 20%,57% 33%,72% 18%,86% 31%,100% 22%,100% 100%,0 100%)}
.town-building{position:absolute;bottom:24%;background:linear-gradient(90deg,#3b2b22,#5a3d2b 48%,#36271f);border:3px solid #1a1512;box-shadow:0 12px 18px rgba(0,0,0,.45),inset 0 0 0 2px rgba(220,170,90,.08)}
.town-building .roof{position:absolute;left:-12%;right:-12%;top:-33%;height:38%;background:linear-gradient(180deg,#211b1b,#352526);border:3px solid #141113;clip-path:polygon(50% 0,100% 78%,91% 100%,9% 100%,0 78%)}
.town-building .window{position:absolute;width:14%;height:21%;background:linear-gradient(#ffd077,#b65a26);border:3px solid #201511;box-shadow:0 0 16px rgba(255,159,59,.42)}
.town-building .door{position:absolute;bottom:0;left:44%;width:18%;height:36%;background:#211711;border:3px solid #120d0b;border-radius:14px 14px 0 0}
.town-building.inn{left:6%;width:25%;height:31%}.town-building.inn .w1{left:15%;top:28%}.town-building.inn .w2{right:15%;top:28%}.town-building.inn .chimney{position:absolute;right:16%;top:-48%;width:8%;height:24%;background:#342922;border:3px solid #171310}
.town-building.smithy{left:35%;width:23%;height:26%;background:linear-gradient(90deg,#352720,#4a3424 55%,#2d221c)}.town-building.smithy .w1{left:16%;top:32%}.town-building.smithy .forge-glow{position:absolute;right:10%;bottom:8%;width:22%;height:28%;border-radius:50% 50% 0 0;background:radial-gradient(circle,#ffd36c 0 20%,#d56a2b 35%,#4b2117 70%);box-shadow:0 0 20px rgba(255,110,42,.45)}
.town-building.cottage{right:19%;width:20%;height:24%}.town-building.cottage .w1{left:13%;top:28%}.town-building.cottage .w2{right:13%;top:28%}
.town-building.tower{right:4%;width:12%;height:39%;background:linear-gradient(90deg,#3d3937,#55504a,#302d2c)}.town-building.tower .tower-roof{position:absolute;left:-18%;right:-18%;top:-20%;height:22%;background:#252127;clip-path:polygon(50% 0,100% 100%,0 100%);border-bottom:3px solid #171419}.town-building.tower .w1{left:38%;top:22%;width:24%;height:13%}.town-building.tower .w2{left:38%;top:51%;width:24%;height:13%}
.town-road{position:absolute;left:30%;right:21%;bottom:-10%;height:42%;background:linear-gradient(180deg,#5a4b39,#332b23);clip-path:polygon(40% 0,63% 0,100% 100%,0 100%);opacity:.88}
.town-road::after{content:"";position:absolute;inset:0;background:repeating-linear-gradient(168deg,transparent 0 18px,rgba(17,14,12,.25) 19px 22px)}
.town-well{position:absolute;left:45%;bottom:17%;width:13%;height:9%;background:#4b4944;border:4px solid #22211f;border-radius:50%;box-shadow:inset 0 8px #171717,0 5px 10px rgba(0,0,0,.45)}
.town-well::before,.town-well::after{content:"";position:absolute;bottom:50%;width:5px;height:70px;background:#35271e}.town-well::before{left:14%}.town-well::after{right:14%}.town-well span{position:absolute;left:8%;right:8%;top:-60px;height:6px;background:#3e2c20}
.town-lamp{position:absolute;bottom:19%;width:5px;height:78px;background:#28231e}.town-lamp::before{content:"";position:absolute;left:-10px;top:-13px;width:24px;height:28px;background:radial-gradient(circle,#ffd67b 0 25%,#d57b31 43%,#46301d 70%);border:3px solid #241b14;box-shadow:0 0 25px rgba(255,170,72,.48)}.lamp-a{left:31%}.lamp-b{right:17%}
.dungeon-gate{position:absolute;right:2%;bottom:16%;width:16%;height:35%;background:#413d38;border:5px solid #211f1d;border-radius:60px 60px 0 0;box-shadow:0 10px 15px rgba(0,0,0,.45)}
.dungeon-gate .gate-arch{position:absolute;inset:12% 13% 0;border:4px solid #201d1c;border-radius:45px 45px 0 0;background:repeating-linear-gradient(90deg,#34312e 0 13%,#252321 13% 16%)}
.dungeon-gate .gate-dark{position:absolute;left:28%;right:28%;bottom:0;height:72%;background:linear-gradient(#0e0d0e,#030304);border-radius:32px 32px 0 0;box-shadow:inset 0 0 18px #000}

.transition-scene .environment-art{display:block}
.door-environment,.stairs-environment{background:radial-gradient(ellipse at 50% 52%,rgba(108,78,47,.16),transparent 36%)}
.door-chamber,.stair-chamber{position:absolute;inset:0}
.stone-door-frame{position:absolute;left:50%;bottom:12%;transform:translateX(-50%);width:34%;height:63%;padding:16px 18px 0;background:linear-gradient(90deg,#36373a,#4a4b4f 50%,#303136);border:5px solid #17181a;border-radius:52% 52% 6px 6px/24% 24% 4px 4px;box-shadow:0 16px 28px rgba(0,0,0,.55),inset 0 0 0 3px rgba(210,175,115,.06)}
.stone-door{position:absolute;left:16%;right:16%;top:17%;bottom:0;background:linear-gradient(90deg,#35251c,#4a3122 50%,#2b2019);border:5px solid #16110e;border-radius:42% 42% 2px 2px/19% 19% 2px 2px;box-shadow:inset 0 0 20px rgba(0,0,0,.55)}
.door-band{position:absolute;left:0;right:0;height:8px;background:#24272a;border-top:2px solid #55585b;border-bottom:2px solid #111}.band-a{top:30%}.band-b{top:66%}.door-ring{position:absolute;right:16%;top:49%;width:24px;height:24px;border:5px solid #8e7547;border-radius:50%;box-shadow:inset 0 0 0 3px #281f16}
.door-torch,.stair-torch{position:absolute;top:34%;width:8px;height:45px;background:#3b2a1d;border:2px solid #1d1510}.door-torch::before,.stair-torch::before{content:"";position:absolute;left:-14px;top:-33px;width:34px;height:40px;background:radial-gradient(ellipse at 50% 75%,#fff0a7 0 14%,#f4a43e 28%,#ba4a24 49%,transparent 70%);filter:drop-shadow(0 0 9px #d66b2f)}.door-torch.left,.stair-torch.left{left:21%}.door-torch.right,.stair-torch.right{right:21%}
.stair-arch{position:absolute;left:31%;right:31%;top:15%;height:62%;border:8px solid #303238;border-bottom:0;border-radius:50% 50% 0 0/24% 24% 0 0;background:linear-gradient(180deg,#17191e 0,#08090c 58%,#020204 100%);box-shadow:inset 0 0 35px #000,0 12px 24px rgba(0,0,0,.48)}
.stair-dark{position:absolute;left:34%;right:34%;top:35%;bottom:14%;background:linear-gradient(180deg,rgba(10,11,14,.2),#030304 78%);clip-path:polygon(9% 0,91% 0,100% 100%,0 100%)}
.stair-step{--spread:calc(var(--i) * 2.6%);position:absolute;left:calc(38% - var(--spread));right:calc(38% - var(--spread));bottom:calc(14% + var(--i) * 4.2%);height:4.4%;background:linear-gradient(#55565a,#292a2e);border-top:2px solid #6a6863;border-bottom:3px solid #141518;box-shadow:0 5px 8px rgba(0,0,0,.35)}

.enemy-art img{filter:drop-shadow(0 13px 3px rgba(0,0,0,.58));}

@media(max-width:800px){
  .town-building.inn{left:3%;width:29%}.town-building.smithy{left:34%;width:25%}.town-building.cottage{right:16%;width:22%}.town-building.tower{right:2%;width:11%}.dungeon-gate{width:17%}.stone-door-frame{width:44%}.stair-arch{left:25%;right:25%}.stair-dark{left:29%;right:29%}.stair-step{left:calc(34% - var(--spread));right:calc(34% - var(--spread))}
}
@media(max-width:520px){
  .town-building.inn{left:1%;width:34%;height:28%}.town-building.smithy{left:36%;width:29%;height:24%}.town-building.cottage{display:none}.town-building.tower{right:1%;width:16%;height:35%}.town-road{left:28%;right:14%}.town-well{left:49%;width:16%}.dungeon-gate{right:1%;width:20%;height:31%}.town-lamp.lamp-a{left:31%}.town-lamp.lamp-b{right:19%}.stone-door-frame{width:58%;height:60%}.door-torch.left,.stair-torch.left{left:10%}.door-torch.right,.stair-torch.right{right:10%}.stair-arch{left:16%;right:16%}.stair-dark{left:21%;right:21%}.stair-step{left:calc(27% - var(--spread));right:calc(27% - var(--spread))}
}


/* v1.11.1 audio-unlock splash: required by browser autoplay policies. */
.audio-gate{
  position:fixed;inset:0;z-index:9999;display:grid;place-items:center;padding:24px;
  background:
    radial-gradient(circle at 50% 38%,rgba(77,96,122,.22),transparent 26%),
    linear-gradient(180deg,rgba(5,8,13,.96),rgba(2,3,5,.985));
  cursor:pointer;transition:opacity .4s ease,visibility .4s ease;
}
.audio-gate::before{content:"";position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(0deg,rgba(255,255,255,.012) 0 1px,transparent 1px 4px)}
.audio-gate-panel{position:relative;width:min(560px,100%);padding:42px 28px;text-align:center;background:linear-gradient(180deg,rgba(25,21,18,.93),rgba(9,9,10,.96));border:2px solid #6b5335;border-radius:9px;box-shadow:0 24px 70px rgba(0,0,0,.72),inset 0 0 0 1px rgba(238,199,119,.08)}
.audio-gate-panel::after{content:"";position:absolute;inset:7px;border:1px solid rgba(225,183,102,.14);border-radius:5px;pointer-events:none}
.audio-gate-panel h2{font-size:clamp(1.8rem,5vw,3rem);margin:4px 0 12px;color:#f1d89d;text-shadow:0 3px 0 #160d08}
.audio-gate-panel p:not(.eyebrow){margin:0;color:#c9bda9;letter-spacing:.04em}
.audio-gate-pulse{display:block;margin-top:24px;color:var(--gold-bright);font-size:1.1rem;animation:gatePulse 1.5s ease-in-out infinite}
.audio-gate-hidden{opacity:0;visibility:hidden;pointer-events:none}
@keyframes gatePulse{0%,100%{opacity:.38;transform:translateY(0)}50%{opacity:1;transform:translateY(4px)}}

.score-breakdown{max-width:520px;margin:-10px auto 24px;padding:12px 16px;background:rgba(8,8,9,.82);border:1px solid #5e4a31;border-radius:5px;text-align:left;box-shadow:inset 0 0 18px rgba(200,150,63,.035)}
.score-breakdown>div{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:9px 2px;border-bottom:1px solid rgba(184,167,142,.16)}
.score-breakdown>div:last-child{border-bottom:0}.score-breakdown span{color:#cdbfa9}.score-breakdown small{display:block;margin-top:2px;color:#887d6d;font-size:.72rem}.score-breakdown strong{color:var(--gold-bright);font-size:1.05rem}

/* v1.14 class selection */
.class-screen{padding:38px;background:radial-gradient(circle at 50% 12%,rgba(91,72,49,.16),transparent 32%),linear-gradient(180deg,#15110f,#08090b)}
.class-heading{text-align:center;max-width:720px;margin:0 auto 26px}.class-heading h2{font-size:clamp(2rem,4vw,3rem);margin-bottom:8px}.class-heading>p:last-child{color:#bfae96;line-height:1.55}
.class-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;position:relative;z-index:1}
.class-card{display:flex;flex-direction:column;min-height:420px;padding:24px 22px;background:linear-gradient(180deg,#1b1815,#0e0e0f);border:1px solid #5b4934;border-radius:7px;box-shadow:inset 0 0 0 1px rgba(231,192,113,.05),0 14px 25px rgba(0,0,0,.3)}
.class-card h3{font-size:1.65rem;color:#efd59e;margin:2px 0 2px;text-align:center}.class-card>p{color:#c6b9a5;line-height:1.5}.class-card .class-role{text-align:center;color:#aa9066;font-family:ui-monospace,Consolas,monospace;font-size:.72rem;text-transform:uppercase;letter-spacing:.11em;margin-bottom:18px}
.class-sigil{width:68px;height:68px;margin:0 auto 8px;display:grid;place-items:center;border:1px solid #70593a;border-radius:50%;background:radial-gradient(circle,#2b241c,#101113 70%);font-size:2rem;color:#edcf8b;box-shadow:0 0 22px rgba(191,142,64,.1)}
.class-stats{display:grid;gap:7px;margin:auto 0 18px;padding:12px;background:#0a0b0c;border:1px solid #40372d;border-radius:4px}.class-stats span{display:flex;justify-content:space-between;color:#998d7d;font-size:.82rem}.class-stats strong{color:#e5cf9f}.class-select-button{width:100%}.class-back-button{display:block;margin:24px auto 0;min-width:190px}
.thief-card{border-color:#4b6257}.wizard-card{border-color:#4b536b}.knight-card{border-color:#6b5337}
@media(max-width:800px){.class-grid{grid-template-columns:1fr}.class-card{min-height:0}.class-screen{padding:26px 18px}}


/* v1.15.1 class-specific attack presentation */
.scene.class-attack-thief::after,.scene.class-attack-knight::after,.scene.class-attack-wizard::after{content:"";position:absolute;inset:0;z-index:10;pointer-events:none}
.scene.class-attack-thief::after{background:linear-gradient(118deg,transparent 0 43%,rgba(210,235,224,.9) 45%,transparent 47% 52%,rgba(164,209,190,.78) 54%,transparent 56%);animation:thiefStrikeFx .24s steps(2,end) both}
.scene.class-attack-knight::after{background:linear-gradient(135deg,transparent 0 44%,rgba(255,229,171,.92) 47%,rgba(255,255,245,.78) 49%,transparent 52%);filter:drop-shadow(0 0 6px rgba(221,174,91,.55));animation:knightStrikeFx .28s ease-out both}
.scene.class-attack-wizard::after{background:radial-gradient(circle at 50% 48%,rgba(211,201,255,.92) 0 4%,rgba(117,100,193,.7) 8%,rgba(65,45,125,.38) 17%,transparent 34%);animation:wizardStrikeFx .34s ease-out both}
.scene.class-attack-wizard .enemy-art img{animation:wizardTargetPulse .34s ease-out}

@keyframes thiefStrikeFx{0%{opacity:0;transform:translate(-8px,7px)}28%{opacity:1;transform:translate(3px,-2px)}58%{opacity:.95;transform:translate(-2px,1px)}100%{opacity:0;transform:translate(8px,-6px)}}
@keyframes knightStrikeFx{0%{opacity:0;transform:translate(-10px,-8px) scale(.92)}35%{opacity:1;transform:translate(2px,2px) scale(1.02)}100%{opacity:0;transform:translate(12px,10px) scale(1.06)}}
@keyframes wizardStrikeFx{0%{opacity:0;transform:scale(.58);filter:brightness(.7)}42%{opacity:1;transform:scale(1.06);filter:brightness(1.4)}100%{opacity:0;transform:scale(1.22);filter:brightness(.65)}}
@keyframes wizardTargetPulse{0%,100%{filter:drop-shadow(0 13px 3px rgba(0,0,0,.58))}45%{filter:brightness(1.9) hue-rotate(22deg) drop-shadow(0 0 13px rgba(151,125,255,.72))}}

/* v1.15 final animation pass */
.enemy-art:not(.hidden){animation:enemyIdle 2.4s steps(2,end) infinite}
.enemy-art.enemy-enter{animation:enemyEnter .42s cubic-bezier(.2,.8,.2,1) both}
.enemy-art.boss-emerge{animation:bossEmerge .9s cubic-bezier(.12,.75,.18,1) both}
.enemy-art.enemy-hit{animation:enemyHit .25s steps(2,end) both}
.enemy-art.enemy-hit img{filter:brightness(2.4) sepia(.15) drop-shadow(0 13px 3px rgba(0,0,0,.58))}
.enemy-art.enemy-lunge{animation:enemyLunge .3s cubic-bezier(.3,.8,.3,1) both}
.enemy-art.enemy-defeated{animation:enemyDefeated .56s steps(5,end) forwards}
.scene.player-hit-shake{animation:playerHitShake .28s steps(2,end)}
.scene.boss-intro-shake{animation:bossSceneIntro .86s steps(3,end)}
.scene.boss-intro-shake::before{animation:bossDarkPulse .86s ease-out both}

.combat-float{position:absolute;z-index:12;pointer-events:none;font-family:ui-monospace,Consolas,monospace;font-weight:900;font-size:clamp(1.05rem,3vw,1.55rem);letter-spacing:.03em;text-shadow:0 2px 0 #000,0 0 8px #000;animation:combatFloat .72s ease-out forwards}
.combat-float-enemy{left:50%;top:48%;transform:translateX(-50%)}
.combat-float-player{left:8%;bottom:12%}
.combat-float-damage,.combat-float-player-damage{color:#ffb09d}
.combat-float-heal{color:#b9efb0;text-shadow:0 2px 0 #10200f,0 0 12px rgba(126,210,119,.35)}
.status-card.status-damage{animation:statusDamage .46s steps(2,end)}
.status-card.status-heal{animation:statusHeal .48s ease-out}

.scene.scene-door-opening .stone-door{animation:doorOpen .48s cubic-bezier(.5,.05,.6,1) forwards;transform-origin:left center}
.scene.scene-door-opening .door-ring{animation:ringJolt .35s ease-out}
.scene.scene-descending .stair-step{animation:stairsDescend .62s ease-in both;animation-delay:calc(var(--i) * 18ms)}
.scene.scene-descending .stair-dark{animation:stairDarken .62s ease-in forwards}
.scene.scene-descending{animation:descentFade .62s ease-in both}

.class-card.class-confirmed{z-index:3;animation:classConfirmed .42s ease-out both}
.class-card.class-confirmed .class-sigil{animation:sigilConfirm .42s ease-out both}

.end-screen.victory-reveal{animation:victoryReveal .82s ease-out both}
.end-screen.victory-reveal .final-score{animation:victoryScorePulse 1.15s ease-out .15s both}
.end-screen.victory-reveal::before{content:"";position:absolute;inset:0;pointer-events:none;border-radius:8px;animation:victoryGlow 1.3s ease-out both}
.end-screen.defeat-reveal{animation:defeatReveal .55s ease-out both}

button:disabled{cursor:not-allowed;filter:saturate(.45) brightness(.7);transform:none!important}

@keyframes enemyIdle{0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)}}
@keyframes enemyEnter{0%{opacity:0;transform:translateY(14px) scale(.86);filter:brightness(.35)}70%{opacity:1;transform:translateY(-2px) scale(1.025)}100%{opacity:1;transform:none}}
@keyframes bossEmerge{0%{opacity:0;transform:translateY(34px) scale(.72);filter:brightness(.15) contrast(1.4)}35%{opacity:.55;filter:brightness(.35) contrast(1.3)}72%{opacity:1;transform:translateY(-3px) scale(1.04);filter:brightness(1.25)}100%{opacity:1;transform:none;filter:none}}
@keyframes enemyHit{0%{transform:translateX(0)}25%{transform:translateX(10px)}55%{transform:translateX(-7px)}80%{transform:translateX(4px)}100%{transform:translateX(0)}}
@keyframes enemyLunge{0%{transform:translate(0,0) scale(1)}45%{transform:translate(0,10px) scale(1.06)}70%{transform:translate(0,-3px) scale(.99)}100%{transform:none}}
@keyframes enemyDefeated{0%{opacity:1;transform:translateY(0) scale(1);filter:brightness(1)}18%{transform:translateX(8px);filter:brightness(2.2)}35%{transform:translateX(-8px);filter:brightness(.65)}55%{opacity:.8;transform:translateY(5px) scale(.98)}75%{opacity:.45;transform:translateY(15px) scale(.93);filter:brightness(.35)}100%{opacity:0;transform:translateY(34px) scale(.84);filter:brightness(.05)}}
@keyframes playerHitShake{0%,100%{transform:translateX(0)}20%{transform:translateX(-7px)}40%{transform:translateX(8px)}60%{transform:translateX(-5px)}80%{transform:translateX(3px)}}
@keyframes bossSceneIntro{0%,100%{transform:none}28%{transform:translateX(-4px)}38%{transform:translateX(5px)}49%{transform:translateX(-3px)}60%{transform:translateX(2px)}}
@keyframes bossDarkPulse{0%{background-color:rgba(80,0,0,.55)}38%{background-color:rgba(45,0,0,.3)}100%{background-color:transparent}}
@keyframes combatFloat{0%{opacity:0;translate:0 8px;scale:.85}18%{opacity:1;scale:1.13}100%{opacity:0;translate:0 -42px;scale:1}}
@keyframes statusDamage{0%,100%{background:linear-gradient(180deg,#171512,#0d0e0f)}40%{background:#5b211f;box-shadow:inset 0 0 18px rgba(255,103,83,.35)}}
@keyframes statusHeal{0%{box-shadow:inset 0 0 0 rgba(105,177,100,0)}45%{box-shadow:inset 0 0 24px rgba(105,177,100,.42);border-color:#719269}100%{box-shadow:inset 0 0 0 rgba(105,177,100,0)}}
@keyframes doorOpen{0%{transform:perspective(500px) rotateY(0);filter:brightness(1)}100%{transform:perspective(500px) rotateY(-68deg);filter:brightness(.48)}}
@keyframes ringJolt{0%,100%{transform:rotate(0)}35%{transform:rotate(22deg)}65%{transform:rotate(-12deg)}}
@keyframes stairsDescend{0%{transform:translateY(0);opacity:1}100%{transform:translateY(16px);opacity:.25}}
@keyframes stairDarken{0%{filter:brightness(1)}100%{filter:brightness(.18);transform:scale(1.08)}}
@keyframes descentFade{0%{filter:brightness(1)}65%{filter:brightness(.55)}100%{filter:brightness(.3)}}
@keyframes classConfirmed{0%{transform:scale(1);filter:brightness(1)}45%{transform:scale(1.025);filter:brightness(1.28);box-shadow:0 0 0 2px rgba(236,200,126,.35),0 18px 35px rgba(0,0,0,.48)}100%{transform:scale(.985);opacity:.88}}
@keyframes sigilConfirm{0%{transform:scale(1) rotate(0)}50%{transform:scale(1.18) rotate(8deg);box-shadow:0 0 28px rgba(237,207,139,.34)}100%{transform:scale(1) rotate(0)}}
@keyframes victoryReveal{0%{opacity:0;transform:translateY(12px);filter:brightness(.65)}100%{opacity:1;transform:none;filter:none}}
@keyframes victoryScorePulse{0%{transform:scale(.94);filter:brightness(.7)}45%{transform:scale(1.035);filter:brightness(1.3)}100%{transform:none;filter:none}}
@keyframes victoryGlow{0%{box-shadow:inset 0 0 0 rgba(223,178,82,0)}40%{box-shadow:inset 0 0 80px rgba(223,178,82,.18)}100%{box-shadow:inset 0 0 18px rgba(223,178,82,.05)}}
@keyframes defeatReveal{0%{opacity:0;filter:brightness(.35);transform:translateY(8px)}100%{opacity:1;filter:none;transform:none}}

@media(prefers-reduced-motion:reduce){
  .enemy-art:not(.hidden),.enemy-art.enemy-enter,.enemy-art.boss-emerge,.enemy-art.enemy-hit,.enemy-art.enemy-lunge,.enemy-art.enemy-defeated,
  .scene.player-hit-shake,.scene.boss-intro-shake,.scene.scene-door-opening .stone-door,.scene.scene-door-opening .door-ring,
  .scene.scene-descending,.scene.scene-descending .stair-step,.scene.scene-descending .stair-dark,.combat-float,
  .status-card.status-damage,.status-card.status-heal,.class-card.class-confirmed,.class-card.class-confirmed .class-sigil,
  .end-screen.victory-reveal,.end-screen.victory-reveal .final-score,.end-screen.victory-reveal::before,.end-screen.defeat-reveal,
  .scene.class-attack-thief::after,.scene.class-attack-knight::after,.scene.class-attack-wizard::after,.scene.class-attack-wizard .enemy-art img{animation:none!important;transition:none!important}
}

/* v1.15.2 low-health danger feedback */
.low-health-overlay{position:absolute;inset:0;z-index:9;pointer-events:none;opacity:0;border-radius:inherit;background:radial-gradient(ellipse at center,transparent 36%,rgba(92,0,0,.08) 58%,rgba(121,5,5,.42) 100%);box-shadow:inset 0 0 58px rgba(125,0,0,.48);transition:opacity .16s ease-out}
.low-health-overlay.active{opacity:1;animation:lowHealthPulse 1.45s ease-in-out infinite}
@keyframes lowHealthPulse{0%,100%{opacity:.48;box-shadow:inset 0 0 44px rgba(115,0,0,.35)}50%{opacity:.88;box-shadow:inset 0 0 76px rgba(145,0,0,.58)}}
@media (prefers-reduced-motion:reduce){.low-health-overlay.active{animation:none;opacity:.58}}
