/* box00 服务器控制台 — 纸面新拟物 (paper-neumorphic)
   光源恒在左上：亮面 #ffffff / 暗面 #c9cddb；红 #e03546 克制使用 */
:root {
  --paper: #e8eaf0;
  --light: #ffffff;
  --dark:  #c9cddb;
  --ink-1: #2a2d3a;
  --ink-2: #8a8fa3;
  --ink-3: #b0b4c6;
  --accent: #e03546;
  --accent-glow: rgba(224, 53, 70, .35);
  --accent-deep: #7a0f1e;
  --r-card: 18px;
  --r-inset: 14px;
  --r-nav: 12px;
  --shadow-out: 8px 8px 16px var(--dark), -8px -8px 16px var(--light);
  --shadow-out-sm: 4px 4px 8px var(--dark), -4px -4px 8px var(--light);
  --shadow-in: inset 5px 5px 10px var(--dark), inset -5px -5px 10px var(--light);
  --shadow-in-sm: inset 4px 4px 8px var(--dark), inset -4px -4px 8px var(--light);
  --mono: "SF Mono", "JetBrains Mono", Menlo, Consolas, monospace;
}
* { margin:0; padding:0; box-sizing:border-box; font-family:"PingFang SC","SF Pro Display",-apple-system,sans-serif; }
body.paper-neu { background:var(--paper); color:var(--ink-1); min-height:100vh; }
.page { max-width:1240px; margin:0 auto; padding:24px 36px 48px; }

/* ---- 原子 ---- */
.neu { background:var(--paper); border-radius:var(--r-card); box-shadow:var(--shadow-out); }
.neu-inset { background:var(--paper); border-radius:var(--r-inset); box-shadow:var(--shadow-in); }

