/* ===================================================================
   布局与域定制层 (UI 组件由 Element Plus 提供, 暗色: html.dark + EP dark vars)
   =================================================================== */
:root {
  --bg: #0d1117; --panel: #161b22; --panel2: #1c2330; --border: #2d333b;
  --text: #e6edf3; --muted: #8b949e; --accent: #3fb950; --blue: #58a6ff;
  --warn: #d29922; --danger: #f85149; --purple: #bc8cff;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
  background: var(--bg); color: var(--text);
  font-family: "Segoe UI", "Microsoft YaHei", system-ui, sans-serif;
  font-size: 14px;
}
a { color: var(--blue); text-decoration: none; }

/* ---- 顶栏 ---- */
.topbar {
  display: flex; align-items: center; gap: 12px;
  padding: 12px 20px; border-bottom: 1px solid var(--border);
  position: sticky; top: 0; background: var(--bg); z-index: 10;
}
.topbar .logo { font-size: 17px; font-weight: 600; }
.topbar .crumb { color: var(--muted); font-size: 13px; }
.topbar .spacer { flex: 1; }
.ws-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--danger); display: inline-block; }
.ws-dot.on { background: var(--accent); box-shadow: 0 0 6px var(--accent); }

.container { max-width: 1280px; margin: 0 auto; padding: 20px; }

/* ---- 账号卡片墙 ---- */
.cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(360px, 1fr)); gap: 16px; }
.acc-card .head { display: flex; align-items: center; gap: 10px; }
.acc-card .name { font-size: 17px; font-weight: 600; }
.acc-card .btns { display: flex; gap: 6px; flex-wrap: nowrap; margin-top: 14px; }
.acc-card .btns .el-button { flex: 1; min-width: 0; margin-left: 0; padding: 8px 6px; font-size: 13px; }
.dot { width: 9px; height: 9px; border-radius: 50%; background: var(--muted); margin-left: auto; display: inline-block; }
.dot.on { background: var(--accent); box-shadow: 0 0 6px var(--accent); }
.dot.wait { background: var(--warn); }

/* ---- 通用小件 ---- */
.section-title { font-size: 15px; font-weight: 600; margin: 22px 0 12px; }
.grid4 { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 10px; }

/* ---- 农田小卡片(1021) ---- */
.farmgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(108px, 1fr)); gap: 8px; }
.farm { background: var(--panel2); border: 1px solid var(--border); border-radius: 6px;
  padding: 8px 6px; text-align: center; }
.farm .fn { font-size: 11px; color: var(--muted); }
.farm .fc { font-weight: 600; font-size: 14px; margin: 3px 0 2px; }
.farm .ft { font-size: 12px; min-height: 18px; }
.farm.ripe { border-color: var(--el-color-success); box-shadow: 0 0 0 1px var(--el-color-success) inset; }
.farm.ripe .fc { color: var(--el-color-success); }
.farm.empty { opacity: .5; }

/* ---- 装备厂版块(1021) ---- */
.eqfac { font-size: 13px; padding: 3px 10px; border: 1px solid var(--border);
  border-radius: 12px; background: var(--panel2); }
.eqfac.making { border-color: var(--el-color-primary); }
.eqfac.ready { border-color: var(--el-color-success); color: var(--el-color-success); }
.eqfac.idle { opacity: .6; }
.eqgold { margin-left: auto; font-size: 13px; color: var(--el-color-warning);
  font-variant-numeric: tabular-nums; }
.eqgen { font-size: 12.5px; display: inline-flex; align-items: center; gap: 4px;
  padding: 2px 8px; border: 1px solid var(--border); border-radius: 10px;
  background: var(--panel2); font-variant-numeric: tabular-nums; }
.eqgroups { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 10px; }
.eqgroup { background: var(--panel2); border: 1px solid var(--border); border-radius: 8px; padding: 10px; }
.eqgroup .gt { font-weight: 600; font-size: 13px; margin-bottom: 6px; }
.eqrow { display: flex; align-items: center; gap: 8px; font-size: 12.5px;
  padding: 4px 0; border-bottom: 1px dashed var(--border); }
