:root{--bg:#120d0b;--panel:#1e1613;--panel2:#2a1f1a;--line:#43332a;--text:#ecdfc4;--muted:#a8977d;--accent:#e0a040;--red:#d9644a;--green:#5aa469;--blue:#5b8fd0;--purple:#a07ad0}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--text);font:17px/1.5 'EB Garamond',Georgia,'Times New Roman',serif}
button,input,textarea,select{font:inherit;color:inherit}
button{background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:8px 14px;cursor:pointer}
button:hover{border-color:var(--accent)}
button:disabled{opacity:.45;cursor:not-allowed}
button.primary{background:var(--accent);color:#1a1408;border-color:var(--accent);font-weight:bold}
button.big{font-size:1.1rem;padding:12px 20px;width:100%}
.chip{padding:2px 10px;border-radius:99px;font-size:.85rem;margin-left:8px}
input,textarea,select{width:100%;background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:8px 10px}
textarea{resize:vertical}
label{display:block;margin:10px 0;font-size:.9rem;color:var(--muted)}
label input,label textarea,label select{margin-top:4px;color:var(--text)}
h1,h2,h3{font-weight:normal;margin:.2em 0}
h2,h3{font-family:Cinzel,Georgia,serif}
h3{color:var(--accent);letter-spacing:.05em;text-transform:uppercase;font-size:.85rem;margin:14px 0 6px}
.muted{color:var(--muted);font-size:.85rem}
.err{color:var(--red);min-height:1.2em}
.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.row input{flex:1;min-width:0}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:10px}

/* ---------- landing: a tavern table by torchlight ---------- */
#landing{--stone:#140e0c;--parch:#d9c7a0;--ink:#2a1d12;--ink-soft:#5a4630;--ember:#e0883a;--wax:#8f1d21;--bone:#ecdfc4;--dim:#a8977d;
  --display:Cinzel,Georgia,serif;--title:'Cinzel Decorative',Cinzel,Georgia,serif;
  position:relative;overflow:hidden;min-height:100vh;background:var(--stone);color:var(--bone);font:1.2rem/1.55 'EB Garamond',Georgia,serif}
