/* Lanterns of Lumen: Play Quest — storybook look, matches Story Quest (cream paper, royal blue, gold). */
:root{
  --paper:#fbf3e1; --paper-2:#f1e3c4; --edge:#d8c398; --ink:#25407a; --ink-2:#1b2f5c;
  --text:#2c2b33; --muted:#6e6553; --gold:#e4a43a; --gold-deep:#a86d19; --fox:#e2672a;
  --meadow:#4b9440; --teal:#2f8f8a; --rose:#c9475e; --sky:#9ed2f2; --night:#1a2030;
  --land:#4b9440; --land-2:#cfe6b8;
  --display:'Fredoka','Nunito',system-ui,sans-serif; --body:'Nunito',system-ui,-apple-system,'Segoe UI',sans-serif;
  color-scheme:light;
}
*{box-sizing:border-box}
html,body{height:100%;margin:0}
body{background:var(--night);color:var(--text);font-family:var(--body);font-size:17px;line-height:1.4;overflow:hidden;
  -webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation}
button{font:inherit;cursor:pointer;color:inherit}
button:focus-visible{outline:3px solid var(--gold);outline-offset:2px}
[hidden]{display:none!important}
#app{position:fixed;inset:0;display:flex;flex-direction:column;
  padding:env(safe-area-inset-top,0) env(safe-area-inset-right,0) env(safe-area-inset-bottom,0) env(safe-area-inset-left,0)}

/* ---------- buttons ---------- */
.btn{border:0;border-radius:999px;padding:12px 26px;font-family:var(--display);font-weight:700;font-size:1.1rem;background:var(--gold);color:#2a2008;
  box-shadow:0 4px 0 var(--gold-deep);transition:transform .08s}
.btn:active{transform:translateY(3px);box-shadow:0 1px 0 var(--gold-deep)}
.btn.quiet{background:var(--paper);color:var(--ink);box-shadow:0 0 0 2px var(--edge) inset}
.btn.ink{background:var(--ink);color:var(--paper);box-shadow:0 4px 0 var(--ink-2)}
.btn[disabled]{opacity:.45;pointer-events:none}
.iconbtn{width:46px;height:46px;border-radius:50%;border:2px solid var(--edge);background:var(--paper);color:var(--ink);font-weight:800;font-size:1.2rem;
  display:inline-grid;place-items:center;flex:none}

