:root{
 --spruce-9:#1D2B27; --spruce-8:#22332F; --spruce-7:#283B36; --spruce-6:#2E443E; --spruce-5:#3A554E;
 --wall:#3E5A52; --wall-hi:#48685F;
 --floor:#D9B98C; --floor-lo:#C9A97C;
 --cream:#F6EBD7; --cream-dim:#CFC2A9; --ink:#2A2622; --ink-soft:#5C5348;
 --salmon:#F08375; --salmon-hi:#F79C8F; --salmon-lo:#D96A5C;
 --marigold:#F2B23E; --leaf:#7CB668; --tomato:#D95F5F;
 --disp:800 1em/1.1 ui-rounded,"SF Pro Rounded","Arial Rounded MT Bold","Hiragino Maru Gothic ProN","Trebuchet MS",system-ui,sans-serif;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0;height:100%}
body{background:var(--spruce-9);color:var(--cream);font:400 15px/1.45 system-ui,"Segoe UI",sans-serif}
button{font:inherit;cursor:pointer;border:0;background:none;color:inherit}
button:focus-visible{outline:3px solid var(--marigold);outline-offset:2px;border-radius:10px}
.btn{display:inline-flex;align-items:center;gap:6px;background:var(--spruce-6);border:1px solid var(--spruce-5);color:var(--cream);border-radius:12px;padding:7px 13px;font-weight:700;font-size:13.5px;transition:transform .12s,background .12s}
.btn:hover{background:var(--spruce-5);transform:translateY(-1px)}
.btn:active{transform:translateY(0)}
.btn.primary{background:var(--salmon);border-color:var(--salmon-lo);color:#3A211C}
.btn.primary:hover{background:var(--salmon-hi)}
.btn.on{background:var(--marigold);border-color:#C98F1B;color:#4A3608}
.btn:disabled{opacity:.55;cursor:default;transform:none}
.chip{display:inline-flex;align-items:center;gap:5px;background:var(--spruce-7);border:1px solid var(--spruce-5);border-radius:99px;padding:3px 11px;font-size:13px;font-weight:600;font-variant-numeric:tabular-nums}
.tag{background:var(--spruce-6);color:var(--cream);border-radius:99px;padding:2.5px 10px;font-size:11.5px;font-weight:700}
.tag.rar{color:#1D2B27}
#toasts{position:fixed;left:14px;bottom:16px;z-index:5000;display:flex;flex-direction:column;gap:7px;pointer-events:none}
.toast{background:var(--cream);color:var(--ink);border-radius:12px;padding:8px 13px;font-size:13px;font-weight:700;box-shadow:0 8px 20px rgba(0,0,0,.35);animation:tin .25s cubic-bezier(.4,1.4,.5,1),tout .3s ease-in forwards var(--life,3.4s);max-width:320px}
@keyframes tin{from{opacity:0;transform:translateY(12px)}}
@keyframes tout{to{opacity:0;transform:translateY(8px)}}
.track{height:9px;background:#E4D6BC;border-radius:99px;overflow:hidden}
.fill{height:100%;border-radius:99px;transition:width .5s ease}
