:root{font-family:"Microsoft YaHei","PingFang SC",system-ui,sans-serif;color:#354237;background:#dedbcf;font-synthesis:none;--paper:#f4f0e4;--ink:#2a4034;--muted:#8b8f7e;--line:#dedbcc;--red:#a4513d;--gold:#b99760;--serif:"STKaiti","KaiTi","Songti SC","SimSun",serif}
*{box-sizing:border-box}body{margin:0;min-width:320px}button,input{font:inherit}button{cursor:pointer;border:0;color:inherit;background:none;-webkit-tap-highlight-color:transparent}button:disabled{cursor:not-allowed;opacity:.5}button:focus-visible,input:focus-visible{outline:3px solid #bd8f4a;outline-offset:3px}button{transition:background .16s,transform .16s,box-shadow .16s}button:hover:not(:disabled){filter:brightness(1.045)}button:active:not(:disabled){transform:translateY(1px)}h1,h2,h3,p{margin:0}button svg{pointer-events:none}.landscape{position:fixed;inset:0;pointer-events:none;background:radial-gradient(ellipse at 50% 20%,#eeeade,#dad8c9);z-index:-1}.landscape svg{width:100%;height:100%}.desktop-brand{position:fixed;top:17%;left:max(35px,calc(50% - 580px));width:240px;color:#3a5041}.seal-mark{display:inline-block;background:#a35642;color:#f4dfb5;border:3px double #e1bfa0;padding:7px 10px;font-family:var(--serif);font-size:23px;writing-mode:vertical-rl}.desktop-brand h1{font-family:var(--serif);font-weight:500;font-size:48px;letter-spacing:5px;line-height:1.5;margin:24px 0}.desktop-brand p{font-size:13px;line-height:2.3;letter-spacing:5px;color:#7d8774}.brand-rule{width:48px;height:1px;background:#9ba18a;margin:28px 0}.small-caps{font-size:9px;letter-spacing:2px}.desktop-note{position:fixed;right:max(35px,calc(50% - 530px));top:29%;color:#8c907c}.desktop-note>span{font-size:11px;letter-spacing:4px}.desktop-note p{font-family:var(--serif);font-size:24px;line-height:1.9;letter-spacing:8px;margin:22px 0}.desktop-note small{writing-mode:vertical-rl;letter-spacing:4px;margin-left:100px;font-size:10px}#app{position:relative;max-width:520px;margin:26px auto 40px}.game-shell{background:var(--paper);min-height:850px;box-shadow:0 18px 70px #32463220,0 0 0 1px #eee8d8;border-radius:12px;overflow:hidden;position:relative;background-image:radial-gradient(#8e896712 .6px,transparent .6px);background-size:5px 5px}.topbar{height:66px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);padding:0 25px}.wordmark{font-family:var(--serif);font-size:23px;letter-spacing:1px;display:flex;align-items:center;gap:3px;padding:0;font-weight:bold}.wordmark>span{color:#9f523c}.wordmark em{background:#a2543e;color:#f9e8c6;font-size:12px;font-style:normal;padding:3px;margin-left:5px;line-height:1}.top-actions{display:flex;align-items:center;gap:14px}.round-button{width:30px;height:30px;border:1px solid #d3d4c4;border-radius:50%;font-size:17px;color:#6e7d68}.edition{font-size:10px;letter-spacing:2px;color:#85907d}.money{font-size:17px;display:flex;gap:6px;align-items:center}.coin{color:#b7904e;font-size:19px}.money b{font-weight:650;font-variant-numeric:tabular-nums}.eyebrow{font-size:10px;letter-spacing:3px;color:#8b8e76}.lobby-title{text-align:center;padding:36px 20px 22px}.lobby-title .eyebrow{display:flex;align-items:center;justify-content:center;gap:10px;letter-spacing:2px}.eyebrow i{height:1px;width:20px;background:#c8c9b3}.lobby-title h1{font-family:var(--serif);font-weight:500;font-size:43px;letter-spacing:4px;line-height:1.35;margin:17px 0 13px}.lobby-title h1 span{color:#a4543e}.lobby-title p{font-size:12px;letter-spacing:2px;color:#89907a}.selection-label{display:flex;align-items:center;gap:8px;margin:13px 24px 14px}.section-number{font-family:var(--serif);font-size:15px;border:1px solid #b8bfaa;width:22px;height:22px;display:inline-flex;justify-content:center;align-items:center;color:#6d7c63}.selection-label h2{font-size:13px;letter-spacing:1px;font-weight:600}.selection-label>span:last-child{font-size:10px;color:#909580;margin-left:auto}.hero-choices{display:grid;grid-template-columns:repeat(3,1fr);gap:11px;margin:0 24px}.hero-choice{border:1px solid #d7d5c4;border-radius:6px;background:#e8e7d9;position:relative;padding:10px 0 13px;overflow:hidden}.hero-choice:before{content:"";position:absolute;top:16px;left:15px;right:15px;aspect-ratio:1;background:#d5dcca;border-radius:50%;opacity:.6}.hero-choice.chosen{background:#e7eddf;border:2px solid #60775a;box-shadow:0 4px 10px #334a3420;padding:9px 0 12px}.hero-choice.chosen:after{content:"✓";position:absolute;right:0;bottom:0;background:#58714f;color:#f0ebd9;border-radius:6px 0 0 0;font-size:10px;padding:1px 5px}.hero-choice .portrait{position:relative;width:100%;height:142px;display:block}.hero-choice.locked{filter:saturate(.45)}.hero-faction{position:absolute;right:8px;top:8px;z-index:1;width:20px;height:24px;background:#d5dcc9;color:#6c795f;font-family:var(--serif);padding-top:2px}.hero-name{font-family:var(--serif);font-size:24px;letter-spacing:5px;display:block;margin-top:5px}.hero-title{display:block;font-size:10px;color:#8c907a;letter-spacing:2px;margin:5px 0 10px}.hero-tag{font-size:10px;border:1px solid #c4cdb5;border-radius:2px;display:inline-block;padding:2px 9px;color:#718266}.talent-card{display:flex;gap:12px;align-items:center;margin:18px 24px;background:#e8e8da;padding:13px 15px;border-radius:5px;border:1px solid #dadfcf}.talent-symbol{width:37px;height:37px;flex-shrink:0;background:#627854;color:#ebe5cb;display:grid;place-items:center;transform:rotate(45deg);font-family:var(--serif);font-size:24px;border:3px double #acb793}.talent-card h3{font-size:13px;margin-left:5px}.talent-card h3 span{font-size:10px;font-weight:400;color:#939781;margin-left:10px}.talent-card p{font-size:11px;line-height:1.9;color:#7b836d;margin:4px 0 0 5px}.lobby-facts{display:grid;grid-template-columns:repeat(3,1fr);text-align:center;margin:24px 20px}.lobby-facts>div+div{border-left:1px solid #d9dccb}.lobby-facts b{display:block;font-size:12px;font-weight:500;margin-bottom:6px}.lobby-facts span{font-size:9px;color:#92957e}.primary-button{background:#a4523c;color:#fcf0d8;padding:16px 22px;border:1px solid #8e4835;border-radius:5px;box-shadow:inset 0 0 0 3px #ffffff08,0 3px 0 #783b2b;display:flex;justify-content:center;gap:20px;align-items:center;font-family:var(--serif);font-size:22px;letter-spacing:3px;font-weight:600}.primary-button span{font-family:serif;font-size:22px}.start-run{width:calc(100% - 48px);margin:0 24px}.lobby-footer{padding:22px 20px;text-align:center;display:flex;flex-direction:column;gap:12px;color:#929580;font-size:10px}.lobby-footer button{font-size:10px;color:#76866c;text-decoration:underline;text-underline-offset:3px}.secondary-button{border:1px solid #cbd1bc;border-radius:4px;padding:9px 14px;color:#617357;background:#eceee2;font-size:12px}.resume-button{display:block;width:calc(100% - 48px);margin:14px 24px 0}.campaign{padding:23px 24px 0;display:flex;align-items:center;justify-content:space-between}.campaign h1{font-family:var(--serif);font-size:27px;letter-spacing:2px;margin-top:7px;font-weight:600;white-space:nowrap}.campaign h1>span{font-family:Georgia,serif;font-size:28px;margin-left:20px;letter-spacing:0;font-weight:normal}.campaign h1 small{font-size:13px;color:#92967e}.lives{color:#a05340;font-size:14px;letter-spacing:2px;padding-top:15px}.lives .lost{color:#d6d8c8}.lives small{display:block;text-align:right;font-size:9px;letter-spacing:2px;margin-top:4px;color:#929580}.chapter-track{display:flex;align-items:center;justify-content:space-between;margin:17px 24px 20px;position:relative}.chapter-track:before{content:"";position:absolute;left:0;right:0;height:1px;background:#d6daca}.chapter-track span{position:relative;width:8px;height:8px;border-radius:50%;background:#d4d8c5;font-size:10px;color:#f7eed7;display:grid;place-items:center}.chapter-track .current{width:21px;height:21px;background:#9f503e;box-shadow:0 0 0 4px #eee5d5}.chapter-track .passed{background:#81936c}.chapter-track .boss-mark{width:20px;height:20px;border-radius:2px;background:#ced1bd;color:#737c64;font-family:var(--serif);font-size:12px}.chapter-track .boss-mark.current{background:#9f503e;color:#f3e3c0}.commander-card{margin:0 24px 20px;display:flex;align-items:center;padding:9px 10px;background:#e6e9dc;border:1px solid #d2d8c4;border-radius:6px;gap:9px;height:77px}.commander-avatar{width:50px;height:55px;border-radius:50%;background:#d3ddc9;overflow:hidden;flex-shrink:0}.commander-avatar .portrait{width:63px;height:70px;margin:-7px 0 0 -5px}.commander-info{flex:1}.commander-info b{font-family:var(--serif);font-size:18px;letter-spacing:2px;white-space:nowrap}.commander-info em{font-family:system-ui;font-size:9px;font-style:normal;border:1px solid #aab898;color:#71845f;padding:1px 4px;margin-left:6px;letter-spacing:0;font-weight:400}.mini-health{height:4px;background:#cfd6be;border-radius:2px;overflow:hidden;margin:6px 0 3px;max-width:128px}.mini-health span{display:block;height:100%;background:#7d9565}.commander-info small{font-size:9px;color:#8a947b}.stat{display:flex;flex-direction:column;align-items:center;min-width:40px;gap:2px}.stat>span{font-size:12px;color:#738465}.stat b{font-size:16px;font-weight:650}.stat small{font-size:8px;color:#8c957e}.extra-stat{padding:0 0 0 8px;border-left:1px solid #cdd5be}.section-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;gap:5px}.section-heading h2{font-size:13px;font-weight:600;display:flex;align-items:center;gap:8px;letter-spacing:1px}.section-heading h2 small{font-weight:400;font-size:9px;color:#919782;letter-spacing:0}.section-heading>span{font-size:10px;color:#919781}.section-heading button{font-size:10px}.section-heading .coin{font-size:14px}.bag-section{margin:0 24px}.text-button{color:#828c73;font-size:10px}.board-frame{position:relative;background:#263e32;border:6px solid #425844;border-radius:6px;padding:7px;box-shadow:inset 0 0 0 1px #ad9d673a,0 4px 10px #30433012}.board{width:100%;aspect-ratio:1;position:relative;display:grid;grid-template-columns:repeat(var(--size),1fr);grid-template-rows:repeat(var(--size),1fr);touch-action:none}.grid-cell{min-width:0;background:#344d3d80;border:1px solid #70826426;border-radius:2px;margin:2px}.grid-cell:after{content:"·";font-size:12px;color:#8c9b7028}.grid-cell:hover{background:#6f875552}.board-corner{position:absolute;width:16px;height:16px;z-index:2;border-color:#b2a176;border-style:solid;pointer-events:none}.tl{top:-3px;left:-3px;border-width:2px 0 0 2px}.tr{top:-3px;right:-3px;border-width:2px 2px 0 0}.bl{bottom:-3px;left:-3px;border-width:0 0 2px 2px}.br{bottom:-3px;right:-3px;border-width:0 2px 2px 0}.board-item{position:absolute;padding:3px;pointer-events:none}.item-card{pointer-events:auto;position:relative;display:flex;align-items:center;justify-content:center;flex-direction:column;width:100%;height:100%;background:linear-gradient(145deg,#576349,#394d3b);border:1px solid color-mix(in srgb,var(--rarity) 60%,transparent);border-radius:4px;box-shadow:inset 0 0 0 2px #23392c35,0 2px 2px #0e291d30;padding:2px;touch-action:none;overflow:hidden;user-select:none;min-width:0}.item-card .item-art{width:80%;height:80%;max-width:92px;max-height:115px;filter:drop-shadow(0 3px 2px #18291d45)}.item-card.selected{outline:2px solid #ead19a;outline-offset:1px;background:linear-gradient(140deg,#6d7952,#4b6142);z-index:3;box-shadow:0 0 15px #ebca6540}.item-title{font-size:9px;color:#dedabe;position:absolute;bottom:3px;left:1px;right:1px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.item-level{position:absolute;top:2px;right:4px;font-family:Georgia,serif;font-size:9px;color:var(--rarity);font-weight:bold}.board .item-card .item-art{margin-bottom:5px}.link-dot{position:absolute;bottom:6px;right:6px;width:5px;height:5px;background:#b2ce74;box-shadow:0 0 4px #9eb778;border-radius:50%}.board-caption{display:flex;justify-content:space-between;font-size:9px;color:#8b947a;padding:9px 2px}.board-caption button{font-size:9px;color:#7b8c65;padding:0}.green-dot{display:inline-block;width:5px;height:5px;border-radius:50%;background:#7f995d;margin-right:5px}.selection-panel{border-top:1px solid #dce0cf;border-bottom:1px solid #dce0cf;padding:10px 0;margin:0 0 17px;min-height:58px}.selection-panel.empty{display:flex;align-items:center;gap:7px;font-size:10px;color:#8a947a}.selection-panel.empty>span{font-size:21px;color:#9aa78c}.selection-panel.empty>button{margin-left:auto;color:#8a9878;font-size:9px;white-space:nowrap}.selected-description b{display:block;font-size:12px;margin-bottom:5px;filter:brightness(.76)}.selected-description b small{font-weight:400;font-size:9px}.selected-description>span{font-size:10px;color:#6e8060}.selected-description p{font-size:10px;color:#8a927e;line-height:1.6;margin-top:4px}.item-actions{display:flex;gap:7px;margin-top:8px}.item-actions button{font-size:10px;background:#e5e8d9;border:1px solid #cbd5bc;border-radius:3px;padding:5px 10px}.item-actions button:last-child{margin-left:auto;color:#a48149}.stash-section,.shop-section{margin:0 24px 19px}.stash{min-height:71px;background:#e9e9dc;border:1px dashed #cbd2bc;border-radius:4px;padding:7px;display:flex;gap:7px;overflow-x:auto;align-items:center}.stash .item-card{width:59px;height:60px;flex-shrink:0;background:linear-gradient(130deg,#d9ddc9,#ccd5bc)}.stash .item-title{color:#586a4d;font-size:8px}.stash .item-level{filter:brightness(.7)}.stash-empty{font-size:10px;color:#9a9f8b;margin:auto;letter-spacing:.5px}.refresh-button{border:1px solid #d2d8c1;padding:5px 8px;border-radius:3px;font-size:10px;display:flex;gap:8px;align-items:center}.refresh-button>span{border-left:1px solid #d7dbc9;padding-left:6px}.shop-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:7px}.shop-item{display:flex;flex-direction:column;align-items:center;background:linear-gradient(#edede1,#e3e6d7);border:1px solid #d1d8c0;border-top:2px solid var(--rarity);border-radius:4px;overflow:hidden;padding:0;position:relative;min-width:0}.shop-tier{font-size:8px;color:var(--rarity);filter:brightness(.76);align-self:flex-start;padding:5px 6px 0}.shop-item .item-art{width:52px;height:49px;max-width:95%}.shop-item strong{font-weight:500;font-size:9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;padding:0 2px}.shop-item>small{font-size:8px;color:#939c82;margin:3px 0 7px}.price{width:100%;background:#dbe0cb;padding:4px 0;color:#9a7d47;font-size:11px;border-top:1px solid #d0d7bf;font-weight:bold}.price .coin{font-size:13px;margin-right:4px}.shop-item.sold .item-art{opacity:.2}.enemy-preview{display:flex;align-items:center;gap:10px;margin:0 24px 18px;border:1px solid #ded9c7;border-radius:4px;padding:10px;background:#eee9dc}.enemy-symbol{font-family:var(--serif);font-size:20px;width:32px;height:37px;background:#dcc8b1;color:#a2694d;display:grid;place-items:center;border-radius:2px;flex-shrink:0}.enemy-preview>div{flex:1}.enemy-preview b{font-size:11px;font-weight:600}.enemy-preview em{font-size:8px;font-style:normal;color:#a08a6a;border:1px solid #d6c9b4;padding:1px 3px;margin-left:6px;font-weight:400}.enemy-preview p{font-size:9px;line-height:1.7;color:#a2957c;margin-top:4px}.enemy-power{font-size:9px;line-height:1.8;color:#947f5c;white-space:nowrap}.battle-dock{padding:14px 24px max(16px,env(safe-area-inset-bottom));background:#f4f0e4ed;border-top:1px solid #d7ddc9;position:sticky;bottom:0;display:flex;align-items:center;gap:18px;z-index:9;backdrop-filter:blur(10px)}.battle-dock>div{width:38%}.battle-dock .primary-button{flex:1;padding:13px 8px;font-size:21px;letter-spacing:2px;gap:10px}.merge-button{position:relative;border:1px solid #bdcbae;background:#e4ead9;color:#617d50;border-radius:4px;padding:9px 7px;width:100%;font-size:12px;font-weight:600;white-space:nowrap}.merge-button.can-merge{background:#587748;color:#edf3dc;border-color:#526b42;box-shadow:0 0 10px #8ba77340}.merge-button>span{position:absolute;right:-5px;top:-6px;background:#aa573d;border-radius:50%;font-size:9px;width:17px;height:17px;color:white;padding-top:2px}.auto-merge{font-size:9px;color:#919a82;display:flex;justify-content:center;align-items:center;gap:4px;margin-top:6px}.auto-merge input{accent-color:#607f4d;width:11px;height:11px;margin:0}#drop-preview{display:none;position:absolute;pointer-events:none;background:#bdd58850;border:2px solid #bfd994;border-radius:5px;z-index:4}#drop-preview.invalid{background:#bc5b4a44;border-color:#db8871}.drag-ghost{position:fixed;width:72px;height:72px;z-index:100;pointer-events:none;opacity:.9;transform:translate(-50%,-50%) rotate(-5deg);box-shadow:0 5px 20px #1f332d40;border-radius:5px;background:#526b46;border:2px solid #d3bb7c}.drag-ghost svg{width:100%;height:100%}
.battle-heading{text-align:center;padding:33px 15px 25px}.battle-heading h1{font-family:var(--serif);font-size:34px;letter-spacing:6px;margin:13px 0}.battle-heading p{font-size:11px;letter-spacing:2px;color:#909781}.battle-banners{display:flex;justify-content:space-between;padding:0 38px}.battle-banners span{font-size:10px;color:#8c9c7f;border-top:1px solid #b8c4a5;border-bottom:1px solid #b8c4a5;padding:6px 13px;letter-spacing:1px}.battle-banners span+span{color:#a48265;border-color:#cdbc9f}.arena{position:relative;display:flex;align-items:end;justify-content:space-between;height:290px;padding:15px 16px 0;overflow:hidden;background:linear-gradient(transparent,#d7ddca80);border-bottom:2px solid #c4cdb4}.battle-sun{position:absolute;width:105px;height:105px;border-radius:50%;background:#ccb98f40;left:calc(50% - 52px);top:20px}.arena-mountain{position:absolute;bottom:25px;left:0;right:0;height:110px;background:#a8b19a44;clip-path:polygon(0 80%,20% 45%,31% 68%,45% 22%,60% 70%,80% 15%,100% 60%,100% 100%,0 100%)}.fighter{position:relative;z-index:1;width:46%;text-align:center;padding-bottom:15px}.fighter .portrait{width:100%;max-width:215px;height:224px;transform-origin:bottom center}.fighter.enemy .portrait{transform:none}.fighter b{font-family:var(--serif);font-size:22px;letter-spacing:4px;display:block}.fighter>span{font-size:9px;color:#889579;letter-spacing:3px;margin-top:4px;display:block}.fighter.enemy>span{color:#a28465}.versus{position:absolute;left:calc(50% - 14px);top:115px;font-family:var(--serif);font-size:29px;color:#a0855c;border:1px solid #c8b693;padding:3px}.combat-healths{display:grid;grid-template-columns:1fr 1fr;gap:25px;margin:23px 26px}.combat-healths span{display:flex;justify-content:space-between;font-size:9px;color:#8d967d;margin-bottom:7px}.combat-healths b{font-size:10px;font-weight:500;color:#708260}.health-track{height:9px;background:#d9dfca;border:1px solid #c1cdb0;border-radius:3px;overflow:hidden}.health-track i{display:block;height:100%;width:100%;background:#7c9b63;transition:width .2s}.enemy-bar{background:#e3d5c5;border-color:#d4c2a6}.enemy-bar i{background:#b37b5b}.battle-info{margin:0 25px 18px;display:flex;justify-content:space-between;align-items:center;color:#8c9279;font-size:11px}.battle-info .secondary-button{font-size:10px;padding:6px 10px}.battle-log{margin:0 25px;border:1px solid #d5dbc7;border-radius:5px;padding:15px;background:#e8ecdf}.battle-log .section-heading{margin-bottom:8px}.battle-log .section-heading h2{font-size:12px}.battle-log .section-heading>span{font-size:9px}.battle-log ol{list-style:none;padding:0;margin:0;height:112px;overflow:auto;font-size:10px;line-height:2.3;color:#869477}.battle-log li:first-child{color:#4d6946}.battle-log li .damage{color:#ac6446}.combat-loadout{padding:18px 25px;font-size:10px;color:#8c957e}.combat-loadout>div{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px}.combat-loadout>div>span{display:block;width:33px;height:34px;border:1px solid var(--rarity);background:#e0e5d2;border-radius:3px}.combat-loadout svg{width:100%;height:100%}.battle-note{text-align:center;font-size:9px;color:#9da48e;padding:0 15px 23px}.float-layer{position:absolute;inset:0;pointer-events:none;z-index:4}.float-number{position:absolute;top:65px;left:10%;right:10%;font-weight:800;font-size:27px;color:#ac523a;text-shadow:0 2px #f5e6c5;animation:float-up .8s ease-out forwards}.float-number.crit{font-size:37px;color:#c16133}.float-number.heal{color:#679a57}.float-number.dodge,.float-number.rescue{font-size:22px;color:#a58b44}.attacking .portrait{animation:strike .3s ease-out}.enemy.attacking .portrait{animation:strike-enemy .3s ease-out}.hurt .portrait{filter:brightness(1.3) sepia(.4)}@keyframes float-up{0%{transform:translateY(10px) scale(.8);opacity:0}15%{opacity:1;transform:translateY(0) scale(1.1)}100%{opacity:0;transform:translateY(-55px) scale(1)}}@keyframes strike{50%{transform:translateX(16px) rotate(7deg)}}@keyframes strike-enemy{50%{transform:translateX(-16px) rotate(-7deg) scaleX(-1)}}
.modal-backdrop{position:fixed;inset:0;z-index:50;background:#1b302bb8;backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;padding:20px}.modal{max-width:430px;width:100%;background:var(--paper);padding:28px;border:1px solid #d1c6a9;border-radius:9px;box-shadow:0 25px 70px #0b211846;position:relative;max-height:90dvh;overflow:auto}.modal>h2{font-family:var(--serif);font-size:26px;letter-spacing:3px;margin-bottom:15px}.modal>p{font-size:12px;color:#88917b;line-height:1.9;margin-bottom:16px}.modal .primary-button{width:100%;font-size:18px;padding:13px;letter-spacing:1px;margin-top:20px}.modal-close{position:absolute;top:10px;right:12px;color:#859177;font-size:24px;padding:0 5px}.settings-row{display:flex;align-items:center;justify-content:space-between;padding:16px 0;border-bottom:1px solid #d8dccb;font-size:12px;gap:15px}.settings-row input[type=range]{width:120px;accent-color:#6f8957}.settings-row button{font-size:11px;border:1px solid #b9c8a7;border-radius:4px;padding:6px 12px;background:#e2e9d7}.settings-links{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}.settings-links button{font-size:11px;border:1px solid #cdd5be;border-radius:4px;padding:8px 10px;color:#7b8b6b}.stats-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;padding:10px 0 20px}.stats-grid>div{background:#e5e9dc;border:1px solid #d3dbc6;text-align:center;padding:11px 5px;border-radius:4px}.stats-grid b{display:block;font-size:21px;font-weight:500}.stats-grid span{font-size:10px;color:#879478;display:block;margin-top:6px}.link-list{padding:0;list-style:none}.link-list li{padding:10px 0;border-bottom:1px solid #d5ddc6;font-size:12px;color:#70895a;line-height:1.8}.modal-detail{font-size:11px;color:#8b957d;line-height:2}.tutorial-visual{display:flex;align-items:center;justify-content:center;gap:8px;padding:20px;background:#e2e8d6;border:1px solid #c4d0b5;margin:17px 0}.tutorial-visual svg{width:65px;height:65px}.tutorial-progress{text-align:center;font-size:10px;letter-spacing:5px;color:#9da68a;margin:15px 0}.tutorial-skip{display:block;margin:18px auto 0;font-size:11px;color:#8c987d}.result-modal{text-align:center}.result-seal{display:grid;place-items:center;width:80px;height:80px;border:4px double #b78049;border-radius:50%;font-family:var(--serif);font-size:53px;color:#b58349;margin:0 auto 20px;background:#e9dec4}.result-seal.defeat{background:#e1e4d8;color:#89967c;border-color:#9daa8c}.result-modal>.eyebrow{letter-spacing:2px;font-size:10px}.result-modal h2{margin:15px 0 9px;font-family:var(--serif);font-size:28px}.result-modal>p{font-size:11px}.result-stats{display:flex;justify-content:center;gap:40px;margin:25px 0;font-family:Georgia,serif;font-size:28px}.result-stats small{display:block;font-family:system-ui;font-size:9px;color:#8c977b;margin-top:6px}.rewards{display:grid;grid-template-columns:1fr 1fr;background:#e9e9d9;border:1px solid #d7dcc4;border-radius:4px;padding:10px}.rewards>div{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px}.rewards>div+div{border-left:1px solid #d3d9c2}.rewards .coin{font-size:38px;height:50px}.rewards svg{width:50px;height:50px}.rewards strong{font-size:14px}.rewards small{font-size:9px;color:#8e987a}.loss-note{font-size:17px;color:#ad6b51;border:1px solid #dccdb3;padding:15px;background:#eee2d1;line-height:1.8;border-radius:4px}.loss-note small{font-size:10px;color:#a58c6b}.end-shell{text-align:center}.end-shell>.eyebrow{display:block;margin-top:50px}.end-portrait{width:240px;margin:15px auto}.end-shell>h1{font-family:var(--serif);font-size:28px;letter-spacing:2px;padding:0 20px}.end-shell>p{font-size:12px;color:#889778;margin-top:17px}.end-record{display:flex;justify-content:center;gap:45px;margin:38px 0}.end-record span{font-size:10px;color:#889976}.end-record strong{display:block;font-size:26px;font-family:var(--serif);font-weight:500;margin-top:8px;color:#567044}.end-shell>.primary-button{width:calc(100% - 70px);margin:25px 35px}.end-note{font-size:10px;color:#9aa589}.modal-actions{display:flex;gap:8px;margin-top:18px}.modal-actions button{flex:1}.modal-actions .primary-button{margin:0}.modal-actions .secondary-button{font-size:14px}#toast{position:fixed;bottom:110px;left:50%;transform:translate(-50%,15px);background:#2a433aee;color:#f2e9d3;padding:12px 19px;border:1px solid #b29f6355;border-radius:5px;box-shadow:0 4px 20px #17352822;font-size:12px;z-index:110;opacity:0;pointer-events:none;transition:.2s;max-width:90vw;text-align:center;width:max-content;line-height:1.8}#toast.visible{opacity:1;transform:translate(-50%,0)}
@media(min-width:1200px){#app{margin-left:calc(50% - 260px)}}@media(max-width:1100px){.desktop-brand,.desktop-note{display:none}}@media(max-width:560px){#app{margin:0 auto;max-width:520px}.game-shell{border-radius:0;box-shadow:none;min-height:100dvh}.topbar{height:59px;padding:0 18px}.wordmark{font-size:22px}.lobby-title{padding-top:30px}.lobby-title h1{font-size:39px}.hero-choices{gap:8px;margin:0 18px}.hero-choice .portrait{height:127px}.hero-title{font-size:9px;letter-spacing:1px}.hero-tag{font-size:8px;padding:2px 6px}.selection-label{margin-left:18px;margin-right:18px}.talent-card{margin-left:18px;margin-right:18px}.lobby-facts{margin:23px 14px}.lobby-facts span{font-size:8px}.campaign{padding:20px 18px 0}.campaign h1{font-size:24px}.campaign h1>span{margin-left:12px;font-size:26px}.lives{font-size:12px;letter-spacing:1px}.chapter-track{margin-left:18px;margin-right:18px}.commander-card{margin-left:18px;margin-right:18px;gap:6px;padding:7px}.commander-info b{font-size:17px}.stat{min-width:35px}.stat b{font-size:14px}.bag-section{margin:0 18px}.stash-section,.shop-section{margin-left:18px;margin-right:18px}.board-frame{border-width:5px;padding:5px}.grid-cell{margin:1.5px}.board-item{padding:2px}.board .item-title{font-size:8px}.item-level{font-size:8px;top:1px;right:2px}.shop-grid{gap:5px}.shop-item strong{font-size:8px}.shop-item .item-art{height:44px}.shop-tier{padding-left:4px}.enemy-preview{margin-left:18px;margin-right:18px}.battle-dock{padding-left:18px;padding-right:18px;gap:12px}.battle-dock .primary-button{font-size:20px}.fighter .portrait{height:192px}.arena{height:265px;padding-left:8px;padding-right:8px}.modal{padding:25px 21px}.modal-backdrop{padding:17px}.combat-healths{margin-left:20px;margin-right:20px;gap:20px}.battle-banners{padding-left:29px;padding-right:29px}.selection-panel.empty{font-size:9px}.board-caption{font-size:8px}.board-caption button{font-size:8px}.end-shell>h1{font-size:23px}}
.prepare{padding-bottom:104px}.battle-dock{position:fixed;left:50%;transform:translateX(-50%);bottom:0;width:min(520px,100%);box-shadow:0 -5px 20px #32463210}.modal:focus{outline:none}.stash .item-card{touch-action:pan-x}.merge-flash{animation:merge-light .8s ease-out}.hero-stars{display:block;font-size:9px;color:#b49b65;letter-spacing:2px;margin:-3px 0 8px}.arena .fighter{animation:enter-battle .6s ease-out}
@keyframes merge-light{15%{box-shadow:0 0 30px #ccaa5b,inset 0 0 35px #dece7644;filter:brightness(1.35)}100%{box-shadow:0 4px 10px #30433012}}
@keyframes enter-battle{from{opacity:0;translate:0 25px}to{opacity:1;translate:0 0}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}

/* 2.5D character art and campaign archive */
.character{position:relative;display:block;isolation:isolate;overflow:hidden;aspect-ratio:1}
.character-sprite{position:absolute;left:0;top:0;width:125%;height:100%;max-width:none;overflow:visible;transform-origin:40% 50%;filter:drop-shadow(1px 4px 3px #14221933)}
.character.facing-left .character-sprite{transform:scaleX(-1)}
.asset-probe{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.character-fallback{display:none;position:absolute;inset:20%;border-radius:50%;background:var(--character-color);color:#f8efdb;align-items:center;justify-content:center;font:64px var(--serif)}
.asset-failed .character-sprite{display:none}.asset-failed .character-fallback{display:flex}
.hero-choice{background:linear-gradient(160deg,#eef0e4,#d4ddcc);padding-top:0!important}
.hero-choice .portrait{height:185px;width:190px;max-width:none;margin-left:calc(50% - 95px);margin-top:0px}
.hero-choice .character-sprite{scale:1;transform-origin:50% 78%}
.hero-choice.chosen{box-shadow:0 5px 20px #334a3430;border-color:#6a8054}
.hero-choice .hero-faction{background:#e8dfc6d9;border:1px solid #b9a781}
.hero-name{margin-top:0;position:relative;text-shadow:0 2px 3px #eef0e4}
.hero-choice:before{top:26px;width:90px;height:90px;left:calc(50% - 45px);background:radial-gradient(#c8b47880,transparent)}
.commander-avatar .portrait{width:88px;height:88px;margin:-2px 0 0 -18px}
.commander-avatar .character-sprite{scale:1.7;transform-origin:50% 30%}
.end-portrait .portrait{width:270px;height:270px;margin:auto}
.lobby-links{display:flex;justify-content:center;gap:18px}
.top-actions{gap:9px}.history-shortcut{font-family:var(--serif);font-size:15px}
.game-shell.battle-shell{width:760px;max-width:100vw;position:relative;left:50%;transform:translateX(-50%);overflow:hidden}
body:has(.battle-shell) .desktop-brand,body:has(.battle-shell) .desktop-note{opacity:.2}
.battle-shell .battle-heading{padding:22px 24px 18px}
.battle-heading h1{font-size:32px;letter-spacing:7px;margin:10px 0}
.battle-heading p{font-size:11px;margin:0 10px;line-height:1.7}
.battle-stage{position:relative;height:440px;overflow:hidden;isolation:isolate;background:#7d8b7b url('./assets/scenes/battlefield.webp') center 58%/cover;border-top:1px solid #b7b797;border-bottom:1px solid #6b7560;perspective:900px}
.stage-sky{position:absolute;inset:0;background:linear-gradient(#50716b15 15%,transparent 55%,#7c5f36aa);pointer-events:none}
.stage-ground{position:absolute;left:-25%;width:150%;bottom:-65%;height:110%;transform:rotateX(65deg);background:repeating-linear-gradient(0deg,transparent 0 55px,#dbd4a31a 56px 57px),repeating-linear-gradient(90deg,transparent 0 75px,#ede5c21a 76px 77px);border-radius:50%;box-shadow:inset 0 0 90px #d4c29844}
.stage-mist{position:absolute;inset:20% -30% 30%;background:radial-gradient(ellipse,#faf1ce40,transparent 65%);animation:mist-drift 13s ease-in-out infinite alternate;pointer-events:none}
.stage-caption{position:absolute;left:23px;right:23px;top:18px;display:flex;justify-content:space-between;font-size:10px;letter-spacing:3px;color:#f1ead7;text-shadow:0 1px 6px #17261d;z-index:3}
.stage-banner{position:absolute;top:18%;width:33px;height:130px;opacity:.65;filter:drop-shadow(2px 4px 3px #26352a);transform:rotate(-3deg)}
.stage-banner i{position:absolute;left:0;top:-12px;width:3px;height:170px;background:#5b4c30}
.stage-banner span{display:block;background:linear-gradient(90deg,#465f46,#334633);color:#dbc58d;height:100px;padding-top:23px;font:22px var(--serif);text-align:center;clip-path:polygon(0 0,100% 0,100% 85%,50% 100%,0 85%);transform-origin:left;animation:flag-wave 3.7s ease-in-out infinite alternate}
.banner-left{left:6%}.banner-right{right:6%;transform:rotate(3deg)}.banner-right span{background:linear-gradient(90deg,#804a38,#4e3128);animation-delay:-1.5s}
.battle-stage .fighter{position:absolute;width:53%;height:auto;aspect-ratio:1;bottom:18px;left:-3%;padding:0;animation:none;z-index:4;text-align:center;transform:none;overflow:visible}
.battle-stage .fighter.enemy{left:auto;right:-3%;transform:none}
.actor-body{position:absolute;inset:0;animation:actor-breath 3.2s ease-in-out infinite;transform-origin:50% 88%}
.enemy .actor-body{animation-delay:-1.4s}
.battle-stage .fighter .portrait{width:100%;height:100%;margin:0;display:block;filter:drop-shadow(0 3px 4px #201c1555)}
.contact-shadow{position:absolute;bottom:10%;left:29%;width:43%;height:8%;border-radius:50%;background:radial-gradient(ellipse,#191e18b0,#242f2255 45%,transparent 70%);filter:blur(2px);transform:skewX(-18deg)}
.fighter-name{position:absolute;bottom:-5px;left:12%;right:12%;display:flex;flex-direction:column;gap:3px;color:#fff2d2;text-shadow:0 2px 4px #14251b;font-family:var(--serif)}
.battle-stage .fighter-name b{font-size:21px;letter-spacing:4px;margin:0}.battle-stage .fighter-name small{font:9px system-ui;letter-spacing:2px;color:#e2d4b9}
.stage-vignette{position:absolute;inset:0;box-shadow:inset 0 0 70px #18291f55;pointer-events:none;z-index:2}
.stage-embers{position:absolute;inset:0;pointer-events:none;z-index:5}
.stage-embers i{position:absolute;width:3px;height:3px;border-radius:50%;background:#f7d78d;box-shadow:0 0 7px #ffcd79;left:20%;bottom:10%;animation:ember-rise 7s linear infinite}
.stage-embers i:nth-child(2){left:47%;animation-delay:-2s}.stage-embers i:nth-child(3){left:73%;animation-delay:-4s}.stage-embers i:nth-child(4){left:90%;animation-delay:-6s}
.scene-1 .stage-sky{background:linear-gradient(#8e61452b,transparent,#372f2f66)}.scene-2 .stage-sky{background:linear-gradient(#6a699940,transparent,#47375c66)}.scene-3 .stage-sky{background:linear-gradient(#6997a744,transparent,#26475766)}.scene-4 .stage-sky{background:linear-gradient(#5a72484d,transparent,#26392677)}.scene-5 .stage-sky{background:linear-gradient(#a3402855,transparent,#782b2277)}
.battle-stage .float-layer{position:absolute;top:30%;left:15%;right:15%;height:80px;z-index:20;pointer-events:none}
.battle-stage .float-number{position:absolute;left:calc(50% - 25px);top:0;white-space:nowrap;animation:none!important;font-weight:800;font-size:29px;color:#fff4cf;text-shadow:0 3px 0 #452713,0 0 8px #714822}
.battle-stage .float-number.crit{font-size:39px;color:#ffd77c}.battle-stage .float-number.heal{color:#c4eea4}.battle-stage .float-number.dodge{font-size:22px;color:#dae6ed}
.battle-stage .float-number.burn{color:#ffb078}.battle-stage .float-number.poison{color:#bfd585}
.impact-fx{position:absolute;z-index:12;left:49%;top:43%;width:100px;height:100px;margin:-50px;pointer-events:none;color:#ffe4ad}
.slash-arc{position:absolute;inset:3px -22px;border:8px solid transparent;border-top-color:currentColor;border-right-color:#fff3cc;transform:rotate(-35deg) skewX(-20deg);border-radius:50%;filter:drop-shadow(0 0 5px #ffb845)}
.impact-core{position:absolute;left:38%;top:38%;height:24%;width:24%;background:#fff8d4;box-shadow:0 0 20px 10px #ffc76d99;clip-path:polygon(50% 0,59% 36%,100% 50%,63% 59%,50% 100%,41% 63%,0 50%,36% 40%)}
.impact-fx i{position:absolute;left:50%;top:50%;width:4px;height:10px;background:currentColor;transform:rotate(var(--angle)) translateY(calc(-1 * var(--travel)));border-radius:50%;box-shadow:0 0 5px currentColor}
.is-critical{color:#ffb25d}.is-critical .slash-arc{border-width:12px}
.fx-burn{color:#ff9c55}.fx-burn .slash-arc{border-radius:30% 70% 20% 60%;transform:rotate(-50deg);border-color:#ef7938aa;box-shadow:0 0 30px #ff873c}
.fx-poison{color:#addc69}.fx-poison .slash-arc{border:0;background:radial-gradient(#95b854bb,transparent 70%);box-shadow:0 0 15px #9aba5899;border-radius:50%}
.guard-ring{position:absolute;inset:3px;border:5px double #a6dce4;border-radius:45%;transform:rotateY(30deg);box-shadow:0 0 15px #cbe9e1,inset 0 0 20px #8accc466}
.heal-sigil,.rescue-sigil{display:grid;place-items:center;position:absolute;inset:0;color:#c9ec9a;border:2px solid currentColor;border-radius:50%;font:54px var(--serif);text-shadow:0 0 15px currentColor;box-shadow:0 0 20px #c1e29866}
.rescue-sigil{color:#f8dc8f;font-size:40px;border:3px double currentColor}.fx-dodge{color:#e8f0e3}.dodge-trail{position:absolute;inset:12px;background:linear-gradient(90deg,transparent,#dfe9da55);transform:skewX(-30deg);border-radius:50%}
.is-paused *{animation-play-state:paused!important}
.playback-controls{display:flex;gap:8px}.playback-controls button{min-width:47px;padding:7px 10px}
.battle-shell .combat-healths{margin:20px 28px 12px;gap:28px}.health-track{height:9px;box-shadow:inset 0 1px 3px #27332424}
.battle-info{margin:0 28px 20px;display:flex;align-items:center;justify-content:space-between;gap:8px}
.battle-shell .battle-log{margin:0 28px 20px}.battle-log ol{min-height:88px;max-height:135px}
.settings-audio{padding-bottom:12px;border-bottom:1px solid #d3d8c7;margin-bottom:10px}.settings-audio .settings-row{border:0}.settings-audio input{width:100%;accent-color:#71855a}
.history-modal{width:660px!important;max-width:100%;max-height:88dvh;overflow-y:auto}
.history-filters{display:flex;gap:7px;padding:7px 0 15px}.history-filters button{padding:7px 18px;border:1px solid #c9cdb8;border-radius:20px;font-size:11px}.history-filters button.active{color:#fff1d1;background:#53684b;border-color:#53684b}
.history-scroll{max-height:53dvh;overflow-y:auto;padding-right:4px;overscroll-behavior:contain}
.history-run{margin-bottom:18px;border:1px solid #d2d6c5;border-radius:6px;overflow:hidden}.history-run header{display:flex;align-items:center;justify-content:space-between;padding:14px;background:#e3e6d7;gap:8px}
.history-run header b{font:17px var(--serif);display:block}.history-run header small{font-size:10px;color:#7c876f;display:block;margin-top:5px}.history-run header>span{font-size:10px;color:#7f7657;white-space:nowrap}
.history-row{display:flex;align-items:center;gap:12px;width:100%;text-align:left;padding:12px 14px;border-top:1px solid #dbe0cf}.history-row:hover{background:#e7ebdd}.history-row b{font-size:12px;font-weight:550;display:block}.history-row small{font-size:10px;color:#869075;display:block;margin-top:5px}
.history-outcome{font:24px var(--serif);width:34px;height:38px;display:grid;place-items:center;border:1px solid currentColor;transform:rotate(-5deg)}.history-outcome.win{color:#8d583b}.history-outcome.loss{color:#778277}.history-arrow{margin-left:auto;font-size:20px;color:#959b83}
.history-empty{text-align:center;padding:48px 15px}.history-empty b{font:26px var(--serif);letter-spacing:5px;color:#829074}.history-empty p,.history-footnote,.history-no-battles{font-size:11px;color:#88917d;line-height:1.8}.history-footnote{margin:12px 0 0}.history-no-battles{padding:12px}
.history-back{display:block;font-size:11px;color:#6e815e;margin:0 0 23px;padding:0}.history-stat-grid{display:grid;grid-template-columns:repeat(4,1fr);border:1px solid #d1d9c4;border-radius:5px;background:#e6eadc;padding:16px 5px;margin:16px 0}
.history-stat-grid div{text-align:center}.history-stat-grid b{display:block;font:23px Georgia,serif;color:#536847}.history-stat-grid span{display:block;font-size:10px;margin-top:5px;color:#839074}
.history-subtitle{font-size:13px;margin:21px 0 12px;letter-spacing:1px}
.history-loadout{display:flex;flex-wrap:wrap;gap:7px}.history-loadout>span{width:46px;height:58px;background:#dce2cf;border:1px solid var(--rarity);border-radius:4px;text-align:center}.history-loadout svg{display:block;width:38px;height:38px;margin:1px auto}.history-loadout small{display:block;font-size:8px;color:#7c826e}
.full-combat-log{list-style:none;padding:0;max-height:43dvh;overflow-y:auto;overscroll-behavior:contain;margin:0;border-top:1px solid #d4dbc7}
.full-combat-log li{font-size:11px;padding:10px 6px;border-bottom:1px solid #dfe3d4;line-height:1.7}.full-combat-log li>span{color:#8a987b;font-size:9px;margin-right:12px}.full-combat-log li b{font-weight:500}.full-combat-log li small{display:block;text-align:right;font-size:9px;color:#929b83}.full-combat-log .event-crit strong{color:#a85436}.full-combat-log .event-heal strong{color:#648749}
.result-history{display:block;margin:15px auto 20px;color:#78876b;font-size:12px;text-decoration:underline;text-underline-offset:4px}
@keyframes actor-breath{0%,100%{transform:translateY(0) rotate(-.2deg)}50%{transform:translateY(-3px) rotate(.2deg)}}
@keyframes flag-wave{from{transform:skewY(-3deg) scaleX(.94)}to{transform:skewY(3deg) scaleX(1)}}
@keyframes mist-drift{from{translate:-3% 0}to{translate:3% -2%}}
@keyframes ember-rise{0%{translate:0 0;opacity:0}15%{opacity:.6}85%{opacity:.4}100%{translate:40px -300px;opacity:0}}
@media(max-width:780px){.game-shell.battle-shell{width:min(520px,100vw)}.battle-stage{height:350px}.battle-stage .fighter{width:62%;left:-5%;bottom:22px}.battle-stage .fighter.enemy{left:auto;right:-5%}.stage-caption{font-size:9px}.stage-banner{top:20%}.banner-left{left:3%}.banner-right{right:3%}}
@media(max-width:420px){.hero-choice .portrait{width:158px;height:160px;margin-left:calc(50% - 79px)}.hero-name{font-size:22px}.lobby-links{gap:15px}.battle-stage{height:325px}.battle-stage .fighter{width:64%;left:-5%;bottom:27px}.battle-stage .fighter.enemy{right:-5%}.battle-stage .fighter-name b{font-size:19px}.battle-stage .fighter-name small{font-size:8px}.battle-heading p{font-size:10px}.battle-shell .combat-healths{margin-left:18px;margin-right:18px;gap:15px}.battle-info{margin-left:18px;margin-right:18px;font-size:10px}.battle-shell .battle-log{margin-left:18px;margin-right:18px}.history-stat-grid b{font-size:20px}}
@media(prefers-reduced-motion:reduce){.actor-body,.stage-mist,.stage-banner span,.stage-embers i{animation:none}.stage-embers{display:none}}

.arrow-projectile{position:absolute;z-index:10;width:42px;height:3px;background:linear-gradient(90deg,#685030,#eeddb0);box-shadow:0 0 4px #e8d093;pointer-events:none;transform-origin:center}
.arrow-projectile:after{content:'';position:absolute;right:-5px;top:-3px;border-left:8px solid #e9e6d4;border-top:4px solid transparent;border-bottom:4px solid transparent}
.scene-1 .enemy .character-soldier .character-sprite{filter:hue-rotate(330deg) saturate(.6) drop-shadow(0 3px 4px #201c1555)}
.scene-2 .enemy .character-soldier .character-sprite{filter:hue-rotate(280deg) saturate(.55) drop-shadow(0 3px 4px #201c1555)}
.scene-5 .enemy .character-soldier .character-sprite{filter:hue-rotate(325deg) saturate(1.15) drop-shadow(0 3px 4px #201c1555)}

.battle-stage .character{overflow:visible}

.classic-version-banner{display:flex;align-items:center;justify-content:space-between;gap:12px;background:#243e32;color:#f6e4b6;border:1px solid #b79851;padding:12px 14px;margin-bottom:12px;border-radius:8px}.classic-version-banner b{font-size:14px}.classic-version-banner small{display:block;font-size:11px;color:#c9d4c0;margin-top:4px}.classic-version-banner button{font-weight:700;font-size:13px;background:#e4ba60;color:#283c2d;padding:10px;border-radius:5px;white-space:nowrap}
