/* ============================================================
   多模态大模型感知融合处理系统 V1.0 — 全局设计系统
   深色科技风 · 玻璃拟态 · 数据可视化
   ============================================================ */
:root{
  --bg:#060a13; --bg2:#0a101f; --bg3:#0e1628;
  --panel:rgba(148,163,184,.045); --panel2:rgba(148,163,184,.08);
  --glass:rgba(13,20,38,.66);
  --border:rgba(148,163,184,.14); --border2:rgba(148,163,184,.24);
  --text:#e6edf7; --text2:#b7c3d6; --muted:#69788f; --faint:#47546b;
  --cyan:#22d3ee; --blue:#5b8cff; --indigo:#7c6cff; --purple:#b06cff;
  --green:#34d399; --yellow:#fbbf24; --red:#fb7185; --orange:#fb923c;
  --grad:linear-gradient(90deg,#22d3ee,#5b8cff 55%,#7c6cff);
  --grad-soft:linear-gradient(135deg,rgba(34,211,238,.16),rgba(124,108,255,.16));
  --glow-cyan:0 0 24px rgba(34,211,238,.28);
  --r-lg:18px; --r-md:13px; --r-sm:9px;
  --shadow:0 18px 50px rgba(2,6,18,.55);
  --sidebar-w:236px; --topbar-h:60px;
  --font: -apple-system,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  --mono:"JetBrains Mono",Consolas,"Courier New",monospace;
}
*{margin:0;padding:0;box-sizing:border-box}
html,body{height:100%}
body{font-family:var(--font);background:var(--bg);color:var(--text);font-size:14px;line-height:1.6;overflow:hidden;-webkit-font-smoothing:antialiased}
::selection{background:rgba(34,211,238,.3)}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:rgba(148,163,184,.18);border-radius:8px;border:2px solid transparent;background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background:rgba(148,163,184,.32);border:2px solid transparent;background-clip:content-box}
::-webkit-scrollbar-track{background:transparent}
a{color:inherit;text-decoration:none}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
input,select,textarea{font-family:inherit;color:var(--text);outline:none}
.hidden{display:none!important}
.mono{font-family:var(--mono)}
.muted{color:var(--muted)}
.small{font-size:12px}

/* ---------- 启动画面 ---------- */
#splash{position:fixed;inset:0;z-index:999;background:radial-gradient(1200px 700px at 30% 20%,#0d1830,transparent),var(--bg);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:26px;transition:opacity .5s,visibility .5s}
#splash.off{opacity:0;visibility:hidden}
.splash-logo{text-align:center;animation:floatY 3s ease-in-out infinite}
.splash-logo .logo-mark{width:74px;height:74px;margin:0 auto 18px;font-size:32px}
.splash-name{font-size:21px;font-weight:700;letter-spacing:.06em}
.splash-ver{color:var(--muted);font-size:12px;letter-spacing:.22em;margin-top:6px;text-transform:uppercase}
.splash-bar{width:240px;height:3px;border-radius:3px;background:rgba(148,163,184,.12);overflow:hidden}
.splash-bar i{display:block;height:100%;width:40%;border-radius:3px;background:var(--grad);animation:splashLoad 1.2s ease-in-out infinite}
.splash-tip{color:var(--faint);font-size:12px;letter-spacing:.1em}
@keyframes splashLoad{0%{transform:translateX(-110%)}100%{transform:translateX(320%)}}

