@mars-sea/dsh-commandcode-provider 0.13.0 → 0.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/client.js CHANGED
@@ -3275,7 +3275,7 @@ window.__ModuleLoader__.load({
3275
3275
  }
3276
3276
  //#endregion
3277
3277
  //#region package.json
3278
- var version = "0.13.0";
3278
+ var version = "0.13.1";
3279
3279
  var repository = {
3280
3280
  "type": "git",
3281
3281
  "url": "git+https://github.com/Mars-Sea/dsh-commandcode-provider.git"
@@ -5579,8 +5579,19 @@ window.__ModuleLoader__.load({
5579
5579
  analysisSections: "分析内容",
5580
5580
  analysisHistory: "历史用量",
5581
5581
  analysisSimulation: "价格试算",
5582
- analysisByModel: "按模型查看",
5583
- analysisModelHint: "展开模型,查看词元、请求状态与样本。",
5582
+ analysisByModel: "模型用量比较",
5583
+ analysisModelHint: "比例条表示占已知成本小计的份额;展开查看明细。",
5584
+ analysisIntro: "查看历史用量,比较模型成本与响应表现。",
5585
+ analysisModel: "模型",
5586
+ analysisCostShare: "已知成本 / 占比",
5587
+ analysisNoShare: "无占比",
5588
+ analysisShareHint: "占全部已知成本小计",
5589
+ analysisSimulationHeading: "相同工作量价格试算",
5590
+ analysisSimulationHint: "计价覆盖不同的金额不能直接比较。",
5591
+ analysisSimulationCost: "试算成本",
5592
+ analysisCoverage: "计价覆盖",
5593
+ analysisUsd: "美元",
5594
+ analysisTokenUnit: "词元",
5584
5595
  analysisCost: "已知成本 · 美元",
5585
5596
  analysisRequests: "模型请求",
5586
5597
  analysisSessionCount: "会话数",
@@ -5661,8 +5672,19 @@ window.__ModuleLoader__.load({
5661
5672
  analysisSections: "Analysis sections",
5662
5673
  analysisHistory: "Recorded usage",
5663
5674
  analysisSimulation: "Price simulation",
5664
- analysisByModel: "Usage by model",
5665
- analysisModelHint: "Expand a model for tokens, request outcomes and samples.",
5675
+ analysisByModel: "Model usage comparison",
5676
+ analysisModelHint: "Bars show each share of the known cost subtotal; expand for details.",
5677
+ analysisIntro: "Review recorded usage and compare model cost and response times.",
5678
+ analysisModel: "Model",
5679
+ analysisCostShare: "Known cost / share",
5680
+ analysisNoShare: ANALYTICS_COPY_ZH.analysisNoShare,
5681
+ analysisShareHint: "Share of the known cost subtotal",
5682
+ analysisSimulationHeading: "Price simulation for the same workload",
5683
+ analysisSimulationHint: "Amounts with different priced coverage are not directly comparable.",
5684
+ analysisSimulationCost: "Simulated cost",
5685
+ analysisCoverage: "Priced coverage",
5686
+ analysisUsd: "USD",
5687
+ analysisTokenUnit: "tokens",
5666
5688
  analysisCost: "Known cost · USD",
5667
5689
  analysisRequests: "Model requests",
5668
5690
  analysisSessionCount: "Sessions",
@@ -6333,12 +6355,35 @@ window.__ModuleLoader__.load({
6333
6355
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "m9 5 7 7-7 7" })
6334
6356
  });
6335
6357
  }
6336
- function Metric({ label, value, sub }) {
6358
+ function AnalysisIcon({ kind }) {
6359
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
6360
+ className: "ccp-analysisIcon",
6361
+ width: "16",
6362
+ height: "16",
6363
+ viewBox: "0 0 24 24",
6364
+ fill: "none",
6365
+ stroke: "currentColor",
6366
+ strokeWidth: "1.6",
6367
+ strokeLinecap: "round",
6368
+ strokeLinejoin: "round",
6369
+ "aria-hidden": "true",
6370
+ children: kind === "info" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
6371
+ cx: "12",
6372
+ cy: "12",
6373
+ r: "9"
6374
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M12 11v6M12 7h.01" })] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
6375
+ cx: "10.5",
6376
+ cy: "10.5",
6377
+ r: "6.5"
6378
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "m16 16 4.5 4.5" })] })
6379
+ });
6380
+ }
6381
+ function Metric({ label, value, sub, children }) {
6337
6382
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6338
6383
  className: "ccp-analysisMetric",
6339
6384
  children: [
6340
6385
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6341
- className: "ccp-analysisLabel",
6386
+ className: "ccp-analysisLabel ccp-analysisMetricLabel",
6342
6387
  children: label
6343
6388
  }),
6344
6389
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -6348,10 +6393,38 @@ window.__ModuleLoader__.load({
6348
6393
  sub ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6349
6394
  className: "ccp-analysisSub",
6350
6395
  children: sub
6351
- }) : null
6396
+ }) : null,
6397
+ children
6352
6398
  ]
6353
6399
  });
6354
6400
  }
6401
+ /** 只比较已知成本;没有计价样本或已知小计为零时,不制造百分比。 */
6402
+ function knownCostShare(m, totalCost) {
6403
+ return m.pricedRequests > 0 && totalCost > 0 ? m.cost / totalCost * 100 : null;
6404
+ }
6405
+ function CostShare({ m, totalCost, text }) {
6406
+ const share = knownCostShare(m, totalCost);
6407
+ if (share === null) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6408
+ className: "ccp-analysisSub",
6409
+ children: text("analysisNoShare")
6410
+ });
6411
+ const percentage = `${share.toFixed(1)}%`;
6412
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6413
+ className: "ccp-analysisShare",
6414
+ title: `${text("analysisShareHint")} ${percentage}`,
6415
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6416
+ className: "ccp-analysisShareTrack",
6417
+ "aria-hidden": "true",
6418
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6419
+ className: "ccp-analysisShareFill",
6420
+ style: { width: `${Math.min(100, Math.max(0, share))}%` }
6421
+ })
6422
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6423
+ className: "ccp-analysisShareValue",
6424
+ children: percentage
6425
+ })]
6426
+ });
6427
+ }
6355
6428
  function DetailGroup({ title, values, text }) {
6356
6429
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6357
6430
  className: "ccp-analysisDetailGroup",
@@ -6424,7 +6497,7 @@ window.__ModuleLoader__.load({
6424
6497
  ]
6425
6498
  });