#landing::before{content:'';position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(ellipse 60% 45% at 50% 0,rgba(224,136,58,.3),transparent 70%);animation:flicker 5s ease-in-out infinite}
@keyframes flicker{0%,100%{opacity:1}30%{opacity:.82}55%{opacity:.95}75%{opacity:.78}}
@media(prefers-reduced-motion:reduce){#landing::before{animation:none}}
#landing .wrap{position:relative;z-index:1;max-width:960px;margin:0 auto;padding:48px 20px 64px;display:flex;flex-direction:column;align-items:center;gap:44px}
#landing :focus-visible{outline:3px solid var(--ember);outline-offset:2px}

#landing .hero{text-align:center}
#landing .d20{width:92px;height:92px;color:var(--ember);filter:drop-shadow(0 0 14px rgba(224,136,58,.55))}
#landing h1{font:700 clamp(3rem,10vw,6rem)/1 var(--title);letter-spacing:.02em;margin:14px 0 18px;color:var(--bone);text-shadow:0 0 40px rgba(224,136,58,.35)}
#landing .tag{margin:0 auto;max-width:34em;color:var(--bone);font-size:1.3rem}

#landing .actions{width:100%;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;align-items:stretch}
#landing .join,#landing .create{background:var(--parch);color:var(--ink);border:3px double var(--ink-soft);border-radius:4px;padding:26px 26px 28px;box-shadow:0 18px 40px rgba(0,0,0,.5)}
#landing h2{font:700 1.3rem/1.2 var(--display);letter-spacing:.04em;margin:0 0 .5em;color:var(--ink)}
#landing label{display:block;margin:14px 0 4px;font-size:1.05rem;color:var(--ink)}
#landing input,#landing textarea{font:inherit;font-size:1.15rem;color:var(--ink);background:rgba(255,255,255,.35);border:1px solid rgba(42,29,18,.5);border-radius:3px;padding:10px 12px}
#landing ::placeholder{color:rgba(42,29,18,.45)}
#landing #jCode{font:700 2rem/1 var(--display);letter-spacing:.35em;text-align:center;text-transform:uppercase;padding:12px 8px 12px calc(.35em + 8px)}
#landing small{display:block;margin-top:6px;color:var(--ink-soft);font-size:1rem}
#landing button{font:700 1rem var(--display);letter-spacing:.06em;border-radius:3px;padding:13px 18px;width:100%;margin-top:18px}
#landing .btn-join{background:var(--wax);border-color:var(--wax);color:var(--bone)}
#landing .btn-join:hover{background:#a8262b;border-color:#a8262b}
#landing .btn-create{background:var(--ink);border-color:var(--ink);color:var(--bone)}
#landing .btn-create:hover{background:#3f2c1b;border-color:#3f2c1b}
#recent{margin-top:18px;display:flex;flex-direction:column;gap:6px}
#landing .join .muted{color:var(--ink-soft);font-size:1rem}
#landing #recent button{margin:0;background:transparent;border:1px solid rgba(42,29,18,.45);color:var(--ink);font:400 1rem 'EB Garamond',Georgia,serif;letter-spacing:0;text-align:left}
#landing #recent button:hover{border-color:var(--wax)}
#landing .err{margin:-20px 0 0;color:#ff9a85;text-align:center}
#landing .err:empty{display:none}

#landing .turn{margin:0;max-width:34em;width:100%}
#landing .turn .line{margin:0 0 16px}
#landing .turn b{display:block;font:700 .85rem/1.2 var(--display);letter-spacing:.08em;color:var(--dim);margin-bottom:2px}
#landing .turn .dm{border-left:2px solid var(--ember);padding-left:16px}
#landing .turn .roll{display:inline-block;font:.95rem/1.4 ui-monospace,Consolas,monospace;color:#f0c27a;background:rgba(224,136,58,.12);padding:8px 12px;border-radius:3px}
#landing .turn .total{font-weight:700;color:#ffd9a0}
#landing #dieA{display:inline-block;min-width:2ch;text-align:center}
#landing .turn figcaption{color:var(--dim);font-style:italic;font-size:1rem}
@media(max-width:760px){#landing .actions{grid-template-columns:minmax(0,1fr)}}

/* ---------- game ---------- */
#game header{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;border-bottom:1px solid var(--line);background:var(--panel);position:sticky;top:0;z-index:5}
#gTitle{font-family:Cinzel,Georgia,serif}
#banner{padding:10px 14px;text-align:center;background:var(--panel2);border-bottom:1px solid var(--line)}
#banner.mine{background:#3b2a10;color:var(--accent);font-weight:bold}
#banner.busy{background:#1d2b3a;color:#a9c8ee}
main{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:16px;padding:14px;max-width:1200px;margin:0 auto}
@media(max-width:820px){main{grid-template-columns:1fr}.side-col{order:-1}}
#story{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px;height:52vh;min-height:280px;overflow-y:auto}
.entry{margin:0 0 14px}
.entry .who{font-size:.75rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}
.entry p{margin:.2em 0 .5em;white-space:pre-wrap}
.entry.dm{border-left:3px solid var(--accent);padding-left:12px}
.entry.dm .who{color:var(--accent)}
.entry.player{border-left:3px solid var(--blue);padding-left:12px}
.entry.roll{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:.85rem;color:#e7c778;background:#2a2412;border-radius:8px;padding:6px 10px}
.entry.ooc{font-size:.9rem;color:var(--muted);font-style:italic}
.entry.system{font-size:.85rem;color:var(--muted);text-align:center}
.actionbox{margin-top:12px}
.actionbox .row{margin-top:8px}
.tools{margin-top:10px;display:flex;flex-direction:column;gap:8px}
.dice button{padding:4px 10px}
#startBox{margin-top:12px;text-align:center}

#map{display:grid;gap:1px;background:var(--line);border:1px solid var(--line);border-radius:8px;overflow:hidden}
.cell{aspect-ratio:1;background:#241d19;display:flex;align-items:center;justify-content:center;position:relative}
.tok{width:88%;height:88%;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.7rem;font-weight:bold;color:#fff;font-family:system-ui,sans-serif}
.tok.player{background:var(--blue)}.tok.enemy{background:var(--red)}.tok.npc{background:var(--green)}.tok.object{background:var(--purple);border-radius:6px}
#legend{display:flex;flex-wrap:wrap;gap:4px 10px;margin-top:6px;font-size:.8rem}
#legend span::before{content:'';display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:4px;background:var(--muted)}
#legend .player::before{background:var(--blue)}#legend .enemy::before{background:var(--red)}#legend .npc::before{background:var(--green)}#legend .object::before{background:var(--purple)}

.enemy{display:flex;justify-content:space-between;background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--red);border-radius:8px;padding:5px 10px;margin-bottom:6px;font-size:.9rem}
.enemy b{font-weight:normal;color:#f0a090}
.enemy.down{opacity:.5;text-decoration:line-through}
.pc{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px;margin-bottom:10px}
.pc.active{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}
.pc .name{font-weight:bold}
.pc .sub{font-size:.8rem;color:var(--muted)}
.bar{height:8px;border-radius:4px;background:#000;margin:6px 0 2px;overflow:hidden}
.bar i{display:block;height:100%;background:var(--green)}
.bar i.low{background:var(--red)}
.mini{display:grid;grid-template-columns:repeat(6,1fr);gap:2px;text-align:center;font-size:.7rem;margin-top:6px;font-family:system-ui,sans-serif}
.mini b{display:block;color:var(--accent)}
.pc details{margin-top:6px;font-size:.85rem}
.pc summary{cursor:pointer;color:var(--muted)}
.cond{display:inline-block;background:#3a1c16;color:#f0a090;border-radius:99px;padding:0 8px;font-size:.75rem;margin:4px 4px 0 0}

dialog{background:var(--panel);color:var(--text);border:1px solid var(--accent);border-radius:12px;width:min(480px,94vw);padding:16px}
dialog::backdrop{background:rgba(0,0,0,.7)}
.stats{display:grid;grid-template-columns:repeat(6,1fr);gap:6px;margin:8px 0}
.stats label{margin:0;text-align:center;font-size:.7rem}
.stats input{text-align:center;padding:6px 2px}
