/* ============ 页面骨架（复用站点变量，克制深色风） ============ */
.status-page{padding:24px 0 8px}
.hero-mini{text-align:center;padding:14px 0 18px}
.hero-mini h1{font-size:1.45rem;font-weight:800;letter-spacing:-.02em;margin-bottom:16px}
.status-badge{
  display:inline-flex;align-items:center;gap:10px;
  padding:9px 18px;border-radius:999px;font-size:.92rem;font-weight:700;
  background:var(--bg-card);border:1px solid var(--border);
}
.status-badge .dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}
.status-badge.online{color:#4ade80;border-color:rgba(34,197,94,.35)}
.status-badge.online .dot{background:#22c55e;box-shadow:0 0 10px rgba(34,197,94,.8);animation:pulse-dot 2s ease-in-out infinite}
.status-badge.offline{color:#f87171;border-color:rgba(239,68,68,.35)}
.status-badge.offline .dot{background:#ef4444;box-shadow:0 0 8px rgba(239,68,68,.6)}
.status-badge.busy{color:#fbbf24;border-color:rgba(245,158,11,.4)}
.status-badge.busy .dot{background:#f59e0b;animation:pulse-dot 1.1s ease-in-out infinite}
@keyframes pulse-dot{0%,100%{opacity:1}50%{opacity:.35}}
.status-sub{font-size:.74rem;color:var(--text-muted);margin-top:10px;min-height:1.2em}

/* ============ 状态信息卡 ============ */
.info-card{max-width:440px;margin:16px auto 0;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-sm);padding:4px 18px;text-align:left}
.info-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 0;border-bottom:1px solid var(--border);font-size:.84rem}
.info-row:last-of-type{border-bottom:none}
.info-label{color:var(--text-muted);white-space:nowrap;font-size:.8rem}
.info-value{display:flex;align-items:center;gap:8px;min-width:0;justify-content:flex-end}
.info-value code{background:var(--bg-secondary);padding:3px 10px;border-radius:6px;font-size:.78rem;font-family:'JetBrains Mono','Fira Code',Consolas,monospace;white-space:nowrap;word-break:break-all}
.copy-btn{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;background:var(--bg-secondary);color:var(--text-secondary);border:1px solid var(--border);border-radius:6px;font-size:.7rem;font-weight:600;cursor:pointer;font-family:inherit;transition:color .15s,border-color .15s}
.copy-btn:hover{color:var(--accent-light);border-color:var(--border-hover)}
.copy-btn.copied{color:#4ade80;border-color:rgba(34,197,94,.4)}
.join-hint{font-size:.76rem;color:var(--text-muted);line-height:1.7;padding:10px 0}
.refresh-info{font-size:.7rem;color:var(--text-muted);text-align:center;margin-top:16px}

/* ============ 管理区 ============ */
.admin-wrap{max-width:640px;margin:22px auto 0;text-align:left}
@media (min-width:1440px){.admin-wrap{max-width:760px}}
.panel{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-sm);padding:18px;margin-bottom:16px}
.panel h2,.panel h3{font-size:.95rem;font-weight:700;color:var(--text-primary);margin-bottom:5px;display:flex;align-items:center;gap:7px}
.sec-hint{font-size:.76rem;color:var(--text-muted);margin-bottom:13px;line-height:1.6}
.sec-hint b{color:var(--text-secondary);font-weight:600}

.ops-section{display:none}
.ops-section.show{display:block}
.ops-msg{display:none;padding:10px 14px;border-radius:8px;font-size:.82rem;line-height:1.5;margin-bottom:14px}
.ops-msg.show{display:block}
.ops-msg.ok{background:rgba(34,197,94,.12);color:#4ade80;border:1px solid rgba(34,197,94,.3)}
.ops-msg.err{background:rgba(239,68,68,.12);color:#f87171;border:1px solid rgba(239,68,68,.3)}
.ops-msg.warn{background:rgba(245,158,11,.12);color:#fbbf24;border:1px solid rgba(245,158,11,.35)}

/* 按钮统一 */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:9px 18px;border:none;border-radius:8px;font-size:.84rem;font-weight:600;cursor:pointer;font-family:inherit;background:var(--accent);color:#fff;transition:filter .15s,transform .1s,opacity .15s}
.btn:hover{filter:brightness(1.14)}
.btn:active{transform:scale(.97)}
.btn:disabled{opacity:.45;cursor:not-allowed;transform:none;filter:none}
.btn-danger{background:var(--red)}
.btn-danger:hover{filter:brightness(1.12)}
.btn-ghost{background:var(--bg-card-hover);color:var(--text-primary);border:1px solid rgba(148,163,184,.45)}
.btn-ghost:hover{background:var(--bg-secondary);border-color:var(--border-hover);filter:none}
.btn-block{width:100%}
.spin{width:12px;height:12px;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;display:inline-block;animation:rot .7s linear infinite}
.btn-danger .spin,.btn-ghost .spin,.w-del .spin{border-color:rgba(148,163,184,.35);border-top-color:currentColor}
@keyframes rot{to{transform:rotate(360deg)}}

/* 登录 */
.auth-panel{max-width:420px;margin:0 auto;text-align:left}
.auth-panel .sec-hint{margin-bottom:13px}
.login-error{font-size:.76rem;color:#f87171;margin-top:10px;min-height:1.1em}

/* 模式切换卡片（F9/F10：端口统一 45678） */
.mode-grid{display:grid;grid-template-columns:1fr;gap:10px}
.mode-card{display:flex;flex-direction:column;gap:7px;text-align:left;padding:13px 14px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-primary);cursor:pointer;font-family:inherit;transition:border-color .18s,background .18s}
.mode-card:hover:not(:disabled){border-color:var(--border-hover)}
.mode-card.active{border-color:var(--accent);background:rgba(99,102,241,.09)}
.mode-card:disabled{opacity:.55;cursor:not-allowed}
.mc-head{display:flex;align-items:center;gap:8px;font-weight:700;font-size:.9rem}
.mc-meta{display:flex;align-items:center;gap:6px;font-size:.73rem;color:var(--text-muted)}
.mc-meta .mini-dot{width:7px;height:7px;border-radius:50%;background:var(--text-muted);flex-shrink:0}
.mc-meta .mini-dot.on{background:#22c55e;box-shadow:0 0 6px rgba(34,197,94,.7)}
.mc-meta .mini-dot.starting{background:#f59e0b;animation:pulse-dot 1.1s ease-in-out infinite}
.mc-chip{display:none;margin-left:auto;font-size:.64rem;padding:2px 9px;border-radius:99px;background:var(--accent);color:#fff;font-weight:700;flex-shrink:0}
.mode-card.active .mc-chip{display:inline-block}

/* 世界列表（F8：仅当前模式） */
.world-group{margin-bottom:12px}
.wg-head{display:flex;align-items:center;gap:8px;font-size:.78rem;font-weight:700;color:var(--text-primary);margin-bottom:7px}
.wg-port{font-size:.68rem;color:var(--text-muted);font-weight:600;white-space:nowrap}
.wg-cur{margin-left:auto;font-size:.68rem;color:var(--text-muted);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:45%}
.world-item{display:flex;align-items:center;gap:10px;padding:9px 11px;border:1px solid var(--border);border-radius:8px;background:var(--bg-secondary);cursor:pointer;margin-bottom:6px;transition:border-color .15s,background .15s}
.world-item:hover{border-color:var(--border-hover)}
.world-item.current{border-color:var(--accent);background:rgba(99,102,241,.08)}
.world-item input[type=radio]{accent-color:var(--accent);cursor:pointer;flex-shrink:0}
.w-name{font-size:.84rem;color:var(--text-primary);word-break:break-all;min-width:0}
.w-badge{display:none;font-size:.62rem;padding:2px 8px;border-radius:99px;background:var(--accent);color:#fff;font-weight:700;flex-shrink:0}
.world-item.current .w-badge{display:inline-block}
.w-meta{font-size:.7rem;color:var(--text-muted);margin-left:auto;white-space:nowrap;flex-shrink:0}
.world-empty{font-size:.78rem;color:var(--text-muted);padding:8px 4px}
.world-actions{display:flex;gap:10px;flex-wrap:wrap}
.world-actions .btn{flex:1;min-width:150px}

/* F17 地图删除入口（hover 显现） */
.w-del{flex-shrink:0;background:transparent;border:none;padding:3px 5px;border-radius:6px;font-size:.85rem;line-height:1;cursor:pointer;opacity:.38;color:var(--text-muted);transition:opacity .15s,color .15s,background .15s;font-family:inherit}
.world-item:hover .w-del{opacity:1;color:#f87171}
.w-del:hover{background:rgba(239,68,68,.14)}
.w-del:disabled{opacity:.45;cursor:not-allowed}
/* V4/F4：地图信息查看按钮（同删除按钮样式，hover 用信息色） */
.w-info{flex-shrink:0;background:transparent;border:none;padding:3px 5px;border-radius:6px;font-size:.85rem;line-height:1;cursor:pointer;opacity:.38;color:var(--text-muted);transition:opacity .15s,color .15s,background .15s;font-family:inherit}
.world-item:hover .w-info{opacity:1;color:var(--accent)}
.w-info:hover{background:rgba(99,102,241,.14)}
.w-info:disabled{opacity:.45;cursor:not-allowed}

/* 建图折叠（F11） */
.create-toggle{width:100%;justify-content:flex-start}
.create-toggle .chev{margin-left:auto;transition:transform .2s ease}
.create-toggle.open .chev{transform:rotate(180deg)}
.create-form{display:none;margin-top:14px;animation:slideIn .2s ease}
.create-form.open{display:block}
/* V4/F2：彩蛋种子快捷入口（两处建图表单共用） */
.seed-row{display:flex;gap:8px;align-items:center}
.seed-row .inp{flex:1;min-width:0}
.seed-btn{flex-shrink:0;padding:8px 12px;font-size:.78rem;border-radius:8px;cursor:pointer;white-space:nowrap;font-family:inherit;border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-secondary);transition:border-color .15s,color .15s,background .15s}
.seed-btn:hover{border-color:var(--accent);color:var(--accent)}
.seed-btn.open{border-color:var(--accent);color:var(--accent);background:rgba(99,102,241,.08)}
.seed-chips{display:none;margin-top:8px;padding:10px;border:1px dashed var(--border);border-radius:8px;background:var(--bg-secondary);max-height:320px;overflow-y:auto}
.seed-chips.open{display:block}
.seed-group{margin-bottom:12px}
.seed-group:last-child{margin-bottom:0}
.seed-group-title{font-size:.68rem;font-weight:600;color:var(--text-muted);letter-spacing:.03em;margin:0 0 6px}
.seed-group-chips{display:flex;flex-wrap:wrap;gap:6px}
.seed-chip{padding:5px 10px;font-size:.74rem;border-radius:99px;cursor:pointer;font-family:inherit;border:1px solid var(--border);background:var(--bg-card);color:var(--text-secondary);max-width:100%;transition:border-color .15s,color .15s}
.seed-chip:hover{border-color:var(--accent);color:var(--accent)}
.seed-chip .sc-name{font-weight:600}
.seed-chip .sc-seed{opacity:.7;margin-left:4px;font-family:'JetBrains Mono','Fira Code',Consolas,monospace;font-size:.68rem}
/* V4.1/F3：种子组合——选中态 + 面板顶部提示条（sticky 保持可见） */
.seed-chip.selected{border-color:var(--accent);color:var(--accent);background:rgba(99,102,241,.12)}
.seed-chip:disabled{cursor:not-allowed;opacity:1}
/* V4.4：彩蛋描述触屏适配——ⓘ 标识 + 描述浮层（PC hover 保留 title，触屏点 ⓘ / 长按 chip） */
/* R2-FIX：ⓘ 移至 chip 外部——chip 右侧独立圆形按钮，点击查看描述、不触发选中 */
.seed-chip-wrap{display:inline-flex;align-items:center;gap:3px;max-width:100%}
.sc-info{flex-shrink:0;width:18px;height:18px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:.66rem;line-height:1;color:var(--text-secondary);background:var(--bg-card);border:1px solid rgba(148,163,184,.45);cursor:pointer;transition:border-color .15s,color .15s,background .15s}
.sc-info:hover,.sc-info:active{border-color:var(--accent);color:var(--accent);background:rgba(99,102,241,.12)}
.seed-pop{max-width:min(300px,calc(100vw - 24px));z-index:1200}
.seed-pop code{background:var(--bg-secondary);padding:1px 6px;border-radius:5px;font-family:'JetBrains Mono',Consolas,monospace;font-size:.7rem;word-break:break-all}
/* R2-FIX：组合说明文字移出列表——位于 chips 面板上方（随面板开合显隐），不再随列表滚动 */
.seed-hint{display:none;font-size:.66rem;line-height:1.5;padding:6px 9px;margin:6px 0 0;background:var(--bg-secondary);color:var(--text-muted);border:1px dashed var(--border);border-radius:6px}
.seed-hint.mod{color:#fbbf24;border-color:rgba(245,158,11,.35)}
/* R3-FIX：彩蛋难度 +1 提示（究极种子/恶魔世界 → 实际难度高一档，传奇封顶） */
.diff-hint{display:none;font-size:.72rem;color:#fbbf24;background:rgba(245,158,11,.1);border:1px solid rgba(245,158,11,.35);border-radius:6px;padding:5px 9px;margin:-2px 0 10px;line-height:1.5}
.diff-hint b{color:#fde68a}
/* V4/F3：上传弹窗（R3-FIX：紧凑化——内边距/间距收紧、提示单行；accent 边框填充视觉保留不回退） */
#upload-modal .modal-box{padding:12px 14px}
#upload-modal .modal-body{margin-bottom:8px;line-height:1.5}
#upload-modal .upd-modal-title{margin-bottom:2px}
#upload-modal .form-row{margin-bottom:5px}
#upload-modal .pw-count{display:none}   /* R3-FIX：弹窗内计数行隐藏，压缩行高 */
.up-hint{font-size:.74rem;color:var(--text-muted);margin:0 0 8px;line-height:1.45}
/* R2-FIX：上传文件位改为明显可点击控件（实底 + 强调色边框，安卓触屏可见）；R3 高度收紧 */
.up-file{display:flex;align-items:center;gap:8px;padding:6px 10px;border:1.5px solid rgba(99,102,241,.5);border-radius:6px;background:rgba(99,102,241,.1);cursor:pointer;margin-bottom:7px;transition:border-color .15s,background .15s}
.up-file:hover,.up-file:active{border-color:var(--accent);background:rgba(99,102,241,.16)}
.up-file.has-file{border-color:#4ade80;background:rgba(34,197,94,.12)}
.up-file-name{font-size:.76rem;font-weight:600;color:var(--text-primary);word-break:break-all;min-width:0}
.up-file-ico{flex-shrink:0;font-size:.85rem}
/* V4/F4：信息弹窗 */
.info-meta{padding:4px 2px 8px}
.info-meta-row{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;padding:9px 0;border-bottom:1px solid var(--border);font-size:.82rem}
.info-meta-row:last-of-type{border-bottom:none}
.info-meta-label{color:var(--text-muted);white-space:nowrap;font-size:.78rem;flex-shrink:0}
.info-meta-value{text-align:right;color:var(--text-primary);word-break:break-all;min-width:0}
.info-meta-value code{background:var(--bg-secondary);padding:2px 8px;border-radius:6px;font-size:.76rem;font-family:'JetBrains Mono','Fira Code',Consolas,monospace}
.info-err{font-size:.8rem;color:#f87171;padding:6px 0}
/* 骨架占位（加载中） */
.skel-line{height:14px;border-radius:6px;background:linear-gradient(90deg,var(--bg-secondary) 25%,rgba(148,163,184,.18) 50%,var(--bg-secondary) 75%);background-size:200% 100%;animation:skel 1.2s infinite;margin:9px 0}
@keyframes skel{to{background-position:-200% 0}}
@keyframes slideIn{from{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:none}}
.form-row{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:10px}
.form-row label{font-size:.76rem;color:var(--text-muted);min-width:52px}
.inp,.sel,.sm-inp{padding:9px 12px;border-radius:8px;border:1px solid var(--border);background:var(--bg-secondary);color:#e2e8f0;caret-color:#818cf8;font-size:.86rem;font-family:inherit;transition:border-color .15s}
.inp{flex:1;min-width:150px}
.sel{flex:1;min-width:108px}
.inp:focus,.sel:focus{outline:none;border-color:var(--accent)}
.inp:-webkit-autofill,.sel:-webkit-autofill,.sm-inp:-webkit-autofill,.pw-input:-webkit-autofill{-webkit-text-fill-color:#e2e8f0;-webkit-box-shadow:0 0 0 1000px #1e293b inset;transition:background-color 99999s ease-in-out 0s;caret-color:#818cf8}
.inp:hover:not(:focus),.sel:hover:not(:focus){border-color:rgba(148,163,184,.5)}
.inp.invalid,.sel.invalid{border-color:rgba(239,68,68,.65);box-shadow:0 0 0 1px rgba(239,68,68,.3)}
.field-err{display:none;font-size:.72rem;color:#f87171;line-height:1.5;margin:-4px 0 10px 62px}
.field-err.show{display:block}
/* TR-DEFECT-20260814-FINAL：3-4 段全数字点分串 copied-seed 原生解析提示（不拦截） */
.field-warn{display:none;font-size:.72rem;color:#f59e0b;line-height:1.5;margin:-4px 0 10px 62px}
.field-warn.show{display:block}
.inp::placeholder{color:#475569}
.create-preview{font-size:.76rem;color:var(--text-secondary);background:var(--bg-secondary);border:1px dashed var(--border);border-radius:8px;padding:9px 12px;margin-bottom:12px;line-height:1.7;word-break:break-all}

/* 模组九宫格（F13） */
.panel-head{display:flex;align-items:center;gap:8px;margin-bottom:5px}
.panel-head h3{margin-bottom:0}
.head-btn{margin-left:auto;padding:4px 12px;font-size:.7rem}
.mods-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:8px}
.mod-cell{display:flex;flex-direction:column;align-items:center;gap:5px;padding:11px 6px 9px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-secondary);text-align:center;min-width:0;cursor:pointer;transition:border-color .15s,background .15s}
.mod-cell:hover{border-color:var(--border-hover)}
.mod-ico{width:44px;height:44px;border-radius:8px;background:var(--bg-card);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;overflow:hidden;font-size:1.15rem;font-weight:800;color:var(--text-muted);flex-shrink:0}
.mod-ico img{width:100%;height:100%;object-fit:contain}
.mod-name{font-size:.7rem;color:var(--text-primary);line-height:1.3;word-break:break-all;max-width:100%}
.mod-ver{font-size:.58rem;color:var(--text-muted)}
.mod-st{font-size:.62rem;padding:2px 9px;border-radius:99px;font-weight:700}
.mod-st.on{background:rgba(34,197,94,.15);color:#4ade80}
.mod-st.off{background:rgba(148,163,184,.15);color:#94a3b8}
.mod-sw{margin-top:2px}
.mod-sw input:disabled + .sw-slider{opacity:.45;cursor:wait}

/* F18 重启生效提示条 */
.mods-restart{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px;padding:9px 12px;background:rgba(245,158,11,.1);border:1px solid rgba(245,158,11,.35);border-radius:8px;font-size:.76rem;color:#fbbf24;line-height:1.5}
.mods-restart .btn{margin-left:auto;padding:6px 14px;font-size:.74rem;background:var(--accent);color:#fff}

/* F22 模组详情小窗（可关闭：关闭按钮 / 遮罩 / Esc） */
.mod-modal-box{max-width:420px;position:relative;max-height:calc(100vh - 40px);display:flex;flex-direction:column}
.mod-modal-close{position:absolute;top:10px;right:10px;background:transparent;border:none;color:var(--text-muted);font-size:1.05rem;line-height:1;cursor:pointer;padding:5px 9px;border-radius:6px;font-family:inherit}
.mod-modal-close:hover{color:var(--text-primary);background:var(--bg-card-hover)}
.mod-modal-head{display:flex;gap:14px;align-items:center;margin-bottom:12px;padding-right:30px}
.mod-modal-ico{width:72px;height:72px;border-radius:12px;background:var(--bg-secondary);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;overflow:hidden;font-size:1.9rem;font-weight:800;color:var(--text-muted);flex-shrink:0}
.mod-modal-ico img{width:100%;height:100%;object-fit:contain}
.mod-modal-title{font-size:1.02rem;font-weight:700;color:var(--text-primary);margin:0 0 4px;word-break:break-all}
.mod-modal-sub{font-size:.76rem;color:var(--text-muted)}
.mod-modal-meta{font-size:.76rem;color:var(--text-secondary);margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed var(--border)}
.mod-modal-desc{font-size:.8rem;color:var(--text-secondary);line-height:1.8;overflow-y:auto;word-break:break-word;white-space:pre-line;max-height:230px;padding-right:4px}

/* F22 切换弹窗内建图 + 强制重启窗 */
#sm-mask .modal-box{max-height:calc(100vh - 40px);overflow-y:auto}
.sm-create{margin-top:12px;padding-top:12px;border-top:1px dashed var(--border)}
#restart-modal .pmodal-stage{white-space:pre-line}
.pmodal-fail{color:#f87171}

/* 服务器菜单（F14，V3.4 卡片化） */
.sm-grid{display:grid;grid-template-columns:1fr;gap:14px}
@media(min-width:1024px){.sm-grid{grid-template-columns:1fr 1fr}}
.sm-card{display:flex;flex-direction:column;gap:11px;border:1px solid rgba(148,163,184,.28);border-radius:var(--radius-sm);padding:14px 16px;background:var(--bg-secondary);transition:opacity .2s,border-color .15s}
.sm-card:hover{border-color:var(--border-hover)}
.sm-head{display:flex;align-items:flex-start;gap:10px}
.sm-ico{width:34px;height:34px;flex-shrink:0;display:flex;align-items:center;justify-content:center;border-radius:8px;background:var(--bg-card);border:1px solid var(--border);font-size:.95rem}
.sm-head-txt{min-width:0;flex:1}
.sm-title{display:flex;align-items:center;gap:8px;font-weight:700;font-size:.88rem;color:var(--text-primary)}
.sm-desc{font-size:.72rem;color:var(--text-muted);line-height:1.55;margin-top:4px}
.sm-head .sw{margin-top:2px}
.sm-rows{display:flex;flex-direction:column;gap:8px;margin-top:auto;padding-top:11px;border-top:1px dashed rgba(148,163,184,.25)}
.sm-row{display:flex;align-items:center;gap:8px;font-size:.78rem;color:var(--text-secondary);flex-wrap:wrap}
.sm-row .lbl{min-width:88px;color:var(--text-muted);font-size:.74rem;flex-shrink:0}
.sm-row .unit{font-size:.7rem;color:var(--text-muted);flex-shrink:0}
.sm-inp{flex:0 1 120px;min-width:90px;padding:6px 10px;font-size:.8rem}
.sm-hint{font-size:.7rem;color:#fbbf24;line-height:1.5;margin-top:7px}
.sm-card.hw-off{opacity:.55;pointer-events:none}
.sm-foot{grid-column:1/-1;margin-top:2px}
.sch-save-row{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap}
#sch-save{min-width:230px}
#sch-save.dirty{background:var(--yellow);color:#111827}
#sch-save.dirty:hover{filter:brightness(1.1)}
.dirty-tag{display:none;font-size:.72rem;color:var(--yellow);font-weight:700}

/* F19 状态徽章 + 配置摘要 + 下次执行 */
.sm-badge{font-size:.62rem;padding:2px 9px;border-radius:99px;font-weight:700;flex-shrink:0}
.sm-badge.on{background:rgba(34,197,94,.15);color:#4ade80}
.sm-badge.off{background:rgba(148,163,184,.15);color:#94a3b8}
.sm-badge.dis{background:rgba(245,158,11,.15);color:#fbbf24}
.sm-meta{display:flex;flex-direction:column;gap:4px;margin-top:0;padding:8px 11px;background:var(--bg-card);border:1px dashed rgba(148,163,184,.3);border-radius:8px}
.sm-summary{font-size:.74rem;color:var(--text-secondary)}
.sm-next{font-size:.72rem;color:var(--text-muted);font-family:'JetBrains Mono',Consolas,monospace}
.sm-next.has{color:#4ade80}
.dry-badge{display:inline-flex;align-items:center;gap:6px;font-size:.7rem;color:#fbbf24;background:rgba(245,158,11,.12);border:1px solid rgba(245,158,11,.35);border-radius:99px;padding:3px 11px;margin-bottom:10px}
.cfg-summary{font-size:.74rem;color:var(--text-secondary);background:var(--bg-secondary);border:1px dashed var(--border);border-radius:8px;padding:9px 12px;margin:4px 0 12px;line-height:1.8;word-break:break-all}

/* 开关 */
.sw{position:relative;display:inline-flex;width:40px;height:22px;flex-shrink:0;cursor:pointer}
.sw input{opacity:0;width:0;height:0;position:absolute}
.sw-slider{position:absolute;inset:0;background:var(--bg-card);border:1px solid var(--border);border-radius:99px;transition:background .2s,border-color .2s}
.sw-slider::before{content:"";position:absolute;width:16px;height:16px;left:2px;top:2px;border-radius:50%;background:var(--text-muted);transition:transform .2s,background .2s}
.sw input:checked + .sw-slider{background:var(--accent);border-color:var(--accent)}
.sw input:checked + .sw-slider::before{transform:translateX(18px);background:#fff}
.sw input:disabled + .sw-slider{opacity:.4;cursor:not-allowed}
.sw:hover .sw-slider{border-color:rgba(148,163,184,.55)}
.ck{display:inline-flex;align-items:center;gap:6px;font-size:.76rem;color:var(--text-secondary);cursor:pointer}
.ck input{accent-color:var(--accent)}

/* F20 密码框高亮：亮色圆点/光标 + 显示切换 + 位数提示 */
.pw-box{margin-bottom:12px}
.pw-wrap{position:relative}
.pw-input{width:100%;padding-right:44px;box-sizing:border-box;color:#e2e8f0;caret-color:#818cf8;letter-spacing:.09em}
.pw-input::selection{background:rgba(99,102,241,.45)}
/* V4.1/F1：登录密码框——type=text + text-security 遮罩（中文 IME 可输入，视觉仍星号；Chrome/Edge 生效，Firefox 122+ 支持 text-security） */
.pw-input.pw-masked{-webkit-text-security:disc;text-security:disc}
.pw-input.pw-masked::placeholder{-webkit-text-security:none;text-security:none}
.pw-eye{position:absolute;right:5px;top:50%;transform:translateY(-50%);background:none;border:none;font-size:1rem;line-height:1;padding:7px 9px;cursor:pointer;opacity:.55;color:var(--text-secondary);transition:opacity .15s,color .15s}
.pw-eye:hover{opacity:1}
.pw-eye.active{opacity:1;color:var(--accent-light)}
.pw-count{font-size:.7rem;color:var(--text-muted);margin-top:5px;min-height:1em;text-align:right}

/* F25 建图进图密码（复用 F20 密码框样式） */
.req{color:#f87171;margin-left:2px}
.f25-pw{flex:1;min-width:150px;position:relative}
.f25-pw .pw-input{width:100%;padding-right:44px}
.f25-pw-hint{font-size:.7rem;color:var(--text-muted);line-height:1.6;margin:-2px 0 12px 62px}
.w-lock{font-size:.66rem;color:#fbbf24;background:rgba(245,158,11,.12);border:1px solid rgba(245,158,11,.35);padding:1px 7px;border-radius:99px;white-space:nowrap;flex-shrink:0}

/* F24 在线人数 */
.players-online{font-weight:700;font-size:.82rem;white-space:nowrap;cursor:default}
.players-online.on{color:#4ade80;cursor:pointer;border-bottom:1px dashed rgba(74,222,128,.5)}
.players-online.off{color:var(--text-muted)}
.players-pop{position:fixed;z-index:1000;background:var(--bg-card);border:1px solid var(--border);border-radius:8px;padding:9px 13px;font-size:.76rem;color:var(--text-primary);line-height:1.8;box-shadow:0 14px 40px -8px rgba(0,0,0,.55);max-width:260px;word-break:break-all}
.players-pop .pp-title{font-size:.66rem;color:var(--text-muted);margin-bottom:4px}

/* F21 版本更新检测 */
.upd-err{font-size:.76rem;color:#f87171;background:rgba(239,68,68,.1);border:1px solid rgba(239,68,68,.3);border-radius:8px;padding:9px 12px;line-height:1.6}
.upd-row{display:flex;align-items:center;gap:10px;padding:9px 12px;border:1px solid var(--border);border-radius:8px;background:var(--bg-secondary);margin-bottom:6px;flex-wrap:wrap}
.upd-name{font-weight:700;color:var(--text-primary);min-width:0}
.upd-ver{font-size:.72rem;color:var(--text-muted);font-family:'JetBrains Mono',Consolas,monospace;white-space:nowrap}
.upd-ver .arrow{color:var(--text-muted)}
.upd-ver .ver-new{color:var(--text-secondary)}
.upd-badge{margin-left:auto;font-size:.62rem;padding:2px 10px;border-radius:99px;font-weight:700;white-space:nowrap;flex-shrink:0}
.upd-badge.latest{background:rgba(34,197,94,.18);color:#22c55e}
.upd-badge.out{background:rgba(245,158,11,.15);color:#fbbf24}
.upd-badge.fail{background:rgba(148,163,184,.15);color:#94a3b8}
.upd-err-txt{width:100%;font-size:.66rem;color:#94a3b8;line-height:1.5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.upd-mods-head{font-size:.72rem;color:var(--text-secondary);margin:12px 0 7px;display:flex;align-items:center;gap:7px}
.upd-mods-head .upd-cnt{font-size:.64rem;color:var(--text-muted);margin-left:auto}
.upd-mods-head .upd-cnt.upd-cnt-ok{color:#22c55e}
.upd-mods-head .upd-cnt.upd-cnt-warn{color:#fbbf24}
.upd-mods-head .upd-cnt.upd-cnt-fail{color:#94a3b8}
.upd-mods{max-height:230px;overflow-y:auto;padding-right:2px}
.upd-mod-row{display:flex;align-items:center;gap:10px;padding:7px 11px;border:1px solid var(--border);border-radius:7px;background:var(--bg-secondary);margin-bottom:5px;flex-wrap:wrap}
.upd-mod-row.has-update{border-color:rgba(245,158,11,.55);background:rgba(245,158,11,.07)}
.upd-mod-row .upd-name{font-weight:600;font-size:.74rem}
.upd-mod-row .upd-tag{font-size:.6rem;padding:1px 8px;border-radius:99px;font-weight:700;flex-shrink:0}
.upd-mod-row.has-update .upd-tag{background:rgba(245,158,11,.18);color:#fbbf24}
.upd-mod-row.latest .upd-tag{background:rgba(34,197,94,.18);color:#22c55e}
.upd-mod-row.fail .upd-tag{background:rgba(148,163,184,.15);color:#94a3b8}
/* V3.1：模组来源/时间/可更新/备注 */
.upd-mod-row .upd-src{font-size:.58rem;padding:1px 7px;border-radius:99px;font-weight:700;flex-shrink:0;background:rgba(148,163,184,.14);color:#94a3b8}
.upd-mod-row .upd-date{font-size:.66rem;color:var(--text-muted);white-space:nowrap;flex-shrink:0}
.upd-mod-row .upd-sug{font-size:.6rem;padding:1px 8px;border-radius:99px;font-weight:700;flex-shrink:0;background:rgba(245,158,11,.18);color:#fbbf24}
.upd-mod-row .upd-note{width:100%;font-size:.66rem;color:var(--text-muted);line-height:1.5;word-break:break-word}
/* V4.1/F5：一键更新按钮（有更新行） */
.upd-apply{flex-shrink:0;margin-left:auto;font-size:.66rem;padding:4px 11px;border-radius:7px;cursor:pointer;font-family:inherit;border:1px solid rgba(245,158,11,.55);background:rgba(245,158,11,.12);color:#fbbf24;transition:filter .15s}
.upd-apply:hover{filter:brightness(1.18)}
.upd-apply:disabled{opacity:.6;cursor:not-allowed}
.upd-apply .spin{width:12px;height:12px;border-width:2px;border-color:rgba(251,191,36,.35);border-top-color:#fbbf24;vertical-align:-2px;margin-right:5px}
/* V4.1/F5：模组更新完成提示条（复用 mods-restart 样式） */
.twld-hint{font-size:.7rem;color:var(--text-muted);line-height:1.6;margin:0 0 12px}

/* F21 更新检测：触发大按钮 + 模态窗（复用 mod-detail-modal 交互） */
.update-check-btn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;padding:14px 18px;font-size:.92rem;font-weight:700;border:none;border-radius:10px;background:var(--accent);color:#fff;cursor:pointer;font-family:inherit;transition:filter .15s,transform .1s,opacity .15s}
.update-check-btn:hover{filter:brightness(1.14)}
.update-check-btn:active{transform:scale(.98)}
.update-check-btn:disabled{opacity:.6;cursor:not-allowed;transform:none;filter:none}
.update-check-btn .uc-ico{font-size:1.12rem;line-height:1}
.update-check-btn .spin{width:14px;height:14px;border-width:2px}
.upd-modal-box{max-width:560px;position:relative;max-height:calc(100vh - 40px);display:flex;flex-direction:column;overflow:hidden}
.upd-modal-title{font-size:1.05rem;font-weight:700;color:var(--text-primary);margin:0 0 4px;padding-right:32px}
.upd-modal-meta{font-size:.74rem;color:var(--text-muted);margin-bottom:12px;line-height:1.6;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.upd-modal-meta .upd-cached{color:#fbbf24;font-weight:600}
.upd-force{margin-left:auto;padding:3px 11px;font-size:.68rem}
.upd-body{overflow-y:auto;padding-right:4px;min-height:0}
.upd-loading{display:flex;align-items:center;justify-content:center;gap:10px;padding:34px 0;font-size:.82rem;color:var(--text-muted)}
.upd-loading .spin{border-color:rgba(148,163,184,.35);border-top-color:currentColor;width:16px;height:16px}
@media(max-width:560px){
  #updates-modal{padding:10px}
  .upd-modal-box{max-height:calc(100vh - 20px)}
}

/* F22 操作历史默认折叠 */
.hist-summary{font-size:.76rem;color:var(--text-secondary);background:var(--bg-secondary);border:1px dashed var(--border);border-radius:8px;padding:9px 12px;margin-bottom:10px;line-height:1.7;cursor:pointer;transition:border-color .15s,background .15s;word-break:break-all}
.hist-summary:hover{border-color:var(--border-hover)}
.hist-summary b{color:var(--text-primary);font-family:'JetBrains Mono',Consolas,monospace;font-size:.72rem}
.hist-summary .hist-detail{font-size:.7rem}
/* V4.4：摘要行内 detail 改为 inline-block——内联 span 的 max-width/overflow 不生效，触屏窄屏下会撑破行 */
.hist-summary .hist-detail{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}

/* 操作历史（F15）[V5.1] 表格化+完整描述 */
.power-row .info-value{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.btn-power{padding:6px 16px;font-size:.78rem;gap:6px}
.btn-power-off{background:var(--red);color:#fff}
.btn-power-off:hover{filter:brightness(1.12)}
.btn-power-on{background:#16a34a;color:#fff}
.btn-power-on:hover{filter:brightness(1.12)}
.btn-power[disabled],.btn-power[disabled]:hover{opacity:.45;cursor:not-allowed;filter:grayscale(.35)}
.power-hint{font-size:.68rem;color:var(--text-muted);line-height:1.5}
.hist-list{display:flex;flex-direction:column}
.hist-row{display:grid;grid-template-columns:62px 82px minmax(0,1fr) auto 52px;gap:8px;align-items:center;padding:8px 2px;border-bottom:1px solid var(--border);font-size:.76rem}
.hist-row:last-child{border-bottom:none}
.hist-time{font-family:'JetBrains Mono',Consolas,monospace;color:var(--text-muted);white-space:nowrap;font-size:.7rem}
.hist-ip{color:var(--text-secondary);font-size:.7rem;white-space:nowrap}
.hist-act{font-weight:700;color:var(--text-primary);white-space:nowrap}
.hist-detail{font-size:.7rem;color:var(--text-muted);word-break:break-all;line-height:1.5}
.hist-res{margin-left:auto;font-size:.64rem;padding:2px 10px;border-radius:99px;font-weight:700;white-space:nowrap;flex-shrink:0;text-align:center}
.hist-res.ok{background:rgba(34,197,94,.15);color:#4ade80}
.hist-res.fail{background:rgba(239,68,68,.15);color:#f87171}
.hist-res.deny{background:rgba(245,158,11,.15);color:#fbbf24}
.hist-res.accept{background:rgba(99,102,241,.15);color:#a5b4fc}
.hist-res.sim{background:rgba(148,163,184,.15);color:#94a3b8}
.hist-fail-btn{margin-left:8px}

/* 弹窗 */
.modal-mask{position:fixed;inset:0;background:rgba(2,6,23,.76);display:flex;align-items:center;justify-content:center;z-index:999;padding:20px;opacity:0;pointer-events:none;visibility:hidden;transition:opacity .18s ease,visibility 0s linear .18s}
.modal-mask.show{opacity:1;pointer-events:auto;visibility:visible;transition:opacity .18s ease,visibility 0s}
.modal-box{width:100%;max-width:400px;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-sm);padding:20px;box-shadow:0 24px 60px -12px rgba(0,0,0,.6);transform:translateY(10px);transition:transform .18s ease;max-height:calc(100vh - 40px);overflow-y:auto}
/* V4.4：更新弹窗保持内部滚动（upd-body），弹窗盒本身不滚 */
#updates-modal .modal-box{overflow:hidden}
.modal-mask.show .modal-box{transform:none}
.modal-box h4{margin:0 0 10px;font-size:.95rem;color:var(--text-primary)}
.modal-body{font-size:.82rem;color:var(--text-secondary);line-height:1.75;margin-bottom:18px;white-space:pre-line;word-break:break-word}
.modal-actions{display:flex;gap:10px;justify-content:flex-end}
.sm-worlds{max-height:220px;overflow-y:auto;margin-bottom:16px;padding-right:2px}

/* F12 强制进度弹窗：无关闭途径 */
.pmodal-box{max-width:420px}
.pmodal-title{margin:0 0 14px!important;font-size:1rem;color:var(--text-primary)}
.pmodal-bar{height:10px;border-radius:99px;background:var(--bg-secondary);border:1px solid var(--border);overflow:hidden}
.pmodal-fill{height:100%;width:0;border-radius:99px;background:var(--accent);transition:width .5s ease}
.pmodal-stage{font-size:.76rem;color:var(--text-muted);margin-top:10px;word-break:break-all;line-height:1.6}
.pmodal-note{font-size:.68rem;color:var(--text-muted);margin-top:8px}

@media(min-width:560px){
  .mode-grid{grid-template-columns:1fr 1fr}
}
@media(max-width:420px){
  .info-card{padding:4px 14px}
  .w-meta .mt{display:none}
  .hero-mini h1{font-size:1.25rem}
  .hist-row{display:flex;flex-wrap:wrap;gap:5px}
  .hist-time{width:100%}
  .f25-pw-hint,.field-err{margin-left:0}
  .modal-mask{padding:14px}
  .modal-box{padding:16px}
}
/* V4.4：小屏信息卡——长世界名/长文本 code 允许换行（PC 保留 nowrap 单行） */
@media(max-width:560px){
  .info-value code{white-space:normal;word-break:break-all}
}
/* V4.4：触屏设备——彩蛋 chip 等次要触控目标抬高热区、禁止长按选中文本 */
@media (hover: none), (pointer: coarse){
  .seed-btn,.create-toggle{min-height:44px}
  .seed-chip{padding:7px 10px;min-height:38px;-webkit-user-select:none;user-select:none}
  .seed-chip-wrap .sc-info{width:24px;height:24px;font-size:.72rem}
  .hist-summary{min-height:44px}
}

/* ============ FIX2 可交互元素对比度审计（深色底明显区分） ============ */
/* 统一提升“幽灵/描边”类交互元素的边框与文字对比，避免与深色背景融为一体 */
.btn-ghost{border-color:rgba(148,163,184,.45)}
.btn-ghost:hover{border-color:var(--border-hover);background:var(--bg-card-hover);filter:none}
.copy-btn{border-color:rgba(148,163,184,.32);color:#cbd5e1}
.copy-btn:hover{color:var(--accent-light);border-color:var(--border-hover)}
.back-link{border-color:rgba(148,163,184,.32)}
.mode-card{border-color:rgba(148,163,184,.3)}
.mode-card:hover:not(:disabled){border-color:var(--border-hover)}
.world-item{border-color:rgba(148,163,184,.28)}
.world-item:hover{border-color:var(--border-hover)}
.mod-cell{border-color:rgba(148,163,184,.28)}
.mod-cell:hover{border-color:var(--border-hover)}
.hist-summary{border-color:rgba(148,163,184,.32)}
.hist-summary:hover{border-color:var(--border-hover)}
.inp,.sel{border-color:rgba(148,163,184,.3)}
.w-del{opacity:.6;color:var(--text-secondary)}
.w-info{opacity:.6;color:var(--text-secondary)}
.mod-modal-close{color:var(--text-secondary)}
.pw-eye{opacity:.8}
.sw-slider{border-color:rgba(148,163,184,.32);background:var(--bg-card)}
.sw-slider::before{background:#cbd5e1}
.sw input:focus-visible + .sw-slider{outline:2px solid var(--accent-light);outline-offset:2px}

/* ============ P2-2 触控热区 ≥44px（视觉保持紧凑，命中区扩大——::before 扩热区 / label 行高） ============ */
.world-item{min-height:44px}
.btn,.w-del,.copy-btn,.sw{position:relative}
.btn::before,.w-del::before,.pw-eye::before,.mod-modal-close::before,.copy-btn::before,.sw::before{content:"";position:absolute;left:50%;top:50%;width:44px;height:44px;transform:translate(-50%,-50%)}
.back-link{min-height:44px}

/* ============ P2-3 对比度 ≥4.5:1（info-label / footer 边缘项） ============ */
.info-label{color:#94a3b8}
.footer p{color:#94a3b8}

/* ============ P3-3 辅助文字最小 12px（深色主题可读性；<.75rem 全部提至 .75rem） ============ */
.status-sub,.mc-meta,.mc-chip,.wg-port,.wg-cur,.w-badge,.w-meta,.w-lock,
.upd-badge,.upd-err-txt,.upd-cnt,.upd-tag,.upd-src,.upd-date,.upd-sug,.upd-note,
.mod-ver,.mod-st,.sm-badge,.sm-desc,.sm-hint,.sm-summary,.sm-next,.dry-badge,
.hist-res,.hist-detail,.hist-time,.hist-ip,.pmodal-note,.upd-force,
.copy-btn,.refresh-info,.pp-title,.field-err,.f25-pw-hint,.upd-modal-meta,
.hist-summary b,.head-btn,.mods-restart .btn,.sm-row .lbl,.sm-row .unit,
.pw-count,.upd-mods-head,.upd-ver,.dirty-tag,.cfg-summary,.mod-name,.upd-name{font-size:.75rem}
/* ══ 日间模式页面级适配（terraria 面板；随 style.css prefers-color-scheme: light 变量集联动） ══ */
@media (prefers-color-scheme: light){
  /* 输入控件：文字/光标/占位/autofill 回深（原深色专属固定色） */
  .inp,.sel,.sm-inp,.pw-input{color:var(--text-primary);caret-color:var(--accent)}
  .inp::placeholder{color:var(--text-muted)}
  .inp:-webkit-autofill,.sel:-webkit-autofill,.sm-inp:-webkit-autofill,.pw-input:-webkit-autofill{-webkit-text-fill-color:var(--text-primary);-webkit-box-shadow:0 0 0 1000px var(--bg-secondary) inset}
  /* 描边类元素边框回深（原 rgba(148,163,184,…) 浅底过淡） */
  .btn-ghost,.copy-btn,.back-link,.mode-card,.world-item,.mod-cell,.hist-summary,.inp,.sel,.sw-slider,.sc-info{border-color:rgba(15,23,42,.2)}
  .copy-btn{color:var(--text-secondary)}
  .sw-slider::before{background:#64748b}
  /* 状态/成功语义色加深（浅底对比度 ≥3:1） */
  .status-badge.online,.copy-btn.copied,.players-online.on,.sm-next.has{color:#16a34a}
  .status-badge.online,.copy-btn.copied{border-color:rgba(22,163,74,.4)}
  .status-badge.offline{color:#dc2626;border-color:rgba(220,38,38,.4)}
  .status-badge.busy{color:#d97706;border-color:rgba(217,119,6,.45)}
  .mc-meta .mini-dot.on{background:#16a34a;box-shadow:0 0 6px rgba(22,163,74,.7)}
  .ops-msg.ok{background:rgba(22,163,74,.1);color:#16a34a;border-color:rgba(22,163,74,.3)}
  .ops-msg.err{background:rgba(220,38,38,.08);color:#dc2626;border-color:rgba(220,38,38,.3)}
  .ops-msg.warn{background:rgba(217,119,6,.1);color:#b45309;border-color:rgba(217,119,6,.35)}
  .login-error,.field-err,.req,.pmodal-fail,.info-err,.upd-err,.world-item:hover .w-del{color:#dc2626}
  .upd-err{border-color:rgba(220,38,38,.3)}
  .field-warn,.seed-hint.mod,.sm-hint,.w-lock,.dry-badge,.mods-restart,.diff-hint,.upd-cached{color:#b45309}
  .seed-hint.mod,.w-lock,.dry-badge,.diff-hint,.mods-restart{border-color:rgba(217,119,6,.35)}
  .w-lock,.dry-badge{background:rgba(217,119,6,.1)}
  .mods-restart{background:rgba(217,119,6,.08)}
  .diff-hint{background:rgba(217,119,6,.08)}
  .diff-hint b{color:#92400e}
  .mod-st.on,.sm-badge.on,.upd-badge.latest,.upd-mod-row.latest .upd-tag,.upd-cnt.upd-cnt-ok{color:#16a34a}
  .mod-st.off,.sm-badge.off,.upd-badge.fail,.upd-mod-row.fail .upd-tag,.upd-cnt.upd-cnt-fail,.upd-err-txt,.upd-src,.info-label,.footer p{color:var(--text-muted)}
  .sm-badge.dis,.upd-badge.out,.upd-mod-row.has-update .upd-tag,.upd-cnt.upd-cnt-warn,.upd-sug,.upd-apply{color:#b45309}
  .upd-mod-row.has-update{border-color:rgba(217,119,6,.5);background:rgba(217,119,6,.06)}
  .upd-sug{background:rgba(217,119,6,.15)}
  .upd-apply{border-color:rgba(217,119,6,.5);background:rgba(217,119,6,.08)}
  .upd-apply .spin{border-color:rgba(180,83,9,.35);border-top-color:currentColor}
  .hist-res.ok{background:rgba(22,163,74,.1);color:#16a34a}
  .hist-res.fail{background:rgba(220,38,38,.08);color:#dc2626}
  .hist-res.deny{background:rgba(217,119,6,.1);color:#b45309}
  .hist-res.accept{background:rgba(79,70,229,.1);color:var(--accent)}
  /* 弹窗遮罩浅色下适度减重 */
  .modal-mask{background:rgba(15,23,42,.55)}
  /* 背景光球弱化，避免浅底突兀 */
  .bg-animation .orb{opacity:.07}
}
