:root{color-scheme:dark;--bg:#121814;--panel:#1b241e;--line:#414b39;--muted:#b5bfab;--cream:#f0ebd9;--gold:#e6b877;--red:#eea18c;font:16px/1.45 system-ui,sans-serif}*{box-sizing:border-box}body{margin:0;background:radial-gradient(ellipse at 30% 0%,#29362b,var(--bg) 58%);background-color:var(--bg);color:var(--cream);min-height:100vh}button{font:inherit;color:inherit;cursor:pointer;border:1px solid var(--line);border-radius:5px;background:#263127;padding:.55rem .75rem;min-height:42px}button:hover:not(:disabled){background:#354234;border-color:var(--gold)}button:focus-visible,canvas:focus-visible{outline:3px solid #f4d695;outline-offset:3px}button:disabled{opacity:.54;cursor:default}button[aria-pressed=true]{border-color:var(--gold);background:#3d3c29}.primary{background:#e6b877;border-color:#e6b877;color:#261b0e;font-weight:800}.primary:hover:not(:disabled){background:#f7d293}.shell{max-width:1440px;margin:auto;padding:clamp(14px,2.6vw,40px)}.mast,.bar,.panel-head,.health-line,.map-meta,.orders{display:flex;align-items:center;justify-content:space-between;gap:10px}.mast{border-bottom:1px solid var(--line);padding-bottom:12px}.brand{font-family:Georgia,serif;letter-spacing:.21em;font-size:.9rem;font-weight:700}.brand-mark{display:inline-grid;place-items:center;width:27px;height:27px;margin-right:7px;border:1px solid #8a754e;color:var(--gold);transform:rotate(45deg)}.brand-mark span{transform:rotate(-45deg)}.label{font-size:.68rem;font-weight:750;letter-spacing:.16em;text-transform:uppercase;color:var(--gold)}.intro{display:flex;align-items:end;justify-content:space-between;gap:18px;padding:16px 0 18px}h1,h2,p{margin:0}h1,h2{font-family:Georgia,serif;font-weight:500}h1{font-size:clamp(2rem,5vw,3.75rem);line-height:1.02;margin:.18em 0}h2{font-size:1.35rem}.intro p,.muted,.order-help{color:var(--muted)}.intro p{font-size:.93rem;max-width:62ch}.intro-note{text-align:right;white-space:nowrap}.layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:14px;align-items:start}.battle,.panel{min-width:0;border:1px solid var(--line);border-radius:7px;background:var(--panel)}.bar{padding:8px 12px}.bar strong{font-variant-numeric:tabular-nums}.map{position:relative;background:#222e24}canvas{display:block;width:100%;height:auto;aspect-ratio:960/550;cursor:crosshair;touch-action:none;user-select:none;-webkit-user-select:none}canvas:focus-visible{outline-offset:-4px}.map-meta{padding:8px 12px;font-size:.76rem;color:var(--muted);flex-wrap:wrap}.map-meta strong{color:var(--cream)}.panel{padding:13px;display:grid;gap:12px}.panel-head{align-items:baseline}.health-line{font-size:.79rem}.meter{height:6px;background:#111813;border-radius:3px;overflow:hidden}.meter span{display:block;width:100%;height:100%;background:var(--color,var(--gold))}.regiments{display:grid;gap:6px}.regiment{display:grid;grid-template-columns:29px 1fr auto;align-items:center;gap:8px;width:100%;padding:6px 7px;text-align:left}.sigil{display:grid;place-items:center;width:27px;height:28px;background:#161e17;color:var(--color);border:1px solid var(--color);border-radius:4px;font:700 .75rem Georgia,serif}.regiment-name{font-weight:700;font-size:.8rem;display:block}.regiment-state,.regiment-men{font-size:.69rem;color:var(--muted);display:block}.regiment-state.bad{color:var(--red)}.regiment-men{font-variant-numeric:tabular-nums;text-align:right}.regiment .meter{height:4px;margin-top:4px}.commands{display:grid;grid-template-columns:1fr 1fr;gap:6px}.commands .wide{grid-column:1/-1}.commands button{font-size:.8rem;padding:.42rem .5rem}.order-help{font-size:.77rem;min-height:2.7em;margin-top:8px}.divider{height:1px;background:var(--line)}.log{list-style:none;padding:0;margin:0;min-height:3.6em;font-size:.77rem}.log li{margin:.2em 0;color:var(--muted)}.log li:first-child{color:var(--cream)}.report{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;padding:12px;background:#10160fc7}[hidden]{display:none!important}.report-card{max-width:400px;padding:clamp(12px,3vw,24px);border:1px solid #8c754e;border-radius:6px;background:#202a20;box-shadow:0 12px 40px #080c09b8}.report-card h2{font-size:clamp(1.4rem,4vw,2rem);margin:.18em 0}.report-card p{margin:.45em 0 .9em;font-size:.88rem}.coach{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;padding:10px 12px;background:#2b3324;border-top:1px solid var(--line);border-bottom:1px solid #8a754e;font-size:.92rem}.coach strong{font-family:Georgia,serif;font-size:1.05rem;color:var(--gold)}.coach span:not(.label){flex:1 1 320px}.orders{flex-wrap:wrap;justify-content:flex-end}.orders button{font-size:.85rem}.footer{margin-top:11px;color:var(--muted);font-size:.74rem}@media(max-width:900px){.layout{grid-template-columns:1fr}.panel{grid-template-columns:1fr 1fr}.panel-head,.panel .divider,.log{grid-column:1/-1}.intro-note{display:none}}.camp{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:14px;align-items:start}.camp>section,.camp-road{border:1px solid var(--line);border-radius:7px;background:var(--panel);padding:14px}.camp-road{grid-column:1/-1;display:flex;gap:6px;list-style:none;margin:0;padding:10px;counter-reset:b;overflow-x:auto}.camp-road li{flex:1 1 0;min-width:110px;padding:7px 9px;border:1px solid var(--line);border-radius:5px;font-size:.78rem;color:var(--muted);counter-increment:b}.camp-road li:before{content:counter(b) " · ";color:var(--gold);font-weight:800}.camp-road li.done{color:var(--cream);background:#26301f}.camp-road li.done:after{content:" ✓";color:#b8d894}.camp-road li.next{border-color:var(--gold);color:var(--cream);background:#3d3c29}.camp-news{grid-column:1/-1}.camp-news.won{border-color:#7a8f55}.camp-news.lost{border-color:#9a5a4a}.camp-news h2,.camp-brief h2{margin:.15em 0 .3em}.camp-news p,.camp-brief p{margin:.3em 0}.rook-says{font-family:Georgia,serif;font-size:1.02rem;line-height:1.5}.camp-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.camp-company{grid-row:span 2}.camp-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px}.camp-head .gold{color:var(--gold);font-variant-numeric:tabular-nums}.camp-roster{display:grid;gap:8px}.camp-regiment{display:grid;gap:4px;padding:9px;border:1px solid var(--line);border-left:4px solid var(--color);border-radius:5px;font-size:.84rem}.camp-name{display:flex;align-items:center;gap:8px}.camp-line{display:flex;justify-content:space-between;font-size:.78rem}.camp-regiment .meter span{background:var(--color)}.camp-regiment .meter.xp{height:3px}.camp-regiment .meter.xp span{background:var(--gold)}.camp-regiment button{justify-self:start;margin-top:4px;min-height:38px;font-size:.8rem}.camp-hire{display:grid;gap:6px;margin-top:12px}.camp-hire button{text-align:left;min-height:40px;font-size:.84rem}.camp-message{color:var(--gold);font-size:.85rem}button.danger{border-color:var(--red);color:var(--red)}@media(max-width:900px){.camp{grid-template-columns:1fr}.camp-company{grid-row:auto}}@media(max-width:560px){.camp{margin:0 8px}.camp-road li{min-width:96px;font-size:.72rem}}button{touch-action:manipulation}.turn{display:none}@media(max-width:560px){.shell{padding:8px 0 18px}.mast,.intro,.footer,.turn{margin-inline:12px}.mast{padding-bottom:8px}.mast>.label{font-size:.57rem}.turn:not([hidden]){display:flex;align-items:center;gap:10px;margin-top:8px;padding:8px 10px;border:1px solid #8a754e;border-radius:6px;background:#2b3324;font-size:.82rem}.turn span{flex:1}.turn button{min-height:36px;padding:.2rem .7rem}.intro{padding:8px 0}.intro h1{font-size:1.6rem}.intro p{font-size:.82rem}body.in-battle .intro,body.in-battle .mast,body.in-battle .turn{display:none}.battle{border-radius:0;border-inline:0}.bar{padding:5px 8px;flex-wrap:wrap}.bar>div>.label{font-size:.61rem}.orders{gap:4px}.orders button{min-height:40px;padding:.3rem .55rem;font-size:.78rem}.map-meta{padding:5px 8px;font-size:.72rem}.map-meta>span:last-child{display:none}.panel{display:grid;grid-template-columns:1fr;gap:8px;margin:8px 8px 0;padding:10px}.panel>*{grid-column:auto}.panel-head,.panel .divider{display:none}.regiments{grid-template-columns:repeat(3,1fr)}.regiment{grid-template-columns:1fr;justify-items:center;text-align:center;padding:7px 4px;gap:3px;min-height:74px}.regiment-name{font-size:.72rem}.regiment-men{text-align:center}.commands{grid-template-columns:1fr 1fr 1.5fr}.commands .wide{grid-column:auto}.commands button{min-height:48px;font-size:.85rem}.order-help{min-height:0;margin-top:6px}.log{min-height:0}.log li:nth-child(n+3){display:none}.coach{font-size:.84rem;padding:8px}}@media(max-height:520px)and (orientation:landscape){.mast,.intro,.footer,.turn,.map-meta,.panel-head,.panel .divider,.order-help{display:none!important}.shell{max-width:none;padding:6px max(6px,env(safe-area-inset-right)) 6px max(6px,env(safe-area-inset-left))}.layout{grid-template-columns:minmax(0,1fr) minmax(170px,230px);gap:6px}.bar{padding:3px 6px}.orders{gap:4px}.bar button{min-height:36px;padding:.15rem .5rem;font-size:.74rem}.map{display:grid;justify-items:center}canvas{width:auto;max-width:100%;height:calc(100dvh - 60px);max-height:57.3vw}.panel{display:grid;grid-template-columns:1fr;padding:6px;gap:6px}.panel>*{grid-column:auto}.regiments{gap:4px}.regiment{padding:3px 6px;min-height:40px}.commands button{min-height:40px}.log{min-height:0;font-size:.7rem}.log li:nth-child(n+3){display:none}.coach{padding:4px 8px;font-size:.78rem}.coach strong{font-size:.9rem}}#field{position:relative;z-index:1}.report{z-index:2}.field3d{position:absolute;left:0;top:0;z-index:0;pointer-events:none;overflow:hidden;background:linear-gradient(#3e4d58,#6f8288 35%,#93a39b 60%,#2c3a2b 61%)}.field3d canvas{position:absolute;top:0;right:0;bottom:0;left:0;width:100%!important;height:100%!important;max-width:none;max-height:none;aspect-ratio:auto}.dc-fps{position:absolute;left:6px;top:4px;padding:1px 6px;font:12px/1.4 ui-monospace,monospace;color:#f4e2b0;background:#0b120ecc;border-radius:4px}
