*{box-sizing:border-box}
html,body{height:100%;margin:0;background:#0c1210;overflow:hidden;
  font-family:"Songti SC","Noto Serif SC","SimSun",serif;color:#f2ecdd;
  -webkit-tap-highlight-color:transparent}
#stage{position:fixed;inset:0;overflow:hidden}

/* ---------- 背景层 ---------- */
.bg{position:absolute;inset:-6%;background:center/cover no-repeat;transform:scale(1.08);
  transition:opacity .9s ease, filter .9s ease;will-change:transform}
.fog{position:absolute;left:-30%;right:-30%;bottom:-10%;height:60%;pointer-events:none;
  background:radial-gradient(60% 80% at 50% 100%, rgba(214,222,208,.40), rgba(214,222,208,0) 70%);
  animation:drift 28s ease-in-out infinite alternate}
.fog-b{bottom:-18%;height:44%;opacity:.65;
  background:radial-gradient(70% 70% at 40% 100%, rgba(236,238,227,.32), rgba(236,238,227,0) 70%);
  animation-duration:36s;animation-direction:alternate-reverse}
@keyframes drift{from{transform:translateX(-2.5%)}to{transform:translateX(2.5%)}}
.glow{position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(52% 38% at 72% 24%, rgba(255,226,170,.30), rgba(255,226,170,0) 70%)}
.vignette{position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(88% 80% at 50% 46%, rgba(12,18,15,0) 52%, rgba(12,18,15,.5) 100%)}
.bottom-fade{position:absolute;left:0;right:0;bottom:0;height:48%;pointer-events:none;
  background:linear-gradient(to top, rgba(8,13,10,.9), rgba(8,13,10,.42) 45%, rgba(8,13,10,0))}
.top-fade{position:absolute;left:0;right:0;top:0;height:24%;pointer-events:none;
  background:linear-gradient(to bottom, rgba(8,13,10,.88), rgba(8,13,10,.45) 46%, rgba(8,13,10,0))}
#view-quiz,#view-result,#view-auth{background:rgba(8,13,10,.58)}
canvas#dust{position:absolute;inset:0;pointer-events:none}

/* ---------- 视图 ---------- */
.view{position:absolute;inset:0;opacity:0;pointer-events:none;
  transition:opacity .7s ease, transform .7s ease;transform:translateY(10px);
  display:flex;flex-direction:column;padding:env(safe-area-inset-top) 0 env(safe-area-inset-bottom)}
.view.is-active{opacity:1;pointer-events:auto;transform:none}

.title-wrap,.panel-wrap{flex:1;display:flex;flex-direction:column;justify-content:flex-end;
  align-items:center;text-align:center;padding:0 28px 12vh;max-width:680px;margin:0 auto;width:100%}
.panel-wrap{justify-content:center;padding-bottom:0}