/* ---------- Logo ---------- */
.logo-mark{width:44px;height:44px;border-radius:13px;display:flex;align-items:center;justify-content:center;color:#04101c;font-weight:800;background:var(--grad);box-shadow:var(--glow-cyan),0 6px 18px rgba(91,140,255,.3);flex:none}
.logo-mark.sm{width:38px;height:38px;border-radius:11px;font-size:17px}

/* ============================================================
   认证页
   ============================================================ */
.auth-wrap{position:fixed;inset:0;z-index:10;background:radial-gradient(1000px 600px at 15% 10%,rgba(91,140,255,.14),transparent 60%),radial-gradient(900px 600px at 90% 90%,rgba(124,108,255,.12),transparent 55%),var(--bg);overflow:auto}
#auth-bg{position:fixed;inset:0;opacity:.55;pointer-events:none}
.auth-orb{position:fixed;border-radius:50%;filter:blur(90px);opacity:.35;pointer-events:none;animation:orbFloat 14s ease-in-out infinite}
.orb-1{width:460px;height:460px;background:#0e4b66;top:-120px;left:-100px}
.orb-2{width:420px;height:420px;background:#2b1e5e;bottom:-140px;right:-80px;animation-delay:-7s}
@keyframes orbFloat{0%,100%{transform:translate(0,0) scale(1)}50%{transform:translate(40px,26px) scale(1.08)}}
.auth-inner{position:relative;min-height:100vh;display:grid;grid-template-columns:1.15fr .9fr;gap:60px;align-items:center;max-width:1280px;margin:0 auto;padding:48px 40px}
.brand-badge{display:inline-flex;align-items:center;gap:8px;padding:6px 14px;border-radius:999px;border:1px solid rgba(34,211,238,.35);background:rgba(34,211,238,.08);color:var(--cyan);font-size:11px;letter-spacing:.18em;margin-bottom:26px}
.brand-title{font-size:44px;line-height:1.22;font-weight:800;letter-spacing:.02em;background:linear-gradient(100deg,#f2f7ff 30%,#8fd8ff 75%,#a89bff);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.brand-sub{color:var(--text2);margin:20px 0 30px;max-width:560px;font-size:15px}
.brand-feats{list-style:none;display:grid;grid-template-columns:1fr 1fr;gap:13px 22px;max-width:560px}
.brand-feats li{display:flex;align-items:center;gap:10px;color:var(--text2);font-size:13.5px}
.feat-dot{width:8px;height:8px;border-radius:50%;background:var(--cyan);box-shadow:0 0 10px rgba(34,211,238,.8);flex:none}
.brand-metrics{display:flex;gap:44px;margin-top:44px}
.brand-metrics b{font-size:30px;font-weight:800;background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.brand-metrics span{display:block;color:var(--muted);font-size:12px;margin-top:2px}

.auth-panel{background:var(--glass);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);border:1px solid var(--border);border-radius:22px;padding:40px 38px;box-shadow:var(--shadow);position:relative;overflow:hidden}
.auth-panel::before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(34,211,238,.7),rgba(124,108,255,.7),transparent)}
.auth-title{font-size:23px;font-weight:800;letter-spacing:.02em}
.auth-desc{color:var(--muted);font-size:13px;margin:7px 0 26px}
.field{margin-bottom:17px}
.field label{display:block;font-size:12.5px;color:var(--text2);margin-bottom:7px;letter-spacing:.03em}
.field .f-wrap{position:relative}
.field .f-ic{position:absolute;left:13px;top:50%;transform:translateY(-50%);color:var(--muted);display:flex}
.field input,.field select{width:100%;height:46px;border-radius:12px;border:1px solid var(--border);background:rgba(6,12,26,.55);padding:0 14px 0 40px;font-size:14px;transition:border-color .2s,box-shadow .2s}
.field textarea{width:100%;min-height:84px;border-radius:12px;border:1px solid var(--border);background:rgba(6,12,26,.55);padding:12px 14px;font-size:13.5px;resize:vertical;transition:border-color .2s}
.field input:focus,.field select:focus,.field textarea:focus{border-color:rgba(34,211,238,.55);box-shadow:0 0 0 3px rgba(34,211,238,.12)}
.field .err{display:none;color:var(--red);font-size:12px;margin-top:6px}
.field.invalid input{border-color:rgba(251,113,133,.6)}
.field.invalid .err{display:block}
.pwd-eye{position:absolute;right:12px;top:50%;transform:translateY(-50%);color:var(--muted);display:flex;padding:4px}
.pwd-eye:hover{color:var(--text)}
.auth-row{display:flex;justify-content:space-between;align-items:center;margin:4px 0 22px;font-size:13px}
.auth-row a{color:var(--cyan)}
.auth-row a:hover{text-decoration:underline}
.btn-block{width:100%;height:48px;font-size:15px;border-radius:12px}
.auth-alt{margin-top:22px;text-align:center;color:var(--muted);font-size:13px}
.auth-alt a{color:var(--cyan);font-weight:600}
.demo-tip{margin-top:20px;padding:12px 14px;border-radius:12px;border:1px dashed rgba(34,211,238,.3);background:rgba(34,211,238,.05);font-size:12.5px;color:var(--text2);display:flex;align-items:center;justify-content:space-between;gap:10px}
.demo-tip code{font-family:var(--mono);color:var(--cyan)}
.reset-ok{text-align:center;padding:16px 0 6px}
.reset-ok .ok-ic{width:70px;height:70px;margin:0 auto 18px;border-radius:50%;background:rgba(52,211,153,.12);border:1px solid rgba(52,211,153,.4);display:flex;align-items:center;justify-content:center;color:var(--green)}
.captcha-row{display:flex;gap:10px}
.captcha-row input{flex:1}
.cap-code{width:112px;height:46px;border-radius:12px;border:1px solid var(--border);background:linear-gradient(120deg,rgba(91,140,255,.18),rgba(34,211,238,.14));display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:17px;letter-spacing:.28em;font-weight:700;color:#bfe9ff;user-select:none;cursor:pointer;flex:none}

/* ---------- 通用图标 ---------- */
[data-ic]{display:inline-flex;width:1em;height:1em;vertical-align:-.14em}
[data-ic] svg{width:100%;height:100%}

/* ============================================================
   应用外壳
   ============================================================ */
.app{display:flex;height:100vh;overflow:hidden}
.sidebar{width:var(--sidebar-w);flex:none;background:linear-gradient(180deg,rgba(12,19,37,.92),rgba(8,13,26,.96));border-right:1px solid var(--border);display:flex;flex-direction:column;transition:margin .25s ease;z-index:40}
.app.collapsed .sidebar{margin-left:calc(var(--sidebar-w) * -1)}
.sb-logo{display:flex;align-items:center;gap:12px;padding:16px 18px;border-bottom:1px solid var(--border)}
.sb-logo-txt b{display:block;font-size:14.5px;letter-spacing:.02em}
.sb-logo-txt span{display:block;font-size:10.5px;color:var(--muted);letter-spacing:.08em}
.sb-nav{flex:1;overflow-y:auto;padding:12px 12px 8px}
.nav-group{font-size:10.5px;color:var(--faint);letter-spacing:.22em;padding:15px 10px 7px;text-transform:uppercase}
.nav-item{display:flex;align-items:center;gap:11px;padding:9.5px 12px;border-radius:11px;color:var(--text2);font-size:13.5px;margin-bottom:2px;transition:all .18s;position:relative;border:1px solid transparent}
.nav-item .ni-ic{width:18px;height:18px;color:var(--muted);transition:color .18s;flex:none}
.nav-item:hover{background:var(--panel);color:var(--text)}
.nav-item:hover .ni-ic{color:var(--cyan)}
.nav-item.active{background:var(--grad-soft);border-color:rgba(91,140,255,.28);color:#fff;font-weight:600}
.nav-item.active .ni-ic{color:var(--cyan)}
.nav-item.active::before{content:"";position:absolute;left:-12px;top:22%;bottom:22%;width:3px;border-radius:3px;background:var(--grad)}
.sb-foot{padding:14px 16px;border-top:1px solid var(--border)}
.sb-sys{background:rgba(6,12,26,.5);border:1px solid var(--border);border-radius:11px;padding:10px 12px;display:grid;gap:6px}
.sb-sys-row{display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--text2)}
.sb-sys-row span{color:var(--muted);flex:1}
.dot-ok{width:7px;height:7px;border-radius:50%;background:var(--green);box-shadow:0 0 8px rgba(52,211,153,.9)}
.sb-ver{color:var(--faint);font-size:10.5px;margin-top:10px;text-align:center;letter-spacing:.03em}
.sb-mask{display:none}
.main{flex:1;display:flex;flex-direction:column;min-width:0}

/* ---------- 顶栏 ---------- */
.topbar{height:var(--topbar-h);flex:none;display:flex;align-items:center;gap:14px;padding:0 22px;border-bottom:1px solid var(--border);background:rgba(8,13,26,.7);backdrop-filter:blur(18px);z-index:30}
.crumb{font-weight:600;font-size:15px;letter-spacing:.02em}
.top-search{flex:1;max-width:420px;margin-left:12px;display:flex;align-items:center;gap:9px;height:38px;padding:0 12px;border-radius:11px;background:rgba(6,12,26,.55);border:1px solid var(--border);transition:border-color .2s}
.top-search:focus-within{border-color:rgba(34,211,238,.5)}
.top-search input{flex:1;background:none;border:none;font-size:13px}
.top-search input::placeholder{color:var(--faint)}
.top-search kbd{font-family:var(--mono);font-size:10.5px;color:var(--muted);border:1px solid var(--border);border-radius:5px;padding:1px 6px;background:rgba(148,163,184,.06)}
kbd:empty{display:none}
.ts-ic{color:var(--muted);display:flex}
.top-actions{margin-left:auto;display:flex;align-items:center;gap:10px}
.icon-btn{width:38px;height:38px;border-radius:11px;display:flex;align-items:center;justify-content:center;color:var(--text2);border:1px solid transparent;transition:all .18s;position:relative}
.icon-btn:hover{background:var(--panel);border-color:var(--border);color:var(--text)}
.icon-btn .bubble{position:absolute;top:5px;right:5px;min-width:16px;height:16px;border-radius:8px;background:linear-gradient(90deg,#fb7185,#fb923c);color:#fff;font-size:10px;font-style:normal;display:flex;align-items:center;justify-content:center;padding:0 4px;font-weight:700}
.user-chip{display:flex;align-items:center;gap:10px;padding:5px 10px 5px 5px;border-radius:12px;border:1px solid var(--border);background:var(--panel);transition:all .18s}
.user-chip:hover{border-color:var(--border2)}
.uc-info b{display:block;font-size:13px;line-height:1.25}
.uc-info i{display:block;font-size:11px;color:var(--muted);font-style:normal}
.uc-arrow{color:var(--muted);font-size:11px}
.avatar{width:32px;height:32px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center;font-weight:700;font-size:14px;color:#04101c;background:var(--grad);flex:none}
.avatar.lg{width:44px;height:44px;border-radius:13px;font-size:18px}

/* ---------- 下拉 ---------- */
.dropdown{position:relative}
.dd-menu{position:absolute;top:calc(100% + 8px);right:0;min-width:190px;background:var(--glass);backdrop-filter:blur(22px);border:1px solid var(--border);border-radius:14px;padding:7px;box-shadow:var(--shadow);opacity:0;visibility:hidden;transform:translateY(-6px);transition:all .2s;z-index:60}
.dropdown.open .dd-menu{opacity:1;visibility:visible;transform:none}
.dd-menu button{display:flex;align-items:center;gap:11px;width:100%;text-align:left;padding:9px 11px;border-radius:9px;font-size:13.5px;color:var(--text2);transition:all .15s}
.dd-menu button:hover{background:var(--panel2);color:var(--text)}
.dd-menu button.danger{color:var(--red)}
.dd-menu button.danger:hover{background:rgba(251,113,133,.1)}
.dd-menu [data-ic]{width:16px;height:16px;color:var(--muted)}
.dd-menu button:hover [data-ic]{color:var(--cyan)}
.dd-wide{min-width:330px}
.dd-head{display:flex;justify-content:space-between;align-items:center;padding:9px 11px;border-bottom:1px solid var(--border);font-weight:700;font-size:13.5px;margin-bottom:5px}
.dd-head a{color:var(--cyan);font-size:12px;font-weight:500}
.dd-user-head{display:flex;gap:12px;align-items:center;padding:10px 11px;border-bottom:1px solid var(--border);margin-bottom:5px}
.dd-user-head b{display:block;font-size:14px}
.dd-user-head i{font-size:12px;color:var(--muted);font-style:normal}
.notice-item{display:flex;gap:11px;padding:11px;border-radius:10px;transition:background .15s;cursor:pointer}
.notice-item:hover{background:var(--panel)}
.notice-item.unread{background:rgba(34,211,238,.05)}
.ni-dot{width:8px;height:8px;border-radius:50%;background:var(--cyan);margin-top:6px;flex:none;opacity:0}
.notice-item.unread .ni-dot{opacity:1}
.notice-item b{font-size:13px;font-weight:600;display:block}
.notice-item p{font-size:12px;color:var(--muted);margin:2px 0 0}
.notice-item time{font-size:11px;color:var(--faint);display:block;margin-top:3px}

/* ---------- 页面容器 ---------- */
.page{flex:1;overflow-y:auto;padding:26px 28px 46px;scroll-behavior:smooth}
.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin-bottom:22px;flex-wrap:wrap}
.ph-title{font-size:22px;font-weight:800;letter-spacing:.02em;display:flex;align-items:center;gap:12px}
.ph-title .ph-ic{width:40px;height:40px;border-radius:12px;background:var(--grad-soft);border:1px solid rgba(91,140,255,.3);display:flex;align-items:center;justify-content:center;color:var(--cyan)}
.ph-desc{color:var(--muted);font-size:13px;margin-top:6px;max-width:680px}
.ph-actions{display:flex;gap:10px;flex-wrap:wrap}
.page-sec{margin-top:24px}
.sec-title{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}
.sec-title h3{font-size:16px;font-weight:700;display:flex;align-items:center;gap:9px}
.sec-title h3::before{content:"";width:4px;height:16px;border-radius:4px;background:var(--grad)}
.sec-title .more{color:var(--cyan);font-size:12.5px}
.fade-up{animation:fadeUp .45s cubic-bezier(.22,.8,.32,1) both}
@keyframes fadeUp{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}

/* ---------- 卡片 ---------- */
.card{background:var(--glass);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);border:1px solid var(--border);border-radius:var(--r-lg);padding:20px;position:relative}
.card::before{content:"";position:absolute;inset:0 0 auto;height:1px;background:linear-gradient(90deg,transparent,rgba(148,163,184,.25),transparent);pointer-events:none}
.card.hoverable{transition:transform .2s,border-color .2s,box-shadow .2s}
.card.hoverable:hover{transform:translateY(-3px);border-color:rgba(91,140,255,.4);box-shadow:0 14px 40px rgba(2,8,24,.6)}
.card-title{font-weight:700;font-size:14.5px;display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:16px}
.card-title .sub{font-weight:400;color:var(--muted);font-size:12px}
.grid{display:grid;gap:16px}
.g2{grid-template-columns:1fr 1fr}.g3{grid-template-columns:repeat(3,1fr)}.g4{grid-template-columns:repeat(4,1fr)}
.span2{grid-column:span 2}

/* ---------- 统计卡 ---------- */
.stat-card{overflow:hidden}
.stat-card::after{content:"";position:absolute;right:-30px;top:-30px;width:120px;height:120px;border-radius:50%;background:radial-gradient(circle,rgba(34,211,238,.12),transparent 70%);pointer-events:none}
.sc-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.sc-icon{width:40px;height:40px;border-radius:12px;display:flex;align-items:center;justify-content:center}
.sc-icon.c1{background:rgba(34,211,238,.12);color:var(--cyan)}
.sc-icon.c2{background:rgba(91,140,255,.12);color:var(--blue)}
.sc-icon.c3{background:rgba(124,108,255,.12);color:var(--indigo)}
.sc-icon.c4{background:rgba(176,108,255,.12);color:var(--purple)}
.sc-label{color:var(--muted);font-size:12.5px}
.sc-value{font-size:30px;font-weight:800;letter-spacing:.02em;font-variant-numeric:tabular-nums}
.sc-value small{font-size:13px;color:var(--muted);font-weight:500;margin-left:3px}
.sc-foot{display:flex;align-items:center;justify-content:space-between;margin-top:10px}
.sc-trend{font-size:12px;display:flex;align-items:center;gap:4px}
.sc-trend.up{color:var(--green)}.sc-trend.down{color:var(--red)}
.sc-spark{width:90px;height:30px}

/* ---------- 按钮 ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:38px;padding:0 17px;border-radius:11px;font-size:13.5px;font-weight:600;border:1px solid transparent;transition:all .18s;white-space:nowrap}
.btn [data-ic]{width:15px;height:15px}
.btn-primary{background:var(--grad);color:#04101c;box-shadow:0 6px 20px rgba(34,211,238,.25)}
.btn-primary:hover{box-shadow:0 8px 28px rgba(34,211,238,.42);transform:translateY(-1px)}
.btn-ghost{border-color:var(--border);background:var(--panel);color:var(--text2)}
.btn-ghost:hover{border-color:var(--border2);color:var(--text);background:var(--panel2)}
.btn-soft{background:rgba(34,211,238,.1);color:var(--cyan);border-color:rgba(34,211,238,.25)}
.btn-soft:hover{background:rgba(34,211,238,.16)}
.btn-danger{background:rgba(251,113,133,.12);color:var(--red);border-color:rgba(251,113,133,.3)}
.btn-danger:hover{background:rgba(251,113,133,.2)}
.btn-sm{height:32px;padding:0 12px;font-size:12.5px;border-radius:9px}
.btn-lg{height:46px;padding:0 24px;font-size:15px;border-radius:13px}
.btn:disabled{opacity:.45;cursor:not-allowed;transform:none!important;box-shadow:none!important}

/* ---------- 徽章/标签 ---------- */
.badge{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;font-size:11.5px;font-weight:600;letter-spacing:.02em;border:1px solid transparent;white-space:nowrap}
.badge::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}
.bd-run{background:rgba(34,211,238,.1);color:var(--cyan);border-color:rgba(34,211,238,.3)}
.bd-run::before{animation:pulseDot 1.4s ease-in-out infinite}
.bd-done{background:rgba(52,211,153,.1);color:var(--green);border-color:rgba(52,211,153,.3)}
.bd-warn{background:rgba(251,191,36,.1);color:var(--yellow);border-color:rgba(251,191,36,.3)}
.bd-fail{background:rgba(251,113,133,.1);color:var(--red);border-color:rgba(251,113,133,.3)}
.bd-mute{background:rgba(148,163,184,.09);color:#94a3b8;border-color:rgba(148,163,184,.25)}
.bd-info{background:rgba(91,140,255,.1);color:var(--blue);border-color:rgba(91,140,255,.3)}
.bd-purple{background:rgba(176,108,255,.1);color:var(--purple);border-color:rgba(176,108,255,.3)}
@keyframes pulseDot{0%,100%{opacity:1}50%{opacity:.35}}
.tag{display:inline-flex;align-items:center;gap:5px;padding:2.5px 9px;border-radius:7px;font-size:11.5px;background:var(--panel2);border:1px solid var(--border);color:var(--text2)}
.tag.c{color:var(--cyan);border-color:rgba(34,211,238,.3);background:rgba(34,211,238,.07)}
.tag.b{color:var(--blue);border-color:rgba(91,140,255,.3);background:rgba(91,140,255,.07)}
.tag.p{color:var(--purple);border-color:rgba(176,108,255,.3);background:rgba(176,108,255,.07)}
.tag.g{color:var(--green);border-color:rgba(52,211,153,.3);background:rgba(52,211,153,.07)}
.tag.o{color:var(--orange);border-color:rgba(251,146,60,.3);background:rgba(251,146,60,.07)}

/* ---------- 进度条 ---------- */
.pbar{height:7px;border-radius:6px;background:rgba(148,163,184,.12);overflow:hidden;position:relative}
.pbar>i{display:block;height:100%;border-radius:6px;background:var(--grad);transition:width .6s cubic-bezier(.22,.8,.32,1);position:relative;overflow:hidden}
.pbar>i::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.35),transparent);animation:shimmer 1.8s linear infinite}
.pbar.thin{height:5px}
@keyframes shimmer{from{transform:translateX(-100%)}to{transform:translateX(100%)}}
.pbar.done>i::after{display:none}
.pval{font-size:12px;color:var(--text2);font-variant-numeric:tabular-nums}

/* ---------- 表格 ---------- */
.tbl-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--r-md);background:rgba(6,12,26,.4)}
table.tbl{width:100%;border-collapse:collapse;font-size:13.5px;min-width:640px}
.tbl th{position:sticky;top:0;text-align:left;font-size:11.5px;font-weight:600;color:var(--muted);letter-spacing:.06em;padding:11px 16px;background:rgba(10,17,33,.95);border-bottom:1px solid var(--border);white-space:nowrap;z-index:1}
.tbl td{padding:13px 16px;border-bottom:1px solid rgba(148,163,184,.07);vertical-align:middle}
.tbl tbody tr{transition:background .15s}
.tbl tbody tr:hover{background:rgba(34,211,238,.035)}
.tbl tbody tr:last-child td{border-bottom:none}
.tbl .cell-main{font-weight:600}
.tbl .cell-sub{font-size:11.5px;color:var(--muted);margin-top:1px}
.tbl .row-acts{display:flex;gap:6px;justify-content:flex-end}
.row-btn{width:28px;height:28px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;color:var(--muted);border:1px solid transparent;transition:all .15s}
.row-btn:hover{background:var(--panel2);color:var(--text);border-color:var(--border)}
.row-btn.danger:hover{background:rgba(251,113,133,.12);color:var(--red);border-color:rgba(251,113,133,.3)}
.row-btn [data-ic]{width:14px;height:14px}