6426
6499
  }
6427
- function ModelRow({ m, text }) {
6500
+ function ModelRow({ m, name, totalCost, text }) {
6428
6501
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
6429
6502
  className: "ccp-analysisModelRow",
6430
6503
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("summary", {
@@ -6432,26 +6505,38 @@ window.__ModuleLoader__.load({
6432
6505
  children: [
6433
6506
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6434
6507
  className: "ccp-analysisIdentity",
6435
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6436
- className: "ccp-analysisModelName",
6437
- children: m.id
6438
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6439
- className: "ccp-analysisSub",
6440
- children: [
6441
- text("analysisRequests"),
6442
- " ",
6443
- digits(m.requests),
6444
- " · ",
6445
- text("analysisSessionCount"),
6446
- " ",
6447
- digits(m.sessions)
6448
- ]
6449
- })]
6508
+ children: [
6509
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6510
+ className: "ccp-analysisModelName",
6511
+ children: name || m.id
6512
+ }),
6513
+ name && name !== m.id ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6514
+ className: "ccp-analysisSub",
6515
+ children: m.id
6516
+ }) : null,
6517
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6518
+ className: "ccp-analysisSub ccp-analysisModelCount",
6519
+ children: [
6520
+ text("analysisRequests"),
6521
+ " ",
6522
+ digits(m.requests),
6523
+ " · ",
6524
+ text("analysisSessionCount"),
6525
+ " ",
6526
+ digits(m.sessions)
6527
+ ]
6528
+ })
6529
+ ]
6450
6530
  }),
6451
6531
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Metric, {
6452
- label: text("analysisCost"),
6532
+ label: text("analysisCostShare"),
6453
6533
  value: m.pricedRequests ? money(m.cost) : text("analysisMissing"),
6454
- sub: `${text("analysisPriced")} ${m.pricedRequests}/${m.requests}`
6534
+ sub: `${text("analysisPriced")} ${m.pricedRequests}/${m.requests}`,
6535
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CostShare, {
6536
+ m,
6537
+ totalCost,
6538
+ text
6539
+ })
6455
6540
  }),
6456
6541
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Metric, {
6457
6542
  label: text("analysisResponse"),
@@ -6490,17 +6575,19 @@ window.__ModuleLoader__.load({
6490
6575
  })]
6491
6576
  }),
6492
6577
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Metric, {
6493
- label: text("analysisCost"),
6578
+ label: text("analysisSimulationCost"),
6494
6579
  value: m.pricedRequests ? money(m.cost) : text("analysisMissing"),
6495
- sub: `${text("analysisPriced")} ${m.pricedRequests}/${m.pricedRequests + m.excludedRequests + m.unknownRequests}`
6580
+ sub: text("analysisUsd")
6496
6581
  }),
6497
6582
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Metric, {
6498
- label: text("analysisContext"),
6499
- value: m.contextWindow === null ? text("analysisMissing") : digits(m.contextWindow)
6583
+ label: text("analysisCoverage"),
6584
+ value: `${m.pricedRequests}/${m.pricedRequests + m.excludedRequests + m.unknownRequests}`,
6585
+ sub: `${text("analysisExcluded")} ${digits(m.excludedRequests)} · ${text("analysisUnknownPrice")} ${digits(m.unknownRequests)}`
6500
6586
  }),
6501
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6502
- className: "ccp-analysisCapability",
6503
- children: text(m.images ? "analysisImages" : "analysisTextOnly")
6587
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Metric, {
6588
+ label: text("analysisCapabilities"),
6589
+ value: m.contextWindow === null ? text("analysisMissing") : `${digits(m.contextWindow)} ${text("analysisTokenUnit")}`,
6590
+ sub: text(m.images ? "analysisImages" : "analysisTextOnly")
6504
6591
  }),
6505
6592
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Chevron, {})
6506
6593
  ]
@@ -6560,6 +6647,7 @@ window.__ModuleLoader__.load({
6560
6647
  event.currentTarget.querySelector(`[data-page="${next}"]`)?.focus();
6561
6648
  };
6562
6649
  const scenarios = report?.scenarios.filter((m) => `${m.id} ${m.name}`.toLowerCase().includes(filter.trim().toLowerCase())) ?? [];
6650
+ const names = new Map(report?.scenarios.map((m) => [m.id, m.name]));
6563
6651
  const m = report?.totals;
6564
6652
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
6565
6653
  className: "ccp-analysis",
@@ -6568,6 +6656,7 @@ window.__ModuleLoader__.load({
6568
6656
  children: [
6569
6657
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
6570
6658
  className: "ccp-analysisFilters",
6659
+ "data-mode": mode,
6571
6660
  noValidate: true,
6572
6661
  onSubmit: (e) => {
6573
6662
  e.preventDefault();
@@ -6606,7 +6695,7 @@ window.__ModuleLoader__.load({
6606
6695
  onChange: (e) => setLimit(e.target.value)
6607
6696
  })]
6608
6697
  }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
6609
- className: "ccp-analysisField",
6698
+ className: "ccp-analysisField ccp-analysisDateField",
6610
6699
  children: [text("analysisFrom"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
6611
6700
  className: "ccp-analysisInput",
6612
6701
  type: "date",
@@ -6616,7 +6705,7 @@ window.__ModuleLoader__.load({
6616
6705
  onChange: (e) => setFrom(e.target.value)
6617
6706
  })]
6618
6707
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
6619
- className: "ccp-analysisField",
6708
+ className: "ccp-analysisField ccp-analysisDateField",
6620
6709
  children: [text("analysisTo"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
6621
6710
  className: "ccp-analysisInput",
6622
6711
  type: "date",
@@ -6710,22 +6799,17 @@ window.__ModuleLoader__.load({
6710
6799
  className: "ccp-analysisNote",
6711
6800
  children: text("analysisShortBasis")
6712
6801
  }),
6713
- report.truncated || report.unreadableSessions > 0 || report.skippedSessions > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
6802
+ report.truncated || report.unreadableSessions > 0 || report.skippedSessions > 0 || m.pricedRequests < m.requests ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6714
6803
  className: "ccp-analysisMessage ccp-analysisWarning",
6715
6804
  role: "status",
6716
- children: text("analysisPartial")
6717
- }) : null,
6718
- m.pricedRequests < m.requests ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
6719
- className: "ccp-analysisMessage ccp-analysisWarning",
6720
- role: "status",
6721
- children: text("analysisUnpriced")
6805
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(AnalysisIcon, { kind: "info" }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [report.truncated || report.unreadableSessions > 0 || report.skippedSessions > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: text("analysisPartial") }) : null, m.pricedRequests < m.requests ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: text("analysisUnpriced") }) : null] })]
6722
6806
  }) : null,
