/* 荒野守卫军 —— 界面。木石金三色，横竖屏同一套组件不同布局。 */

:root{
  --wood:#4a3524;
  --wood-lt:#6b4f34;
  --wood-dk:#2e2118;
  --stone:#8d959c;
  --gold:#e0b957;
  --gold-dk:#a8792a;
  --parch:#f0e4c8;
  --parch-dk:#d6c39c;
  --ink:#2e2418;
  --green:#6fa845;
  --red:#c4442e;
  --blue:#4a7fa8;
  --purple:#8e6dc4;
  --safe-t:env(safe-area-inset-top,0px);
  --safe-b:env(safe-area-inset-bottom,0px);
  --safe-l:env(safe-area-inset-left,0px);
  --safe-r:env(safe-area-inset-right,0px);
  --dock-h:96px;
}

*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0;height:100%;overflow:hidden;overscroll-behavior:none}
body{
  background:#221a12;
  color:var(--parch);
  font-family:"Noto Sans SC","PingFang SC","Microsoft YaHei",system-ui,sans-serif;
  font-size:15px;
  -webkit-font-smoothing:antialiased;
  touch-action:manipulation;
  user-select:none;-webkit-user-select:none;
}
button{font-family:inherit;color:inherit;cursor:pointer;border:0;background:none}

