/* ============================================================
   起缘服务器 - 状态页样式
   复用 style.css 的 :root 变量与 MC 像素风格语言
   ============================================================ */

.status-page { background: var(--paper); }

/* 导航当前页标记 */
.nav-cta-current {
  color: #fff !important;
  background: var(--green);
  border: 3px solid var(--border);
  padding: 5px 14px;
  font-size: 14px;
  text-decoration: none;
  text-shadow: 1px 1px 0 rgba(0, 0, 0, .45);
  box-shadow: inset 2px 2px 0 rgba(255, 255, 255, .3), inset -2px -2px 0 rgba(0, 0, 0, .3);
}
.nav-cta-current:hover { filter: brightness(1.12); }

/* ============================================================
   顶部：实时总览
   ============================================================ */
.status-hero {
  padding: 118px 0 42px;
  background:
    repeating-linear-gradient(180deg, rgba(90, 62, 32, .05) 0 2px, transparent 2px 4px),
    var(--paper-tint);
  border-bottom: 3px solid rgba(26, 26, 26, .12);
}
.status-hero-head { text-align: center; margin-bottom: 26px; }
.status-hero-head h1 {
  font-size: 34px; font-weight: normal; letter-spacing: 4px;
  text-shadow: 3px 3px 0 rgba(0, 0, 0, .12);
}
.status-sub { color: var(--ink-dim); font-size: 13.5px; margin-top: 6px; }
.dot-sep { margin: 0 6px; color: rgba(0, 0, 0, .3); }
.refresh-btn {
  font-family: inherit; font-size: 15px; line-height: 1;
  margin-left: 8px; padding: 3px 8px; cursor: pointer;
  color: var(--ink); background: #fff;
  border: 2px solid var(--border);
  box-shadow: var(--shadow-hard);
}
.refresh-btn:hover { background: var(--green); color: #fff; }
.refresh-btn.spin { animation: spin .6s linear infinite; }
@keyframes spin { to { transform: rotate(360deg) } }

/* 四个 MC 物品栏风格的格子 */
.status-board {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px;
  background: rgba(30, 30, 30, .82);
  border: 3px solid var(--border);
  padding: 8px;
  box-shadow: var(--shadow-hard), 0 0 0 3px rgba(255, 255, 255, .5);
}
.board-cell {
  background: #8b8b8b;
  border: 3px solid #373737;
  box-shadow: inset 3px 3px 0 rgba(0, 0, 0, .35), inset -3px -3px 0 rgba(255, 255, 255, .3);
  padding: 14px 12px;
  min-height: 108px;
  display: flex; flex-direction: column; gap: 4px;
}
.board-label { color: #e8e8e8; font-size: 12.5px; text-shadow: 1px 1px 0 rgba(0, 0, 0, .5); }
.board-big {
  color: #fff; font-size: 27px; line-height: 1.2;
  text-shadow: 2px 2px 0 rgba(0, 0, 0, .5);
  flex: 1; display: flex; align-items: center; gap: 6px;
}
.board-big small { font-size: 14px; color: #d6d6d6; }
.board-foot { color: #cfcfcf; font-size: 11.5px; text-shadow: 1px 1px 0 rgba(0, 0, 0, .5); }

/* 状态徽章：四态 */
.state-pill {
  display: inline-block; font-size: 19px; color: #fff;
  padding: 3px 14px;
  border: 3px solid var(--border);
  text-shadow: 2px 2px 0 rgba(0, 0, 0, .45);
  box-shadow: inset 2px 2px 0 rgba(255, 255, 255, .3), inset -2px -2px 0 rgba(0, 0, 0, .3);
}
.state-running { background: var(--green); }
.state-starting { background: #3d7dd8; }
.state-down { background: var(--red); }
.state-hung { background: #e08a2c; }
.state-unknown { background: #7c7c7c; }

/* 在线名单 */
.roster {
  margin-top: 18px;
  background: #fff;
  border: 3px solid var(--border);
  box-shadow: var(--shadow-hard);
  padding: 14px 18px;
  display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
}
.roster-title { font-size: 14px; color: var(--ink-dim); flex: none; }
.roster-list { display: flex; flex-wrap: wrap; gap: 8px; }
.roster-empty { color: var(--ink-dim); font-size: 13.5px; }
.roster-name {
  font-size: 13.5px;
  background: var(--paper); border: 2px solid rgba(26, 26, 26, .3);
  padding: 2px 10px;
  display: inline-flex; align-items: center; gap: 6px;
}
.roster-name::before {
  content: ""; width: 10px; height: 10px;
  background: #62d64f; border: 1px solid rgba(0, 0, 0, .4);
}

/* ============================================================
   通用区块元素
   ============================================================ */
.sub-title {
  font-size: 17px; font-weight: normal;
  margin: 30px 0 12px;
  display: flex; align-items: baseline; gap: 10px;
}
.sub-hint, .panel-sub { font-size: 12.5px; color: var(--ink-dim); font-weight: normal; }
.muted { color: var(--ink-dim); }
.pad { padding: 12px 0; }

/* 服务器信息九宫格 */
.info-grid {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px;
  background: rgba(30, 30, 30, .82);
  border: 3px solid var(--border);
  padding: 8px;
  box-shadow: var(--shadow-hard), 0 0 0 3px rgba(255, 255, 255, .5);
}
.info-cell {
  background: #8b8b8b;
  border: 3px solid #373737;
  box-shadow: inset 3px 3px 0 rgba(0, 0, 0, .3), inset -3px -3px 0 rgba(255, 255, 255, .28);
  padding: 11px 12px;
}
.info-cell span { display: block; color: #e2e2e2; font-size: 12px; text-shadow: 1px 1px 0 rgba(0,0,0,.5); }
.info-cell b {
  display: block; color: #fff; font-weight: normal; font-size: 16px;
  margin-top: 2px; text-shadow: 2px 2px 0 rgba(0, 0, 0, .45);
  word-break: break-all;
}

/* ============================================================
   性能 / 资源
   ============================================================ */
.perf-wrap { display: grid; grid-template-columns: 1fr 1fr; gap: 22px; }
.perf-card {
  background: #fff;
  border: 3px solid var(--border);
  box-shadow: var(--shadow-hard), 6px 6px 0 rgba(0, 0, 0, .08);
  padding: 20px;
}
.perf-head {
  display: flex; align-items: baseline; justify-content: space-between;
  font-size: 15px; margin-bottom: 12px;
}
.perf-head b { font-weight: normal; }
.perf-head span { font-size: 21px; color: var(--green-dark); }
.perf-note { color: var(--ink-dim); font-size: 12.5px; margin-top: 10px; }

/* 20 段像素条（TPS 满值 20） */
.pixel-bar { display: flex; gap: 3px; }
.pixel-bar i {
  flex: 1; height: 20px;
  background: #d8d2c2;
  border: 2px solid rgba(26, 26, 26, .35);
  box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .12);
}
.pixel-bar i.on {
  background: var(--green);
  box-shadow: inset 2px 2px 0 rgba(255, 255, 255, .35), inset -2px -2px 0 rgba(0, 0, 0, .25);
}
.pixel-bar i.warn { background: var(--yellow); box-shadow: inset 2px 2px 0 rgba(255,255,255,.4), inset -2px -2px 0 rgba(0,0,0,.2); }
.pixel-bar i.bad { background: var(--red); box-shadow: inset 2px 2px 0 rgba(255,255,255,.35), inset -2px -2px 0 rgba(0,0,0,.25); }

/* 连续型进度条 */
.mspt-track {
  height: 20px;
  background: #d8d2c2;
  border: 2px solid rgba(26, 26, 26, .35);
  box-shadow: inset 2px 2px 0 rgba(0, 0, 0, .12);
  overflow: hidden;
}
.mspt-fill {
  height: 100%; width: 0;
  background: var(--green);
  box-shadow: inset 2px 2px 0 rgba(255, 255, 255, .35), inset -2px -2px 0 rgba(0, 0, 0, .2);
  transition: width .4s ease;
}
.mspt-fill.warn { background: var(--yellow); }
.mspt-fill.bad { background: var(--red); }
.cpu-fill { background: #3d7dd8; }
.mem-fill { background: var(--aqua); }

/* 维度列表 */
.dims { display: flex; flex-wrap: wrap; gap: 8px; }
.dim-chip {
  display: inline-flex; align-items: center; gap: 8px;
  background: #fff; border: 2px solid rgba(26, 26, 26, .28);
  padding: 6px 12px; font-size: 13px;
}
.dim-chip b { font-weight: normal; }
.dim-chip em { font-style: normal; color: var(--ink-dim); font-size: 12px; }
.dim-chip .bar {
  width: 54px; height: 8px; background: #d8d2c2;
  border: 1px solid rgba(26, 26, 26, .3); position: relative;
}
.dim-chip .bar i { position: absolute; inset: 0 auto 0 0; background: var(--aqua); }

/* ============================================================
   历史曲线
   ============================================================ */
.chart-tools {
  display: flex; justify-content: space-between; align-items: center;
  gap: 14px; flex-wrap: wrap; margin-bottom: 14px;
}
.metric-tabs, .range-tabs { display: flex; gap: 6px; flex-wrap: wrap; }
.metric-tab, .range-tab {
  font-family: inherit; font-size: 13px; cursor: pointer;
  padding: 6px 13px;
  color: var(--ink-dim); background: #fff;
  border: 2px solid rgba(26, 26, 26, .3);
}
.metric-tab:hover, .range-tab:hover { color: var(--ink); border-color: var(--border); }
.metric-tab.active, .range-tab.active {
  color: #fff; background: var(--green); border-color: var(--border);
  text-shadow: 1px 1px 0 rgba(0, 0, 0, .4);
  box-shadow: inset 2px 2px 0 rgba(255, 255, 255, .3), inset -2px -2px 0 rgba(0, 0, 0, .25);
}
.chart-box {
  position: relative;
  background: #fff;
  border: 3px solid var(--border);
  box-shadow: var(--shadow-hard);
  padding: 8px;
}
/* ECharts 容器：必须显式高度，否则画布高度为 0 */
.chart { display: block; width: 100%; height: 280px; }
.chart-empty {
  position: absolute; inset: 0;
  display: flex; align-items: center; justify-content: center;
  color: var(--ink-dim); font-size: 13.5px;
  background: rgba(255, 255, 255, .82);
}
.chart-empty.hide { display: none; }
.chart-legend {
  margin-top: 10px; font-size: 12.5px; color: var(--ink-dim);
  display: flex; gap: 16px; flex-wrap: wrap;
}
.chart-legend b { font-weight: normal; color: var(--ink); }

/* ============================================================
   玩家
   ============================================================ */
.players-wrap { display: grid; grid-template-columns: 1fr 1fr; gap: 22px; }
.panel {
  background: #fff;
  border: 3px solid var(--border);
  box-shadow: var(--shadow-hard), 6px 6px 0 rgba(0, 0, 0, .08);
  padding: 20px;
}
.panel-title {
  font-size: 16px; font-weight: normal; margin-bottom: 14px;
  display: flex; align-items: baseline; gap: 10px;
}
.rank-list { list-style: none; display: flex; flex-direction: column; gap: 8px; }
.rank-item { display: flex; align-items: center; gap: 10px; font-size: 14px; }
.rank-no {
  width: 24px; height: 24px; flex: none;
  display: flex; align-items: center; justify-content: center;
  font-size: 12px; color: #fff; background: #9a9a9a;
  border: 2px solid var(--border);
  text-shadow: 1px 1px 0 rgba(0, 0, 0, .4);
}
.rank-item:nth-child(1) .rank-no { background: var(--yellow); }
.rank-item:nth-child(2) .rank-no { background: #b8c0c8; }
.rank-item:nth-child(3) .rank-no { background: #c68a4e; }
.rank-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rank-bar { width: 84px; height: 10px; flex: none; background: #e4ded0; border: 2px solid rgba(26,26,26,.25); }
.rank-bar i { display: block; height: 100%; background: var(--green); }
.rank-hour { flex: none; color: var(--ink-dim); font-size: 12.5px; min-width: 56px; text-align: right; }

.timeline {
  list-style: none; display: flex; flex-direction: column; gap: 7px;
  max-height: 320px; overflow-y: auto;
}
.tl-item { display: flex; align-items: center; gap: 10px; font-size: 13.5px; }
.tl-time { color: var(--ink-dim); font-size: 12.5px; flex: none; min-width: 96px; }
.tl-badge {
  flex: none; font-size: 11.5px; color: #fff; padding: 1px 8px;
  border: 2px solid var(--border);
  text-shadow: 1px 1px 0 rgba(0, 0, 0, .4);
}
.tl-join { background: var(--green); }
.tl-leave { background: #9a9a9a; }

/* ============================================================
   运维记录
   ============================================================ */
.incident-list { display: flex; flex-direction: column; gap: 12px; }
.incident {
  background: #fff;
  border: 3px solid var(--border);
  box-shadow: var(--shadow-hard);
}
.incident-head {
  display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
  padding: 14px 18px; cursor: pointer;
}
.incident-head:hover { background: rgba(90, 168, 52, .06); }
.incident-title { font-size: 15px; flex: 1; min-width: 180px; }
.incident-meta { color: var(--ink-dim); font-size: 12.5px; display: flex; gap: 12px; flex-wrap: wrap; }
.incident-caret { color: var(--ink-dim); font-size: 16px; }
.incident.open .incident-caret { transform: rotate(90deg); }
.incident-body { display: none; border-top: 3px solid rgba(26, 26, 26, .12); padding: 0 18px 18px; }
.incident.open .incident-body { display: block; }
.md-tabs { display: flex; gap: 6px; margin: 14px 0 10px; flex-wrap: wrap; }
.md-tab {
  font-family: inherit; font-size: 12.5px; cursor: pointer;
  padding: 4px 12px; color: var(--ink-dim); background: var(--paper);
  border: 2px solid rgba(26, 26, 26, .28);
}
.md-tab.active {
  color: #fff; background: var(--aqua); border-color: var(--border);
  text-shadow: 1px 1px 0 rgba(0, 0, 0, .4);
}
.md-status { color: var(--ink-dim); font-size: 13px; padding: 10px 0; }

/* markdown 正文渲染 */
.md-body { font-size: 14px; line-height: 1.85; max-height: 520px; overflow-y: auto; padding-right: 6px; }
.md-body > *:first-child { margin-top: 0; }
.md-body h1, .md-body h2, .md-body h3, .md-body h4 {
  font-weight: normal; margin: 20px 0 8px; line-height: 1.5;
  border-bottom: 2px solid rgba(26, 26, 26, .12); padding-bottom: 5px;
}
.md-body h1 { font-size: 19px; }
.md-body h2 { font-size: 17px; }
.md-body h3 { font-size: 15.5px; }
.md-body h4 { font-size: 14.5px; }
.md-body p { margin: 9px 0; }
.md-body ul, .md-body ol { margin: 9px 0 9px 22px; }
.md-body li { margin: 4px 0; }
.md-body code {
  font-family: inherit; font-size: .92em;
  background: rgba(29, 184, 196, .12); color: #0e7a83;
  padding: 1px 6px; border: 2px solid rgba(29, 184, 196, .3);
}
.md-body pre {
  background: #2b2620; color: #efeade;
  border: 3px solid var(--border);
  padding: 12px 14px; margin: 12px 0;
  overflow-x: auto; font-size: 12.5px; line-height: 1.7;
}
.md-body pre code { background: none; border: none; color: inherit; padding: 0; }
.md-body blockquote {
  margin: 12px 0; padding: 10px 16px;
  background: rgba(248, 195, 28, .12);
  border-left: 5px solid var(--yellow);
  color: #5c4a1e;
}
.md-body blockquote p { margin: 4px 0; }
.md-body hr { border: none; border-top: 3px solid rgba(26, 26, 26, .14); margin: 18px 0; }
.md-body a { color: #1d4ed8; }
.md-body table { border-collapse: collapse; margin: 12px 0; width: 100%; font-size: 13px; }
.md-body th, .md-body td { border: 2px solid rgba(26, 26, 26, .22); padding: 6px 10px; text-align: left; }
.md-body th { background: var(--paper-tint); font-weight: normal; }
.md-body strong { font-weight: normal; color: #1d4ed8; }

.repair-list { list-style: none; display: flex; flex-direction: column; gap: 10px; }
.repair-item {
  background: #fff; border: 3px solid var(--border);
  box-shadow: var(--shadow-hard); padding: 13px 16px;
  display: flex; gap: 14px; align-items: flex-start; flex-wrap: wrap;
}
.repair-time { color: var(--ink-dim); font-size: 12.5px; flex: none; min-width: 140px; }
.repair-action {
  flex: none; font-size: 12px; color: #fff; background: var(--aqua);
  border: 2px solid var(--border); padding: 0 8px;
  text-shadow: 1px 1px 0 rgba(0, 0, 0, .4);
}
.repair-detail { flex: 1; font-size: 13.5px; min-width: 200px; }

/* ============================================================
   网络状态
   ============================================================ */
.net-card {
  background: #fff;
  border: 3px solid var(--border);
  box-shadow: var(--shadow-hard), 6px 6px 0 rgba(0, 0, 0, .08);
  padding: 22px;
}
.net-head {
  display: flex; align-items: center; gap: 16px;
  padding-bottom: 16px; margin-bottom: 16px;
  border-bottom: 3px solid rgba(26, 26, 26, .12);
}
/* 红绿灯：像素方块 + 发光 */
.net-light {
  width: 26px; height: 26px; flex: none;
  border: 3px solid var(--border);
  box-shadow: inset 3px 3px 0 rgba(255, 255, 255, .35), inset -3px -3px 0 rgba(0, 0, 0, .3);
}
.net-ok { background: #62d64f; animation: net-pulse 2s ease-in-out infinite; }
.net-bad { background: var(--red); animation: net-pulse 1s ease-in-out infinite; }
.net-unknown { background: #9aa3ad; }
@keyframes net-pulse {
  0%, 100% { box-shadow: inset 3px 3px 0 rgba(255,255,255,.35), inset -3px -3px 0 rgba(0,0,0,.3), 0 0 0 0 rgba(98,214,79,.55) }
  50%      { box-shadow: inset 3px 3px 0 rgba(255,255,255,.35), inset -3px -3px 0 rgba(0,0,0,.3), 0 0 0 8px rgba(98,214,79,0) }
}
.net-head-text { display: flex; flex-direction: column; gap: 2px; }
.net-head-text b { font-weight: normal; font-size: 18px; }
.net-head-text span { color: var(--ink-dim); font-size: 12.5px; }

.net-rows { list-style: none; display: flex; flex-direction: column; gap: 2px; }
.net-row {
  display: flex; align-items: center; gap: 12px;
  padding: 10px 12px; font-size: 14px;
  border-bottom: 2px solid rgba(26, 26, 26, .07);
}
.net-row:last-child { border-bottom: none; }
.net-row-key { flex: none; display: flex; align-items: center; gap: 9px; min-width: 130px; }
.net-dot {
  width: 10px; height: 10px; flex: none;
  border: 2px solid rgba(0, 0, 0, .45);
}
.net-dot.ok { background: #62d64f; }
.net-dot.warn { background: var(--yellow); }
.net-dot.bad { background: var(--red); }
.net-dot.off { background: #b9b3a6; }
.net-row-host { flex: 1; color: var(--ink-dim); font-size: 12.5px; word-break: break-all; }
.net-row-lat {
  flex: none; min-width: 84px; text-align: right;
  font-size: 14px;
}
.net-row-lat.ok { color: var(--green-dark); }
.net-row-lat.warn { color: #a5731a; }
.net-row-lat.bad { color: var(--red); }
.net-row-tag {
  flex: none; font-size: 11.5px; color: #fff;
  background: var(--aqua); border: 2px solid var(--border);
  padding: 0 7px; text-shadow: 1px 1px 0 rgba(0, 0, 0, .4);
}
.net-note {
  margin-top: 12px; padding: 10px 12px;
  background: rgba(226, 87, 76, .1);
  border: 2px dashed rgba(180, 60, 50, .45);
  color: #8a2c22; font-size: 13px;
}

/* ============================================================
   响应式
   ============================================================ */
@media (max-width: 860px) {
  .status-board { grid-template-columns: 1fr 1fr; }
  .info-grid { grid-template-columns: 1fr 1fr; }
  .perf-wrap, .players-wrap { grid-template-columns: 1fr; }
  .chart { height: 210px; }
}
@media (max-width: 720px) {
  .status-hero { padding: 104px 0 32px; }
  .status-hero-head h1 { font-size: 26px; letter-spacing: 2px; }
  .nav-cta-current { margin: 12px 0 16px; }
  .board-big { font-size: 23px; }
  .metric-tabs, .range-tabs { width: 100%; }
  .metric-tab, .range-tab { flex: 1; text-align: center; }
  .repair-time { min-width: 0; }
  /* 网络行在窄屏换行，延迟右对齐不挤压主机名 */
  .net-row { flex-wrap: wrap; gap: 6px 12px; }
  .net-row-key { min-width: 0; }
  .net-row-host { flex: 1 1 100%; order: 3; padding-left: 19px; }
  .net-row-lat { min-width: 0; }
}

/* ============================================================
   地图预生成
   ============================================================ */
.pregen-card {
  background: #fff;
  border: 3px solid var(--border);
  box-shadow: var(--shadow-hard), 6px 6px 0 rgba(0, 0, 0, .08);
  padding: 22px;
}
.pregen-head {
  display: flex; align-items: center; gap: 16px;
  padding-bottom: 16px; margin-bottom: 16px;
  border-bottom: 3px solid rgba(26, 26, 26, .12);
}
.pregen-pill {
  flex: none; font-size: 13.5px; color: #fff;
  padding: 6px 14px;
  border: 3px solid var(--border);
  text-shadow: 2px 2px 0 rgba(0, 0, 0, .45);
  box-shadow: inset 2px 2px 0 rgba(255, 255, 255, .3), inset -2px -2px 0 rgba(0, 0, 0, .3);
  white-space: nowrap;
}
.pregen-running { background: var(--green); }
.pregen-paused { background: #3d7dd8; }
.pregen-idle { background: #9a9a9a; }
.pregen-done { background: var(--yellow); color: #3a2a15; text-shadow: none; }
.pregen-unknown { background: #b9b3a6; }
.pregen-head-text { display: flex; flex-direction: column; gap: 3px; }
.pregen-head-text b { font-weight: normal; font-size: 17px; }
.pregen-head-text span { color: var(--ink-dim); font-size: 12.5px; }

.pregen-bar {
  height: 26px;
  background: #d8d2c2;
  border: 3px solid var(--border);
  box-shadow: inset 3px 3px 0 rgba(0, 0, 0, .14);
  overflow: hidden;
  position: relative;
}
.pregen-bar i {
  display: block; height: 100%; width: 0;
  background:
    repeating-linear-gradient(90deg, rgba(255, 255, 255, .16) 0 8px, transparent 8px 16px),
    var(--green);
  box-shadow: inset 2px 2px 0 rgba(255, 255, 255, .3), inset -2px -2px 0 rgba(0, 0, 0, .2);
  transition: width .5s ease;
}
.pregen-bar-foot {
  display: flex; justify-content: space-between; gap: 10px; flex-wrap: wrap;
  margin-top: 8px; font-size: 12.5px; color: var(--ink-dim);
}
.pregen-stats {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px;
  margin-top: 16px;
}
.pregen-stat {
  background: #8b8b8b;
  border: 3px solid #373737;
  box-shadow: inset 3px 3px 0 rgba(0, 0, 0, .3), inset -3px -3px 0 rgba(255, 255, 255, .28);
  padding: 10px 12px;
}
.pregen-stat span { display: block; color: #e2e2e2; font-size: 11.5px; text-shadow: 1px 1px 0 rgba(0,0,0,.5); }
.pregen-stat b {
  display: block; color: #fff; font-weight: normal; font-size: 17px;
  margin-top: 3px; text-shadow: 2px 2px 0 rgba(0, 0, 0, .45);
}
.pregen-note {
  margin-top: 14px; padding: 11px 14px;
  background: rgba(29, 184, 196, .09);
  border: 2px dashed rgba(14, 122, 131, .4);
  color: #0e5a60; font-size: 12.5px; line-height: 1.85;
}

@media (max-width: 860px) {
  .pregen-stats { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 720px) {
  .pregen-head { flex-direction: column; align-items: flex-start; gap: 10px; }
}

/* ============================================================
   世界体积 / 磁盘
   ============================================================ */
.storage-card {
  margin-top: 18px;
  background: #fff;
  border: 3px solid var(--border);
  box-shadow: var(--shadow-hard), 6px 6px 0 rgba(0, 0, 0, .08);
  padding: 20px 22px;
}
.storage-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; }
.storage-cell {
  background: #8b8b8b;
  border: 3px solid #373737;
  box-shadow: inset 3px 3px 0 rgba(0, 0, 0, .3), inset -3px -3px 0 rgba(255, 255, 255, .28);
  padding: 12px 14px;
}
.storage-cell span { display: block; color: #e2e2e2; font-size: 11.5px; text-shadow: 1px 1px 0 rgba(0,0,0,.5); }
.storage-cell b {
  display: block; color: #fff; font-weight: normal; font-size: 21px;
  margin-top: 3px; text-shadow: 2px 2px 0 rgba(0, 0, 0, .45);
}
.storage-cell em {
  display: block; font-style: normal; color: #d6d6d6; font-size: 11.5px;
  margin-top: 2px; text-shadow: 1px 1px 0 rgba(0, 0, 0, .45);
}
.storage-cell.warn { background: #b5772c; }
.storage-cell.warn b { color: #fff8e8; }
.storage-alert {
  margin-top: 12px; padding: 11px 14px;
  background: rgba(226, 87, 76, .12);
  border: 2px dashed rgba(180, 60, 50, .5);
  color: #8a2c22; font-size: 12.5px; line-height: 1.8;
}
.storage-alert[hidden] { display: none; }

@media (max-width: 860px) {
  .storage-grid { grid-template-columns: 1fr; }
}