6723
6807
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6724
6808
  className: "ccp-analysisTabs",
6725
6809
  role: "tablist",
6726
6810
  "aria-label": text("analysisSections"),
6727
6811
  onKeyDown: navigateTab,
6728
- children: ["history", "simulation"].map((tab) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
6812
+ children: ["history", "simulation"].map((tab) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
6729
6813
  className: "ccp-analysisTab",
6730
6814
  id: `${id}-${tab}-tab`,
6731
6815
  "data-page": tab,
@@ -6735,7 +6819,10 @@ window.__ModuleLoader__.load({
6735
6819
  "aria-controls": `${id}-${tab}`,
6736
6820
  tabIndex: page === tab ? 0 : -1,
6737
6821
  onClick: () => setPage(tab),
6738
- children: text(tab === "history" ? "analysisHistory" : "analysisSimulation")
6822
+ children: [text(tab === "history" ? "analysisHistory" : "analysisSimulation"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6823
+ className: "ccp-analysisTabCount",
6824
+ children: digits(tab === "history" ? report.models.length : report.scenarios.length)
6825
+ })]
6739
6826
  }, tab))
6740
6827
  }),
6741
6828
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
@@ -6759,36 +6846,51 @@ window.__ModuleLoader__.load({
6759
6846
  m.requests === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
6760
6847
  className: "ccp-analysisEmpty",
6761
6848
  children: text("analysisEmpty")
6762
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6849
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6763
6850
  className: "ccp-analysisModels",
6764
- children: report.models.map((model) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ModelRow, {
6851
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6852
+ className: "ccp-analysisTableHead",
6853
+ "aria-hidden": "true",
6854
+ children: [
6855
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: text("analysisModel") }),
6856
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: text("analysisCostShare") }),
6857
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: text("analysisResponse") }),
6858
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: text("analysisFirstToken") }),
6859
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: text("analysisSpeed") }),
6860
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {})
6861
+ ]
6862
+ }), report.models.map((model) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ModelRow, {
6765
6863
  m: model,
6864
+ name: names.get(model.id),
6865
+ totalCost: m.cost,
6766
6866
  text
6767
- }, model.id))
6768
- }),
6769
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
6770
- className: "ccp-analysisAggregate",
6771
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("summary", {
6772
- className: "ccp-analysisDisclosure",
6773
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Chevron, {}), text("analysisDetails")]
6774
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MetricsDetails, {
6775
- m,
6776
- text
6777
- })]
6867
+ }, model.id))]
6778
6868
  }),
6779
6869
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6780
- className: "ccp-analysisMonthly",
6781
- children: [
6782
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: text("analysisMonthly") }),
6783
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", {
6784
- className: "ccp-analysisMonthlyValue",
6785
- children: report.monthlyEstimate === null || report.truncated || report.unreadableSessions || report.skippedSessions ? text("analysisMissing") : money(report.monthlyEstimate)
6786
- }),
6787
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
6788
- className: "ccp-analysisNote",
6789
- children: text("analysisMonthlyHint")
6790
- })
6791
- ]
6870
+ className: "ccp-analysisFooter",
6871
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
6872
+ className: "ccp-analysisAggregate",
6873
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("summary", {
6874
+ className: "ccp-analysisDisclosure",
6875
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Chevron, {}), text("analysisDetails")]
6876
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MetricsDetails, {
6877
+ m,
6878
+ text
6879
+ })]
6880
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6881
+ className: "ccp-analysisMonthly",
6882
+ children: [
6883
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: text("analysisMonthly") }),
6884
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", {
6885
+ className: "ccp-analysisMonthlyValue",
6886
+ children: report.monthlyEstimate === null || report.truncated || report.unreadableSessions || report.skippedSessions ? text("analysisMissing") : money(report.monthlyEstimate)
6887
+ }),
6888
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
6889
+ className: "ccp-analysisNote",
6890
+ children: text("analysisMonthlyHint")
6891
+ })
6892
+ ]
6893
+ })]
6792
6894
  })
6793
6895
  ]
6794
6896
  }),
@@ -6809,25 +6911,50 @@ window.__ModuleLoader__.load({
6809
6911
  role: "status",
6810
6912
  children: text("analysisCatalog")
6811
6913
  }) : null,
6812
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
6813
- className: "ccp-analysisField ccp-analysisSearch",
6814
- children: [text("analysisSearch"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
6815
- className: "ccp-analysisInput",
6816
- type: "search",
6817
- placeholder: text("analysisSearchPlaceholder"),
6818
- value: filter,
6819
- onChange: (e) => setFilter(e.target.value)
6914
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6915
+ className: "ccp-analysisSectionHead",
6916
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
6917
+ className: "ccp-analysisHeading",
6918
+ children: text("analysisSimulationHeading")
6919
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
6920
+ className: "ccp-analysisNote",
6921
+ children: text("analysisSimulationHint")
6922
+ })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
6923
+ className: "ccp-analysisField ccp-analysisSearch",
6924
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6925
+ className: "ccp-analysisSearchLabel",
6926
+ children: text("analysisSearch")
6927
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6928
+ className: "ccp-analysisSearchShell",
6929
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(AnalysisIcon, { kind: "search" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
6930
+ className: "ccp-analysisInput",
6931
+ type: "search",
6932
+ placeholder: text("analysisSearchPlaceholder"),
6933
+ value: filter,
6934
+ onChange: (e) => setFilter(e.target.value)
6935
+ })]
6936
+ })]
6820
6937
  })]
6821
6938
  }),
6822
6939
  m.requests === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
6823
6940
  className: "ccp-analysisEmpty",
6824
6941
  children: text("analysisEmpty")
