/* stylelint-disable */
html,
body {
  width: 100%;
  height: 100%;
}
input::-ms-clear,
input::-ms-reveal {
  display: none;
}
*,
*::before,
*::after {
  box-sizing: border-box;
}
html {
  font-family: sans-serif;
  line-height: 1.15;
  -webkit-text-size-adjust: 100%;
  -ms-text-size-adjust: 100%;
  -ms-overflow-style: scrollbar;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
@-ms-viewport {
  width: device-width;
}
body {
  margin: 0;
}
[tabindex='-1']:focus {
  outline: none;
}
hr {
  box-sizing: content-box;
  height: 0;
  overflow: visible;
}
h1,
h2,
h3,
h4,
h5,
h6 {
  margin-top: 0;
  margin-bottom: 0.5em;
  font-weight: 500;
}
p {
  margin-top: 0;
  margin-bottom: 1em;
}
abbr[title],
abbr[data-original-title] {
  -webkit-text-decoration: underline dotted;
  text-decoration: underline dotted;
  border-bottom: 0;
  cursor: help;
}
address {
  margin-bottom: 1em;
  font-style: normal;
  line-height: inherit;
}
input[type='text'],
input[type='password'],
input[type='number'],
textarea {
  -webkit-appearance: none;
}
ol,
ul,
dl {
  margin-top: 0;
  margin-bottom: 1em;
}
ol ol,
ul ul,
ol ul,
ul ol {
  margin-bottom: 0;
}
dt {
  font-weight: 500;
}
dd {
  margin-bottom: 0.5em;
  margin-left: 0;
}
blockquote {
  margin: 0 0 1em;
}
dfn {
  font-style: italic;
}
b,
strong {
  font-weight: bolder;
}
small {
  font-size: 80%;
}
sub,
sup {
  position: relative;
  font-size: 75%;
  line-height: 0;
  vertical-align: baseline;
}
sub {
  bottom: -0.25em;
}
sup {
  top: -0.5em;
}
pre,
code,
kbd,
samp {
  font-size: 1em;
  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;
}
pre {
  margin-top: 0;
  margin-bottom: 1em;
  overflow: auto;
}
figure {
  margin: 0 0 1em;
}
img {
  vertical-align: middle;
  border-style: none;
}
a,
area,
button,
[role='button'],
input:not([type='range']),
label,
select,
summary,
textarea {
  touch-action: manipulation;
}
table {
  border-collapse: collapse;
}
caption {
  padding-top: 0.75em;
  padding-bottom: 0.3em;
  text-align: left;
  caption-side: bottom;
}
input,
button,
select,
optgroup,
textarea {
  margin: 0;
  color: inherit;
  font-size: inherit;
  font-family: inherit;
  line-height: inherit;
}
button,
input {
  overflow: visible;
}
button,
select {
  text-transform: none;
}
button,
html [type='button'],
[type='reset'],
[type='submit'] {
  -webkit-appearance: button;
}
button::-moz-focus-inner,
[type='button']::-moz-focus-inner,
[type='reset']::-moz-focus-inner,
[type='submit']::-moz-focus-inner {
  padding: 0;
  border-style: none;
}
input[type='radio'],
input[type='checkbox'] {
  box-sizing: border-box;
  padding: 0;
}
input[type='date'],
input[type='time'],
input[type='datetime-local'],
input[type='month'] {
  -webkit-appearance: listbox;
}
textarea {
  overflow: auto;
  resize: vertical;
}
fieldset {
  min-width: 0;
  margin: 0;
  padding: 0;
  border: 0;
}
legend {
  display: block;
  width: 100%;
  max-width: 100%;
  margin-bottom: 0.5em;
  padding: 0;
  color: inherit;
  font-size: 1.5em;
  line-height: inherit;
  white-space: normal;
}
progress {
  vertical-align: baseline;
}
[type='number']::-webkit-inner-spin-button,
[type='number']::-webkit-outer-spin-button {
  height: auto;
}
[type='search'] {
  outline-offset: -2px;
  -webkit-appearance: none;
}
[type='search']::-webkit-search-cancel-button,
[type='search']::-webkit-search-decoration {
  -webkit-appearance: none;
}
::-webkit-file-upload-button {
  font: inherit;
  -webkit-appearance: button;
}
output {
  display: inline-block;
}
summary {
  display: list-item;
}
template {
  display: none;
}
[hidden] {
  display: none !important;
}
mark {
  padding: 0.2em;
  background-color: #feffe6;
}
/* ===========================================================
   设计令牌
   - 驾驶舱：科技青蓝（60% 深空蓝 / 30% 青蓝结构 / 10% 高亮）
   - 子系统：B 端浅色 + 品牌红 #B00000（发包方 LOGO 实测色）
   =========================================================== */
:root {
  /* ---- 驾驶舱 ---- */
  --bg-0: #04070f;
  --bg-1: #071426;
  --bg-2: #0a1a2d;

  --panel-bg: linear-gradient(180deg, rgba(12, 30, 52, 0.86), rgba(6, 16, 30, 0.72));
  --panel-line: rgba(34, 211, 238, 0.16);
  --panel-line-strong: rgba(34, 211, 238, 0.42);

  --cyan: #22d3ee;
  --blue: #3b82f6;
  --purple: #8b5cf6;
  --gold: #e8c37a;
  --red: #ff4d3d;
  --green: #34d399;

  --text: #e6f1ff;
  --text-2: #7c93b8;
  --text-3: #4e6485;

  --glow-cyan: 0 0 18px rgba(34, 211, 238, 0.45);
  --glow-red: 0 0 18px rgba(255, 77, 61, 0.45);

  /* ---- 子系统（浅色 B 端） ---- */
  --brand: #b00000;
  --brand-weak: #fff1f0;
  --brand-hover: #c41818;
  --s-bg: #f5f7fa;
  --s-card: #ffffff;
  --s-line: #e6eaf0;
  --s-text: #1f2329;
  --s-text-2: #5f6b7a;
  --s-text-3: #98a2b3;
  --s-head: #fafbfc;

  --font-cn: "PingFang SC", "Microsoft YaHei", "Hiragino Sans GB", "Source Han Sans SC", sans-serif;
  --font-num: "Bahnschrift", "DIN Alternate", "Oswald", "Segoe UI", "PingFang SC", sans-serif;

  --gap: clamp(8px, 0.78vw, 18px);
}

* {
  box-sizing: border-box;
}

html,
body,
#root {
  height: 100%;
  margin: 0;
  padding: 0;
}

body {
  background: var(--bg-0);
  color: var(--text);
  font-family: var(--font-cn);
  -webkit-font-smoothing: antialiased;
  overflow: hidden;
}

::-webkit-scrollbar {
  width: 6px;
  height: 6px;
}
::-webkit-scrollbar-thumb {
  background: rgba(34, 211, 238, 0.24);
  border-radius: 3px;
}
::-webkit-scrollbar-track {
  background: transparent;
}