/* ---------- screens ---------- */
.screen{position:absolute;inset:0;display:flex;flex-direction:column;overflow:hidden}
.paperbg{background:radial-gradient(ellipse at 50% 0%,#fffaf0 0,var(--paper) 55%,var(--paper-2) 100%)}
.card{background:var(--paper);border:1px solid var(--edge);border-radius:20px;box-shadow:0 18px 50px rgba(0,0,0,.35)}
.eyebrow{font-size:.75rem;font-weight:800;letter-spacing:.09em;text-transform:uppercase;color:var(--gold-deep)}
h1,h2,h3{font-family:var(--display);color:var(--ink);margin:0;line-height:1.1;text-wrap:balance}

/* title */
.title{display:grid;place-items:center;padding:16px;background:
  radial-gradient(circle at 50% 30%,rgba(255,214,120,.35),transparent 50%),linear-gradient(#26345a,#141a2b)}
.title .card{width:min(560px,100%);padding:26px 24px;text-align:center}
.title h1{font-size:clamp(2rem,7vw,3rem)}
.title p{color:var(--muted);font-weight:700;margin:10px 0 18px}
.title .row{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
.title .duo{display:flex;justify-content:center;gap:6px;margin-bottom:6px}
.title .duo svg{width:92px;height:92px}

/* world map */
.mapwrap{flex:1;position:relative;overflow:auto;-webkit-overflow-scrolling:touch}
.topbar{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--paper);border-bottom:2px solid var(--edge);flex:none;z-index:2}
.topbar .grow{flex:1;min-width:0}
.topbar h2{font-size:1.25rem}
.pill{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:999px;background:#fffaf0;border:2px solid var(--edge);
  font-weight:800;color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap}
.pill .s{color:var(--gold)}
.worldmap{position:relative;width:100%;min-height:100%;background:
  radial-gradient(circle at 20% 85%,#cfe6b8 0 14%,transparent 15%),
  radial-gradient(circle at 75% 70%,#e6d3f0 0 12%,transparent 13%),
  linear-gradient(#bfe3f5,#e9f4e0 40%,#f3e7c8)}
.worldmap svg.path{position:absolute;inset:0;width:100%;height:100%}
.node{position:absolute;transform:translate(-50%,-50%);display:flex;flex-direction:column;align-items:center;gap:4px;border:0;background:none;padding:0;width:130px}
.node .orb{width:84px;height:84px;border-radius:50%;display:grid;place-items:center;font-size:2.2rem;border:5px solid #fff;
  box-shadow:0 6px 0 rgba(0,0,0,.18),0 10px 24px rgba(0,0,0,.2);transition:transform .15s}
.node:active .orb{transform:scale(.94)}
.node .lbl{font-family:var(--display);font-weight:700;color:var(--ink);background:rgba(251,243,225,.95);padding:3px 10px;border-radius:999px;
  border:2px solid var(--edge);font-size:.95rem;text-align:center;line-height:1.15}
.node .st{font-size:.8rem;font-weight:800;color:var(--muted)}
.node.locked .orb{filter:grayscale(1) brightness(.85);opacity:.7}
.node.locked .orb::after{content:'🔒';position:absolute;font-size:1.4rem;transform:translate(26px,26px)}
.node.done .orb{box-shadow:0 0 0 4px var(--gold),0 0 26px 6px rgba(228,164,58,.7)}
.node.current .orb{animation:bob 1.6s ease-in-out infinite}
@keyframes bob{50%{transform:translateY(-6px)}}

/* land screen */
.landbody{flex:1;overflow:auto;padding:16px 16px 40px;background:linear-gradient(var(--land-2),var(--paper))}
.chapter{max-width:900px;margin:0 auto 18px}
.chapter h3{font-size:1.2rem;margin:6px 4px 10px}
.games{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(200px,100%),1fr));gap:12px}
.gcard{position:relative;text-align:left;border:2px solid var(--edge);border-radius:16px;background:var(--paper);padding:12px 14px;min-height:118px;
  display:flex;flex-direction:column;gap:4px;box-shadow:0 4px 0 var(--edge);transition:transform .1s}
.gcard:active{transform:translateY(3px);box-shadow:0 1px 0 var(--edge)}
.gcard .ic{font-size:1.9rem;line-height:1}
.gcard .nm{font-family:var(--display);font-weight:700;color:var(--ink);font-size:1.08rem;line-height:1.15}
.gcard .sk{font-size:.82rem;font-weight:700;color:var(--muted)}
.gcard .stars{margin-top:auto;font-size:1.05rem;letter-spacing:2px;color:#d9ccb0}
.gcard .stars b{color:var(--gold)}
.gcard.locked{opacity:.5;filter:grayscale(.7)}
.gcard.locked::after{content:'🔒';position:absolute;left:40px;top:26px;font-size:1.1rem}
.gcard.boss{background:linear-gradient(135deg,#fff5dc,#f4dcc0);border-color:var(--gold)}
.gcard .tag{position:absolute;right:10px;top:10px;font-size:.7rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;padding:2px 8px;border-radius:999px;background:var(--paper-2);color:var(--muted)}

/* game screen */
.gamehead{display:flex;align-items:center;gap:10px;padding:8px 12px;background:var(--paper);border-bottom:2px solid var(--edge);flex:none;z-index:3}
.gamehead .grow{flex:1;min-width:0}
.gamehead h2{font-size:1.1rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dots{display:flex;gap:5px;flex-wrap:wrap;margin-top:3px}
.dots i{width:12px;height:12px;border-radius:50%;background:var(--paper-2);border:2px solid var(--edge)}
.dots i.on{background:var(--gold);border-color:var(--gold-deep)}
.dots i.now{border-color:var(--ink)}
.stage{position:relative;flex:1;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;background:linear-gradient(var(--land-2),#fffaf0)}
.stage.scroll{overflow:auto}
.talk{flex:none;display:flex;gap:10px;align-items:flex-start;padding:10px 12px;background:var(--paper);border-top:2px solid var(--edge);z-index:3;min-height:86px}
.talk .face{width:58px;height:58px;flex:none;border-radius:50%;background:var(--paper-2);border:3px solid #fff;box-shadow:0 0 0 2px var(--edge);overflow:hidden}
.talk .face svg{width:100%;height:100%}
.talk .words{flex:1;min-width:0}
.talk .who{font-family:var(--display);font-weight:700;color:var(--ink);font-size:.92rem}
.talk .line{font-weight:700;font-size:1.05rem}
.talk .line.good{color:var(--meadow)}
.talk .line.bad{color:var(--rose)}
.talk .side{display:flex;flex-direction:column;gap:6px}
.talk .side .iconbtn{width:44px;height:44px;font-size:1.05rem}
.hintbtn{background:#fff3cf!important;border-color:var(--gold)!important}

/* overlay / dialogs */
.veil{position:absolute;inset:0;background:rgba(18,24,38,.55);display:grid;place-items:center;padding:16px;z-index:20}
.veil .card{width:min(560px,100%);padding:20px 22px;max-height:100%;overflow:auto}
.veil .card h2{font-size:1.6rem;margin-bottom:6px}
.veil .card p{margin:6px 0;font-size:1.06rem}
.veil .row{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px;align-items:center}
.bigstars{font-size:2.6rem;letter-spacing:6px;color:#d9ccb0;text-align:center;margin:6px 0}
.bigstars b{color:var(--gold);display:inline-block;animation:starpop .5s backwards}
.bigstars b:nth-child(2){animation-delay:.2s}.bigstars b:nth-child(3){animation-delay:.4s}
@keyframes starpop{from{transform:scale(0) rotate(-90deg)}}
.storyline{display:flex;gap:12px;align-items:flex-start;margin:10px 0}
.storyline .face{width:54px;height:54px;flex:none;border-radius:50%;overflow:hidden;background:var(--paper-2);box-shadow:0 0 0 2px var(--edge)}
.storyline .face svg{width:100%;height:100%}
.storyline .who{font-family:var(--display);font-weight:700;color:var(--ink);font-size:.9rem}

/* shared mechanic pieces */
.chip{display:inline-grid;place-items:center;min-width:56px;min-height:56px;padding:6px 12px;border-radius:14px;background:#fffaf0;border:3px solid var(--edge);
  font-family:var(--display);font-weight:700;font-size:1.3rem;color:var(--ink);box-shadow:0 4px 0 var(--edge);touch-action:none}
.chip.drag{cursor:grab}
.dragging{z-index:50!important;transform:scale(1.08);box-shadow:0 12px 24px rgba(0,0,0,.25)!important;cursor:grabbing;transition:none!important}
.drop{border:3px dashed var(--edge);border-radius:16px;background:rgba(255,250,240,.7);min-height:70px;transition:background .15s,border-color .15s}
.drop.over{background:#fff1c9;border-color:var(--gold)}
.opt{display:flex;align-items:center;justify-content:center;text-align:center;padding:12px 14px;border-radius:16px;border:3px solid var(--edge);background:#fffaf0;
  font-weight:800;font-size:1.08rem;color:var(--text);min-height:58px;box-shadow:0 4px 0 var(--edge);transition:transform .1s}
.opt:active{transform:translateY(3px);box-shadow:0 1px 0 var(--edge)}
.opt.right{border-color:var(--meadow);background:#e3f0d8;box-shadow:0 4px 0 #7fb06f}
.opt.wrong{border-color:var(--rose);background:#f8dfe2;animation:shake .35s}
.opts{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(200px,100%),1fr));gap:10px}
@keyframes shake{25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}
.shake{animation:shake .35s}
.panel{background:var(--paper);border:2px solid var(--edge);border-radius:16px;padding:12px 14px;box-shadow:0 6px 18px rgba(0,0,0,.12)}
.prompt{font-family:var(--display);font-weight:600;color:var(--ink);font-size:1.2rem;text-align:center;text-wrap:balance}
.center{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px}
.pad{padding:14px}

/* passage / proof */
.passage{max-width:720px;margin:0 auto;font-size:1.15rem;line-height:2.1;background:#fffdf6;border:2px solid var(--edge);border-radius:14px;padding:14px 16px}
.passage .sen{border-radius:6px;padding:6px 3px;transition:background .15s;cursor:pointer;-webkit-box-decoration-break:clone;box-decoration-break:clone}
.passage .sen:hover{background:#fff1c9}
.passage .sen.picked{background:#cfe6b8;outline:2px solid var(--meadow)}
.passage .sen.nope{background:#f8dfe2}

/* numpad */
.numpad{display:grid;grid-template-columns:repeat(3,68px);gap:8px;justify-content:center}
.numpad button{height:58px;border-radius:14px;border:2px solid var(--edge);background:#fffaf0;font-family:var(--display);font-weight:700;font-size:1.5rem;color:var(--ink);box-shadow:0 3px 0 var(--edge)}
.numpad button:active{transform:translateY(2px);box-shadow:none}
.numpad .go{background:var(--gold);border-color:var(--gold-deep);color:#2a2008}
.numshow{min-width:180px;text-align:center;font-family:var(--display);font-weight:700;font-size:2rem;color:var(--ink);background:#fff;border:3px solid var(--edge);border-radius:14px;padding:6px 14px;min-height:56px;font-variant-numeric:tabular-nums}

/* boss */
.bossbox{display:flex;flex-direction:column;align-items:center;gap:6px}
.bossbox svg{width:150px;height:150px;transition:transform .5s}
.bossbox .hp{display:flex;gap:6px}
.bossbox .hp i{width:26px;height:14px;border-radius:7px;background:#9aa3b2;border:2px solid #6d7584}
.bossbox .hp i.gone{background:transparent;border-style:dashed}
.bossbox.hit svg{animation:bosshit .5s}
@keyframes bosshit{30%{transform:scale(.85) rotate(-8deg);filter:brightness(1.8)}}

.spark{position:absolute;width:12px;height:12px;border-radius:50%;pointer-events:none;z-index:60;background:radial-gradient(#fff,var(--gold) 45%,transparent 70%);animation:fly .9s ease-out forwards}
@keyframes fly{to{transform:translate(var(--dx),var(--dy)) scale(.2);opacity:0}}
.floaty{position:absolute;pointer-events:none;font-family:var(--display);font-weight:700;font-size:1.6rem;color:var(--meadow);z-index:60;animation:floatup .9s ease-out forwards;text-shadow:0 2px 0 #fff}
@keyframes floatup{to{transform:translateY(-50px);opacity:0}}

@media (max-width:560px){
  body{font-size:16px}
  .talk{min-height:76px}
  .talk .face{width:46px;height:46px}
  .node{width:110px}
  .node .orb{width:70px;height:70px;font-size:1.8rem}
  .numpad{grid-template-columns:repeat(3,60px)}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ---------- RPG: hero card, XP, academy, boss gate ---------- */
.herobar{display:flex;align-items:center;gap:8px;background:#fffaf0;border:2px solid var(--edge);border-radius:14px;padding:4px 10px 4px 4px;min-width:170px}
.hb-face{width:40px;height:40px;border-radius:50%;overflow:hidden;flex:none;box-shadow:0 0 0 2px var(--gold)}
.hb-face svg{width:100%;height:100%}
.hb-info{flex:1;min-width:0}
.hb-top{display:flex;gap:6px;align-items:baseline;white-space:nowrap}
.hb-top b{font-family:var(--display);color:var(--ink);font-size:1rem}
.hb-top span{font-size:.72rem;font-weight:800;color:var(--gold-deep);overflow:hidden;text-overflow:ellipsis}
.hb-xp{font-size:.7rem;font-weight:800;color:var(--muted);font-variant-numeric:tabular-nums}
.xpbar{height:9px;border-radius:5px;background:var(--paper-2);overflow:hidden;border:1px solid var(--edge)}
.xpbar i{display:block;height:100%;background:linear-gradient(90deg,#7cc4ff,#6a5cff);transition:width .6s}
.xpbar.big{height:14px;border-radius:7px;max-width:320px;margin:4px auto}
.pill.xp{color:#5a4ccf;border-color:#c9c2f5;background:#f2efff}
.floaty.xpf{color:#5a4ccf;font-size:1.2rem}
.xpwin{display:flex;gap:10px;justify-content:center;align-items:center;font-family:var(--display);font-size:1.5rem;color:#5a4ccf}
.lvup{background:var(--gold);color:#2a2008;border-radius:999px;padding:2px 12px;font-size:1.1rem;animation:starpop .6s}
.small{font-size:.85rem!important;font-weight:800;color:var(--muted)}
.academy{background:rgba(255,250,240,.6);border:2px solid var(--edge);border-radius:18px;padding:10px 12px 14px}
.academy>.eyebrow{margin:0 2px 8px}
.gfoot{margin-top:auto;display:flex;justify-content:space-between;align-items:center;gap:6px}
.gcard .stars{margin-top:0}
.xpchip{font-size:.75rem;font-weight:800;color:#5a4ccf;background:#f2efff;border-radius:999px;padding:2px 8px;white-space:nowrap}
.plays{font-size:.72rem;font-weight:800;color:var(--muted)}
.bossgate{margin-top:12px;width:100%;display:flex;gap:14px;align-items:center;text-align:left;border:3px solid #6d7584;border-radius:18px;padding:10px 16px;
  background:linear-gradient(135deg,#5b6274,#2f3442);color:#eef0f6;box-shadow:0 5px 0 #23262f}
.bossgate .bg-art{width:86px;height:86px;flex:none;filter:grayscale(.3)}
.bossgate .bg-art svg{width:100%;height:100%}
.bossgate .nm{font-family:var(--display);font-weight:700;font-size:1.25rem;color:#fff}
.bossgate .eyebrow{color:#f3c76a}
.bossgate .need{font-weight:800;font-size:.95rem;margin-top:2px;color:#ffb3bf}
.bossgate .need.ok{color:#bfe8a8}
.bossgate.ready{border-color:var(--gold);background:linear-gradient(135deg,#7a4a1a,#3a2a1a);box-shadow:0 5px 0 #2a1a0a,0 0 22px rgba(228,164,58,.5)}
.bossgate.ready .bg-art{filter:none;animation:bob 1.4s ease-in-out infinite}
.bossgate.locked{opacity:.5}
.bossgate .stars{color:#8a8f9c}.bossgate .stars b{color:var(--gold)}
@media (max-width:560px){ .herobar{min-width:0;padding-right:6px} .hb-top span,.hb-xp{display:none} .topbar h2{font-size:1.05rem} }