.eyebrow{font-size:11px;letter-spacing:.62em;color:#cfd6c2;opacity:.7;margin-bottom:14px;text-indent:.62em}
h1{margin:0;font-size:clamp(34px,7vw,58px);font-weight:500;letter-spacing:.28em;
  color:#f7f1e2;text-indent:.28em;text-shadow:0 2px 26px rgba(8,14,11,.85)}
h2{margin:0;font-size:clamp(26px,5vw,40px);font-weight:500;letter-spacing:.2em;
  color:#f7f1e2;text-indent:.2em;text-shadow:0 2px 22px rgba(8,14,11,.85)}
h3{margin:0 0 22px;font-size:clamp(18px,3.4vw,23px);line-height:1.7;font-weight:500;color:#f5efe0}
.rule{width:52px;height:1px;background:linear-gradient(90deg,transparent,#cbb98c,transparent);margin:20px auto}
.lead{font-size:14px;line-height:2;color:#d7d8c6;opacity:.85;letter-spacing:.1em;margin:0}
.tiny{font-size:11px;color:#8d9686;opacity:.8;margin-top:18px;letter-spacing:.15em}

/* ---------- 按钮 ---------- */
.btn-primary{margin-top:28px;padding:15px 46px;border:1px solid rgba(203,185,140,.5);
  background:rgba(18,25,20,.62);color:#f2ecdd;font-family:inherit;font-size:13px;
  letter-spacing:.4em;text-indent:.4em;cursor:pointer;border-radius:2px;
  transition:background .25s, border-color .25s, transform .2s;backdrop-filter:blur(6px)}
.btn-primary:hover{background:rgba(46,60,48,.75);border-color:#cbb98c;transform:translateY(-1px)}
.btn-primary:disabled{opacity:.4;cursor:default;transform:none}
.btn-ghost{background:none;border:none;color:#cfd6c2;font-family:inherit;font-size:12px;
  letter-spacing:.2em;cursor:pointer;opacity:.75;padding:8px 6px}
.btn-ghost:hover{opacity:1}
.actions{display:flex;gap:16px;align-items:center;justify-content:center;flex-wrap:wrap}

/* ---------- HUD ---------- */
.hud{display:flex;justify-content:space-between;align-items:flex-start;
  padding:calc(18px + env(safe-area-inset-top)) 22px 0;max-width:900px;margin:0 auto;width:100%}
.hud-title{font-size:19px;letter-spacing:.28em;color:#f4eedf;text-shadow:0 2px 14px rgba(8,14,11,.9)}
.hud-sub{font-size:11px;letter-spacing:.18em;color:#c6cdb9;opacity:.8;margin-top:6px}
.map-foot{position:absolute;left:0;right:0;bottom:calc(20px + env(safe-area-inset-bottom));
  text-align:center;font-size:11px;color:#a9b0a0;letter-spacing:.16em;opacity:.8}

/* ---------- 节点 ---------- */
.nodes{position:absolute;inset:0;pointer-events:none}
.node{position:absolute;transform:translate(-50%,-50%);background:none;border:none;
  cursor:pointer;font-family:inherit;display:flex;flex-direction:column;align-items:center;gap:10px;
  padding:10px;pointer-events:none}
.view.is-active .node{pointer-events:auto}
.node-dot{width:13px;height:13px;border-radius:50%;background:#e8c98a;
  box-shadow:0 0 0 6px rgba(232,201,138,.12), 0 0 26px rgba(232,201,138,.7);
  transition:transform .25s, box-shadow .25s}
.node:hover .node-dot{transform:scale(1.25);box-shadow:0 0 0 9px rgba(232,201,138,.16), 0 0 34px rgba(232,201,138,.9)}
.node-name{font-size:13px;letter-spacing:.3em;text-indent:.3em;color:#f4eedf;
  text-shadow:0 2px 12px rgba(8,14,11,.95)}
.node-sub{font-size:10px;letter-spacing:.14em;color:#b9c0b0;opacity:.75}
.node.is-cleared .node-dot{background:#9fbf8a;box-shadow:0 0 0 6px rgba(159,191,138,.12), 0 0 26px rgba(159,191,138,.6)}
.node.is-cleared .node-name::after{content:" 已通";font-size:9px;opacity:.7;letter-spacing:.1em}
.node-pulse{position:absolute;width:64px;height:64px;border-radius:50%;
  border:1px solid rgba(232,201,138,.35);animation:pulse 3.2s ease-out infinite;pointer-events:none}
@keyframes pulse{0%{transform:scale(.4);opacity:.8}100%{transform:scale(1.5);opacity:0}}

/* ---------- 答题 ---------- */
.quiz-wrap{flex:1;display:flex;flex-direction:column;justify-content:center;
  max-width:640px;margin:0 auto;width:100%;padding:24px 24px 40px}
.quiz-top{display:flex;justify-content:space-between;font-size:11px;letter-spacing:.18em;
  color:#e2e6d6;margin-bottom:22px;text-shadow:0 2px 10px rgba(0,0,0,.9)}
.options{display:flex;flex-direction:column;gap:10px}
.option{display:flex;gap:14px;align-items:flex-start;padding:16px 18px;text-align:left;
  background:rgba(16,22,18,.62);border:1px solid rgba(203,185,140,.18);border-radius:3px;
  color:#eae4d4;font-family:inherit;font-size:14px;line-height:1.6;cursor:pointer;
  transition:background .2s, border-color .2s;backdrop-filter:blur(4px)}
.option:hover{background:rgba(34,44,36,.72);border-color:rgba(203,185,140,.4)}
.option .key{flex:none;width:22px;color:#cbb98c;letter-spacing:.05em}
.option.is-picked{border-color:#cbb98c;background:rgba(46,58,48,.8)}
.option.is-right{border-color:#7fa06e;background:rgba(38,56,40,.82)}
.option.is-wrong{border-color:#a86a58;background:rgba(58,36,32,.78)}
.explain{margin-top:18px;padding:16px 18px;background:rgba(12,18,15,.78);
  border-left:2px solid rgba(203,185,140,.5);border-radius:2px}
.verdict{font-size:13px;letter-spacing:.2em;margin-bottom:8px}
.verdict.ok{color:#9fc48a}
.verdict.no{color:#d08a76}
.explain-body{font-size:13px;line-height:1.95;color:#cdd2c0}
#btn-submit{margin-top:24px;align-self:center}
#btn-next{margin-top:24px;align-self:center}

/* ---------- 结算 ---------- */
.result-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;
  background:rgba(203,185,140,.16);margin:28px 0;border:1px solid rgba(203,185,140,.16)}
.result-cell{background:rgba(12,18,15,.7);padding:16px 18px;text-align:left}
.result-cell .k{font-size:10px;letter-spacing:.2em;color:#9aa394;display:block;margin-bottom:6px}
.result-cell .v{font-size:20px;color:#f0e9d8;letter-spacing:.05em}

/* ---------- 账号 / 双生行者 ---------- */
.actions.col{flex-direction:column;gap:6px}
.hud-right{display:flex;align-items:center;gap:10px}
.pair-badge{font-size:10px;letter-spacing:.14em;padding:5px 11px;border-radius:20px;
  border:1px solid rgba(203,185,140,.28);color:#cfd6c2;white-space:nowrap}
.pair-badge.is-on{border-color:rgba(159,191,138,.6);color:#b7d3a4}
.pair-badge.is-wait{border-color:rgba(232,201,138,.5);color:#e6d3a2}
.pair-badge.is-off{opacity:.55}

.form{width:100%;max-width:340px;margin:26px auto 0;display:flex;flex-direction:column;gap:14px}
.field{display:flex;flex-direction:column;gap:7px;text-align:left}
.field span{font-size:10px;letter-spacing:.24em;color:#a9b0a0}
.field input{padding:12px 14px;background:rgba(12,18,15,.62);border:1px solid rgba(203,185,140,.24);
  border-radius:3px;color:#f2ecdd;font-family:inherit;font-size:15px;outline:none;
  transition:border-color .2s}
.field input:focus{border-color:#cbb98c}
.field input::placeholder{color:#7f8878}

.pair-panel{position:absolute;inset:0;z-index:30;display:flex;align-items:center;justify-content:center;
  background:rgba(6,10,8,.72);padding:22px;backdrop-filter:blur(4px)}
.pair-panel[hidden]{display:none}
.pair-card{width:100%;max-width:420px;max-height:80vh;overflow:auto;padding:24px;
  background:rgba(14,20,16,.94);border:1px solid rgba(203,185,140,.28);border-radius:4px}
.pair-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;
  font-size:13px;letter-spacing:.26em;color:#e8e2d0}
.pair-card .lead{font-size:12.5px;line-height:1.9;text-align:left}
.pair-row{display:flex;justify-content:space-between;align-items:center;padding:12px 0;
  border-bottom:1px solid rgba(203,185,140,.14);font-size:12px}
.pair-row .k{color:#9aa394;letter-spacing:.16em}
.pair-row .v{color:#f0e9d8}
.mono{font-family:Consolas,monospace;font-size:17px;letter-spacing:.28em;color:#e8c98a}
.pair-input{display:flex;gap:8px;margin:16px 0 10px}
.pair-input input{flex:1;padding:11px 12px;background:rgba(12,18,15,.72);
  border:1px solid rgba(203,185,140,.24);border-radius:3px;color:#f2ecdd;font-family:inherit;
  font-size:15px;letter-spacing:.22em;outline:none}
.pair-card .actions{justify-content:flex-start;gap:12px;margin-top:14px}

.toast{position:absolute;left:50%;bottom:12%;transform:translateX(-50%);z-index:40;
  padding:12px 22px;background:rgba(12,18,15,.94);border:1px solid rgba(203,185,140,.3);
  border-radius:3px;font-size:12.5px;letter-spacing:.1em;color:#f0e9d8;
  max-width:86vw;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.toast[hidden]{display:none}

.mistake-list{width:100%;max-width:560px;margin:20px auto 0;max-height:50vh;overflow:auto;text-align:left}
.mistake-row{padding:14px 16px;border-bottom:1px solid rgba(203,185,140,.14)}
.mistake-row.is-done{opacity:.45}
.mistake-stem{font-size:13px;line-height:1.65;color:#eae4d4}
.mistake-ans{font-size:11px;color:#9aa394;margin-top:6px;letter-spacing:.06em}

/* ---------- 启程之城 ---------- */
.town-canvas{position:absolute;inset:0;width:100%;height:100%;display:block;background:#25302a}
.town-hud{position:relative;z-index:3}
.town-hint{position:absolute;left:50%;bottom:13%;transform:translateX(-50%);z-index:4;
  padding:11px 20px;background:rgba(12,18,15,.9);border:1px solid rgba(203,185,140,.32);
  border-radius:3px;font-size:12.5px;letter-spacing:.1em;color:#f0e9d8;white-space:nowrap}
.town-hint[hidden]{display:none}
.town-tip{position:absolute;left:50%;bottom:4%;transform:translateX(-50%);z-index:3;
  font-size:10.5px;letter-spacing:.16em;color:#9aa394;opacity:.7;pointer-events:none}

@media (max-width:520px){
  .title-wrap,.panel-wrap{padding-bottom:14vh}
  .node-sub{display:none}
  .quiz-wrap{padding:18px 18px 30px}
  .result-grid{grid-template-columns:1fr}
}