/* ---------- 表单 ---------- */
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.form-grid .full{grid-column:1/-1}
.ipt,.sel,.txa{width:100%;height:40px;border-radius:11px;border:1px solid var(--border);background:rgba(6,12,26,.55);padding:0 13px;font-size:13.5px;transition:border-color .2s,box-shadow .2s;color:var(--text)}
.txa{min-height:88px;padding:10px 13px;resize:vertical}
.ipt:focus,.sel:focus,.txa:focus{border-color:rgba(34,211,238,.5);box-shadow:0 0 0 3px rgba(34,211,238,.1)}
.sel{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2369788f' stroke-width='2.5'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:34px}
.sel option{background:#0d1526}
.f-label{display:block;font-size:12.5px;color:var(--text2);margin-bottom:7px}
.f-label b{color:var(--red);font-weight:400}
.f-hint{font-size:11.5px;color:var(--faint);margin-top:6px}
.switch{position:relative;width:40px;height:22px;flex:none;cursor:pointer}
.switch input{display:none}
.switch i{position:absolute;inset:0;border-radius:999px;background:rgba(148,163,184,.2);transition:.2s}
.switch i::after{content:"";position:absolute;left:3px;top:3px;width:16px;height:16px;border-radius:50%;background:#cbd5e1;transition:.2s}
.switch input:checked+i{background:var(--grad)}
.switch input:checked+i::after{left:21px;background:#04101c}
.switch-row{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:13px 0;border-bottom:1px solid rgba(148,163,184,.08)}
.switch-row:last-child{border-bottom:none}
.switch-row b{font-size:13.5px;font-weight:600;display:block}
.switch-row p{font-size:12px;color:var(--muted);margin-top:2px}
.radio-card{display:flex;gap:12px;align-items:flex-start;padding:14px;border-radius:13px;border:1px solid var(--border);background:rgba(6,12,26,.4);cursor:pointer;transition:all .18s}
.radio-card:hover{border-color:var(--border2)}
.radio-card.sel{border-color:rgba(34,211,238,.55);background:rgba(34,211,238,.06);box-shadow:0 0 0 3px rgba(34,211,238,.08)}
.radio-card input{display:none}
.rc-dot{width:16px;height:16px;border-radius:50%;border:2px solid var(--faint);margin-top:2px;flex:none;position:relative;transition:.15s}
.radio-card.sel .rc-dot{border-color:var(--cyan)}
.radio-card.sel .rc-dot::after{content:"";position:absolute;inset:3px;border-radius:50%;background:var(--cyan)}
.rc-body b{font-size:13.5px;display:block}
.rc-body p{font-size:12px;color:var(--muted);margin-top:2px}
.slider{width:100%;appearance:none;height:5px;border-radius:5px;background:linear-gradient(90deg,var(--cyan) var(--p,50%),rgba(148,163,184,.15) var(--p,50%));outline:none}
.slider::-webkit-slider-thumb{appearance:none;width:16px;height:16px;border-radius:50%;background:#e8fbff;border:3px solid var(--cyan);box-shadow:0 0 10px rgba(34,211,238,.5);cursor:pointer}
.seg{display:inline-flex;background:rgba(6,12,26,.55);border:1px solid var(--border);border-radius:11px;padding:3px;gap:2px}
.seg button{padding:6px 15px;border-radius:8px;font-size:12.5px;color:var(--muted);font-weight:600;transition:all .15s}
.seg button.on{background:var(--grad-soft);color:#fff;border:1px solid rgba(91,140,255,.35)}

/* ---------- Tab ---------- */
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:20px;overflow-x:auto}
.tab{padding:10px 18px;font-size:13.5px;color:var(--muted);font-weight:600;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap;transition:all .18s}
.tab:hover{color:var(--text)}
.tab.on{color:var(--cyan);border-color:var(--cyan)}
.tab .cnt{font-size:11px;background:var(--panel2);border-radius:999px;padding:1px 7px;margin-left:6px;color:var(--text2)}

/* ---------- 模态框 ---------- */
#modal-root{position:fixed;inset:0;z-index:100;pointer-events:none}
.modal-mask{position:absolute;inset:0;background:rgba(3,7,16,.7);backdrop-filter:blur(6px);opacity:0;transition:opacity .25s;display:flex;align-items:center;justify-content:center;padding:30px;pointer-events:auto;overflow-y:auto}
.modal-mask.in{opacity:1}
.modal{width:100%;max-width:560px;background:linear-gradient(180deg,rgba(17,26,48,.97),rgba(11,18,36,.98));border:1px solid var(--border2);border-radius:20px;box-shadow:var(--shadow);transform:translateY(18px) scale(.98);transition:transform .3s cubic-bezier(.22,.8,.32,1);margin:auto}
.modal-mask.in .modal{transform:none}
.modal::before{content:"";position:absolute;inset:0 0 auto;height:1px;background:linear-gradient(90deg,transparent,rgba(34,211,238,.7),rgba(124,108,255,.7),transparent);border-radius:20px 20px 0 0}
.modal-hd{display:flex;align-items:center;justify-content:space-between;padding:19px 24px 0}
.modal-hd b{font-size:16.5px}
.modal-x{width:32px;height:32px;border-radius:9px;display:flex;align-items:center;justify-content:center;color:var(--muted);transition:all .15s}
.modal-x:hover{background:var(--panel2);color:var(--text)}
.modal-bd{padding:20px 24px}
.modal-ft{display:flex;justify-content:flex-end;gap:10px;padding:0 24px 22px}
.modal.sm{max-width:440px}.modal.lg{max-width:760px}.modal.xl{max-width:920px}

/* ---------- Toast ---------- */
#toast-root{position:fixed;top:18px;right:18px;z-index:200;display:flex;flex-direction:column;gap:10px;pointer-events:none}
.toast{display:flex;align-items:flex-start;gap:11px;min-width:290px;max-width:380px;background:var(--glass);backdrop-filter:blur(20px);border:1px solid var(--border2);border-radius:14px;padding:13px 15px;box-shadow:var(--shadow);animation:toastIn .35s cubic-bezier(.22,.8,.32,1);pointer-events:auto}
.toast.out{animation:toastOut .3s forwards}
.toast .t-ic{width:30px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;flex:none}
.toast b{font-size:13.5px;display:block}
.toast p{font-size:12.5px;color:var(--muted);margin-top:1px}
.toast.ok .t-ic{background:rgba(52,211,153,.14);color:var(--green)}
.toast.err .t-ic{background:rgba(251,113,133,.14);color:var(--red)}
.toast.info .t-ic{background:rgba(34,211,238,.14);color:var(--cyan)}
.toast.warn .t-ic{background:rgba(251,191,36,.14);color:var(--yellow)}
@keyframes toastIn{from{opacity:0;transform:translateX(30px)}to{opacity:1;transform:none}}
@keyframes toastOut{to{opacity:0;transform:translateX(30px)}}

/* ---------- 确认框 ---------- */
#confirm-root{position:fixed;inset:0;z-index:150;pointer-events:none}
.cf-mask{position:absolute;inset:0;background:rgba(3,7,16,.7);backdrop-filter:blur(5px);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .22s;pointer-events:auto;padding:24px}
.cf-mask.in{opacity:1}
.cf-box{width:100%;max-width:380px;background:linear-gradient(180deg,rgba(17,26,48,.98),rgba(11,18,36,.99));border:1px solid var(--border2);border-radius:18px;padding:24px;transform:scale(.95);transition:transform .25s}
.cf-mask.in .cf-box{transform:none}
.cf-ic{width:46px;height:46px;border-radius:13px;display:flex;align-items:center;justify-content:center;margin-bottom:14px}
.cf-ic.warn{background:rgba(251,191,36,.12);color:var(--yellow)}
.cf-ic.err{background:rgba(251,113,133,.12);color:var(--red)}
.cf-box b{font-size:16px}
.cf-box p{color:var(--muted);font-size:13px;margin:7px 0 20px}
.cf-acts{display:flex;gap:10px;justify-content:flex-end}

/* ---------- 空状态 ---------- */
.empty{padding:52px 20px;text-align:center;color:var(--muted)}
.empty .e-ic{width:62px;height:62px;margin:0 auto 14px;border-radius:18px;background:var(--panel2);display:flex;align-items:center;justify-content:center;color:var(--faint)}
.empty b{display:block;color:var(--text2);font-size:14px;margin-bottom:4px}
.empty p{font-size:12.5px}

/* ---------- 步骤条 / 向导 ---------- */
.steps{display:flex;align-items:center;margin-bottom:24px}
.step{display:flex;align-items:center;gap:9px}
.step-dot{width:28px;height:28px;border-radius:50%;border:1.5px solid var(--faint);color:var(--muted);display:flex;align-items:center;justify-content:center;font-size:12.5px;font-weight:700;transition:all .25s;flex:none}
.step-txt{font-size:12.5px;color:var(--muted);font-weight:600;white-space:nowrap}
.step.on .step-dot{background:var(--grad);border-color:transparent;color:#04101c;box-shadow:var(--glow-cyan)}
.step.on .step-txt{color:var(--text)}
.step.done .step-dot{background:rgba(52,211,153,.15);border-color:var(--green);color:var(--green)}
.step-line{flex:1;height:1.5px;background:var(--border);margin:0 10px;position:relative;overflow:hidden}
.step-line::after{content:"";position:absolute;inset:0;background:var(--grad);transform:scaleX(0);transform-origin:left;transition:transform .4s}
.step-line.done::after{transform:none}
.wizard-foot{display:flex;justify-content:space-between;margin-top:24px;padding-top:18px;border-top:1px solid var(--border)}

/* ---------- 管道可视化（融合任务） ---------- */
.pipeline{display:flex;align-items:stretch;gap:0;overflow-x:auto;padding:8px 2px 14px}
.pipe-node{flex:1;min-width:118px;position:relative;padding:16px 10px 12px;border-radius:14px;border:1px solid var(--border);background:rgba(6,12,26,.45);text-align:center;transition:all .3s;margin-right:34px}
.pipe-node:last-child{margin-right:0}
.pipe-node::after{content:"";position:absolute;right:-26px;top:50%;width:26px;height:2px;background:var(--border);transform:translateY(-50%)}
.pipe-node:last-child::after{display:none}
.pipe-node.done::after{background:var(--green)}
.pipe-node .pn-ic{width:38px;height:38px;margin:0 auto 8px;border-radius:11px;display:flex;align-items:center;justify-content:center;background:var(--panel2);color:var(--muted);transition:all .3s}
.pipe-node b{font-size:12.5px;display:block}
.pipe-node .pn-st{font-size:11px;color:var(--faint);margin-top:4px;display:block}
.pipe-node.done{border-color:rgba(52,211,153,.4)}
.pipe-node.done .pn-ic{background:rgba(52,211,153,.12);color:var(--green)}
.pipe-node.run{border-color:rgba(34,211,238,.55);box-shadow:0 0 22px rgba(34,211,238,.15)}
.pipe-node.run .pn-ic{background:rgba(34,211,238,.14);color:var(--cyan);animation:pnPulse 1.2s ease-in-out infinite}
.pipe-node.run .pn-st{color:var(--cyan)}
.pipe-node.run .pn-st::after{content:"…";animation:dots 1.2s steps(4) infinite}
@keyframes pnPulse{0%,100%{box-shadow:0 0 0 0 rgba(34,211,238,.3)}50%{box-shadow:0 0 0 7px rgba(34,211,238,0)}}
@keyframes dots{to{clip-path:inset(0 -2px 0 0)}}

/* ---------- KV 网格 ---------- */
.kv-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:13px}
.kv{padding:12px 14px;border-radius:12px;background:rgba(6,12,26,.4);border:1px solid var(--border)}
.kv i{display:block;font-style:normal;font-size:11.5px;color:var(--muted)}
.kv b{font-size:14.5px;font-weight:700;display:block;margin-top:3px;font-variant-numeric:tabular-nums}
.kv b.c{color:var(--cyan)}.kv b.g{color:var(--green)}.kv b.p{color:var(--purple)}

/* ---------- 时间轴 ---------- */
.tl{position:relative;padding-left:24px}
.tl::before{content:"";position:absolute;left:7px;top:6px;bottom:6px;width:1.5px;background:linear-gradient(180deg,rgba(34,211,238,.5),rgba(124,108,255,.3),transparent)}
.tl-item{position:relative;padding:0 0 20px 12px}
.tl-item::before{content:"";position:absolute;left:-21px;top:5px;width:9px;height:9px;border-radius:50%;background:var(--bg3);border:2px solid var(--cyan)}
.tl-item .tl-time{font-size:11.5px;color:var(--faint);font-family:var(--mono)}
.tl-item b{font-size:13.5px;display:block}
.tl-item p{font-size:12.5px;color:var(--muted)}

/* ---------- 项目卡片 ---------- */
.proj-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:18px}
.proj-card{cursor:pointer}
.pc-top{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:13px}
.pc-code{font-family:var(--mono);font-size:11px;color:var(--faint);letter-spacing:.05em}
.pc-name{font-size:16px;font-weight:700;margin-bottom:7px;display:flex;align-items:center;gap:9px}
.pc-name:hover{color:var(--cyan)}
.pc-desc{color:var(--muted);font-size:12.5px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:40px}
.pc-meta{display:flex;gap:16px;margin:14px 0;font-size:12px;color:var(--text2)}
.pc-meta span{display:flex;align-items:center;gap:6px}
.pc-meta [data-ic]{width:13px;height:13px;color:var(--muted)}
.pc-prog{display:flex;align-items:center;gap:11px}
.pc-prog .pbar{flex:1}
.pc-foot{display:flex;justify-content:space-between;align-items:center;margin-top:14px;padding-top:13px;border-top:1px solid rgba(148,163,184,.08)}
.avatars{display:flex}
.avatars .avatar{width:26px;height:26px;font-size:11px;border-radius:8px;margin-left:-7px;border:2px solid #0b1224}
.avatars .avatar:first-child{margin-left:0}

/* ---------- 数据集卡片 ---------- */
.ds-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px}
.ds-card .ds-ic{width:42px;height:42px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex:none}
.ds-card .ds-ic.img{background:rgba(34,211,238,.12);color:var(--cyan)}
.ds-card .ds-ic.pts{background:rgba(91,140,255,.12);color:var(--blue)}
.ds-card .ds-ic.rad{background:rgba(251,146,60,.12);color:var(--orange)}
.ds-card .ds-ic.mix{background:rgba(176,108,255,.12);color:var(--purple)}
.ds-drop{border:1.5px dashed rgba(34,211,238,.35);border-radius:16px;padding:38px 20px;text-align:center;background:rgba(34,211,238,.03);transition:all .2s;cursor:pointer}
.ds-drop:hover,.ds-drop.over{border-color:var(--cyan);background:rgba(34,211,238,.07);box-shadow:var(--glow-cyan)}
.ds-drop .dd-ic{width:56px;height:56px;margin:0 auto 12px;border-radius:16px;background:rgba(34,211,238,.1);display:flex;align-items:center;justify-content:center;color:var(--cyan);animation:floatY 2.6s ease-in-out infinite}
@keyframes floatY{0%,100%{transform:translateY(0)}50%{transform:translateY(-7px)}}

/* ---------- 上传进度行 ---------- */
.upl-row{display:flex;align-items:center;gap:13px;padding:13px 15px;border:1px solid var(--border);border-radius:13px;background:rgba(6,12,26,.45)}
.upl-row .u-ic{width:38px;height:38px;border-radius:10px;display:flex;align-items:center;justify-content:center;flex:none}
.upl-row .u-ic.img{background:rgba(34,211,238,.12);color:var(--cyan)}
.upl-row .u-ic.pts{background:rgba(91,140,255,.12);color:var(--blue)}
.upl-row .u-ic.rad{background:rgba(251,146,60,.12);color:var(--orange)}
.upl-main{flex:1;min-width:0}
.upl-main b{font-size:13px;display:flex;justify-content:space-between;gap:10px}
.upl-main b .pval{font-family:var(--mono);font-size:11.5px}
.upl-main .pbar{margin-top:8px}

/* ---------- JSON 代码块 ---------- */
.codebox{background:rgba(3,8,18,.8);border:1px solid var(--border);border-radius:13px;padding:15px 17px;font-family:var(--mono);font-size:12.3px;line-height:1.75;color:#c9d8f0;overflow:auto;max-height:340px;white-space:pre}
.codebox .k{color:#7dd3fc}.codebox .s{color:#86efac}.codebox .n{color:#fda4af}.codebox .p{color:#64748b}

/* ---------- 模型卡 ---------- */
.model-card{cursor:pointer;position:relative;overflow:hidden}
.model-card.sel{border-color:rgba(34,211,238,.6);box-shadow:0 0 0 3px rgba(34,211,238,.1),var(--glow-cyan)}
.model-card.sel::after{content:"✓";position:absolute;top:12px;right:14px;width:22px;height:22px;border-radius:50%;background:var(--grad);color:#04101c;font-size:12px;font-weight:800;display:flex;align-items:center;justify-content:center}
.md-ic{width:44px;height:44px;border-radius:13px;background:var(--grad-soft);border:1px solid rgba(91,140,255,.3);display:flex;align-items:center;justify-content:center;color:var(--cyan);flex:none}
.md-params{font-family:var(--mono);font-size:19px;font-weight:700;background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}

/* ---------- 画布容器 ---------- */
.viz-box{position:relative;border-radius:14px;overflow:hidden;border:1px solid var(--border);background:radial-gradient(800px 400px at 50% 0%,rgba(34,211,238,.05),transparent),rgba(3,8,18,.6)}
.viz-box canvas{display:block;width:100%}
.viz-legend{display:flex;gap:16px;flex-wrap:wrap;padding:11px 15px;border-top:1px solid var(--border);font-size:11.5px;color:var(--text2)}
.viz-legend span{display:flex;align-items:center;gap:6px}
.viz-legend i{width:9px;height:9px;border-radius:3px;flex:none}
.viz-tag{position:absolute;top:11px;left:13px;font-size:11px;color:var(--cyan);background:rgba(3,8,18,.7);border:1px solid rgba(34,211,238,.3);padding:3px 10px;border-radius:999px;letter-spacing:.06em;backdrop-filter:blur(6px)}
.viz-live{position:absolute;top:11px;right:13px;font-size:11px;color:var(--green);display:flex;align-items:center;gap:6px;background:rgba(3,8,18,.7);border:1px solid rgba(52,211,153,.3);padding:3px 10px;border-radius:999px;backdrop-filter:blur(6px)}
.viz-live::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--green);animation:pulseDot 1.2s infinite}

/* ---------- 校验清单 ---------- */
.check-list{display:grid;gap:9px}
.chk{display:flex;align-items:center;gap:11px;padding:11px 14px;border:1px solid var(--border);border-radius:12px;background:rgba(6,12,26,.4);font-size:13px;transition:all .3s}
.chk .c-ic{width:24px;height:24px;border-radius:50%;border:1.5px solid var(--faint);color:transparent;display:flex;align-items:center;justify-content:center;flex:none;transition:all .3s}
.chk.pass .c-ic{background:rgba(52,211,153,.14);border-color:var(--green);color:var(--green)}
.chk.pass{border-color:rgba(52,211,153,.35)}
.chk.run .c-ic{border-color:var(--cyan);color:var(--cyan)}
.chk .c-ic svg{width:12px;height:12px}
.chk small{margin-left:auto;color:var(--faint);font-family:var(--mono);font-size:11px}

/* ---------- 权限矩阵 ---------- */
.perm-matrix{width:100%;border-collapse:collapse;font-size:13px;min-width:560px}
.perm-matrix th,.perm-matrix td{padding:11px 14px;border-bottom:1px solid rgba(148,163,184,.08);text-align:center}
.perm-matrix th{font-size:12px;color:var(--muted);font-weight:600}
.perm-matrix td:first-child,.perm-matrix th:first-child{text-align:left}
.perm-group td{background:rgba(91,140,255,.05);font-weight:700;font-size:12.5px;color:var(--blue)}
.role-card{cursor:pointer}
.role-card.sel{border-color:rgba(124,108,255,.55);box-shadow:0 0 0 3px rgba(124,108,255,.1)}

/* ---------- 日志等级 ---------- */
.lv{font-family:var(--mono);font-size:11px;font-weight:700;padding:2px 8px;border-radius:6px}
.lv-info{background:rgba(34,211,238,.1);color:var(--cyan)}
.lv-warn{background:rgba(251,191,36,.12);color:var(--yellow)}
.lv-err{background:rgba(251,113,133,.12);color:var(--red)}

/* ---------- 快速开始 ---------- */
.flow-steps{display:grid;grid-template-columns:repeat(4,1fr);gap:0;position:relative}
.flow-step{position:relative;padding:18px 16px 14px;border-radius:15px;border:1px solid var(--border);background:rgba(6,12,26,.45);cursor:pointer;transition:all .2s;text-align:left}
.flow-step:hover{border-color:rgba(34,211,238,.5);transform:translateY(-2px)}
.flow-step .fs-num{position:absolute;top:-11px;left:16px;width:22px;height:22px;border-radius:50%;background:var(--grad);color:#04101c;font-size:11px;font-weight:800;display:flex;align-items:center;justify-content:center;box-shadow:0 0 12px rgba(34,211,238,.4)}
.flow-step b{font-size:13.5px;display:block;margin:6px 0 3px}
.flow-step p{font-size:12px;color:var(--muted)}
.flow-step .fs-ic{color:var(--cyan);width:20px;height:20px}
.flow-arrow{position:absolute;top:50%;right:-13px;width:26px;height:26px;transform:translateY(-50%);color:var(--faint);display:flex;align-items:center;justify-content:center;z-index:1}

/* ---------- 系统状态 ---------- */
.sys-meter{display:flex;align-items:center;gap:12px;padding:9px 0}
.sys-meter .sm-label{width:82px;font-size:12.5px;color:var(--text2);flex:none}
.sys-meter .pbar{flex:1}
.sys-meter .pval{width:52px;text-align:right;font-family:var(--mono);font-size:11.5px;color:var(--muted)}

/* ---------- 通知 / 菜单动画等 ---------- */
.spin{animation:spin 1s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.divider{height:1px;background:var(--border);margin:16px 0}
.link{color:var(--cyan);cursor:pointer}
.link:hover{text-decoration:underline}

/* ---------- 响应式 ---------- */
@media (max-width:1200px){
  .g4{grid-template-columns:1fr 1fr}
  .flow-steps{grid-template-columns:1fr 1fr;gap:14px}
  .flow-arrow{display:none}
}
@media (max-width:1024px){
  .auth-inner{grid-template-columns:1fr;padding:34px 22px}
  .auth-brand{display:none}
  .g3{grid-template-columns:1fr 1fr}
}
@media (max-width:860px){
  .sidebar{position:fixed;left:0;top:0;bottom:0;transform:translateX(-100%);transition:transform .25s}
  .app.sb-open .sidebar{transform:none;box-shadow:30px 0 60px rgba(0,0,0,.5)}
  .sb-mask.show{display:block;position:fixed;inset:0;background:rgba(3,7,16,.6);z-index:35}
  .g2,.g3,.g4{grid-template-columns:1fr}
  .form-grid{grid-template-columns:1fr}
  .top-search{display:none}
  .uc-info{display:none}
}

/* ============================================================
   公司品牌 Logo 与版权条
   ============================================================ */

/* 登录页左上角公司 Logo（黑底图用 screen 混合融入深色背景） */
.auth-logo{
  position:fixed; top:34px; left:42px; width:280px; height:auto; z-index:12;
  mix-blend-mode:screen; pointer-events:none;
  filter:drop-shadow(0 6px 22px rgba(34,211,238,.18));
  animation:logoIn .8s cubic-bezier(.22,.8,.3,1) both;
}
@keyframes logoIn{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:none}}

/* 侧栏左上角 Logo（白底圆角块承载） */
.sb-logo-img{
  width:40px; height:40px; border-radius:11px; background:#fff; flex:none;
  display:flex; align-items:center; justify-content:center; overflow:hidden;
  box-shadow:0 4px 14px rgba(0,0,0,.4), 0 0 0 1px rgba(255,255,255,.1);
}
.sb-logo-img img{width:100%; height:100%; object-fit:contain; padding:3px; box-sizing:border-box}

/* 底部版权条（固定） */
.copyright-bar{
  position:fixed; left:0; right:0; bottom:0; z-index:20;
  padding:9px 16px; text-align:center;
  font-size:12px; letter-spacing:.08em; color:var(--muted);
  background:rgba(7,14,26,.82);
  backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);
  border-top:1px solid var(--border);
  user-select:none;
}
.app .copyright-bar{left:var(--sidebar-w); z-index:20}
.app.collapsed .copyright-bar{left:0}

/* 为版权条预留空间，避免遮挡内容 */
.page{padding-bottom:84px}
.auth-inner{padding-bottom:110px}

@media (max-width:1024px){
  .auth-logo{width:200px; top:22px; left:24px}
}
@media (max-width:860px){
  .app .copyright-bar{left:0}
  .copyright-bar{font-size:11px; padding:8px 12px; letter-spacing:.04em}
  .auth-logo{width:170px; top:18px; left:20px}
}
