/* ============================================================
   VOXEL NOVA · 星屿方界  —  NMS × Minecraft 融合 UI
   ============================================================ */
:root{
  --cyan:#5ee6ff;
  --cyan-dim:rgba(94,230,255,.55);
  --orange:#ff9d3b;
  --red:#ff5257;
  --green:#7dffa8;
  --bg-panel:rgba(8,14,28,.82);
  --bg-panel2:rgba(14,22,42,.9);
  --line:rgba(94,230,255,.28);
  --line-hi:rgba(94,230,255,.7);
  --text:#d7e9f5;
  --dim:#7d93a8;
  --font:"Rajdhani","Noto Sans SC","Microsoft YaHei",sans-serif;
  --mono:"Rajdhani",Consolas,monospace;
}
*{margin:0;padding:0;box-sizing:border-box;user-select:none;-webkit-user-select:none}
html,body{width:100%;height:100%;overflow:hidden;background:#000;font-family:var(--font);color:var(--text)}
canvas#c{position:fixed;inset:0;width:100%;height:100%;display:block}
.hidden{display:none !important}
b{font-weight:700}

/* ---------- 屏幕特效 ---------- */
#vignette{position:fixed;inset:0;pointer-events:none;z-index:5;
  background:radial-gradient(ellipse at center,transparent 55%,rgba(0,0,10,.55) 100%)}
#damageFlash{position:fixed;inset:0;pointer-events:none;z-index:6;opacity:0;
  background:radial-gradient(ellipse at center,rgba(255,40,40,.12),rgba(255,0,30,.45));transition:opacity .12s}
#scanFx{position:fixed;inset:0;pointer-events:none;z-index:6;opacity:0;
  background:radial-gradient(circle at center,rgba(94,230,255,.14),transparent 60%)}
#scanFx.on{animation:scanPulse .9s ease-out}
@keyframes scanPulse{0%{opacity:0}18%{opacity:1}100%{opacity:0}}
#fadeLayer{position:fixed;inset:0;background:#000;pointer-events:none;z-index:60;opacity:0;transition:opacity 1s}

/* ---------- 准星 ---------- */
#crosshair{position:fixed;left:50%;top:50%;width:26px;height:26px;transform:translate(-50%,-50%);z-index:10;pointer-events:none;opacity:.9}
#crosshair i{position:absolute;background:var(--cyan);box-shadow:0 0 6px var(--cyan-dim);transition:.15s}
#crosshair i:nth-child(1){left:50%;top:0;width:1.5px;height:7px;transform:translateX(-50%)}
#crosshair i:nth-child(2){left:50%;bottom:0;width:1.5px;height:7px;transform:translateX(-50%)}
#crosshair i:nth-child(3){top:50%;left:0;height:1.5px;width:7px;transform:translateY(-50%)}
#crosshair i:nth-child(4){top:50%;right:0;height:1.5px;width:7px;transform:translateY(-50%)}
#crosshair.hit i{background:var(--orange);box-shadow:0 0 8px var(--orange)}

/* 采矿进度环 */
#mineRing{position:fixed;left:50%;top:50%;width:44px;height:44px;transform:translate(-50%,-50%);z-index:10;pointer-events:none;display:none}
#mineRing svg{width:100%;height:100%;transform:rotate(-90deg)}
#mineArc{fill:none;stroke:var(--orange);stroke-width:2.5;stroke-linecap:round;stroke-dasharray:100.5;stroke-dashoffset:100.5;filter:drop-shadow(0 0 4px var(--orange))}

/* ---------- HUD 通用 ---------- */
#hud{position:fixed;inset:0;pointer-events:none;z-index:8}

/* 状态条（左上） */
#statusPanel{position:absolute;left:18px;top:16px;display:flex;flex-direction:column;gap:7px;
  padding:12px 14px;background:var(--bg-panel);border:1px solid var(--line);
  clip-path:polygon(0 0,calc(100% - 14px) 0,100% 14px,100% 100%,14px 100%,0 calc(100% - 14px));
  backdrop-filter:blur(8px)}