6825
- }) : scenarios.length ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6942
+ }) : scenarios.length ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6826
6943
  className: "ccp-analysisModels",
6827
- children: scenarios.map((model) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScenarioRow, {
6944
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6945
+ className: "ccp-analysisTableHead ccp-analysisScenarioHead",
6946
+ "aria-hidden": "true",
6947
+ children: [
6948
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: text("analysisModel") }),
6949
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: text("analysisSimulationCost") }),
6950
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: text("analysisCoverage") }),
6951
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: text("analysisCapabilities") }),
6952
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {})
6953
+ ]
6954
+ }), scenarios.map((model) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScenarioRow, {
6828
6955
  m: model,
6829
6956
  text
6830
- }, model.id))
6957
+ }, model.id))]
6831
6958
  }) : !report.catalogUnavailable ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
6832
6959
  className: "ccp-analysisEmpty",
6833
6960
  role: "status",
@@ -7180,10 +7307,10 @@ window.__ModuleLoader__.load({
7180
7307
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
7181
7308
  className: "ccp-title",
7182
7309
  children: mode === "analysis" ? `Command Code · ${text("analyticsNav")}` : text("nav")
7183
- }), mode === "quota" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
7310
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
7184
7311
  className: "ccp-subtitle",
7185
- children: text("subtitle")
7186
- }) : null]
7312
+ children: text(mode === "quota" ? "subtitle" : "analysisIntro")
7313
+ })]
7187
7314
  }),
7188
7315
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: "ccp-spacer" }),
7189
7316
  mode === "quota" && view.updatedAt !== "" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
@@ -8627,108 +8754,135 @@ window.__ModuleLoader__.load({
8627
8754
  .ccp-tabActive{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-brand-primary)}
8628
8755
 
8629
8756
  @media (prefers-reduced-motion:reduce){.ccp-footFill,.ccp-barFill{transition:none}}
8630
- /* 分析页使用独立宽度与私有选择器;数字总览和明细不影响原额度面板。 */
8631
- .ccp-mainInnerAnalysis{max-width:1040px}
8632
- .ccp-analysis{font-size:14px;line-height:1.6;min-width:0;color:var(--dsw-alias-label-primary)}
8633
- .ccp-analysisFilters{display:flex;gap:12px;align-items:end;flex-wrap:wrap;margin:10px 0 18px}
8634
- .ccp-analysisField{display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--dsw-alias-label-secondary);min-width:0}
8635
- .ccp-analysisFilters .ccp-analysisField{min-width:136px}
8636
- .ccp-analysisFilters .ccp-analysisScopeField{flex:0 1 180px}
8637
- /* 明确边框盒高度与行高,避免原生下拉、日期输入和按钮按各自外观计算尺寸。 */
8638
- .ccp-analysisInput{box-sizing:border-box;width:100%;min-width:0;height:40px;padding:8px 11px;font:inherit;font-size:14px;line-height:20px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);border-radius:7px}
8639
- /* 原生选择行为保留;SVG 的位置与文字留白独立控制,点击箭头仍交给下拉框。 */
8757
+ /* 分析页继承设置页和宿主控件的语义变量;独立选择器不影响账号额度页面。 */
8758
+ .ccp-mainInnerAnalysis{max-width:1040px;box-sizing:border-box}
8759
+ /* 宿主侧栏会缩窄中心面板,按实际可用宽度切换列数,而不是仅看浏览器宽度。 */
8760
+ .ccp-analysis{font-size:14px;line-height:22px;min-width:0;color:var(--dsw-alias-label-primary);container-type:inline-size;container-name:ccp-analysis}
8761
+ .ccp-analysisFilters{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap;margin:8px 0 20px}
8762
+ .ccp-analysisField{display:flex;flex-direction:column;gap:6px;font-size:12px;line-height:18px;color:var(--dsw-alias-label-tertiary);min-width:0}
8763
+ .ccp-analysisFilters .ccp-analysisField{flex:0 1 158px}
8764
+ .ccp-analysisFilters .ccp-analysisScopeField{flex-basis:184px}
8765
+ .ccp-analysisFilters .ccp-analysisDateField{flex-basis:166px}
8766
+ /* 对齐原生选择器、日期输入与按钮的边框盒;保留独立箭头留白和点击区域。 */
8767
+ .ccp-analysisInput{box-sizing:border-box;width:100%;min-width:0;height:36px;padding:0 11px;font:inherit;font-size:14px;line-height:22px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border:.5px solid var(--dsw-alias-border-l4);border-radius:8px}
8640
8768
  .ccp-analysisSelectShell{position:relative;display:block;width:100%;min-width:0}
8641
- .ccp-analysisSelect{appearance:none;-webkit-appearance:none;padding-inline-end:40px;text-overflow:ellipsis;cursor:pointer}
8769
+ .ccp-analysisSelect{appearance:none;-webkit-appearance:none;padding-inline-end:40px;text-overflow:ellipsis;cursor:pointer;border:0;border-radius:18px;background:var(--dsw-alias-bg-module-platform)}
8642
8770
  .ccp-analysisSelectShell > .ccp-analysisChevron{position:absolute;inset-inline-end:12px;top:50%;transform:translateY(-50%) rotate(90deg);pointer-events:none}
8643
- .ccp-analysisSelect:disabled + .ccp-analysisChevron{opacity:.65}
8644
- .ccp-analysisInput::placeholder{color:var(--dsw-alias-label-tertiary,var(--dsw-alias-label-secondary))}
8645
- .ccp-analysisApply{box-sizing:border-box;height:40px;font:inherit;font-size:14px;font-weight:500;line-height:20px;white-space:nowrap;padding:8px 18px;border:1px solid var(--dsw-alias-label-primary);border-radius:7px;background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-1);cursor:pointer}
8646
- .ccp-analysisApply:disabled{opacity:.5;cursor:wait}
8647
- .ccp-analysisInput:disabled{opacity:.65}
8771
+ .ccp-analysisSelect:disabled + .ccp-analysisChevron{opacity:.6}
8772
+ .ccp-analysisInput::placeholder{color:var(--dsw-alias-label-tertiary)}
8773
+ .ccp-analysisApply{box-sizing:border-box;flex:none;height:36px;font:inherit;font-size:14px;line-height:22px;white-space:nowrap;padding:0 20px;border:0;border-radius:var(--dsw-radius-md,18px);background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground);cursor:pointer;margin-left:2px}
8774
+ .ccp-analysisApply:hover:not(:disabled){background:var(--dsw-alias-button-primary-hover)}
8775
+ .ccp-analysisApply:disabled{opacity:.4;cursor:wait}
8776
+ .ccp-analysisInput:disabled{opacity:.6}
8648
8777
  .ccp-analysisInput:focus-visible,.ccp-analysisApply:focus-visible,.ccp-analysisTab:focus-visible,.ccp-analysisPanel:focus-visible,.ccp-analysisModelSummary:focus-visible,.ccp-analysisScenarioSummary:focus-visible,.ccp-analysisDisclosure:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:3px}
