@font-face{font-family:"Knightle Herald";src:url("assets/fonts/herald-fine.woff") format("woff");font-style:normal;font-weight:700;font-display:swap}
/* Forged iron, worn leather and chipped enamel. The world remains visible. */
.wordmark{aspect-ratio:440/140;max-width:680px;margin:auto}
.home-top{margin-bottom:18px}
.quest-choices .btn:before{background:linear-gradient(90deg,#5346379c,#272a2355,transparent);border-left:2px solid #a28a5b66}
.quest-choices .btn.primary:before{background:linear-gradient(90deg,#83633cba,#3c362a66,transparent)}
.btn:not(.quest-choices .btn){border:0;background:repeating-linear-gradient(0deg,#b99b6822 0 1px,transparent 1px 7px),linear-gradient(120deg,#5b5141,#2e2c27 65%,#181e1b);box-shadow:inset 0 3px #b9a17888,inset 3px 0 #9e86654d,inset -3px -4px #101612,inset 0 0 0 5px #c0ab7318;color:#e7d8b4}
.btn.primary:not(.quest-choices .btn){background:repeating-linear-gradient(0deg,#ffe4ac18 0 1px,transparent 1px 6px),linear-gradient(115deg,#96733f,#664b2c 60%,#493722);box-shadow:inset 0 3px #e0c18e,inset 3px 0 #bda06b,inset -3px -4px #211b14,inset 0 0 0 5px #dbb77630;color:#fff0c7}
.btn:not(.quest-choices .btn):after{content:'';position:absolute;left:8px;top:8px;width:2px;height:2px;background:#dac49a;box-shadow:0 1px #33271b}
.key{height:44px;isolation:isolate;background:#665746;color:#ece0c8;font-size:18px;font-weight:700;text-shadow:1px 2px #100f0b;box-shadow:inset 0 2px #c2ad8177,inset 2px 0 #ac967166,inset -2px 0 #100e0c,inset 0 -4px #0b100e;clip-path:polygon(3px 0,calc(100% - 6px) 0,calc(100% - 6px) 2px,calc(100% - 2px) 2px,calc(100% - 2px) 5px,100% 5px,100% calc(100% - 6px),calc(100% - 3px) calc(100% - 6px),calc(100% - 3px) calc(100% - 2px),calc(100% - 7px) calc(100% - 2px),calc(100% - 7px) 100%,4px 100%,4px calc(100% - 3px),0 calc(100% - 3px),0 4px,3px 4px)}
.key:before{position:absolute;inset:3px 2px 5px;z-index:-1;border:0;background:linear-gradient(120deg,#c5ab6c15 0 18%,transparent 18% 65%,#03060548 65% 69%,transparent 69%),repeating-linear-gradient(0deg,transparent 0 8px,#00000025 8px 9px),linear-gradient(135deg,#48463e,#2d302c 60%,#1c2321);box-shadow:inset 1px 1px #cdbd9426}
.key:after{content:'';position:absolute;right:5px;bottom:6px;width:2px;height:2px;background:#b7a27b66;box-shadow:-1px -1px #0c1413}
.key:nth-child(3n){background:#79705a;clip-path:polygon(5px 0,calc(100% - 3px) 0,calc(100% - 3px) 3px,100% 3px,100% calc(100% - 4px),calc(100% - 4px) calc(100% - 4px),calc(100% - 4px) 100%,3px 100%,3px calc(100% - 2px),0 calc(100% - 2px),0 5px,5px 5px)}
.key.wide{background:#a58245;color:#f1dfb4;font-size:10px}.key.wide:before{background:repeating-linear-gradient(0deg,#d8b66b15 0 1px,transparent 1px 6px),linear-gradient(120deg,#755d3c,#352d22)}
.key.crit{background:#83a478;color:#dcebc4}.key.crit:before{background:repeating-linear-gradient(135deg,transparent 0 10px,#a6d29b13 10px 12px),linear-gradient(135deg,#465748,#1e322c)}
.key.hit{background:#b09152;color:#ffe7a8}.key.hit:before{background:linear-gradient(135deg,#6b5b3b,#332f26)}
.key.miss{background:#423d33;color:#777c71}.key.miss:before{background:linear-gradient(135deg,#242a25,#121b17)}
.key:active{transform:translateY(3px)!important;filter:brightness(1.5)}
.tile.crit{--rune-edge:#8cab77c9;--rune-fill:#263b2dbd;color:#e7f2cc;text-shadow:1px 2px #17221b,0 0 6px #bce88d44}
.tile.hit{--rune-edge:#c2a25dbf;--rune-fill:#4d412bbf;color:#ffe7a8}
.tile.miss{--rune-edge:#77715b70;--rune-fill:#262b23bd;color:#a7a697}
.tile.crit:after,.tile.hit:after{background:linear-gradient(128deg,transparent 0 13%,#f4e4a51c 13% 17%,transparent 17% 71%,#050b074d 71% 76%,transparent 76%),repeating-linear-gradient(0deg,transparent 0 5px,#f1d5900c 5px 6px),var(--rune-fill);box-shadow:inset 0 2px #e2ddb51a,inset 0 -3px #040d0744}
.tile.crit small{color:#b3db90}.tile.hit small{color:#ffdc8b}
.potion-button{background:#26251aaa;border-color:#9d855866;color:#d9c395;border-radius:0}
.inscription{margin:8px 0 5px}.combat-hint{max-width:95%;font-size:11px;line-height:1.3;margin:0}
.combat-legend{color:#bcb69b}.combat-foot:before{background:radial-gradient(ellipse at 50% 70%,#10130cc4 20%,transparent 72%)}
/* Helm vitality: the actual chosen head, drained from top to bottom. */
.heart-rack{gap:2px}.helmet-health{width:28px;height:30px;image-rendering:pixelated;filter:drop-shadow(1px 2px #080f0c)}
.heart-unit.heart-wounded{animation:helmet-break .65s steps(5) both}
.heart-wounded .helmet-health{animation:helmet-heat .65s steps(4)}
.heart-wounded i{background:#d7b5a0;box-shadow:1px 1px #5a483c}
@keyframes helmet-break{0%,100%{transform:none}15%{transform:translate(-3px,1px) rotate(-12deg)}30%{transform:translate(3px,-2px) rotate(10deg)}55%{transform:translate(-2px,2px)}}
@keyframes helmet-heat{15%{filter:sepia(1) saturate(4) brightness(1.8)}45%{filter:brightness(1.5)}100%{filter:drop-shadow(1px 2px #080f0c)}}
/* Enemy titles and a different, heavier forged bar in every depth. */
.combat-head h1,.boss-combat .combat-head h1{font-family:"Knightle Herald","Knightle Quill",serif;font-weight:700;font-size:31px;letter-spacing:1px;color:#f3e3c4;text-shadow:2px 3px #161910,0 3px 10px #000}
.enemy-frame{width:clamp(220px,var(--bar-span),430px);max-width:100%;position:relative;margin:auto}
.enemy-health{height:var(--hp-thickness,16px);padding:3px 5px;background:#ad9362;border:0;box-shadow:none;clip-path:polygon(6px 0,24% 0,24% 2px,26% 2px,26% 0,calc(100% - 9px) 0,calc(100% - 9px) 3px,calc(100% - 3px) 3px,calc(100% - 3px) 6px,100% 6px,100% calc(100% - 4px),calc(100% - 7px) calc(100% - 4px),calc(100% - 7px) 100%,61% 100%,61% calc(100% - 2px),59% calc(100% - 2px),59% 100%,5px 100%,5px calc(100% - 3px),0 calc(100% - 3px),0 5px,6px 5px)}
.enemy-health:before{content:'';position:absolute;inset:2px 4px;background:#1c1916;z-index:-1}
.enemy-health-fill{position:relative;background:repeating-linear-gradient(0deg,#ffcb941c 0 1px,transparent 1px 4px),linear-gradient(180deg,#d99872,#9f4b3b 25%,#74372e 70%,#5b2c24);box-shadow:inset 0 2px #d9987988,inset 0 -2px #311d14;transition:width .65s cubic-bezier(.2,.7,.3,1)}
.enemy-health .health-cuts{position:absolute;inset:3px 7px;background:repeating-linear-gradient(90deg,transparent 0 18px,#19171260 18px 20px);opacity:.7}
.enemy-health .health-scars{position:absolute;inset:0;background:linear-gradient(125deg,transparent 0 16%,#181c1277 16% 17%,transparent 17% 43%,#ffddaa55 43% 44%,transparent 44% 80%,#0b0e0bbb 80% 81%,transparent 81%)}
.enemy-vitals{font-size:10px;color:#d6c298;margin-top:6px}.enemy-vitals>span:first-child{font:bold 13px "Knightle Herald",serif;color:#f2ddab}.enemy-vitals .threat{font-size:8px}
.boss-health{background:#d3ae5f;filter:drop-shadow(0 0 6px #ec692744)}
.boss-health .enemy-health-fill{background:repeating-linear-gradient(90deg,transparent 0 22px,#fabc4c44 22px 24px),linear-gradient(#e1b16b,#d66537 27%,#853025 74%,#ad572b);box-shadow:inset 0 3px #ffcd75,inset 0 -3px #4c2319}
.dragon-frame:before,.dragon-frame:after{content:'';position:absolute;z-index:2;top:-4px;width:12px;height:calc(var(--hp-thickness) + 8px);background:#c0a164;clip-path:polygon(0 0,50% 4px,100% 0,100% 100%,50% calc(100% - 6px),0 100%)}
.dragon-frame:before{left:-5px}.dragon-frame:after{right:-5px;transform:scaleX(-1)}
/* Arrival: hold the room, reveal the name, then draw the HP bar. */
.encounter-intro .delve-path,.encounter-intro .test-oracle,.encounter-intro .combat-foot{visibility:hidden;opacity:0;pointer-events:none}
.stage:has(.encounter-intro)>.menu-toggle,.stage:has(.encounter-intro)>.stage-back{visibility:hidden}
.encounter-intro .combat-head{opacity:0}.intro-name .combat-head,.intro-bar .combat-head,.intro-rule .combat-head{opacity:1}
.encounter-intro .combat-head h1{transform:scale(1.25);transform-origin:center;letter-spacing:2px}
.intro-name .combat-head{animation:foe-name .8s steps(12) both}
.intro-name .enemy-frame,.intro-scene .enemy-frame,.intro-veil .enemy-frame{visibility:hidden}
.intro-bar .enemy-health{animation:draw-health 1.25s steps(30) both}.intro-bar .enemy-vitals{animation:foe-name 1.4s steps(12) both}
.encounter-rule{position:fixed;z-index:10;bottom:calc(var(--ad-space) + 90px);left:50%;width:min(390px,calc(100vw - 48px));transform:translateX(-50%);text-align:center;opacity:0;pointer-events:none;text-shadow:1px 2px #08110d;background:radial-gradient(ellipse,#08120ed9,transparent 73%);padding:25px 0}
.intro-rule .encounter-rule{opacity:1;pointer-events:auto;animation:foe-name .5s steps(8) both}.encounter-rule>span{font:bold 22px "Knightle Herald",serif;color:#e2c88e}.encounter-rule p{font:italic 15px/1.5 Georgia,serif;color:#dfd3b8;margin:12px 0}.intro-ready{font:11px "Knightle Quill";background:none;border:0;border-bottom:1px solid #c6a26288;color:#e6cf99;padding:13px 18px}
.encounter-veil{position:fixed;inset:0 0 var(--ad-space);background:#050806;z-index:30;pointer-events:none;opacity:0}.intro-veil .encounter-veil{opacity:1}.intro-scene .encounter-veil{animation:room-fade .65s linear both}
@keyframes room-fade{from{opacity:1}to{opacity:0}}@keyframes foe-name{from{opacity:0;filter:blur(3px)}to{opacity:1;filter:none}}@keyframes draw-health{from{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0)}}
/* The six chamber traits. */
.tile.gooped{color:transparent;text-shadow:none}.tile.gooped small{opacity:0}.slime-coat{position:absolute;inset:-2px -1px -3px;z-index:3;background:linear-gradient(110deg,#a0bf5c,#507532 60%,#243f22);clip-path:polygon(0 4px,4px 4px,4px 0,calc(100% - 4px) 0,calc(100% - 4px) 3px,100% 3px,100% calc(100% - 2px),80% calc(100% - 2px),80% 100%,65% 100%,65% calc(100% - 5px),35% calc(100% - 5px),35% 100%,18% 100%,18% calc(100% - 3px),0 calc(100% - 3px));box-shadow:inset 2px 3px #ccdd8899,inset -3px -4px #1b3b1c;animation:goop-splat .45s steps(6) both}
.slime-coat i{position:absolute;width:4px;height:4px;background:#bad77c;box-shadow:1px 1px #3d6425;left:20%;top:20%}.slime-coat i:nth-child(2){left:65%;top:55%;width:6px;height:6px}.slime-coat i:nth-child(3){left:30%;top:68%;width:2px;height:2px}.current .slime-coat{animation:none}
@keyframes goop-splat{0%{transform:scale(.2);opacity:0}60%{transform:scale(1.4,.8)}100%{transform:none;opacity:1}}
.exposed-slot{filter:drop-shadow(0 0 4px #e5ad6c)}.weak-mark{position:absolute;top:-15px;color:#efba72;font-size:14px;text-shadow:1px 1px #21180e;animation:guard-mark 1s steps(3) infinite}@keyframes guard-mark{50%{transform:translateY(3px)}}
.trait-impact{position:absolute;left:-10px;right:-10px;top:0;text-align:center;font:bold 13px "Knightle Herald";color:#f6d899;text-shadow:1px 2px #1b1a10;z-index:5;animation:trait-pop .5s steps(8) both}.trait-impact.inferno{color:#ffd4a1}
@keyframes trait-pop{from{opacity:0;transform:translateY(12px) scale(.8)}to{opacity:1;transform:none}}
.cipher-glyph{height:25px;width:22px;display:block;image-rendering:pixelated;filter:drop-shadow(1px 2px #161b13)}.tile .cipher-glyph{height:17px;width:15px}.current .cipher-glyph,.last-attack .cipher-glyph{height:26px;width:22px}.cipher-symbol{display:grid;place-items:center}.cipher-translation{display:none}.cipher-keyboard .key{color:#d6be8b}
.wizard-weave .key:not(.wide){animation:rune-confusion 1.1s steps(8) both;animation-delay:calc(var(--key-index)*9ms)}.wizard-weave .cipher-symbol{animation:rune-dissolve 1s steps(8) both}.wizard-weave .cipher-translation{display:block;position:absolute;inset:0;place-content:center;animation:rune-language 1.1s steps(5) both}
@keyframes rune-confusion{0%{transform:none}25%{transform:translate(-5px,2px) rotate(-7deg);filter:brightness(1.8)}50%{transform:translate(5px,-3px) rotate(6deg)}75%{transform:translate(-2px,3px)}100%{transform:none}}
@keyframes rune-dissolve{0%,40%{opacity:0}100%{opacity:1}}@keyframes rune-language{0%{font-family:Georgia;opacity:1}30%{font-family:monospace;transform:rotate(-15deg)}60%{font-family:"Knightle Herald";transform:scaleX(-1)}100%{opacity:0}}
/* A green rune erupts before the timed strike. */
.weakpoint-burst{position:absolute;inset:-30px 0;display:grid;place-content:center;text-align:center;z-index:8;pointer-events:none;background:radial-gradient(ellipse,#b7db7133,transparent 60%);animation:weakpoint-pop .46s steps(7) both}
.weakpoint-burst>span{font:bold 85px "Knightle Herald";color:#f0ffcf;text-shadow:4px 4px #315335,-2px -2px #0d2417,0 0 35px #c6f79c}.weakpoint-burst>b{color:#dfedb7;font:12px "Knightle Quill";letter-spacing:3px}.weakpoint-burst i{position:absolute;left:50%;top:50%;width:4px;height:4px;background:#d4f0ab;transform:rotate(calc(var(--n)*30deg)) translateX(calc(30px + var(--n)*4px));animation:critical-shards .46s ease-out both}
@keyframes weakpoint-pop{0%{opacity:0;transform:scale(.3)}35%{opacity:1;transform:scale(1.2)}70%{transform:scale(1)}100%{opacity:.6;transform:scale(1.08)}}@keyframes critical-shards{from{opacity:1;translate:0 0}to{opacity:0;translate:calc((var(--n) - 6)*8px) -35px}}
.critical-window:before{background:radial-gradient(ellipse,#70613644,transparent 68%)}.critical-window h2{font-family:"Knightle Herald";font-size:24px;color:#e7e4ba}.critical-shade{background:#080c0ad9;backdrop-filter:none}
.focus-rune{border:0!important;border-radius:0!important;clip-path:polygon(10px 0,calc(100% - 10px) 0,calc(100% - 10px) 5px,100% 5px,100% calc(100% - 9px),calc(100% - 6px) calc(100% - 9px),calc(100% - 6px) 100%,7px 100%,7px calc(100% - 4px),0 calc(100% - 4px),0 8px,10px 8px);background:linear-gradient(135deg,#9ea778,#304c32 25%,#193226 75%,#e0d393)!important;box-shadow:inset 0 3px #d8edac,inset 0 -5px #101e15!important;font-family:"Knightle Herald"}
.strike-gauge{border-radius:0!important;border:3px solid #796847!important;box-shadow:0 0 0 2px #101712,inset 0 3px #010907;clip-path:polygon(5px 0,calc(100% - 4px) 0,calc(100% - 4px) 3px,100% 3px,100% calc(100% - 4px),calc(100% - 4px) calc(100% - 4px),calc(100% - 4px) 100%,3px 100%,3px calc(100% - 3px),0 calc(100% - 3px),0 4px,5px 4px)}
.grade-perfect .critical-number{color:#fff4b5;text-shadow:0 0 25px #efce78,2px 3px #557340}.grade-perfect .critical-window{animation:perfect-impact .5s steps(8)}@keyframes perfect-impact{0%{transform:scale(.9)}25%{transform:scale(1.07)}40%{transform:translateX(-4px)}55%{transform:translateX(4px)}100%{transform:none}}
/* Loot arrives, breaks open, then individual treasures punch into view. */
.loot-opening .loot-stage{animation:relic-shudder 1.5s steps(12) both}.loot-opening .loot-rays{animation:relic-rays 1.6s ease-out both}.loot-opening .rainbow-burst{animation:relic-rainbow 1.6s ease-out both}
.loot-sparks i{width:14px;height:14px;background:transparent url('assets/quest/gold-sovereign.webp') center/contain no-repeat;image-rendering:pixelated;filter:drop-shadow(1px 2px #403016)}
.loot-opening .loot-sparks i{animation:treasure-spark 1.6s cubic-bezier(.1,.8,.4,1) both;animation-delay:calc(var(--n)*12ms)}
.loot-revealed .loot-rays{opacity:.2;animation:hoard-glimmer 8s linear infinite}.treasure-item{animation:treasure-punch .65s cubic-bezier(.15,.8,.35,1.25) both;animation-delay:calc(var(--order)*240ms);background:radial-gradient(ellipse at 50% 38%,#ae8a493d,transparent 67%);border:0;position:relative}.treasure-item canvas{filter:drop-shadow(0 4px #101810) drop-shadow(0 0 9px #e6bc6244)}.treasure-item:after{content:'';width:3px;height:3px;background:#f2dfab;box-shadow:3px 0 #acbb9399,-3px 0 #acbb9399,0 3px #acbb9399,0 -3px #acbb9399;position:absolute;top:17%;left:75%;animation:item-spark 2s steps(5) infinite;animation-delay:calc(var(--order)*.3s)}.treasure-item>span{font-family:"Knightle Herald";font-weight:700;font-size:23px;color:#f4d897}.loot-total b{font-family:"Knightle Herald"}.spoils-screen h1{font-family:"Knightle Herald";font-weight:700}
@keyframes relic-shudder{0%,25%{transform:translateY(0)}32%{transform:translateX(-4px)}38%{transform:translateX(4px)}45%{transform:scale(.92)}54%{transform:scale(1.18)}100%{transform:none}}
@keyframes relic-rays{0%,30%{opacity:0;transform:scale(.4)}52%{opacity:1;transform:scale(1.5) rotate(15deg)}100%{opacity:.25;transform:scale(1.8) rotate(42deg)}}@keyframes relic-rainbow{0%,30%{opacity:0;transform:scale(.3)}50%{opacity:.9;transform:scale(1.2)}70%{opacity:.7;transform:scale(1.6)}100%{opacity:.3;transform:scale(1.3)}}
@keyframes hoard-glimmer{to{transform:rotate(360deg)}}@keyframes treasure-punch{0%{opacity:0;transform:translateY(25px) scale(.25)}65%{opacity:1;transform:translateY(-4px) scale(1.16)}100%{opacity:1;transform:none}}@keyframes item-spark{0%,70%,100%{opacity:0;scale:.5}80%{opacity:1;scale:1.4}}
/* Experience is an earned, post-combat ceremony. */
.legacy-rank{display:flex;align-items:center;justify-content:center;gap:9px;text-align:left}.legacy-rank>b{display:grid;place-items:center;min-width:32px;height:34px;font:bold 21px "Knightle Herald";color:#f6dd9f;background:#69563b;clip-path:polygon(5px 0,calc(100% - 5px) 0,100% 7px,100% 70%,50% 100%,0 70%,0 6px);text-shadow:1px 2px #302b20}.legacy-rank>span{font-size:8px;line-height:1.7;letter-spacing:1.3px;color:#b6b396}.legacy-rank strong{font-size:10px;color:#e8d9b8}.meter.xp{height:8px;border:0;background:#151c19;box-shadow:0 -1px #9b835b,0 1px #594832;padding:1px;clip-path:polygon(3px 0,calc(100% - 3px) 0,100% 3px,100% calc(100% - 3px),calc(100% - 3px) 100%,3px 100%,0 calc(100% - 3px),0 3px)}.meter.xp i{background:linear-gradient(90deg,#7d997e,#b5bea1 60%,#e7cf8c);box-shadow:inset 0 1px #eee9b477}
.experience-screen{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;max-width:650px;padding:65px 25px 35px;isolation:isolate}.stage-experience:before{background:#08120bea!important}.experience-screen h1{font:bold 32px "Knightle Herald";letter-spacing:1px;color:#f0d9a4;margin:5px 0 15px}.ascension-emblem{position:relative;width:200px;height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;isolation:isolate}.rank-number{font:bold 81px "Knightle Herald";color:#f6e7b6;text-shadow:3px 5px #463b28,0 0 20px #b19d4a77;line-height:1}.ascension-emblem>small{font:10px "Knightle Quill";letter-spacing:5px;color:#c7b98d;margin-top:10px}.ascension-halo{position:absolute;inset:-40px;z-index:-1;background:conic-gradient(from 50deg,transparent,#dea97722,transparent,#8cc6ad22,transparent,#93afcc22,transparent,#ddc46c33,transparent);mask-image:radial-gradient(circle,transparent 20%,#000 43%,transparent 70%);animation:hoard-glimmer 12s linear infinite}.ascension-emblem>i{position:absolute;left:50%;top:50%;height:3px;width:3px;background:hsl(calc(var(--n)*20) 55% 77%);animation:ascension-dust 2.2s ease-out infinite;animation-delay:calc(var(--n)*.11s);--angle:calc(var(--n)*20deg)}
.experience-screen h2{font:bold 24px "Knightle Herald";margin:6px 0 28px;color:#e9d6b4}.legacy-xp-track{height:27px;width:100%;max-width:430px;position:relative;padding:4px;background:#85704c;clip-path:polygon(6px 0,calc(100% - 7px) 0,calc(100% - 7px) 3px,100% 3px,100% calc(100% - 5px),calc(100% - 5px) calc(100% - 5px),calc(100% - 5px) 100%,5px 100%,5px calc(100% - 3px),0 calc(100% - 3px),0 5px,6px 5px);box-shadow:inset 0 2px #d3bd86,inset 0 -3px #332c1e;isolation:isolate}.legacy-xp-track:before{content:'';position:absolute;inset:3px;background:#111b16;z-index:-1}.legacy-xp-fill{position:relative;height:100%;background:linear-gradient(90deg,#b96252,#d39c57 20%,#e9d382 35%,#8bbd80 51%,#78b4c6 66%,#918eb6 82%,#d8afd1);box-shadow:inset 0 2px #f5ebc988,inset 0 -2px #3f3b4366;min-width:0}.legacy-xp-fill>i{position:absolute;right:-2px;top:-3px;height:calc(100% + 6px);width:4px;background:#ffefc7;box-shadow:0 0 14px #fff0bd;animation:xp-tip .45s steps(3) infinite}.xp-grain{position:absolute;inset:4px;background:repeating-linear-gradient(90deg,transparent 0 5px,#16231944 5px 6px),repeating-linear-gradient(0deg,transparent 0 3px,#f2e5c533 3px 4px)}.xp-tally{margin:13px 0 0;font:20px "Knightle Herald";color:#efe0bc}.xp-tally small{display:block;font:8px "Knightle Quill";letter-spacing:3px;color:#a8b19a;margin-top:6px}.xp-story{font:italic 14px/1.5 Georgia,serif;color:#babaa3;margin:25px 0}.xp-continue{min-width:240px;margin-top:10px;opacity:0;pointer-events:none}.xp-complete .xp-continue{opacity:1;pointer-events:auto;transition:opacity .4s}.xp-complete .legacy-xp-fill>i{animation:none}.rank-up .rank-number{animation:rank-burst .5s steps(8)}
@keyframes ascension-dust{from{opacity:0;transform:rotate(var(--angle)) translateY(50px) rotate(calc(-1*var(--angle)))}20%{opacity:1}to{opacity:0;transform:rotate(var(--angle)) translateY(110px) rotate(calc(-1*var(--angle)))}}@keyframes xp-tip{50%{opacity:.5}}@keyframes rank-burst{0%{transform:scale(.6);color:#fff}50%{transform:scale(1.2);text-shadow:0 0 30px #f4df93}100%{transform:none}}
/* Feat notices only appear away from battle input, like a wax-sealed note. */
#achievement-toast{top:70px;bottom:auto;right:24px;left:auto;width:300px;max-width:calc(100vw - 30px);padding:13px 12px;background:repeating-linear-gradient(0deg,#fff2bb08 0 1px,transparent 1px 5px),#302b22f5;border:0;border-radius:0;box-shadow:inset 0 2px #c4aa73,inset 0 -3px #151d15,0 5px 20px #0008;clip-path:polygon(5px 0,calc(100% - 7px) 0,calc(100% - 7px) 3px,100% 3px,100% calc(100% - 5px),calc(100% - 5px) calc(100% - 5px),calc(100% - 5px) 100%,3px 100%,3px calc(100% - 4px),0 calc(100% - 4px),0 6px,5px 6px);transform:translateY(-12px);gap:10px;color:#e9d6ac}#achievement-toast.show{transform:translateY(0)}#achievement-toast .notice-seal{display:grid;place-items:center;flex:none;width:30px;height:36px;font-size:24px;color:#dac086;background:#695237;clip-path:polygon(20% 0,80% 0,100% 20%,90% 75%,50% 100%,10% 75%,0 20%)}#achievement-toast div{gap:4px}#achievement-toast strong{font:12px "Knightle Herald";line-height:1.25}#achievement-toast small{font-size:7px;color:#cbb583;letter-spacing:1.6px}#achievement-toast span{font-size:10px;color:#b7af97;line-height:1.35}#achievement-toast button{font-size:19px;color:#d4c19a;min-width:27px;align-self:start}
#toast{border-radius:0;background:#27271fea;box-shadow:inset 0 2px #ac9569,0 5px 18px #0008;border:0;color:#e8d5ad}#toast span{color:#bcb6a0}
@media(max-width:700px){.combat-head h1,.boss-combat .combat-head h1{font-size:25px}.enemy-vitals{margin-top:4px}.enemy-vitals>span:first-child{font-size:11px}.enemy-vitals .threat{font-size:7px}.combat-head .eyebrow{font-size:8px}.helmet-health{width:23px;height:25px}.key{font-size:17px}.key.wide{font-size:9px}.combat-hint{font-size:10px;min-height:25px;display:grid;align-items:center}.inscription{margin:4px 0}.combat-head h1{margin-bottom:8px}.legacy-rank>b{font-size:18px;min-width:27px;height:30px}.legacy-rank>span{font-size:7px;letter-spacing:.7px}.legacy-rank strong{font-size:8px}.level-panel .meter{margin:5px 0}.trait-impact{font-size:11px}.experience-screen h1{font-size:25px}.experience-screen .eyebrow{font-size:8px}.ascension-emblem{height:180px;width:180px}#achievement-toast{right:auto;left:50%;top:64px;transform:translate(-50%,-12px);width:310px}#achievement-toast.show{transform:translate(-50%,0)}.key .cipher-glyph{width:18px;height:23px}.stage:has(.encounter-intro) .battle-wrap{min-height:150px}.encounter-rule p{font-size:14px}.encounter-rule>span{font-size:20px}}
@media(max-width:700px) and (max-height:760px){.key{height:39px}.helmet-health{width:21px;height:23px}.combat-head h1,.boss-combat .combat-head h1{font-size:22px}.enemy-vitals>span:first-child{font-size:10px}.combat-hint{font-size:9px;min-height:22px}.ascension-emblem{height:150px;width:150px}.experience-screen h2{margin-bottom:20px}.xp-story{margin:15px 0}.encounter-rule{bottom:calc(var(--ad-space) + 45px)}.experience-screen{padding-top:50px}}
@media(prefers-reduced-motion:reduce){.ascension-halo,.ascension-emblem>i,.loot-rays,.loot-sparks,.weakpoint-burst i{display:none}.intro-name .combat-head,.intro-bar .enemy-health,.intro-rule .encounter-rule{animation:none;opacity:1}.intro-scene .encounter-veil{opacity:0}.wizard-weave .cipher-translation{display:none}.wizard-weave .cipher-symbol{opacity:1}.key,.heart-unit,.helmet-health,.xp-continue{animation:none!important;transition:none!important}}
/* Menus use the same aged wood and hammered trim as the battle controls. */
.dialog,.game-menu{border:0;border-radius:0;background:repeating-linear-gradient(0deg,#b99d6310 0 1px,transparent 1px 8px),linear-gradient(125deg,#3b3428fa,#1b211bfc);box-shadow:inset 0 3px #ab9165,inset 3px 0 #6d5f44,inset -3px -4px #080f0a,inset 0 0 0 8px #ad996421,0 20px 60px #0009;clip-path:polygon(8px 0,calc(100% - 12px) 0,calc(100% - 12px) 4px,calc(100% - 4px) 4px,calc(100% - 4px) 10px,100% 10px,100% calc(100% - 10px),calc(100% - 6px) calc(100% - 10px),calc(100% - 6px) 100%,10px 100%,10px calc(100% - 4px),0 calc(100% - 4px),0 8px,8px 8px)}
.dialog h2,.game-menu h2{font-family:'Knightle Herald',serif;letter-spacing:1px}.dialog p,.game-menu p{font:italic 14px/1.55 Georgia,serif;color:#d2c4aa}.difficulty-options button{border-radius:0;background:#26271f;border-color:#99815b55}.difficulty-options .selected{background:#75603a44;border-color:#b99b63;box-shadow:inset 0 2px #c8b28644}.difficulty-options small{font:italic 12px/1.4 Georgia,serif}
/* Leave breathing room above the reserved banner, including the taller boss bar. */
@media(max-width:700px){.battle-wrap{min-height:140px}}
@media(max-width:700px) and (max-height:760px){.battle-wrap{min-height:90px}}
.legacy-xp-fill{background:linear-gradient(90deg,#d67369,#e4ad55 20%,#f4dd7c 35%,#8fce83 51%,#72c4d5 66%,#a49bdd 82%,#e2a6cd)}
body:has(.travel-veil) #achievement-toast,body:has(.stage-combat) #achievement-toast{visibility:hidden;pointer-events:none}