.eqrow:last-child { border-bottom: none; }
.eqrow .qd { width: 12px; height: 12px; border-radius: 3px; flex: none; }
.eqrow .qname { width: 34px; color: var(--muted); flex: none; }
.eqrow .qmat { min-width: 64px; font-variant-numeric: tabular-nums; }
.eqrow .qgen { color: var(--el-color-warning); font-size: 11.5px; min-width: 36px; }
.eqrow .qtime { color: var(--muted); font-size: 11px; min-width: 30px; }
.eqrow .qstate { margin-left: auto; font-weight: 600; }
.eqrow.ok .qstate { color: var(--el-color-success); }
.eqrow.lock { opacity: .5; }

/* ---- 海兽版块(1026, 复用eqfac/eqgen/eqgroups) ---- */
/* 培育队列/战备室卡片: 固定宽轨道(auto-fill), 加卡不挤压已有卡片 */
.petbreed .eqgroups, .petsrv .eqgroups {
  grid-template-columns: repeat(auto-fill, 300px); align-items: start; }
.petbreed .eqgroups .eqgroup, .petsrv .eqgroups .eqgroup { width: 300px; }
.petserv-card.idle { opacity: .6; }
.petserv-card.done .gt { color: var(--el-color-success); }
.petserv-pet { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; font-size: 13px; }
.petserv-pet .qd { width: 12px; height: 12px; border-radius: 3px; flex: none; }
.petserv-foods { display: flex; flex-wrap: wrap; gap: 4px; }
.petserv-food.fok { border-color: var(--el-color-success); color: var(--el-color-success); }
.petserv-food.flack { border-color: var(--el-color-danger); color: var(--el-color-danger);
  font-weight: 600; }
.petserv-adv { display: flex; align-items: center; gap: 8px; font-size: 11.5px;
  margin-bottom: 6px; }
.petserv-adv .pa-g { color: var(--el-color-primary); font-weight: 600; flex: none; }
.petserv-adv .pa-bar { flex: 1; height: 5px; border-radius: 3px; background: var(--border);
  overflow: hidden; min-width: 40px; }
.petserv-adv .pa-fill { display: block; height: 100%;
  background: var(--el-color-primary); border-radius: 3px; }
.petserv-adv.ready .pa-fill { background: var(--el-color-success); }
.petserv-adv.ready .pa-txt { color: var(--el-color-success); font-weight: 600; }
.petserv-adv.full .pa-txt { color: var(--el-color-success); }
.petserv-adv .pa-txt { color: var(--muted); font-variant-numeric: tabular-nums; flex: none; }

/* ---- 周活动·硅晶达标版块(1027, 复用petbreed/eqgroups/eqrow) ---- */
.wc-main { margin: 10px 0 8px; }
.wc-verdict { display: flex; align-items: baseline; gap: 10px; font-size: 14px;
  font-weight: 600; margin-bottom: 6px; }
.wc-main.ok .wc-verdict { color: var(--el-color-success); }
.wc-main.no .wc-verdict { color: var(--el-color-danger); }
.wc-chip-factory { display: flex; align-items: center; margin-top: 10px; }
.eqrow.got .qstate, .eqrow.got .qnum { color: var(--muted); }
.eqrow .qnum { margin-left: auto; font-size: 12px; color: var(--muted);
  font-variant-numeric: tabular-nums; }
.eqrow.ok .qnum { color: var(--el-color-success); font-weight: 600; }