8649
8778
  /* 模型列表会裁切圆角,内收焦点框以保持第一行和最后一行也清晰可见。 */
8650
- .ccp-analysisModelSummary:focus-visible,.ccp-analysisScenarioSummary:focus-visible,.ccp-analysisAggregate > .ccp-analysisDisclosure:focus-visible{outline-offset:-3px}
8651
- .ccp-analysisScope{display:flex;justify-content:space-between;gap:6px 18px;flex-wrap:wrap;color:var(--dsw-alias-label-secondary);font-size:12px;margin-bottom:12px}
8652
- .ccp-analysisOverview{display:grid;grid-template-columns:1.25fr repeat(3,1fr);padding:22px 0;border-top:1px solid var(--dsw-alias-border-l2);border-bottom:1px solid var(--dsw-alias-border-l2);font-variant-numeric:tabular-nums}
8653
- .ccp-analysisMetric{display:flex;flex-direction:column;gap:4px;min-width:0}
8654
- .ccp-analysisLabel{font-size:12px;color:var(--dsw-alias-label-secondary);font-weight:400}
8655
- .ccp-analysisValue{font-size:16px;line-height:1.4;font-weight:500;overflow-wrap:anywhere}
8656
- .ccp-analysisSub{display:block;color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:400;overflow-wrap:anywhere}
8657
- .ccp-analysisOverview .ccp-analysisMetric{padding:0 24px;border-left:1px solid var(--dsw-alias-border-l2)}
8658
- .ccp-analysisOverview .ccp-analysisMetric:first-child{padding-left:0;border-left:0}
8659
- .ccp-analysisOverview .ccp-analysisMetric:last-child{padding-right:0}
8660
- .ccp-analysisOverview .ccp-analysisValue{font-size:26px;font-weight:600;letter-spacing:-.025em;margin:3px 0}
8661
- .ccp-analysisNote{font-size:12px;color:var(--dsw-alias-label-secondary);margin:8px 0 0}
8662
- .ccp-analysisMessage{margin:10px 0;padding:12px 14px;border:1px solid var(--dsw-alias-border-l2);border-radius:7px;background:var(--dsw-alias-bg-layer-2);font-size:14px}
8663
- .ccp-analysisWarning{border-left:3px solid var(--dsw-alias-state-warn-primary,var(--dsw-alias-label-secondary))}
8664
- .ccp-analysisError{border-left:3px solid var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary)}
8665
- .ccp-analysisTabs{display:flex;gap:24px;border-bottom:1px solid var(--dsw-alias-border-l2);margin:24px 0 0}
8666
- .ccp-analysisTab{position:relative;border:0;background:transparent;font:inherit;font-size:14px;color:var(--dsw-alias-label-secondary);padding:10px 0 12px;cursor:pointer}
8667
- .ccp-analysisTab[aria-selected="true"]{color:var(--dsw-alias-label-primary);font-weight:600}
8668
- .ccp-analysisTab[aria-selected="true"]:after{content:"";position:absolute;bottom:-1px;left:0;right:0;height:2px;background:var(--dsw-alias-brand-primary);border-radius:2px}
8669
- .ccp-analysisPanel{padding-top:18px;min-width:0}
8779
+ .ccp-analysisModelSummary:focus-visible,.ccp-analysisScenarioSummary:focus-visible{outline-offset:-3px;border-radius:6px}
8780
+ .ccp-analysisScope{display:flex;justify-content:space-between;gap:8px 18px;flex-wrap:wrap;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px;margin-bottom:12px}
8781
+ .ccp-analysisScope > span:first-child{color:var(--dsw-alias-label-primary);font-weight:500}
8782
+ .ccp-analysisOverview{display:grid;grid-template-columns:1.45fr repeat(3,1fr);gap:20px;padding:16px 18px;background:var(--dsw-alias-bg-layer-3);border:.5px solid var(--dsw-alias-border-l4);border-radius:16px;font-variant-numeric:tabular-nums}
8783
+ .ccp-analysisMetric{display:flex;flex-direction:column;gap:3px;min-width:0}
8784
+ .ccp-analysisLabel{font-size:12px;line-height:18px;color:var(--dsw-alias-label-tertiary);font-weight:400}
8785
+ .ccp-analysisValue{font-size:14px;line-height:22px;font-weight:500;overflow-wrap:anywhere}
8786
+ .ccp-analysisSub{display:block;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px;font-weight:400;overflow-wrap:anywhere}
8787
+ .ccp-analysisOverview .ccp-analysisMetric{gap:5px}
8788
+ .ccp-analysisOverview .ccp-analysisValue{font-size:20px;line-height:28px;font-weight:500}
8789
+ .ccp-analysisNote{font-size:12px;line-height:18px;color:var(--dsw-alias-label-tertiary);margin:9px 0 0}
8790
+ .ccp-analysisMessage{margin:12px 0 0;padding:12px 14px;border:.5px solid var(--dsw-alias-border-l4);border-radius:12px;background:var(--dsw-alias-bg-layer-3);font-size:14px;line-height:22px}
8791
+ .ccp-analysisWarning{display:flex;align-items:flex-start;gap:8px}
8792
+ .ccp-analysisIcon{flex:none}
8793
+ .ccp-analysisWarning > .ccp-analysisIcon{color:var(--dsw-alias-state-warn-label,var(--dsw-alias-label-secondary));margin-top:3px}
8794
+ .ccp-analysisWarning p{margin:0}
8795
+ .ccp-analysisWarning p + p{margin-top:5px}
8796
+ .ccp-analysisError{color:var(--dsw-alias-state-error-primary)}
8797
+ /* 沿用宿主分段控件的轨道、浮层与胶囊尺寸,保留原有页签键盘语义。 */
8798
+ .ccp-analysisTabs{box-sizing:border-box;display:inline-grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:2px;padding:4px;border:0;border-radius:var(--dsw-radius-md,18px);background:var(--dsw-alias-interactive-bg-hover);margin:22px 0 0;max-width:100%}
8799
+ .ccp-analysisTab{height:28px;padding:0 16px;border:0;border-radius:var(--dsw-radius-sm,14px);background:transparent;font:inherit;font-size:13px;line-height:20px;font-weight:500;color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer}
8800
+ .ccp-analysisTab:hover,.ccp-analysisTab[aria-selected="true"]{color:var(--dsw-alias-label-primary)}
8801
+ .ccp-analysisTab[aria-selected="true"]{background:var(--dsw-alias-bg-layer-1);box-shadow:var(--dsw-elevation-soft)}
8802
+ .ccp-analysisTabCount{display:inline-flex;justify-content:center;min-width:16px;padding:0 4px;margin-left:6px;border-radius:999px;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary);font-size:12px;line-height:18px}
8803
+ .ccp-analysisPanel{padding-top:20px;min-width:0}
8670
8804
  .ccp-analysisPanel[hidden]{display:none}
