/* Shared menu skin: angular Flash silhouettes, restrained modern spacing. */
:root{--ink:#202d32;--paper:#f5eedc;--slate:#314b58;--olive:#7c8a4e;--brass:#bc9d60;--text:#f5eedc;--text-dim:#c7cfc8;--blue:#466779}
html,body{background:#192a32;font-family:Inter,system-ui,sans-serif}
.app{max-width:1000px;background:#263e48;box-shadow:0 0 0 1px #101f26,0 12px 50px #0004}
.topbar{background:linear-gradient(#3c5763,#2b414c);border-bottom:2px solid #b59b65;box-shadow:inset 0 1px #70838b;padding:10px 18px;min-height:68px}
.player-info{background:none;border:0;box-shadow:none;padding-left:4px}.player-name{font-weight:700;letter-spacing:.02em}.player-level{gap:8px}.xpbar{min-width:110px}.currency-pill{background:#223640;border:1px solid #60727a}
.bottomnav{background:#273c46;border-top:2px solid #ad945e;box-shadow:0 -3px #142630;padding:6px 12px max(6px,env(safe-area-inset-bottom));gap:8px;min-height:66px}
.nav-item{border:1px solid transparent;border-radius:5px;min-height:48px;color:#bdcbc9;gap:4px;font-size:12px}.nav-item+.nav-item:before{display:none}.nav-item svg{width:23px;height:23px}.nav-item.is-active{background:linear-gradient(#617665,#465c50);color:#fff0c8;border:1px solid #a6ac79;box-shadow:inset 0 1px #bcc294,0 2px #14282c}
.btn-small,.btn-primary{background:linear-gradient(#536f7e 0 49%,#405d6d 50%);border:1px solid #172d37;border-radius:5px;box-shadow:inset 0 1px #a6b7b9,0 3px #172b32;color:#fff8e6;font-weight:650;min-height:42px;padding:10px 17px;text-shadow:0 1px #20313a;font-size:13px;cursor:pointer;transition:filter .15s,transform .15s}
.btn-small:hover,.btn-primary:hover{filter:brightness(1.12)}.btn-small:active,.btn-primary:active{transform:translateY(2px);box-shadow:inset 0 1px #a6b7b9,0 1px #172b32}.btn-ghost{background:transparent;box-shadow:none;border:1px solid #819087;color:inherit;text-shadow:none}button:disabled{opacity:.58;cursor:default;transform:none}button:focus-visible,summary:focus-visible,a:focus-visible{outline:3px solid #d6b45e;outline-offset:3px}
h1,h2,h3{font-family:Cinzel,Georgia,serif}.eyebrow{display:block;font-size:10px;font-weight:750;letter-spacing:.16em;color:#d4c08e}.home-banner{position:relative;min-height:290px;padding:38px 32px;overflow:hidden;border-bottom:3px solid #ad945e;background:linear-gradient(90deg,#142a35e8,#20354080 52%,#20354000),url('../../assets/art-reference/room-style-approved.png') center 48%/cover}
.home-banner-copy{position:relative;z-index:1;max-width:420px}.home-banner h1{font-size:clamp(27px,4vw,38px);line-height:1.24;margin:13px 0;color:#fff2d0;text-shadow:0 2px #20313a}.home-banner p{font-size:14px;line-height:1.6;color:#e7ebdc}.home-banner .btn-primary{background:linear-gradient(#8e9b5b,#6d7d43);border-color:#233a29;box-shadow:inset 0 1px #cbd699,0 3px #182c29}
.home-content{padding:26px 26px 32px}.section-heading{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px}.section-heading h2{margin:5px 0 0;font-size:22px;color:#f5e6c2}.section-heading .btn-small{font-size:11px}.home-links{flex-wrap:wrap;margin:18px 0}.panel{background:#f4eddc;border:1px solid #a79d80;border-radius:6px;box-shadow:inset 0 1px #fffbed,0 3px #162b32;color:#293a3e}
.deck-list{padding:0;display:grid;gap:10px}.deck-card{margin:0;padding:16px;gap:15px}.deck-name{color:#2a3c3e;font-size:15px}.deck-card .deck-sub{font-size:12px;color:#5d6c69}.deck-card .deck-icon{background:#697b59;color:#fff3cf;border:1px solid #3d503f;box-shadow:inset 3px 0 #9ca87e;border-radius:4px}.tag{color:#42583c;background:#e0e6cc;border:1px solid #b7c39e}.is-active-deck{border-left:4px solid #8b9d57}.empty-state{margin:0;padding:24px;color:#5d6b63;line-height:1.8}.empty-state button{margin-top:12px}.empty-state p{font-size:12px;margin-bottom:0}
.import-drawer{border:1px solid #768781;border-radius:6px;background:#223842;overflow:hidden}.import-drawer summary{cursor:pointer;list-style:none;padding:18px;color:#e9e4cc;font-weight:600;display:flex;justify-content:space-between}.import-drawer summary::-webkit-details-marker{display:none}.upload-panel{margin:0;border:0;border-radius:0;box-shadow:none;padding:16px}.dropzone{padding:20px;border:1px dashed #aaa88d;background:#fbf7ea;min-height:150px}.cloud{width:36px;height:28px}.drop-hint{color:#647167}.future-feature{font-size:11px;color:#b5c1ba;margin:18px 0 0}
.home-leaves i{position:absolute;right:14%;top:25%;width:10px;height:5px;background:#c6b667;border-radius:0 80% 0 80%;opacity:.55;transform:rotate(25deg)}.home-leaves i:nth-child(2){right:32%;top:56%;animation-delay:-4s}.home-leaves i:nth-child(3){right:6%;top:72%;animation-delay:-8s}
@media(prefers-reduced-motion:no-preference){.home-leaves i{animation:leaf-drift 13s ease-in-out infinite}.home-banner-copy{animation:menu-arrive .35s ease-out}.inventory-item{transition:background .15s,border-color .15s}.view:not([data-view=world]):not([data-view=wardrobe]).is-active .page-head{animation:menu-arrive .25s ease-out}}
@keyframes leaf-drift{0%,100%{translate:0 0;rotate:0deg}50%{translate:-30px 16px;rotate:35deg}}@keyframes menu-arrive{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.page-head{padding:24px 24px 16px}.page-head h2{font-size:26px;color:#f0deb2}.page-head p{font-size:13px;color:#bbc9c4}.inventory-layout{padding:0 24px 24px;grid-template-columns:220px minmax(0,1fr);gap:18px}.inventory-character,.inventory-stats{border:1px solid #a89d7d;border-radius:6px;background:#eee7d3;color:#2c3d3f;padding:16px}.inventory-portrait{width:100%;height:auto;max-height:210px;object-fit:contain;background:radial-gradient(ellipse,#cbd0b9,#a7b19b);border:1px solid #7c8f78}.inventory-tabs{gap:5px;margin-bottom:10px}.inventory-tab-btn{padding:11px;font-size:12px;border:1px solid #687e7d;background:#293f48;color:#c8d4cb;border-radius:4px}.inventory-tab-btn.is-active{background:#71805b;color:#fff1cd;border-color:#a7b084;box-shadow:inset 0 1px #b4bb8f}
.inventory-list{display:grid;gap:6px}.inventory-item{display:flex;width:100%;text-align:left;align-items:center;gap:12px;background:#eee8d7;color:#25383d;border:1px solid #aea88b;border-radius:4px;padding:12px;min-height:74px;box-shadow:none}.inventory-item:hover{background:#fff7df;border-color:#e3cd95}.inventory-item.is-selected{border-color:#cdb778;box-shadow:inset 4px 0 #899a59;background:#faf1d7}.inventory-item-pic{flex:none;width:48px;height:48px;object-fit:contain;background:#d3d6be;border:1px solid #9eac8d;border-radius:4px}.item-monogram{display:grid;place-items:center;font:24px Georgia;color:#607254}.inventory-item-info{flex:1;min-width:0}.inventory-item-name{display:block;font-size:14px;overflow-wrap:anywhere}.inventory-item-desc{display:block;font-size:11px;color:#657260;margin-top:5px;text-transform:capitalize}.item-state{font-size:11px;color:#587047;font-weight:650}.item-details{background:#20363f;border:1px solid #617770;border-radius:5px;padding:17px;margin-top:12px;color:#e1e6d9;line-height:1.6;font-size:13px}.item-details h3{font-size:17px;margin:5px 0}.item-details p{margin:8px 0}.item-stats{color:#c1d29b}.inventory-item-qty{color:#465d4d}
.map-heading{padding:24px 24px 0}.map-heading h1{font:26px Cinzel,Georgia;color:#efdeb5}.map-scroll{margin:0 24px;border:2px solid #b29a65;border-radius:6px;background:#8aa3a3;box-shadow:0 4px #162c34}.fantasy-map{min-width:540px}.map-details{background:#20363f;border:1px solid #617770;border-left:4px solid #b9a066;border-radius:4px;margin:18px 24px;color:#e1e6d9}.map-intro,.map-legend{margin-left:24px;margin-right:24px;color:#bfcdc5}.map-details button{float:right}
.modal{background:#13252dbd}.modal-card{max-width:520px;padding:25px;color:#293b3f}.modal-card h3{color:#334a4c}.modal-card p{color:#596b68;line-height:1.6}.text-input{background:#fffbef;color:#293b3f;border:1px solid #a4af9b;border-radius:4px;padding:12px;min-height:44px;width:100%}.modal-actions{flex-wrap:wrap;gap:10px}.modal-card .btn-ghost{color:#46605b}
/* Learning uses a quiet reading surface, independently of menu decoration. */
.encounter-sheet{background:rgba(252,251,247,.74)!important;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);color:#263238!important;border:1px solid #c4ccc8!important;border-radius:10px 10px 0 0;box-shadow:0 -4px 18px #162b3230!important;font-family:Inter,system-ui,sans-serif}.sheet-content{padding:18px}.sheet-card-content{font-family:Inter,system-ui,sans-serif!important;font-size:clamp(18px,2.3vw,22px)!important;line-height:1.65!important;text-shadow:none!important;color:#263238!important;max-width:680px;margin:18px auto;overflow-wrap:anywhere}.sheet-card-answer{border-top:1px solid #d1d8d1;padding-top:18px;color:#344a43!important}.sheet-player-hp{color:#66766c}.sheet-reveal-btn{background:#476574!important;box-shadow:none!important;text-shadow:none;width:100%;max-width:680px}.answer-actions{max-width:680px;margin:18px auto 0;gap:8px}.answer-actions button{min-height:48px;border:1px solid #aab8b0;box-shadow:none;text-shadow:none;font-size:14px;color:#273e38;background:#e4eee4}.answer-actions .a-again{background:#f3e4e1;color:#713a34}.answer-actions .a-hard{background:#f4ead6;color:#735b2c}.answer-actions .a-good{background:#e1eddf;color:#365d36}.answer-actions .a-easy{background:#dfeaf2;color:#355971}.answer-actions small{font-size:11px}.study-focus .motes,.study-focus .home-leaves{display:none!important}.study-focus .world-root{pointer-events:none}.study-focus .world-root .chat-log,.study-focus .world-root .chat-input{visibility:hidden}.sheet-card-status .tag{background:#e0e6cc;color:#42583c;border:1px solid #b7c39e}.sheet-card-status .tag-new{background:#dcefe0;color:#2f6b3f;border:1px solid #9cc9a8}.explain-btn{color:#5d6b69!important;border-color:#aab8b0!important}
@media(min-width:760px){.inventory-layout{display:grid}.app{max-width:1000px}.home-content{padding:28px 32px}.home-banner{min-height:310px}.deck-list{grid-template-columns:1fr}.home-banner-copy{max-width:470px}}
@media(max-width:600px){.topbar{padding:9px 12px}.home-banner{min-height:265px;padding:28px 20px;background-position:42% center}.home-content{padding:22px 16px}.home-banner h1{font-size:28px}.section-heading{align-items:flex-end}.section-heading h2{font-size:20px}.deck-card{padding:13px;gap:10px;flex-wrap:wrap}.deck-card .deck-meta{min-width:140px}.deck-card .btn-small{margin-left:auto}.inventory-layout{display:flex;flex-direction:column;padding:0 16px 20px}.inventory-left{width:100%}.inventory-character{display:grid;grid-template-columns:85px 1fr;gap:5px 16px;text-align:left}.inventory-portrait{grid-row:1/5;width:85px}.inventory-name{font-size:18px}.inventory-right{width:100%;min-width:0}.page-head{padding:22px 16px 14px}.map-scroll{margin:0 12px}.map-heading{padding:22px 16px 0;gap:12px}.map-heading h1{font-size:23px}.map-heading .btn-small{font-size:11px}.map-intro,.map-legend{margin-left:16px;margin-right:16px}.modal-card{padding:20px}.bottomnav{gap:4px;padding-inline:7px}.nav-item{font-size:11px}.sheet-content{padding:13px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}

.wardrobe-room{background:linear-gradient(#243c47d9,#20343fe8),url("../../assets/rooms/spawn-1.png") center/cover}.wardrobe-panel{background:#304d55;border-color:#1b3138;outline-color:#b79d63}.wardrobe-mirror{border-color:#223b42;outline-color:#b99e66}.wardrobe-choice{border-color:#657a71}
.player-level>span{white-space:nowrap;flex-shrink:0}.sheet-card:focus{outline:none}.review-controller{display:none;justify-content:flex-end;gap:9px;margin-top:12px}.review-controller button{border:1px solid #b2bfb6;background:#eef2e9;color:#3b554a;border-radius:50%;width:40px;height:40px;font-weight:700;box-shadow:none}.answer-actions button.review-selected,.tutorial-choices button.review-selected{outline:2px solid #839a7d;outline-offset:2px}.sheet-card-content *{animation:none!important}.tutorial-panel .review-controller{display:flex}
@media(pointer:coarse){.review-controller{display:flex}}
.bottomnav{grid-template-columns:repeat(5,minmax(0,1fr))}.equipment-slot{background:#dbe0ca;border:1px solid #bbc4a8;border-radius:3px}.equipment-slot-label{color:#586b55}.equipment-slot-value{color:#334b43}.sheet-card-wrap:focus{outline:none}
@media(max-width:600px){.inventory-character .equipment-slots{grid-column:1/-1;grid-template-columns:1fr 1fr}.inventory-character .btn-small{grid-column:2}.inventory-character .equipment-slot{font-size:10px}}

/* Warm parchment and carved wood. Study cards retain their neutral reading surface. */
:root{--ink:#40372b;--paper:#f5ecd8;--slate:#69563f;--brass:#ad894e;--text:#f4e8cd;--text-dim:#cfc09f;--blue:#7b6245;--blue-light:#a58b62}
html,body{background:#8c795d;color:#40372b}.app{background:#d6c7a7;color:#40372b;box-shadow:0 0 0 2px #4b3b2b,0 15px 45px #30251544}
.topbar{background:linear-gradient(#786247,#5d4a35);border-bottom:2px solid #be9c5b;box-shadow:inset 0 1px #ae936b;color:#f9edcf}.player-name,.player-level{color:#f6ebd0}.currency-pill{background:#4d3e2e;border-color:#a48b62;color:#f2e4c6}.xpbar{background:#3c3327;border-color:#b8a076}.xpbar-fill{background:#82954f;box-shadow:inset 0 1px #bbc889}
.bottomnav{background:linear-gradient(#776246,#5b4935);border-color:#c7ab70;box-shadow:0 -2px #433526}.nav-item{color:#e1d3b4}.nav-item.is-active{background:linear-gradient(#9b9d66,#77814b);color:#fff3cd;border-color:#c3c38a;box-shadow:inset 0 1px #ded7a2,0 2px #423723}.nav-item:not(.is-active):hover{background:#8a7454;color:#fff4d7}
.btn-small,.btn-primary{background:linear-gradient(#927650 0 49%,#7b603f 50%);border-color:#56432b;box-shadow:inset 0 1px #d1b98d,0 3px #59462f;color:#fff3d8;text-shadow:0 1px #4e3e2c}.btn-ghost{background:transparent;color:inherit;border-color:#9c9071;box-shadow:none;text-shadow:none}.panel{background:#f5edd9;border-color:#a39572;box-shadow:inset 0 1px #fff9e9,0 3px #8c795c;color:#403b2e}
.home-banner{background-image:linear-gradient(90deg,#302c21df,#403b2960 55%,transparent),url('../../assets/art-reference/room-style-approved.png');border-color:#a58b52}.home-content .eyebrow{color:#736440}.section-heading h2,.page-head h2,.map-heading h1{color:#51422e;text-shadow:none}.page-head p,.map-intro,.map-legend{color:#6a604b}.section-heading .btn-ghost{color:#635739}.future-feature{color:#6e644f}.import-drawer{background:#e6dac0;border-color:#a99870}.import-drawer summary{color:#554730}.home-links .btn-ghost{color:#61583d}.deck-card .deck-sub{color:#706950}.deck-name{color:#423b2c}.deck-card .tag{margin-left:6px}.inventory-character,.inventory-stats{background:#eee3c9;border-color:#b09c74;color:#453c2d}.inventory-tab-btn{background:#c2b18c;border-color:#9a875e;color:#4b422f}.inventory-tab-btn.is-active{background:#818b58;color:#fff1c9;border-color:#65703d}.inventory-item{background:#f3ead6;color:#483f2e;border-color:#b7a67c}.inventory-item:hover{background:#fff4d8}.inventory-item.is-selected{background:#fff4d8;border-color:#a38c50}.item-details{background:#e9dec3;border-color:#b09d70;color:#534932}.item-details .eyebrow{color:#877447}.item-stats{color:#5f713b}.inventory-item-desc{color:#796f53}.map-details{background:#eee3c9;color:#594d34;border-color:#ab9668;border-left-color:#7e8752}.map-scroll{border-color:#8d7445;box-shadow:0 3px #9a835d}.modal-card{color:#4b422f;background:#f5edd9}.modal-card h3{color:#55452f}.modal-card p{color:#6d614a}.modal{background:#34291eb0}.modal-card .btn-ghost{color:#635c43}.deck-stat-tile{background:#eee3c9;border-color:#b09c74}.deck-stat-label{color:#7a6c4d}.study-override-row{color:#6d614a}
.world-progress{background:#e5d8b9;color:#4b432f;border-top:2px solid #aa8c51}.world-xp-row{color:#665a3b}.world-progress progress{accent-color:#7c8e4e}.world-root .chat-input{background:transparent;color:#fff2d5;border-color:#988359}.world-root .chat-log{background:transparent;color:#fff3d9}.wardrobe-room{background:linear-gradient(#5d4f36b0,#4b422bce),url('../../assets/rooms/spawn-1.png') center/cover}.wardrobe-panel{background:#736448;border-color:#443722;outline-color:#d0b781}.wardrobe-mirror{border-color:#5a4830;outline-color:#c6a56b}
.guide-status:empty{display:none}.choice-actions{grid-template-columns:repeat(2,minmax(0,1fr))}.choice-actions button{color:#fff8ea}.choice-actions button:nth-child(1){background:#2f6fd6}.choice-actions button:nth-child(2){background:#b0472f}.choice-actions button:nth-child(3){background:#c07a1f}.choice-actions button:nth-child(4){background:#2f8a4a}.quiz-feedback{font-size:13px;color:#835939}
/* Lightweight contextual guidance: a small toast anchored bottom-center, never
   a character or portrait -- see tutorial.js. Both mountTutorialGuide and
   mountCombatTutorialGuide lay the whole line out up front (see revealText in
   tutorial.js) and reveal it word by word by fading each word in -- the
   layout never changes as words appear, unlike growing the text node
   directly, which re-wraps lines mid-reveal. */
.reveal-word{opacity:0;transition:opacity .2s ease}.reveal-word.is-visible{opacity:1}
.reveal-word-highlight{color:#3aa65a;font-weight:800}
.tutorial-toast{position:fixed;z-index:40;left:50%;bottom:76px;transform:translateX(-50%);width:min(480px,calc(100% - 32px));pointer-events:none}
.tutorial-toast-panel{background:#26221a;border:1px solid #6b5c40;border-radius:12px;box-shadow:0 10px 26px #0006;padding:16px 18px;pointer-events:auto;max-height:55vh;overflow:auto;color:#ecdfc0;text-align:left}
.tutorial-toast-panel h2{font:700 17px/1.3 Inter,system-ui,sans-serif;margin:0 0 7px;color:#f7ecc9}
.tutorial-toast-panel p{font:14px/1.5 Inter,system-ui,sans-serif;margin:0 0 12px;color:#d8cba8}
.tutorial-toast-panel .btn-small{margin:5px 5px 0 0}
.tutorial-toast-panel .link-btn{display:block;color:#a4936a;font-size:11px;margin-top:8px}
.tutorial-toast-actions{display:flex;flex-wrap:wrap;gap:8px;transition:opacity .2s,transform .2s}
.tutorial-toast-actions.is-waiting{opacity:0;visibility:hidden;transform:translateY(4px)}
.study-focus .tutorial-toast:not(.tutorial-toast-combat){display:none}
/* The one guide message that shows up outside the World view -- pinned near
   the top of the whole app shell (not the World view's own coordinate
   frame), since it's shown on the Decks page instead. */
.tutorial-toast-deck{position:fixed!important;left:50%!important;top:64px!important;bottom:auto!important;transform:translateX(-50%)!important;width:min(480px,calc(100% - 32px))!important}
/* Compact corner variant for in-combat coaching -- has to fit entirely above
   the fighters, not over them (the combat stage is a thin fixed strip, see
   COMBAT_STAGE_FRACTION in world-scene.js). */
.tutorial-toast-combat{left:12px;bottom:auto;top:12px;transform:none;width:min(300px,calc(100% - 24px))}
.tutorial-toast-combat .tutorial-toast-panel{padding:9px 13px}
.tutorial-toast-combat .tutorial-toast-panel p{margin:0;font-weight:650;font-size:13px}
.tutorial-focus-ring{position:relative!important;z-index:90!important;animation:tutorial-focus 1.05s ease-in-out infinite!important;outline:3px solid #ffd65c!important;outline-offset:4px!important;box-shadow:0 0 0 7px #ffd65c33,0 0 24px #ffe486!important}
@keyframes tutorial-focus{50%{outline-offset:8px;box-shadow:0 0 0 10px #ffd65c22,0 0 34px #ffe486}}
/* A softer "you might want this" pulse -- no hard outline, just a glow --
   for pointing at something usable rather than something to press right now. */
.tutorial-glow-ring{position:relative!important;z-index:90!important;border-radius:8px;animation:tutorial-glow 1.6s ease-in-out infinite!important;box-shadow:0 0 10px 3px #ffe486aa,0 0 22px 8px #ffd65c55!important}
@keyframes tutorial-glow{50%{box-shadow:0 0 18px 6px #ffe486cc,0 0 32px 12px #ffd65c77}}
.spaced-demo{position:relative;height:88px;width:min(390px,100%);margin:2px auto 17px;perspective:500px}.demo-card{position:absolute;top:8px;width:108px;height:60px;display:grid;place-content:center;border:2px solid #806a3f;border-radius:8px;background:#fffaf0;color:#4b3d26;font:700 11px/1.4 Inter,sans-serif;box-shadow:0 5px 10px #5c482b2c;animation:spaced-card 4.8s ease-in-out infinite}.demo-card strong{display:block;color:#657846;font-size:15px}.demo-card-one{left:0}.demo-card-two{left:31%;animation-delay:.25s;background:#e8dfc7}.demo-card-three{left:55%;animation-delay:.5s;background:#d9d7b8}.demo-card-four{right:0;animation-delay:.75s;background:#cbd3a8}
@keyframes spaced-card{0%,18%,100%{transform:translateY(0) rotate(-1deg)}9%{transform:translateY(-9px) rotate(1deg);box-shadow:0 13px 16px #5c482b36}}
@media(max-width:600px){.choice-actions{grid-template-columns:1fr}.tutorial-toast{bottom:64px;width:calc(100% - 16px)}.tutorial-toast-panel{padding:13px 15px}.tutorial-toast-panel h2{font-size:16px}.tutorial-toast-panel p{font-size:13px}.tutorial-toast-deck{top:52px!important;width:calc(100% - 16px)!important}.tutorial-toast-combat{top:8px;left:8px;width:min(240px,calc(100% - 16px))}.tutorial-toast-combat .tutorial-toast-panel{padding:7px 11px}.tutorial-toast-combat .tutorial-toast-panel p{font-size:12px}.spaced-demo{height:72px}.demo-card{width:82px;height:48px;font-size:9px}.demo-card strong{font-size:12px}}

/* Compact combat HUD and a quiet Anki-like dark reading option. */
.encounter-sheet.is-peek{background:rgba(61,51,37,.72)!important;color:#fff4dc!important;border:1px solid rgba(174,146,94,.72)!important;border-radius:9px!important;box-shadow:0 4px 14px #24190d40!important;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.encounter-sheet.is-peek .sheet-peek-actions .fight-action{background:linear-gradient(#718c53,#506b3a)!important;color:#fff7dc!important;border-color:#344c2d!important}
.encounter-sheet.is-peek .sheet-peek-actions .flee-action{background:linear-gradient(#a45b50,#793f39)!important;color:#fff1df!important;border-color:#5e302c!important}
.encounter-sheet.is-peek .sheet-portrait{background:transparent!important;border:0!important}
.sheet-footer{width:100%;align-items:center}.sheet-reveal-btn{display:block!important;width:min(100%,680px)!important;margin:12px auto 0!important}

body.dark-mode{background:#12110f;color:#e8e1d5}
body.dark-mode .app{background:#201e1a;color:#e8e1d5;box-shadow:0 0 0 2px #080807,0 15px 45px #0008}
body.dark-mode .topbar,body.dark-mode .bottomnav{background:linear-gradient(#302c26,#211e1a);border-color:#6d5d43;box-shadow:inset 0 1px #494239}
body.dark-mode .nav-item{color:#cfc4b0}body.dark-mode .nav-item.is-active{background:linear-gradient(#6e724d,#515737);color:#fff4d2;border-color:#858762}
body.dark-mode .panel,body.dark-mode .modal-card,body.dark-mode .inventory-character,body.dark-mode .inventory-stats,body.dark-mode .deck-stat-tile,body.dark-mode .map-details{background:#292620;color:#e6ddcd;border-color:#554d40;box-shadow:inset 0 1px #37332c,0 3px #090806}
body.dark-mode .modal{background:#050505c9}body.dark-mode .modal-card h3,body.dark-mode .section-heading h2,body.dark-mode .page-head h2,body.dark-mode .map-heading h1{color:#eee2ca}body.dark-mode .modal-card p,body.dark-mode .page-head p,body.dark-mode .map-intro,body.dark-mode .map-legend,body.dark-mode .study-override-row{color:#b9af9d}
body.dark-mode .text-input{background:#171613;color:#eee7dc;border-color:#555046}
body.dark-mode .import-drawer,body.dark-mode .inventory-item,body.dark-mode .item-details{background:#2d2922;color:#e6ddcd;border-color:#5b5243}body.dark-mode .inventory-item:hover,body.dark-mode .inventory-item.is-selected{background:#383227}body.dark-mode .inventory-item-desc{color:#b7ac98}
body.dark-mode .world-progress{background:#211f1b;color:#e5dccb;border-color:#61543d}body.dark-mode .world-xp-row,body.dark-mode #worldXpText{color:#bdb3a2}body.dark-mode #worldDeckCategory{color:#9f9585}
body.dark-mode .encounter-sheet.is-reading{background:rgba(18,18,19,.98)!important;color:#e7e7e7!important;border-color:#38383b!important;box-shadow:0 -4px 18px #0008!important;backdrop-filter:none;-webkit-backdrop-filter:none}
body.dark-mode .encounter-sheet.is-reading .sheet-handle:before{background:#55555a}
body.dark-mode .encounter-sheet.is-reading .sheet-card-content{background:#1c1c1e!important;color:#ededee!important;box-shadow:inset 0 0 0 1px #37373b!important}
body.dark-mode .encounter-sheet.is-reading .sheet-card-answer{color:#f3f3f3!important;border-color:#46464a!important}
body.dark-mode .encounter-sheet.is-reading .sheet-hp-label,body.dark-mode .encounter-sheet.is-reading .sheet-player-hp{color:#c5c5c7!important}
body.dark-mode .encounter-sheet.is-reading .sheet-card-status .tag{background:#303229;color:#d4dcc0;border-color:#4c5140}
body.dark-mode .encounter-sheet.is-reading .sheet-card-status .tag-new{background:#24352a;color:#bce0c3;border-color:#3b5943}
body.dark-mode .encounter-sheet.is-reading .explain-btn{color:#c3c3c7!important;border-color:#505055!important}
body.dark-mode .encounter-sheet.is-reading .sheet-reveal-btn{background:#3a4c56!important;color:#f3f3f3!important;border-color:#60717a!important}
body.dark-mode .encounter-sheet.is-reading .answer-actions button{color:#ececec;border-color:#4a4a4f;box-shadow:none}body.dark-mode .encounter-sheet.is-reading .answer-actions .a-again{background:#4b2929;color:#f0caca}body.dark-mode .encounter-sheet.is-reading .answer-actions .a-hard{background:#4b4029;color:#eadbad}body.dark-mode .encounter-sheet.is-reading .answer-actions .a-good{background:#29452e;color:#c8e4cc}body.dark-mode .encounter-sheet.is-reading .answer-actions .a-easy{background:#293b4b;color:#c9ddec}
body.dark-mode .controls-settings .control-options [aria-pressed=true]{background:#62684a;color:#fff0ce;border-color:#858963}

/* Let the study surface use the viewport width while keeping its controls
   compact and predictable above the permanent deck/XP HUD. */
.encounter-sheet.is-reading .sheet-card-content{width:min(100%,960px);max-width:none;box-sizing:border-box}
.encounter-sheet.is-reading .sheet-reveal-btn,.encounter-sheet.is-reading .answer-actions{width:min(100%,960px)!important;max-width:none!important}
.encounter-sheet.is-reading .answer-actions{grid-template-columns:repeat(4,minmax(0,1fr));gap:3px}
.encounter-sheet.is-reading .choice-actions{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.encounter-sheet.is-reading .answer-actions button{display:flex;min-width:0;min-height:52px;flex-direction:column;align-items:center;justify-content:center;padding:7px 2px 9px;border-radius:2px}
.encounter-sheet.is-reading .answer-actions small{order:-1;margin-bottom:3px;font-size:10px;line-height:1}
.card-explain-btn{display:block;margin:16px auto 0;max-width:220px}

/* Tutorial: the Decks tab to open next -- a calm gold marker, not a flashing one */
.nav-item.tutorial-nav-hint{position:relative;box-shadow:inset 0 0 0 2px #d2b67d;border-radius:10px;animation:nav-hint 1.6s ease-in-out infinite}
.nav-item.tutorial-nav-hint::after{content:"";position:absolute;top:4px;right:18%;width:10px;height:10px;border-radius:50%;background:#d2b67d;box-shadow:0 0 0 2px #292723}
@keyframes nav-hint{50%{box-shadow:inset 0 0 0 2px #d2b67d,0 0 14px #d2b67d66}}
.tutorial-toast-nav{bottom:96px}
@media (prefers-reduced-motion: reduce){.nav-item.tutorial-nav-hint{animation:none}}
/* One-time hints (src/ui/hints.js): a calm gold ring around the thing explained */
.hint-focus{outline:2px solid #d2b67d!important;outline-offset:3px;border-radius:8px;box-shadow:0 0 0 6px #d2b67d22!important;position:relative;z-index:3}
.hint-toast .tutorial-toast-actions{align-items:center}
.hint-toast .link-btn{margin-top:0!important}

/* ---- Two voices (plan/cohesion-pass C7) ---- */
/* GAME INFO (the tutorial, hints): a pale weathered parchment note */
.tutorial-toast-panel{background:#e2d4b1!important;color:#3a2f22!important;border:2px solid #6d5a3e!important;box-shadow:0 10px 26px #0008,inset 0 0 0 3px #efe4c8!important;position:relative}
.tutorial-toast-panel h2{color:#2e251b!important;font-family:BreeSerif,Georgia,serif!important}
.tutorial-toast-panel p,.tutorial-toast-panel .guide-status{color:#3a2f22!important}
.tutorial-toast-panel .link-btn{color:#6d5a3e!important}
/* A CHARACTER SPEAKING: dark wooden plaque, portrait socket, their name in the nametag green */
.speech-box{position:fixed;z-index:45;left:50%;bottom:96px;transform:translateX(-50%);width:min(640px,calc(100% - 24px));display:flex;gap:16px;align-items:flex-start;padding:16px 18px 14px;background:#3a3026;border:3px solid #1f1a14;border-radius:6px;box-shadow:0 12px 30px #000a,inset 0 0 0 2px #5a4a38,inset 0 3px 0 #6b5842;color:#eee5d2;animation:speech-in .18s ease-out}
.speech-box.is-leaving{opacity:0;transform:translate(-50%,6px);transition:opacity .18s,transform .18s}
.speech-portrait{flex:0 0 76px;height:76px;border-radius:50%;background:#262019;border:4px solid #7a6a4f;box-shadow:inset 0 3px 6px #0009,0 0 0 2px #1f1a14;overflow:hidden;display:grid;place-items:end center}
.speech-portrait img{width:100%;height:100%;object-fit:cover;object-position:50% 20%}
.speech-body{flex:1;min-width:0}
.speech-name{font:700 15px/1 NunitoSans,system-ui,sans-serif;color:#a3d68f;text-shadow:0 1px 0 #000,1px 0 #000,-1px 0 #000,0 -1px 0 #000;margin:2px 0 8px}
.speech-text{margin:0 0 12px;font:500 16.5px/1.5 NunitoSans,system-ui,sans-serif;color:#eee5d2}
.speech-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
@keyframes speech-in{from{opacity:0;transform:translate(-50%,8px)}}
@media(max-width:600px){.speech-box{bottom:84px;padding:12px}.speech-portrait{flex-basis:56px;height:56px}.speech-text{font-size:15.5px}}

/* ---- Occasions: each moment its own look, sized by how much it matters (plan/cohesion-pass C9) ---- */
/* info: a quiet line under the top bar -- no art, no glow, no fanfare */
.reward-banner[data-occasion=info]{top:84px!important;width:auto!important;max-width:min(460px,calc(100vw - 32px));padding:9px 16px!important;background:#2f2b25!important;border:1px solid #756a55!important;border-radius:6px;box-shadow:0 6px 16px #0007!important;text-align:left;animation:occasion-drop .22s ease-out}
.reward-banner[data-occasion=info]::before,.reward-banner[data-occasion=info] .reward-art{display:none}
.reward-banner[data-occasion=info] h3{font:700 15px/1.3 NunitoSans,system-ui,sans-serif!important;color:#eee5d2!important;text-shadow:none!important;margin:0!important}
.reward-banner[data-occasion=info] p{font:500 13px/1.4 NunitoSans,system-ui,sans-serif!important;color:#c2b8a4!important;text-shadow:none!important;margin:2px 0 0!important;max-width:none}
.reward-banner[data-occasion=info] p:empty{display:none}
/* small moments (room cleared, streak, a mastered card): a little stone tablet with an emblem */
.reward-banner:is([data-occasion=room],[data-occasion=streak],[data-occasion=mastered]){top:84px!important;width:auto!important;max-width:min(420px,calc(100vw - 32px));display:grid;grid-template-columns:40px 1fr;column-gap:12px;align-items:center;padding:10px 16px 10px 12px!important;background:#3a3732!important;border:2px solid #5c574d!important;border-radius:4px;box-shadow:0 6px 18px #0008,inset 0 2px 0 #4e4a42!important;text-align:left;animation:occasion-drop .26s ease-out}
.reward-banner:is([data-occasion=room],[data-occasion=streak],[data-occasion=mastered])::before{display:none}
.reward-banner:is([data-occasion=room],[data-occasion=streak],[data-occasion=mastered]) .reward-art{grid-row:1/3;width:40px!important;height:40px!important;margin:0!important}
.reward-banner:is([data-occasion=room],[data-occasion=streak],[data-occasion=mastered]) .reward-art::before{display:none}
.reward-banner:is([data-occasion=room],[data-occasion=streak],[data-occasion=mastered]) .reward-art>.ui-icon{width:34px!important;height:34px!important;filter:drop-shadow(0 2px 0 #0008)!important}
.reward-banner:is([data-occasion=room],[data-occasion=streak],[data-occasion=mastered]) h3{font:400 18px/1.2 BreeSerif,Georgia,serif!important;color:#e6ddc8!important;text-shadow:0 1px 0 #000!important;margin:0!important}
.reward-banner:is([data-occasion=room],[data-occasion=streak],[data-occasion=mastered]) p{font:500 13px/1.4 NunitoSans,system-ui,sans-serif!important;color:#c2b8a4!important;text-shadow:none!important;margin:2px 0 0!important;max-width:none}
.reward-banner[data-occasion=streak]{border-color:#8a6f45!important}
.reward-banner[data-occasion=streak] h3{color:#e7c98f!important}
/* quest done, all cards done: an unrolled scroll -- a real moment, but not a level */
.reward-banner:is([data-occasion=quest],[data-occasion=dueClear]){top:16%!important;width:min(420px,calc(100vw - 32px))!important;padding:16px 28px 18px!important;background:#e2d4b1!important;border:2px solid #6d5a3e!important;border-left:14px solid #cdb98f!important;border-right:14px solid #cdb98f!important;border-radius:3px;box-shadow:0 12px 28px #000a!important}
.reward-banner:is([data-occasion=quest],[data-occasion=dueClear])::before{display:none}
.reward-banner:is([data-occasion=quest],[data-occasion=dueClear]) .reward-art{width:56px!important;height:56px!important;margin-bottom:4px!important}
.reward-banner:is([data-occasion=quest],[data-occasion=dueClear]) .reward-art::before{display:none}
.reward-banner:is([data-occasion=quest],[data-occasion=dueClear]) .reward-art>.ui-icon{width:50px!important;height:50px!important;filter:drop-shadow(0 2px 0 #0005)!important}
.reward-banner:is([data-occasion=quest],[data-occasion=dueClear]) h3{font:400 24px/1.2 BreeSerif,Georgia,serif!important;color:#2e251b!important;text-shadow:none!important;margin:0 0 4px!important}
.reward-banner:is([data-occasion=quest],[data-occasion=dueClear]) p{color:#4a3d2c!important;text-shadow:none!important;font-weight:600!important}
/* an area freed (a boss down): big like a level, but a dark, blood-red stone -- a victory, not growth */
.reward-banner[data-occasion=area]::before{background:radial-gradient(ellipse,#2a1414e6 0%,#231212c8 30%,transparent 70%)!important}
.reward-banner[data-occasion=area] h3{color:#f0d6b0!important;text-shadow:0 2px 2px #1a0d0d,0 0 18px #c9656b55!important}
.reward-banner[data-occasion=area] .reward-art::before{border-color:#c9656b66!important;background:radial-gradient(circle,#c9656b44,transparent 65%)!important}
/* level up keeps the full gold moment (theme.css) -- the biggest thing that happens */
@keyframes occasion-drop{from{opacity:0;transform:translate(-50%,-8px)}}

/* A room loading slowly (app.js showRoomWait): a ring of runes turns round a small flame */
.room-wait{position:absolute;inset:0;z-index:30;display:grid;place-content:center;justify-items:center;gap:14px;background:rgba(18,16,13,.55);opacity:0;visibility:hidden;transition:opacity .3s,visibility 0s linear .3s;pointer-events:none}
.room-wait.is-shown{opacity:1;visibility:visible;transition:opacity .3s}
.room-wait p{margin:0;font:400 16px/1 BreeSerif,Georgia,serif;color:#e6ddc8;letter-spacing:.06em;text-shadow:0 1px 0 #000}
.room-wait-emblem{position:relative;width:96px;height:96px;border-radius:50%;background:#2f2b25;border:3px solid #1d1a15;box-shadow:inset 0 0 0 3px #5c574d,0 8px 20px #0009}
.room-wait-ring{position:absolute;inset:10px;border-radius:50%;animation:room-wait-turn 6s linear infinite;
  background:no-repeat center/contain url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Ccircle cx='50' cy='50' r='40' fill='none' stroke='%23756a55' stroke-width='3' stroke-dasharray='6 5'/%3E%3Cg stroke='%23d2b67d' stroke-width='3.2' stroke-linecap='round' fill='none'%3E%3Cpath d='M50 4v10M46 8h8'/%3E%3Cpath d='M92 46l-8 8M84 46l8 8'/%3E%3Cpath d='M50 86v10M45 91l5-5 5 5'/%3E%3Cpath d='M4 50h10M8 45v10'/%3E%3C/g%3E%3C/svg%3E")}
.room-wait-flame{position:absolute;left:50%;top:50%;width:18px;height:28px;margin:-16px 0 0 -9px;border-radius:50% 50% 45% 45%/60% 60% 40% 40%;background:#e0893f;box-shadow:inset 0 -6px 0 #f3c66b,0 0 18px #e0893f66;transform-origin:50% 100%;animation:loading-flicker 1s ease-in-out infinite}
@keyframes room-wait-turn{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion: reduce){.room-wait-ring,.room-wait-flame{animation:none}}

/* The music button (src/ui/music.js): a note; crossed out when off */
.music-btn .music-off-slash{display:none}
.music-btn.is-off svg{opacity:.55}
.music-btn.is-off .music-off-slash{display:inline}