/* ---- 博物馆版块(1027, 复用petbreed/eqgroups/petserv-adv) ---- */
/* 远征关卡卡片: 固定四行结构(标题/探索值/进度条/底行), 星级进度条绿色 */
.mus-stage { min-height: 104px; }
.mus-val { font-size: 11px; margin-bottom: 6px; }
.mus-foot { font-size: 11px; margin-top: 6px; overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap; }
.mus-idle { opacity: .75; }
.mus-star-fill { background: var(--el-color-success); }
.mus-lv { font-size: 11px; }
.mus-wait .qmat { color: var(--el-color-warning); font-weight: 600; }
.mus-busy .qmat { color: #58a6ff; }

/* ---- 联盟商船版块(1021) ---- */
.gship-groups { display: flex; flex-direction: column; gap: 12px; }
.gship-group .gship-gt { display: flex; align-items: center; gap: 7px;
  font-size: 13px; padding-bottom: 6px; }
.gship-group .gs-dot { width: 12px; height: 12px; border-radius: 3px; }
.gship-row { display: flex; flex-wrap: wrap; gap: 10px; }
.gship-row .gship { flex: 1 1 330px; max-width: 480px; }
.gship { background: var(--panel2); border: 1px solid var(--border); border-radius: 8px; padding: 10px; }
.gship.sail { border-color: var(--el-color-primary); }
.gship .gs-head { display: flex; gap: 10px; align-items: baseline; flex-wrap: wrap;
  font-size: 13px; padding-bottom: 6px; }
.gship .gs-type { font-weight: 600; font-size: 12.5px; }
.gship.mine { border-color: var(--el-color-success); }
.gs-role { font-size: 11.5px; font-weight: 600; color: var(--el-color-success);
  padding: 1px 7px; border: 1px solid var(--el-color-success); border-radius: 9px; }
.gship .gs-state { color: var(--el-color-primary); font-size: 12.5px;
  font-variant-numeric: tabular-nums; }
.gship .gs-cabins { display: flex; flex-wrap: wrap; gap: 6px; padding: 4px 0 6px; }
.gs-cabin { font-size: 12px; padding: 2px 8px; border: 1px solid var(--border);
  border-radius: 10px; background: var(--panel2); }
.gs-cabin i { font-style: normal; color: var(--muted); margin-left: 4px; font-size: 11px; }
.gs-good { font-weight: 500; margin-right: 3px; }
.gs-good.ok { color: var(--el-color-success); }
.gs-good.lack { color: var(--el-color-danger); }
.gs-cabin.ok { border-color: var(--el-color-success); }
.gs-cabin.ok i { color: var(--el-color-success); }
.gs-cabin.mine { border-color: var(--el-color-warning); color: var(--el-color-warning); }
.gs-cabin.wait { border-style: dashed; opacity: .85; }
.gship .gs-reward { display: flex; flex-wrap: wrap; gap: 6px; }
.gs-rw { font-size: 11.5px; padding: 1px 7px; border-radius: 9px;
  background: var(--el-color-warning-light-9, rgba(230,162,60,.12));
  color: var(--el-color-warning); }

/* ---- 联盟商船配置卡(1021) ---- */
.ship-cfg { display: flex; flex-direction: column; gap: 4px; }
.ship-cfg-row { display: flex; align-items: center; gap: 8px; }
.stat .k { color: var(--muted); font-size: 12px; }
.stat .v { font-size: 20px; font-weight: 600; margin-top: 3px; }
.stat .v.warn { color: var(--warn); }
.toolbar { display: flex; gap: 8px; margin-bottom: 12px; flex-wrap: wrap; align-items: center; }
.muted { color: var(--muted); }

/* ---- 日志 ---- */
.log { font-family: Consolas, monospace; font-size: 12.5px; line-height: 1.8; }
.log .t { color: var(--muted); margin-right: 8px; }
.log .k-sys { color: var(--blue); } .log .k-error { color: var(--danger); }
.log .k-server { color: var(--warn); }

/* ---- 配置后台 ---- */
.cfg-row { display: flex; align-items: center; justify-content: space-between; gap: 20px; padding: 14px 0; border-bottom: 1px solid var(--border); }
.cfg-label { font-size: 14px; font-weight: 600; }
.cfg-desc { font-size: 12px; color: var(--muted); margin-top: 4px; max-width: 340px; }
/* 配置卡内玩法分组小标题(1020采集细分): 比section-title小一号, muted色 */
.cfg-group-title { font-size: 12px; font-weight: 600; color: var(--muted); margin: 14px 0 2px; letter-spacing: .5px; }
.cfg-group-title:first-child { margin-top: 2px; }
.cfg-input { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.mod-head { display: flex; align-items: center; justify-content: space-between; padding-bottom: 6px; }
.mod-title { font-size: 15px; font-weight: 600; }
.mod-body.off { opacity: .55; pointer-events: none; }
/* 模块卡(标签页内嵌套): 头部淡底与外卡区分 */
.mod-card > .el-card__header { background: var(--panel2); font-weight: 600; }
.mod-card > .el-card__body { padding-top: 4px; }

/* 配置页标签内容滚动容器(1018): 超出视口在卡内滚动 — 保存按钮/标签头不随滚动移动 */
.tab-scroll { max-height: calc(100vh - 220px); overflow-y: auto; padding-right: 6px; }

/* ---- 新增账号(弹窗内部域样式) ---- */
.form-row { display: flex; gap: 10px; align-items: stretch; }
.ch-card { flex: 1; border: 1px solid var(--border); border-radius: 8px; padding: 12px; cursor: pointer; text-align: center; }
.ch-card.sel { border-color: var(--blue); background: #58a6ff1a; }
.ch-card.disabled { opacity: .45; cursor: not-allowed; }
.ch-name { font-weight: 600; margin-bottom: 4px; }
.role-card { background: var(--panel2); border-radius: 8px; padding: 14px; margin-bottom: 10px; }
.role-name { font-size: 16px; font-weight: 600; margin-bottom: 8px; }
.role-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(110px, 1fr)); gap: 8px; font-size: 13px; }

/* ---- 资源版块 ---- */
.res-head { display: flex; flex-direction: column; gap: 10px; margin-bottom: 16px; }
.res-line { display: flex; flex-wrap: wrap; gap: 8px 26px; font-size: 14px; align-items: center; }
.res-line.big { font-size: 15px; }
.res-line b { color: var(--text); }
.res-line .gold { color: #e3b341; }
.res-line .ruby { color: #ff7b72; }
.res-line .warn { color: var(--warn); }
.mats { display: flex; flex-direction: column; gap: 10px; }
.mat-row { display: grid; grid-template-columns: 56px 1fr 130px 30px; gap: 10px; align-items: center; }
.mat-row .mname { color: var(--text); }
.mat-row .num { text-align: right; font-variant-numeric: tabular-nums; }
.mat-row .num .muted { color: var(--muted); font-size: 12px; }
.mat-row .fulltag { color: var(--accent); font-size: 12px; }

/* ---- 工厂卡(el-card 上的域附加) ---- */
.fcard { margin-bottom: 14px; }
.fcard .fhead { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 10px; }
.fcard .bn { font-weight: 600; font-size: 15px; }
.slots { display: grid; grid-template-columns: repeat(6, 1fr); gap: 6px; margin-bottom: 12px; }
.slot { background: var(--panel2); border: 1px solid var(--border); border-radius: 6px;
  min-height: 32px; display: flex; align-items: center; justify-content: center; gap: 6px; padding: 3px 4px; }
.slot .s-prod { font-size: 12px; color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.slot .s-cd { font-size: 11px; color: var(--accent); white-space: nowrap; }
.slot .s-empty { color: var(--muted); }
.plist { display: flex; flex-direction: column; gap: 6px; }
.prow { display: grid; grid-template-columns: 110px 1fr 70px 260px; gap: 10px; align-items: center; font-size: 13px; }
.prow.locked { opacity: 0.45; }
.prow .p-bar { display: flex; align-items: center; }
.prow .p-num { text-align: right; font-variant-numeric: tabular-nums; color: var(--muted); }
.prow .p-cost { color: var(--muted); font-size: 12px; text-align: right; }
.prow .p-cost .cost { margin-left: 8px; }
.prow .p-cost .cost.lack { color: var(--danger); font-weight: 600; }

/* ---- 居民订单卡 ---- */
.ocard { margin-bottom: 12px; }
.ocard.ready { border-color: var(--accent); }
.ocard.refreshing { border-color: #e6a23c; border-style: dashed; }
.otd-progress { display: flex; align-items: center; gap: 8px; margin: 6px 0 2px; }
.dcard .dhead { font-size: 13px; font-weight: 600; margin-bottom: 8px; }
.dcard .drow { display: flex; align-items: center; gap: 8px; font-size: 13px; padding: 3px 0; border-bottom: 1px dashed var(--border, #eee); }
.dcard .drow:last-child { border-bottom: none; }
.dcard .ditem { font-weight: 600; }
.dcard .dsrc { color: var(--muted, #999); font-size: 12px; }
.dcard .dnum { margin-left: auto; color: #666; white-space: nowrap; }
.dcard .lack { color: #f56c6c; }
.ocard .ohead { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
.ocard .oid { font-weight: 600; font-size: 14px; color: var(--muted); }
.oneeds { display: flex; flex-wrap: wrap; gap: 8px; }
.oneeds .need b { margin-left: 4px; }
.oreward { display: flex; gap: 16px; margin-top: 10px; font-size: 13px; }
.oreward .rw { color: var(--blue); }
.oreward .rw.gold { color: #e3b341; }

/* ---- 建筑标签页卡片墙 ---- */
.bgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(165px, 1fr)); gap: 8px; }
.bldc { background: var(--panel2); border: 1px solid var(--border); border-radius: 8px;
  padding: 10px 12px; min-height: 56px; display: flex; flex-direction: column; gap: 6px; }
.bldc .bc-top { display: flex; align-items: baseline; gap: 6px; }
.bldc .bc-name { font-weight: 600; font-size: 13px; white-space: nowrap; overflow: hidden;
  text-overflow: ellipsis; flex: 1; min-width: 0; }
.bldc .bc-lv { color: var(--muted); font-size: 12px; white-space: nowrap; }
.bldc .bc-cd { font-size: 12px; color: var(--accent); }
.bldc .bc-island { font-size: 11px; color: var(--muted); border: 1px solid var(--border);
  border-radius: 4px; padding: 0 4px; width: fit-content; }
.bldc.wip { background: rgba(63, 185, 80, .16); border-color: rgba(63, 185, 80, .5); }
.bldc.wip .bc-lv { color: var(--accent); }
.tag-wip { font-size: 11px; color: #d29922; border: 1px solid #d29922; border-radius: 4px; padding: 0 4px; width: fit-content; }

/* ---- 禁止建筑选择器 ---- */
.fb-box { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin-top: 8px; }
.fb-group { padding: 10px 0; border-bottom: 1px solid var(--border); }
.fb-group:last-child { border-bottom: none; }
.fb-type { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.fb-pills { display: flex; flex-wrap: wrap; gap: 6px; padding-left: 4px; }
.fb-p { cursor: pointer; }

/* ---- 移动端适配(≤640px) ---- */
@media (max-width: 640px) {
  /* 顶栏收紧 */
  .topbar { padding: 10px 12px; gap: 8px; }
  .topbar .logo { font-size: 15px; }
  .topbar .crumb { font-size: 11px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .container { padding: 12px; }

  /* 账号卡: 头部可换行, 五键单行极限压缩 */
  .cards { grid-template-columns: 1fr; }
  .acc-card .head { flex-wrap: wrap; }
  .acc-card .name { font-size: 15px; }
  .acc-card .btns .el-button { padding: 8px 2px; font-size: 12px; }

  /* 动态/配置页: 标签横向滑动 */
  .el-tabs__header { margin-bottom: 12px; }
  .el-tabs__nav-wrap::after { display: none; }
  .el-tabs__nav-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  .el-tabs__nav { white-space: nowrap; }
  .el-tabs__item { padding: 0 12px; }

  /* 弹窗/消息框宽度钳制 */
  .el-dialog { max-width: 94vw; }
  .el-message-box { max-width: 92vw; }

  /* 配置行堆叠: 描述在上, 控件在下 */
  .cfg-row { flex-direction: column; align-items: stretch; gap: 8px; }
  .cfg-input { justify-content: flex-end; }
  .cfg-desc { max-width: none; }

  /* 工具栏: 搜索框占满 */
  .toolbar { gap: 6px; }
  .toolbar .el-input { width: 100% !important; }

  /* 统计格 2×2 */
  .grid4 { grid-template-columns: repeat(2, 1fr); gap: 8px; }
  .stat .v { font-size: 17px; }

  /* 资源/材料行压缩 */
  .res-line { gap: 6px 16px; font-size: 13px; }
  .mat-row { grid-template-columns: 50px 1fr 100px 26px; }

  /* 工厂: 产品行三列+成本换行, 槽位收紧 */
  .prow { grid-template-columns: 92px 1fr 60px; }
  .prow .p-cost { grid-column: 1 / -1; text-align: left; }
  .prow .p-cost .cost { margin-left: 0; margin-right: 8px; }
  .slots { gap: 3px; }

  /* 订单奖励换行 */
  .oreward { flex-wrap: wrap; gap: 8px; }

  /* 建筑选择器: 缩进取消 */
  .fb-pills { padding-left: 0; }
}

/* ---- 搁浅的货轮版块(1022) ---- */
.tl-dot { display: inline-block; width: 12px; height: 12px; border-radius: 3px;
  vertical-align: -1px; margin-right: 3px; }
.tl-dot.q-blue { background: #409EFF; }
.tl-dot.q-purple { background: #9b59b6; }
.tl-dot.q-orange { background: #e6a23c; }
.tl-cnt { font-size: 12.5px; padding: 1px 8px; border: 1px solid var(--border);
  border-radius: 10px; font-variant-numeric: tabular-nums; }
.tship-row { display: flex; flex-wrap: wrap; gap: 10px; }
.tship-row .tship { flex: 1 1 330px; max-width: 480px; }
.tship { background: var(--panel2); border: 1px solid var(--border); border-radius: 8px; padding: 10px; }
.tship .ts-head { display: flex; gap: 10px; align-items: baseline; flex-wrap: wrap;
  font-size: 13px; padding-bottom: 8px; }
.tship .ts-q { font-weight: 600; font-size: 12.5px; }
.tship .ts-owner { color: var(--el-color-primary); font-size: 12.5px; }
.tship .ts-fleet { font-size: 12.5px; font-variant-numeric: tabular-nums; }
.tship .ts-battle { font-size: 12px; font-variant-numeric: tabular-nums; }
.tship .ts-reward { display: flex; flex-wrap: wrap; gap: 6px; padding-top: 8px; }
.ts-rw { font-size: 11.5px; padding: 1px 7px; border-radius: 9px;
  background: var(--el-color-warning-light-9, rgba(230,162,60,.12));
  color: var(--el-color-warning); }
.ts-players { margin-top: 8px; border-top: 1px dashed var(--border); padding-top: 6px;
  display: flex; flex-direction: column; gap: 3px; }
.ts-player { display: flex; gap: 8px; align-items: baseline; font-size: 12.5px;
  font-variant-numeric: tabular-nums; }
.ts-player .ts-rank { color: var(--el-color-warning); font-weight: 600; min-width: 26px; }
.ts-player .ts-power { color: var(--muted); font-size: 11.5px; }
.ts-player .ts-prog { color: var(--el-color-primary); }
.ts-player .ts-times { color: var(--muted); font-size: 11.5px; }
/* 硅矿占位敌我标记(1024): 我方绿/友军蓝/可打红 */
.ts-player .ts-name.me { color: var(--el-color-success); font-weight: 600; }
.ts-player .ts-name.ally { color: var(--el-color-primary); }
.ts-player .ts-name.enemy { color: var(--el-color-danger); }

/* 世界地图战区带(1025): 盟色城格 + 战区列 */
.wm-belt { display: flex; gap: 6px; overflow-x: auto; padding: 4px 0 8px; }
.wm-col { display: flex; flex-direction: column; gap: 3px; min-width: 34px; }
.wm-zone { font-size: 10.5px; text-align: center; letter-spacing: .5px; }
.wm-cells { display: flex; flex-direction: column; gap: 3px; }
.wm-cell { width: 32px; height: 22px; border-radius: 4px; color: #fff;
  font-size: 10px; display: flex; align-items: center; justify-content: center;
  cursor: default; opacity: .92; border: 1px solid rgba(255,255,255,.12); }
.wm-cell:hover { opacity: 1; transform: scale(1.08); }

/* 世界地图SVG(1025v3): 横向640x240(网格旋转90°) */
.wm-svg { width: 100%; display: block; background: transparent; }

/* 世界地图v5: 大正方形容器(内容放大防挤) */
.wm2-box { position: relative; width: 100%; max-width: 680px; margin: 0 auto;
  aspect-ratio: 1 / 1; }
.wm2-canvas { position: absolute; inset: 0; width: 100%; height: 100%;
  border-radius: 10px; background: linear-gradient(170deg, #dceefb 0%, #c8e2f5 100%); }
.wm2-svg { position: absolute; inset: 0; width: 100%; height: 100%; }
.wm2-label { fill: #0f172a; paint-order: stroke; stroke: #fff;
  stroke-width: 2.5px; stroke-linejoin: round; pointer-events: none; }
.wm2-label { fill: #0f172a; paint-order: stroke; stroke: #fff;
  stroke-width: 3px; stroke-linejoin: round; pointer-events: none; }
.wm2-legend { display: inline-flex; align-items: center; gap: 4px;
  font-size: 11px; color: #475569; }
.wm2-legend i { display: inline-block; width: 10px; height: 10px;
  border-radius: 2px; }

/* 我方舰队标注(竞品wm-label mine): 深蓝加粗 */
.wm2-label-mine { fill: #1d4ed8 !important; font-weight: 700; }

/* ������Ϣ��(1026): �����ͼ�·�, �ҵ�+���罢�Ӻ����б� */
.wf-cols { display: flex; flex-wrap: wrap; gap: 12px; }
.wf-col {
  flex: 1 1 250px; min-width: 235px; max-width: 340px;
  border-left: 3px solid; padding-left: 9px;
}
.wf-col-head {
  display: flex; align-items: center; gap: 6px;
  font-size: 12px; font-weight: 700; margin-bottom: 3px;
}
.wf-item {
  font-size: 12px; padding: 3px 0 4px;
  border-bottom: 1px dashed rgba(148, 163, 184, 0.18);
}
.wf-item:last-child { border-bottom: none; }
.wf-me {
  background: rgba(29, 78, 216, 0.10);
  border-radius: 4px; padding-left: 5px; padding-right: 5px;
}
.wf-empty {
  color: var(--el-text-color-placeholder); font-size: 11.5px;
  padding: 6px 0; text-align: center;
}
.wf-l1, .wf-l3 { display: flex; justify-content: space-between; gap: 8px; }
.wf-l1 b { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wf-l2 { color: var(--el-text-color-regular); line-height: 1.45; }
.wf-l3 { color: var(--el-text-color-secondary); font-size: 11.5px; line-height: 1.4; }
.wf-dot { width: 8px; height: 8px; border-radius: 50%; flex: none; display: inline-block; }

/* 配置模块折叠(1026): 模块配置太长不好翻 — 点标题栏展开/收起, 默认收起 */
.fold-box { margin-bottom: 5px; }
.fold-head {
  display: flex; align-items: center; gap: 8px;
  padding: 9px 12px; cursor: pointer; user-select: none;
  background: rgba(88, 166, 255, 0.06); border-radius: 8px;
  font-weight: 600; font-size: 13.5px;
}
.fold-head:hover { background: rgba(88, 166, 255, 0.13); }
.fold-arrow { color: var(--el-text-color-secondary); font-size: 12px; width: 12px; flex: none; }
.fold-box .el-card { margin-top: 6px; }

/* 海商王行情/商情表(1026): 竞品港口表复刻(CSS grid 5列/4列) */
.tr-goods {
  display: grid; grid-template-columns: 1.7fr 1fr 1fr 1fr 0.8fr 1.3fr 1.6fr 1.1fr 1.7fr;
  gap: 2px 10px; font-size: 12.5px; align-items: center;
}
.tr-radar {
  display: grid; grid-template-columns: 1.6fr 1.6fr 2fr 1.4fr;
  gap: 2px 10px; font-size: 12.5px; align-items: center;
}
.tr-gh { color: var(--el-text-color-secondary); font-size: 11.5px; font-weight: 600; padding: 2px 0; }
.tr-gc { padding: 3px 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tr-gc .el-tag { margin-right: 4px; }

/* ===== 用户级登录(1028) ===== */
.auth-wrap { display: flex; justify-content: center; padding-top: 12vh; }
.auth-card { width: 380px; }
.auth-title { text-align: center; font-size: 17px; font-weight: 600; margin-bottom: 12px; }
.auth-btn { width: 100%; }
.auth-hint { font-size: 12px; color: var(--el-text-color-secondary); margin-top: 10px; line-height: 1.6; }
.boot-auth { text-align: center; color: var(--el-text-color-secondary); padding: 80px 0; }
.user-chip { font-size: 13px; color: var(--el-text-color-secondary); margin: 0 4px; }

/* ===== 管理页(1028重构: 左菜单+右面板) ===== */
.admin-layout { display: flex; gap: 14px; align-items: flex-start; }
.admin-menu { width: 148px; flex: none; }
.admin-body { flex: 1; min-width: 0; }
.admin-card { margin-bottom: 14px; }
.admin-head { display: flex; justify-content: space-between; align-items: center; }
.admin-reg { font-size: 13px; color: var(--el-text-color-secondary); display: flex; align-items: center; gap: 8px; }
.admin-new { display: flex; gap: 8px; margin-bottom: 12px; flex-wrap: wrap; }
.admin-ip { color: var(--el-text-color-secondary); font-size: 11.5px; }
.admin-hint { font-size: 12px; color: var(--el-text-color-secondary); margin-top: 8px; }

/* admin首页归属标注+筛选开关(1028方案A, 仅admin渲染) */
.owner-tag { margin-left: 4px; }
.mine-switch { margin-left: 16px; font-size: 13px; color: var(--el-text-color-secondary); }

/* 审计分页(1028) */
.audit-pager { margin-top: 10px; display: flex; justify-content: flex-end; }