.num {
  font-family: var(--font-num);
  font-variant-numeric: tabular-nums;
  letter-spacing: 0.02em;
}
/* 驾驶舱样式
   尺寸约定：宽度用 vw（32:9 取更多横向空间），字号/高度用 vh
   3840×1080 与 1920×1080 高度相同，字号必须跟随 vh，否则 32:9 纵向溢出
*/
.stage {
  position: fixed;
  inset: 0;
  overflow: hidden;
  background:
    radial-gradient(1100px 620px at 50% 46%, rgba(20, 84, 128, 0.42), transparent 62%),
    radial-gradient(900px 500px at 8% 96%, rgba(139, 92, 246, 0.14), transparent 60%),
    radial-gradient(900px 500px at 92% 96%, rgba(34, 211, 238, 0.12), transparent 60%),
    linear-gradient(180deg, #04070f 0%, #061021 52%, #03060d 100%);
}
.stage::before {
  content: "";
  position: absolute;
  inset: -20%;
  background-image:
    linear-gradient(rgba(34, 211, 238, 0.075) 1px, transparent 1px),
    linear-gradient(90deg, rgba(34, 211, 238, 0.075) 1px, transparent 1px);
  background-size: 64px 64px;
  mask-image: radial-gradient(ellipse 62% 55% at 50% 50%, #000 10%, transparent 78%);
  animation: gridDrift 26s linear infinite;
  pointer-events: none;
}
@keyframes gridDrift {
  to {
    background-position: 64px 64px, 64px 64px;
  }
}

.dash {
  position: relative;
  height: 100%;
  display: grid;
  grid-template-areas: "top top top" "left center right" "bot bot bot";
  grid-template-rows: 6.6vh minmax(0, 1fr) 9.2vh;
  grid-template-columns: minmax(276px, 22vw) minmax(0, 1fr) minmax(276px, 22vw);
  gap: var(--gap);
  padding: var(--gap);
}
/* 32:9 五栏：两侧各拆两列，中间只留给系统环，横向不再空 */
.mode-wide .dash {
  grid-template-areas:
    "top top top top top"
    "l1 l2 center r2 r1"
    "bot bot bot bot bot";
  grid-template-columns:
    minmax(200px, 18vw) minmax(176px, 13.5vw) minmax(0, 1fr)
    minmax(176px, 13.5vw) minmax(200px, 18vw);
}
.dash-top {
  grid-area: top;
}
.dash-col {
  display: flex;
  flex-direction: column;
  gap: var(--gap);
  min-height: 0;
  min-width: 0;
}
.dash-col > .panel,
.dash-col > .bot-cell {
  min-height: 0;
}
.grow-092 {
  flex: 0.92;
}
.grow-095 {
  flex: 0.95;
}
.grow-100 {
  flex: 1;
}
.grow-115 {
  flex: 1.15;
}
.grow-150 {
  flex: 1.5;
}
.dash-center {
  grid-area: center;
  position: relative;
  min-height: 0;
}
.dash-bot {
  grid-area: bot;
}

/* 顶栏 */
.topbar {
  position: relative;
  display: flex;
  align-items: center;
  gap: 1.6vh;
  padding: 0 1.1vw;
  border-radius: 8px;
  background: linear-gradient(180deg, rgba(12, 30, 52, 0.9), rgba(6, 16, 30, 0.5));
  border: 1px solid rgba(34, 211, 238, 0.14);
  overflow: hidden;
}
.topbar::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 1px;
  background: linear-gradient(90deg, transparent, rgba(34, 211, 238, 0.7), rgba(139, 92, 246, 0.5), transparent);
}
.tb-brand {
  display: flex;
  align-items: center;
  gap: 1.2vh;
  min-width: 0;
}
.tb-logo {
  height: 3.1vh;
  width: auto;
  object-fit: contain;
  filter: brightness(1.08) contrast(1.05);
}
.tb-divider {
  width: 1px;
  height: 60%;
  background: linear-gradient(180deg, transparent, rgba(34, 211, 238, 0.5), transparent);
}
.tb-title {
  display: flex;
  flex-direction: column;
  line-height: 1.16;
  min-width: 0;
}
.tb-title b {
  font-size: 2.34vh;
  font-weight: 700;
  letter-spacing: 0.06em;
  background: linear-gradient(180deg, #ffffff 20%, #9fe9f7 100%);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  white-space: nowrap;
}
.tb-title span {
  font-size: 1.02vh;
  color: var(--text-3);
  letter-spacing: 0.3em;
  text-transform: uppercase;
  white-space: nowrap;
}
.tb-center {
  flex: 1;
  display: flex;
  justify-content: center;
  gap: 0.8vh;
  min-width: 0;
}
.tb-chip {
  display: inline-flex;
  align-items: center;
  gap: 0.6vh;
  height: 2.5vh;
  padding: 0 1vh;
  border-radius: 13px;
  font-size: 1.06vh;
  color: var(--text-2);
  border: 1px solid rgba(34, 211, 238, 0.18);
  background: rgba(34, 211, 238, 0.05);
  white-space: nowrap;
}
.tb-chip i {
  width: 0.55vh;
  height: 0.55vh;
  border-radius: 50%;
  background: var(--cyan);
  box-shadow: var(--glow-cyan);
}
.tb-chip.warn i {
  background: var(--gold);
  box-shadow: 0 0 10px rgba(232, 195, 122, 0.6);
}
.tb-chip.bad i {
  background: var(--red);
  box-shadow: var(--glow-red);
  animation: pulseDot 1.6s ease-in-out infinite;
}
@keyframes pulseDot {
  50% {
    opacity: 0.35;
  }
}
.tb-right {
  display: flex;
  align-items: center;
  gap: 1vh;
}
.tb-role {
  display: flex;
  align-items: center;
  border: 1px solid rgba(34, 211, 238, 0.18);
  border-radius: 6px;
  overflow: hidden;
  background: rgba(6, 18, 34, 0.7);
}
.tb-role button {
  all: unset;
  cursor: pointer;
  padding: 0.7vh 1.05vh;
  font-size: 1.06vh;
  color: var(--text-2);
  transition: 0.18s;
  white-space: nowrap;
}
.tb-role button:hover {
  color: var(--cyan);
  background: rgba(34, 211, 238, 0.08);
}
.tb-role button.on {
  color: #04121f;
  background: linear-gradient(180deg, #7de9f7, #22d3ee);
  font-weight: 600;
}
.tb-toggle {
  all: unset;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 0.6vh;
  padding: 0.7vh 1.1vh;
  border-radius: 6px;
  font-size: 1.06vh;
  color: var(--cyan);
  border: 1px solid rgba(34, 211, 238, 0.4);
  background: rgba(34, 211, 238, 0.08);
  transition: 0.18s;
  white-space: nowrap;
}
.tb-toggle:hover {
  background: rgba(34, 211, 238, 0.18);
  box-shadow: var(--glow-cyan);
}
.tb-clock {
  text-align: right;
  line-height: 1.2;
}
.tb-clock b {
  display: block;
  font-family: var(--font-num);
  font-size: 2.2vh;
  letter-spacing: 0.04em;
  color: #dff6ff;
}
.tb-clock span {
  font-size: 0.98vh;
  color: var(--text-3);
}

/* 面板 */
.panel {
  position: relative;
  min-height: 0;
  display: flex;
  flex-direction: column;
  border-radius: 8px;
  border: 1px solid var(--panel-line);
  background: var(--panel-bg);
  backdrop-filter: blur(7px);
  overflow: hidden;
}
.panel::before,
.panel::after {
  content: "";
  position: absolute;
  width: 12px;
  height: 12px;
  pointer-events: none;
  border-color: var(--panel-line-strong);
  border-style: solid;
}
.panel::before {
  top: 0;
  left: 0;
  border-width: 1px 0 0 1px;
}
.panel::after {
  bottom: 0;
  right: 0;
  border-width: 0 1px 1px 0;
}
.panel-hd {
  flex: none;
  display: flex;
  align-items: center;
  gap: 0.8vh;
  height: 3.2vh;
  min-height: 26px;
  padding: 0 1.1vh;
  border-bottom: 1px solid rgba(34, 211, 238, 0.1);
}
.panel-hd em {
  width: 3px;
  height: 1.35vh;
  border-radius: 2px;
  background: linear-gradient(180deg, var(--cyan), var(--blue));
  box-shadow: var(--glow-cyan);
}
.panel-hd h3 {
  margin: 0;
  font-size: 1.46vh;
  font-weight: 600;
  letter-spacing: 0.08em;
  color: #cfe9f6;
}
.panel-hd .sub {
  margin-left: auto;
  font-size: 1.02vh;
  color: var(--text-3);
  letter-spacing: 0.04em;
}
.panel-bd {
  flex: 1;
  min-height: 0;
  padding: 0.9vh 1.1vh 1vh;
  display: flex;
  flex-direction: column;
}

/* KPI */
.kpi-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0.9vh;
}
.mode-wide .kpi-grid {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
.kpi {
  position: relative;
  padding: 1.15vh 1.2vh 1vh;
  border-radius: 6px;
  background: linear-gradient(150deg, rgba(34, 211, 238, 0.09), rgba(34, 211, 238, 0.015));
  border: 1px solid rgba(34, 211, 238, 0.13);
  overflow: hidden;
  transition: 0.2s;
}
.kpi:hover {
  border-color: rgba(34, 211, 238, 0.4);
  box-shadow: inset 0 0 24px rgba(34, 211, 238, 0.09);
}
.kpi::after {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 2px;
  background: linear-gradient(180deg, var(--cyan), transparent);
}
.kpi.tone-gold::after {
  background: linear-gradient(180deg, var(--gold), transparent);
}
.kpi.tone-red::after {
  background: linear-gradient(180deg, var(--red), transparent);
}
.kpi.tone-purple::after {
  background: linear-gradient(180deg, var(--purple), transparent);
}
.kpi-label {
  font-size: 1.14vh;
  color: var(--text-2);
  letter-spacing: 0.06em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.kpi-val {
  display: flex;
  align-items: baseline;
  gap: 0.4vh;
  margin-top: 0.15vh;
}
.kpi-val b {
  font-family: var(--font-num);
  font-size: 2.95vh;
  font-weight: 600;
  line-height: 1.1;
  color: #eafcff;
  text-shadow: 0 0 18px rgba(34, 211, 238, 0.32);
}
.kpi-val i {
  font-style: normal;
  font-size: 1.02vh;
  color: var(--text-2);
}
.kpi-foot {
  display: flex;
  align-items: center;
  gap: 0.5vh;
  margin-top: 0.3vh;
  font-size: 0.98vh;
}
.delta {
  font-family: var(--font-num);
  padding: 0 0.4vh;
  border-radius: 3px;
  line-height: 1.5vh;
  white-space: nowrap;
}
.delta.up {
  color: #5ff0c2;
  background: rgba(52, 211, 153, 0.12);
}
.delta.down {
  color: #ff8a7d;
  background: rgba(255, 77, 61, 0.12);
}
.kpi-note {
  color: var(--text-3);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* 中央环 */
.ring-wrap {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}
.ring {
  position: absolute;
  inset: 0;
}
.ring-orbit {
  position: absolute;
  left: 50%;
  top: 50%;
  border-radius: 50%;
  border: 1px dashed rgba(34, 211, 238, 0.14);
  transform: translate(-50%, -50%);
  pointer-events: none;
}
.ring-orbit.o2 {
  border-style: solid;
  border-color: rgba(139, 92, 246, 0.1);
}
.node {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 13vh;
  cursor: pointer;
  will-change: transform, opacity;
  transform-origin: 50% 50%;
}
.node-card {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  aspect-ratio: 1;
  border-radius: 2.1vh;
  border: 1px solid rgba(34, 211, 238, 0.3);
  background: linear-gradient(160deg, rgba(16, 40, 66, 0.95), rgba(6, 16, 30, 0.9));
  box-shadow: 0 0.8vh 2.4vh rgba(0, 0, 0, 0.45), inset 0 0 2.4vh rgba(34, 211, 238, 0.07);
}
.node-card::before {
  content: "";
  position: absolute;
  inset: 0.45vh;
  border-radius: 1.6vh;
  border: 1px solid rgba(34, 211, 238, 0.1);
}
.node-glyph {
  font-size: 3.15vh;
  font-weight: 700;
  line-height: 1;
  letter-spacing: 0.04em;
}
.node-name {
  font-size: 1.18vh;
  color: #b9d8e8;
  letter-spacing: 0.05em;
  white-space: nowrap;
  margin-top: 0.55vh;
  text-align: center;
}
.node:hover .node-card {
  border-color: rgba(34, 211, 238, 0.95);
  box-shadow: 0 0 3.2vh rgba(34, 211, 238, 0.5), inset 0 0 2.8vh rgba(34, 211, 238, 0.2);
}
.node:hover .node-name {
  color: #eafcff;
}

/* 中心核 */
.core {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  z-index: 60;
  pointer-events: none;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
}
.core-rings {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 36vh;
  height: 36vh;
}
.core-rings i {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  border: 1px solid rgba(34, 211, 238, 0.22);
}
.core-rings i:nth-child(1) {
  animation: spinSlow 34s linear infinite;
  border-top-color: rgba(34, 211, 238, 0.85);
  border-right-color: transparent;
}
.core-rings i:nth-child(2) {
  inset: 12%;
  animation: spinSlow 22s linear infinite reverse;
  border-bottom-color: rgba(139, 92, 246, 0.7);
  border-left-color: transparent;
}
.core-rings i:nth-child(3) {
  inset: 26%;
  border-color: rgba(255, 77, 61, 0.3);
  border-top-color: rgba(255, 77, 61, 0.8);
  animation: spinSlow 14s linear infinite;
}
.core-rings i:nth-child(4) {
  inset: 38%;
  background: radial-gradient(circle, rgba(34, 211, 238, 0.22), transparent 70%);
  border: none;
  animation: corePulse 3.4s ease-in-out infinite;
}
@keyframes spinSlow {
  to {
    transform: rotate(360deg);
  }
}
@keyframes corePulse {
  50% {
    transform: scale(1.14);
    opacity: 0.65;
  }
}
.core-title {
  position: relative;
  font-size: 3.05vh;
  font-weight: 800;
  letter-spacing: 0.16em;
  line-height: 1.32;
  background: linear-gradient(180deg, #ffffff, #7fe6ff 75%);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  text-shadow: 0 0 4vh rgba(34, 211, 238, 0.55);
  white-space: nowrap;
}
.core-sub {
  position: relative;
  margin-top: 0.7vh;
  font-size: 1.02vh;
  letter-spacing: 0.42em;
  color: rgba(124, 147, 184, 0.95);
}

/* 告警 */
.alert-list {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  overflow-x: hidden;
  display: flex;
  flex-direction: column;
  gap: 0.6vh;
  padding-right: 2px;
}
.alert {
  display: flex;
  align-items: flex-start;
  gap: 0.8vh;
  padding: 0.75vh 1vh;
  border-radius: 5px;
  border-left: 2px solid var(--gold);
  background: rgba(232, 195, 122, 0.07);
  cursor: pointer;
  transition: 0.16s;
  flex: none;
}
.alert:hover {
  transform: translateX(2px);
}
.alert.lv-1 {
  border-color: var(--red);
  background: rgba(255, 77, 61, 0.09);
  box-shadow: inset 0 0 20px rgba(255, 77, 61, 0.07);
}
.alert.lv-1:hover {
  background: rgba(255, 77, 61, 0.17);
}
.alert.lv-2 {
  border-color: var(--gold);
  background: rgba(232, 195, 122, 0.08);
}
.alert.lv-2:hover {
  background: rgba(232, 195, 122, 0.16);
}
.alert.lv-3 {
  border-color: var(--blue);
  background: rgba(59, 130, 246, 0.08);
}
.alert.lv-3:hover {
  background: rgba(59, 130, 246, 0.16);
}
.alert-tag {
  flex: none;
  font-size: 0.95vh;
  padding: 0 0.45vh;
  line-height: 1.45vh;
  border-radius: 3px;
  background: rgba(255, 255, 255, 0.08);
  color: var(--text-2);
  white-space: nowrap;
}
.alert.lv-1 .alert-tag {
  color: #ffb3aa;
  background: rgba(255, 77, 61, 0.2);
}
.alert.lv-2 .alert-tag {
  color: #f5d9a3;
  background: rgba(232, 195, 122, 0.18);
}
.alert-txt {
  min-width: 0;
  flex: 1;
}
.alert-txt p {
  margin: 0;
  font-size: 1.12vh;
  color: #d6e6f5;
  line-height: 1.42;
}
.alert-txt span {
  font-size: 0.95vh;
  color: var(--text-3);
}

/* 实时订单流 */
.ticker {
  position: relative;
  overflow: hidden;
  flex: 1;
  min-height: 0;
  mask-image: linear-gradient(180deg, transparent, #000 12%, #000 88%, transparent);
}
.ticker-inner {
  animation: tickerUp 26s linear infinite;
}
.ticker:hover .ticker-inner {
  animation-play-state: paused;
}
@keyframes tickerUp {
  from {
    transform: translateY(0);
  }
  to {
    transform: translateY(-50%);
  }
}
.order-row {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 0.7vh;
  padding: 0.5vh 0.4vh;
  font-size: 1.04vh;
  border-bottom: 1px solid rgba(34, 211, 238, 0.06);
}
.order-row .t {
  font-family: var(--font-num);
  color: var(--text-3);
}
.order-row .m {
  color: #cfe0ef;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}
.order-row .m b {
  color: var(--cyan);
  font-weight: 500;
}
.order-row .a {
  font-family: var(--font-num);
  color: #6ff0c8;
}

/* 底栏 */
.botbar {
  display: grid;
  grid-template-columns: 1.25fr 1fr 1fr 1fr;
  gap: var(--gap);
  min-height: 0;
}
.mode-wide .botbar {
  grid-template-columns: 1.25fr 1fr 1fr;
}
.bot-cell {
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 0.6vh;
  padding: 0.7vh 1.2vh;
  border-radius: 8px;
  border: 1px solid rgba(34, 211, 238, 0.13);
  background: linear-gradient(180deg, rgba(12, 30, 52, 0.82), rgba(6, 16, 30, 0.55));
  overflow: hidden;
}
.bot-cell h4 {
  margin: 0;
  font-size: 1.06vh;
  font-weight: 500;
  color: var(--text-2);
  letter-spacing: 0.08em;
  display: flex;
  align-items: center;
  gap: 0.6vh;
  white-space: nowrap;
  overflow: hidden;
}
.bot-cell h4 b {
  color: var(--cyan);
  font-family: var(--font-num);
  font-size: 1.3vh;
}
.heat-band {
  display: flex;
  gap: 2px;
  height: 2.2vh;
}
.heat-band i {
  flex: 1;
  border-radius: 2px;
  transition: 0.2s;
}
.heat-band i:hover {
  outline: 1px solid var(--cyan);
}
.heat-axis {
  display: flex;
  justify-content: space-between;
  font-size: 0.92vh;
  color: var(--text-3);
  font-family: var(--font-num);
}
.channel-bars {
  display: flex;
  flex-direction: column;
  gap: 0.42vh;
}
.channel {
  display: grid;
  grid-template-columns: 5.2em 1fr 5.4em;
  align-items: center;
  gap: 0.7vh;
  font-size: 1.02vh;
}
.channel span {
  color: var(--text-2);
  white-space: nowrap;
}
.channel .bar {
  height: 0.62vh;
  border-radius: 3px;
  background: rgba(255, 255, 255, 0.07);
  overflow: hidden;
}
.channel .bar i {
  display: block;
  height: 100%;
  border-radius: 3px;
}
.channel b {
  text-align: right;
  font-family: var(--font-num);
  color: #dbeeff;
  font-weight: 500;
}
.notice-scroll {
  overflow: hidden;
  flex: 1;
  min-height: 0;
  display: flex;
  flex-direction: column;
  justify-content: center;
}
.notice-scroll ul {
  margin: 0;
  padding: 0;
  list-style: none;
  animation: tickerUp 34s linear infinite;
}
.notice-scroll:hover ul {
  animation-play-state: paused;
}
.notice-scroll li {
  font-size: 1.04vh;
  color: #c6dcee;
  line-height: 2;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.notice-scroll li i {
  display: inline-block;
  width: 0.4vh;
  height: 0.4vh;
  border-radius: 50%;
  background: var(--cyan);
  margin-right: 0.7vh;
  vertical-align: middle;
}

/* 服务健康 */
.svc-row {
  display: grid;
  grid-template-columns: 0.7vh 1fr 4.2em 4.4em;
  align-items: center;
  gap: 0.7vh;
  font-size: 1.02vh;
}
.svc-dot {
  width: 0.6vh;
  height: 0.6vh;
  border-radius: 50%;
  background: var(--green);
  box-shadow: 0 0 8px rgba(52, 211, 153, 0.8);
}
.svc-dot.warn {
  background: var(--gold);
  box-shadow: 0 0 8px rgba(232, 195, 122, 0.8);
}
.svc-dot.bad {
  background: var(--red);
  box-shadow: var(--glow-red);
  animation: pulseDot 1.6s ease-in-out infinite;
}
.svc-name {
  color: #c2d8ea;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.svc-bar {
  height: 0.42vh;
  border-radius: 2px;
  background: rgba(255, 255, 255, 0.07);
  overflow: hidden;
}
.svc-bar i {
  display: block;
  height: 100%;
  border-radius: 2px;
  background: linear-gradient(90deg, rgba(34, 211, 238, 0.35), var(--cyan));
}
.svc-bar i.warn {
  background: linear-gradient(90deg, rgba(232, 195, 122, 0.35), var(--gold));
}
.svc-bar i.bad {
  background: linear-gradient(90deg, rgba(255, 77, 61, 0.35), var(--red));
}
.svc-val {
  text-align: right;
  color: #9fb8d0;
  font-size: 0.98vh;
}

/* 环提示 */
.ring-hint {
  position: absolute;
  left: 50%;
  bottom: 1.2vh;
  transform: translateX(-50%);
  z-index: 70;
  padding: 0.5vh 1.4vh;
  border-radius: 14px;
  font-size: 1.02vh;
  letter-spacing: 0.08em;
  color: rgba(124, 147, 184, 0.9);
  border: 1px solid rgba(34, 211, 238, 0.16);
  background: rgba(6, 18, 34, 0.72);
  backdrop-filter: blur(6px);
  white-space: nowrap;
  transition: 0.24s;
  pointer-events: none;
}
.ring-hint[data-paused='true'] {
  color: #a9f4ff;
  border-color: rgba(34, 211, 238, 0.55);
  box-shadow: 0 0 22px rgba(34, 211, 238, 0.3);
}

/* 720 快捷钮 */
.panorama-fab {
  all: unset;
  cursor: pointer;
  position: fixed;
  right: 1.6vh;
  bottom: 1.6vh;
  z-index: 90;
  width: 6.2vh;
  height: 6.2vh;
  border-radius: 50%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 1px;
  border: 1px solid rgba(34, 211, 238, 0.5);
  background: radial-gradient(circle at 50% 40%, rgba(34, 211, 238, 0.28), rgba(6, 18, 34, 0.92) 68%);
  box-shadow: 0 0 2.6vh rgba(34, 211, 238, 0.34);
  transition: 0.22s;
}
.panorama-fab span {
  font-family: var(--font-num);
  font-size: 1.7vh;
  font-weight: 700;
  color: #a9f4ff;
  letter-spacing: 0.02em;
}
.panorama-fab em {
  font-style: normal;
  font-size: 0.95vh;
  color: #7c93b8;
  letter-spacing: 0.16em;
}
.panorama-fab:hover {
  transform: scale(1.08);
  box-shadow: 0 0 4vh rgba(34, 211, 238, 0.6);
}

/* 面板内 Tab */
.ph-tabs {
  display: flex;
  gap: 2px;
}
.ph-tabs button {
  all: unset;
  cursor: pointer;
  font-size: 1.3vh;
  padding: 0.2vh 0.8vh;
  border-radius: 4px;
  color: var(--text-3);
  letter-spacing: 0.06em;
  transition: 0.18s;
}
.ph-tabs button:hover {
  color: var(--cyan);
}
.ph-tabs button.on {
  color: #eafcff;
  background: rgba(34, 211, 238, 0.14);
  font-weight: 600;
}

/* 专题分析 */
.topic {
  display: flex;
  flex-direction: column;
  height: 100%;
  cursor: pointer;
}
.topic-hd {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0.2vh 0.4vh 0.5vh;
}
.topic-hd b {
  font-size: 1.42vh;
  color: #dff2ff;
  letter-spacing: 0.06em;
}
.topic-hd span {
  font-size: 0.95vh;
  color: var(--text-3);
}
.topic-kpis {
  flex: 1;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 0.75vh;
}
.topic-kpi {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 0.2vh 0.6vh;
  align-items: center;
}
.tk-l {
  font-size: 1.04vh;
  color: var(--text-2);
  white-space: nowrap;
}
.tk-v {
  font-family: var(--font-num);
  font-size: 1.92vh;
  color: #eafcff;
  text-align: right;
}
.tk-v i {
  font-style: normal;
  font-size: 0.95vh;
  color: var(--text-3);
  margin-left: 0.3vh;
}
.tk-bar {
  grid-column: 1 / -1;
  height: 0.4vh;
  border-radius: 2px;
  background: rgba(255, 255, 255, 0.06);
  overflow: hidden;
}
.tk-bar i {
  display: block;
  height: 100%;
  border-radius: 2px;
  background: linear-gradient(90deg, rgba(34, 211, 238, 0.3), var(--cyan));
}
.topic-dots {
  display: flex;
  gap: 5px;
  justify-content: center;
  padding-top: 0.4vh;
}
.topic-dots i {
  width: 0.55vh;
  height: 0.55vh;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.18);
  cursor: pointer;
  transition: 0.2s;
}
.topic-dots i.on {
  width: 1.7vh;
  border-radius: 3px;
  background: var(--cyan);
  box-shadow: var(--glow-cyan);
}

/* 深色抽屉 */
.dsh-drawer .ant-drawer-content {
  background: #071223;
  color: #d6e6f5;
}
.dsh-drawer .ant-drawer-header {
  border-bottom: 1px solid rgba(34, 211, 238, 0.14);
  background: transparent;
}
.dsh-drawer .ant-drawer-title {
  color: #eafcff;
  font-size: 15px;
  font-weight: 600;
}
.dsh-drawer .ant-drawer-close {
  color: #7c93b8;
}
.dsh-drawer .ant-drawer-body {
  padding: 14px 18px;
}
.dw-sub {
  margin-left: 10px;
  font-size: 11.5px;
  color: #5b7898;
  font-weight: 400;
}
.dw-lead {
  font-size: 12.5px;
  color: #8aa2c0;
  line-height: 1.7;
  margin: 0 0 14px;
  padding: 10px 12px;
  border-left: 2px solid rgba(34, 211, 238, 0.5);
  background: rgba(34, 211, 238, 0.05);
  border-radius: 0 6px 6px 0;
}
.dsh-drawer .ant-table {
  background: transparent;
  color: #c2d8ea;
}
.dsh-drawer .ant-table-thead > tr > th {
  background: rgba(255, 255, 255, 0.03) !important;
  color: #8aa2c0 !important;
  border-bottom: 1px solid rgba(34, 211, 238, 0.12) !important;
}
.dsh-drawer .ant-table-tbody > tr > td {
  border-bottom: 1px solid rgba(34, 211, 238, 0.07) !important;
  background: transparent !important;
}
.dsh-drawer .ant-table-tbody > tr:hover > td {
  background: rgba(34, 211, 238, 0.06) !important;
}
.dsh-drawer .ant-input-affix-wrapper {
  background: rgba(255, 255, 255, 0.04);
  border-color: rgba(34, 211, 238, 0.18);
  color: #d6e6f5;
}
.dsh-drawer .ant-input {
  background: transparent;
  color: #d6e6f5;
}
.dsh-drawer .ant-input::placeholder {
  color: #4e6485;
}
.dsh-drawer .ant-btn-default {
  background: rgba(255, 255, 255, 0.04);
  border-color: rgba(34, 211, 238, 0.2);
  color: #b9d8e8;
}
.dsh-drawer .ant-progress-text {
  color: #7c93b8;
}

/* 演示链路 */
.chain-tabs {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  margin-bottom: 12px;
}
.chain-tabs button {
  all: unset;
  cursor: pointer;
  display: grid;
  grid-template-columns: auto 1fr auto;
  gap: 8px;
  align-items: center;
  padding: 9px 11px;
  border-radius: 7px;
  border: 1px solid rgba(34, 211, 238, 0.14);
  background: rgba(255, 255, 255, 0.02);
  transition: 0.18s;
}
.chain-tabs button b {
  font-family: var(--font-num);
  font-size: 12px;
  color: var(--c);
  border: 1px solid var(--c);
  border-radius: 4px;
  padding: 0 5px;
  line-height: 18px;
}
.chain-tabs button span {
  font-size: 12.5px;
  color: #b9d8e8;
}
.chain-tabs button i {
  font-style: normal;
  font-family: var(--font-num);
  font-size: 11.5px;
  color: #5b7898;
}
.chain-tabs button.on {
  border-color: var(--c);
  background: rgba(34, 211, 238, 0.08);
  box-shadow: inset 0 0 0 1px var(--c);
}
.chain-desc {
  font-size: 12.5px;
  color: #7c93b8;
  line-height: 1.7;
  margin-bottom: 12px;
}
.chain-steps {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.chain-step {
  display: grid;
  grid-template-columns: 22px 1fr auto;
  gap: 10px;
  align-items: flex-start;
  padding: 9px 6px;
  border-radius: 6px;
  position: relative;
}
.chain-step::before {
  content: "";
  position: absolute;
  left: 16px;
  top: 32px;
  bottom: -2px;
  width: 1px;
  background: rgba(34, 211, 238, 0.16);
}
.chain-step:last-child::before {
  display: none;
}
.cs-dot {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  font-size: 11px;
  font-family: var(--font-num);
  border: 1px solid rgba(34, 211, 238, 0.35);
  color: #7c93b8;
  background: #071223;
}
.chain-step.done .cs-dot {
  border-color: #34d399;
  color: #06301f;
  background: #34d399;
}
.chain-step.cur .cs-dot {
  border-color: var(--cyan);
  color: var(--cyan);
  box-shadow: 0 0 0 4px rgba(34, 211, 238, 0.12);
  animation: pulseDot 1.8s ease-in-out infinite;
}
.cs-body {
  min-width: 0;
}
.cs-hd {
  display: flex;
  align-items: center;
  gap: 7px;
}
.cs-sys {
  font-size: 11px;
  padding: 0 6px;
  line-height: 17px;
  border-radius: 3px;
  border: 1px solid;
  white-space: nowrap;
}
.cs-hd b {
  font-size: 13px;
  color: #dff2ff;
  font-weight: 600;
}
.cs-body p {
  margin: 3px 0 0;
  font-size: 12px;
  color: #7c93b8;
  line-height: 1.6;
}
.chain-step.cur {
  background: rgba(34, 211, 238, 0.05);
}
.cs-go {
  all: unset;
  cursor: pointer;
  font-size: 11.5px;
  color: var(--cyan);
  border: 1px solid rgba(34, 211, 238, 0.35);
  border-radius: 4px;
  padding: 2px 8px;
  white-space: nowrap;
  opacity: 0.75;
  transition: 0.18s;
}
.cs-go:hover {
  opacity: 1;
  background: rgba(34, 211, 238, 0.14);
}
.chain-actions {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-top: 18px;
  padding-top: 14px;
  border-top: 1px solid rgba(34, 211, 238, 0.12);
  flex-wrap: wrap;
}
.chain-tip {
  font-size: 11.5px;
  color: #4e6485;
}

/* 中央雷达底纹：填补环外的黑区，让中心看起来是“满”的 */
.center-back {
  position: absolute;
  inset: 0;
  pointer-events: none;
  overflow: hidden;
  z-index: 1;
}
.cb-rings i {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  border: 1px dashed rgba(34, 211, 238, 0.11);
  border-radius: 50%;
}
.cb-rings i:nth-child(1) {
  width: 34%;
  height: 34%;
  border-style: solid;
  border-color: rgba(34, 211, 238, 0.16);
}
.cb-rings i:nth-child(2) {
  width: 56%;
  height: 56%;
}
.cb-rings i:nth-child(3) {
  width: 78%;
  height: 78%;
}
.cb-rings i:nth-child(4) {
  width: 100%;
  height: 100%;
  border-color: rgba(34, 211, 238, 0.07);
}
.cb-spokes {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 100%;
  height: 100%;
  transform: translate(-50%, -50%);
  border-radius: 50%;
  background: repeating-conic-gradient(
    from 0deg,
    rgba(34, 211, 238, 0.09) 0deg 0.35deg,
    transparent 0.35deg 12deg
  );
  -webkit-mask: radial-gradient(circle at 50% 50%, transparent 24%, #000 34%, #000 74%, transparent 82%);
  mask: radial-gradient(circle at 50% 50%, transparent 24%, #000 34%, #000 74%, transparent 82%);
  opacity: 0.75;
}
.cb-dots {
  position: absolute;
  inset: 0;
  background-image: radial-gradient(circle, rgba(34, 211, 238, 0.22) 1px, transparent 1.4px);
  background-size: 4.6vh 4.6vh;
  -webkit-mask: radial-gradient(ellipse at 50% 50%, #000 0 52%, transparent 74%);
  mask: radial-gradient(ellipse at 50% 50%, #000 0 52%, transparent 74%);
  opacity: 0.55;
}

/* 中央四角数据（填补环外围留白） */
.corners {
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 65;
}
.corner {
  position: absolute;
  padding: 0.7vh 1.1vh 0.75vh;
  border-radius: 6px;
  border: 1px solid rgba(34, 211, 238, 0.16);
  background: rgba(6, 18, 34, 0.66);
  backdrop-filter: blur(6px);
  display: flex;
  flex-direction: column;
  gap: 0.15vh;
  line-height: 1.1;
  overflow: hidden;
}
.corner::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 2px;
  background: var(--cyan);
}
.corner b {
  font-size: 2.15vh;
  color: #eafcff;
  font-weight: 600;
}
.corner span {
  font-size: 1.02vh;
  color: var(--text-3);
  letter-spacing: 0.1em;
  white-space: nowrap;
}
.corner.tl {
  left: 0;
  top: 0;
}
.corner.tr {
  right: 0;
  top: 0;
}
.corner.bl {
  left: 0;
  bottom: 0;
}
.corner.br {
  right: 0;
  bottom: 0;
}
.corner.tone-gold::before {
  background: var(--gold);
}
.corner.tone-purple::before {
  background: var(--purple);
}

/* 系统运行概览 */
.sys-list {
  display: flex;
  flex-direction: column;
  gap: 0.2vh;
}
.sys-item {
  display: grid;
  grid-template-columns: 0.7vh 1fr auto 4.4em;
  align-items: center;
  gap: 0.8vh;
  padding: 0.62vh 0.5vh;
  border-radius: 4px;
  cursor: pointer;
  transition: 0.16s;
  border-bottom: 1px solid rgba(34, 211, 238, 0.05);
}
.sys-item:hover {
  background: rgba(34, 211, 238, 0.07);
}
.sys-dot {
  width: 0.62vh;
  height: 0.62vh;
  border-radius: 50%;
}
.sys-name {
  font-size: 1.08vh;
  color: #c2d8ea;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.sys-item b {
  font-size: 1.14vh;
  color: #eafcff;
  font-weight: 500;
}
.sys-item em {
  font-style: normal;
  font-size: 0.98vh;
  text-align: right;
}
.sys-item em.up {
  color: #5ff0c2;
}
.sys-item em.down {
  color: #ff8a7d;
}

/* 设备在线 */
.dev-grid {
  display: flex;
  flex-direction: column;
  gap: 0.5vh;
}
.dev-row {
  display: grid;
  grid-template-columns: 0.7vh 1fr auto;
  align-items: center;
  gap: 0.7vh;
  font-size: 1.06vh;
  color: #c2d8ea;
}
.dev-row b {
  color: #9fb8d0;
  font-weight: 400;
  font-size: 0.98vh;
}

.dash-col > .bot-cell {
  flex: 1;
}

@media (max-width: 1500px) {
  .tb-center {
    display: none;
  }
}

/* ===== 密度校准：同屏信息量再抬一档（1080 高度下不溢出） ===== */
.panel-hd h3 {
  font-size: 1.56vh;
}
.kpi-label {
  font-size: 1.22vh;
}
.kpi-val b {
  font-size: 3.2vh;
}
.kpi-foot {
  margin-top: 0.45vh;
}
.node {
  width: 13.5vh;
}
.node-glyph {
  font-size: 3.35vh;
}
.node-name {
  font-size: 1.24vh;
}
.alert-txt p {
  font-size: 1.18vh;
}
.alert {
  padding: 0.72vh 0.8vh;
}
.ticker-line,
.bot-cell h4 {
  font-size: 1.14vh;
}

/* ============================================================
   园区数字孪生（CSS 3D）
   ============================================================ */
.venue {
  position: absolute;
  inset: 0;
  overflow: hidden;
  cursor: grab;
  touch-action: none;
  user-select: none;
}
.venue:active {
  cursor: grabbing;
}
.venue-cam {
  position: absolute;
  inset: 0;
  perspective: 2000px;
  perspective-origin: 50% 46%;
}
.venue-scene {
  position: absolute;
  left: 50%;
  top: 46%;
  width: 0;
  height: 0;
  transform-style: preserve-3d;
  will-change: transform;
}
.vf {
  position: absolute;
  left: 0;
  top: 0;
  transform-origin: 0 0;
}

/* 地面 */
.vground {
  position: absolute;
  left: 0;
  top: 0;
  width: 980px;
  height: 840px;
  transform: translate3d(-490px, -420px, 0);
  border-radius: 16px;
  background:
    radial-gradient(circle at 50% 50%, rgba(34, 211, 238, 0.16), rgba(4, 10, 20, 0) 62%),
    linear-gradient(rgba(34, 211, 238, 0.09) 1px, transparent 1px) 0 0 / 40px 40px,
    linear-gradient(90deg, rgba(34, 211, 238, 0.09) 1px, transparent 1px) 0 0 / 40px 40px,
    radial-gradient(ellipse at 50% 50%, #0c2036 0%, #071425 68%, #040c16 100%);
  box-shadow:
    inset 0 0 0 1px rgba(34, 211, 238, 0.16),
    inset 0 0 140px rgba(34, 211, 238, 0.12);
}
.vplaza {
  position: absolute;
  left: -190px;
  top: -190px;
  width: 380px;
  height: 380px;
  border-radius: 50%;
  border: 1px dashed rgba(34, 211, 238, 0.3);
  transform: translateZ(0.5px);
  box-shadow: inset 0 0 50px rgba(34, 211, 238, 0.14);
}
.vsweep {
  position: absolute;
  left: -190px;
  top: -190px;
  width: 380px;
  height: 380px;
  border-radius: 50%;
  background: conic-gradient(from 0deg, rgba(34, 211, 238, 0.3), rgba(34, 211, 238, 0) 26%);
  animation: vspin 9s linear infinite;
  opacity: 0.55;
}
@keyframes vspin {
  from {
    transform: translateZ(1px) rotate(0deg);
  }
  to {
    transform: translateZ(1px) rotate(360deg);
  }
}

/* 楼体 */
.vtop {
  border-radius: 3px;
  background: linear-gradient(152deg, #1c4162 0%, #123050 52%, #0d2438 100%);
  box-shadow:
    inset 0 0 0 1px rgba(34, 211, 238, 0.34),
    inset 0 0 26px rgba(34, 211, 238, 0.14);
}
.vtop::after {
  content: "";
  position: absolute;
  inset: 9px;
  border: 1px solid var(--ac, #22d3ee);
  border-radius: 2px;
  opacity: 0.22;
}
.vwall {
  background: linear-gradient(180deg, #16324c 0%, #0c1e30 70%, #081624 100%);
}
.vwall::after {
  content: "";
  position: absolute;
  inset: 0;
  background-image:
    repeating-linear-gradient(90deg, rgba(34, 211, 238, 0.16) 0 1px, transparent 1px 22px),
    repeating-linear-gradient(0deg, rgba(34, 211, 238, 0.1) 0 1px, transparent 1px 16px);
  opacity: 0.55;
}
.vwall.s {
  background: linear-gradient(180deg, #1a3b58 0%, #0e2236 72%, #091a29 100%);
}
.vwall.w {
  background: linear-gradient(180deg, #142c44 0%, #0b1c2d 72%, #081522 100%);
}
.vwall.e {
  background: linear-gradient(180deg, #0e2134 0%, #081725 72%, #06111c 100%);
}
.vwall.n {
  background: linear-gradient(180deg, #0a1826 0%, #061220 72%, #040d16 100%);
}
.vshadow {
  background: radial-gradient(ellipse at 50% 50%, rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0) 68%);
  filter: blur(7px);
}

/* 绿化 */
.vgtop {
  border-radius: 6px;
  background: linear-gradient(150deg, #124a32, #0a2b1f);
  box-shadow: inset 0 0 0 1px rgba(52, 211, 153, 0.3);
}
.vg {
  background: linear-gradient(180deg, #0d3425, #07190f);
}

/* 锚点层 */
.venue-marks {
  position: absolute;
  inset: 0;
  pointer-events: none;
}
.vn-marker {
  position: absolute;
  width: 168px;
  transform: translate(-50%, -100%);
  pointer-events: auto;
  cursor: pointer;
  transition: filter 0.16s;
}
.vn-marker:hover {
  filter: drop-shadow(0 0 10px var(--vc));
}
.vn-beam {
  position: absolute;
  left: 50%;
  bottom: 0;
  width: 2px;
  margin-left: -1px;
  height: 100%;
  background: linear-gradient(180deg, var(--vc), rgba(255, 255, 255, 0));
  box-shadow: 0 0 10px var(--vc);
  opacity: 0.85;
}
.vn-dot {
  position: absolute;
  left: 50%;
  top: -4px;
  width: 7px;
  height: 7px;
  margin-left: -3.5px;
  border-radius: 50%;
  background: var(--vc);
  box-shadow: 0 0 12px var(--vc), 0 0 2px #fff;
}
.vn-label {
  position: absolute;
  bottom: calc(100% + 5px);
  left: 50%;
  transform: translateX(-50%);
  display: inline-flex;
  align-items: baseline;
  gap: 5px;
  padding: 3px 8px;
  white-space: nowrap;
  border-radius: 5px;
  font-size: 12px;
  line-height: 1.2;
  color: #e6f1ff;
  background: rgba(6, 18, 34, 0.86);
  border: 1px solid color-mix(in srgb, var(--vc) 55%, transparent);
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.45);
  backdrop-filter: blur(4px);
}
.vn-label em {
  font-style: normal;
  font-family: var(--font-num);
  font-size: 11px;
  color: var(--vc);
}

/* 视角按钮 */
.venue-views {
  position: absolute;
  left: 50%;
  bottom: 4.6vh;
  transform: translateX(-50%);
  display: flex;
  gap: 6px;
  z-index: 80;
}
.venue-views button {
  padding: 0.42vh 1.1vh;
  font-size: 1.04vh;
  color: #8fb0cc;
  background: rgba(8, 22, 40, 0.72);
  border: 1px solid rgba(34, 211, 238, 0.22);
  border-radius: 4px;
  cursor: pointer;
  transition: 0.16s;
}
.venue-views button:hover {
  color: #d8f7ff;
  border-color: rgba(34, 211, 238, 0.5);
}
.venue-views button.on {
  color: #041018;
  background: linear-gradient(180deg, #5ff0ff, #22d3ee);
  border-color: #22d3ee;
  font-weight: 600;
  box-shadow: 0 0 16px rgba(34, 211, 238, 0.45);
}

.venue-cap {
  position: absolute;
  left: 1.2vh;
  bottom: 1.1vh;
  display: flex;
  align-items: baseline;
  gap: 0.9vh;
  z-index: 80;
  pointer-events: none;
}
.venue-cap b {
  font-size: 1.24vh;
  color: #cfeaff;
  letter-spacing: 0.06em;
}
.venue-cap span {
  font-size: 1vh;
  color: #4e6485;
}

/* venue 细节校准 */
.venue-views {
  align-items: center;
  gap: 0.8vh;
}
.venue-tip {
  font-size: 1vh;
  color: #4e6485;
  letter-spacing: 0.04em;
  margin-right: 0.5vh;
  white-space: nowrap;
}
.vn-label {
  font-size: calc(12px * var(--mp, 1));
  border-color: rgba(255, 255, 255, 0.14);
  border-left: 2px solid var(--vc);
}
.vn-label em {
  font-size: calc(11px * var(--mp, 1));
}

/* ===== 体块明度校准：让模型从背景里"立"出来 ===== */
.vground {
  background:
    radial-gradient(circle at 50% 50%, rgba(34, 211, 238, 0.2), rgba(4, 10, 20, 0) 62%),
    linear-gradient(rgba(34, 211, 238, 0.14) 1px, transparent 1px) 0 0 / 40px 40px,
    linear-gradient(90deg, rgba(34, 211, 238, 0.14) 1px, transparent 1px) 0 0 / 40px 40px,
    radial-gradient(ellipse at 50% 50%, #123049 0%, #0a1b2e 68%, #061020 100%);
  box-shadow:
    inset 0 0 0 1px rgba(34, 211, 238, 0.26),
    inset 0 0 150px rgba(34, 211, 238, 0.16);
}
.vtop {
  background: linear-gradient(152deg, #2b6494 0%, #1a4266 54%, #123049 100%);
  box-shadow:
    inset 0 0 0 1px rgba(34, 211, 238, 0.46),
    inset 0 0 30px rgba(34, 211, 238, 0.2);
}
.vwall.s {
  background: linear-gradient(180deg, #26516f 0%, #142f47 72%, #0c1e2e 100%);
}
.vwall.w {
  background: linear-gradient(180deg, #1f4463 0%, #0f2740 72%, #0a1a2a 100%);
}
.vwall.e {
  background: linear-gradient(180deg, #173650 0%, #0b2036 72%, #081624 100%);
}
.vwall.n {
  background: linear-gradient(180deg, #112a40 0%, #071726 72%, #050f1a 100%);
}
.vwall::after {
  background-image:
    repeating-linear-gradient(90deg, rgba(140, 240, 255, 0.5) 0 5px, transparent 5px 24px),
    repeating-linear-gradient(0deg, rgba(34, 211, 238, 0.2) 0 2px, transparent 2px 18px);
  opacity: 0.34;
}
.vshadow {
  background: radial-gradient(ellipse at 50% 50%, rgba(0, 0, 0, 0.72), rgba(0, 0, 0, 0) 66%);
  filter: blur(9px);
}
.vgtop {
  background: linear-gradient(150deg, #1a6b47, #0c3a29);
  box-shadow: inset 0 0 0 1px rgba(52, 211, 153, 0.4);
}

/* 关键：中间层必须保持 3D 上下文，否则子面会被压平 */
.vbox,
.vgreen {
  transform-style: preserve-3d;
}
.venue-scene {
  will-change: auto;
}

/* ============ 园区场景：道路 / 景观 / 灯光 / 玻璃 ============ */
.vroad {
  position: absolute;
  background: linear-gradient(180deg, #0e1c2d 0%, #0a1523 100%);
  box-shadow: inset 0 0 0 1px rgba(34, 211, 238, 0.13);
  border-radius: 2px;
}
.vroad.h::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: 50%;
  height: 2px;
  margin-top: -1px;
  background: repeating-linear-gradient(90deg, rgba(232, 195, 122, 0.42) 0 18px, transparent 18px 36px);
}
.vroad.v::after {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  left: 50%;
  width: 2px;
  margin-left: -1px;
  background: repeating-linear-gradient(180deg, rgba(232, 195, 122, 0.42) 0 18px, transparent 18px 36px);
}

.vtree {
  position: absolute;
  transform-style: preserve-3d;
}
.vtree i {
  position: absolute;
  left: 0;
  top: 0;
  display: block;
  border-radius: 50%;
  background: radial-gradient(circle at 50% 38%, rgba(74, 222, 168, 0.62), rgba(6, 40, 28, 0.92) 72%);
  box-shadow: 0 0 12px rgba(52, 211, 153, 0.3);
}

.vlight {
  position: absolute;
  transform-style: preserve-3d;
}
.vlight i {
  position: absolute;
  left: 0;
  top: 0;
  width: 2px;
  height: 40px;
  transform: rotateX(90deg);
  transform-origin: 0 0;
  background: linear-gradient(180deg, rgba(232, 195, 122, 0.9), rgba(232, 195, 122, 0.04));
  box-shadow: 0 0 10px rgba(232, 195, 122, 0.55);
}

.vfountain {
  position: absolute;
  left: -88px;
  top: -88px;
  width: 176px;
  height: 176px;
  transform: translateZ(1.2px);
}
.vfountain i {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  border: 1px solid rgba(34, 211, 238, 0.45);
  animation: vripple 3.6s ease-out infinite;
}
.vfountain i:nth-child(2) {
  animation-delay: 1.2s;
}
.vfountain i:nth-child(3) {
  animation-delay: 2.4s;
}
@keyframes vripple {
  0% {
    transform: scale(0.25);
    opacity: 0.9;
  }
  100% {
    transform: scale(1);
    opacity: 0;
  }
}

/* 锚点地面光斑 */
.vspot {
  position: absolute;
  border-radius: 50%;
  border: 1px solid var(--vc);
  box-shadow: 0 0 18px var(--vc), inset 0 0 16px rgba(255, 255, 255, 0.12);
  opacity: 0.5;
  animation: vpulse 2.6s ease-in-out infinite;
}
@keyframes vpulse {
  0%,
  100% {
    opacity: 0.28;
    box-shadow: 0 0 10px var(--vc);
  }
  50% {
    opacity: 0.72;
    box-shadow: 0 0 26px var(--vc);
  }
}

/* 叠层 / 玻璃 / 连廊 */
.is-roof .vtop {
  background: linear-gradient(152deg, #35719f 0%, #1d4a6f 55%, #143650 100%);
}
.is-glass .vtop {
  background: linear-gradient(150deg, #9df6ff 0%, #35d7ee 55%, #1090a8 100%);
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.55), 0 0 46px rgba(34, 211, 238, 0.55);
}
.is-glass .vwall {
  background: linear-gradient(180deg, #2a7f95 0%, #13505f 72%, #0b3038 100%);
}
.is-bridge .vtop {
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.35), 0 0 22px var(--ac);
}

/* 楼体 hover */
.vbox:hover .vtop {
  box-shadow:
    inset 0 0 0 1px rgba(255, 255, 255, 0.6),
    inset 0 0 46px var(--ac);
}
.vbox:hover .vwall::after {
  opacity: 0.7;
}

/* ============ 系统入口：锚点卡片 ============ */
.vn-marker {
  width: 180px;
}
.vn-card {
  position: absolute;
  bottom: calc(100% + 4px);
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 4px 8px 4px 5px;
  white-space: nowrap;
  border-radius: 6px;
  background: rgba(6, 18, 34, 0.92);
  border: 1px solid rgba(255, 255, 255, 0.13);
  border-left: 2px solid var(--vc);
  box-shadow: 0 6px 18px rgba(0, 0, 0, 0.55);
  backdrop-filter: blur(4px);
  transition: 0.16s;
}
.vn-ico {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: calc(17px * var(--mp, 1));
  height: calc(17px * var(--mp, 1));
  border-radius: 4px;
  font-size: calc(10px * var(--mp, 1));
  font-weight: 700;
  color: #041018;
  background: var(--vc);
  box-shadow: 0 0 10px var(--vc);
  flex: none;
}
.vn-txt {
  display: flex;
  flex-direction: column;
  line-height: 1.15;
}
.vn-txt b {
  font-size: calc(12px * var(--mp, 1));
  color: #eaf6ff;
  font-weight: 600;
}
.vn-txt em {
  font-style: normal;
  font-family: var(--font-num);
  font-size: calc(10px * var(--mp, 1));
  color: var(--vc);
}
.vn-go {
  font-size: calc(13px * var(--mp, 1));
  color: var(--vc);
  opacity: 0.7;
  margin-left: 1px;
}
.vn-marker.hot .vn-card {
  background: rgba(10, 30, 52, 0.98);
  border-color: var(--vc);
  box-shadow: 0 0 22px var(--vc), 0 6px 18px rgba(0, 0, 0, 0.6);
  transform: translateX(-50%) scale(1.06);
}
.vn-marker.hot .vn-beam {
  opacity: 1;
}

/* ============ 右侧系统入口列表 ============ */
.sys-rail {
  position: absolute;
  right: 0.6vh;
  top: 7.4vh;
  width: 15.6vh;
  padding: 0.5vh;
  border-radius: 6px;
  background: rgba(6, 16, 30, 0.78);
  border: 1px solid rgba(34, 211, 238, 0.18);
  backdrop-filter: blur(6px);
  z-index: 90;
}
.sr-hd {
  font-size: 1.02vh;
  color: #6f8aa8;
  letter-spacing: 0.14em;
  padding: 0.2vh 0.4vh 0.55vh;
  border-bottom: 1px solid rgba(34, 211, 238, 0.12);
  margin-bottom: 0.4vh;
}
.sr-item {
  display: flex;
  align-items: center;
  gap: 0.5vh;
  width: 100%;
  padding: 0.42vh 0.45vh;
  border: none;
  border-radius: 4px;
  background: transparent;
  color: #b9cfe4;
  font-size: 1.04vh;
  cursor: pointer;
  text-align: left;
  transition: 0.14s;
}
.sr-item:hover {
  background: color-mix(in srgb, var(--vc) 16%, transparent);
  color: #fff;
}
.sr-ico {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1.9vh;
  height: 1.9vh;
  flex: none;
  border-radius: 3px;
  font-style: normal;
  font-size: 0.92vh;
  font-weight: 700;
  color: #04070f;
  background: var(--vc);
  box-shadow: 0 0 8px var(--vc);
}
.sr-item span {
  flex: 1;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.sr-item em {
  font-style: normal;
  font-family: var(--font-num);
  font-size: 0.92vh;
  color: #6f8aa8;
  flex: none;
}
.sr-item:hover em {
  color: var(--vc);
}

/* ============ 场景增亮：道路 / 光环 / 扫描环 ============ */
.vroad {
  background: linear-gradient(180deg, #17324c 0%, #102438 100%);
  box-shadow:
    inset 0 0 0 1px rgba(34, 211, 238, 0.3),
    inset 0 0 18px rgba(34, 211, 238, 0.12);
}
.vroad.h::after,
.vroad.v::after {
  background-image: repeating-linear-gradient(
    90deg,
    rgba(232, 195, 122, 0.75) 0 18px,
    transparent 18px 36px
  );
}
.vroad.v::after {
  background-image: repeating-linear-gradient(
    180deg,
    rgba(232, 195, 122, 0.75) 0 18px,
    transparent 18px 36px
  );
}

.vhalo {
  position: absolute;
  left: -500px;
  top: -432px;
  width: 1000px;
  height: 864px;
  border-radius: 50%;
  border: 1px dashed rgba(34, 211, 238, 0.22);
  transform: translateZ(0.7px);
  box-shadow: inset 0 0 60px rgba(34, 211, 238, 0.1);
}

.vhud {
  position: absolute;
  border-radius: 50%;
  border: 1px dashed rgba(34, 211, 238, 0.5);
  box-shadow: 0 0 26px rgba(34, 211, 238, 0.22);
}
.vhud.a {
  left: -268px;
  top: -268px;
  width: 536px;
  height: 536px;
  animation: vspinA 24s linear infinite;
}
.vhud.b {
  left: -206px;
  top: -206px;
  width: 412px;
  height: 412px;
  border-color: rgba(232, 195, 122, 0.42);
  border-style: dotted;
  animation: vspinB 17s linear infinite;
}
@keyframes vspinA {
  from {
    transform: translateZ(64px) rotate(0deg);
  }
  to {
    transform: translateZ(64px) rotate(360deg);
  }
}
@keyframes vspinB {
  from {
    transform: translateZ(40px) rotate(360deg);
  }
  to {
    transform: translateZ(40px) rotate(0deg);
  }
}

.sys-rail {
  background: rgba(6, 16, 30, 0.66);
}

/* 入口可读性：字号改为随屏高缩放，4K 墙上也看得清 */
.vn-txt b {
  font-size: clamp(11px, 1.3vh, 17px);
}
.vn-txt em {
  font-size: clamp(10px, 1.08vh, 14px);
}
.vn-ico {
  width: clamp(16px, 1.8vh, 23px);
  height: clamp(16px, 1.8vh, 23px);
  font-size: clamp(10px, 1.1vh, 14px);
}
.vn-go {
  font-size: clamp(12px, 1.4vh, 18px);
}
.sr-item {
  font-size: clamp(11px, 1.16vh, 15px);
  padding: 0.46vh 0.45vh;
}
.sr-item em {
  font-size: clamp(10px, 1.02vh, 13px);
}
.sr-ico {
  width: clamp(16px, 1.86vh, 24px);
  height: clamp(16px, 1.86vh, 24px);
  font-size: clamp(9px, 1vh, 13px);
}
.vhud.b {
  left: -240px;
  top: -240px;
  width: 480px;
  height: 480px;
}

/* ============ 楼体发光字 ============ */
.vsign-plane {
  display: flex;
  align-items: center;
  justify-content: center;
  pointer-events: none;
}
.vsign {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  gap: 0.1em;
  white-space: nowrap;
  font-weight: 800;
  letter-spacing: 0.13em;
  color: #f2fdff;
  text-shadow:
    0 0 5px rgba(191, 246, 255, 0.95),
    0 0 14px rgba(34, 211, 238, 0.85),
    0 0 32px rgba(34, 211, 238, 0.5);
}
.vsign em {
  font-style: normal;
  font-weight: 500;
  letter-spacing: 0.28em;
  font-size: 0.3em;
  color: #8be9fb;
  opacity: 0.92;
  text-shadow: 0 0 10px rgba(34, 211, 238, 0.75);
}

/* 主馆招牌：呼吸光 + 底部光带 */
.is-main .vsign {
  animation: vglow 3.4s ease-in-out infinite;
}
@keyframes vglow {
  0%,
  100% {
    text-shadow:
      0 0 5px rgba(191, 246, 255, 0.95),
      0 0 14px rgba(34, 211, 238, 0.85),
      0 0 32px rgba(34, 211, 238, 0.5);
  }
  50% {
    text-shadow:
      0 0 8px #fff,
      0 0 22px rgba(34, 211, 238, 1),
      0 0 54px rgba(34, 211, 238, 0.75);
  }
}
.is-main .vsign-plane::after {
  content: "";
  position: absolute;
  left: 6%;
  right: 6%;
  bottom: 26%;
  height: 1px;
  background: linear-gradient(90deg, transparent, rgba(95, 240, 255, 0.85), transparent);
  box-shadow: 0 0 12px rgba(34, 211, 238, 0.9);
}

.vsign-roof {
  display: flex;
  align-items: center;
  justify-content: center;
  pointer-events: none;
}
.vsign-roof span {
  white-space: nowrap;
  font-weight: 700;
  letter-spacing: 0.08em;
  color: #cdefff;
  text-shadow:
    0 0 6px rgba(34, 211, 238, 0.9),
    0 0 18px rgba(34, 211, 238, 0.45);
  opacity: 0.94;
}

/* 大屏顶栏：反白 LOGO 配一点冷光，避免纯白过跳 */
.tb-logo {
  filter: drop-shadow(0 0 12px rgba(34, 211, 238, 0.32)) brightness(1.06);
}

/* ============ 主馆悬浮招牌（金光 + 冷光，明显区别于普通楼名） ============ */
.vtitle {
  position: absolute;
  left: -190px;
  top: -96px;
  width: 380px;
  height: 192px;
  transform-style: preserve-3d;
  pointer-events: none;
}
.vt-glow {
  position: absolute;
  left: 50%;
  top: 52%;
  width: 520px;
  height: 300px;
  transform: translate(-50%, -50%);
  border-radius: 50%;
  background: radial-gradient(ellipse, rgba(232, 195, 122, 0.32), rgba(34, 211, 238, 0.16) 45%, transparent 72%);
  filter: blur(12px);
  animation: vtpulse 3.8s ease-in-out infinite;
}
.vt-plate {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 1px;
  animation: vtfloat 5.4s ease-in-out infinite;
}
.vt-cn {
  font-size: 32px;
  font-weight: 900;
  letter-spacing: 0.14em;
  line-height: 1.1;
  color: #fff;
  text-shadow:
    0 0 6px rgba(255, 255, 255, 0.95),
    0 0 18px rgba(232, 195, 122, 0.95),
    0 0 42px rgba(232, 195, 122, 0.6);
}
.vt-cn2 {
  font-size: 40px;
  font-weight: 900;
  letter-spacing: 0.2em;
  line-height: 1.12;
  background: linear-gradient(96deg, #fff6dc 0%, #E8C37A 28%, #fff 46%, #7ff3ff 62%, #E8C37A 84%, #fff6dc 100%);
  background-size: 240% 100%;
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  filter:
    drop-shadow(0 0 10px rgba(232, 195, 122, 0.9))
    drop-shadow(0 0 26px rgba(34, 211, 238, 0.55));
  animation: vtshine 5.5s linear infinite;
}
.vt-en {
  margin-top: 2px;
  font-size: 8px;
  font-weight: 500;
  letter-spacing: 0.46em;
  color: #a9e9f8;
  text-shadow: 0 0 10px rgba(34, 211, 238, 0.85);
}
.vt-line {
  position: absolute;
  left: 16%;
  right: 16%;
  bottom: 22px;
  height: 1px;
  background: linear-gradient(90deg, transparent, #E8C37A, #7ff3ff, #E8C37A, transparent);
  box-shadow: 0 0 14px rgba(232, 195, 122, 0.95);
}
.vt-line::before,
.vt-line::after {
  content: "";
  position: absolute;
  top: -3px;
  width: 7px;
  height: 7px;
  border: 1px solid rgba(232, 195, 122, 0.9);
  transform: rotate(45deg);
  background: rgba(232, 195, 122, 0.25);
}
.vt-line::before {
  left: -4px;
}
.vt-line::after {
  right: -4px;
}

.vt-beam {
  position: absolute;
  left: -92px;
  top: -78px;
  width: 0;
  height: 0;
  transform-style: preserve-3d;
}
.vt-beam i {
  position: absolute;
  left: 0;
  top: 0;
  width: 10px;
  height: 50px;
  transform-origin: 0 0;
  transform: translate3d(-5px, 0, 200px) rotateX(-90deg);
  background: linear-gradient(0deg, rgba(232, 195, 122, 0.85), rgba(232, 195, 122, 0.05));
  box-shadow: 0 0 14px rgba(232, 195, 122, 0.6);
}
.vt-beam i:nth-child(2) {
  transform: translate3d(0, -5px, 200px) rotateZ(90deg) rotateX(-90deg);
}

.vt-ring {
  position: absolute;
  left: -130px;
  top: -130px;
  width: 260px;
  height: 260px;
  border-radius: 50%;
  border: 1px solid rgba(232, 195, 122, 0.55);
  box-shadow: 0 0 30px rgba(232, 195, 122, 0.35), inset 0 0 24px rgba(232, 195, 122, 0.2);
  animation: vtpulse2 3.8s ease-in-out infinite;
}
@keyframes vtshine {
  to {
    background-position: -240% 0;
  }
}
@keyframes vtfloat {
  0%,
  100% {
    transform: translateZ(0);
  }
  50% {
    transform: translateZ(12px);
  }
}
@keyframes vtpulse {
  0%,
  100% {
    opacity: 0.5;
    transform: translate(-50%, -50%) scale(0.94);
  }
  50% {
    opacity: 0.95;
    transform: translate(-50%, -50%) scale(1.06);
  }
}
@keyframes vtpulse2 {
  0%,
  100% {
    opacity: 0.35;
    transform: translateZ(1px) scale(0.96);
  }
  50% {
    opacity: 0.8;
    transform: translateZ(1px) scale(1.04);
  }
}

/* ============ 主馆屋顶立体招牌：站立式 + 厚度 + 跑马灯 ============ */
.vt-sign {
  position: absolute;
  left: 0;
  top: 0;
  width: 360px;
  height: 66px;
  transform-origin: 0 0;
  transform-style: preserve-3d;
  pointer-events: none;
}
/* 厚度：多层同字沿法线叠压，侧看就是字的厚度 */
.vt-layer {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  white-space: nowrap;
  font-size: 28px;
  font-weight: 900;
  letter-spacing: 0.04em;
  color: #0d2434;
  text-shadow: 0 0 1px rgba(34, 211, 238, 0.35);
}
/* 正面：金字 + 流动扫光 */
.vt-face {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 1px;
  white-space: nowrap;
  font-size: 28px;
  font-weight: 900;
  line-height: 1.05;
  letter-spacing: 0.04em;
  background: linear-gradient(
    100deg,
    #fff8e6 0%,
    #e8c37a 18%,
    #fff 34%,
    #8ff0ff 48%,
    #e8c37a 64%,
    #fff8e6 82%,
    #e8c37a 100%
  );
  background-size: 260% 100%;
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  filter:
    drop-shadow(0 0 6px rgba(232, 195, 122, 0.9))
    drop-shadow(0 0 18px rgba(232, 195, 122, 0.55))
    drop-shadow(0 0 30px rgba(34, 211, 238, 0.35));
  animation: vtshine 4.6s linear infinite;
}
.vt-face em {
  font-style: normal;
  font-size: 7px;
  font-weight: 500;
  letter-spacing: 0.42em;
  color: #a9e9f8;
}
/* 招牌底座 + 跑马灯灯带 */
.vt-bar {
  position: absolute;
  left: 4%;
  right: 4%;
  bottom: 3px;
  height: 3px;
  border-radius: 2px;
  background:
    repeating-linear-gradient(90deg, rgba(255, 236, 189, 0.95) 0 5px, rgba(255, 236, 189, 0.12) 5px 13px),
    linear-gradient(90deg, rgba(232, 195, 122, 0.3), rgba(232, 195, 122, 0.05));
  box-shadow: 0 0 12px rgba(232, 195, 122, 0.85);
  animation: vtchase 1.1s linear infinite;
}
/* 立柱：把招牌"钉"在楼顶上 */
.vt-post {
  position: absolute;
  bottom: -10px;
  width: 3px;
  height: 10px;
  background: linear-gradient(180deg, rgba(232, 195, 122, 0.9), rgba(232, 195, 122, 0.15));
  box-shadow: 0 0 8px rgba(232, 195, 122, 0.7);
}
.vt-post.l {
  left: 12%;
}
.vt-post.r {
  right: 12%;
}
@keyframes vtshine {
  to {
    background-position: -260% 0;
  }
}
@keyframes vtchase {
  to {
    background-position: 13px 0, 0 0;
  }
}

/* ============ 日光材质（变量由 daylight.js 按时间写入 .venue） ============ */
.venue {
  --m-wall-a: #1a3b58;
  --m-wall-b: #142c44;
  --m-wall-c: #0a1826;
  --m-roof-a: #2b6494;
  --m-roof-b: #123049;
  --m-roof-c: #0d2438;
  --g-a: #123049;
  --g-b: #061020;
  --sky-a: #0d2036;
  --sky-b: #040c16;
  --sun: #8fc4ff;
  --sun-x: 74%;
  --sun-y: 10%;
  --sun-o: 0.5;
  --haze: #22d3ee;
  --haze-a: 0.12;
  --lamp: 1;
  --glow: 1;
}
.vsky {
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 0;
  background: radial-gradient(circle at 50% 46%, var(--sky-a) 0%, var(--sky-b) 66%, #03060c 100%);
}
.vsky::after {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(circle at var(--sun-x) var(--sun-y), var(--sun) 0%, transparent 40%);
  opacity: calc(var(--sun-o) * var(--haze-a) * 3.4);
  mix-blend-mode: screen;
}
.vhaze {
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 2;
  background:
    radial-gradient(circle at var(--sun-x) var(--sun-y), var(--haze) 0%, transparent 48%),
    linear-gradient(180deg, var(--haze) 0%, transparent 44%);
  opacity: calc(var(--haze-a) * 0.55);
  mix-blend-mode: screen;
}

.vground {
  background:
    radial-gradient(circle at 50% 50%, rgba(34, 211, 238, calc(0.08 + 0.14 * var(--glow))), rgba(4, 10, 20, 0) 62%),
    linear-gradient(rgba(34, 211, 238, calc(0.05 + 0.1 * var(--glow))) 1px, transparent 1px) 0 0 / 40px 40px,
    linear-gradient(90deg, rgba(34, 211, 238, calc(0.05 + 0.1 * var(--glow))) 1px, transparent 1px) 0 0 / 40px 40px,
    radial-gradient(ellipse at 50% 50%, var(--g-a) 0%, var(--g-b) 68%, #03080f 100%);
  box-shadow:
    inset 0 0 0 1px rgba(34, 211, 238, 0.24),
    inset 0 0 150px rgba(34, 211, 238, calc(0.05 + 0.12 * var(--glow)));
}
.vtop,
.is-roof .vtop {
  background: linear-gradient(152deg, var(--m-roof-a) 0%, var(--m-roof-b) 56%, var(--m-roof-c) 100%);
  box-shadow:
    inset 0 0 0 1px rgba(34, 211, 238, 0.42),
    inset 0 0 30px rgba(34, 211, 238, calc(0.08 + 0.14 * var(--glow)));
}
.vwall.s {
  background: linear-gradient(180deg, var(--m-wall-a) 0%, var(--m-wall-b) 72%, var(--m-wall-c) 100%);
}
.vwall.w {
  background: linear-gradient(180deg, var(--m-wall-b) 0%, var(--m-wall-c) 78%, var(--m-wall-c) 100%);
}
.vwall.e {
  background: linear-gradient(180deg, var(--m-wall-c) 0%, #081624 100%);
}
.vwall.n {
  background: linear-gradient(180deg, var(--m-wall-c) 0%, #050f1a 100%);
}
.vroad {
  background: linear-gradient(180deg, var(--m-wall-c) 0%, var(--g-b) 100%);
}
.vlight i {
  opacity: var(--lamp);
}
.vspot {
  opacity: calc(0.22 + 0.3 * var(--glow));
}

/* ============ 场景元素：太阳 / 云 / 行人 / 车 / 旗杆 ============ */
.vsun {
  position: absolute;
  left: var(--sun-x, 74%);
  top: var(--sun-y, 10%);
  width: 9vh;
  height: 9vh;
  margin-left: -4.5vh;
  margin-top: -4.5vh;
  border-radius: 50%;
  pointer-events: none;
  z-index: 1;
  background: radial-gradient(circle, #fff 0%, var(--sun) 38%, transparent 72%);
  box-shadow: 0 0 6vh 2vh color-mix(in srgb, var(--sun) 45%, transparent);
  opacity: calc(var(--sun-o) * 0.9);
  filter: blur(0.4vh);
}
.vclouds {
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 1;
  opacity: calc((1 - var(--lamp)) * 0.5);
}
.vclouds i {
  position: absolute;
  height: 6vh;
  border-radius: 50%;
  background: radial-gradient(ellipse, rgba(255, 255, 255, 0.5), rgba(255, 255, 255, 0) 70%);
  filter: blur(1.2vh);
  animation: vdrift linear infinite;
}
.vclouds i:nth-child(1) {
  top: 6%;
  left: -20%;
  width: 42vh;
  animation-duration: 120s;
}
.vclouds i:nth-child(2) {
  top: 14%;
  left: -40%;
  width: 30vh;
  opacity: 0.7;
  animation-duration: 160s;
  animation-delay: -40s;
}
.vclouds i:nth-child(3) {
  top: 2%;
  left: -60%;
  width: 52vh;
  opacity: 0.5;
  animation-duration: 200s;
  animation-delay: -90s;
}
@keyframes vdrift {
  from {
    transform: translateX(0);
  }
  to {
    transform: translateX(180vw);
  }
}

/* 行人 */
.vwalker,
.vw-m {
  position: absolute;
  transform-style: preserve-3d;
}
.vw-m {
  animation-name: vwalk;
  animation-timing-function: linear;
  animation-iteration-count: infinite;
  animation-direction: alternate;
}
.vw-m i {
  position: absolute;
  left: -2px;
  top: -7px;
  width: 4px;
  height: 14px;
  border-radius: 2px;
  background: linear-gradient(180deg, #dff0ff 0%, #7fb6d8 55%, #2f6f9e 100%);
  box-shadow: 0 0 6px rgba(140, 210, 255, 0.55);
}
.vw-m i:nth-child(2) {
  transform: rotateY(90deg);
}
@keyframes vwalk {
  from {
    transform: translate3d(0, 0, 0);
  }
  to {
    transform: translate3d(var(--wx, 0px), var(--wy, 0px), 0);
  }
}

/* 车 */
.vcar,
.vc-m {
  position: absolute;
  transform-style: preserve-3d;
}
.vc-m {
  animation-name: vwalk;
  animation-timing-function: linear;
  animation-iteration-count: infinite;
  animation-direction: alternate;
}
.vc-body {
  position: absolute;
  left: -6px;
  top: -12px;
  width: 12px;
  height: 24px;
  border-radius: 4px;
  background: linear-gradient(180deg, color-mix(in srgb, var(--cc) 78%, #fff) 0%, var(--cc) 42%, color-mix(in srgb, var(--cc) 55%, #0a1b28) 100%);
  box-shadow: 0 0 10px color-mix(in srgb, var(--cc) 40%, transparent), 0 2px 6px rgba(0, 0, 0, 0.5);
}
.vc-light {
  position: absolute;
  left: -5px;
  top: -13px;
  width: 10px;
  height: 3px;
  border-radius: 2px;
  background: #fff8e6;
  box-shadow: 0 0 10px 2px rgba(255, 244, 210, 0.85);
  opacity: calc(0.45 + 0.55 * var(--lamp));
}

/* 停车场 */
.vparked i {
  display: block;
  width: 12px;
  height: 23px;
  border-radius: 4px;
  background: linear-gradient(180deg, #2a4a63 0%, #16293a 100%);
  box-shadow: inset 0 0 0 1px rgba(34, 211, 238, 0.22);
}

/* 旗杆 */
.vflag {
  position: absolute;
  transform-style: preserve-3d;
}
.vf-pole {
  position: absolute;
  left: 0;
  top: 0;
  width: 2px;
  height: 58px;
  transform: rotateX(90deg);
  transform-origin: 0 0;
  background: linear-gradient(180deg, #cfe6f5, #55708a);
}
.vf-cloth {
  position: absolute;
  left: 2px;
  top: 0;
  width: 22px;
  height: 14px;
  transform: translate3d(0, 0, 58px) rotateX(90deg);
  transform-origin: 0 0;
  background: linear-gradient(120deg, #b00000 0%, #d13a3a 55%, #8a0000 100%);
  box-shadow: 0 0 10px rgba(176, 0, 0, 0.45);
  border-radius: 1px;
}

/* 地面铺装 */
.vslab {
  position: absolute;
  border-radius: 4px;
}
.slab-lawn {
  background: linear-gradient(160deg, #1f5240 0%, #143a2c 60%, #0f2b21 100%);
  box-shadow: inset 0 0 0 1px rgba(74, 222, 168, 0.2), inset 0 0 26px rgba(52, 211, 153, 0.12);
}
.slab-park {
  background:
    repeating-linear-gradient(90deg, rgba(200, 232, 255, 0.18) 0 1px, transparent 1px 26px),
    linear-gradient(180deg, #16283a 0%, #0d1b28 100%);
  box-shadow: inset 0 0 0 1px rgba(34, 211, 238, 0.22);
}
.slab-pool {
  border-radius: 38%;
  background: radial-gradient(ellipse at 50% 42%, #43c8e2 0%, #14708c 55%, #0a4356 100%);
  box-shadow:
    inset 0 0 0 1px rgba(140, 246, 255, 0.5),
    inset 0 0 26px rgba(255, 255, 255, 0.18),
    0 0 30px rgba(34, 211, 238, 0.35);
  animation: vpool 6s ease-in-out infinite;
}
@keyframes vpool {
  0%, 100% {
    filter: brightness(0.92);
  }
  50% {
    filter: brightness(1.12);
  }
}

.slab-play {
  border-radius: 8px;
  background:
    radial-gradient(circle at 30% 40%, rgba(255, 214, 120, 0.35) 0 18%, transparent 20%),
    radial-gradient(circle at 68% 62%, rgba(120, 220, 255, 0.3) 0 14%, transparent 16%),
    linear-gradient(150deg, #c2601f 0%, #a3451a 55%, #7d3313 100%);
  box-shadow: inset 0 0 0 1px rgba(255, 200, 140, 0.35), inset 0 0 26px rgba(255, 180, 100, 0.2);
}

/* ============ 宏大场景：更大的地面 + 外围街区 ============ */
.vground {
  width: 1900px;
  height: 1700px;
  transform: translate3d(-950px, -850px, 0);
  border-radius: 22px;
}
.vhalo {
  left: -940px;
  top: -830px;
  width: 1880px;
  height: 1660px;
}
.vfill {
  position: absolute;
  transform-style: preserve-3d;
}
.vf-top {
  border-radius: 2px;
  background: linear-gradient(
    152deg,
    color-mix(in srgb, var(--m-roof-a) var(--lp, 60%), var(--m-roof-b)) 0%,
    var(--m-roof-c) 100%
  );
  box-shadow: inset 0 0 0 1px rgba(34, 211, 238, 0.16);
}
.vf-wall {
  background: linear-gradient(
    180deg,
    color-mix(in srgb, var(--m-wall-b) var(--lp, 60%), var(--m-wall-c)) 0%,
    var(--m-wall-c) 100%
  );
}

/* 外围街区提亮：缩到很小也要能看出"城市底图" */
.vf-top {
  background: linear-gradient(
    152deg,
    color-mix(in srgb, var(--m-roof-a) var(--lp, 70%), var(--m-roof-c)) 0%,
    color-mix(in srgb, var(--m-roof-b) var(--lp, 70%), var(--m-roof-c)) 100%
  );
  box-shadow: inset 0 0 0 1px rgba(34, 211, 238, 0.24);
}
.vf-wall {
  background: linear-gradient(
    180deg,
    color-mix(in srgb, var(--m-wall-a) var(--lp, 70%), var(--m-wall-c)) 0%,
    var(--m-wall-c) 100%
  );
}

/* ============================================================
   性能优化：去掉大范围 backdrop-filter、把重绘型动画改成合成型
   ============================================================ */
.panel,
.tb-chip,
.bot-cell,
.corner,
.sys-rail,
.venue-views button,
.vn-card,
.ring-hint {
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}
.panel {
  background: linear-gradient(180deg, rgba(12, 30, 52, 0.92), rgba(6, 16, 30, 0.86));
}
.corner {
  background: rgba(6, 18, 34, 0.82);
}
.sys-rail {
  background: rgba(6, 16, 30, 0.82);
}
.vn-card {
  background: rgba(6, 18, 34, 0.94);
}

/* 锚点：改为 transform 定位，固定高度，只在合成层更新 */
.vn-marker {
  left: 0;
  top: 0;
  width: 180px;
  height: 42px;
  transform-origin: 50% 100%;
  will-change: transform, opacity;
}
.vn-beam {
  height: 100%;
}

/* 地面光斑：只动 opacity（合成），不再动画 box-shadow（重绘） */
.vspot {
  box-shadow: 0 0 16px var(--vc), inset 0 0 14px rgba(255, 255, 255, 0.1);
  animation: vpulse 2.8s ease-in-out infinite;
}
@keyframes vpulse {
  0%,
  100% {
    opacity: 0.26;
  }
  50% {
    opacity: 0.8;
  }
}

/* 招牌扫光：静态渐变 + 一条合成层掠光 */
.vt-face {
  animation: none;
}
.vt-gleam {
  position: absolute;
  inset: 0;
  overflow: hidden;
  pointer-events: none;
}
.vt-gleam::before {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  width: 30%;
  background: linear-gradient(100deg, transparent, rgba(255, 255, 255, 0.8), transparent);
  transform: translateX(-120%);
  animation: vtgleam 4.8s linear infinite;
  mix-blend-mode: screen;
}
@keyframes vtgleam {
  to {
    transform: translateX(430%);
  }
}
.vt-bar {
  animation: none;
}
.vpool {
  animation: none;
}

/* 帧率探针（?fps=1 时显示） */
.vfps {
  position: absolute;
  right: 0.8vh;
  bottom: 0.8vh;
  z-index: 95;
  padding: 0.3vh 0.8vh;
  border-radius: 4px;
  font-style: normal;
  font-family: var(--font-num);
  font-size: 1.1vh;
  color: #7ff3ff;
  background: rgba(4, 12, 22, 0.85);
  border: 1px solid rgba(34, 211, 238, 0.35);
  pointer-events: none;
}

/* ============================================================
   主馆招牌（重做）：双层大字 + 金属边框 + 上下跑马灯 + 扫光
   ============================================================ */
.vt-sign {
  width: 300px;
  height: 120px;
}
.vt-layer,
.vt-face {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 1px;
  white-space: nowrap;
  font-weight: 900;
  line-height: 1.06;
}
.vt-layer .l1,
.vt-face .l1 {
  font-size: 26px;
  letter-spacing: 0.14em;
}
.vt-layer .l2,
.vt-face .l2 {
  font-size: 40px;
  letter-spacing: 0.18em;
}
.vt-layer b {
  font-weight: 900;
}

/* 正面：白金实心 + 双层辉光（不用渐变文字，3D 里更干净） */
.vt-face .l1 {
  color: #ecfbff;
  text-shadow:
    0 0 4px rgba(255, 255, 255, 0.95),
    0 0 12px rgba(160, 236, 255, 0.85),
    0 0 26px rgba(34, 211, 238, 0.45);
}
.vt-face .l2 {
  color: #ffeec4;
  text-shadow:
    0 0 5px rgba(255, 255, 255, 1),
    0 0 14px rgba(255, 214, 130, 0.95),
    0 0 34px rgba(232, 195, 122, 0.7),
    0 0 60px rgba(255, 176, 64, 0.4);
}
.vt-face .en {
  margin-top: 2px;
  font-style: normal;
  font-size: 8px;
  font-weight: 500;
  letter-spacing: 0.4em;
  color: #9ee6f7;
  text-shadow: 0 0 10px rgba(34, 211, 238, 0.8);
}

/* 金属边框 */
.vt-frame {
  position: absolute;
  inset: 2px 3px;
  border: 1px solid rgba(232, 195, 122, 0.42);
  border-radius: 3px;
  box-shadow:
    inset 0 0 18px rgba(232, 195, 122, 0.12),
    0 0 16px rgba(232, 195, 122, 0.22);
  pointer-events: none;
}
.vt-frame::before,
.vt-frame::after {
  content: "";
  position: absolute;
  top: 50%;
  width: 7px;
  height: 7px;
  margin-top: -3.5px;
  border: 1px solid rgba(255, 226, 160, 0.85);
  background: rgba(232, 195, 122, 0.3);
  transform: rotate(45deg);
  box-shadow: 0 0 8px rgba(232, 195, 122, 0.8);
}
.vt-frame::before {
  left: -5px;
}
.vt-frame::after {
  right: -5px;
}

/* 跑马灯灯带：上下各一道，灯珠逐颗流动 */
.vt-chase {
  position: absolute;
  left: 4%;
  right: 4%;
  height: 4px;
  overflow: hidden;
  border-radius: 2px;
  background: rgba(232, 195, 122, 0.12);
  box-shadow: 0 0 10px rgba(232, 195, 122, 0.35);
}
.vt-chase.top {
  top: 3px;
}
.vt-chase.bot {
  bottom: 3px;
}
.vt-chase b {
  position: absolute;
  inset: 0;
  width: 200%;
  background: repeating-linear-gradient(
    90deg,
    rgba(255, 240, 200, 0.95) 0 6px,
    rgba(255, 240, 200, 0) 6px 18px
  );
  filter: drop-shadow(0 0 4px rgba(255, 226, 160, 0.9));
  animation: vtchase 1.3s linear infinite;
}
.vt-chase.bot b {
  animation-direction: reverse;
}
@keyframes vtchase {
  from {
    transform: translateX(0);
  }
  to {
    transform: translateX(-50%);
  }
}

/* 扫光：一道高光扫过牌面 */
.vt-gleam {
  position: absolute;
  inset: 0;
  overflow: hidden;
  pointer-events: none;
  border-radius: 3px;
}
.vt-gleam::before {
  content: "";
  position: absolute;
  top: -20%;
  bottom: -20%;
  width: 26%;
  background: linear-gradient(
    100deg,
    rgba(255, 255, 255, 0) 0%,
    rgba(255, 255, 255, 0.55) 45%,
    rgba(255, 255, 255, 0.9) 50%,
    rgba(255, 255, 255, 0.55) 55%,
    rgba(255, 255, 255, 0) 100%
  );
  transform: translateX(-140%) skewX(-12deg);
  animation: vtgleam 3.6s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
@keyframes vtgleam {
  0% {
    transform: translateX(-140%) skewX(-12deg);
  }
  55%,
  100% {
    transform: translateX(430%) skewX(-12deg);
  }
}

/* 招牌尺寸再放大一档（占满主馆屋面宽度） */
.vt-sign {
  width: 350px;
  height: 140px;
}
.vt-layer .l1,
.vt-face .l1 {
  font-size: 30px;
  letter-spacing: 0.16em;
}
.vt-layer .l2,
.vt-face .l2 {
  font-size: 50px;
  letter-spacing: 0.2em;
}
.vt-face .en {
  font-size: 9px;
  letter-spacing: 0.42em;
}
.vt-chase.top {
  top: 5px;
}
.vt-chase.bot {
  bottom: 5px;
}

/* ============ 系统入口可收起 ============ */
.sys-rail {
  transition: width 0.18s ease, padding 0.18s ease;
  overflow: hidden;
}
.sr-toggle {
  display: block;
  width: 100%;
  padding: 0.2vh 0.3vh;
  margin-bottom: 0.3vh;
  background: transparent;
  border: none;
  border-radius: 3px;
  color: #6f8aa8;
  font-size: 1.2vh;
  line-height: 1;
  text-align: right;
  cursor: pointer;
  transition: 0.14s;
}
.sr-toggle:hover {
  color: #7ff3ff;
  background: rgba(34, 211, 238, 0.12);
}
.sys-rail.closed {
  width: 3.2vh;
  padding: 0.5vh 0.25vh;
}
.sys-rail.closed .sr-toggle {
  writing-mode: vertical-rl;
  text-align: center;
  letter-spacing: 0.28em;
  font-size: 1.06vh;
  padding: 0.6vh 0;
  color: #8fb0cc;
  background: rgba(34, 211, 238, 0.1);
  border: 1px solid rgba(34, 211, 238, 0.22);
}
.sys-rail.closed .sr-toggle:hover {
  color: #041018;
  background: #22d3ee;
}

/* 视角按钮：确保点击不被 3D 层遮挡 */
.venue-views {
  z-index: 92;
  pointer-events: auto;
}
.venue-views button {
  pointer-events: auto;
}

/* 层级：按钮必须在锚点之上，否则被卡片挡住点不到 */
.venue-views {
  z-index: 120;
}
.sys-rail {
  z-index: 130;
}
.vfps {
  z-index: 140;
}

/* ============================================================
   固定配色：取消随时间的日光变化，锁定深色科技蓝
   ============================================================ */
.venue {
  --m-wall-a: #39627f;
  --m-wall-b: #2b4a63;
  --m-wall-c: #172c40;
  --m-roof-a: #4f88ad;
  --m-roof-b: #2c5476;
  --m-roof-c: #1a3a52;
  --g-a: #22425c;
  --g-b: #0d1e30;
  --sky-a: #12293e;
  --sky-b: #050d17;
  --sun: #8fc4ff;
  --sun-x: 74%;
  --sun-y: 10%;
  --sun-o: 0;
  --haze: #22d3ee;
  --haze-a: 0.1;
  --lamp: 1;
  --glow: 1;
}
.vsky {
  background: radial-gradient(circle at 50% 46%, var(--sky-a) 0%, var(--sky-b) 64%, #03060c 100%);
}
.vsky::after,
.vsun,
.vclouds {
  display: none;
}
.vhaze {
  opacity: 0.07;
  background: radial-gradient(circle at 50% 28%, var(--haze) 0%, transparent 58%);
  mix-blend-mode: screen;
}

/* ============ 交互期卡顿优化 ============ */
/* 1. 去掉全屏 mix-blend-mode（每帧都要和整个 3D 场景重混） */
.vhaze {
  mix-blend-mode: normal;
  opacity: 0.05;
}
/* 2. 去掉动画元素上的 filter（每帧重绘） */
.vt-chase b {
  filter: none;
  background: repeating-linear-gradient(
    90deg,
    #fffdf2 0 6px,
    rgba(255, 253, 242, 0) 6px 18px
  );
}
/* 3. 锚点 hover 不用 filter，用卡片阴影 */
.vn-marker {
  transition: none;
}
.vn-marker:hover {
  filter: none;
}
.vn-marker:hover .vn-card {
  background: rgba(10, 30, 52, 0.98);
  border-color: var(--vc);
  box-shadow: 0 0 18px var(--vc), 0 6px 18px rgba(0, 0, 0, 0.55);
}

/* ============================================================
   细节分层（LOD）：只有主馆保留窗格/阴影等高成本细节
   ============================================================ */
/* 1) 窗格纹理只留给主馆（原来 124 面墙每面都刷一层 repeating-gradient） */
.vwall::after {
  display: none !important;
}
.t-hero .vwall::after {
  display: block !important;
}

/* 2) 楼体投影只留给主馆（filter: blur 很贵） */
.vshadow {
  display: none !important;
}
.t-hero .vshadow {
  display: block !important;
  filter: blur(6px);
}

/* 3) 外围街区的内阴影去掉，只留 1px 线 */
.vf-top {
  box-shadow: inset 0 0 0 1px rgba(34, 211, 238, 0.2);
}
.vf-wall {
  box-shadow: none;
}

/* 4) 围栏、树、路灯的阴影去掉 */
.vtree i,
.vlight i {
  box-shadow: none;
}
.vtree i {
  background: radial-gradient(circle at 50% 38%, rgba(74, 222, 168, 0.55), rgba(6, 40, 28, 0.9) 72%);
}

/* 5) 顶部描边改为更便宜的 border */
.vtop {
  box-shadow: inset 0 0 0 1px rgba(34, 211, 238, 0.4);
}
.t-hero .vtop,
.is-glass .vtop {
  box-shadow:
    inset 0 0 0 1px rgba(34, 211, 238, 0.5),
    inset 0 0 26px rgba(34, 211, 238, 0.18);
}

/* 外围街区贴图（单层，替代 100+ 体块） */
.vcity {
  position: absolute;
  left: -950px;
  top: -850px;
  width: 1900px;
  height: 1700px;
  transform: translateZ(2px);
  background-size: 100% 100%;
  background-repeat: no-repeat;
  opacity: 0.92;
  pointer-events: none;
}

.vcity {
  opacity: 0.97;
}

/* 贴图压在地面之上一层，核心区的道路/广场仍画在它上面 */
.vcity {
  transform: translateZ(0.3px);
}

/* ============================================================
   四角色视角：四套排版（栏宽比例 + 面板组合都不同）
   ============================================================ */
/* 16:9：三栏，左右宽度随角色变化 */
.layout-a .dash { grid-template-columns: minmax(272px, 21.5vw) minmax(0, 1fr) minmax(272px, 21.5vw); }
.layout-b .dash { grid-template-columns: minmax(320px, 26vw) minmax(0, 1fr) minmax(240px, 18vw); }
.layout-c .dash { grid-template-columns: minmax(230px, 17vw) minmax(0, 1fr) minmax(320px, 24vw); }
.layout-d .dash { grid-template-columns: minmax(330px, 27vw) minmax(0, 1fr) minmax(250px, 19vw); }

/* 32:9：五栏，比例同样按角色区分 */
.mode-wide.layout-a .dash {
  grid-template-columns:
    minmax(200px, 18vw) minmax(176px, 13.5vw) minmax(0, 1fr)
    minmax(176px, 13.5vw) minmax(200px, 18vw);
}
.mode-wide.layout-b .dash {
  grid-template-columns:
    minmax(220px, 20vw) minmax(160px, 12vw) minmax(0, 1fr)
    minmax(158px, 11.5vw) minmax(190px, 15vw);
}
.mode-wide.layout-c .dash {
  grid-template-columns:
    minmax(180px, 15vw) minmax(170px, 13vw) minmax(0, 1fr)
    minmax(190px, 14.5vw) minmax(230px, 19vw);
}
.mode-wide.layout-d .dash {
  grid-template-columns:
    minmax(240px, 21vw) minmax(150px, 11.5vw) minmax(0, 1fr)
    minmax(160px, 12vw) minmax(205px, 16vw);
}

/* 底栏格数随角色变化 */
.botbar.cells-3 { grid-template-columns: 1.25fr 1fr 1fr; }
.botbar.cells-4 { grid-template-columns: 1.25fr 1fr 1fr 1fr; }

/* ---------------- 榜单（班级满班 / 异常码 / 设备） ---------------- */
.rank-list {
  display: flex;
  flex-direction: column;
  gap: 0.55vh;
  min-height: 0;
  overflow: auto;
}
.rank-row {
  display: grid;
  grid-template-columns: minmax(64px, 42%) minmax(0, 1fr) auto;
  align-items: center;
  gap: 0.8vh;
  font-size: 1.06vh;
}
.rank-name {
  color: #c2d8ea;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.rank-bar {
  height: 0.6vh;
  border-radius: 3px;
  background: rgba(34, 211, 238, 0.1);
  overflow: hidden;
}
.rank-bar i {
  display: block;
  height: 100%;
  border-radius: 3px;
}
.rank-row b {
  font-size: 1.12vh;
  color: #eafcff;
  font-weight: 600;
  white-space: nowrap;
}
.rank-row b em {
  font-style: normal;
  font-size: 0.9vh;
  color: #6f88a8;
  margin-left: 0.2vh;
}
.rank-extra {
  grid-column: 2 / 4;
  font-size: 0.98vh;
  color: #6f88a8;
  margin-top: -0.3vh;
}

/* ---------------- 票池水位 ---------------- */
.pool-list {
  display: flex;
  flex-direction: column;
  gap: 0.7vh;
  min-height: 0;
  overflow: auto;
}
.pool-row {
  display: flex;
  flex-direction: column;
  gap: 0.35vh;
}
.pool-top {
  display: flex;
  align-items: baseline;
  gap: 0.6vh;
}
.pool-name {
  flex: 1;
  font-size: 1.04vh;
  color: #c2d8ea;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.pool-top b {
  font-size: 1.04vh;
  color: #eafcff;
  font-weight: 600;
}
.pool-top b em {
  font-style: normal;
  font-size: 0.92vh;
  color: #6f88a8;
  margin-left: 0.2vh;
}
.pool-top b.danger {
  color: #ff8a7d;
}
.pool-track {
  display: flex;
  height: 0.62vh;
  border-radius: 3px;
  overflow: hidden;
  background: rgba(34, 211, 238, 0.08);
}
.pool-track .sold {
  background: linear-gradient(90deg, rgba(34, 211, 238, 0.9), rgba(59, 130, 246, 0.7));
}
.pool-track .lock {
  background: rgba(232, 195, 122, 0.75);
}

/* ---------------- 工单队列 ---------------- */
.queue-list {
  display: flex;
  flex-direction: column;
  gap: 0.5vh;
  min-height: 0;
  overflow: auto;
}
.queue-row {
  display: flex;
  align-items: center;
  gap: 0.6vh;
  padding: 0.5vh 0.6vh;
  border-radius: 4px;
  background: rgba(34, 211, 238, 0.04);
  border-left: 2px solid rgba(34, 211, 238, 0.5);
}
.queue-row.lv-1 {
  border-left-color: #ff4d3d;
  background: rgba(255, 77, 61, 0.08);
}
.queue-row.lv-2 {
  border-left-color: #e8c37a;
  background: rgba(232, 195, 122, 0.07);
}
.queue-dot {
  width: 0.5vh;
  height: 0.5vh;
  border-radius: 50%;
  background: currentColor;
  flex: none;
}
.queue-row.lv-1 .queue-dot { color: #ff4d3d; }
.queue-row.lv-2 .queue-dot { color: #e8c37a; }
.queue-row.lv-3 .queue-dot { color: #34d399; }
.queue-main {
  flex: 1;
  min-width: 0;
}
.queue-main p {
  margin: 0;
  font-size: 1.04vh;
  color: #d8e8f6;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.queue-main span {
  font-size: 0.94vh;
  color: #6f88a8;
}
.queue-lv {
  font-style: normal;
  font-size: 0.92vh;
  color: #8fb0cc;
  flex: none;
}

/* =========================================================
   导览机器人（AI 馆员）锚点 —— 与系统光柱同层的另一种标记
   执行中=青色巡逻，充电中=琥珀呼吸；点击进智慧导览
   ========================================================= */
.vr-marker {
  position: absolute;
  left: 0;
  top: 0;
  width: 150px;
  height: 40px;
  transform-origin: 50% 100%;
  will-change: transform, opacity;
  pointer-events: auto;
  cursor: pointer;
  --vc: #76cbd9;
}
.vr-marker.st-charge {
  --vc: #dfb66f;
}
.vr-marker .vr-card {
  position: absolute;
  left: 50%;
  bottom: 34px;
  transform: translateX(-50%);
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 5px 11px;
  border-radius: 6px;
  background: rgba(6, 18, 34, 0.92);
  border: 1px solid rgba(118, 203, 217, 0.32);
  white-space: nowrap;
  transition: border-color 0.18s;
}
.vr-marker:hover .vr-card {
  border-color: var(--vc);
}
.vr-marker .vr-card b {
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.5px;
  color: #cfe6ef;
}
.vr-marker .vr-card b::before {
  content: '⬤';
  font-size: 6px;
  color: var(--vc);
  margin-right: 5px;
  vertical-align: 2px;
}
.vr-marker .vr-card em {
  font-size: 9px;
  font-style: normal;
  color: #8ba7b8;
  max-width: 138px;
  overflow: hidden;
  text-overflow: ellipsis;
}
.vr-marker .vr-dot {
  position: absolute;
  left: 50%;
  top: -4px;
  width: 8px;
  height: 8px;
  margin-left: -4px;
  border-radius: 50%;
  background: var(--vc);
  box-shadow: 0 0 10px var(--vc), 0 0 2px #fff;
}
.vr-marker .vr-beam {
  position: absolute;
  left: 50%;
  bottom: 0;
  width: 2px;
  margin-left: -1px;
  height: 32px;
  background: linear-gradient(180deg, var(--vc), transparent);
  opacity: 0.8;
}
.vr-marker.st-charge .vr-dot {
  animation: vr-blink 2.2s ease-in-out infinite;
}
@keyframes vr-blink {
  50% {
    opacity: 0.35;
  }
}

/* Shared workspace; accents come from the active subsystem. */
.sx-shell { height:100vh; min-height:0; overflow:hidden; background:#f3f5f8; color:#263345; --s-text:#263345; --s-text-2:#627084; --s-text-3:#788598; --s-line:#e4e8ee; --panel-radius:8px; }
.sx-shell *, .sx-shell *::before, .sx-shell *::after { box-sizing:border-box; }
.sx-shell > div { min-height:0; }
.sx-sidebar { border-right-color:#e4e8ee !important; }
.sx-brand { display:flex; align-items:center; gap:10px; min-height:64px; padding:0 18px; }
.sx-brand img { width:30px; height:30px; object-fit:contain; flex:none; }
.sx-brand-txt { line-height:1.6; min-width:0; }
.sx-brand-txt b { font-size:14px; font-weight:650; color:#263345; white-space:nowrap; }
.sx-brand-txt span { display:block; font-size:12px; color:#788598; }
.sx-system-title { display:flex; align-items:center; gap:10px; padding:18px 18px 16px; margin:0 12px 5px; border-top:1px solid #edf0f4; color:var(--brand); }
.sx-system-title > .anticon { font-size:19px; }
.sx-system-title strong { font-size:16px; font-weight:650; }
.sx-menu { background:transparent !important; padding-top:0 !important; scrollbar-width:thin; }
.sx-menu .ant-menu-item-group-title { padding:12px 22px 5px !important; color:#8a95a4 !important; font-size:11px !important; letter-spacing:.06em; }
.sx-menu .ant-menu-item { height:36px; line-height:36px; margin:2px 12px !important; width:auto !important; padding-left:18px !important; font-size:13px; color:#59677a; border-radius:6px; }
.sx-menu .ant-menu-item-selected { color:var(--brand) !important; background:var(--brand-weak) !important; font-weight:650; }
.sx-menu .ant-menu-item-selected::after { display:none; }
.sx-menu .ant-menu-item:hover { background:#f3f5f8 !important; }
.sx-menu .ant-menu-item-selected::before { content:''; position:absolute; width:3px; height:14px; border-radius:3px; background:var(--brand); left:0; top:11px; }
.sx-back { display:inline-flex; align-items:center; gap:7px; min-height:34px; padding:0 11px; color:#627084; font-size:12px; border:1px solid #e4e8ee; border-radius:6px; background:#fff; text-decoration:none; transition:background .15s; }
.sx-back:hover { background:var(--brand-weak); color:var(--brand); border-color:var(--brand-line); }
.sx-header { display:flex; align-items:center; gap:12px; padding:0 24px; background:#fff; border-bottom:1px solid #e4e8ee; position:relative; z-index:20; }
.sx-crumb { display:flex; align-items:center; gap:10px; font-size:12px; color:#788598; white-space:nowrap; }
.sx-crumb b { font-weight:550; color:#475569; }
.sx-header-right { display:flex; align-items:center; gap:18px; margin-left:auto; }
.sx-switch { display:inline-flex; align-items:center; gap:7px; height:32px; padding:0 11px; color:#526174; background:#fff; border:1px solid #e4e8ee; border-radius:6px; cursor:pointer; font:inherit; font-size:12px; }
.sx-switch:hover { border-color:var(--brand-line); color:var(--brand); }
.sx-switch:focus-visible, .sx-back:focus-visible { outline:2px solid var(--brand); outline-offset:3px; }
.sx-content { min-height:0; overflow-y:auto; overflow-x:hidden; scrollbar-gutter:stable; padding:22px 24px 32px; scrollbar-width:thin; scrollbar-color:#cdd4de transparent; }
.sx-content > *, .sx-card-body, .sx-card-body > * { min-width:0; }
.sx-page-head { display:flex; align-items:center; flex-wrap:wrap; gap:12px; margin-bottom:20px; min-height:34px; }
.sx-page-title { margin:0; font-size:23px; font-weight:650; letter-spacing:-.035em; color:#233044; line-height:1.4; }
.sx-page-actions { display:flex; align-items:center; gap:8px; margin-left:auto; flex-wrap:wrap; }
.sx-page-actions > .ant-tag { background:transparent; color:#788598; border:0; font-size:12px; }
.sx-page-actions .ant-btn { height:32px; }
.sx-metrics { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); margin-bottom:20px; background:#fff; border:1px solid #e4e8ee; border-radius:var(--panel-radius); overflow:hidden; }
.sx-metric { position:relative; padding:15px 20px 13px; min-width:0; }
.sx-metric + .sx-metric::before { content:''; position:absolute; left:0; top:18px; bottom:18px; width:1px; background:#e9edf2; }
.sx-metric-label { font-size:12px; line-height:1.5; color:#627084; }
.sx-metric-val { display:flex; align-items:baseline; gap:5px; margin-top:6px; white-space:nowrap; }
.sx-metric-val b { font-family:var(--font-num),sans-serif; font-variant-numeric:tabular-nums; font-size:28px; font-weight:600; letter-spacing:-.025em; color:#263345; line-height:1.15; }
.sx-metric-val i { font-style:normal; font-size:12px; color:#788598; }
.sx-metric:first-child .sx-metric-val b { color:var(--brand); }
.sx-metric.tone-orange .sx-metric-val b { color:#a56a21; }
.sx-metric-foot { margin-top:6px; font-size:12px; line-height:1.5; color:#788598; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sx-card { min-width:0; background:#fff; border:1px solid #e4e8ee; border-radius:var(--panel-radius); padding:18px; box-shadow:0 2px 3px rgba(35,48,68,.015); }
.sx-card-hd { display:flex; flex-wrap:wrap; align-items:center; gap:6px 12px; margin-bottom:16px; min-height:24px; }
.sx-card-hd h3 { margin:0; font-size:15px; font-weight:650; line-height:1.5; color:#263345; flex-shrink:0; }
.sx-card-hd .sub { color:#788598; font-size:12px; line-height:1.5; flex:1; min-width:80px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sx-card-extra { margin-left:auto; display:flex; align-items:center; flex-wrap:wrap; gap:6px; }
.sx-toolbar { display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:14px; }
.sx-toolbar .spacer { margin-left:auto; }
.sx-toolbar > .ant-tag { margin-inline-end:0; }
.sx-toolbar .ant-input-affix-wrapper { background:#fff; }
.sx-split { display:grid; grid-template-columns:minmax(0,1fr) 320px; gap:16px; align-items:start; }
.sx-tag { display:inline-flex; align-items:center; gap:4px; min-height:22px; padding:0 7px; border-radius:4px; font-size:12px; background:#f2f4f7; color:#627084; }
.sx-tag.brand { background:var(--brand-weak); color:var(--brand); }
.sx-empty { padding:40px 20px; text-align:center; color:#788598; }
.sx-foot { padding:16px; color:#788598; font-size:12px; text-align:center; }
.sx-shell .num { font-variant-numeric:tabular-nums; }
.sx-shell a { color:var(--brand); }
.sx-shell .ant-table-wrapper { min-width:0; }
.sx-shell .ant-table { font-size:13px; color:#374456; }
.sx-shell .ant-table-thead > tr > th { font-size:12px; font-weight:600; color:#59677a; background:#f5f7fa; border-bottom:1px solid #e4e8ee; padding:11px 12px !important; white-space:nowrap; }
.sx-shell .ant-table-thead > tr > th::before { display:none !important; }
.sx-shell .ant-table-tbody > tr > td { padding:12px !important; border-color:#edf0f4; line-height:1.55; }
.sx-shell .ant-table-tbody > tr:hover > td { background:var(--brand-weak) !important; }
.sx-shell .ant-table-tbody > tr.ant-table-row-selected > td { background:var(--brand-weak); }
.sx-shell .ant-table-cell .ant-btn-link { font-size:12px; height:26px; padding:0 5px; }
.sx-shell .ant-table-cell .ant-space { flex-wrap:wrap; row-gap:2px !important; }
.sx-shell .ant-table-cell-fix-right, .sx-shell .ant-table-cell-fix-left { background:#fff; }
.sx-shell .ant-table-summary td { background:#fafbfc; font-weight:600; }
.sx-shell .ant-tag { border-radius:4px; font-size:12px; line-height:21px; }
.sx-shell .ant-pagination { font-size:12px; margin-bottom:0 !important; }
.sx-shell .ant-segmented { background:#edf0f4; padding:3px; }
.sx-shell .ant-segmented-item-selected { color:var(--brand); font-weight:550; }
.sx-shell .ant-tabs-tab { padding:10px 0; }
.sx-shell .ant-alert { border-radius:6px; }
.sx-shell .ant-table-content { scrollbar-width:thin; }

/* Service desks: warm surfaces and roomy transaction rows. */
.sx-family-service { background:#f6f4f2; --panel-radius:10px; }
.sx-family-service .sx-metrics { border:0; background:transparent; gap:12px; }
.sx-family-service .sx-metric { border:1px solid #e6e4e1; background:#fff; border-radius:10px; }
.sx-family-service .sx-metric:first-child { background:var(--brand-weak); border-color:var(--brand-line); }
.sx-family-service .sx-metric::before { display:none; }
.sx-family-service .ant-table-thead > tr > th { background:#f7f5f3; }
/* Learning and content: broad work surfaces and softer colored headings. */
.sx-family-learning { background:#f1f5f8; }
.sx-family-learning .sx-metrics, .sx-family-learning .sx-card { border-color:#e2e9ef; }
.sx-family-learning .ant-table-thead > tr > th { background:var(--brand-weak); color:#476074; }
.sx-family-learning .sx-card-hd h3::before { content:''; display:inline-block; width:3px; height:13px; border-radius:2px; margin-right:8px; background:var(--brand); vertical-align:-1px; }
/* Operations: tighter striped rows and low-saturation colored headers. */
.sx-family-operations { background:#f2f5f3; --panel-radius:6px; }
.sx-family-operations .sx-metric { padding:12px 18px; }
.sx-family-operations .sx-metric-val b { font-size:26px; }
.sx-family-operations .ant-table-thead > tr > th { background:var(--brand-weak); color:#42594e; border-bottom:1px solid var(--brand-line); }
.sx-family-operations .ant-table-tbody > tr:nth-child(even) > td { background:#f8faf9; }
.sx-family-operations .ant-table-tbody > tr > td { padding:9px 12px !important; }
.sx-family-operations .sx-card-hd { padding-bottom:12px; border-bottom:1px solid #edf0ed; }
/* Administration and finance: neutral ledger with distinct total rows. */
.sx-family-ledger { background:#f4f5f7; --panel-radius:6px; }
.sx-family-ledger .sx-metrics { border-top:2px solid var(--brand); }
.sx-family-ledger .sx-card { box-shadow:none; }
.sx-family-ledger .ant-table-thead > tr > th { background:#f0f2f5; border-top:1px solid #e0e5eb; border-bottom:1px solid #d8dfe8; }
.sx-family-ledger .ant-table-tbody > tr > td { padding:11px 12px !important; }
.sx-finance .ant-table-summary td { background:#faf8f2; border-top:1px solid #d9cfb8; }
/* AI studio: subdued violet editing surfaces and dark navigation. */
.sx-family-studio { background:#f3f3f8; }
.sx-family-studio .sx-sidebar { background:#242735 !important; border-color:#343846 !important; }
.sx-family-studio .sx-brand-txt b { color:#f3f4f8; }
.sx-family-studio .sx-brand img { filter:brightness(0) invert(1); }
.sx-family-studio .sx-brand-txt span { color:#a8afc0; }
.sx-family-studio .sx-system-title { color:#c3b9f2; border-color:#3b3e4d; }
.sx-family-studio .sx-menu .ant-menu-item { color:#c6cbd8; }
.sx-family-studio .sx-menu .ant-menu-item-selected { color:#eeeaff !important; background:#46405f !important; }
.sx-family-studio .sx-menu .ant-menu-item:hover { background:#353846 !important; }
.sx-family-studio .sx-menu .ant-menu-item-selected::before { background:#b9a8ed; }
.sx-family-studio .sx-back { background:#303340; border-color:#444757; color:#ced2df; }
.sx-family-studio .ant-table-thead > tr > th { background:#f2effa; }

@media (max-width:1350px) {
  .sx-sidebar { width:184px !important; }
  .sx-system-title { padding-left:8px; padding-right:4px; }
  .sx-content { padding:20px 18px 28px; }
  .sx-header { padding:0 18px; }
  .sx-crumb > span:first-of-type { display:none; }
  .sx-metric { padding:13px 14px; }
  .sx-metric-val b { font-size:25px; }
  .sx-card { padding:15px; }
  .sx-split { grid-template-columns:minmax(0,1fr) 290px; gap:12px; }
}
@media (max-width:1050px) {
  .sx-split { grid-template-columns:minmax(0,1fr); }
  .sx-header-right { gap:10px; }
  .sx-crumb { gap:5px; }
  .sx-metrics { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .sx-metric:nth-child(3)::before { display:none; }
  .sx-card-hd .sub { flex-basis:100%; order:3; }
}
/* Business workspaces */
.sx-workspace > * { min-width:0; }
.sx-schedule-toolbar { margin-bottom:14px; }
.edu-week-label { color:#627084; font-size:13px; margin-left:8px; }
.edu-day-strip { display:grid; grid-template-columns:repeat(7,minmax(0,1fr)); gap:8px; margin-bottom:16px; }
.edu-day-strip button { text-align:left; background:#fff; border:1px solid #dfe6ef; border-radius:6px; padding:10px 14px; color:#627084; cursor:pointer; font:inherit; }
.edu-day-strip button.active { border-color:var(--brand); background:var(--brand-weak); color:var(--brand); }
.edu-day-strip span { display:block; font-size:12px; }
.edu-day-strip b { display:block; margin-top:6px; font-size:21px; font-family:var(--font-num); font-weight:550; }
.edu-day-strip small { font:12px var(--font-cn); }
.edu-board-scroll { overflow-x:auto; border:1px solid #e2e8f0; border-radius:6px; scrollbar-width:thin; }
.edu-board { display:grid; background:#fff; }
.edu-board-heading, .edu-board-corner { background:#f5f7fb; border-bottom:1px solid #e2e8f0; padding:12px 8px; text-align:center; font-size:12px; color:#627084; }
.edu-board-corner, .edu-board-resource { position:sticky; left:0; z-index:2; }
.edu-board-resource { background:#fafbfd; border-right:1px solid #e2e8f0; border-bottom:1px solid #e9edf4; padding:16px 12px; }
.edu-board-resource b { font-size:13px; display:block; }
.edu-board-resource span { font-size:12px; display:block; color:#788598; margin-top:4px; }
.edu-board-cell { border-right:1px solid #edf0f5; border-bottom:1px solid #edf0f5; padding:6px; min-height:96px; }
.sx-schedule-lesson { width:100%; display:flex; flex-direction:column; gap:4px; text-align:left; padding:9px 8px; margin-bottom:5px; border:0; border-left:3px solid var(--lesson-line,#3766b0); border-radius:4px; background:var(--lesson-bg,#eef3fb); color:var(--lesson-color,#3766b0); cursor:pointer; font:inherit; }
.sx-schedule-lesson:hover { filter:brightness(.97); }
.sx-schedule-lesson b { font-size:12px; font-weight:600; line-height:1.5; }
.sx-schedule-lesson span, .sx-schedule-lesson time { font-size:11px; }
.sx-schedule-lesson.is-conflict { background:#fff1ef; color:#b1453c; border-color:#d16559; }
.sx-schedule-lesson em { font-size:11px; font-style:normal; font-weight:600; }
.edu-free { display:block; text-align:center; color:#c5cdd8; padding-top:26px; }
.oa-task-list { border:1px solid #e1e6eb; border-radius:8px; overflow:hidden; background:#fff; }
.oa-task-list-head, .oa-task-row { display:grid; grid-template-columns:minmax(300px,1.7fr) minmax(160px,1fr) 110px 142px; align-items:center; gap:18px; padding:17px 20px; }
.oa-task-list-head { padding-top:11px; padding-bottom:11px; background:#edf3f1; color:#627084; font-size:12px; }
.oa-task-row + .oa-task-row { border-top:1px solid #edf0f4; }
.oa-task-row:hover { background:#fbfcfd; }
.oa-task-title { display:flex; align-items:center; gap:12px; }
.oa-task-title b { display:block; font-size:14px; font-weight:550; }
.oa-task-title span:not(.ant-tag), .oa-task-summary > span { display:block; font-size:12px; color:#788598; margin-top:5px; }
.oa-task-summary b { font-size:14px; font-weight:550; }
.oa-task-urged { display:block; color:#927025; margin-top:4px; }
.member-account-banner { padding:22px; background:#fff; border:1px solid #e5e0e8; border-radius:10px; border-top:3px solid var(--brand); }
.member-account-person { display:flex; align-items:center; gap:12px; }
.member-account-person h2 { font-size:20px; font-weight:600; color:#263345; margin:0; display:flex; align-items:center; gap:12px; }
.member-account-person p { color:#788598; font-size:12px; margin:5px 0 0; }
.member-account-balances { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:16px; padding-top:20px; margin-top:18px; border-top:1px solid #edf0f4; }
.member-account-balances span { display:block; font-size:12px; color:#627084; }
.member-account-balances b { display:block; margin-top:5px; font-size:25px; font-family:var(--font-num); font-weight:550; color:var(--brand); }
.guide-scene-layout { display:grid; grid-template-columns:minmax(0,1fr) 292px; gap:18px; align-items:start; }
.guide-scene-row { display:flex; align-items:center; gap:16px; padding:19px 0; border-top:1px solid #edf0f4; }
.guide-scene-symbol { display:grid; place-items:center; height:48px; width:48px; border-radius:8px; background:var(--brand-weak); color:var(--brand); font-size:23px; flex:none; }
.guide-scene-name { flex:1; min-width:0; }
.guide-scene-name b { display:block; font-size:14px; font-weight:550; }
.guide-scene-name span { display:block; font-size:12px; color:#788598; margin-top:5px; }
.guide-scene-hot { min-width:40px; text-align:center; }
.guide-scene-hot b { display:block; font-size:18px; font-family:var(--font-num); font-weight:550; }
.guide-scene-hot span { color:#788598; font-size:11px; }
.guide-scene-side { display:grid; gap:16px; }
.guide-panorama-entry { border:1px solid #cddfe1; background:#e7f0f1; padding:24px; border-radius:8px; }
.guide-panorama-entry > .anticon { font-size:34px; color:var(--brand); }
.guide-panorama-entry h2 { font-size:20px; color:#285861; margin:18px 0 4px; }
.guide-panorama-entry p { font-size:12px; color:#627c82; margin:0 0 22px; }
.guide-panorama-entry .ant-btn + .ant-btn { margin-top:8px; background:transparent; border-color:#bed4d7; color:#396a72; }
.guide-check-time { color:#788598; font-size:12px; }
.guide-check-time span { display:block; margin-top:5px; color:#475569; }
.guide-scene-alert { display:flex; gap:8px; padding:12px; margin-top:16px; background:#fcf3e8; color:#9c692c; border-radius:5px; font-size:12px; }
.guide-scene-alert b,.guide-scene-alert span { display:block; }
.guide-scene-alert span { margin-top:6px; font-size:11px; }
.ai-agent-workspace { grid-template-columns:236px minmax(0,1fr) !important; gap:16px !important; }
.ai-agent-editor { min-width:0; }
.ai-agent-config > * { min-width:0; }
.warehouse-location-layout { grid-template-columns:minmax(0,1.25fr) minmax(340px,1fr) !important; gap:16px !important; }
.warehouse-floorplan .sx-card-body > div { margin-bottom:22px !important; }
.warehouse-floorplan .sx-card-body > div > div:last-child { gap:8px !important; }
.warehouse-pda-layout { grid-template-columns:350px minmax(0,1fr) !important; gap:18px !important; }
.ticket-session-strip .sx-card { border-top:3px solid var(--brand-line); box-shadow:none !important; }
.ticket-session-strip .sx-card:hover { background:var(--brand-weak); }
.group-stage-nav { display:flex; gap:0; border:1px solid #e5e1e5; background:#fff; border-radius:7px; margin-bottom:18px; overflow:hidden; }
.group-stage-nav a { display:flex; align-items:center; justify-content:center; flex:1; gap:8px; color:#788598; padding:12px 8px; font-size:13px; text-decoration:none; border-bottom:2px solid transparent; }
.group-stage-nav a.active { border-color:var(--brand); background:var(--brand-weak); color:var(--brand); font-weight:600; }
.group-stage-nav a + a { border-left:1px solid #edf0f4; }
.group-stage-nav a span { font-family:var(--font-num); opacity:.65; }
@media (max-width:1350px) {
  .oa-task-list-head, .oa-task-row { grid-template-columns:minmax(260px,1.7fr) minmax(140px,1fr) 144px 110px; gap:10px; padding-left:16px; padding-right:16px; }
  .material-purchase-layout { grid-template-columns:minmax(0,1fr) !important; }
  .guide-scene-layout { grid-template-columns:minmax(0,1fr) 260px; gap:12px; }
  .guide-scene-row { gap:10px; }
}
@media (max-width:1100px) {
  .sx-workspace, .guide-scene-layout, .warehouse-location-layout, .warehouse-pda-layout { grid-template-columns:minmax(0,1fr) !important; }
  .ai-agent-config { grid-template-columns:1fr !important; }
  .oa-task-list { overflow:auto; }
  .oa-task-list-head,.oa-task-row { min-width:750px; }
}
@media (prefers-reduced-motion:reduce) { .sx-shell * { scroll-behavior:auto !important; animation-duration:.01ms !important; transition-duration:.01ms !important; } }
/* ============================ 登录页 ============================ */
.lg {
  position: fixed;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 7vw;
  padding: 0 5vw;
  background: #04070f;
  color: #e6f1ff;
  font-family: var(--font-cn);
  overflow: hidden;
}
.lg-bg {
  position: absolute;
  inset: 0;
  background:
    radial-gradient(circle at 22% 28%, rgba(34, 211, 238, 0.16), transparent 55%),
    radial-gradient(circle at 82% 72%, rgba(59, 130, 246, 0.15), transparent 55%),
    linear-gradient(160deg, #04070f 0%, #071426 58%, #04070f 100%);
}
.lg-grid {
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(rgba(34, 211, 238, 0.07) 1px, transparent 1px),
    linear-gradient(90deg, rgba(34, 211, 238, 0.07) 1px, transparent 1px);
  background-size: 46px 46px;
  -webkit-mask: radial-gradient(circle at 50% 50%, #000 28%, transparent 76%);
  mask: radial-gradient(circle at 50% 50%, #000 28%, transparent 76%);
}

/* 左侧品牌区 */
.lg-left {
  position: relative;
  z-index: 2;
  width: 470px;
  flex: none;
}
.lg-logo {
  height: 40px;
  margin-bottom: 30px;
  filter: drop-shadow(0 0 14px rgba(34, 211, 238, 0.35));
}
.lg-left h1 {
  margin: 0 0 28px;
  font-size: 30px;
  line-height: 1.36;
  letter-spacing: 0.02em;
  font-weight: 600;
}
.lg-left h1 span {
  display: block;
  margin-top: 12px;
  font-size: 12.5px;
  font-weight: 400;
  letter-spacing: 0.2em;
  color: #7c93b8;
}
.lg-left ul {
  list-style: none;
  margin: 0 0 44px;
  padding: 0;
  display: grid;
  gap: 13px;
}
.lg-left li {
  font-size: 13.5px;
  color: #9db4d0;
  display: flex;
  align-items: baseline;
  gap: 9px;
}
.lg-left li b {
  font-family: var(--font-num);
  font-size: 21px;
  color: #5ff0ff;
  text-shadow: 0 0 18px rgba(34, 211, 238, 0.5);
}
.lg-clock {
  display: flex;
  align-items: baseline;
  gap: 14px;
}
.lg-clock b {
  font-family: var(--font-num);
  font-size: 40px;
  letter-spacing: 0.06em;
  color: #eafcff;
  text-shadow: 0 0 26px rgba(34, 211, 238, 0.45);
}
.lg-clock span {
  font-size: 12px;
  color: #6f8aa8;
}

/* 右侧表单 */
.lg-panel {
  position: relative;
  z-index: 2;
  width: 396px;
  flex: none;
}
.lg-card {
  padding: 26px 26px 20px;
  border-radius: 14px;
  background: rgba(8, 22, 40, 0.88);
  border: 1px solid rgba(34, 211, 238, 0.22);
  box-shadow:
    0 26px 64px rgba(0, 0, 0, 0.6),
    inset 0 0 42px rgba(34, 211, 238, 0.06);
}
.lg-card-hd {
  display: flex;
  gap: 11px;
  align-items: flex-start;
  margin-bottom: 20px;
}
.lg-card-hd .anticon {
  font-size: 20px;
  color: #22d3ee;
  margin-top: 2px;
}
.lg-card-hd b {
  display: block;
  font-size: 16px;
  margin-bottom: 5px;
  letter-spacing: 0.04em;
}
.lg-card-hd span {
  display: block;
  font-size: 11.5px;
  line-height: 1.55;
  color: #7c93b8;
}
.lg-label {
  display: block;
  margin: 14px 0 6px;
  font-size: 12px;
  letter-spacing: 0.1em;
  color: #8fb0cc;
}

/* 深色输入框 */
.lg .ant-input-affix-wrapper,
.lg .ant-input {
  background: rgba(4, 12, 22, 0.75) !important;
  border-color: rgba(34, 211, 238, 0.22) !important;
  color: #e6f1ff !important;
}
.lg .ant-input-affix-wrapper:hover,
.lg .ant-input:hover {
  border-color: rgba(34, 211, 238, 0.45) !important;
}
.lg .ant-input-affix-wrapper-focused {
  border-color: #22d3ee !important;
  box-shadow: 0 0 0 2px rgba(34, 211, 238, 0.16) !important;
}
.lg .ant-input::placeholder {
  color: #4e6485 !important;
}
.lg .ant-input-prefix .anticon {
  color: #4e6485;
}
.lg .ant-input-suffix .anticon {
  color: #6f8aa8;
}

.lg-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin: 14px 0 2px;
}
.lg-row .ant-checkbox-wrapper {
  font-size: 12.5px;
  color: #9db4d0;
}
.lg-hint {
  font-size: 11.5px;
  color: #6f8aa8;
}
.lg-err {
  margin-top: 12px;
  padding: 8px 11px;
  border-radius: 6px;
  font-size: 12.5px;
  color: #ff9a90;
  background: rgba(255, 77, 61, 0.12);
  border: 1px solid rgba(255, 77, 61, 0.34);
}
.lg-submit {
  margin-top: 18px;
  height: 44px !important;
  font-size: 14px !important;
  font-weight: 600 !important;
  letter-spacing: 0.06em;
  color: #041018 !important;
  border: none !important;
  background: linear-gradient(90deg, #5ff0ff, #22d3ee 45%, #3b82f6) !important;
  box-shadow: 0 10px 26px rgba(34, 211, 238, 0.38) !important;
}
.lg-submit:hover {
  filter: brightness(1.08);
}
.lg-foot {
  display: flex;
  justify-content: space-between;
  margin-top: 16px;
  font-size: 11px;
  color: #4e6485;
}

@media (max-width: 1080px) {
  .lg {
    flex-direction: column;
    gap: 28px;
    justify-content: center;
  }
  .lg-left {
    width: 100%;
    max-width: 420px;
  }
  .lg-left h1 {
    font-size: 22px;
  }
  .lg-left ul {
    display: none;
  }
  .lg-panel {
    width: 100%;
    max-width: 420px;
  }
}

/* 启动时的鉴权占位 */
.lg-splash {
  position: fixed;
  inset: 0;
  display: grid;
  place-items: center;
  background: radial-gradient(circle at 50% 45%, #0a1a2d, #04070f 70%);
}
.lg-splash-inner {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 18px;
}
.lg-splash-inner img {
  height: 34px;
  opacity: 0.9;
  filter: drop-shadow(0 0 14px rgba(34, 211, 238, 0.35));
}
.lg-splash-inner span {
  font-size: 12.5px;
  letter-spacing: 0.2em;
  color: #6f8aa8;
  animation: lgpulse 1.6s ease-in-out infinite;
}
@keyframes lgpulse {
  0%,
  100% {
    opacity: 0.45;
  }
  50% {
    opacity: 1;
  }
}
/* Roof coordinates use the same ground plane and elevation as VenueScene. */
.roof-name {
  position: absolute;
  width: 300px;
  height: 36px;
  transform: translate3d(-242px, 6px, 150px) rotateX(-90deg);
  transform-origin: 0 0;
  transform-style: preserve-3d;
  pointer-events: none;
}

.roof-name > span,
.roof-name-shadow {
  font: 800 28px/36px "Microsoft YaHei", "PingFang SC", sans-serif;
  letter-spacing: 1px;
  white-space: nowrap;
  text-align: center;
}

.roof-name > span {
  position: absolute;
  inset: 0;
  backface-visibility: visible;
}

.roof-name-face {
  color: #eff4f8;
  background: linear-gradient(#fff 10%, #e0eaf1 45%, #b0c1ce 72%, #f6fafc);
  background-clip: text;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  -webkit-text-stroke: .3px #e7eff4;
  transform: translateZ(.35px);
}

.roof-name-support {
  position: absolute;
  top: 33px;
  width: 2px;
  height: 9px;
  background: linear-gradient(90deg, #c4d0da, #536d7e);
  transform: translateZ(-3px);
}

.roof-name-shadow {
  position: absolute;
  width: 300px;
  height: 36px;
  color: #263d4c42;
  transform-origin: 0 0;
  transform: translate3d(-237px, -18px, 108.2px) skewX(-18deg) scaleY(.7);
  pointer-events: none;
}

.roof-flag {
  position: absolute;
  width: 1px;
  height: 118px;
  transform-origin: 0 0;
  transform-style: preserve-3d;
  pointer-events: none;
}

.roof-flag-pole {
  position: absolute;
  top: 0;
  left: -1px;
  width: 2px;
  height: 118px;
  background: linear-gradient(90deg, #657c8a, #edf3f6 55%, #93a8b6);
  transform-origin: 50% 50%;
}

.roof-flag-pole.cross { transform: rotateY(90deg); }
.roof-flag-finial { position: absolute; width: 4px; height: 4px; left: -2px; top: -3px; background: #e4dcc0; border-radius: 50%; }
.roof-flag-cloth { position: absolute; left: 1px; top: 5px; width: 52px; height: 34.6667px; transform-style: preserve-3d; }
.roof-flag-panel { position: absolute; top: 0; width: 6.5px; height: 34.6667px; transform-origin: 0 50%; transform-style: preserve-3d; animation: roof-flag-wave 3.8s ease-in-out infinite; }
.roof-flag-panel.at-pole { animation: none; }
.roof-flag-ink { position: absolute; inset: 0; width: 6.7px; overflow: hidden; backface-visibility: visible; }
.roof-flag-ink::after { content: ''; position: absolute; inset: 0; background: linear-gradient(100deg, #ffffff12, transparent 45%, #44000019); }
.roof-flag-art { position: absolute; top: 0; display: block; max-width: none; }

@keyframes roof-flag-wave {
  0%, 100% { transform: rotateY(-8deg); }
  50% { transform: rotateY(10deg); }
}

@media (prefers-reduced-motion: reduce) {
  .roof-flag-panel { animation: none; transform: rotateY(-2deg); }
}
.sx-canteen[data-section="site"] .sx-content { display:flex; flex-direction:column; padding:16px 20px; overflow:hidden; }
.cashier-desk { display:flex; flex-direction:column; flex:1; min-height:0; gap:16px; }
.cashier-desk button { font:inherit; cursor:pointer; }
.cashier-desk button:focus-visible { outline:3px solid var(--brand-line); outline-offset:2px; }
.cashier-desk .ant-btn { min-height:44px; }
.cashier-topbar { display:flex; align-items:center; gap:24px; flex:none; min-height:46px; }
.cashier-heading { display:flex; align-items:center; gap:14px; }
.cashier-heading h1 { margin:0; font-size:22px; font-weight:650; }
.cashier-heading > span { font-size:12px; color:#788598; border-left:1px solid #dce2e9; padding-left:14px; }
.cashier-mode { display:flex; padding:4px; border:1px solid #dfe4e9; border-radius:9px; background:#e9edf0; }
.cashier-mode button { display:flex; align-items:center; gap:8px; min-height:38px; padding:0 20px; border:0; border-radius:6px; color:#627084; background:transparent; font-size:14px; }
.cashier-mode button[aria-selected="true"] { background:#fff; color:var(--brand); font-weight:650; box-shadow:0 1px 4px #26334512; }
.cashier-mode em { font-style:normal; font-size:11px; background:var(--brand-soft); color:var(--brand); padding:2px 6px; border-radius:8px; }
.cashier-history { margin-left:auto; }
.cashier-workspace { display:grid; grid-template-columns:minmax(0,1fr) clamp(380px,28vw,460px); gap:16px; flex:1; min-height:0; }
.cashier-catalog,.cashier-order,.cashier-scan-panel,.cashier-pending { background:#fff; border:1px solid #e1e6e9; border-radius:10px; min-width:0; min-height:0; overflow:hidden; }
.cashier-catalog { display:flex; flex-direction:column; }
.cashier-search { display:flex; align-items:center; gap:16px; padding:18px 18px 12px; flex:none; }
.cashier-search .ant-input-affix-wrapper { height:44px; max-width:520px; font-size:15px; border-color:#dce2e7; }
.cashier-search .ant-input-prefix { color:#8a95a4; margin-right:8px; }
.cashier-menu-count { margin-left:auto; color:#788598; font-size:12px; white-space:nowrap; }
.cashier-categories { display:flex; gap:8px; padding:0 18px 12px; flex:none; overflow-x:auto; }
.cashier-categories button { min-width:64px; min-height:44px; padding:0 16px; border-radius:7px; border:1px solid #e4e8eb; background:#fff; color:#526174; white-space:nowrap; }
.cashier-categories button[aria-pressed="true"] { background:var(--brand); border-color:var(--brand); color:#fff; font-weight:600; }
.cashier-price-mode { display:flex; align-items:center; justify-content:space-between; gap:12px; padding:10px 18px; border-top:1px solid #f0f2f4; border-bottom:1px solid #e9edf0; background:#fafbf9; }
.cashier-price-mode > span { color:#627084; font-size:12px; }
.cashier-price-mode .ant-segmented-item-label { min-height:36px; line-height:36px; min-width:58px; font-size:13px; }
.cashier-menu-scroll { padding:16px 18px; overflow:auto; flex:1; min-height:0; scrollbar-width:thin; }
.cashier-dishes { display:grid; grid-template-columns:repeat(auto-fill,minmax(155px,1fr)); align-content:start; gap:12px; }
.cashier-dish { border:1px solid #e4e6e1; background:#fffefa; border-radius:9px; text-align:left; padding:14px; height:146px; display:flex; flex-direction:column; color:#263345; transition:border-color .12s,background .12s,transform .12s; }
.cashier-dish:hover { border-color:var(--brand); background:var(--brand-weak); }
.cashier-dish:active { transform:scale(.98); }
.cashier-dish.is-added { border-color:var(--brand-line); background:#fcf8f0; }
.cashier-dish:disabled { opacity:.6; cursor:not-allowed; }
.cashier-dish-meta { display:flex; align-items:center; justify-content:space-between; gap:4px; font-size:11px; color:#879085; }
.cashier-dish-meta > b { font-weight:600; color:var(--brand); font-size:11px; }
.cashier-dish > strong { font-size:16px; font-weight:600; margin-top:12px; line-height:1.4; }
.cashier-dish-bottom { display:flex; align-items:center; justify-content:space-between; margin-top:auto; }
.cashier-dish-bottom > span { font-size:24px; font-weight:600; color:#8b591d; }
.cashier-dish-bottom small { font-size:13px; margin-right:3px; }
.cashier-dish-bottom i { display:grid; place-items:center; border-radius:50%; width:30px; height:30px; background:var(--brand-weak); color:var(--brand); font-size:14px; }
.cashier-order { display:flex; flex-direction:column; }
.cashier-order-head { display:flex; align-items:center; gap:10px; padding:10px 16px; min-height:65px; border-bottom:1px solid #e9edf0; flex:none; }
.cashier-order-head h2 { margin:0; font-size:16px; font-weight:650; }
.cashier-order-head > span { font-size:12px; color:#788598; }
.cashier-order-head .ant-btn { margin-left:auto; padding:0 8px; color:#788598; }
.cashier-order-list { overflow:auto; flex:1; min-height:0; padding:0 14px; scrollbar-width:thin; overscroll-behavior:contain; }
.cashier-order-line { padding:15px 2px; border-bottom:1px solid #eef0f2; scroll-margin:8px; }
.cashier-order-line.is-current { background:linear-gradient(90deg,var(--brand-weak),transparent); }
.cashier-line-title { display:flex; align-items:flex-start; gap:12px; margin-bottom:11px; }
.cashier-line-title > b { font-size:15px; font-weight:600; flex:1; }
.cashier-line-title > strong { font-size:17px; white-space:nowrap; }
.cashier-line-controls { display:flex; align-items:center; gap:7px; }
.cashier-line-controls > span { font-size:12px; color:#627084; flex:1; line-height:1.5; }
.cashier-line-controls i { display:block; font-style:normal; color:#8a95a4; }
.cashier-quantity { display:flex; align-items:center; gap:0; border:1px solid #dfe4e9; border-radius:7px; overflow:hidden; flex:none; }
.cashier-quantity .ant-btn { height:44px; width:44px; padding:0; border:0; border-radius:0; box-shadow:none; }
.cashier-quantity .ant-input-number { width:46px; border:0; border-radius:0; box-shadow:none; background:#f7f8f9; }
.cashier-quantity .ant-input-number-input { height:44px; padding:0; text-align:center; font-size:16px; font-weight:600; }
.cashier-line-controls .cashier-remove { width:44px; min-width:44px; height:44px; padding:0; color:#9099a6; }
.cashier-order-footer { padding:16px; border-top:1px solid #e2e6ea; background:#fff; box-shadow:0 -5px 14px #26334505; flex:none; }
.cashier-order-footer > div { display:flex; align-items:center; justify-content:space-between; gap:16px; margin-bottom:13px; }
.cashier-order-footer > div > span { font-size:13px; color:#627084; }
.cashier-order-footer strong { font-size:32px; line-height:1.15; color:var(--brand); }
.cashier-order-footer strong small { font-size:17px; margin-right:4px; }
.cashier-desk .cashier-pay-button { width:100%; height:50px; font-size:17px; font-weight:600; border-radius:7px; }
.cashier-empty { height:100%; min-height:180px; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:10px; color:#8a95a4; font-size:13px; text-align:center; }
.cashier-empty > .anticon { font-size:34px; color:#c0c7cc; margin-bottom:4px; }
.cashier-empty > b { font-size:15px; font-weight:500; color:#627084; }
.cashier-pickup-workspace { display:grid; grid-template-columns:minmax(0,1fr) clamp(340px,34vw,520px); flex:1; min-height:0; gap:16px; }
.cashier-scan-panel { padding:28px; overflow:auto; }
.cashier-section-title { display:flex; align-items:center; gap:12px; color:var(--brand); margin-bottom:28px; }
.cashier-section-title h2 { color:#263345; font-size:20px; margin:0; }
.cashier-section-title > .anticon { font-size:24px; }
.cashier-scan-panel > label { display:block; font-size:14px; margin-bottom:12px; }
.cashier-scan-input { display:flex; gap:10px; }
.cashier-scan-input .ant-input-affix-wrapper,.cashier-scan-input .ant-btn { min-height:52px; font-size:16px; }
.cashier-scan-result { margin-top:28px; padding:48px 20px; background:#f7f8f9; border-radius:9px; text-align:center; color:#8995a4; }
.cashier-scan-result > .anticon { font-size:46px; }
.cashier-scan-result h3 { font-size:20px; margin:18px 0 10px; }
.cashier-scan-result p { line-height:1.8; font-size:13px; }
.cashier-scan-result.is-success { background:#eff8f2; color:#277b53; }
.cashier-scan-result.is-error { background:#fff3ef; color:#b14e38; }
.cashier-pending { display:flex; flex-direction:column; }
.cashier-pending-list { padding:16px; overflow:auto; min-height:0; flex:1; }
.cashier-pending-list > button { width:100%; display:block; padding:18px; margin-bottom:12px; text-align:left; border:1px solid #e6e1d8; border-radius:8px; background:#fffdf7; }
.cashier-pending-list > button > div { display:flex; justify-content:space-between; align-items:center; gap:12px; }
.cashier-pending-list > button p { display:flex; justify-content:space-between; gap:10px; color:#788598; font-size:12px; margin:12px 0 18px; }
.cashier-pending-action { font-size:12px; color:var(--brand); }
.cashier-payment-total { padding:16px; text-align:center; background:var(--brand-weak); border-radius:8px; margin:18px 0; }
.cashier-payment-modal .ant-modal-content { display:flex; flex-direction:column; max-height:calc(100dvh - 32px); }
.cashier-payment-modal .ant-modal-body { min-height:0; overflow:auto; }
.cashier-payment-modal .ant-modal-header,.cashier-payment-modal .ant-modal-footer { flex:none; }
.cashier-payment-total > span { color:#627084; font-size:13px; display:block; }
.cashier-payment-total strong { display:block; font-size:38px; color:var(--brand); margin-top:8px; }
.cashier-payment-items { max-height:180px; overflow:auto; border-bottom:1px solid #e9edf0; padding-bottom:10px; }
.cashier-payment-items > div { display:flex; justify-content:space-between; gap:12px; padding:8px 0; font-size:14px; }
.cashier-payment-items small { color:#788598; margin-left:4px; }
.cashier-payment-method { margin-top:20px; }
.cashier-payment-method label { display:block; margin-bottom:10px; }
.cashier-payment-method .ant-segmented-item-label { min-height:44px; line-height:44px; }
.cashier-payment-note { margin:14px 0 6px; line-height:1.7; color:#788598; font-size:12px; }
.cashier-cash { margin-top:18px; display:grid; grid-template-columns:80px 1fr; gap:12px; align-items:center; }
.cashier-cash .ant-input-number,.cashier-cash .ant-input-number-affix-wrapper { width:100%; }
.cashier-cash .ant-input-number-input { height:44px; font-size:20px; }
.cashier-cash > div:last-child { grid-column:1/-1; display:flex; justify-content:space-between; padding:12px 0; font-size:16px; }
.cashier-payment-actions { display:flex; gap:12px; padding-top:10px; }
.cashier-payment-actions .ant-btn { flex:1; height:46px; }
.cashier-receipt { text-align:center; padding:22px 0; }
.cashier-receipt > .anticon { font-size:46px; color:#287e55; }
.cashier-receipt h2 { font-size:23px; margin:18px 0 24px; }
.cashier-receipt > span { display:block; color:#788598; }
.cashier-receipt > strong { font-size:23px; display:block; margin:8px 0; }
.cashier-receipt p { color:#788598; font-size:13px; }
@media (max-width:1150px) {
  .cashier-workspace { grid-template-columns:minmax(0,1fr) 340px; gap:12px; }
  .cashier-heading > span,.cashier-menu-count { display:none; }
  .cashier-topbar { gap:14px; }
  .cashier-dishes { grid-template-columns:repeat(auto-fill,minmax(135px,1fr)); gap:10px; }
  .cashier-search,.cashier-categories,.cashier-price-mode { padding-left:12px; padding-right:12px; }
  .cashier-menu-scroll { padding:12px; }
  .cashier-dish { padding:12px; }
}
@media (max-width:900px) {
  .sx-canteen[data-section="site"] .sx-content { padding:12px; }
  .cashier-topbar { flex-wrap:wrap; gap:8px; }
  .cashier-mode { order:3; width:100%; }
  .cashier-mode button { flex:1; justify-content:center; }
  .cashier-workspace,.cashier-pickup-workspace { grid-template-columns:1fr; grid-template-rows:minmax(0,1fr) minmax(0,1fr); gap:10px; }
  .cashier-desk { gap:10px; }
  .cashier-price-mode { padding-block:4px; }
  .cashier-search { padding-top:10px; padding-bottom:8px; }
  .cashier-categories { padding-bottom:8px; }
  .cashier-order-head { min-height:44px; padding-block:0; }
  .cashier-order-footer { padding:10px 12px; }
  .cashier-order-footer > div { margin-bottom:8px; }
  .cashier-order-footer strong { font-size:26px; }
  .cashier-desk .cashier-pay-button { height:44px; }
}
/* =========================================================
   全局智慧助手（AgentDock）
   —— 右下角悬浮球 + 弹出式大面板（非抽屉）
   —— 主题随挂载环境自适应：dashboard 深色科技风 / console 浅色后台
   ========================================================= */

.ag {
  position: fixed;
  right: 16px;
  bottom: 20px;
  z-index: 900;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 10px;
}
.ag.dashboard {
  bottom: 44px; /* 避开驾驶舱底栏 */
}

/* ---------- 悬浮球：两套环境同一形象，驾驶舱里加亮以便在深底上识别 ---------- */
.ag-fab {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  height: 40px;
  padding: 0 15px;
  border-radius: 20px;
  border: 1px solid rgba(118, 203, 217, 0.5);
  background: linear-gradient(135deg, #0d2b3e, #14405c);
  color: #9fe0ec;
  font-size: 13px;
  cursor: pointer;
  box-shadow: 0 4px 16px rgba(3, 20, 33, 0.4);
}
.ag-fab:hover {
  filter: brightness(1.15);
}
.ag.dashboard .ag-fab {
  border-color: rgba(118, 203, 217, 0.7);
  box-shadow: 0 0 0 3px rgba(118, 203, 217, 0.12), 0 4px 18px rgba(0, 0, 0, 0.5);
}
.ag-fab .ag-fab-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: #76cbd9;
  box-shadow: 0 0 8px #76cbd9;
  margin-left: 2px;
}

/* ---------- 弹出面板：右下角大窗口 ---------- */
.ag-panel {
  width: min(440px, 92vw);
  height: min(620px, 76vh);
  display: flex;
  flex-direction: column;
  border-radius: 14px;
  overflow: hidden;
  animation: ag-pop 0.22s cubic-bezier(0.22, 0.61, 0.36, 1) both;
  transform-origin: 100% 100%;
}
@keyframes ag-pop {
  from {
    opacity: 0;
    transform: scale(0.94) translateY(10px);
  }
  to {
    opacity: 1;
    transform: scale(1) translateY(0);
  }
}

/* 头部 */
.ag-head {
  flex: none;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 13px 14px;
  border-bottom: 1px solid transparent;
}
.ag-head-txt {
  display: flex;
  flex-direction: column;
  gap: 3px;
  min-width: 0;
}
.ag-head-txt b {
  font-size: 14px;
  font-weight: 600;
  letter-spacing: 0.5px;
}
.ag-place {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 11px;
  padding: 1px 8px;
  border-radius: 9px;
  width: fit-content;
  white-space: nowrap;
}
.ag-ava {
  flex: none;
  width: 32px;
  height: 32px;
  border-radius: 10px;
  display: grid;
  place-items: center;
  font-size: 15px;
  background: linear-gradient(135deg, #0d2b3e, #14405c);
  color: #9fe0ec;
  border: 1px solid rgba(118, 203, 217, 0.4);
}
.ag-ava.sm {
  width: 26px;
  height: 26px;
  border-radius: 8px;
  font-size: 12px;
}
.ag-close {
  margin-left: auto;
  flex: none;
  width: 28px;
  height: 28px;
  border-radius: 8px;
  border: 0;
  background: transparent;
  cursor: pointer;
  display: grid;
  place-items: center;
  font-size: 12px;
}
.ag-close:hover {
  background: rgba(127, 145, 160, 0.18);
}
.ag-tool {
  flex: none;
  margin-left: auto;
  width: 28px;
  height: 28px;
  border-radius: 8px;
  border: 0;
  background: transparent;
  cursor: pointer;
  display: grid;
  place-items: center;
  font-size: 12px;
}
.ag-tool + .ag-close {
  margin-left: 0;
}
.ag-tool:hover {
  background: rgba(127, 145, 160, 0.18);
}
.ag.dashboard .ag-tool {
  color: #8fb0c4;
}
.ag.console .ag-tool {
  color: #788598;
}

/* 消息区 */
.ag-msgs {
  flex: 1;
  min-height: 0;
  overflow: auto;
  display: flex;
  flex-direction: column;
  gap: 12px;
  padding: 4px 14px 10px;
}
.ag-msg {
  display: flex;
  gap: 8px;
  align-items: flex-start;
}
.ag-msg.me {
  justify-content: flex-end;
}
.ag-bubble {
  max-width: 82%;
  padding: 9px 13px;
  border-radius: 12px;
  font-size: 13.5px;
  line-height: 1.8;
}
.ag-msg.ai .ag-bubble {
  border-top-left-radius: 4px;
}
.ag-msg.me .ag-bubble {
  background: #2f7fa3;
  color: #fff;
  border-top-right-radius: 4px;
}
.ag-bubble p {
  margin: 0;
  white-space: pre-wrap;
  word-break: break-word;
}
.ag-caret {
  display: inline-block;
  width: 2px;
  height: 14px;
  background: currentColor;
  margin-left: 2px;
  vertical-align: -2px;
  animation: ag-caret 0.8s steps(2) infinite;
}
@keyframes ag-caret {
  50% {
    opacity: 0;
  }
}
.ag-cite {
  display: block;
  margin-top: 7px;
  font-size: 11px;
}
.ag-thinking {
  display: inline-flex;
  gap: 4px;
  padding: 13px 15px;
}
.ag-thinking i {
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: currentColor;
  opacity: 0.5;
  animation: ag-dot 1s infinite;
}
.ag-thinking i:nth-child(2) {
  animation-delay: 0.16s;
}
.ag-thinking i:nth-child(3) {
  animation-delay: 0.32s;
}
@keyframes ag-dot {
  40% {
    opacity: 1;
    transform: translateY(-2px);
  }
}

/* 推荐卡 */
.ag-cards {
  flex: none;
  padding: 10px 14px 4px;
  display: flex;
  flex-direction: column;
  gap: 7px;
}
.ag-cards-hd {
  font-size: 11px;
  letter-spacing: 1px;
}
.ag-card {
  display: flex;
  align-items: center;
  gap: 9px;
  width: 100%;
  text-align: left;
  padding: 10px 12px;
  border-radius: 9px;
  border: 1px solid transparent;
  cursor: pointer;
  font: inherit;
  transition: border-color 0.15s, background 0.15s;
}
.ag-card b {
  font-size: 13px;
  font-weight: 500;
  flex: none;
  white-space: nowrap;
}
.ag-card span {
  font-size: 11px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ag-card em {
  margin-left: auto;
  font-style: normal;
}

/* 输入区：自绘轻量输入框（胶囊形、细边框，随主题适配） */
.ag-input {
  flex: none;
  display: flex;
  gap: 8px;
  align-items: center;
  padding: 11px 14px 13px;
  border-top: 1px solid transparent;
}
.ag-text {
  flex: 1;
  min-width: 0;
  height: 34px;
  padding: 0 13px;
  border-radius: 17px;
  border: 1px solid transparent;
  background: transparent;
  font: inherit;
  font-size: 13px;
  color: inherit;
  outline: none;
  transition: border-color 0.15s, box-shadow 0.15s;
}
.ag-text::placeholder {
  opacity: 0.55;
}
.ag-text:focus {
  border-color: #5fb6cf;
  box-shadow: 0 0 0 2px rgba(118, 203, 217, 0.14);
}
.ag-send {
  flex: none;
  width: 34px;
  height: 34px;
  border-radius: 50%;
  border: 1px solid transparent;
  cursor: pointer;
  display: grid;
  place-items: center;
  font-size: 13px;
  transition: filter 0.15s;
}
.ag-send:disabled {
  opacity: 0.4;
  cursor: default;
}

/* =========================================================
   主题一：驾驶舱（深色科技风，跟随 cockpit 的藏青 + 青蓝）
   ========================================================= */
.ag.dashboard .ag-panel {
  background: linear-gradient(180deg, #102135, #0b1a2b);
  border: 1px solid #2b4a63;
  box-shadow: 0 14px 44px rgba(0, 0, 0, 0.55), 0 0 0 1px rgba(118, 203, 217, 0.06);
  color: #dcebf4;
}
.ag.dashboard .ag-head {
  border-bottom-color: #22405a;
}
.ag.dashboard .ag-place {
  background: rgba(118, 203, 217, 0.16);
  color: #9fd9e6;
}
.ag.dashboard .ag-close {
  color: #8fb0c4;
}
.ag.dashboard .ag-msg.ai .ag-bubble {
  background: rgba(118, 203, 217, 0.1);
  border: 1px solid rgba(118, 203, 217, 0.18);
  color: #d7e9f2;
}
.ag.dashboard .ag-cite {
  color: #7fa3bb;
}
.ag.dashboard .ag-cards {
  border-top: 1px solid #22405a;
}
.ag.dashboard .ag-cards-hd {
  color: #7f9db3;
}
.ag.dashboard .ag-card {
  background: rgba(118, 203, 217, 0.05);
  border-color: #26425c;
  color: #d7e9f2;
}
.ag.dashboard .ag-card:hover {
  border-color: #4d9db5;
  background: rgba(118, 203, 217, 0.1);
}
.ag.dashboard .ag-card span {
  color: #8fb0c4;
}
.ag.dashboard .ag-card em {
  color: #5fb6cf;
}
.ag.dashboard .ag-input {
  border-top-color: #22405a;
}
.ag.dashboard .ag-text {
  background: rgba(118, 203, 217, 0.06);
  border-color: #2b4a63;
}
.ag.dashboard .ag-text:focus {
  border-color: #4d9db5;
  box-shadow: 0 0 0 2px rgba(118, 203, 217, 0.12);
}
.ag.dashboard .ag-send {
  background: rgba(118, 203, 217, 0.12);
  border-color: rgba(118, 203, 217, 0.4);
  color: #9fe0ec;
}
.ag.dashboard .ag-send:not(:disabled):hover {
  filter: brightness(1.2);
}

/* =========================================================
   主题二：子系统（浅色 B 端后台）
   ========================================================= */
.ag.console .ag-panel {
  background: #fff;
  border: 1px solid #d9e1ea;
  box-shadow: 0 14px 40px rgba(15, 23, 42, 0.2);
  color: #263345;
}
.ag.console .ag-head {
  border-bottom-color: #edf1f6;
}
.ag.console .ag-place {
  background: #eef6f9;
  color: #3d7d95;
}
.ag.console .ag-close {
  color: #788598;
}
.ag.console .ag-msg.ai .ag-bubble {
  background: #f1f5f9;
  color: #263345;
}
.ag.console .ag-cite {
  color: #8a97ab;
}
.ag.console .ag-cards {
  border-top: 1px solid #edf1f6;
}
.ag.console .ag-cards-hd {
  color: #8a97ab;
}
.ag.console .ag-card {
  background: #f8fafc;
  border-color: #e2e8f0;
  color: #263345;
}
.ag.console .ag-card:hover {
  border-color: #5fb6cf;
  background: #f0f8fb;
}
.ag.console .ag-card span {
  color: #718097;
}
.ag.console .ag-card em {
  color: #2f7fa3;
}
.ag.console .ag-input {
  border-top-color: #edf1f6;
}
.ag.console .ag-text {
  background: #f5f8fb;
  border-color: #e2e8f0;
}
.ag.console .ag-send {
  background: #2f7fa3;
  color: #fff;
}
.ag.console .ag-send:not(:disabled):hover {
  filter: brightness(1.1);
}

/* 子系统内容区底部预留悬浮球高度，避免表格分页被遮住 */
.sx-shell .sx-content {
  padding-bottom: 76px;
}

@media (prefers-reduced-motion: reduce) {
  .ag-panel {
    animation: none;
  }
}
/* Shared shell: role changes never alter the header, tabs or viewport geometry. */
.cp-app, .cp-overlay { --cp-bg:#0b1421; --cp-surface:#111e2e; --cp-surface-2:#162537; --cp-line:#263548; --cp-text:#e5edf5; --cp-muted:#8192a7; --cp-accent:#76cbd9; --cp-positive:#87cfb4; --cp-soft:rgba(118,203,217,.09); --cp-radius:12px; color:var(--cp-text); font-family:"Microsoft YaHei","PingFang SC",sans-serif; }
/* 三个业务角色与馆长共用同一套深藏青 + 青蓝配色，仅内容布局不同 */
.cp-theme-edu, .cp-theme-box, .cp-theme-ops { }
.cp-app { height:100dvh; display:flex; flex-direction:column; background:var(--cp-bg); font-size:clamp(12px,1.2vh,15px); transition:background-color .3s,color .3s; overflow:hidden; }
.cp-app button, .cp-overlay button { font:inherit; cursor:pointer; }
.cp-app button { color:inherit; }
.cp-app button:focus-visible, .cp-role-frame:focus-visible, .cp-overlay button:focus-visible { outline:2px solid var(--cp-accent); outline-offset:4px; }
.cp-app h1,.cp-app h2,.cp-app h3,.cp-app p { margin:0; color:inherit; }
.cp-app h2 { font-size:clamp(14px,1.48vh,18px); font-weight:600; letter-spacing:.015em; }
.cp-app button { -webkit-tap-highlight-color:transparent; }
.cp-app button:hover { filter:brightness(1.08); }
.cp-app svg { flex-shrink:0; }
.cp-header { height:clamp(62px,7vh,78px); flex:none; display:flex; align-items:center; padding:0 1.5vw; gap:24px; border-bottom:1px solid var(--cp-line); background:var(--cp-bg); }
.cp-brand { display:flex; align-items:center; gap:20px; flex:none; }
.cp-brand img { width:112px; height:33px; object-fit:contain; }
.cp-brand-divider { height:30px; width:1px; background:var(--cp-line); }
.cp-brand>div { display:flex; flex-direction:column; gap:7px; }
.cp-brand b { font-size:clamp(16px,1.8vh,21px); font-weight:600; letter-spacing:1.1px; white-space:nowrap; }
.cp-brand>div>span { font:9px "Segoe UI",sans-serif; letter-spacing:2.5px; color:var(--cp-muted); }
.cp-header-center { display:flex; align-items:center; justify-content:center; flex:1; gap:9px; color:var(--cp-muted); font-size:11px; white-space:nowrap; }
.cp-header-tag { margin-left:15px; padding-left:17px; border-left:1px solid var(--cp-line); font-size:10px; letter-spacing:2px; }
.cp-live-dot { width:6px; height:6px; border-radius:100%; display:inline-block; flex-shrink:0; background:var(--cp-positive); box-shadow:0 0 0 4px color-mix(in srgb,var(--cp-positive) 9%,transparent); }
.cp-header-actions { display:flex; align-items:center; gap:clamp(9px,1vw,20px); flex:none; }
.cp-header-actions>button { background:none; border:0; padding:7px 0; display:flex; align-items:center; gap:6px; font-size:11px; color:var(--cp-muted); white-space:nowrap; }
.cp-header-actions>button:hover { color:var(--cp-accent); }
.cp-clock { display:flex; flex-direction:column; align-items:flex-end; gap:2px; border-left:1px solid var(--cp-line); padding-left:20px; min-width:125px; }
.cp-clock b { font:500 clamp(19px,2.1vh,24px) "Bahnschrift","Segoe UI",sans-serif; letter-spacing:1px; font-variant-numeric:tabular-nums; }
.cp-clock span { font-size:10px; color:var(--cp-muted); }
.cp-navigation { height:clamp(60px,6.7vh,76px); flex:none; display:grid; grid-template-columns:1fr auto 1fr; align-items:center; padding:0 1.5vw; border-bottom:1px solid var(--cp-line); }
.cp-nav-label { display:flex; align-items:center; gap:10px; font-size:11px; color:var(--cp-muted); white-space:nowrap; }
.cp-nav-label i { opacity:.35; font-style:normal; margin:0 4px; }
.cp-nav-label b { font-weight:400; color:var(--cp-text); }
.cp-role-tabs { display:flex; gap:5px; padding:4px; background:var(--cp-surface); border:1px solid var(--cp-line); border-radius:9px; }
.cp-role-tabs>button { display:flex; align-items:center; justify-content:center; gap:9px; border:0; background:none; color:var(--cp-muted); width:clamp(126px,9vw,172px); height:37px; border-radius:5px; transition:background .22s,color .22s; }
.cp-role-tabs>button small { font:9px "Bahnschrift",sans-serif; opacity:.55; margin-left:6px; }
.cp-role-tabs>button.active { background:var(--cp-accent); color:#102129; box-shadow:0 2px 9px #0002; font-weight:600; }
.cp-nav-right { display:flex; justify-content:flex-end; align-items:center; gap:10px; color:var(--cp-muted); font-size:11px; }
.cp-nav-right svg { margin-left:20px; }
.cp-viewport { flex:1; min-height:0; padding:clamp(15px,1.8vh,24px) 1.5vw; overflow:auto; scrollbar-gutter:stable; }
.cp-role-frame { height:100%; outline:none; animation:cp-enter .42s cubic-bezier(.22,.61,.36,1) both; }
@keyframes cp-enter { from { opacity:0; transform:translateY(8px); } to { opacity:1; transform:translateY(0); } }
.cp-role { height:100%; min-height:675px; gap:clamp(12px,1.55vh,19px); }
.cp-footer { height:27px; flex:none; display:flex; align-items:center; justify-content:space-between; border-top:1px solid var(--cp-line); padding:0 1.5vw; font-size:9px; color:var(--cp-muted); letter-spacing:.6px; }
.cp-footer>span { display:flex; align-items:center; gap:9px; }
.cp-footer>span:nth-child(2) { opacity:.65; letter-spacing:2px; }
.cp-footer>span:last-child { font:8px "Segoe UI",sans-serif; letter-spacing:1.7px; }
.cp-footer>span:last-child i { width:3px; height:3px; background:var(--cp-muted); border-radius:50%; margin:0 4px; }
.cp-footer .cp-live-dot { width:4px; height:4px; box-shadow:none; }
.cp-role-heading { display:flex; align-items:center; justify-content:space-between; gap:16px; min-width:0; }
.cp-eyebrow { font:9px "Segoe UI",sans-serif; letter-spacing:2.1px; color:var(--cp-accent); display:block; margin-bottom:6px; }
.cp-role-heading h1 { font-size:clamp(22px,2.5vh,30px); line-height:1.35; font-weight:500; letter-spacing:1.2px; }
.cp-role-heading p { font-size:11px; color:var(--cp-muted); margin-top:8px; letter-spacing:.4px; }
.cp-muted { color:var(--cp-muted); font-size:11px; }
.cp-positive { color:var(--cp-positive); display:inline-flex; gap:4px; align-items:center; }
.cp-divider { height:14px; width:1px; background:var(--cp-line); margin:0 6px; }
.cp-panel { background:var(--cp-surface); border:1px solid var(--cp-line); border-radius:var(--cp-radius); display:flex; flex-direction:column; min-width:0; min-height:0; overflow:hidden; }
.cp-panel-head { display:flex; align-items:center; justify-content:space-between; padding:clamp(14px,1.6vh,20px) clamp(14px,1.25vw,24px) 0; gap:12px; flex:none; }
.cp-panel-head .cp-eyebrow { font-size:8px; margin-bottom:7px; }
.cp-panel-body { padding:clamp(12px,1.5vh,18px) clamp(14px,1.25vw,24px); flex:1; min-height:0; min-width:0; }
.cp-link { border:0; background:none; padding:0; display:inline-flex; gap:7px; align-items:center; font-size:10px!important; color:var(--cp-accent)!important; white-space:nowrap; }
.cp-primary-button,.cp-outline-button { border-radius:6px; padding:10px 15px; display:inline-flex; align-items:center; justify-content:center; gap:9px; white-space:nowrap; border:1px solid var(--cp-line); background:transparent; font-size:11px!important; }
.cp-primary-button { background:var(--cp-accent); color:var(--cp-bg)!important; border-color:transparent; }
.cp-outline-button { color:var(--cp-muted)!important; }
.cp-count { font:12px "Bahnschrift",sans-serif; color:var(--cp-accent); background:var(--cp-soft); padding:3px 7px; border-radius:4px; }
.cp-segments { display:flex; align-items:center; gap:3px; padding:3px; background:var(--cp-bg); border-radius:5px; border:1px solid var(--cp-line); flex:none; }
.cp-segments button { border:none; background:transparent; color:var(--cp-muted); padding:5px 8px; font-size:10px; border-radius:3px; white-space:nowrap; }
.cp-segments button.active { background:var(--cp-surface-2); color:var(--cp-accent); }
.cp-stat { position:relative; min-width:0; border:1px solid var(--cp-line); background:var(--cp-surface); padding:clamp(12px,1.65vh,20px) clamp(16px,1.3vw,25px); border-radius:var(--cp-radius); overflow:hidden; }
.cp-stat-label { color:var(--cp-muted); font-size:12px; display:flex; justify-content:space-between; align-items:center; }
.cp-stat-label svg { opacity:.8; }
.cp-stat-number { font:500 clamp(27px,3.3vh,42px)/1.15 "Bahnschrift","Segoe UI",sans-serif; margin-top:9px; letter-spacing:.6px; font-variant-numeric:tabular-nums; }
.cp-stat-number>span { font:11px "Microsoft YaHei",sans-serif; margin-left:7px; color:var(--cp-muted); }
.cp-stat-bottom { font-size:10px; display:flex; align-items:center; gap:9px; color:var(--cp-muted); margin-top:6px; }
.cp-stat>.cp-spark { position:absolute; right:23px; bottom:17px; width:83px; height:29px; color:var(--cp-accent); opacity:.7; }
.cp-spark { width:100px; height:32px; }
.cp-progress { height:5px; background:color-mix(in srgb,var(--cp-muted) 12%,transparent); border-radius:9px; overflow:hidden; }
.cp-progress>i { display:block; height:100%; border-radius:9px; background:var(--cp-accent); transition:width .5s ease; }
.cp-line-chart { min-height:80px; height:100%; width:100%; }
.cp-line-chart svg { height:100%; width:100%; overflow:visible; }
.cp-chart-legend { display:flex; gap:13px; align-items:center; color:var(--cp-muted); font-size:9px; margin:9px 0; }
.cp-chart-legend span { display:flex; align-items:center; gap:5px; }
.cp-chart-legend i { width:12px; height:2px; background:var(--cp-accent); display:inline-block; }
.cp-chart-legend .muted i { background:var(--cp-muted); opacity:.5; }
.cp-chart-legend em { font-style:normal; margin-left:auto; font-size:9px; }
.cp-donut { position:relative; flex-shrink:0; max-width:100%; }
.cp-donut svg { width:100%; height:100%; }
.cp-donut>div { position:absolute; inset:0; display:flex; align-items:center; justify-content:center; flex-direction:column; gap:5px; }
.cp-donut strong { font:500 27px "Bahnschrift",sans-serif; }
.cp-donut span { font-size:10px; color:var(--cp-muted); }

/* Executive: a broad campus scene between financial analysis and decisions. */
.cp-leader { display:grid; grid-template-rows:clamp(48px,5.2vh,60px) clamp(105px,11vh,124px) minmax(340px,1fr) clamp(155px,16vh,180px); }
.leader-health { display:flex; align-items:center; gap:9px; color:var(--cp-muted); font-size:11px; }
.leader-health>svg { color:var(--cp-positive); margin-left:8px; }
.leader-stats { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:inherit; }
.leader-stats>.cp-stat:first-child { background:linear-gradient(115deg,#183044,#142438); border-color:#334c61; }
.leader-stats>.cp-stat:first-child .cp-stat-number { color:#a9e2e9; }
.leader-main { display:grid; grid-template-columns:minmax(300px,23%) minmax(0,1fr) minmax(270px,21%); gap:inherit; min-height:0; }
.leader-analytics { display:grid; grid-template-rows:1fr 1fr; gap:inherit; min-height:0; }
.leader-revenue .cp-panel-body { display:flex; flex-direction:column; padding-top:10px; padding-bottom:10px; }
.leader-revenue-number { display:flex; align-items:center; justify-content:space-between; }
.leader-revenue-number>strong { font:500 29px "Bahnschrift",sans-serif; }
.leader-revenue-number>strong>span { font:10px "Microsoft YaHei",sans-serif; color:var(--cp-muted); margin-left:6px; }
.leader-revenue-number>.cp-positive { flex-direction:column; align-items:flex-end; font:11px "Bahnschrift",sans-serif; }
.leader-revenue-number small { font:9px "Microsoft YaHei",sans-serif; color:var(--cp-muted); margin-top:3px; }
.leader-revenue .cp-line-chart { flex:1; min-height:60px; }
.leader-contribution .cp-panel-body { padding-top:14px; }
.leader-stack { height:8px; display:flex; gap:3px; border-radius:4px; overflow:hidden; margin-bottom:9px; }
.leader-business-list { display:flex; flex-direction:column; justify-content:space-evenly; height:calc(100% - 19px); }
.leader-business-list>button { display:flex; align-items:center; width:100%; border:0; background:none; padding:4px 0; gap:9px; text-align:left; font-size:11px; }
.leader-business-list>button>i { width:5px; height:5px; border-radius:50%; }
.leader-business-list>button>strong { font:13px "Bahnschrift",sans-serif; margin-left:auto; }
.leader-business-list small { color:var(--cp-muted); margin-left:4px; font:9px "Microsoft YaHei",sans-serif; }
.leader-business-list em { font:10px "Bahnschrift",sans-serif; color:var(--cp-muted); width:38px; text-align:right; }
.leader-business-list svg { color:var(--cp-muted); }
.leader-campus { position:relative; min-width:0; min-height:0; border:1px solid #263c4c; border-radius:var(--cp-radius); overflow:hidden; background:radial-gradient(ellipse at 50% 65%,#19374b,#101e2c 68%); }
.leader-campus-head { position:absolute; top:22px; left:23px; right:23px; display:flex; justify-content:space-between; z-index:110; pointer-events:none; }
.leader-campus-head h2 { font-size:18px; font-weight:500; letter-spacing:1px; }
.leader-campus-head .cp-eyebrow { font-size:8px; letter-spacing:2.8px; margin-bottom:8px; }
.leader-campus-head button { pointer-events:auto; align-self:flex-start; padding:7px 9px; background:#132334b3; }
.leader-scene { position:absolute; inset:60px 0 56px; }
.leader-scene .sys-rail,.leader-scene .venue-tip { display:none; }
.leader-scene .venue { background:transparent; }
.leader-scene .vn-card { padding:4px 7px; border:1px solid #62b9d243; background:#12293cdd; box-shadow:none; border-radius:4px; }
.leader-scene .vn-ico { font-size:9px; width:18px; height:18px; border-radius:4px; box-shadow:none; }
.leader-scene .vn-txt b { font-size:10px; font-weight:400; text-shadow:none; }
.leader-scene .vn-txt em { font-size:9px; }
.leader-scene .vn-beam { height:25px; }
.leader-scene .venue-views { bottom:6px; gap:5px; z-index:100; }
.leader-scene .venue-views button { padding:4px 9px; font-size:9px; border-radius:4px; background:#0e2137cc; box-shadow:none; }
.leader-campus-coordinate { position:absolute; top:93px; left:24px; display:flex; flex-direction:column; gap:5px; font:7px "Segoe UI",sans-serif; letter-spacing:1.7px; color:#7b9bab; pointer-events:none; z-index:100; }
.leader-campus-coordinate>span { font-size:8px; letter-spacing:1px; opacity:.6; }
.leader-campus-bottom { position:absolute; bottom:0; height:56px; inset-inline:0; padding:0 22px; display:flex; justify-content:space-between; align-items:center; border-top:1px solid #2a4055; z-index:110; background:#101e2deb; }
.leader-campus-bottom>div { display:flex; align-items:center; gap:8px; font-size:10px; color:var(--cp-muted); }
.leader-campus-bottom strong { font:20px "Bahnschrift",sans-serif; color:var(--cp-text); margin-left:4px; }
.leader-campus-bottom small { font:9px "Microsoft YaHei",sans-serif; color:var(--cp-muted); margin-left:4px; }
.leader-decisions { display:flex; flex-direction:column; gap:inherit; min-height:0; }
.leader-decision-panel { flex:1; }
.leader-decision-panel .cp-panel-body { display:flex; flex-direction:column; justify-content:space-between; gap:9px; padding-top:12px; padding-bottom:12px; }
.leader-decision-list { display:flex; flex-direction:column; flex:1; justify-content:space-between; }
.decision-item { display:block; width:100%; border:0; border-bottom:1px solid var(--cp-line); padding:0 0 8px; margin-bottom:8px; text-align:left; background:none; }
.decision-item:last-child { margin-bottom:0; }
.decision-item>div { display:flex; align-items:center; gap:8px; }
.decision-index { color:var(--cp-muted); font:10px "Bahnschrift",sans-serif; }
.decision-type { font-size:9px; color:#e0bc83; }
.decision-item.blue .decision-type { color:#8fb7e1; }
.decision-item.purple .decision-type { color:#b4a3df; }
.decision-item>div>svg { margin-left:auto; color:var(--cp-muted); }
.decision-item h3 { font-size:12px; font-weight:500; margin:5px 0; }
.decision-item p { font-size:10px; color:var(--cp-muted); line-height:1.6; }
.decision-action { display:none; }
.leader-decision-panel .cp-panel-body>.cp-link { justify-content:center; }
.leader-note { display:flex; align-items:center; gap:12px; padding:15px 17px; border:1px solid var(--cp-line); border-radius:var(--cp-radius); background:var(--cp-surface); }
.leader-note>svg { color:var(--cp-accent); }
.leader-note>div { display:flex; flex-direction:column; gap:5px; min-width:0; }
.leader-note span,.leader-note small { font-size:9px; color:var(--cp-muted); }
.leader-note strong { font-size:11px; font-weight:500; }
.leader-note>button { background:none; border:none; padding:0; margin-left:auto; color:var(--cp-muted); }
.leader-bottom { display:grid; grid-template-columns:1.15fr 1.3fr 1fr; gap:inherit; min-height:0; }
.leader-target-numbers { display:flex; align-items:center; justify-content:space-between; margin-bottom:14px; }
.leader-target-numbers>div { display:flex; flex-direction:column; gap:5px; }
.leader-target-numbers>div:first-child { flex-direction:row; align-items:baseline; gap:12px; }
.leader-target-numbers strong { font:34px "Bahnschrift",sans-serif; color:var(--cp-accent); }
.leader-target-numbers strong small { font-size:15px; }
.leader-target-numbers span { font-size:10px; color:var(--cp-muted); }
.leader-target-numbers b { font:17px "Bahnschrift",sans-serif; }
.leader-target-numbers b small { font:9px "Microsoft YaHei",sans-serif; margin-left:5px; color:var(--cp-muted); }
.leader-target-caption { display:flex; justify-content:space-between; font-size:9px; color:var(--cp-muted); margin-top:8px; }
.leader-activity-grid { display:grid; grid-template-columns:repeat(4,1fr); height:100%; }
.leader-activity-grid>button { background:none; border:none; border-right:1px solid var(--cp-line); display:flex; align-items:center; flex-direction:column; justify-content:center; gap:6px; }
.leader-activity-grid>button:last-child { border-right:0; }
.leader-activity-grid svg { color:var(--cp-accent); margin-bottom:3px; }
.leader-activity-grid strong { font:25px "Bahnschrift",sans-serif; }
.leader-activity-grid span { font-size:10px; color:var(--cp-muted); }
.leader-quality .cp-panel-body { display:flex; flex-direction:column; justify-content:space-between; }
.leader-quality-score { display:grid; grid-template-columns:1fr 1fr; align-items:center; row-gap:10px; }
.quality-stars { letter-spacing:5px; color:#dec297; font-size:16px; }
.leader-quality-score strong { font:30px "Bahnschrift",sans-serif; text-align:right; }
.leader-quality-score strong small { font-size:12px; color:var(--cp-muted); margin-left:6px; }
.leader-quality-score>span:last-child { grid-column:1 / -1; color:var(--cp-muted); font-size:10px; }
.quality-footer { display:flex; justify-content:space-between; padding-top:13px; font-size:10px; border-top:1px solid var(--cp-line); color:var(--cp-muted); }
.quality-footer b { color:var(--cp-positive); margin-left:7px; font-weight:400; }

/* Education: bright editorial workspace, schedule first. */
.cp-education { display:grid; grid-template-rows:clamp(65px,7vh,84px) minmax(0,1fr); }
.edu-layout { display:grid; grid-template-columns:minmax(220px,16%) minmax(0,1fr) minmax(240px,19%); gap:inherit; min-height:0; }
.edu-sidebar,.edu-right { display:flex; flex-direction:column; gap:inherit; min-height:0; }
.edu-overview { padding:22px; position:relative; background:#e8ebf8; border:1px solid #dcdff0; border-radius:12px; min-height:180px; overflow:hidden; }
.edu-overview .cp-eyebrow { font-size:8px; }
.edu-overview h2 { font-size:14px; margin-top:9px; }
.edu-big-number { font:42px "Bahnschrift",sans-serif; color:#535f9f; position:relative; z-index:2; margin-top:17px; }
.edu-big-number span { display:block; font:10px "Microsoft YaHei",sans-serif; color:#8188a5; margin-top:3px; }
.edu-overview-art { position:absolute; right:22px; top:62px; width:80px; height:85px; transform:rotate(-12deg); }
.edu-overview-art span { width:57px; height:69px; border-radius:6px; position:absolute; right:0; top:0; background:#b6bee6; transform:rotate(15deg); }
.edu-overview-art span:nth-child(2) { background:#c9d0ed; right:9px; top:6px; transform:rotate(0); }
.edu-overview-art span:nth-child(3) { background:#f7f8ff; right:18px; top:12px; transform:rotate(-12deg); box-shadow:4px 5px 16px #6471ab22; }
.edu-overview-art svg { position:absolute; top:23px; right:24px; color:#929ed3; transform:rotate(-12deg); }
.edu-overview-foot { display:flex; justify-content:space-between; border-top:1px solid #ced3e8; margin-top:17px; padding-top:12px; font-size:9px; color:#8188a5; position:relative; }
.edu-overview-foot b { color:#5c679e; margin-left:3px; font-weight:500; }
.edu-quality { flex:1; min-height:230px; }
.edu-quality .cp-panel-body { display:flex; flex-direction:column; align-items:center; justify-content:space-around; padding-top:6px; gap:6px; }
.edu-quality-line { display:flex; align-items:center; justify-content:space-between; width:100%; font-size:10px; }
.edu-quality-line>span { display:flex; align-items:center; gap:6px; color:var(--cp-muted); }
.edu-quality-line i { height:5px; width:5px; border-radius:50%; }
.edu-quality-line strong { font-size:11px; font-weight:500; }
.edu-quality-bottom { display:flex; justify-content:space-between; width:100%; border-top:1px solid var(--cp-line); padding-top:12px; font-size:9px; color:var(--cp-muted); }
.edu-quality-bottom b { font-weight:400; color:var(--cp-positive); }
.edu-attention { flex:1; min-height:210px; }
.edu-attention .cp-panel-body { display:flex; flex-direction:column; justify-content:space-between; }
.edu-attention button { display:flex; align-items:center; gap:11px; border:0; background:none; text-align:left; padding:8px 0; }
.edu-attention button>b { font:18px "Bahnschrift",sans-serif; width:34px; height:34px; border-radius:8px; display:grid; place-items:center; }
.edu-attention button>span { display:flex; flex-direction:column; gap:6px; }
.edu-attention strong { font-size:11px; font-weight:500; }
.edu-attention small { font-size:9px; color:var(--cp-muted); }
.edu-attention svg { margin-left:auto; color:var(--cp-muted); }
.cp-education .violet { background:rgba(139,129,199,.16); color:#a99fdf; }
.cp-education .rose { background:rgba(197,130,145,.16); color:#d8a3af; }
.cp-education .teal { background:rgba(74,147,134,.18); color:#8ecbbc; }
.cp-education .blue { background:rgba(98,143,197,.18); color:#9dbfe8; }
.cp-education .amber { background:rgba(186,149,87,.18); color:#dcc08c; }
.edu-quality-line i.violet,.edu-schedule-foot i.violet { background:#8b81c7; }
.edu-quality-line i.amber,.edu-schedule-foot i.amber { background:#d7b778; }
.edu-schedule-foot i.teal { background:#7cb4a7; }
.edu-center { display:grid; grid-template-rows:clamp(108px,11vh,125px) minmax(355px,1fr) clamp(170px,19vh,220px); gap:inherit; min-height:0; }
.edu-stats { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:inherit; }
.edu-stats .cp-stat { border-radius:10px; }
.edu-stats .cp-stat-number { font-size:30px; }
.edu-stats .cp-stat-label svg { color:#7fa0b5; }
.edu-schedule .cp-panel-body { display:flex; flex-direction:column; gap:15px; }
.edu-schedule-toolbar { display:flex; justify-content:space-between; align-items:center; gap:10px; }
.edu-date { display:flex; gap:8px; align-items:center; font-size:10px; color:var(--cp-muted); }
.edu-date b { font-weight:500; }
.edu-date>span { font:9px "Bahnschrift",sans-serif; color:var(--cp-muted); margin-left:7px; }
.edu-week-grid { display:grid; grid-template-columns:repeat(7,minmax(70px,1fr)); flex:1; min-height:0; overflow:auto; border:1px solid var(--cp-line); border-radius:6px; }
.edu-week-column { min-width:0; border-right:1px solid var(--cp-line); }
.edu-week-column:last-child { border-right:0; }
.edu-week-column>header { display:flex; justify-content:space-between; align-items:center; padding:10px 7px; background:#162537; font-size:9px; position:sticky; top:0; z-index:1; }
.edu-week-column>header b { font-weight:500; }.edu-week-column>header span { font-size:8px; color:var(--cp-muted); }
.edu-week-column>div { display:flex; flex-direction:column; gap:7px; padding:7px; }
.edu-week-lesson { display:flex; flex-direction:column; gap:5px; border:0; border-left:2px solid currentColor; border-radius:3px; padding:7px 5px; text-align:left; }
.edu-week-lesson time { font:9px "Bahnschrift",sans-serif; opacity:.7; }.edu-week-lesson strong { font-size:9px; font-weight:500; line-height:1.5; }.edu-week-lesson small { font-size:8px; opacity:.65; }.edu-week-empty { color:var(--cp-muted); font-size:9px; text-align:center; margin-top:20px; }
.edu-timetable { display:flex; flex-direction:column; flex:1; min-height:0; }
.edu-time-axis { display:grid; grid-template-columns:116px repeat(5,1fr); color:var(--cp-muted); font:9px "Bahnschrift",sans-serif; padding-bottom:12px; border-bottom:1px solid var(--cp-line); }
.edu-time-axis>span:first-child { font-family:"Microsoft YaHei",sans-serif; }
.edu-time-axis>span:last-child { text-align:right; padding-right:20px; }
.edu-time-rows { flex:1; display:flex; flex-direction:column; min-height:0; }
.edu-time-row { display:flex; border-bottom:1px solid var(--cp-line); min-height:49px; flex:1; padding:6px 0; }
.edu-time-row:last-child { border-bottom:0; }
.edu-room-label { width:116px; flex-shrink:0; position:relative; padding:5px 0 0 25px; }
.edu-room-label>span { position:absolute; left:0; top:7px; font:10px "Bahnschrift",sans-serif; color:#a8aec3; }
.edu-room-label b { display:block; font-size:10px; font-weight:500; }
.edu-room-label small { display:block; color:var(--cp-muted); font-size:8px; margin-top:7px; }
.edu-track { position:relative; flex:1; background:repeating-linear-gradient(90deg,transparent 0,transparent calc(25% - 1px),#263548 calc(25% - 1px),#263548 25%); }
.edu-lesson { position:absolute; top:0; bottom:0; border:0; border-left:3px solid currentColor; border-radius:4px; text-align:left; padding:7px 9px; transition:box-shadow .2s; overflow:hidden; }
.edu-lesson:hover,.edu-lesson.selected { box-shadow:0 0 0 1px currentColor; }
.edu-lesson strong { display:block; font-size:10px; font-weight:500; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.edu-lesson span { display:block; font-size:9px; margin-top:5px; opacity:.8; }
.edu-lesson small { display:block; font:8px "Bahnschrift",sans-serif; margin-top:4px; opacity:.65; }
.edu-schedule-foot { display:flex; align-items:center; justify-content:space-between; margin-top:auto; flex-shrink:0; }
.edu-schedule-foot>div { display:flex; align-items:center; gap:6px; color:var(--cp-muted); font-size:9px; }
.edu-schedule-foot i { display:inline-block; height:6px; width:6px; border-radius:2px; margin-left:12px; }
.edu-schedule-foot i:first-child { margin-left:0; }
.edu-bottom { display:grid; grid-template-columns:1fr 1fr; gap:inherit; min-height:0; }
.edu-funnel .cp-panel-body { display:flex; flex-direction:column; }
.edu-funnel-steps { flex:1; display:flex; align-items:stretch; gap:12px; min-height:75px; }
.edu-funnel-steps>div { position:relative; flex:1; display:flex; flex-direction:column; justify-content:flex-end; align-items:center; padding-bottom:4px; }
.edu-funnel-steps>div>div { position:absolute; bottom:24px; width:100%; max-height:70%; background:#3f6a80; border-radius:4px 4px 0 0; z-index:0; }
.edu-funnel-steps strong { position:relative; font:23px "Bahnschrift",sans-serif; z-index:1; margin-bottom:14px; color:#a9e2e9; }
.edu-funnel-steps span { position:relative; font-size:9px; color:var(--cp-muted); z-index:1; }
.edu-funnel-note { padding-top:12px; display:flex; align-items:center; font-size:9px; color:var(--cp-muted); gap:6px; border-top:1px solid var(--cp-line); margin-top:8px; }
.edu-funnel-note b { color:var(--cp-accent); }
.edu-funnel-note>span { margin-left:auto; }
.edu-growth .cp-panel-body { display:flex; flex-direction:column; justify-content:space-around; }
.edu-growth button { display:flex; align-items:center; gap:18px; background:none; border:0; text-align:left; padding:3px 0; }
.edu-growth button>span { flex:none; }
.edu-growth button b { display:block; font-size:11px; font-weight:500; }
.edu-growth button>span small { display:block; font-size:9px; color:var(--cp-muted); margin-top:5px; }
.edu-growth .cp-progress { flex:1; height:4px; }
.edu-growth button strong { font:19px "Bahnschrift",sans-serif; color:var(--cp-accent); }
.edu-growth button strong small { font:9px "Microsoft YaHei",sans-serif; margin-left:3px; }
.edu-current { background:#162537; border:1px solid #263548; border-radius:12px; padding:20px 22px; flex:1.3; min-height:300px; display:flex; flex-direction:column; }
.edu-current-status { display:flex; align-items:center; gap:8px; font-size:10px; color:#7fa8bd; }
.edu-current-status>svg { margin-left:auto; }
.edu-class-illustration { position:relative; flex:1; min-height:60px; max-height:150px; margin:12px 0; display:flex; align-items:center; justify-content:center; }
.edu-orbit { width:140px; height:70px; border:1px solid #c9d1eb; border-radius:50%; transform:rotate(-20deg); position:absolute; }
.edu-book-block { width:78px; height:80px; transform:rotate(-14deg) skewY(6deg); border-radius:7px; display:grid; place-items:center; background:linear-gradient(145deg,#fdfdff,#bcc7e8); box-shadow:6px 6px 0 #a5b2d8,14px 15px 26px #5b6cab24; color:#7e91c8; }
.edu-star { position:absolute; color:#9ba8d3; font-size:21px; }
.edu-star.one { top:15%; right:17%; }.edu-star.two { left:17%; bottom:5%; font-size:14px; }
.edu-current>.cp-eyebrow { font-size:8px; margin:9px 0 7px; }
.edu-current h2 { font-size:19px; color:#cfe6ef; }
.edu-current p { font-size:10px; color:var(--cp-muted); margin:9px 0 18px; }
.edu-class-progress { display:flex; justify-content:space-between; font-size:9px; color:var(--cp-muted); margin-bottom:8px; }
.edu-current>.cp-primary-button { margin-top:20px; width:100%; }
.edu-teachers { flex:1; min-height:250px; }
.edu-teachers .cp-panel-body { display:flex; flex-direction:column; justify-content:space-between; }
.edu-teacher { display:flex; align-items:center; gap:11px; padding:3px 0; }
.edu-avatar { width:32px; height:32px; display:grid; place-items:center; border-radius:50%; font-size:12px; }
.edu-teacher>span:nth-child(2) { display:flex; flex-direction:column; gap:5px; }
.edu-teacher b { font-weight:500; font-size:11px; }
.edu-teacher small { font-size:9px; color:var(--cp-muted); }
.edu-teacher em { margin-left:auto; font:20px "Bahnschrift",sans-serif; }
.edu-teacher em small { margin-left:6px; font-family:"Microsoft YaHei",sans-serif; }
.edu-teacher-footer { display:flex; justify-content:space-between; border-top:1px solid var(--cp-line); padding-top:9px; margin-top:6px; font-size:9px; color:var(--cp-muted); }
.edu-teacher-footer b { color:#8fb7c4; font-weight:500; margin-left:4px; }
.edu-family { display:flex; align-items:center; gap:11px; padding:17px; background:var(--cp-surface); border:1px solid var(--cp-line); border-radius:10px; text-align:left; }
.edu-family>svg { color:#7fa0b5; }
.edu-family>svg:last-child { margin-left:auto; }
.edu-family>span { display:flex; flex-direction:column; gap:6px; }
.edu-family strong { font-size:11px; font-weight:500; }.edu-family small { font-size:9px; color:var(--cp-muted); }

/* Ticketing: theatrical program cards and a working seat inventory. */
.cp-ticketing { display:grid; grid-template-rows:clamp(63px,7.5vh,87px) clamp(230px,28vh,315px) minmax(330px,1fr); }
.cp-ticketing .cp-role-heading h1 { font-size:clamp(28px,3.4vh,40px); letter-spacing:3px; }
.cp-ticketing .cp-role-heading .cp-eyebrow { letter-spacing:3px; font-size:8px; }
.cp-ticketing .cp-role-heading p { letter-spacing:2px; }
.ticket-day-summary { display:flex; align-items:center; gap:30px; }
.ticket-day-summary>span { color:var(--cp-muted); font-size:10px; display:flex; align-items:baseline; gap:8px; }
.ticket-day-summary strong { font:26px "Bahnschrift",sans-serif; color:var(--cp-text); }
.ticket-top { display:grid; grid-template-columns:minmax(0,1fr) minmax(310px,25%); gap:inherit; min-height:0; }
.ticket-lineup { display:flex; flex-direction:column; min-height:0; gap:12px; }
.ticket-section-label { display:flex; justify-content:space-between; align-items:center; font-size:11px; }
.ticket-section-label>span:last-child { color:var(--cp-muted); font:8px "Segoe UI",sans-serif; letter-spacing:1.6px; display:flex; align-items:center; gap:12px; }
.ticket-posters { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:14px; flex:1; min-height:0; }
.ticket-poster { border:1px solid #504563; position:relative; overflow:hidden; border-radius:10px; text-align:left; padding:18px 21px; background:#302b44; display:flex; flex-direction:column; justify-content:space-between; transition:border-color .2s,box-shadow .2s; color:var(--poster-color)!important; }
.ticket-poster.music { background:#3c332f; border-color:#514740; }.ticket-poster.space { background:#263840; border-color:#3b515b; }
.ticket-poster.selected { border-color:var(--poster-color); box-shadow:0 0 0 2px color-mix(in srgb,var(--poster-color) 20%,transparent); }
.ticket-poster.selected::after { content:'✓'; position:absolute; right:13px; bottom:11px; color:var(--poster-color); font-size:9px; }
.ticket-poster-art { position:absolute; right:-6%; top:0; height:100%; width:90%; pointer-events:none; }
.ticket-poster-top { display:flex; justify-content:space-between; align-items:center; z-index:1; font:8px "Segoe UI",sans-serif; letter-spacing:1px; }
.ticket-poster-top>span:last-child { font:9px "Microsoft YaHei",sans-serif; background:#ffffff0c; border:1px solid #ffffff12; border-radius:3px; padding:4px 6px; }
.ticket-poster-title { z-index:1; position:relative; margin-top:25px; }
.ticket-poster-title>small { font-size:9px; letter-spacing:3px; opacity:.8; }
.ticket-poster-title h2 { font-size:clamp(23px,2.8vh,34px); font-family:"Microsoft YaHei",sans-serif; letter-spacing:3px; font-weight:600; margin:7px 0 12px; text-shadow:0 2px 10px #0002; }
.ticket-poster-title>span { font-size:9px; opacity:.7; }
.ticket-poster-bottom { position:relative; z-index:1; border-top:1px dashed #ffffff25; padding-top:13px; display:flex; justify-content:space-between; align-items:center; margin-top:13px; }
.ticket-poster-bottom>b { font:21px "Bahnschrift",sans-serif; }
.ticket-poster-bottom small { font:8px "Microsoft YaHei",sans-serif; margin-left:8px; opacity:.6; }
.ticket-poster-bottom>span { display:flex; align-items:center; gap:10px; font-size:9px; }
.ticket-sales { border:1px solid var(--cp-line); border-radius:12px; padding:24px; background:linear-gradient(125deg,#2e263e,#211e2e 85%); display:flex; flex-direction:column; justify-content:space-between; }
.ticket-sales>.cp-eyebrow { font-size:8px; letter-spacing:2px; margin-bottom:7px; }
.ticket-sales h2 { font-size:13px; font-weight:400; color:var(--cp-muted); }
.ticket-sales-number { font:clamp(33px,4vh,49px) "Bahnschrift",sans-serif; letter-spacing:.4px; margin:8px 0; }
.ticket-sales-number>small { font-size:21px; color:var(--cp-muted); margin-right:8px; }.ticket-sales-number>span { font-size:22px; color:var(--cp-muted); }
.ticket-sales-trend { display:flex; align-items:center; justify-content:space-between; color:var(--cp-positive); font-size:12px; }
.ticket-sales-trend small { font-size:9px; color:var(--cp-muted); margin-left:6px; }.ticket-sales-trend .cp-spark { color:var(--cp-accent); }
.ticket-sales-stats { display:grid; grid-template-columns:1.2fr 1.2fr 1fr; border-top:1px solid var(--cp-line); margin:12px 0; padding-top:17px; }
.ticket-sales-stats>div { border-right:1px solid var(--cp-line); padding-left:18px; }.ticket-sales-stats>div:first-child { padding-left:0; }.ticket-sales-stats>div:last-child { border:0; }
.ticket-sales-stats b { display:block; font:23px "Bahnschrift",sans-serif; }.ticket-sales-stats small { font-size:12px; margin-left:2px; }
.ticket-sales-stats span { font-size:9px; color:var(--cp-muted); display:block; margin-top:6px; }.ticket-sales>.cp-link { font-size:10px; }
.ticket-bottom { display:grid; grid-template-columns:minmax(0,1.35fr) minmax(290px,1fr) minmax(240px,.7fr); gap:inherit; min-height:0; }
.ticket-hall-tag { border:1px solid var(--cp-line); background:var(--cp-soft); padding:4px 7px; border-radius:4px; font-size:9px; color:var(--cp-accent); }
.ticket-seating .cp-panel-body { display:flex; flex-direction:column; }
.ticket-seat-summary { display:flex; justify-content:space-between; align-items:center; margin-bottom:10px; }
.ticket-seat-summary h3 { font-size:13px; font-weight:500; }.ticket-seat-summary h3>span { margin-left:11px; color:var(--cp-muted); font:12px "Bahnschrift",sans-serif; }
.ticket-seat-summary p { font-size:9px; color:var(--cp-muted); margin-top:7px; }
.ticket-seat-summary>div:last-child { display:flex; align-items:baseline; gap:5px; color:#d9c397; }.ticket-seat-summary strong { font:29px "Bahnschrift",sans-serif; }.ticket-seat-summary>div:last-child>span { font-size:9px; }
.ticket-stage { margin:0 auto 15px; width:60%; height:32px; border-top:2px solid #746487; border-radius:50% 50% 0 0; text-align:center; padding-top:9px; color:#8f809f; font-size:8px; letter-spacing:5px; background:linear-gradient(#b5a0d00a,transparent); flex:none; }
.ticket-seats { display:grid; grid-template-columns:repeat(var(--seat-cols),minmax(0,1fr)); grid-auto-rows:minmax(4px,1fr); align-content:center; gap:5px 7px; width:90%; margin:0 auto; flex:1; min-height:130px; padding:0 14px; }
.ticket-seat { border:0; min-width:0; min-height:4px; border-radius:3px 3px 1px 1px; max-height:15px; background:#68607c; padding:0; position:relative; transition:opacity .2s,background .2s; box-shadow:inset 0 -2px 0 #0002; }
.ticket-seat:nth-child(5n) { margin-right:6px; }.ticket-seat.sold { background:#a291bf; opacity:.65; }.ticket-seat.locked { background:#d6b67f; }.ticket-seat.available { background:transparent; border:1px solid #77b9aa; box-shadow:none; }.ticket-seat.dimmed { opacity:.1; }.ticket-seat:hover { opacity:1; transform:scale(1.2); outline:1px solid #e5d6ff; }
.ticket-seat-footer { display:flex; align-items:center; justify-content:space-between; padding-top:15px; border-top:1px solid var(--cp-line); margin-top:15px; }
.ticket-seat-footer .cp-segments { border:0; background:transparent; gap:9px; padding:0; }.ticket-seat-footer .cp-segments button { padding:4px; }.ticket-seat-footer .cp-segments button:nth-child(2) { color:#8ba7bf; }.ticket-seat-footer .cp-segments button:nth-child(3) { color:#cfa763; }.ticket-seat-footer .cp-segments button:nth-child(4) { color:#6fb5a8; }
.ticket-channels .cp-panel-body { display:flex; flex-direction:column; justify-content:space-between; gap:5px; }
.ticket-channel-caption { display:flex; justify-content:space-between; font-size:9px; color:var(--cp-muted); }
.ticket-channel { display:block; width:100%; background:none; border:none; text-align:left; padding:3px 0; }
.ticket-channel>div:first-child { display:flex; align-items:center; gap:10px; margin-bottom:9px; }.ticket-channel-mark { display:grid; place-items:center; height:24px; width:24px; border-radius:6px; font-size:11px; }.ticket-channel>div>span:nth-child(2) { font-size:11px; }.ticket-channel strong { margin-left:auto; font:17px "Bahnschrift",sans-serif; }.ticket-channel .cp-progress { height:4px; }
.ticket-channel>small { display:flex; justify-content:space-between; color:var(--cp-muted); font-size:8px; margin-top:7px; }.ticket-channel>small>span { opacity:.7; }
.ticket-channel-total { border-top:1px solid var(--cp-line); padding-top:14px; display:flex; align-items:center; justify-content:space-between; font-size:10px; color:var(--cp-muted); }.ticket-channel-total b { font:22px "Bahnschrift",sans-serif; color:var(--cp-accent); }
.ticket-fulfillment { display:flex; flex-direction:column; min-height:0; gap:inherit; }.ticket-checkin { flex:1.3; }.ticket-checkin .cp-panel-body { display:flex; flex-direction:column; align-items:center; justify-content:space-around; gap:10px; }.ticket-checkin .cp-donut { max-height:14vh; max-width:14vh; }.ticket-checkin-numbers { display:flex; width:100%; justify-content:space-evenly; }.ticket-checkin-numbers>div { display:flex; flex-direction:column; gap:5px; text-align:center; }.ticket-checkin-numbers b { font:24px "Bahnschrift",sans-serif; }.ticket-checkin-numbers span { font-size:9px; color:var(--cp-muted); }.ticket-checkin .cp-link { margin-top:6px; }
.ticket-exceptions { flex:1; }.ticket-exceptions .cp-panel-body { display:flex; flex-direction:column; justify-content:space-around; gap:8px; }.ticket-exceptions .cp-panel-body>button { display:flex; align-items:center; width:100%; padding:7px 0; gap:10px; border:0; background:none; text-align:left; }.ticket-exceptions button>svg { color:var(--cp-accent); }.ticket-exceptions button>span { display:flex; flex-direction:column; gap:5px; }.ticket-exceptions b { font-size:10px; font-weight:500; }.ticket-exceptions small { font-size:8px; color:var(--cp-muted); }.ticket-exceptions strong { margin-left:auto; font:24px "Bahnschrift",sans-serif; color:#d5bb93; }.ticket-gate-status { display:flex; align-items:center; gap:7px; padding-top:12px; border-top:1px solid var(--cp-line); color:var(--cp-muted); font-size:9px; }.ticket-gate-status>.cp-link { margin-left:auto; }

/* Operations: spatial command canvas with a persistent incident workflow. */
.cp-operations { display:grid; grid-template-rows:clamp(50px,6vh,68px) clamp(80px,9.5vh,108px) minmax(0,1fr); }
.cp-operations .cp-eyebrow { font-size:8px; letter-spacing:2.5px; }.cp-operations .cp-role-heading h1 { font-size:25px; }
.ops-shift { display:flex; align-items:center; gap:12px; }.ops-shift>span:nth-child(2) { display:flex; flex-direction:column; gap:5px; font-size:9px; color:var(--cp-muted); }.ops-shift strong { font:12px "Bahnschrift",sans-serif; color:var(--cp-text); }.ops-avatars { display:flex; margin:0 8px; }.ops-avatars>i { display:grid; place-items:center; background:#2b4444; border:2px solid var(--cp-bg); border-radius:50%; width:30px; height:30px; margin-left:-7px; font-size:10px; font-style:normal; color:#9db6af; }.ops-avatars>i:nth-child(2) { background:#354443; }.ops-avatars>i:nth-child(3) { background:#3d4943; }
.ops-strip { display:grid; grid-template-columns:repeat(5,minmax(0,1fr)) .8fr; padding:17px 0; background:var(--cp-surface); border:1px solid var(--cp-line); border-radius:7px; }
.ops-strip>div { display:flex; align-items:center; gap:15px; padding:0 clamp(15px,1.8vw,34px); border-right:1px solid var(--cp-line); }.ops-strip>div:last-child { border-right:none; }.ops-strip>div>svg { color:var(--cp-accent); }.ops-strip>div>span { display:flex; flex-direction:column; gap:7px; color:var(--cp-muted); font-size:10px; }.ops-strip strong { font:29px "Bahnschrift",sans-serif; color:var(--cp-text); }.ops-strip strong small { font:10px "Microsoft YaHei",sans-serif; color:var(--cp-muted); margin-left:7px; }.ops-strip .ops-strip-warning strong,.ops-strip .ops-strip-warning>svg { color:#e0bb7a; }.ops-strip>.ops-strip-status { justify-content:center; flex-wrap:wrap; gap:8px; }.ops-strip-status>b { font-size:11px; font-weight:500; color:var(--cp-positive); }.ops-strip-status>small { width:100%; text-align:center; font-size:9px; color:var(--cp-muted); }
.ops-layout { display:grid; grid-template-columns:minmax(230px,18%) minmax(0,1fr) minmax(300px,24%); gap:inherit; min-height:0; }.ops-left,.ops-right { display:flex; flex-direction:column; gap:inherit; min-height:0; }.ops-status-pill { color:var(--cp-positive); font-size:8px; padding:4px 7px; background:var(--cp-soft); border-radius:3px; }
.ops-infrastructure { flex:1.4; }.ops-infrastructure .cp-panel-body { display:flex; flex-direction:column; justify-content:space-around; gap:13px; }.ops-infrastructure button { background:none; border:0; padding:0; text-align:left; }.ops-infrastructure button>div:first-child { display:flex; align-items:center; gap:8px; color:var(--cp-muted); font-size:10px; }.ops-infrastructure button>div:first-child>svg { color:#7fa0b5; }.ops-warning-dot { width:5px; height:5px; background:#dfb66f; border-radius:50%; margin-left:auto; }.ops-infrastructure strong { font:24px "Bahnschrift",sans-serif; display:block; margin:9px 0; }.ops-infrastructure strong>small { font-size:12px; color:var(--cp-muted); margin-left:7px; }.ops-infrastructure strong>span { float:right; font-size:10px; color:var(--cp-muted); margin-top:10px; }.ops-infrastructure .cp-progress { height:3px; }
.ops-teams { flex:1; min-height:210px; }.ops-teams .cp-panel-body { display:flex; flex-direction:column; justify-content:space-between; gap:12px; }.ops-team { display:flex; align-items:center; gap:12px; }.ops-team-avatar { height:32px; width:32px; display:grid; place-items:center; background:var(--cp-soft); color:var(--cp-accent); border-radius:7px; font-size:12px; }.ops-team>span:nth-child(2) { display:flex; flex-direction:column; gap:6px; }.ops-team b { font-size:11px; font-weight:500; }.ops-team small { font-size:9px; color:var(--cp-muted); }.ops-team strong { font:23px "Bahnschrift",sans-serif; margin-left:auto; }.ops-team strong small { font:9px "Microsoft YaHei",sans-serif; margin-left:5px; }.ops-team-note { display:flex; align-items:center; gap:7px; font-size:9px; color:var(--cp-muted); padding-top:12px; border-top:1px solid var(--cp-line); }
.ops-center { display:grid; grid-template-rows:minmax(350px,1fr) clamp(170px,21vh,235px); gap:inherit; min-height:0; }.ops-map-panel .cp-panel-body { display:flex; flex-direction:column; padding:0; }.ops-map { flex:1; position:relative; overflow:hidden; margin:12px 15px 0; min-height:250px; background:radial-gradient(ellipse,#1b3333 0,#122426 72%); border-radius:6px; }
.ops-map-grid { position:absolute; inset:0; background-image:linear-gradient(#789a9510 1px,transparent 1px),linear-gradient(90deg,#789a9510 1px,transparent 1px); background-size:24px 24px; mask-image:radial-gradient(ellipse,#000 0,transparent 75%); }.ops-map-road { position:absolute; background:#273b3a; border:1px solid #3a514b; }.ops-map-road::after { content:''; position:absolute; inset:50% 0 0; border-top:1px dashed #7a94a644; }.road-h { left:4%; right:4%; top:46%; height:15px; transform:rotate(-2deg); }.road-h.second { top:76%; left:27%; right:27%; }.road-v { left:46%; width:14px; top:8%; bottom:8%; transform:rotate(3deg); }.road-v::after { inset:0 50% 0 0; border-top:0; border-right:1px dashed #7a94a644; }.ops-map-green { position:absolute; border:1px solid #3e5a414d; background:repeating-radial-gradient(ellipse at center,#293f32 0,#293f32 3px,#24392e 4px,#24392e 7px); border-radius:40%; opacity:.55; }.green-one { left:35%; top:12%; width:25%; height:19%; }.green-two { right:9%; top:46%; width:20%; height:12%; }.ops-map-water { position:absolute; left:29%; top:66%; width:13%; height:10%; background:#2a515244; border:1px solid #476d6a44; border-radius:45% 20% 45% 20%; }.ops-map-garden { position:absolute; top:69%; left:45%; color:#7f9db0; font-size:8px; letter-spacing:3px; }.ops-map-north { position:absolute; top:10px; right:14px; font:12px "Bahnschrift",sans-serif; color:#8ba7b8; }.ops-map-road-name { position:absolute; top:49%; left:6%; transform:rotate(-2deg); font-size:7px; color:#7f98a8; letter-spacing:2px; }
.ops-zone { position:absolute; border:1px solid #52736c; color:#a5c7bc!important; border-radius:5px; background:linear-gradient(145deg,#354e49,#283d3b); display:flex; flex-direction:column; align-items:center; justify-content:center; gap:7px; padding:8px; box-shadow:5px 7px 0 #09191788,6px 8px 0 #3c514b88; transition:border-color .25s,background .25s; }
.ops-zone-roof { position:absolute; inset:6px; border:1px solid #89ae8c15; border-radius:2px; pointer-events:none; }.ops-zone svg { color:#85b6a8; opacity:.7; }.ops-zone b { font-size:12px; font-weight:500; z-index:1; }.ops-zone small { font-size:8px; opacity:.7; z-index:1; }.ops-zone.selected { border-color:#dabb7b; background:linear-gradient(145deg,#56503a,#393e32); color:#e0ceaa!important; box-shadow:0 0 0 3px #e0bb7a10,5px 7px 0 #09191788; }.ops-zone.selected svg { color:#d4bb83; }.ops-zone.attention small { color:#e0bb7a; opacity:1; }.ops-zone:nth-last-of-type(1) { flex-direction:row; gap:10px; }.ops-zone:nth-last-of-type(1) svg { width:15px; }.ops-zone-pulse { position:absolute; top:-5px; right:-5px; width:9px; height:9px; border:2px solid #172727; border-radius:50%; background:#e0bb7a; box-shadow:0 0 0 5px #e0bb7a16; animation:ops-pulse 3s infinite; }@keyframes ops-pulse { 50% { box-shadow:0 0 0 9px #e0bb7a06; } }
.heatmap .ops-zone { background:color-mix(in srgb,#bc9260 calc(var(--heat)*85%),#28445a); }.heatmap .ops-zone small { color:#e8ddbd; }
.ops-map-legend { position:absolute; bottom:10px; left:10px; display:flex; gap:13px; color:#8ba7b8; font-size:8px; }.ops-map-legend>span { display:flex; align-items:center; gap:5px; }.ops-map-legend i { width:5px; height:5px; border-radius:1px; background:#6fb9cc; }.ops-map-legend>span:nth-child(2) i { background:#e0bb7a; }.ops-map-legend>span:nth-child(3) i { background:transparent; border:1px solid #e0bb7a; }
.ops-zone-detail { display:flex; align-items:center; justify-content:space-between; gap:20px; border-top:1px solid var(--cp-line); padding:14px 22px; flex-shrink:0; }.ops-zone-detail>div { display:flex; align-items:center; gap:11px; }.ops-zone-detail>div>svg { color:var(--cp-accent); }.ops-zone-detail>div>span { display:flex; flex-direction:column; gap:6px; }.ops-zone-detail b { font-size:11px; font-weight:500; }.ops-zone-detail small { font-size:8px; color:#d5b67e; }.ops-zone-detail>span { font-size:9px; color:var(--cp-muted); }.ops-zone-detail strong { display:block; font:19px "Bahnschrift",sans-serif; margin-top:5px; color:var(--cp-text); }.ops-zone-detail strong>small { color:var(--cp-muted); margin-left:4px; font:8px "Microsoft YaHei",sans-serif; }.ops-zone-detail button { font-size:9px!important; padding:7px 9px; }
.ops-center-bottom { display:grid; grid-template-columns:1.5fr 1fr; gap:inherit; min-height:0; }.ops-flow .cp-panel-body { padding-bottom:15px; }.ops-environment .cp-panel-body { display:flex; flex-direction:column; justify-content:space-around; }.ops-environment .cp-panel-body>div:first-child { display:flex; align-items:baseline; justify-content:space-between; }.ops-environment strong { font:42px "Bahnschrift",sans-serif; color:var(--cp-accent); }.ops-environment strong small { font-size:20px; margin-left:3px; }.ops-environment .cp-panel-body>div:first-child>span { font-size:9px; color:var(--cp-muted); }.ops-environment-row { display:flex; flex-wrap:wrap; gap:12px; padding-top:12px; border-top:1px solid var(--cp-line); color:var(--cp-muted); font-size:9px; }.ops-environment-row>span { display:flex; gap:6px; }.ops-environment-row b { color:var(--cp-text); font-weight:400; }
.ops-incidents { flex:1.5; min-height:355px; }.ops-event-count { color:#dfb66f; font-size:9px; background:#dfb66f10; border:1px solid #dfb66f25; border-radius:3px; padding:4px 7px; }.ops-incidents .cp-panel-body { display:flex; flex-direction:column; gap:14px; }.ops-incidents .cp-segments { align-self:flex-start; }.ops-incident-list { display:flex; flex-direction:column; gap:10px; flex:1; min-height:0; overflow:auto; }.ops-incident { border:1px solid var(--cp-line); border-left:2px solid #dfb66f; border-radius:4px; background:#1a2b2b; text-align:left; padding:12px 14px; }.ops-incident.urgent { border-left-color:#d78f81; background:#4e2d2b66; }.ops-incident.notice { border-left-color:#7ba3b5; }.ops-incident.resolved { opacity:.65; border-left-color:#7ba3b5; }.ops-incident>div { display:flex; align-items:center; gap:9px; }.ops-incident-level { color:#dfb66f; font-size:8px; border:1px solid #dfb66f3b; border-radius:2px; padding:2px 4px; }.urgent .ops-incident-level { color:#dba091; border-color:#dba09144; }.notice .ops-incident-level { color:#8fb7c9; border-color:#8fb7c944; }.ops-incident time { font:9px "Bahnschrift",sans-serif; color:var(--cp-muted); }.ops-incident-status { font-size:8px; margin-left:auto; color:var(--cp-muted); }.ops-incident h3 { font-size:12px; font-weight:500; margin-top:10px; }.ops-incident p { display:flex; align-items:center; gap:5px; color:var(--cp-muted); font-size:9px; margin-top:7px; }.ops-incident footer { display:flex; justify-content:space-between; margin-top:12px; padding-top:9px; border-top:1px solid #8ba7b814; font-size:8px; color:var(--cp-muted); }.ops-incident footer>span:last-child { display:flex; align-items:center; gap:5px; color:var(--cp-accent); }.ops-empty { flex:1; min-height:150px; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:15px; color:var(--cp-muted); }.ops-empty strong { font-size:12px; font-weight:500; }.ops-empty span { font-size:10px; }
.ops-timeline { flex:1; min-height:205px; }.ops-timeline .cp-panel-body { display:flex; flex-direction:column; justify-content:space-around; }.ops-timeline .cp-panel-body>div { display:flex; align-items:flex-start; gap:11px; padding:8px 0; }.ops-timeline time { font:9px "Bahnschrift",sans-serif; color:var(--cp-muted); padding-top:2px; }.ops-timeline i { width:5px; height:5px; background:#5b9db4; border-radius:50%; margin-top:3px; box-shadow:0 0 0 3px #5b9db41a; }.ops-timeline .cp-panel-body>div>span { display:flex; flex-direction:column; gap:6px; }.ops-timeline b { font-size:10px; font-weight:400; }.ops-timeline small { font-size:9px; color:var(--cp-muted); }

.edu-quality .cp-donut { width:108px!important; height:108px!important; }
.edu-quality .cp-donut strong { font-size:24px; }.edu-quality .cp-panel-body { gap:4px; padding-bottom:10px; }.edu-quality-bottom { padding-top:8px; }
.edu-teachers .cp-panel-body { padding-top:10px; padding-bottom:10px; }.edu-teacher .edu-avatar { width:30px; height:30px; }
.ticket-channel>div:first-child { margin-bottom:7px; }.ticket-channel>small { margin-top:5px; line-height:1.3; }.ticket-channel-total { padding-top:10px; }
.ticket-checkin .cp-panel-body { display:grid; grid-template-columns:1fr .8fr; grid-template-rows:1fr auto; align-items:center; justify-items:center; gap:7px; }
.ticket-checkin .cp-donut { max-width:100px; max-height:100px; }.ticket-checkin .cp-donut strong { font-size:23px; }.ticket-checkin .cp-donut small { font-size:8px; }
.ticket-checkin-numbers { flex-direction:column; gap:10px; }.ticket-checkin-numbers b { font-size:22px; }.ticket-checkin-numbers>div { gap:3px; }.ticket-checkin .cp-link { grid-column:1/-1; margin-top:0; }
.ticket-exceptions .cp-panel-body { gap:4px; padding:8px 14px; }.ticket-exceptions .cp-panel-body>button { padding:4px 0; }.ticket-gate-status { padding-top:8px; }
.ops-infrastructure .cp-panel-body { gap:8px; padding-top:12px; padding-bottom:12px; }.ops-infrastructure strong { margin:5px 0; font-size:22px; }

/* Supporting surfaces. */
.cp-overlay .ant-drawer-content { background:var(--cp-surface); color:var(--cp-text); }.cp-overlay .ant-drawer-header { border-color:var(--cp-line); }.cp-overlay .ant-drawer-title,.cp-overlay .ant-drawer-close { color:var(--cp-text); }.cp-overlay-lead { color:var(--cp-muted); font-size:13px; margin-bottom:23px; }.cp-system-grid { display:flex; flex-direction:column; gap:10px; }.cp-system-grid>button { display:flex; align-items:center; gap:14px; border:1px solid var(--cp-line); background:var(--cp-bg); color:var(--cp-text); padding:16px; border-radius:8px; text-align:left; }.cp-system-grid>button>span { height:39px; width:39px; display:grid; place-items:center; border-radius:9px; font-size:14px; }.cp-system-grid>button>div { display:flex; flex-direction:column; gap:6px; }.cp-system-grid b { font-size:13px; font-weight:500; }.cp-system-grid small { color:var(--cp-muted); font-size:10px; }.cp-system-grid svg { margin-left:auto; color:var(--cp-muted); }.cp-detail>.cp-eyebrow { margin:15px 0; }.cp-detail h2 { font-size:25px; font-weight:500; color:var(--cp-text); margin:0 0 18px; }.cp-detail p { color:var(--cp-muted); line-height:2; font-size:13px; }.cp-detail dl { margin:26px 0 32px; }.cp-detail dl>div { padding:16px 0; display:flex; justify-content:space-between; border-bottom:1px solid var(--cp-line); font-size:13px; }.cp-detail dt { color:var(--cp-muted); }.cp-detail dd { margin:0; color:var(--cp-text); }.cp-detail>.cp-primary-button { width:100%; padding:13px; }

/* 32:9 adds useful breathing room without scaling typography by viewport width. */
@media (prefers-reduced-motion:reduce) { .cp-role-frame { animation:none; }.cp-app,.cp-app * { scroll-behavior:auto!important; transition:none!important; }.cp-app .ops-zone-pulse,.cp-app .venue * { animation:none!important; } }


/* Compact shell and consistent reading scale. */
.cp-app{height:calc(100dvh / var(--cp-scale,1));zoom:var(--cp-scale,1);font-size:14px}
/* 三个业务角色沿用馆长视角的基础深色变量（.cp-app 上定义），不再各自换肤 */
.cp-header{height:66px;display:grid;grid-template-columns:1fr auto 1fr;gap:20px;padding:0 24px;z-index:10}
.cp-brand{gap:16px}.cp-brand img{width:95px;height:29px}.cp-brand b{font-size:18px;letter-spacing:.3px;white-space:nowrap}
.cp-role-tabs{height:66px;gap:5px;border:0;background:transparent;padding:0;border-radius:0;align-items:stretch}.cp-role-tabs>button{position:relative;min-width:105px;width:auto;height:auto;font-size:14px;padding:0 15px;border-radius:0;box-shadow:none!important}.cp-role-tabs>button.active,.cp-theme-edu .cp-role-tabs>button.active,.cp-theme-box .cp-role-tabs>button.active{background:linear-gradient(0deg,var(--cp-soft),transparent);color:var(--cp-accent)}.cp-role-tabs>button.active:after{content:'';position:absolute;height:3px;bottom:0;left:20px;right:20px;background:var(--cp-accent)}
.cp-header-actions{justify-content:flex-end;gap:15px;margin-left:0}.cp-header-actions>button{font-size:12px}.cp-header-actions>button:nth-child(3),.cp-header-actions>button:nth-child(4){display:none}.cp-clock{min-width:110px;padding-left:12px}.cp-clock b{font-size:21px}.cp-clock span{font-size:10px}
.cp-viewport{padding:20px}.cp-role{min-height:760px;gap:18px}.cp-panel{border-radius:9px}.cp-app h2{font-size:16px}.cp-panel-head{padding:18px 19px 0}.cp-panel-body{padding:17px 19px}.cp-muted,.cp-link{font-size:12px!important}.cp-segments button{font-size:12px;padding:5px 9px}.cp-primary-button,.cp-outline-button{font-size:12px!important}.cp-stat-label{font-size:13px}.cp-stat-number{font-size:34px;margin-top:10px}.cp-stat-number>span{font-size:12px}.cp-stat-bottom{font-size:11px;margin-top:9px}.cp-donut span{font-size:11px}.cp-chart-legend{font-size:11px}.cp-chart-legend em{font-size:11px}.cp-count{font-size:12px}
/* A continuous campus scene occupies the director's main visual field. */
.cp-leader,.is-wide .cp-leader{display:grid;grid-template-columns:285px minmax(0,1fr) 280px;grid-template-rows:1fr;gap:20px;background:radial-gradient(ellipse at 52% 48%,#244258 0%,#102338 36%,transparent 68%)}
.leader-left,.leader-right{display:flex;flex-direction:column;gap:16px;min-height:0;z-index:2}.cp-leader .cp-panel{background:#132236e8;border-color:#2b3e5180;border-radius:8px}
.leader-overview{flex:1.1;min-height:245px}.leader-revenue{flex:1;min-height:200px}.leader-contribution{flex:1.1;min-height:265px}.leader-primary-number{display:flex;flex-direction:column;gap:8px}.leader-primary-number>span{font-size:13px;color:var(--cp-muted)}.leader-primary-number strong{font:500 44px 'Bahnschrift',sans-serif;letter-spacing:-1px;color:#a2dceb}.leader-primary-number em{font:13px 'Bahnschrift',sans-serif;color:var(--cp-positive)}.leader-primary-number em small{font:11px 'Microsoft YaHei',sans-serif;color:var(--cp-muted);margin-left:5px}.leader-kpi-pair{display:grid;grid-template-columns:1fr 1fr;padding-top:18px;margin-top:18px;border-top:1px solid var(--cp-line);gap:10px}.leader-kpi-pair>div{display:flex;flex-direction:column;gap:8px}.leader-kpi-pair span{font-size:12px;color:var(--cp-muted)}.leader-kpi-pair b{font:500 25px 'Bahnschrift',sans-serif}.leader-kpi-pair small{font:11px 'Microsoft YaHei',sans-serif;color:var(--cp-muted);margin-left:4px}.leader-revenue .cp-panel-body{padding:16px 19px;gap:10px}.leader-revenue .cp-line-chart{min-height:95px}.leader-revenue .cp-chart-legend{margin:0}.leader-stack{height:8px;margin-bottom:16px}.leader-business-list{height:auto;gap:10px}.leader-business-list>button{font-size:12px;padding:4px 0}.leader-business-list>button>strong{font-size:16px}.leader-business-list small,.leader-business-list em{font-size:11px}
.leader-campus{border:0;border-radius:0;background:transparent;isolation:isolate;overflow:visible}.leader-campus-head{top:8px;left:15px;right:15px;align-items:center;pointer-events:none}.leader-campus-head>div{display:flex;align-items:center;gap:10px;font-size:15px;font-weight:500;color:#b5cfdf}.leader-campus-head .cp-outline-button{background:#11243988;border-color:#355064;backdrop-filter:blur(8px);padding:9px 12px;font-size:12px!important}.leader-scene{inset:45px -30px 108px}.leader-campus-bottom{bottom:6px;left:3%;right:3%;height:102px;inset-inline:3%;display:grid;grid-template-columns:repeat(4,1fr);padding:18px 0;background:linear-gradient(180deg,#17354b77,transparent);border-top:1px solid #56778b55}.leader-campus-bottom>div{display:flex;flex-direction:column;gap:9px;align-items:center;border-right:1px solid #54758c44;font-size:13px}.leader-campus-bottom>div:last-child{border:0}.leader-campus-bottom strong{font:500 32px 'Bahnschrift',sans-serif;margin:0}.leader-campus-bottom small{font-size:12px;margin-left:5px}
.leader-target{flex:.85;min-height:210px}.leader-target .cp-panel-body{display:flex;flex-direction:column;justify-content:center;gap:20px}.leader-target-value{display:flex;flex-direction:column;gap:12px}.leader-target-value strong{font:500 34px 'Bahnschrift',sans-serif}.leader-target-value small{font:12px 'Microsoft YaHei',sans-serif;margin-left:6px;color:var(--cp-muted)}.leader-target-value span{font-size:12px;color:var(--cp-muted)}.leader-target-caption{font-size:11px;margin:0}.leader-target-caption b{color:var(--cp-accent)}.leader-decision-panel{flex:1.7;min-height:350px}.leader-decision-panel .cp-panel-body{padding:18px 19px}.leader-decision-list{justify-content:space-around}.decision-item{display:flex;gap:12px;align-items:flex-start;padding:16px 0;margin:0}.decision-item>div{display:block}.decision-index{font:20px 'Bahnschrift',sans-serif;color:#d7b37f}.decision-item h3{font-size:14px;margin:0}.decision-item p{font-size:11px;line-height:1.8;margin-top:8px}.decision-item>div>span{font-size:12px;color:var(--cp-accent);display:flex;align-items:center;gap:6px;margin-top:12px}.leader-quality{flex:.7;min-height:175px}.leader-quality .cp-panel-body{gap:15px;justify-content:space-around}.leader-quality .cp-panel-body>div:first-child{display:flex;align-items:baseline;gap:12px}.leader-quality strong{font:500 36px 'Bahnschrift',sans-serif;color:#e6c693}.leader-quality strong small{font-size:15px;margin-left:5px;color:var(--cp-muted)}.leader-quality span{font-size:12px;color:var(--cp-muted)}.quality-rates{display:flex;justify-content:space-between;border-top:1px solid var(--cp-line);padding-top:15px}.quality-rates span{display:flex;flex-direction:column;gap:6px;font-size:11px}.quality-rates b{font-size:15px;font-weight:500;color:var(--cp-text)}
/* Quiet architectural materials replace luminous grids and city clutter. */
.leader-scene .venue{--m-wall-a:#718da2;--m-wall-b:#425e74;--m-wall-c:#263f55;--m-roof-a:#abc0cf;--m-roof-b:#8aa3b6;--m-roof-c:#55758e;--g-a:#243e4e;--g-b:#152d40;--sky-a:transparent;--sky-b:transparent;--glow:.08;--lamp:.18;background:transparent}
.leader-scene .vsky,.leader-scene .vhaze,.leader-scene .vhalo,.leader-scene .vcity,.leader-scene .vfill,.leader-scene .vsweep,.leader-scene .vhud,.leader-scene .vplaza,.leader-scene .vspot,.leader-scene .vt-sign,.leader-scene .sys-rail,.leader-scene .venue-tip{display:none!important}.leader-scene .vground{background:linear-gradient(135deg,#3e5865,#29434f 55%,#203848);box-shadow:0 12px 40px #0004,inset 0 0 0 2px #69839355;border-radius:16px}.leader-scene .vtop{background:linear-gradient(145deg,#afc2cf,#8fa8bb 60%,#6f8a9f)!important;box-shadow:inset 0 0 0 1px #ccdae344!important}.leader-scene .vtop:after{opacity:.15}.leader-scene .vwall{box-shadow:none!important}.leader-scene .vwall:after{opacity:.5;background-image:repeating-linear-gradient(90deg,#b9d7e366 0 2px,transparent 2px 20px),repeating-linear-gradient(0deg,#192f4580 0 6px,transparent 6px 17px)}.leader-scene .vwall.s{background:linear-gradient(#7595aa,#3d617c)!important}.leader-scene .vwall.w{background:linear-gradient(#506f86,#29445c)!important}.leader-scene .vwall.e,.leader-scene .vwall.n{background:linear-gradient(#456178,#243d53)!important}.leader-scene .vsign{box-shadow:none!important;text-shadow:none!important}.leader-scene .vroad{background:#172c3a;box-shadow:inset 0 0 0 1px #ffffff15}.leader-scene .vroad.city{display:none}.leader-scene .vgtop{background:linear-gradient(140deg,#4e756a,#31564b);box-shadow:none}.leader-scene .vn-marker{--vc:#9ed7e4!important}.leader-scene .vn-card{background:#12314ae8;border:1px solid #7babbc77;border-radius:5px;padding:6px 10px;box-shadow:0 5px 14px #0003;gap:0}.leader-scene .vn-txt b{font-size:12px;font-weight:500;text-shadow:none}.leader-scene .vn-txt em,.leader-scene .vn-ico,.leader-scene .vn-go{display:none}.leader-scene .vn-beam{height:27px;background:linear-gradient(#80c7da99,transparent);width:1px}.leader-scene .vn-dot{width:5px;height:5px;box-shadow:0 0 0 4px #9ed7e41a}.leader-scene .vn-marker[data-system='member'],.leader-scene .vn-marker[data-system='finance'],.leader-scene .vn-marker[data-system='material'],.leader-scene .vn-marker[data-system='warehouse'],.leader-scene .vn-marker[data-system='ai'],.leader-scene .vn-marker[data-system='guide']{display:none!important}.leader-scene .venue-views{bottom:4px;gap:8px;z-index:110}.leader-scene .venue-views button{background:#183249aa;border:1px solid #385871;color:#95adbf;border-radius:4px;font-size:11px;padding:7px 12px;box-shadow:none}.leader-scene .venue-views button.on{color:#b7e7ee;border-color:#6b9dac;background:#25465d}
/* Teaching: a large schedule with one narrow working column. */
.cp-education{display:flex}.edu-layout,.is-wide .edu-layout{display:grid;grid-template-columns:minmax(0,1fr) 290px;gap:18px;flex:1;min-width:0}.edu-center,.is-wide .edu-center{display:grid;grid-template-columns:1fr;grid-template-rows:120px minmax(330px,1fr) 205px;gap:18px}.edu-stats{grid-template-columns:repeat(4,minmax(0,1fr));gap:0;background:var(--cp-surface);border:1px solid var(--cp-line);border-radius:9px;overflow:hidden}.edu-stats .cp-stat{padding:18px 20px;border:0;border-right:1px solid var(--cp-line);border-radius:0;background:none}.edu-stats .cp-stat:last-child{border:0}.edu-schedule .cp-panel-body{gap:18px}.edu-date{font-size:12px}.edu-date>span{font-size:11px}.edu-time-axis{font-size:12px;grid-template-columns:125px repeat(5,1fr)}.edu-room-label{width:125px;padding:5px 0;display:flex;flex-direction:column;justify-content:center}.edu-room-label>span{display:none}.edu-room-label b{font-size:12px}.edu-room-label small{font-size:10px}.edu-time-row{min-height:64px;padding:8px 0}.edu-lesson{padding:8px 10px}.edu-lesson strong{font-size:12px}.edu-lesson span{font-size:11px}.edu-lesson small{font-size:10px}.edu-schedule-foot>div{font-size:11px}.edu-week-column>header{font-size:12px;padding:12px 9px}.edu-week-column>header span{font-size:11px}.edu-week-column>div{gap:9px;padding:9px}.edu-week-lesson{padding:10px 7px;gap:7px}.edu-week-lesson time{font-size:12px}.edu-week-lesson strong{font-size:11px}.edu-week-lesson small{font-size:10px}.edu-week-empty{font-size:11px}
.edu-right{gap:16px}.edu-current{min-height:220px;flex:.9;padding:22px;background:#162537;border-color:#263548;border-radius:9px}.edu-current-status{font-size:12px;color:#7fa8bd;margin-bottom:auto}.edu-current h2{font-size:20px;margin-top:18px}.edu-current p{font-size:12px;margin:12px 0 18px}.edu-class-progress{font-size:11px}.edu-current>.cp-primary-button{margin-top:20px}.edu-teachers{flex:1;min-height:265px}.edu-teacher{padding:3px 0}.edu-teacher b{font-size:12px}.edu-teacher small{font-size:10px}.edu-teacher em{font-size:23px}.edu-teacher-footer{font-size:10px}.edu-attention{min-height:175px;flex:0}.edu-attention .cp-panel-body{gap:10px}.edu-attention button{display:flex;padding:4px 0;gap:12px;font-size:12px}.edu-attention button>span{flex:1;color:var(--cp-text)}.edu-attention button>b{font:19px 'Bahnschrift',sans-serif;width:auto;background:none;color:#dcc08c}.edu-family{padding:16px;flex:none}.edu-family strong{font-size:12px}.edu-family small{font-size:11px}.edu-bottom,.is-wide .edu-bottom{display:grid;grid-template-columns:1fr 1fr;gap:18px}.edu-funnel-steps strong{font-size:25px}.edu-funnel-steps span{font-size:11px}.edu-funnel-note{font-size:11px}.edu-funnel-note>span{font-size:10px}.edu-growth button b{font-size:12px}.edu-growth button>span small{font-size:10px}.edu-growth button strong{font-size:22px}
/* Ticketing: performance selectors, not decorative posters. */
.cp-ticketing{display:grid;grid-template-rows:230px minmax(430px,1fr);gap:18px}.ticket-top,.is-wide .ticket-top{grid-template-columns:minmax(0,1fr) 350px;gap:18px}.ticket-lineup{gap:14px}.ticket-section-label{height:25px;flex:none}.ticket-posters{gap:14px}.ticket-poster{display:flex;flex-direction:column;padding:18px 20px;background:#162537!important;border:1px solid var(--cp-line);border-radius:8px;color:var(--cp-text)!important;box-shadow:none!important}.ticket-poster.selected{border:2px solid #76cbd9;padding:17px 19px;background:#1c3550!important}.ticket-poster:before,.ticket-poster:after{display:none}.ticket-poster-top{display:flex;align-items:center;justify-content:space-between}.ticket-poster-top b{font:28px 'Bahnschrift',sans-serif;color:var(--cp-accent)}.ticket-poster-top>span{font-size:11px;background:rgba(118,203,217,.12);color:#8fc3d1;border:0;padding:4px 7px}.ticket-poster-title{margin:auto 0}.ticket-poster-title h2{font-size:23px;color:var(--cp-text);letter-spacing:0;margin:0 0 10px}.ticket-poster-title>span{font-size:12px;color:var(--cp-muted)}.ticket-poster-bottom{position:static;display:flex;flex-direction:column;align-items:stretch;gap:9px;border:0;padding:0;color:var(--cp-muted);font-size:11px}.ticket-poster-bottom>span{font-size:11px}.ticket-poster-bottom .cp-progress{height:4px}.ticket-sales{padding:20px 24px;background:#193044;border:0;--cp-muted:#9db1c0;--cp-accent:#ddbb8f;color:#eaf2f5}.ticket-sales h2{font-size:13px;font-weight:400;color:#b9c9d3}.ticket-sales-number{font-size:35px;margin-top:9px;letter-spacing:-.7px}.ticket-sales-number>small{font-size:19px}.ticket-sales-number>span{font-size:20px}.ticket-sales-trend{font-size:12px}.ticket-sales-trend small{font-size:10px}.ticket-sales-trend .cp-spark{height:26px}.ticket-sales-stats{margin:9px 0 12px;padding-top:14px;border-color:#ffffff20}.ticket-sales-stats b{font-size:24px}.ticket-sales-stats span{font-size:10px}.ticket-bottom{grid-template-columns:minmax(0,1.35fr) minmax(300px,1fr) 250px;gap:18px}.ticket-seating .cp-panel-body{gap:20px}.ticket-hall-tag{font-size:12px}.ticket-seat-summary h3{font-size:17px}.ticket-seat-summary h3 span{font-size:13px}.ticket-seat-summary p{font-size:12px;margin-top:10px}.ticket-seat-summary strong{font-size:36px}.ticket-seat-summary>div:last-child>span{font-size:12px}.ticket-stage{height:32px;font-size:12px;letter-spacing:8px;border-top:3px solid #3f627a;color:#7f96a8;margin-top:8px}.ticket-seats,.is-wide .ticket-seats{width:94%;max-width:740px;gap:7px 8px;flex:1;align-content:center}.ticket-seat{min-height:10px;max-height:17px;height:100%;border-radius:3px 3px 1px 1px}.ticket-seat.sold{background:#4d6b82;border-color:#5d7d97}.ticket-seat.locked{background:#cfa763;border-color:#b98f4f}.ticket-seat.available{background:transparent;border:1px solid #6fb5a8}.ticket-seat-footer{padding-top:14px}.ticket-channels .cp-panel-body{gap:12px}.ticket-channel{padding:7px 0}.ticket-channel-caption{font-size:11px}.ticket-channel>div:first-child{margin-bottom:11px}.ticket-channel>div>span:nth-child(2){font-size:13px}.ticket-channel strong{font-size:21px}.ticket-channel>small{font-size:10px;margin-top:8px}.ticket-channel-mark{width:27px;height:27px;font-size:12px}.ticket-channel-total{padding-top:15px;font-size:12px}.ticket-channel-total b{font-size:25px}.ticket-checkin{min-height:270px}.ticket-checkin .cp-panel-body{display:flex;flex-direction:column;gap:15px;justify-content:space-around}.ticket-checkin .cp-donut,.is-wide .ticket-checkin .cp-donut{width:130px!important;height:130px!important;max-width:130px;max-height:130px}.ticket-checkin .cp-donut strong{font-size:29px}.ticket-checkin-numbers{flex-direction:row;gap:12px}.ticket-checkin-numbers b{font-size:28px}.ticket-checkin-numbers span{font-size:11px}.ticket-exceptions{min-height:210px}.ticket-exceptions .cp-panel-body{padding:16px 18px;gap:12px}.ticket-exceptions b{font-size:12px}.ticket-exceptions small{font-size:10px}.ticket-exceptions strong{font-size:25px}.ticket-gate-status{font-size:10px;padding-top:13px}
/* Operations uses contrast and larger labels for fast scanning. */
.cp-operations{display:grid;grid-template-rows:100px minmax(0,1fr);gap:18px}.ops-strip{background:none;border:0;border-bottom:1px solid var(--cp-line);border-radius:0;padding:8px 0 20px}.ops-strip>div{gap:13px;padding:0 22px}.ops-strip>div>span{font-size:12px;gap:9px}.ops-strip strong{font-size:32px}.ops-strip strong small{font-size:11px}.ops-strip-status{flex-wrap:wrap;justify-content:center!important;gap:10px!important}.ops-strip-status button{flex-basis:100%;border:0;background:none;color:var(--cp-accent);font-size:12px}.ops-layout{grid-template-columns:230px minmax(0,1fr) 320px;gap:18px}.ops-center{grid-template-rows:minmax(355px,1fr) 210px;gap:18px}.ops-left,.ops-right{gap:18px}.ops-infrastructure{min-height:350px}.ops-infrastructure .cp-panel-body{padding:17px 19px;gap:14px}.ops-infrastructure button>div:first-child{font-size:12px}.ops-infrastructure strong{font-size:25px;margin:10px 0}.ops-infrastructure strong>small{font-size:12px}.ops-infrastructure strong>span{font-size:11px}.ops-teams{min-height:255px}.ops-team b{font-size:12px}.ops-team small{font-size:10px}.ops-team strong{font-size:25px}.ops-team-note{font-size:10px}.ops-map-panel{background:radial-gradient(ellipse,#1c3c4b,#102432 70%)}.ops-map{background:none;margin:18px 16px 0}.ops-map-road{background:#526c7b55}.ops-zone{border:1px solid #86b7c955;background:linear-gradient(145deg,#3a5c6c,#294554);border-radius:5px;box-shadow:5px 7px 0 #08192377,inset 0 0 0 4px #ffffff05;gap:8px}.ops-zone b{font-size:14px}.ops-zone small{font-size:11px;color:#a8c5cc}.ops-zone>svg{width:22px;color:#91b9c7}.ops-zone.attention{background:linear-gradient(145deg,#645b3d,#454b40);border-color:#baaa7477}.ops-zone.selected{border-color:#deba72;box-shadow:5px 7px 0 #08192388,0 0 20px #dfb66f10}.ops-zone-roof{display:none}.ops-map-north{font-size:12px}.ops-map-garden{font-size:11px}.ops-map-road-name{font-size:10px}.ops-map-legend{font-size:10px}.ops-zone-detail{background:#122a36;gap:24px;padding:17px 19px}.ops-zone-detail b{font-size:13px}.ops-zone-detail>span{font-size:11px}.ops-zone-detail strong{font-size:23px}.ops-zone-detail small{font-size:10px}.ops-center-bottom{gap:18px}.ops-environment strong{font-size:42px}.ops-environment .cp-panel-body>div:first-child>span{font-size:11px}.ops-environment-row{font-size:10px;gap:12px}.ops-incidents{min-height:405px}.ops-event-count{font-size:11px}.ops-incidents .cp-segments{align-self:stretch;justify-content:space-between}.ops-incidents .cp-segments button{font-size:11px;padding:5px 7px}.ops-incident{padding:15px;background:#1a2e38}.ops-incident h3{font-size:14px;margin-top:12px}.ops-incident p{font-size:11px;margin-top:10px}.ops-incident footer{font-size:10px;margin-top:13px;padding-top:11px}.ops-incident-level,.ops-incident-status{font-size:10px}.ops-incident time{font-size:11px}.ops-timeline{min-height:220px}.ops-timeline b{font-size:12px}.ops-timeline small{font-size:10px}.ops-timeline time{font-size:11px}
.leader-scene .vground{width:1100px;height:1000px;transform:translate3d(-550px,-490px,-2px);background:linear-gradient(140deg,#344e5a,#263f4c 55%,#1d3543);box-shadow:0 10px 0 #162c3a,0 11px 0 #526e7c66,0 30px 65px #0007,inset 0 0 0 3px #6e8d9955;border-radius:30px}
.leader-scene .vwall:after{display:block!important;opacity:.52;inset:12px 7px 9px;background-image:repeating-linear-gradient(90deg,#abcbdc77 0 7px,transparent 7px 15px),repeating-linear-gradient(0deg,#27475bcc 0 5px,transparent 5px 14px);background-blend-mode:multiply}.leader-scene .is-roof .vwall:after,.leader-scene .is-bridge .vwall:after{display:none!important}.leader-scene .vsign-roof{display:none}.leader-scene .vsign{font-weight:500;color:#e6eff5;font-size:12px!important;letter-spacing:2px}.leader-scene .slab-lawn{background:linear-gradient(140deg,#406957,#2b4b42);box-shadow:inset 0 0 0 2px #6e907744;border-radius:14px}.leader-scene .slab-play{background:#b39c77;box-shadow:inset 0 0 0 3px #dac5a544}.leader-scene .slab-pool{background:#447d8b;border-color:#7ca4b1}.leader-scene .vtree i{background:radial-gradient(circle at 35% 30%,#93ad87,#567b64 45%,#294f44 80%);border-radius:48% 52% 44% 50%;box-shadow:0 2px 6px #0003}.leader-scene .vlight,.leader-scene .vwalker,.leader-scene .vfountain{opacity:.25}.leader-scene .vroad{background:#1c303d;box-shadow:0 0 0 3px #8499a122}.leader-scene .vroad:after{opacity:.4}.leader-scene .venue-cam{overflow:visible}.leader-scene .vn-card{background:#102b3edd;border-color:#6f9ba944;backdrop-filter:blur(8px)}
.leader-right{display:grid;grid-template-rows:200px minmax(350px,1fr) 190px}.leader-target,.leader-quality,.leader-decision-panel{min-height:0}.leader-target .cp-panel-body{gap:16px}.leader-decision-list{min-height:0;justify-content:space-between}.decision-item{padding:10px 0}.decision-item p{margin-top:6px}.decision-item>div>span{margin-top:8px}.leader-decision-panel .cp-panel-body{gap:10px;padding-top:10px;padding-bottom:15px}.leader-quality .cp-panel-body{padding-top:10px;padding-bottom:16px;gap:10px}.quality-rates{padding-top:11px}.leader-quality strong{font-size:32px}
@media(min-width:1181px) and (max-width:1650px){.cp-leader,.is-wide .cp-leader{grid-template-columns:255px minmax(0,1fr)255px;gap:16px}.cp-brand b{font-size:16px}.cp-header{padding:0 20px;gap:12px}.cp-role-tabs>button{min-width:96px;padding:0 12px}.cp-header-actions{gap:12px}.cp-panel-head{padding-left:17px;padding-right:17px}.cp-panel-body{padding-left:17px;padding-right:17px}.leader-primary-number strong{font-size:40px}.leader-campus-bottom>div{font-size:12px}.leader-campus-bottom strong{font-size:29px}.cp-clock{min-width:105px}.cp-header-actions>button{font-size:11px}}
.edu-right{display:grid;grid-template-rows:220px minmax(265px,1fr) 175px 74px;gap:16px}.edu-current{padding:20px 22px}.edu-current h2{margin-top:13px}.edu-current p{margin:9px 0 15px}.edu-current>.cp-primary-button{margin-top:15px}.edu-current .cp-progress{flex:none;margin-top:7px}.edu-teachers .cp-panel-body{padding:10px 18px 15px;gap:9px}.edu-teacher{padding:0;min-height:35px}.edu-teacher-footer{padding-top:10px;flex:none}.edu-attention .cp-panel-body{gap:6px;padding:10px 18px 14px}.edu-attention button{padding:4px 0;min-height:28px}.edu-attention button>b{height:22px}.edu-schedule .cp-panel-body{gap:12px}.edu-time-row{min-height:57px}.edu-schedule-foot{flex:none;padding-top:7px}.edu-lesson small{display:none}.edu-lesson{padding:8px 10px}.edu-week-grid{min-height:0;overflow:auto}.edu-family{height:74px;min-height:0}
.cp-ticketing{grid-template-rows:250px minmax(500px,1fr)}.ticket-poster{min-height:0;border-color:var(--cp-line)!important}.ticket-poster.selected{border-color:#76cbd9!important}.ticket-poster-top>span{font-size:11px!important;color:#8fc3d1!important;background:rgba(118,203,217,.12)!important}.ticket-poster-title{margin:auto 0}.ticket-posters{min-height:0}.ticket-top{min-height:0}.ticket-seat-summary strong{color:#ddbb8f}.ticket-channel-mark{opacity:1}.ticket-fulfillment{gap:18px}
.ops-infrastructure .cp-panel-body{gap:10px;padding-top:15px;padding-bottom:16px}.ops-infrastructure strong{margin:7px 0}.ops-zone{box-shadow:0 4px 0 #08192366;background:linear-gradient(145deg,#345668,#284755);color:#d2e4eb!important;padding:10px 8px;gap:5px}.ops-zone>svg{display:none}.ops-zone small{color:#9cbbc6}.ops-zone.selected{box-shadow:0 4px 0 #08192366}.ops-zone.attention small{color:#dfbe7f}.ops-map-green{background:#3f665233;border:1px solid #53785c33;border-radius:10px}.ops-map-grid{opacity:.5}.ops-map-road-name{font-size:10px;letter-spacing:1px}.ops-map-garden{letter-spacing:1px}.ops-map-water{border-color:#4b7b8a44;background:#47738333}.ops-strip-status>b{font-size:12px}
@media(max-width:1180px){.cp-header{grid-template-columns:auto 1fr auto;height:62px;padding:0 18px;gap:14px}.cp-brand b,.cp-brand-divider,.cp-clock{display:none}.cp-brand img{width:85px}.cp-role-tabs{height:62px;justify-content:center}.cp-role-tabs>button{min-width:90px;font-size:13px;padding:0 10px}.cp-header-actions{gap:14px}.cp-header-actions>button>span{display:none}.cp-viewport{padding:16px}.cp-role,.cp-role-frame{height:auto;min-height:0}.cp-leader,.is-wide .cp-leader{display:grid;grid-template-columns:235px minmax(0,1fr);grid-template-rows:auto auto;gap:16px}.leader-left{grid-row:1;min-height:740px}.leader-campus{grid-column:2;grid-row:1;min-height:740px}.leader-right{grid-column:1/-1;display:grid;grid-template-columns:1fr 1.4fr 1fr;grid-template-rows:350px;gap:16px}.leader-decision-panel .cp-panel-body{padding-top:8px}.decision-item{padding:7px 0;gap:8px}.decision-item h3{font-size:12px}.decision-item p{font-size:10px}.decision-item>div>span{font-size:11px;margin-top:6px}.leader-quality .cp-panel-body{justify-content:center;gap:28px}.leader-scene{inset:50px -24px 100px}.leader-campus-bottom strong{font-size:25px}.leader-campus-bottom>div{font-size:11px}.leader-campus-bottom{left:0;right:0;inset-inline:0}.edu-layout,.is-wide .edu-layout{grid-template-columns:minmax(0,1fr) 250px}.edu-center,.is-wide .edu-center{grid-template-rows:120px 440px 230px}.edu-right{grid-template-rows:220px 300px 192px 74px}.edu-stats .cp-stat{padding:18px 13px}.cp-stat-number{font-size:28px}.edu-time-axis{grid-template-columns:100px repeat(5,1fr);font-size:10px}.edu-room-label{width:100px}.edu-room-label b{font-size:10px}.edu-room-label small{font-size:9px}.edu-lesson strong{font-size:10px}.edu-lesson span{font-size:9px}.edu-schedule-toolbar{flex-wrap:wrap;gap:10px}.edu-current h2{font-size:17px}.edu-growth button b{font-size:11px}.edu-growth button>span small{font-size:9px}.edu-funnel-steps{gap:9px}.edu-funnel-steps strong{font-size:22px}.edu-funnel-steps span{font-size:9px}.edu-funnel-note{flex-wrap:wrap}.edu-bottom{grid-template-columns:1fr 1fr}.ticket-top,.is-wide .ticket-top{grid-template-columns:1fr 285px}.cp-ticketing{grid-template-rows:250px auto}.ticket-posters{gap:10px}.ticket-poster{padding:17px 13px}.ticket-poster.selected{padding:16px 12px}.ticket-poster-top b{font-size:24px}.ticket-poster-top>span{font-size:9px!important;padding:3px}.ticket-poster-title h2{font-size:17px}.ticket-poster-title>span{font-size:10px}.ticket-sales{padding:20px}.ticket-bottom{grid-template-columns:1.2fr 1fr}.ticket-seating,.ticket-channels{min-height:550px}.ticket-fulfillment{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr;min-height:300px}.ticket-checkin .cp-panel-body{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr auto}.ticket-checkin .cp-link{grid-column:1/-1}.ticket-checkin-numbers{flex-direction:column}.ops-layout{grid-template-columns:210px minmax(0,1fr)}.cp-operations{grid-template-rows:100px auto}.ops-center{grid-template-rows:450px 230px}.ops-left{min-height:698px}.ops-right{grid-column:1/-1;display:grid;grid-template-columns:1.3fr 1fr;gap:16px}.ops-incidents{height:450px}.ops-timeline{min-height:450px}.ops-strip>div{padding:0 12px;gap:8px}.ops-strip>div>svg{display:none}.ops-strip strong{font-size:26px}.ops-center-bottom{grid-template-columns:1.3fr 1fr}.ops-zone-detail{gap:12px}.ops-zone-detail>div>svg{display:none}.ops-zone-detail button{padding:7px;font-size:10px!important}.ops-map-legend{font-size:9px}.ops-zone b{font-size:12px}.ops-zone small{font-size:10px}}
@media(max-width:760px){.cp-header{padding:0 10px;gap:4px;grid-template-columns:1fr auto}.cp-brand{display:none}.cp-header-actions>button:nth-child(2),.cp-header-actions>button:nth-child(5){display:none}.cp-role-tabs{gap:0;justify-content:flex-start}.cp-role-tabs>button{font-size:12px;min-width:0;flex:1;padding:0 8px}.cp-role-tabs>button.active:after{left:12px;right:12px}.cp-header-actions{gap:0}.cp-viewport{padding:12px}.cp-panel-head{padding:16px 15px 0}.cp-panel-body{padding:15px}.cp-leader,.is-wide .cp-leader{display:flex;flex-direction:column;gap:14px}.leader-campus{order:-1;min-height:470px}.leader-scene{inset:45px -18px 90px}.leader-campus-head{left:7px;right:7px}.leader-campus-head>div{font-size:13px}.leader-campus-bottom{height:80px;padding:12px 0}.leader-campus-bottom strong{font-size:23px}.leader-campus-bottom>div{font-size:10px}.leader-campus-bottom small{font-size:10px}.leader-left{min-height:0;display:grid;grid-template-columns:1fr;gap:14px}.leader-overview{min-height:250px}.leader-revenue{min-height:240px}.leader-contribution{min-height:270px}.leader-right{display:flex;flex-direction:column;gap:14px}.leader-target{min-height:220px}.leader-decision-panel{min-height:380px}.leader-quality{min-height:200px}.leader-quality .cp-panel-body{gap:20px}.decision-item h3{font-size:14px}.decision-item p{font-size:12px}.edu-layout,.is-wide .edu-layout{display:flex;flex-direction:column;gap:14px}.edu-center,.is-wide .edu-center{display:flex;flex-direction:column;gap:14px}.edu-stats{display:grid;grid-template-columns:1fr 1fr}.edu-stats .cp-stat{padding:17px;border-bottom:1px solid var(--cp-line)}.edu-stats .cp-stat:nth-child(2){border-right:0}.edu-stats .cp-stat-label{font-size:12px}.edu-schedule{height:455px}.edu-time-axis{grid-template-columns:70px repeat(5,1fr);font-size:9px}.edu-room-label{width:70px;padding:0 7px 0 0}.edu-room-label b{font-size:9px}.edu-room-label small{font-size:8px}.edu-lesson{padding:6px 4px}.edu-lesson strong{font-size:9px}.edu-lesson span{font-size:8px}.edu-bottom,.is-wide .edu-bottom{display:flex;flex-direction:column;gap:14px}.edu-funnel,.edu-growth{min-height:230px}.edu-right{display:grid;grid-template-rows:220px 290px 180px 74px;gap:14px}.edu-family{min-height:74px}.edu-week-grid{overflow:auto;min-width:0}.edu-week-column{min-width:110px}.cp-ticketing{display:flex;flex-direction:column;gap:14px}.ticket-top,.is-wide .ticket-top{display:flex;flex-direction:column;gap:14px}.ticket-posters{grid-template-columns:1fr}.ticket-poster{height:170px}.ticket-poster-title h2{font-size:22px}.ticket-poster-top>span{font-size:11px!important}.ticket-sales{min-height:250px}.ticket-bottom{display:flex;flex-direction:column;gap:14px}.ticket-seating{min-height:520px}.ticket-seats{gap:5px 4px}.ticket-channels{min-height:490px}.ticket-fulfillment{display:flex;flex-direction:column;gap:14px}.ticket-checkin{min-height:270px}.ticket-exceptions{min-height:230px}.ops-strip{grid-template-columns:repeat(3,1fr);gap:20px 0;padding:15px 0}.ops-strip>div:nth-child(3){border-right:0}.ops-strip>div>span{font-size:10px}.ops-strip strong{font-size:26px}.ops-strip strong small{font-size:9px}.cp-operations{display:flex;flex-direction:column;gap:14px}.ops-layout{display:flex;flex-direction:column;gap:14px}.ops-left{display:grid;grid-template-columns:1fr 1fr;gap:12px;min-height:0}.ops-infrastructure{min-height:365px}.ops-teams{min-height:365px}.ops-team{gap:6px}.ops-team-avatar{display:none}.ops-team strong{font-size:21px}.ops-team b{font-size:11px}.ops-team small{font-size:9px}.ops-team-note{font-size:9px;line-height:1.7}.ops-center{display:flex;flex-direction:column;gap:14px}.ops-map-panel{min-height:420px}.ops-map-panel .cp-segments button{font-size:9px;padding:4px}.ops-map-panel .cp-panel-head{gap:5px}.ops-zone b{font-size:10px}.ops-zone small{font-size:8px}.ops-map{min-height:265px;margin:12px 10px 0}.ops-map-legend{font-size:8px;gap:7px}.ops-map-garden{font-size:8px}.ops-zone{padding:5px;gap:3px}.ops-zone-detail{padding:15px;gap:10px}.ops-zone-detail b{font-size:11px}.ops-zone-detail>span{font-size:9px}.ops-zone-detail strong{font-size:20px}.ops-center-bottom{grid-template-columns:1fr;gap:14px}.ops-flow{height:230px}.ops-environment{height:205px}.ops-right{display:flex;flex-direction:column;gap:14px}.ops-incidents{min-height:460px}.ops-timeline{min-height:270px}}
@media(prefers-reduced-motion:reduce){.cp-role-frame{animation:none}.cp-app,.cp-progress>i{transition:none}}

/* Layout revision verified at large and compact viewports. */
@keyframes cp-enter{from{opacity:0}to{opacity:1}}.cp-role-frame{animation:cp-enter .24s ease-out both}.leader-scene .vn-marker:focus-visible{outline:2px solid #b5e6ec;outline-offset:5px;border-radius:5px}
@media(prefers-reduced-motion:reduce){.cp-role-frame{animation:none}.leader-scene *{animation:none!important}}
.edu-time-row{min-height:64px}.edu-lesson{padding:5px 8px}.edu-lesson strong{line-height:1.4}.edu-lesson span{margin-top:2px;line-height:1.4}.edu-timetable{min-height:0}.edu-time-rows{min-height:256px}
@media(max-width:760px){.edu-schedule{height:500px}.edu-lesson{padding:6px 4px}}
@media(min-width:761px) and (max-width:1180px){.cp-leader,.is-wide .cp-leader{grid-template-columns:1fr 1fr;grid-template-rows:560px auto}.leader-campus{grid-column:1/-1;grid-row:1;min-height:560px}.leader-left{grid-column:1;grid-row:2;min-height:780px}.leader-right{grid-column:2;grid-row:2;display:grid;grid-template-columns:1fr;grid-template-rows:200px minmax(350px,1fr) 190px;min-height:780px}.leader-scene{inset:25px 0 100px}.leader-decision-panel .cp-panel-body{padding-top:14px}.decision-item h3{font-size:14px}.decision-item p{font-size:12px}.decision-item>div>span{font-size:12px;margin-top:10px}.leader-quality .cp-panel-body{gap:10px;justify-content:space-around}}
.ticket-checkin .cp-panel-body{display:grid;grid-template-columns:1.2fr .8fr;grid-template-rows:1fr auto;align-items:center;justify-items:center;gap:10px;padding:16px}.ticket-checkin .cp-donut,.is-wide .ticket-checkin .cp-donut{width:110px!important;height:110px!important;max-width:110px;max-height:110px}.ticket-checkin .cp-donut strong{font-size:25px}.ticket-checkin .cp-donut span{font-size:10px}.ticket-checkin-numbers{flex-direction:column;gap:16px}.ticket-checkin-numbers b{font-size:26px}.ticket-checkin .cp-link{grid-column:1/-1;margin:0}

.cp-app{transition:none}

/* 导览机器人标记（运营地图，与馆长大屏同一份数据）：1 号巡逻 / 2 号充电 */
.ops-robot { position:absolute; z-index:6; transform:translate(-50%,-50%); display:flex; align-items:center; gap:6px; border:0; background:none; padding:0; cursor:pointer; transition:left 9s linear, top 9s linear; }
.ops-robot-dot { width:10px; height:10px; border-radius:50%; background:#76cbd9; box-shadow:0 0 0 3px rgba(118,203,217,.22), 0 0 10px #76cbd9; flex:none; }
.ops-robot.charge .ops-robot-dot { background:#dfb66f; box-shadow:0 0 0 3px rgba(223,182,111,.22), 0 0 10px #dfb66f; animation:ops-robot-blink 2.2s ease-in-out infinite; }
@keyframes ops-robot-blink { 50% { opacity:.45; } }
.ops-robot-tag { font-size:10px; padding:2px 8px; border-radius:9px; background:#12243ae6; border:1px solid #3f627b; color:#cfe6ef; white-space:nowrap; }
.ops-robot.charge .ops-robot-tag { color:#e8d9b8; border-color:#6b5a3a; }
.ops-robot:hover .ops-robot-tag { border-color:#76cbd9; }
.ops-map-legend .ops-legend-robot { background:#76cbd9; }
/* =========================================================
   全屏智能体工作台（#/agent）
   —— 深色科技风，与驾驶舱同一色系（藏青 + 青蓝）
   ========================================================= */

.wb {
  height: 100vh;
  display: flex;
  flex-direction: column;
  background:
    radial-gradient(ellipse at 50% -10%, #173249 0%, transparent 55%),
    #0b1421;
  color: #dcebf4;
  font-family: "Microsoft YaHei", "PingFang SC", sans-serif;
  overflow: hidden;
}

.wb-head {
  flex: none;
  height: 64px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 24px;
  border-bottom: 1px solid #22405a;
}
.wb-brand { display: flex; align-items: center; gap: 12px; }
.wb-logo {
  width: 38px;
  height: 38px;
  border-radius: 11px;
  display: grid;
  place-items: center;
  font-size: 19px;
  background: linear-gradient(135deg, #0d2b3e, #14405c);
  color: #9fe0ec;
  border: 1px solid rgba(118, 203, 217, 0.4);
}
.wb-brand b { font-size: 17px; font-weight: 600; letter-spacing: 1px; }
.wb-brand span { display: flex; align-items: center; gap: 5px; font-size: 11px; color: #7fa3bb; margin-top: 3px; }
.wb-back {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-size: 12px;
  color: #8fb0c4;
  padding: 7px 13px;
  border: 1px solid #2b4a63;
  border-radius: 7px;
}
.wb-back:hover { color: #9fe0ec; border-color: #4d9db5; }

.wb-stats {
  flex: none;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 14px;
  padding: 16px 24px 4px;
}
.wb-stat {
  border: 1px solid #22405a;
  border-radius: 10px;
  background: #10213599;
  padding: 13px 18px;
  display: flex;
  flex-direction: column;
  gap: 7px;
}
.wb-stat span { font-size: 12px; color: #7fa3bb; }
.wb-stat b { font: 500 27px/1 "Bahnschrift", "Segoe UI", sans-serif; color: #a9e2e9; letter-spacing: 0.5px; }
.wb-stat b small { font-size: 12px; color: #7fa3bb; margin-left: 5px; }

.wb-main {
  flex: 1;
  min-height: 0;
  display: grid;
  grid-template-columns: minmax(0, 1fr) 360px;
  gap: 14px;
  padding: 14px 24px 20px;
}

/* 对话区 */
.wb-chat {
  min-width: 0;
  min-height: 0;
  display: flex;
  flex-direction: column;
  border: 1px solid #22405a;
  border-radius: 12px;
  background: #0e1d30;
  overflow: hidden;
}
.wb-ctx {
  flex: none;
  display: flex;
  gap: 6px;
  padding: 11px 12px;
  border-bottom: 1px solid #22405a;
  overflow-x: auto;
  scrollbar-width: none;
}
.wb-ctx::-webkit-scrollbar { display: none; }
.wb-ctx button {
  flex: none;
  border: 1px solid #2b4a63;
  background: transparent;
  color: #8fb0c4;
  font-size: 12px;
  padding: 5px 11px;
  border-radius: 14px;
  cursor: pointer;
}
.wb-ctx button:hover { color: #9fe0ec; border-color: #4d9db5; }
.wb-ctx button.on { background: rgba(118, 203, 217, 0.14); border-color: #4d9db5; color: #9fe0ec; }
.wb-chat .ag-msgs { padding: 14px 16px; }
.wb-chat .ag-input { padding: 12px 14px 14px; }

/* 右栏 */
.wb-side {
  min-height: 0;
  display: grid;
  grid-template-rows: minmax(0, 1fr) auto;
  gap: 14px;
}
.wb-panel {
  min-height: 0;
  border: 1px solid #22405a;
  border-radius: 12px;
  background: #0e1d30;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.wb-panel-hd {
  flex: none;
  padding: 12px 15px;
  font-size: 13px;
  font-weight: 600;
  border-bottom: 1px solid #22405a;
  display: flex;
  align-items: baseline;
  gap: 8px;
}
.wb-panel-hd small { font-size: 10px; font-weight: 400; color: #7fa3bb; margin-left: auto; }

.wb-log { flex: 1; min-height: 0; overflow: auto; padding: 6px 8px; }
.wb-log-item {
  display: flex;
  gap: 9px;
  align-items: flex-start;
  padding: 8px 7px;
  border-radius: 8px;
}
.wb-log-item:hover { background: rgba(118, 203, 217, 0.05); }
.wb-log-item time { font: 11px "Bahnschrift", sans-serif; color: #7fa3bb; padding-top: 2px; flex: none; }
.wb-log-item div { min-width: 0; flex: 1; display: flex; flex-direction: column; gap: 3px; }
.wb-log-place { font-size: 10px; color: #6f95ad; }
.wb-log-item p { margin: 0; font-size: 12px; color: #d7e9f2; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wb-log-item em { flex: none; font-style: normal; font-size: 10px; padding: 2px 6px; border-radius: 8px; margin-top: 1px; }
.wb-log-item em.hit { color: #8ecbbc; background: rgba(142, 203, 188, 0.12); }
.wb-log-item em.miss { color: #dfb66f; background: rgba(223, 182, 111, 0.12); }

.wb-links { display: flex; flex-wrap: wrap; gap: 7px; padding: 12px 13px; }
.wb-links button {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  border: 1px solid #2b4a63;
  background: transparent;
  color: #b9d2e0;
  font-size: 12px;
  padding: 6px 11px;
  border-radius: 7px;
  cursor: pointer;
}
.wb-links button:hover { border-color: #4d9db5; color: #9fe0ec; }
.wb-links i { width: 6px; height: 6px; border-radius: 50%; }

@media (max-width: 1180px) {
  .wb-main { grid-template-columns: minmax(0, 1fr); overflow: auto; }
  .wb-side { grid-template-rows: none; }
  .wb-stats { grid-template-columns: repeat(2, 1fr); }
}