/* ---------- 通用木质按钮 ---------- */
.btn{
  position:relative;
  min-height:46px;padding:10px 20px;
  background:linear-gradient(#7a5a38,#4e3823);
  border:2px solid #2e2118;
  border-radius:10px;
  box-shadow:inset 0 2px 0 rgba(255,225,170,.28), inset 0 -3px 0 rgba(0,0,0,.32), 0 3px 0 #241a12;
  color:#f3e6c8;font-weight:700;font-size:15px;letter-spacing:.02em;
  transition:transform .08s, box-shadow .08s;
}
.btn:active{transform:translateY(3px);box-shadow:inset 0 2px 0 rgba(255,225,170,.2), inset 0 -2px 0 rgba(0,0,0,.3), 0 0 0 #241a12}
.btn[disabled]{opacity:.45;pointer-events:none}
.btn-xl{font-size:19px;min-height:58px;padding:14px 40px}
.btn-primary{background:linear-gradient(#d8a53f,#a8792a);color:#2e2012;box-shadow:inset 0 2px 0 rgba(255,246,200,.5), inset 0 -3px 0 rgba(0,0,0,.28), 0 3px 0 #6b4c18}
.btn-ghost{background:linear-gradient(#4a4038,#332b24)}
.linkbtn{background:none;border:0;color:rgba(240,228,200,.55);font-size:13px;text-decoration:underline;padding:8px}
.iconbtn{
  width:42px;height:42px;border-radius:9px;
  background:linear-gradient(#6b4f34,#3d2c1c);
  border:2px solid #241a12;
  box-shadow:inset 0 2px 0 rgba(255,225,170,.22), 0 2px 0 #1d150e;
  font-size:19px;font-weight:700;color:#f0e0bc;
  display:grid;place-items:center;flex:none;
}
.iconbtn.sm{width:38px;height:38px;font-size:16px}
.iconbtn:active{transform:translateY(2px);box-shadow:none}
.pill{display:inline-block;background:var(--gold);color:#2e2012;border-radius:20px;padding:1px 9px;font-size:12px;margin-left:6px;font-weight:800}

/* ---------- 载入 ---------- */
#boot{
  position:fixed;inset:0;z-index:200;
  background:radial-gradient(ellipse at 50% 38%, #3d5b2c, #1c2416 70%);
  display:grid;place-content:center;justify-items:center;gap:16px;
  transition:opacity .45s;
}
#boot.gone{opacity:0;pointer-events:none}
.boot-crest{width:78px;height:78px;background:var(--gold);
  -webkit-mask:var(--crest) center/contain no-repeat;mask:var(--crest) center/contain no-repeat;
  --crest:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Cpath d='M32 3 6 12v20c0 15 11 26 26 29 15-3 26-14 26-29V12L32 3zm0 8 18 6v15c0 11-8 19-18 22-10-3-18-11-18-22V17l18-6z'/%3E%3Cpath d='M32 20l4 9h9l-7 6 3 10-9-6-9 6 3-10-7-6h9z'/%3E%3C/svg%3E");
  animation:pulse 1.8s ease-in-out infinite;
}
@keyframes pulse{0%,100%{transform:scale(1);opacity:.9}50%{transform:scale(1.07);opacity:1}}
.boot-title{font-size:26px;font-weight:900;letter-spacing:.22em;color:#f0e4c8;text-shadow:0 3px 0 #1c2416}
.boot-bar{width:220px;height:9px;background:#1e2a18;border:2px solid #0f150c;border-radius:6px;overflow:hidden}
.boot-bar i{display:block;height:100%;width:0;background:linear-gradient(90deg,#8fc24f,#e0b957);transition:width .3s}
.boot-tip{font-size:12px;color:rgba(240,228,200,.55)}

/* ---------- 屏幕切换 ---------- */
.screen{position:fixed;inset:0;display:none;flex-direction:column}
.screen.on{display:flex}

/* ---------- 主菜单 ---------- */
#home{
  background:
    radial-gradient(ellipse at 50% 20%, rgba(140,190,90,.22), transparent 60%),
    linear-gradient(#33301f,#1d2415 55%,#161c11);
  overflow:auto;
}
.home-inner{margin:auto;padding:calc(28px + var(--safe-t)) 24px calc(28px + var(--safe-b));text-align:center;display:flex;flex-direction:column;align-items:center;gap:14px;max-width:520px}
.crest-lg{width:92px;height:92px;background:linear-gradient(#f2d77a,#b8862e);
  -webkit-mask:var(--crest) center/contain no-repeat;mask:var(--crest) center/contain no-repeat;
  --crest:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Cpath d='M32 3 6 12v20c0 15 11 26 26 29 15-3 26-14 26-29V12L32 3zm0 8 18 6v15c0 11-8 19-18 22-10-3-18-11-18-22V17l18-6z'/%3E%3Cpath d='M32 20l4 9h9l-7 6 3 10-9-6-9 6 3-10-7-6h9z'/%3E%3C/svg%3E");
  filter:drop-shadow(0 4px 0 rgba(0,0,0,.4));
}
#home h1{margin:0;font-size:clamp(30px,8vw,44px);font-weight:900;letter-spacing:.12em;
  color:#f5e9c6;text-shadow:0 3px 0 #4a3524,0 5px 10px rgba(0,0,0,.5)}
.tagline{margin:0;font-size:14px;color:rgba(240,228,200,.62);letter-spacing:.1em}
.home-btns{display:flex;flex-direction:column;gap:11px;width:100%;max-width:290px;margin-top:8px}
.home-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:16px;width:100%;max-width:400px}
.home-stats div{background:rgba(20,26,16,.55);border:1px solid rgba(224,185,87,.22);border-radius:10px;padding:9px 4px}
.home-stats b{display:block;font-size:18px;color:var(--gold);font-variant-numeric:tabular-nums}
.home-stats span{font-size:11px;color:rgba(240,228,200,.55)}

/* ---------- 选关 ---------- */
#campaign{background:linear-gradient(#2c2a1c,#191d12);overflow:hidden}
.topline{display:flex;align-items:center;gap:12px;padding:calc(10px + var(--safe-t)) calc(14px + var(--safe-r)) 10px calc(14px + var(--safe-l));
  background:linear-gradient(#4a3524,#33241a);border-bottom:2px solid #1d150e;flex:none}
.topline h2{margin:0;font-size:17px;font-weight:800;letter-spacing:.08em;flex:1}
.stars-count{color:var(--gold);font-weight:800;font-size:15px}
.level-grid{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;
  display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;
  padding:14px calc(14px + var(--safe-r)) calc(24px + var(--safe-b)) calc(14px + var(--safe-l))}
.lv-card{
  position:relative;border-radius:12px;overflow:hidden;
  border:2px solid #1d150e;background:#3a4227;
  box-shadow:0 3px 0 #1d150e;
  padding:0;text-align:left;min-height:120px;display:flex;flex-direction:column;
}
.lv-card canvas{width:100%;height:74px;display:block;background:#4f6b32}
.lv-meta{padding:7px 10px 9px;background:linear-gradient(#4a3524,#33241a);flex:1}
.lv-name{font-size:14px;font-weight:800;color:#f3e6c8}
.lv-area{font-size:11px;color:rgba(240,228,200,.5)}
.lv-stars{position:absolute;top:6px;right:8px;font-size:13px;color:var(--gold);text-shadow:0 1px 2px rgba(0,0,0,.8)}
.lv-no{position:absolute;top:5px;left:8px;font-size:12px;font-weight:800;color:#fff;background:rgba(20,16,10,.7);border-radius:6px;padding:1px 7px}
.lv-card.locked{filter:grayscale(.85) brightness(.6);pointer-events:none}
.lv-card.locked::after{content:"🔒";position:absolute;inset:0;display:grid;place-content:center;font-size:26px}

/* ---------- 战斗 ---------- */
#game{background:#12160e}
#stage{position:relative;flex:1;min-height:0;overflow:hidden}
#cv{display:block;width:100%;height:100%;touch-action:none}

#topbar{
  position:absolute;top:0;left:0;right:0;
  display:flex;justify-content:space-between;align-items:center;gap:8px;
  padding:calc(6px + var(--safe-t)) calc(8px + var(--safe-r)) 6px calc(8px + var(--safe-l));
  pointer-events:none;
}
#topbar .iconbtn{pointer-events:auto}
.hud-group{display:flex;align-items:center;gap:6px}
.hud{
  display:flex;align-items:center;gap:6px;
  background:linear-gradient(#4a3524,#2e2118);
  border:2px solid #191108;border-radius:9px;
  padding:5px 11px 5px 8px;
  box-shadow:inset 0 1px 0 rgba(255,225,170,.2), 0 2px 0 rgba(0,0,0,.4);
  font-weight:800;font-size:15px;font-variant-numeric:tabular-nums;
  min-height:36px;
}
.hud.wave{font-size:13px;letter-spacing:.04em;padding:5px 12px;white-space:nowrap}
.ic{width:17px;height:17px;display:block;flex:none;background-size:contain;background-repeat:no-repeat}
.ic-heart{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23d9463a' stroke='%23431a14' stroke-width='2' d='M12 20S3 14 3 8.5A4.5 4.5 0 0 1 12 6a4.5 4.5 0 0 1 9 2.5C21 14 12 20 12 20z'/%3E%3C/svg%3E")}
.ic-coin{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='9' fill='%23e0b957' stroke='%235c3f10' stroke-width='2'/%3E%3Ccircle cx='12' cy='12' r='4.5' fill='none' stroke='%235c3f10' stroke-width='1.6'/%3E%3C/svg%3E")}
.ic-cmd{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%238ec5e8' stroke='%231d3446' stroke-width='2' d='M5 4h14v13l-7 4-7-4z'/%3E%3Cpath fill='%231d3446' d='M11 7h2v6h-2zm0 7h2v2h-2z'/%3E%3C/svg%3E")}
.hud.lives b{color:#ffb0a6}
.hud.gold b{color:var(--gold)}
.hud.cmd b{color:#9fd4f5}

.buff-tag{
  position:absolute;top:calc(52px + var(--safe-t));left:50%;transform:translateX(-50%);
  background:linear-gradient(#d8a53f,#a8792a);color:#2e2012;
  border:2px solid #5c3f10;border-radius:20px;padding:4px 16px;
  font-size:12px;font-weight:800;box-shadow:0 3px 0 rgba(0,0,0,.35);
  animation:tagIn .3s;
}
@keyframes tagIn{from{opacity:0;transform:translate(-50%,-10px)}}
.toast{
  position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  background:rgba(24,18,12,.92);border:2px solid var(--gold-dk);border-radius:12px;
  padding:12px 22px;font-size:16px;font-weight:800;color:var(--parch);
  box-shadow:0 6px 20px rgba(0,0,0,.6);pointer-events:none;
  animation:toastIn .25s;
}
@keyframes toastIn{from{opacity:0;transform:translate(-50%,-50%) scale(.86)}}

/* 建造 / 塔信息浮层 */
.popup{
  position:absolute;z-index:8;
  background:linear-gradient(#4e3823,#33241a);
  border:2px solid #191108;border-radius:14px;
  box-shadow:0 6px 22px rgba(0,0,0,.6), inset 0 1px 0 rgba(255,225,170,.2);
  padding:10px;
  animation:popIn .16s cubic-bezier(.2,1.4,.5,1);
  max-width:min(94vw,420px);
}
@keyframes popIn{from{opacity:0;transform:scale(.84)}}
.build-row{display:flex;gap:8px}
.tw-btn{
  width:70px;padding:7px 4px 6px;border-radius:10px;
  background:linear-gradient(#6b4f34,#3d2c1c);border:2px solid #191108;
  box-shadow:inset 0 1px 0 rgba(255,225,170,.2);
  display:flex;flex-direction:column;align-items:center;gap:3px;
}
.tw-btn canvas{width:44px;height:44px;display:block}
.tw-btn .nm{font-size:11px;font-weight:700;color:#f0e0bc;line-height:1.1}
.tw-btn .cost{font-size:12px;font-weight:800;color:var(--gold);font-variant-numeric:tabular-nums}
.tw-btn.no{opacity:.42}
.tw-btn:active{transform:translateY(2px)}

.info-head{display:flex;align-items:center;gap:9px;margin-bottom:8px}
.info-head canvas{width:46px;height:46px;flex:none}
.info-t{flex:1;min-width:0}
.info-name{font-size:15px;font-weight:800;color:#f5e9c6;line-height:1.25}
.info-role{font-size:11px;color:rgba(240,228,200,.55)}
.info-stats{display:flex;gap:12px;font-size:12px;margin-bottom:9px;color:rgba(240,228,200,.8);flex-wrap:wrap}
.info-stats b{color:#fff;font-variant-numeric:tabular-nums}
.info-btns{display:flex;gap:7px;flex-wrap:wrap}
.info-btns .btn{flex:1;min-width:88px;min-height:42px;padding:7px 10px;font-size:13px;border-radius:9px}
.info-desc{font-size:11.5px;color:rgba(240,228,200,.62);line-height:1.5;margin-bottom:8px}
.abil-row{display:flex;gap:7px;margin-bottom:8px}
.abil-btn{
  flex:1;padding:7px 9px;border-radius:9px;text-align:left;
  background:linear-gradient(#4a5a3a,#2f3a26);border:2px solid #191108;min-height:52px;
}
.abil-btn.owned{background:linear-gradient(#5b7a3a,#3d5227);border-color:#2a3a1c}
.abil-btn.no{opacity:.45}
.abil-btn .an{font-size:12px;font-weight:800;color:#e6f2cc;display:block}
.abil-btn .ad{font-size:10px;color:rgba(230,242,204,.6);line-height:1.35;display:block;margin-top:2px}
.abil-btn .ac{font-size:11px;font-weight:800;color:#9fd4f5}

/* 底部操作条 */
#dock{
  flex:none;height:var(--dock-h);
  display:flex;align-items:center;gap:10px;
  padding:8px calc(12px + var(--safe-r)) calc(8px + var(--safe-b)) calc(12px + var(--safe-l));
  background:linear-gradient(#4a3524,#2a1d13);
  border-top:3px solid #191108;
  box-shadow:inset 0 2px 0 rgba(255,225,170,.14);
}
.dock-abilities{display:flex;gap:8px;flex:none}
.ability{
  position:relative;width:64px;height:64px;border-radius:12px;
  background:linear-gradient(#6b4f34,#3d2c1c);border:2px solid #191108;
  box-shadow:inset 0 2px 0 rgba(255,225,170,.22), 0 3px 0 #1d150e;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
  overflow:hidden;
}
.ability:active{transform:translateY(3px);box-shadow:none}
.ability.armed{border-color:var(--gold);box-shadow:0 0 0 3px rgba(224,185,87,.45), inset 0 2px 0 rgba(255,225,170,.3)}
.ability.cooling .ab-ic{filter:grayscale(1) brightness(.6)}
.ab-ic{width:30px;height:30px;background-size:contain;background-repeat:no-repeat;background-position:center}
.ab-meteor{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Cpath fill='%23e0621f' stroke='%234a1c08' stroke-width='2' d='M22 4 8 18l6 6L28 10z'/%3E%3Ccircle cx='9' cy='23' r='6' fill='%23ffb347' stroke='%234a1c08' stroke-width='2'/%3E%3C/svg%3E")}
.ab-rally{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Cpath fill='none' stroke='%23e8dcc0' stroke-width='3' d='M10 28V5'/%3E%3Cpath fill='%234a7fa8' stroke='%231d3446' stroke-width='2' d='M10 5h16l-4 6 4 6H10z'/%3E%3C/svg%3E")}
.ab-name{font-size:10px;font-weight:800;color:#f0e0bc}
.ab-cd{position:absolute;inset:0;pointer-events:none}
.ab-cd i{position:absolute;left:0;right:0;bottom:0;background:rgba(10,8,6,.66);height:0;transition:height .1s linear}
.dock-mid{flex:1;display:flex;justify-content:center}
.btn-quiz{
  display:flex;align-items:center;gap:10px;
  background:linear-gradient(#3f6288,#2a4460);
  box-shadow:inset 0 2px 0 rgba(190,225,255,.28), inset 0 -3px 0 rgba(0,0,0,.3), 0 3px 0 #14202c;
  padding:8px 18px;min-height:56px;
}
.btn-quiz .q-mark{
  width:30px;height:30px;border-radius:50%;display:grid;place-items:center;flex:none;
  background:linear-gradient(#e0b957,#a8792a);color:#2e2012;font-size:18px;font-weight:900;
  border:2px solid #5c3f10;
}
.btn-quiz small{display:block;font-size:10px;font-weight:600;color:rgba(200,225,245,.7);margin-top:1px}
.btn-quiz span:nth-child(2){font-size:14px}
.btn-quiz:disabled{cursor:not-allowed;filter:saturate(.45);opacity:.72;transform:none}
.btn-quiz.cooldown .q-mark{background:linear-gradient(#9aa9b5,#697885);color:#26323b;border-color:#40505c}
.dock-right{flex:none}
.btn-wave{
  background:linear-gradient(#7a9a3a,#4d6b24);min-height:56px;padding:8px 18px;
  box-shadow:inset 0 2px 0 rgba(220,245,170,.3), inset 0 -3px 0 rgba(0,0,0,.3), 0 3px 0 #2d4014;
}
.btn-wave small{display:block;font-size:10px;font-weight:600;color:rgba(230,245,200,.72);margin-top:1px}
.btn-wave.ready{animation:waveGlow 1.5s ease-in-out infinite}
@keyframes waveGlow{0%,100%{box-shadow:inset 0 2px 0 rgba(220,245,170,.3), 0 3px 0 #2d4014, 0 0 0 0 rgba(224,185,87,.5)}50%{box-shadow:inset 0 2px 0 rgba(220,245,170,.3), 0 3px 0 #2d4014, 0 0 0 7px rgba(224,185,87,0)}}

/* ---------- 弹窗通用 ---------- */
.modal{position:fixed;inset:0;z-index:60;display:none;align-items:center;justify-content:center;
  background:rgba(12,9,6,.72);backdrop-filter:blur(3px);padding:16px;
  padding-top:calc(16px + var(--safe-t));padding-bottom:calc(16px + var(--safe-b));}
.modal.on{display:flex;animation:fadeIn .2s}
@keyframes fadeIn{from{opacity:0}}
.sheet{
  width:100%;max-width:560px;max-height:100%;
  background:
    linear-gradient(rgba(255,246,224,.06),rgba(0,0,0,.14)),
    linear-gradient(#f0e4c8,#dcc9a0);
  color:var(--ink);
  border:3px solid #4a3524;border-radius:16px;
  box-shadow:0 12px 40px rgba(0,0,0,.65), inset 0 0 0 2px rgba(255,255,255,.28);
  display:flex;flex-direction:column;overflow:hidden;
  animation:sheetIn .26s cubic-bezier(.2,1.2,.4,1);
}
@keyframes sheetIn{from{opacity:0;transform:translateY(22px) scale(.96)}}
.scroll-head{
  display:flex;align-items:center;gap:9px;flex:none;
  padding:9px 10px 9px 14px;
  background:linear-gradient(#4a3524,#33241a);color:var(--parch);
  border-bottom:2px solid #2e2118;
}
.q-cat{font-size:13px;font-weight:800;letter-spacing:.04em;flex:1;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.q-type{font-size:11px;background:var(--gold);color:#2e2012;border-radius:12px;padding:2px 9px;font-weight:800;flex:none}

/* ---------- 答题 ---------- */
.q-stem{padding:16px 18px 10px;font-size:16px;line-height:1.65;font-weight:600;flex:none}
.q-options{padding:0 14px;overflow-y:auto;-webkit-overflow-scrolling:touch;flex:1;min-height:60px}
.opt{
  display:flex;align-items:flex-start;gap:10px;width:100%;text-align:left;
  padding:11px 13px;margin-bottom:8px;min-height:48px;
  background:rgba(255,255,255,.5);
  border:2px solid #b8a67e;border-radius:10px;
  font-size:14.5px;line-height:1.5;color:var(--ink);
  transition:background .12s,border-color .12s;
}
.opt .k{
  width:25px;height:25px;flex:none;border-radius:50%;
  background:#c4b085;color:#3a2e1c;font-weight:800;font-size:13px;
  display:grid;place-items:center;margin-top:1px;
}
.opt.sel{background:rgba(224,185,87,.42);border-color:var(--gold-dk)}
.opt.sel .k{background:var(--gold-dk);color:#fff}
.opt.ok{background:rgba(111,168,69,.4);border-color:#4d7a2c}
.opt.ok .k{background:#4d7a2c;color:#fff}
.opt.bad{background:rgba(196,68,46,.32);border-color:#8e2f20}
.opt.bad .k{background:#8e2f20;color:#fff}
.q-foot{display:flex;align-items:center;gap:12px;padding:12px 16px;flex:none;border-top:2px solid rgba(74,53,36,.2)}
.q-reward{flex:1;font-size:12.5px;color:#5c4a2e;font-weight:600}
.q-foot .btn{min-width:110px}
.q-result{padding:12px 18px 16px;font-size:13.5px;line-height:1.6;flex:none;border-top:2px solid rgba(74,53,36,.2)}
.q-result.ok{background:rgba(111,168,69,.22);color:#2f4a1c}
.q-result.bad{background:rgba(196,68,46,.18);color:#6b2318}
.q-result b{font-weight:800}

/* ---------- 专精 ---------- */
.spec-cards{display:grid;gap:12px;padding:14px;overflow-y:auto}
@media(min-width:520px){.spec-cards{grid-template-columns:1fr 1fr}}
.spec-card{
  text-align:left;padding:12px;border-radius:12px;
  background:rgba(255,255,255,.45);border:2px solid #b8a67e;
  display:flex;flex-direction:column;gap:7px;
}
.spec-card canvas{width:76px;height:96px;align-self:center}
.spec-card h4{margin:0;font-size:16px;font-weight:900}
.spec-card .sd{font-size:12px;line-height:1.55;color:#5c4a2e}
.spec-card .sa{font-size:11.5px;color:#4a3b24;background:rgba(255,255,255,.5);border-radius:7px;padding:5px 8px;line-height:1.45}
.spec-card .sc{font-weight:800;color:#8a5f14;font-size:14px}
.spec-card.no{opacity:.5}

/* ---------- 星辰树 ---------- */
.tree-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:9px;padding:12px;overflow-y:auto}
.tnode{
  text-align:left;padding:9px 11px;border-radius:10px;min-height:76px;
  background:rgba(255,255,255,.42);border:2px solid #b8a67e;
}
.tnode.max{background:rgba(111,168,69,.34);border-color:#4d7a2c}
.tnode.no{opacity:.48}
.tnode .tn{font-size:13px;font-weight:800;display:flex;justify-content:space-between;gap:6px}
.tnode .tl{font-size:11px;color:#7a6440;font-weight:800}
.tnode .td{font-size:11px;color:#5c4a2e;line-height:1.45;margin-top:3px}
.tree-foot{padding:8px;text-align:center;flex:none}
.tree-foot .linkbtn{color:#7a6440}

/* ---------- 图鉴 ---------- */
.codex-sheet{max-width:900px;height:min(88vh,640px)}
.codex-body{flex:1;min-height:0;background:#5b8a38}
#codexCv{width:100%;height:100%;display:block}
.codex-tabs{display:flex;gap:6px;padding:9px;overflow-x:auto;flex:none;background:linear-gradient(#4a3524,#33241a)}
.codex-tabs button{
  flex:none;padding:7px 13px;border-radius:8px;font-size:12px;font-weight:700;
  background:linear-gradient(#6b4f34,#3d2c1c);border:2px solid #191108;color:#f0e0bc;min-height:38px
}
.codex-tabs button.on{background:linear-gradient(#d8a53f,#a8792a);color:#2e2012}

/* ---------- 结算 ---------- */
.result-sheet{max-width:420px;text-align:center;padding:22px 20px 18px;align-items:center}
.res-stars{font-size:38px;letter-spacing:6px;color:var(--gold);
  text-shadow:0 2px 0 #8a5f14;margin-bottom:4px;min-height:46px}
.res-stars .off{color:rgba(74,53,36,.25);text-shadow:none}
.result-sheet h3{margin:0 0 14px;font-size:26px;font-weight:900;color:#3a2c18}
.res-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;width:100%;margin-bottom:16px}
.res-grid div{background:rgba(255,255,255,.42);border:2px solid #b8a67e;border-radius:9px;padding:8px 4px}
.res-grid b{display:block;font-size:18px;color:#6b4a12;font-variant-numeric:tabular-nums}
.res-grid span{font-size:11px;color:#5c4a2e}
.res-btns{display:flex;gap:8px;width:100%}
.res-btns .btn{flex:1;min-height:46px;font-size:13.5px;padding:8px 6px}

/* ---------- 竖屏 ---------- */
@media (orientation:portrait){
  :root{--dock-h:118px}
  #dock{flex-wrap:wrap;height:auto;padding-bottom:calc(10px + var(--safe-b))}
  .dock-mid{order:3;flex-basis:100%;flex:1 0 100%;margin-top:8px}
  .dock-mid .btn-quiz{width:100%;justify-content:center}
  .dock-abilities{order:1}
  .dock-right{order:2;flex:1}
  .dock-right .btn-wave{width:100%}
  .hud{font-size:14px;padding:4px 8px 4px 6px;min-height:33px;gap:4px}
  .hud.wave{font-size:12px;padding:4px 9px;white-space:nowrap}
  #topbar{gap:4px}
  .hud-group{gap:4px}
  .iconbtn.sm{width:34px;height:34px;font-size:15px}
  .q-stem{font-size:15px;padding:13px 15px 8px}
  .opt{font-size:14px;padding:10px 12px}
}

/* 极窄屏 */
@media (max-width:360px){
  .tw-btn{width:62px}
  .btn-quiz span:nth-child(2){font-size:13px}
}

/* 矮横屏（手机横放）：把 dock 压扁 */
@media (orientation:landscape) and (max-height:460px){
  :root{--dock-h:76px}
  .ability{width:54px;height:54px}
  .btn-quiz,.btn-wave{min-height:48px;padding:6px 14px}
  .home-inner{gap:10px}
}

@media (prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important}}