.bar-row{display:flex;align-items:center;gap:8px}
.bar-ico{width:16px;text-align:center;color:var(--red);font-size:13px;text-shadow:0 0 8px rgba(255,82,87,.8)}
.bar-ico.hz{color:var(--orange);text-shadow:0 0 8px rgba(255,157,59,.8)}
.bar-ico.th{color:var(--red)}
.bar{width:150px;height:7px;background:rgba(255,255,255,.09);transform:skewX(-18deg);overflow:hidden;position:relative}
.bar>div{height:100%;width:100%;transition:width .25s}
.bar.hp>div{background:linear-gradient(90deg,#ff5257,#ff8d5c);box-shadow:0 0 10px rgba(255,82,87,.7)}
.bar.hz>div{background:linear-gradient(90deg,#ffb43b,#ffe27a);box-shadow:0 0 10px rgba(255,180,59,.6)}
.bar.th>div{background:linear-gradient(90deg,#ff2d55,#ff7ad9)}
.bar-row b,#threatWrap em{font-family:var(--mono);font-size:12px;color:var(--dim);font-style:normal;min-width:26px}
#threatWrap{display:flex;align-items:center;gap:8px;margin-top:3px}
#threatWrap em{font-size:10px;letter-spacing:2px;color:var(--red);animation:blinkTh 1s infinite}
@keyframes blinkTh{50%{opacity:.35}}

/* 任务面板（顶部中间） */
#questPanel{position:absolute;left:50%;top:14px;transform:translateX(-50%);min-width:300px;max-width:430px;
  background:var(--bg-panel);border:1px solid var(--line);backdrop-filter:blur(8px);
  clip-path:polygon(14px 0,100% 0,100% calc(100% - 12px),calc(100% - 14px) 100%,0 100%,0 12px)}
.qp-head{display:flex;align-items:center;gap:8px;padding:8px 16px 4px;font-weight:700;letter-spacing:3px;font-size:12px;color:var(--cyan)}
.qp-head i{width:7px;height:7px;background:var(--cyan);box-shadow:0 0 8px var(--cyan);transform:rotate(45deg)}
#questBody{padding:2px 16px 10px}
.quest-cur{font-size:14.5px;color:#fff;font-weight:600}
.quest-prog{font-family:var(--mono);font-size:12px;color:var(--orange);margin-top:3px}
.quest-prog .pp{height:3px;background:rgba(255,255,255,.1);margin-top:4px;width:100%}
.quest-prog .pp>div{height:100%;background:linear-gradient(90deg,var(--orange),#ffd27a);transition:width .3s}

/* 右上信息 */
#topRight{position:absolute;right:18px;top:16px;text-align:right;display:flex;flex-direction:column;gap:5px}
#planetName{font-size:15px;font-weight:700;letter-spacing:2px;color:var(--cyan);text-shadow:0 0 12px rgba(94,230,255,.5)}
#dayInfo{font-size:12.5px;color:var(--dim)}
#dayInfo b{color:#fff}
#discCount{font-size:12.5px;color:var(--dim)}
#discCount b{color:#ffd27a;font-family:var(--mono)}

/* 拾取信息流（左下偏上） */
#pickupFeed{position:absolute;left:20px;bottom:130px;display:flex;flex-direction:column-reverse;gap:4px}
.pickup-item{font-size:13px;color:#eaf6ff;text-shadow:0 1px 4px #000,0 0 10px rgba(0,0,0,.8);animation:pickFade 2.6s forwards}
.pickup-item b{color:var(--green);font-family:var(--mono)}
@keyframes pickFade{0%{opacity:0;transform:translateX(-8px)}8%{opacity:1;transform:none}75%{opacity:1}100%{opacity:0}}

/* toast 通知（右侧） */
#toasts{position:absolute;right:18px;top:34%;display:flex;flex-direction:column;gap:10px;align-items:flex-end}
.toast{max-width:330px;padding:12px 18px;background:var(--bg-panel2);border:1px solid var(--line);border-right:3px solid var(--cyan);
  backdrop-filter:blur(8px);animation:toastIn .35s cubic-bezier(.2,1.4,.4,1);position:relative;overflow:hidden}
.toast.gold{border-right-color:#ffd27a}
.toast.red{border-right-color:var(--red)}
.toast .t-title{font-size:12px;letter-spacing:2.5px;color:var(--cyan);font-weight:700}
.toast.gold .t-title{color:#ffd27a}
.toast.red .t-title{color:var(--red)}
.toast .t-body{font-size:14px;color:#fff;margin-top:3px}
.toast .t-sub{font-size:11.5px;color:var(--dim);margin-top:2px;font-family:var(--mono)}
.toast::after{content:"";position:absolute;left:0;bottom:0;height:2px;background:var(--cyan);animation:tBar 4s linear forwards}
.toast.gold::after{background:#ffd27a}
.toast.red::after{background:var(--red)}
@keyframes toastIn{from{opacity:0;transform:translateX(30px)}}
@keyframes tBar{from{width:100%}to{width:0}}

/* 交互提示 */
#interactPrompt{position:fixed;left:50%;top:58%;transform:translateX(-50%);z-index:11;display:flex;align-items:center;gap:12px;pointer-events:none}
.ip-ring{width:44px;height:44px;position:relative}
.ip-ring svg{position:absolute;inset:0;transform:rotate(-90deg)}
.ip-ring circle{fill:rgba(8,14,28,.6);stroke:var(--cyan);stroke-width:1.5}
#ipArc{fill:none;stroke:var(--orange);stroke-width:2.5;stroke-dasharray:113;stroke-dashoffset:113}
.ip-ring b{position:absolute;inset:0;display:grid;place-items:center;font-size:16px;color:var(--cyan);font-family:var(--mono)}
#ipText{font-size:14px;color:#fff;text-shadow:0 1px 6px #000;letter-spacing:1px;background:rgba(8,14,28,.6);padding:5px 12px;border:1px solid var(--line)}

/* 扫描图标 */
#scanIcons{position:fixed;inset:0;pointer-events:none;z-index:9}
.scan-ico{position:absolute;transform:translate(-50%,-100%);display:flex;flex-direction:column;align-items:center;animation:scanFloat 2.2s ease-in-out infinite}
.scan-ico .si-mark{width:26px;height:26px;display:grid;place-items:center;font-size:14px;color:#031018;font-weight:900;
  background:var(--cyan);clip-path:polygon(50% 0,100% 25%,100% 75%,50% 100%,0 75%,0 25%);box-shadow:0 0 14px var(--cyan)}
.scan-ico.gold .si-mark{background:#ffd27a;box-shadow:0 0 14px #ffd27a}
.scan-ico .si-lbl{font-size:10px;margin-top:3px;color:var(--cyan);background:rgba(3,12,20,.75);padding:1px 7px;letter-spacing:1px;white-space:nowrap}
.scan-ico.gold .si-lbl{color:#ffd27a}
@keyframes scanFloat{0%,100%{margin-top:0}50%{margin-top:-7px}}

/* 快捷栏 */
#hotbar{position:fixed;left:50%;bottom:18px;transform:translateX(-50%);display:flex;gap:6px;z-index:8}
.hb-slot{pointer-events:auto;cursor:pointer}
.hb-slot{width:52px;height:52px;position:relative;background:rgba(8,14,28,.72);border:1px solid rgba(94,230,255,.22);
  clip-path:polygon(7px 0,calc(100% - 7px) 0,100% 7px,100% calc(100% - 7px),calc(100% - 7px) 100%,7px 100%,0 calc(100% - 7px),0 7px);
  transition:.15s;backdrop-filter:blur(4px)}
.hb-slot.sel{border-color:var(--orange);background:rgba(40,26,8,.75);transform:translateY(-5px);
  filter:drop-shadow(0 0 8px rgba(255,157,59,.45))}
.hb-slot .num{position:absolute;left:5px;top:2px;font-size:9.5px;color:var(--dim);font-family:var(--mono)}
.hb-slot .ic{position:absolute;inset:7px;background-size:contain;background-repeat:no-repeat;background-position:center;
  image-rendering:pixelated}
.hb-slot .cnt{position:absolute;right:4px;bottom:2px;font-size:12px;font-family:var(--mono);color:#fff;text-shadow:0 0 5px #000}
#itemName{position:fixed;left:50%;bottom:82px;transform:translateX(-50%);font-size:14px;color:#fff;letter-spacing:2px;
  text-shadow:0 0 10px rgba(94,230,255,.6),0 1px 4px #000;opacity:0;transition:opacity .3s;z-index:8;pointer-events:none}
#itemName.show{opacity:1}

/* ---------- 面板通用（NMS 风格） ---------- */
.overlay{position:fixed;inset:0;z-index:40;display:flex;align-items:center;justify-content:center;background:rgba(2,5,12,.62);backdrop-filter:blur(5px)}
.nms-panel{background:var(--bg-panel2);border:1px solid var(--line);position:relative;
  clip-path:polygon(18px 0,100% 0,100% calc(100% - 16px),calc(100% - 18px) 100%,0 100%,0 16px);
  box-shadow:0 20px 80px rgba(0,0,0,.6),inset 0 0 60px rgba(94,230,255,.03);
  animation:panelIn .28s cubic-bezier(.2,1.3,.4,1)}
@keyframes panelIn{from{opacity:0;transform:scale(.96) translateY(12px)}}
.panel-head{display:flex;align-items:center;gap:10px;padding:15px 22px;border-bottom:1px solid var(--line);
  font-size:17px;font-weight:700;letter-spacing:2px}
.panel-head em{font-style:normal;font-size:11px;color:var(--dim);letter-spacing:3px;margin-left:2px}
.ph-dot{width:9px;height:9px;background:var(--cyan);transform:rotate(45deg);box-shadow:0 0 10px var(--cyan)}
.ph-dot.orange{background:var(--orange);box-shadow:0 0 10px var(--orange)}
.panel-close{margin-left:auto;font-style:normal;font-size:11px;color:var(--dim);border:1px solid rgba(255,255,255,.2);padding:2px 8px;font-family:var(--mono)}
.nms-btn{display:block;width:100%;text-align:left;background:rgba(94,230,255,.06);border:1px solid var(--line);color:var(--text);
  padding:12px 18px;font-family:var(--font);font-size:15px;letter-spacing:1.5px;cursor:pointer;transition:.18s;margin-top:10px;
  clip-path:polygon(10px 0,100% 0,100% calc(100% - 10px),calc(100% - 10px) 100%,0 100%,0 10px)}
.nms-btn:hover{background:rgba(94,230,255,.16);border-color:var(--line-hi);transform:translateX(4px);color:#fff}
.nms-btn.primary{background:rgba(255,157,59,.14);border-color:rgba(255,157,59,.5);color:#ffd9ad}
.nms-btn.primary:hover{background:rgba(255,157,59,.28);border-color:var(--orange)}

/* ---------- 背包 ---------- */
.inv-panel{width:min(920px,94vw)}
.inv-body{display:flex;gap:24px;padding:20px 22px}
.inv-left{flex:1.15}
.inv-right{flex:1;border-left:1px solid var(--line);padding-left:22px;max-height:430px;display:flex;flex-direction:column}
.inv-sub{font-size:12px;letter-spacing:3px;color:var(--cyan);font-weight:700;margin-bottom:9px}
.inv-sub .en{color:var(--dim);font-style:normal;font-weight:400;margin-left:6px;font-size:10px}
.slot-grid{display:grid;gap:6px}
.cols9{grid-template-columns:repeat(9,1fr)}
.slot{aspect-ratio:1;background:rgba(255,255,255,.045);border:1px solid rgba(94,230,255,.16);position:relative;cursor:pointer;transition:.12s;
  clip-path:polygon(5px 0,calc(100% - 5px) 0,100% 5px,100% calc(100% - 5px),calc(100% - 5px) 100%,5px 100%,0 calc(100% - 5px),0 5px)}
.slot:hover{border-color:var(--line-hi);background:rgba(94,230,255,.1)}
.slot.hl{border-color:var(--orange);filter:drop-shadow(0 0 6px rgba(255,157,59,.5))}
.slot .ic{position:absolute;inset:9%;background-size:contain;background-repeat:no-repeat;background-position:center;image-rendering:pixelated}
.slot .cnt{position:absolute;right:4px;bottom:1px;font-size:12.5px;font-family:var(--mono);color:#fff;text-shadow:0 0 5px #000}
.inv-tip{margin-top:12px;font-size:11.5px;color:var(--dim)}
#recipeList{overflow-y:auto;padding-right:8px;display:flex;flex-direction:column;gap:8px}
#recipeList::-webkit-scrollbar{width:5px}
#recipeList::-webkit-scrollbar-thumb{background:var(--line);border-radius:3px}
.recipe{display:flex;align-items:center;gap:12px;padding:10px 12px;background:rgba(255,255,255,.03);border:1px solid rgba(94,230,255,.14);transition:.15s}
.recipe.ok{border-color:rgba(125,255,168,.4)}
.recipe .r-ic{width:40px;height:40px;background-size:contain;background-repeat:no-repeat;background-position:center;image-rendering:pixelated;flex-shrink:0}
.recipe .r-info{flex:1;min-width:0}
.recipe .r-name{font-size:14px;font-weight:700;color:#fff}
.recipe .r-mats{font-size:11.5px;color:var(--dim);margin-top:2px;font-family:var(--mono)}
.recipe .r-mats .lack{color:var(--red)}
.recipe .r-mats .have{color:var(--green)}
.recipe .r-btn{flex-shrink:0;font-size:12.5px;padding:6px 14px;background:rgba(125,255,168,.1);border:1px solid rgba(125,255,168,.45);color:var(--green);
  cursor:pointer;font-family:var(--font);letter-spacing:2px;transition:.15s}
.recipe .r-btn:hover{background:rgba(125,255,168,.25)}
.recipe.locked{opacity:.45}
.recipe.locked .r-btn{pointer-events:none;border-color:rgba(255,255,255,.15);color:var(--dim);background:none}

/* 光标上的悬浮物品 */
#cursorItem{position:fixed;width:40px;height:40px;pointer-events:none;z-index:99;background-size:contain;background-repeat:no-repeat;image-rendering:pixelated;display:none}
#cursorItem .cnt{position:absolute;right:-4px;bottom:-4px;font-size:13px;font-family:var(--mono);color:#fff;text-shadow:0 0 5px #000}

/* ---------- 飞船面板 ---------- */
.ship-panel{width:min(560px,92vw)}
#shipPanelBody{padding:20px 22px;display:flex;flex-direction:column;gap:12px}
.ship-part{display:flex;align-items:center;gap:14px;padding:14px 16px;background:rgba(255,255,255,.03);border:1px solid rgba(94,230,255,.15)}
.ship-part.broken{border-color:rgba(255,82,87,.45)}
.ship-part.fixed{border-color:rgba(125,255,168,.45)}
.sp-ic{width:42px;height:42px;display:grid;place-items:center;font-size:22px;background:rgba(255,255,255,.05);border:1px solid var(--line)}
.sp-info{flex:1}
.sp-name{font-weight:700;font-size:15px}
.sp-req{font-size:12px;color:var(--dim);font-family:var(--mono);margin-top:3px}
.sp-req .have{color:var(--green)} .sp-req .lack{color:var(--red)}
.sp-state{font-size:11px;letter-spacing:2px;padding:4px 10px;flex-shrink:0}
.ship-part.broken .sp-state{color:var(--red);border:1px solid rgba(255,82,87,.5)}
.ship-part.fixed .sp-state{color:var(--green);border:1px solid rgba(125,255,168,.5)}
.sp-fix{flex-shrink:0;font-size:13px;padding:8px 16px;background:rgba(255,157,59,.12);border:1px solid rgba(255,157,59,.5);color:#ffd9ad;cursor:pointer;font-family:var(--font);letter-spacing:1px;transition:.15s}
.sp-fix:hover{background:rgba(255,157,59,.3)}
.sp-fix:disabled{opacity:.35;cursor:not-allowed}

/* ---------- 对话框 ---------- */
#dialog{position:fixed;left:50%;bottom:9%;transform:translateX(-50%);z-index:35;width:min(680px,92vw)}
.dlg-box{padding:18px 26px}
.dlg-speaker{font-size:12px;letter-spacing:3px;color:var(--orange);font-weight:700}
.dlg-text{font-size:16.5px;line-height:1.75;color:#eef6ff;margin-top:8px;min-height:52px}
.dlg-hint{text-align:right;font-size:11px;color:var(--dim);margin-top:6px;animation:blinkTh 1.4s infinite}

/* ---------- 开场 ---------- */
#intro{background:radial-gradient(ellipse at 50% 30%,#0a1230 0%,#020409 70%);flex-direction:column;z-index:70}
.boot-wrap{text-align:center;width:min(640px,92vw)}
.boot-logo{font-size:clamp(44px,7vw,76px);font-weight:700;letter-spacing:14px;color:#fff;
  text-shadow:0 0 30px rgba(94,230,255,.8),0 0 90px rgba(94,230,255,.4);animation:logoGlow 3s ease-in-out infinite}
@keyframes logoGlow{50%{text-shadow:0 0 18px rgba(94,230,255,.5),0 0 50px rgba(94,230,255,.25)}}
.boot-sub{font-size:15px;letter-spacing:6px;color:var(--dim);margin:10px 0 34px}
.boot-log{text-align:left;font-family:var(--mono);font-size:13.5px;line-height:2;color:var(--cyan);min-height:230px;
  background:rgba(4,10,22,.6);border:1px solid var(--line);padding:18px 24px;white-space:pre-wrap;
  clip-path:polygon(16px 0,100% 0,100% calc(100% - 14px),calc(100% - 16px) 100%,0 100%,0 14px)}
.boot-log .warn{color:var(--orange)} .boot-log .err{color:var(--red)} .boot-log .ok{color:var(--green)}
#startBtn{margin:26px auto 0;width:min(320px,80vw);text-align:center;font-size:18px;letter-spacing:4px;padding:15px}
.boot-foot{margin-top:20px;font-size:11.5px;color:var(--dim);letter-spacing:1px}

/* ---------- 暂停 ---------- */
.menu-panel{width:min(460px,92vw)}
.menu-body{padding:16px 22px 24px}
.vol-row{display:flex;align-items:center;gap:12px;margin-top:16px;font-size:13px;color:var(--dim)}
.vol-row input{flex:1;accent-color:var(--cyan)}
.keys-help{margin-top:20px;padding-top:16px;border-top:1px solid var(--line);font-size:12.5px;color:var(--dim);line-height:2}
.keys-help b{color:var(--cyan);letter-spacing:2px;display:block;margin-bottom:4px}

/* ---------- 死亡 / 发射 / 通关 ---------- */
#deathOverlay{background:radial-gradient(circle,rgba(60,0,8,.55),rgba(10,0,2,.94));z-index:65}
.death-wrap{text-align:center}
.death-title{font-size:34px;letter-spacing:8px;color:var(--red);text-shadow:0 0 30px rgba(255,50,60,.6)}
.death-sub{margin-top:12px;font-size:13px;letter-spacing:4px;color:var(--dim)}

#launchFx{position:fixed;inset:0;z-index:55;pointer-events:none}
.lb-bar{position:absolute;left:0;right:0;height:0;background:#000;transition:height 1.2s ease}
.lb-bar.top{top:0}.lb-bar.bot{bottom:0}
#launchText{position:absolute;left:50%;bottom:16%;transform:translateX(-50%);font-size:20px;letter-spacing:6px;color:#fff;
  text-shadow:0 0 20px var(--cyan);opacity:0;transition:opacity .8s}

.win-panel{width:min(520px,92vw);text-align:center;padding:38px 40px 34px}
.win-title{font-size:34px;font-weight:700;letter-spacing:6px;color:#fff;text-shadow:0 0 30px rgba(255,210,122,.6)}
.win-sub{font-size:12px;letter-spacing:5px;color:var(--orange);margin-top:6px}
#winStats{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:26px 0 10px;text-align:left}
.ws-item{background:rgba(255,255,255,.04);border:1px solid var(--line);padding:10px 14px}
.ws-item .k{font-size:11px;letter-spacing:2px;color:var(--dim)}
.ws-item .v{font-size:19px;font-family:var(--mono);color:var(--cyan);margin-top:2px}

/* 响应式 */
@media(max-width:860px){
  #statusPanel{transform:scale(.85);transform-origin:top left}
  #questPanel{min-width:240px;max-width:300px}
  .inv-body{flex-direction:column}
  .inv-right{border-left:none;padding-left:0;max-height:240px}
}
