:root{
  --parchment:#efe3c6; --parchment-2:#e6d6b0; --ink:#2b1d12; --ink-soft:#5a4634;
  --leather:#2a1810; --leather-2:#3b2416; --gold:#c9a24a; --gold-2:#e6c877; --red:#8b1e1e;
  --line:#8d6a3f; --shadow:0 10px 30px rgba(0,0,0,.45);
  --font-head:"Cinzel",Georgia,serif; --font-body:"EB Garamond",Georgia,"Times New Roman",serif;
}
*{box-sizing:border-box}
.ico{width:1.15em;height:1.15em;vertical-align:-0.2em;fill:none}
.rnd .ico{width:22px;height:22px;vertical-align:middle;color:var(--leather-2)}
.icon-btn .ico{width:22px;height:22px;vertical-align:middle}
.brand .ico{color:var(--gold)}
html{-webkit-text-size-adjust:100%}
body{margin:0;font-family:var(--font-body);font-size:18px;line-height:1.35;color:var(--ink);
  background:radial-gradient(1200px 600px at 50% -200px,#5a3a22 0%,var(--leather-2) 45%,var(--leather) 100%) fixed;min-height:100vh}
a{color:inherit}
h1,h2,h3{font-family:var(--font-head);letter-spacing:.04em;margin:0}
h1{font-size:clamp(1.5rem,4vw,2.4rem);color:var(--gold-2);text-shadow:0 2px 0 #000}
h2{font-size:1.05rem;color:var(--red);border-bottom:2px solid var(--line);padding-bottom:.3rem;margin-bottom:.75rem;display:flex;justify-content:space-between;align-items:center;gap:.5rem}
.muted{color:#d9c7a0;opacity:.85}
.top{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;padding:.6rem 1rem;
  background:linear-gradient(#1c100a,#2a1810);border-bottom:2px solid var(--gold);box-shadow:0 4px 14px rgba(0,0,0,.5)}
.brand{font-family:var(--font-head);color:var(--gold-2);text-decoration:none;font-weight:700;font-size:1.05rem}
.top-actions{display:flex;gap:.5rem}
.icon-btn{background:transparent;border:1px solid var(--gold);color:var(--gold-2);border-radius:999px;width:44px;height:44px;font-size:1.2rem;cursor:pointer}
.icon-btn[aria-pressed="true"]{background:var(--gold);color:var(--leather);box-shadow:0 0 14px var(--gold-2)}
.wrap{max-width:1180px;margin:0 auto;padding:1rem 16px 5rem}
.hero{text-align:center;padding:1.5rem 0 1rem}
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1.2rem}
.card{display:block;text-decoration:none;background:var(--parchment);border:3px double var(--line);border-radius:6px;overflow:hidden;box-shadow:var(--shadow);transition:transform .15s}
.card:hover{transform:translateY(-3px)}
.card-preview{height:220px;background-size:cover;background-position:top center;border-bottom:2px solid var(--line);filter:sepia(.25)}
.card-dnd5e{background-image:url(/static/img/dnd5e.png)}
.card-shadowdark{background-image:url(/static/img/shadowdark.png);background-color:#fff;background-size:contain;background-repeat:no-repeat;background-position:center}
.card-body{padding:1rem}
.card-body h2{border:0;margin-bottom:.3rem;font-size:1.2rem}
.card-body p{margin:.2rem 0 .7rem;color:var(--ink-soft)}
.tag{display:inline-block;background:var(--leather-2);color:var(--gold-2);font-size:.8rem;padding:.2rem .6rem;border-radius:999px;font-family:var(--font-head)}

.sheet-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.6rem;margin-bottom:1rem}
.toolbar{display:flex;flex-wrap:wrap;gap:.5rem}
.btn{font-family:var(--font-head);font-size:.85rem;letter-spacing:.03em;padding:.7rem 1rem;min-height:44px;border-radius:4px;cursor:pointer;
  border:2px solid var(--gold);background:linear-gradient(#5a1c1c,#3d1010);color:var(--gold-2);box-shadow:0 3px 0 #1a0a0a}
.btn:active{transform:translateY(2px);box-shadow:none}
.btn.gold{background:linear-gradient(#e6c877,#b8903a);color:var(--leather);border-color:#7a5a1f}
.btn.ghost{background:transparent;color:var(--gold-2)}
.btn.small{padding:.4rem .7rem;min-height:36px;font-size:.75rem}
.btn:disabled{opacity:.5;cursor:wait}
.layout{display:grid;gap:1rem;grid-template-columns:1fr}
@media(min-width:960px){.layout{grid-template-columns:2fr 1fr;align-items:start}.aside{position:sticky;top:76px}}
.panel{background:var(--parchment);background-image:radial-gradient(rgba(120,80,30,.08) 1px,transparent 1px);background-size:9px 9px;
  border:3px double var(--line);border-radius:6px;padding:1rem;box-shadow:var(--shadow);margin-bottom:1rem}
.field{display:grid;grid-template-columns:1fr auto;gap:.4rem;align-items:end;margin-bottom:.7rem}
.field label{display:block;font-family:var(--font-head);font-size:.72rem;color:var(--ink-soft);text-transform:uppercase;letter-spacing:.08em;margin-bottom:.2rem}
.field.full{grid-template-columns:1fr auto}
input[type=text],input[type=number],select,textarea{width:100%;font:inherit;font-size:16px;padding:.55rem .6rem;border:1px solid var(--line);border-radius:3px;background:#fbf6e9;color:var(--ink);min-height:44px}
textarea{min-height:88px;resize:vertical}
input:focus,select:focus,textarea:focus{outline:2px solid var(--gold);outline-offset:1px}
.rnd{width:44px;height:44px;border-radius:50%;border:2px solid var(--line);background:#fff8e6;cursor:pointer;line-height:1;flex:none;display:inline-grid;place-items:center}
.rnd:hover{background:var(--gold-2)}
.row{display:grid;grid-template-columns:1fr 1fr;gap:.6rem}
@media(max-width:520px){.row{grid-template-columns:1fr}}
.abilities{display:grid;grid-template-columns:repeat(3,1fr);gap:.6rem}
@media(min-width:720px){.abilities{grid-template-columns:repeat(6,1fr)}}
.ab{background:#fff8e6;border:2px solid var(--line);border-radius:10px;padding:.5rem .3rem;text-align:center;position:relative}
.ab .nm{font-family:var(--font-head);font-size:.65rem;letter-spacing:.06em;color:var(--ink-soft)}
.ab input{text-align:center;font-size:1.5rem;font-weight:600;padding:.2rem;min-height:40px;margin:.25rem 0}
.ab .mod{display:inline-block;min-width:44px;border:2px solid var(--ink);border-radius:50%;font-weight:600;font-size:1.1rem;padding:.2rem .4rem;background:var(--parchment)}
.ab .bonus{font-size:.75rem;color:var(--ink-soft);min-height:1.1em}
.pool{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center;margin:.6rem 0}
.chip{background:var(--leather-2);color:var(--gold-2);font-family:var(--font-head);padding:.3rem .6rem;border-radius:999px;font-size:.9rem}
.hint{font-size:.9rem;color:var(--ink-soft);margin:.3rem 0}
.skills{display:grid;grid-template-columns:1fr;gap:.2rem}
@media(min-width:600px){.skills{grid-template-columns:1fr 1fr}}
.skill{display:flex;align-items:center;gap:.5rem;padding:.3rem .2rem;border-bottom:1px dotted var(--line);min-height:40px}
.skill input{width:22px;height:22px;accent-color:var(--red)}
.skill .b{margin-left:auto;font-weight:600;min-width:2.2em;text-align:right}
.skill .ab-tag{font-size:.75rem;color:var(--ink-soft)}
.skill.pool-ok{background:rgba(201,162,74,.15)}
.stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.5rem;margin-bottom:.8rem}
.stat{background:#fff8e6;border:2px solid var(--line);border-radius:8px;text-align:center;padding:.4rem}
.stat .v{font-size:1.6rem;font-weight:600;line-height:1.1}
.stat .l{font-family:var(--font-head);font-size:.6rem;letter-spacing:.06em;color:var(--ink-soft)}
.kv{display:flex;justify-content:space-between;padding:.25rem 0;border-bottom:1px dotted var(--line);font-size:.95rem}
.kv b{font-weight:600}
.att{font-size:.95rem;padding:.25rem 0;border-bottom:1px dotted var(--line)}
.pdf-wrap{display:none}
.toast{position:fixed;left:50%;bottom:1.2rem;transform:translateX(-50%);background:var(--leather-2);color:var(--gold-2);border:1px solid var(--gold);padding:.6rem 1rem;border-radius:6px;z-index:60;font-family:var(--font-head);font-size:.8rem}

/* dice tray */
.dice-tray{position:fixed;inset:auto 0 0 0;z-index:50;background:radial-gradient(ellipse at center,#4a2b17,#1b0f08 75%);border-top:3px solid var(--gold);
  padding:1rem 1rem calc(1rem + env(safe-area-inset-bottom));box-shadow:0 -10px 40px rgba(0,0,0,.6);max-height:60vh;overflow:auto}
.tray-label{color:var(--gold-2);font-family:var(--font-head);text-align:center;margin-bottom:.6rem;font-size:.9rem}
.tray-dice{display:flex;flex-wrap:wrap;gap:1rem;justify-content:center;align-items:center;perspective:700px;min-height:70px;padding:.5rem 0}
.tray-group{display:flex;flex-direction:column;align-items:center;gap:.4rem;padding:.4rem .6rem;border:1px solid rgba(201,162,74,.35);border-radius:8px}
.tray-group .gl{color:#d9c7a0;font-size:.8rem;font-family:var(--font-head)}
.tray-group .gd{display:flex;gap:.7rem;flex-wrap:wrap;justify-content:center;perspective:600px}
.tray-group .gt{color:var(--gold-2);font-weight:700;font-size:1.2rem}
#tray-close{display:block;margin:.6rem auto 0}
.die{position:relative;width:52px;height:52px;transform-style:preserve-3d;transition:transform 1.4s cubic-bezier(.17,.67,.2,1)}
.die.dropped{opacity:.35;filter:grayscale(1)}
.face{position:absolute;inset:0;background:linear-gradient(145deg,#fdf6e3,#d8c49a);border:2px solid #6b4a1e;border-radius:9px;display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);padding:7px;backface-visibility:hidden}
.pip{width:9px;height:9px;border-radius:50%;background:#2b1d12;align-self:center;justify-self:center;box-shadow:inset 0 1px 2px rgba(255,255,255,.4)}
.f1{transform:translateZ(26px)}.f6{transform:rotateY(180deg) translateZ(26px)}
.f2{transform:rotateY(90deg) translateZ(26px)}.f5{transform:rotateY(-90deg) translateZ(26px)}
.f3{transform:rotateX(90deg) translateZ(26px)}.f4{transform:rotateX(-90deg) translateZ(26px)}
.poly{width:60px;height:60px;position:relative;display:grid;place-items:center;transition:transform 1.4s cubic-bezier(.17,.67,.2,1)}
.poly svg{position:absolute;inset:0;width:100%;height:100%;filter:drop-shadow(0 3px 4px rgba(0,0,0,.5))}
.poly .num{position:relative;font-family:var(--font-head);font-weight:700;font-size:1.25rem;color:#2b1d12}
.poly.spin .num{animation:flick .08s steps(1) infinite}
@keyframes flick{0%{opacity:1}50%{opacity:.3}}
.poly.spin{animation:tumble 1.4s cubic-bezier(.17,.67,.2,1) forwards}
@keyframes tumble{0%{transform:rotate(0) scale(.6)}60%{transform:rotate(540deg) scale(1.15)}100%{transform:rotate(720deg) scale(1)}}

/* picker */
.pick{position:relative}
.pick .pick-input{padding-right:44px}
.pick-toggle{position:absolute;right:0;top:0;height:44px;width:44px;border:0;background:transparent;cursor:pointer;color:var(--ink-soft);font-size:1rem}
.pick.open .pick-toggle{transform:rotate(180deg)}
.pick-desc{font-size:.9rem;color:var(--ink-soft);margin-top:.3rem;line-height:1.3;min-height:0}
.pick-desc b{color:var(--ink);font-weight:600}
.pick-panel{position:absolute;left:0;right:0;top:calc(100% - 1.5rem);z-index:30;background:#fff8e6;border:2px solid var(--line);border-radius:6px;box-shadow:0 12px 30px rgba(0,0,0,.35);max-height:min(60vh,380px);overflow:auto}
.pick-desc:empty + .pick-panel{top:100%}
.pick-item{padding:.55rem .7rem;border-bottom:1px dotted var(--line);cursor:pointer;display:flex;flex-direction:column;gap:.1rem}
.pick-item:hover,.pick-item.active{background:rgba(201,162,74,.25)}
.pick-item.sel .pick-name::after{content:" ✓";color:var(--red)}
.pick-custom{background:rgba(139,30,30,.08)}
.pick-name{font-weight:600}
.pick-sub{font-size:.85rem;color:var(--ink-soft);line-height:1.25}
.pick-empty{padding:.7rem;color:var(--ink-soft);font-size:.9rem}
@media(max-width:600px){.pick-panel{position:fixed;left:8px;right:8px;top:auto;bottom:calc(8px + env(safe-area-inset-bottom));max-height:55vh;border-width:3px}}

/* guide */
.steps{display:flex;flex-wrap:wrap;gap:.35rem .8rem;margin:0 0 .9rem;padding:0;list-style:none;color:#d9c7a0;font-family:var(--font-head);font-size:.72rem;letter-spacing:.04em}
.steps li::before{content:attr(data-n);display:inline-grid;place-items:center;width:1.4em;height:1.4em;border-radius:50%;background:var(--gold);color:var(--leather);margin-right:.35em;font-weight:700}
.lead{background:rgba(201,162,74,.14);border-left:3px solid var(--gold);padding:.5rem .7rem;margin:0 0 .9rem;font-size:.95rem;line-height:1.35;color:var(--ink)}
.lead b{color:var(--red)}
.ab .nm{cursor:pointer;text-decoration:underline dotted;text-underline-offset:3px}
.ab.sel{outline:2px solid var(--gold)}
.ab-help{font-size:.9rem;color:var(--ink-soft);margin:.5rem 0 0;min-height:1.3em}
.skill .sd{display:none;flex-basis:100%;font-size:.82rem;color:var(--ink-soft);padding-left:30px;line-height:1.25}
.skills.show-desc .sd{display:block}
.skills.show-desc .skill{flex-wrap:wrap}
.linkish{background:none;border:0;padding:0;font:inherit;color:var(--red);text-decoration:underline dotted;cursor:pointer;font-size:.9rem}
