:root{--paper:#faf7f0;--ink:#2a251d;--muted:#6f6455;--rule:#ddd2bd;--accent:#5a4a2f;--card:#fffdf8;--enemy:#7d2420}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:Georgia,Times New Roman,serif;line-height:1.6}main{max-width:72rem;margin:0 auto;padding:1.5rem 1rem 4rem}a{color:var(--accent)}header.topnav{border-bottom:1px solid var(--rule);background:var(--card)}header.topnav nav{max-width:72rem;margin:0 auto;padding:.6rem 1rem;display:flex;gap:1.25rem;align-items:center;font-size:1rem}header.topnav nav .spacer{flex:1 1}details.langmenu{position:relative;font-size:.9rem}details.langmenu summary{list-style:none;cursor:pointer;display:inline-flex;gap:.4rem;align-items:center;color:var(--accent);border:1px solid var(--rule);border-radius:.35rem;padding:.1rem .55rem}details.langmenu summary::-webkit-details-marker{display:none}details.langmenu .menu{position:absolute;right:0;top:calc(100% + 4px);background:var(--card);border:1px solid var(--rule);border-radius:.4rem;box-shadow:0 6px 18px rgba(0,0,0,.1);padding:.3rem;min-width:11rem;z-index:5}details.langmenu .menu button{display:flex;width:100%;justify-content:space-between;align-items:center;gap:.75rem;font:inherit;background:none;border:0;padding:.35rem .6rem;border-radius:.3rem;cursor:pointer;color:var(--ink);text-align:left}details.langmenu .menu button:hover{background:var(--paper)}details.langmenu .menu button span:first-child{display:inline-flex;gap:.5rem;align-items:center}.flag{display:inline-block;width:1.35em;height:.9em;vertical-align:-.08em;border-radius:2px;box-shadow:0 0 0 1px rgba(42,37,29,.25);overflow:hidden}.flag svg{display:block;width:100%;height:100%}.flag-fallback{font-size:.6em;font-weight:700;line-height:1.5;text-align:center;letter-spacing:.04em;color:var(--muted);background:var(--paper)}.flags{display:inline-flex;gap:.35rem;vertical-align:middle;align-items:center}.flags .flag{opacity:.45}.flags .flag.current{opacity:1;box-shadow:0 0 0 1px rgba(42,37,29,.25),0 0 0 3px var(--card),0 0 0 4px var(--accent)}.badge{font-size:.75rem;line-height:1.3;padding:.1rem .5rem;border-radius:999px;background:var(--card);color:var(--muted);border:1px solid var(--rule);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;letter-spacing:.01em;white-space:nowrap}.badge,.lang-chip{display:inline-block}.lang-chip{margin-left:.4rem;vertical-align:middle}.group-note{color:var(--muted);margin:-.4rem 0 .6rem}@media (max-width:46rem){details.langmenu summary .lang-name{display:none}}.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(16rem,1fr));gap:1rem;list-style:none;padding:0}.card{background:var(--card);border:1px solid var(--rule);border-radius:.5rem;padding:1rem 1.1rem}.card h2{margin:0 0 .4rem;font-size:1.25rem}.meta{color:var(--muted);font-size:.9rem}.button,button.primary{display:inline-block;background:var(--accent);color:#fff;border:none;border-radius:.35rem;padding:.5rem 1rem;font-size:1rem;cursor:pointer;text-decoration:none;font-family:inherit}.button.secondary{background:transparent;color:var(--accent);border:1px solid var(--accent)}form label{display:block;margin:.75rem 0 .25rem;font-weight:700}input[type=text]{width:100%;max-width:24rem;padding:.5rem;font-size:1rem;font-family:inherit;border:1px solid var(--rule);border-radius:.35rem;background:#fff;color:var(--ink)}fieldset{border:1px solid var(--rule);border-radius:.5rem;margin:1rem 0;background:var(--card)}.error{color:#8c1d1d;font-weight:700}.game{display:grid;grid-template-columns:minmax(0,1fr) 20rem;gap:1.5rem;align-items:start}.reading h1{font-size:1.8rem;margin-bottom:.25rem}.result{border-left:3px solid var(--accent);padding:.75rem 1rem;margin:1rem 0;border-radius:0 .35rem .35rem 0}.result,.side{background:var(--card)}.side{border:1px solid var(--rule);border-radius:.5rem;padding:1rem;position:sticky;top:1rem}.side h2{font-size:1.05rem;margin:.75rem 0 .25rem}.side h2:first-child{margin-top:0}@media (max-width:46rem){.game{grid-template-columns:minmax(0,1fr)}.side{position:static}.side .map-inline{display:none}}@media (min-width:46.01rem){.launcher.map-only{display:none}}.notice{border-left:3px solid #8c1d1d;background:var(--card);padding:.75rem 1rem;margin:1rem 0;border-radius:0 .35rem .35rem 0}.status-card{display:flex;gap:.75rem;align-items:center;margin-top:.75rem}.status-medal{--status-ring-color:#4f7a3a;position:relative;width:3.2rem;height:3.2rem;flex:none;border-radius:50%;background:conic-gradient(var(--status-ring-color) var(--status-health),var(--rule) 0);display:grid;place-items:center}.status-medal.low{--status-ring-color:#a8321f}.status-face{width:2.55rem;height:2.55rem;border-radius:50%;display:grid;place-items:center;font-size:1.15rem;font-weight:700;color:#fff;background:var(--accent)}.status-text{min-width:0}.status-text p{margin:0;line-height:1.3;overflow-wrap:break-word}.status-name{font-size:1.05rem}.status-template{margin-bottom:.25rem}.health-segments{display:flex;gap:2px;margin-top:.3rem}.health-segments span{width:.85rem;height:.5rem;border-radius:1px;background:var(--rule)}.health-segments span.on{background:#4f7a3a}.health-segments.low span.on{background:#a8321f}.launchers{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.5rem;margin-top:.75rem}.launcher{display:flex;flex-direction:column;align-items:center;gap:.1rem;padding:.6rem .25rem .5rem;border:1px solid var(--rule);border-radius:.5rem;background:var(--paper);text-decoration:none;color:var(--ink);text-align:center}.launcher:hover{border-color:var(--accent)}.launcher:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.launcher-icon{color:var(--accent)}.launcher-label{font-weight:700;font-size:.9rem;line-height:1.25}.launcher-sub{font-size:.75rem;color:var(--muted);line-height:1.25}@media (max-width:46rem){.launchers{grid-template-columns:repeat(2,minmax(0,1fr))}}.panel-modal-backdrop{position:fixed;inset:0;z-index:50;display:grid;place-items:center;padding:1.5rem 1rem;background:rgb(42 37 29/.45)}.panel-modal{position:relative;width:min(36rem,100%);max-height:min(85dvh,60rem);overflow:auto;background:var(--card);border:1px solid var(--rule);border-radius:.6rem;padding:1rem 1.1rem 1.25rem}.panel-modal:focus{outline:none}.sheet-hero{display:flex;gap:1rem;align-items:center;margin-top:.5rem}.status-medal.sheet-medal{width:5rem;height:5rem}.status-medal.sheet-medal .status-face{width:4.1rem;height:4.1rem;font-size:1.8rem}.sheet-hero-text{min-width:0}.sheet-name{margin:0;font-size:1.4rem;line-height:1.2;overflow-wrap:break-word}.sheet-hero-text .meta{margin:.15rem 0 0}.sheet-lede{margin:.35rem 0 0;font-style:italic;color:var(--muted)}.sheet-cols{display:grid;grid-template-columns:1.3fr 1fr;gap:0 2rem;margin-top:.5rem}.sheet h3{font-size:1rem;margin:.9rem 0 .25rem}.sheet-attrs{list-style:none;padding:0;margin:0}.sheet-attr{display:grid;grid-template-columns:5.5rem auto 1fr;align-items:center;gap:.2rem .75rem;padding:.4rem 0;border-bottom:1px dashed var(--rule)}.sheet-attr-name{font-weight:700}.sheet-attr-total{justify-self:end;font-size:1.5rem;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;line-height:1}.sheet-attr-src{grid-column:1/-1;font-size:.8rem;color:var(--muted)}.pips{display:inline-flex;gap:.3rem}.pip{width:.85rem;height:.85rem;border-radius:50%;border:1.5px solid var(--rule)}.pip.base{background:var(--accent);border-color:var(--accent)}.pip.bonus{background:var(--gold,#b98a1c);border-color:var(--gold,#b98a1c);border-radius:2px;transform:rotate(45deg)}.sheet-legend{margin:.6rem 0 0}.sheet-health{margin:.25rem 0;font-size:1.75rem;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;line-height:1.1}.sheet-slots{list-style:none;padding:0;margin:.25rem 0 0}.sheet-slots li{display:grid;grid-template-columns:auto auto 1fr;align-items:center;gap:.5rem;padding:.3rem 0;border-bottom:1px dashed var(--rule)}.sheet-slots li.empty{color:var(--muted)}.sheet-slot-icon{color:var(--accent)}@media (max-width:46rem){.sheet-cols{grid-template-columns:1fr}}.panel-modal:has(.inv-grid){width:min(56rem,100%)}.panel-modal-head{display:flex;align-items:start;justify-content:space-between;gap:1rem}.panel-modal-title{margin:0;font-size:1.05rem}.panel-modal-close{flex:none;display:grid;place-items:center;width:2rem;height:2rem;border:1px solid var(--rule);border-radius:50%;text-decoration:none;color:var(--ink);font-size:1.25rem;line-height:1;background:var(--card)}.panel-modal-close:hover{border-color:var(--accent)}.panel-modal-close:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.panel-modal h2:not(.panel-modal-title){font-size:1.05rem;margin:.75rem 0 .25rem}@media (max-width:46rem){.panel-modal-backdrop{padding:0;place-items:stretch}.panel-modal{width:100%;max-height:none;height:100dvh;border:none;border-radius:0}}.inv-grid{display:grid;grid-template-columns:15rem minmax(0,1fr);gap:1.25rem;align-items:start}@media (max-width:46rem){.inv-grid{grid-template-columns:minmax(0,1fr)}}.inv-grid h3{margin-top:.75rem}.inv-doll{background:linear-gradient(180deg,var(--card),#f3ecdc);border:1px solid var(--rule);border-radius:.6rem;padding:.25rem .85rem .85rem}.inv-slot{display:grid;grid-template-columns:3.2rem minmax(0,1fr);gap:.6rem;padding:.6rem 0;border-bottom:1px solid var(--rule)}.inv-slot:last-child{border-bottom:none}.inv-slot p{margin:0}.inv-slot-icon{width:3.2rem;height:3.2rem;border-radius:.5rem;display:grid;place-items:center;background:var(--accent);color:#fff}.inv-slot.empty .inv-slot-icon{background:transparent;color:var(--muted);border:1.5px dashed var(--rule)}.inv-slot.empty em{color:var(--muted)}.inv-tiles{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(7rem,1fr));gap:.6rem}.inv-tile{position:relative;width:100%;aspect-ratio:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.35rem;border:1px solid var(--rule);border-radius:.6rem;background:var(--card);color:var(--accent);font-family:inherit;cursor:pointer;padding:.5rem .5rem 1.25rem;overflow:hidden}.inv-tile:hover{border-color:var(--accent)}.inv-tile:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.inv-tile.selected{border:2px solid var(--accent);box-shadow:0 0 0 3px rgb(90 74 47/.15)}.inv-tile-name{color:var(--ink);font-size:.82rem;line-height:1.2;text-align:center}.inv-qty{position:absolute;top:.3rem;right:.4rem;font-size:.75rem;color:var(--muted);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.inv-spark{color:var(--accent)}.inv-spark.corner{position:absolute;top:.25rem;left:.45rem}.inv-ribbon{position:absolute;bottom:0;left:0;right:0;font-size:.65rem;text-transform:uppercase;letter-spacing:.08em;text-align:center;background:var(--accent);color:#fff;padding:.1rem 0}.inv-detail{margin-top:1rem;border-top:2px solid var(--accent);padding-top:.75rem}.inv-detail p{margin:.3rem 0}.inv-desc{font-style:italic;color:var(--muted)}.inv-chips{display:flex;flex-wrap:wrap;gap:.35rem}.inv-chips>span{border:1px solid var(--rule);border-radius:999px;padding:0 .6rem;font-size:.85rem;background:var(--card)}.magic{display:inline-block;border:1px solid var(--accent);border-radius:1rem;padding:0 .5rem;font-size:.85rem;color:var(--accent);white-space:nowrap}.reason{color:var(--muted);font-size:.9rem}form.inline{display:inline}button[disabled]{opacity:.55;cursor:not-allowed}.map-area{position:relative;width:100%;background:var(--paper);border:1px solid var(--rule);border-radius:.35rem;overflow:hidden}.map-lines{position:absolute;inset:0;width:100%;height:100%;color:#8a8580}.map-lines .edge{stroke:currentColor;stroke-width:1.1}.map-node{position:absolute;transform:translate(-50%,-50%);flex-direction:column;margin:0;max-width:5.5rem}.map-node,.map-node .dot{display:flex;align-items:center}.map-node .dot{position:relative;width:1.4rem;height:1.4rem;border-radius:50%;background:var(--card);border:2px solid var(--ink);justify-content:center;font-size:.8rem;line-height:1;flex:none}.map-node .label{font-size:.72rem;line-height:1.2;text-align:center;margin-top:.15rem;overflow-wrap:break-word}.map-node.is-revealed .dot,.map-node.is-unknown .dot{border-style:dashed;border-color:var(--muted)}.map-node.is-revealed .label,.map-node.is-unknown .label{color:var(--muted);font-style:italic}.map-node.is-current .dot{background:var(--accent);border-color:var(--accent)}.map-node .here{color:var(--accent);font-size:.62rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;order:-1}.map-node .ring{position:absolute;inset:-2px;border-radius:50%;border:2px solid var(--accent);animation:map-pulse 1.6s ease-out infinite;pointer-events:none}@keyframes map-pulse{0%{opacity:.9;transform:scale(1)}to{opacity:0;transform:scale(2.1)}}@media (prefers-reduced-motion:reduce){.map-node .ring{animation:none;opacity:.6}}button.map-travel{background:none;border:none;padding:.2rem;cursor:pointer;font:inherit;color:inherit;display:flex;flex-direction:column;align-items:center}form.map-node button.map-travel .dot{border-color:var(--accent);border-width:3px;border-style:solid}form.map-node button.map-travel:focus-visible .dot,form.map-node button.map-travel:hover .dot{background:var(--card);box-shadow:0 0 0 3px var(--rule)}.map-toggle{font-size:.85rem;color:var(--muted);margin:.4rem 0 0}.combat-header{border-bottom:1px solid var(--rule);padding-bottom:.4rem}.combat-header h1{margin:.1rem 0 .2rem}.combat-kicker{font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}.combat-kicker,.combat-narration p{margin:0}.combat-narration{font-style:italic;color:var(--muted)}.tactical-arena{display:flex;flex-wrap:wrap;gap:.75rem;margin:1rem 0;border-radius:.6rem;background:radial-gradient(ellipse at 50% 120%,color-mix(in srgb,var(--accent) 16%,transparent),transparent 65%),var(--card);border:1px solid var(--rule);padding:.75rem}.tactical-side{flex:0 0 8.5rem;min-width:0;text-align:center}.tactical-lane{flex:1 1 11rem;min-width:0}.tactical-lane+.tactical-lane{border-left:1px dashed var(--rule);padding-left:.75rem}.tactical-lane-visual{text-align:center}.tactical-intent{display:inline-block;max-width:100%;border:1px solid var(--rule);border-radius:.6rem;background:var(--paper);padding:.3rem .6rem;font-size:.78rem;line-height:1.35;overflow-wrap:break-word}.tactical-intent.is-prepare{border-style:dashed}.tactical-disc{display:inline-grid;place-items:center;min-width:1.4rem;height:1.4rem;border-radius:50%;background:var(--enemy);color:#fff;font-weight:700;font-size:.75rem;padding:0 .2rem}.tactical-speed{font-size:.68rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.tactical-effect{display:block;font-size:.72rem;color:var(--muted)}.tactical-ground{border-top:1px solid var(--rule);margin:.4rem 0 .15rem}.tactical-clash{font-size:1.2rem;color:var(--enemy)}.tactical-far{font-size:.7rem;letter-spacing:.2em;color:var(--muted);text-transform:uppercase}.tactical-medallion{max-width:10rem;margin:0 auto}.tactical-range{font-weight:700;letter-spacing:.3em;font-size:.7rem;color:var(--muted);text-transform:uppercase}.tactical-lane-visual.near .tactical-range{color:var(--enemy)}.combat-ring{--combat-ring-color:#4f7a3a;position:relative;width:3.6rem;height:3.6rem;margin:0 auto;border-radius:50%;background:conic-gradient(var(--combat-ring-color) var(--combat-health),var(--rule) 0);display:grid;place-items:center}.combat-ring.low{--combat-ring-color:#a8321f}.combat-face{width:2.9rem;height:2.9rem;border-radius:50%;display:grid;place-items:center;font-size:1.25rem;font-weight:700;color:#fff}.tactical-side .combat-face{background:var(--accent)}.tactical-medallion .combat-face{background:var(--enemy)}.combat-letter{position:absolute;top:-.3rem;right:-.3rem;min-width:1.25rem;height:1.25rem;border-radius:50%;background:var(--paper);border:1px solid var(--rule);display:grid;place-items:center;font-size:.7rem;font-weight:700;padding:0 .2rem}.combat-face.is-defeated{background:var(--muted)}.combat-badges{margin:.2rem 0 0;display:flex;flex-wrap:wrap;gap:.25rem;justify-content:center;min-height:0}.combat-badges:empty{display:none}.combat-badge{font-size:.68rem;font-weight:700;border:1px solid var(--rule);border-radius:999px;padding:0 .45rem;background:var(--paper)}.combat-badge.is-defeated{background:var(--muted);border-color:var(--muted);color:#fff}.combat-name{font-weight:700;margin:.25rem 0 0;line-height:1.15;font-size:.8rem;overflow-wrap:break-word}.combat-health{margin:0;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-size:.75rem;line-height:1.2}.combat-detail{margin:0;font-size:.68rem;line-height:1.2;color:var(--muted);overflow-wrap:break-word}.combat-actions{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.75rem}.combat-group{border:1px solid var(--rule);border-radius:.5rem;padding:.6rem .7rem .75rem;background:var(--card);display:flex;flex-direction:column;gap:.45rem}.combat-group h2{margin:0;font-size:.9rem}.combat-action p{margin:0}.combat-button{width:100%;min-height:2.75rem;font:inherit;font-size:.9rem;line-height:1.25;padding:.35rem .5rem;border:none;border-radius:.35rem;background:var(--accent);color:#fff;cursor:pointer;overflow-wrap:break-word}.combat-button-label{display:block;font-weight:700}.combat-meta{display:block;font-size:.72rem;font-weight:400;line-height:1.35;opacity:.92;overflow-wrap:break-word}.combat-button:disabled{background:var(--muted);cursor:not-allowed}.combat-button:focus-visible,.combat-targets a:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.combat-order{margin:0 0 1rem}.combat-order h2{margin:0 0 .35rem;font-size:.9rem}.combat-order-list{display:flex;flex-wrap:wrap;gap:.4rem;list-style:none;margin:0;padding:0}.combat-chip{font-size:.78rem;border:1px solid var(--rule);border-radius:999px;background:var(--card);padding:.15rem .6rem;overflow-wrap:break-word;max-width:100%}.combat-chip.is-hint{border-style:dashed;color:var(--muted)}.combat-targets{margin:0 0 1rem;border:1px solid var(--rule);border-radius:.5rem;background:var(--card);padding:.6rem .7rem}.combat-targets-label{font-weight:700;font-size:.9rem}.combat-targets ul{display:flex;flex-wrap:wrap;gap:.4rem;list-style:none;margin:.4rem 0;padding:0}.combat-targets a{display:inline-block;min-height:2.75rem;line-height:2.75rem;padding:0 .8rem;border:1px solid var(--rule);border-radius:999px;text-decoration:none;overflow-wrap:break-word;max-width:100%}.combat-targets a[aria-current=true]{border-color:var(--accent);border-width:2px;font-weight:700}.combat-target-range{font-size:.72rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.combat-targets .meta{margin:0}.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.combat-reason{font-size:.75rem;color:var(--muted);line-height:1.3;margin:.2rem 0 0}.combat-log{margin-top:1.25rem}.combat-latest{border:2px solid var(--accent);border-radius:.5rem;padding:.5rem .8rem;background:var(--card)}.combat-latest p{margin:.15rem 0 .4rem}.combat-rolls{display:flex;flex-wrap:wrap;gap:.4rem;list-style:none;margin:0;padding:0}.combat-roll{font-family:ui-monospace,Menlo,monospace;font-size:.75rem;border:1px solid var(--rule);border-radius:999px;padding:.05rem .5rem}.combat-roll.hit{border-color:var(--accent);font-weight:700}.combat-older{margin:.6rem 0 0;padding:0;list-style:none;font-size:.85rem;color:var(--muted)}.combat-older li{padding:.25rem 0;border-bottom:1px dotted var(--rule)}@media (max-width:46rem){.combat-actions{grid-template-columns:repeat(2,minmax(0,1fr))}.tactical-arena{flex-direction:column;flex-wrap:nowrap}.tactical-lane,.tactical-side{flex:1 1 auto}.tactical-lane+.tactical-lane{border-left:none;border-top:1px dashed var(--rule);padding-left:0;padding-top:.75rem}}@media (prefers-reduced-motion:reduce){.combat-chip,.tactical-lane-visual,.tactical-medallion{transition:none;animation:none}}.journal-position{position:sticky;top:0;z-index:1;background:var(--paper);border-bottom:1px solid var(--rule);padding:.35rem 0 .5rem}.journal-position-text{margin:0 0 .3rem}.journal-progress{height:.2rem;border-radius:999px;background:var(--rule);overflow:hidden}.journal-progress-bar{height:100%;background:var(--accent)}.journal-modal-backdrop{position:fixed;inset:0;z-index:50;background:rgba(42,37,29,.55);display:flex;align-items:center;justify-content:center;padding:1rem}.journal-modal{background:var(--paper);border:1px solid var(--rule);border-radius:.6rem;width:min(40rem,100%);max-height:80vh;display:flex;flex-direction:column;box-shadow:0 1rem 3rem rgba(42,37,29,.35)}.journal-modal-header{display:flex;align-items:baseline;gap:1rem;flex-wrap:wrap;padding:1rem 1.25rem .75rem;border-bottom:1px solid var(--rule)}.journal-modal-header h2{margin:0;font-size:1.4rem}.journal-modal-header .meta{margin:0;flex:1 1;min-width:10rem}.journal-modal-body{overflow-y:auto;padding:0 1.25rem 1.25rem}.journal-modal-body .journal-position{margin:0 -1.25rem;padding-left:1.25rem;padding-right:1.25rem}