@font-face{font-family:Vault;src:url('assets/fonts/VT323-Regular.ttf') format('truetype');font-display:swap}
:root{color-scheme:dark;--bg:#050508;--panel:#08080d;--line:#71372f;--gold:#ffff80;--text:#66ffff;--muted:#a4a4b5;--green:#80ff58;--mono:Vault,'Courier New',monospace}
*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden}body{display:flex;flex-direction:column;background:var(--bg);color:var(--text);font:20px/1.1 var(--mono)}button,a{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}p,h1,h3,h4{margin:0}button{font:18px/1 var(--mono);color:var(--gold);background:#09090d;border:1px solid #8c4c42;padding:5px 10px;cursor:pointer;text-transform:uppercase;white-space:nowrap}button:hover,button.active{background:#52262a;color:#fff;border-color:#ff9c7c}button:focus-visible{outline:2px solid var(--gold);outline-offset:2px}button:disabled{opacity:.35;cursor:default}
.site-header{height:60px;flex:0 0 60px;display:flex;align-items:center;justify-content:space-between;gap:20px;margin:0 16px;border-bottom:2px solid var(--line)}.brand{display:flex;align-items:center;gap:12px;flex-shrink:0}.sigil{font-size:40px;color:var(--gold)}.brand h1{font:30px/1 var(--mono);color:var(--gold);letter-spacing:1px}.brand small{display:block;font-size:13px;color:#bab6ba;letter-spacing:1px;margin-top:4px}.header-intro{min-width:0;text-align:center}.edition{font-size:19px;color:#fff}.header-intro p{font-size:15px;color:var(--muted);margin-top:4px}.site-header button{flex-shrink:0}
main{width:100%;padding:10px 16px 0;flex:1;min-height:0;display:flex;flex-direction:column}.game-shell{border:7px solid #a4493c;border-image:repeating-linear-gradient(135deg,#4a151c 0 3px,#bb594b 3px 6px,#ef9980 6px 8px,#74262b 8px 11px) 7;display:flex;flex-direction:column;flex:1;min-height:0;background:#000}.game-top{height:30px;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:0 10px;border-bottom:2px solid var(--line);font-size:17px;color:var(--green)}.game-top b{font-weight:400;color:var(--gold)}#mode-label{color:#fff}.live-dot{display:inline-block;width:5px;height:5px;background:var(--green);margin-right:7px}
.game-grid{flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) 310px;grid-template-rows:204px minmax(110px,1fr) 112px;grid-template-areas:'scene party' 'scene map' 'journal controls'}.viewport-panel{grid-area:scene;border-right:3px solid var(--line);display:flex;flex-direction:column;min-width:0;min-height:0;padding:9px 9px 0}.viewport{position:relative;flex:1;min-height:0;overflow:hidden;background:#000;border:2px solid #a04e43}.viewport:after{content:'';position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(transparent 0 3px,#00000014 3px 4px)}#scene{display:block;width:100%;height:100%;image-rendering:pixelated}.scene-label{position:absolute;top:10px;left:8px;right:8px;text-align:center;color:#ffffa0;font-size:16px;text-shadow:2px 2px #000;pointer-events:none}.view-bottom{height:29px;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:16px;color:var(--green);padding:0 3px}.view-bottom>span:first-child{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.compass{color:var(--gold);white-space:nowrap}
.party-panel{grid-area:party;padding:8px 12px;min-height:0;display:flex;flex-direction:column;border-bottom:2px solid var(--line)}.roster-header{display:flex;justify-content:space-between;align-items:center;gap:6px;font-size:16px;color:#fff;height:23px;flex-shrink:0}.roster-header>span:last-child{font-size:14px}.roster-header b{font-weight:400;color:var(--gold)}.party-columns{display:grid;grid-template-columns:1fr 72px 57px;font-size:16px;color:#fff;padding:4px 0;border-bottom:1px solid #4b252a}.party-columns span:not(:first-child){text-align:right}.party{display:flex;flex-direction:column;flex:1;min-height:0;justify-content:space-evenly}.hero{display:grid;grid-template-columns:minmax(0,1fr) 129px;align-items:center;position:relative;padding:3px 0;min-height:0;cursor:pointer}.hero.selected{background:#46232a;box-shadow:inset 3px 0 var(--gold)}.hero.acted{opacity:.45}.hero.dead{opacity:.4;filter:grayscale(1)}.hero-upper{display:flex;align-items:center;gap:7px;min-width:0}.hero canvas{height:24px;width:24px;image-rendering:pixelated;flex-shrink:0}.hero h4{font:21px/1 var(--mono);color:var(--text);text-transform:uppercase}.hero .class{display:none}.hero .vitals{display:grid;grid-template-columns:72px 57px;font-size:17px;color:var(--green);text-align:right}.health-track{display:none}
.map-panel{grid-area:map;min-height:0;display:grid;grid-template-columns:110px minmax(0,1fr);grid-template-rows:21px minmax(0,1fr);gap:5px 12px;padding:9px 12px;overflow:hidden}.panel-label{display:flex;justify-content:space-between;gap:8px;color:#fff;font-size:17px;flex-shrink:0}.panel-label>span+span{font-size:15px;color:var(--muted)}.map-panel .panel-label{grid-column:1/-1}.map-panel canvas{grid-column:1;grid-row:2;width:100%;height:100%;min-height:0;object-fit:contain;image-rendering:pixelated}.map-legend{display:none}.objective{grid-column:2;grid-row:2;align-self:center;min-width:0}.eyebrow{font-size:14px;color:var(--gold)}h3{font:20px/1 var(--mono);margin:4px 0;color:var(--text)}.objective p{font-size:16px;line-height:1.1;color:var(--green)}
.journal-panel{grid-area:journal;min-width:0;min-height:0;border-top:3px solid var(--line);border-right:3px solid var(--line);padding:8px 12px;display:flex;flex-direction:column}#log{flex:1;min-height:0;overflow:auto;scrollbar-width:thin;scrollbar-color:#a34c40 #000;font-size:18px;line-height:1.15;margin:6px 0;color:var(--green)}#log p{position:relative;padding-left:13px}#log p:before{content:'>';position:absolute;left:0;color:var(--gold)}#log p.event{color:var(--text)}#log p.good{color:var(--gold)}#log p.combat{color:#ffac80}.actions{display:flex;gap:7px;flex-shrink:0}.actions button{padding:3px 10px;font-size:17px}.controls-panel{grid-area:controls;border-top:3px solid var(--line);padding:8px 12px;display:flex;flex-direction:column;justify-content:space-between;min-height:0}.direction-pad{display:grid;grid-template-columns:repeat(3,34px);grid-template-rows:24px 24px;gap:3px;justify-content:center;margin-top:4px}.direction-pad button{padding:0;font:20px/1 monospace}.key-hint{text-align:center;font-size:12px;color:var(--muted);margin-top:4px}.utilities{display:flex;gap:6px;margin-top:4px}.utilities button{flex:1;padding:4px 5px;font-size:15px}.town-hint,#combat-hint{font-size:17px;color:var(--green);line-height:1.1;margin:6px 0}#end-turn{padding:4px 8px;font-size:16px}
.game-footer{height:23px;flex-shrink:0;border-top:2px solid var(--line);padding:0 10px;display:flex;align-items:center;justify-content:space-between;gap:8px;color:var(--muted);font-size:13px}.game-footer button{border:0;padding:2px;font-size:13px}.game-footer>span:nth-child(2){color:#888394}footer{height:22px;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;gap:8px;color:#737080;font-size:12px}dialog{background:#000;color:var(--text);border:5px double #d16f55;box-shadow:0 0 0 3px #5c2426;padding:25px;max-width:540px;font:22px/1.2 var(--mono)}dialog::backdrop{background:#000b}dialog h2{font:30px/1 var(--mono);color:var(--gold);margin:12px 0}dialog p{margin-bottom:22px}dialog button{font-size:20px}.hidden{display:none!important}.notice{position:absolute;bottom:14px;left:14px;right:14px;background:#000e;color:var(--gold);border:2px solid #b96551;padding:12px;z-index:2;font-size:20px}
@media(min-height:900px){.game-grid{grid-template-rows:238px minmax(130px,1fr) 128px}.hero canvas{width:28px;height:28px}.hero{padding:5px 0}}
@media(max-width:1000px){.site-header{margin:0 10px;gap:12px}.brand h1{font-size:26px}.brand small{font-size:11px}.header-intro p{display:none}.edition{font-size:17px}.game-grid{grid-template-columns:minmax(0,1fr) 270px}.party-panel,.map-panel,.controls-panel{padding-left:9px;padding-right:9px}.hero canvas{width:19px;height:19px}.hero h4{font-size:19px}.hero-upper{gap:4px}.hero{grid-template-columns:minmax(0,1fr) 115px}.hero .vitals{grid-template-columns:65px 50px;font-size:16px}.party-columns{grid-template-columns:1fr 65px 50px}.map-panel{grid-template-columns:90px minmax(0,1fr);column-gap:8px}main{padding-left:10px;padding-right:10px}.scene-label{font-size:14px}.view-bottom{font-size:14px}}
@media(max-width:720px){.site-header{height:62px;flex-basis:62px;gap:10px}.brand h1{font-size:23px}.brand small{font-size:9px;letter-spacing:0}.sigil{font-size:30px}.brand{gap:7px}.edition{font-size:14px}.site-header button{font-size:14px;padding:5px}.game-grid{grid-template-columns:minmax(0,1fr) 205px;grid-template-rows:198px minmax(95px,1fr) 142px}.game-top{font-size:14px;padding:0 6px}#mode-label{display:none}.hero canvas{display:none}.hero h4{font-size:18px}.hero{grid-template-columns:minmax(0,1fr) 107px}.hero .vitals{grid-template-columns:62px 45px;font-size:15px}.party-columns{grid-template-columns:1fr 62px 45px;font-size:14px}.roster-header{font-size:14px;flex-wrap:wrap;height:35px}.roster-header>span:last-child{font-size:12px}.party-panel{padding:6px}.map-panel{padding:6px;grid-template-columns:65px minmax(0,1fr);gap:3px 6px}.objective h3{font-size:17px}.objective p{font-size:14px}.eyebrow{font-size:12px}.viewport-panel{padding:5px 5px 0}.scene-label{font-size:13px}.panel-label{font-size:14px}.panel-label>span+span{font-size:12px}#log{font-size:16px}.journal-panel{padding:7px}.controls-panel{padding:7px}.direction-pad{grid-template-columns:repeat(3,31px)}.key-hint{font-size:10px}.utilities button{font-size:14px}.game-footer>span:nth-child(2){display:none}.game-footer{font-size:11px}.view-bottom{height:30px;font-size:13px}.town-hint,#combat-hint{font-size:15px}footer{font-size:10px}.actions{gap:4px}.actions button{font-size:14px;padding:4px 5px}}
@media(max-width:500px){.site-header{flex-basis:72px;height:72px;display:grid;grid-template-columns:1fr auto;grid-template-rows:42px 23px;gap:0 8px}.header-intro{grid-column:1/-1;grid-row:2;text-align:left}.edition{font-size:15px}.brand h1{font-size:24px}.brand small{display:none}.game-grid{grid-template-columns:minmax(0,1fr) 168px;grid-template-rows:184px minmax(90px,1fr) 150px}main{padding:6px 5px 0}.game-shell{border-width:4px}.hero h4{font-size:16px}.hero{grid-template-columns:minmax(0,1fr) 89px}.hero .vitals{grid-template-columns:53px 36px;font-size:13px}.party-columns{grid-template-columns:1fr 53px 36px}.map-panel{grid-template-columns:52px 1fr}.objective p{font-size:12px}.objective h3{font-size:15px}.scene-label{font-size:11px}.game-top{font-size:12px}.utilities{gap:3px}.utilities button{font-size:12px;padding:4px 3px}.panel-label{font-size:12px}.journal-panel .panel-label>span+span{display:none}.actions{flex-wrap:wrap}.actions button{font-size:12px}.game-footer{font-size:10px;padding:0 5px}.game-footer button{font-size:11px}footer{font-size:9px;letter-spacing:0}}
@media(max-height:640px){.site-header{height:49px;flex-basis:49px}.brand h1{font-size:23px}.brand small{display:none}.header-intro p{display:none}.game-grid{grid-template-rows:192px minmax(65px,1fr) 117px}.hero{padding:1px 0}.hero h4{font-size:17px}.hero canvas{width:20px;height:20px}.objective p{font-size:13px}.objective h3{font-size:16px}.map-panel{padding-top:4px;padding-bottom:4px}.key-hint{display:none}.direction-pad{grid-template-rows:20px 20px}.town-hint,#combat-hint{font-size:14px}.game-footer{height:20px}footer{height:16px}#log{font-size:16px}.view-bottom{height:25px}.site-header .edition{font-size:14px}}

main>footer{display:none}
.controls-panel{padding-top:6px;padding-bottom:6px}.direction-pad{grid-template-rows:20px 20px;gap:2px;margin-top:3px}.key-hint{display:none}.utilities{margin-top:3px}.utilities button{padding-top:3px;padding-bottom:3px}
/* Let the map use the whole sidebar; quest details open on demand. */
.map-panel{grid-template-columns:minmax(0,1fr);grid-template-rows:21px minmax(0,1fr) 27px;gap:5px;padding:7px 9px}.map-panel canvas{grid-column:1;grid-row:2;justify-self:center;width:100%;height:100%;max-width:100%;object-fit:contain}.map-panel .objective{grid-column:1;grid-row:3;align-self:center;text-align:center}.objective button{max-width:100%;font-size:16px;padding:3px 6px;white-space:normal}.objective button .eyebrow{font-size:14px}
@media(max-width:500px){.objective button{font-size:13px}.objective button .eyebrow{font-size:12px}.map-panel{padding:5px;grid-template-rows:17px minmax(0,1fr) 25px;gap:3px}}

.hero{padding:1px 0}.hero canvas{width:20px;height:20px}@media(min-height:900px){.hero canvas{width:24px;height:24px}}@media(max-height:640px){.hero canvas{width:18px;height:18px}}
.combat-feedback{position:absolute;top:7px;left:12px;right:12px;z-index:2;padding:6px 10px;text-align:center;background:#050508e8;border:1px solid #91865a;color:#ffff80;font-size:19px;line-height:1.1;pointer-events:none}.combat-feedback[data-kind=damage]{color:#ffac80;border-color:#c75a48}.combat-feedback[data-kind=heal]{color:#80ff58;border-color:#6d9c4c}.viewport-panel.fighting .scene-label{display:none}.hero.hurt{animation:hit-flash 1s ease-out;box-shadow:inset 3px 0 #ff6b60}.hero.hurt .vitals{color:#ff9180}@keyframes hit-flash{0%,35%{background:#8a2e2e}100%{background:transparent}}@media(max-width:720px){.combat-feedback{font-size:15px;left:5px;right:5px;padding:4px}.actions button{font-size:13px}}@media(prefers-reduced-motion:reduce){.hero.hurt{animation:none}}
.actions{flex-wrap:wrap}
#modal-art{float:left;width:130px;height:174px;image-rendering:pixelated;margin:0 20px 14px 0}dialog:has(#modal-art:not(.hidden)){min-width:min(500px,90vw)}dialog button{clear:both}
dialog:has(#modal-art:not(.hidden)) #modal-close{display:block;clear:both}
