/* HeroQuest (Tronsoft recreation) - game.css
   Uses system font stacks only; no external font imports. Relative asset paths. */

:root{
  --bg:#141013; --panel:#1e1a1d; --panel2:#262024; --ink:#eae2d6;
  --muted:#a99f92; --gold:#e6c34a; --accent:#c0392b; --line:#3a3238;
  --parchment:#d9c7a3;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{
  background:var(--bg);
  color:var(--ink);
  font-family:Georgia,'Times New Roman',serif;
  -webkit-font-smoothing:antialiased;
}
h1,h2,h3{font-weight:normal;letter-spacing:.02em}
button{font-family:inherit}

/* ---- shared buttons ---- */
.btn{
  background:var(--panel2); color:var(--ink); border:1px solid var(--line);
  padding:8px 14px; border-radius:6px; cursor:pointer; font-size:14px;
  transition:background .15s,border-color .15s;
}
.btn:hover{background:#332a30;border-color:#5a4a52}
.btn.primary{background:var(--accent);border-color:#7d271c;color:#fff}
.btn.primary:hover{background:#d84a3a}
.btn.ghost{background:transparent}
.btn.big{font-size:18px;padding:12px 26px;background:var(--accent);border-color:#7d271c;color:#fff}
.btn.big:hover{background:#d84a3a}

/* ---- setup ---- */
#setup{
  min-height:100vh;display:flex;align-items:center;justify-content:center;
  background:
    radial-gradient(1200px 600px at 50% -10%,rgba(192,57,43,.25),transparent 60%),
    linear-gradient(180deg,#191216,#0e0b0d),
    url("../images/background.jpg");
  background-size:cover;background-position:center;background-blend-mode:multiply;
  padding:30px;
}
.setup-inner{max-width:900px;width:100%;text-align:center;
  background:rgba(20,16,19,.82);border:1px solid var(--line);border-radius:14px;padding:34px}
.title{font-size:64px;margin:0;color:var(--parchment);text-shadow:0 3px 0 #000,0 0 26px rgba(230,195,74,.25);letter-spacing:.06em}
.title span{color:var(--accent)}
.subtitle{color:var(--muted);font-size:17px;margin:6px 0 26px}
.pick-h{color:var(--gold);font-size:20px;margin:0 0 14px}
.heropick-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;margin-bottom:24px}
.heropick{
  background:var(--panel);border:2px solid var(--line);border-radius:10px;padding:16px;cursor:pointer;
  transition:border-color .15s,transform .1s;text-align:left
}
.heropick:hover{transform:translateY(-2px)}
.heropick.on{border-color:var(--gold);box-shadow:0 0 0 2px rgba(230,195,74,.2)}
.heropick .glyph{display:inline-flex;width:34px;height:34px;border-radius:50%;color:#fff;
  align-items:center;justify-content:center;font-weight:bold;font-size:18px}
.hp-name{font-size:19px;margin:8px 0 4px;color:var(--parchment)}
.hp-stats{font-size:12px;color:var(--muted);margin-bottom:8px}
.hp-blurb{font-size:13px;color:var(--ink);opacity:.85;line-height:1.4}
.setup-actions{display:flex;gap:14px;justify-content:center;flex-wrap:wrap}
.hint{color:var(--muted);font-size:13px;margin-top:18px}

/* ---- topbar ---- */
.topbar{display:flex;align-items:center;gap:18px;padding:10px 18px;background:var(--panel);
  border-bottom:1px solid var(--line)}
.brand{font-size:24px;color:var(--parchment);letter-spacing:.05em}
.brand span{color:var(--accent)}
.objbox{flex:1;font-size:14px;color:var(--ink)}
.obj-label{color:var(--gold)}
.top-right{display:flex;align-items:center;gap:16px}
.phase{padding:5px 12px;border-radius:20px;font-size:13px;border:1px solid var(--line)}
.phase.hero{background:rgba(41,128,185,.18);color:#7cc0f0}
.phase.monster{background:rgba(192,57,43,.2);color:#f0937c}
.gold{color:var(--gold);font-size:14px}

/* ---- layout ---- */
.layout{display:grid;grid-template-columns:270px 1fr 300px;gap:0;height:calc(100vh - 53px)}
.sidebar{background:var(--panel);overflow-y:auto;padding:14px;border-right:1px solid var(--line)}
.sidebar.right{border-right:none;border-left:1px solid var(--line)}
.sidebar h3{color:var(--gold);font-size:16px;margin:6px 0 12px;border-bottom:1px solid var(--line);padding-bottom:6px}

/* ---- hero cards ---- */
.herocard{background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:10px;margin-bottom:10px;cursor:pointer}
.herocard.selected{border-color:var(--gold);box-shadow:0 0 0 1px rgba(230,195,74,.3)}
.herocard.dead{opacity:.4;filter:grayscale(1)}
.hc-top{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.hc-top .glyph{width:26px;height:26px;border-radius:50%;color:#fff;display:inline-flex;
  align-items:center;justify-content:center;font-weight:bold;font-size:14px}
.hc-name{font-size:16px;color:var(--parchment)}
.stat{display:flex;align-items:center;gap:6px;margin:3px 0;font-size:12px}
.stat .lbl{width:36px;color:var(--muted)}
.stat .bar{flex:1;height:8px;background:#000;border-radius:4px;overflow:hidden}
.stat .fill{display:block;height:100%}
.stat .num{width:40px;text-align:right;color:var(--ink)}
.mini{font-size:12px;color:var(--muted);margin:4px 0}
.items,.spells{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px}
.chip{background:#2c2430;border:1px solid var(--line);color:var(--ink);font-size:11px;
  padding:3px 7px;border-radius:12px;cursor:pointer}
.chip:hover{background:#3a3040}
.chip.spell{border-color:#3d5a7a;color:#9ecbf0}
.chip.spent{opacity:.35;text-decoration:line-through;cursor:default}

/* ---- board ---- */
.boardwrap{display:flex;flex-direction:column;background:#0e0b0d}
.board-scroll{flex:1;overflow:auto;display:flex;align-items:center;justify-content:center;position:relative;padding:14px}
#board{background:#0a0a0d;border:2px solid #2a2118;border-radius:4px;box-shadow:0 6px 24px rgba(0,0,0,.6);cursor:pointer;max-width:100%}
.actionbar{display:flex;align-items:center;gap:8px;padding:10px 14px;background:var(--panel);border-top:1px solid var(--line);flex-wrap:wrap}
.actionbar .spacer{flex:1}

/* ---- flash ---- */
.flash{position:absolute;top:22px;left:50%;transform:translateX(-50%);
  background:rgba(20,16,19,.92);border:1px solid var(--gold);color:var(--gold);
  padding:8px 16px;border-radius:6px;font-size:14px;opacity:0;transition:opacity .2s;pointer-events:none}
.flash.show{opacity:1}

/* ---- dice ---- */
.dicebox{background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:12px;min-height:70px;font-size:13px;margin-bottom:10px}
.dicebox em{color:var(--muted)}
.drow{margin:4px 0}
.drow b{display:inline-block;width:56px;color:var(--muted);font-weight:normal}
.die{display:inline-flex;width:22px;height:22px;align-items:center;justify-content:center;
  border-radius:4px;margin:0 2px;font-size:14px;border:1px solid #000}
.die.skull{background:#7d1f1f;color:#ffdede}
.die.white{background:#e8e2d4;color:#333}
.die.black{background:#222;color:#bbb}
.dsum{margin-top:8px;padding-top:8px;border-top:1px solid var(--line);color:var(--ink)}

/* ---- log ---- */
.logbox{background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:10px;
  font-size:12.5px;line-height:1.5;height:calc(100vh - 360px);min-height:160px;overflow-y:auto;color:var(--ink)}
.logbox div{padding:2px 0;border-bottom:1px dotted rgba(255,255,255,.05)}

/* ---- banner ---- */
.banner{position:fixed;inset:0;background:rgba(6,4,6,.85);display:none;align-items:center;justify-content:center;z-index:50}
.banner.show{display:flex}
.banner-card{text-align:center;background:var(--panel);border:2px solid var(--accent);border-radius:14px;padding:40px 54px;max-width:520px}
.banner.win .banner-card{border-color:var(--gold)}
.b-title{font-size:52px;color:var(--accent);letter-spacing:.08em}
.banner.win .b-title{color:var(--gold)}
.b-sub{color:var(--ink);font-size:16px;margin:12px 0 24px;line-height:1.5}

/* ---- responsive ---- */
@media (max-width:1080px){
  .layout{grid-template-columns:220px 1fr 240px}
}
@media (max-width:820px){
  .layout{grid-template-columns:1fr;grid-template-rows:auto auto auto;height:auto}
  .sidebar{border:none;border-bottom:1px solid var(--line);max-height:none}
  .logbox{height:200px}
  .boardwrap{min-height:60vh}
}


/* ---- v1.1 usability controls ---- */
.boardtools{display:flex;align-items:center;gap:8px;padding:8px 14px;background:#161116;border-top:1px solid var(--line);flex-wrap:wrap}
.boardtools .spacer{flex:1}
.board-scroll{justify-content:flex-start;align-items:flex-start;cursor:grab}
.board-scroll.dragging{cursor:grabbing;user-select:none}
#board{max-width:none;transform-origin:top left;flex:0 0 auto}
.token-tip{position:fixed;display:none;z-index:80;pointer-events:none;max-width:250px;padding:9px 11px;border-radius:7px;background:rgba(20,16,19,.97);border:1px solid var(--gold);box-shadow:0 5px 18px rgba(0,0,0,.45);font-size:12px;line-height:1.4;color:var(--ink)}
.token-tip strong{color:var(--parchment);font-size:13px}.token-tip .tipstat{color:var(--gold)}
.herocard.turn-done{opacity:.66}.turn-badge{margin-left:auto;font-size:10px;border:1px solid var(--line);border-radius:10px;padding:2px 6px;color:var(--muted)}
.herocard.turn-done .turn-badge{color:#8fd49b;border-color:#446d4d}
.modal{position:fixed;inset:0;background:rgba(6,4,6,.78);display:none;align-items:center;justify-content:center;z-index:90}.modal.show{display:flex}
.modal-card{width:min(440px,calc(100vw - 36px));background:var(--panel);border:1px solid var(--gold);border-radius:12px;padding:24px;box-shadow:0 12px 36px rgba(0,0,0,.55)}
.modal-card h2{margin:0 0 8px;color:var(--gold)}.modal-card p{color:var(--ink);margin:0 0 20px}.modal-actions,.banner-actions{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
.result-stats{display:grid;grid-template-columns:repeat(2,minmax(120px,1fr));gap:8px;margin:16px 0 22px;text-align:left}
.result-stat{background:var(--panel2);border:1px solid var(--line);padding:8px 10px;border-radius:7px}.result-stat b{display:block;color:var(--gold);font-size:18px}.result-stat span{color:var(--muted);font-size:11px}
.banner-card{max-width:620px}.banner-actions .btn{min-width:120px}
.heropick.limit{animation:limitPulse .28s ease 2}@keyframes limitPulse{50%{border-color:var(--accent);transform:translateY(-2px) scale(1.02)}}
@media (max-width:820px){.boardtools{position:sticky;top:0;z-index:4}.result-stats{grid-template-columns:1fr 1fr}}


/* ---- v1.2 quest intelligence / minimap / accessibility ---- */
.btn.compact{padding:5px 9px;font-size:12px}
.quest-panel,.minimap-panel{background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:9px;margin-bottom:10px}
.panel-title{display:flex;align-items:center;justify-content:space-between;color:var(--gold);font-size:13px;margin-bottom:7px}
.quest-objective{display:flex;gap:7px;align-items:flex-start;padding:3px 0;font-size:11.5px;color:var(--muted)}
.quest-objective .mark{width:16px;text-align:center;color:#888}.quest-objective.done{color:var(--ink)}.quest-objective.done .mark{color:#7fd28a}.quest-objective.current{color:var(--gold)}
#minimap{display:block;width:100%;height:auto;background:#09090b;border:1px solid #322b2e;border-radius:4px;image-rendering:pixelated}
.minimap-legend{font-size:9.5px;color:var(--muted);margin-top:5px}.mini-button{border:0;background:transparent;color:var(--gold);cursor:pointer;font-size:16px}
.log-controls{display:flex;gap:4px;flex-wrap:wrap;margin:-5px 0 7px}.log-filter{border:1px solid var(--line);background:transparent;color:var(--muted);font:inherit;font-size:10px;border-radius:10px;padding:2px 6px;cursor:pointer}.log-filter.active{color:var(--gold);border-color:var(--gold)}
.log-entry{padding:3px 0!important}.log-entry .turn{color:#756d66;margin-right:4px}.log-entry.combat{border-left:2px solid #9c4338;padding-left:5px!important}.log-entry.search{border-left:2px solid #9b7d31;padding-left:5px!important}.log-entry.quest{border-left:2px solid #527b58;padding-left:5px!important}.log-entry.move{border-left:2px solid #486f8e;padding-left:5px!important}
.settings-card{max-width:500px}.setting-row{display:grid;grid-template-columns:130px 1fr 45px;gap:10px;align-items:center;margin:14px 0;color:var(--ink);font-size:13px}.setting-row input{width:100%}.setting-row output{text-align:right;color:var(--gold)}.setting-check{display:block;margin:12px 0;color:var(--ink);font-size:13px}
body.large-text{font-size:116%}body.large-text .logbox,body.large-text .quest-objective{font-size:13px}
body.high-contrast{--bg:#000;--panel:#0c0c0c;--panel2:#151515;--ink:#fff;--muted:#ddd;--line:#666;--gold:#ffe45c;--accent:#f44336}
body.reduced-motion *,body.reduced-motion *:before,body.reduced-motion *:after{animation-duration:.001ms!important;transition-duration:.001ms!important;scroll-behavior:auto!important}
.dicebox.rolling .die{animation:dicePop .24s ease both}.dicebox.rolling .die:nth-child(2n){animation-delay:.05s}@keyframes dicePop{0%{transform:scale(.55) rotate(-18deg);opacity:.2}70%{transform:scale(1.15) rotate(5deg);opacity:1}100%{transform:scale(1) rotate(0)}}
#board.path-preview{cursor:crosshair}.minimap-panel.collapsed #minimap,.minimap-panel.collapsed .minimap-legend{display:none}
@media(max-width:1080px){.minimap-panel{display:none}.minimap-panel.force-show{display:block}}


/* ---- v1.3 campaign / quest book / armory ---- */
.campaign-strip{display:flex;justify-content:space-between;align-items:center;gap:14px;background:rgba(20,16,19,.82);border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin:14px auto;max-width:920px}.campaign-strip strong{color:var(--gold);margin-right:10px}.campaign-strip span{color:var(--muted);font-size:12px}.campaign-strip>div:last-child{display:flex;gap:7px;flex-wrap:wrap}.selected-quest-card{max-width:920px;margin:0 auto 16px;background:var(--panel2);border:1px solid var(--line);border-left:4px solid var(--gold);border-radius:8px;padding:12px 14px;text-align:left}.selected-quest-card>div{display:flex;justify-content:space-between;gap:12px}.selected-quest-card b{color:var(--parchment)}.selected-quest-card span,.selected-quest-card small{color:var(--gold);font-size:11px}.selected-quest-card p{color:var(--muted);font-size:12px;margin:7px 0}.wide-card{width:min(760px,calc(100vw - 34px));max-height:86vh;overflow:auto}.modal-intro{color:var(--muted)!important}.quest-book-list{display:grid;gap:9px}.quest-book-card{width:100%;text-align:left;background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:11px;color:var(--ink);cursor:pointer}.quest-book-card:hover:not(:disabled){border-color:var(--gold)}.quest-book-card.locked{opacity:.48;cursor:not-allowed}.quest-book-card>div{display:flex;justify-content:space-between;gap:12px}.quest-book-card b{color:var(--parchment)}.quest-book-card span,.quest-book-card small{color:var(--gold);font-size:11px}.quest-book-card p{font-size:12px;color:var(--muted);margin:6px 0}.armory-wallet{color:var(--gold);margin:8px 0 12px}.armory-list{display:grid;gap:8px}.shop-item{display:flex;align-items:center;justify-content:space-between;gap:15px;background:var(--panel2);border:1px solid var(--line);padding:10px;border-radius:8px}.shop-item div{display:flex;flex-direction:column;gap:3px}.shop-item b{color:var(--parchment)}.shop-item span{font-size:11px;color:var(--muted)}.hero-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}.inventory-sheet{background:var(--panel2);border:1px solid var(--line);padding:14px;border-radius:8px}.inventory-sheet h3{color:var(--gold);margin:0 0 6px}.inventory-sheet h4{color:var(--parchment);margin:14px 0 5px}.inventory-sheet p,.inventory-stats{color:var(--ink);font-size:12px;line-height:1.6}.achievement-list{display:grid;gap:7px}.achievement{display:flex;gap:10px;background:var(--panel2);border:1px solid var(--line);padding:10px;border-radius:8px;opacity:.55}.achievement.earned{opacity:1;border-color:#496a4c}.achievement>span{font-size:20px;color:var(--gold)}.achievement b{color:var(--parchment)}.achievement p{margin:3px 0 0;color:var(--muted);font-size:11px}.achievement-toast{position:fixed;right:24px;bottom:24px;z-index:120;display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--gold);border-radius:9px;padding:12px 18px;box-shadow:0 10px 28px rgba(0,0,0,.5);transform:translateY(140%);transition:transform .25s ease}.achievement-toast.show{transform:translateY(0)}.achievement-toast span{font-size:10px;text-transform:uppercase;color:var(--muted);letter-spacing:.08em}.achievement-toast b{color:var(--gold);margin-top:3px}.action-mode.active{border-color:var(--gold);box-shadow:inset 0 0 0 1px var(--gold)}.equipment-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media(max-width:820px){.campaign-strip{align-items:flex-start;flex-direction:column}.selected-quest-card>div{flex-direction:column}.shop-item{align-items:flex-start;flex-direction:column}}


/* v1.4 Adventure Engine */
.setting-row select{min-width:140px;background:#181614;color:#eee;border:1px solid #6d604f;padding:7px;border-radius:4px}.hall-list,.bestiary-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.hall-card,.bestiary-card{background:#171512;border:1px solid #574a3a;border-radius:7px;padding:13px}.hall-card h3,.bestiary-card h3{margin:0 0 7px;color:#e7c77b}.hero-level{font-size:12px;color:#c7b487;margin-bottom:7px}.xpbar{height:8px;background:#28231e;border-radius:6px;overflow:hidden;margin:6px 0}.xpbar>span{display:block;height:100%;background:linear-gradient(90deg,#9b7735,#e0bc65)}.campaign-map{display:flex;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap;padding:32px 8px}.campaign-node{min-width:180px;padding:16px;border:1px solid #594b38;background:#171512;border-radius:8px;text-align:center}.campaign-node.done{border-color:#6f9d62}.campaign-node.current{box-shadow:0 0 0 2px #c9a85a}.campaign-link{font-size:24px;color:#817461}.boss-bar{position:fixed;top:60px;left:50%;transform:translateX(-50%);width:min(520px,70vw);z-index:40;background:#150c0c;border:1px solid #9d4b42;border-radius:6px;padding:7px 10px;box-shadow:0 4px 18px #0008;display:none}.boss-bar.show{display:block}.boss-bar .name{font-size:12px;text-transform:uppercase;letter-spacing:1px;color:#f0c0b8}.boss-health{height:11px;background:#3b1515;border-radius:8px;overflow:hidden;margin-top:5px}.boss-health span{display:block;height:100%;background:linear-gradient(90deg,#a52e2e,#e45b4e);transition:width .25s}.editor-card{width:min(1180px,96vw);max-width:none}.editor-toolbar{display:flex;gap:12px;align-items:end;flex-wrap:wrap;margin-bottom:12px}.editor-toolbar label,.editor-side label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:#c8b993}.editor-toolbar input,.editor-toolbar select,.editor-side input,.editor-side textarea{background:#111;color:#eee;border:1px solid #5e5140;padding:7px;border-radius:4px}.editor-layout{display:grid;grid-template-columns:minmax(500px,2fr) minmax(280px,1fr);gap:14px}.editor-layout canvas{width:100%;height:auto;background:#080808;border:1px solid #574a3a;image-rendering:pixelated}.editor-side textarea{min-height:90px}.editor-side #editorJson{min-height:260px;font-family:monospace;font-size:11px}.editor-actions{display:flex;gap:8px;margin:10px 0}.editor-help{font-size:12px;color:#a99c86}.secret-door-mark{color:#d9bd65}@media(max-width:900px){.editor-layout{grid-template-columns:1fr}.editor-layout canvas{min-width:0}}

/* v1.5 Advanced Adventure System */
.statusline{color:#ffd36a;font-size:.8rem}.profile-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:12px;margin:16px 0}.profile-card{background:#12161d;border:1px solid #384555;border-radius:10px;color:#e8edf2;padding:14px;text-align:left;cursor:pointer}.profile-card.active{outline:2px solid #d4a017}.profile-card b,.profile-card small{display:block}.profile-card small{opacity:.72;margin-top:6px}.editor-validation{margin-top:10px;min-height:1.2em;color:#ffd36a;font-size:.88rem}.status-chip{display:inline-flex;gap:3px;padding:2px 5px;border-radius:10px;background:#202733;font-size:.72rem}.los-valid{box-shadow:inset 0 0 0 2px rgba(255,255,255,.35)}


/* v1.6 Tactical & Immersive Adventure */
.move-counter{display:inline-flex;align-items:center;padding:0 9px;border-left:1px solid var(--line);color:var(--gold);font-size:12px;white-space:nowrap}.fog-memory{opacity:.52}.route-toggle-on{border-color:var(--gold)!important}.preview-card{width:min(520px,calc(100vw - 30px))}.preview-body{background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:14px;line-height:1.7}.preview-grid{display:grid;grid-template-columns:1fr auto;gap:6px 18px}.preview-good{color:#7fd28a}.preview-bad{color:#ef786e}.journal-tabs,.editor-tabs{display:flex;gap:6px;flex-wrap:wrap;margin:8px 0 14px}.journal-tab.active,.editor-tab.active{border-color:var(--gold);color:var(--gold)}.journal-body{min-height:250px;background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:14px}.journal-entry{border-bottom:1px solid var(--line);padding:9px 0}.journal-entry:last-child{border:0}.journal-entry b{color:var(--parchment)}.journal-entry small{display:block;color:var(--muted);margin-top:4px}.editor-side textarea#editorEvents,.editor-side textarea#editorDialogue{min-height:120px}.editor-tab-pane-hint{color:var(--gold);font-size:11px;margin:6px 0}.boss-phase{font-size:10px;color:#ffd7a1;margin-top:3px}.furniture-searched{opacity:.55}.tactical-hint{position:absolute;pointer-events:none;background:#0c1017e8;border:1px solid #6c7d91;color:#e8edf2;padding:4px 7px;border-radius:5px;font-size:10px;z-index:12}.visibility-legend{display:flex;gap:8px;flex-wrap:wrap;font-size:9px;color:var(--muted);margin-top:4px}.visibility-legend span:before{content:"";display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:3px;background:#81715c}.visibility-legend .current:before{background:#c5ad82}.visibility-legend .memory:before{background:#4a4035}.visibility-legend .unseen:before{background:#0b0b0d}
