:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;color:#e6dcc6;--panel:#1d1813;--panel-edge:#3d3226;--gold:#c9a24a;--gold-dim:#8c7135;--muted:#a89c84;--blood:#9e2b25;--life:#a8322a;--city:#c9a24a;--outskirts:#7f9a5a;--frontier:#c47a2c;--wild:#a3302a;background:#120f0c;font-family:system-ui,sans-serif}h1,h2,h3{color:#eadfc4;letter-spacing:.02em;font-family:Georgia,Times New Roman,serif}body{min-height:100dvh;margin:0}main{max-width:640px;margin:0 auto;padding:24px 16px}a{color:var(--gold)}form{gap:16px;display:grid}label{gap:6px;display:grid}label.check{grid-template-columns:auto 1fr;align-items:start}input[type=email],input[type=password],input[type=text],select{font:inherit;color:inherit;background:#251f18;border:1px solid #5a4d3b;border-radius:8px;padding:12px}button{font:inherit;color:#1b1712;background:#e2b65a;border:none;border-radius:8px;width:100%;padding:12px 16px;font-weight:600}button:disabled{opacity:.6}small,.muted{color:#b3a78f}[role=alert]{color:#f08a6b}.brand{letter-spacing:.08em;text-transform:uppercase;color:#e2b65a;font-weight:700}.separator{text-align:center;color:#b3a78f}fieldset{border:1px solid #4a4032;border-radius:.5rem;padding:.75rem}.stat-rows{gap:.5rem;padding:0;list-style:none;display:grid}.stat-rows li{grid-template-columns:1fr 2.75rem 3rem 2.75rem;align-items:center;gap:.5rem;display:grid}.stat-rows span{flex-direction:column;display:flex}.stat-rows button{width:2.75rem;padding:.5rem 0}.stat-rows output{text-align:center;font-variant-numeric:tabular-nums;font-weight:600}.skill-rows{gap:.5rem;padding:0;list-style:none;display:grid}.skill-rows li{grid-template-columns:1fr auto 7.5rem;align-items:center;gap:.5rem;display:grid}.skill-rows output{font-variant-numeric:tabular-nums;font-weight:600}.choice{align-items:center;gap:.5rem;display:flex}.item-rows{gap:.5rem;padding:0;list-style:none;display:grid}.item-rows li{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.item-rows li>span:first-child{flex:12rem}.item-actions{gap:.25rem;margin-left:auto;display:flex}.durability-low{color:#d8c27a}.durability-broken{color:#e0796f;font-weight:600}.repair{flex-basis:100%}.sprite{pointer-events:none;flex:none;position:relative}.sprite-stage{transform-origin:0 0;position:absolute;top:0;left:0}.sprite-layer{background-repeat:no-repeat;background-position-x:var(--sprite-from);image-rendering:pixelated;position:absolute}@keyframes sprite-cycle{to{background-position-x:var(--sprite-shift)}}.silhouette{fill:#3a3128}.silhouette text{fill:#8c7d63;font-size:14px}.gallery-row{flex-wrap:wrap;align-items:end;gap:12px;display:flex}.gallery-row h2{width:100%}main.wide{max-width:1200px}.shell{flex-direction:column;min-height:100dvh;display:flex}.top-bar{z-index:2;border-bottom:1px solid var(--panel-edge);background:linear-gradient(#1b1611,#120f0c);justify-content:space-between;align-items:center;gap:8px;padding:4px 16px;display:flex;position:sticky;top:0}.top-hero{color:inherit;align-items:center;gap:8px;min-width:0;text-decoration:none;display:flex}.top-hero>span{gap:2px;min-width:0;display:grid}.top-portrait{border:1px solid var(--gold-dim);background:#0b0907;border-radius:6px;width:48px;height:40px;overflow:hidden}.top-portrait .sprite{margin:-6px 0 0 -8px}.bell{padding:8px;font-size:1.4rem;text-decoration:none;position:relative}.bell .count{background:var(--blood);color:#fff;text-align:center;border-radius:9px;min-width:18px;padding:0 4px;font-size:.75rem;position:absolute;top:0;right:0}main.screen{box-sizing:border-box;flex:1;width:100%;padding:16px 16px 88px}.tab-bar{z-index:2;border-top:1px solid var(--panel-edge);padding-bottom:env(safe-area-inset-bottom);background:#17130f;grid-template-columns:repeat(4,1fr);display:grid;position:fixed;bottom:0;left:0;right:0}.tab-bar a{text-align:center;color:var(--muted);padding:14px 4px;font-size:.9rem;text-decoration:none}.tab-bar a.active{color:var(--gold);box-shadow:inset 0 2px 0 var(--gold)}section,.report{margin-bottom:16px}.report,.region-sheet,.current-action,.risk,.hero-card{background:var(--panel);border:1px solid var(--panel-edge);border-radius:10px;padding:12px}.report header{margin-bottom:4px}button.secondary,a.button.secondary{color:var(--gold);border:1px solid var(--gold-dim);background:0 0}button.small{width:auto;padding:6px 10px;font-size:.85rem}a.button{box-sizing:border-box;text-align:center;background:var(--gold);color:#1b1712;border-radius:8px;padding:12px 16px;font-weight:600;text-decoration:none;display:block}.button-grid,.button-row{gap:8px;display:grid}.button-grid{grid-template-columns:repeat(auto-fit,minmax(140px,1fr))}.button-row{grid-template-columns:1fr 1fr}.start{gap:8px;display:grid}.risk-wild{border-color:var(--wild);background:#2a1311}.badge{border:1px solid var(--gold-dim);color:var(--gold);vertical-align:middle;border-radius:999px;margin-left:8px;padding:2px 8px;font-family:system-ui,sans-serif;font-size:.75rem;display:inline-block}.badge-wild{border-color:var(--wild);color:#e0796f}.badge-frontier{border-color:var(--frontier);color:#e3a25e}.badge-outskirts{border-color:var(--outskirts);color:#a9c57f}.banner{border:1px solid var(--blood);color:#f0c9a0;background:#2a1311;border-radius:8px;margin-bottom:12px;padding:10px 12px;text-decoration:none;display:block}.life{align-items:center;gap:6px;min-width:0;display:flex}meter.life-bar{width:100%;min-width:48px;max-width:120px;height:10px}meter.life-bar::-webkit-meter-bar{background:#2b1d19;border:1px solid #4a2a24;border-radius:5px}meter.life-bar::-webkit-meter-optimum-value{background:var(--life);border-radius:5px}meter.life-bar::-webkit-meter-suboptimum-value{background:var(--life);border-radius:5px}meter.life-bar::-webkit-meter-even-less-good-value{background:var(--life);border-radius:5px}meter.life-bar::-moz-meter-bar{background:var(--life)}.life-numbers{color:var(--muted);font-variant-numeric:tabular-nums;font-size:.8rem}progress{width:100%;accent-color:var(--gold)}.hero-card{flex-wrap:wrap;align-items:center;gap:16px;display:flex}.hero-card>div:not(.scene){flex:140px;min-width:0}.hero-card h1{margin:0 0 4px}.hero-card p{margin:4px 0}.hero-card-large{flex-direction:column}.scene{background:radial-gradient(at 50% 85%,#2c241b 0%,#0f0c09 70%);border-radius:8px;align-items:flex-end;gap:4px;padding:4px;display:flex}.hero-card>.scene{flex:none;max-width:100%}.scene-companions{align-items:flex-end;display:flex}.queue{padding-left:20px}.queue li{justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px;display:flex}.loot{margin:4px 0;padding-left:20px}.outcome{font-weight:600}.outcome-cleared,.outcome-a{color:#d8c27a}.outcome-defeated,.outcome-b,.outcome-bothDown{color:#e0796f}.rank{border:1px solid var(--panel-edge);color:var(--muted);border-radius:4px;margin-left:6px;padding:1px 6px;font-size:.75rem;display:inline-block}.rank-elite{color:#a7b3ea;border-color:#6c7bbd}.rank-legendary,.rank-champion{border-color:var(--gold);color:var(--gold)}.fight-log summary{cursor:pointer;color:var(--gold)}.fight-log ol{padding-left:22px;font-size:.9rem}.fight-log li span{display:block}.map-frame{border:1px solid var(--panel-edge);background:radial-gradient(circle at 30% 30%,#2a2219 0%,#0000 60%),radial-gradient(circle at 75% 70%,#241c14 0%,#0000 55%),#15110d;border-radius:10px;margin-bottom:12px;overflow:hidden}.world-graph{width:100%;height:auto;display:block}.route line{stroke:#5b4b37;stroke-width:.6px;stroke-dasharray:1.4 1}.route-here line{stroke:var(--gold-dim);stroke-width:.8px}.route-toll line{stroke-dasharray:none}.route text{fill:var(--muted);text-anchor:middle;paint-order:stroke;stroke:#0b0907;stroke-width:.8px;font-size:2.6px}.region{cursor:pointer;outline:none}.region circle{stroke:#0b0907;stroke-width:.6px}.region text{fill:#e6dcc6;text-anchor:middle;paint-order:stroke;stroke:#0b0907;stroke-width:.8px;font-size:3px}.region-city circle{fill:var(--city)}.region-outskirts circle{fill:var(--outskirts)}.region-frontier circle{fill:var(--frontier)}.region-wild circle{fill:var(--wild)}.region-adjacent circle{stroke:#eadfc4;stroke-width:.5px}.region-here circle{stroke:#fff4cf;stroke-width:1.1px}.region-selected text,.region:focus-visible text{fill:var(--gold);font-weight:700}.traveller{fill:#fff4cf;stroke:#0b0907;stroke-width:.5px}.region-sheet h2{margin-top:0}.region-sheet .start{margin-bottom:8px}.monster-strip,.champion-list,.pet-list,.tactic-list{padding:0;list-style:none}.monster-strip{flex-wrap:wrap;gap:8px;display:flex}.sprite-box{place-items:end center;width:64px;height:64px;display:grid;overflow:hidden}.monster-strip li{text-align:center;justify-items:center;width:76px;font-size:.75rem;display:grid}.champion-list li{align-items:flex-start;gap:8px;margin-bottom:8px;display:flex}.champion-list p{margin:2px 0}.standoff{grid-template-columns:1fr 1fr;gap:8px;margin-bottom:12px;display:grid}.fighter-group{flex-direction:column;gap:4px;min-width:0;display:flex}.pet-stunned{opacity:.55}.fighter{border:1px solid var(--panel-edge);background:radial-gradient(at 50% 80%,#2c241b 0%,#0f0c09 75%);border-radius:10px;align-content:end;justify-items:center;gap:6px;margin:0;padding:8px;display:grid;overflow:hidden}.fighter figcaption{text-align:center;justify-items:center;gap:4px;display:grid}.fighter-elite{border-color:#6c7bbd}.fighter-legendary{border-color:var(--gold)}.fighter .sprite,.fighter .silhouette{max-width:100%}.notification-list{padding:0;list-style:none}.notification-list li{border-bottom:1px solid var(--panel-edge);padding:8px 0}.notification-list li.unread p:first-child{font-weight:600}.credits{overflow-wrap:anywhere;padding:0;font-size:.85rem;list-style:none}.credits li{margin-bottom:10px}.fighter .life{flex-direction:column;gap:2px}.fight-scene{gap:8px;display:grid}.fight-scene .fighter{position:relative}.fighter-bars{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:2px 6px;width:100%;display:grid}.fighter-bars meter.life-bar{min-width:0;max-width:none}.fighter-bars .life-numbers{font-size:.7rem}.fight-scene .fighter{min-width:0;max-height:260px}meter.mana-bar{width:100%;height:6px}meter.mana-bar::-webkit-meter-bar{background:#161b2b;border:1px solid #2a3350;border-radius:3px}meter.mana-bar::-webkit-meter-optimum-value{background:#4f6fc4}meter.mana-bar::-webkit-meter-suboptimum-value{background:#4f6fc4}meter.mana-bar::-webkit-meter-even-less-good-value{background:#4f6fc4}meter.mana-bar::-moz-meter-bar{background:#4f6fc4}.lunge-right .sprite{animation:.45s ease-out lunge-right}.lunge-left .sprite,.lunge-left .silhouette{animation:.45s ease-out lunge-left}@keyframes lunge-right{40%{transform:translate(24px)}}@keyframes lunge-left{40%{transform:translate(-24px)}}.struck .sprite,.struck .silhouette{animation:.45s steps(2,end) .15s struck}@keyframes struck{50%{filter:brightness(2.2)saturate(.4);opacity:.7}}.fallen .sprite,.fallen .silhouette{opacity:.35;filter:grayscale();transition:opacity .4s}.beat{z-index:1;text-shadow:0 2px #000;pointer-events:none;font-size:1.3rem;font-weight:800;animation:.7s ease-out forwards beat-rise;position:absolute;top:12px;left:50%;transform:translate(-50%)}.beat-hit{color:#ff8a6b}.beat-heal{color:#8fe08a}.beat-miss{color:var(--muted);font-size:1rem}@keyframes beat-rise{0%{opacity:0;transform:translate(-50%,8px)}20%{opacity:1}to{opacity:0;transform:translate(-50%,-16px)}}.fight-ticker{min-height:4.5em;color:var(--muted);background:var(--panel);border:1px solid var(--panel-edge);border-radius:8px;margin:0;padding:8px 12px;font-size:.85rem;list-style:none}.fight-ticker li:last-child{color:#e6dcc6}.fight-ticker li span{display:block}.move-choices{gap:8px;display:grid}.move-choices h2{margin:4px 0}.move-choices button{gap:2px;display:grid}.move-facts{font-size:.75rem;font-weight:400}@media (prefers-reduced-motion:reduce){.lunge-right .sprite,.lunge-left .sprite,.struck .sprite,.beat{animation:none}}.fight-scene .fighter figcaption{width:100%}.fight-scene .fighter{grid-template-columns:minmax(0,1fr)}.fight-outcome{text-align:center;border:1px solid var(--panel-edge);background:var(--panel);border-radius:10px;padding:16px 12px;animation:.5s ease-out outcome-in;position:relative}.fight-outcome-title{letter-spacing:.04em;text-transform:uppercase;margin:0 0 4px;font-family:Georgia,Times New Roman,serif;font-size:2.4rem;font-weight:700}.fight-outcome-win{border-color:var(--gold);box-shadow:0 0 24px #c9a24a59}.fight-outcome-win .fight-outcome-title{color:#f0cf72;text-shadow:0 0 16px #f0cf7299}.fight-outcome-loss{border-color:var(--blood);box-shadow:0 0 24px #9e2b2573}.fight-outcome-loss .fight-outcome-title{color:#f07a6b;text-shadow:0 0 16px #f0503c99}.fight-outcome .loot{text-align:left;display:inline-block}@keyframes outcome-in{0%{opacity:0;transform:scale(.9)}}.screen-glow{z-index:5;pointer-events:none;opacity:0;animation:1.1s ease-out screen-glow;position:fixed;inset:0}.screen-glow-win{background:radial-gradient(circle at 50% 40%,#f0cf728c,#0000 70%)}.screen-glow-loss{background:radial-gradient(circle at 50% 40%,#c81e148c,#0000 70%)}.screen-glow-draw{background:radial-gradient(circle at 50% 40%,#c8c8c84d,#0000 70%)}@keyframes screen-glow{20%{opacity:1}to{opacity:0}}.skill-changes{margin:8px 0 0;padding:0;font-weight:600;list-style:none}.skill-changes .up,.skill-up{color:#8fe08a}.skill-changes .down{color:var(--muted)}.beat-skill{color:#8fe08a;white-space:nowrap;font-size:.85rem;top:auto;bottom:64px}@media (prefers-reduced-motion:reduce){.screen-glow,.fight-outcome{animation:none}}.pet-row{align-items:flex-start;gap:8px;margin-bottom:10px;display:flex}.pet-row .sprite-box{flex:none;width:88px;height:80px}.pet-training{gap:4px;margin:4px 0;padding:0;list-style:none;display:grid}.pet-training li{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;display:flex}.recipes,.offers{gap:12px;padding:0;list-style:none;display:grid}.recipe-form{gap:8px;display:grid}.recipe-form fieldset label{align-items:center;gap:8px;display:flex}.recipe-form input[type=number],.offer input[type=number]{width:6rem}.offer{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.market-tabs,.market-filters{flex-wrap:wrap;gap:8px;margin-bottom:12px;display:flex}.market-list{gap:12px;padding:0;list-style:none;display:grid}.market-listing p{margin:0 0 4px}.market-listing input[type=number]{width:6rem}.market-tabs button{flex:1;width:auto}.market-form{gap:8px;display:grid}section.market-form label{gap:4px;display:grid}.market-form input,.market-listing input{font:inherit;padding:6px 8px}.trade>summary{cursor:pointer;padding:8px 0;font-weight:600}.tactic-list{gap:12px;display:grid}.tactic-form{grid-template-columns:repeat(auto-fit,minmax(14rem,1fr));gap:12px;margin-bottom:8px;display:grid}.arena-list,.arena-fights,.arena-titles,.arena-standings{gap:12px;padding:0;list-style:none;display:grid}.arena-opponent{grid-template-columns:auto 1fr auto;align-items:center;gap:12px;display:grid}.arena-opponent button{width:auto}.arena-standings li.mine{color:#e2b65a;font-weight:700}button.link{color:#e2b65a;background:0 0;width:auto;padding:0;font-weight:400;text-decoration:underline}.admin-form{border:1px solid var(--gold-dim);border-radius:8px;gap:6px;margin:12px 0;padding:12px;display:grid}.admin li{overflow-wrap:anywhere}