8671
- .ccp-analysisSectionHead{display:flex;align-items:baseline;justify-content:space-between;gap:8px;flex-wrap:wrap;margin-bottom:12px}
8672
- .ccp-analysisHeading{font-size:14px;font-weight:600;margin:0}
8673
- .ccp-analysisSectionHead .ccp-analysisNote{margin:0}
8674
- .ccp-analysisModels{border:1px solid var(--dsw-alias-border-l2);border-radius:10px;overflow:hidden}
8675
- .ccp-analysisModelRow{border-top:1px solid var(--dsw-alias-border-l2)}
8676
- .ccp-analysisModelRow:first-child{border-top:0}
8677
- .ccp-analysisModelSummary,.ccp-analysisScenarioSummary{position:relative;display:grid;grid-template-columns:minmax(180px,1.65fr) repeat(4,minmax(90px,1fr)) 16px;gap:16px;align-items:center;padding:18px 16px;cursor:pointer;list-style:none;font-variant-numeric:tabular-nums}
8678
- .ccp-analysisScenarioSummary{grid-template-columns:minmax(180px,1.65fr) repeat(2,minmax(90px,1fr)) minmax(90px,.8fr) 16px}
8805
+ .ccp-analysisSectionHead{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}
8806
+ .ccp-analysisHeading{font-size:14px;line-height:22px;font-weight:500;margin:0}
8807
+ .ccp-analysisSectionHead .ccp-analysisNote{margin:0;max-width:56ch}
8808
+ .ccp-analysisModels{border:.5px solid var(--dsw-alias-border-l4);border-radius:16px;overflow:hidden}
8809
+ .ccp-analysisModelRow + .ccp-analysisModelRow{border-top:.5px solid var(--dsw-alias-border-l2)}
8810
+ .ccp-analysisTableHead,.ccp-analysisModelSummary,.ccp-analysisScenarioSummary{position:relative;display:grid;grid-template-columns:minmax(190px,2.1fr) minmax(150px,1.45fr) minmax(90px,.9fr) minmax(90px,.9fr) minmax(100px,1fr) 16px;gap:18px;align-items:center;padding:16px 18px;font-variant-numeric:tabular-nums}
8811
+ .ccp-analysisTableHead{padding-top:11px;padding-bottom:11px;background:var(--dsw-alias-interactive-bg-hover);border-bottom:.5px solid var(--dsw-alias-border-l2);font-size:12px;line-height:18px;color:var(--dsw-alias-label-tertiary)}
8812
+ .ccp-analysisTableHead > span:not(:first-child){text-align:right}
8813
+ .ccp-analysisScenarioHead,.ccp-analysisScenarioSummary{grid-template-columns:minmax(190px,2fr) minmax(118px,1.1fr) minmax(155px,1.35fr) minmax(142px,1.15fr) 16px}
8814
+ .ccp-analysisScenarioHead > span:nth-child(3),.ccp-analysisScenarioHead > span:nth-child(4){text-align:left}
8815
+ .ccp-analysisModelSummary,.ccp-analysisScenarioSummary{cursor:pointer;list-style:none;min-height:60px}
8679
8816
  .ccp-analysisModelSummary::-webkit-details-marker,.ccp-analysisScenarioSummary::-webkit-details-marker,.ccp-analysisDisclosure::-webkit-details-marker{display:none}
