@import url('https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600&display=swap');
/* ============================================================
   TestStar · 白色产品外壳 v2 (依据 _preview-pages.html 白蓝)
   设计:Taste(design-taste-frontend,产品 register)
   纪律:只改视觉层+新增DOM;不动 .nav-sub-item/.btn/.data-page/id/onclick
   核心:整层覆盖根令牌(--bg/--surface/--accent…),让全站变白↔蓝而非灰
   ============================================================ */

/* 逐主题完整令牌(body[data-c] 与 JS 读取 body 一致) */
body[data-c="white"] { --bg:#F4F7FC; --surface:#FFFFFF; --surface2:#FAFAFA; --panel:#FFFFFF; --line:#E6EAF1; --line2:#D5DCE7; --border:rgba(20,26,38,.07); --text:#0E1116; --muted:#5B6470; --accent:#5E8CE0; --accent-hover:#3F6FCE; --o1:#FAFAFA; --o2:#F8F8FA; --o3:#FAFAFA; --tint:#F4F7FC; --acbg:#F4F7FC }
body[data-c="indigo"] { --bg:#F3F3FB; --surface:#FFFFFF; --surface2:#EBEBFA; --panel:#FFFFFF; --line:#E4E4F2; --line2:#D0D0EA; --border:rgba(20,26,38,.07); --text:#11131C; --muted:#5B5F74; --accent:#4F46E5; --accent-hover:#4338CA; --o1:#A9BCF0; --o2:#8B9FF0; --o3:#E4E4FB; --tint:#EBEBFA; --acbg:#F3F3FB }
body[data-c="teal"]   { --bg:#F1F7F6; --surface:#FFFFFF; --surface2:#E4F2F1; --panel:#FFFFFF; --line:#DCEAE7; --line2:#C2DDD8; --border:rgba(10,30,28,.07); --text:#0C1413; --muted:#4F6663; --accent:#0E8F8C; --accent-hover:#0C7C79; --o1:#9FD8D0; --o2:#B7E3DB; --o3:#D9EFE4; --tint:#E4F2F1; --acbg:#F1F7F6 }
body[data-c="violet"] { --bg:#F7F5FF; --surface:#FFFFFF; --surface2:#EEEAFE; --panel:#FFFFFF; --line:#E4E0FA; --line2:#CFC8F4; --border:rgba(40,24,90,.07); --text:#141028; --muted:#5F5A80; --accent:#7C5CFF; --accent-hover:#6D4EFF; --o1:#C3BCF0; --o2:#AFA7EC; --o3:#E9C9E8; --tint:#EEEAFE; --acbg:#F7F5FF }
body[data-c="rose"]   { --bg:#FBF3F5; --surface:#FFFFFF; --surface2:#FAE8ED; --panel:#FFFFFF; --line:#F1DFE5; --line2:#E5C6CE; --border:rgba(60,18,30,.07); --text:#160E11; --muted:#6B4E56; --accent:#D4516E; --accent-hover:#C94460; --o1:#F0BFCC; --o2:#F3C9D6; --o3:#F2D6A0; --tint:#FAE8ED; --acbg:#FBF3F5 }
body[data-c="amber"]  { --bg:#FBF7EE; --surface:#FFFFFF; --surface2:#FAEFDD; --panel:#FFFFFF; --line:#EFE4CC; --line2:#E0CFA8; --border:rgba(70,50,16,.07); --text:#171208; --muted:#6E5F3E; --accent:#C97B0D; --accent-hover:#B06A06; --o1:#F2C264; --o2:#EEBB57; --o3:#F3DFB0; --tint:#FAEFDD; --acbg:#FBF7EE }

/* 字体 */
body{font-family:"Plus Jakarta Sans",-apple-system,"PingFang SC",system-ui,sans-serif;-webkit-font-smoothing:antialiased;transition:background .5s}

/* 背景层(新增 .v7bg,垫底,不挡点击) */
.v7bg{position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden;
  background:linear-gradient(160deg,var(--acbg,#F4F7FC) 0%,#FAFAFA 46%,var(--acbg,#F4F7FC) 100%);transition:background .5s}
.v7bg .bg-img{position:absolute;inset:0;background:url("https://picsum.photos/seed/qa-lab/1920/1200") center/cover no-repeat;filter:blur(16px) saturate(.7);opacity:.14;mix-blend-mode:multiply}
.v7bg .grd{position:absolute;inset:0;opacity:.5;mix-blend-mode:overlay;background-image:linear-gradient(rgba(120,120,120,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(120,120,120,.05) 1px,transparent 1px);background-size:34px 34px}
.v7bg .orb{position:absolute;border-radius:50%;filter:blur(60px);opacity:.45;will-change:transform;transition:background .5s}
.v7bg .o1{width:460px;height:460px;left:-90px;top:-60px;background:#F4F5F7;animation:drift1 26s ease-in-out infinite alternate}
.v7bg .o2{width:390px;height:390px;right:-70px;bottom:-40px;background:#FFFFFF;animation:drift2 30s ease-in-out infinite alternate}
.v7bg .o3{width:300px;height:300px;right:34vw;top:30%;background:#FBFCFD;opacity:.4;animation:drift3 34s ease-in-out infinite alternate}
@keyframes drift1{from{transform:translate(0,0) scale(1)}to{transform:translate(70px,40px) scale(1.08)}}
@keyframes drift2{from{transform:translate(0,0) scale(1)}to{transform:translate(-60px,-50px) scale(1.1)}}
@keyframes drift3{from{transform:translate(0,0)}to{transform:translate(50px,40px) scale(1.15)}}
.v7bg .pt{position:absolute;border-radius:50%;filter:blur(2px);opacity:.5;pointer-events:none;animation:floatUp var(--t,16s) ease-in-out infinite}
@keyframes floatUp{0%,100%{transform:translate(0,0)}25%{transform:translate(6px,-28px)}50%{transform:translate(-5px,-56px)}75%{transform:translate(4px,-84px)}}
.v7grain{position:fixed;inset:-60%;width:220%;height:220%;pointer-events:none;opacity:.05;mix-blend-mode:multiply;z-index:9990;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}

/* 布局垫在背景之上 */
.app-layout{position:relative;z-index:2}

/* 侧栏:实心冷面板,与主背景区分 */
.sidebar{background:linear-gradient(180deg,var(--surface,#fff) 0%,var(--surface2,#EEF2FD) 100%) !important;backdrop-filter:none !important;-webkit-backdrop-filter:none !important;
  border-right:1px solid var(--line,#E6EAF1) !important;box-shadow:6px 0 26px -18px rgba(20,30,60,.35) !important}
.sidebar .logo{border-bottom:1px solid var(--line)}
.logo-brand-row{display:flex;align-items:center;gap:0.6rem}
.logo-name{font-family:"Space Grotesk","Plus Jakarta Sans",sans-serif;font-size:0.92rem;font-weight:600;letter-spacing:0.01em;color:var(--text);line-height:1}
.logo-mark{width:28px;height:28px;border-radius:8px;display:grid;place-items:center;padding:2px}
.logo-mark svg{width:26px;height:26px}
.logo-mark :is(i,[data-ico]){display:none}
.sidebar .nav-sub-item{border-radius:8px;color:var(--muted);transition:background .2s,color .2s;text-decoration:none}
.sidebar .nav-sub-item:hover{background:rgba(255,255,255,.7);color:var(--text);text-decoration:none}
.sidebar .nav-sub-item:focus{outline:none}
.sidebar .nav-sub-item.active{background:linear-gradient(90deg,var(--tint,#EDF2FD),transparent) !important;color:var(--accent) !important}
.nav-group-label{letter-spacing:.06em;color:#8C93A0;font-weight:600}

/* 顶栏玻璃条 */
.topbar{background:rgba(255,255,255,.55) !important;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid var(--line)}

/* 内容透明 → 背景透出 (commercial 已设 transparent, 这里再确保) */
.content{background:transparent !important}
/* 压掉商业壳里 .app-layout 的蓝色径向晕(白主题下的蓝调) */
body .app-layout, body .content{ background-image:none !important }


/* 按钮:产品感,保持可点 */
.btn{border-radius:8px !important}
.btn:hover{transform:translateY(-1px)}
.btn:active{transform:scale(.985)}
.btn.primary,.btn.prim{background:linear-gradient(135deg,#6C93E8,var(--accent)) !important;color:#fff !important}
.btn.secondary{background:rgba(255,255,255,.8) !important}

/* 等宽:数据/ID */
.current-user,.sys-status,.vs-stat-pill,.stat-value,.card .value{font-family:"IBM Plex Mono",ui-monospace,Menlo,monospace !important}

/* 配色开关 */
.v7pick{display:flex;gap:7px;padding:6px 8px;border-radius:99px;background:rgba(255,255,255,.6);border:1px solid var(--line)}
.v7pick .sw{width:15px;height:15px;border-radius:50%;cursor:pointer;border:2px solid #fff;box-shadow:0 0 0 1px rgba(14,17,22,.12);transition:.2s}
.v7pick .sw.on{border-color:#111;transform:scale(1.14)}

/* 滚动条 */
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:#C6CDD8;border-radius:99px;border:2px solid transparent;background-clip:content-box}
/* ============================================================
   仪表盘新布局(row1 / table / row3)
   ============================================================ */
#page-vision-star-dashboard.active{display:flex;flex-direction:column;gap:18px;padding:0 2px}
.dash-row1{display:grid;grid-template-columns:2fr 1.4fr auto;gap:14px;align-items:stretch}
.dash-stats{display:grid;grid-template-columns:repeat(4,1fr);border:1px solid var(--line);border-radius:14px;overflow:hidden;background:rgba(255,255,255,.72);backdrop-filter:blur(10px);min-width:0}
.dash-trend-card{border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.72);backdrop-filter:blur(10px);min-width:0;display:flex;flex-direction:column;justify-content:flex-start;padding:14px 16px}
.dash-sparkline{width:100%;height:56px;display:block}
.dash-trend-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:2px}
.dash-trend-title{font-family:var(--font-mono);font-size:12px;letter-spacing:.14em;color:var(--muted);text-transform:uppercase;display:inline-flex;align-items:center;gap:8px}
.dash-trend-title::before{content:"";width:7px;height:7px;border-radius:2px;background:var(--accent)}
.dash-trend-hint{font-family:var(--font-mono);font-size:10px;letter-spacing:.08em;color:var(--muted);opacity:.75}
.dash-trend-chart{padding:0 2px;margin-bottom:10px;min-height:64px;flex-shrink:0}
.dash-trend-deltas{display:flex;gap:8px}
.dash-delta{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-mono);font-size:11px;letter-spacing:.02em;font-variant-numeric:tabular-nums;padding:4px 11px 4px 9px;border-radius:99px;line-height:1}
.dash-delta b{font-weight:600}
.dash-delta-arr{font-size:10px;line-height:1;opacity:.85}
.dash-delta.up{color:#15803d;background:rgba(21,128,61,.10)}
.dash-delta.down{color:#b91c1c;background:rgba(185,28,28,.10)}
.dash-alert-tile{display:flex;align-items:center;gap:14px;padding:14px 18px;background:linear-gradient(135deg,color-mix(in srgb,var(--bad) 18%,#fff),rgba(255,255,255,.85));border:1px solid color-mix(in srgb,var(--bad) 30%,transparent);border-radius:14px;min-width:160px;transition:transform .2s var(--ease),box-shadow .2s var(--ease);text-decoration:none;color:inherit}
.dash-alert-tile:hover{transform:translateY(-1px);box-shadow:0 8px 18px -10px color-mix(in srgb,var(--bad) 50%,transparent)}
.dash-alert-num{font-family:var(--font-mono);font-size:30px;font-weight:600;letter-spacing:-.02em;color:var(--bad);font-variant-numeric:tabular-nums}

.dash-table-card{padding:18px 20px}
.dash-section-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.dash-section-head h3{font-family:var(--font-mono);font-size:10px;letter-spacing:.18em;color:var(--muted);text-transform:uppercase;margin:0}
.dash-section-head a{text-decoration:none}

.dash-runs{width:100%;border-collapse:collapse}
.dash-runs th{font-family:var(--font-mono);font-size:10px;letter-spacing:.1em;color:var(--muted);text-transform:uppercase;text-align:left;padding:8px 10px;border-bottom:1px solid var(--line)}
.dash-runs td{font-family:var(--font-mono);font-size:12.5px;padding:10px;border-bottom:1px solid rgba(20,26,38,.05);transition:background .15s}
.dash-runs tbody tr:hover td{background:rgba(0,0,0,.02)}
.dash-runs tbody tr:last-child td{border-bottom:0}
.dash-run-act{text-align:right;width:32px}
.dash-run-del{border:0;background:none;cursor:pointer;padding:4px;border-radius:6px;color:var(--muted);line-height:0;opacity:0;transition:opacity .15s,color .15s}
.dash-runs tbody tr:hover .dash-run-del{opacity:1}
.dash-run-del:hover{color:var(--bad);background:rgba(185,28,28,.08)}
.dash-vd{font-size:11px;font-weight:600;padding:2px 9px;border-radius:99px}
.dash-vd.ok{color:var(--ok);background:rgba(21,128,61,.10)}
.dash-vd.bad{color:var(--bad);background:rgba(185,28,28,.10)}
.dash-vd.run{color:var(--warn);background:rgba(180,83,9,.10)}

.dash-row3{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.dash-card-half{padding:18px 20px}
.dash-alert-cards{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-top:4px}

/* 即时悬浮提示(替代原生 title 慢延迟) */
.dash-tooltip{position:fixed;z-index:9999;display:none;background:var(--ink,#141A26);color:#fff;font-family:var(--font-mono);font-size:11px;line-height:1.4;padding:4px 8px;border-radius:6px;box-shadow:0 4px 14px rgba(0,0,0,.22);pointer-events:none;white-space:nowrap}
.dash-alert-card{padding:14px 12px;border:1px solid var(--line);border-radius:10px;background:rgba(255,255,255,.85);display:flex;flex-direction:column;gap:4px;align-items:flex-start}
.dash-alert-card strong{font-family:var(--font-mono);font-size:24px;font-weight:600;font-variant-numeric:tabular-nums;line-height:1}
.dash-alert-card span{font-size:11.5px;color:var(--muted);font-family:var(--font-mono);letter-spacing:.04em}
.dash-alert-card.bad strong{color:var(--bad)}
.dash-alert-card.warn strong{color:var(--warn)}
.dash-alert-card.ok strong{color:var(--ok)}

.dash-suite-cards{display:flex;flex-direction:column;gap:8px;margin-top:4px}
.dash-suite-card{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr 1fr;gap:12px;align-items:center;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:rgba(255,255,255,.85);transition:background .15s}
.dash-suite-card:hover{background:rgba(0,0,0,.02)}
.dash-suite-name{display:flex;flex-direction:column;gap:2px}
.dash-suite-name strong{font-size:13px;font-weight:600}
.dash-suite-name .mono-sm{color:var(--muted);font-size:9.5px;letter-spacing:.08em}
.dash-suite-meta{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--ink2)}
.dash-suite-meta .vd{font-size:10.5px;padding:1px 7px;border-radius:99px}
.dash-suite-meta > .mono{font-variant-numeric:tabular-nums}

@media (max-width: 1100px){
  .dash-row1{grid-template-columns:1fr}
  .dash-row3{grid-template-columns:1fr}
  .dash-suite-card{grid-template-columns:1.4fr 1fr 1fr 1fr 1fr}
}
@media (max-width: 720px){
  .dash-stats{grid-template-columns:repeat(2,1fr)}
  .dash-suite-card{grid-template-columns:1fr}
  .dash-alert-cards{grid-template-columns:1fr}
}

/* ---- Token 消耗区 ---- */
.dash-row-token{display:grid;grid-template-columns:1.4fr 1fr;gap:14px}
.dash-tok-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;align-items:end;padding-top:8px}
/* 2026-09-11: 1 天窗口时 24 根小时柱, 容器宽度可能塞不下——给个横向滚动 + 最小列宽 */
.dash-tok-grid.scroll-x{grid-auto-flow:column;grid-auto-columns:minmax(28px,1fr);overflow-x:auto;scrollbar-width:thin}
.dash-tok-col{display:flex;flex-direction:column;align-items:center;gap:4px;height:120px;justify-content:flex-end}
.dash-tok-val{font-family:var(--font-mono);font-size:10px;color:var(--muted);font-variant-numeric:tabular-nums}
.dash-tok-track{width:100%;max-width:28px;height:80px;background:var(--surface2,#F5F5F5);border-radius:4px;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end}
.dash-tok-fill{width:100%;background:linear-gradient(180deg,var(--accent),color-mix(in srgb,var(--accent) 60%,transparent));border-radius:4px;min-height:4px;transition:height .3s var(--ease)}
/* 2026-09-11: 窗口内无数据的天——0 值列淡化(日期灰、不画柱), 让"哪天有跑"一眼可辨 */
.dash-tok-col.zero .dash-tok-fill{background:var(--line);min-height:2px}
.dash-tok-col.zero .dash-tok-date{opacity:.45}
.dash-tok-date{font-family:var(--font-mono);font-size:9px;color:var(--muted);letter-spacing:.04em}

.dash-token-top{display:flex;flex-direction:column;gap:10px;padding-top:4px}
.dash-tok-row{display:flex;align-items:center;gap:10px;padding:6px 0}
.dash-tok-h-track{flex:1;height:7px;background:var(--surface2,#F5F5F5);border-radius:4px;overflow:hidden;max-width:160px}
.dash-tok-h-fill{height:100%;background:linear-gradient(90deg,var(--accent),color-mix(in srgb,var(--accent) 50%,transparent));border-radius:4px;min-width:4px;transition:width .3s var(--ease)}

@media(max-width:1100px){.dash-row-token{grid-template-columns:1fr}}
@media(max-width:720px){.dash-tok-grid{grid-template-columns:repeat(7,1fr);gap:4px}.dash-tok-track{height:56px}.dash-tok-col{height:90px}}
.dash-token-bars{width:100%;height:280px;min-height:200px;margin-top:12px}
/* 2026-09-11: 套件执行进度按钮 —— 蓝色 chip 风格, 与"删除"红色 chip 对齐视觉权重 */
.dash-run-progress {
  display: inline-flex;
  align-items: center;
  gap: 0.3rem;
  padding: 0.25rem 0.55rem;
  font-size: 0.72rem;
  font-weight: 600;
  color: var(--accent);
  background: rgba(35, 131, 226, 0.08);
  border: 1px solid color-mix(in srgb, var(--accent) 35%, transparent);
  border-radius: 4px;
  cursor: pointer;
  transition: background 0.12s, border-color 0.12s;
  white-space: nowrap;
}
.dash-run-progress:hover {
  background: rgba(35, 131, 226, 0.16);
  border-color: var(--accent);
}

/* ---- Token 筛选 pills ---- */
.dash-tok-filter{display:flex;gap:4px}
.dash-tok-pill{font-family:var(--font-mono);font-size:11px;padding:3px 10px;border-radius:99px;border:1px solid var(--line2);background:rgba(255,255,255,.8);color:var(--muted);cursor:pointer;transition:.2s var(--ease)}
.dash-tok-pill:hover{border-color:var(--accent);color:var(--accent)}
.dash-tok-pill.on{background:color-mix(in srgb,var(--accent) 10%,#fff);border-color:var(--accent);color:var(--accent);font-weight:600}

/* 待处理告警 + 最近套件状态: 内容区与标题对齐 */
.dash-row3 .dash-card-half > .dash-section-head{margin-bottom:0}
.dash-row3 .dash-card-half > .dash-alert-cards,
.dash-row3 .dash-card-half > .dash-suite-cards{margin-top:0}
.dash-row3 .dash-alert-card{padding:12px 14px}
.dash-row3 .dash-suite-card{padding:8px 12px}
.dash-row3{align-items:start}
.dash-row3 .dash-card-half{align-self:start;display:flex;flex-direction:column}
.dash-row3 .dash-card-half > *:not(.dash-section-head){flex:1;display:flex;flex-direction:column;justify-content:flex-start}

/* === 登录页(editorial / C 版,样式限定在 .login-screen 内,不影响 app 的 .btn/.field 等) === */
.login-screen{position:fixed;inset:0;z-index:50;display:grid;place-items:center;padding:0;font-family:"Plus Jakarta Sans","PingFang SC",sans-serif;-webkit-font-smoothing:antialiased;
  background-color:#FAF8F4;
  background-image:radial-gradient(900px 600px at 90% 10%, rgba(94,140,224,.10), transparent 60%),radial-gradient(700px 500px at 8% 92%, rgba(94,140,224,.07), transparent 60%);
  --ink:#1A1A1F;--ink2:#5B6470;--hair:#E4E3DF;--accent:#5E8CE0;--paper:#FAF8F4}
.login-screen *,.login-screen *::before,.login-screen *::after{box-sizing:border-box}

.login-screen .split{position:relative;z-index:1;display:grid;grid-template-columns:1.2fr 1fr;width:min(1080px,96vw);min-height:620px;background:transparent}

/* 流星层:垫在 .split 之下,纯装饰。纪律=长周期 + 错峰负延迟 + 只动 transform/opacity
   --len 长度 / --t 周期 / --dl 负延迟错峰 / --op 峰值不透明度
   同时刻在飞条数 = 流星数 × 可见窗口占比。分两组凑够恒定 3 条:
   ①匀速组 8 颗 × 25%(周期 16s、相位均分,每 2s 起一颗飞 4s)= 恒定 2 条,linear 匀速;
   ②随机组 1 颗(见 .mt-rush)= 常驻 1 条。2 + 1 = 3。
   匀速组起始位置按 stride 3 交错排,保证同时在飞那 2 条横向隔 30% 不扎堆。 */
.login-screen .lqa-meteors{position:absolute;inset:0;z-index:0;overflow:hidden;pointer-events:none}
.login-screen .mt{position:absolute;opacity:0;will-change:transform,opacity;animation:lqaMeteor var(--t,16s) linear infinite;animation-delay:var(--dl,0s)}
.login-screen .mt i{display:block;width:1.5px;height:var(--len,180px);border-radius:99px;transform:rotate(36deg);transform-origin:50% 0;
  background:linear-gradient(to bottom,rgba(94,140,224,0) 0%,rgba(94,140,224,.12) 38%,rgba(94,140,224,.46) 80%,#fff 100%);
  filter:drop-shadow(0 0 6px rgba(94,140,224,.5))}
@keyframes lqaMeteor{
  0%{transform:translate3d(0,0,0);opacity:0}
  1.5%{opacity:var(--op,.8)}
  19%{opacity:var(--op,.8)}
  25%{transform:translate3d(-46vw,58vh,0);opacity:0}
  100%{transform:translate3d(-46vw,58vh,0);opacity:0}
}
/* 那条"随机+加速"的: 整圈都在飞(两端只留快闪淡入淡出), 所以常驻在屏。
   加速口径(用户原话): "匀速向下突然加速变快" —— 先匀速一段、再猛冲一段。
   用两段 linear 拼接, 速度是台阶式突变(位置连续, 不跳帧)。切分点由用户指定:
     0% → 60%  匀速, 走 50% 路程  => 速度 0.833 单位
     60% → 100% 冲, 走剩下 50%    => 速度 1.25 单位   (相差 1.5 倍)
   注意这个切分是"温和档": 冲的那段占了 40% 的时间却只走一半路, 所以只快 1.5 倍;
   想更猛要动的是**路程**分配而不是时间分配 —— 比如仍是 60% 时间、但冲段走 75% 路程,
   就是 5 倍。周期 3.6s 时: 前 2.16s 匀速 152px/s(匀速组 164px/s, 看着就是条普通流星),
   后 1.44s 提到 228px/s。起点/长度/亮度/时长由 index.html 里的小脚本每圈重摇。 */
.login-screen .mt-rush{animation:lqaMeteorRush var(--t,3.6s) linear infinite;animation-delay:var(--dl,0s)}
@keyframes lqaMeteorRush{
  0%{transform:translate3d(0,0,0);opacity:0}
  4%{opacity:var(--op,.8)}
  60%{transform:translate3d(-23vw,29vh,0)}
  96%{opacity:var(--op,.8)}
  100%{transform:translate3d(-46vw,58vh,0);opacity:0}
}
@media (prefers-reduced-motion: reduce){.login-screen .mt{animation:none;opacity:0}}
.login-screen .left{padding:60px 56px;display:flex;flex-direction:column;justify-content:space-between;background:transparent}
.login-screen .brand{display:flex;align-items:center;gap:14px;margin-bottom:50px}
.login-screen .logo-wrap{width:36px;height:36px;border-radius:6px;background:#fff;border:1px solid var(--hair);display:flex;align-items:center;justify-content:center;flex:none}
.login-screen .logo-wrap svg{width:24px;height:24px;display:block}
.login-screen .nm{font-size:17px;font-weight:800;letter-spacing:-.02em;line-height:1.15}
.login-screen .brand .sub{font-family:"IBM Plex Mono",ui-monospace,monospace;font-size:10px;letter-spacing:.18em;color:var(--ink2);text-transform:uppercase;margin-top:1px}

.login-screen .quote-wrap{flex:1;display:flex;flex-direction:column;justify-content:center}
.login-screen .quote{font-family:"Noto Serif SC","Songti SC",serif;font-weight:500;font-size:24px;line-height:1.65;color:var(--ink);letter-spacing:.01em;max-width:420px}
.login-screen .quote p{font-style:italic;margin:0 0 8px}
.login-screen .quote p:last-child{margin-bottom:0}
.login-screen .quote-sep{margin:0 0 12px;color:var(--ink2);opacity:.6}
.login-screen .credit{font-family:"IBM Plex Mono",ui-monospace,monospace;font-size:10.5px;letter-spacing:.18em;color:var(--ink2);text-transform:uppercase;margin-top:24px}
.login-screen .refresh-hint{margin-top:8px;font-family:"IBM Plex Mono",ui-monospace,monospace;font-size:9.5px;letter-spacing:.12em;color:var(--accent);text-transform:uppercase;cursor:pointer;opacity:.7;transition:opacity .15s}
.login-screen .refresh-hint:hover{opacity:1;text-decoration:underline}
.login-screen .stamp{margin-top:auto;font-family:"IBM Plex Mono",ui-monospace,monospace;font-size:10.5px;color:var(--ink2);letter-spacing:.06em;padding-top:14px;border-top:1px dashed var(--hair)}
.login-screen .stamp b{color:var(--ink)}
.login-screen .divider-v{position:absolute;left:50%;top:0;bottom:0;width:1px;background:var(--hair);transform:translateX(-50%)}

.login-screen .right{padding:60px 56px;display:flex;flex-direction:column;justify-content:center}
.login-screen .tag{font-family:"IBM Plex Mono",ui-monospace,monospace;font-size:10px;letter-spacing:.18em;color:var(--ink2);text-transform:uppercase;margin-bottom:14px}
.login-screen .h1{font-family:"Noto Serif SC","Songti SC",serif;font-weight:600;font-size:28px;letter-spacing:.01em;margin-bottom:8px;color:var(--ink);line-height:1.2}
.login-screen .right .sub{font-size:13.5px;color:var(--ink2);margin-bottom:26px}
.login-screen .right .sub a{color:var(--accent);text-decoration:none;border-bottom:1px solid rgba(94,140,224,.4)}
.login-screen .right .sub a:hover{border-bottom-color:var(--accent)}

.login-screen .field{margin-bottom:12px}
.login-screen .field label{display:block;font-family:"IBM Plex Mono",ui-monospace,monospace;font-size:10px;letter-spacing:.06em;color:var(--ink2);text-transform:uppercase;margin-bottom:6px}
.login-screen .field input{width:100%;font-family:"Plus Jakarta Sans",sans-serif;font-size:14px;padding:12px 14px;border:1px solid #D5DCE7;border-radius:8px;background:#FFF;outline:none;transition:border-color .2s,box-shadow .2s}
.login-screen .field input:focus{border-color:var(--ink);box-shadow:0 0 0 4px rgba(26,26,31,.06)}

.login-screen .row{display:flex;align-items:center;justify-content:space-between;margin:6px 0 22px;font-size:12.5px;color:var(--ink2)}
.login-screen .row label{display:flex;align-items:center;gap:6px;cursor:pointer}
.login-screen .row a{color:var(--ink2);text-decoration:none;border-bottom:1px solid rgba(91,100,112,.3)}
.login-screen .row a:hover{color:var(--accent);border-bottom-color:var(--accent)}

.login-screen .btn{display:flex;align-items:center;justify-content:center;width:100%;border:0;border-radius:8px;padding:12px;font-size:14px;font-weight:600;line-height:1;color:#FAF8F4;background:#000;appearance:none;-webkit-appearance:none;cursor:pointer;transition:transform .15s,box-shadow .15s;letter-spacing:.01em;font-family:inherit;text-align:center}
.login-screen .btn:hover{transform:translateY(-1px);box-shadow:0 12px 24px -12px rgba(26,26,31,.5)}
.login-screen .btn:active{transform:scale(.985)}
.login-screen .login-error{color:#C0392B;font-size:12px;line-height:1.5;min-height:0;margin:0 0 0}



@media(max-width:760px){.login-screen .split{grid-template-columns:1fr;width:min(440px,94vw);min-height:560px}.login-screen .left{display:none}.login-screen .divider-v{display:none}}

.vs-sidebar:empty,
.vs-aside:empty,
.vs-suites-sidebar:empty,
.vs-sidebar:has(.vs-case-list:empty){display:none !important}

/* 宽屏(>1200px,三列 .vs-shell 生效)下,左侧用例列表为空被 display:none 后,
   若仍按三列自动排布,会把编辑器/运行配置挤进第一列的 280px 窄带(即"运行选项
   叠成左边一条")。这里在空侧栏场景收拢列数,让编辑器占满 1fr 通栏/主体宽度。 */
@media (min-width: 1201px) {
  .vs-shell:has(.vs-sidebar:empty):has(.vs-aside:empty),
  .vs-shell:has(.vs-sidebar .vs-case-list:empty):has(.vs-aside:empty){
    grid-template-columns: minmax(0, 1fr);
  }
  .vs-shell:has(.vs-sidebar:empty),
  .vs-shell:has(.vs-sidebar .vs-case-list:empty){
    grid-template-columns: minmax(0, 1fr) minmax(280px, 340px);
  }
}

/* ============================================================
   Agent 对话输入区 — 启动地址 / 保存为 CASE ID / 生成后端 精致化
   ============================================================ */
#page-vision-star-agent .vs-chat-context-bar{
  align-items:flex-end;gap:.75rem 1rem;padding-bottom:.6rem;margin-bottom:.55rem;flex-wrap:wrap}
#page-vision-star-agent .vs-chat-inline-field{
  flex-direction:column;align-items:stretch;gap:5px;min-width:0}
#page-vision-star-agent .vs-chat-inline-field label{
  font-family:var(--font-mono,"IBM Plex Mono",monospace);font-size:12px !important;font-weight:500;
  letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin:0}
#page-vision-star-agent .vs-chat-inline-field input,
#page-vision-star-agent .vs-backend-select{
  font-family:var(--font-mono,"IBM Plex Mono",monospace);font-size:12.5px;
  font-variant-numeric:tabular-nums;height:34px;padding:0 11px;min-width:0;
  border:1px solid var(--line);border-radius:8px;background:rgba(255,255,255,.82);
  color:var(--text);outline:none;transition:border-color .15s,box-shadow .15s,background .15s}
#page-vision-star-agent .vs-chat-inline-field input::placeholder{
  color:color-mix(in srgb,var(--muted) 55%,transparent);font-size:12px}
#page-vision-star-agent .vs-chat-inline-field input:focus,
#page-vision-star-agent .vs-backend-select:focus{
  border-color:var(--accent);background:#fff;
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 16%,transparent)}
#page-vision-star-agent .vs-chat-inline-field #vs-agent-url{min-width:220px}
#page-vision-star-agent .vs-chat-inline-field #vs-agent-case-id{min-width:180px}
#page-vision-star-agent .vs-backend-field{min-width:150px}
#page-vision-star-agent .vs-backend-select{min-width:150px;appearance:none;-webkit-appearance:none;cursor:pointer}
#page-vision-star-agent #vs-btn-agent-save{
  height:34px;padding:0 20px;border:0;border-radius:8px;background:#000;color:#FAF8F4;
  font-size:12.5px;font-weight:600;letter-spacing:.05em;line-height:1;cursor:pointer;
  display:inline-flex;align-items:center;transition:transform .15s,box-shadow .15s,opacity .15s}
#page-vision-star-agent #vs-btn-agent-save:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 10px 20px -10px rgba(26,26,31,.5)}
#page-vision-star-agent #vs-btn-agent-save:disabled{opacity:.35;cursor:not-allowed}
#page-vision-star-agent .vs-agent-guard-check{
  height:34px;display:inline-flex;align-items:center;gap:7px;padding:0 13px;margin:0;
  border:1px solid var(--line);border-radius:8px;background:rgba(255,255,255,.55);
  font-size:12px;font-weight:500;letter-spacing:.03em;color:var(--muted);cursor:pointer;white-space:nowrap}
#page-vision-star-agent .vs-agent-guard-check input{accent-color:var(--accent)}

/* ============================================================
   模板创建页 — 对齐 v12 设计稿 (head / filter / tpl cards)
   ============================================================ */
#page-vision-star-template .vs-page-header-top{align-items:flex-end}
#page-vision-star-template .vs-page-header h2{font-size:22px;font-weight:700;letter-spacing:-.02em;margin:0}
#page-vision-star-template .vs-stat-pill#vswt-template-count{
  font-size:11px;padding:3px 11px;border-radius:999px;border:1px solid color-mix(in srgb,var(--accent) 22%,transparent) !important;
  background:color-mix(in srgb,var(--accent) 9%,#fff) !important;color:var(--accent) !important;letter-spacing:.05em;font-weight:600}
#page-vision-star-template .vs-intro{
  font-family:var(--font-mono);font-size:11px;letter-spacing:.02em;padding-left:0;margin-top:.35rem;opacity:.85;color:var(--muted)}
#page-vision-star-template .vs-page-actions .btn.secondary{
  height:34px;padding:0 16px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--text);
  font-size:12.5px;font-weight:600;letter-spacing:.02em;display:inline-flex;align-items:center;gap:7px;
  cursor:pointer;transition:border-color .15s,box-shadow .15s,transform .15s}
#page-vision-star-template .vs-page-actions .btn.secondary:hover{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 12%,transparent);transform:translateY(-1px)}
#page-vision-star-template .vs-page-actions #vswt-btn-ai-recommend{
  background:linear-gradient(135deg,#6C93E8,var(--accent));border-color:transparent;color:#fff}

/* 三栏卡片容器 */
#page-vision-star-template .vst-layout{grid-template-columns:290px 1fr 244px;gap:.85rem}
#page-vision-star-template .vst-list{
  border:1px solid var(--line);border-radius:12px;background:rgba(255,255,255,.72);backdrop-filter:blur(10px);padding:.8rem}
#page-vision-star-template .vst-list-head{
  font-family:var(--font-mono);font-size:11px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;
  color:var(--muted);padding:0 2px .55rem;border-bottom:1px solid var(--line);margin-bottom:.5rem}
#page-vision-star-template .vst-cards{gap:.55rem;padding-right:2px}

/* 筛选栏:横排精致 */
#page-vision-star-template .vst-filter-bar{
  flex-direction:row;align-items:center;gap:8px;padding:0 0 12px;border-bottom:1px solid var(--line)}
#page-vision-star-template .vst-search-input,
#page-vision-star-template .vst-filter-select{
  height:32px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--text);
  font-family:var(--font-mono);font-size:11.5px;padding:0 10px;outline:none;
  transition:border-color .15s,box-shadow .15s}
#page-vision-star-template .vst-search-input{flex:1;min-width:0}
#page-vision-star-template .vst-search-input:focus,
#page-vision-star-template .vst-filter-select:focus{
  border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 15%,transparent)}
#page-vision-star-template .vst-filter-select{cursor:pointer}

/* 模板卡片 → 对齐 v12 .tpl */
#page-vision-star-template .vs-template-card{
  display:flex;flex-direction:column;align-items:flex-start;text-align:left;
  padding:15px 15px 14px;border:1px solid var(--line);border-radius:10px;background:#fff;
  cursor:pointer;width:100%;font:inherit;color:inherit;
  transition:border-color .15s,box-shadow .15s}
#page-vision-star-template .vs-template-card::before{
  content:"";width:36px;height:36px;border-radius:9px;margin-bottom:10px;flex-shrink:0;
  background-color:color-mix(in srgb,var(--accent) 12%,#fff);
  border:1px solid color-mix(in srgb,var(--accent) 22%,transparent);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235E8CE0' stroke-width='1.6'%3E%3Cpath d='M12 2l8 4.5v9L12 20l-8-4.5v-9z'/%3E%3Cpath d='M12 11l8-4.5M12 11L4 6.5M12 11v9'/%3E%3C/svg%3E");
  background-size:18px;background-position:center;background-repeat:no-repeat}
#page-vision-star-template .vs-template-card:hover{
  border-color:#B9C3D0;box-shadow:0 6px 16px -10px rgba(16,24,40,.14);transform:none}
#page-vision-star-template .vs-template-card.active{
  border-color:var(--accent);background:color-mix(in srgb,var(--accent) 5%,#fff);
  box-shadow:0 0 0 1px color-mix(in srgb,var(--accent) 25%,transparent)}
#page-vision-star-template .vs-template-card-name{
  font-size:14px;font-weight:600;letter-spacing:-.01em;color:var(--text);margin-bottom:4px;line-height:1.3}
#page-vision-star-template .vs-template-card-desc{
  font-size:12px;color:var(--muted);line-height:1.45;-webkit-line-clamp:2;display:-webkit-box;
  -webkit-box-orient:vertical;overflow:hidden}
#page-vision-star-template .vs-template-card-meta{
  display:flex;gap:8px;margin-top:12px;padding-top:10px;border-top:1px solid var(--line);flex-wrap:wrap}
#page-vision-star-template .vs-template-badge{
  font-size:10px;font-weight:500;padding:2px 8px;border-radius:99px;background:#fff;
  border:1px solid var(--line);color:var(--muted);font-family:var(--font-mono)}
#page-vision-star-template .vs-template-badge-required{color:#B45309;border-color:rgba(180,83,9,.25);background:rgba(180,83,9,.06);padding-left:8px;padding-right:8px}
#page-vision-star-template .vs-template-badge-custom{background:rgba(21,128,61,.10) !important;border-color:transparent !important;color:#15803D !important}
#page-vision-star-template .vs-template-badge-ai{background:rgba(94,140,224,.12) !important;border-color:transparent !important;color:#3F6FCE !important}

/* 中间参数区 + 右工具面板 */
#page-vision-star-template .vst-form{gap:.55rem}
#page-vision-star-template .vst-detail-head h3{font-size:17px;font-weight:700;letter-spacing:-.01em;margin:0 0 .25rem}
#page-vision-star-template .vst-desc{font-size:12.5px;color:var(--muted);line-height:1.5}
#page-vision-star-template .vst-badges{gap:6px}
#page-vision-star-template .vst-generate-bar{
  margin-top:.5rem;padding:.7rem .85rem;border:1px solid var(--line);border-radius:10px;
  background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 6%,#fff),rgba(255,255,255,.85));
  gap:.7rem}
#page-vision-star-template .vst-tools-inner{
  border:1px solid var(--line);border-radius:12px;background:rgba(255,255,255,.72);backdrop-filter:blur(10px);padding:.85rem}
#page-vision-star-template .vst-field-label{
  font-family:var(--font-mono,"IBM Plex Mono",monospace);font-size:12px !important;font-weight:500;
  letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
#page-vision-star-template .vst-field input[type="text"]{
  height:34px;border:1px solid var(--line);border-radius:8px;background:rgba(255,255,255,.85);
  color:var(--text);font-size:12.5px;font-family:var(--font-mono);padding:0 10px;outline:none;
  transition:border-color .15s,box-shadow .15s}
#page-vision-star-template .vst-field input[type="text"]:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 15%,transparent)}

/* P3(2026-08-22): 用例运行目标 URL 强提示 */
.vs-field-required{color:var(--fail,#e5484d);font-weight:600;font-size:.9em}
.vs-input-miss{outline:2px solid var(--fail,#e5484d)!important;outline-offset:1px;animation:vs-input-miss-flash 1.6s ease}
@keyframes vs-input-miss-flash{0%,100%{box-shadow:0 0 0 0 color-mix(in srgb,var(--fail,#e5484d) 30%,transparent)}50%{box-shadow:0 0 0 4px color-mix(in srgb,var(--fail,#e5484d) 30%,transparent)}}

/* P4(2026-08-22): 自愈详情动作区 */
.vs-heal-detail-actions{display:flex;align-items:center;gap:.7rem;margin-top:.8rem;padding-top:.7rem;border-top:1px solid var(--line)}
.vs-heal-detail-hint{font-size:.8rem;color:var(--muted)}

/* ── 云效(Yunxiao)配置卡(2026-08-23) ─────────────────────────── */
.vs-yunxiao-config{
  margin-top:1.5rem;border:1px solid var(--line);border-radius:12px;
  background:rgba(255,255,255,.72);backdrop-filter:blur(10px);
  overflow:hidden;
}
.vs-yunxiao-head{
  display:flex;align-items:center;gap:.6rem;padding:.6rem 1rem;cursor:pointer;
  font-size:.85rem;color:var(--text);
}
.vs-yunxiao-status{margin-left:auto;font-size:.75rem;color:var(--muted)}
.vs-yunxiao-body{
  padding:0 1rem 1rem;display:flex;flex-wrap:wrap;gap:.6rem;align-items:flex-end;
  border-top:1px solid var(--line);
}
.vs-yunxiao-body .vs-form-field{flex:1;min-width:160px}
.vs-yunxiao-body input[type="password"],
.vs-yunxiao-body input[type="text"]{
  width:100%;height:34px;border:1px solid var(--line);border-radius:8px;
  background:rgba(255,255,255,.85);color:var(--text);font-size:12.5px;
  font-family:var(--font-mono);padding:0 10px;outline:none;
  transition:border-color .15s,box-shadow .15s;
}
.vs-yunxiao-body input:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 15%,transparent)}
.vs-yunxiao-body label{font-size:.75rem;color:var(--muted);margin-bottom:3px;display:block}
.vs-yunxiao-actions{display:flex;gap:.5rem;padding-top:.4rem;width:100%}
.vs-yunxiao-actions .btn{height:34px;font-size:.82rem}

/* ── 系统设置页 (2026-08-23; 2026-09-05 分组标签重排) ─────────────── */
.vs-settings-tabs{
  display:inline-flex;gap:4px;padding:4px;margin:0 0 1.1rem;
  border:1px solid var(--line);border-radius:10px;
  background:rgba(255,255,255,.72);backdrop-filter:blur(10px);
}
.vs-settings-tab{
  appearance:none;border:none;background:transparent;cursor:pointer;
  height:32px;padding:0 16px;border-radius:7px;
  font-size:.82rem;font-weight:600;color:var(--muted);
  transition:color .15s,background .15s,box-shadow .15s;
}
.vs-settings-tab:hover{color:var(--text)}
.vs-settings-tab:active{transform:translateY(1px)}
.vs-settings-tab.is-active{
  color:#fff;background:var(--accent);
  box-shadow:0 1px 4px color-mix(in srgb,var(--accent) 35%,transparent);
}
/* 2026-09-06: 1200 → 铺满,听用户口径(设置/详情页占满主区,宽屏不留白);表单双列网格自动摊开 */
.vs-settings-wrap{max-width:none}
.vs-settings-pane{display:none}
.vs-settings-pane.is-active{display:block;animation:vs-pane-in .18s ease}
@keyframes vs-pane-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}

.vs-settings-card{
  margin:0 0 1rem;border:1px solid var(--line);border-radius:12px;
  background:rgba(255,255,255,.72);backdrop-filter:blur(10px);overflow:hidden;
}
.vs-settings-card-head{
  display:flex;align-items:center;gap:.6rem;padding:.7rem 1.2rem;
  border-bottom:1px solid var(--line);font-size:.88rem;
}
.vs-settings-card-body{
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  gap:.7rem 1rem;padding:1rem 1.2rem 1.15rem;
}
.vs-settings-card-body .vs-form-field{display:flex;flex-direction:column;gap:4px;min-width:0}
.vs-settings-card-body .vs-settings-hint,
.vs-settings-card-body .vs-field-wide,
.vs-settings-card-body .vs-yunxiao-write-row,
.vs-settings-card-body .vs-tools-out{grid-column:1/-1}
.vs-settings-card-body input[type="password"],
.vs-settings-card-body input[type="text"],
.vs-settings-card-body select{
  height:34px;border:1px solid var(--line);border-radius:8px;
  background:rgba(255,255,255,.85);color:var(--text);font-size:12.5px;
  font-family:var(--font-mono);padding:0 10px;outline:none;
  transition:border-color .15s,box-shadow .15s;
}
.vs-settings-card-body input:focus,.vs-settings-card-body select:focus{
  border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 15%,transparent);
}
.vs-settings-card-body label{font-size:.75rem;color:var(--muted)}
.vs-field-pair{display:flex;gap:.5rem}
.vs-field-pair input{flex:1;min-width:0}
.vs-tools-out{
  margin-top:.1rem;padding:.6rem .8rem;
  border:1px solid var(--line);border-radius:8px;
  background:color-mix(in srgb,var(--text) 4%,transparent);
  font-size:.72rem;line-height:1.55;color:var(--muted);
  white-space:pre-wrap;max-height:220px;overflow:auto;
}
/* 卡片底部统一操作栏:右对齐、与表单区以分隔线隔开 */
.vs-settings-card-body .vs-yunxiao-actions{
  grid-column:1/-1;display:flex;gap:.5rem;justify-content:flex-end;
  margin:.4rem -1.2rem -1.15rem;padding:.7rem 1.2rem;
  border-top:1px solid var(--line);background:rgba(255,255,255,.45);
}
.vs-settings-card-body .vs-yunxiao-actions .btn{height:34px;font-size:.82rem}
/* 操作栏之后出现的工具输出框,去掉顶部间隙贴住操作栏下方 */
.vs-settings-card-body .vs-yunxiao-actions + .vs-tools-out{margin:.9rem 0 0}

/* ═══ 对话悬浮球 · 精致化重设计(2026-09-04) ═══ */
#vs-chat-fab {
  width: 54px !important;
  height: 54px !important;
  background: linear-gradient(135deg, #5B96F7 0%, #2383E2 55%, #1B72D4 100%) !important;
  color: #fff !important;
  border: none !important;
  box-shadow:
    0 10px 26px rgba(35, 131, 226, 0.38),
    0 3px 8px rgba(35, 131, 226, 0.22),
    inset 0 1px 0 rgba(255, 255, 255, 0.35) !important;
  animation: vs-fab-breathe 4.5s ease-in-out infinite;
}
#vs-chat-fab svg { filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.15)); }
#vs-chat-fab:hover {
  transform: translateY(-3px) scale(1.05);
  background: linear-gradient(135deg, #6BA3F9 0%, #2F8DEB 55%, #2380DC 100%) !important;
  box-shadow:
    0 14px 32px rgba(35, 131, 226, 0.45),
    0 4px 10px rgba(35, 131, 226, 0.25),
    inset 0 1px 0 rgba(255, 255, 255, 0.4) !important;
}
#vs-chat-fab:active { transform: translateY(-1px) scale(0.97); }
#vs-chat-fab.open,
#vs-chat-fab.open:hover {
  background: linear-gradient(135deg, #3B7FE0 0%, #1B6FD8 100%) !important;
  animation: none;
  box-shadow:
    0 8px 20px rgba(27, 111, 216, 0.4),
    inset 0 2px 6px rgba(0, 0, 0, 0.18) !important;
}
@keyframes vs-fab-breathe {
  0%, 100% { box-shadow: 0 10px 26px rgba(35, 131, 226, 0.38), 0 3px 8px rgba(35, 131, 226, 0.22), inset 0 1px 0 rgba(255, 255, 255, 0.35), 0 0 0 0 rgba(35, 131, 226, 0.28); }
  50% { box-shadow: 0 10px 26px rgba(35, 131, 226, 0.38), 0 3px 8px rgba(35, 131, 226, 0.22), inset 0 1px 0 rgba(255, 255, 255, 0.35), 0 0 0 9px rgba(35, 131, 226, 0); }
}

/* 悬浮球图标:压过 .ico-inline svg 的 muted 灰 */
#vs-chat-fab .ico-inline,
#vs-chat-fab .ico-inline svg {
  color: #fff !important;
  margin: 0 !important;
}

/* ═══ 对话入口 · 胶囊按钮终版(2026-09-04,推翻圆球方案) ═══ */
#vs-chat-fab {
  width: auto !important;
  height: 42px !important;
  padding: 0 16px 0 9px !important;
  border-radius: 999px !important;
  display: inline-flex !important;
  align-items: center !important;
  gap: 8px !important;
  background: rgba(255, 255, 255, 0.94) !important;
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  border: 1px solid var(--line, #E6EAF1) !important;
  color: var(--text, #0E1116) !important;
  font-family: inherit !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  letter-spacing: 0.01em;
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.08), 0 1px 3px rgba(15, 23, 42, 0.05) !important;
  animation: none !important;
  transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease;
}
/* 图标章:渐变小圆 */
#vs-chat-fab .ico-inline {
  width: 26px !important;
  height: 26px !important;
  border-radius: 50% !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  background: linear-gradient(135deg, #5B96F7 0%, #1B72D4 100%) !important;
  box-shadow: 0 2px 6px rgba(35, 131, 226, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.3);
  color: #fff !important;
  transition: transform .2s ease;
}
#vs-chat-fab .ico-inline,
#vs-chat-fab .ico-inline svg { color: #fff !important; margin: 0 !important; }
#vs-chat-fab .ico-inline svg { filter: none; }
#vs-chat-fab .vs-chat-fab-label { line-height: 1; }
#vs-chat-fab:hover {
  transform: translateY(-1px);
  border-color: var(--accent, #5E8CE0) !important;
  color: var(--accent, #3F6FCE) !important;
  box-shadow: 0 8px 22px rgba(94, 140, 224, 0.18), 0 2px 5px rgba(15, 23, 42, 0.06) !important;
}
#vs-chat-fab:hover .ico-inline { transform: scale(1.08); }
#vs-chat-fab:active { transform: translateY(0) scale(0.98); }
/* 展开态:面板锚定,入口弱化 */
#vs-chat-fab.open,
#vs-chat-fab.open:hover {
  background: #F4F7FC !important;
  border-color: var(--accent, #5E8CE0) !important;
  color: var(--accent, #3F6FCE) !important;
  box-shadow: 0 3px 10px rgba(94, 140, 224, 0.14) !important;
  transform: none;
}

/* ═══ AI 助手胶囊·可拖拽(2026-09-05) ═══ */
#vs-chat-fab {
  touch-action: none;          /* 拖拽时不触发页面滚动 */
  user-select: none;
  -webkit-user-select: none;
  cursor: grab;
}
#vs-chat-fab:active { cursor: grabbing; }
#vs-chat-fab.dragging {
  transition: none !important;      /* 拖拽中关过渡, 跟手 */
  transform: scale(1.03) !important;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18) !important;
  opacity: 0.96;
}

/* ═══ 设置页·「规划中」徽标(2026-09-05) ═══ */
.vs-settings-badge-planned {
  font-size: 0.66rem;
  font-weight: 700;
  line-height: 1;
  padding: 3px 7px;
  border-radius: 999px;
  color: #9A6700;
  background: rgba(255, 193, 7, 0.16);
  border: 1px solid rgba(255, 193, 7, 0.45);
  white-space: nowrap;
}
.vs-settings-hint {
  margin: 0 0 .15rem;
  font-size: 0.78rem;
  line-height: 1.5;
  color: var(--muted, #5B6470);
}
.vs-settings-badge-live {
  font-size: 0.66rem;
  font-weight: 700;
  line-height: 1;
  padding: 3px 7px;
  border-radius: 999px;
  color: #1B72D4;
  background: rgba(35, 131, 226, 0.12);
  border: 1px solid rgba(35, 131, 226, 0.4);
  white-space: nowrap;
}

/* ═══ Toast·顶部居中(2026-09-05) ═══ */
.toast {
  top: 4.2rem;
  bottom: auto;
  right: auto;
  left: 50%;
  transform: translateX(-50%);
  max-width: min(680px, calc(100vw - 3rem));
  text-align: center;
  z-index: 4000;
}
.toast.show { animation: toastSlideDown 0.25s ease-out; }
@keyframes toastSlideDown {
  from { transform: translate(-50%, -14px); opacity: 0; }
  to { transform: translate(-50%, 0); opacity: 1; }
}

/* ═══ 云效集成·写入开关 + 拉取/回写弹窗(2026-09-05) ═══ */
.vs-yunxiao-write-row {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin: 0 0 12px;
  font-size: 0.8rem;
  color: var(--text, #1F2328);
  cursor: pointer;
  user-select: none;
}
.vs-yunxiao-write-row input { cursor: pointer; }
.vs-yunxiao-modal { max-width: 640px; width: 92vw; }
.vs-yx-req-list {
  max-height: 300px;
  overflow: auto;
  border: 1px solid var(--line, var(--border, #E4E8EE));
  border-radius: 8px;
  padding: 4px;
}
.vs-yx-req-row {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 6px 8px;
  border-radius: 6px;
  cursor: pointer;
  font-size: 0.82rem;
}
.vs-yx-req-row:hover { background: rgba(35, 131, 226, 0.06); }
.vs-yx-req-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.vs-yx-req-st { flex: 0 0 auto; font-size: 0.72rem; color: var(--muted, #5B6470); }
.vs-yx-count { font-size: 0.78rem; color: var(--accent, #2383E2); font-weight: 600; margin-right: auto; }

/* ── 2026-09-05 前端完善: 下拉菜单 / 弹窗尺寸档位 ─────────────── */

/* 弹窗尺寸档位(sm 默认 / md / lg),替代散落的 inline max-width */
.vs-modal.vs-modal-sm { max-width: 480px; }
.vs-modal.vs-modal-md { max-width: 720px; }
.vs-modal.vs-modal-lg { max-width: 920px; }

/* 「导入 ▾」下拉 */
.vs-dropdown { position: relative; display: inline-block; }
.vs-dropdown-menu {
  position: absolute; top: calc(100% + 4px); left: 0; z-index: 60;
  min-width: 220px; padding: 0.3rem;
  background: var(--card-bg, #fff); border: 1px solid var(--border, #e3e6ea);
  border-radius: 10px; box-shadow: 0 8px 28px rgba(15, 23, 42, 0.14);
}
.vs-dropdown-item {
  display: block; width: 100%; text-align: left;
  padding: 0.45rem 0.65rem; border: 0; background: transparent;
  font-size: 0.8rem; color: var(--text, #1f2733); border-radius: 7px; cursor: pointer;
}
.vs-dropdown-item:hover { background: rgba(35, 131, 226, 0.08); }
.vs-dropdown-item-strong { font-weight: 600; color: var(--accent, #2383E2); }
.vs-dropdown-sep { height: 1px; margin: 0.3rem 0.4rem; background: var(--border, #e3e6ea); }

/* 空态引导卡(批次列表页): 存量导入的第一入口 */
.vs-empty-guide {
  display: flex; align-items: center; gap: 0.8rem;
  border: 1px dashed var(--border, #cfd6dd); border-radius: 10px;
  padding: 0.7rem 0.9rem; margin: 0.4rem 0 0.8rem;
  background: rgba(35, 131, 226, 0.04);
}
.vs-empty-guide-text { flex: 1; font-size: 0.8rem; color: var(--muted, #5B6470); }
.vs-empty-guide-text b { color: var(--text, #1f2733); }

/* ═══ 需求转用例·首页协作工具导入前置入口(2026-09-05) ═══ */
.vs-req-home-import {
  margin-top: 0.85rem;
  padding: 0.75rem 1rem;
  border: 1px dashed var(--border, #cfd6dd);
  border-radius: 10px;
  background: rgba(35, 131, 226, 0.035);
}
.vs-req-home-import-label {
  display: block;
  font-size: 0.78rem;
  font-weight: 600;
  color: var(--text, #1f2733);
  margin-bottom: 0.55rem;
}
.vs-req-home-import-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.45rem;
}
.vs-req-home-import-row .btn { height: 30px; font-size: 0.78rem; }
.vs-req-home-import-sep {
  width: 1px;
  height: 18px;
  margin: 0 0.25rem;
  background: var(--border, #cfd6dd);
}
.vs-req-home-import-note {
  margin: 0.55rem 0 0;
  font-size: 0.72rem;
  color: var(--muted, #5B6470);
}

/* ═══ 设备中心·易用性修补(2026-09-06) ═══ */
/* WEB 等无设备端:隐藏环境卡后表单独占主栏 */
.vs-mr-cols.solo { grid-template-columns: minmax(0, 1fr); }
/* 无设备端的就绪条内联在表单卡顶部 */
.vs-mr-readyline {
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px;
  padding: 10px 14px; margin-bottom: 8px;
  border: 1px dashed var(--line); border-radius: 8px;
  background: rgba(35, 131, 226, 0.04);
}
.vs-mr-readyline .vs-mr-ready { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; min-height: 20px; }
.vs-mr-readyline .vs-mr-ready-note { font-size: 12px; color: var(--muted); }
/* 高级选项折叠卡(端选项 + YAML 预览) */
.vs-mr-advanced {
  margin-top: 14px;
  border: 1px solid var(--line); border-radius: 8px;
  background: rgba(255, 255, 255, 0.5);
}
.vs-mr-advanced > summary {
  cursor: pointer; padding: 11px 14px;
  font-size: 12.5px; font-weight: 600; color: var(--muted);
  user-select: none; list-style: none;
  display: flex; align-items: center; gap: 7px;
}
.vs-mr-advanced > summary::-webkit-details-marker { display: none; }
.vs-mr-advanced > summary::before { content: "▸"; font-size: 11px; transition: transform .15s; }
.vs-mr-advanced[open] > summary::before { transform: rotate(90deg); }
.vs-mr-advanced[open] > summary { border-bottom: 1px solid var(--line); }
.vs-mr-advanced > .vs-mr-section,
.vs-mr-advanced > .vs-mr-previewhead { padding-left: 14px; padding-right: 14px; }
.vs-mr-advanced > .vs-mr-preview { margin: 0 14px 14px; width: calc(100% - 28px); }
/* 设备ID手动输入框 */
.vs-mr-manual { margin-top: 8px; }

/* ═══ AI生成用例·页头配置条(2026-09-06, 从输入区底部上移) ═══ */
.vs-agent-configbar {
  display: flex; flex-wrap: wrap; align-items: flex-end; gap: 12px 18px;
  margin: 0 0 14px; padding: 12px 16px;
  border: 1px solid var(--line); border-radius: 10px;
  background: rgba(255, 255, 255, 0.72); backdrop-filter: blur(10px);
}
.vs-agent-configbar .vs-chat-inline-field { display: flex; flex-direction: column; gap: 4px; }
.vs-agent-configbar .vs-chat-inline-field label { font-size: 11.5px; font-weight: 600; color: var(--muted); }
.vs-agent-configbar input[type="text"], .vs-agent-configbar select {
  height: 32px; border: 1px solid var(--line); border-radius: 7px;
  background: rgba(255,255,255,.9); color: var(--text); font-size: 12.5px;
  padding: 0 10px; outline: none; min-width: 180px;
}
.vs-agent-configbar input:focus, .vs-agent-configbar select:focus { border-color: var(--accent); }
.vs-agent-configbar .vs-check { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--text); cursor: pointer; padding-bottom: 7px; }
.vs-agent-configbar .btn { height: 32px; padding-bottom: 0; }
/* 跨页引流链接 */
.vs-cross-link { font-size: 12.5px; color: var(--accent); cursor: pointer; text-decoration: none; }
.vs-cross-link:hover { text-decoration: underline; }

/* ── 试跑徽章(2026-09-06): trial_* 自动验证试跑在历史列表中的标识 ── */
.vs-trial-badge {
  display: inline-block;
  padding: 1px 7px;
  margin-right: 5px;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 600;
  line-height: 1.5;
  vertical-align: 1px;
  color: #92400e;
  background: rgba(245, 158, 11, 0.14);
  box-shadow: inset 0 0 0 1px rgba(245, 158, 11, 0.22);
}
.vs-mr-page .vs-mr-history-list .vsmr-cell-id .vs-trial-badge { margin-right: 4px; }

/* ── 运行记录行:自愈/状态徽章右对齐(2026-09-06) ── */
.vs-run-badges {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-left: auto; /* flex 里推到行右端;窄行换行时也单独靠右 */
}

/* ── 页面知识库编辑器(2026-09-06): 占满主区,不再右侧大片留白 ──
   主区(content)是 100% 自适应,这里去掉 max-width 直接用 .content 全宽;
   元素卡 grid 内部间距自适应,desc/loc/sel 三列各 ~440px 可读舒适 */
#page-vision-star-page-kb { max-width: none; padding-left: 8px; padding-right: 8px; }
