:root{--ink:#f6efdc;--dim:#d6c79f;--faint:#9c8d68;--gold:#e2aa42;--gl:#ffe8a0;--gd:#925c1e;--acc:#e2b04a;--up:#7bd389;--down:#e46a5b;--sans:"Alegreya Sans",system-ui,sans-serif;--mono:"Geist Mono",monospace;--px:"Pixelify Sans",var(--mono)}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;overflow:hidden;background:#13100d;color:var(--ink);font:15px/1.4 var(--sans)}
canvas#cv{position:fixed;inset:0;width:100vw;height:100vh;display:block;cursor:url(/art/ui/cursor.png) 2 2,pointer;image-rendering:pixelated}
.hidden{display:none!important}
a{color:inherit;text-decoration:none}
button{font:inherit;cursor:pointer}
img{image-rendering:pixelated}
/* gold-framed pieces: 9-slice pixel frames drawn by tools/frames.py */
.fr{border:32px solid transparent;border-image:url(/art/ui/frame.png) 16 fill / 32px / 0 stretch;image-rendering:pixelated}
.fr-s{border:12px solid transparent;border-image:url(/art/ui/frame.png) 16 fill / 16px / 0 stretch;image-rendering:pixelated}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:38px;padding:0 14px;border:6px solid transparent;border-image:url(/art/ui/btn.png) 4 fill / 12px / 0 stretch;image-rendering:pixelated;background:none;color:var(--ink);font:600 15px var(--px);text-shadow:0 2px 0 rgba(0,0,0,.6)}
.btn:hover{filter:brightness(1.18)}
.btn:active{transform:translateY(1px)}
.btn.pri{border-image-source:url(/art/ui/btn_gold.png);color:#3a2208;text-shadow:0 1px 0 rgba(255,240,200,.6)}
.btn.big{height:52px;font-size:19px;width:100%}
.btn.ic{width:42px;padding:0;font-size:18px}
.btn.ic img{width:24px;height:24px}
.btn:disabled{opacity:.45;filter:grayscale(.6)}
.top{position:fixed;left:8px;right:8px;top:6px;display:flex;align-items:center;gap:18px;height:84px;padding:0 6px;z-index:5;border:32px solid transparent;border-image:url(/art/ui/frame.png) 16 fill / 32px / 0 stretch;image-rendering:pixelated}
.brand{display:flex;align-items:center;gap:10px;font:700 24px var(--px);margin-right:auto;color:var(--gl);text-shadow:0 2px 0 #4a2a08,0 0 12px rgba(255,200,90,.35);letter-spacing:.03em}.brand img{height:30px}
.stat{display:flex;align-items:center;gap:8px;font:13px var(--px);color:var(--dim)}.stat b{color:var(--ink);font:600 16px var(--px)}
.stat img{width:26px;height:26px}
.hpbar{position:relative;width:170px;height:22px;border:5px solid transparent;border-image:url(/art/ui/slot.png) 4 fill / 10px / 0 stretch;image-rendering:pixelated}
.hpbar i{position:absolute;left:0;top:0;bottom:0;background:linear-gradient(#ff8a70 0 35%,#d0412f 35% 100%);box-shadow:inset 0 -2px 0 rgba(0,0,0,.3);transition:width .3s}.hpbar b{position:absolute;inset:0;display:grid;place-items:center;font:600 12px var(--px);text-shadow:0 1px 0 #000,1px 0 0 #000}
#bossNext{color:#d8c4ff}
#bossBar{position:fixed;left:50%;top:96px;transform:translateX(-50%);display:flex;gap:12px;align-items:center;width:min(520px,80vw);z-index:5;border:32px solid transparent;border-image:url(/art/ui/frame.png) 16 fill / 32px / 0 stretch;image-rendering:pixelated;padding:0 4px}
#bossBar img{width:48px;height:48px;border:4px solid transparent;border-image:url(/art/ui/slot.png) 4 fill / 8px / 0 stretch}#bossBar>div{flex:1}#bossBar b{font:700 17px var(--px);color:#e8d8ff;text-shadow:0 2px 0 #2a0f40}
.bb{height:16px;margin:4px 0;border:4px solid transparent;border-image:url(/art/ui/slot.png) 4 fill / 8px / 0 stretch}.bb i{display:block;height:100%;background:linear-gradient(#c9a6ff 0 35%,#7a4fd6 35% 100%);transition:width .3s}
#bossBar small{font:12px var(--px);color:#cbb7ee}
.side{position:fixed;right:8px;top:100px;width:330px;z-index:4;border:32px solid transparent;border-image:url(/art/ui/frame.png) 16 fill / 32px / 0 stretch;image-rendering:pixelated;padding:0 2px}
.tabs{display:flex;gap:4px;margin:-6px 0 10px}.tabs button{flex:1;height:40px;display:flex;align-items:center;justify-content:center;gap:5px;border:6px solid transparent;border-image:url(/art/ui/btn.png) 4 fill / 12px / 0 stretch;image-rendering:pixelated;background:none;color:var(--dim);font:600 14px var(--px)}.tabs button img{width:22px;height:22px}
.tabs button.on{border-image-source:url(/art/ui/btn_gold.png);color:#3a2208}
.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:4px}
.slot{position:relative;aspect-ratio:1;display:grid;place-items:center;cursor:pointer;border:8px solid transparent;border-image:url(/art/ui/slot.png) 4 fill / 12px / 0 stretch;image-rendering:pixelated}
.slot:hover{filter:brightness(1.35)}
.slot img{width:40px;height:40px}
.slot small{position:absolute;right:-4px;bottom:-6px;font:600 13px var(--px);color:var(--ink);text-shadow:0 1px 0 #000,1px 0 0 #000,-1px 0 0 #000,0 -1px 0 #000}
.tip{font:12px var(--px);color:var(--faint);margin-top:8px}
.sk{display:grid;grid-template-columns:36px 1fr auto;gap:2px 10px;padding:7px 2px;border-bottom:2px solid rgba(226,170,66,.18);align-items:center}
.sk img{width:32px;height:32px;grid-row:span 3}
.sk b{font:600 15px var(--px)}.sk span{font:700 18px var(--px);color:var(--gl);text-shadow:0 2px 0 #4a2a08}.sk .bar{grid-column:2/-1;height:8px;background:#120c07;border:1px solid #000;overflow:hidden}.sk .bar i{display:block;height:100%;background:linear-gradient(#ffe8a0 0 40%,#d29a32 40%)}
.sk small{grid-column:2/-1;color:var(--faint);font:11.5px var(--mono)}
.task{padding:4px 6px;margin-bottom:8px;border:10px solid transparent;border-image:url(/art/ui/slot.png) 4 fill / 12px / 0 stretch;image-rendering:pixelated}.task b{display:block;font:600 14px var(--px)}.task .bar{height:8px;background:#120c07;border:1px solid #000;margin:8px 0;overflow:hidden}.task .bar i{display:block;height:100%;background:linear-gradient(#b8f0a0 0 40%,#4fa04a 40%)}
.task .row{display:flex;justify-content:space-between;align-items:center;font:12px var(--mono);color:var(--dim)}
.minibox{position:fixed;right:8px;bottom:8px;z-index:4;border:32px solid transparent;border-image:url(/art/ui/frame.png) 16 fill / 32px / 0 stretch;image-rendering:pixelated;padding:0}
#mini{display:block;width:180px;height:180px;image-rendering:pixelated}
.minibox span{position:absolute;left:50%;top:-26px;transform:translateX(-50%);font:600 12px var(--px);color:var(--gl);letter-spacing:.12em;text-shadow:0 2px 0 #000}
.chat{position:fixed;left:8px;bottom:8px;width:min(480px,56vw);z-index:4;border:32px solid transparent;border-image:url(/art/ui/frame.png) 16 fill / 32px / 0 stretch;image-rendering:pixelated;padding:0 2px}
#log{height:130px;overflow:auto;font-size:14.5px;padding:0 4px;scrollbar-width:thin;scrollbar-color:#925c1e transparent}
#log div{margin:2px 0;text-shadow:0 1px 0 #000}#log b{color:var(--gl)}#log .sys{color:var(--faint)}#log .ev{color:#cfe8a0}#log .boss{color:#d8c4ff}
.say{display:flex;gap:6px;margin-top:6px}
.chat input{flex:1;height:38px;border:8px solid transparent;border-image:url(/art/ui/slot.png) 4 fill / 12px / 0 stretch;image-rendering:pixelated;background:none;color:var(--ink);padding:0 4px;font:inherit;outline:none}
#emos{position:absolute;bottom:56px;right:-8px;display:grid;grid-template-columns:repeat(6,38px);gap:4px;border:24px solid transparent;border-image:url(/art/ui/frame.png) 16 fill / 24px / 0 stretch;image-rendering:pixelated}
#emos button{width:38px;height:38px;display:grid;place-items:center;border:6px solid transparent;border-image:url(/art/ui/slot.png) 4 fill / 10px / 0 stretch;background:none}#emos button:hover{filter:brightness(1.4)}#emos img{width:24px}
#hover{position:fixed;pointer-events:none;padding:2px 6px;font:600 14px var(--px);display:none;white-space:nowrap;z-index:9;border:10px solid transparent;border-image:url(/art/ui/frame.png) 16 fill / 12px / 0 stretch;image-rendering:pixelated;color:var(--gl)}
#talk{position:fixed;left:50%;bottom:20px;transform:translateX(-50%);width:min(660px,92vw);display:flex;gap:16px;z-index:8;color:#3a2614;border:32px solid transparent;border-image:url(/art/ui/parchment.png) 16 fill / 32px / 0 stretch;image-rendering:pixelated}
#talk img{width:84px;height:84px;border:8px solid transparent;border-image:url(/art/ui/frame.png) 16 fill / 12px / 0 stretch;background:#d9c49a}
#talk>div{flex:1}#talk b{font:700 19px var(--px);color:#7a3e10}#talk p{margin:4px 0 10px;font-size:16.5px;line-height:1.35}
#talk .row{display:flex;gap:8px;flex-wrap:wrap}
.modal{position:fixed;inset:0;background:radial-gradient(ellipse at center,rgba(10,6,2,.45),rgba(10,6,2,.8));display:none;place-items:center;z-index:20}.modal.open{display:grid}
.box{position:relative;width:min(460px,92vw);text-align:left;border:32px solid transparent;border-image:url(/art/ui/frame.png) 16 fill / 32px / 0 stretch;image-rendering:pixelated;padding:6px 8px}
.box.wide{width:min(740px,94vw);max-height:84vh;overflow:auto;scrollbar-width:thin;scrollbar-color:#925c1e transparent}
.box h2{font:700 30px var(--px);margin:4px 0 8px;color:var(--gl);text-shadow:0 3px 0 #4a2a08,0 0 14px rgba(255,200,90,.3);letter-spacing:.02em}.box p{color:var(--dim)}.box .small{font-size:13px;color:var(--down);margin-top:10px}
.box.gate{width:min(560px,94vw);text-align:center}.box.gate .fld{text-align:left}
.fld{margin:14px 0}.fld label{display:block;font:600 13px var(--px);color:var(--faint);margin-bottom:6px}.fld label span{color:var(--gl)}.fld input{width:100%;height:46px;border:8px solid transparent;border-image:url(/art/ui/slot.png) 4 fill / 12px / 0 stretch;image-rendering:pixelated;background:none;color:var(--ink);padding:0 6px;font:inherit;font-size:17px;outline:none}
#skins{display:grid;grid-template-columns:repeat(8,1fr);gap:4px}
#skins button{aspect-ratio:1;border:6px solid transparent;border-image:url(/art/ui/slot.png) 4 fill / 10px / 0 stretch;image-rendering:pixelated;background:none;padding:0}#skins button.on{border-image-source:url(/art/ui/btn_gold.png)}#skins img{width:100%;display:block}
.x{position:absolute;right:-14px;top:-14px;width:36px;height:36px;border:6px solid transparent;border-image:url(/art/ui/btn.png) 4 fill / 10px / 0 stretch;background:none;color:var(--gl);font:700 18px var(--px)}
.rows{display:grid;gap:4px;margin-top:10px}
.r{display:grid;grid-template-columns:44px 1fr auto auto;gap:10px;align-items:center;padding:2px 4px;border:10px solid transparent;border-image:url(/art/ui/slot.png) 4 fill / 12px / 0 stretch;image-rendering:pixelated}
.r .ic img{width:40px;height:40px;display:block}.r small{display:block;color:var(--faint);font:12px var(--mono)}.r.no{opacity:.45}
h3.sub{font:700 17px var(--px);color:var(--gl);margin-top:16px;text-shadow:0 2px 0 #3a2208}
.wbtn{display:flex;align-items:center;gap:12px;width:100%;padding:8px 10px;margin-bottom:6px;border:8px solid transparent;border-image:url(/art/ui/btn.png) 4 fill / 12px / 0 stretch;background:none;color:var(--ink);font:600 15px var(--px)}.wbtn img{width:24px;height:24px}
.mclose{position:absolute;top:-14px;right:-14px;width:34px;height:34px;border:6px solid transparent;border-image:url(/art/ui/btn.png) 4 fill / 10px / 0 stretch;background:none;color:var(--gl)}
.toast{position:fixed;left:50%;top:100px;transform:translateX(-50%);background:var(--acc);color:#231a06;padding:10px 16px;font:600 15px var(--px);opacity:0;transition:.25s;z-index:30;pointer-events:none}.toast.show{opacity:1}.toast.bad{background:var(--down);color:#fff}
@media (max-width:1000px){.side{width:250px}.stat span{display:none}.hpbar{width:100px}.chat{width:calc(100vw - 290px)}.minibox{display:none}#bossNext{display:none}}
