:root {
  --bg: #04070c;
  --ink: #e7eef6;
  --muted: #8d9aab;
  --silver-hi: #f5f8fb;
  --silver: #c6d0da;
  --silver-mid: #8d99a6;
  --silver-lo: #4b5663;
  --cyan: #4fd1ff;
  --cyan-dim: rgba(79, 209, 255, .35);
  --line: rgba(198, 208, 218, .2);
  --line-hi: rgba(220, 230, 240, .45);
  --glass: rgba(14, 20, 30, .74);
  --danger: #ff5d6c;
  --f-title: 'Orbitron', 'Microsoft YaHei', 'PingFang SC', sans-serif;
  --f-num: 'Rajdhani', 'Orbitron', 'Microsoft YaHei', sans-serif;
  --f-body: 'Microsoft YaHei', 'PingFang SC', 'Noto Sans SC', sans-serif;
  --chrome: linear-gradient(180deg, #ffffff 0%, #e3e9ef 38%, #8f9ba8 52%, #d3dbe3 72%, #ffffff 100%);
  --cut: polygon(14px 0, 100% 0, 100% calc(100% - 14px), calc(100% - 14px) 100%, 0 100%, 0 14px);
  --cut-sm: polygon(8px 0, 100% 0, 100% calc(100% - 8px), calc(100% - 8px) 100%, 0 100%, 0 8px);
}
* { box-sizing: border-box; }
html, body { margin: 0; height: 100%; background: var(--bg); color: var(--ink); font-family: var(--f-body); font-size: 14px; overflow: hidden; }
button, input, select, textarea { font: inherit; color: inherit; }
::selection { background: var(--cyan); color: #001018; }
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-thumb { background: linear-gradient(180deg, #8d99a6, #4b5663); border-radius: 4px; }
::-webkit-scrollbar-track { background: transparent; }

/* ---------- 背景：天空城市 + 飞行无人机 ---------- */
.bg-layer { position: fixed; inset: 0; z-index: 0; pointer-events: none; overflow: hidden; }
.bg-img { position: absolute; inset: -2%; background: url(assets/bg-skycity.jpg) center 30% / cover no-repeat; animation: drift 60s ease-in-out infinite alternate; }
@keyframes drift { to { transform: scale(1.06) translateX(-1.5%); } }
.bg-shade { position: absolute; inset: 0; transition: background .6s;
  background: radial-gradient(ellipse at 50% 30%, rgba(4,7,12,.05), rgba(4,7,12,.55) 70%), linear-gradient(180deg, rgba(4,7,12,.15), rgba(4,7,12,.75)); }
body.in-app .bg-shade { background: radial-gradient(ellipse at 50% 10%, rgba(6,12,22,.25), rgba(4,7,12,.8) 70%), rgba(4,7,12,.4); }
.sky-drones .fly { position: absolute; left: 0; animation: fly linear infinite; will-change: transform; }
.sky-drones .fly .drone { animation: hover 3s ease-in-out infinite alternate; }
@keyframes fly { from { transform: translateX(-12vw); } to { transform: translateX(112vw); } }
@keyframes hover { to { transform: translateY(-10px) rotate(-2deg); } }

/* 无人机 SVG 部件 */
.drone { display: block; overflow: visible; }
.drone .rotor { transform-box: fill-box; transform-origin: center; animation: rotor .09s linear infinite; }
@keyframes rotor { 50% { transform: scaleX(.25); } }
.drone .nav-r { animation: blink 1.2s steps(2) infinite; }
.drone .nav-g { animation: blink 1.2s steps(2) .6s infinite; }
@keyframes blink { 50% { opacity: .15; } }
.drone .beam { animation: beam 2.4s ease-in-out infinite; transform-box: fill-box; transform-origin: top center; }
@keyframes beam { 50% { opacity: .25; transform: scaleY(.85); } }

#app { position: relative; z-index: 1; height: 100%; }

/* ---------- 通用组件 ---------- */
.panel { position: relative; background: linear-gradient(180deg, rgba(30,40,54,.78), rgba(10,15,24,.86)); border: 1px solid var(--line); clip-path: var(--cut);
  backdrop-filter: blur(14px) saturate(1.2); -webkit-backdrop-filter: blur(14px) saturate(1.2); box-shadow: inset 0 1px 0 rgba(255,255,255,.1); }
.panel::before { content: ''; position: absolute; left: 14px; right: 0; top: 0; height: 1px; background: linear-gradient(90deg, rgba(255,255,255,.75), rgba(198,208,218,.15) 60%, transparent); pointer-events: none; }
.panel::after { content: ''; position: absolute; right: 0; bottom: 0; width: 26px; height: 26px; background: linear-gradient(135deg, transparent 50%, var(--cyan-dim) 50%, transparent 56%); pointer-events: none; }
.h-title { font-family: var(--f-title); font-weight: 700; letter-spacing: .1em; margin: 0; background: var(--chrome); -webkit-background-clip: text; background-clip: text; color: transparent;
  filter: drop-shadow(0 0 10px rgba(79,209,255,.28)) drop-shadow(0 2px 0 rgba(0,0,0,.6)); }
.sub-en { font-family: var(--f-title); font-size: 10px; letter-spacing: .32em; color: var(--silver-mid); text-transform: uppercase; }
.btn { cursor: pointer; border: 1px solid rgba(198,208,218,.35); background: linear-gradient(180deg, rgba(64,78,96,.75), rgba(20,27,38,.85)); color: var(--silver-hi); padding: 8px 16px;
  font-family: var(--f-title); font-size: 12px; font-weight: 500; letter-spacing: .08em; clip-path: var(--cut-sm); transition: .15s; white-space: nowrap; }
.btn:hover { border-color: var(--cyan); color: #fff; box-shadow: 0 0 16px rgba(79,209,255,.45), inset 0 0 12px rgba(79,209,255,.15); }
.btn:disabled { opacity: .4; cursor: not-allowed; }
.btn.primary { background: var(--chrome); color: #0b1422; border-color: #fff; font-weight: 700; text-shadow: 0 1px 0 rgba(255,255,255,.6); }
.btn.primary:hover { box-shadow: 0 0 22px rgba(255,255,255,.45), 0 0 10px rgba(79,209,255,.6); }
.btn.cyan { background: linear-gradient(180deg, rgba(79,209,255,.45), rgba(10,70,110,.7)); border-color: var(--cyan); color: #eafaff; }
.btn.danger { background: linear-gradient(180deg, rgba(255,93,108,.5), rgba(110,16,30,.75)); border-color: #ff8a96; color: #fff0f2; }
.btn.ghost { background: rgba(10,15,24,.4); border-color: var(--line); color: var(--muted); }
.btn.sm { padding: 5px 11px; font-size: 11px; }
.inp, select.inp, textarea.inp { width: 100%; background: rgba(4,8,14,.6); border: 1px solid var(--line); border-radius: 2px; padding: 8px 10px; outline: none; color: var(--ink); transition: .15s; }
.inp:focus { border-color: var(--cyan); box-shadow: 0 0 0 1px rgba(79,209,255,.3), 0 0 16px rgba(79,209,255,.18); }
.inp:disabled { opacity: .55; }
select.inp option { background: #0e1520; }
input[type=date].inp { color-scheme: dark; }
label.lbl { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--muted); letter-spacing: .08em; margin-bottom: 5px; }
.chip { display: inline-flex; align-items: center; gap: 4px; padding: 1px 8px; font-size: 11px; border: 1px solid currentColor; border-radius: 10px; white-space: nowrap; background: rgba(0,0,0,.25); }
.pill { display: inline-flex; align-items: center; gap: 6px; padding: 3px 12px; font-size: 12px; font-weight: 700; color: #04121c; border-radius: 12px; box-shadow: 0 0 12px currentColor; }
.empty { color: var(--muted); text-align: center; padding: 28px 10px; font-size: 12px; letter-spacing: .1em; }

/* 头像（写实立绘裁切到面部） */
.ava { --c: var(--cyan); position: relative; display: inline-block; width: 28px; height: 28px; border-radius: 50%; overflow: hidden; flex: none; vertical-align: middle; background: #0b111a;
  box-shadow: 0 0 0 1.5px var(--c), 0 0 8px color-mix(in srgb, var(--c) 50%, transparent); }
.ava img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 18%; transform: scale(1.9); transform-origin: 50% 24%; display: block; }
.ava img.is-photo { transform: scale(1.15); transform-origin: 50% 35%; }
.ava.lg { width: 40px; height: 40px; }
.ava.xl { width: 56px; height: 56px; }
.ava-stack { display: inline-flex; }
.ava-stack .ava { margin-left: -8px; }
.ava-stack .ava:first-child { margin-left: 0; }
.ava.online::after { content: ''; position: absolute; right: 1px; bottom: 1px; width: 7px; height: 7px; border-radius: 50%; background: #4ade80; box-shadow: 0 0 6px #4ade80; border: 1px solid #04070c; }
.rank-tag { font-family: var(--f-title); font-weight: 700; font-size: 10px; padding: 1px 6px; border: 1px solid; border-radius: 2px; letter-spacing: .05em; }
.rank-T0 { color: #0b1422; border-color: #fff; background: var(--chrome); box-shadow: 0 0 10px rgba(255,255,255,.4); }
.rank-T1 { color: var(--cyan); border-color: var(--cyan); background: rgba(79,209,255,.12); }
.rank-T2 { color: var(--silver); border-color: var(--silver-lo); background: rgba(198,208,218,.08); }

/* 大幅立绘 */
.portrait { position: relative; aspect-ratio: 3/4; overflow: hidden; background: #0b111a; }
.portrait img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .6s; }
.portrait::after { content: ''; position: absolute; inset: 0; pointer-events: none; background: linear-gradient(180deg, transparent 55%, rgba(4,7,12,.85)); }
.portrait .rk { position: absolute; z-index: 2; top: 10px; left: 10px; }
.portrait.rk-T0 { box-shadow: inset 0 0 0 2px #fff, 0 0 30px rgba(255,255,255,.35); }

/* ---------- 登录 ---------- */
.login { height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 22px; padding: 30px; overflow: auto; }
.login-logo { text-align: center; }
.login-logo .h-title { font-size: 64px; font-weight: 900; letter-spacing: .18em; }
.login-logo .tag { margin-top: 10px; color: var(--silver); letter-spacing: .4em; font-size: 13px; }
.login-logo .line { width: 420px; max-width: 80vw; height: 1px; margin: 14px auto; background: linear-gradient(90deg, transparent, var(--cyan), #fff, var(--cyan), transparent); box-shadow: 0 0 10px var(--cyan); }
.login-grid { display: flex; flex-wrap: wrap; gap: 16px; justify-content: center; max-width: 1240px; perspective: 1200px; }
.login-card { width: 150px; cursor: pointer; transition: transform .3s; transform-style: preserve-3d; }
.login-card .portrait { clip-path: var(--cut); border: 1px solid var(--line-hi); }
.login-card:hover { transform: translateY(-10px) rotateX(8deg) scale(1.05); }
.login-card:hover .portrait { box-shadow: 0 0 0 1px #fff, 0 0 30px rgba(79,209,255,.55); }
.login-card:hover .portrait img { transform: scale(1.06); }
.login-card .nm { margin-top: 8px; font-weight: 700; display: flex; gap: 6px; align-items: center; justify-content: center; text-shadow: 0 2px 6px #000; }
.login-card .rl { text-align: center; font-size: 11px; color: var(--silver); text-shadow: 0 1px 4px #000; margin-top: 2px; }

/* ---------- 主框架 ---------- */
.shell { display: grid; grid-template-columns: 78px minmax(0, 1fr) var(--chat-w, 330px); grid-template-rows: 64px 1fr; height: 100%; }
.shell.chat-off { grid-template-columns: 78px minmax(0, 1fr) 0; }
.topbar { grid-column: 1 / -1; display: flex; align-items: center; gap: 16px; padding: 0 16px; position: relative; z-index: 5;
  background: repeating-linear-gradient(0deg, rgba(255,255,255,.025) 0 1px, transparent 1px 3px), linear-gradient(180deg, rgba(52,62,76,.92), rgba(16,22,32,.95));
  border-bottom: 1px solid rgba(255,255,255,.18); box-shadow: 0 6px 24px rgba(0,0,0,.6); backdrop-filter: blur(10px); }
.topbar::after { content: ''; position: absolute; left: 0; right: 0; bottom: -1px; height: 1px; background: linear-gradient(90deg, transparent, var(--cyan) 30%, #fff 50%, var(--cyan) 70%, transparent); opacity: .7; }
.brand { display: flex; align-items: center; gap: 12px; background: none; border: 0; padding: 0; cursor: pointer; text-align: left; color: inherit; }
.brand:hover .h-title { text-shadow: 0 0 12px var(--cyan); }
.brand .sigil { width: 40px; height: 40px; display: grid; place-items: center; }
.brand .h-title { font-size: 19px; font-weight: 900; }
.stats { display: flex; gap: 8px; margin-left: 8px; }
.stat { padding: 4px 14px; min-width: 84px; border: 0; border-left: 2px solid var(--silver-mid); background: linear-gradient(90deg, rgba(198,208,218,.1), transparent); cursor: pointer; text-align: left; color: inherit; }
.stat:hover { background: linear-gradient(90deg, rgba(79,209,255,.2), transparent); }
.stat b { display: block; font-family: var(--f-num); font-size: 22px; font-weight: 700; line-height: 1.05; color: #fff; text-shadow: 0 0 10px rgba(79,209,255,.4); }
.stat span { font-size: 11px; color: var(--muted); }
.stat.alert { border-left-color: var(--danger); }
.stat.alert b { color: #ff8a96; text-shadow: 0 0 12px rgba(255,93,108,.6); }
.topbar .spacer { flex: 1; }
.online-box { display: flex; align-items: center; gap: 10px; font-size: 12px; color: var(--muted); }
.me-box { display: flex; align-items: center; gap: 10px; padding-left: 14px; border-left: 1px solid var(--line); }
.me-box .nm { font-weight: 700; display: flex; gap: 6px; align-items: center; }
.me-box .rl { font-size: 11px; color: var(--muted); }

.nav { grid-row: 2; display: flex; flex-direction: column; align-items: center; gap: 6px; padding: 12px 0; position: relative; z-index: 2;
  background: linear-gradient(90deg, rgba(20,27,38,.9), rgba(10,15,24,.8)); border-right: 1px solid var(--line); backdrop-filter: blur(10px); }
.nav-btn { position: relative; width: 62px; padding: 9px 0 7px; text-align: center; cursor: pointer; color: var(--muted); border: 1px solid transparent; background: none; transition: .15s; clip-path: var(--cut-sm); }
.nav-btn .ic { font-size: 21px; display: block; line-height: 1.15; }
.nav-btn .tx { font-size: 10px; }
.nav-btn:hover { color: #fff; }
.nav-btn.on { color: #fff; border-color: rgba(79,209,255,.5); background: linear-gradient(180deg, rgba(79,209,255,.22), rgba(79,209,255,.04)); box-shadow: inset 0 0 14px rgba(79,209,255,.2); }
.nav-btn.on .ic { text-shadow: 0 0 10px var(--cyan); }
.nav-btn .badge { position: absolute; top: 3px; right: 5px; min-width: 18px; height: 18px; border-radius: 9px; background: var(--danger); color: #fff; font-size: 11px; font-weight: 700; line-height: 18px; padding: 0 4px; box-shadow: 0 0 10px rgba(255,93,108,.8); animation: pulse 1.6s infinite; }
@keyframes pulse { 50% { opacity: .55; } }
.nav .create { margin-top: 8px; width: 48px; height: 48px; font-size: 24px; padding: 0; display: grid; place-items: center; clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%); }
.nav .grow { flex: 1; }

.main { grid-row: 2; overflow: auto; position: relative; padding: 18px 22px 30px; }
.view-head { display: flex; align-items: flex-end; gap: 16px; margin-bottom: 16px; }
.view-head .h-title { font-size: 24px; }
.view-head .tools { margin-left: auto; display: flex; gap: 8px; align-items: center; }
.hint-tx { color: var(--muted); font-size: 12px; }

/* ---------- 全息投影沙盘 ---------- */
.sandbox { position: relative; display: grid; grid-template-columns: minmax(0, 1fr) var(--side-w, 300px); gap: 18px; align-items: start; }
.holo-stage { position: relative; height: var(--stage-h, max(560px, calc(100vh - 190px))); overflow: hidden; perspective: 1700px; perspective-origin: 50% 30%; cursor: grab; user-select: none;
  background: radial-gradient(ellipse at 50% 62%, rgba(79,209,255,.16), transparent 55%), radial-gradient(ellipse at 50% 120%, rgba(160,200,230,.18), transparent 50%), linear-gradient(180deg, rgba(6,12,22,.9), rgba(4,8,14,.95)); }
.holo-stage.dragging { cursor: grabbing; }
.holo-stage.focus { height: auto; min-height: 0; }
.holo-scan { position: absolute; inset: 0; z-index: 3; pointer-events: none; background: repeating-linear-gradient(0deg, rgba(150,225,255,.035) 0 1px, transparent 1px 3px); }
.holo-scan::after { content: ''; position: absolute; left: 0; right: 0; height: 26%; background: linear-gradient(180deg, transparent, rgba(79,209,255,.08) 50%, transparent); animation: scan 7s linear infinite; }
@keyframes scan { from { transform: translateY(-100%); } to { transform: translateY(480%); } }
.holo-corner { position: absolute; z-index: 4; pointer-events: none; font-family: var(--f-title); font-size: 9px; letter-spacing: .3em; color: rgba(160,225,255,.6); }
.holo-corner.tl { top: 14px; left: 18px; } .holo-corner.tr { top: 14px; right: 18px; text-align: right; }
.holo-corner .live-dot { display: inline-block; width: 6px; height: 6px; border-radius: 50%; background: #4ade80; box-shadow: 0 0 8px #4ade80; margin-right: 6px; animation: pulse 1.4s infinite; }

@property --orb { syntax: '<angle>'; inherits: true; initial-value: 0deg; }
.holo-world { --rz: -18deg; --sc: .8; --c: #4fd1ff; position: absolute; left: 50%; top: 60%; transform-style: preserve-3d;
  transform: scale(var(--sc)) rotateX(58deg) rotateZ(var(--rz)); }
.holo-stage.focus .holo-world { top: 64%; }
.holo-world > * { position: absolute; }
.holo-world .ground { border-radius: 50%; pointer-events: none; background: radial-gradient(circle, #1a2230, #0b1018 75%); box-shadow: 0 0 0 2px rgba(230,238,245,.5); }
.holo-world .gp { left: 0; top: 0; pointer-events: none;
  background: radial-gradient(circle, color-mix(in srgb, var(--c) 26%, #0b1119) 0, color-mix(in srgb, var(--c) 10%, #0a0f17) 72%, #080c13 100%); }
.holo-world .gp.hw { background: radial-gradient(circle, #3a4350, #1d232c 70%); box-shadow: inset 0 0 0 2px rgba(230,238,245,.35); }
.holo-world .gvig { border-radius: 50%; pointer-events: none; box-shadow: inset 0 0 60px 20px rgba(4,8,16,.75);
  background: radial-gradient(circle, transparent 55%, rgba(8,20,36,.5) 100%), repeating-linear-gradient(0deg, rgba(120,210,255,.06) 0 1px, transparent 1px 24px), repeating-linear-gradient(90deg, rgba(120,210,255,.06) 0 1px, transparent 1px 24px); }
.holo-world .floor .sep { stroke: rgba(230,240,250,.55); stroke-width: 2; }
.holo-world .floor { left: 0; top: 0; overflow: visible; }
.holo-world .floor .zone { fill: transparent; stroke: rgba(230,240,250,.25); stroke-width: 1; stroke-dasharray: 6 5; transition: fill .25s; cursor: pointer; }
.holo-world .floor .zone.on { fill: color-mix(in srgb, var(--c) 22%, transparent); stroke: var(--c); stroke-width: 2.5; stroke-dasharray: none; }
.holo-world.has-hl .floor .zone:not(.on) { fill: rgba(2,6,12,.55); }
.holo-world .arc-tx { font-family: var(--f-title); font-size: 10px; letter-spacing: .32em; fill: rgba(220,236,250,.75); }
.ped { position: absolute; left: 50%; top: 50%; border-radius: 50%; border: 2px solid rgba(200,212,224,.6); background: rgba(10,16,26,.4); pointer-events: none; }
.ped.base { border: 3px solid rgba(230,238,245,.85); background: radial-gradient(circle, rgba(20,30,44,.9), rgba(6,10,18,.95) 70%); box-shadow: 0 0 40px rgba(79,209,255,.35), inset 0 0 30px rgba(79,209,255,.25); }
.deco-ring { left: 50%; top: 50%; border-radius: 50%; pointer-events: none; }
.deco-ring.r1 { width: 106%; height: 106%; margin: -53% 0 0 -53%; border: 1px dashed rgba(160,225,255,.4); animation: spin 90s linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }

/* 贴图建筑 */
.dist { left: 0; top: 0; width: 0; height: 0; transform-style: preserve-3d; cursor: pointer; }
.bx, .hero, .fl, .lift { position: absolute; transform-style: preserve-3d; }
.hero, .lift { width: 0; height: 0; left: 0; top: 0; }
.fl { left: 0; top: 0; transform: translateZ(var(--z)); pointer-events: none; }
.bx .sh { position: absolute; inset: -2px; background: rgba(0,0,0,.55); filter: blur(3px); pointer-events: none; }
.bx .f { position: absolute; left: 0; top: 0; transform-origin: 0 0; transition: filter .25s, box-shadow .25s; backface-visibility: visible; background-color: #3a4552; }
.bx .ft { width: 100%; height: 100%; background: url(assets/tex-roof.jpg) center / cover; }
.bx .s1 { filter: brightness(.95); } .bx .s2 { filter: brightness(.78); } .bx .s3 { filter: brightness(.62); } .bx .s4 { filter: brightness(1.05); }
.m-glass .fs, .m-glass .fw { background: url(assets/tex-facade-glass.jpg) 0 0 / 48px auto; }
.m-office .fs, .m-office .fw { background: url(assets/tex-facade-office.jpg) 0 0 / 46px auto; }
.m-tech .fs, .m-tech .fw { background: url(assets/tex-facade-tech.jpg) 0 0 / 72px auto; }
.m-glass .fw, .m-office .fw, .m-tech .fw { background-size: auto 48px; }
.m-office .fw { background-size: auto 46px; }
.m-tech .fw { background-size: auto 54px; }
.m-glass .ft { background: linear-gradient(135deg, rgba(255,255,255,.2), transparent 50%), url(assets/tex-roof.jpg) center / cover; filter: brightness(.9) hue-rotate(180deg) saturate(.4); }
.m-solar .f { background: #1b2a44; }
.m-solar .ft { background: repeating-linear-gradient(90deg, rgba(160,200,255,.35) 0 1px, transparent 1px 6px), repeating-linear-gradient(0deg, rgba(160,200,255,.35) 0 1px, transparent 1px 8px), linear-gradient(135deg, #2f4f88, #10203c); }
.m-solar .sh { opacity: .4; }
.bx.hero .ft { box-shadow: inset 0 0 0 1px rgba(255,255,255,.35); }
/* 数据柱 */
.m-bar .f { --bc: #fbbf24; background: linear-gradient(0deg, color-mix(in srgb, var(--bc) 85%, #000), color-mix(in srgb, var(--bc) 55%, transparent)); }
.m-bar .ft { background: color-mix(in srgb, var(--bc) 60%, #fff); box-shadow: 0 0 10px var(--bc); }
.m-bar .sh { opacity: .5; }
/* 像素风全息大熊猫（公司 logo） */
.rpanda { position: relative; pointer-events: none; animation: hbob 3.2s ease-in-out infinite; }
.rpanda img { display: block; width: 100%; filter: drop-shadow(0 8px 10px rgba(0,0,0,.65)) drop-shadow(0 0 12px rgba(244,114,182,.55)); }
.dist.on[data-mod="AI"] .rpanda img { filter: drop-shadow(0 8px 10px rgba(0,0,0,.65)) drop-shadow(0 0 18px rgba(249,168,212,.95)); }
.has-hl .dist:not(.on) .rpanda img { opacity: .3; }
.disc { position: absolute; border-radius: 50%; pointer-events: none; }
.disc.aipad { background: radial-gradient(circle, rgba(244,114,182,.55), rgba(244,114,182,.12) 60%, transparent 72%); box-shadow: 0 0 0 2px rgba(249,168,212,.8), 0 0 30px rgba(244,114,182,.6); }
.disc.lake { background: radial-gradient(circle, rgba(225,215,255,.85), rgba(140,110,240,.7) 40%, rgba(60,40,140,.8) 72%, rgba(30,20,70,.85));
  box-shadow: 0 0 0 2px rgba(220,210,255,.7), 0 0 30px rgba(177,151,252,.8); animation: lakeglow 3s ease-in-out infinite; }
@keyframes lakeglow { 50% { box-shadow: 0 0 0 2px rgba(220,210,255,.9), 0 0 50px rgba(177,151,252,1); } }
/* 空间线段：配送航线、趋势线 */
.ln3 { position: absolute; height: 2px; margin-top: -1px; transform-origin: 0 1px; pointer-events: none; }
.ln3.route { height: 3px; background: repeating-linear-gradient(90deg, #9fc0ff 0 8px, transparent 8px 14px); background-size: 28px 3px; animation: routeflow 1.2s linear infinite; }
@keyframes routeflow { to { background-position: -28px 0; } }
.ln3.trend { height: 3px; background: #fff; box-shadow: 0 0 8px #fde68a; }
.tdot { display: block; border-radius: 50%; background: #fff; box-shadow: 0 0 8px #fbbf24; }
.disk { position: absolute; border-radius: 50%; background: rgba(60,48,110,.85); border: 1px solid rgba(177,151,252,.85); pointer-events: none; }
.disk.top { background: radial-gradient(circle, #e9e1ff, #b197fc 55%, #6f5bbd); box-shadow: 0 0 14px rgba(177,151,252,.9); }
.stream { display: block; width: 4px; background: repeating-linear-gradient(0deg, transparent 0 6px, rgba(220,210,255,.95) 6px 9px), linear-gradient(0deg, rgba(177,151,252,.8), transparent); background-size: 4px 15px, 4px 100%; animation: streamup .7s linear infinite; box-shadow: 0 0 8px rgba(177,151,252,.8); }
@keyframes streamup { to { background-position: 0 -15px, 0 0; } }
.has-hl .dist:not(.on) :is(.ln3, .disk, .disc) { opacity: .2; }
.has-hl .dist:not(.on) .f { filter: brightness(.32) saturate(.3); }
.has-hl .dist:not(.on) .bb, .has-hl .dist:not(.on) .fl, .has-hl .dist:not(.on) .vpad, .has-hl .dist:not(.on) .hpad { opacity: .25; }
.dist.on .f { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--c) 90%, #fff), inset 0 0 14px color-mix(in srgb, var(--c) 45%, transparent); }
.dist.on .ft { box-shadow: inset 0 0 0 2px var(--c), inset 0 0 24px color-mix(in srgb, var(--c) 70%, transparent); }
.holo-world.focus .dist.on .bx:not(.hero) .f { box-shadow: none; }
.ring { position: absolute; left: 0; top: 0; border-radius: 50%; border: 1.5px solid color-mix(in srgb, var(--c) 75%, transparent); box-shadow: 0 0 12px color-mix(in srgb, var(--c) 50%, transparent); }
.ring.dashed { border-style: dashed; }
.ring.spin { animation: spin 14s linear infinite; }
.ring.spin.rev { animation-direction: reverse; animation-duration: 9s; }
.vpad { position: absolute; border-radius: 50%; border: 2px solid #f5f8fb; display: grid; place-items: center; font: 900 10px var(--f-title); color: #fff;
  background: radial-gradient(circle, #3a4656 40%, #1c242f); box-shadow: 0 0 10px var(--c), inset 0 0 0 3px rgba(255,214,90,.7); }
.hpad { position: absolute; border-radius: 50%; display: grid; place-items: center;
  background: radial-gradient(circle, transparent 30%, rgba(255,214,90,.9) 31%, rgba(255,214,90,.9) 33%, transparent 34%), repeating-conic-gradient(rgba(255,255,255,.85) 0 3deg, transparent 3deg 15deg) center / 100% 100%, radial-gradient(circle, #48525e, #252c35 68%, #f5f8fb 69%, #f5f8fb 71%, #3a4552 72%);
  box-shadow: 0 0 30px rgba(79,209,255,.5); }
.hpad::before { content: ''; position: absolute; inset: 12%; border-radius: 50%; background: radial-gradient(circle, #3c4652, #2a313b); }
.hpad b { position: relative; font: 900 34px var(--f-title); color: rgba(255,255,255,.9); }

.bb { position: absolute; width: 0; height: 0; transform-style: preserve-3d; transform: translateZ(var(--z)) rotateZ(calc(var(--rz) * -1)) rotateX(-58deg); }
.bb-in { position: absolute; left: 0; bottom: 0; transform: translateX(-50%); display: flex; flex-direction: column; align-items: center; }
.bb.deco { pointer-events: none; }
.pillar { display: block; width: 2px; background: linear-gradient(0deg, var(--c), transparent); box-shadow: 0 0 8px var(--c); animation: pulse 2.2s ease-in-out infinite; }
.beacon-dot { display: block; width: 10px; height: 10px; border-radius: 50%; background: #ff4d5e; box-shadow: 0 0 14px 4px rgba(255,77,94,.8); animation: blink 1.4s steps(2) infinite; margin-bottom: -5px; }
.cone { display: block; clip-path: polygon(42% 100%, 58% 100%, 100% 0, 0 0); animation: conepulse 3.2s ease-in-out infinite;
  background: linear-gradient(0deg, rgba(190,240,255,.6), rgba(79,209,255,.2) 60%, rgba(79,209,255,.03)), repeating-linear-gradient(0deg, transparent 0 5px, rgba(255,255,255,.15) 5px 6px); }
@keyframes conepulse { 50% { opacity: .55; } }
.hdrone-wrap { animation: hbob 3.6s ease-in-out infinite; }
@keyframes hbob { 50% { transform: translateY(-10px); } }
.rdrone { position: relative; pointer-events: none; }
.rdrone img { display: block; width: 100%; filter: drop-shadow(0 6px 10px rgba(0,0,0,.6)) drop-shadow(0 0 10px rgba(79,209,255,.45)); }
.dist.on[data-mod="HW"] .rdrone img { filter: drop-shadow(0 6px 10px rgba(0,0,0,.6)) drop-shadow(0 0 16px rgba(160,230,255,.95)); }
.has-hl:not(:has(.dist.on[data-mod="HW"])) .hdrone-wrap { opacity: .35; }
/* 环城飞行的无人机：外层绕 Z 轴旋转，公告板同时抵消城市与轨道两层旋转 */
.orb { position: absolute; width: 0; height: 0; transform-style: preserve-3d; pointer-events: none; animation: orb var(--dur) linear var(--del) infinite; transform: rotateZ(var(--orb)); }
@keyframes orb { to { --orb: 360deg; } }
.bb.flyer { transform: translateZ(var(--z)) rotateZ(calc((var(--rz) + var(--orb)) * -1)) rotateX(-58deg); }
.bb.flyer .rdrone { animation: hbob 2.4s ease-in-out infinite; }
.has-hl .orb .rdrone { opacity: .35; }
.hchart { display: block; filter: drop-shadow(0 0 6px rgba(251,191,36,.6)); }
.hcore { display: block; overflow: visible; filter: drop-shadow(0 0 14px rgba(244,114,182,.8)); animation: hbob 4s ease-in-out infinite; }
.hcore .orbit { transform-origin: 46px 46px; animation: spin 6s linear infinite; }

/* 空中走廊 */
.routes { left: 0; top: 0; overflow: visible; transform: translateZ(150px); pointer-events: none; }
.routes path { fill: none; stroke: var(--cyan); stroke-width: 1.6; stroke-dasharray: 8 10; opacity: .5; animation: dash 3s linear infinite; }
@keyframes dash { to { stroke-dashoffset: -36; } }
.routes circle { fill: #fff; }
.has-hl .routes { opacity: .3; }

/* 街区标签 */
.lbl { cursor: pointer; }
.hl-card { --c: #4fd1ff; padding: 4px 9px 5px; background: linear-gradient(180deg, rgba(20,32,46,.88), rgba(6,12,20,.82)); border: 1px solid color-mix(in srgb, var(--c) 70%, transparent);
  clip-path: var(--cut-sm); box-shadow: inset 0 0 18px color-mix(in srgb, var(--c) 22%, transparent); transition: transform .25s, background .25s; transform-origin: 50% 100%; white-space: nowrap; }
.hl-card .hl-top { display: flex; align-items: center; gap: 5px; font-weight: 700; font-size: 12px; color: #fff; }
.hl-card .hl-top .ic { color: var(--c); text-shadow: 0 0 10px var(--c); font-size: 13px; }
.hl-card .hl-en { display: none; font-family: var(--f-title); font-size: 7px; letter-spacing: .25em; color: color-mix(in srgb, var(--c) 70%, #fff); margin: 1px 0 2px; }
.hl-card .hl-nums { font-size: 10px; color: var(--silver); display: flex; gap: 6px; margin-top: 2px; }
.hl-card .hl-nums b { font-family: var(--f-num); color: #fff; font-size: 12px; }
.lbl.on .hl-card .hl-en { display: block; }
.hl-card .hl-bar { height: 2px; margin-top: 5px; background: rgba(255,255,255,.12); }
.hl-card .hl-bar i { display: block; height: 100%; background: var(--c); box-shadow: 0 0 6px var(--c); }
.hl-alert { margin-left: auto; padding: 0 6px; font-size: 10px; border-radius: 8px; background: rgba(160,20,40,.85); border: 1px solid #ff8a96; animation: pulse 1.2s infinite; }
.hl-stem { display: block; width: 1px; height: 34px; background: linear-gradient(180deg, var(--c), transparent); }
.lbl.on .hl-card { transform: scale(1.18); background: linear-gradient(180deg, color-mix(in srgb, var(--c) 35%, rgba(10,18,28,.9)), rgba(6,12,20,.9)); box-shadow: 0 0 26px color-mix(in srgb, var(--c) 70%, transparent); }
.has-hl .lbl:not(.on) { opacity: .4; }

/* 悬停信息面板 */
.holo-hud { position: absolute; z-index: 5; left: 16px; bottom: 16px; width: 330px; padding: 12px 14px; pointer-events: none;
  background: linear-gradient(180deg, rgba(16,26,40,.82), rgba(6,10,18,.88)); border: 1px solid var(--line); border-left: 3px solid var(--c, var(--cyan)); backdrop-filter: blur(6px); transition: border-color .2s; }
.holo-hud .t { display: flex; align-items: baseline; gap: 8px; font-size: 16px; font-weight: 700; color: #fff; }
.holo-hud .t .ic { color: var(--c); text-shadow: 0 0 10px var(--c); }
.holo-hud .en { font-family: var(--f-title); font-size: 8px; letter-spacing: .25em; color: var(--muted); }
.holo-hud .ds { font-size: 12px; color: var(--silver); margin: 6px 0; line-height: 1.55; }
.holo-hud .kinds { display: flex; flex-wrap: wrap; gap: 4px; }
.holo-hud .kinds span { font-size: 11px; padding: 1px 7px; border: 1px solid color-mix(in srgb, var(--c) 50%, transparent); color: #dfe8f0; }
.holo-hud .go { margin-top: 8px; font-size: 11px; color: var(--c); letter-spacing: .1em; }

/* 侧栏子系统列表 */
.mod-list { display: flex; flex-direction: column; gap: 6px; }
.mod-it { --c: #4fd1ff; display: grid; grid-template-columns: 24px 1fr auto; gap: 2px 8px; align-items: center; padding: 7px 10px; cursor: pointer; border-left: 3px solid var(--c); background: rgba(0,0,0,.28); transition: background .2s; }
.mod-it:hover, .mod-it.on { background: color-mix(in srgb, var(--c) 18%, rgba(0,0,0,.3)); }
.mod-it .ic { color: var(--c); font-size: 16px; text-align: center; text-shadow: 0 0 8px var(--c); grid-row: span 2; }
.mod-it .nm { font-weight: 700; font-size: 13px; }
.mod-it .n { font-family: var(--f-num); font-size: 12px; color: var(--muted); text-align: right; }
.mod-it .n b { color: #fff; font-size: 15px; }
.mod-it .n .p { color: #ff8a96; }
.mod-it .bar { grid-column: 2 / -1; height: 2px; background: rgba(255,255,255,.1); }
.mod-it .bar i { display: block; height: 100%; background: var(--c); }

/* ---------- 子系统模块（全息沙盘 + 任务看板） ---------- */
.mod-tabs { flex-wrap: wrap; justify-content: flex-end; }
.mod-tab { --c: #4fd1ff; display: flex; align-items: center; gap: 6px; padding: 6px 12px; cursor: pointer; font-size: 13px; color: var(--silver); border: 1px solid var(--line); background: rgba(0,0,0,.3); clip-path: var(--cut-sm); transition: .15s; }
.mod-tab .ic { color: var(--c); }
.mod-tab .ct { font-family: var(--f-num); font-size: 12px; color: var(--muted); }
.mod-tab:hover { color: #fff; border-color: color-mix(in srgb, var(--c) 60%, transparent); }
.mod-tab.on { color: #fff; border-color: var(--c); background: color-mix(in srgb, var(--c) 22%, rgba(0,0,0,.3)); box-shadow: inset 0 0 14px color-mix(in srgb, var(--c) 30%, transparent); }
.mv-top { position: relative; display: grid; grid-template-columns: minmax(0, 1fr) var(--info-w, 420px); height: var(--holo-h, 440px); gap: 16px; margin-bottom: 18px; }
.mv-back { position: absolute; z-index: 6; top: 12px; right: 14px; }
.ktag { cursor: pointer; }
.kt-card { --c: #4fd1ff; display: flex; align-items: center; gap: 8px; padding: 5px 11px; white-space: nowrap; font-size: 13px; color: #fff; font-weight: 700;
  background: linear-gradient(180deg, rgba(20,32,46,.9), rgba(6,12,20,.85)); border: 1px solid color-mix(in srgb, var(--c) 65%, transparent); clip-path: var(--cut-sm); transition: transform .2s, background .2s; transform-origin: 50% 100%; }
.kt-card .n { font-family: var(--f-num); font-size: 14px; color: var(--c); }
.kt-card .p { font-size: 10px; color: #ff8a96; }
.ktag .hl-stem { height: 120px; }
.ktag.on .kt-card, .ktag.sel .kt-card { transform: scale(1.15); background: linear-gradient(180deg, color-mix(in srgb, var(--c) 40%, rgba(10,18,28,.9)), rgba(6,12,20,.9)); box-shadow: 0 0 22px color-mix(in srgb, var(--c) 70%, transparent); }
.has-hl .ktag:not(.on):not(.sel) { opacity: .45; }
.spot { position: absolute; width: 28px; height: 28px; border-radius: 50%; border: 1.5px solid var(--c); background: radial-gradient(circle, color-mix(in srgb, var(--c) 50%, transparent), transparent 70%); box-shadow: 0 0 14px var(--c); pointer-events: none; }
.mv-info { padding: 16px 18px; display: flex; flex-direction: column; gap: 12px; overflow: auto; min-height: 0; }
.mv-info .mh { display: flex; align-items: center; gap: 10px; }
.mv-info .mh .ic { font-size: 30px; color: var(--c); text-shadow: 0 0 16px var(--c); }
.mv-info .mh .nm { font-size: 20px; font-weight: 700; color: #fff; }
.mv-info .mh .en { font-family: var(--f-title); font-size: 9px; letter-spacing: .25em; color: var(--muted); }
.mv-info .ds { font-size: 12px; color: var(--silver); line-height: 1.6; }
.mv-stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; }
.mv-stats div { background: rgba(0,0,0,.3); padding: 6px 8px; border-top: 2px solid var(--c); font-size: 11px; color: var(--muted); }
.mv-stats b { display: block; font-family: var(--f-num); font-size: 20px; color: #fff; }
.mv-info h4 { margin: 0; font-family: var(--f-title); font-size: 10px; letter-spacing: .2em; color: var(--silver); font-weight: 500; }
.mv-info h4 .btn { margin-left: 8px; letter-spacing: 0; font-family: inherit; vertical-align: middle; }
.gal-h { font-size: 12px; color: var(--muted); margin: 8px 0 4px; }
#mf-gal { max-height: 280px; overflow: auto; padding-right: 4px; }
#ke-list { display: flex; flex-direction: column; gap: 8px; }
.ke-row, .ke-add { display: flex; gap: 8px; align-items: center; }
.ke-row .inp, .ke-add .inp { flex: 1; }
.ke-n { font-size: 12px; color: var(--muted); white-space: nowrap; }
.doc-crumb-bar { display: flex; align-items: center; gap: 8px; margin: 4px 0 12px; color: var(--muted); }
.doc-crumb { background: none; border: 0; color: var(--silver); cursor: pointer; font-size: 13px; padding: 0; }
.doc-crumb.on { color: #fff; font-weight: 700; }
.doc-kpis { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-bottom: 12px; }
.doc-charts { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 14px; }
.doc-charts .panel { padding: 12px 14px; }
.doc-charts h3, .doc-sec { margin: 8px 0; font-size: 13px; letter-spacing: .12em; color: var(--silver); font-weight: 500; }
.dbar { display: grid; grid-template-columns: 88px 1fr 28px; gap: 8px; align-items: center; margin: 6px 0; font-size: 12px; }
.doc-charts .dbar { grid-template-columns: minmax(132px, 168px) 1fr 32px; }
.dbar .lb { color: var(--silver); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dbar .trk { height: 8px; background: rgba(255,255,255,.08); }
.dbar .trk i { display: block; height: 100%; }
.dbar b { font-family: var(--f-num); text-align: right; }
.doc-mods { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-bottom: 16px; }
.doc-mod { display: grid; grid-template-columns: 28px 1fr auto; gap: 4px 8px; align-items: center; padding: 12px; text-align: left; cursor: pointer; border-left: 3px solid var(--c); color: inherit; }
.doc-mod .ic { color: var(--c); font-size: 18px; grid-row: span 2; }
.doc-mod .nm { font-weight: 700; }
.doc-mod .n { grid-column: 2; font-size: 12px; color: var(--muted); }
.doc-mod .n b { color: #fff; font-family: var(--f-num); }
.doc-mod .n .p { color: #ff8a96; }
.doc-mod .go { grid-row: span 2; color: var(--cyan); font-size: 12px; }
.doc-kinds, .doc-types { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin-bottom: 10px; }
.doc-list { display: flex; flex-direction: column; gap: 8px; }
.doc-card { padding: 12px 14px; cursor: pointer; }
.doc-card .ttl { font-weight: 700; margin: 6px 0 4px; }
.doc-card .dsc { color: var(--silver); font-size: 12px; line-height: 1.5; white-space: pre-wrap; }
.doc-card .row { display: flex; align-items: center; gap: 8px; margin-top: 8px; font-size: 12px; color: var(--muted); }
.doc-card .scope, .doc-card .tm { margin-left: auto; }
.doc-mod { font: inherit; width: 100%; }
.sheet-tabs { display: flex; gap: 4px; overflow: auto; margin: 0 0 8px; padding-bottom: 2px; }
.sheet-tab { display: flex; align-items: center; gap: 6px; max-width: 220px; padding: 6px 10px; border: 1px solid var(--line); border-bottom: 2px solid var(--c, var(--line)); background: rgba(0,0,0,.28); color: var(--silver); cursor: pointer; font-size: 12px; }
.sheet-tab .nm { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sheet-tab i { width: 7px; height: 7px; background: var(--c, var(--cyan)); flex: none; }
.sheet-tab.on { color: #fff; background: rgba(79,209,255,.12); border-color: rgba(79,209,255,.45); }
.sheet-tab.add { border-style: dashed; color: var(--cyan); }
.sheet-bar { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin-bottom: 6px; }
.sheet-bar .inp { width: auto; padding: 4px 8px; }
.sheet-bar .sheet-title { width: 220px; }
.sheet-addr { min-width: 42px; padding: 4px 6px; text-align: center; font-family: var(--f-num); color: var(--cyan); border: 1px solid var(--line); background: rgba(0,0,0,.35); }
.sheet-bar .clr { display: flex; align-items: center; gap: 4px; font-size: 12px; color: var(--muted); }
.sheet-bar input[type=color] { width: 28px; height: 22px; padding: 0; border: 1px solid var(--line); background: transparent; cursor: pointer; }
.sheet-bar .btn.on { color: #fff; border-color: var(--cyan); background: rgba(79,209,255,.16); }
.sheet-b { font-weight: 700; }
.sheet-i { font-style: italic; }
.sheet-u { text-decoration: underline; }
.sheet-who { margin-left: auto; font-size: 12px; color: var(--muted); }
.sheet-wrap { max-height: 52vh; overflow: auto; border: 1px solid var(--line); background: rgba(6,10,16,.72); outline: none; }
.sheet-wrap:focus { border-color: rgba(79,209,255,.45); }
.sheet { border-collapse: separate; border-spacing: 0; min-width: 100%; }
.sheet th, .sheet td { border-right: 1px solid rgba(255,255,255,.1); border-bottom: 1px solid rgba(255,255,255,.1); }
.sheet thead th { position: sticky; top: 0; z-index: 2; background: #121922; color: var(--muted); font-weight: 500; font-size: 11px; text-align: center; padding: 4px 6px; }
.sheet .rn { position: sticky; left: 0; z-index: 1; min-width: 36px; width: 36px; background: #121922; color: var(--muted); font-family: var(--f-num); font-size: 11px; text-align: center; }
.sheet thead .rn { z-index: 3; }
.sheet td { min-width: 108px; max-width: 240px; height: 28px; vertical-align: top; color: var(--silver); background: rgba(8,12,18,.35); user-select: none; }
.sheet .sh-v { min-height: 22px; padding: 4px 6px; white-space: pre-wrap; word-break: break-word; }
.sheet .sh-edit { display: block; width: 100%; min-height: 52px; margin: 0; padding: 4px 6px; border: 0; resize: vertical; background: #0c141e; color: inherit; font: inherit; outline: none; }
.sheet td.sel { box-shadow: inset 0 0 0 1px rgba(79,209,255,.55); }
.sheet td.cur { box-shadow: inset 0 0 0 2px #4fd1ff; }
.doc-below { margin-top: 26px; display: flex; flex-direction: column; gap: 16px; }
.doc-desc { padding: 14px 16px; }
.doc-desc h3, .doc-charts h3, .doc-charts h4 { margin: 0 0 8px; font-size: 13px; letter-spacing: .12em; color: var(--silver); font-weight: 500; }
.doc-desc textarea { min-height: 120px; }
.doc-charts h4 { margin-top: 10px; font-size: 12px; letter-spacing: .08em; }
.doc-kinds .p { color: #ff8a96; margin-left: 4px; }
.file-drop { display: flex; flex-direction: column; gap: 8px; min-height: 120px; }
.file-drop.over { outline: 1px dashed var(--cyan); outline-offset: 4px; }
.file-row { display: flex; align-items: center; gap: 10px; padding: 10px 12px; }
.file-ic { flex: none; min-width: 52px; text-align: center; font-size: 11px; letter-spacing: .04em; color: var(--cyan); border: 1px solid rgba(79,209,255,.4); padding: 6px 4px; }
.file-meta { min-width: 0; flex: 1; }
.file-meta .nm { font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.file-meta .sub { margin-top: 3px; font-size: 12px; color: var(--muted); }
.file-pre { max-height: 60vh; overflow: auto; white-space: pre-wrap; word-break: break-word; background: rgba(0,0,0,.35); padding: 12px; color: var(--silver); }
.file-media { display: block; max-width: 100%; max-height: 70vh; margin: 0 auto; }
.file-pdf { width: 100%; height: 70vh; border: 0; background: #fff; }
.kind-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.kchip { padding: 3px 10px; font-size: 12px; cursor: pointer; border: 1px solid color-mix(in srgb, var(--c) 40%, transparent); background: rgba(0,0,0,.3); color: var(--silver); transition: .15s; }
.kchip b { font-family: var(--f-num); color: #fff; margin-left: 4px; }
.kchip .kdoc, .kt-card .kdoc, .mod-doc, .kchip .kfile, .kt-card .kfile, .mod-file { margin-left: 6px; border: 1px solid rgba(79,209,255,.45); background: rgba(79,209,255,.12); color: var(--cyan); cursor: pointer; font-size: 11px; padding: 0 5px; line-height: 16px; }
.kchip .kdoc:hover, .kt-card .kdoc:hover, .mod-doc:hover, .kchip .kfile:hover, .kt-card .kfile:hover, .mod-file:hover { background: rgba(79,209,255,.28); color: #fff; }
.kt-card .kdoc, .kt-card .kfile { display: inline-block; margin: 4px 6px 0 0; }
.kchip:hover { border-color: var(--c); color: #fff; }
.kchip.on { background: color-mix(in srgb, var(--c) 30%, transparent); border-color: var(--c); color: #fff; }
.team { display: flex; flex-direction: column; gap: 8px; max-height: 300px; overflow: auto; }
.team-tier { display: flex; flex-wrap: wrap; gap: 8px; align-items: stretch; }
.team-tier > .tl { width: 100%; font-size: 11px; color: var(--muted); }
.tm { display: flex; gap: 8px; align-items: center; padding: 4px 10px 4px 4px; cursor: pointer; background: rgba(0,0,0,.3); border: 1px solid var(--line); transition: .15s; min-width: 0; }
.tm:hover { border-color: var(--line-hi); }
.tm.on { border-color: var(--c); background: color-mix(in srgb, var(--c) 18%, rgba(0,0,0,.3)); }
.tm .pic { width: 36px; height: 48px; overflow: hidden; flex: none; border: 1px solid var(--line-hi); }
.tm .pic img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 18%; }
.tm .nm { font-weight: 700; font-size: 13px; display: flex; gap: 4px; align-items: center; }
.tm .rl { font-size: 11px; color: var(--muted); }
.tm .ct { font-size: 11px; color: var(--silver); }
.tm .ct b { font-family: var(--f-num); color: #fff; }
.mv-bar { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; flex-wrap: wrap; }
.mv-bar .h-title { font-size: 15px; }
.mv-bar .chips { display: flex; gap: 6px; }
.fchip { font-size: 12px; padding: 3px 8px; border: 1px solid var(--c); color: #fff; background: color-mix(in srgb, var(--c) 20%, transparent); cursor: pointer; }
.card .kind { color: var(--silver); }

.sb-side { display: flex; flex-direction: column; gap: 14px; }
.sb-side .panel { padding: 14px 16px; }
.sb-side h3 { font-family: var(--f-title); color: var(--silver); font-size: 12px; letter-spacing: .14em; margin: 0 0 10px; font-weight: 500; }
.coc { display: flex; flex-direction: column; gap: 6px; }
.coc-tier { display: flex; align-items: center; gap: 10px; padding: 8px 10px; background: rgba(0,0,0,.3); border-left: 3px solid; }
.coc-tier .ttl { font-family: var(--f-title); font-weight: 900; font-size: 15px; width: 30px; }
.coc-tier .ds { flex: 1; font-size: 12px; color: var(--muted); }
.coc-tier .ds b { color: var(--ink); display: block; font-size: 13px; }
.coc-tier .n { font-family: var(--f-num); font-size: 24px; font-weight: 700; }
.coc-arrow { text-align: center; color: var(--silver-mid); font-size: 11px; line-height: 1; }
.mini-log { font-size: 12px; display: flex; flex-direction: column; gap: 8px; max-height: 300px; overflow: auto; }
.mini-log .it { display: flex; gap: 8px; align-items: flex-start; }
.mini-log .it .tx { flex: 1; color: #c9d4df; line-height: 1.45; }
.mini-log .it .tm { color: var(--muted); font-size: 11px; }

/* ---------- 任务航线看板 ---------- */
.filters { display: flex; gap: 8px; align-items: center; }
.filters .inp { width: auto; padding: 6px 10px; }
.board-stage { perspective: 2000px; perspective-origin: 50% 0; overflow-x: auto; }
.board { display: grid; grid-template-columns: repeat(7, minmax(var(--col-w, 178px), 1fr)); gap: 12px; transform: rotateX(10deg); transform-origin: 50% 0; transform-style: preserve-3d; }
.col { --sc: #4fd1ff; display: flex; flex-direction: column; min-height: 560px; background: linear-gradient(180deg, rgba(24,32,44,.78), rgba(8,12,20,.7)); border: 1px solid var(--line); transform-style: preserve-3d; backdrop-filter: blur(8px); }
.col-head { display: flex; align-items: center; gap: 8px; padding: 10px 12px; border-bottom: 1px solid var(--line); position: relative;
  background: linear-gradient(180deg, color-mix(in srgb, var(--sc) 20%, transparent), transparent); }
.col-head::before { content: ''; position: absolute; left: 0; right: 0; top: -1px; height: 2px; background: var(--sc); box-shadow: 0 0 12px var(--sc); }
.col-head .rune { font-size: 16px; color: var(--sc); width: 22px; text-align: center; font-weight: 900; text-shadow: 0 0 8px var(--sc); }
.col-head .nm { font-weight: 700; letter-spacing: .04em; }
.col-head .ct { margin-left: auto; font-family: var(--f-num); font-weight: 700; color: var(--sc); font-size: 18px; }
.col-body { padding: 10px; display: flex; flex-direction: column; gap: 10px; flex: 1; }
.card { --sc: #4fd1ff; --pc: #4fd1ff; position: relative; padding: 10px 12px 10px 14px; cursor: pointer; clip-path: var(--cut-sm);
  background: linear-gradient(160deg, rgba(48,60,76,.85), rgba(14,20,30,.92) 70%); border: 1px solid rgba(198,208,218,.22);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.12), 0 8px 18px rgba(0,0,0,.5); transition: transform .18s, box-shadow .18s, border-color .18s; transform: translateZ(0); }
.card::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--pc); box-shadow: 0 0 10px var(--pc); }
.card:hover { transform: translateZ(28px) translateY(-4px); border-color: rgba(230,238,245,.7); box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 22px 30px rgba(0,0,0,.6), 0 0 18px color-mix(in srgb, var(--sc) 45%, transparent); }
.card.open { border-color: #fff; box-shadow: 0 0 22px rgba(255,255,255,.35); }
.card.await { animation: awaitglow 1.6s infinite alternate; }
@keyframes awaitglow { to { border-color: #ff8a96; box-shadow: 0 0 18px rgba(255,93,108,.55); } }
.card-top { display: flex; align-items: center; gap: 6px; font-size: 11px; color: var(--muted); }
.card-top .code { font-family: var(--f-title); color: var(--silver); font-weight: 700; font-size: 10px; letter-spacing: .05em; }
.card-top .prio { margin-left: auto; color: var(--pc); font-weight: 700; font-family: var(--f-title); font-size: 10px; }
.card-title { margin: 6px 0 8px; font-weight: 700; line-height: 1.4; color: #f2f6fa; }
.prog { height: 4px; background: rgba(0,0,0,.6); border-radius: 2px; overflow: hidden; }
.prog i { display: block; height: 100%; background: linear-gradient(90deg, var(--cyan), #fff); box-shadow: 0 0 8px var(--cyan); }
.card-foot { display: flex; align-items: center; gap: 6px; margin-top: 8px; font-size: 12px; color: var(--muted); }
.card-foot .meta { margin-left: auto; display: flex; gap: 8px; }
.card-foot .overdue { color: #ff8a96; }
.card-viewers { position: absolute; top: 4px; right: 34px; display: flex; }
.card-viewers .ava { width: 20px; height: 20px; margin-left: -6px; animation: hover 1.4s infinite alternate; }

/* ---------- 议事厅 ---------- */
.queue-sec { margin-bottom: 22px; }
.queue-sec h3 { font-family: var(--f-title); color: var(--silver); font-weight: 500; font-size: 14px; letter-spacing: .1em; margin: 0 0 10px; display: flex; align-items: center; gap: 10px; }
.queue-sec h3 .ct { font-size: 13px; color: var(--cyan); }
.queue-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(330px, 1fr)); gap: 14px; }
.qcard { padding: 14px 16px; display: flex; flex-direction: column; gap: 8px; }
.qcard .row { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--muted); }
.qcard .code { font-family: var(--f-title); color: var(--silver); font-weight: 700; font-size: 11px; }
.qcard .ttl { font-weight: 700; font-size: 15px; cursor: pointer; color: #f2f6fa; }
.qcard .ttl:hover { color: var(--cyan); }
.qcard .dsc { font-size: 12px; color: #aab6c4; line-height: 1.5; max-height: 54px; overflow: hidden; }
.qcard .acts { display: flex; gap: 8px; margin-top: 4px; }
.qcard .reason { font-size: 12px; color: #ffb0b8; background: rgba(255,93,108,.1); border-left: 2px solid var(--danger); padding: 6px 8px; }

/* ---------- 骑士名录 ---------- */
.roster { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 18px; perspective: 1400px; }
.mcard { padding: 0; transition: transform .35s; transform-style: preserve-3d; }
.mcard:hover { transform: rotateY(-6deg) rotateX(4deg) translateZ(10px); }
.mcard:hover .portrait img { transform: scale(1.05); }
.mcard .portrait .on { position: absolute; z-index: 2; bottom: 10px; left: 10px; font-size: 11px; color: #4ade80; background: rgba(0,0,0,.55); padding: 2px 8px; border: 1px solid #4ade80; border-radius: 10px; }
.mcard .portrait .edit { position: absolute; z-index: 2; top: 8px; right: 8px; display: flex; gap: 6px; }
.mcard .portrait .su { position: absolute; z-index: 2; top: 8px; left: 8px; font-size: 11px; letter-spacing: 1px; color: #1a1406; background: linear-gradient(135deg, #fff3c4, #e2b84a); padding: 2px 8px; clip-path: polygon(6px 0, 100% 0, calc(100% - 6px) 100%, 0 100%); }
.tier { margin-bottom: 26px; }
.tier-h { display: flex; align-items: baseline; gap: 12px; margin: 0 0 12px; padding-bottom: 8px; border-bottom: 1px solid var(--line-hi); font-weight: 400; }
.tier-h .h-title { font-size: 18px; }
.tier-h .ct { font-family: var(--f-num); color: var(--cyan); }
.tier-h .hint-tx { margin-left: auto; }
.mcard .info { padding: 12px 14px 14px; border-top: 1px solid var(--line-hi); }
.mcard .info .nm { font-size: 17px; font-weight: 700; display: flex; align-items: center; gap: 8px; }
.mcard .info .rl { font-size: 12px; color: var(--muted); margin: 4px 0; }
.mcard .info .motto { font-size: 12px; font-style: italic; color: var(--silver); min-height: 16px; }
.mcard .info .nums { display: flex; gap: 14px; margin-top: 8px; font-size: 11px; color: var(--muted); }
.mcard .info .nums b { display: block; font-family: var(--f-num); font-size: 20px; color: #fff; }
.mcard.recruit { display: grid; place-items: center; min-height: 380px; cursor: pointer; color: var(--silver); font-family: var(--f-title); text-align: center; }
.mcard.recruit .plus { font-size: 54px; line-height: 1; color: #fff; text-shadow: 0 0 20px var(--cyan); }

/* ---------- 航行日志 ---------- */
.logs { max-width: 900px; position: relative; padding-left: 26px; }
.logs::before { content: ''; position: absolute; left: 11px; top: 0; bottom: 0; width: 2px; background: linear-gradient(var(--cyan), transparent); box-shadow: 0 0 8px var(--cyan); }
.log-it { position: relative; display: flex; gap: 12px; align-items: flex-start; padding: 10px 14px; margin-bottom: 8px; background: rgba(14,20,30,.72); border: 1px solid var(--line); backdrop-filter: blur(8px); }
.log-it::before { content: ''; position: absolute; left: -20px; top: 16px; width: 8px; height: 8px; border-radius: 50%; background: #fff; box-shadow: 0 0 8px var(--cyan); }
.log-it .tx { flex: 1; line-height: 1.5; }
.log-it .tm { font-size: 11px; color: var(--muted); white-space: nowrap; font-family: var(--f-num); }
.tlink { color: var(--cyan); cursor: pointer; text-decoration: underline dotted; }

/* ---------- 量子通讯 ---------- */
.chat { grid-row: 2; display: flex; flex-direction: column; border-left: 1px solid var(--line); background: linear-gradient(90deg, rgba(10,15,24,.82), rgba(16,22,32,.88)); min-width: 0; overflow: hidden; backdrop-filter: blur(12px); }
.chat-head { padding: 12px 14px; border-bottom: 1px solid var(--line); display: flex; align-items: center; gap: 8px; }
.chat-head .h-title { font-size: 13px; }
.chat-head .live { margin-left: auto; font-size: 11px; color: #4ade80; }
.chat-head .live::before { content: '●'; margin-right: 4px; animation: pulse 1.2s infinite; }
.chat-list { flex: 1; overflow: auto; padding: 10px 12px; display: flex; flex-direction: column; gap: 12px; }
.chat-hist-bar { display: flex; justify-content: center; padding: 2px 0 4px; }
.chat-hist-btn { cursor: pointer; border: 1px solid rgba(79,209,255,.35); background: rgba(14,26,42,.85); color: var(--cyan); font-size: 11px; padding: 5px 14px; border-radius: 999px; letter-spacing: .04em; transition: .15s; box-shadow: 0 2px 10px rgba(0,0,0,.35); }
.chat-hist-btn:hover { border-color: var(--cyan); color: #fff; background: rgba(79,209,255,.22); box-shadow: 0 0 14px rgba(79,209,255,.35); }
.chat-divider { display: flex; align-items: center; gap: 8px; margin: 2px 0; color: var(--muted); font-size: 11px; letter-spacing: .06em; user-select: none; }
.chat-divider::before, .chat-divider::after { content: ''; flex: 1; height: 1px; background: linear-gradient(90deg, transparent, var(--line), transparent); }
.msg { display: flex; gap: 8px; align-items: flex-start; }
.msg.mine { flex-direction: row-reverse; }
.msg .bd { flex: 1; min-width: 0; display: flex; flex-direction: column; align-items: flex-start; }
.msg.mine .bd { align-items: flex-end; }
.msg .hd { font-size: 12px; display: flex; gap: 6px; align-items: center; width: 100%; }
.msg.mine .hd { flex-direction: row-reverse; }
.msg .hd .nm { font-weight: 700; }
.msg .hd .tm { color: var(--muted); font-size: 11px; margin-left: auto; }
.msg.mine .hd .tm { margin-left: 0; margin-right: auto; }
.msg .tx { margin-top: 3px; padding: 7px 11px; width: fit-content; max-width: 82%; background: rgba(40,52,68,.65); border: 1px solid var(--line); border-radius: 2px 10px 10px 10px; line-height: 1.5; word-break: break-word; white-space: pre-wrap; font-size: 13px; text-align: left; }
.msg.mine .tx { background: linear-gradient(180deg, rgba(79,209,255,.22), rgba(20,90,138,.32)); border-color: rgba(79,209,255,.5); border-radius: 10px 2px 10px 10px; color: #f2fbff; }
.msg .mention { color: var(--cyan); font-weight: 700; }
.msg .pic { margin-top: 4px; max-height: 320px; border: 1px solid var(--line); border-radius: 2px 10px 10px 10px; overflow: hidden; background: rgba(8,12,20,.6); cursor: zoom-in; }
.msg.mine .pic { border-color: rgba(79,209,255,.5); border-radius: 10px 2px 10px 10px; }
.msg .pic img { display: block; width: 100%; height: 100%; object-fit: cover; }
.msg .pic + .tx { margin-top: 4px; }
.chat-tools { padding: 8px 10px 0; border-top: 1px solid var(--line); display: flex; gap: 6px; align-items: center; }
.chat-tools .hint-tx { margin-left: auto; font-size: 11px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.chat-tools + .chat-input { border-top: 0; }
.chat-drop { position: absolute; inset: 0; z-index: 5; display: none; place-items: center; font-size: 15px; color: var(--cyan); background: rgba(8,14,24,.82); border: 2px dashed rgba(79,209,255,.7); pointer-events: none; }
.chat.dropping .chat-drop { display: grid; }
.pv-wrap { margin: 10px 0 6px; display: flex; justify-content: center; background: repeating-conic-gradient(rgba(255,255,255,.05) 0 25%, transparent 0 50%) 0 0 / 16px 16px; border: 1px solid var(--line); border-radius: 6px; padding: 6px; overflow: hidden; }
.pv { position: relative; display: inline-block; cursor: crosshair; user-select: none; touch-action: none; }
.pv img { display: block; max-width: 100%; max-height: 56vh; }
.pv-sel { position: absolute; border: 1.5px solid var(--cyan); box-shadow: 0 0 0 9999px rgba(0,0,0,.55), 0 0 12px rgba(79,209,255,.6); pointer-events: none; }
.pv-meta { display: flex; align-items: center; gap: 10px; font-size: 12px; color: var(--muted); margin-bottom: 8px; }
.pv-meta .btn { margin-left: auto; }
#pv-cap { height: 54px; resize: none; width: 100%; }
.img-zoom { position: fixed; inset: 0; z-index: 200; background: rgba(3,6,12,.9); display: grid; place-items: center; cursor: zoom-out; backdrop-filter: blur(6px); }
.img-zoom img { max-width: 94vw; max-height: 88vh; box-shadow: 0 10px 60px rgba(0,0,0,.8); border: 1px solid var(--line); }
.img-zoom a { position: absolute; right: 20px; top: 16px; }
.chat-input { padding: 10px; border-top: 1px solid var(--line); display: flex; gap: 8px; }
.chat-input textarea { resize: none; height: 54px; }

/* ---------- 任务详情抽屉 ---------- */
.drawer-mask { position: fixed; inset: 0; background: rgba(2,5,10,.5); z-index: 20; }
.drawer { position: fixed; top: 0; right: 0; bottom: 0; width: min(620px, 96vw); z-index: 21; display: flex; flex-direction: column;
  background: linear-gradient(180deg, rgba(30,40,54,.94), rgba(8,12,20,.96)); border-left: 1px solid rgba(230,238,245,.5); box-shadow: -20px 0 60px rgba(0,0,0,.8), -1px 0 16px rgba(79,209,255,.25);
  backdrop-filter: blur(16px); animation: slidein .25s ease-out; }
@keyframes slidein { from { transform: translateX(40px); opacity: 0; } }
.dr-head { display: flex; align-items: center; gap: 10px; padding: 14px 18px; border-bottom: 1px solid var(--line); background: linear-gradient(180deg, rgba(198,208,218,.12), transparent); }
.dr-head .code { font-family: var(--f-title); font-size: 17px; font-weight: 900; }
.dr-head .viewers { margin-left: auto; display: flex; align-items: center; gap: 6px; font-size: 11px; color: var(--muted); }
.dr-body { flex: 1; overflow: auto; padding: 16px 18px 30px; display: flex; flex-direction: column; gap: 14px; }
.fld { position: relative; transition: .2s; }
.fld.locked .inp { border-color: var(--lock-c); box-shadow: 0 0 0 1px var(--lock-c), 0 0 18px color-mix(in srgb, var(--lock-c) 55%, transparent); }
.fld .editing { display: none; align-items: center; gap: 4px; color: var(--lock-c); font-size: 11px; font-weight: 700; }
.fld.locked .editing { display: inline-flex; }
.fld .editing .ava { width: 16px; height: 16px; }
.fld.locked .editing::after { content: '…'; animation: pulse 1s infinite; }
.title-inp { font-size: 18px; font-weight: 700; }
.grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.gd { font-size: .9em; font-weight: 400; }
.gd-M { color: #6bb8ff; }
.gd-F { color: #f9a8d4; }
.desc-inp { min-height: 110px; resize: vertical; line-height: 1.6; }
.range { display: flex; align-items: center; gap: 10px; }
.range input { flex: 1; accent-color: var(--cyan); }
.range b { font-family: var(--f-num); font-size: 18px; color: #fff; width: 48px; text-align: right; }
.sec-title { font-family: var(--f-title); color: var(--silver); letter-spacing: .14em; font-size: 11px; margin: 6px 0 -4px; display: flex; align-items: center; gap: 8px; }
.sec-title::after { content: ''; flex: 1; height: 1px; background: linear-gradient(90deg, var(--line-hi), transparent); }

.chain { display: flex; align-items: flex-start; padding: 14px 6px 6px; overflow-x: auto; }
.step { flex: 1; min-width: 78px; display: flex; flex-direction: column; align-items: center; text-align: center; position: relative; }
.step:not(:last-child)::after { content: ''; position: absolute; top: 22px; left: calc(50% + 25px); right: calc(-50% + 25px); height: 2px; background: rgba(198,208,218,.15); }
.step.done:not(:last-child)::after { background: linear-gradient(90deg, #fff, var(--cyan)); box-shadow: 0 0 8px var(--cyan); }
.step .node { width: 46px; height: 46px; border-radius: 50%; display: grid; place-items: center; font-weight: 900; font-size: 15px; color: var(--muted); overflow: hidden;
  background: rgba(8,12,20,.9); border: 2px solid var(--silver-lo); }
.step .node .ava { width: 100%; height: 100%; box-shadow: none; }
.step.done .node { border-color: #fff; color: #fff; box-shadow: 0 0 12px rgba(79,209,255,.6); }
.step.cur .node { border-color: #ffb547; color: #fff; background: rgba(120,70,10,.5); animation: curglow 1.2s infinite alternate; }
@keyframes curglow { to { box-shadow: 0 0 18px rgba(255,181,71,.8); } }
.step.rej .node { border-color: var(--danger); background: rgba(110,16,30,.6); color: #ff8a96; }
.step.skip { opacity: .4; }
.step .lb { font-size: 12px; margin-top: 6px; font-weight: 700; }
.step .who { font-size: 11px; color: var(--muted); }
.step.cur .lb { color: #ffcf85; }
.step.done .lb { color: #fff; }

.act-box { padding: 12px; display: flex; flex-direction: column; gap: 10px; }
.act-box .btns { display: flex; flex-wrap: wrap; gap: 8px; }
.act-box .hint { font-size: 12px; color: var(--muted); }
.hist { display: flex; flex-direction: column; gap: 8px; font-size: 12px; }
.hist .it { display: flex; gap: 8px; align-items: flex-start; }
.hist .it .tx { flex: 1; line-height: 1.5; color: #c9d4df; }
.hist .it .cm { display: block; color: #ffb0b8; font-style: italic; }
.hist .it .tm { color: var(--muted); }
.cmts { display: flex; flex-direction: column; gap: 10px; }
.cmt { display: flex; gap: 8px; }
.cmt .bd { flex: 1; padding: 8px 12px; font-size: 13px; line-height: 1.55; white-space: pre-wrap; word-break: break-word;
  background: linear-gradient(90deg, rgba(79,209,255,.12), rgba(79,209,255,.03)); border: 1px solid rgba(79,209,255,.25); border-left: 2px solid var(--cyan); }
.cmt .bd .hd { font-size: 11px; color: var(--muted); margin-bottom: 2px; }
.cmt-input { display: flex; gap: 8px; }
.cmt-input textarea { height: 44px; resize: none; }

/* ---------- 弹窗 & 提示 ---------- */
.modal-mask { position: fixed; inset: 0; z-index: 40; background: rgba(2,5,10,.72); display: grid; place-items: center; animation: fade .2s; }
@keyframes fade { from { opacity: 0; } }
.modal { width: min(680px, 94vw); max-height: 92vh; overflow: auto; padding: 22px 24px; display: flex; flex-direction: column; gap: 14px; }
.modal .h-title { font-size: 19px; }
.modal .foot { display: flex; justify-content: flex-end; gap: 10px; margin-top: 6px; }
.modal .note { font-size: 12px; color: var(--muted); background: rgba(0,0,0,.3); padding: 8px 10px; border-left: 2px solid var(--cyan); line-height: 1.7; }
.modal .note b { color: #fff; }
.modal.wide { width: min(620px, 94vw); }
.modal-mask.locked { background: rgba(2,5,10,.9); backdrop-filter: blur(6px); }
#pw-form { display: flex; flex-direction: column; gap: 12px; }
.login-auth { display: grid; grid-template-columns: 190px 1fr; gap: 22px; align-items: start; }
.login-auth .portrait { clip-path: var(--cut); border: 1px solid var(--line-hi); box-shadow: 0 0 30px rgba(79,209,255,.35); }
.login-auth .fields { display: flex; flex-direction: column; gap: 6px; }
.login-auth .who { font-size: 18px; font-weight: 700; margin: 8px 0 6px; display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.login-auth .who .rl { width: 100%; font-size: 12px; font-weight: 400; color: var(--muted); }
.login-auth form { display: flex; flex-direction: column; gap: 10px; }
.lg-err { display: none; font-size: 12px; color: #ff8a95; border-left: 2px solid #ff4d5e; background: rgba(255,77,94,.08); padding: 6px 10px; }
.lg-err.show { display: block; animation: shake .35s; }
@keyframes shake { 25% { transform: translateX(-6px); } 75% { transform: translateX(6px); } }
.acct { border-top: 1px dashed var(--line-hi); padding-top: 10px; }
.acct-row { display: flex; align-items: center; gap: 10px; }
.acct-name { font-family: var(--f-num); color: var(--cyan); letter-spacing: 1px; }
.acct-tip { font-size: 11px; color: var(--muted); margin-top: 6px; }
.mcard .info .acct-line { font-size: 11px; color: var(--muted); margin-top: 4px; font-family: var(--f-num); letter-spacing: .5px; }
.mcard .info .acct-line .warn { color: #fbbf24; font-family: inherit; }
@media (max-width: 560px) { .login-auth { grid-template-columns: 1fr; } .login-auth .portrait { width: 150px; margin: 0 auto; } }
.member-form { display: grid; grid-template-columns: 190px 1fr; gap: 18px; }
.member-form .portrait { clip-path: var(--cut); border: 1px solid var(--line-hi); }
.member-form .fields { display: flex; flex-direction: column; gap: 10px; }
.gallery { display: grid; grid-template-columns: repeat(6, 1fr); gap: 6px; }
.gallery .g { aspect-ratio: 3/4; overflow: hidden; cursor: pointer; border: 1px solid var(--line); opacity: .7; transition: .15s; }
.gallery .g img { width: 100%; height: 100%; object-fit: cover; display: block; }
.gallery .g:hover { opacity: 1; }
.gallery .g.on { opacity: 1; border-color: #fff; box-shadow: 0 0 10px var(--cyan); }
.swatches { display: flex; flex-wrap: wrap; gap: 8px; }
.swatch { width: 24px; height: 24px; border-radius: 50%; cursor: pointer; border: 2px solid rgba(0,0,0,.6); box-shadow: 0 0 0 1px var(--line); }
.swatch.on { box-shadow: 0 0 0 2px #fff, 0 0 12px currentColor; }
.upload-row { display: flex; gap: 8px; align-items: center; font-size: 12px; color: var(--muted); }

#toasts { position: fixed; right: 350px; bottom: 20px; z-index: 50; display: flex; flex-direction: column; gap: 8px; align-items: flex-end; }
.toast { min-width: 260px; max-width: 380px; padding: 10px 14px; display: flex; gap: 10px; align-items: center; cursor: pointer; animation: toastin .3s ease-out; clip-path: var(--cut-sm);
  background: linear-gradient(180deg, rgba(40,52,68,.95), rgba(14,20,30,.95)); border: 1px solid rgba(79,209,255,.5); box-shadow: 0 10px 30px rgba(0,0,0,.7); font-size: 13px; backdrop-filter: blur(10px); }
.toast.alert { border-color: #ff8a96; background: linear-gradient(180deg, rgba(90,20,32,.95), rgba(30,8,14,.95)); }
.toast.err { border-color: #ff8a96; }
.toast .ic { font-size: 20px; }
@keyframes toastin { from { transform: translateX(30px); opacity: 0; } }
.link-down { position: fixed; top: 0; left: 50%; transform: translate(-50%, -100%); z-index: 60; padding: 8px 18px; background: rgba(110,16,30,.95); color: #fff; border: 1px solid #ff8a96; transition: .3s; font-weight: 700; }
.link-down.show { transform: translate(-50%, 0); }

[hidden] { display: none !important; }

/* ============ 可调布局 ============ */
.chat { position: relative; }
.splitter { position: absolute; z-index: 8; touch-action: none; }
.splitter.v { top: 0; bottom: 0; width: 10px; cursor: col-resize; }
.splitter.h { left: 0; height: 10px; cursor: row-resize; }
.splitter::after { content: ''; position: absolute; background: transparent; transition: background .2s, box-shadow .2s; }
.splitter.v::after { left: 4px; width: 2px; top: 0; bottom: 0; }
.splitter.h::after { top: 4px; height: 2px; left: 0; right: 0; }
.splitter::before { content: ''; position: absolute; opacity: 0; transition: opacity .2s; border-radius: 3px; background: rgba(160,225,255,.85); }
.splitter.v::before { left: 3px; top: 50%; width: 4px; height: 36px; margin-top: -18px; }
.splitter.h::before { top: 3px; left: 50%; height: 4px; width: 36px; margin-left: -18px; }
.splitter:hover::after, .splitter.act::after { background: rgba(79,209,255,.75); box-shadow: 0 0 10px var(--cyan); }
.splitter:hover::before, .splitter.act::before { opacity: 1; }
.sp-chat { left: 0; }
.sp-side { right: calc(var(--side-w, 300px) + 4px); }
.sp-stage { bottom: -14px; right: calc(var(--side-w, 300px) + 18px); }
.sp-info { right: calc(var(--info-w, 420px) + 3px); }
.sp-holo { bottom: -14px; right: 0; }
body.resizing { user-select: none; }
body.resizing.rs-x, body.resizing.rs-x * { cursor: col-resize !important; }
body.resizing.rs-y, body.resizing.rs-y * { cursor: row-resize !important; }
body.resizing .holo-stage, body.resizing .chat-list { pointer-events: none; }
html[data-density="compact"] .main { padding: 10px 12px 20px; }
html[data-density="compact"] .view-head { margin-bottom: 10px; }
html[data-density="compact"] .sb-side, html[data-density="compact"] .dash { gap: 8px; }
html[data-density="compact"] .sb-side .panel, html[data-density="compact"] .d-card { padding: 10px 12px; }
html[data-density="compact"] .col-body, html[data-density="compact"] .board { gap: 6px; }
html[data-density="loose"] .main { padding: 26px 32px 40px; }
html[data-density="loose"] .sb-side, html[data-density="loose"] .dash { gap: 22px; }
html[data-density="loose"] .d-card { padding: 20px 24px; }
.seg { display: inline-flex; border: 1px solid var(--line); background: rgba(0,0,0,.3); }
.seg button { all: unset; cursor: pointer; padding: 6px 14px; font-size: 12px; color: var(--silver); letter-spacing: .06em; transition: background .2s, color .2s; }
.seg button + button { border-left: 1px solid var(--line); }
.seg button:hover { background: rgba(255,255,255,.06); }
.seg button.on { background: linear-gradient(180deg, #eef3f8, #aab6c2); color: #0b1018; font-weight: 700; }
.lay-grid { display: flex; flex-direction: column; gap: 12px; }
.lay-it { display: grid; grid-template-columns: 140px 1fr 64px; align-items: center; gap: 12px; font-size: 13px; }
.lay-it .ln { color: var(--silver); }
.lay-it input[type=range] { width: 100%; accent-color: var(--cyan); }
.lay-it b { font-family: var(--f-num); color: #fff; text-align: right; }

/* ============ 总控看板 ============ */
.dash-wrap { container-type: inline-size; }
.dash-bar { display: flex; align-items: center; gap: 12px; margin-bottom: 14px; flex-wrap: wrap; }
.dash-bar .upd { margin-left: auto; color: var(--muted); font-size: 11px; }
.dash-bar .drag-tip { color: var(--muted); font-size: 11px; letter-spacing: .04em; }
.seg-chips { display: flex; gap: 6px; flex-wrap: wrap; }
.dchip { --c: #c6d0da; cursor: pointer; padding: 4px 11px; font-size: 12px; border: 1px solid color-mix(in srgb, var(--c) 45%, transparent); color: var(--silver); background: rgba(0,0,0,.3); transition: .2s; }
.dchip:hover { border-color: var(--c); color: #fff; }
.dchip.on { background: color-mix(in srgb, var(--c) 22%, rgba(0,0,0,.4)); border-color: var(--c); color: #fff; box-shadow: 0 0 12px color-mix(in srgb, var(--c) 40%, transparent); }
.dash { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 14px; }
.d-card { position: relative; grid-column: span 6; padding: 14px 16px; min-width: 0; background: linear-gradient(180deg, rgba(30,40,54,.8), rgba(10,15,24,.88)); border: 1px solid var(--line); clip-path: var(--cut); backdrop-filter: blur(8px); }
.d-card::before { content: ''; position: absolute; left: 14px; right: 0; top: 0; height: 1px; background: linear-gradient(90deg, rgba(255,255,255,.7), transparent 70%); }
.d-card.span-12 { grid-column: span 12; } .d-card.span-8 { grid-column: span 8; } .d-card.span-7 { grid-column: span 7; }
.d-card.span-5 { grid-column: span 5; } .d-card.span-4 { grid-column: span 4; }
.d-grip { margin-left: auto; flex: none; display: inline-grid; grid-template-columns: 3px 3px; gap: 2px; padding: 4px; cursor: grab; align-self: center; }
.d-grip b { width: 3px; height: 3px; border-radius: 50%; background: rgba(198,208,218,.7); display: block; }
.d-card h3:has(.hint) .d-grip, .d-card h3:has(.lg) .d-grip { margin-left: 8px; }
.c-hero > .d-grip { position: absolute; top: 12px; right: 14px; z-index: 2; }
.d-card.d-arm, .d-card.d-arm * { user-select: none; }
.d-card.d-arm { box-shadow: inset 0 0 0 1px rgba(79,209,255,.5); }
.d-card.d-slot { opacity: .22; box-shadow: inset 0 0 0 1px rgba(79,209,255,.85); pointer-events: none; }
.d-ghost.d-card { position: fixed; z-index: 30; margin: 0; pointer-events: none; opacity: .96; box-shadow: 0 18px 48px rgba(0,0,0,.55); }
body.dash-drag, body.dash-drag * { user-select: none !important; }
body.dash-drag { cursor: grabbing; }
@container (max-width: 1100px) { .d-card.span-8, .d-card.span-7, .d-card.span-5, .d-card.span-4 { grid-column: span 12; } }
.d-card h3 { margin: 0 0 12px; display: flex; align-items: baseline; gap: 10px; font-size: 14px; color: #fff; font-weight: 700; letter-spacing: .04em; }
.d-card h3 .en { font-family: var(--f-title); font-size: 9px; letter-spacing: .22em; color: var(--muted); font-weight: 500; }
.d-card h3 .hint, .d-card .hint { margin-left: auto; font-size: 11px; color: var(--muted); font-weight: 400; letter-spacing: 0; }
.d-card .sub { font-size: 11px; color: var(--muted); margin-bottom: 6px; letter-spacing: .06em; }
.c-hero { display: flex; gap: 18px; align-items: center; flex-wrap: wrap; }
.hero-rings { display: flex; gap: 6px; }
.d-ring { width: 104px; height: 104px; }
.d-ring .trk, .d-donut .trk { fill: none; stroke: rgba(255,255,255,.07); stroke-width: 9; }
.d-donut .trk { stroke-width: 15; }
.d-ring .big, .d-donut .big { font: 700 20px var(--f-num); fill: #fff; text-anchor: middle; }
.d-ring .sm, .d-donut .sm { font-size: 9px; fill: var(--muted); text-anchor: middle; letter-spacing: .1em; }
.kpis { flex: 1; min-width: 300px; display: grid; grid-template-columns: repeat(auto-fit, minmax(128px, 1fr)); gap: 8px; }
.kpi { padding: 9px 12px; background: rgba(0,0,0,.3); border-left: 3px solid rgba(198,208,218,.5); }
.kpi .v { font: 700 24px/1.1 var(--f-num); color: #fff; }
.kpi .l { font-size: 12px; color: var(--silver); margin-top: 2px; }
.kpi .s { font-size: 11px; color: var(--muted); margin-top: 3px; }
.kpi .s b { color: #dbe4ee; }
.kpi.warn { border-left-color: #f5b65a; } .kpi.warn .v { color: #ffd08a; }
.kpi.bad { border-left-color: #ff6b7a; } .kpi.bad .v { color: #ff9aa5; }
.kpi.good { border-left-color: #6ff0c2; } .kpi.good .v { color: #9ff5d6; }
.tbl-wrap { overflow-x: auto; }
.d-matrix, .d-heat { width: 100%; border-collapse: collapse; font-size: 12px; }
.d-matrix th, .d-heat th { text-align: left; font-weight: 500; color: var(--muted); font-size: 11px; padding: 6px 8px; border-bottom: 1px solid var(--line); white-space: nowrap; }
.d-matrix td, .d-heat td { padding: 7px 8px; border-bottom: 1px solid rgba(198,208,218,.08); white-space: nowrap; }
.d-matrix tbody tr { cursor: pointer; transition: background .2s; border-left: 3px solid var(--c); }
.d-matrix tbody tr:hover, .d-matrix tbody tr.sel { background: color-mix(in srgb, var(--c) 12%, transparent); }
.d-matrix .nm { color: #fff; font-weight: 600; }
.d-matrix .nm .ic { color: var(--c); margin-right: 6px; }
td.n { font-family: var(--f-num); font-size: 14px; color: #dbe4ee; text-align: center; }
td.n.warn { color: #ffc56e; } td.n.bad { color: #ff8a96; font-weight: 700; }
.stbar { display: flex; height: 10px; min-width: 120px; gap: 1px; background: rgba(0,0,0,.4); }
.pbar { display: inline-block; vertical-align: middle; width: 70px; height: 6px; background: rgba(255,255,255,.08); }
.pbar i { display: block; height: 100%; background: linear-gradient(90deg, color-mix(in srgb, var(--c) 60%, #fff), var(--c)); box-shadow: 0 0 8px var(--c); }
.pv { margin-left: 6px; font-family: var(--f-num); color: #fff; }
.legend { display: flex; gap: 12px; flex-wrap: wrap; margin-top: 10px; font-size: 11px; color: var(--muted); }
.legend i, .dist-leg i { display: inline-block; width: 9px; height: 9px; margin-right: 5px; vertical-align: -1px; }
.dist-wrap { display: flex; align-items: center; gap: 14px; }
.d-donut { width: 130px; height: 130px; flex: none; }
.dist-leg { flex: 1; display: flex; flex-direction: column; gap: 5px; font-size: 12px; color: var(--silver); }
.dist-leg b { float: right; font-family: var(--f-num); color: #fff; }
.prio-bars { margin-top: 14px; display: flex; flex-direction: column; gap: 7px; }
.prio-bars .pr { display: grid; grid-template-columns: 26px 1fr 46px; align-items: center; gap: 8px; }
.prio-bars .pk { font: 700 12px var(--f-title); }
.prio-bars .pt, .aging .pt, .d-heat .ld .pt { position: relative; height: 8px; background: rgba(255,255,255,.06); }
.prio-bars .pt i { position: absolute; left: 0; top: 0; bottom: 0; }
.prio-bars .pn { font-family: var(--f-num); color: #fff; text-align: right; }
.prio-bars .pn em { color: var(--muted); font-style: normal; font-size: 11px; }
.d-trend { width: 100%; height: 210px; display: block; }
.d-trend .grid { stroke: rgba(198,208,218,.1); }
.d-trend .ax { fill: var(--muted); font-size: 9px; }
.d-trend .ax.hl { fill: #ffd08a; font-weight: 700; font-size: 11px; }
.d-trend .b-new { fill: rgba(79,209,255,.75); } .d-trend .b-done { fill: rgba(111,240,194,.8); }
.d-trend .l-back { fill: none; stroke: #ffc56e; stroke-width: 2; vector-effect: non-scaling-stroke; }
.d-trend .l-dot { fill: #ffc56e; }
.d-trend g:hover rect:last-of-type { fill: rgba(255,255,255,.05); }
.d-card h3 .lg { margin-left: auto; display: flex; align-items: center; gap: 5px; font-size: 11px; color: var(--muted); font-weight: 400; }
.d-card h3 .lg i { display: inline-block; width: 10px; height: 10px; margin-left: 8px; }
.d-card h3 .lg .b-new { background: rgba(79,209,255,.75); } .d-card h3 .lg .b-done { background: rgba(111,240,194,.8); }
.d-card h3 .lg .l-back { height: 2px; background: #ffc56e; }
.appr { display: grid; grid-template-columns: 1.2fr 1fr; gap: 16px; }
.aging .ag { display: grid; grid-template-columns: 52px 1fr 24px; gap: 8px; align-items: center; font-size: 12px; color: var(--silver); margin-bottom: 6px; }
.aging .ag b { font-family: var(--f-num); color: #fff; text-align: right; }
.aging .pt i { position: absolute; inset: 0 auto 0 0; }
.aging .a0 { background: #6ff0c2; } .aging .a1 { background: #4fd1ff; } .aging .a2 { background: #f5b65a; } .aging .a3 { background: #ff6b7a; }
.apr-top .ap { display: flex; align-items: center; gap: 8px; font-size: 12px; margin-bottom: 6px; color: var(--silver); }
.apr-top .ap b { margin-left: auto; font-family: var(--f-num); color: #fff; }
.d-list { display: flex; flex-direction: column; gap: 4px; max-height: 330px; overflow: auto; }
.d-list .it { display: flex; align-items: center; gap: 8px; padding: 6px 8px; font-size: 12px; background: rgba(0,0,0,.25); cursor: pointer; border-left: 3px solid transparent; transition: background .2s; }
.d-list .it:hover { background: rgba(79,209,255,.1); }
.d-list .code, .gantt .code { font-family: var(--f-title); font-size: 10px; color: var(--cyan); flex: none; }
.d-list .tt { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #dbe4ee; }
.d-list .tm { color: #ffc56e; font-size: 11px; flex: none; }
.d-list .tags { display: flex; gap: 4px; flex: none; }
.d-list .tags em { font-style: normal; font-size: 10px; padding: 1px 6px; border: 1px solid; white-space: nowrap; }
.d-list em.lv3 { color: #ff8a96; background: rgba(255,80,100,.12); } .d-list em.lv2 { color: #ffc56e; } .d-list em.lv1 { color: #9fb0c2; }
.d-list.risk .it.lv3 { border-left-color: #ff6b7a; } .d-list.risk .it.lv2 { border-left-color: #f5b65a; } .d-list.risk .it.lv1 { border-left-color: #8a96a6; }
.d-heat th span { display: block; font-size: 10px; }
.d-heat th { text-align: center; }
.d-heat th:first-child { text-align: left; }
.d-heat .nm { display: flex; align-items: center; gap: 6px; color: #fff; }
.d-heat .nm .ava { width: 24px; height: 24px; }
.d-heat td.hc { text-align: center; font-family: var(--f-num); font-size: 14px; font-weight: 700; color: #fff; cursor: pointer; background: color-mix(in srgb, var(--c) calc(var(--a) * 55%), transparent); transition: outline .15s; }
.d-heat td.hc:hover { outline: 1px solid var(--c); }
.d-heat td.hc.z { color: rgba(198,208,218,.25); font-weight: 400; }
.d-heat .ld { display: flex; align-items: center; gap: 6px; min-width: 90px; }
.d-heat .ld .pt { flex: 1; }
.d-heat .ld .pt i { position: absolute; inset: 0 auto 0 0; background: linear-gradient(90deg, #4fd1ff, #a99bff); }
.d-heat .ld b { font-family: var(--f-num); color: #fff; }
.gantt { display: flex; flex-direction: column; overflow-x: auto; }
.g-row { display: grid; grid-template-columns: minmax(200px, 28%) minmax(420px, 1fr); align-items: center; min-height: 28px; cursor: pointer; border-bottom: 1px solid rgba(198,208,218,.06); }
.g-row:not(.g-head):hover { background: rgba(79,209,255,.07); }
.g-head { cursor: default; min-height: 26px; border-bottom: 1px solid var(--line); font-size: 11px; color: var(--muted); }
.g-lbl { display: flex; align-items: center; gap: 7px; padding-right: 10px; min-width: 0; font-size: 12px; }
.g-lbl .tt { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #dbe4ee; }
.g-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--c); box-shadow: 0 0 6px var(--c); flex: none; }
.g-track { position: relative; height: 28px; }
.g-head .g-track { height: 26px; }
.g-tick { position: absolute; top: 6px; transform: translateX(-50%); font-family: var(--f-num); font-size: 11px; }
.g-grid { position: absolute; top: 0; bottom: 0; width: 1px; background: rgba(198,208,218,.07); }
.g-now { position: absolute; top: 0; bottom: 0; width: 1px; background: #ff6b7a; box-shadow: 0 0 6px #ff6b7a; z-index: 2; }
.g-now b { position: absolute; top: 4px; left: 4px; font-size: 10px; color: #ff8a96; white-space: nowrap; font-weight: 400; }
.g-bar { position: absolute; top: 6px; height: 16px; background: color-mix(in srgb, var(--c) 22%, rgba(0,0,0,.4)); border: 1px solid color-mix(in srgb, var(--c) 70%, transparent); overflow: hidden; }
.g-bar b { position: absolute; left: 0; top: 0; bottom: 0; background: linear-gradient(90deg, color-mix(in srgb, var(--c) 50%, transparent), var(--c)); }
.g-bar span { position: relative; padding: 0 6px; font-size: 10px; line-height: 14px; color: #fff; white-space: nowrap; text-shadow: 0 1px 2px #000; }
.g-bar.st-PENDING_T1, .g-bar.st-PENDING_T0 { border-style: dashed; background: repeating-linear-gradient(45deg, rgba(255,255,255,.04) 0 5px, transparent 5px 10px); }
.g-bar.od { border: 1.5px solid #ff6b7a; box-shadow: 0 0 8px rgba(255,107,122,.6); }

@media (max-width: 1280px) {
  .sandbox { grid-template-columns: 1fr; }
  .sp-side, .sp-stage { display: none; }
  #toasts { right: 20px; }
}

/* ============ 成果积分殿（Three.js 3D 游戏空间） ============ */
.score-wrap { min-height: 0; }
.score-stage { position: relative; height: var(--stage-h, max(540px, calc(100vh - 208px))); overflow: hidden; cursor: grab; user-select: none; border: 1px solid var(--line); background: #060b12; }
.score-stage.dragging { cursor: grabbing; }
.score-canvas { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
.score-labels { position: absolute; inset: 0; z-index: 3; pointer-events: none; overflow: hidden; }
.fig3d-tag { position: absolute; left: 0; top: 0; pointer-events: auto; cursor: pointer; display: inline-flex; align-items: center; gap: 5px;
  padding: 3px 9px 3px 7px; border-radius: 3px; white-space: nowrap; font-size: 11px; color: #e8f1f8;
  background: linear-gradient(180deg, rgba(12, 20, 32, .88), rgba(6, 10, 18, .92));
  border: 1px solid color-mix(in srgb, var(--c) 65%, rgba(210, 224, 238, .35));
  box-shadow: 0 4px 12px rgba(0, 0, 0, .65), 0 0 10px color-mix(in srgb, var(--c) 26%, transparent);
  transition: border-color .15s, box-shadow .15s; }
.fig3d-tag .rk { font-family: var(--f-title); font-size: 9px; font-weight: 700; padding: 1px 4px; border-radius: 2px; color: #081018; background: var(--c); }
.fig3d-tag b { font-weight: 600; color: #fff; }
.fig3d-tag em { font-style: normal; font-family: var(--f-num); font-size: 12px; font-weight: 700; color: #aab8c6; margin-left: 2px; }
.fig3d-tag.has-pts em { color: #ffd978; text-shadow: 0 0 8px rgba(255, 198, 70, .45); }
.fig3d-tag .onl { width: 6px; height: 6px; border-radius: 50%; background: #4ade80; box-shadow: 0 0 6px #4ade80; }
.fig3d-tag:hover, .fig3d-tag.hov, .fig3d-tag.on { border-color: #ffe08a; box-shadow: 0 4px 16px rgba(0, 0, 0, .8), 0 0 16px rgba(255, 210, 96, .65); z-index: 5; }
.score-corner { position: absolute; z-index: 4; pointer-events: none; font-family: var(--f-title); font-size: 9px; letter-spacing: .22em; color: rgba(190,215,230,.72); text-shadow: 0 1px 4px #000; }
.score-corner.tl { top: 14px; left: 18px; } .score-corner.tr { top: 14px; right: 18px; text-align: right; line-height: 1.6; }
.score-cam-bar { position: absolute; top: 12px; right: 14px; z-index: 5; display: inline-flex; border: 1px solid rgba(198,208,218,.32); background: rgba(6, 12, 20, .82); backdrop-filter: blur(6px); }
.score-cam-bar button { all: unset; cursor: pointer; padding: 5px 11px; font-family: var(--f-title); font-size: 11px; color: var(--silver); letter-spacing: .06em; }
.score-cam-bar button + button { border-left: 1px solid rgba(198,208,218,.22); }
.score-cam-bar button:hover { color: #fff; background: rgba(79,209,255,.14); }
.score-cam-bar button.on { background: linear-gradient(180deg, rgba(79,209,255,.45), rgba(14,76,118,.75)); color: #fff; font-weight: 700; }
.score-hud { position: absolute; left: 16px; bottom: 14px; z-index: 5; max-width: 460px; pointer-events: none;
  padding: 10px 14px; background: linear-gradient(180deg, rgba(10, 16, 26, .82), rgba(5, 9, 15, .88)); border: 1px solid rgba(198, 208, 218, .24); }
.score-hud .t { font-family: var(--f-title); letter-spacing: .22em; font-size: 13px; color: #eef3f8; }
.score-hud .nums { display: flex; flex-wrap: wrap; gap: 14px; margin: 4px 0; font-size: 12px; color: var(--muted); }
.score-hud .nums b { color: #fff; font-family: var(--f-num); font-size: 16px; }
.score-hud .tip { font-size: 12px; line-height: 1.5; color: rgba(198,208,218,.82); }
.score-card { position: absolute; z-index: 6; top: 54px; right: 14px; bottom: 14px; width: min(400px, 44%); overflow: auto; padding: 16px 16px 18px; cursor: auto;
  background: linear-gradient(180deg, rgba(18,26,36,.94), rgba(8,12,18,.96)); border: 1px solid rgba(198,208,218,.32); box-shadow: -12px 0 40px rgba(0,0,0,.35); }
.score-x { position: absolute; top: 8px; right: 10px; width: 28px; height: 28px; border: 0; background: transparent; color: var(--silver); font-size: 20px; cursor: pointer; }
.score-x:hover { color: #fff; }
.sc-who { display: flex; gap: 12px; align-items: center; padding-right: 24px; }
.sc-who .head { width: 54px; height: 64px; overflow: hidden; flex: none; border: 1px solid rgba(230,238,245,.45); background: #10161e; }
.sc-who .head img { width: 100%; height: 100%; object-fit: cover; object-position: center 12%; }
.sc-who .nm { font-size: 18px; color: #fff; } .sc-who .nm i { margin-left: 6px; font-style: normal; font-family: var(--f-title); font-size: 11px; letter-spacing: .08em; color: var(--cyan); }
.sc-who .role { margin-top: 4px; font-size: 12px; color: var(--muted); line-height: 1.45; }
.sc-points { display: flex; align-items: baseline; gap: 8px; margin-top: 14px; }
.sc-points b { font-family: var(--f-num); font-size: 40px; line-height: 1; color: #f6d98a; text-shadow: 0 0 16px rgba(246, 217, 138, .35); }
.sc-points span { color: var(--silver); letter-spacing: .12em; } .sc-points em { margin-left: auto; font-style: normal; color: var(--muted); font-size: 12px; }
.sc-share { height: 4px; margin: 8px 0 12px; background: rgba(255,255,255,.06); }
.sc-share i { display: block; height: 100%; background: linear-gradient(90deg, #8d6414, #f6d98a); }
.sc-metrics { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.sc-metrics div { padding: 8px 8px 7px; border: 1px solid rgba(198,208,218,.16); background: rgba(255,255,255,.03); }
.sc-metrics b { display: block; font-family: var(--f-num); font-size: 20px; color: #fff; }
.sc-metrics span { font-size: 11px; color: var(--muted); letter-spacing: .06em; }
.sc-note { margin: 10px 0; font-size: 12px; line-height: 1.55; color: var(--silver); }
.sc-mods { display: flex; flex-direction: column; gap: 4px; margin-bottom: 8px; }
.sc-mod { display: flex; gap: 8px; font-size: 12px; padding: 4px 0; border-left: 2px solid var(--c); padding-left: 8px; }
.sc-mod b { flex: none; color: #fff; } .sc-mod span { color: var(--muted); }
.sc-list { display: flex; flex-direction: column; gap: 4px; max-height: 220px; overflow: auto; }
.sc-task { display: grid; grid-template-columns: 62px 1fr auto; grid-template-areas: 'cd tt st' 'mk mk ql'; gap: 2px 8px; text-align: left; cursor: pointer;
  border: 1px solid rgba(198,208,218,.12); background: rgba(0,0,0,.2); color: inherit; padding: 6px 8px; }
.sc-task:hover { border-color: rgba(79,209,255,.45); }
.sc-task .cd { grid-area: cd; font-family: var(--f-num); color: var(--cyan); }
.sc-task .tt { grid-area: tt; color: #fff; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sc-task .st { grid-area: st; font-size: 12px; }
.sc-task .mk, .sc-task .ql { font-size: 11px; color: var(--muted); }
.sc-task .mk { grid-area: mk; } .sc-task .ql { grid-area: ql; justify-self: end; color: #f6d98a; }
.sc-rule { margin-top: 12px; padding-top: 10px; border-top: 1px solid rgba(198,208,218,.14); font-size: 12px; line-height: 1.55; color: var(--muted); }
.sc-rule b { display: block; margin-bottom: 4px; color: var(--silver); font-weight: 600; }
.sc-rule p { margin: 0 0 6px; }

/* ============ 消息盒子（右上角修改密码左侧 + QQ/微信风格红点） ============ */
.inbox-btn { position: relative; display: inline-flex; align-items: center; gap: 5px; overflow: visible !important; clip-path: none !important; border-radius: 3px; }
.inbox-btn.has-unread { border-color: rgba(255, 93, 108, .65); color: #fff; background: linear-gradient(180deg, rgba(255, 77, 94, .22), rgba(20, 28, 40, .85)); }
.inbox-btn.on { border-color: var(--cyan); color: #fff; box-shadow: 0 0 14px rgba(79, 209, 255, .35); }
.inbox-dot { position: absolute; top: -7px; right: -7px; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 999px;
  background: #ff3b4e; color: #fff; font-family: var(--f-num); font-size: 11px; font-weight: 700; font-style: normal;
  line-height: 18px; text-align: center; box-shadow: 0 0 10px rgba(255, 59, 78, .85), 0 0 0 2px #09101a; animation: pulse 1.6s infinite; }
.inbox-pop { position: fixed; top: 60px; right: 18px; width: min(430px, 94vw); max-height: min(620px, 80vh); z-index: 95;
  display: flex; flex-direction: column; padding: 14px 14px 12px;
  background: linear-gradient(180deg, rgba(20, 28, 40, .97), rgba(8, 13, 22, .98));
  border: 1px solid rgba(79, 209, 255, .45); box-shadow: 0 18px 50px rgba(0, 0, 0, .82), 0 0 24px rgba(79, 209, 255, .18);
  backdrop-filter: blur(16px); }
.ib-head { display: flex; align-items: center; justify-content: space-between; padding-bottom: 10px; border-bottom: 1px solid var(--line); }
.ib-head .h-title { font-size: 15px; }
.ib-sub { margin-left: 8px; font-size: 12px; color: var(--muted); }
.ib-actions { display: flex; align-items: center; gap: 6px; }
.ib-actions .score-x { position: static; width: 24px; height: 24px; line-height: 22px; }
.ib-tabs { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; margin: 10px 0; }
.ib-tab { all: unset; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 4px; padding: 6px 4px;
  font-size: 12px; color: var(--silver); background: rgba(255,255,255,.04); border: 1px solid var(--line); border-radius: 3px; transition: .15s; }
.ib-tab:hover { border-color: rgba(79,209,255,.45); color: #fff; }
.ib-tab.on { background: linear-gradient(180deg, rgba(79,209,255,.28), rgba(14,70,110,.45)); border-color: var(--cyan); color: #fff; font-weight: 600; }
.ib-cnt { font-style: normal; font-family: var(--f-num); font-size: 11px; font-weight: 700; min-width: 16px; height: 16px; line-height: 16px;
  padding: 0 4px; border-radius: 999px; background: #ff3b4e; color: #fff; text-align: center; }
.ib-list { flex: 1; overflow: auto; display: flex; flex-direction: column; gap: 6px; padding-right: 2px; max-height: 460px; }
.ib-item { position: relative; display: flex; gap: 10px; align-items: flex-start; padding: 9px 10px 9px 14px;
  border: 1px solid rgba(198,208,218,.14); background: rgba(12, 18, 28, .65); cursor: pointer; transition: .15s; border-radius: 3px; }
.ib-item:hover { border-color: rgba(79,209,255,.5); background: rgba(24, 36, 52, .82); }
.ib-item.unread { border-left: 3px solid var(--c, #ff3b4e); background: linear-gradient(90deg, rgba(255, 77, 94, .09), rgba(16, 24, 36, .78)); }
.ib-item .unr-dot { width: 8px; height: 8px; border-radius: 50%; background: transparent; flex: none; margin-top: 10px; }
.ib-item.unread .unr-dot { background: #ff3b4e; box-shadow: 0 0 8px #ff3b4e; }
.ib-bd { flex: 1; min-width: 0; }
.ib-top { display: flex; align-items: center; gap: 6px; margin-bottom: 3px; }
.ib-tag { flex: none; font-size: 10px; font-weight: 700; padding: 1px 6px; border-radius: 2px; color: #061018; background: var(--c, var(--cyan)); }
.ib-ttl { font-size: 13px; color: #fff; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ib-desc { font-size: 12px; color: var(--silver); line-height: 1.45; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.ib-tm { font-size: 11px; color: var(--muted); margin-top: 4px; font-family: var(--f-num); }
.msg.flash-msg .tx { box-shadow: 0 0 0 2px #fbbf24, 0 0 18px rgba(251, 191, 36, .65); transition: box-shadow .3s; }

/* ============ 航行日志：分类别分 UI 展示 + 分权限视野 ============ */
.chk-pill { display: inline-flex; align-items: center; gap: 6px; padding: 6px 11px; border: 1px solid var(--line); background: rgba(10,16,26,.65); font-size: 12px; color: var(--silver); cursor: pointer; user-select: none; }
.chk-pill input { accent-color: var(--cyan); margin: 0; }
.log-search { width: 240px !important; }
.log-scope-bar { display: flex; align-items: center; gap: 12px; padding: 10px 14px; margin-bottom: 12px;
  border: 1px solid var(--line); background: linear-gradient(90deg, rgba(79,209,255,.12), rgba(14,22,34,.85)); border-left: 3px solid var(--cyan); }
.log-scope-bar.rank-T0 { border-left-color: #fbbf24; background: linear-gradient(90deg, rgba(251,191,36,.14), rgba(14,22,34,.85)); }
.log-scope-bar.rank-T1 { border-left-color: #5ef0c8; background: linear-gradient(90deg, rgba(94,240,200,.12), rgba(14,22,34,.85)); }
.log-scope-bar .sc-ic { font-size: 20px; }
.log-scope-bar b { display: block; font-size: 13px; color: #fff; }
.log-scope-bar span { font-size: 12px; color: var(--muted); }
.log-scope-bar .sc-cnt { margin-left: auto; font-style: normal; font-family: var(--f-num); font-size: 13px; color: var(--silver); white-space: nowrap; }
.log-cat-bar { display: grid; grid-template-columns: repeat(5, 1fr); gap: 10px; margin-bottom: 16px; }
.log-cat-card { all: unset; cursor: pointer; padding: 10px 12px; border: 1px solid var(--line); border-top: 2px solid var(--c);
  background: linear-gradient(180deg, rgba(26,36,50,.76), rgba(10,15,24,.88)); transition: .15s; }
.log-cat-card:hover { border-color: var(--c); box-shadow: 0 0 14px color-mix(in srgb, var(--c) 28%, transparent); }
.log-cat-card.on { background: linear-gradient(180deg, color-mix(in srgb, var(--c) 24%, rgba(20,30,44,.9)), rgba(10,16,26,.94));
  border-color: var(--c); box-shadow: 0 0 18px color-mix(in srgb, var(--c) 35%, transparent); }
.log-cat-card .lc-top { display: flex; align-items: center; gap: 6px; color: #fff; font-size: 13px; }
.log-cat-card .lc-top .ic { color: var(--c); font-size: 15px; }
.log-cat-card .lc-bot { display: flex; align-items: baseline; justify-content: space-between; margin-top: 6px; }
.log-cat-card .lc-bot .en { font-family: var(--f-title); font-size: 9px; letter-spacing: .16em; color: var(--muted); }
.log-cat-card .lc-bot em { font-style: normal; font-family: var(--f-num); font-size: 22px; font-weight: 700; color: #fff; line-height: 1; }
.logs-structured { display: flex; flex-direction: column; gap: 16px; }
.log-day-hd { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; font-family: var(--f-title); font-size: 11px; letter-spacing: .16em; color: var(--cyan); }
.log-day-hd::after { content: ''; flex: 1; height: 1px; background: linear-gradient(90deg, var(--line-hi), transparent); }
.log-day-hd i { font-style: normal; color: var(--muted); font-family: var(--f-body); letter-spacing: 0; }
.log-cards { display: flex; flex-direction: column; gap: 8px; }
.log-card { display: flex; gap: 12px; align-items: flex-start; padding: 11px 14px;
  border: 1px solid rgba(198,208,218,.16); border-left: 3px solid var(--c);
  background: linear-gradient(90deg, color-mix(in srgb, var(--c) 8%, rgba(16,24,36,.88)), rgba(10,15,24,.9)); border-radius: 0 4px 4px 0; transition: .15s; }
.log-card:hover { border-color: color-mix(in srgb, var(--c) 55%, var(--line)); }
.log-card .lc-main { flex: 1; min-width: 0; }
.log-card .lc-meta { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 5px; font-size: 11px; }
.lc-cat-tag { display: inline-flex; align-items: center; gap: 4px; padding: 1px 7px; border-radius: 2px;
  background: color-mix(in srgb, var(--c) 18%, rgba(0,0,0,.4)); border: 1px solid color-mix(in srgb, var(--c) 55%, transparent); color: var(--c); font-weight: 600; }
.lc-Cat-tag .ic, .lc-cat-tag .ic { font-style: normal; }
.lc-act-badge { padding: 1px 7px; border-radius: 2px; font-weight: 700; color: #061018; background: var(--bc, var(--c)); }
.lc-task-pill { all: unset; cursor: pointer; padding: 1px 8px; border-radius: 999px; font-family: var(--f-num); font-weight: 700;
  color: #fff; background: rgba(255,255,255,.06); border: 1px solid var(--mc, var(--cyan)); transition: .15s; }
.lc-task-pill:hover { background: rgba(79,209,255,.22); }
.lc-st { font-weight: 600; }
.lc-time { margin-left: auto; font-family: var(--f-num); color: var(--muted); }
.lc-body { font-size: 13.5px; line-height: 1.55; color: var(--ink); }
.lc-quote { margin-top: 6px; padding: 6px 10px; border-left: 2px solid var(--bc, #fbbf24); background: rgba(0,0,0,.32); font-size: 12px; color: #f3f7fb; }
.lc-quote span { color: var(--muted); }
.lc-prog { display: flex; align-items: center; gap: 8px; margin-top: 6px; max-width: 260px; }
.lc-prog .bar { flex: 1; height: 6px; background: rgba(255,255,255,.08); border-radius: 3px; overflow: hidden; }
.lc-prog .bar i { display: block; height: 100%; background: linear-gradient(90deg, #4fd1ff, #5ef0c8); }
.lc-prog b { font-family: var(--f-num); font-size: 12px; color: #5ef0c8; }

/* ============ Windows 资源管理器风格文件共享 + Agent 文件库 ============ */
.win-space-tabs { margin-left: auto; display: flex; gap: 10px; }
.win-space-btn { all: unset; cursor: pointer; display: flex; align-items: center; gap: 10px; padding: 8px 14px;
  border: 1px solid var(--line); background: rgba(14, 22, 34, .82); border-radius: 4px; transition: .15s; }
.win-space-btn .ic { font-size: 20px; }
.win-space-btn b { display: block; font-size: 13px; color: #fff; }
.win-space-btn span { display: block; font-size: 11px; color: var(--muted); margin-top: 1px; }
.win-space-btn:hover { border-color: rgba(79,209,255,.5); }
.win-space-btn.on { border-color: var(--cyan); background: linear-gradient(180deg, rgba(79,209,255,.22), rgba(14,48,78,.72)); box-shadow: 0 0 16px rgba(79,209,255,.28); }
.win-space-btn.agent.on { border-color: #5ef0c8; background: linear-gradient(180deg, rgba(94,240,200,.22), rgba(12,56,48,.75)); box-shadow: 0 0 18px rgba(94,240,200,.3); }

.win-explorer { display: flex; flex-direction: column; min-height: max(540px, calc(100vh - 200px)); overflow: hidden; clip-path: none !important; border-radius: 4px; }
.win-explorer.is-agent { border-color: rgba(94, 240, 200, .38); }
.win-cmd-bar { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; padding: 8px 12px;
  background: linear-gradient(180deg, rgba(28, 38, 52, .95), rgba(16, 22, 32, .95)); border-bottom: 1px solid var(--line); }
.win-cmd-btn { all: unset; cursor: pointer; display: inline-flex; align-items: center; gap: 5px; padding: 5px 11px;
  font-size: 12px; color: var(--ink); border: 1px solid rgba(198,208,218,.22); border-radius: 3px; background: rgba(255,255,255,.04); transition: .12s; }
.win-cmd-btn:hover:not(:disabled) { border-color: var(--cyan); background: rgba(79,209,255,.15); color: #fff; }
.win-cmd-btn.primary { border-color: var(--cyan); background: rgba(79,209,255,.24); color: #fff; font-weight: 600; }
.win-cmd-btn.agent-hi { border-color: rgba(94,240,200,.55); background: rgba(94,240,200,.14); color: #b8ffea; }
.win-cmd-btn.agent-hi:hover:not(:disabled) { border-color: #5ef0c8; background: rgba(94,240,200,.26); color: #fff; }
.win-cmd-btn.danger:hover:not(:disabled) { border-color: #ff6b7a; background: rgba(255,107,122,.2); color: #ffccd2; }
.win-cmd-btn:disabled { opacity: .35; cursor: not-allowed; }
.win-cmd-sep { width: 1px; height: 20px; background: var(--line); margin: 0 4px; }
.win-view-switch { margin-left: auto; display: inline-flex; border: 1px solid var(--line); border-radius: 3px; overflow: hidden; }
.win-vbtn { all: unset; cursor: pointer; padding: 4px 10px; font-size: 11px; color: var(--muted); background: rgba(0,0,0,.25); }
.win-vbtn + .win-vbtn { border-left: 1px solid var(--line); }
.win-vbtn.on { background: rgba(79,209,255,.22); color: #fff; font-weight: 600; }

.win-addr-bar { display: flex; align-items: center; gap: 8px; padding: 7px 12px; background: rgba(10, 15, 24, .92); border-bottom: 1px solid var(--line); }
.win-nav-ic { all: unset; cursor: pointer; width: 28px; height: 28px; display: grid; place-items: center;
  border: 1px solid var(--line); border-radius: 3px; color: var(--silver); background: rgba(255,255,255,.03); font-size: 13px; }
.win-nav-ic:hover:not(:disabled) { border-color: var(--cyan); color: #fff; background: rgba(79,209,255,.15); }
.win-nav-ic:disabled { opacity: .35; cursor: not-allowed; }
.win-breadcrumbs { flex: 1; min-width: 0; display: flex; align-items: center; gap: 4px; overflow-x: auto;
  padding: 4px 10px; border: 1px solid rgba(198,208,218,.24); border-radius: 3px; background: rgba(4, 8, 14, .75); }
.win-crumb { all: unset; cursor: pointer; padding: 2px 7px; border-radius: 2px; font-size: 12px; color: var(--silver); white-space: nowrap; }
.win-crumb:hover { background: rgba(255,255,255,.08); color: #fff; }
.win-crumb.on { color: #fff; font-weight: 700; background: rgba(79,209,255,.16); }
.win-breadcrumbs .sep { color: var(--muted); font-size: 11px; }
.win-search-box { position: relative; width: 230px; display: flex; align-items: center; }
.win-search-box span { position: absolute; left: 9px; font-size: 12px; pointer-events: none; opacity: .7; }
.win-search-box .inp { padding: 5px 10px 5px 28px; font-size: 12px; height: 28px; }

.agent-banner { display: flex; align-items: center; gap: 10px; padding: 7px 12px; font-size: 12px; color: #d6fff2;
  background: linear-gradient(90deg, rgba(94,240,200,.14), rgba(14,28,36,.85)); border-bottom: 1px solid rgba(94,240,200,.28); }
.agent-banner .ab-tag { flex: none; padding: 2px 8px; border-radius: 2px; background: #5ef0c8; color: #051410; font-weight: 700; font-size: 11px; }

.win-body { flex: 1; display: grid; grid-template-columns: 215px minmax(0, 1fr); min-height: 380px; }
.win-tree { border-right: 1px solid var(--line); padding: 10px 8px; background: rgba(8, 13, 22, .72); overflow-y: auto; }
.wt-root { all: unset; cursor: pointer; width: 100%; box-sizing: border-box; display: flex; align-items: center; justify-content: space-between;
  padding: 6px 8px; border-radius: 3px; font-size: 12px; font-weight: 700; color: #fff; background: rgba(255,255,255,.04); border: 1px solid transparent; }
.wt-root:hover { background: rgba(79,209,255,.1); }
.wt-root.on { border-color: var(--cyan); background: rgba(79,209,255,.18); }
.wt-root.agent.on { border-color: #5ef0c8; background: rgba(94,240,200,.18); }
.wt-root em, .wt-node em { font-style: normal; font-family: var(--f-num); font-size: 11px; color: var(--muted); }
.wt-children { display: flex; flex-direction: column; gap: 2px; margin-top: 4px; padding-left: 10px; border-left: 1px dashed rgba(198,208,218,.18); margin-left: 10px; }
.wt-node { all: unset; cursor: pointer; display: flex; align-items: center; gap: 6px; padding: 5px 8px; border-radius: 3px; font-size: 12px; color: var(--silver); }
.wt-node .ic { color: var(--c, var(--cyan)); width: 14px; text-align: center; }
.wt-node .tx { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wt-node:hover { background: rgba(255,255,255,.06); color: #fff; }
.wt-node.on { background: rgba(79,209,255,.16); color: #fff; font-weight: 600; box-shadow: inset 2px 0 0 var(--c, var(--cyan)); }

.win-stage { padding: 12px 16px 20px; overflow-y: auto; user-select: none; min-height: 360px; }
.win-sec-hd { display: flex; align-items: center; justify-content: space-between; margin: 4px 0 10px; padding-bottom: 5px;
  border-bottom: 1px solid rgba(198,208,218,.14); font-size: 12px; font-weight: 700; color: var(--silver); }
.win-sec-hd + .win-grid + .win-sec-hd { margin-top: 18px; }
.win-sec-hd i { font-style: normal; font-weight: 400; font-size: 11px; color: var(--muted); }
.win-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(136px, 1fr)); gap: 10px; }
.win-item { display: flex; flex-direction: column; align-items: center; text-align: center; padding: 12px 8px 10px;
  border: 1px solid transparent; border-radius: 4px; background: rgba(255,255,255,.02); cursor: pointer; transition: .12s; }
.win-item:hover { background: rgba(79,209,255,.09); border-color: rgba(79,209,255,.32); }
.win-item.win-sel { background: rgba(79,209,255,.2); border-color: var(--cyan); box-shadow: 0 0 0 1px rgba(79,209,255,.45), inset 0 0 16px rgba(79,209,255,.12); }

/* Windows 立体文件夹图标 */
.win-folder-ic { --fc: #fbbf24; position: relative; width: 64px; height: 50px; margin-bottom: 8px; flex: none; }
.win-folder-ic .f-tab { position: absolute; left: 2px; top: 2px; width: 26px; height: 10px; border-radius: 4px 4px 0 0;
  background: color-mix(in srgb, var(--fc) 78%, #8a5a00); }
.win-folder-ic .f-back { position: absolute; left: 2px; right: 2px; top: 8px; bottom: 4px; border-radius: 0 4px 4px 4px;
  background: color-mix(in srgb, var(--fc) 72%, #6e4800); }
.win-folder-ic .f-paper { position: absolute; left: 8px; right: 8px; top: 11px; height: 16px; border-radius: 2px;
  background: linear-gradient(180deg, #f8fafc, #cbd5e1); box-shadow: 0 1px 2px rgba(0,0,0,.35); }
.win-folder-ic .f-front { position: absolute; left: 0; right: 0; top: 16px; bottom: 2px; border-radius: 3px 3px 5px 5px;
  background: linear-gradient(180deg, color-mix(in srgb, var(--fc) 95%, #fff), color-mix(in srgb, var(--fc) 78%, #7c4d00));
  box-shadow: 0 4px 10px rgba(0,0,0,.45), inset 0 1px 0 rgba(255,255,255,.55); display: grid; place-items: center; }
.win-folder-ic .f-badge { font-style: normal; font-family: var(--f-title); font-size: 12px; font-weight: 900; color: rgba(10, 16, 24, .78); text-shadow: 0 1px 0 rgba(255,255,255,.4); }
.win-folder-ic.agent .f-front { box-shadow: 0 4px 12px rgba(0,0,0,.5), 0 0 12px color-mix(in srgb, var(--fc) 45%, transparent), inset 0 1px 0 rgba(255,255,255,.65); }
.win-folder-ic.up { --fc: #64748b; }

/* Windows 立体文档/代码文件图标 */
.win-file-ic { --ec: #4fd1ff; position: relative; width: 48px; height: 56px; margin-bottom: 6px; flex: none;
  background: linear-gradient(160deg, #1e293b, #0f172a); border: 1.5px solid color-mix(in srgb, var(--ec) 72%, rgba(255,255,255,.3));
  border-radius: 3px 11px 3px 3px; display: flex; align-items: flex-end; justify-content: center; padding-bottom: 8px;
  box-shadow: 0 4px 10px rgba(0,0,0,.45); }
.win-file-ic .wf-corner { position: absolute; top: -1px; right: -1px; width: 12px; height: 12px;
  background: linear-gradient(225deg, #0b121e 50%, color-mix(in srgb, var(--ec) 80%, #fff) 50%); }
.win-file-ic .wf-ext { font-family: var(--f-title); font-size: 10px; font-weight: 800; padding: 1px 5px; border-radius: 2px;
  background: var(--ec); color: #050c14; letter-spacing: .04em; }

.wi-nm { width: 100%; font-size: 12.5px; font-weight: 600; color: #f1f5f9; line-height: 1.35;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; word-break: break-all; }
.wi-sub { width: 100%; font-size: 11px; color: var(--muted); margin-top: 3px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.win-empty-inline { padding: 22px 12px; text-align: center; font-size: 12px; color: var(--muted); border: 1px dashed rgba(198,208,218,.18); border-radius: 4px; }

/* Windows 详细信息列表模式 */
.win-table { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.win-table th { text-align: left; padding: 7px 10px; font-weight: 600; color: var(--muted); border-bottom: 1px solid var(--line); font-size: 11.5px; }
.win-tr td { padding: 7px 10px; border-bottom: 1px solid rgba(198,208,218,.07); color: var(--silver); cursor: pointer; }
.win-tr:hover td { background: rgba(79,209,255,.08); }
.win-tr.win-sel td { background: rgba(79,209,255,.2); color: #fff; }
.win-tr .col-nm { display: flex; align-items: center; gap: 8px; color: #fff; }
.win-tr .mini-ic { font-size: 16px; }
.win-tr .mini-ext { font-family: var(--f-title); font-size: 9px; font-weight: 800; padding: 1px 5px; border-radius: 2px; background: var(--ec); color: #061018; }

.win-status-bar { display: flex; align-items: center; gap: 10px; padding: 6px 12px; font-size: 11.5px; color: var(--muted);
  background: rgba(6, 10, 16, .95); border-top: 1px solid var(--line); }
.win-status-bar .sep { opacity: .4; }

/* Windows 右键上下文菜单 */
.win-ctx-menu { position: fixed; z-index: 260; min-width: 220px; padding: 5px;
  background: linear-gradient(180deg, rgba(22, 31, 44, .98), rgba(10, 15, 24, .99));
  border: 1px solid rgba(198, 208, 218, .42); border-radius: 4px;
  box-shadow: 0 12px 36px rgba(0, 0, 0, .85), 0 0 16px rgba(79, 209, 255, .2); backdrop-filter: blur(14px); }
.win-ctx-item { all: unset; box-sizing: border-box; width: 100%; cursor: pointer; display: flex; align-items: center; gap: 9px;
  padding: 6px 10px; font-size: 12.5px; color: #e8f0f8; border-radius: 3px; }
.win-ctx-item .ic { width: 18px; text-align: center; font-size: 13px; }
.win-ctx-item .tx { flex: 1; }
.win-ctx-item kbd { font-size: 10px; color: var(--muted); font-family: var(--f-body); }
.win-ctx-item:hover:not(:disabled) { background: rgba(79, 209, 255, .22); color: #fff; }
.win-ctx-item.danger:hover:not(:disabled) { background: rgba(255, 93, 108, .25); color: #ffd4d8; }
.win-ctx-item:disabled { opacity: .38; cursor: not-allowed; }
.win-ctx-sep { height: 1px; margin: 4px 6px; background: rgba(198, 208, 218, .18); }

.win-props { display: flex; flex-direction: column; gap: 8px; margin: 12px 0; font-size: 13px; }
.win-props > div { display: grid; grid-template-columns: 96px 1fr; gap: 8px; padding: 5px 0; border-bottom: 1px solid rgba(198,208,218,.1); }
.win-props span { color: var(--muted); }
.win-props b { color: #fff; word-break: break-all; }

/* ============ 已开始任务的「修改任务」申请与逐级审批 UI ============ */
.pe-pill { display: inline-flex; align-items: center; gap: 3px; padding: 1px 6px; border-radius: 2px; font-size: 10px; font-weight: 700;
  color: #081018; background: #fbbf24; box-shadow: 0 0 8px rgba(251, 191, 36, .55); }
.dr-edit-banner { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 12px;
  border: 1px solid rgba(79, 209, 255, .38); border-left: 3px solid var(--cyan);
  background: linear-gradient(90deg, rgba(79, 209, 255, .12), rgba(14, 22, 34, .85)); }
.dr-edit-banner b { display: block; font-size: 12.5px; color: #fff; }
.dr-edit-banner span { display: block; font-size: 11.5px; color: var(--muted); margin-top: 2px; line-height: 1.4; }
.pe-card { padding: 12px 14px; border: 1px solid rgba(251, 191, 36, .6); border-left: 3px solid #fbbf24;
  background: linear-gradient(180deg, rgba(251, 191, 36, .12), rgba(16, 22, 32, .94)); box-shadow: 0 0 20px rgba(251, 191, 36, .16); }
.pe-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
.pe-badge { padding: 2px 8px; border-radius: 2px; background: #fbbf24; color: #081018; font-size: 11px; font-weight: 800; }
.pe-tm { font-family: var(--f-num); font-size: 11px; color: var(--muted); }
.pe-who { display: flex; align-items: center; gap: 6px; font-size: 13px; color: #fff; margin-bottom: 6px; }
.pe-reason { padding: 6px 10px; background: rgba(0, 0, 0, .35); border-left: 2px solid #fbbf24; font-size: 12.5px; color: #f6e7c1; margin-bottom: 8px; }
.pe-reason span { color: var(--muted); }
.pe-diffs { display: flex; flex-direction: column; gap: 5px; padding: 8px 10px; background: rgba(4, 8, 14, .65); border: 1px solid rgba(198, 208, 218, .16); border-radius: 3px; }
.pe-diff-row { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; font-size: 12px; line-height: 1.45; }
.pe-diff-row .pe-k { min-width: 72px; color: var(--cyan); font-weight: 600; }
.pe-diff-row del { color: #ff8a96; text-decoration: line-through; background: rgba(255, 107, 122, .12); padding: 0 5px; border-radius: 2px; }
.pe-diff-row .pe-arr { color: var(--muted); }
.pe-diff-row ins { color: #5ef0c8; text-decoration: none; font-weight: 700; background: rgba(94, 240, 200, .14); padding: 0 5px; border-radius: 2px; }
.pe-approve-box { margin-top: 10px; display: flex; flex-direction: column; gap: 8px; }
.pe-btns { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.pe-wait-note { margin-top: 8px; font-size: 12px; color: #ffe082; display: flex; align-items: center; gap: 8px; }
.pe-qbox { margin: 8px 0; padding: 8px 10px; border: 1px solid rgba(251, 191, 36, .45); background: rgba(251, 191, 36, .08); border-radius: 3px; }
.pe-qhd { display: flex; align-items: center; gap: 6px; font-size: 12px; color: #ffe082; margin-bottom: 6px; }

/* ============ 多选参与执行人 + 唯一负责人 + 任务权重分配面板 ============ */
.tw-box { padding: 11px 12px; border: 1px solid rgba(198, 208, 218, .22); border-radius: 4px; background: rgba(8, 14, 22, .72); }
.tw-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 12.5px; color: #fff; margin-bottom: 6px; }
.tw-head span { margin-right: auto; }
.tw-Sub { font-size: 11.5px; color: var(--muted); margin-bottom: 8px; line-height: 1.4; }
.tw-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 10px; padding-bottom: 8px; border-bottom: 1px dashed rgba(198, 208, 218, .16); }
.tw-chip { all: unset; cursor: pointer; display: inline-flex; align-items: center; gap: 5px; padding: 3px 9px;
  border: 1px solid rgba(198, 208, 218, .24); border-radius: 999px; font-size: 11.5px; color: var(--silver); background: rgba(255, 255, 255, .03); transition: .12s; }
.tw-chip:hover { border-color: var(--c, var(--cyan)); color: #fff; }
.tw-chip.on { border-color: var(--c, var(--cyan)); background: color-mix(in srgb, var(--c, var(--cyan)) 22%, rgba(12, 22, 34, .9)); color: #fff; font-weight: 600; }
.tw-chip.is-leader { border-color: #fbbf24; box-shadow: 0 0 10px rgba(251, 191, 36, .35); }
.tw-chip i { font-style: normal; font-family: var(--f-title); font-size: 9.5px; opacity: .78; }
.tw-rows { display: flex; flex-direction: column; gap: 7px; }
.tw-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 7px 10px;
  border: 1px solid rgba(198, 208, 218, .15); border-radius: 3px; background: rgba(16, 24, 36, .68); }
.tw-row.leader { border-color: rgba(251, 191, 36, .55); background: linear-gradient(90deg, rgba(251, 191, 36, .12), rgba(16, 24, 36, .75)); }
.tw-who { display: flex; align-items: center; gap: 8px; min-width: 165px; }
.tw-who .nm { font-size: 12.5px; font-weight: 600; color: #fff; }
.tw-who .rl { display: flex; align-items: center; gap: 6px; margin-top: 2px; font-size: 11px; }
.ld-badge { padding: 1px 6px; border-radius: 2px; background: #fbbf24; color: #081018; font-weight: 800; font-size: 10px; }
.ex-badge { color: var(--muted); font-size: 11px; }
.tw-set-ld { all: unset; cursor: pointer; font-size: 11px; color: var(--cyan); text-decoration: underline dotted; }
.tw-set-ld:hover { color: #fff; }
.tw-wctrl { flex: 1; display: flex; align-items: center; gap: 8px; max-width: 260px; }
.tw-wctrl input[type="range"] { flex: 1; accent-color: var(--cyan); }
.tw-num-wrap { display: flex; align-items: center; gap: 3px; font-family: var(--f-num); font-size: 13px; color: #fff; }
.tw-num { width: 56px !important; padding: 3px 6px !important; text-align: right; font-family: var(--f-num); font-weight: 700; }
.tw-foot { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; padding-top: 6px; font-size: 11.5px; color: var(--muted); }
.app-leader-row { margin: 8px 0; padding: 8px 10px; border: 1px solid rgba(251, 191, 36, .45); background: rgba(251, 191, 36, .08); border-radius: 3px; }

/* ============ 第八模块：低空要闻（紧凑清晰情报卡片 + 24h今日/历史归档切换） ============ */
.news-top-bar { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; padding: 8px 12px; margin-bottom: 10px; clip-path: none !important; border-radius: 4px; }
.ntb-left { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; min-width: 0; }
.ntb-right { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-left: auto; }
.daily-cron-badge { padding: 2px 8px; border-radius: 4px; background: rgba(79, 209, 255, .1); border: 1px solid rgba(79, 209, 255, .35); color: #d8f6ff; font-size: 11.5px; font-weight: 600; white-space: nowrap; }
.ntb-meta { font-size: 12px; color: var(--muted); }
.ntb-meta b { color: var(--silver-hi); }

.news-tag-bar { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-bottom: 12px; }
.ntag-chip { all: unset; cursor: pointer; display: inline-flex; align-items: center; gap: 5px; padding: 4px 10px;
  border: 1px solid rgba(198, 208, 218, .18); border-radius: 4px; font-size: 12px; color: var(--silver);
  background: rgba(12, 18, 28, .72); transition: .14s; }
.ntag-chip.sm { padding: 2px 8px; font-size: 11px; }
.ntag-chip em { font-style: normal; font-family: var(--f-num); font-size: 11px; color: var(--muted); }
.ntag-chip:hover { border-color: rgba(79, 209, 255, .5); color: #fff; }
.ntag-chip.on { border-color: var(--cyan); background: rgba(79, 209, 255, .15); color: #fff; font-weight: 600; }
.ntag-chip.on em { color: var(--cyan); font-weight: 700; }

/* 浅色底深色字、护眼清爽的低空情报卡片网格（单卡高度约 156px，柔和纸感浅灰白底 + 深海蓝黑正文，减少视觉疲劳） */
.xhs-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(285px, 1fr)); gap: 12px; align-items: stretch; }
.xhs-card { display: flex; flex-direction: column; justify-content: space-between; gap: 8px; padding: 13px 15px; min-height: 154px;
  cursor: pointer; border-radius: 7px; border: 1px solid #cbd5e1;
  background: linear-gradient(180deg, #f8fafc 0%, #eef2f6 100%);
  box-shadow: 0 3px 10px rgba(4, 10, 20, .28);
  transition: border-color .15s ease, background .15s ease, transform .15s ease, box-shadow .15s ease; }
.xhs-card:hover { border-color: #0284c7; background: #ffffff; transform: translateY(-2px);
  box-shadow: 0 8px 20px rgba(4, 10, 20, .38), 0 0 0 1px rgba(2, 132, 199, .28); }
.xhs-card.is-hist { opacity: .92; background: linear-gradient(180deg, #edf2f7 0%, #e2e8f0 100%); }

.nc-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding-bottom: 6px;
  border-bottom: 1px solid #dde5ee; font-size: 11.5px; line-height: 1.25; }
.nc-src-box { display: flex; align-items: center; gap: 6px; min-width: 0; flex: 1; }
.nc-src-badge { display: inline-flex; align-items: center; gap: 4px; padding: 2px 7px; border-radius: 4px;
  font-size: 11.5px; font-weight: 600; color: #0369a1; background: #e0f2fe;
  border: 1px solid #bae6fd; max-width: 175px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.nc-domain { font-size: 11px; color: #64748b; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.nc-time-box { display: flex; align-items: center; gap: 5px; flex: none; }
.nc-time { white-space: nowrap; font-size: 11px; color: #475569; font-weight: 500; }
.nc-hist-tag { padding: 1px 5px; border-radius: 3px; font-size: 10px; color: #475569; background: #e2e8f0; border: 1px solid #cbd5e1; }

.nc-title { margin: 0; font-size: 14px; font-weight: 700; line-height: 1.45; color: #0f172a;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.xhs-card:hover .nc-title { color: #0284c7; }

.nc-desc { margin: 0; font-size: 12px; line-height: 1.48; color: #475569;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }

.nc-foot { display: flex; align-items: center; justify-content: space-between; gap: 6px; margin-top: auto; padding-top: 7px;
  border-top: 1px solid #dde5ee; }
.nc-tags { display: flex; align-items: center; gap: 5px; min-width: 0; overflow: hidden; }
.nc-tag { all: unset; cursor: pointer; padding: 1px 6px; border-radius: 4px; font-size: 11px; font-weight: 600;
  color: #1e40af; background: #dbeafe; border: 1px solid #bfdbfe; white-space: nowrap; flex: none; transition: .12s; }
.nc-tag:hover { color: #fff; border-color: #0284c7; background: #0284c7; }

.nc-acts { margin-left: auto; display: flex; align-items: center; gap: 4px; flex: none; }
.nc-btn { all: unset; cursor: pointer; padding: 1px 6px; border-radius: 4px; font-size: 11px; font-weight: 500; color: #475569; transition: .12s; }
.nc-btn:hover { color: #0f172a; background: #e2e8f0; }
.nc-btn.like.on { color: #e11d48; font-weight: 700; background: #ffe4e6; }
.nc-btn.del:hover { color: #e11d48; background: #ffe4e6; }
.nc-ext { font-size: 12px; color: #475569; padding-left: 2px; transition: .12s; }
.xhs-card:hover .nc-ext { color: #0284c7; }

/* 发布要闻弹窗与自定义标签输入器 */
.np-url-row, .np-cover-row { display: flex; gap: 8px; align-items: center; }
.np-tag-editor { padding: 10px 12px; border: 1px solid var(--line); border-radius: 4px; background: rgba(6, 11, 18, .65); display: flex; flex-direction: column; gap: 8px; }
.np-selected-tags { display: flex; flex-wrap: wrap; gap: 6px; min-height: 26px; align-items: center; }
.np-tag-pill { --tc: var(--cyan); display: inline-flex; align-items: center; gap: 5px; padding: 3px 10px; border-radius: 999px;
  font-size: 12px; font-weight: 700; color: #fff; background: color-mix(in srgb, var(--tc) 26%, rgba(12, 20, 32, .9)); border: 1px solid var(--tc); }
.np-tag-pill i { font-style: normal; cursor: pointer; opacity: .75; font-size: 14px; line-height: 1; }
.np-tag-pill i:hover { opacity: 1; color: #ff8a96; }
.np-tag-input-row { display: flex; gap: 8px; }
.np-preset-tags { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; font-size: 11.5px; color: var(--muted); }

/* 内置网页预览弹窗（Built-in Web Browser Modal） */
.modal.wide:has(.npv-head) { width: min(1180px, 95vw); padding: 14px 16px; }
.npv-head { display: flex; flex-direction: column; gap: 8px; margin-bottom: 10px; }
.npv-title-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.npv-title-row .h-title { font-size: 17px; }
.npv-tags { display: flex; gap: 6px; flex-wrap: wrap; }
.npv-browser-bar { display: flex; align-items: center; gap: 8px; padding: 6px 10px; border: 1px solid var(--line); border-radius: 4px; background: rgba(6, 10, 16, .92); }
.nb-dots { display: inline-flex; gap: 5px; margin-right: 4px; }
.nb-dots i { width: 9px; height: 9px; border-radius: 50%; background: #475569; }
.nb-dots i:nth-child(1) { background: #ff5d6c; }
.nb-dots i:nth-child(2) { background: #fbbf24; }
.nb-dots i:nth-child(3) { background: #4ade80; }
.nb-lock { font-size: 11.5px; color: #5ef0c8; white-space: nowrap; font-weight: 600; }
.nb-addr { flex: 1; height: 28px !important; padding: 4px 10px !important; font-size: 12px !important; color: var(--silver) !important; background: rgba(0, 0, 0, .45) !important; }
.npv-body { height: min(74vh, 720px); border: 1px solid var(--line); border-radius: 4px; overflow: hidden; background: #0c131f; display: flex; flex-direction: column; }
.news-browser-frame { width: 100%; height: 100%; border: 0; background: #fff; }
.npv-reader { flex: 1; overflow-y: auto; padding: 22px 28px; color: #e7eef6; line-height: 1.75; font-size: 14.5px; }
.npv-cover { display: block; max-width: 100%; max-height: 320px; object-fit: contain; margin: 0 auto 16px; border-radius: 6px; border: 1px solid var(--line); }
.npv-meta { display: flex; align-items: center; gap: 8px; font-size: 12.5px; color: var(--muted); margin-bottom: 14px; padding-bottom: 10px; border-bottom: 1px solid var(--line); }
.npv-summary { padding: 12px 16px; border-left: 3px solid var(--cyan); background: rgba(79, 209, 255, .08); color: #f1f7fd; margin-bottom: 16px; white-space: pre-wrap; }
.npv-paras p { margin: 0 0 12px; color: #cbd5e1; }

/* ═════════ 量子通讯：右键菜单 / 引用回复 / 转发标签 ═════════ */
.chat-quote-bar { padding: 6px 10px; border-top: 1px solid rgba(79, 209, 255, .3); background: rgba(14, 26, 42, .94); }
.cqb-in { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--silver); }
.cqb-ic { color: var(--cyan); white-space: nowrap; }
.cqb-tx { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #dbe7f3; opacity: .9; }
.cqb-x { all: unset; cursor: pointer; padding: 2px 6px; border-radius: 3px; color: var(--muted); font-size: 12px; }
.cqb-x:hover { color: #ff6b7a; background: rgba(255, 107, 122, .15); }

.msg-quote { margin: 3px 0 5px; padding: 5px 9px; border-left: 3px solid var(--cyan); border-radius: 3px;
  background: rgba(6, 12, 22, .62); font-size: 11.5px; color: var(--silver); cursor: pointer;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; transition: .14s; }
.msg-quote:hover { background: rgba(79, 209, 255, .14); color: #fff; }
.msg-quote b { color: var(--cyan); font-weight: 700; margin-right: 4px; }

.msg-fwd-tag { display: inline-flex; align-items: center; gap: 4px; margin: 2px 0 4px; padding: 1px 7px;
  border-radius: 3px; font-size: 10.5px; color: #fbbf24; background: rgba(251, 191, 36, .12); border: 1px solid rgba(251, 191, 36, .35); }

.msg.flash-msg .bd { animation: msgFlash 2s ease; }
@keyframes msgFlash {
  0%, 35% { box-shadow: 0 0 0 2px var(--cyan), 0 0 18px rgba(79, 209, 255, .55); background: rgba(79, 209, 255, .24); }
  100% { box-shadow: none; }
}

/* ═════════ 开发文档：子系统/子任务 Excel 导入按钮与拖拽区 ═════════ */
.doc-card { position: relative; }
.doc-card-acts { display: flex; align-items: center; justify-content: flex-end; margin-top: 6px; padding-top: 6px; border-top: 1px dashed rgba(198, 208, 218, .14); }
.doc-imp-mod-btn { all: unset; cursor: pointer; display: inline-flex; align-items: center; gap: 4px; padding: 3px 9px;
  border-radius: 3px; font-size: 11.5px; font-weight: 600; color: var(--cyan);
  background: rgba(79, 209, 255, .1); border: 1px solid rgba(79, 209, 255, .36); transition: .14s; }
.doc-imp-mod-btn:hover { color: #fff; background: rgba(79, 209, 255, .25); border-color: var(--cyan); }

.dk-chip-group { display: inline-flex; align-items: stretch; border-radius: 4px; overflow: hidden; }
.dk-chip-group > button:first-child { border-top-right-radius: 0 !important; border-bottom-right-radius: 0 !important; }
.doc-imp-kind-btn { all: unset; cursor: pointer; display: inline-flex; align-items: center; padding: 0 8px;
  font-size: 11px; font-weight: 600; color: #5ef0c8; background: rgba(94, 240, 200, .1);
  border: 1px solid rgba(94, 240, 200, .34); border-left: 0; border-radius: 0 4px 4px 0; transition: .14s; }
.doc-imp-kind-btn:hover { background: rgba(94, 240, 200, .25); color: #fff; }

.doc-src-badge { display: inline-flex; align-items: center; gap: 4px; padding: 3px 9px; border-radius: 3px;
  font-size: 11.5px; color: #5ef0c8; background: rgba(94, 240, 200, .1); border: 1px solid rgba(94, 240, 200, .35);
  max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.di-drop-zone { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 5px;
  padding: 20px 16px; border: 1.5px dashed rgba(79, 209, 255, .45); border-radius: 6px;
  background: rgba(8, 16, 28, .65); cursor: pointer; text-align: center; transition: .15s; }
.di-drop-zone:hover, .di-drop-zone.drag { border-color: #5ef0c8; background: rgba(94, 240, 200, .09); }
.di-drop-Zone .di-ic, .di-drop-zone .di-ic { font-size: 26px; }
.di-drop-zone .di-tx { font-size: 13.5px; font-weight: 600; color: #fff; }
.di-drop-zone .di-sub { font-size: 11.5px; color: var(--muted); }

/* ═════════ 低空要闻：24h 新闻实时采集进度条与 5 大通道遥测面板 ═════════ */
.daily-sync-panel { margin-bottom: 12px; padding: 12px 16px; border: 1px solid rgba(79, 209, 255, .45);
  background: linear-gradient(135deg, rgba(10, 22, 38, .95), rgba(6, 14, 24, .92));
  box-shadow: 0 6px 24px rgba(0, 0, 0, .45), inset 0 0 18px rgba(79, 209, 255, .08); }
.daily-sync-panel.done { border-color: rgba(94, 240, 200, .55);
  background: linear-gradient(135deg, rgba(8, 26, 28, .94), rgba(6, 14, 24, .92)); }
.dsp-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 8px; }
.dsp-title { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; min-width: 0; }
.dsp-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--cyan); box-shadow: 0 0 10px var(--cyan); animation: dspPulse 1s infinite alternate; }
.daily-sync-panel.done .dsp-dot { background: #4ade80; box-shadow: 0 0 10px #4ade80; animation: none; }
@keyframes dspPulse { from { opacity: .35; transform: scale(.85); } to { opacity: 1; transform: scale(1.18); } }
.dsp-title b { font-size: 13.5px; color: #fff; letter-spacing: .3px; }
.dsp-sub { font-size: 12px; color: #b9cde0; }
.dsp-right { display: flex; align-items: center; gap: 10px; flex: none; }
.dsp-pct { font-family: 'Orbitron', monospace; font-size: 16px; font-weight: 800; color: var(--cyan); }
.daily-sync-panel.done .dsp-pct { color: #5ef0c8; }

.dsp-bar-track { height: 7px; border-radius: 999px; background: rgba(4, 10, 18, .85); border: 1px solid rgba(198, 208, 218, .18); overflow: hidden; margin-bottom: 10px; }
.dsp-bar-fill { height: 100%; border-radius: 999px;
  background: linear-gradient(90deg, #38bdf8, #5ef0c8, #4fd1ff);
  box-shadow: 0 0 12px rgba(79, 209, 255, .65); transition: width .28s ease; }

.dsp-steps { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 8px; }
.dsp-step { display: flex; align-items: center; gap: 8px; padding: 6px 10px; border-radius: 4px;
  border: 1px solid rgba(198, 208, 218, .15); background: rgba(6, 11, 18, .65); font-size: 11.5px; transition: .18s; }
.dsp-step .dsp-ic { width: 20px; height: 20px; border-radius: 50%; display: grid; place-items: center;
  font-size: 10.5px; font-weight: 700; color: var(--muted); border: 1px solid rgba(198, 208, 218, .25); flex: none; }
.dsp-step .dsp-bd { min-width: 0; display: flex; flex-direction: column; line-height: 1.3; }
.dsp-step .dsp-bd b { color: var(--silver); font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dsp-step .dsp-bd span { color: var(--muted); font-size: 10.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

.dsp-step.active { border-color: var(--cyan); background: rgba(79, 209, 255, .14); }
.dsp-step.active .dsp-ic { color: #041018; background: var(--cyan); border-color: var(--cyan); }
.dsp-step.active .dsp-bd b { color: #fff; }
.dsp-step.active .dsp-bd span { color: var(--cyan); }

.dsp-step.done { border-color: rgba(94, 240, 200, .4); background: rgba(94, 240, 200, .09); }
.dsp-step.done .dsp-ic { color: #041018; background: #5ef0c8; border-color: #5ef0c8; }
.dsp-step.done .dsp-bd b { color: #eafff8; }
.dsp-step.done .dsp-bd span { color: #5ef0c8; }

.dsp-step.err { border-color: rgba(255, 107, 122, .45); background: rgba(255, 107, 122, .1); }
.dsp-step.err .dsp-ic { color: #fff; background: #ff5d6c; border-color: #ff5d6c; }
.dsp-step.err .dsp-bd span { color: #ff8a96; }



/* AI 接入面板 */
.modal.wide:has(#ai-body) { width: min(980px, 95vw); }
.via-ai { display: inline-block; margin-left: 6px; padding: 0 6px; font-size: 10.5px; line-height: 16px; border: 1px solid rgba(244,114,182,.55); color: #f9a8d4; background: rgba(244,114,182,.12); border-radius: 3px; vertical-align: middle; }
.ai-tabs { margin: 10px 0 12px; }
.ai-clients { margin: 10px 0 6px; flex-wrap: wrap; }
.ai-create { display: grid; grid-template-columns: 1fr 130px 130px auto; gap: 8px; margin-bottom: 12px; }
.ai-fresh { border: 1px solid rgba(94,240,200,.5); background: rgba(94,240,200,.08); padding: 10px 12px; margin-bottom: 12px; }
.ai-fresh-hd { color: #5ef0c8; font-size: 13px; margin-bottom: 8px; }
.ai-fresh-ft { color: var(--silver); font-size: 12px; margin-top: 8px; }
.ai-code-row, .ai-kv { display: flex; align-items: center; gap: 8px; }
.ai-kv span { color: var(--silver); font-size: 12px; white-space: nowrap; }
.ai-token, .ai-kv code { flex: 1; min-width: 0; padding: 6px 8px; background: rgba(0,0,0,.45); border: 1px solid var(--line); font-family: Consolas, monospace; font-size: 12.5px; color: #e8eef5; word-break: break-all; user-select: all; }
.ai-file { font-size: 12px; color: var(--silver); margin: 4px 0 6px; }
.ai-pre { margin: 0; padding: 10px 12px; max-height: 260px; overflow: auto; background: rgba(0,0,0,.5); border: 1px solid var(--line); font-family: Consolas, monospace; font-size: 12.5px; line-height: 1.5; color: #d7e3f0; white-space: pre-wrap; word-break: break-all; user-select: text; }
.ai-code-act { display: flex; align-items: center; gap: 10px; margin-top: 8px; }
.ai-table { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.ai-table th { text-align: left; font-weight: 600; color: var(--silver); padding: 6px 8px; border-bottom: 1px solid var(--line); white-space: nowrap; }
.ai-table td { padding: 6px 8px; border-bottom: 1px solid rgba(255,255,255,.06); vertical-align: middle; }
.ai-table code { font-family: Consolas, monospace; font-size: 12px; color: #9fd7e8; }
.ai-args { max-width: 260px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--silver); font-family: Consolas, monospace; font-size: 11.5px; }
.ai-scope { padding: 1px 7px; font-size: 11.5px; border: 1px solid var(--line); }
.ai-scope.read { color: #4fd1ff; border-color: rgba(79,209,255,.5); }
.ai-scope.write { color: #fbbf24; border-color: rgba(251,191,36,.6); }
.ai-ok { color: #6ff0c2; }
.ai-err { color: #ff6b7a; cursor: help; }
.ai-tip { margin-top: 12px; font-size: 12px; line-height: 1.6; color: var(--silver); }
.ai-spec { margin: 10px 0 4px; border: 1px solid var(--line); background: rgba(0,0,0,.25); }
.ai-spec summary { cursor: pointer; padding: 7px 10px; font-size: 12.5px; color: #9fd7e8; user-select: none; }
.ai-spec[open] summary { border-bottom: 1px solid var(--line); }
.ai-spec .ai-table th { width: 84px; vertical-align: top; border-bottom: 1px solid rgba(255,255,255,.06); }
.ai-spec .ai-table td { line-height: 1.6; color: #d7e3f0; }
.ai-dot { display: inline-block; min-width: 16px; height: 16px; margin-left: 4px; padding: 0 4px; border-radius: 8px; background: #ff5d6c; color: #fff; font-size: 10.5px; line-height: 16px; font-style: normal; text-align: center; }
.ai-create-box { border: 1px solid var(--line); background: rgba(0,0,0,.2); padding: 10px; margin-bottom: 12px; display: grid; gap: 8px; }
.ai-create-box .ai-create { margin-bottom: 0; }
.ai-rule { font-size: 12px; line-height: 1.6; color: var(--silver); margin-top: 6px; }
.ai-rule b { color: #fbbf24; }
.ai-ready { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 8px 12px; margin-bottom: 10px; border: 1px solid rgba(94,240,200,.5); background: rgba(94,240,200,.08); color: #5ef0c8; font-size: 12.5px; }
.ai-sub { margin: 14px 0 6px; font-size: 12.5px; font-weight: 600; color: #9fd7e8; letter-spacing: .04em; }
.ai-st { font-size: 12px; white-space: nowrap; }
.ai-reason { max-width: 260px; line-height: 1.5; color: #d7e3f0; }
.ai-table small { color: var(--silver); font-size: 10.5px; }

/* ============ 议事厅 · 团队日历 ============ */
.queue-part-hd { display: flex; align-items: baseline; gap: 10px; margin: 6px 0 8px; padding-bottom: 6px; border-bottom: 1px solid var(--line); }
.queue-part-hd span { font-size: 15px; font-weight: 700; color: #e8eef5; letter-spacing: .06em; }
.queue-part-hd em { font-style: normal; font-size: 11px; color: var(--silver); letter-spacing: .14em; }
.cal-wrap { padding: 10px 12px 8px; margin-bottom: 18px; }
.cal-wrap.collapsed { padding-bottom: 10px; }
.cal-bar { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-bottom: 10px; }
.cal-ttl { font-size: 15px; font-weight: 700; color: #e8eef5; margin: 0 8px; min-width: 150px; }
.cal-modes { margin-left: auto; }
.cal-bar .inp.cal-who { width: auto; flex: 0 0 auto; min-width: 120px; padding: 3px 8px; height: 28px; font-size: 12.5px; }
.cal-chk { display: inline-flex; align-items: center; gap: 4px; font-size: 12.5px; color: var(--silver); cursor: pointer; user-select: none; }
.cal-chip { --c: #4fd1ff; position: relative; display: flex; align-items: center; gap: 4px; min-height: 21px; margin: 2px 0; padding: 1px 3px 1px 6px; font-size: 11.5px; line-height: 17px; color: #e8eef5; white-space: nowrap; overflow: hidden; cursor: pointer;
  background: color-mix(in srgb, var(--c) 16%, transparent); border-left: 3px solid var(--c); border-radius: 2px; }
.cal-chip:hover { background: color-mix(in srgb, var(--c) 30%, transparent); }
.cal-chip.mine { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--c) 45%, transparent); }
.cal-chip b { font-weight: 600; color: var(--c); }
.cal-chip.task { background: transparent; border: 1px dashed color-mix(in srgb, var(--c) 70%, transparent); border-left: 3px solid var(--c); color: color-mix(in srgb, var(--c) 70%, #e8eef5); }
.cal-chip.task.done { text-decoration: line-through; opacity: .65; }
.cal-ct { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cal-faces { display: inline-flex; flex: none; align-items: center; padding-left: 5px; }
.cal-faces .ava.cal-f { width: 17px; height: 17px; margin-left: -5px; border: 1px solid rgba(4,7,12,.9); box-shadow: 0 0 0 1px color-mix(in srgb, var(--c) 70%, transparent); }
.cal-faces .ava.cal-f.online::after { width: 5px; height: 5px; right: 0; bottom: 0; box-shadow: none; }
.cal-fmore { margin-left: -4px; min-width: 17px; height: 17px; padding: 0 3px; border-radius: 9px; font-size: 9.5px; line-height: 15px; text-align: center; color: #e8eef5; background: #1b2838; border: 1px solid rgba(4,7,12,.9); }
.cal-more { font-size: 11px; color: #9fd7e8; padding: 1px 4px; cursor: pointer; }
.cal-more:hover { text-decoration: underline; }
/* 月视图 */
.cal-wkhd { display: grid; grid-template-columns: repeat(7, 1fr); }
.cal-wkhd div { padding: 4px 6px; font-size: 11.5px; color: var(--silver); text-align: right; letter-spacing: .1em; }
.cal-mgrid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); border-top: 1px solid var(--line); border-left: 1px solid var(--line); }
.cal-cell { min-height: 112px; padding: 3px 4px 4px; border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); cursor: cell; background: rgba(8,16,26,.35); min-width: 0; }
.cal-cell:hover { background: rgba(79,209,255,.05); }
.cal-cell.wkend { background: rgba(255,255,255,.025); }
.cal-cell.dim { opacity: .45; }
.cal-dn { display: flex; align-items: center; justify-content: space-between; font-size: 12px; color: var(--silver); height: 20px; }
.cal-mods { display: inline-flex; gap: 3px; font-style: normal; min-width: 0; overflow: hidden; }
.cal-mods i { font-style: normal; font-size: 10.5px; line-height: 1; color: var(--c); opacity: .85; text-shadow: 0 0 6px color-mix(in srgb, var(--c) 60%, transparent); }
.cal-cell.busy .cal-dn span { color: #e8eef5; font-weight: 600; }
.cal-cell.busy:hover { filter: brightness(1.18); }
.cal-dn span { display: inline-block; min-width: 20px; padding: 0 4px; line-height: 20px; text-align: center; cursor: pointer; border-radius: 10px; }
.cal-dn span:hover { background: rgba(255,255,255,.1); color: #fff; }
.cal-cell.today { background: rgba(79,209,255,.08); box-shadow: inset 0 0 0 1px rgba(79,209,255,.55); }
.cal-cell.today .cal-dn span { background: #4fd1ff; color: #071018; font-weight: 700; }
/* 周 / 日视图 */
.cal-tw { --gut: 54px; border: 1px solid var(--line); }
.cal-twhd, .cal-twall { display: grid; grid-template-columns: var(--gut) repeat(var(--cols), minmax(0, 1fr)); border-bottom: 1px solid var(--line); }
.cal-twd { padding: 6px; text-align: center; font-size: 12px; color: var(--silver); cursor: pointer; border-left: 1px solid var(--line); }
.cal-twd b { font-size: 16px; color: #e8eef5; margin-left: 4px; }
.cal-twd.today { color: #4fd1ff; background: rgba(79,209,255,.08); }
.cal-twd.today b { color: #4fd1ff; }
.cal-gut { font-size: 11px; color: var(--silver); text-align: center; padding: 4px 2px; line-height: 1.3; }
.cal-gut small { font-size: 9.5px; opacity: .8; }
.cal-allcell { min-height: 30px; padding: 2px 3px; border-left: 1px solid var(--line); cursor: cell; min-width: 0; }
.cal-allcell:hover { background: rgba(79,209,255,.05); }
.cal-twbody { position: relative; padding: 8px 0; }
.cal-twgrid { display: grid; grid-template-columns: var(--gut) repeat(var(--cols), minmax(0, 1fr)); position: relative; }
.cal-hours .cal-hr { height: 40px; position: relative; }
.cal-hours .cal-hr span { position: absolute; top: -7px; right: 6px; font-size: 10.5px; color: var(--silver); }
.cal-hours .cal-hr-end { height: 0; position: relative; }
.cal-hours .cal-hr-end span { position: absolute; top: -7px; right: 6px; font-size: 10.5px; color: var(--silver); }
.cal-col { position: relative; border-left: 1px solid var(--line); cursor: cell;
  background-image: repeating-linear-gradient(to bottom, rgba(255,255,255,.07) 0 1px, transparent 1px 20px, rgba(255,255,255,.03) 20px 21px, transparent 21px 40px); }
.cal-col:hover { background-color: rgba(79,209,255,.03); }
.cal-col.today { background-color: rgba(79,209,255,.05); }
.cal-blk { --c: #4fd1ff; position: absolute; overflow: hidden; padding: 2px 5px; font-size: 11.5px; line-height: 15px; color: #e8eef5; cursor: pointer; border-radius: 3px;
  background: color-mix(in srgb, var(--c) 24%, #0b1622); border-left: 3px solid var(--c); box-shadow: 0 1px 4px rgba(0,0,0,.4); }
.cal-blk:hover { background: color-mix(in srgb, var(--c) 38%, #0b1622); z-index: 2; }
.cal-blk.mine { box-shadow: 0 0 0 1px color-mix(in srgb, var(--c) 60%, transparent), 0 1px 4px rgba(0,0,0,.4); }
.cal-blk-t { font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cal-blk-s { font-size: 10.5px; opacity: .8; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cal-now { position: absolute; left: 0; right: 0; height: 2px; background: #ff5d6c; z-index: 3; pointer-events: none; }
.cal-now::before { content: ''; position: absolute; left: -4px; top: -3px; width: 8px; height: 8px; border-radius: 50%; background: #ff5d6c; }
/* 年视图 */
.cal-year { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px 18px; }
.cal-ymt { font-size: 13px; font-weight: 700; color: #e8eef5; margin-bottom: 4px; cursor: pointer; }
.cal-ymt:hover { color: #4fd1ff; }
.cal-ymg { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }
.cal-ymg i { font-style: normal; font-size: 10px; color: var(--silver); text-align: center; }
.cal-yd { font-size: 10.5px; line-height: 20px; text-align: center; color: #b8c4d2; cursor: pointer; border-radius: 3px; }
.cal-yd:hover { outline: 1px solid #4fd1ff; }
.cal-yd.lv1 { background: rgba(79,209,255,.18); }
.cal-yd.lv2 { background: rgba(79,209,255,.36); color: #fff; }
.cal-yd.lv3 { background: rgba(79,209,255,.6); color: #fff; }
.cal-yd.late { box-shadow: inset 0 -2px 0 #ff5d6c; }
.cal-yd.today { background: #4fd1ff; color: #071018; font-weight: 700; }
/* 图例 */
.cal-legend { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 12px; margin-top: 8px; font-size: 11.5px; color: var(--silver); }
.cal-legend span { display: inline-flex; align-items: center; gap: 4px; }
.cal-legend i { width: 10px; height: 10px; background: var(--c); border-radius: 2px; }
.cal-legend .lg-task i { background: transparent; border: 1px dashed var(--c); border-left: 3px solid var(--c); }
.cal-legend em { font-style: normal; margin-left: auto; opacity: .8; }
.cal-modlegend b { font-weight: 600; color: #c8d3df; margin-right: 2px; }
.cal-modlegend i { width: 14px; border-radius: 3px; }
.cal-blk .cal-faces { margin-top: 3px; flex-wrap: wrap; row-gap: 2px; }
/* 日程编辑 / 查看弹窗 */
.modal.wide:has(.ev-form) { width: min(680px, 95vw); }
.ev-form { display: grid; gap: 10px; }
.ev-types { flex-wrap: wrap; }
.ev-types button.on { background: color-mix(in srgb, var(--c) 85%, #fff); color: #071018; }
.ev-allday { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--silver); cursor: pointer; }
.ev-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.ev-dt { display: flex; gap: 6px; }
.ev-dt .inp { min-width: 0; }
.ev-dt .ev-time { width: 110px; flex: none; }
.ev-att { display: flex; flex-wrap: wrap; gap: 6px; max-height: 96px; overflow-y: auto; }
.ev-p { display: inline-flex; align-items: center; padding: 3px 9px; font-size: 12px; border: 1px solid var(--line); color: var(--silver); cursor: pointer; user-select: none; }
.ev-p input { display: none; }
.ev-p.on { border-color: #4fd1ff; color: #4fd1ff; background: rgba(79,209,255,.1); }
.ev-view { display: grid; gap: 8px; margin: 6px 0 10px; }
.ev-view div { display: grid; grid-template-columns: 64px 1fr; gap: 10px; font-size: 13px; }
.ev-view span { color: var(--silver); }
.ev-view b { font-weight: 500; color: #e8eef5; }
.ev-view small { color: var(--silver); }
.ev-note { white-space: pre-wrap; }
