:root{--bg:#15130f;--panel:#211d17;--line:#3a3328;--text:#ece3d0;--muted:#a2967f;--gold:#d9aa45;--gold-ink:#1b1508;--error:#ff8a7a;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}body{background:var(--bg);color:var(--text);margin:0;font:15px/1.5 system-ui,-apple-system,Segoe UI,sans-serif}main{max-width:1120px;margin:0 auto;padding:28px 16px 64px}header h1{color:var(--gold);letter-spacing:.01em;margin:0;font:600 30px/1.2 Georgia,Times New Roman,serif}header p{color:var(--muted);max-width:70ch;margin:6px 0 24px}code,pre{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em}em{color:var(--muted);font-size:.88em;font-style:normal}.muted{color:var(--muted);margin:0}.layout{grid-template-columns:minmax(280px,360px) minmax(0,1fr);align-items:start;gap:20px;display:grid}@media (max-width:820px){.layout{grid-template-columns:1fr}}.panel{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:18px}form{gap:14px;display:grid}label{color:var(--muted);gap:4px;min-width:0;font-size:13px;display:grid}input:not([type=checkbox]),select{border:1px solid var(--line);width:100%;color:var(--text);font:inherit;background:#15120d;border-radius:6px;padding:8px 10px}input:focus-visible,select:focus-visible,button:focus-visible,.button:focus-visible,summary:focus-visible{outline:2px solid var(--gold);outline-offset:1px}.row{grid-auto-columns:minmax(0,1fr);grid-auto-flow:column;gap:10px;display:grid}.slider span{flex-wrap:wrap;align-items:baseline;gap:6px;display:flex}.slider b{color:var(--gold);font-variant-numeric:tabular-nums;min-width:1.6em}input[type=range]{width:100%;accent-color:var(--gold);cursor:pointer;margin:2px 0 0}fieldset{border:1px solid var(--line);border-radius:8px;gap:8px;margin:0;padding:10px 12px 12px;display:grid}legend{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);padding:0 6px;font-size:12px}.check{color:var(--text);align-items:flex-start;gap:8px;font-size:14px;display:flex}.check input{accent-color:var(--gold);margin-top:4px}.factions{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px;display:grid}.faction{color:var(--text);grid-template-columns:auto 1fr;align-items:center;column-gap:6px}.faction select{grid-column:1/-1}.swatch{border:1px solid #0008;border-radius:2px;width:11px;height:11px;display:inline-block}.actions{gap:10px;display:flex}button,.button{appearance:none;cursor:pointer;background:var(--gold);color:var(--gold-ink);border:0;border-radius:7px;align-items:baseline;gap:8px;padding:10px 16px;font:600 14px/1.2 inherit;text-decoration:none;display:inline-flex}.actions button{flex:1;justify-content:center}button.secondary{color:var(--gold);box-shadow:inset 0 0 0 1px var(--gold);background:0 0}button:disabled{opacity:.55;cursor:progress}.button small{opacity:.75;font-weight:400}.preview{gap:12px;min-width:0;display:grid}.preview-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.preview h2{overflow-wrap:anywhere;margin:0;font:600 21px/1.2 Georgia,serif}.canvas-wrap{justify-content:center;transition:opacity .15s;display:flex}.canvas-wrap.busy{opacity:.5}canvas{outline:1px solid var(--line);image-rendering:pixelated;cursor:crosshair;touch-action:none;border:3px solid #0d0b08;border-radius:3px;max-width:100%;display:block}canvas.grab{cursor:grab}canvas.grabbing{cursor:grabbing}.canvas-frame{position:relative}.zoom{flex-direction:column;align-items:stretch;gap:4px;display:flex;position:absolute;top:10px;right:10px}.zoom button{width:30px;height:30px;color:var(--text);box-shadow:inset 0 0 0 1px var(--line);background:#15130fd9;justify-content:center;align-items:center;padding:0;font-size:18px;line-height:1}.zoom button:hover:not(:disabled){color:var(--gold)}.zoom button:disabled{opacity:.4;cursor:default}.zoom button.reset{width:auto;height:auto;padding:5px 7px;font-size:11.5px}.zoom span{text-align:center;color:var(--text);background:#15130fd9;border-radius:6px;padding:3px 0;font-size:11.5px}.hover{text-align:center;min-height:1.5em;color:var(--muted);margin:0;font-size:13.5px}.legend{flex-wrap:wrap;justify-content:center;gap:6px;display:flex}.chip{color:var(--text);box-shadow:inset 0 0 0 1px var(--line);background:#15120d;border-radius:999px;align-items:center;gap:6px;padding:6px 10px;font:400 13px/1 inherit;display:inline-flex}.chip b{color:var(--muted);font-weight:500}.chip.off{opacity:.4;text-decoration:line-through}.chip.static{cursor:default}.glyph{border:1px solid #000a;border-radius:50%;width:10px;height:10px;display:inline-block}.glyph.town,.glyph.obstacle,.terrain .glyph{border-radius:2px}.glyph.monster,.glyph.artifact{border-radius:0;transform:rotate(45deg)scale(.85)}.glyph.icon{object-fit:contain;background:0 0;border:0;border-radius:0;width:18px;height:18px}.players{grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:4px 16px;margin:0;padding:0;font-size:14px;list-style:none;display:grid}.players li{align-items:center;gap:7px;display:flex}details{border-top:1px solid var(--line);padding-top:10px}summary{cursor:pointer;color:var(--muted);font-size:13px}pre{white-space:pre-wrap;color:#b8d8a0;margin:8px 0 0}.error{color:var(--error);margin:0}.story{border-color:var(--gold)}.story legend{color:var(--gold)}textarea{border:1px solid var(--line);width:100%;color:var(--text);font:inherit;resize:vertical;background:#15120d;border-radius:6px;min-height:7em;padding:9px 10px}textarea:focus-visible{outline:2px solid var(--gold);outline-offset:1px}textarea:disabled{opacity:.6}.story button{justify-content:center}.notes{border-left:3px solid var(--gold);background:#15120d;border-radius:0 6px 6px 0;margin:0;padding:10px 12px;font-size:14px}.lore{gap:6px;padding-top:8px;font-size:14px;display:grid}.lore p,.lore ul{margin:0}.lore ul{color:var(--muted);padding-left:20px}.lore i{color:var(--text)}button.small{justify-self:start;padding:6px 10px;font-size:12.5px}.tabs{border-bottom:1px solid var(--line);gap:4px;margin-bottom:20px;display:flex}.tabs button{color:var(--muted);background:0 0;border-bottom:2px solid #0000;border-radius:7px 7px 0 0;margin-bottom:-1px;padding:10px 18px;font-weight:600}.tabs button:hover{color:var(--text)}.tabs button.active{color:var(--gold);border-bottom-color:var(--gold)}.layout[hidden]{display:none}.library{gap:14px;display:grid}.cards{gap:14px;margin:0;padding:0;list-style:none;display:grid}.card{grid-template-columns:180px minmax(0,1fr);align-items:start;gap:16px;display:grid}@media (max-width:560px){.card{grid-template-columns:1fr}}.thumb canvas{cursor:default;width:100%!important;height:auto!important}.card-body{gap:4px;min-width:0;display:grid}.card h3{overflow-wrap:anywhere;margin:0;font:600 19px/1.2 Georgia,serif}.card .meta{color:var(--muted);margin:0;font-size:13.5px}.card .blurb{margin:2px 0;font-size:14px}.card-actions{flex-wrap:wrap;gap:10px;margin-top:8px;display:flex}.empty h2{margin:0 0 6px;font:600 21px/1.2 Georgia,serif}.site-footer{border-top:1px solid var(--line);max-width:1120px;margin:-32px auto 0;padding:0 16px 40px}.site-footer p{color:var(--muted);margin:0;padding-top:14px;font-size:13.5px}button.link{color:var(--gold);font:inherit;text-underline-offset:3px;background:0 0;border-radius:3px;padding:0;font-weight:600;text-decoration:underline}dialog.request{background:var(--panel);color:var(--text);border:1px solid var(--line);border-radius:10px;width:min(520px,100vw - 32px);padding:0}dialog.request::backdrop{background:#0009}.request-body{gap:12px;padding:20px;display:grid}.request-body h2{margin:0;font:600 21px/1.2 Georgia,serif}.request-body textarea{min-height:6em}.spinner{vertical-align:-2px;border:2px solid;border-right-color:#0000;border-radius:50%;width:14px;height:14px;margin-right:8px;animation:.8s linear infinite spin;display:inline-block}.spinner.big{width:34px;height:34px;color:var(--gold);border-width:3px;margin:0}@keyframes spin{to{transform:rotate(360deg)}}.progress{color:var(--gold);align-items:center;gap:4px;margin:0;font-size:14px;display:flex}.progress b{color:var(--muted);font-variant-numeric:tabular-nums;margin-left:4px;font-weight:500}.preview{position:relative}.preview.thinking>:not(.overlay){opacity:.35;pointer-events:none;transition:opacity .2s}.overlay{color:var(--text);z-index:2;background:#15130f59;border-radius:10px;flex-direction:column;justify-content:center;align-items:center;gap:12px;font-weight:600;display:flex;position:absolute;inset:0}@media (prefers-reduced-motion:reduce){.spinner{animation-duration:2s}}