/* ---- 顶栏 ---- */
header { display:flex; align-items:center; justify-content:space-between; gap:16px; margin-bottom:30px; }
.logo { font-weight:800; font-size:15px; letter-spacing:2px; }
.logo small { display:block; font-weight:400; font-size:9px; color:var(--ink-2); letter-spacing:2px; margin-top:3px; }
.nav { display:flex; gap:6px; padding:6px; }
.nav button { border:none; background:transparent; padding:9px 18px; border-radius:var(--r-nav); font-size:13px; color:var(--ink-2); cursor:pointer; transition:all .25s; font-weight:500; }
.nav button.active { color:var(--ink-1); font-weight:700; background:var(--paper); box-shadow:var(--shadow-out-sm); }
.nav button:hover:not(.active) { color:var(--ink-1); }
.user-area { display:flex; align-items:center; gap:14px; }
.avatar { width:40px; height:40px; border-radius:50%; background:radial-gradient(circle at 35% 30%, #ffffff, var(--paper) 65%); box-shadow:var(--shadow-out-sm); }

/* ---- 按钮 ---- */
.btn-red { border:none; background:var(--accent); color:#fff; padding:11px 24px; border-radius:22px; font-size:13px; font-weight:600; cursor:pointer; box-shadow:5px 5px 12px var(--accent-glow), -3px -3px 8px var(--light); transition:transform .15s; }
.btn-red:hover { transform:translateY(-2px); }
.btn-red:disabled { opacity:.5; cursor:default; transform:none; }
.btn-mini { border:none; background:var(--paper); color:var(--ink-2); padding:7px 16px; border-radius:999px; font-size:11px; letter-spacing:.5px; cursor:pointer; box-shadow:var(--shadow-out-sm); transition:all .2s; text-decoration:none; display:inline-block; }
.btn-mini:hover { color:var(--ink-1); transform:translateY(-1px); }
.btn-mini.warn { color:var(--accent); }

/* ---- 输入 ---- */
.input { background:var(--paper); border:none; border-radius:var(--r-inset); box-shadow:var(--shadow-in); padding:13px 18px; font-size:13px; color:var(--ink-1); outline:none; }
.input::placeholder { color:var(--ink-3); }
.input:focus { box-shadow:var(--shadow-in-sm); }
.input.grow { flex:1; }

/* ---- 总览 hero ---- */
.hero { display:grid; grid-template-columns:300px 1fr 250px; gap:32px; align-items:start; }
h1 { font-size:30px; line-height:1.35; font-weight:800; margin-bottom:14px; }
.sub { font-size:12px; color:var(--ink-2); line-height:1.9; letter-spacing:.5px; margin-bottom:26px; }
.stat-row { display:flex; justify-content:space-between; align-items:center; padding:11px 16px; margin-bottom:10px; font-size:12px; color:var(--ink-2); letter-spacing:.5px; }
.stat-row b { font-size:15px; color:var(--ink-1); font-weight:700; }
.stat-row.up b { color:var(--accent); }

/* 能量核 + 节点 */
.stage { position:relative; height:460px; display:flex; align-items:center; justify-content:center; }
.orb { width:210px; height:210px; border-radius:50%; position:relative; z-index:2;
  background:radial-gradient(circle at 38% 32%, #ff8a7a, #e03546 45%, var(--accent-deep) 80%);
  box-shadow:0 0 60px rgba(224,53,70,.5), 0 0 120px rgba(224,53,70,.25),
    inset -12px -14px 30px rgba(0,0,0,.35), inset 10px 12px 24px rgba(255,255,255,.28),
    10px 10px 24px var(--dark), -10px -10px 24px var(--light);
  animation:breathe 4s ease-in-out infinite; transition:filter .6s; }
.orb.off { background:radial-gradient(circle at 38% 32%, #ffffff, var(--paper) 45%, var(--dark) 85%);
  box-shadow:inset -12px -14px 30px rgba(0,0,0,.12), inset 10px 12px 24px rgba(255,255,255,.7),
    10px 10px 24px var(--dark), -10px -10px 24px var(--light); animation:none; filter:none; }
@keyframes breathe {
  0%,100% { transform:scale(1); }
  50% { transform:scale(1.045); }
}
.ring { position:absolute; width:330px; height:330px; border-radius:50%; border:2px dashed rgba(224,53,70,.45); animation:spin 24s linear infinite; }
.ring::after { content:""; position:absolute; top:-7px; left:50%; width:14px; height:14px; border-radius:50%; background:var(--accent); box-shadow:0 0 12px rgba(224,53,70,.8); }
@keyframes spin { to { transform:rotate(360deg); } }
.node { position:absolute; width:86px; height:86px; border-radius:50%; z-index:3; display:flex; flex-direction:column; align-items:center; justify-content:center; background:radial-gradient(circle at 35% 30%, #ffffff, var(--paper) 65%); box-shadow:6px 6px 14px var(--dark), -6px -6px 14px var(--light); transition:transform .25s; }
.node:hover { transform:scale(1.1); }
.node b { font-size:19px; color:var(--ink-1); }
.node span { font-size:10px; color:var(--ink-2); margin-top:2px; }
.node.hot b { color:var(--accent); }
.node.hot b.ok { color:var(--accent); }
.node.hot b.no { color:var(--ink-2); }

/* 右侧快捷面板 */
.panel { padding:20px; }
.wide { min-height:200px; }
.panel h3 { font-size:13px; font-weight:700; margin-bottom:16px; display:flex; justify-content:space-between; align-items:center; gap:10px; }
.panel h3 i { font-style:normal; color:var(--accent); font-size:11px; letter-spacing:1px; }
.qbtn { width:100%; border:none; cursor:pointer; text-align:left; font-family:inherit; transition:all .2s; }
.qbtn:hover { transform:translateY(-2px); }
.qbtn:active { box-shadow:var(--shadow-in-sm); }
.qbtn b { font-size:11px; color:var(--ink-3); letter-spacing:2px; font-weight:600; }
.qbtn:hover b { color:var(--accent); }
.quick-note { font-size:11px; color:var(--ink-3); letter-spacing:.5px; margin-top:10px; min-height:14px; }
.quick-note.err { color:var(--accent); }

/* ---- 玩家列表 ---- */
#player-list { display:flex; flex-direction:column; gap:12px; }
.player-row { display:flex; align-items:center; gap:16px; padding:14px 20px; }
.player-row .p-name { font-weight:700; font-size:14px; min-width:120px; }
.player-row .p-meta { flex:1; font-size:11px; color:var(--ink-2); letter-spacing:.5px; }
.player-row .p-badge { font-size:10px; color:var(--ink-2); border-radius:999px; padding:3px 12px; box-shadow:var(--shadow-out-sm); letter-spacing:1px; }
.player-row .p-badge.owner { color:var(--accent); }
.empty { text-align:center; color:var(--ink-3); font-size:12px; letter-spacing:1px; padding:40px 0; }

/* ---- 控制台 / 日志 ---- */
.console-out { padding:18px 20px; height:360px; overflow-y:auto; font-family:var(--mono); font-size:12px; line-height:1.9; }
.console-out.tall { height:460px; }
.console-out .line { white-space:pre-wrap; word-break:break-all; }
.console-out .cmd { color:var(--ink-1); font-weight:700; margin-top:8px; }
.console-out .resp { color:var(--ink-2); padding-left:14px; }
.console-out .err { color:var(--accent); padding-left:14px; }
.console-out .sys { color:var(--ink-3); font-style:normal; }
.console-in { display:flex; gap:12px; margin-top:16px; align-items:center; }

/* ---- 助手 ---- */
.agent-panel .chat { max-height:520px; overflow-y:auto; display:flex; flex-direction:column; gap:14px; padding:8px 4px 14px; }
.msg { padding:13px 18px; font-size:13px; line-height:1.8; max-width:78%; }
.msg.user { align-self:flex-end; border-radius:var(--r-inset); box-shadow:var(--shadow-out-sm); }
.msg.bot { align-self:flex-start; }
.msg.sys-line { align-self:center; max-width:100%; background:none; box-shadow:none; color:var(--ink-3); font-size:11px; padding:2px; letter-spacing:.5px; }
.chat .neu-inset.msg { border-radius:var(--r-inset); }
.cmd-card { margin-top:10px; padding:12px 16px; border-radius:12px; box-shadow:var(--shadow-in-sm); display:flex; flex-direction:column; gap:8px; }
.cmd-card .cc-top { display:flex; align-items:center; gap:10px; }
.cmd-card code { font-family:var(--mono); font-size:12px; color:var(--ink-1); font-weight:600; word-break:break-all; flex:1; }
.cmd-card .risk { font-size:10px; color:var(--accent); letter-spacing:1px; }
.cmd-card .note { font-size:11px; color:var(--ink-2); }
.cmd-card .cc-actions { display:flex; gap:8px; align-items:center; }
.cmd-card .result { font-family:var(--mono); font-size:11px; color:var(--ink-2); white-space:pre-wrap; }
.cmd-card .result.err { color:var(--accent); }
.auto { display:flex; gap:8px; align-items:center; padding:11px 16px; border-radius:999px; font-size:12px; color:var(--ink-2); cursor:pointer; white-space:nowrap; }
.auto input { accent-color:var(--accent); }

/* ---- 控制中心 ---- */
.qc-status { font-size:12px; color:var(--ink-2); letter-spacing:.5px; padding:12px 18px; border-radius:var(--r-inset); box-shadow:var(--shadow-in); margin-bottom:16px; }
.switch-list { display:grid; grid-template-columns:repeat(auto-fit, minmax(320px, 1fr)); gap:14px; margin-bottom:18px; }
.switch-row { display:flex; align-items:center; justify-content:space-between; gap:16px; padding:14px 18px; border-radius:var(--r-inset); box-shadow:var(--shadow-in); }
.switch-row .sw-name { font-size:13px; font-weight:700; }
.switch-row .sw-desc { font-size:11px; color:var(--ink-2); margin-top:4px; letter-spacing:.5px; line-height:1.6; }
.switch { position:relative; width:56px; height:30px; flex:0 0 auto; border:none; cursor:pointer; border-radius:15px; background:var(--paper); box-shadow:var(--shadow-in-sm); transition:box-shadow .2s; }
.switch .knob { position:absolute; top:3px; left:3px; width:24px; height:24px; border-radius:50%; background:radial-gradient(circle at 35% 30%, #ffffff, #dfe2ea 75%); box-shadow:2px 2px 5px var(--dark), -1px -1px 4px var(--light); transition:left .18s ease, background .18s ease; }
.switch.on { box-shadow:inset 3px 3px 7px rgba(224,53,70,.28), inset -3px -3px 7px var(--light); }
.switch.on .knob { left:29px; background:radial-gradient(circle at 35% 30%, #ff8a7a, var(--accent) 70%); box-shadow:1px 1px 6px var(--accent-glow); }
.switch:disabled { opacity:.55; cursor:default; }
.qc-actions { display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-top:2px; }

/* ---- 实时监测 ---- */
.mon-grid { display:grid; grid-template-columns:repeat(3, 1fr); gap:14px; margin-bottom:18px; }
.mon-card { padding:16px 20px; text-align:center; }
.mon-card b { display:block; font-size:30px; color:var(--ink-1); line-height:1.3; }
.mon-card span { font-size:11px; color:var(--ink-2); letter-spacing:1px; }
.mon-section { margin-top:16px; }
.mon-section h4 { font-size:12px; font-weight:700; margin-bottom:10px; }
.mon-section h4 i { font-style:normal; color:var(--ink-3); font-size:10px; letter-spacing:1px; margin-left:8px; }
.mon-players { display:flex; gap:12px; flex-wrap:wrap; }
.mon-p { display:flex; gap:16px; align-items:baseline; padding:12px 18px; border-radius:var(--r-inset); }
.mon-p b { font-size:15px; }
.mon-p span { font-size:12px; color:var(--ink-2); }
.mon-types { display:flex; gap:10px; flex-wrap:wrap; }
.mon-chip { font-size:11px; padding:7px 14px; border-radius:999px; color:var(--ink-2); }

/* ---- Tab 显隐 ---- */
.tab[hidden] { display:none; }

/* ---- 自适应 ---- */
@media (max-width: 1080px) {
  .hero { grid-template-columns:1fr; }
  .stage { height:380px; }
  .page { padding:20px 18px 40px; }
  .nav button { padding:8px 12px; font-size:12px; }
}
