body{
  min-width:320px;
  overflow-x:hidden;
  background:var(--navy-950);
  color:var(--cream-100);
  font-family:var(--font-body);
  line-height:1.5;
}
body::before{
  content:"";
  position:fixed;
  inset:0;
  pointer-events:none;
  z-index:9999;
  opacity:.08;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.35'/%3E%3C/svg%3E");
}
button,input,select,textarea{font-family:var(--font-body)}
button{cursor:pointer}
button:disabled{cursor:not-allowed;filter:grayscale(.35);opacity:.48}
:focus-visible{outline:0;box-shadow:var(--ring)!important}
.skip-link{position:fixed;left:1rem;top:-5rem;z-index:10000;background:var(--cream-50);color:var(--ink);padding:.75rem 1rem;border-radius:.5rem;text-decoration:none;font-weight:800}
.skip-link:focus{top:1rem}
.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
.loading-screen{min-height:100vh;display:grid;place-content:center;gap:1rem;text-align:center;background:radial-gradient(circle at 50% 40%,#164777,var(--navy-950) 58%)}
.loading-rune{font-size:4rem;color:var(--gold-300);filter:drop-shadow(0 0 18px #f7d675);animation:spin 2s linear infinite}
.screen{min-height:100vh;position:relative;isolation:isolate}
.menu-screen{
  display:grid;
  place-items:center;
  padding:clamp(1rem,3vw,3rem);
  background:linear-gradient(rgb(3 14 28 / .08),rgb(3 14 28 / .35)),url("../assets/backgrounds/tabletop-evervale.png") center/cover fixed;
}
.menu-screen::before{content:"";position:absolute;inset:0;z-index:-1;background:radial-gradient(ellipse at 50% 36%,transparent 0 26%,rgb(2 10 22 / .2) 60%,rgb(2 8 18 / .66));pointer-events:none}
.menu-shell{width:min(1120px,100%);display:grid;grid-template-columns:minmax(350px,590px) minmax(280px,360px);align-items:center;justify-content:center;gap:clamp(1rem,4vw,5rem);min-height:calc(100vh - 3rem)}
.brand-cluster{text-align:center;align-self:start;padding-top:clamp(.4rem,3vh,2.5rem)}
.game-logo{width:min(590px,92vw);margin-inline:auto;filter:drop-shadow(0 12px 18px rgb(0 0 0 / .62));animation:logo-float 6s ease-in-out infinite}
.menu-tagline{display:inline-flex;align-items:center;gap:.75rem;margin-top:-.4rem;padding:.45rem 1.25rem;border:1px solid rgb(247 214 117 / .55);border-radius:999px;background:rgb(6 20 38 / .84);box-shadow:var(--shadow-sm);color:var(--cream-100);font-family:var(--font-display);font-size:clamp(.92rem,1.6vw,1.1rem);letter-spacing:.04em}
.menu-tagline::before,.menu-tagline::after{content:"✦";color:var(--gold-300);font-size:.8em}
.menu-card{position:relative;padding:1.05rem;border:2px solid var(--gold-500);border-radius:var(--radius-lg);background:linear-gradient(145deg,rgb(13 42 74 / .94),rgb(6 20 38 / .96));box-shadow:inset 0 0 0 3px rgb(246 201 91 / .12),var(--shadow-lg)}
.menu-card::before,.menu-card::after{content:"◆";position:absolute;color:var(--gold-300);background:var(--navy-900);padding:.1rem .35rem;top:50%;transform:translateY(-50%)}
.menu-card::before{left:-.7rem}.menu-card::after{right:-.7rem}
.menu-list{display:grid;gap:.52rem}
.fantasy-button,.choice-button,.tab-button,.icon-button,.pill-button{
  position:relative;
  color:var(--cream-50);
  border:1px solid rgb(247 214 117 / .4);
  background:linear-gradient(180deg,#174d79,#0d3155);
  border-radius:var(--radius-sm);
  box-shadow:inset 0 1px rgb(255 255 255 / .13),0 3px 0 #06182c,var(--shadow-sm);
  transition:transform .16s ease,filter .16s ease,border-color .16s ease;
}
.fantasy-button:hover,.choice-button:hover,.tab-button:hover,.icon-button:hover,.pill-button:hover{transform:translateY(-2px);filter:brightness(1.13);border-color:var(--gold-300)}
.fantasy-button:active,.choice-button:active,.tab-button:active,.icon-button:active,.pill-button:active{transform:translateY(1px);box-shadow:inset 0 1px rgb(255 255 255 / .08),0 1px 0 #06182c}
.fantasy-button{width:100%;min-height:3.05rem;display:grid;grid-template-columns:2.3rem 1fr auto;align-items:center;gap:.65rem;padding:.55rem .85rem;text-align:left;font-weight:800;letter-spacing:.02em}
.fantasy-button.primary{background:linear-gradient(180deg,#b4652e,#7d361f);border-color:var(--gold-300)}
.button-icon{font-size:1.28rem;filter:drop-shadow(0 2px 1px rgb(0 0 0 / .5));text-align:center}
.button-hint{font-size:.66rem;color:var(--gold-300);border:1px solid rgb(247 214 117 / .38);border-radius:.35rem;padding:.12rem .35rem;background:rgb(0 0 0 / .18)}
.menu-footer{position:absolute;left:1rem;right:1rem;bottom:.7rem;display:flex;justify-content:space-between;align-items:end;gap:1rem;color:rgb(255 250 240 / .68);font-size:.74rem;text-shadow:0 2px 3px #000}
.version-mark{letter-spacing:.08em;text-transform:uppercase}
.particle-field{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:-1}
.particle{position:absolute;width:4px;height:4px;border-radius:50%;background:var(--gold-300);box-shadow:0 0 9px var(--gold-300);animation:drift var(--duration,8s) ease-in-out infinite;animation-delay:var(--delay,0s);left:var(--x);top:var(--y)}

/* Shared book panels and page screens */
.page-screen{min-height:100vh;padding:clamp(1rem,3vw,2.5rem);background:radial-gradient(circle at 50% -10%,#19527d 0,var(--navy-900) 42%,var(--navy-950) 100%)}
.page-screen::before{content:"";position:fixed;inset:0;z-index:-1;opacity:.14;background-image:linear-gradient(30deg,#1d6d74 12%,transparent 12.5%,transparent 87%,#1d6d74 87.5%),linear-gradient(150deg,#1d6d74 12%,transparent 12.5%,transparent 87%,#1d6d74 87.5%);background-size:70px 120px}
.page-header{width:min(1180px,100%);margin:0 auto 1rem;display:flex;align-items:center;gap:1rem}
.page-heading{flex:1}
.eyebrow{color:var(--gold-300);font-size:.72rem;font-weight:900;text-transform:uppercase;letter-spacing:.14em}
h1,h2,h3,h4{font-family:var(--font-display);line-height:1.12}
.page-heading h1{font-size:clamp(1.8rem,4vw,3rem);color:var(--cream-50);text-shadow:0 3px 0 #081326}
.icon-button{width:2.75rem;height:2.75rem;display:grid;place-items:center;font-size:1.15rem;flex:0 0 auto}
.book-panel{position:relative;width:min(1180px,100%);margin-inline:auto;color:var(--ink);background:linear-gradient(95deg,#e1c384,#f9ebc4 9%,#f4e2b9 49.5%,#d5b06b 50%,#f6e5bd 51%,#f9ebc4 91%,#dfc080);border:3px solid #b07a36;border-radius:var(--radius-lg);box-shadow:inset 0 0 35px rgb(116 70 24 / .22),var(--shadow-lg);padding:clamp(1.1rem,3vw,2.3rem)}
.book-panel::after{content:"";position:absolute;left:50%;top:1rem;bottom:1rem;width:2px;background:linear-gradient(transparent,rgb(112 70 28 / .24),transparent);pointer-events:none}
.panel{border:1px solid rgb(247 214 117 / .32);border-radius:var(--radius-md);background:linear-gradient(145deg,rgb(15 52 87 / .96),rgb(7 27 51 / .97));box-shadow:inset 0 1px rgb(255 255 255 / .08),var(--shadow-md)}
.empty-state{text-align:center;padding:clamp(2rem,7vw,5rem) 1rem;color:var(--ink)}
.empty-icon{font-size:3.5rem;margin-bottom:.75rem;filter:drop-shadow(0 3px 2px rgb(0 0 0 / .2))}
.empty-state p{max-width:45rem;margin:.65rem auto 1.2rem;color:#4b3c2a}
.pill-button{padding:.62rem 1rem;font-weight:800}
.pill-button.gold{color:#23170a;background:linear-gradient(#ffe38b,#d89b31);border-color:#8b531a}
.pill-button.danger{background:linear-gradient(#c64f54,#7f2434)}
.pill-button.subtle{background:rgb(8 29 54 / .55)}
.grid-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:1rem}
.info-card{position:relative;padding:1rem;border:2px solid rgb(91 55 24 / .24);border-radius:var(--radius-md);background:rgb(255 250 232 / .55);box-shadow:0 4px 12px rgb(79 49 18 / .12)}
.info-card h3{font-size:1.25rem}.info-card p{font-size:.88rem;color:#584630;margin-top:.35rem}
.badge{display:inline-flex;align-items:center;gap:.28rem;padding:.2rem .48rem;border-radius:999px;background:var(--navy-800);color:var(--cream-50);font-size:.68rem;font-weight:800;letter-spacing:.03em}
.badge.gold{background:#9b5e1c}.badge.green{background:#347747}.badge.red{background:#993546}.badge.purple{background:#65439b}.badge.ice{background:#286a86}
.divider{height:1px;background:linear-gradient(90deg,transparent,rgb(104 67 30 / .38),transparent);margin:1rem 0}
.form-field{display:grid;gap:.35rem}.form-field label{font-size:.76rem;font-weight:900;text-transform:uppercase;letter-spacing:.08em;color:#614722}
.form-field input,.form-field select,.form-field textarea{width:100%;color:var(--ink);background:#fff9e9;border:2px solid #b98645;border-radius:.55rem;padding:.72rem .8rem;box-shadow:inset 0 2px 5px rgb(83 48 17 / .14)}
.form-field input:focus,.form-field select:focus,.form-field textarea:focus{outline:0;border-color:#195d82;box-shadow:0 0 0 3px rgb(24 101 145 / .2)}
.small-note{font-size:.75rem;color:#604d37}

/* Character creation */
.creator-layout{display:grid;grid-template-columns:minmax(260px,.8fr) minmax(480px,1.45fr);gap:1.5rem}
.creator-form{display:grid;align-content:start;gap:1rem}
.class-tabs{display:grid;grid-template-columns:repeat(2,1fr);gap:.55rem}
.class-tab{position:relative;padding:.75rem .6rem;border:2px solid #ad7d40;border-radius:.7rem;background:rgb(255 249 230 / .65);color:var(--ink);font-weight:900;text-align:center;transition:.18s ease}
.class-tab:hover{transform:translateY(-2px);background:#fff8df}.class-tab.selected{background:var(--navy-800);color:var(--cream-50);border-color:var(--gold-400);box-shadow:0 4px 0 #6d471d}
.class-tab .class-glyph{display:block;font-size:1.65rem;margin-bottom:.2rem}
.character-preview{display:grid;grid-template-columns:minmax(190px,.7fr) 1.3fr;gap:1.2rem;padding:1rem;border:2px solid rgb(91 55 24 / .25);border-radius:var(--radius-md);background:rgb(255 250 232 / .45)}
.portrait-card{position:relative;min-height:320px;overflow:hidden;border:3px solid #b17b35;border-radius:1rem;background:var(--portrait-bg,linear-gradient(#3b87a4,#d5e4aa));box-shadow:inset 0 0 0 3px rgb(255 255 255 / .25),0 8px 18px rgb(78 45 18 / .25)}
.portrait-card::before{content:"";position:absolute;inset:38% -10% -18%;border-radius:50% 50% 0 0;background:var(--portrait-land,#315f43);box-shadow:0 -12px 30px rgb(0 0 0 / .18)}
.portrait-card::after{content:var(--portrait-symbol,"⚔");position:absolute;left:50%;top:46%;transform:translate(-50%,-50%);display:grid;place-items:center;width:7.5rem;height:7.5rem;border:5px solid #f1cd6b;border-radius:50% 50% 45% 45%;background:linear-gradient(145deg,var(--portrait-accent,#2b6092),#122947);color:white;font-size:4.25rem;text-shadow:0 4px 0 rgb(0 0 0 / .3);box-shadow:0 12px 0 rgb(0 0 0 / .16),0 0 0 9px rgb(9 28 48 / .25)}
.portrait-card.knight{--portrait-bg:linear-gradient(#5a9ec3,#d8e6c5);--portrait-land:#315e45;--portrait-accent:#557e9f;--portrait-symbol:"♜"}
.portrait-card.ranger{--portrait-bg:linear-gradient(#6bb9a1,#e3d090);--portrait-land:#336342;--portrait-accent:#3e7a52;--portrait-symbol:"➶"}
.portrait-card.mage{--portrait-bg:linear-gradient(#6553a0,#d59ed2);--portrait-land:#362f64;--portrait-accent:#714db3;--portrait-symbol:"✦"}
.portrait-card.rogue{--portrait-bg:linear-gradient(#54627c,#d2996e);--portrait-land:#433549;--portrait-accent:#6f3c62;--portrait-symbol:"◆"}
.portrait-caption{position:absolute;z-index:2;left:.7rem;right:.7rem;bottom:.7rem;padding:.55rem;border:1px solid rgb(247 214 117 / .55);border-radius:.5rem;background:rgb(6 20 38 / .88);color:var(--cream-50);text-align:center;font-family:var(--font-display);font-weight:800}
.preview-details{display:grid;align-content:start;gap:.75rem}.preview-details h2{font-size:2rem;color:#283a4c}.playstyle{font-size:.83rem;padding:.65rem;border-left:4px solid var(--teal-600);background:rgb(255 255 255 / .34)}
.stat-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.42rem .7rem}.stat-row{display:grid;grid-template-columns:1fr auto;gap:.5rem;align-items:center;font-size:.78rem;font-weight:800}.stat-pips{display:flex;gap:2px}.stat-pip{width:9px;height:9px;transform:rotate(45deg);background:#d2b274;border:1px solid #8e652c}.stat-pip.filled{background:var(--teal-600)}
.ability-list{display:grid;gap:.4rem}.ability-chip{display:grid;grid-template-columns:2rem 1fr;gap:.5rem;padding:.45rem;border:1px solid rgb(99 63 25 / .25);border-radius:.5rem;background:rgb(255 255 255 / .3);font-size:.75rem}.ability-chip strong{display:block;color:#2b3d4e}.ability-chip span:first-child{font-size:1.25rem;text-align:center}

/* Campaign select and world map */
.campaign-select-layout{display:grid;grid-template-columns:minmax(17rem,.68fr) minmax(0,1.32fr);grid-template-areas:"map browser" "map detail";align-items:start;gap:1.25rem}
.campaign-browser{grid-area:browser;min-width:0;display:grid;gap:.8rem}.campaign-browser-heading{display:flex;align-items:end;justify-content:space-between;gap:1rem;padding:.15rem .1rem}.campaign-browser-heading .eyebrow,.campaign-detail .eyebrow{color:#714b1d}.campaign-browser-heading h2{font-size:clamp(1.65rem,3vw,2.25rem);color:#233d53}.campaign-browser-heading>p{max-width:25rem;color:#5f4a31;font-family:var(--font-story);font-size:1.02rem;line-height:1.25;text-align:right}
.campaign-card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(12.5rem,100%),1fr));align-items:stretch;gap:.72rem}.campaign-card{min-width:0;overflow:hidden;display:grid;grid-template-rows:1fr auto;border:2px solid #a17137;border-top:5px solid var(--accent,#4e9560);border-radius:.85rem;background:#ead3a2;box-shadow:0 5px 14px rgb(75 43 16 / .16);transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}.campaign-card.selected{border-color:var(--accent,#4e9560);box-shadow:0 0 0 3px rgb(255 250 232 / .72),0 8px 20px rgb(63 39 14 / .25);transform:translateY(-3px)}.campaign-card:focus-within{box-shadow:0 0 0 3px #fff5ca,0 0 0 6px #173955,0 8px 20px rgb(63 39 14 / .25)}
.campaign-card-button{min-width:0;width:100%;height:100%;display:grid;grid-template-rows:auto 1fr;padding:0;border:0;border-radius:0;background:#fff8df;color:var(--ink);text-align:left}.campaign-card-button:focus-visible{position:relative;z-index:2;border-radius:.35rem}.campaign-card-art-frame{display:block;aspect-ratio:5/3;overflow:hidden;background:#17344c}.campaign-card-art{width:100%;height:100%;object-fit:cover;transition:transform .22s ease,filter .22s ease}.campaign-card-button:hover .campaign-card-art,.campaign-card-button:focus-visible .campaign-card-art{transform:scale(1.025);filter:saturate(1.06)}
.campaign-card-info{min-width:0;display:grid;align-content:start;gap:.22rem;padding:.72rem .78rem .78rem;border-top:2px solid #b9823f;background:#fff8df}.campaign-card-region{color:#725126;font-size:.68rem;font-weight:900;letter-spacing:.1em;line-height:1.25;text-transform:uppercase}.campaign-card-title{color:#203c53;font-family:var(--font-display);font-size:clamp(1.2rem,2vw,1.48rem);font-weight:900;line-height:1.05}.campaign-card-subtitle{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2;color:#5a4630;font-family:var(--font-story);font-size:1rem;line-height:1.22}.campaign-card-meta{display:flex;flex-wrap:wrap;gap:.28rem .5rem;margin-top:.22rem;color:#513e29;font-size:.7rem;font-weight:800}.campaign-card-meta>span:not(:last-child)::after{content:" •";color:#9c7137}
.campaign-card-footer{display:grid;gap:.4rem;padding:.62rem .72rem .7rem;border-top:1px solid #ad7a3e;background:#ead3a2}.campaign-card-state,.campaign-detail-progress>div:first-child{display:flex;align-items:center;justify-content:space-between;gap:.5rem;color:#4e3a24;font-size:.72rem;font-weight:900}.campaign-card-state strong,.campaign-detail-progress strong{color:#173e59}.campaign-progress-track{height:.55rem;overflow:hidden;border:1px solid #77542c;border-radius:999px;background:#bfa77b}.campaign-progress-track>span{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--teal-600),var(--green-400));transition:width .3s ease}.campaign-card-footline{display:flex;align-items:center;justify-content:space-between;gap:.45rem;color:#5b452c;font-size:.68rem;font-weight:800}.campaign-card-cta{flex:0 0 auto;padding:.42rem .7rem;font-size:.72rem}
.campaign-detail{grid-area:detail;min-width:0;overflow:hidden;display:grid;grid-template-columns:1fr;border:2px solid #95642d;border-top:5px solid var(--accent,#4e9560);border-radius:1rem;background:#fff7dc;box-shadow:0 8px 20px rgb(77 46 17 / .2)}.campaign-detail-art-frame{min-height:0;aspect-ratio:16/9;overflow:hidden;background:#17344c}.campaign-detail-art{width:100%;height:100%;object-fit:cover}.campaign-detail-copy{min-width:0;display:grid;align-content:start;gap:.8rem;padding:1rem}.campaign-detail-header{display:flex;align-items:start;justify-content:space-between;gap:.8rem}.campaign-detail-header h2{color:#203c53;font-size:clamp(1.65rem,3vw,2.25rem)}.campaign-detail-subtitle{margin-top:.12rem;color:#654d31;font-family:var(--font-story);font-size:1.08rem;line-height:1.25}.campaign-detail-state{flex:0 0 auto;padding:.25rem .5rem;border:1px solid #785429;border-radius:999px;background:#173e59;color:#fff8e7;font-size:.67rem;font-weight:900}.campaign-detail-state.current{background:#286a86}.campaign-detail-state.completed{background:#347747}
.campaign-detail-sections{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.55rem}.campaign-detail-sections section{padding:.62rem .7rem;border-left:4px solid var(--accent,#4e9560);background:#f4e3b8}.campaign-detail-sections h3{color:#29465c;font-size:1.05rem}.campaign-detail-sections p{margin-top:.16rem;color:#503e29;font-family:var(--font-story);font-size:1.02rem;line-height:1.3}.campaign-detail-facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.42rem}.campaign-detail-facts>div{min-width:0;padding:.48rem .55rem;border:1px solid #c09a62;border-radius:.48rem;background:#fffdf1}.campaign-detail-facts dt{color:#755631;font-size:.6rem;font-weight:900;letter-spacing:.06em;text-transform:uppercase}.campaign-detail-facts dd{overflow-wrap:anywhere;color:#213e55;font-family:var(--font-story);font-size:.95rem;font-weight:800;line-height:1.15}.campaign-detail-facts>div:last-child{grid-column:1/-1}.campaign-detail-progress{display:grid;gap:.3rem}.campaign-detail-cta{justify-self:start}
.world-map{grid-area:map;position:relative;align-self:start;min-height:620px;overflow:hidden;border:3px solid #93602b;border-radius:1rem;background:radial-gradient(circle at 55% 45%,#7bc083 0 18%,#3d8d68 19% 35%,#2d7180 36% 54%,#163c59 55%);box-shadow:inset 0 0 55px rgb(4 20 36 / .46)}
.world-map::before{content:"";position:absolute;inset:8%;border-radius:48% 44% 50% 40%;background:radial-gradient(circle at 48% 43%,#9dcc68 0 23%,transparent 24%),radial-gradient(circle at 44% 4%,#dff4f4 0 20%,transparent 21%),radial-gradient(circle at 82% 58%,#d77a3d 0 25%,transparent 26%),radial-gradient(circle at 25% 66%,#3d9b62 0 25%,transparent 26%),radial-gradient(circle at 44% 92%,#d9bd6c 0 18%,transparent 19%);filter:drop-shadow(0 14px 10px rgb(0 0 0 / .25))}
.map-region{position:absolute;left:var(--x);top:var(--y);transform:translate(-50%,-50%);width:clamp(7rem,17vw,11rem);padding:.55rem .65rem;border:2px solid var(--region-accent,var(--gold-300));border-radius:.7rem;background:rgb(7 27 51 / .91);color:white;box-shadow:0 5px 0 rgb(0 0 0 / .25);text-align:left;transition:.18s ease}
.map-region:hover{transform:translate(-50%,-55%);filter:brightness(1.12)}.map-region.selected-region{box-shadow:0 0 0 3px #fff7d4,0 0 0 6px var(--region-accent,var(--gold-300)),0 5px 0 rgb(0 0 0 / .25)}.map-region strong{display:block;font-family:var(--font-display)}.map-region small{display:block;color:rgb(255 255 255 / .72);font-size:.65rem}.map-region.locked{filter:grayscale(.8);opacity:.68}.campaign-meta{display:flex;flex-wrap:wrap;gap:.35rem;margin:.55rem 0}

/* Modals, notifications, settings */
.modal-backdrop{position:fixed;z-index:5000;inset:0;display:grid;place-items:center;padding:1rem;background:rgb(2 9 19 / .78);backdrop-filter:blur(5px);animation:fade-in .16s ease}
.modal-backdrop:has(.dice-roll-panel){z-index:7100}
.modal-card{width:min(680px,100%);max-height:min(90vh,850px);overflow:auto;color:var(--ink);border:3px solid var(--gold-500);border-radius:var(--radius-lg);background:linear-gradient(100deg,#e3c787,#faecc7 12%,#f5dfad 88%,#d4ad67);box-shadow:inset 0 0 30px rgb(111 66 24 / .18),var(--shadow-lg);animation:card-in .22s ease}
.modal-card:has(.dice-roll-panel){max-height:min(96vh,900px)}
.modal-card.wide{width:min(980px,100%)}.modal-header{position:sticky;top:0;z-index:2;display:flex;align-items:center;gap:1rem;padding:1rem 1.2rem;color:var(--cream-50);background:linear-gradient(90deg,var(--navy-800),var(--navy-900));border-bottom:2px solid var(--gold-500)}.modal-header h2{flex:1}.modal-body{padding:1.2rem}.modal-actions{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:.6rem;margin-top:1rem}
.notification-stack{position:fixed;z-index:7000;right:1rem;top:1rem;width:min(360px,calc(100vw - 2rem));display:grid;gap:.6rem;pointer-events:none}.toast{position:relative;overflow:hidden;display:grid;grid-template-columns:2.5rem 1fr;gap:.65rem;padding:.75rem;border:2px solid var(--gold-400);border-radius:.75rem;background:linear-gradient(145deg,#103b62,#071d36);box-shadow:var(--shadow-lg);animation:toast-in .35s ease;color:var(--cream-50)}.toast::after{content:"";position:absolute;left:0;right:0;bottom:0;height:3px;background:var(--gold-300);animation:toast-timer var(--toast-time,4s) linear forwards}.toast-icon{font-size:1.55rem;display:grid;place-items:center}.toast-title{display:block;color:var(--gold-300);font-size:.72rem;text-transform:uppercase;letter-spacing:.08em}.toast-text{display:block;font-size:.85rem}
.toast-source{display:block;margin-top:.18rem;color:rgb(255 255 255 / .62);font-size:.65rem}.major-reward-toast{border-color:#ffe38a;background:radial-gradient(circle at 12% 40%,#765219,#173a5a 52%,#071d36);box-shadow:0 0 24px rgb(255 217 112 / .42),var(--shadow-lg)}.major-reward-toast .toast-icon{animation:pulse-glow 1s ease-in-out infinite}.major-reward-panel{position:relative;overflow:hidden;text-align:center}.major-reward-art{position:relative;z-index:1;width:11rem;aspect-ratio:1;margin:.2rem auto .8rem;padding:.6rem;border:4px double #b4771f;border-radius:50%;background:radial-gradient(circle,#fff8d6,#eacb85);box-shadow:0 0 0 10px rgb(255 225 133 / .2),0 12px 32px rgb(69 39 13 / .3);animation:reward-reveal-pulse .7s ease}.major-reward-art img{width:100%;height:100%;object-fit:contain}.major-reward-burst{position:absolute;left:50%;top:4.2rem;transform:translate(-50%,-50%);color:#d79d31;font-size:18rem;line-height:1;opacity:.12;animation:spin 18s linear infinite}.major-reward-panel h2{color:#213f59;font-size:2rem}
.reward-source{margin:.45rem auto;color:#6b4c25;font-size:.78rem}.reward-stat-preview{position:relative;z-index:1;margin:1rem auto 0;padding:.75rem;border:1px solid rgb(104 67 30 / .3);border-radius:.7rem;background:rgb(255 250 232 / .58);text-align:left}.reward-stat-preview>.eyebrow{color:#785020}.reward-stat-preview>.small-note{margin:.12rem 0 .55rem}.reward-stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:.4rem}.reward-stat{display:grid;padding:.45rem;border:1px solid rgb(104 67 30 / .2);border-radius:.5rem;background:rgb(255 255 255 / .4);color:#55442f}.reward-stat small{font-size:.57rem;font-weight:900;text-transform:uppercase;letter-spacing:.06em}.reward-stat strong{font-size:.85rem}.reward-stat>span{font-size:.62rem;color:#6c583d}.major-reward-actions{align-items:center;justify-content:center}.reward-equipped{padding:.42rem .7rem;border:1px solid #49815a;border-radius:999px;background:#e0f0d7;color:#265f39;font-size:.72rem;font-weight:900}
.settings-list{display:grid;gap:.9rem}.setting-row{display:grid;grid-template-columns:minmax(150px,1fr) minmax(170px,1.3fr);align-items:center;gap:1rem;padding-bottom:.75rem;border-bottom:1px solid rgb(91 55 24 / .2)}.setting-row label>strong{display:block}.setting-row label>small{display:block;color:#66523a}.setting-control{display:flex;align-items:center;gap:.6rem}.setting-control input[type="range"]{width:100%;accent-color:var(--teal-600)}.toggle{position:relative;width:3.2rem;height:1.7rem;border-radius:999px;background:#806f55;border:2px solid #654d2f;transition:.18s}.toggle::after{content:"";position:absolute;width:1.15rem;height:1.15rem;left:.18rem;top:.15rem;border-radius:50%;background:#fff4d3;box-shadow:0 2px 4px #0005;transition:.18s}.toggle.on{background:var(--green-600)}.toggle.on::after{transform:translateX(1.45rem)}
.credits-scroll{text-align:center;max-width:38rem;margin:auto}.credits-scroll .crest{font-size:4rem}.credits-scroll h3{margin-top:1rem;font-size:1.5rem}.credits-scroll p{margin:.45rem 0;color:#57452f}.credits-scroll .creator{font-size:1.2rem;color:#173f61;font-family:var(--font-display);font-weight:900}

/* Collection screens */
.collection-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin-bottom:1rem}.collection-toolbar .form-field{min-width:160px;flex:0 1 220px}.collection-count{margin-left:auto;font-size:.78rem;font-weight:800;color:#654e34}
.achievement-grid,.bestiary-grid,.item-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(205px,1fr));gap:.8rem}.achievement-card,.bestiary-card{min-height:150px;padding:.85rem;border:2px solid #a8793b;border-radius:.75rem;background:rgb(255 250 232 / .55)}.achievement-card.locked,.bestiary-card.locked{filter:grayscale(1);opacity:.64}.achievement-icon,.bestiary-icon{display:grid;place-items:center;width:3rem;height:3rem;margin-bottom:.5rem;border-radius:50%;color:white;background:linear-gradient(145deg,#1d7093,#122f56);border:2px solid var(--gold-400);font-size:1.55rem}.achievement-card p,.bestiary-card p{margin-top:.35rem;color:#5c4932;font-size:.75rem}.progress-track{height:.5rem;margin-top:.65rem;border-radius:999px;background:#b69e73;overflow:hidden}.progress-fill{height:100%;background:linear-gradient(90deg,var(--teal-600),var(--green-400));border-radius:inherit}
.adventurer-sheet{display:grid;grid-template-columns:260px 1fr;gap:1.3rem}.sheet-sidebar{text-align:center}.sheet-sidebar .portrait-card{min-height:280px}.sheet-stats{display:grid;gap:1rem}.large-stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:.55rem}.large-stat{padding:.7rem;border:1px solid #b88a4c;border-radius:.6rem;background:rgb(255 255 255 / .38)}.large-stat span{display:block;font-size:.66rem;text-transform:uppercase;font-weight:900;color:#725431}.large-stat strong{font-family:var(--font-display);font-size:1.35rem;color:#1b3d58}.xp-bar{height:.85rem;border:2px solid #6b4b29;border-radius:999px;background:#aa895b;overflow:hidden}.xp-bar>span{display:block;height:100%;background:linear-gradient(90deg,#4ea687,#8ed56b);transition:width .35s ease}
.debug-panel{position:fixed;z-index:8000;left:.5rem;bottom:.5rem;padding:.6rem;border:2px dashed #ffdf5a;background:#251216;color:white;font-size:.7rem}

/* Manifest-driven artwork */
img[data-artwork]{display:block;max-width:100%}
img[data-artwork].artwork-loading{opacity:0}
img[data-artwork].artwork-loaded{opacity:1;transition:opacity .24s ease}
img.artwork-fallback{object-fit:cover;filter:saturate(.78)}
img.artwork-unavailable{opacity:.25}
.portrait-card-art{position:absolute;z-index:1;inset:0;width:100%;height:100%;object-fit:cover;object-position:center 34%}
.portrait-card:has(.portrait-card-art)::before,.portrait-card:has(.portrait-card-art)::after{opacity:0}
.continue-summary{grid-column:2;display:grid;grid-template-columns:4rem 1fr;align-items:center;gap:.7rem;margin-top:-4.2rem;padding:.65rem;border:1px solid rgb(247 214 117 / .45);border-radius:.8rem;background:rgb(6 20 38 / .9);box-shadow:var(--shadow-md);color:var(--cream-50)}
.continue-summary strong,.continue-summary small{display:block}.continue-summary small{color:rgb(255 255 255 / .68);font-size:.7rem}.continue-summary .continue-campaign{overflow:hidden;margin-top:.08rem;color:var(--gold-200);font-family:var(--font-story);font-size:.86rem;line-height:1.05;text-overflow:ellipsis;white-space:nowrap}.continue-portrait{width:4rem;aspect-ratio:1;overflow:hidden;border:2px solid var(--gold-400);border-radius:50%}.continue-portrait-art{width:100%;height:100%;object-fit:cover}
.world-map-art{position:absolute;z-index:0;inset:0;width:100%;height:100%;object-fit:cover}.world-map::before{z-index:1;opacity:.18}.map-region{z-index:2;overflow:hidden;isolation:isolate}.map-region-world{position:absolute;z-index:-1;inset:0;width:100%;height:100%;object-fit:cover;opacity:.28}.map-region strong{display:flex;align-items:center;gap:.3rem}.map-region-emblem{width:1.4rem;height:1.4rem;object-fit:contain;flex:0 0 auto}
.item-icon{overflow:hidden}.item-art,.equipment-slot-art,.equipment-summary-art{width:100%;height:100%;object-fit:contain}.item-card .item-icon{background:linear-gradient(145deg,#f9edca,#dcc28f)}.equipment-slot-art{float:right;width:3.6rem;height:3.6rem;margin:.15rem}.equipment-summary-art{width:4.25rem;height:4.25rem;object-fit:contain;float:right}.item-detail-hero{display:grid;grid-template-columns:8rem 1fr;gap:1rem;align-items:center}.item-detail-art{width:8rem;aspect-ratio:1;border:2px solid #9b7545;border-radius:1rem;background:rgb(255 250 232 / .52)}.item-detail-image{width:100%;height:100%;object-fit:contain}.toast-icon img{width:2.25rem;height:2.25rem;object-fit:contain}
.recent-items{display:flex;align-items:center;gap:.55rem;overflow-x:auto;margin-bottom:.85rem;padding:.6rem;border:1px solid rgb(105 71 34 / .26);border-radius:.7rem;background:rgb(255 250 229 / .45)}.recent-items>.eyebrow{flex:0 0 auto;color:#72512a}.recent-items button{flex:0 0 5.6rem;display:grid;justify-items:center;gap:.18rem;padding:.38rem;border:1px solid #ad844e;border-radius:.55rem;background:#fff7dc;color:#46351f;font-size:.62rem;font-weight:800}.recent-item-art{width:3.2rem;height:3.2rem;object-fit:contain}.new-badge{color:#fff;background:#a44b83!important}.item-card.recently-acquired{box-shadow:0 0 0 3px rgb(213 142 57 / .23),0 5px 14px rgb(88 53 21 / .2);animation:reward-reveal-pulse .55s ease}.item-card.quest-item::after{content:"Quest";position:absolute;right:.45rem;top:.45rem;padding:.16rem .3rem;border-radius:999px;background:#3d6282;color:white;font-size:.48rem;font-weight:900;text-transform:uppercase;letter-spacing:.06em}
.bestiary-art{height:9rem;margin:-.85rem -.85rem .7rem;overflow:hidden;border-radius:.65rem .65rem 0 0;background:#17334b}.bestiary-art-image{width:100%;height:100%;object-fit:cover}.bestiary-art.silhouette img{filter:brightness(0) opacity(.75)}.bestiary-card.locked{filter:grayscale(.72);opacity:.76}
.bestiary-card.new-entry{position:relative;animation:bestiary-reveal .7s ease;box-shadow:0 0 0 4px rgb(239 191 82 / .24),0 10px 24px rgb(73 47 15 / .22)}.new-bestiary-badge{animation:pulse-glow 1.2s ease-in-out 2}
.ending-background-art{position:absolute;z-index:-1;inset:0;width:100%;height:100%;object-fit:cover;opacity:.42;filter:saturate(.8)}.ending-screen::after{content:"";position:absolute;z-index:-1;inset:0;background:radial-gradient(circle at 50% 25%,transparent,var(--navy-950) 76%)}
.combat-result-art{width:8rem;height:8rem;margin:.3rem auto 1rem;overflow:hidden;border:4px solid var(--gold-400);border-radius:50%}.combat-result-art img{width:100%;height:100%;object-fit:cover}
.credits-scroll p,.ending-summary{font-family:var(--font-story);font-size:1.08rem;line-height:1.55}
.character-prose,.campaign-prose,.lore-card p,.tale-summary p,.map-region small{font-family:var(--font-story);font-size:1.03rem;line-height:1.42}.playstyle.character-prose{font-size:.96rem}.map-region small{font-size:.8rem;line-height:1.18}

@media (max-width:960px){.continue-summary{grid-column:1;width:min(430px,92vw);margin:.1rem auto}.campaign-select-layout{grid-template-columns:1fr;grid-template-areas:"browser" "detail" "map"}.campaign-browser-heading>p{max-width:31rem}.world-map{min-height:480px}}
@media (max-width:700px){.campaign-browser-heading{display:grid;align-items:start}.campaign-browser-heading>p{text-align:left}.campaign-card-grid{grid-template-columns:1fr}.campaign-detail,.world-map{margin-top:1rem}.campaign-detail-copy{padding:.85rem}.campaign-detail-header{align-items:center}.campaign-detail-sections{grid-template-columns:1fr}.campaign-detail-facts{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:520px){.campaign-card-footline{align-items:stretch;flex-direction:column}.campaign-card-cta{width:100%}.campaign-detail-header{display:grid}.campaign-detail-state{justify-self:start}.campaign-detail-facts{grid-template-columns:1fr}.campaign-detail-facts>div:last-child{grid-column:auto}.campaign-detail-cta{width:100%}.item-detail-hero{grid-template-columns:5.5rem 1fr}.item-detail-art{width:5.5rem}}

body.high-contrast .campaign-card,body.high-contrast .campaign-card-info,body.high-contrast .campaign-card-button,body.high-contrast .campaign-detail,body.high-contrast .campaign-detail-copy{background:#fff;color:#05070b;border-color:#05070b}body.high-contrast .campaign-card-footer,body.high-contrast .campaign-detail-sections section,body.high-contrast .campaign-detail-facts>div{background:#fff4c9;border-color:#05070b}body.high-contrast .campaign-card-title,body.high-contrast .campaign-detail h2,body.high-contrast .campaign-detail h3,body.high-contrast .campaign-detail-facts dd{color:#05070b}body.high-contrast .campaign-card-subtitle,body.high-contrast .campaign-card-meta,body.high-contrast .campaign-card-footline,body.high-contrast .campaign-detail p{color:#151515}

@media (forced-colors:active){.campaign-card,.campaign-detail,.campaign-card-info,.campaign-card-footer,.campaign-detail-sections section,.campaign-detail-facts>div,.campaign-progress-track{border-color:CanvasText;background:Canvas;color:CanvasText}.campaign-card.selected{outline:3px solid Highlight;outline-offset:2px}.campaign-card-button:focus-visible,.campaign-card-cta:focus-visible,.campaign-detail-cta:focus-visible,.map-region:focus-visible{outline:3px solid Highlight!important;outline-offset:3px;box-shadow:none!important}.campaign-progress-track>span{background:Highlight}.campaign-detail-state{border:1px solid CanvasText;background:Canvas;color:CanvasText}.campaign-card-art,.campaign-detail-art{forced-color-adjust:none}}

/* Enlarged collection, equipment, and character-sheet typography. */
.modal-card.wide{width:min(1200px,100%)}
.modal-actions .pill-button{min-height:3.4rem;padding:.72rem 1.1rem;font-size:1.25rem;line-height:1.15;white-space:normal}
.adventurer-sheet{grid-template-columns:320px minmax(0,1fr)}.large-stat-grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.large-stat{padding:.85rem}.large-stat span{font-size:1.155rem;line-height:1.1}.large-stat strong{font-size:2.3625rem;line-height:1}
.adventurer-sheet .info-card h3,.inventory-layout .equipment-slot h3,.item-detail-hero h2{font-size:1.6rem;line-height:1.08}.adventurer-sheet .info-card p,.inventory-layout .equipment-slot p,.item-detail-hero p{font-size:1.1rem;line-height:1.3}.adventurer-sheet .badge,.inventory-layout .badge,.item-detail-hero .badge{font-size:1.19rem}.adventurer-sheet .small-note,.inventory-layout .small-note,.item-detail-hero .small-note{font-size:1.3125rem;line-height:1.25}
.collection-count{font-size:1.365rem}.recent-items{gap:.7rem;padding:.75rem}.recent-items button{flex-basis:8rem;padding:.5rem;font-size:1.085rem;line-height:1.1}.recent-item-art{width:4.2rem;height:4.2rem}
.item-detail-hero{grid-template-columns:11rem minmax(0,1fr);gap:1.2rem}.item-detail-art{width:11rem}.equipment-slot-art{width:5rem;height:5rem}.equipment-summary-art{width:5.5rem;height:5.5rem}
.audio-enable-control{position:fixed;z-index:120;right:clamp(.7rem,2vw,1.5rem);top:clamp(.7rem,2vw,1.5rem);display:inline-flex;align-items:center;gap:.55rem;min-height:2.9rem;padding:.55rem .85rem;border:2px solid var(--gold-300);border-radius:999px;background:linear-gradient(180deg,rgb(18 59 98 / .97),rgb(7 29 54 / .98));box-shadow:0 6px 18px rgb(0 0 0 / .42),inset 0 1px rgb(255 255 255 / .16);color:var(--cream-50);font-family:var(--font-body);font-size:.88rem;font-weight:900;letter-spacing:.02em}.audio-enable-control:hover{filter:brightness(1.16);transform:translateY(-1px)}.audio-enable-control span:first-child{color:var(--gold-300);font-size:1.15rem}
.toast-gold.gold-gain{border-color:#79d28a;background:linear-gradient(145deg,#16583f,#0a2934)}.toast-gold.gold-spend{border-color:#eea05d;background:linear-gradient(145deg,#6a3826,#241d2c)}.toast-gold.gold-gain .toast-icon{transform:translateY(-2px)}.toast-gold.gold-spend .toast-icon{transform:translateY(2px)}
body:has(.modal-backdrop){overflow:hidden}

@media (max-width:1100px){.adventurer-sheet{grid-template-columns:1fr}.sheet-sidebar .portrait-card{max-width:320px;margin-inline:auto}.item-detail-hero{grid-template-columns:8rem minmax(0,1fr)}.item-detail-art{width:8rem}}
@media (max-width:700px){.modal-actions .pill-button{width:100%;font-size:1.2rem}.item-detail-hero{grid-template-columns:1fr}.item-detail-art{width:min(11rem,100%);margin-inline:auto}.comparison-table{display:block;overflow-x:auto;white-space:nowrap}.collection-count{width:100%;margin-left:0}}
@media (forced-colors:active){.choice-button:focus-visible,.combat-action:focus-visible,.puzzle-option:focus-visible,.tab-button:focus-visible,.mini-item:focus-visible,.pill-button:focus-visible,.location-node:focus-visible,.audio-enable-control:focus-visible,.d20:focus-visible{outline:3px solid Highlight!important;outline-offset:3px;box-shadow:none!important}.d20{forced-color-adjust:none}}