8680
- .ccp-analysisModelSummary:hover,.ccp-analysisScenarioSummary:hover{background:var(--dsw-alias-interactive-bg-hover,var(--dsw-alias-bg-layer-2))}
8681
- .ccp-analysisIdentity{display:flex;flex-direction:column;gap:5px;min-width:0}
8682
- .ccp-analysisModelName{font-size:14px;font-weight:600;overflow-wrap:anywhere}
8683
- .ccp-analysisChevron{flex:none;color:var(--dsw-alias-label-secondary)}
8817
+ .ccp-analysisModelSummary:hover,.ccp-analysisScenarioSummary:hover{background:var(--dsw-alias-interactive-bg-hover)}
8818
+ .ccp-analysisIdentity{display:flex;flex-direction:column;gap:2px;min-width:0}
8819
+ .ccp-analysisModelName{font-size:14px;line-height:22px;font-weight:500;overflow-wrap:anywhere}
8820
+ .ccp-analysisModelCount{margin-top:3px}
8821
+ .ccp-analysisModelSummary > .ccp-analysisMetric,.ccp-analysisScenarioSummary > .ccp-analysisMetric{align-items:flex-end}
8822
+ .ccp-analysisScenarioSummary > .ccp-analysisMetric:nth-child(3),.ccp-analysisScenarioSummary > .ccp-analysisMetric:nth-child(4){align-items:flex-start}
8823
+ /* 宽表使用集中表头,但保留每个指标的无障碍标签;窄面板恢复可见标签。 */
8824
+ .ccp-analysisModelSummary .ccp-analysisMetricLabel,.ccp-analysisScenarioSummary .ccp-analysisMetricLabel,.ccp-analysisSearchLabel{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
8825
+ .ccp-analysisShare{display:flex;align-items:center;gap:8px;width:100%;max-width:148px;margin-top:3px}
8826
+ .ccp-analysisShareTrack{display:block;flex:1;height:4px;overflow:hidden;background:var(--dsw-alias-bg-module-platform);border-radius:999px}
8827
+ .ccp-analysisShareFill{display:block;height:100%;background:var(--dsw-alias-label-secondary);border-radius:999px}
8828
+ .ccp-analysisShareValue{font-size:12px;line-height:18px;min-width:40px;text-align:right;color:var(--dsw-alias-label-tertiary)}
8829
+ .ccp-analysisChevron{flex:none;color:var(--dsw-alias-label-tertiary)}
8684
8830
  .ccp-analysisModelRow[open] > .ccp-analysisModelSummary > .ccp-analysisChevron,.ccp-analysisModelRow[open] > .ccp-analysisScenarioSummary > .ccp-analysisChevron,.ccp-analysisAggregate[open] > .ccp-analysisDisclosure > .ccp-analysisChevron,.ccp-analysisRules[open] > .ccp-analysisDisclosure > .ccp-analysisChevron{transform:rotate(90deg)}
8685
- .ccp-analysisDetails{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:24px;padding:18px 16px 22px;background:var(--dsw-alias-bg-layer-2);border-top:1px solid var(--dsw-alias-border-l2)}
8686
- .ccp-analysisDetailTitle{font-size:12px;font-weight:600;margin:0 0 10px}
8831
+ .ccp-analysisDetails{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:22px;padding:16px 18px;background:var(--dsw-alias-bg-module-platform);border-top:.5px solid var(--dsw-alias-border-l2)}
8832
+ .ccp-analysisDetailTitle{font-size:12px;line-height:18px;font-weight:600;margin:0 0 11px}
8687
8833
  .ccp-analysisFacts{margin:0;display:flex;flex-direction:column;gap:8px}
8688
- .ccp-analysisFact{display:flex;align-items:baseline;justify-content:space-between;gap:12px;min-width:0}
8689
- .ccp-analysisFactValue{font-size:14px;margin:0;text-align:right;font-variant-numeric:tabular-nums;overflow-wrap:anywhere;min-width:0}
8834
+ .ccp-analysisFact{display:flex;align-items:baseline;justify-content:space-between;gap:10px;min-width:0}
8835
+ .ccp-analysisFactValue{font-size:14px;line-height:22px;margin:0;text-align:right;font-variant-numeric:tabular-nums;overflow-wrap:anywhere;min-width:0}
8690
8836
  .ccp-analysisFact .ccp-analysisLabel{flex-shrink:0}
8691
- .ccp-analysisAggregate{margin-top:12px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;overflow:hidden}
8692
- .ccp-analysisDisclosure{display:flex;gap:8px;align-items:center;cursor:pointer;list-style:none;font-size:12px;color:var(--dsw-alias-label-secondary);padding:11px 14px}
8693
- .ccp-analysisMonthly{margin:16px 0 0;display:flex;flex-wrap:wrap;gap:4px 12px;align-items:baseline;font-size:12px;color:var(--dsw-alias-label-secondary)}
8694
- .ccp-analysisMonthlyValue{font-size:14px;font-weight:500;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums}
8837
+ .ccp-analysisFooter{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;flex-wrap:wrap;margin-top:14px}
8838
+ .ccp-analysisAggregate{flex:1;min-width:210px}
8839
+ .ccp-analysisAggregate > .ccp-analysisDetails{border:.5px solid var(--dsw-alias-border-l4);border-radius:8px;margin-top:6px}
8840
+ .ccp-analysisDisclosure{display:flex;gap:7px;align-items:center;cursor:pointer;list-style:none;font-size:12px;line-height:18px;color:var(--dsw-alias-label-tertiary);padding:7px 0}
8841
+ .ccp-analysisDisclosure > .ccp-analysisChevron{width:14px;height:14px}
8842
+ .ccp-analysisMonthly{flex:none;max-width:340px;display:flex;justify-content:flex-end;flex-wrap:wrap;gap:2px 8px;align-items:baseline;text-align:right;font-size:12px;line-height:18px;color:var(--dsw-alias-label-tertiary);padding-top:5px}
8843
+ .ccp-analysisMonthlyValue{font-size:14px;line-height:22px;font-weight:500;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums}
8695
8844
  .ccp-analysisMonthly .ccp-analysisNote{width:100%;margin:0}
8696
- .ccp-analysisAssumption{font-size:14px;line-height:1.6;color:var(--dsw-alias-label-secondary);margin:0 0 16px}
8697
- .ccp-analysisSearch{max-width:360px;margin-bottom:16px}
8698
- .ccp-analysisCapability{font-size:12px;color:var(--dsw-alias-label-secondary)}
8845
+ .ccp-analysisAssumption{font-size:14px;line-height:22px;color:var(--dsw-alias-label-tertiary);margin:0 0 18px;max-width:76ch}
8846
+ .ccp-analysisSearch{flex:0 1 270px}
8847
+ .ccp-analysisSearchShell{position:relative;display:block}
8848
+ .ccp-analysisSearchShell > .ccp-analysisIcon{position:absolute;top:10px;left:11px;color:var(--dsw-alias-label-tertiary);pointer-events:none}
8849
+ .ccp-analysisSearch .ccp-analysisInput{padding-left:35px}
8699
8850
  .ccp-analysisScenarioDetails{grid-template-columns:minmax(0,1fr) minmax(0,2fr)}
8700
- .ccp-analysisScenarioDetails .ccp-analysisFactValue{max-width:75%}
8701
- .ccp-analysisEmpty{font-size:14px;color:var(--dsw-alias-label-secondary);text-align:center;padding:32px 16px;margin:0;border:1px dashed var(--dsw-alias-border-l2);border-radius:8px}
8702
- .ccp-analysisRules{margin-top:22px;border-top:1px solid var(--dsw-alias-border-l2)}
8703
- .ccp-analysisRules .ccp-analysisDisclosure{padding:14px 0}
8704
- .ccp-analysisRulesBody{color:var(--dsw-alias-label-secondary);font-size:14px;padding-bottom:4px}
8705
- .ccp-analysisRulesBody p{margin:0 0 12px}
8706
- @media (max-width:860px){
8707
- .ccp-analysisOverview .ccp-analysisMetric{padding:0 16px}
8708
- .ccp-analysisOverview .ccp-analysisValue{font-size:22px}
8709
- .ccp-analysisModelSummary{grid-template-columns:repeat(4,minmax(0,1fr)) 16px;gap:12px 16px}
8710
- .ccp-analysisScenarioSummary{grid-template-columns:repeat(3,minmax(0,1fr)) 16px;gap:12px 16px}
8851
+ .ccp-analysisScenarioDetails .ccp-analysisFactValue{max-width:70%}
8852
+ .ccp-analysisEmpty{font-size:14px;line-height:22px;color:var(--dsw-alias-label-tertiary);text-align:center;padding:34px 18px;margin:0;border:1px dashed var(--dsw-alias-border-l4);border-radius:8px}
8853
+ .ccp-analysisRules{margin-top:22px;border-top:.5px solid var(--dsw-alias-border-l2);padding-top:8px}
8854
+ .ccp-analysisRulesBody{display:grid;grid-template-columns:1fr 1fr;gap:24px;color:var(--dsw-alias-label-tertiary);font-size:14px;line-height:22px;margin-top:9px}
8855
+ .ccp-analysisRulesBody p{margin:0 0 10px}
8856
+ @container ccp-analysis (max-width:920px){
8857
+ .ccp-analysisTableHead{display:none}
8858
+ .ccp-analysisModelSummary{grid-template-columns:repeat(4,minmax(0,1fr)) 16px;gap:12px 18px}
8859
+ .ccp-analysisScenarioSummary{grid-template-columns:repeat(3,minmax(0,1fr)) 16px;gap:12px 18px}
8711
8860
  .ccp-analysisModelSummary > .ccp-analysisIdentity,.ccp-analysisScenarioSummary > .ccp-analysisIdentity{grid-column:1/-2}
8712
- .ccp-analysisModelSummary > .ccp-analysisChevron{grid-column:5;grid-row:1}
8713
- .ccp-analysisScenarioSummary > .ccp-analysisChevron{grid-column:4;grid-row:1}
8861
+ .ccp-analysisModelSummary > .ccp-analysisChevron{grid-column:5;grid-row:1;justify-self:end}
8862
+ .ccp-analysisScenarioSummary > .ccp-analysisChevron{grid-column:4;grid-row:1;justify-self:end}
8863
+ .ccp-analysisModelSummary > .ccp-analysisMetric,.ccp-analysisScenarioSummary > .ccp-analysisMetric{align-items:flex-start}
8864
+ .ccp-analysisModelSummary .ccp-analysisMetricLabel,.ccp-analysisScenarioSummary .ccp-analysisMetricLabel{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}
8714
8865
  .ccp-analysisDetails{grid-template-columns:repeat(2,minmax(0,1fr))}
8715
8866
  }
8716
- @media (max-width:640px){
8717
- .ccp-mainInnerAnalysis{padding:20px 16px 32px}
8718
- .ccp-analysisFilters{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
8719
- .ccp-analysisFilters .ccp-analysisField{min-width:0}
8720
- .ccp-analysisApply{grid-column:1/-1}
8721
- .ccp-analysisOverview{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px 0;padding:20px 0}
8722
- .ccp-analysisOverview .ccp-analysisMetric{padding:0 12px}
8723
- .ccp-analysisOverview .ccp-analysisMetric:nth-child(odd){border-left:0;padding-left:0}
8724
- .ccp-analysisOverview .ccp-analysisValue{font-size:22px}
8725
- .ccp-analysisModelSummary,.ccp-analysisScenarioSummary{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;padding:16px}
8867
+ @container ccp-analysis (max-width:588px){
8868
+ .ccp-analysisFilters{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
8869
+ .ccp-analysisFilters[data-mode="range"] .ccp-analysisScopeField{grid-column:1/-1}
8870
+ .ccp-analysisApply{grid-column:1/-1;margin:0;width:100%}
8871
+ .ccp-analysisOverview{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px 18px;padding:16px}
8872
+ .ccp-analysisModelSummary,.ccp-analysisScenarioSummary{grid-template-columns:repeat(2,minmax(0,1fr));gap:15px 18px;padding:16px}
8726
8873
  .ccp-analysisModelSummary > .ccp-analysisIdentity,.ccp-analysisScenarioSummary > .ccp-analysisIdentity{grid-column:1/-1;padding-right:24px}
8727
- .ccp-analysisModelSummary > .ccp-analysisChevron,.ccp-analysisScenarioSummary > .ccp-analysisChevron{position:absolute;top:19px;right:16px;grid-column:auto;grid-row:auto}
8728
- .ccp-analysisDetails{gap:20px;grid-template-columns:1fr}
8729
- .ccp-analysisFactValue{max-width:65%}
8730
- .ccp-analysisSearch{max-width:none}
8874
+ .ccp-analysisModelSummary > .ccp-analysisChevron,.ccp-analysisScenarioSummary > .ccp-analysisChevron{position:absolute;top:18px;right:16px;grid-column:auto;grid-row:auto}
8875
+ .ccp-analysisDetails,.ccp-analysisScenarioDetails{gap:20px;grid-template-columns:1fr;padding:16px}
8876
+ .ccp-analysisAggregate{width:100%;min-width:0}
8877
+ .ccp-analysisMonthly{width:100%;max-width:none;justify-content:flex-start;text-align:left;padding-top:0}
8878
+ .ccp-analysisSectionHead{align-items:flex-start}
8879
+ .ccp-analysisSectionHead .ccp-analysisSearch{flex-basis:100%;width:100%;order:2}
8880
+ .ccp-analysisRulesBody{grid-template-columns:1fr;gap:12px}
8881
+ /* 英文页签带数量时允许换行,避免轨道或文字撑出宿主的窄面板。 */
8882
+ .ccp-analysisTabs{margin-top:18px;grid-auto-columns:minmax(0,1fr)}
8883
+ .ccp-analysisTab{height:auto;min-height:28px;padding:4px 8px;white-space:normal}
8731
8884
  }
8885
+ @media (max-width:640px){.ccp-mainInnerAnalysis{padding:20px 16px 32px}}
8732
8886
  `;
8733
8887
  //#endregion
8734
8888
  //#region src/client/analytics.ts